@kodax-ai/kodax 0.7.78 → 0.7.79

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 (124) hide show
  1. package/CHANGELOG.md +3475 -3197
  2. package/README.md +346 -275
  3. package/README_CN.md +274 -214
  4. package/config-templates/config.example.jsonc +11 -1
  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-ASP4MS3X.js → agent-V4AC5JZD.js} +1 -1
  30. package/dist/chunks/argument-completer-ZPC2MLES.js +2 -0
  31. package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-67THZRM6.js} +1 -1
  32. package/dist/chunks/chunk-6GVQDQTQ.js +292 -0
  33. package/dist/chunks/{chunk-TQDBTTIM.js → chunk-B6UY3VHV.js} +40 -40
  34. package/dist/chunks/{chunk-7OEBJGHK.js → chunk-BBOVVDQJ.js} +1 -1
  35. package/dist/chunks/chunk-CR2IF7VF.js +30 -0
  36. package/dist/chunks/{chunk-UID7BLAB.js → chunk-CXHEZY5G.js} +1 -1
  37. package/dist/chunks/chunk-EDZ4QILG.js +266 -0
  38. package/dist/chunks/chunk-GEECPO2H.js +218 -0
  39. package/dist/chunks/chunk-H5LLM7DB.js +89 -0
  40. package/dist/chunks/chunk-KLWP7POA.js +467 -0
  41. package/dist/chunks/{chunk-2CFHBKRE.js → chunk-M4N2JZTZ.js} +2 -2
  42. package/dist/chunks/{chunk-YAZQTC2L.js → chunk-OWQT3FTE.js} +1 -1
  43. package/dist/chunks/chunk-Q4M7DJOD.js +319 -0
  44. package/dist/chunks/{chunk-6FOJVETH.js → chunk-QCZLCLFL.js} +7 -7
  45. package/dist/chunks/chunk-RQPMGRTR.js +810 -0
  46. package/dist/chunks/chunk-SG6P4SZS.js +123 -0
  47. package/dist/chunks/chunk-TSTVAU5E.js +386 -0
  48. package/dist/chunks/chunk-ZCZZUE5E.js +662 -0
  49. package/dist/chunks/compaction-config-AEUGVROL.js +2 -0
  50. package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-K3ZGEN5N.js} +1 -1
  51. package/dist/chunks/dist-GFJFRPAV.js +2 -0
  52. package/dist/chunks/{dist-BFT5YIGU.js → dist-JMO47GJV.js} +1 -1
  53. package/dist/chunks/host-23K2Q6RZ.js +2 -0
  54. package/dist/chunks/run-manager-PGIR6ITA.js +2 -0
  55. package/dist/chunks/{utils-SID4HW2Q.js → utils-6LEKJPQN.js} +1 -1
  56. package/dist/index.d.ts +20 -20
  57. package/dist/index.js +2 -2
  58. package/dist/kodax_bootstrap.js +2 -1
  59. package/dist/kodax_cli.js +1816 -1458
  60. package/dist/kodax_resume.js +570 -34
  61. package/dist/provider-capabilities.json +85 -50
  62. package/dist/runtime-worker.js +1713 -1361
  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 +73 -141
  67. package/dist/sdk-agent.js +1 -1
  68. package/dist/sdk-coding.d.ts +29 -60
  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 +25 -26
  79. package/dist/sdk-repl.js +2 -2
  80. package/dist/sdk-runtime.d.ts +227 -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-CNSidpmv.d.ts} +28 -7
  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-B3q98pLQ.d.ts} +9 -7
  91. package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-RGV7Pjv9.d.ts} +328 -3
  92. package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-1NLSFTyN.d.ts} +126 -52
  93. package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-BAegI14A.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-BpJhHoa7.d.ts} +334 -25
  96. package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-CZ12Ow3X.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-CX3AUocA.d.ts} +1 -1
  99. package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-B3cfJKqF.d.ts} +3 -3
  100. package/dist/types-chunks/{side-query.d-DTuLPcC5.d.ts → side-query.d-CP1LiRiH.d.ts} +8 -2
  101. package/dist/types-chunks/{types-D3g6XUQr.d.ts → types-Bf3Y3mW-.d.ts} +1 -1
  102. package/dist/types-chunks/{types.d-BH0ZkTGf.d.ts → types.d-BZ9oXvTV.d.ts} +2 -2
  103. package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-C0_rn--1.d.ts} +4 -4
  104. package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
  105. package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-CGpHavsU.d.ts} +14 -6
  106. package/docs/SDK_EMBEDDER_GUIDE.md +1144 -598
  107. package/package.json +4 -1
  108. package/dist/chunks/argument-completer-JYQ7FX3W.js +0 -2
  109. package/dist/chunks/chunk-35PPHOQ2.js +0 -292
  110. package/dist/chunks/chunk-43QNNDHR.js +0 -29
  111. package/dist/chunks/chunk-5GO6FH7L.js +0 -458
  112. package/dist/chunks/chunk-5NDCSFOP.js +0 -78
  113. package/dist/chunks/chunk-6XM4B6K2.js +0 -48
  114. package/dist/chunks/chunk-6YZUE6NC.js +0 -240
  115. package/dist/chunks/chunk-KQLQYHWU.js +0 -386
  116. package/dist/chunks/chunk-NXO6GWSY.js +0 -46
  117. package/dist/chunks/chunk-T2XZTLYE.js +0 -316
  118. package/dist/chunks/chunk-VAT2QYXM.js +0 -765
  119. package/dist/chunks/chunk-YVRYHC4C.js +0 -655
  120. package/dist/chunks/compaction-config-BQSSIWK5.js +0 -2
  121. package/dist/chunks/dist-PCFE24YP.js +0 -2
  122. package/dist/chunks/host-UTFXCYYM.js +0 -2
  123. package/dist/chunks/run-manager-PJU3WIFJ.js +0 -2
  124. package/dist/types-chunks/guardrail.d-BRE_ErEj.d.ts +0 -156
@@ -0,0 +1,218 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{a as Bn}from"./chunk-H5LLM7DB.js";import{a as o}from"./chunk-ONUPGMER.js";import{getEncoding as Sc}from"js-tiktoken";var Hn=null;function _c(){return Hn||(Hn=Sc("cl100k_base")),Hn}o(_c,"getEncoder");function ge(e){return e?_c().encode(e).length:0}o(ge,"countTextTokens");function Rc(e){let t=4;if(typeof e.content=="string")t+=ge(e.content);else for(let n of e.content)n.type==="text"?t+=ge(n.text):n.type==="tool_use"?(t+=ge(n.name),t+=ge(JSON.stringify(n.input))):n.type==="tool_result"?(t+=4,t+=typeof n.content=="string"?ge(n.content):n.content.reduce((r,i)=>r+(i.type==="text"?ge(i.text):1500),0)):n.type==="thinking"?t+=ge(n.thinking):n.type==="image"&&(t+=1500);return t}o(Rc,"countMessageTokens");var Ui=new WeakMap;function $w(e){let t=0;for(let n of e){let r=Ui.get(n);if(r!==void 0){t+=r;continue}let i=Rc(n);Ui.set(n,i),t+=i}return t}o($w,"estimateTokens");function Cw(e){return ge(e)}o(Cw,"countTokens");var Dt=[];function Dw(e){let t={id:Symbol("kodax-diagnostic-sink"),sink:e};Dt.push(t);let n=!1;return()=>{if(n)return;n=!0;let r=Dt.findIndex(i=>i.id===t.id);r>=0&&Dt.splice(r,1)}}o(Dw,"setKodaXDiagnosticSink");function H(e){let t=Bn(e),n=Dt.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${xc(t)}
3
+ `)}catch{}}o(H,"emitKodaXDiagnostic");function xc(e){let t=Bn(e),n=Ac(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}o(xc,"formatKodaXDiagnostic");function Ac(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)}}o(Ac,"formatDiagnosticDetail");import{mkdirSync as Ec}from"node:fs";import{homedir as qn}from"node:os";import{isAbsolute as jc,normalize as Pc,resolve as zn,sep as Bi}from"node:path";import{join as Tt}from"node:path";var $c=".kodax",Cc="KODAX_HOME",Wn;function Hw(e){Wn=e}o(Hw,"setAgentConfigHome");function Hi(){if(Wn)return Wn;let e=process.env[Cc];return e&&e.length>0?e:Tt(qn(),$c)}o(Hi,"getAgentConfigHome");function O(...e){return Tt(Hi(),...e)}o(O,"getAgentConfigPath");function qw(e,t){let n=o(a=>{let c=Pc(zn(a));return process.platform==="win32"?c.toLowerCase():c},"comparable"),r=n(e),i=n(t),s=i.endsWith(Bi)?i:`${i}${Bi}`;return r===i||r.startsWith(s)}o(qw,"isPathInsideDirectory");function zw(e,t){let n=e==="~"?qn():e.startsWith("~/")||e.startsWith("~\\")?Tt(qn(),e.slice(2)):e;return jc(n)?zn(n):zn(t,n)}o(zw,"resolveExecutionPath");function Ww(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=Tt(Hi(),"apps",e);return Ec(t,{recursive:!0}),t}o(Ww,"getAppDataDir");import{createHash as qi}from"node:crypto";var zi=["tenantId","workspaceId","userId","agentId","projectId","sessionId"];function Mt(e,t){return zi.every(n=>t[n]===void 0||t[n]===e[n])}o(Mt,"matchesMemoryApplicability");function x(e,t){if(t.length===0)throw new Error(`${e} identity must not be empty`);return qi("sha256").update(`${e}\0${t}`).digest("hex")}o(x,"hashMemoryIdentityComponent");function Jn(e){let t=zi.filter(n=>e[n]!==void 0).map(n=>`${n}=${e[n]}`).join("\0");return qi("sha256").update(t).digest("hex")}o(Jn,"memoryApplicabilityFingerprint");var Ot="f275-v0.7.77.1";import{createHash as Lc}from"node:crypto";import{execSync as Fc}from"node:child_process";import*as q from"node:path";function Ne(e){return Nc(e).trim().replace(/^ssh:\/\//,"").replace(/^https?:\/\//,"").replace(/^git@/,"").replace(/\.git$/,"").replace(/[:@/\\]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}o(Ne,"sanitizeProjectKey");function Nc(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(/[?#].*$/,"")}}o(Nc,"remoteWithoutCredentials");function De(e){let t=q.resolve(e).toLowerCase();return Lc("sha256").update(t).digest("hex").slice(0,16)}o(De,"hashCwd");function Te(e){try{let n=Fc("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}}o(Te,"tryGitRemote");function Kt(e){let t=Te(e),n=t?Ne(t):`local-${De(e)}`;return O("projects",n,"memory")}o(Kt,"resolveMemoryRoot");function Dc(e){return q.join(Kt(e),"MEMORY.md")}o(Dc,"resolveMemoryEntrypoint");function _e(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",x("tenant",e.tenantId),t,x(t,r)];return e.configHome===void 0?O(...i):q.join(e.configHome,...i)}o(_e,"resolveScopedMemoryRoot");function Tc(e){let t=Vn(e),n=Vn(O("memory-scopes"));if(t.startsWith(n+q.sep)){let a=t.slice(n.length+1).split(q.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=Vn(O("projects"));if(!t.startsWith(r+q.sep))return!1;let s=t.slice(r.length+1).split(q.sep);return s.length>=3&&s[1]==="memory"}o(Tc,"isAutoManagedMemoryFile");function Vn(e){let t=q.resolve(e);return process.platform==="win32"?t.toLowerCase():t}o(Vn,"comparablePath");function Mc(e){let t=q.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"}o(Mc,"parseMemoryTypeFromFilename");var Oc=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function Wi(e){if(e==="user"||e==="feedback"||e==="project"||e==="reference")return e}o(Wi,"parseMemoryType");function we(e){let t=Oc.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=Ji(n);return{frontmatter:{name:typeof i.name=="string"?i.name:void 0,description:typeof i.description=="string"?i.description:void 0,type:Wi(i.type)},body:r}}o(we,"parseMemoryFile");function Ji(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 s=r.slice(0,i).trim();if(!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(s))continue;let a=r.slice(i+1).trim(),c=Kc(a);c!==void 0&&(t[s]=c)}return t}o(Ji,"parseScalarFields");function Kc(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}}o(Kc,"unquote");var Uc=200,Bc=25e3;function Hc(e){let t=e.trim(),n=t.length===0?[]:t.split(`
4
+ `),r=n.length,i=Buffer.byteLength(t,"utf-8"),s=r>200,a=i>25e3;if(!s&&!a)return{content:t,lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a};let c=s?n.slice(0,200).join(`
5
+ `):t;return Buffer.byteLength(c,"utf-8")>25e3&&(c=zc(c,25e3)),{content:c+`
6
+
7
+ `+qc({lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}),lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}}o(Hc,"truncateEntrypointContent");function qc(e){let{lineCount:t,byteCount:n,wasLineTruncated:r,wasByteTruncated:i}=e;return`> WARNING: MEMORY.md is ${i&&!r?`${Yn(n)} (limit: ${Yn(25e3)}) \u2014 index entries are too long`:r&&!i?`${t} lines (limit: 200)`:`${t} lines and ${Yn(n)}`}. Only part of it was loaded. Keep index entries to one line under ~200 chars; move detail into topic files.`}o(qc,"formatTruncationWarning");function zc(e,t){let n=Buffer.from(e,"utf-8");if(n.length<=t)return e;let r=10,i=-1;for(let s=t-1;s>=0;s--)if(n[s]===r){i=s;break}return i>0?n.subarray(0,i).toString("utf-8"):n.subarray(0,t).toString("utf-8")}o(zc,"sliceToByteCap");function Yn(e){return e<1e3?`${e} B`:`${(e/1e3).toFixed(1)} KB`}o(Yn,"formatFileSize");import Wc from"path";var et=new Set;function Vi(e){let t=e.trim();if(!t)throw new Error("Plugin skill path cannot be empty.");return Wc.resolve(t)}o(Vi,"normalizePluginSkillPath");function Jc(e){let t=Vi(e);return et.add(t),()=>{et.delete(t)}}o(Jc,"registerPluginSkillPath");function Vc(e){return et.delete(Vi(e))}o(Vc,"unregisterPluginSkillPath");function Gn(){return Array.from(et.values())}o(Gn,"listPluginSkillPaths");function Yc(){et.clear()}o(Yc,"clearPluginSkillPaths");import{homedir as Gc}from"os";import Me from"path";import{fileURLToPath as Xc}from"url";import{dirname as Qc}from"path";var Zc=Xc(import.meta.url),ed=Qc(Zc);function td(){return process.env.KODAX_BUNDLED==="true"?Me.join(Me.dirname(process.execPath),"builtin"):Me.join(ed,"builtin")}o(td,"resolveBuiltinPath");function Xn(e){let t=Gc();return{projectPaths:e?[Me.join(e,".kodax","skills")]:[],userPaths:[Me.join(t,".kodax","skills"),Me.join(t,".agents","skills")],pluginPaths:Gn(),builtinPath:td()}}o(Xn,"getDefaultSkillPaths");function Qn(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}o(Qn,"getSkillPathsFlat");import{readFile as Zn,readdir as sd}from"fs/promises";import{join as ye,relative as ad}from"path";import Yi from"yaml";var nd=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function rd(e){let t=e.split(`
8
+ `),n=[];for(let r of t){let i=r.indexOf(":");if(i>0){let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();if(a.includes(":")&&!a.startsWith('"')&&!a.startsWith("'")&&!a.startsWith("[")&&!a.startsWith("|")&&!a.startsWith(">")){n.push(`${s}: |-`),n.push(` ${a}`);continue}}n.push(r)}return n.join(`
9
+ `)}o(rd,"sanitizeYaml");function Gi(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),s=n.slice(r+5).trim(),a;try{a=Yi.parse(i)??{}}catch{a=Yi.parse(rd(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,s]}return[a,s]}o(Gi,"parseYamlFrontmatter");function Xi(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}}o(Xi,"normalizeAllowedToolsString");function id(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}}}o(id,"normalizeYamlHookEntry");function od(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>id(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(od,"normalizeYamlHookEntryList");function Qi(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of nd){let i=od(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(Qi,"normalizeYamlHookMap");function er(e){let[t,n]=Gi(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:Xi(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:Qi(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}}o(er,"parseSkillMarkdown");async function Ut(e,t){let n=ye(e,"SKILL.md");try{let r=await Zn(n,"utf-8"),{frontmatter:i}=er(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 H({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${e}.`,detail:r}),null}}o(Ut,"loadSkillMetadata");async function tt(e,t){let n=ye(e,"SKILL.md");try{let r=await Zn(n,"utf-8"),{frontmatter:i,body:s}=er(r),[a,c,d,l,f]=await Promise.all([Oe(ye(e,"scripts")),Oe(ye(e,"references")),Oe(ye(e,"assets")),Oe(ye(e,"templates")),Oe(ye(e,"resources"))]);return{...i,path:e,skillFilePath:n,content:s,rawContent:s,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 H({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}o(tt,"loadFullSkill");async function Oe(e,t=e){let n=[];try{let r=await sd(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=ye(e,i.name);if(i.isDirectory()){n.push(...await Oe(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:ad(t,s).replace(/\\/g,"/")})}}catch{}return n}o(Oe,"loadSkillFiles");async function cd(e){if(e.content)return e.content;let t=await Zn(e.path,"utf-8");return e.content=t,t}o(cd,"loadSkillFileContent");var dd="KODAX_LEARNING_DEFAULT_CONFIDENCE",ld="KODAX_LEARNING_CONFIDENCE_FLOOR";function Zi(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}o(Zi,"readConfidenceEnv");function fd(){return Zi(dd,.5)}o(fd,"defaultConfidence");function ud(){return Zi(ld,.3)}o(ud,"activeSuggestionConfidenceFloor");function tr(e,t){return{destination:"discard",proposalId:e,reason:t}}o(tr,"discard");function pd(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??fd()}}o(pd,"skillProposal");function nr(e){if(!e.completedTurn)return tr(e.proposalId,"procedural learning requires a completed turn");let t=e.candidate;if("confidence"in t&&typeof t.confidence=="number"&&t.confidence<ud())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 pd(e);case"workflow_handoff":return t.workflowStatus!=="completed"?tr(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}:tr(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}}}o(nr,"triageProceduralLearning");var md=new Set(["builtin","plugin","learned","external"]),hd=new Set(["archive","quarantine","delete","consolidate"]);function eo(e){return e==="background_learning"}o(eo,"canMarkCreatedByAgent");function rr(e){return e.action==="record_usage"?{allowed:!0,mode:"telemetry",reason:"usage telemetry is best-effort and source-independent"}:e.pinned&&hd.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"}:md.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"}:eo(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"}}o(rr,"decideSkillGovernance");import{copyFile as gd,lstat as ir,mkdir as Bt,realpath as or,rename as wd,rm as yd,writeFile as no}from"fs/promises";import{basename as vd,dirname as sr,isAbsolute as ro,join as Ke,relative as kd,resolve as Ht}from"path";var io=64*1024,oo=256*1024,bd=new Set(["references","templates","scripts","assets"]);async function Id(e){try{return{root:await or(e.skillRoot),existed:!0}}catch(t){if(t.code!=="ENOENT"||e.createSkillRoot!==!0)throw t;return{root:Ht(e.skillRoot),existed:!1}}}o(Id,"resolveSkillRootForValidation");function so(e,t){let n=kd(e,t);return n===""||!n.startsWith("..")&&!ro(n)}o(so,"isInside");function nt(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}o(nt,"isMissingFile");function Sd(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,96)||"proposal"}o(Sd,"sanitizeProposalId");async function _d(e){try{return await or(e)}catch(t){if(!nt(t))throw t;return Ht(e)}}o(_d,"resolveSnapshotSkillRoot");async function qt(e){let t=await _d(e.skillRoot);return{snapshotBase:Ht(e.snapshotRoot??Ke(sr(t),".kodax-learning-snapshots")),proposalPrefix:`${Sd(e.proposalId)}-`}}o(qt,"resolveSkillSnapshotLocation");function Rd(e){if(e.includes("\0"))throw new Error("skill proposal path contains a null byte");if(ro(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("/")}o(Rd,"normalizeRelativePath");function xd(e,t){if(t==="SKILL.md")return;let[n,r]=t.split("/");if(!n||!bd.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")}o(xd,"assertSupportedPath");function Ad(e,t){if(e.kind!=="write")return;if(Buffer.byteLength(e.content,"utf8")>(t==="SKILL.md"?io:oo))throw new Error(`skill proposal file is too large: ${t}`)}o(Ad,"assertContentSize");async function Ed(e,t){let n;try{n=await ir(t)}catch(r){if(nt(r)&&e.kind==="delete")throw new Error(`skill proposal delete target does not exist: ${e.relativePath}`);if(!nt(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")}o(Ed,"assertExistingTargetSafe");async function jd(e,t){let n=t.split("/").slice(0,-1),r=e;for(let i of n){r=Ke(r,i);let s;try{s=await ir(r)}catch(a){if(!nt(a))throw a;return}if(s.isSymbolicLink())throw new Error("skill proposal refuses paths through symlink directories");if(!s.isDirectory())throw new Error("skill proposal parent path is not a directory")}}o(jd,"assertExistingAncestorsSafe");async function to(e){if(e.changes.length===0)throw new Error("skill proposal must contain at least one change");let t=await Id(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 s=Rd(i.relativePath);xd(i,s),Ad(i,s);let a=Ht(n,...s.split("/"));if(!so(n,a))throw new Error("skill proposal path resolves outside skill root");t.existed&&(await jd(n,s),await Ed(i,a)),r.push({change:i,absolutePath:a,normalizedRelativePath:s})}return{root:n,rootExisted:t.existed,changes:r}}o(to,"validateSkillMutationPlan");async function Pd(e,t,n){let r=await qt({proposalId:e.proposalId,skillRoot:t,...e.snapshotRoot!==void 0?{snapshotRoot:e.snapshotRoot}:{}}),i=Ke(r.snapshotBase,`${r.proposalPrefix}${Date.now().toString(36)}`);await Bt(i,{recursive:!0});for(let s of n){try{await ir(s.absolutePath)}catch(c){if(!nt(c))throw c;continue}let a=Ke(i,s.normalizedRelativePath);await Bt(sr(a),{recursive:!0}),await gd(s.absolutePath,a)}return await no(Ke(i,"manifest.json"),`${JSON.stringify({proposalId:e.proposalId,createdAt:new Date().toISOString(),changedPaths:n.map(s=>s.normalizedRelativePath)},null,2)}
16
+ `,"utf8"),i}o(Pd,"createSnapshot");async function $d(e,t,n,r){let i=sr(t);await Bt(i,{recursive:!0});let s=await or(i);if(!so(e,s))throw new Error("skill proposal parent directory resolves outside skill root");let a=Ke(i,`.${vd(t)}.kodax-${process.pid}-${Date.now().toString(36)}-${r}.tmp`);try{await no(a,n,"utf8"),await wd(a,t)}catch(c){throw await yd(a,{force:!0}),c}}o($d,"atomicWriteFile");async function Cd(e,t){for(let[n,r]of t.entries()){if(r.change.kind==="write"){await $d(e,r.absolutePath,r.change.content,n);continue}throw new Error("skill proposal delete is outside the F224 learning loop")}}o(Cd,"applyValidatedChanges");async function ao(e){let t=await to(e),n=t.changes.map(s=>s.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 Bt(e.skillRoot,{recursive:!0});let r=await to(e),i=await Pd(e,r.root,r.changes);return await Cd(r.root,r.changes),{proposalId:e.proposalId,validated:!0,applied:!0,changedPaths:r.changes.map(s=>s.normalizedRelativePath),...i!==void 0?{snapshotPath:i}:{}}}o(ao,"applySkillMutationProposal");import{randomUUID as fo}from"node:crypto";import{mkdir as uo,open as po,readFile as xe,readdir as cr,rm as Ld,stat as Vt,writeFile as mo}from"node:fs/promises";import{dirname as Fd,join as ar}from"node:path";var Nd=5e3,Wt=10,ho=3e4,Dd=16,co=8;async function F(e,t,n=Nd){await uo(Fd(e),{recursive:!0});let r=await Td(e,n);try{return await t()}finally{try{await r.handle.close()}finally{await yo(e,r.token)}}}o(F,"withLearningFileLock");async function Td(e,t){let n=Date.now()+t,r=await Md(e),i,s=!1;try{for(await Od(r,n,e);;){await go(r);try{return i=await qd(e),i}catch(a){let c=await Jd(a,e);if(c==="retry_missing"){if(s)throw a;s=!0,await Jt(Wt);continue}if(c==="not_contended")throw a;s=!1;let d=await zd(e);if(d!==void 0&&await Wd(e,d))continue;if(Date.now()>=n)throw bo(e);await Jt(Wt)}}}finally{try{await vo(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 yo(e,i.token)}catch(d){c.push(d)}throw c.length===1?a:new AggregateError(c,"learning lock acquisition cleanup failed")}}}o(Td,"acquireLock");async function Md(e){let t=`${e}.queue`,n=fo(),r=`${process.pid} ${n}
17
+ `,i=ar(t,`choosing-${n}.lock`);await uo(t,{recursive:!0}),await lo(i,r);try{await wo(t);let s=await Kd(t),a=Math.max(0,...s.map(l=>l.number))+1;if(!Number.isSafeInteger(a))throw new Error("learning lock ticket overflow");let c=`ticket-${String(a).padStart(Dd,"0")}-${n}.lock`,d=ar(t,c);return await lo(d,r),{queuePath:t,path:d,name:c,raw:r}}finally{await vo(i,r)}}o(Md,"createLockTicket");async function Od(e,t,n){for(;;){await wo(e.queuePath),await go(e);let r=await cr(e.queuePath),i=r.some(a=>a.startsWith("choosing-")),s=r.map(dr).filter(a=>a!==void 0).sort(Ud)[0];if(!i&&s?.name===e.name)return;if(Date.now()>=t)throw bo(n);await Jt(Wt)}}o(Od,"waitForTicketTurn");async function lo(e,t){let n=await po(e,"wx");try{try{await n.writeFile(t,"utf8")}finally{await n.close()}}catch(r){throw await Re(e),r}}o(lo,"createOwnerFile");async function go(e){try{if(await xe(e.path,"utf8")!==e.raw)throw new Error(`learning store lock ticket lost: ${e.path}`)}catch(t){throw D(t,"ENOENT")?new Error(`learning store lock ticket lost: ${e.path}`):t}}o(go,"assertTicketOwned");async function Kd(e){return(await cr(e)).map(dr).filter(t=>t!==void 0)}o(Kd,"listQueueTickets");function dr(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}o(dr,"parseQueueTicket");function Ud(e,t){return e.number-t.number||e.name.localeCompare(t.name)}o(Ud,"compareQueueTickets");async function wo(e){let t=await cr(e);await Promise.all(t.filter(Bd).map(async n=>{let r=ar(e,n);await Hd(r)&&await Re(r)}))}o(wo,"cleanupAbandonedQueueEntries");function Bd(e){return/^choosing-[0-9a-f-]+\.lock$/i.test(e)||dr(e)!==void 0}o(Bd,"isQueueEntryName");async function Hd(e){try{let t=await Vt(e),n=lr(await xe(e,"utf8"));return n?.released===!0?!0:Date.now()-t.mtimeMs<=ho?!1:n===void 0||!ko(n.pid)}catch(t){if(D(t,"ENOENT")||["EPERM","EACCES","EBUSY"].some(n=>D(t,n)))return!1;throw t}}o(Hd,"isAbandonedQueueEntry");async function qd(e){let t=await po(e,"wx"),n=fo();try{return await t.writeFile(`${process.pid} ${n}
18
+ `,"utf8"),{handle:t,token:n}}catch(r){throw await t.close(),await Re(e),r}}o(qd,"createLock");async function zd(e){try{let t=await Vt(e),n=await xe(e,"utf8"),r=lr(n),i=r?.token!==void 0&&await Vd(e,r.token);return!i&&Date.now()-t.mtimeMs<=ho?void 0:i||r!==void 0&&!ko(r.pid)?{raw:n,mtimeMs:t.mtimeMs,size:t.size}:void 0}catch(t){if(["ENOENT","EPERM","EACCES","EBUSY"].some(n=>D(t,n)))return;throw t}}o(zd,"observeStaleLock");async function Wd(e,t){try{let n=await Vt(e);return n.mtimeMs!==t.mtimeMs||n.size!==t.size||await xe(e,"utf8")!==t.raw?!1:(await Re(e),!0)}catch(n){if(D(n,"ENOENT"))return!0;if(["EPERM","EACCES","EBUSY"].some(r=>D(n,r)))return!1;throw n}}o(Wd,"removeObservedStaleLock");async function Jd(e,t){if(D(e,"EEXIST"))return"contended";if(!["EPERM","EACCES","EBUSY"].some(n=>D(e,n)))return"not_contended";try{return(await Vt(t)).isFile()?"contended":"not_contended"}catch(n){if(D(n,"ENOENT"))return"retry_missing";throw e}}o(Jd,"classifyExistingLockContention");async function yo(e,t){try{if(lr(await xe(e,"utf8"))?.token!==t)return;let r;try{await mo(zt(e,t),`${t}
19
+ `,"utf8")}catch(i){r=i}try{await Re(e)}catch(i){if(r===void 0&&fr(i))return;throw r===void 0?i:new AggregateError([r,i],"learning lock release marker and owner cleanup both failed")}try{await Re(zt(e,t))}catch(i){H({source:"learning.store-lock",level:"warn",message:"Released learning lock left a harmless cleanup marker.",detail:{filePath:zt(e,t),error:i instanceof Error?i.message:String(i)}})}}catch(n){if(!D(n,"ENOENT"))throw n}}o(yo,"releaseLock");async function vo(e,t){let n;try{if(await xe(e,"utf8")!==t)throw new Error(`learning store lock queue entry lost: ${e}`);await mo(e,`${t.trimEnd()} released
20
+ `,"utf8")}catch(r){if(D(r,"ENOENT"))return;n=r}try{await Re(e)}catch(r){if(n===void 0&&fr(r))return;throw n===void 0?r:new AggregateError([n,r],"learning lock queue marker and cleanup both failed")}}o(vo,"releaseQueueEntry");async function Vd(e,t){try{return(await xe(zt(e,t),"utf8")).trim()===t}catch(n){if(["ENOENT","EPERM","EACCES","EBUSY"].some(r=>D(n,r)))return!1;throw n}}o(Vd,"hasReleaseMarker");function zt(e,t){return`${e}.${t}.released`}o(zt,"releaseMarkerPath");function lr(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}}o(lr,"parseOwner");function ko(e){try{return process.kill(e,0),!0}catch(t){return!D(t,"ESRCH")}}o(ko,"isProcessAlive");function D(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}o(D,"isFileError");function fr(e){return["EPERM","EACCES","EBUSY"].some(t=>D(e,t))}o(fr,"isTransientFileContention");async function Re(e){for(let t=1;t<=co;t+=1)try{await Ld(e,{force:!0});return}catch(n){if(D(n,"ENOENT"))return;if(!fr(n)||t===co)throw n;await Jt(Wt)}}o(Re,"removeFileWithTransientRetry");function bo(e){return new Error(`learning store lock timed out: ${e}`)}o(bo,"lockTimeout");async function Jt(e){await new Promise(t=>setTimeout(t,e))}o(Jt,"delay");import{mkdir as Io,readFile as Yd,rename as Gd,rm as Xd,writeFile as Qd}from"fs/promises";import{basename as Zd,dirname as So,join as _o}from"path";var Ro=1;function ee(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(ee,"isRecord");function el(e){return e==="pending"||e==="approved"||e==="rejected"}o(el,"isReviewStatus");function xo(e){return e==="foreground_user"||e==="assistant_tool"||e==="background_learning"}o(xo,"isSkillWriteOrigin");function z(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}o(z,"isStringArray");function Yt(e){return ee(e)&&Object.values(e).every(t=>typeof t=="string")}o(Yt,"isStringRecord");function tl(e){return e==="record_usage"||e==="create"||e==="patch"||e==="archive"||e==="quarantine"||e==="delete"||e==="consolidate"||e==="direct_mutation"}o(tl,"isSkillGovernanceAction");function nl(e){return e==="save_from_run"||e==="revise_capsule"||e==="add_skill_reference"||e==="report_only"}o(nl,"isWorkflowSuggestedAction");function rl(e){return e==="low"||e==="medium"||e==="high"}o(rl,"isLearningRisk");function il(e){return e==="user"||e==="feedback"||e==="project"||e==="reference"||e==="semantic_memory"}o(il,"isMemoryKind");function ol(e){return e==="foreground_user"||e==="assistant_tool"||e==="background_learning"||e==="external_provider"}o(ol,"isMemoryWriteOrigin");function sl(e){return e==="primary"||e==="subagent"||e==="workflow_child"||e==="cron"||e==="flush"||e==="compression"}o(sl,"isMemoryExecutionContext");function al(e){return ee(e)&&z(e.workflowCapsules)&&z(e.savedWorkflows)&&z(e.constructedAgents)&&z(e.promptReferences)&&(e.action==="none"||e.action==="rewrite_proposal"||e.action==="block_until_manual_review")}o(al,"isConsumerImpact");function cl(e){return ee(e)&&ol(e.writeOrigin)&&sl(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")&&z(e.sourceRefs)&&typeof e.completedTurn=="boolean"&&(e.claimKind===void 0||dl(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||ll(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")}o(cl,"isMemoryMetadata");function dl(e){return e==="fact"||e==="policy"||e==="preference"||e==="procedure"||e==="episode"}o(dl,"isMemoryClaimKind");function ll(e){return!ee(e)||typeof e.tenantId!="string"?!1:["workspaceId","userId","agentId","projectId","sessionId"].every(t=>e[t]===void 0||typeof e[t]=="string")}o(ll,"isMemoryApplicability");function fl(e){if(!ee(e))return!1;let t=e.destination;return typeof e.proposalId!="string"||!xo(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"&&z(e.sourceTraceIds)&&typeof e.confidence=="number":t==="workflow_handoff"?e.userLabel==="runnable_workflow"&&z(e.evidenceRunIds)&&z(e.sourceTraceIds)&&nl(e.suggestedAction)&&typeof e.whyWorkflowNotSkill=="string"&&z(e.requiredWorkflowEvidence)&&rl(e.risk)&&al(e.consumerImpact)&&e.appliedByF224===!1:t==="memdir_handoff"?e.userLabel==="context_note"&&il(e.memoryKind)&&typeof e.body=="string"&&cl(e.metadata):t==="reasoning_handoff"?e.userLabel==="reasoning_report"&&typeof e.title=="string"&&typeof e.body=="string"&&z(e.sourceTraceIds):!1}o(fl,"isReviewableProposal");function ul(e){return ee(e)?e.kind==="write"?typeof e.relativePath=="string"&&typeof e.content=="string":e.kind==="delete"?typeof e.relativePath=="string":!1:!1}o(ul,"isSkillMutationChange");function pl(e){if(!ee(e)||e.kind!=="skill"||typeof e.skillRoot!="string"||e.skillRoot.length===0||!Array.isArray(e.changes)||!e.changes.every(ul))return!1;let t=e.governance;return!(!ee(t)||!tl(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"||!xo(t.origin)||t.pinned!==void 0&&typeof t.pinned!="boolean"||e.snapshotRoot!==void 0&&typeof e.snapshotRoot!="string")}o(pl,"isStoredLearningApplyPlan");function ml(e,t,n){if(!ee(e)){n.push(`proposal entry ${t} is not an object`);return}let r=e.proposalId,i=e.status,s=e.proposal,a=e.applyPlan,c=e.createdAt,d=e.updatedAt,l=e.appliedAt,f=e.appliedChangedPaths,u=e.appliedSnapshotPath,p=e.approvedBy,h=e.approvedAt,g=e.approvalPolicyId,y=e.approvalPolicyReason,v=e.approvalExpectedFingerprints,k=e.approvalResultingFingerprints,I=e.rejectedReason;if(typeof r!="string"||r.length===0){n.push(`proposal entry ${t} has no proposalId`);return}if(!el(i)){n.push(`proposal entry ${r} has invalid status`);return}if(!fl(s)){n.push(`proposal entry ${r} has invalid proposal payload`);return}if(s.proposalId!==r){n.push(`proposal entry ${r} has mismatched proposal payload id`);return}if(typeof c!="string"||typeof d!="string"){n.push(`proposal entry ${r} has invalid timestamps`);return}if(a!==void 0&&!pl(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&&!z(f)){n.push(`proposal entry ${r} has invalid applied changed paths`);return}if(p!==void 0&&p!=="user"&&p!=="host"){n.push(`proposal entry ${r} has invalid approvedBy`);return}if(h!==void 0&&typeof h!="string"){n.push(`proposal entry ${r} has invalid approvedAt`);return}if(g!==void 0&&typeof g!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyId`);return}if(y!==void 0&&typeof y!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyReason`);return}if(v!==void 0&&!Yt(v)){n.push(`proposal entry ${r} has invalid approvalExpectedFingerprints`);return}if(k!==void 0&&!Yt(k)){n.push(`proposal entry ${r} has invalid approvalResultingFingerprints`);return}if(u!==void 0&&typeof u!="string"){n.push(`proposal entry ${r} has invalid applied snapshot path`);return}return{proposalId:r,status:i,proposal:s,...a!==void 0?{applyPlan:a}:{},createdAt:c,updatedAt:d,...typeof l=="string"?{appliedAt:l}:{},...z(f)?{appliedChangedPaths:f}:{},...p==="user"||p==="host"?{approvedBy:p}:{},...typeof h=="string"?{approvedAt:h}:{},...typeof g=="string"?{approvalPolicyId:g}:{},...typeof y=="string"?{approvalPolicyReason:y}:{},...Yt(v)?{approvalExpectedFingerprints:v}:{},...Yt(k)?{approvalResultingFingerprints:k}:{},...typeof u=="string"?{appliedSnapshotPath:u}:{},...typeof I=="string"?{rejectedReason:I}:{}}}o(ml,"parseStoredProposal");function hl(e){let t;try{t=JSON.parse(e)}catch(s){let a=s instanceof Error?s.message:String(s);return{proposals:[],warnings:[`learning proposal store is not valid JSON: ${a}`]}}if(!ee(t))return{proposals:[],warnings:["learning proposal store root is not an object"]};if(t.version!==Ro)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((s,a)=>ml(s,a,n)).filter(s=>s!==void 0),warnings:n}}o(hl,"parseStoreDocument");async function Ao(e,t){let n={version:Ro,proposals:t},r=So(e);await Io(r,{recursive:!0});let i=_o(r,`.${Zd(e)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Qd(i,`${JSON.stringify(n,null,2)}
21
+ `,"utf8"),await Gd(i,e)}catch(s){throw await Xd(i,{force:!0}),s}}o(Ao,"writeStoreDocument");async function P(e){let t;try{t=await Yd(e,"utf8")}catch(n){if(n.code==="ENOENT")return{proposals:[],warnings:[]};throw n}return hl(t)}o(P,"readLearningProposalStore");async function rt(e,t,n={}){return Eo(e,async()=>{await n.revalidateAuthority?.();let r=await P(e);if(r.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${r.warnings.join("; ")}`);let s=(n.now??(()=>new Date().toISOString()))(),a=r.proposals.find(l=>l.proposalId===t.proposalId),c=a?{...a,proposal:t,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},updatedAt:s}:{proposalId:t.proposalId,status:"pending",proposal:t,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},createdAt:s,updatedAt:s},d=a?r.proposals.map(l=>l.proposalId===t.proposalId?c:l):[...r.proposals,c];return await n.revalidateAuthority?.(),await Ao(e,d),c})}o(rt,"upsertLearningProposal");function ur(e,t){let n=Te(e),r=n?Ne(n):`local-${De(e)}`;return t===void 0?O("projects",r,"learning","proposals.json"):_o(t,"projects",r,"learning","proposals.json")}o(ur,"resolveLearningProposalStore");async function de(e,t,n,r={}){return Eo(e,async()=>{await r.revalidateAuthority?.();let i=await P(e);if(i.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${i.warnings.join("; ")}`);let s=i.proposals.find(d=>d.proposalId===t);if(!s)throw new Error(`learning proposal not found: ${t}`);let a=r.now??(()=>new Date().toISOString()),c={...s,status:n,updatedAt:a(),...n==="approved"&&r.appliedAt!==void 0?{appliedAt:r.appliedAt}:{},...n==="approved"&&r.appliedChangedPaths!==void 0?{appliedChangedPaths:r.appliedChangedPaths}:{},...n==="approved"&&r.appliedSnapshotPath!==void 0?{appliedSnapshotPath:r.appliedSnapshotPath}:{},...n==="approved"&&r.approvedBy!==void 0?{approvedBy:r.approvedBy}:{},...n==="approved"&&r.approvedAt!==void 0?{approvedAt:r.approvedAt}:{},...n==="approved"&&r.approvalPolicyId!==void 0?{approvalPolicyId:r.approvalPolicyId}:{},...n==="approved"&&r.approvalPolicyReason!==void 0?{approvalPolicyReason:r.approvalPolicyReason}:{},...n==="approved"&&r.approvalExpectedFingerprints!==void 0?{approvalExpectedFingerprints:r.approvalExpectedFingerprints}:{},...n==="approved"&&r.approvalResultingFingerprints!==void 0?{approvalResultingFingerprints:r.approvalResultingFingerprints}:{},...n==="rejected"&&r.rejectedReason!==void 0?{rejectedReason:r.rejectedReason}:{rejectedReason:void 0}};return await r.revalidateAuthority?.(),await Ao(e,i.proposals.map(d=>d.proposalId===t?c:d)),c})}o(de,"updateLearningProposalStatus");async function Eo(e,t){return await Io(So(e),{recursive:!0}),F(`${e}.lock`,t)}o(Eo,"withStoreWriteLock");function gl(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}o(gl,"ensureSkillProposal");function wl(e,t){let n=t==="skill_create"?"create":"patch";if(e.governance.action!==n)throw new Error(`skill ${t} requires governance action ${n}`)}o(wl,"ensureGovernanceMatchesProposal");function yl(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")}o(yl,"ensureCreatePlanIncludesSkillFile");async function pr(e){let t=gl(e);wl(e,t),yl(e);let n=rr(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 ao({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"})}o(pr,"applySkillLearningProposal");import{readdir as vl,readFile as kl,stat as bl}from"fs/promises";import{isAbsolute as Po,join as $o,relative as Il,resolve as jo}from"path";function Co(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}o(Co,"isMissingFile");function Lo(e){if(e.includes("\0")||Po(e))return;let n=e.replace(/\\/g,"/").split("/");if(!(n.length===0||n.some(r=>r.length===0||r==="."||r==="..")))return n.join("/")}o(Lo,"normalizePlanRelativePath");function Sl(e,t){let n=Il(e,t);return n===""||!n.startsWith("..")&&!Po(n)}o(Sl,"isInside");function Fo(e,t){let n=Lo(t);if(n===void 0)return;let r=jo(e),i=jo(r,...n.split("/"));if(Sl(r,i))return{absolutePath:i,normalizedRelativePath:n}}o(Fo,"resolvePlanTarget");async function hr(e){try{return{exists:!0,content:await kl(e,"utf8")}}catch(t){if(Co(t))return{exists:!1};throw t}}o(hr,"readUtf8IfExists");function _l(e){let t=e.applyPlan;return t?.kind!=="skill"?[]:t.changes.map(n=>Lo(n.relativePath)??n.relativePath)}o(_l,"plannedSkillChangedPaths");async function Rl(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=Fo(t.skillRoot,n.relativePath);if(r===void 0)return!1;let i=await hr(r.absolutePath);if(!i.exists||i.content!==n.content)return!1}return!0}o(Rl,"skillFilesAlreadyMatchPlan");async function No(e){let t=e.applyPlan;if(t?.kind!=="skill")return;let n=await qt({proposalId:e.proposalId,skillRoot:t.skillRoot,...t.snapshotRoot!==void 0?{snapshotRoot:t.snapshotRoot}:{}}),r;try{r=await vl(n.snapshotBase,{withFileTypes:!0})}catch(s){if(Co(s))return;throw s}let i=[];for(let s of r){if(!s.isDirectory()||!s.name.startsWith(n.proposalPrefix))continue;let a=$o(n.snapshotBase,s.name),c=await bl(a);i.push({path:a,mtimeMs:c.mtimeMs})}return i.sort((s,a)=>a.mtimeMs-s.mtimeMs),i[0]?.path}o(No,"findLatestSnapshotPath");async function xl(e){let t=e.applyPlan;if(t?.kind!=="skill")return;let n=await No(e);if(n!==void 0)for(let r of t.changes){if(r.kind!=="write")continue;let i=Fo(t.skillRoot,r.relativePath);if(i===void 0)return;let s=await hr(i.absolutePath);if(s.exists&&s.content===r.content)continue;let a=$o(n,...i.normalizedRelativePath.split("/")),c=await hr(a);if(!(!s.exists&&!c.exists)&&!(s.exists&&c.exists&&s.content===c.content))return{relativePath:i.normalizedRelativePath,snapshotPath:n}}}o(xl,"findSnapshotConflict");function Do(e){if(e.proposal.destination==="workflow_handoff")return e.proposal.consumerImpact}o(Do,"getWorkflowConsumerImpact");function Al(e){return Do(e)?.action==="block_until_manual_review"}o(Al,"requiresConsumerImpactAck");async function El(e,t){let n=await P(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}o(El,"readCurrentStoredProposal");async function mr(e,t,n={}){let i=(n.now??(()=>new Date().toISOString()))(),s=n.appliedChangedPaths!==void 0||n.appliedSnapshotPath!==void 0;return de(e,t.proposalId,"approved",{now:o(()=>i,"now"),...s?{appliedAt:i}:{},...n.appliedChangedPaths!==void 0?{appliedChangedPaths:n.appliedChangedPaths}:{},...n.appliedSnapshotPath!==void 0?{appliedSnapshotPath:n.appliedSnapshotPath}:{}})}o(mr,"markApproved");async function gr(e,t,n={}){let r=await El(e,t.proposalId);if(r.status!=="pending")return{status:"blocked_not_pending",reviewStatus:r.status};if(t=r,t.applyPlan?.kind==="skill"){if(await Rl(t)){let c=await No(t),d=_l(t);return{status:"approved_already_applied",proposal:await mr(e,t,{appliedChangedPaths:d,...c!==void 0?{appliedSnapshotPath:c}:{},now:n.now}),changedPaths:d,...c!==void 0?{snapshotPath:c}:{}}}let i=await xl(t);if(i!==void 0)return{status:"blocked_snapshot_conflict",...i};let s=await pr({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 mr(e,t,{appliedChangedPaths:s.changedPaths,...s.snapshotPath!==void 0?{appliedSnapshotPath:s.snapshotPath}:{},now:n.now}),changedPaths:s.changedPaths,...s.snapshotPath!==void 0?{snapshotPath:s.snapshotPath}:{}}}if(t.proposal.destination==="skill_patch"||t.proposal.destination==="skill_create")return{status:"blocked_missing_apply_plan"};if(Al(t)&&n.acknowledgeImpact!==!0){let i=Do(t);return i===void 0?{status:"blocked_missing_apply_plan"}:{status:"blocked_consumer_impact",impact:i}}return{status:"approved_handoff",proposal:await mr(e,t,{now:n.now})}}o(gr,"approveStoredLearningProposal");function jl(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")}o(jl,"ensureApplyPlanMatchesResult");async function wr(e){jl(e);let t=nr(e.learning);if(t.destination==="discard"||t.destination==="trace_only")return{stored:!1,result:t};let n=await rt(e.storePath,t,{...e.now!==void 0?{now:e.now}:{},...e.applyPlan!==void 0?{applyPlan:e.applyPlan}:{}});return{stored:!0,result:t,proposal:n}}o(wr,"recordProceduralLearning");import{mkdir as Pl,readFile as $l,rename as Cl,rm as Ll,writeFile as Fl}from"fs/promises";import{basename as Nl,dirname as Dl,join as Tl}from"path";var Gt=1;function To(e,t){let n=Te(e),r=n?Ne(n):`local-${De(e)}`;return O("projects",r,"learning",t)}o(To,"projectLearningPath");function Ml(e){return To(e,"skill-usage.json")}o(Ml,"resolveSkillUsageLedger");function Ol(e){return To(e,"skill-trust.json")}o(Ol,"resolveSkillTrustLedger");function Xt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Xt,"isRecord");function Kl(e){return e==="project"||e==="user"||e==="plugin"||e==="builtin"||e==="learned"||e==="external"}o(Kl,"isGovernedSkillSource");function Ul(e){return e==="provisional"||e==="trusted"||e==="quarantined"||e==="archived"}o(Ul,"isSkillTrustState");function Bl(e){return Xt(e)&&typeof e.skillName=="string"&&Kl(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"}o(Bl,"isUsageRecord");function Hl(e){return Xt(e)&&typeof e.skillName=="string"&&(e.source==="project"||e.source==="user")&&e.ownership==="background_created"&&Ul(e.state)&&e.createdByAgent===!0&&typeof e.updatedAt=="string"&&(e.reason===void 0||typeof e.reason=="string")}o(Hl,"isTrustRecord");async function Mo(e,t){let n=Dl(e);await Pl(n,{recursive:!0});let r=Tl(n,`.${Nl(e)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Fl(r,t,"utf8"),await Cl(r,e)}catch(i){throw await Ll(r,{force:!0}),i}}o(Mo,"writeAtomic");async function Oo(e){let t;try{t=await $l(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)}`]}}}o(Oo,"readJsonDocument");async function Ko(e){let t=await Oo(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!==Gt||!Array.isArray(t.parsed.records))return{records:[],warnings:["skill usage ledger has unsupported shape"]};let n=[];return{records:t.parsed.records.map((i,s)=>{if(Bl(i))return i;n.push(`usage record ${s} has invalid shape`)}).filter(i=>i!==void 0),warnings:n}}o(Ko,"readSkillUsageLedger");async function ql(e,t){try{let n=await Ko(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),s=i??{skillName:t.skillName,source:t.source,views:0,invokes:0,patchProposals:0,patchApplies:0,firstEventAt:r,lastEventAt:r},a={...s,views:s.views+(t.event==="view"?1:0),invokes:s.invokes+(t.event==="invoke"?1:0),patchProposals:s.patchProposals+(t.event==="patch_proposed"?1:0),patchApplies:s.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 Mo(e,`${JSON.stringify({version:Gt,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)}`]}}}o(ql,"recordSkillUsage");async function Uo(e){let t=await Oo(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!==Gt||!Array.isArray(t.parsed.records))return{records:[],warnings:["skill trust ledger has unsupported shape"]};let n=[];return{records:t.parsed.records.map((i,s)=>{if(Hl(i))return i;n.push(`trust record ${s} has invalid shape`)}).filter(i=>i!==void 0),warnings:n}}o(Uo,"readSkillTrustLedger");async function zl(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 Uo(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}:{}},s=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 Mo(e,`${JSON.stringify({version:Gt,records:s},null,2)}
23
+ `),{updated:!0,record:i}}o(zl,"updateSkillTrustLedger");import{readdir as Wl,readFile as Jl,stat as Vl}from"fs/promises";import{join as Yl}from"path";var Gl=1024*1024,Xl=new Set([".git","node_modules","dist","build",".turbo"]),Ql=new Set([".json",".jsonl",".md",".mdx",".txt",".yml",".yaml",".js",".mjs",".cjs",".ts",".tsx"]);function Zl(e){let t=e.lastIndexOf(".");return t>=0?e.slice(t).toLowerCase():""}o(Zl,"extensionOf");function ef(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}o(ef,"escapeRegExp");function tf(e,t){let n=ef(t);return new RegExp(`(^|[^a-zA-Z0-9_-])(?:/skill:|skill:|skills?["'\\s:\\[]+)?${n}([^a-zA-Z0-9_-]|$)`,"i").test(e)}o(tf,"hasSkillReference");async function nf(e,t){let n=await Vl(e);if(!n.isFile()||n.size>Gl||!Ql.has(Zl(e)))return!1;let r=await Jl(e,"utf8");return tf(r,t)}o(nf,"scanFile");async function Bo(e,t){let n;try{n=await Wl(e,{withFileTypes:!0})}catch(i){if(i.code==="ENOENT")return[];throw i}let r=[];for(let i of n){let s=Yl(e,i.name);if(i.isDirectory()){Xl.has(i.name)||r.push(...await Bo(s,t));continue}i.isFile()&&await nf(s,t)&&r.push(s)}return r}o(Bo,"scanDir");async function Qt(e,t){if(!e||e.length===0)return[];let n=[];for(let r of e)n.push(...await Bo(r,t));return Array.from(new Set(n)).sort()}o(Qt,"scanDirs");async function rf(e){let t=await Qt(e.workflowCapsuleDirs,e.skillName),n=await Qt(e.savedWorkflowDirs,e.skillName),r=await Qt(e.constructedAgentDirs,e.skillName),i=await Qt(e.promptReferenceDirs,e.skillName),s=t.length>0||n.length>0||r.length>0||i.length>0;return{workflowCapsules:t,savedWorkflows:n,constructedAgents:r,promptReferences:i,action:s?"block_until_manual_review":"none"}}o(rf,"computeSkillConsumerImpact");function of(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"turn"}o(of,"safeIdPart");function sf(e,t){return{stored:!1,result:{destination:"discard",proposalId:e,reason:t}}}o(sf,"discardTurn");function af(e){return e.completedTurn&&e.userMessage.trim().length>0&&e.assistantMessage.trim().length>0}o(af,"hasUsableTurnEvidence");async function cf(e){let t=[],n=[],r=of(e.sessionId);if(!af(e)){for(let i=0;i<e.candidates.length;i+=1){let s=e.candidates[i]?.proposalId??`${r}-${i}`;n.push(sf(s,"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 s=e.candidates[i],a=await wr({storePath:e.storePath,learning:{proposalId:s.proposalId??`${r}-${i}`,origin:e.origin??"background_learning",completedTurn:!0,sourceRefs:s.sourceRefs??e.sourceRefs??[`session:${e.sessionId}`],candidate:s.candidate},...s.applyPlan!==void 0?{applyPlan:s.applyPlan}:{},...e.now!==void 0?{now:e.now}:{}});a.stored?t.push(a):n.push(a)}return{stored:t,skipped:n}}o(cf,"recordCompletedTurnLearning");var m=class extends Error{static{o(this,"LearningCapabilityError")}code;constructor(t,n){super(n),this.code=t,this.name="LearningCapabilityError"}},df={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 Ho(e,t){return df[e].includes(t)}o(Ho,"canTransitionLearnedCapability");function Ue(e,t){if(!Ho(e,t))throw new m("invalid_transition",`learned capability cannot transition from ${e} to ${t}`)}o(Ue,"assertLearnedCapabilityTransition");function te(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}o(te,"slugifyLearnedCapabilityName");function qo(e){return e==="active_learned"?"activated":e==="promoted_user"?"promoted":e==="quarantined"?"attention":e}o(qo,"learningEventKindForLifecycle");function yr(e){return e.lastAction==="rollback"?"attention":qo(e.lifecycle)}o(yr,"learningEventKindForRecord");function Zt(e){return`${e.capabilityId}-r${e.revision}-${yr(e)}`}o(Zt,"learningEventIdFor");import{mkdir as Vo,readFile as lf,readdir as Yo,rename as ff,rm as uf,writeFile as pf}from"node:fs/promises";import{basename as tn,dirname as it,join as R,resolve as mf}from"node:path";function Go(e){return{root:e,skills:R(e,"skills"),extensions:R(e,"extensions"),capabilities:R(e,"capabilities"),events:R(e,"events"),clients:R(e,"clients")}}o(Go,"resolveLearnedAreaPaths");function Be(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`)}o(Be,"assertSafeFileKey");async function vr(e,t){await Vo(it(e),{recursive:!0});let n=R(it(e),`.${tn(e)}.${process.pid}-${Date.now().toString(36)}.tmp`);try{await pf(n,`${JSON.stringify(t,null,2)}
24
+ `,"utf8"),await ff(n,e)}catch(r){throw await uf(n,{force:!0}),r}}o(vr,"writeJsonAtomic");async function Ae(e){try{return JSON.parse(await lf(e,"utf8"))}catch(t){if(Ir(t,"ENOENT"))return;throw t instanceof SyntaxError?new m("store_integrity_error",`invalid JSON in ${e}`):t}}o(Ae,"readJson");function W(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(W,"isRecord");function Ir(e,t){return W(e)&&e.code===t}o(Ir,"isFileError");function en(e,t){if(!W(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"||!W(e.source)||e.schemaVersion===2&&!hf(e))throw new m("store_integrity_error",`invalid capability record in ${t}`);return e}o(en,"assertCapability");function hf(e){if(e.carrier!=="skill"||!W(e.scope)||!W(e.artifact)||!W(e.provenance)||!W(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(s=>typeof s=="string"&&/^[a-f0-9]{64}$/.test(s))&&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(s=>typeof r[s]=="string")&&i.maxInvocations===3&&Number.isSafeInteger(i.invocationCount)&&Number.isSafeInteger(i.verifiedSuccesses)&&Number.isSafeInteger(i.credibleNegatives)&&(i.binding===void 0||gf(i.binding))&&Array.isArray(i.invocations)&&i.invocations.every(wf)}o(hf,"isValidV2Capability");function gf(e){return W(e)&&typeof e.bindingId=="string"&&typeof e.ownerSessionRef=="string"&&kr(e.expiresAt)}o(gf,"isValidCanaryBinding");function wf(e){return!W(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")||!kr(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:kr(e.completedAt)}o(wf,"isValidCanaryInvocation");function kr(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}o(kr,"isValidTimestamp");function zo(e,t){if(!W(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}o(zo,"assertEvent");function yf(e,t){if(!W(e)||e.schemaVersion!==1||e.clientIdentity!==t||!W(e.events))throw new m("store_integrity_error",`invalid learning client record for ${t}`);return e}o(yf,"assertClient");async function br(e){try{return(await Yo(e)).filter(t=>t.endsWith(".json")).sort().map(t=>R(e,t))}catch(t){if(Ir(t,"ENOENT"))return[];throw t}}o(br,"listJsonFiles");var le=class{static{o(this,"LearnedAreaStore")}paths;#e;constructor(t){let n=mf(t);this.#e=vf(n),this.paths={...Go(n),events:R(this.#e,"events"),clients:R(this.#e,"clients")}}async initialize(){await Promise.all(Object.values(this.paths).map(t=>Vo(t,{recursive:!0}))),await this.withOwnerMutation(async()=>{for(let t of await this.listCapabilities())await this.ensureCurrentEvent(t)})}async readCapability(t){Be(t,"capabilityId");let n=R(this.paths.capabilities,`${t}.json`),r=await Ae(n);if(r!==void 0)return en(r,n);if(this.#e!==this.paths.root)return;let i=await Wo(this.#e,t);if(i.length>1)throw new m("store_integrity_error",`duplicate project capabilityId: ${t}`);let s=i[0];return s===void 0?void 0:en(await Ae(s),s)}async listCapabilities(){let t=await br(this.paths.capabilities),n=this.#e===this.paths.root?await Wo(this.#e):[];return Promise.all([...t,...n].map(async r=>en(await Ae(r),r)))}async writeCapability(t){Be(t.capabilityId,"capabilityId");let n=this.#e===this.paths.root&&t.schemaVersion===2?R(this.#e,"projects",t.scope.tenantHash,t.scope.projectHash,"capabilities"):this.paths.capabilities,r=R(n,`${t.capabilityId}.json`);en(t,r),await vr(r,t)}async writeEvent(t){Be(t.eventId,"eventId"),await vr(R(this.paths.events,`${t.eventId}.json`),t)}async listEvents(){return(await Promise.all((await br(this.paths.events)).map(async n=>zo(await Ae(n),n)))).sort((n,r)=>n.sequence-r.sequence)}async readClient(t){Be(t,"clientIdentity");let n=R(this.paths.clients,`${t}.json`),r=await Ae(n);return r===void 0?{schemaVersion:1,clientIdentity:t,events:{}}:yf(r,t)}async writeClient(t){Be(t.clientIdentity,"clientIdentity"),await vr(R(this.paths.clients,`${t.clientIdentity}.json`),t)}withOwnerMutation(t){return F(R(this.#e,".owner.lock"),t)}withClientMutation(t,n){return Be(t,"clientIdentity"),F(R(this.paths.clients,`.${t}.lock`),n)}async ensureCurrentEvent(t){let n=Zt(t),r=await Ae(R(this.paths.events,`${n}.json`));if(r!==void 0)return zo(r,n);let i=await this.listEvents(),s=nn(t,(i.at(-1)?.sequence??0)+1);return await this.writeEvent(s),s}};function vf(e){let t=tn(e),n=it(e),r=tn(n),i=it(n);return/^[a-f0-9]{64}$/.test(t)&&/^[a-f0-9]{64}$/.test(r)&&tn(i)==="projects"?it(i):e}o(vf,"globalLearnedAreaRoot");async function Wo(e,t){let n=R(e,"projects"),r=[];for(let i of await Jo(n))for(let s of await Jo(R(n,i))){let a=R(n,i,s,"capabilities");if(t!==void 0){let c=R(a,`${t}.json`);await Ae(c)!==void 0&&r.push(c)}else r.push(...await br(a))}return r.sort()}o(Wo,"projectCapabilityFiles");async function Jo(e){try{return(await Yo(e,{withFileTypes:!0})).filter(t=>t.isDirectory()&&/^[a-f0-9]{64}$/.test(t.name)).map(t=>t.name).sort()}catch(t){if(Ir(t,"ENOENT"))return[];throw t}}o(Jo,"listDirectories");function nn(e,t){return{schemaVersion:1,sequence:t,eventId:Zt(e),capabilityId:e.capabilityId,capabilityRevision:e.revision,kind:yr(e),lifecycle:e.lifecycle,displayName:e.displayName,slug:e.slug,carrier:e.carrier,createdAt:e.updatedAt}}o(nn,"eventFromCapability");import{createHash as kf}from"node:crypto";async function ot(e){let t=await P(e);return{records:Sr(t.proposals.map(n=>If(n,e))),warnings:t.warnings}}o(ot,"projectLearningProposals");function Sr(e,t=[]){let n=new Set(t);return e.map(r=>{let i=bf(r.slug,r.capabilityId,n);return n.add(i),i===r.slug?r:{...r,slug:i}})}o(Sr,"makeProjectedLearningSlugsUnique");function bf(e,t,n){if(!n.has(e))return e;let r=t.replace(/^lc_/,"").slice(-8),s=`${e.slice(0,Math.max(1,64-r.length-1)).replace(/-+$/g,"")}-${r}`;if(!n.has(s))return s;for(let a=2;a<1e4;a+=1){let c=`${s.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}`)}o(bf,"nextAvailableSlug");function If(e,t){let n=Sf(e);return{schemaVersion:1,capabilityId:`lc_${kf("sha256").update(t).update("\0").update(e.proposalId).digest("hex").slice(0,20)}`,displayName:n,slug:te(n),carrier:_f(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}}}o(If,"projectProposal");function Sf(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)}`}o(Sf,"proposalDisplayName");function _f(e){return e.proposal.destination==="workflow_handoff"?"workflow_handoff":"skill"}o(_f,"proposalCarrier");var Xo=new Map,Rf=25;function xf(e){let t=Xo.get(e);if(t)return t;let n=new Set;return Xo.set(e,n),n}o(xf,"eventHubFor");var on=class{static{o(this,"FileLearningCenterService")}options;store;now;proposalStores;drivers;waiters;constructor(t){this.options=t;let n=t.rootDir??O("learned");this.store=new le(n),this.waiters=xf(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=>Pf(d,t)).sort($f),i=Cf(t.cursor),s=Math.max(1,Math.min(t.limit??50,200)),a=r.slice(i,i+s),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 s=r.filter(c=>c.slug.toLowerCase()===n);if(s.length>1)throw new m("ambiguous_name",`learned capability slug is ambiguous: ${t}; use capabilityId ${s.map(c=>c.capabilityId).join(", ")}`);if(s.length===1)return s[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=Lf(t,n);return{ready:_r(i,r,"ready",this.now()),newlyActive:_r(i,r,"activated",this.now()),attention:_r(i,r,"attention",this.now()),active:t.filter(s=>s.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 Rr(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(rn(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(rn(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){Ef(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 Ue(n.lifecycle,t.lifecycle)}let r=(await this.store.listCapabilities()).find(a=>a.slug===t.slug&&a.capabilityId!==t.capabilityId&&jf(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(),s=nn(t,(i.at(-1)?.sequence??0)+1);return await this.store.writeEvent(s),this.emit(s),t}async transitionByName(t,n,r){return this.store.withOwnerMutation(async()=>{let i=await this.get(t);return rn(i,r),Ue(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);rn(i,r);let s=this.driverFor(i,n);if(!s)throw new m("unsupported_action",`${n} is not supported for learned ${i.carrier} capabilities`);let a=await s.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(ot))).flatMap(s=>s.records),r=Sr(n,t.map(s=>s.slug)),i=new Set(t.map(s=>s.capabilityId));return[...t,...r.filter(s=>!i.has(s.capabilityId))]}async updateNotificationState(t,n,r){await this.store.withClientMutation(this.options.clientIdentity,async()=>{let i=await this.get(t),[s,a]=await Promise.all([this.store.listEvents(),this.store.readClient(this.options.clientIdentity)]),c=s.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),s=(await P(i)).proposals.find(c=>c.proposalId===r);if(!s)throw new m("capability_not_found",`F224 proposal not found: ${t.slug}`);if(n==="reject")await de(i,r,"rejected");else{let c=await gr(i,s);if(!c.status.startsWith("approved_"))throw new m("action_failed",`F224 proposal approval was blocked: ${c.status}`)}let a=(await ot(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 ot(r)).records.some(s=>s.capabilityId===t.capabilityId))return r;throw new m("capability_not_found",`F224 proposal owner was not found: ${n}`)}},Rr=class{static{o(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),Rf)})])}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 Af(e){return new on(e)}o(Af,"createLearningCenterService");function Ef(e){if(e.schemaVersion!==1&&e.schemaVersion!==2||e.capabilityId.length===0||e.displayName.trim().length===0||e.slug!==te(e.slug)||!Number.isSafeInteger(e.revision)||e.revision<1)throw new m("invalid_record","invalid learned capability record")}o(Ef,"validateRecord");function jf(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}o(jf,"hasSameCapabilityOwner");function rn(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")}o(rn,"assertExplicitAuthority");function Pf(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)}o(Pf,"matchesQuery");function $f(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)}o($f,"compareCapabilities");function Cf(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}o(Cf,"parseCursor");function Lf(e,t){let n=new Map(e.map(r=>[r.capabilityId,r.revision]));return t.filter(r=>n.get(r.capabilityId)===r.capabilityRevision)}o(Lf,"selectCurrentEvents");function _r(e,t,n,r){return e.filter(i=>i.kind===n&&Ff(i,t,r)).length}o(_r,"countActionable");function Ff(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}o(Ff,"isActionable");var Nf=/^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/,Df=/^[a-z][a-z0-9_]{0,63}$/;function Tf(e,t){if(!Nf.test(e))throw new m("invalid_record","learned Extension slug is invalid");if(!Df.test(t))throw new m("invalid_record","learned Extension tool name is invalid");return`learned.${e}.${t}`}o(Tf,"getLearnedExtensionToolName");function Mf(e){return!1}o(Mf,"isLearnedExtensionCommandAllowed");import{createHash as Of,randomUUID as Kf}from"node:crypto";import{lstat as Zo,mkdir as Uf,open as Bf,readFile as Hf}from"node:fs/promises";import{join as He,relative as qf,resolve as es,sep as zf}from"node:path";var Wf=16*1024,ts=/^[a-f0-9]{64}$/,Jf=[/!\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 Vf(e,t){return He(es(e),"learned","projects",at("tenant",t.tenantId),at("project",t.projectId))}o(Vf,"resolveProjectLearnedAreaRoot");function Yf(e,t){return{configHomeHash:at("config-home",ru(e)),tenantHash:at("tenant",t.tenantId),projectHash:at("project",t.projectId)}}o(Yf,"createLearnedCapabilityScope");function ct(e){let t=[e.name,e.description,e.purpose,...e.triggers,...e.steps,...e.verification,...e.pitfalls];if(!(e.name===te(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=>Jf.some(s=>s.test(i))))throw new m("invalid_record","unsafe learned Skill specification was rejected");let r=rs(e);if(Buffer.byteLength(r,"utf8")>Wf)throw new m("invalid_record","unsafe learned Skill specification exceeds the size limit")}o(ct,"validateDeclarativeSkillSpec");function ns(e){return ct(e),rs(e)}o(ns,"renderDeclarativeSkill");function rs(e){return["---",`name: ${e.name}`,`description: ${JSON.stringify(e.description.trim())}`,"---","","# Purpose","",e.purpose.trim(),"","## Use when","",...e.triggers.map(t=>`- ${sn(t)}`),"","## Steps","",...e.steps.map((t,n)=>`${n+1}. ${sn(t)}`),"","## Verification","",...e.verification.map(t=>`- ${sn(t)}`),"","## Pitfalls","",...e.pitfalls.map(t=>`- ${sn(t)}`),""].join(`
25
+ `)}o(rs,"renderDeclarativeSkillUnchecked");async function is(e,t,n){as(t);let r=ns(n),i=Er(r),s=He(e,"skills",t,"revisions",i),a=He(s,"SKILL.md");await st(e),await st(He(e,"skills")),await st(He(e,"skills",t)),await st(He(e,"skills",t,"revisions")),await st(s);try{let c=await Bf(a,"wx");try{await c.writeFile(r,"utf8")}finally{await c.close()}}catch(c){if(!iu(c,"EEXIST"))throw c;if(await Qo(a),await Hf(a,"utf8")!==r)throw new m("store_integrity_error","content-addressed learned Skill revision does not match its fingerprint")}return await Qo(a),{kind:"skill_markdown",relativePath:qf(e,a).split(zf).join("/"),fingerprint:i,contentRevision:1,absolutePath:a}}o(is,"stageLearnedSkillRevision");function os(e){as(e.capabilityId),tu(e.artifact),eu(e.scope);let t=e.now??new Date().toISOString(),n=e.previous;return{schemaVersion:2,capabilityId:e.capabilityId,displayName:e.displayName.trim(),slug:te(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:cs(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:[]}}}o(os,"createLearnedSkillRecord");async function Gf(e,t){ct(t.spec);let n=t.now??new Date().toISOString(),r=t.operation==="patch"?t.targetCapabilityId:nu(t.spec.name,t.scope);if(r===void 0)throw new m("invalid_record","learned Skill patch target is missing");let i=await is(e.paths.root,r,t.spec),s=o(async a=>e.withOwnerMutation(async()=>{await a();let c=await e.readCapability(r);if(c!==void 0&&C(c)&&c.provenance.actionId===t.provenance.actionId)return c;let d;if(t.operation==="patch"){if(c===void 0||!C(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 h=(await e.listCapabilities()).find(g=>g.slug===t.spec.name&&g.capabilityId!==r);if(c!==void 0||h!==void 0)throw new m("invalid_record","learned Skill create target already exists")}let l={...cs(i),contentRevision:d===void 0?1:d.artifact.contentRevision+1},f=(t.protectedSkillNames??[]).includes(t.spec.name),u=t.disposition==="project_canary"&&!f?"testing":"ready",p={...os({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:u,...f?{diagnostics:["formal Skill name collision requires explicit user review"]}:{}};return await a(),await e.writeCapability(p),await e.ensureCurrentEvent(p),p}),"commit");return t.authority===void 0?s(async()=>{}):t.authority.commit(s)}o(Gf,"commitLearnedSkillRevision");async function xr(e,t,n){let r=n.now??new Date,i=Math.max(1e3,n.ttlMs??5*6e4);return cn(e,t,r.toISOString(),s=>{let a=Qf(s,r);if(a.lifecycle!=="testing")return{record:a,result:void 0,changed:a!==s};if(a.canary.invocationCount>=a.canary.maxInvocations)return{record:a,result:void 0,changed:a!==s};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!==s};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}})}o(xr,"admitLearnedSkillBinding");async function Xf(e,t,n,r=new Date().toISOString()){return cn(e,t,r,i=>i.canary.binding?.bindingId!==n?{record:i,result:!1,changed:!1}:{record:ss(i,n,new Date(r),"released canary invocation recovered as inconclusive","host:learned-skill-binding-release"),result:!0,changed:!0})}o(Xf,"releaseLearnedSkillBinding");async function Ar(e,t,n){let r=n.now??new Date,i=n.invocationId??Kf();return cn(e,t,r.toISOString(),s=>{if(s.lifecycle!=="testing")throw new m("invalid_transition","learned Skill is not in canary testing");if(n.artifactRevision!==void 0&&s.artifact.contentRevision!==n.artifactRevision||n.artifactFingerprint!==void 0&&s.artifact.fingerprint!==n.artifactFingerprint)throw new m("invalid_record","learned Skill invocation expected revision or fingerprint changed");let a=s.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=s.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:s,result:{invocationId:i,invocationCount:s.canary.invocationCount,maxInvocations:3},changed:!1}}if(s.canary.invocationCount>=s.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=s.canary.invocationCount+1;return{record:{...s,canary:{...s.canary,invocationCount:l,invocations:[...s.canary.invocations,d]}},result:{invocationId:i,invocationCount:l,maxInvocations:3},changed:!0}})}o(Ar,"invokeLearnedSkillCanary");async function an(e,t,n){let r=n.now??new Date().toISOString();return cn(e,t,r,i=>{let s=i.canary.invocations.find(h=>h.invocationId===n.invocationId);if(s===void 0)throw new m("capability_not_found","learned Skill invocation was not found");if(s.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(h=>h.invocationId===n.invocationId?{...h,status:n.outcome,evidenceRefs:[...n.evidenceRefs],completedAt:r}:h),c=i.canary.verifiedSuccesses+(n.outcome==="verified_success"?1:0),d=i.canary.credibleNegatives+(n.outcome==="credible_negative"?1:0),l=a.some(h=>h.status==="pending"),f=i.canary.invocationCount>=i.canary.maxInvocations&&!l,u=d>0?"quarantined":f&&c>0?"active_learned":f?"ready":i.lifecycle,p={...i,lifecycle:u,...u==="active_learned"&&i.previousGoodArtifact===void 0?{previousGoodRevision:i.artifact.contentRevision,previousGoodArtifact:i.artifact}:{},canary:{...i.canary,verifiedSuccesses:c,credibleNegatives:d,invocations:a}};return{record:p,result:p,changed:!0}})}o(an,"completeLearnedSkillOutcome");function Qf(e,t){let n=e.canary.binding;return n===void 0||Date.parse(n.expiresAt)>t.getTime()?e:ss(e,n.bindingId,t,"expired canary invocation recovered as inconclusive","host:learned-skill-binding-expired")}o(Qf,"recoverExpiredCanary");function ss(e,t,n,r,i){let s=!1,a=e.canary.invocations.map(f=>f.bindingId!==t||f.status!=="pending"?f:(s=!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},...s?{diagnostics:[...new Set([...e.diagnostics??[],r])]}:{}}}o(ss,"settleCanaryBinding");async function Zf(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||!C(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 s={...i,lifecycle:"quarantined",revision:i.revision+1,updatedAt:r,diagnostics:[...new Set([...i.diagnostics??[],n.reason])]};return await n.revalidateAuthority?.(),await e.writeCapability(s),await e.ensureCurrentEvent(s),s})}o(Zf,"quarantineLearnedSkillRevision");function C(e){return e.schemaVersion===2}o(C,"isLearnedCapabilityRecordV2");async function cn(e,t,n,r){return e.withOwnerMutation(async()=>{let i=await e.readCapability(t);if(i===void 0||!C(i))throw new m("capability_not_found","learned Skill record was not found");let s=r(i);if(!s.changed)return s.result;let a={...s.record,revision:i.revision+1,updatedAt:n};return await e.writeCapability(a),await e.ensureCurrentEvent(a),s.result===s.record?a:s.result})}o(cn,"mutateLearnedSkill");function as(e){if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(e))throw new m("invalid_record","learned Skill capabilityId is unsafe")}o(as,"assertSafeCapabilityId");function eu(e){if(![e.configHomeHash,e.tenantHash,e.projectHash].every(t=>ts.test(t)))throw new m("invalid_record","learned Skill project scope is invalid")}o(eu,"assertScope");function tu(e){if(e.kind!=="skill_markdown"||!ts.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")}o(tu,"assertArtifact");function cs(e){return{kind:e.kind,relativePath:e.relativePath,fingerprint:e.fingerprint,contentRevision:e.contentRevision}}o(cs,"withoutAbsolutePath");function sn(e){return e.trim().replace(/\s+/g," ")}o(sn,"oneLine");function Er(e){return Of("sha256").update(e,"utf8").digest("hex")}o(Er,"sha256");function nu(e,t){return`lc_skill_${Er([e,t.configHomeHash,t.tenantHash,t.projectHash].join("\0")).slice(0,24)}`}o(nu,"learnedSkillCapabilityId");function at(e,t){return Er(`${e}\0${t}`)}o(at,"scopedHash");function ru(e){let t=es(e);return process.platform==="win32"?t.toLowerCase():t}o(ru,"normalizePath");async function st(e){await Uf(e,{recursive:!0});let t=await Zo(e);if(!t.isDirectory()||t.isSymbolicLink())throw new m("store_integrity_error",`learned Skill directory is not an owned regular directory: ${e}`)}o(st,"ensureOwnedDirectory");async function Qo(e){let t=await Zo(e);if(!t.isFile()||t.isSymbolicLink())throw new m("store_integrity_error",`learned Skill artifact is not a regular file: ${e}`)}o(Qo,"assertRegularFile");function iu(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}o(iu,"isFileError");import{createHash as ou,randomUUID as su}from"node:crypto";import{link as au,lstat as Lr,mkdir as ds,open as cu,readFile as ls,rm as du}from"node:fs/promises";import{basename as lu,dirname as fu,join as dt,relative as uu,resolve as qe,sep as Pr}from"node:path";var pu=["review","trust","rollback","promote"];function mu(e){return{carrier:"skill",actions:pu,execute:o(async(t,n)=>{let r=hu(n),i=e.now?.()??new Date().toISOString();if(t==="rollback")return gu(r,i);if(t==="review")return jr(r,"testing",i,{canary:us(),lastAction:t});if(t==="trust")return jr(r,"active_learned",i,{previousGoodRevision:r.previousGoodRevision??r.artifact.contentRevision,previousGoodArtifact:r.previousGoodArtifact??r.artifact,lastAction:t});if(t==="promote")return await wu(e,r),r.lifecycle==="promoted_user"?r:jr(r,"promoted_user",i,{lastAction:t});throw new m("unsupported_action",`unsupported learned Skill action: ${String(t)}`)},"execute")}}o(mu,"createLearnedSkillActionDriver");function hu(e){if(!C(e)||e.source.kind!=="skill_learning_loop")throw new m("unsupported_action","the capability is not an F263 learned Skill");return e}o(hu,"requireLearnedSkill");function jr(e,t,n,r){return e.lifecycle!==t&&Ue(e.lifecycle,t),{...e,...r,lifecycle:t,revision:e.revision+1,updatedAt:n}}o(jr,"transitionRecord");function gu(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:us()}}o(gu,"rollbackRecord");function us(){return{maxInvocations:3,invocationCount:0,verifiedSuccesses:0,credibleNegatives:0,invocations:[]}}o(us,"resetCanary");async function wu(e,t){let n=bu(e,t),r=qe(n,...t.artifact.relativePath.split("/"));Cr(r,n),await ku(n,r,"learned Skill promotion source contains a symlink or non-regular path");let i=await ls(r,"utf8");if(Iu(i)!==t.artifact.fingerprint)throw new m("store_integrity_error","learned Skill promotion source fingerprint changed");let s=await vu(e.userSkillsRoot,t.slug);if(Cr(s,e.userSkillsRoot),await yu(s,i))return;let a=await Lr(s);if(a.isSymbolicLink()||!a.isFile())throw new m("store_integrity_error","formal user Skill target is not a regular file");if(await ls(s,"utf8")!==i)throw new m("action_failed",`formal user Skill already exists with different content: ${t.slug}`)}o(wu,"promoteExactArtifact");async function yu(e,t){let n=dt(fu(e),`.${lu(e)}.${process.pid}.${su()}.tmp`),r;try{r=await cu(n,"wx"),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0;try{return await au(n,e),!0}catch(i){if(ps(i,"EEXIST"))return!1;throw i}}finally{try{await r?.close()}finally{await du(n,{force:!0})}}}o(yu,"publishFormalSkill");async function vu(e,t){let n=qe(e);await ds(n,{recursive:!0}),await $r(n,"formal user Skill root is not a regular directory");let r=qe(n,t);Cr(r,n);try{await ds(r)}catch(i){if(!ps(i,"EEXIST"))throw i}return await $r(r,"formal user Skill path contains a symlink or non-regular directory"),dt(r,"SKILL.md")}o(vu,"preparePromotionDestination");async function ku(e,t,n){let r=qe(e);await $r(r,n);let i=uu(r,t).split(Pr),s=r;for(let[a,c]of i.entries()){s=dt(s,c);let d=await Lr(s),l=a===i.length-1;if(d.isSymbolicLink()||(l?!d.isFile():!d.isDirectory()))throw new m("store_integrity_error",n)}}o(ku,"assertRegularFileChain");async function $r(e,t){let n=await Lr(e);if(n.isSymbolicLink()||!n.isDirectory())throw new m("store_integrity_error",t)}o($r,"assertRegularDirectory");function bu(e,t){let n=qe(e.learnedAreaRoot);return e.learnedAreaKind==="project"||e.learnedAreaKind===void 0&&n.endsWith(dt("projects",t.scope.tenantHash,t.scope.projectHash))?n:dt(n,"projects",t.scope.tenantHash,t.scope.projectHash)}o(bu,"capabilityAreaRoot");function Cr(e,t){let n=fs(t),r=fs(e);if(r!==n&&!r.startsWith(n.endsWith(Pr)?n:`${n}${Pr}`))throw new m("store_integrity_error","learned Skill path escaped its configured owner root")}o(Cr,"assertInside");function fs(e){let t=qe(e);return process.platform==="win32"?t.toLowerCase():t}o(fs,"comparable");function Iu(e){return ou("sha256").update(e,"utf8").digest("hex")}o(Iu,"sha256");function Su(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Su,"isRecord");function ps(e,t){return Su(e)&&e.code===t}o(ps,"isFileError");import{createHash as _u}from"node:crypto";import{lstat as Fr,mkdir as Ru,open as xu,readFile as Au,readdir as ms}from"node:fs/promises";import{join as ze,resolve as lt}from"node:path";var Eu=".legacy-skill-import-v1.json",ju=16*1024,Pu=[/!\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 $u(e,t,n){let r=ze(t.paths.root,Eu);return t.withOwnerMutation(async()=>{if(await Tu(r))return{migratedActive:0,recordedAttention:0,alreadyComplete:!0};let i=ze(lt(e),"learned"),s=ze(i,"skills"),a=(await new le(i).listCapabilities()).filter(l=>l.schemaVersion===1),c=0,d=0;for(let l of await Du(s)){let f=ze(s,l,"SKILL.md"),u=await Lu(ze(s,l),f),p=a.find(y=>Fu(y,l,f)),h=u===void 0?void 0:hs(u),g=Cu(n,l,p,h);await t.readCapability(g.capabilityId)===void 0&&(await t.writeCapability(g),await t.ensureCurrentEvent(g),d+=1)}return await Mu(r,{version:1,migratedActive:c,recordedAttention:d,completedAt:new Date().toISOString()}),{migratedActive:c,recordedAttention:d,alreadyComplete:!1}})}o($u,"migrateLegacyLearnedSkillsForProject");function Cu(e,t,n,r){let i=new Date().toISOString();return{schemaVersion:1,capabilityId:Nu(e,`attention:${t}`),displayName:n?.displayName??t,slug:te(n?.slug??t),carrier:"skill",lifecycle:"ready",revision:1,createdAt:n?.createdAt??i,updatedAt:i,source:{kind:"legacy_manual"},artifactPath:ze("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"]}}o(Cu,"attentionLegacyRecord");async function Lu(e,t){try{let n=await Fr(e),r=await Fr(t);if(!n.isDirectory()||n.isSymbolicLink()||!r.isFile()||r.isSymbolicLink()||(await ms(e)).some(a=>a!=="SKILL.md"))return;let s=await Au(t,"utf8");return Buffer.byteLength(s,"utf8")>ju||Pu.some(a=>a.test(s))?void 0:s}catch(n){if(Nr(n,"ENOENT"))return;throw n}}o(Lu,"safeLegacyContent");function Fu(e,t,n){if(e.carrier!=="skill")return!1;let r=e.artifactPath;if(r===void 0)return e.slug===t;let i=lt(r);return i===lt(n)||i===lt(n,"..")||e.slug===t}o(Fu,"legacyRecordMatches");function Nu(e,t){return`lc_legacy_${hs([e.configHomeHash,e.tenantHash,e.projectHash,t].join("\0")).slice(0,24)}`}o(Nu,"legacyCapabilityId");async function Du(e){try{return(await ms(e,{withFileTypes:!0})).filter(t=>t.isDirectory()&&!t.isSymbolicLink()).map(t=>t.name).sort()}catch(t){if(Nr(t,"ENOENT"))return[];throw t}}o(Du,"directDirectories");async function Tu(e){try{return await Fr(e),!0}catch(t){if(Nr(t,"ENOENT"))return!1;throw t}}o(Tu,"fileExists");async function Mu(e,t){await Ru(lt(e,".."),{recursive:!0});let n=await xu(e,"wx");try{await n.writeFile(`${JSON.stringify(t,null,2)}
26
+ `,"utf8")}finally{await n.close()}}o(Mu,"writeImmutableJson");function hs(e){return _u("sha256").update(e,"utf8").digest("hex")}o(hs,"sha256");function Ou(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Ou,"isRecord");function Nr(e,t){return Ou(e)&&e.code===t}o(Nr,"isFileError");import{createHash as vs,randomUUID as Ku}from"node:crypto";import{mkdir as Uu,open as Bu,readFile as ut,readdir as ks}from"node:fs/promises";import{dirname as Hu,join as Ee,resolve as bs,sep as gs}from"node:path";async function qu(e,t){let n=ne("session",t.sessionId),r={version:1,kind:"offered",receiptId:ne("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 ft(e,r),r}o(qu,"recordLearnedSkillOffered");async function zu(e,t){let n=t.now??new Date,r=t.invocationId??Ku(),i=ne("session",t.sessionId),s=await e.readCapability(t.capabilityId);if(s===void 0||!C(s)||s.artifact.contentRevision!==t.expectedRevision||s.artifact.fingerprint!==t.expectedFingerprint)throw new m("invalid_record","learned Skill invocation expected revision or fingerprint changed");if(s.lifecycle==="testing"){if(await xr(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 Ar(e,t.capabilityId,{bindingId:t.bindingId,invocationId:r,usageSessionHash:i,artifactRevision:t.expectedRevision,artifactFingerprint:t.expectedFingerprint,now:n})}else if(s.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||!C(a))throw new m("capability_not_found","learned Skill record disappeared");let c={version:1,kind:"invoked",receiptId:ne("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 ft(e,c),c}o(zu,"admitAndRecordLearnedSkillInvocation");async function Wu(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&&C(l)?l.canary.invocations.find(y=>y.invocationId===d.invocationId):void 0,u=f!==void 0&&f.status!=="pending"?f.status:a,p=f!==void 0&&f.status!=="pending"?f.evidenceRefs:t.evidenceRefs,h=f!==void 0&&f.status!=="pending"?f.completedAt??t.now??new Date().toISOString():t.now??new Date().toISOString();if(l!==void 0&&C(l)&&f?.status==="pending"){let v=(await an(e,d.capabilityId,{invocationId:d.invocationId,outcome:a,evidenceRefs:t.evidenceRefs,now:t.now})).canary.invocations.find(k=>k.invocationId===d.invocationId);v!==void 0&&v.status!=="pending"&&(u=v.status,p=v.evidenceRefs,h=v.completedAt??h)}let g={version:1,kind:"outcome",receiptId:ne("outcome",`${d.sessionHash}\0${d.invocationId}`),sessionHash:d.sessionHash,invocationId:d.invocationId,capabilityId:d.capabilityId,outcome:u,evidenceRefs:[...p],createdAt:h};await ft(e,g),c.push(g)}return c}o(Wu,"completeLearnedSkillSessionOutcomes");async function Ju(e,t){let n=ne("session",t.sessionId),r=t.now??new Date().toISOString(),i=[],s=(await e.listCapabilities()).filter(C),a=new Map;for(let c of await Vu(e,n,t.bindingId)){let d=s.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 s)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=ne("invoked",`${l}\0${d.invocationId}`),u=await ws(e,l,f);if(u!==void 0&&u.kind!=="invoked")throw new m("store_integrity_error","learned Skill invocation receipt identity was reused");if(u?.kind==="invoked"&&(u.invocationId!==d.invocationId||u.bindingId!==d.bindingId||u.capabilityId!==c.capabilityId||u.revision!==(d.artifactRevision??c.artifact.contentRevision)||u.fingerprint!==(d.artifactFingerprint??c.artifact.fingerprint)))throw new m("store_integrity_error","learned Skill invocation receipt drifted from canonical invocation");let p=u??{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};u===void 0&&await ft(e,p),a.set(`${p.sessionHash}\0${p.invocationId}`,{invoked:p,capability:c,canonicalInvocationId:d.invocationId})}for(let c of a.values()){let{invoked:d}=c,l=ne("outcome",`${d.sessionHash}\0${d.invocationId}`),f=await ws(e,d.sessionHash,l),u=c.canonicalInvocationId===void 0?void 0:c.capability.canary.invocations.find(y=>y.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 y=f.invocationId!==d.invocationId||f.capabilityId!==d.capabilityId,v=u!==void 0&&u.status!=="pending"&&u.completedAt===void 0,k=u!==void 0&&(u.status==="pending"||f.outcome!==u.status||JSON.stringify(f.evidenceRefs)!==JSON.stringify(u.evidenceRefs)||f.createdAt!==u.completedAt);if(y||v||k)throw new m("store_integrity_error","learned Skill outcome receipt drifted from canonical invocation");continue}let p=u?.status==="pending"?await an(e,c.capability.capabilityId,{invocationId:d.invocationId,outcome:"inconclusive",evidenceRefs:["host:learned-skill-binding-release"],now:r}):c.capability,h=u===void 0?void 0:p.canary.invocations.find(y=>y.invocationId===d.invocationId);if(h?.status==="pending")throw new m("store_integrity_error","learned Skill canary invocation did not settle during reconciliation");if(h!==void 0&&h.completedAt===void 0)throw new m("store_integrity_error","learned Skill terminal invocation has no canonical completion time");let g={version:1,kind:"outcome",receiptId:l,sessionHash:d.sessionHash,invocationId:d.invocationId,capabilityId:d.capabilityId,outcome:h?.status??"inconclusive",evidenceRefs:h!==void 0&&h.evidenceRefs.length>0?h.evidenceRefs:["host:learned-skill-binding-release"],createdAt:h?.completedAt??r};await ft(e,g),i.push(g)}return i}o(Ju,"reconcileLearnedSkillBindingOutcomes");async function Vu(e,t,n){let r=dn(e,t),i;try{i=(await ks(r)).filter(a=>a.endsWith(".json")).sort()}catch(a){if(fn(a,"ENOENT"))return[];throw a}let s=[];for(let a of i){let c;try{c=JSON.parse(await ut(Ee(r,a),"utf8"))}catch(l){if(!(l instanceof SyntaxError))throw l;H({source:"learning.skill-usage",level:"warn",message:"Invalid unrelated usage receipt was skipped during binding recovery.",detail:{filePath:Ee(r,a)}});continue}if(!ln(c)){if(Tr(c)&&c.kind==="invoked"&&c.bindingId===n)throw new m("store_integrity_error","invalid target learned Skill invocation receipt");Yu(r,a);continue}if(c.kind!=="invoked"||c.bindingId!==n)continue;let d=ne("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");s.push(c)}return s}o(Vu,"listValidBindingInvocations");function Yu(e,t){H({source:"learning.skill-usage",level:"warn",message:"Invalid unrelated usage receipt was skipped during binding recovery.",detail:{filePath:Ee(e,t)}})}o(Yu,"emitInvalidSiblingReceipt");async function Dr(e,t){let n=dn(e,ne("session",t)),r;try{r=(await ks(n)).filter(s=>s.endsWith(".json")).sort()}catch(s){if(fn(s,"ENOENT"))return[];throw s}let i=[];for(let s of r){let a=JSON.parse(await ut(Ee(n,s),"utf8"));if(!ln(a))throw new m("store_integrity_error","invalid learned Skill usage receipt");i.push(a)}return i.sort((s,a)=>s.createdAt.localeCompare(a.createdAt)||s.receiptId.localeCompare(a.receiptId))}o(Dr,"listLearnedSkillUsageReceipts");async function Gu(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 s=await e.readCapability(i.capabilityId);if(s===void 0||!C(s)||s.artifact.fingerprint!==i.fingerprint||s.artifact.contentRevision!==i.revision)return null;let a=bs(e.paths.root,...s.artifact.relativePath.split("/"));Xu(a,e.paths.root);let c=await ut(a,"utf8");return vs("sha256").update(c,"utf8").digest("hex")!==s.artifact.fingerprint?null:{capabilityId:s.capabilityId,name:s.slug,fingerprint:i.fingerprint,revision:i.revision,invocationId:i.invocationId,content:c}}o(Gu,"exactInvokedSkillSnapshotForSession");async function ft(e,t){let n=Ee(dn(e,t.sessionHash),`${t.receiptId}.json`);await Uu(Hu(n),{recursive:!0});let r=`${JSON.stringify(t,null,2)}
27
+ `;try{let i=await Bu(n,"wx");try{await i.writeFile(r,"utf8")}finally{await i.close()}}catch(i){if(!fn(i,"EEXIST"))throw i;let s=JSON.parse(await ut(n,"utf8"));if(!ln(s)||JSON.stringify({...s,createdAt:""})!==JSON.stringify({...t,createdAt:""}))throw new m("store_integrity_error","learned Skill usage receipt drifted")}}o(ft,"writeImmutableReceipt");async function ws(e,t,n){try{let r=JSON.parse(await ut(Ee(dn(e,t),`${n}.json`),"utf8"));if(!ln(r)||r.receiptId!==n||r.sessionHash!==t)throw new m("store_integrity_error","invalid learned Skill usage receipt");return r}catch(r){if(fn(r,"ENOENT"))return;throw r}}o(ws,"readUsageReceipt");function dn(e,t){return Ee(e.paths.root,"usage",t)}o(dn,"usageSessionRoot");function ne(e,t){return vs("sha256").update(`${e}\0${t}`,"utf8").digest("hex")}o(ne,"usageHash");function ln(e){return!Tr(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")}o(ln,"isUsageReceipt");function Xu(e,t){let n=ys(t),r=ys(e);if(r!==n&&!r.startsWith(n.endsWith(gs)?n:`${n}${gs}`))throw new m("store_integrity_error","learned Skill artifact escaped its owner")}o(Xu,"assertInside");function ys(e){let t=bs(e);return process.platform==="win32"?t.toLowerCase():t}o(ys,"comparable");function Tr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Tr,"isRecord");function fn(e,t){return Tr(e)&&e.code===t}o(fn,"isFileError");import{createHash as Qu}from"node:crypto";import{lstat as Is,readFile as Zu,readdir as ep,stat as Mr}from"fs/promises";import{join as pt,dirname as Or,relative as tp,resolve as un,sep as Kr}from"path";async function pn(e,t){let n=new Map,r=[],s={...Xn(e),...t},a=Qn(s);for(let{path:c,source:d}of a)try{let l=await dp(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(s.learnedArea!==void 0){let c=await np(s.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}}o(pn,"discoverSkills");async function np(e){let t=new le(e.rootDir),n=[],r=[],i;try{i=await t.listCapabilities()}catch(s){return{skills:n,errors:[{path:e.rootDir,error:s instanceof Error?s.message:String(s)}]}}for(let s of i){if(!C(s)||!rp(s,e)||!ip(s,e))continue;let a=un(e.rootDir,...s.artifact.relativePath.split("/"));try{ap(a,e.rootDir),await sp(e.rootDir,a);let c=await Zu(a,"utf8");if(cp(c)!==s.artifact.fingerprint)throw new Error("learned Skill artifact fingerprint mismatch");let d=await Ut(Or(a),"learned");if(d===null)throw new Error("learned Skill metadata is invalid");n.push({...d,learned:{capabilityId:s.capabilityId,revision:s.artifact.contentRevision,fingerprint:s.artifact.fingerprint}})}catch(c){let d=c instanceof Error?c.message:String(c);r.push({path:a,error:d}),await op(t,s,d)}}return{skills:n,errors:r}}o(np,"scanRecordGatedLearnedArea");function rp(e,t){return e.scope.configHomeHash===t.expectedScope.configHomeHash&&e.scope.tenantHash===t.expectedScope.tenantHash&&e.scope.projectHash===t.expectedScope.projectHash}o(rp,"scopeMatches");function ip(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())}o(ip,"isRecordAdmitted");async function op(e,t,n){await e.withOwnerMutation(async()=>{let r=await e.readCapability(t.capabilityId);if(r===void 0||!C(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)})}o(op,"quarantineInvalidLearnedArtifact");async function sp(e,t){let r=tp(un(e),t).split(Kr),i=un(e),s=await Is(i);if(!s.isDirectory()||s.isSymbolicLink())throw new Error("learned Skill root is not a regular directory");for(let[a,c]of r.entries()){i=pt(i,c);let d=await Is(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")}}o(sp,"assertRegularArtifactChain");function ap(e,t){let n=Ss(t),r=Ss(e);if(r!==n&&!r.startsWith(n.endsWith(Kr)?n:`${n}${Kr}`))throw new Error("learned Skill artifact escapes its Learned Area")}o(ap,"assertInside");function Ss(e){let t=un(e);return process.platform==="win32"?t.toLowerCase():t}o(Ss,"comparablePath");function cp(e){return Qu("sha256").update(e,"utf8").digest("hex")}o(cp,"sha256");async function dp(e,t){let n=[];try{if(!(await Mr(e)).isDirectory())return n;let i=await ep(e);for(let s of i){let a=pt(e,s);try{if((await Mr(a)).isDirectory()){let d=pt(a,"SKILL.md");try{if((await Mr(d)).isFile()){let f=await Ut(a,t);f&&n.push(f)}}catch{}}}catch{}}}catch{}return n}o(dp,"scanSkillDirectory");function _s(e,t){let n=[],r=[".kodax/skills"],i=e,s=Or(t);for(;i!==s&&i!=="/"&&i.length>3;){for(let c of r)n.push(pt(i,c));let a=Or(i);if(a===i)break;i=a}return n}o(_s,"getNestedSkillPaths");async function lp(e,t){let n=_s(e,t),r={projectPaths:[pt(t,".kodax","skills"),...n]};return pn(t,r)}o(lp,"discoverSkillsWithMonorepo");import{execSync as fp}from"child_process";import up from"path";var pp=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 Rs(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of pp)if(t===n||t.startsWith(`${n} `)){if(n==="sed"&&t.split(/\s+/).some(s=>s.startsWith("-i")||s==="--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(s=>/^(-v|--version|-h|--help)$/.test(s)))return!1}return!0}return!1}o(Rs,"isSingleSafeDynamicContextCommand");function mp(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&up.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return Rs(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!Rs(s))return!1}return!0}o(mp,"isSafeDynamicContextCommand");function xs(e){let t=[],n="",r=!1,i="";for(let s=0;s<e.length;s++){let a=e[s];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}o(xs,"parseArguments");var mt=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=xs(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 s=parseInt(i,10);return n[s]??""})}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 s=t;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);s=s.replace(a,d)}catch(d){let l=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${l}]`)}return s}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(!mp(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return fp(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 hp(e){return new mt(e)}o(hp,"createResolver");async function je(e,t,n){return new mt(n).resolve(e,t)}o(je,"resolveSkillContent");var mn=class{static{o(this,"SkillRegistry")}skillsByName=new Map;fullSkillsByName=new Map;projectRoot;customPaths;constructor(t,n){this.projectRoot=t,this.customPaths=n}async discover(){let t=await pn(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)H({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 tt(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 je(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}},We=null,As;function hn(e,t){return We&&e!==void 0&&As!==e&&(We=null),We||(We=new mn(e,t),As=e),We}o(hn,"getSkillRegistry");async function Ur(e,t){let n=hn(e,t);return await n.discover(),n}o(Ur,"initializeSkillRegistry");function gp(){We=null}o(gp,"resetSkillRegistry");var ht=class{static{o(this,"SkillExecutor")}context;constructor(t){this.context=t}async execute(t,n,r){let i=hn();if(!i.has(t))return{success:!1,content:"",error:`Skill not found: ${t}`};try{let s=await i.loadFull(t),a=r?.mode??(s.context==="fork"?"fork":"inline"),c=await je(s.content,n,this.context);return a==="fork"?this.executeFork(s,c,r):this.executeInline(s,c,r)}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}}async executeInline(t,n,r){let i=this.buildPrompt(t,n);if(r?.onExecute)try{return{success:!0,content:await r.onExecute(i,t)}}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}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 wp(e){return new ht(e)}o(wp,"createExecutor");async function yp(e,t,n,r){return new ht(n).execute(e,t,r)}o(yp,"executeSkill");function Es(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}o(Es,"escapeXml");var Br=120;function gn(e){return e.replace(/\\/g,"/")}o(gn,"formatDisplayPath");function vp(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}))]}o(vp,"collectSupportFiles");function kp(e){let t=vp(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,s]of n)s?.length&&r.push(`- ${i}/: ${gn(`${e.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of t.slice(0,Br))r.push(`- ${i}/${s.relativePath}: ${gn(s.path)}`);return t.length>Br&&r.push(`- ... ${t.length-Br} more files under ${gn(e.path)}`),r}o(kp,"buildSupportFileContext");function bp(e,t,n){let r=[];r.push(`<skill name="${Es(e.name)}" location="${Es(e.path)}">`),r.push(""),r.push(`Skill root: ${gn(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=kp(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
+ `)}o(bp,"buildSkillBlock");async function Hr(e,t,n){let r=await je(e.content,t,n);return{content:bp(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}o(Hr,"expandSkillForLLM");function Ip(e,t){let n=`Skill activated: ${e}`;return t.trim()&&(n+=` with arguments: ${t}`),n}o(Ip,"formatSkillActivationMessage");import{writeFile as Fs}from"node:fs/promises";import ke from"node:path";import{existsSync as Sp}from"node:fs";import{mkdir as _p,readFile as qr,readdir as Rp,stat as Ps,writeFile as bb}from"node:fs/promises";import xp from"node:os";import fe from"node:path";import{fileURLToPath as $s,pathToFileURL as Ap}from"node:url";import Ep from"yaml";var Pe=null;function Cs(e){Pe=e}o(Cs,"setKodaXSDKForSkillCreator");async function ve(){if(Pe)return Pe;let e=fe.dirname($s(import.meta.url)),t=[],n=fe.resolve(e,"../../../index.js");if(Sp(n))return Pe=await import(Ap(n).href),Pe;t.push(`relative SDK path not found: ${n}`);try{return Pe=await import(["@kodax-ai","kodax"].join("/")),Pe}catch(r){t.push(`bare-name @kodax-ai/kodax failed: ${r?.code??r?.message}`)}throw new Error(`Cannot locate KodaX SDK from helper script ${import.meta.url}.
31
+ Attempted:
32
+ - ${t.join(`
33
+ - `)}`)}o(ve,"loadKodaXSDK");function jp(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
34
+ `).replace(/\r/g,`
35
+ `).trimStart();if(!t.startsWith(`---
36
+ `))throw new Error("SKILL.md missing YAML frontmatter");let n=t.indexOf(`
37
+ ---
38
+ `,4);if(n===-1)throw new Error("SKILL.md has unclosed YAML frontmatter");return{yamlText:t.slice(4,n),body:t.slice(n+5).trim()}}o(jp,"extractFrontmatter");function wn(e){let{yamlText:t,body:n}=jp(e),r=Ep.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Frontmatter must be a YAML object");return{frontmatter:r,body:n}}o(wn,"parseSkillMarkdown");async function wt(e){let t=fe.join(e,"SKILL.md");if(!(await Ps(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await qr(t,"utf8"),{frontmatter:i,body:s}=wn(r);return{skillDir:fe.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}o(wt,"loadSkill");async function yt(e){try{return await Ps(e),!0}catch{return!1}}o(yt,"pathExists");function yn(e){if(!e.length)return{mean:0,stddev:0,min:0,max:0};let t=e.reduce((r,i)=>r+i,0)/e.length,n=e.length>1?e.reduce((r,i)=>r+(i-t)**2,0)/(e.length-1):0;return{mean:gt(t),stddev:gt(Math.sqrt(n)),min:gt(Math.min(...e)),max:gt(Math.max(...e))}}o(yn,"calculateStats");function gt(e,t=4){return Number(e.toFixed(t))}o(gt,"roundNumber");function vn(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}o(vn,"formatDelta");function js(e){try{return JSON.parse(e)}catch{return null}}o(js,"safeJsonParse");function Je(e){let t=js(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:js(e.slice(n,r+1))}o(Je,"extractJsonObject");async function re(e,t=null){try{return JSON.parse(await qr(e,"utf8"))}catch{return t}}o(re,"readJsonFile");async function Ve(e,t){let n=fe.dirname($s(e));return qr(fe.resolve(n,t),"utf8")}o(Ve,"loadRelativeText");function K(e,t=12e3){let n=typeof e=="string"?e:String(e??"");if(n.length<=t)return n;let r=n.length-t;return`${n.slice(0,t)}
39
+
40
+ [truncated ${r} chars]`}o(K,"truncateText");function Ls(e){let t=Array.isArray(e)?e.length:0,n=Array.isArray(e)?e.filter(i=>i?.passed===!0).length:0,r=Math.max(t-n,0);return{passed:n,failed:r,total:t,pass_rate:t>0?gt(n/t):0}}o(Ls,"computePassSummary");async function zr(e,t=e,n=[]){let r=await Rp(t,{withFileTypes:!0}).catch(()=>[]);for(let i of r.sort((s,a)=>s.name.localeCompare(a.name))){let s=fe.join(t,i.name);if(i.isDirectory()){await zr(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:fe.relative(e,s).replace(/\\/g,"/")})}return n}o(zr,"collectFiles");function vt(){return fe.join(xp.homedir(),".kodax","skills")}o(vt,"getDefaultSkillsDir");async function U(e){return await _p(e,{recursive:!0}),e}o(U,"ensureDirectory");function Pp(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}o(Pp,"titleFromSlug");function $p(e,t){let n=Pp(e);return`---
41
+ name: ${e}
42
+ description: ${t}
43
+ user-invocable: true
44
+ allowed-tools: "Read, Grep, Glob"
45
+ compatibility: "Optimized for KodaX and Agent Skills style directories."
46
+ ---
47
+
48
+ # ${n}
49
+
50
+ Describe the task this skill handles, the trigger boundary, and the expected outcome.
51
+
52
+ ## When to use
53
+
54
+ - Use this skill when the user asks for ${n.toLowerCase()}.
55
+ - Do not use this skill when the request only needs a short explanation or is out of scope.
56
+
57
+ ## Workflow
58
+
59
+ 1. Restate the task boundary in one sentence.
60
+ 2. Gather the minimum context needed to do the work well.
61
+ 3. Execute the task, preferring small, verifiable steps.
62
+ 4. Summarize what changed, what was validated, and any remaining risks.
63
+
64
+ ## References
65
+
66
+ - Put deeper guidance in \`references/\`.
67
+ - Put reusable templates or static files in \`assets/\`.
68
+ - Put repeatable helper scripts in \`scripts/\`.
69
+ `}o($p,"renderSkillTemplate");function Cp(e){return JSON.stringify({skill_name:e,evals:[{id:1,prompt:"TODO: Add a realistic user request to evaluate this skill.",expected_output:"Describe what a successful result should accomplish.",files:[],assertions:[]}]},null,2)}o(Cp,"renderEvalTemplate");async function Lp(e){let t=ke.resolve(e.baseDir??vt()),n=ke.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await yt(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await U(n),await U(ke.join(n,"references")),await U(ke.join(n,"assets")),await U(ke.join(n,"scripts")),await Fs(ke.join(n,"SKILL.md"),$p(e.name,r),"utf8"),e.includeEvals!==!1&&(await U(ke.join(n,"evals")),await Fs(ke.join(n,"evals","evals.json"),`${Cp(e.name)}
70
+ `,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}o(Lp,"initSkill");function Fp(e){let t={name:e[2],baseDir:void 0,description:void 0,force:!1,includeEvals:!0};for(let n=3;n<e.length;n+=1){let r=e[n];(r==="--path"||r==="--dest")&&e[n+1]?t.baseDir=e[++n]:r==="--description"&&e[n+1]?t.description=e[++n]:r==="--force"?t.force=!0:r==="--no-evals"&&(t.includeEvals=!1)}return t}o(Fp,"parseArgs");async function Wr(e=process.argv){let t=Fp(e);t.name||(console.error("Usage: node scripts/init-skill.js <skill-name> [--path <skills-dir>] [--description <text>] [--force] [--no-evals]"),process.exit(1));let n=await Lp(t);console.log(`Initialized ${n.skillDir}`)}o(Wr,"main");var Np=!1;Np&&Wr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import Ns from"node:path";var Dp=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);async function kt(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await wt(e)}catch(d){return t.errors.push(d instanceof Error?d.message:String(d)),t}let{frontmatter:r,body:i}=n;t.frontmatter=r;let s=Object.keys(r).filter(d=>!Dp.has(d));s.length>0&&t.errors.push(`Unexpected frontmatter keys: ${s.sort().join(", ")}`);let a=typeof r.name=="string"?r.name.trim():"",c=typeof r.description=="string"?r.description.trim():"";if(!a)t.errors.push("Missing required frontmatter field: name");else{/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(a)||t.errors.push(`Invalid skill name "${a}". Use lowercase kebab-case and avoid consecutive hyphens.`),a.length>64&&t.errors.push(`Skill name is too long (${a.length}/64).`);let d=Ns.basename(Ns.resolve(e));d!==a&&t.warnings.push(`Skill directory name "${d}" does not match frontmatter name "${a}".`)}if(c?(c.length>1024&&t.errors.push(`Description is too long (${c.length}/1024).`),/[<>]/.test(c)&&t.errors.push("Description cannot contain angle brackets."),/[。.!?]/.test(c)||t.warnings.push("Description may be too terse; consider making the trigger conditions clearer.")):t.errors.push("Missing required frontmatter field: description"),i.trim()||t.errors.push("SKILL.md body is empty."),r.compatibility!=null&&(typeof r.compatibility!="string"?t.errors.push("compatibility must be a string if provided."):r.compatibility.length>500&&t.errors.push(`compatibility is too long (${r.compatibility.length}/500).`)),r["allowed-tools"]!=null){let d=r["allowed-tools"];typeof d=="string"||Array.isArray(d)&&d.every(f=>typeof f=="string")||t.errors.push("allowed-tools must be a string or string array.")}return r["disable-model-invocation"]!=null&&typeof r["disable-model-invocation"]!="boolean"&&t.errors.push("disable-model-invocation must be a boolean."),r["user-invocable"]!=null&&typeof r["user-invocable"]!="boolean"&&t.errors.push("user-invocable must be a boolean."),r.context!=null&&r.context!=="fork"&&t.errors.push('context must be "fork" when provided.'),r.hooks!=null&&(typeof r.hooks!="object"||Array.isArray(r.hooks))&&t.errors.push("hooks must be an object when provided."),t.valid=t.errors.length===0,t}o(kt,"validateSkillDirectory");async function Jr(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await kt(t);if(n.errors.length===0)console.log("Skill is valid.");else{console.error("Skill validation failed:");for(let r of n.errors)console.error(`- ${r}`)}if(n.warnings.length>0){console.log("Warnings:");for(let r of n.warnings)console.log(`- ${r}`)}process.exit(n.valid?0:1)}o(Jr,"main");var Tp=!1;Tp&&Jr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as Vr,writeFile as ue}from"node:fs/promises";import S from"node:path";function Mp(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}o(Mp,"normalizeAssertion");function Op(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}o(Op,"countToolCalls");function Kp(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_result"&&r.is_error===!0).length:t,0)}o(Kp,"countToolErrors");function Up(e,t){return`${["# Skill Eval Transcript","","## Eval Prompt","",e,"","## Final Response","",t.lastText||"(No final text)","","## Result Flags","",`- success: ${t.success}`,`- signal: ${t.signal??"none"}`,`- interrupted: ${t.interrupted===!0}`,`- limit_reached: ${t.limitReached===!0}`].join(`
71
+ `)}
72
+ `}o(Up,"renderTranscript");async function Bp(e,t){let n=S.dirname(S.resolve(t.evalsPath)),r=S.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=S.isAbsolute(s)?s:S.resolve(n,s),c=S.resolve(r,s),d=null,l=a;try{d=await Vr(a,"utf8")}catch{d=await Vr(c,"utf8").catch(()=>null),l=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
73
+ \`\`\`
74
+ ${d}
75
+ \`\`\`
76
+ (Resolved from ${l})`)}return i.length===0?"":`## Input Files
77
+
78
+ ${i.join(`
79
+
80
+ `)}
81
+
82
+ `}o(Bp,"readInputFiles");async function Hp(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Bp(e.files,t)}${n}`.trim()}o(Hp,"buildEvalPrompt");async function qp(e,t){let{runKodaX:n,estimateTokens:r}=await ve(),i=Date.now(),s=await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??30,reasoningMode:t.reasoningMode??"off",thinking:t.reasoningMode?t.reasoningMode!=="off":!1,context:{gitRoot:S.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}o(qp,"defaultRunAgent");async function zp(e,t,n,r){return e==="with_skill"?(await Hr(t,n,{workingDirectory:S.resolve(r.cwd??process.cwd()),projectRoot:S.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content:n}o(zp,"prepareConfigPrompt");async function Wp(e,t,n,r,i){let s=S.join(e,"outputs");await U(s);let a={total_tool_calls:Op(i.result.messages),errors_encountered:Kp(i.result.messages),output_chars:i.result.lastText.length};await ue(S.join(s,"result.md"),`${i.result.lastText}
83
+ `,"utf8"),await ue(S.join(s,"prompt.txt"),`${r}
84
+ `,"utf8"),await ue(S.join(e,"transcript.md"),Up(r,i.result),"utf8"),await ue(S.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
85
+ `,"utf8"),await ue(S.join(s,"messages.json"),`${JSON.stringify(i.result.messages,null,2)}
86
+ `,"utf8"),await ue(S.join(e,"timing.json"),`${JSON.stringify({total_tokens:i.totalTokens,duration_ms:i.durationMs,total_duration_seconds:Number((i.durationMs/1e3).toFixed(4))},null,2)}
87
+ `,"utf8"),await ue(S.join(e,"result.json"),`${JSON.stringify({success:i.result.success,signal:i.result.signal??null,signal_reason:i.result.signalReason??null,interrupted:i.result.interrupted===!0,limit_reached:i.result.limitReached===!0,session_id:i.result.sessionId,execution_metrics:a},null,2)}
88
+ `,"utf8")}o(Wp,"writeRunArtifacts");async function Jp(e,t=qp){let n=await tt(S.resolve(e.skillPath),"user");if(!n)throw new Error(`Failed to load skill from ${e.skillPath}`);let r=S.resolve(e.workspaceDir);await U(r);let i=JSON.parse(await Vr(e.evalsPath,"utf8")),s=Array.isArray(i.evals)?i.evals:[],a=e.configs?.length?e.configs:["with_skill","without_skill"],c=Number.isFinite(e.runsPerConfig)&&e.runsPerConfig>0?Math.floor(e.runsPerConfig):1,d=[];for(let l=0;l<s.length;l+=1){let f=s[l],u=S.join(r,`eval-${l}`);await U(u),await ue(S.join(u,"eval_metadata.json"),`${JSON.stringify({eval_id:f.id??l,eval_name:f.name??`eval-${l}`,prompt:f.prompt??f.query??"",expected_output:f.expected_output??"",assertions:(Array.isArray(f.assertions)?f.assertions:[]).map(Mp).filter(Boolean)},null,2)}
89
+ `,"utf8");let p=await Hp(f,e),h={};for(let g of a){let y=S.join(u,g);await U(y),h[g]=[];for(let v=1;v<=c;v+=1){let k=S.join(y,`run-${v}`);await U(k);let I=await zp(g,n,p,e),$=await t(I,{...e,configName:g,evalItem:f,runIndex:v});await Wp(k,g,f,I,$),h[g].push({run_id:`run-${v}`,session_id:$.result.sessionId,success:$.result.success,total_tokens:$.totalTokens,duration_ms:$.durationMs,output_chars:$.result.lastText.length})}}d.push({eval_id:f.id??l,prompt:f.prompt??f.query??"",configs:h})}return{workspace:r,skill_name:n.name,eval_count:s.length,configs:a,runs_per_config:c,reports:d}}o(Jp,"runEvalWorkspace");function Vp(e){let t={skillPath:"",evalsPath:"",workspaceDir:"",provider:"anthropic",model:void 0,runsPerConfig:1,maxIter:30,reasoningMode:"off",cwd:process.cwd(),configs:["with_skill","without_skill"],output:void 0};for(let n=2;n<e.length;n+=1){let r=e[n];r==="--skill-path"&&e[n+1]?t.skillPath=e[++n]:r==="--evals"&&e[n+1]?t.evalsPath=e[++n]:r==="--workspace"&&e[n+1]?t.workspaceDir=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--runs"&&e[n+1]?t.runsPerConfig=Number(e[++n]):r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--configs"&&e[n+1]?t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean):r==="--output"&&e[n+1]&&(t.output=e[++n])}return t}o(Vp,"parseArgs");async function Yr(e=process.argv){let t=Vp(e);(!t.skillPath||!t.evalsPath||!t.workspaceDir)&&(console.error("Usage: node scripts/run-eval.js --skill-path <dir> --evals <evals.json> --workspace <dir> [--provider anthropic] [--runs 1]"),process.exit(1));let n=await Jp(t),r=`${JSON.stringify(n,null,2)}
90
+ `;t.output?(await ue(t.output,r,"utf8"),console.log(`Wrote ${S.resolve(t.output)}`)):process.stdout.write(r)}o(Yr,"main");var Yp=!1;Yp&&Yr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as Gp,readFile as Gr,writeFile as Ts}from"node:fs/promises";import _ from"node:path";function $e(e){return String(e??"").trim()}o($e,"normalizeExpectationText");function Ms(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?$e(i):i&&typeof i=="object"&&typeof i.text=="string"?$e(i.text):"").filter(Boolean);if(n.length>0)return n;let r=$e(e?.expected_output);return r?[r]:[]}o(Ms,"normalizeExpectedRubric");function Xr(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(Xr,"normalizeStringArray");function Ds(e,t){return{text:$e(e?.text??t),passed:e?.passed===!0,evidence:$e(e?.evidence)}}o(Ds,"normalizeExpectationEntry");function Xp(e,t){let n=Je(e)??{},r=Array.isArray(n.expectations)?n.expectations:[],i=[],s=new Set;for(let a of t){let c=r.findIndex((d,l)=>s.has(l)?!1:$e(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(Ds(r[c],a))}if(t.length===0)for(let a of r){let c=Ds(a,"");c.text&&i.push(c)}return{overall_summary:$e(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:Xr(n.user_notes_summary?.uncertainties),needs_review:Xr(n.user_notes_summary?.needs_review),workarounds:Xr(n.user_notes_summary?.workarounds)}}}o(Xp,"normalizeParsedGrading");async function Qr(e){return(await Gp(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>_.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(Qr,"listDirectories");async function Qp(e){let t=_.dirname(e),n=_.dirname(t),r=_.basename(t),i=_.basename(e),s=_.join(e,"outputs"),a=await re(_.join(n,"eval_metadata.json"),{}),c=await Gr(_.join(s,"result.md"),"utf8").catch(()=>""),d=await Gr(_.join(s,"prompt.txt"),"utf8").catch(()=>""),l=await Gr(_.join(e,"transcript.md"),"utf8").catch(()=>""),f=await re(_.join(s,"metrics.json"),{}),u=await re(_.join(e,"result.json"),{}),p=await re(_.join(e,"timing.json"),{});return{evalDir:n,runDir:e,runId:i,configName:r,evalMetadata:a,outputsDir:s,resultText:c,promptText:d,transcript:l,metrics:f,result:u,timing:p}}o(Qp,"loadRunContext");function Zp(e){let t=Ms(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
91
+ `):"(No explicit assertions; infer one expectation from expected_output if present.)";return`${e.agentInstructions.trim()}
92
+
93
+ Return JSON with this shape:
94
+ {
95
+ "overall_summary": "short summary",
96
+ "expectations": [
97
+ {
98
+ "text": "expectation text",
99
+ "passed": true,
100
+ "evidence": "short evidence grounded in the output"
101
+ }
102
+ ],
103
+ "user_notes_summary": {
104
+ "uncertainties": [],
105
+ "needs_review": [],
106
+ "workarounds": []
107
+ }
108
+ }
109
+
110
+ ## Run Metadata
111
+ - eval_id: ${e.evalMetadata.eval_id??"unknown"}
112
+ - eval_name: ${e.evalMetadata.eval_name??"unknown"}
113
+ - config: ${e.configName}
114
+ - run_id: ${e.runId}
115
+
116
+ ## Eval Prompt
117
+ ${K(e.evalMetadata.prompt??e.promptText,4e3)}
118
+
119
+ ## Expected Outcome
120
+ ${K(e.evalMetadata.expected_output??"",2e3)}
121
+
122
+ ## Assertions
123
+ ${n}
124
+
125
+ ## Final Output
126
+ ${K(e.resultText,12e3)}
127
+
128
+ ## Result Flags
129
+ ${JSON.stringify({success:e.result.success??null,signal:e.result.signal??null,interrupted:e.result.interrupted??!1,limit_reached:e.result.limit_reached??e.result.limitReached??!1},null,2)}
130
+
131
+ ## Execution Metrics
132
+ ${JSON.stringify({total_tool_calls:e.metrics.total_tool_calls??e.result.execution_metrics?.total_tool_calls??0,errors_encountered:e.metrics.errors_encountered??e.result.execution_metrics?.errors_encountered??0,output_chars:e.metrics.output_chars??e.result.execution_metrics?.output_chars??e.resultText.length,total_tokens:e.timing.total_tokens??0,total_duration_seconds:e.timing.total_duration_seconds??0},null,2)}
133
+
134
+ ## Transcript Excerpt
135
+ ${K(e.transcript,5e3)}
136
+ `}o(Zp,"buildGradingPrompt");async function Os(e,t){let{runKodaX:n}=await ve();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:_.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(Os,"defaultRunJudge");async function em(e,t,n=Os){let r=await Qp(_.resolve(e)),i=Ms(r.evalMetadata),s=await Ve(import.meta.url,"../agents/grader.md"),a=Zp({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=Xp(c,i),l={total_tool_calls:r.metrics.total_tool_calls??r.result.execution_metrics?.total_tool_calls??0,errors_encountered:r.metrics.errors_encountered??r.result.execution_metrics?.errors_encountered??0,output_chars:r.metrics.output_chars??r.result.execution_metrics?.output_chars??r.resultText.length},f={summary:Ls(d.expectations),expectations:d.expectations,execution_metrics:l,user_notes_summary:d.user_notes_summary,overall_summary:d.overall_summary,timing:{total_tokens:r.timing.total_tokens??0,total_duration_seconds:r.timing.total_duration_seconds??0},meta:{generated_at:new Date().toISOString(),eval_id:r.evalMetadata.eval_id??null,eval_name:r.evalMetadata.eval_name??null,config:r.configName,run_id:r.runId}};return await Ts(_.join(r.runDir,"grading.json"),`${JSON.stringify(f,null,2)}
137
+ `,"utf8"),{runDir:r.runDir,grading:f,prompt:a,rawResponse:c}}o(em,"gradeRun");async function tm(e,t=Os){let n=_.resolve(e.workspaceDir);await U(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await Qr(n))if(_.basename(c).startsWith("eval-"))for(let d of await Qr(c)){let l=_.basename(d);if(!(r.size>0&&!r.has(l)))for(let f of await Qr(d)){if(!_.basename(f).startsWith("run-"))continue;let u=_.join(f,"grading.json");if(await re(u,null)&&e.overwrite!==!0){s.push(_.relative(n,f).replace(/\\/g,"/"));continue}let h=await em(f,e,t);i.push({run:_.relative(n,f).replace(/\\/g,"/"),summary:h.grading.summary,config:h.grading.meta.config,eval_id:h.grading.meta.eval_id})}}let a={workspace:n,generated_at:new Date().toISOString(),processed:i.length,skipped:s.length,processed_runs:i,skipped_runs:s};return await Ts(_.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
138
+ `,"utf8"),a}o(tm,"gradeWorkspace");function nm(e){let t={workspaceDir:e[2]??"",provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd(),overwrite:!1,configs:[]};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--overwrite"?t.overwrite=!0:r==="--configs"&&e[n+1]&&(t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean))}return t}o(nm,"parseArgs");async function Zr(e=process.argv){let t=nm(e);t.workspaceDir||(console.error("Usage: node scripts/grade-evals.js <workspace> [--provider anthropic] [--configs with_skill,without_skill] [--overwrite]"),process.exit(1));let n=await tm(t);process.stdout.write(`${JSON.stringify(n,null,2)}
139
+ `)}o(Zr,"main");var rm=!1;rm&&Zr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{writeFile as ri}from"node:fs/promises";import pe from"node:path";import{readFile as im,readdir as om,stat as sm,writeFile as Ks}from"node:fs/promises";import B from"node:path";async function ei(e){return JSON.parse(await im(e,"utf8"))}o(ei,"readJson");async function am(e){try{return await sm(e),!0}catch{return!1}}o(am,"pathExists");async function ti(e){return(await om(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>B.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(ti,"listDirectories");async function kn(e){let t=await am(B.join(e,"runs"))?B.join(e,"runs"):e,n=(await ti(t)).filter(i=>B.basename(i).startsWith("eval-")),r={};for(let i of n){let s=B.join(i,"eval_metadata.json"),c=(await ei(s).catch(()=>({}))).eval_id??B.basename(i);for(let d of await ti(i)){let l=B.basename(d),f=(await ti(d)).filter(u=>B.basename(u).startsWith("run-"));if(f.length!==0){r[l]??=[];for(let u of f){let p=await ei(B.join(u,"grading.json")).catch(()=>null);if(!p)continue;let h=await ei(B.join(u,"timing.json")).catch(()=>({}));r[l].push({eval_id:c,run_id:B.basename(u),pass_rate:p.summary?.pass_rate??0,passed:p.summary?.passed??0,failed:p.summary?.failed??0,total:p.summary?.total??0,time_seconds:h.total_duration_seconds??p.timing?.total_duration_seconds??0,tokens:h.total_tokens??p.execution_metrics?.output_chars??0,tool_calls:p.execution_metrics?.total_tool_calls??0,errors:p.execution_metrics?.errors_encountered??0,expectations:Array.isArray(p.expectations)?p.expectations:[],notes:[...p.user_notes_summary?.uncertainties??[],...p.user_notes_summary?.needs_review??[],...p.user_notes_summary?.workarounds??[]]})}}}}return r}o(kn,"loadRunResults");function cm(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:yn(a.map(c=>Number(c.pass_rate??0))),time_seconds:yn(a.map(c=>Number(c.time_seconds??0))),tokens:yn(a.map(c=>Number(c.tokens??0)))};let n=Object.keys(t),r=t[n[0]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}},i=t[n[1]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}};return{configs:t,delta:{pass_rate:vn(r.pass_rate.mean-i.pass_rate.mean),time_seconds:vn(r.time_seconds.mean-i.time_seconds.mean),tokens:vn(r.tokens.mean-i.tokens.mean)}}}o(cm,"summarizeConfigs");function ni(e,t,n){let r=cm(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:B.resolve(e),configs:r.configs,delta:r.delta,runs:n}}o(ni,"buildBenchmarkDocument");function dm(e){let t=[`# Benchmark: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"","| Config | Pass Rate | Time (s) | Tokens |","| --- | --- | --- | --- |"];for(let[n,r]of Object.entries(e.configs))t.push(`| ${n} | ${r.pass_rate.mean} \xB1 ${r.pass_rate.stddev} | ${r.time_seconds.mean} \xB1 ${r.time_seconds.stddev} | ${r.tokens.mean} \xB1 ${r.tokens.stddev} |`);return t.push(""),t.push("## Delta"),t.push(""),t.push(`- Pass rate: ${e.delta.pass_rate}`),t.push(`- Time (s): ${e.delta.time_seconds}`),t.push(`- Tokens: ${e.delta.tokens}`),t.join(`
140
+ `)}o(dm,"renderBenchmarkMarkdown");function lm(e){let t={iterationDir:e[2],skillName:"unknown-skill"};for(let n=3;n<e.length;n+=1)e[n]==="--skill-name"&&e[n+1]&&(t.skillName=e[n+1],n+=1);return t}o(lm,"parseArgs");async function fm(){let{iterationDir:e,skillName:t}=lm(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await kn(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=ni(e,t,n),i=B.join(e,"benchmark.json"),s=B.join(e,"benchmark.md");await Ks(i,JSON.stringify(r,null,2)),await Ks(s,`${dm(r)}
141
+ `),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}o(fm,"main");var um=!1;um&&fm().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});function bn(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(bn,"normalizeStringArray");function pm(e){let t={};for(let[n,r]of Object.entries(e)){let i=new Map,s=[];for(let a of r){for(let c of a.expectations??[]){if(c?.passed===!0)continue;let d=String(c?.text??"").trim();d&&i.set(d,(i.get(d)??0)+1)}for(let c of a.notes??[]){let d=String(c??"").trim();d&&s.push(d)}}t[n]={repeated_failures:Array.from(i.entries()).sort((a,c)=>c[1]-a[1]).slice(0,10).map(([a,c])=>({text:a,count:c})),notes:s.slice(0,10)}}return t}o(pm,"summarizeFailureClusters");function mm(e,t,n){let r=Je(e)??{};return{skill_name:t.skill_name,generated_at:new Date().toISOString(),workspace:t.workspace,verdict:["improves","regresses","mixed","inconclusive"].includes(r.verdict)?r.verdict:"inconclusive",release_readiness:["ready","needs_iteration","needs_manual_review"].includes(r.release_readiness)?r.release_readiness:"needs_manual_review",recommendation:String(r.recommendation??"").trim(),key_findings:bn(r.key_findings),variance_hotspots:bn(r.variance_hotspots),suggested_actions:bn(r.suggested_actions),watchouts:bn(r.watchouts),supporting_metrics:{pass_rate_delta:t.delta?.pass_rate??"n/a",time_seconds_delta:t.delta?.time_seconds??"n/a",tokens_delta:t.delta?.tokens??"n/a"},failure_clusters:n}}o(mm,"normalizeAnalysisResult");function hm(e){return`${e.agentInstructions.trim()}
142
+
143
+ Return JSON with this shape:
144
+ {
145
+ "verdict": "improves | regresses | mixed | inconclusive",
146
+ "release_readiness": "ready | needs_iteration | needs_manual_review",
147
+ "recommendation": "short recommendation",
148
+ "key_findings": [],
149
+ "variance_hotspots": [],
150
+ "suggested_actions": [],
151
+ "watchouts": []
152
+ }
153
+
154
+ ## Benchmark Summary
155
+ ${K(JSON.stringify({skill_name:e.benchmark.skill_name,configs:e.benchmark.configs,delta:e.benchmark.delta},null,2),12e3)}
156
+
157
+ ## Failure Clusters
158
+ ${K(JSON.stringify(e.failureClusters,null,2),8e3)}
159
+ `}o(hm,"buildAnalysisPrompt");async function gm(e,t){let{runKodaX:n}=await ve();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:pe.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(gm,"defaultRunAnalyst");function wm(e){let t=[`# Benchmark Analysis: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"",`- Verdict: ${e.verdict}`,`- Release readiness: ${e.release_readiness}`,`- Recommendation: ${e.recommendation||"n/a"}`,""],n=[["key_findings","Key Findings"],["variance_hotspots","Variance Hotspots"],["suggested_actions","Suggested Actions"],["watchouts","Watchouts"]];for(let[r,i]of n){t.push(`## ${i}`),t.push("");let s=Array.isArray(e[r])?e[r]:[];if(s.length===0)t.push("- None");else for(let a of s)t.push(`- ${a}`);t.push("")}return t.push("## Supporting Metrics"),t.push(""),t.push(`- Pass rate delta: ${e.supporting_metrics.pass_rate_delta}`),t.push(`- Time delta: ${e.supporting_metrics.time_seconds_delta}`),t.push(`- Tokens delta: ${e.supporting_metrics.tokens_delta}`),`${t.join(`
160
+ `)}
161
+ `}o(wm,"renderAnalysisMarkdown");async function ym(e,t=gm){let n=pe.resolve(e.workspaceDir),r=pe.resolve(e.benchmarkPath??pe.join(n,"benchmark.json")),i=await re(r,null);if(!i){let h=await kn(n);if(Object.keys(h).length===0)throw new Error(`No benchmark data found in ${n}`);i=ni(n,e.skillName??pe.basename(n),h),await ri(r,`${JSON.stringify(i,null,2)}
162
+ `,"utf8")}let s=await kn(n),a=pm(s),c=await Ve(import.meta.url,"../agents/analyzer.md"),d=hm({agentInstructions:c,benchmark:i,failureClusters:a}),l=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),f=mm(l,i,a),u=pe.resolve(e.outputPath??pe.join(n,"analysis.json")),p=pe.resolve(e.markdownPath??pe.join(n,"analysis.md"));return await ri(u,`${JSON.stringify(f,null,2)}
163
+ `,"utf8"),await ri(p,wm(f),"utf8"),{analysis:f,prompt:d,rawResponse:l,analysisJsonPath:u,analysisMdPath:p}}o(ym,"analyzeBenchmark");function vm(e){let t={workspaceDir:e[2]??"",benchmarkPath:void 0,outputPath:void 0,markdownPath:void 0,skillName:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--benchmark"&&e[n+1]?t.benchmarkPath=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--skill-name"&&e[n+1]?t.skillName=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(vm,"parseArgs");async function ii(e=process.argv){let t=vm(e);t.workspaceDir||(console.error("Usage: node scripts/analyze-benchmark.js <workspace> [--benchmark benchmark.json] [--output analysis.json] [--markdown analysis.md]"),process.exit(1));let n=await ym(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
164
+ `)}o(ii,"main");var km=!1;km&&ii().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as bm,readFile as Us,writeFile as Bs}from"node:fs/promises";import E from"node:path";async function si(e){return(await bm(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>E.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(si,"listDirectories");function oi(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(oi,"normalizeStringArray");function Im(e){let t=Je(e)??{},n=["A","B","tie","inconclusive"].includes(t.winner)?t.winner:"inconclusive",r=Number(t.confidence);return{winner:n,confidence:Number.isFinite(r)?Math.max(0,Math.min(1,Number(r.toFixed(4)))):0,rationale:String(t.rationale??"").trim(),strengths_a:oi(t.strengths_a),strengths_b:oi(t.strengths_b),risks:oi(t.risks)}}o(Im,"normalizeComparisonResult");async function Sm(e,t,n,r){let i=(await si(E.join(e,t))).filter(u=>E.basename(u).startsWith("run-")),s=(await si(E.join(e,n))).filter(u=>E.basename(u).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await re(E.join(e,"eval_metadata.json"),{}),l=await Us(E.join(a,"outputs","result.md"),"utf8").catch(()=>""),f=await Us(E.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:E.basename(a),configName:t,output:l},runB:{runDir:c,runId:E.basename(c),configName:n,output:f}}}o(Sm,"loadComparisonPair");function _m(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
165
+
166
+ Return JSON with this shape:
167
+ {
168
+ "winner": "A | B | tie | inconclusive",
169
+ "confidence": 0.0,
170
+ "rationale": "short explanation",
171
+ "strengths_a": [],
172
+ "strengths_b": [],
173
+ "risks": []
174
+ }
175
+
176
+ Judge only the visible outputs. Do not mention hidden config names in the rationale.
177
+
178
+ ## Eval Prompt
179
+ ${K(e.evalMetadata.prompt??"",4e3)}
180
+
181
+ ## Expected Outcome
182
+ ${K(e.evalMetadata.expected_output??"",2e3)}
183
+
184
+ ## Assertions
185
+ ${K(JSON.stringify(e.evalMetadata.assertions??[],null,2),4e3)}
186
+
187
+ ## Candidate A
188
+ ${K(t.A.output,12e3)}
189
+
190
+ ## Candidate B
191
+ ${K(t.B.output,12e3)}
192
+ `}o(_m,"buildComparisonPrompt");async function Rm(e,t){let{runKodaX:n}=await ve();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:E.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(Rm,"defaultRunComparator");function xm(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}o(xm,"mapWinnerToConfig");function Am(e){let t=[`# Blind Comparison: ${e.config_a} vs ${e.config_b}`,"",`Generated: ${e.generated_at}`,"",`- ${e.config_a} wins: ${e.summary.config_a_wins}`,`- ${e.config_b} wins: ${e.summary.config_b_wins}`,`- ties: ${e.summary.ties}`,`- inconclusive: ${e.summary.inconclusive}`,""];for(let n of e.comparisons)t.push(`## Eval ${n.eval_id??n.eval_name??n.index}`),t.push(""),t.push(`- Winner: ${n.winner_config}`),t.push(`- Confidence: ${n.confidence}`),t.push(`- Rationale: ${n.rationale||"n/a"}`),t.push("");return`${t.join(`
193
+ `)}
194
+ `}o(Am,"renderComparisonMarkdown");async function Em(e,t=Rm){let n=E.resolve(e.workspaceDir),r=e.configA??"with_skill",i=e.configB??"without_skill",s=Number.isFinite(e.maxPairs)&&e.maxPairs>0?Math.floor(e.maxPairs):Number.POSITIVE_INFINITY,a=await Ve(import.meta.url,"../agents/comparator.md"),c=[];for(let u of await si(n))if(E.basename(u).startsWith("eval-"))for(let p=0;p<s;p+=1){let h=await Sm(u,r,i,p);if(!h)break;let g=c.length%2===0,y=_m({agentInstructions:a,evalMetadata:h.evalMetadata,runA:h.runA,runB:h.runB,presentPrimaryFirst:g}),v=await t(y,{...e,workspaceDir:n,evalDir:u,pairIndex:p,configA:r,configB:i}),k=Im(v),I=xm(k.winner,g,r,i);c.push({index:c.length+1,eval_id:h.evalMetadata.eval_id??null,eval_name:h.evalMetadata.eval_name??null,run_a:E.relative(n,h.runA.runDir).replace(/\\/g,"/"),run_b:E.relative(n,h.runB.runDir).replace(/\\/g,"/"),presented_as:g?{A:r,B:i}:{A:i,B:r},winner_label:k.winner,winner_config:I,confidence:k.confidence,rationale:k.rationale,strengths_a:k.strengths_a,strengths_b:k.strengths_b,risks:k.risks})}if(c.length===0)throw new Error(`No comparable run pairs found for ${r} vs ${i} in ${n}`);let d={workspace:n,generated_at:new Date().toISOString(),config_a:r,config_b:i,summary:{total_pairs:c.length,config_a_wins:c.filter(u=>u.winner_config===r).length,config_b_wins:c.filter(u=>u.winner_config===i).length,ties:c.filter(u=>u.winner_config==="tie").length,inconclusive:c.filter(u=>u.winner_config==="inconclusive").length},comparisons:c},l=E.resolve(e.outputPath??E.join(n,"comparison.json")),f=E.resolve(e.markdownPath??E.join(n,"comparison.md"));return await Bs(l,`${JSON.stringify(d,null,2)}
195
+ `,"utf8"),await Bs(f,Am(d),"utf8"),{document:d,outputPath:l,markdownPath:f}}o(Em,"compareWorkspace");function jm(e){let t={workspaceDir:e[2]??"",configA:"with_skill",configB:"without_skill",outputPath:void 0,markdownPath:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,maxPairs:void 0,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--config-a"&&e[n+1]?t.configA=e[++n]:r==="--config-b"&&e[n+1]?t.configB=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--max-pairs"&&e[n+1]?t.maxPairs=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(jm,"parseArgs");async function ai(e=process.argv){let t=jm(e);t.workspaceDir||(console.error("Usage: node scripts/compare-runs.js <workspace> [--config-a with_skill] [--config-b without_skill] [--output comparison.json]"),process.exit(1));let n=await Em(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
196
+ `)}o(ai,"main");var Pm=!1;Pm&&ai().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as $m,writeFile as Cm}from"node:fs/promises";import{createHash as Lm}from"node:crypto";import ci from"node:path";import{zipSync as Fm,strToU8 as Nm}from"fflate";var Dm=".kodax-package.json";function Tm(e){return e instanceof Uint8Array?e:new Uint8Array(e)}o(Tm,"toUint8Array");function Mm(e){return Lm("sha256").update(e).digest("hex")}o(Mm,"sha256");function Om(e,t,n={}){return{format:"kodax-skill-package",version:1,created_at:n.createdAt??new Date().toISOString(),entrypoint:"SKILL.md",skill:{name:e.frontmatter.name,description:e.frontmatter.description,compatibility:e.frontmatter.compatibility??null,user_invocable:e.frontmatter["user-invocable"]??!0,disable_model_invocation:e.frontmatter["disable-model-invocation"]??!1},files:t.map(r=>({path:r.relativePath,size:r.bytes.length,sha256:r.sha256})),note:"This archive is a zip file with a .skill extension. Compatible agents can extract and install the included skill directory."}}o(Om,"createPackageManifest");async function Km(e,t={}){let n=await kt(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
197
+ - ${n.errors.join(`
198
+ - `)}`);let r=await wt(e),i=await zr(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let l=Tm(await $m(d.absolutePath));s.push({...d,bytes:l,sha256:Mm(l)})}let a=Om(r,s,t),c={[Dm]:Nm(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Fm(c,{level:6})}}o(Km,"buildSkillPackage");async function Um(e,t,n={}){let r=await Km(e,n);return await Cm(t,r.bytes),{...r,outputPath:ci.resolve(t)}}o(Um,"writeSkillPackage");function Bm(e){let t={skillDir:e[2],output:void 0};for(let n=3;n<e.length;n+=1)e[n]==="--output"&&e[n+1]&&(t.output=e[++n]);return t}o(Bm,"parseArgs");async function di(e=process.argv){let t=Bm(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await wt(t.skillDir),r=t.output??ci.join(ci.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await Um(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}o(di,"main");var Hm=!1;Hm&&di().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{cp as qm,mkdir as li,readFile as zs,rm as Ws,stat as zm,writeFile as Wm}from"node:fs/promises";import ie from"node:path";import{strFromU8 as Hs,unzipSync as Jm}from"fflate";var qs=".kodax-package.json";function Vm(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}o(Vm,"normalizeArchivePath");function Ym(e){let t=Vm(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}o(Ym,"assertSafeArchivePath");function Gm(e){return/\.(skill|zip)$/i.test(e)}o(Gm,"isZipLike");function Xm(e){let t=Jm(e),n=Object.entries(t).map(([l,f])=>({relativePath:Ym(l),bytes:f})),r=n.find(l=>l.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=wn(Hs(r.bytes)),s=typeof i.frontmatter.name=="string"?i.frontmatter.name.trim():"",a=typeof i.frontmatter.description=="string"?i.frontmatter.description.trim():"";if(!s||!a)throw new Error("Archive SKILL.md is missing required frontmatter fields.");let c=n.find(l=>l.relativePath===qs),d=c?JSON.parse(Hs(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(l=>l.relativePath!==qs)}}o(Xm,"readSkillPackageBuffer");async function Qm(e,t){if(await yt(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await Ws(e,{recursive:!0,force:!0})}await li(e,{recursive:!0})}o(Qm,"ensureInstallTarget");async function Zm(e,t={}){let n=ie.resolve(t.skillsDir??vt()),r=Xm(await zs(e)),i=ie.join(n,r.skillName);await Qm(i,t.force===!0);for(let s of r.entries){let a=ie.join(i,s.relativePath);await li(ie.dirname(a),{recursive:!0}),await Wm(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:ie.resolve(e),manifest:r.manifest}}o(Zm,"installSkillArchive");async function eh(e,t={}){let n=await kt(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
199
+ - ${n.errors.join(`
200
+ - `)}`);let r=ie.join(e,"SKILL.md"),i=wn(await zs(r,"utf8")),s=ie.resolve(t.skillsDir??vt()),a=ie.join(s,i.frontmatter.name);if(await yt(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await Ws(a,{recursive:!0,force:!0})}return await li(s,{recursive:!0}),await qm(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:ie.resolve(e),manifest:null}}o(eh,"installSkillDirectory");async function th(e,t={}){let n=ie.resolve(e),r=await zm(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return eh(n,t);if(r.isFile()&&Gm(n))return Zm(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}o(th,"installSkill");function nh(e){let t={input:e[2],skillsDir:void 0,force:!1};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--dest"&&e[n+1]?t.skillsDir=e[++n]:r==="--force"&&(t.force=!0)}return t}o(nh,"parseArgs");async function fi(e=process.argv){let t=nh(e);t.input||(console.error("Usage: node scripts/install-skill.js <skill-dir-or-archive> [--dest <skills-dir>] [--force]"),process.exit(1));let n=await th(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}o(fi,"main");var rh=!1;rh&&fi().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});var ih=["init","validate","eval","grade","analyze","compare","package","install"],oh={init:Wr,validate:Jr,eval:Yr,grade:Zr,analyze:ii,compare:ai,package:di,install:fi};function sh(e){return e!==void 0&&ih.some(t=>t===e)}o(sh,"isSkillCreatorDispatchAction");async function ah(e,t,n){Cs(n),await oh[e]([process.execPath,`skill-${e}.js`,...t])}o(ah,"dispatchSkillCreatorTool");var Js=/(?:-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|authorization:\s*bearer\b|\b(?:api[_\s-]?key|password|secret|token)\b\s*(?:[:=]|->|=>))/i,ch=/\b(?:api[_\s-]?key|password|secret|token)\b\s+(?:(?:actually|currently|now|presently|really)\s+)?(?:is|was|equals?)\s+(.+)/i,dh=/\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,lh=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"]),fh=/\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,uh=/\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,ph=/\byou\s+are\s+now\s+(?:in\s+)?(?:system|developer|assistant|tool)\s+mode\b/i,mh=/<\/?(?:system|developer|assistant|tool|prompt)(?=[\s/>])/i,hh=/(?:->|=>|[→⇒➔➜➝⟶⟹↦])/g,gh=/["'`*_~“”‘’«»‹›()[\]{}]+/g,Ys=/<\/?[^<>]*>/g;function Gs(e){return e.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g,"").replace(new RegExp("\\p{Cf}","gu"),"").replace(Ys," ").replace(/[<>]/g,"").replace(/\s+/g," ").trim()}o(Gs,"compactMemoryClaim");function pi(e){return e.normalize("NFKC").replace(new RegExp("\\p{Cf}","gu"),"").replace(hh," = ")}o(pi,"memoryClaimStructuralView");function Vs(e,t){return Gs(pi(e).replace(Ys,t).replace(gh,t))}o(Vs,"memoryClaimForDetection");function Xs(e){return[Vs(e," "),Vs(e,"")]}o(Xs,"memoryClaimDetectionViews");function wh(e){let n=(ch.exec(e)??dh.exec(e))?.[1]?.replace(/^["'`]+|[.!?'"`]+$/g,"").trim();return!(n===void 0||n.length===0||lh.has(n.toLowerCase()))}o(wh,"containsSentenceCredential");function yh(e){return Js.test(pi(e))||Xs(e).some(t=>Js.test(t)||wh(t))}o(yh,"isRestrictedMemoryContent");function ui(e){return yh(e)||mh.test(pi(e))||Xs(e).some(t=>fh.test(t)||uh.test(t)||ph.test(t))}o(ui,"containsUnsafeMemoryClaim");function T(e,t=512){let n=Gs(e);if(n.length===0)return;let r=n.slice(0,Math.max(1,t));return ui(e)||ui(n)||ui(r)?void 0:r}o(T,"sanitizePromptSafeMemoryClaim");import{createHash as Lh}from"node:crypto";import{readdir as Aa,readFile as Fh,rename as Nh,rm as Ea,writeFile as Dh,mkdir as Th}from"node:fs/promises";import{basename as oe,dirname as da,join as M,relative as Mh,resolve as yi,sep as Oh}from"node:path";import{createHmac as vh,randomBytes as kh,randomUUID as mi}from"node:crypto";import{mkdir as hi,open as bh,readFile as Ye,rename as Qs,rm as Ge,stat as Ih,writeFile as gi}from"node:fs/promises";import Y from"node:path";async function Zs(e,t){let n=await sa(e);return Object.keys(n.entries).length===0?t.lifecycle:n.entries[await oa(e,t.id)]?.lifecycle??t.lifecycle}o(Zs,"resolveManagedLifecycle");async function ea(e,t,n){await Sh(e,t.id,"archived",n)}o(ea,"archiveManagedMemoryRef");async function ta(e,t,n){let r=t.storageUri;if(r===void 0||!$h(e,r))throw new Error("memory ref is not stored under the managed memory root");await ra(e,async()=>{await Ge(r,{force:!0}),await Eh(e,Y.basename(r)),await na(e,t.id,"forgotten",n)})}o(ta,"forgetManagedMemoryRef");async function Sh(e,t,n,r){await ra(e,async()=>{await na(e,t,n,r)})}o(Sh,"updateLifecycle");async function na(e,t,n,r){let i=await sa(e),s=await oa(e,t);await Ph(e,{version:1,entries:{...i.entries,[s]:{lifecycle:n,updatedAt:r}}})}o(na,"updateLifecycleUnlocked");async function ra(e,t){let n=Y.join(e,".governance","lifecycle.lock");await hi(Y.dirname(n),{recursive:!0});let r=await _h(n);try{await t()}finally{try{await r.handle.close()}finally{await xh(n,r.token)}}}o(ra,"withLifecycleLock");async function _h(e){let t=Date.now()+5e3;for(;;)try{let n=await bh(e,"wx"),r=mi();try{return await n.writeFile(`${process.pid} ${r}
201
+ `,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await Ge(e,{force:!0}),i}}catch(n){if(!ca(n)&&!Ch(n))throw n;if(await Rh(e)){await Ge(e,{force:!0});continue}if(Date.now()>=t)throw new Error(`memory lifecycle lock timed out: ${e}`);await new Promise(r=>setTimeout(r,10))}}o(_h,"acquireLifecycleLock");async function Rh(e){try{if(Date.now()-(await Ih(e)).mtimeMs<=3e4)return!1;let t=ia(await Ye(e,"utf8"));return t!==void 0&&!Ah(t.pid)}catch(t){if(bt(t)||be(t)&&["EPERM","EACCES","EBUSY"].includes(String(t.code)))return!1;throw t}}o(Rh,"isStaleLifecycleLock");async function xh(e,t){try{ia(await Ye(e,"utf8"))?.token===t&&await Ge(e,{force:!0})}catch(n){if(!bt(n))throw n}}o(xh,"releaseLifecycleLock");function ia(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]}}o(ia,"parseLockOwner");function Ah(e){try{return process.kill(e,0),!0}catch(t){return!(be(t)&&t.code==="ESRCH")}}o(Ah,"isProcessAlive");async function Eh(e,t){let n=Y.join(e,"MEMORY.md"),r=`${n}.${mi()}.tmp`;try{let s=(await Ye(n,"utf8")).split(/\r?\n/).filter(a=>!a.includes(`(${t})`)).join(`
202
+ `);await gi(r,s.endsWith(`
203
+ `)||s.length===0?s:`${s}
204
+ `,"utf8"),await Qs(r,n)}catch(i){if(await Ge(r,{force:!0}),!bt(i))throw i}}o(Eh,"removeIndexLine");async function oa(e,t){return vh("sha256",await jh(e)).update(t).digest("hex")}o(oa,"tombstoneKey");async function jh(e){let t=Y.join(e,".governance","tombstone.key");try{return await Ye(t)}catch(r){if(!bt(r))throw r}await hi(Y.dirname(t),{recursive:!0});let n=kh(32);try{return await gi(t,n,{flag:"wx"}),n}catch(r){if(!ca(r))throw r;return Ye(t)}}o(jh,"readOrCreateKey");async function sa(e){try{let t=JSON.parse(await Ye(aa(e),"utf8"));if(!be(t)||t.version!==1||!be(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)||!be(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(bt(t))return{version:1,entries:{}};throw t}}o(sa,"readLifecycleState");async function Ph(e,t){let n=aa(e);await hi(Y.dirname(n),{recursive:!0});let r=`${n}.${mi()}.tmp`;try{await gi(r,`${JSON.stringify(t,null,2)}
205
+ `,"utf8"),await Qs(r,n)}catch(i){throw await Ge(r,{force:!0}),i}}o(Ph,"writeState");function aa(e){return Y.join(e,".governance","lifecycle.json")}o(aa,"statePath");function $h(e,t){let n=Y.resolve(e);return Y.resolve(t).startsWith(`${n}${Y.sep}`)}o($h,"isWithin");function be(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(be,"isRecord");function bt(e){return be(e)&&e.code==="ENOENT"}o(bt,"isMissing");function ca(e){return be(e)&&e.code==="EEXIST"}o(ca,"isAlreadyExists");function Ch(e){return be(e)?e.code==="EBUSY"?!0:process.platform==="win32"&&(e.code==="EPERM"||e.code==="EACCES"):!1}o(Ch,"isTransientLockContention");var _t="missing",ja=1,Kh=1440*60*1e3,Uh=2,Bh=200;function Hh(e){return new Rn(e)}o(Hh,"createMemoryControlPlane");var Rn=class{static{o(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??ur(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?_e(t.identity,"project"):Kt(t.cwd)),this.scopedRoots=t.memoryRoot!==void 0||t.identity===void 0?[]:zh(t.identity),this.now=t.now??(()=>new Date().toISOString()),this.onEvent=t.onEvent,this.projectDocs=t.projectDocs??qh(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 P(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 P(this.learningStorePath);if(n.warnings.length>0)return;let r=n.proposals.find(i=>It(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 P(this.learningStorePath);return r.warnings.length>0?[]:r.proposals.filter(i=>n.has(i.proposalId)&&i.status==="approved"&&i.approvedBy==="host"&&i.approvalPolicyId===`${Ot}:episode-promotion`).map(i=>i.proposalId)}async approveProposal(t,n){let r=await this.showProposal(t);if(r===void 0)return G(t,"memory proposal not found");if(n===void 0)return G(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=bi(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 de(this.learningStorePath,r,"rejected",n!==void 0&&n.trim().length>0?{rejectedReason:n}:{}),this.emit({type:"proposal.rejected",proposalId:t});let s=n?.trim(),a,c=[];if(s!==void 0&&s.length>0)try{a=await this.reviewMemoryFeedback({trigger:"proposal_rejected",userFeedback:s,sourceRefs:i.sourceRefs.map(d=>d.id),candidateRefIds:[...i.targetRefs.map(d=>d.id),...i.sourceRefs.map(d=>d.id)]}),c=a.warnings}catch(d){c=[`memory feedback review failed: ${_a(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=>_i(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):Si(t,this.now)}async archiveRef(t){let n=(await this.listRefs()).find(r=>r.id===t);return n?.kind!=="memdir"?xa(t,"archive"):(await ea(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"?xa(t,n):(await ta(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??Kh),i=Math.max(1,t.minRefs??Uh),s=og(this.memoryRoot),a=await cg(s),c=a?.lastCheckedAt??a?.lastRunAt,d=c===void 0?void 0:ha(c,r);if(d!==void 0&&ug(d,n)>0)return{ran:!1,skippedReason:"not_due",nextEligibleAt:d};let l=(await this.listRefs({includePrivate:t.includePrivate,includeSensitive:t.includeSensitive})).filter(pg);if(l.length<i)return{ran:!1,skippedReason:"insufficient_refs"};let f=this.buildGovernanceReport(l),u=sg(this.memoryRoot,f);return await An(u,`${JSON.stringify(f,null,2)}
206
+ `),await ag(this.memoryRoot,Bh),await dg(s,{version:ja,lastCheckedAt:n,lastRunAt:n,lastInventoryFingerprint:b(ga(l)),lastReportPath:u}),this.emit({type:"curator.completed",reportId:f.reportId}),{ran:!0,report:f,reportPath:u,nextEligibleAt:ha(n,r)}}async buildMemoryPack(t){let n=this.now(),r=ba(t),i=b(r);if(t.ignoreMemory===!0||Lg(t.task))return{generatedAt:n,taskFingerprint:i,memoryRevision:b("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(p=>Sg(p,t)).sort((p,h)=>Ia(h,t)-Ia(p,t)||Sn(h,r)-Sn(p,r)||p.id.localeCompare(h.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}),u=await this.buildPackHints(l.slice(0,d),t);return this.emit({type:"pack.selected",refIds:u.map(p=>p.ref.id)}),{generatedAt:n,taskFingerprint:i,memoryRevision:b(ga(a)),candidates:f,promptHints:u,hints:u,omitted:a.slice(c).map(p=>p.id),traceMetadata:{selectedRefIds:u.map(p=>p.ref.id),omittedRefIds:a.slice(c).map(p=>p.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 s=await this.memoryReviewer(r),a=t.episodeDigest===void 0?s:{...s,episodeDigest:t.episodeDigest};return this.emit({type:"review.completed",trigger:t.trigger,actionCount:a.actions.length}),a}async prepareEpisodeReview(t){return this.prepareReviewInput({trigger:va(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=[],s=await this.listRefs({includePrivate:!0}),a=(await P(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,s);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:s.find(k=>k.id===l.existingRefId),u=l.kind==="evidence_update"&&f!==void 0?jg((await this.readRef(f)).body):d.proposedBody?.trim();if(u===void 0||u.length===0){i.push({actionIndex:c,kind:"reject",reason:"memory proposal body is empty",...l.existingRefId!==void 0?{existingRefId:l.existingRefId}:{}});continue}let p=`memory-review-${b([t.trigger,...t.sourceRefs,l.kind,l.existingRefId??"",d.summary,u].join("\0")).slice(0,24)}`,h=t.episodeDigest,g=$g([...f?.sourceRefs??[],...h?.evidenceRefs??t.sourceRefs]),y=this.resolveReviewMemoryPlacement(t,d,f,a),v={destination:"memdir_handoff",proposalId:p,origin:"background_learning",userLabel:"context_note",memoryKind:y.memoryKind,body:u,metadata:{writeOrigin:"background_learning",executionContext:"primary",sessionId:h?.sessionId??"memory-review",sourceRefs:g,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}:{},...y.applicability!==void 0?{applicability:y.applicability}:{},requestedLifecycle:y.requestedLifecycle,...h!==void 0?{episodeOutcome:h.outcome,verifiedEvidence:ki(h),...this.identity?.projectId!==void 0?{evidenceProjectId:this.identity.projectId}:{}}:{},...f!==void 0?{targetRefId:f.id,...f.storageUri!==void 0?{targetStorageUri:f.storageUri}:{}}:{}}};await rt(this.learningStorePath,v,{now:this.now,...n===void 0?{}:{revalidateAuthority:n}}),r.push(p),i.push({...l,proposalId:p}),this.emit({type:"proposal.created",proposalId:It(p)})}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 s=t.episodeDigest,a=s!==void 0&&ki(s),c=Ag(n.claimKey,i,a&&s?.outcome==="succeeded"?this.identity.projectId:void 0,a&&s?.outcome==="failed");if(!(r?.scope==="agent"||c.projects.size>=2))return this.projectPlacement("procedure");let 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:va(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 s=t.episodeDigest===n?t:{...t,episodeDigest:n};if(Ra(r))return Tg(s,"episode review timed out");let a=await this.persistReviewPlanWithDecisions(s,i),c=a.proposalIds,d=[],l=[...s.warnings];for(let f of a.decisions){if(Ra(r)){l.push("episode review timed out before governed apply");break}let u=f.proposalId;if(u===void 0)continue;let p=s.actions[f.actionIndex];if(p===void 0||!Rg(p,n))continue;let h=await this.applyHostEligibleProposal(It(u),`${Ot}:episode-promotion`,"verified low-risk episode memory",i);h.applied?d.push(u):h.skippedReason!==void 0&&l.push(h.skippedReason)}return{plan:s,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"||Pg(n.proposedBody??""))return{actionIndex:r,kind:"quarantine",reason:"memory content is restricted or explicitly quarantined"};if(n.action!=="write_memdir"&&n.action!=="patch_memdir"||n.proposedBody===void 0||n.proposedBody.trim().length===0)return{actionIndex:r,kind:"reject",reason:"review action is not a supported durable-memory mutation"};let s=xg(n,t,i);if(s===void 0)return n.action==="patch_memdir"?{actionIndex:r,kind:"reject",reason:"patch target is missing or governance-incompatible"}:{actionIndex:r,kind:"create",reason:"no compatible governed claim exists"};if(s.lifecycle==="quarantined")return{actionIndex:r,kind:"quarantine",existingRefId:s.id,reason:"compatible claim is quarantined"};if(s.lifecycle==="archived"||s.authority==="proposal_only")return{actionIndex:r,kind:"reject",existingRefId:s.id,reason:"compatible claim is not eligible for governed update"};let a=await this.readRef(s),c=n.relationship==="same_claim"||ya(a.body)===ya(n.proposedBody),l=(t.episodeDigest?.evidenceRefs??t.sourceRefs).some(f=>!s.sourceRefs.includes(f));return c&&!l?{actionIndex:r,kind:"no_action",existingRefId:s.id,reason:"compatible claim and evidence already exist"}:{actionIndex:r,kind:c&&n.relationship!=="condition_refinement"?"evidence_update":"condition_refinement",existingRefId:s.id,reason:c?"compatible claim has new independent evidence":"compatible claim receives a reviewed condition refinement"}}async applyHostEligibleProposal(t,n,r,i){let s=await this.showProposal(t);if(s===void 0)return G(t,"memory proposal not found");let a=await this.adapterForProposal(s).applyProposal(s,{proposalId:s.id,approvedBy:"host",approvedAt:this.now(),expectedFingerprints:s.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(u=>u.root===r),s=Yh(r,n,t.proposalId),a=await Gh(s.targetPath,n,t,i),c=await Xh(s.entrypointPath,i),d=_n(t),l={[a.id]:a.bodyFingerprint??_t,[c.id]:c.bodyFingerprint??_t},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:[s.targetPath,s.entrypointPath],beforeFingerprints:l,afterFingerprints:{[a.id]:b(s.content)},diff:s.content,warnings:[]};return{id:It(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=fa(t),i=_n(t),s={summary:`Record reasoning report handoff: ${n.title}`,changedRefs:[],changedPaths:[],beforeFingerprints:{[r.id]:r.bodyFingerprint??b(n.body)},warnings:["No stable reasoning-strategy carrier exists yet; approval records the handoff only."]};return{id:It(t.proposalId),action:"no_op",targetRefs:[r],sourceRefs:[i],expectedFingerprints:s.beforeFingerprints,rationale:"Reasoning handoff stays as a report until a stable carrier exists.",risk:"low",preview:s,requiresApproval:!0,createdAt:t.createdAt}}async listLearningRefs(){let t=await P(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(_n(r)),r.proposal.destination==="reasoning_handoff"&&n.push(fa(r));return n}async readLearningRef(t){let n=t.kind==="reasoning_report"?t.id.replace(/^reasoning_report:/,""):t.id.replace(/^learning_proposal:/,""),r=await P(this.learningStorePath),i=r.proposals.find(a=>a.proposalId===n);if(i===void 0)return{ref:t,body:"",bodyFingerprint:b(""),readAt:this.now(),warnings:[`learning proposal not found: ${n}`]};let s=Ii(i);return{ref:{...t,bodyFingerprint:b(s)},body:s,bodyFingerprint:b(s),readAt:this.now(),warnings:r.warnings}}async listProjectDocRefs(){let t=[];for(let n of this.projectDocs){let r=await Ie(n);r.exists&&t.push({kind:"project_doc",id:`project_doc:${Mh(this.cwd,n).replace(/\\/g,"/")}`,scope:"project",title:oe(n),owner:"project",lifecycle:"readonly",authority:"read_only",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:b(r.content),storageUri:n})}return t}listSessionTraceRefs(){return this.sessionLineage===void 0?[]:this.sessionLineage.entries.map(t=>Wh(this.sessionId,t))}listArtifactLedgerRefs(){return this.artifactLedger.map(t=>Jh(this.sessionId,t))}readSessionTraceRef(t){let n=ua(t.id,"session_trace",this.sessionId),r=this.sessionLineage?.entries.find(s=>s.id===n),i=r===void 0?"":En(r);return{ref:{...t,bodyFingerprint:b(i)},body:i,bodyFingerprint:b(i),readAt:this.now(),warnings:r===void 0?[`session trace entry not found: ${t.id}`]:[]}}readArtifactLedgerRef(t){let n=ua(t.id,"artifact_ledger",this.sessionId),r=this.artifactLedger.find(s=>s.id===n),i=r===void 0?"":En(r);return{ref:{...t,bodyFingerprint:b(i)},body:i,bodyFingerprint:b(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 Ur(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:M(n.path,"SKILL.md")}))}async buildPackHints(t,n){let r=[];for(let i of t){let s=n.includeSnippets===!0?await this.readRef(i):void 0,a=T(i.title??i.id,240)??i.id,c=s===void 0||s.body.trim().length===0?void 0:n.purpose==="deliberate_query"||n.purpose==="intervention"?Ng(s.body):Sa(s.body),d=c===void 0?void 0:T(c,512);r.push({ref:i,hook:a,reason:Fg(i,ba(n)),...d!==void 0&&s!==void 0?{bodySnippet:d,bodyFingerprint:s.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=[],s=t.candidateRefIds!==void 0&&t.candidateRefIds.length>0?Cg(r,t.candidateRefIds,n,i):r.filter(_g).sort((c,d)=>Sn(d,ka(t))-Sn(c,ka(t))).slice(0,n),a=[];for(let c of s)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:Sa(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: ${_a(n)}`]}}}adapterForProposal(t){return t.action==="write_memdir"||t.action==="patch_memdir"?this.memdirAdapter():new vi(this.learningStorePath,this.now)}memdirAdapter(){return this.memdirAdapters()[0]??new St(this.memoryRoot,this.learningStorePath,this.now)}memdirAdapters(){return this.scopedRoots.length===0?[new St(this.memoryRoot,this.learningStorePath,this.now,this.applicability,"project")]:this.scopedRoots.map(t=>new St(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:yi(t.storageUri);return this.scopedRoots.find(r=>n?.startsWith(`${yi(r.root)}${Oh}`))?.root??this.memoryRoot}emit(t){this.onEvent?.(t)}buildGovernanceReport(t){let n=this.now(),r=gg(t);return{reportId:`memory-governance:${b(`${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:[]}}},vi=class{static{o(this,"LearningHandoffAdapter")}learningStorePath;now;kind="learning_proposal";constructor(t,n){this.learningStorePath=t,this.now=n}async listRefs(t={}){let n=await P(this.learningStorePath);return n.warnings.length>0?[]:n.proposals.filter(r=>r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff").map(_n).filter(r=>_i(r,t))}async readRef(t){return Si(t,this.now)}async previewProposal(t){return t.preview}async applyProposal(t,n){let r=bi(t.id);if(r===void 0)return G(t.id,"invalid memory proposal id");if(!Dg(t.expectedFingerprints,n.expectedFingerprints))return G(t.id,"approval fingerprints do not match proposal preview");let i=await de(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"]}}},St=class{static{o(this,"MemdirMemoryAdapter")}memoryRoot;learningStorePath;now;applicability;scope;kind="memdir";constructor(t,n,r,i,s="project"){this.memoryRoot=t,this.learningStorePath=n,this.now=r,this.applicability=i,this.scope=s}async listRefs(t={}){let n=[],r=this.applicability===void 0?void 0:await P(this.learningStorePath),i;try{i=await Aa(this.memoryRoot,{withFileTypes:!0})}catch(s){if(Ri(s))return[];throw s}for(let s of i){if(!s.isFile()||!s.name.endsWith(".md")||s.name==="MEMORY.md")continue;let a=M(this.memoryRoot,s.name),c=await Ie(a);if(!c.exists)continue;let d=Qh(a,c.content),l=await Zs(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 u=xn(f,this.scope,this.applicability),p=Zh(r?.proposals??[],u,c.content),h=p?.proposal.destination==="memdir_handoff"?p.proposal.metadata:void 0,g=h?.applicability===void 0?u:xn(f,this.scope,h.applicability);n.push(p===void 0?{...u,lifecycle:"provisional",authority:"proposal_only"}:{...g,lifecycle:g.lifecycle==="archived"?"archived":h?.requestedLifecycle??"active",sourceRefs:p.proposal.destination==="memdir_handoff"?p.proposal.metadata.sourceRefs:g.sourceRefs,...p.proposal.destination==="memdir_handoff"&&p.proposal.metadata.claimKind!==void 0?{claimKind:p.proposal.metadata.claimKind}:{},...p.proposal.destination==="memdir_handoff"&&p.proposal.metadata.claimKey!==void 0?{claimKey:p.proposal.metadata.claimKey}:{},...p.proposal.destination==="memdir_handoff"&&p.proposal.metadata.actionSignature!==void 0?{actionSignature:p.proposal.metadata.actionSignature}:{},applyReceiptRef:`learning_proposal:${p.proposalId}`,expectedFingerprint:p.approvalExpectedFingerprints?.[g.id],resultingFingerprint:p.approvalResultingFingerprints?.[g.id]})}return n.filter(s=>_i(s,t))}async readRef(t){return Si(t,this.now)}async previewProposal(t){return t.preview}async applyProposal(t,n){return F(M(this.memoryRoot,".memory-review.lock"),()=>this.applyProposalWithLock(t,n))}async applyProposalWithLock(t,n){let r=bi(t.id);if(r===void 0)return G(t.id,"invalid memory proposal id");let i=t.targetRefs.find($=>$.kind==="memdir"&&$.storageUri!==void 0),s=t.targetRefs.find($=>$.storageUri!==void 0&&oe($.storageUri)==="MEMORY.md");if(i?.storageUri===void 0||s?.storageUri===void 0)return G(t.id,"memory proposal has no memdir target");let a=n.expectedFingerprints[i.id],c=n.expectedFingerprints[s.id];if(a===void 0||c===void 0)return G(t.id,"approval fingerprints do not cover proposal preview");let l=[i,s].find($=>Ig($));if(l!==void 0)return G(t.id,`${l.id} is not mutable by memory governance`);let f=await Ie(i.storageUri),u=await Ie(s.storageUri),p=t.preview.diff??"",h=ng(i.storageUri,p),g=f.exists&&f.content===p,y=rg(u.content,i.storageUri,h),v=u.exists&&u.content===y;if(la(f)!==a&&!g)return G(t.id,"target memory changed after preview");if(la(u)!==c&&!g&&!v)return G(t.id,"MEMORY.md changed after preview");let k=[],I=[];return g?I.push("target memory already matched proposal content; completing approval"):(await n.revalidateAuthority?.(),await An(i.storageUri,p),k.push(i.storageUri)),v?I.push("MEMORY.md already contained the proposal index line; completing approval"):(await n.revalidateAuthority?.(),await An(s.storageUri,y),k.push(s.storageUri)),await de(this.learningStorePath,r,"approved",{appliedAt:this.now(),appliedChangedPaths:[i.storageUri,s.storageUri],approvedBy:n.approvedBy,approvedAt:n.approvedAt,approvalPolicyId:n.policyId,approvalPolicyReason:n.policyReason,approvalExpectedFingerprints:n.expectedFingerprints,approvalResultingFingerprints:{[i.id]:b(p),[s.id]:b(y)},now:this.now,...n.revalidateAuthority===void 0?{}:{revalidateAuthority:n.revalidateAuthority}}),{proposalId:t.id,applied:!0,changedRefs:t.targetRefs,changedPaths:k,warnings:I}}};function qh(e){return["README.md","AGENTS.md",M("docs","PRD.md"),M("docs","ADR.md"),M("docs","HLD.md"),M("docs","DD.md"),M("docs","FEATURE_LIST.md")].map(t=>yi(e,t))}o(qh,"defaultProjectDocs");function zh(e){let t=[];return e.projectId!==void 0&&t.push({root:_e(e,"project"),scope:"project",applicability:{tenantId:e.tenantId,projectId:e.projectId}}),e.workspaceId!==void 0&&t.push({root:_e(e,"workspace"),scope:"workspace",applicability:{tenantId:e.tenantId,workspaceId:e.workspaceId}}),t.push({root:_e(e,"agent"),scope:"agent",applicability:{tenantId:e.tenantId,agentId:e.agentId}}),e.userId!==void 0&&t.push({root:_e(e,"user"),scope:"user",applicability:{tenantId:e.tenantId,userId:e.userId}}),t}o(zh,"buildScopedRoots");function It(e){return`memory:${e}`}o(It,"memoryProposalId");function bi(e){return e.startsWith("memory:")?e.slice(7):void 0}o(bi,"parseMemoryProposalId");function b(e){return`sha256:${Lh("sha256").update(e).digest("hex")}`}o(b,"fingerprint");function la(e){return e.exists?b(e.content):_t}o(la,"fingerprintOrMissing");function Pa(e){return e.status==="pending"?"pending":e.status==="approved"?"trusted":"archived"}o(Pa,"lifecycleFromStatus");function _n(e){let t=Ii(e);return{kind:"learning_proposal",id:`learning_proposal:${e.proposalId}`,scope:"project",title:Vh(e),owner:"project",lifecycle:Pa(e),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:$a(e),relatedRefs:[],bodyFingerprint:b(t),createdAt:e.createdAt,updatedAt:e.updatedAt}}o(_n,"learningRefFromEntry");function fa(e){let t=e.proposal.destination==="reasoning_handoff"?e.proposal.title:e.proposalId,n=Ii(e);return{kind:"reasoning_report",id:`reasoning_report:${e.proposalId}`,scope:"project",title:t,owner:"project",lifecycle:Pa(e),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:$a(e),relatedRefs:[`learning_proposal:${e.proposalId}`],bodyFingerprint:b(n),createdAt:e.createdAt,updatedAt:e.updatedAt}}o(fa,"reasoningRefFromEntry");function Wh(e,t){let n=En(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:b(n),createdAt:t.timestamp,updatedAt:t.timestamp}}o(Wh,"sessionTraceRefFromEntry");function Jh(e,t){let n=En(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:b(n),createdAt:t.timestamp,updatedAt:t.timestamp}}o(Jh,"artifactLedgerRefFromEntry");function ua(e,t,n){let r=`${t}:${n}:`;return e.startsWith(r)?e.slice(r.length):""}o(ua,"parseScopedMemoryRefId");function Vh(e){let t=e.proposal;return t.destination==="memdir_handoff"?`${t.memoryKind} memory handoff`:t.destination==="reasoning_handoff"?t.title:t.proposalId}o(Vh,"learningTitle");function $a(e){let t=e.proposal;return t.destination==="memdir_handoff"?t.metadata.sourceRefs:t.destination==="reasoning_handoff"?t.sourceTraceIds:[]}o($a,"learningSourceRefs");function Ii(e){let t=e.proposal;return t.destination==="memdir_handoff"||t.destination==="reasoning_handoff"?t.body:JSON.stringify(t,null,2)}o(Ii,"learningBody");function Yh(e,t,n){let r=eg(t.memoryKind),i=Ca(t.body,`${t.memoryKind} memory`),s=tg(t.body)||i,a=t.metadata.targetStorageUri===void 0?`${r}_${pa(i)}_${pa(n)}.md`:oe(t.metadata.targetStorageUri),c=t.metadata.targetStorageUri??M(e,a),d=["---",`name: ${ma(i)}`,`description: ${ma(s)}`,`type: ${r}`,"---","",t.body.trim(),""].join(`
207
+ `);return{targetPath:c,entrypointPath:M(e,"MEMORY.md"),content:d,indexLine:`- [${i}](${a}) - ${s}`}}o(Yh,"buildMemdirWritePlan");async function Gh(e,t,n,r){let i=await Ie(e),s={kind:"memdir",id:`memdir:${oe(e)}`,scope:t.memoryKind==="user"?"user":"project",title:Ca(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?b(i.content):_t,storageUri:e,createdAt:n.createdAt,updatedAt:n.updatedAt};return r===void 0?s:xn(s,r.scope,t.metadata.applicability??r.applicability)}o(Gh,"buildMemdirTargetRef");async function Xh(e,t){let n=await Ie(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?b(n.content):_t,storageUri:e};return t===void 0?r:xn(r,t.scope,t.applicability)}o(Xh,"buildEntrypointRef");function Qh(e,t){let n=we(t),r=oe(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:b(t),storageUri:e}}o(Qh,"memdirRefFromFile");function xn(e,t,n){let r=Jn(n),i=e.storageUri===void 0?e.id:oe(e.storageUri);return{...e,id:`memdir:${t}:${r}:${i}`,scope:t,scopeId:r,applicability:n}}o(xn,"decorateScopedRef");function Zh(e,t,n){if(t.storageUri===void 0)return;let r=t.storageUri,i=b(n);for(let s=e.length-1;s>=0;s-=1){let a=e[s];if(a.status==="approved"&&a.appliedChangedPaths?.includes(r)===!0&&Object.values(a.approvalResultingFingerprints??{}).includes(i))return a}}o(Zh,"findApplyReceipt");function eg(e){return e==="user"||e==="feedback"||e==="project"||e==="reference"?e:"project"}o(eg,"memoryTypeForHandoff");function Ca(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}o(Ca,"titleFromBody");function tg(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)}o(tg,"firstSentence");function pa(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,48);return t.length>0?t:"memory"}o(pa,"slugify");function ma(e){return JSON.stringify(e.replace(/\r?\n/g," "))}o(ma,"quoteScalar");function ng(e,t){let n=we(t),r=n.frontmatter.name??oe(e,".md"),i=n.frontmatter.description??r;return`- [${r}](${oe(e)}) - ${i}`}o(ng,"indexLineFromContent");function rg(e,t,n){let r=e.trimEnd();if(ig(r,n))return`${r}
208
+ `;let i=oe(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`^.*\\(${i}\\).*$`,"m");return s.test(r)?`${r.replace(s,n)}
209
+ `:r.length>0?`${n}
210
+ ${r}
211
+ `:`${n}
212
+ `}o(rg,"upsertIndexLine");function ig(e,t){return e.trimEnd().split(/\r?\n/).includes(t)}o(ig,"indexContainsLine");async function Ie(e){try{return{exists:!0,content:await Fh(e,"utf8")}}catch(t){if(Ri(t))return{exists:!1,content:""};throw t}}o(Ie,"readTextIfExists");async function An(e,t){await Th(da(e),{recursive:!0});let n=M(da(e),`.${oe(e)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Dh(n,t,"utf8"),await Nh(n,e)}catch(r){throw await Ea(n,{force:!0}),r}}o(An,"writeFileAtomic");function og(e){return M(e,".governance","auto-curate-state.json")}o(og,"autoCuratorStatePath");function sg(e,t){let n=wa(t.generatedAt),r=wa(t.reportId);return M(e,".governance","reports",`${n}-${r}.json`)}o(sg,"autoCuratorReportPath");async function ag(e,t){if(t<=0)return;let n=M(e,".governance","reports"),r;try{r=await Aa(n,{withFileTypes:!0})}catch(s){if(Ri(s))return;throw s}let i=r.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>s.name).sort((s,a)=>a.localeCompare(s));for(let s of i.slice(t))await Ea(M(n,s),{force:!0})}o(ag,"pruneAutoCuratorReports");async function cg(e){let t=await Ie(e);if(t.exists)try{let n=JSON.parse(t.content);return lg(n)?n:void 0}catch{return}}o(cg,"readAutoCuratorState");async function dg(e,t){await An(e,`${JSON.stringify(t,null,2)}
213
+ `)}o(dg,"writeAutoCuratorState");function lg(e){return fg(e)?e.version===ja&&In(e.lastCheckedAt)&&In(e.lastRunAt)&&In(e.lastInventoryFingerprint)&&In(e.lastReportPath):!1}o(lg,"isAutoCuratorState");function fg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(fg,"isReadonlyRecord");function In(e){return e===void 0||typeof e=="string"}o(In,"optionalStringField");function ha(e,t){let n=Date.parse(e),r=Number.isFinite(n)?n:Date.now();return new Date(r+t).toISOString()}o(ha,"addMs");function ug(e,t){let n=Date.parse(e),r=Date.parse(t);return!Number.isFinite(n)||!Number.isFinite(r)?0:n-r}o(ug,"compareIso");function pg(e){return e.kind==="memdir"||e.kind==="learning_proposal"||e.kind==="reasoning_report"}o(pg,"isAutoCuratorCandidate");function ga(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(`
214
+ `)}o(ga,"memoryInventoryPayload");function wa(e){let t=e.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t.length>0?t:"report"}o(wa,"sanitizePathSegment");async function Si(e,t){if(e.storageUri===void 0)return{ref:e,body:"",bodyFingerprint:b(""),readAt:t(),warnings:["memory ref has no storageUri"]};let n=await Ie(e.storageUri);if(!n.exists)return{ref:e,body:"",bodyFingerprint:b(""),readAt:t(),warnings:[`memory ref storage does not exist: ${e.storageUri}`]};let r=e.kind==="memdir"?we(n.content):void 0;return{ref:{...e,bodyFingerprint:b(n.content)},body:n.content,bodyFingerprint:b(n.content),...r!==void 0?{frontmatter:mg(r.frontmatter)}:{},readAt:t(),warnings:[]}}o(Si,"readStorageBackedRef");function mg(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}o(mg,"frontmatterRecord");function _i(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&&!hg(e,t.query))}o(_i,"matchesFilter");function hg(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))}o(hg,"refMatchesQuery");function gg(e){let t=[];t.push(...wg(e)),t.push(...yg(e)),t.push(...vg(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}o(gg,"buildGovernanceFindings");function wg(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"}))}o(wg,"duplicateFingerprintFindings");function yg(e){let t=new Map;for(let n of e){let r=kg(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(s=>s.bodyFingerprint));return r.length<2||i.size<=1?[]:[{kind:"conflict",severity:"warning",refIds:r.map(s=>s.id),summary:`Multiple refs use the title "${n}" with different fingerprints.`,suggestedAction:"conflict_report"}]})}o(yg,"conflictTitleFindings");function vg(e){let t=new Set(e.map(n=>n.id));return e.flatMap(n=>{let r=n.relatedRefs.filter(i=>bg(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"}]})}o(vg,"orphanedRefFindings");function kg(e){let t=e?.trim().toLowerCase().replace(/\s+/g," ");return t!==void 0&&t.length>0?t:void 0}o(kg,"normalizeConflictTitle");function bg(e){return/^(learning_proposal|reasoning_report|memdir|session_trace|artifact_ledger|skill|project_doc|self_manual|workflow_run|working_context):/.test(e)}o(bg,"isMemoryControlledRefId");function Ig(e){return e.authority==="read_only"||e.scope==="builtin"||e.pinned===!0}o(Ig,"isProtectedFromMutation");function Sg(e,t){return e.applicability!==void 0&&(t.identity===void 0||!Mt(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"}o(Sg,"isPackEligible");function _g(e){return e.kind!=="memdir"&&e.kind!=="learning_proposal"&&e.kind!=="reasoning_report"?!1:e.lifecycle!=="archived"&&e.lifecycle!=="quarantined"}o(_g,"isReviewCandidateEligible");function Rg(e,t){if(e.confidence!=="high"||e.risk!=="low"||t.visibility!=="prompt_safe"||t.evidenceRefs.length===0||!ki(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)}o(Rg,"isEligibleEpisodePromotion");function xg(e,t,n){let r=new Set(e.targetRefIds),i=n.find(a=>r.has(a.id));if(i!==void 0)return wi(i,e)?i:void 0;if(r.size>0)return;if(e.claimKey!==void 0){let a=n.find(c=>c.claimKey===e.claimKey&&wi(c,e));if(a!==void 0)return a}let s=new Set(t.candidateRefs.map(a=>a.ref.id));return n.find(a=>s.has(a.id)&&wi(a,e))}o(xg,"findCompatibleReviewRef");function wi(e,t){return!(e.kind!=="memdir"||e.visibility!=="prompt_safe"||t.claimKind!==void 0&&e.claimKind!==void 0&&e.claimKind!==t.claimKind)}o(wi,"isGovernanceCompatibleReviewRef");function ya(e){return we(e).body.replace(/\s+/g," ").trim().toLowerCase()}o(ya,"normalizeClaimBody");function Ag(e,t,n,r){let i=n===void 0?0:1,s=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"&&(s=!0)}return{successes:i,projects:a,hasCounterexample:s}}o(Ag,"procedurePromotionHistory");function ki(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}o(ki,"hasVerifiedDigestEvidence");function va(e){return Eg(e)?e.memoryIntent?.operation==="remember"?"explicit_remember":e.memoryIntent?.operation==="correct"?"user_correction":"episode_completed":"episode_completed"}o(va,"episodeReviewTrigger");function Eg(e){let t=e.memoryIntent?.evidenceRef;return t!==void 0&&e.evidence?.some(n=>n.ref===t&&n.grade==="authoritative"&&n.source==="user")===!0}o(Eg,"hasAuthoritativeMemoryIntentEvidence");function jg(e){return we(e).body.trim()}o(jg,"extractClaimBody");function Pg(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)}o(Pg,"isRestrictedMemoryBody");function $g(e){return[...new Set(e)]}o($g,"uniqueStrings");function Cg(e,t,n,r){let i=new Map(e.map(a=>[a.id,a])),s=[];for(let a of t.slice(0,n)){let c=i.get(a);c===void 0?r.push(`memory review candidate not found: ${a}`):s.push(c)}return s}o(Cg,"selectRefsById");function ka(e){return[e.task,e.userFeedback].filter(t=>t!==void 0&&t.trim().length>0).join(`
215
+ `)}o(ka,"reviewTask");function Lg(e){return/\b(ignore|do not use|don't use|without)\s+(project\s+)?memory\b/i.test(e)}o(Lg,"shouldIgnoreMemory");function ba(e){return[e.task,e.decisionIntent,e.actionSignature].filter(t=>t!==void 0&&t.trim().length>0).join(`
216
+ `)}o(ba,"memoryPackRankingText");function Sn(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 s of r.split(/[^a-z0-9]+/).filter(a=>a.length>=3))n.includes(s)&&(i+=3);return i}o(Sn,"scoreRef");function Ia(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}o(Ia,"structuredMatchScore");function Fg(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.`}o(Fg,"packReason");function Sa(e){return e.replace(/\s+/g," ").trim().slice(0,240)}o(Sa,"firstSnippet");function Ng(e){return we(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)}o(Ng,"promptSafeClaimSnippet");function _a(e){return e instanceof Error?e.message:String(e)}o(_a,"errorMessage");function En(e){return JSON.stringify(e,null,2)}o(En,"stringifyJson");function Dg(e,t){let n=Object.keys(e).sort(),r=Object.keys(t).sort();return n.length!==r.length?!1:n.every((i,s)=>i===r[s]&&e[i]===t[i])}o(Dg,"fingerprintsMatch");function G(e,t){return{proposalId:e,applied:!1,changedRefs:[],changedPaths:[],skippedReason:t,warnings:[]}}o(G,"skippedApply");function Ra(e){return e?.aborted===!0}o(Ra,"isAborted");function Tg(e,t){return{plan:e,proposalIds:[],appliedProposalIds:[],decisions:[],warnings:[...e.warnings,t]}}o(Tg,"cancelledEpisodeReview");function xa(e,t){return{refId:e,operation:t,acknowledged:!1,residualSourceRefs:[],warnings:["managed memory ref not found"]}}o(xa,"lifecycleNotFound");function Ri(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}o(Ri,"isMissingFile");import{createHash as Mg,randomUUID as Ei}from"node:crypto";import{mkdir as Ta,readFile as Ma,readdir as ji,rename as Oa,rm as se,stat as Ka,writeFile as Og}from"node:fs/promises";import w from"node:path";var Ce=class extends Error{static{o(this,"EpisodeReviewFailure")}kind;constructor(t,n){super(n),this.kind=t,this.name="EpisodeReviewFailure"}},Pi=5*6e4,Et=Pi,Pn=class extends Error{static{o(this,"EpisodeReviewBranchChangedError")}constructor(){super("episode review branch changed before persistence"),this.name="EpisodeReviewBranchChangedError"}};async function Kg(e){return N(e,async()=>(await Dn(e)).epoch)}o(Kg,"captureEpisodeReviewBranchEpoch");async function Ug(e,t,n={}){if(!hc(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 N(e,async()=>{let r=await Dn(e);if(n.expectedBranchEpoch!==void 0&&n.expectedBranchEpoch!==r.epoch)throw new Pn;let i={version:2,jobId:rw(e,t,r.epoch),reviewKey:t.reviewKey,digest:t,ownerSessionRef:e.sessionId,ownerAgentHash:x("agent",e.agentId),...e.projectId!==void 0?{ownerProjectHash:x("project",e.projectId)}:{},branchId:t.branchId,branchEpoch:r.epoch,authorityCeiling:"memory_and_project_skill",createdAt:t.createdAt},s=jt(e,i.jobId);return await J(e,i.jobId,async()=>{let a=await Nn(e,i.jobId);if(a?.status==="completed"||a?.status==="attention")return;let c=await Cn(s);if(c!==void 0&&c.jobId!==i.jobId)throw new Error("v2 review job path collision");c===void 0&&await A(s,i),a===void 0&&await A(ae(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:s,entry:i}})}o(Ug,"persistPendingEpisodeReview");async function Ua(e,t,n={}){let r=n.now??new Date,i=Math.max(1e3,n.leaseMs??Pi);return N(e,async()=>{let s=await Ni(e,t);if(s!==void 0)return J(e,s.jobId,async()=>{let a=await Nn(e,s.jobId),c=await Dn(e);if(a===void 0||cc(s,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=Ei(),f=new Date(r.getTime()+i).toISOString();return await A(ae(e,s.jobId),{...a,status:"processing",claimEpoch:d,claimToken:l,leaseDeadline:f,updatedAt:r.toISOString()}),{jobId:s.jobId,reviewKey:s.reviewKey,ownerSessionRef:s.ownerSessionRef,branchId:s.branchId,branchEpoch:s.branchEpoch,epoch:d,token:l,leaseDeadline:f}})})}o(Ua,"claimEpisodeReview");async function Ba(e,t,n,r=new Date){return me(n.promptRevision,"promptRevision"),me(n.schemaRevision,"schemaRevision"),me(n.policyRevision,"policyRevision"),me(n.providerRevision,"providerRevision"),N(e,()=>J(e,t.jobId,async()=>{await ce(e,t,r);let i=await j(Ze(e,t.jobId),Nt);if(i!==void 0)return Ft(i,t.jobId),i;let s=sc(n.evidence),a={version:1,jobId:t.jobId,evidence:JSON.parse(s),evidenceBytes:s,evidenceHash:$t(s),promptRevision:n.promptRevision,schemaRevision:n.schemaRevision,policyRevision:n.policyRevision,providerRevision:n.providerRevision,createdAt:r.toISOString()};return await A(Ze(e,t.jobId),a),a}))}o(Ba,"freezeEpisodeReviewInput");async function Ha(e,t,n,r=new Date){Lt(n.memoryProposalIds,"memoryProposalIds");let i=n.requiredCarriers??["memory"];if(lc(i),!i.includes("memory"))throw new Error("requiredCarriers must include memory");return N(e,()=>J(e,t.jobId,async()=>{let s=await ce(e,t,r),a=await j(Ze(e,t.jobId),Nt);if(a===void 0)throw new Error("review decision requires a frozen input");Ft(a,t.jobId);let c=await j(xt(e,t.jobId),On);if(c!==void 0)return Mn(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:$t(`${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 A(xt(e,t.jobId),l),await A(ae(e,t.jobId),{...s,status:"decided",updatedAt:d}),l}))}o(Ha,"commitEpisodeReviewDecision");async function Bg(e,t,n,r=new Date){return N(e,()=>xi(e,t,n,r))}o(Bg,"commitEpisodeReviewAction");async function jn(e,t,n){return N(e,async()=>(await La(e,t),n(async()=>{await La(e,t)})))}o(jn,"withEpisodeReviewClaimAuthority");async function xi(e,t,n,r=new Date){return me(n.actionId,"actionId"),me(n.decisionId,"decisionId"),dc(n.carrier),Lt(n.resultRefs,"resultRefs"),J(e,t.jobId,async()=>{await ce(e,t,r);let i=await j(Ze(e,t.jobId),Nt);if(i===void 0)throw new Error("review action requires a frozen input");Ft(i,t.jobId);let s=await j(xt(e,t.jobId),On);if(s===void 0)throw new Error("review action does not reference the committed decision");if(Mn(s,t.jobId,i.evidenceHash),s.requiredCarriers!==void 0&&!s.requiredCarriers.includes(n.carrier))throw new Error(`review action carrier is not required: ${n.carrier}`);let a=`${s.decisionId}:${n.carrier}`;if(s.decisionId!==n.decisionId||n.actionId!==a)throw new Error("review action does not use the committed deterministic identity");let c=iw(e,t.jobId,n.actionId),d=await j(c,mc);if(d!==void 0)return fc(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 A(c,l),l})}o(xi,"commitEpisodeReviewActionWithSessionFence");async function La(e,t){await J(e,t.jobId,async()=>{await ce(e,t,new Date)})}o(La,"assertEpisodeReviewClaimWithSessionFence");async function qa(e,t,n,r=new Date){return N(e,()=>J(e,t.jobId,async()=>{let i=await ce(e,t,r),s=n.kind==="provider_timeout"||n.kind==="provider_error"||n.kind==="malformed_response",a=i.providerAttempts+(s?1:0),c=a>=4,d=s&&!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 A(ae(e,t.jobId),l),l}))}o(qa,"failEpisodeReviewAttempt");async function za(e,t,n,r=new Date){return N(e,()=>J(e,t.jobId,async()=>{let i=await ce(e,t,r),s=i.applyAttemptsByCarrier[n.carrier]+1,a={...i.applyAttemptsByCarrier,[n.carrier]:s},c=a.memory+a.skill,d=s>=4,l=d?void 0:[6e4,5*6e4,30*6e4][s-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 A(ae(e,t.jobId),f),f}))}o(za,"failEpisodeReviewApply");async function Hg(e,t,n,r=new Date){return N(e,()=>J(e,t.jobId,async()=>{let i=await ce(e,t,r),s=i.completionAttempts+1,a=s>=4,c=a?void 0:[6e4,5*6e4,30*6e4][s-1],d={...i,status:a?"attention":"pending",completionAttempts:s,...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 A(ae(e,t.jobId),d),d}))}o(Hg,"failEpisodeReviewCompletion");async function Qe(e,t,n,r=new Date){return N(e,()=>J(e,t.jobId,async()=>{let s={...await ce(e,t,r),status:"pending",lastError:n,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()};return await A(ae(e,t.jobId),s),s}))}o(Qe,"deferEpisodeReview");async function Wa(e,t,n,r=new Date){return N(e,()=>Ja(e,t,n,r))}o(Wa,"completeFencedEpisodeReview");async function Ja(e,t,n,r=new Date){return Lt(n,"proposalIds"),J(e,t.jobId,async()=>{let i=await ce(e,t,r),s=await j(Ze(e,t.jobId),Nt);if(s===void 0)throw new Error("review completion requires a frozen input");Ft(s,t.jobId);let a=await j(xt(e,t.jobId),On);if(a===void 0)throw new Error("review completion requires a decision");Mn(a,t.jobId,s.evidenceHash);let c=await Ya(e,t.jobId,a),d=a.requiredCarriers??["memory"],l=new Set(c.map(p=>p.carrier));for(let p of d)if(!l.has(p))throw new Error(`review completion is missing required ${p} action receipt`);let f=c.filter(p=>p.carrier==="memory").flatMap(p=>p.resultRefs);if(!Mi(f,n))throw new Error("review completion payload mismatch");let u=await Li(e,t.reviewKey,n,t.jobId);return await A(ae(e,t.jobId),{...i,status:"completed",claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()}),await Fe(jt(e,t.jobId),t.jobId),{acknowledged:!0,receiptPath:u}})}o(Ja,"completeFencedEpisodeReviewWithSessionFence");async function Rt(e,t,n,r=new Date){await N(e,()=>J(e,t.jobId,async()=>{let i=await ce(e,t,r);await A(ae(e,t.jobId),{...i,status:"completed",lastError:n,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()}),await Fe(jt(e,t.jobId),t.jobId)}))}o(Rt,"discardFencedEpisodeReview");async function Va(e,t){return N(e,async()=>{let n=await Ni(e,t);if(n===void 0)return;let r=await Nn(e,n.jobId);if(r===void 0)return;let i=await j(Ze(e,n.jobId),Nt);i!==void 0&&Ft(i,n.jobId);let s=await j(xt(e,n.jobId),On);if(s!==void 0){if(i===void 0)throw new Error("review decision is missing its frozen input");Mn(s,n.jobId,i.evidenceHash)}let a=await Ya(e,n.jobId,s);return{envelope:n,state:r,...i===void 0?{}:{input:i},...s===void 0?{}:{decision:s},actions:a}})}o(Va,"inspectEpisodeReviewJob");async function Ya(e,t,n){let r=[],i=rc(e,t);for(let s of await Ct(i)){let a=await j(w.join(i,s),mc);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(s!==`${Q(c)}.json`)throw new Error("review action receipt identity mismatch");if(fc(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((s,a)=>s.actionId.localeCompare(a.actionId))}o(Ya,"readVerifiedEpisodeReviewActions");async function Ga(e){let t=tc(e.tenantId,e.configHome),n=e.agentId===void 0?void 0:x("agent",e.agentId),r=e.projectId===void 0?void 0:x("project",e.projectId),i=await aw(t),s=[];for(let a of i){await cw(e.configHome,t,a);let c=w.join(t,a,"pending");for(let d of await Ct(c)){let l=await Le(w.join(c,d));l!==void 0&&(n!==void 0&&l.ownerAgentHash!==n||r!==void 0&&l.ownerProjectHash!==r||s.push(l))}}return s.sort((a,c)=>a.createdAt.localeCompare(c.createdAt)||a.reviewKey.localeCompare(c.reviewKey))}o(Ga,"listPendingEpisodeReviews");async function qg(e,t,n){return me(t,"reviewKey"),Lt(n,"proposalIds"),N(e,async()=>{if(await Ni(e,t)!==void 0)throw new Error("v2 episode review requires frozen input, a committed decision, and action receipts");let i=nc(e,t),s=await Le(i,{cleanupCompleted:!1}),a=Fi(X(e),t),c=await j(a,Ti);if(s===void 0){if(c===void 0)throw new Error("pending legacy episode review was not found");return Ln(c,t,void 0,a,n,e),{acknowledged:!0,receiptPath:a}}if(s.version!==1||s.reviewKey!==t)throw new Error("legacy episode review identity mismatch");if(mw(s,e),c!==void 0)return uc(c,s),Ln(c,t,void 0,a,n),await Fe(i,t),{acknowledged:!0,receiptPath:a};let d=await Li(e,t,n);return await Fe(i,t),{acknowledged:!0,receiptPath:d}})}o(qg,"completeEpisodeReview");async function zg(e,t){return Fn(e,()=>Yg(X(e),t))}o(zg,"rewindPendingEpisodeReviews");async function Wg(e,t){if(!Number.isSafeInteger(t)||t<0)throw new Error("rewind sequence must be a non-negative safe integer");return Fn(e,async()=>{let n=[...await Qa(e)].sort();return $i(n,0,async()=>{let r=[];for(let s of n)r.push(await Ci(s,({entry:a})=>a.digest.sequence>t,({entry:a,queue:c})=>c==="processing"&&a.digest.sequence<=t));let i=0;for(let s of r)i+=await Za(s,t);return i})})}o(Wg,"rewindPendingEpisodeReviewsForSession");async function Jg(e,t){return Xa(e,n=>n(t))}o(Jg,"fencePendingEpisodeReviewsForSession");async function Xa(e,t){return Fn(e,async()=>{let n=[...await Qa(e)].sort();return $i(n,0,()=>t(async r=>{let i=new Set(r),s=[];for(let c of n)s.push(await Ci(c,({entry:d})=>!Fa(d,i),({entry:d,queue:l})=>l==="processing"&&Fa(d,i)));let a=0;for(let c of s)a+=await Vg(c);return a}))})}o(Xa,"withPendingEpisodeReviewSessionFence");async function Qa(e){let t=e.configHome===void 0?O("memory-review-inbox"):w.join(e.configHome,"memory-review-inbox"),n=x("session",e.sessionId),r;try{r=await ji(t,{withFileTypes:!0})}catch(s){if(Se(s))return[];throw s}let i=[];for(let s of r){if(!s.isDirectory()||s.name.startsWith("."))continue;let a=w.join(t,s.name,n);try{(await Ka(a)).isDirectory()&&i.push(a)}catch(c){if(!Se(c))throw c}}return i}o(Qa,"findSessionInboxRoots");async function $i(e,t,n){let r=e[t];return r===void 0?n():F(w.join(r,".branch-authority.lock"),()=>$i(e,t+1,n),Et)}o($i,"withEpisodeReviewRootLocks");async function Ci(e,t,n){let r=await dw(e),i=w.join(e,"branch-authority.json"),s=await uw(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 j(w.join(e,"jobs",Q(d.jobId),"state.json"),Di);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:s,retired:a,recoverable:r.filter(n),retiredStates:c}}o(Ci,"prepareEpisodeReviewMutationPlan");async function Vg(e){let t=new Date().toISOString(),n=e.current.epoch+1;await A(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:s}of e.retired){if(i.version===2){let a=w.join(e.sessionRoot,"jobs",Q(i.jobId));await F(w.join(a,".authority.lock"),async()=>{let c=w.join(a,"state.json"),d=e.retiredStates.get(i.jobId);d!==void 0&&d.status!=="completed"&&await A(c,{...d,status:"completed",claimToken:void 0,leaseDeadline:void 0,lastError:"review job is outside the active Session branch",updatedAt:t}),await se(s,{force:!0})})}else await se(s,{force:!0});r+=1}return await At(e.sessionRoot,e.recoverable),r}o(Vg,"applyFenceEpisodeReviewPlan");function Fa(e,t){return e.version===2&&t.has(e.jobId)||t.has(e.digest.id)}o(Fa,"isActiveReview");async function Yg(e,t){if(!Number.isSafeInteger(t)||t<0)throw new Error("rewind sequence must be a non-negative safe integer");return F(w.join(e,".branch-authority.lock"),async()=>{let n=await Ci(e,({entry:r})=>r.digest.sequence>t,({entry:r,queue:i})=>i==="processing"&&r.digest.sequence<=t);return Za(n,t)},Et)}o(Yg,"rewindPendingEpisodeReviewsAtRoot");async function Za(e,t){let n=new Date().toISOString(),r=e.current.epoch+1;await A(e.authorityFile,{...e.current,epoch:r,rewinds:[...e.current.rewinds,{epoch:r,throughSequence:t,createdAt:n}]});let i=0;for(let{entry:s,filePath:a}of e.retired){if(s.version===2){let c=w.join(e.sessionRoot,"jobs",Q(s.jobId));await F(w.join(c,".authority.lock"),async()=>{let d=w.join(c,"state.json"),l=e.retiredStates.get(s.jobId);l!==void 0&&l.status!=="completed"&&await A(d,{...l,status:"completed",claimToken:void 0,leaseDeadline:void 0,lastError:`rewound through sequence ${t}`,updatedAt:n}),await se(a,{force:!0})})}else await se(a,{force:!0});i+=1}return await At(e.sessionRoot,e.recoverable),i}o(Za,"applyRewindEpisodeReviewPlan");async function Gg(e,t){let n=await Ga({...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)),s={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 u=await Qg(l,d,t);if(u.kind==="not_claimed"){s.deferred+=1;continue}a+=1,u.kind==="reviewed"?s.reviewed+=1:u.kind==="discarded"?s.discarded+=1:u.kind==="deferred"?s.deferred+=1:u.kind==="failed"&&(s.failed+=1,s.failures.push({reviewKey:d.reviewKey,error:u.error}));continue}let f=await Xg(l,d,t);if(f.kind==="not_claimed"){s.deferred+=1;continue}a+=1,f.kind==="reviewed"?s.reviewed+=1:f.kind==="discarded"?s.discarded+=1:f.kind==="deferred"?s.deferred+=1:f.kind==="failed"&&(s.failed+=1,s.failures.push({reviewKey:d.reviewKey,error:f.error}))}return s.deferred+=Math.max(0,r.length-c),s}o(Gg,"drainPendingEpisodeReviews");async function Xg(e,t,n){return N(e,async()=>{let r=await tw(e,t.reviewKey);if(r===void 0)return{kind:"not_claimed"};try{let i=await n.revalidate(t);if(i==="defer")return await Da(e,t,r),{kind:"deferred"};if(i==="discard")return await se(r,{force:!0}),{kind:"discarded"};let s=await n.review(t);return await Li(e,t.reviewKey,s),await Fe(r,t.reviewKey),{kind:"reviewed"}}catch(i){return await Da(e,t,r),{kind:"failed",error:i instanceof Error?i.message:String(i)}}})}o(Xg,"drainLegacyEpisodeReview");async function Qg(e,t,n){let r=await Ua(e,t.jobId);if(r===void 0)return{kind:"not_claimed"};let i,s=!1,a=!1;try{let c=await n.revalidate(t);if(c==="defer")return await Qe(e,r,"review eligibility deferred"),{kind:"deferred"};if(c==="discard")return await Rt(e,r,"review eligibility discarded"),{kind:"discarded"};let d=await Va(e,t.jobId),l=d?.input??await Ba(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(s=f!==void 0,f===void 0){let g;try{g=n.decideV2===void 0?{inputHash:l.evidenceHash,memoryProposalIds:[]}:await Zg(n.decideV2,t,l)}catch(v){let k=v instanceof Error?v.message:String(v),I=ew(v);return await qa(e,r,{kind:I,message:k}),{kind:"failed",error:k}}let y=await n.revalidate(t);if(y!=="eligible")return y==="discard"?(await Rt(e,r,"review branch changed before decision"),{kind:"discarded"}):(await Qe(e,r,"review branch unavailable before decision"),{kind:"deferred"});f=await Ha(e,r,g),s=!0}let u=await n.revalidate(t);if(u!=="eligible")return u==="discard"?(await Rt(e,r,"review branch changed before effects"),{kind:"discarded"}):(await Qe(e,r,"review branch unavailable before effects"),{kind:"deferred"});let p;if(n.applyV2Action!==void 0){let g=new Map((d?.actions??[]).map(I=>[I.carrier,I])),y=[...g.values()].map(I=>({carrier:I.carrier,resultRefs:I.resultRefs})),v=f.requiredCarriers,k=n.listV2Actions?.(t,f)??v??["memory"];if(lc(k),v===void 0&&!k.includes("memory"))throw new Error("legacy review action carriers must include memory");if(v!==void 0&&!Mi(k,v))throw new Error("review action carriers do not match the committed decision");for(let I of k){if(g.has(I))continue;let $=await n.revalidate(t);if($!=="eligible")return $==="discard"?(await Rt(e,r,"review branch changed before effect"),{kind:"discarded"}):(await Qe(e,r,"review branch unavailable before effect"),{kind:"deferred"});i=I;let kc=await n.applyV2Action(t,f,I,r,bc=>jn(e,r,async Ic=>{let Ki=await bc(Ic);return await xi(e,r,{actionId:`${f.decisionId}:${I}`,decisionId:f.decisionId,carrier:I,resultRefs:Ki}),Ki}));i=void 0,y.push({carrier:I,resultRefs:kc})}p=y}else p=await jn(e,r,async()=>{let g=[{carrier:"memory",resultRefs:await n.review(t)}];for(let y of g)await xi(e,r,{actionId:`${f.decisionId}:${y.carrier}`,decisionId:f.decisionId,carrier:y.carrier,resultRefs:y.resultRefs});return g});let h=p.filter(g=>g.carrier==="memory").flatMap(g=>g.resultRefs);return a=!0,n.onV2Completed!==void 0?await jn(e,r,async g=>{await n.onV2Completed?.(t,f,h),await g(),await Ja(e,r,h)}):await Wa(e,r,h),a=!1,{kind:"reviewed"}}catch(c){let d=c instanceof Error?c.message:String(c);try{s?a?await Hg(e,r,d):await za(e,r,{carrier:i??"memory",message:d}):await Qe(e,r,d)}catch(l){if(!(l instanceof Error)||l.message!=="review claim is no longer authoritative")throw l}return{kind:"failed",error:d}}}o(Qg,"drainFencedEpisodeReview");var Na=9e4;async function Zg(e,t,n){let r=new AbortController,i;try{return await new Promise((s,a)=>{i=setTimeout(()=>{r.abort(),a(new Ce("provider_timeout",`episode reviewer timed out after ${Na}ms`))},Na),e(t,n,r.signal).then(s,a)})}finally{i!==void 0&&clearTimeout(i)}}o(Zg,"decideEpisodeReviewWithHardTimeout");function ew(e){return e instanceof Ce?e.kind:e instanceof Error&&(e.name==="AbortError"||e.name==="TimeoutError")?"provider_timeout":"provider_error"}o(ew,"classifyEpisodeReviewFailure");async function tw(e,t){let n=w.join(X(e),"processing");await Ta(n,{recursive:!0});let r=w.join(n,`${Q(t)}.${Ei()}.json`);try{return await Oa(nc(e,t),r),r}catch(i){if(Se(i))return;throw i}}o(tw,"claimPendingReview");async function Da(e,t,n){await At(X(e),[{entry:t,filePath:n,queue:"processing"}])}o(Da,"restoreClaim");async function nw(e,t){let n=w.join(e,t),r=w.join(n,"processing"),i=[];for(let a of await Ct(r)){let c=w.join(r,a);try{let d=Date.now()-(await Ka(c)).mtimeMs>Pi,l=await Le(c);if(l===void 0)continue;i.push({entry:l,filePath:c,queue:"processing",stale:d})}catch(d){if(!Se(d))throw d}}let s=ac(n,i);for(let[a,c]of s){let d=c.filter(u=>u.stale);if(d.length===0)continue;let l=c[0];if(l!==void 0&&await ec(n,l.entry)){for(let{filePath:u}of d)await se(u,{force:!0});continue}if(await Le(a)!==void 0){await At(n,d);continue}let f=new Set(c.filter(u=>!u.stale).map(({entry:u})=>$n(u)));if(f.size>0){for(let u of d)f.has($n(u.entry))&&await se(u.filePath,{force:!0});continue}await At(n,d)}}o(nw,"recoverStaleClaims");async function Li(e,t,n,r){me(t,"reviewKey"),r!==void 0&&me(r,"jobId"),Lt(n,"proposalIds");let i=Fi(X(e),r??t),s=await j(i,Ti);if(s!==void 0)return Ln(s,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:x("agent",e.agentId),...e.projectId===void 0?{}:{ownerProjectHash:x("project",e.projectId)}}:{},proposalIds:[...n],completedAt:new Date().toISOString()};return await A(i,a),i}o(Li,"writeEpisodeReviewReceipt");function Fi(e,t){return w.join(e,"receipts",`${Q(t)}.json`)}o(Fi,"episodeReviewReceiptPath");async function ec(e,t){let n=t.version===2?t.jobId:t.reviewKey,r=Fi(e,n),i=await j(r,Ti);return i===void 0?!1:(Ln(i,t.reviewKey,t.version===1?void 0:t.jobId,r),t.version===1&&uc(i,t),!0)}o(ec,"episodeReviewReceiptExists");function tc(e,t){return w.join(ic(t),x("tenant",e))}o(tc,"tenantInboxRoot");function X(e){return w.join(tc(e.tenantId,e.configHome),x("session",e.sessionId))}o(X,"sessionInboxRoot");function nc(e,t){return w.join(X(e),"pending",`${Q(t)}.json`)}o(nc,"pendingPath");function jt(e,t){return w.join(X(e),"pending",`${t}.json`)}o(jt,"pendingV2Path");function rw(e,t,n){return $t([e.configHome??"",e.tenantId,e.agentId,e.projectId??"",e.sessionId,t.branchId,String(n),String(t.sequence),t.id,t.reviewKey].join(`
217
+ `))}o(rw,"episodeReviewJobId");function Pt(e,t){return w.join(X(e),"jobs",Q(t))}o(Pt,"jobRoot");function ae(e,t){return w.join(Pt(e,t),"state.json")}o(ae,"jobStatePath");function Ze(e,t){return w.join(Pt(e,t),"review-input.json")}o(Ze,"jobInputPath");function xt(e,t){return w.join(Pt(e,t),"decision.json")}o(xt,"jobDecisionPath");function rc(e,t){return w.join(Pt(e,t),"actions")}o(rc,"jobActionsRoot");function iw(e,t,n){return w.join(rc(e,t),`${Q(n)}.json`)}o(iw,"jobActionPath");function ow(e,t){return w.join(Pt(e,t),".authority.lock")}o(ow,"jobLockPath");function J(e,t,n){return F(ow(e,t),n)}o(J,"withEpisodeReviewJobLock");function sw(e){return w.join(X(e),"branch-authority.json")}o(sw,"branchAuthorityPath");function N(e,t){return Fn(e,()=>F(w.join(X(e),".branch-authority.lock"),t,Et))}o(N,"withEpisodeReviewSessionLock");function ic(e){return e===void 0?O("memory-review-inbox"):w.join(e,"memory-review-inbox")}o(ic,"reviewInboxRoot");function Fn(e,t){let n=x("session",e.sessionId);return oc(e.configHome,n,t)}o(Fn,"withEpisodeReviewRootRegistryLock");function oc(e,t,n){return F(w.join(ic(e),".session-authority",`${t}.lock`),n,Et)}o(oc,"withEpisodeReviewRootRegistryKeyLock");function Q(e){return x("review",e)}o(Q,"safeKey");function $t(e){return Mg("sha256").update(e).digest("hex")}o($t,"sha256");function sc(e){return JSON.stringify(Ai(e))}o(sc,"stableJson");function Ai(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(Ai);if(!L(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]=Ai(r))}return t}o(Ai,"normalizeJson");async function A(e,t){await Ta(w.dirname(e),{recursive:!0});let n=`${e}.${Ei()}.tmp`;try{await Og(n,`${JSON.stringify(t,null,2)}
218
+ `,"utf8"),await Oa(n,e)}catch(r){throw await se(n,{force:!0}),r}}o(A,"writeJsonAtomic");async function aw(e){try{return(await ji(e,{withFileTypes:!0})).filter(t=>t.isDirectory()).map(t=>t.name)}catch(t){if(Se(t))return[];throw t}}o(aw,"readDirectories");async function Ct(e){try{return(await ji(e,{withFileTypes:!0})).filter(t=>t.isFile()&&t.name.endsWith(".json")).map(t=>t.name)}catch(t){if(Se(t))return[];throw t}}o(Ct,"readJsonFiles");async function Le(e,t={}){try{let n=JSON.parse(await Ma(e,"utf8"));if(!L(n)||n.version!==1&&n.version!==2||typeof n.reviewKey!="string")return Xe(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 Xe(e,"invalid v2 envelope");if(typeof n.ownerSessionRef!="string"||typeof n.ownerAgentHash!="string")return Xe(e,"invalid owner");if(n.ownerProjectHash!==void 0&&typeof n.ownerProjectHash!="string")return Xe(e,"invalid project owner");if(typeof n.createdAt!="string"||!hc(n.digest))return Xe(e,"invalid digest");let r=n;if(r.version===1&&await ec(w.dirname(w.dirname(e)),r)&&t.cleanupCompleted!==!1){await Fe(e,r.reviewKey);return}if(r.version===2){let i=r.jobId,s=await j(w.join(w.dirname(w.dirname(e)),"jobs",Q(i),"state.json"),Di);if(s!==void 0&&s.jobId!==i)throw new Error(`review job state identity mismatch: ${i}`);if(s?.status==="completed"&&t.cleanupCompleted!==!1){await Fe(e,i);return}}return r}catch(n){if(Se(n))return;if(n instanceof SyntaxError)return Xe(e,"invalid JSON");throw n}}o(Le,"readPending");async function Fe(e,t){try{await se(e,{force:!0})}catch(n){H({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)}})}}o(Fe,"removeCompletedPendingBestEffort");async function cw(e,t,n){let r=w.join(t,n);await oc(e,n,()=>F(w.join(r,".branch-authority.lock"),()=>nw(t,n),Et))}o(cw,"recoverStaleClaimsWithAuthority");async function dw(e){let t=[];for(let n of["pending","processing"]){let r=w.join(e,n);for(let i of await Ct(r)){let s=w.join(r,i),a=await Le(s,{cleanupCompleted:!1});a!==void 0&&t.push({entry:a,filePath:s,queue:n})}}return t}o(dw,"listQueuedReviewFiles");function lw(e,t){let n=t.entry.version===2?t.entry.jobId:Q(t.entry.reviewKey);return w.join(e,"pending",`${n}.json`)}o(lw,"queuedReviewPendingTarget");function ac(e,t){let n=new Map;for(let r of t){let i=lw(e,r);n.set(i,[...n.get(i)??[],r])}return n}o(ac,"groupQueuedReviewsByPendingTarget");function fw(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)}o(fw,"compareQueuedReviewRecoveryPriority");function $n(e){return e.version===2?e.jobId:e.digest.id}o($n,"queuedReviewIdentity");async function At(e,t){for(let[n,r]of ac(e,t)){let i=await Le(n);if(i===void 0){let a=[...r].sort(fw)[0];a!==void 0&&(await A(n,a.entry),i=a.entry)}if(i===void 0)continue;let s=$n(i);for(let{entry:a,filePath:c}of r)$n(a)===s&&await se(c,{force:!0})}}o(At,"restoreQueuedReviewFiles");async function Cn(e){let t=await Le(e,{cleanupCompleted:!1});return t?.version===2?t:void 0}o(Cn,"readV2Envelope");async function Ni(e,t){let n=await Cn(jt(e,t));if(n!==void 0)return n;let r=w.join(X(e),"pending"),i=[];for(let s of await Ct(r)){let a=await Cn(w.join(r,s));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]}o(Ni,"resolvePendingV2Envelope");async function Nn(e,t){let n=await j(ae(e,t),Di);if(n!==void 0)return{...n,applyAttemptsByCarrier:n.applyAttemptsByCarrier??{memory:n.applyAttempts,skill:0},completionAttempts:n.completionAttempts??0}}o(Nn,"readJobState");async function Dn(e){return pw(sw(e))}o(Dn,"readOrCreateBranchAuthority");async function uw(e){return await j(e,pc)??{schemaVersion:1,epoch:0,rewinds:[]}}o(uw,"readBranchAuthorityAtPath");async function pw(e){let t=await j(e,pc);if(t!==void 0)return t;let n={schemaVersion:1,epoch:0,rewinds:[]};return await A(e,n),n}o(pw,"readOrCreateBranchAuthorityAtPath");function cc(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))}o(cc,"isRewound");async function ce(e,t,n){let r=await Cn(jt(e,t.jobId)),i=await Nn(e,t.jobId),s=await Dn(e);if(!(r!==void 0&&r.jobId===t.jobId&&r.branchId===t.branchId&&r.branchEpoch===t.branchEpoch&&!cc(r,s)&&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}o(ce,"assertAuthoritativeClaim");async function j(e,t){try{let n;try{n=JSON.parse(await Ma(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(Se(n))return;throw n}}o(j,"readTypedJson");function Di(e){return L(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||L(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")}o(Di,"isEpisodeReviewJobState");function Ti(e){if(!L(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)&&Tn(e.completedAt)}o(Ti,"isEpisodeReviewReceipt");function Tn(e){if(typeof e!="string")return!1;let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString()===e}o(Tn,"isCanonicalIsoTimestamp");function me(e,t){if(typeof e!="string"||e.length===0)throw new Error(`${t} must be a non-empty string`)}o(me,"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`)}o(Lt,"assertNonEmptyStrings");function Mi(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}o(Mi,"sameStrings");function dc(e){if(e!=="memory"&&e!=="skill")throw new Error("carrier must be memory or skill")}o(dc,"assertEpisodeReviewCarrier");function lc(e){if(!Array.isArray(e))throw new Error("required carriers must be an array");let t=new Set;for(let n of e){if(dc(n),t.has(n))throw new Error(`duplicate review carrier: ${n}`);t.add(n)}}o(lc,"assertUniqueEpisodeReviewCarriers");function Ft(e,t){if(e.jobId!==t||e.evidenceBytes!==sc(e.evidence)||e.evidenceHash!==$t(e.evidenceBytes))throw new Error("review input identity mismatch")}o(Ft,"assertEpisodeReviewInputIdentity");function Mn(e,t,n){if(e.jobId!==t||e.inputHash!==n||e.decisionId!==$t(`${t}:${n}`))throw new Error("review decision identity mismatch")}o(Mn,"assertEpisodeReviewDecisionIdentity");function fc(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")}o(fc,"assertEpisodeReviewActionReceiptIdentity");function Ln(e,t,n,r,i,s){if(e.reviewKey!==t||e.jobId!==n)throw new Error(`review receipt identity mismatch: ${r}`);if(i!==void 0&&!Mi(e.proposalIds,i))throw new Error("review receipt payload mismatch");if(s!==void 0){let a=s.projectId===void 0?void 0:x("project",s.projectId);if(e.ownerAgentHash!==x("agent",s.agentId)||e.ownerProjectHash!==a)throw new Error("review owner identity mismatch")}}o(Ln,"assertEpisodeReviewReceiptIdentity");function mw(e,t){let n=t.projectId===void 0?void 0:x("project",t.projectId);if(e.ownerSessionRef!==t.sessionId||e.ownerAgentHash!==x("agent",t.agentId)||e.ownerProjectHash!==n)throw new Error("review owner identity mismatch")}o(mw,"assertEpisodeReviewOwnerIdentity");function uc(e,t){if(e.ownerAgentHash!==void 0&&(e.ownerAgentHash!==t.ownerAgentHash||e.ownerProjectHash!==t.ownerProjectHash))throw new Error("review owner identity mismatch")}o(uc,"assertEpisodeReviewReceiptEntryOwner");function pc(e){return L(e)&&e.schemaVersion===1&&Number.isSafeInteger(e.epoch)&&Array.isArray(e.rewinds)&&e.rewinds.every(t=>L(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=>L(t)&&Number.isSafeInteger(t.epoch)&&Array.isArray(t.retiredJobIds)&&t.retiredJobIds.every(n=>typeof n=="string")&&typeof t.createdAt=="string"))}o(pc,"isEpisodeReviewBranchAuthority");function Nt(e){return L(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&&Tn(e.createdAt)&&"evidence"in e}o(Nt,"isEpisodeReviewInputCheckpoint");function On(e){return L(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)&&Tn(e.committedAt)}o(On,"isEpisodeReviewDecision");function mc(e){return L(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)&&Tn(e.committedAt)}o(mc,"isEpisodeReviewActionReceipt");function Xe(e,t){H({source:"memory.review-inbox",level:"warn",message:"Invalid pending episode review was skipped.",detail:{filePath:e,reason:t}})}o(Xe,"invalidPending");function hc(e){return L(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(hw))&&(e.outcome!=="cancelled"||gw(e))&&(e.memoryInfluence===void 0||Array.isArray(e.memoryInfluence)&&e.memoryInfluence.every(ww))&&(e.visibility==="prompt_safe"||e.visibility==="private"||e.visibility==="sensitive")&&typeof e.createdAt=="string":!1}o(hc,"isOutcomeDigest");function hw(e){return L(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"}o(hw,"isOutcomeEvidence");function gw(e){let t=e.memoryIntent,n=e.evidence,r=e.evidenceRefs;if(!L(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 L(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}o(gw,"isIntentOnlyCancelledDigest");function ww(e){return L(e)&&typeof e.decisionReceiptRef=="string"&&(e.grade==="direct"||e.grade==="supporting"||e.grade==="exposed"||e.grade==="unknown")}o(ww,"isMemoryInfluence");function L(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(L,"isRecord");function Se(e){return L(e)&&e.code==="ENOENT"}o(Se,"isMissing");var yc=/^[a-f0-9]{64}$/,yw=new Set(["credential_access","role_override","cross_project","global_mutation","bypass_permissions","destructive_default","network_default"]);function vw(e){let t=e.evidence.exactInvokedSkill===null||T(e.evidence.exactInvokedSkill.content,e.evidence.exactInvokedSkill.content.length)===void 0?null:e.evidence.exactInvokedSkill;return{cacheDomain:"learning-review",memory:{...e.memory,userFeedback:he(e.memory.userFeedback,"unsafe feedback"),...e.memory.task===void 0?{}:{task:he(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:s,claimKey:a,title:c,sourceRefs:d,relatedRefs:l,...f}=n.ref,u=n.bodySnippet===void 0?void 0:T(n.bodySnippet,512),p=c===void 0?void 0:T(c,160),h=a===void 0?void 0:T(a,160);return{ref:{...f,id:he(n.ref.id,"unsafe ref"),sourceRefs:Un(d),relatedRefs:Un(l),...p===void 0?{}:{title:p},...h===void 0?{}:{claimKey:h}},...u===void 0?{}:{bodySnippet:u},...n.bodyFingerprint===void 0?{}:{bodyFingerprint:n.bodyFingerprint},warnings:[]}}),warnings:["provider evidence omits local paths, source warnings, and unsafe text"]},evidence:{outcomeDigest:gc(e.evidence.outcomeDigest),exactInvokedSkill:t,verifierFacts:e.evidence.verifierFacts.map(n=>({...n,ref:he(n.ref,"unsafe verifier ref")})),priorDigests:e.evidence.priorDigests.map(gc),qualification:{...e.evidence.qualification,exactSkillInvoked:t!==null&&e.evidence.qualification.exactSkillInvoked}}}}o(vw,"sanitizeUnifiedLearningReviewInput");function gc(e){let{lesson:t,preconditions:n,memoryIntent:r,...i}=e,s=t===void 0?void 0:T(t,512),a=n===void 0?void 0:T(n,512),c=r===void 0?void 0:T(r.candidateStatement,512),d=r===void 0?void 0:T(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:he(e.objective,"unsafe objective"),approach:he(e.approach,"unsafe approach"),summary:he(e.summary,"unsafe summary"),evidenceRefs:Un(e.evidenceRefs),...e.evidence===void 0?{}:{evidence:e.evidence.map(f=>({...f,ref:he(f.ref,"unsafe evidence ref")}))},...s===void 0?{}:{lesson:s},...a===void 0?{}:{preconditions:a},...!l||c===void 0||d===void 0?{}:{memoryIntent:{operation:r.operation,evidenceRef:he(r.evidenceRef,"unsafe intent ref"),candidateStatement:c,userQuote:d}}}}o(gc,"sanitizeOutcomeDigest");function Un(e){return e.map(t=>T(t,256)).filter(t=>t!==void 0)}o(Un,"safeReviewRefs");function he(e,t){return T(e,1024)??`[omitted: ${t}]`}o(he,"safeReviewText");function kw(e){if(!V(e)||e.cacheDomain!=="learning-review"||!V(e.memory)||!V(e.evidence))return!1;let t=e.memory,n=e.evidence,r=n.outcomeDigest,i=n.qualification;return vc(t.trigger)&&typeof t.userFeedback=="string"&&Z(t.sourceRefs)&&Array.isArray(t.candidateRefs)&&Z(t.warnings)&&V(r)&&typeof r.reviewKey=="string"&&typeof r.sessionId=="string"&&typeof r.branchId=="string"&&(r.outcome==="succeeded"||r.outcome==="failed"||r.outcome==="cancelled"&&bw(r))&&Z(r.evidenceRefs)&&Array.isArray(n.verifierFacts)&&Array.isArray(n.priorDigests)&&n.priorDigests.length<=2&&V(i)&&typeof i.reusableMethodEvidence=="boolean"&&typeof i.explicitSkillPreservation=="boolean"&&Number.isSafeInteger(i.independentEpisodeCount)&&typeof i.verifiedOutcome=="boolean"&&typeof i.exactSkillInvoked=="boolean"}o(kw,"isUnifiedLearningReviewModelInput");function bw(e){let t=e.memoryIntent,n=e.evidence,r=e.evidenceRefs;if(!V(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 V(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}o(bw,"isIntentOnlyCancelledDigest");function Iw(e,t){let n=V(t)?t:{};if(!Aw(n.memoryPlan))throw new Ce("malformed_response","unified reviewer returned an invalid Memory plan");let r=jw(n.memoryPlan,e.memory,e.evidence.outcomeDigest),i=Sw(n.capabilityDecision,e.evidence);return{memoryPlan:r,...i===void 0?{}:{capabilityDecision:i}}}o(Iw,"normalizeUnifiedLearningReview");function Sw(e,t){if(e==null)return;if(!V(e)||!["discard","ready","project_canary"].includes(String(e.disposition))||!Array.isArray(e.reasonCodes)||!e.reasonCodes.every(g=>typeof g=="string"))return{disposition:"ready",reasonCodes:["invalid_capability_decision"]};let n=[...new Set(e.reasonCodes)],r=_w(t,n);if(e.disposition==="discard")return{disposition:"discard",reasonCodes:n,...r};let i=xw(e.spec);if(i===void 0)return{disposition:"ready",reasonCodes:Oi([...n,"invalid_skill_spec"]),...r};try{ct(i)}catch{return{disposition:"ready",reasonCodes:Oi([...n,"unsafe_skill_spec"]),...r}}let s=e.operation==="create"||e.operation==="patch"?e.operation:void 0;if(e.disposition==="ready")return{disposition:"ready",reasonCodes:n,...s===void 0?{}:{operation:s},spec:i,...r};let a=[],c=s==="patch";e.requestedScope!=="project"&&a.push("project_scope_required"),(e.semanticDisposition!=="allow"||n.some(g=>yw.has(g)))&&a.push("semantic_authority_risk");let d=t.qualification,l=d.reusableMethodEvidence&&d.verifiedOutcome&&t.outcomeDigest.outcome==="succeeded"&&t.verifierFacts.some(g=>g.verdict==="passed")&&(d.explicitSkillPreservation||d.independentEpisodeCount>=2),f=c&&d.exactSkillInvoked&&d.verifiedOutcome&&t.verifierFacts.some(g=>g.verdict==="failed")&&n.includes("rule_level_contradiction")&&!n.includes("environment_failure");(c?!f:!l)&&a.push("insufficient_independent_verified_evidence"),s===void 0&&a.push("invalid_skill_operation");let u=typeof e.targetCapabilityId=="string"?e.targetCapabilityId:void 0,p=typeof e.expectedFingerprint=="string"?e.expectedFingerprint:void 0,h=Number.isSafeInteger(e.expectedRevision)?e.expectedRevision:void 0;return c&&!Rw(t,u,p,h)&&a.push("exact_invoked_revision_required"),a.length>0?{disposition:"ready",reasonCodes:Oi([...n,...a]),...s===void 0?{}:{operation:s},spec:i,...u===void 0?{}:{targetCapabilityId:u},...p===void 0?{}:{expectedFingerprint:p},...h===void 0?{}:{expectedRevision:h},...r}:{disposition:"project_canary",reasonCodes:n,operation:s,spec:i,...u===void 0?{}:{targetCapabilityId:u},...p===void 0?{}:{expectedFingerprint:p},...h===void 0?{}:{expectedRevision:h},...r}}o(Sw,"normalizeCapabilityDecision");function _w(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")&&yc.test(n.fingerprint))||n===null?{}:{quarantineExactInvokedRevision:!0,targetCapabilityId:n.capabilityId,expectedFingerprint:n.fingerprint,expectedRevision:n.revision}}o(_w,"exactQuarantineFields");function Rw(e,t,n,r){let i=e.exactInvokedSkill;return e.qualification.exactSkillInvoked&&i!==null&&i.capabilityId===t&&i.fingerprint===n&&i.revision===r&&yc.test(i.fingerprint)}o(Rw,"matchesExactInvokedRevision");function xw(e){if(!(!V(e)||typeof e.name!="string"||typeof e.description!="string"||typeof e.purpose!="string"||!Z(e.triggers)||!Z(e.steps)||!Z(e.verification)||!Z(e.pitfalls)))return{name:e.name,description:e.description,purpose:e.purpose,triggers:e.triggers,steps:e.steps,verification:e.verification,pitfalls:e.pitfalls}}o(xw,"parseDeclarativeSkillSpec");function Aw(e){return V(e)&&vc(e.trigger)&&typeof e.createdAt=="string"&&Z(e.sourceRefs)&&Array.isArray(e.candidateRefs)&&Array.isArray(e.actions)&&e.actions.every(Ew)&&Z(e.warnings)}o(Aw,"isMemoryReviewPlan");function Ew(e){if(!V(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))&&Z(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&&Kn(e.proposedBody)&&(!t||typeof e.proposedBody=="string"&&e.proposedBody.trim().length>0)&&wc(e.claimKind,["fact","policy","preference","procedure","episode"])&&Kn(e.claimKey)&&Kn(e.actionSignature)&&Kn(e.preconditions)&&(e.counterexamples===void 0||Z(e.counterexamples))&&wc(e.relationship,["same_claim","condition_refinement","conflict"])}o(Ew,"isMemoryReviewAction");function vc(e){return["explicit_remember","explicit_forget","user_correction","proposal_rejected","conflict_detected","episode_completed"].includes(String(e))}o(vc,"isMemoryReviewTrigger");function jw(e,t,n){return{...e,trigger:t.trigger,sourceRefs:t.sourceRefs,candidateRefs:t.candidateRefs,episodeDigest:n}}o(jw,"bindMemoryPlanToInput");function Oi(e){return[...new Set(e)]}o(Oi,"unique");function Kn(e){return e===void 0||typeof e=="string"}o(Kn,"optionalString");function wc(e,t){return e===void 0||typeof e=="string"&&t.includes(e)}o(wc,"optionalEnum");function Z(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}o(Z,"isStringArray");function V(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(V,"isRecord");export{$w as a,Cw as b,Dw as c,H as d,xc as e,Hw as f,Hi as g,O as h,qw as i,zw as j,Ww as k,Mt as l,x as m,Jn as n,Ot as o,Ne as p,De as q,Te as r,Kt as s,Dc as t,_e as u,Tc as v,Mc as w,Wi as x,we as y,Ji as z,Uc as A,Bc as B,Hc as C,Jc as D,Vc as E,Gn as F,Yc as G,Xn as H,Qn as I,Gi as J,Xi as K,Qi as L,er as M,Ut as N,tt as O,cd as P,nr as Q,eo as R,rr as S,io as T,oo as U,qt as V,F as W,P as X,rt as Y,ur as Z,de as _,pr as $,gr as aa,wr as ba,Ml as ca,Ol as da,Ko as ea,ql as fa,Uo as ga,zl as ha,rf as ia,cf as ja,m as ka,Ho as la,Ue as ma,te as na,qo as oa,Zt as pa,Go as qa,le as ra,nn as sa,ot as ta,on as ua,Af as va,Tf as wa,Mf as xa,Vf as ya,Yf as za,ct as Aa,ns as Ba,is as Ca,os as Da,Gf as Ea,xr as Fa,Xf as Ga,Ar as Ha,an as Ia,Zf as Ja,C as Ka,mu as La,$u as Ma,qu as Na,zu as Oa,Wu as Pa,Ju as Qa,Dr as Ra,Gu as Sa,pn as Ta,_s as Ua,lp as Va,xs as Wa,mt as Xa,hp as Ya,je as Za,mn as _a,hn as $a,Ur as ab,gp as bb,ht as cb,wp as db,yp as eb,Hr as fb,Ip as gb,sh as hb,ah as ib,yh as jb,T as kb,Hh as lb,Rn as mb,Ce as nb,Pn as ob,Kg as pb,Ug as qb,Ua as rb,Ba as sb,Ha as tb,Bg as ub,jn as vb,qa as wb,za as xb,Qe as yb,Wa as zb,Rt as Ab,Va as Bb,Ga as Cb,qg as Db,zg as Eb,Wg as Fb,Jg as Gb,Xa as Hb,Gg as Ib,vw as Jb,kw as Kb,Iw as Lb};