@kodax-ai/kodax 0.7.93 → 0.7.95

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 (103) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/README.md +88 -18
  3. package/README_CN.md +51 -0
  4. package/dist/builtin/skill-creator/SKILL.md +5 -0
  5. package/dist/builtin/skill-creator/scripts/init-skill.js +5 -4
  6. package/dist/chunks/agent-XXZMXKKA.js +2 -0
  7. package/dist/chunks/argument-completer-KCYDGTQW.js +2 -0
  8. package/dist/chunks/{chunk-YVG6OKN7.js → chunk-2PEDBGKN.js} +1 -1
  9. package/dist/chunks/{chunk-XTWIGVUL.js → chunk-2TM3W3GK.js} +10 -10
  10. package/dist/chunks/{chunk-3YOZIFSJ.js → chunk-6ABQJUK6.js} +252 -251
  11. package/dist/chunks/chunk-77PNP27P.js +92 -0
  12. package/dist/chunks/{chunk-JTZKC4TV.js → chunk-7JXA3533.js} +232 -233
  13. package/dist/chunks/{chunk-7XSZVOG7.js → chunk-BNVSKIAB.js} +340 -142
  14. package/dist/chunks/chunk-BR2OSB2I.js +722 -0
  15. package/dist/chunks/{chunk-HLZWPB32.js → chunk-C4DTUKTR.js} +2 -2
  16. package/dist/chunks/{chunk-4BY53JTF.js → chunk-DSMONSVB.js} +121 -122
  17. package/dist/chunks/{chunk-PRASABCC.js → chunk-JS452J2F.js} +2 -2
  18. package/dist/chunks/chunk-O743AJ5V.js +323 -0
  19. package/dist/chunks/{chunk-GRWUC6H7.js → chunk-OK4AXDC5.js} +1 -1
  20. package/dist/chunks/chunk-Q5VRWSKG.js +418 -0
  21. package/dist/chunks/{chunk-GH3KBC2H.js → chunk-SRIJX5ZP.js} +1 -1
  22. package/dist/chunks/chunk-XWRPOGJN.js +4 -0
  23. package/dist/chunks/chunk-Y5VIQBT6.js +383 -0
  24. package/dist/chunks/{client-OVYKC3ND.js → client-JDOS3YJR.js} +1 -1
  25. package/dist/chunks/compaction-config-EGS4577X.js +2 -0
  26. package/dist/chunks/{construction-bootstrap-474QPSYB.js → construction-bootstrap-YCWHHUYO.js} +1 -1
  27. package/dist/chunks/dist-KFYN3OKD.js +2 -0
  28. package/dist/chunks/host-VAYADIPW.js +2 -0
  29. package/dist/chunks/run-manager-52IJZMZJ.js +2 -0
  30. package/dist/chunks/utils-P7PBSL3R.js +2 -0
  31. package/dist/index.d.ts +26 -26
  32. package/dist/index.js +2 -2
  33. package/dist/kodax_bootstrap.js +1 -1
  34. package/dist/kodax_cli.js +1869 -1461
  35. package/dist/kodax_resume.js +35 -35
  36. package/dist/runtime-worker.js +1819 -1411
  37. package/dist/sandbox-workspace-session.js +481 -638
  38. package/dist/sdk-a2a.d.ts +18 -18
  39. package/dist/sdk-a2a.js +1 -1
  40. package/dist/sdk-agent.d.ts +47 -26
  41. package/dist/sdk-agent.js +1 -1
  42. package/dist/sdk-coding.d.ts +54 -39
  43. package/dist/sdk-coding.js +1 -1
  44. package/dist/sdk-experimental-memory.d.ts +6 -6
  45. package/dist/sdk-experimental-memory.js +1 -1
  46. package/dist/sdk-llm.d.ts +8 -8
  47. package/dist/sdk-mcp.d.ts +4 -4
  48. package/dist/sdk-mcp.js +1 -1
  49. package/dist/sdk-media.d.ts +1 -1
  50. package/dist/sdk-media.js +1 -1
  51. package/dist/sdk-repl.d.ts +43 -25
  52. package/dist/sdk-repl.js +2 -2
  53. package/dist/sdk-runtime.d.ts +57 -32
  54. package/dist/sdk-runtime.js +1 -1
  55. package/dist/sdk-sandbox.d.ts +10 -1
  56. package/dist/sdk-sandbox.js +1 -1
  57. package/dist/sdk-session.d.ts +10 -10
  58. package/dist/sdk-session.js +1 -1
  59. package/dist/sdk-skills.d.ts +2 -333
  60. package/dist/sdk-skills.js +1 -1
  61. package/dist/semantic-worker.js +279 -81
  62. package/dist/types-chunks/{base.d-JjF6aKsh.d.ts → base.d-vopO1rml.d.ts} +1 -1
  63. package/dist/types-chunks/{bash-prefix-extractor.d-BMi_TJIY.d.ts → bash-prefix-extractor.d-B2rxNI4L.d.ts} +70 -9
  64. package/dist/types-chunks/{capability-learning.d-BAxy0mfx.d.ts → capability-learning.d-CE1tm29C.d.ts} +1 -1
  65. package/dist/types-chunks/{capsule.d-nYbM4MNL.d.ts → capsule.d-Y7QRS4J2.d.ts} +5 -5
  66. package/dist/types-chunks/{config.d-CTPaqsD-.d.ts → config.d-CJy1WENT.d.ts} +1 -1
  67. package/dist/types-chunks/{controller.d-CTvvOy_V.d.ts → controller.d-BR-UVeUR.d.ts} +1 -1
  68. package/dist/types-chunks/{controller.d-Bm1i9RVj.d.ts → controller.d-C5noq5-w.d.ts} +4 -4
  69. package/dist/types-chunks/{cost-tracker.d-MTAt6N7b.d.ts → cost-tracker.d-BeaenODW.d.ts} +1 -1
  70. package/dist/types-chunks/{guardrail.d-CKkoea7y.d.ts → guardrail.d-DqHD-61O.d.ts} +9 -9
  71. package/dist/types-chunks/{history-retrieval.d-D0LNyBED.d.ts → history-retrieval.d-CKU8zmt_.d.ts} +2 -2
  72. package/dist/types-chunks/{integration-config.d-BHoiz-WZ.d.ts → integration-config.d-BNowXE8k.d.ts} +3 -3
  73. package/dist/types-chunks/{manager.d-D_1fqveb.d.ts → manager.d-B67TmPO1.d.ts} +3 -3
  74. package/dist/types-chunks/{oauth-login.d-Cz9OpSmz.d.ts → oauth-login.d-6i-vidxv.d.ts} +3 -3
  75. package/dist/types-chunks/{public-api.d-BsZWOq3P.d.ts → public-api.d-D7fXaWW8.d.ts} +7 -6
  76. package/dist/types-chunks/{repl.d-DxD0Olm0.d.ts → repl.d-BYDb14s6.d.ts} +8 -8
  77. package/dist/types-chunks/{resolver.d-DparsV6Y.d.ts → resolver.d-CwHUwbdE.d.ts} +4 -4
  78. package/dist/types-chunks/{review-inbox.d-dAtGH3g2.d.ts → review-inbox.d-BSgFewyj.d.ts} +3 -3
  79. package/dist/types-chunks/{run-manager.d-BeSEc2OL.d.ts → run-manager.d-BVJSntpS.d.ts} +2 -2
  80. package/dist/types-chunks/{sdk-session-BTzblJTQ.d.ts → sdk-session-CqEG84oP.d.ts} +3 -3
  81. package/dist/types-chunks/sdk-skills-DokfOoJF.d.ts +335 -0
  82. package/dist/types-chunks/{shell-command-sets.d-C2cc9Hwi.d.ts → shell-command-sets.d-DqaaBwhU.d.ts} +1 -1
  83. package/dist/types-chunks/{side-query.d-DNes6rHA.d.ts → side-query.d-iH0P9ASy.d.ts} +3 -3
  84. package/dist/types-chunks/{types-D8OiIEwA.d.ts → types-PHjfwebT.d.ts} +1 -1
  85. package/dist/types-chunks/{types.d-DrtP1ceI.d.ts → types.d-C5xQEFcj.d.ts} +6 -6
  86. package/dist/types-chunks/{types.d-Cv09EdJR.d.ts → types.d-CK9A9rpP.d.ts} +1 -1
  87. package/dist/types-chunks/{types.d-Dc3kwcjC.d.ts → types.d-CaTXAW_Q.d.ts} +14 -3
  88. package/dist/types-chunks/{types.d-BEMcUOng.d.ts → types.d-Cb8RdrjU.d.ts} +5 -4
  89. package/dist/types-chunks/{types.d-EjZTEEVu.d.ts → types.d-rUOjXych.d.ts} +6 -2
  90. package/dist/types-chunks/{utils.d-50Q24Few.d.ts → utils.d-CWUyLiXo.d.ts} +8 -8
  91. package/package.json +2 -2
  92. package/dist/chunks/agent-R7HVNARP.js +0 -2
  93. package/dist/chunks/argument-completer-JHXUJWHC.js +0 -2
  94. package/dist/chunks/chunk-A3ZQE2BX.js +0 -519
  95. package/dist/chunks/chunk-D27EY4XC.js +0 -383
  96. package/dist/chunks/chunk-JJ2YDBSN.js +0 -415
  97. package/dist/chunks/chunk-QFV6YCIH.js +0 -92
  98. package/dist/chunks/chunk-SMVC3Q3U.js +0 -320
  99. package/dist/chunks/compaction-config-2TVSYSB4.js +0 -2
  100. package/dist/chunks/dist-H4PT2QAV.js +0 -2
  101. package/dist/chunks/host-OR3IO2A4.js +0 -2
  102. package/dist/chunks/run-manager-MNOTWIFX.js +0 -2
  103. package/dist/chunks/utils-5J4BHNBV.js +0 -2
@@ -1,33 +1,33 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{A as Be,C as hi,D as yi,E as vi,F as nt,I as en,K as ki,O as bi,Q as on,Y as Re,ba as $i,c as ui,d as fi,da as Si,ea as xi,f as mi,fa as Ai,h as et,i as ot,m as pi,n as gi,y as wi}from"./chunk-HLZWPB32.js";import{a as Ri}from"./chunk-GRWUC6H7.js";import{ha as ai,ia as li,ma as ci,oa as di}from"./chunk-4BY53JTF.js";import{i as Vo}from"./chunk-XTWIGVUL.js";import{Ab as Zn,Cb as yo,Gb as vo,Hb as Qn,Ua as ii,Va as si,_ as Qr,hb as Ke,i as Xn,n as Gr,xb as Qo,yb as Ae}from"./chunk-JJ2YDBSN.js";import{A as ri,D as xe,J as He,m as Yo,n as Jo,o as Fe,q as wo,r as Zo,s as ei,t as oi,v as ni,w as Jn,x as ti,y as ho}from"./chunk-PRASABCC.js";import{Rb as Xr,Tb as Vr,Ub as Yr,Xb as Vn,Ya as zo,ba as zr,hd as Zr,jd as se,pc as Yn,qc as Xo,tc as Jr}from"./chunk-JTZKC4TV.js";import{C as Er,Pa as po,Qa as Ne,Ra as De,ka as mo,ma as Bn,ya as qn}from"./chunk-BHE66SP3.js";import{$f as Br,Dc as Ko,Eg as qr,Fc as Bo,Gc as Nr,Hd as Se,Ia as ge,Ic as Dr,Id as je,Ja as W,Ka as ie,La as Ir,Nd as jr,Qa as Pr,Ra as Tr,Rd as Ur,Sa as Gn,Sd as qo,Vd as Fr,Wb as Mr,Yb as _r,_f as Ue,ac as go,dg as zn,k as Ho,le as Hr,mc as Lr,nc as Wr,ng as Go,oc as Or,qf as Kr,t as G}from"./chunk-7XSZVOG7.js";import{a}from"./chunk-ONUPGMER.js";import*as Dn from"fs";import*as jo from"path";import*as Ln from"fs";import _n from"path";import i from"chalk";var nn=["plan","accept-edits","auto","auto-in-project"];function Xa(e){return e==="auto"||e==="auto-in-project"}a(Xa,"isAutoMode");function Am(e,o){return Xa(e)&&o==="llm"}a(Am,"isAutoLlmMode");function Va(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(Va,"permissionModeDisplayName");var Ya='[deprecated] permissionMode "auto-in-project" is now an alias for "auto" (FEATURE_092, v0.7.33). The alias will be removed in v0.7.38 \u2014 please update ~/.kodax/config.json to use "auto".';function Rm(e=o=>{G({source:"repl:permission",level:"warn",message:o})}){let o=!1;return()=>{o||(o=!0,e(Ya))}}a(Rm,"createAutoInProjectDeprecationEmitter");function tn(e){switch(e){case"plan":return new Set(["bash","write","edit","undo"]);case"accept-edits":return new Set(["bash"]);case"auto":case"auto-in-project":return new Set}}a(tn,"computeConfirmTools");function Ei(e){return e!==void 0&&nn.includes(e)}a(Ei,"isPermissionMode");function ko(e,o){return Ei(e)?e:o}a(ko,"normalizePermissionMode");import{createHash as Ja,randomUUID as Za}from"node:crypto";import qe from"node:fs";import Ii from"node:path";var $o=class extends Error{static{a(this,"ProviderSetupConfigConflictError")}constructor(o){super(`KodaX configuration changed while setup was open: ${o}. Re-run \`kodax setup\`.`),this.name="ProviderSetupConfigConflictError"}},Ge=class extends Error{static{a(this,"ProviderSetupInvalidConfigError")}constructor(o,n){super(`KodaX configuration cannot be safely updated: ${o}. ${n}`),this.name="ProviderSetupInvalidConfigError"}},Wi=/^[A-Za-z_][A-Za-z0-9_]*$/,Qa=new Set(["accesskey","apikey","accesstoken","auth","authorization","bearertoken","clientsecret","credential","key","password","privatekey","refreshtoken","secret","sig","signature","token","xapikey"]);function ze(){return Object.entries(mo).filter(([,e])=>e.capabilityProfile.transport!=="cli-bridge").map(([e,o])=>({name:e,apiKeyEnv:o.apiKeyEnv,defaultModel:o.model,models:[...new Set(o.models?[o.model,...o.models.map(n=>n.id)]:[o.model])]})).sort((e,o)=>e.name===Bn?-1:o.name===Bn?1:e.name.localeCompare(o.name))}a(ze,"getProviderSetupCatalog");function Oi(e={}){let o=e.configPath??W("config.json"),n=e.catalog??ze(),t=e.environment??process.env,r=tt(o);if(!r.config)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:r.error??"config.json is not a JSON object."};let s=ji(r.config);if(s)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:s};let l=Mi(e.explicitProvider);if(l){let d=Li(r.config,l,n);return d&&(!d.requiresCredential||_i(t,d.apiKeyEnv))?Pi(o,r.revision,l):Ti(o,r.revision,l,d?.apiKeyEnv)}if(!r.exists)return{status:"needs-provider",configPath:o,configRevision:r.revision};let c=Mi(r.config.provider);if(c){let d=Li(r.config,c,n);return d?!d.requiresCredential||_i(t,d.apiKeyEnv)?Pi(o,r.revision,c):Ti(o,r.revision,c,d.apiKeyEnv):{status:"invalid-config",configPath:o,configRevision:r.revision,reason:`provider "${c}" is not a valid built-in or custom provider.`}}return{status:"needs-provider",configPath:o,configRevision:r.revision}}a(Oi,"inspectProviderSetupReadiness");function Ni(e){let o=e.configPath??W("config.json"),n=e.catalog??ze();try{return mi(o,()=>{let t=tt(o);if(!t.config)throw new Ge(o,t.error??"config.json is invalid JSON.");if(t.revision!==e.expectedRevision)throw new $o(o);el(t.config,o);let r=nl(e.choice,n,t.config),s={...t.config,provider:r.provider,model:r.model,...r.customProviders?{customProviders:r.customProviders}:{}};if(tt(o).revision!==e.expectedRevision)throw new $o(o);return tl(o,s),{provider:r.provider,model:r.model,apiKeyEnv:r.apiKeyEnv,configPath:o}})}catch(t){throw t instanceof fi?new $o(o):t}}a(Ni,"persistProviderSetupChoice");function Di(e){let n=(e.platform??process.platform)==="win32"?`Required next step: use this provider's API key as the value of the user environment variable "${e.apiKeyEnv}" in Windows Environment Variables.`:`Required next step: use this provider's API key as the value of the environment variable "${e.apiKeyEnv}" in your shell profile.`;return[`config.json stores the environment-variable name only: "${e.apiKeyEnv}"; it never stores the API key.`,n,"KodaX cannot set this environment variable for you.","Close and restart this terminal so the environment is refreshed.","Then run `kodax` again.","Optional: run `kodax doctor` to verify local configuration without an LLM request."]}a(Di,"providerSetupRestartInstructions");function Pi(e,o,n){return{status:"ready",configPath:e,configRevision:o,...n?{provider:n}:{}}}a(Pi,"ready");function Ti(e,o,n,t){return{status:"needs-credential",configPath:e,configRevision:o,provider:n,...t?{apiKeyEnv:t}:{}}}a(Ti,"needsCredential");function Mi(e){return typeof e=="string"&&e.trim()?e.trim():void 0}a(Mi,"normalizedString");function _i(e,o){return o!==void 0&&!!e[o]?.trim()}a(_i,"hasEnvironmentValue");function Li(e,o,n){let t=n.find(l=>l.name===o);if(t)return{apiKeyEnv:t.apiKeyEnv,requiresCredential:!0};if(Object.entries(mo).find(([l])=>l===o)?.[1]?.capabilityProfile.transport==="cli-bridge")return{requiresCredential:!1};let s=ol(e,o);return s?{apiKeyEnv:s.apiKeyEnv,requiresCredential:!0}:void 0}a(Li,"resolveConfiguredProvider");function el(e,o){let n=ji(e);if(n)throw new Ge(o,n)}a(el,"assertCustomProvidersPreservable");function ji(e){let o=e.customProviders;if(o===void 0)return;if(!Array.isArray(o))return"Existing customProviders must be an array; repair it before running setup.";let n=new Set;for(let t of o){let r=rt(t);if(!r)return"Existing customProviders contains an invalid entry; repair it before running setup.";let s=Ui(r.baseUrl);if(s)return`Existing customProviders entry "${r.name}" is unsafe: ${s}`;if(n.has(r.name))return`Existing customProviders contains duplicate name "${r.name}"; repair it before running setup.`;n.add(r.name)}}a(ji,"existingCustomProvidersError");function ol(e,o){let n=e.customProviders;if(Array.isArray(n))for(let t of n){let r=rt(t);if(r?.name===o)return r}}a(ol,"findValidCustomProvider");function rt(e){if(!Fi(e))return;let{name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s}=e;if(typeof o!="string"||n!=="openai"&&n!=="anthropic"||typeof t!="string"||typeof r!="string"||typeof s!="string")return;let l={...e,name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s};try{return qn(l),Wi.test(l.apiKeyEnv)?l:void 0}catch{return}}a(rt,"toValidCustomProvider");function nl(e,o,n){if(e.kind==="builtin"){let d=o.find(u=>u.name===e.provider);if(!d||!d.models.includes(e.model))throw new Error("Choose a supported built-in provider and model.");return{provider:d.name,model:e.model,apiKeyEnv:d.apiKeyEnv}}let t=it(e.provider);if(o.some(d=>d.name===t.name))throw new Error(`Custom provider name "${t.name}" conflicts with a built-in provider.`);let r=n.customProviders,s=Array.isArray(r)?r.flatMap(d=>{let u=rt(d);return u?[u]:[]}):[],c=s.find(d=>d.name===t.name)?s.map(d=>d.name===t.name?t:d):[...s,t];return{provider:t.name,model:t.model,apiKeyEnv:t.apiKeyEnv,customProviders:c}}a(nl,"normalizeProviderSetupChoice");function it(e){let o={name:e.name.trim(),protocol:e.protocol,baseUrl:e.baseUrl.trim(),apiKeyEnv:e.apiKeyEnv.trim(),model:e.model.trim()},n=Ui(o.baseUrl);if(n)throw new Error(n);if(qn(o),!Wi.test(o.apiKeyEnv))throw new Error("Custom provider API key environment variable name is invalid.");return o}a(it,"validateProviderSetupCustomMetadata");function Ui(e){let o;try{o=new URL(e)}catch{return"Custom provider Base URL must be a valid absolute URL."}if(o.protocol!=="https:"&&o.protocol!=="http:")return"Custom provider Base URL must use http or https.";if(o.username||o.password)return"Custom provider Base URL must not contain credentials.";let n=[...o.searchParams.keys()].find(t=>Qa.has(t.toLowerCase().replace(/[-_.]/g,"")));return n===void 0?void 0:`Custom provider Base URL must not contain credential query parameter "${n}".`}a(Ui,"customProviderEndpointError");function tt(e){if(!qe.existsSync(e))return{configPath:e,revision:bo(void 0),exists:!1,config:{}};let o;try{o=qe.readFileSync(e,"utf8")}catch(n){return{configPath:e,revision:bo(void 0),exists:!0,error:n instanceof Error?n.message:"config.json cannot be read."}}try{let n=JSON.parse(o);return Fi(n)?{configPath:e,revision:bo(o),exists:!0,config:n}:{configPath:e,revision:bo(o),exists:!0,error:"config.json must contain a JSON object."}}catch(n){return{configPath:e,revision:bo(o),exists:!0,error:n instanceof Error?n.message:"config.json is invalid JSON."}}}a(tt,"readConfig");function bo(e){return Ja("sha256").update(e??"<missing>","utf8").digest("hex")}a(bo,"revisionFor");function Fi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Fi,"isRecord");function tl(e,o){let n=Ii.dirname(e);qe.mkdirSync(n,{recursive:!0});let t=Ii.join(n,`.config.${process.pid}.${Za()}.tmp`);try{qe.writeFileSync(t,`${JSON.stringify(o,null,2)}
3
- `,{encoding:"utf8",mode:384}),qe.renameSync(t,e)}catch(r){throw qe.rmSync(t,{force:!0}),r}}a(tl,"writeConfigAtomically");import{existsSync as Hi,mkdirSync as rl,readFileSync as Ki,writeFileSync as il}from"node:fs";import Xe from"node:path";var sl={core:{},mcp:{version:1,servers:{}},extensions:{version:1,paths:[]},a2a:{version:2,agents:{}}},al=["core","mcp","extensions","a2a"];function st(e,o){return o==="core"?Xe.join(e,"config.json"):Xe.join(e,"integrations",`${o}.json`)}a(st,"activePath");function ll(e,o){return o==="core"?Xe.join(e,"config.example.jsonc"):Xe.join(e,"integrations",`${o}.example.jsonc`)}a(ll,"templatePath");function cl(e){let o=e.replaceAll("\\","/");return al.flatMap(n=>[{domain:n,kind:"active",path:st(e,n),content:`${JSON.stringify(sl[n],null,2)}
4
- `},{domain:n,kind:"template",path:ll(e,n),content:ui(n).replaceAll("~/.kodax",o)}])}a(cl,"configFiles");function So(e,o){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error(`${o} must contain a JSON object.`);return e}a(So,"requireRecord");function dl(e,o){let n=So(e,"A2A config"),t=Object.keys(n).find(s=>!["version","agents","server"].includes(s));if(t)throw new Error(`A2A config contains unknown field "${t}".`);if(n.version!==1&&n.version!==2)throw new Error("A2A config version must be 1 or 2.");let r=So(n.agents,"A2A config agents");if(n.server!==void 0&&So(n.server,"A2A config server"),o)o(e);else if(Object.keys(r).length>0||n.server!==void 0)throw new Error("A2A config contains active declarations that require the KodaX host validator.")}a(dl,"validateA2ADocument");function ul(e,o){let n=Ki(e.path,"utf8"),t;try{t=JSON.parse(n)}catch{throw new Error(`${e.domain} config is invalid JSON.`)}e.domain==="core"?So(t,"Core config"):e.domain==="mcp"?et(t):e.domain==="extensions"?ot(t):dl(t,o)}a(ul,"validateActiveFile");function Bi(e,o){if(!Hi(e.path))return{domain:e.domain,kind:e.kind,path:e.path,status:"missing"};if(e.kind==="template")return{domain:e.domain,kind:e.kind,path:e.path,status:"existing"};try{return ul(e,o),{domain:e.domain,kind:e.kind,path:e.path,status:"existing"}}catch(n){return{domain:e.domain,kind:e.kind,path:e.path,status:"invalid",diagnostic:n instanceof Error?n.message:`${e.domain} config is invalid.`}}}a(Bi,"existingFileResult");function fl(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}a(fl,"isAlreadyExists");function ml(e,o){rl(Xe.dirname(e.path),{recursive:!0,mode:448});try{return il(e.path,e.content,{encoding:"utf8",flag:"wx",mode:384}),{domain:e.domain,kind:e.kind,path:e.path,status:"created"}}catch(n){if(fl(n))return Bi(e,o);throw n}}a(ml,"createIfMissing");function pl(e){let o=st(e,"core");if(Hi(o))try{let n=So(JSON.parse(Ki(o,"utf8")),"Core config"),t=pi(e);t.mcp.action==="create"&&et({version:1,servers:n.mcpServers}),t.extensions.action==="create"&&ot({version:1,paths:n.extensions})}catch(n){return`Legacy integration configuration is invalid: ${n instanceof Error?n.message:"Legacy integration config is invalid."}`}}a(pl,"legacyIntegrationDiagnostic");function qi(e={}){let o=Xe.resolve(e.configHome??ge()),n=cl(o),t=n.map(s=>Bi(s,e.validateA2A));if(t.some(s=>s.status==="invalid"))return{configHome:o,files:t};let r=pl(o);if(r){let s=st(o,"core");return t=t.map(l=>l.path===s?{...l,status:"invalid",diagnostic:r}:l),{configHome:o,files:t}}return gi({configHome:o}),{configHome:o,files:n.map(s=>ml(s,e.validateA2A))}}a(qi,"initializeSetupConfiguration");import Ce from"node:path";var Gi=[{id:"interrupt",name:"Interrupt",description:"Interrupt the current streaming response",defaultBindings:[{key:"c",ctrl:!0}],context:"global",priority:200,category:"global",configurable:!1},{id:"showHelp",name:"Toggle Help",description:"Show or hide shortcut help when the input is empty",defaultBindings:[{key:"?"}],context:"global",priority:150,category:"global",configurable:!0},{id:"toggleThinking",name:"Cycle Reasoning Effort",description:"Cycle reasoning effort for the active model: off, low \u2026 max, auto",defaultBindings:[{key:"t",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleTranscriptMode",name:"Toggle Transcript Mode",description:"Toggle transcript mode on or off",defaultBindings:[{key:"o",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"openTranscriptSearch",name:"Search Transcript",description:"Open transcript search",defaultBindings:[{key:"f",ctrl:!0}],context:"global",priority:150,category:"navigation",configurable:!0},{id:"togglePermissionMode",name:"Cycle Permissions",description:"Cycle permission mode: plan, accept-edits, auto-in-project",defaultBindings:[{key:"tab",shift:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleAgentMode",name:"Cycle Agent Mode",description:"Cycle agent mode: AMA, SA",defaultBindings:[{key:"m",meta:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"submitInput",name:"Submit Input",description:"Submit the current input",defaultBindings:[{key:"enter"}],context:"input",priority:50,category:"global",configurable:!1},{id:"acceptCompletion",name:"Accept Completion",description:"Accept the current autocomplete suggestion",defaultBindings:[{key:"tab"}],context:"input",priority:60,category:"editing",configurable:!0},{id:"cancelInput",name:"Cancel Input",description:"Cancel or clear the current input",defaultBindings:[{key:"escape"}],context:"input",priority:70,category:"editing",configurable:!0},{id:"newline",name:"Insert Newline",description:"Insert a newline in the current input",defaultBindings:[{key:"enter",shift:!0},{key:"j",ctrl:!0}],context:"input",priority:40,category:"editing",configurable:!0},{id:"historyUp",name:"History Up",description:"Browse previous input history",defaultBindings:[{key:"up"}],context:"input",priority:30,category:"navigation",configurable:!0},{id:"historyDown",name:"History Down",description:"Browse next input history",defaultBindings:[{key:"down"}],context:"input",priority:30,category:"navigation",configurable:!0},{id:"moveLeft",name:"Move Left",description:"Move the cursor left",defaultBindings:[{key:"left"}],context:"input",priority:20,category:"navigation",configurable:!1},{id:"moveRight",name:"Move Right",description:"Move the cursor right",defaultBindings:[{key:"right"}],context:"input",priority:20,category:"navigation",configurable:!1},{id:"moveToStart",name:"Move To Start",description:"Move the cursor to the start of the line",defaultBindings:[{key:"a",ctrl:!0}],context:"input",priority:25,category:"navigation",configurable:!0},{id:"moveToEnd",name:"Move To End",description:"Move the cursor to the end of the line",defaultBindings:[{key:"e",ctrl:!0}],context:"input",priority:25,category:"navigation",configurable:!0},{id:"killLineRight",name:"Delete To End",description:"Delete from the cursor to the end of the current line",defaultBindings:[{key:"k",ctrl:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"killLineLeft",name:"Delete To Start",description:"Delete from the start of the line to the cursor",defaultBindings:[{key:"u",ctrl:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"deleteWordLeft",name:"Delete Word Left",description:"Delete the word before the cursor",defaultBindings:[{key:"w",ctrl:!0},{key:"backspace",meta:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"moveLineUp",name:"Move Line Up",description:"Move to the previous visual line in multiline input",defaultBindings:[{key:"up",ctrl:!0}],context:"input",priority:20,category:"navigation",configurable:!0},{id:"moveLineDown",name:"Move Line Down",description:"Move to the next visual line in multiline input",defaultBindings:[{key:"down",ctrl:!0}],context:"input",priority:20,category:"navigation",configurable:!0},{id:"backspace",name:"Backspace",description:"Delete the previous character",defaultBindings:[{key:"backspace"}],context:"input",priority:10,category:"editing",configurable:!1},{id:"delete",name:"Delete",description:"Delete the next character",defaultBindings:[{key:"delete"}],context:"input",priority:10,category:"editing",configurable:!1}];function gl(e){let o=[];e.ctrl&&o.push("Ctrl"),e.meta&&o.push("Alt"),e.shift&&o.push("Shift");let n={tab:"Tab",escape:"Esc",enter:"Enter",backspace:"Backspace"};return o.push(n[e.key]??(e.key.length===1?e.key.toUpperCase():e.key)),o.join("+")}a(gl,"formatBinding");function at(e){let n=Gi.find(t=>t.id===e)?.defaultBindings[0];return n?gl(n):"<unavailable>"}a(at,"shortcut");function wl(){return Object.entries(mo).filter(([,e])=>e.capabilityProfile.transport==="cli-bridge").map(([e])=>e).sort()}a(wl,"defaultCliBridges");function lt(e={}){let o=Ce.resolve(e.configHome??ge()),n=e.catalog??ze(),t=e.cliBridges??wl(),r=n.map(s=>` ${s.name.padEnd(18)} ${s.apiKeyEnv} (default model: ${s.defaultModel})`);return["KodaX setup guide","","Configuration files (existing files are never overwritten by setup):",` Core: ${Ce.join(o,"config.json")}`,` Annotated template: ${Ce.join(o,"config.example.jsonc")}`,` MCP: ${Ce.join(o,"integrations","mcp.json")}`,` Extensions: ${Ce.join(o,"integrations","extensions.json")}`,` A2A: ${Ce.join(o,"integrations","a2a.json")}`,` Integration templates: ${Ce.join(o,"integrations","*.example.jsonc")}`," Existing active files are validated first. If one is invalid, setup reports"," it and stops without creating or overwriting any configuration file."," The annotated core template includes `sandbox.envPass` for exact command-target"," environment passthrough; setup never stores an environment-variable value.","","Built-in API providers and credential environment variables:",...r,...t.length>0?[` CLI bridges: ${t.join(", ")} (authenticate with the provider CLI; no KodaX API-key variable)`]:[],"","Set the variable named for your provider; keep the credential out of config.json:"," Custom providers: `apiKeyEnv` is the environment-variable name stored in config.json,"," never the API key value."," Put the provider's actual API key in the value of that exact environment variable."," KodaX does not set this environment variable for you."," Windows PowerShell (persistent user variable):",' [Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "<your-key>", "User")'," macOS/Linux shell profile:",' export OPENAI_API_KEY="<your-key>"'," Obtain the key from the provider console, then close and restart the terminal."," Run `kodax doctor` to verify local configuration without sending an LLM request.","","Setup commands:"," kodax setup Initialize missing files and choose a built-in or custom provider"," kodax setup --custom Configure only a custom OpenAI/Anthropic-compatible provider"," kodax setup --help Show this guide without changing files","","Sandbox containment (optional; permission decisions still work when it is unavailable):"," `kodax setup`, first-run setup, and `/setup` check sandbox readiness once."," Windows: setup can launch the one-time UAC provisioning flow; the terminal itself"," does not need to run as Administrator. Declining UAC is non-fatal."," macOS: ASRT uses Seatbelt/sandbox-exec; install ripgrep with `brew install ripgrep`."," Linux: ASRT uses bubblewrap; install bubblewrap, socat, and ripgrep with apt,"," dnf, or pacman. KodaX never invokes sudo or a package manager automatically."," Ordinary startup and tool calls do not repeat setup reminders or trigger UAC."," Inspect/activate explicitly: `kodax sandbox doctor` / `kodax sandbox setup`."," Model-issued commands filter credential-shaped variables by default. Add exact names"," such as GH_TOKEN to user-level `sandbox.envPass` only when command access is intended."," The default list is empty; NODE_OPTIONS and BASH_ENV remain blocked."," Restart KodaX (and any persistent daemon) after changing the list or host variables."," SDK: `@kodax-ai/kodax/sandbox` exposes doctor, activation, capability metadata,"," and policy-controlled command execution independent of Auto[LLM].","","CLI basics:"," kodax Enter the interactive REPL",' kodax -p "task" Run one task and exit'," kodax -r Search and resume a saved session"," kodax -c Continue the most recent non-empty session","","Inside the REPL:"," /model [provider[/model]] List or switch provider/model"," /mode [plan|accept-edits|auto] Switch permission mode"," /effort [off|auto|low|medium|high|xhigh|max] Set reasoning depth"," /agent-mode [ama|sa|toggle] Switch AMA/SA execution"," /setup --help Show this guide","","Default shortcuts:",` ${at("toggleThinking")} Cycle reasoning effort`,` ${at("togglePermissionMode")} Cycle permission mode`,` ${at("toggleAgentMode")} Cycle AMA/SA`," Tab Accept completion"," Esc Cancel or clear input"].join(`
5
- `)}a(lt,"renderSetupGuide");import*as zi from"node:readline";import ct from"chalk";async function Xi(e={}){let o=e.catalog??ze(),n=Oi({...e.configPath?{configPath:e.configPath}:{},catalog:o});if(n.status==="invalid-config")throw new Ge(n.configPath,n.reason);if(o.length===0)throw new Error("No built-in API providers are available for setup.");let t=e.interaction===void 0,r=e.interaction??kl({input:e.input??process.stdin,output:e.output??process.stdout});try{let s=e.customOnly?"custom":await r.choose("Choose a provider. KodaX will save metadata only and will never ask for an API key.",[...o.map(u=>({value:`builtin:${u.name}`,label:`${u.name} \u2014 ${u.defaultModel} (set ${u.apiKeyEnv})`})),{value:"custom",label:"Custom OpenAI/Anthropic-compatible provider"},{value:"cancel",label:"Cancel"}]);if(!s||s==="cancel")return{status:"cancelled"};let l=s==="custom"?await yl(r):await hl(r,o,s.slice(8));if(!l)return{status:"cancelled"};let c=vl(l,o);return await r.confirm(`Save ${c}? config.json will store the environment-variable name only. You must set that variable to the provider's API key after setup. No credential value will be written.`)?{status:"configured",selection:Ni({configPath:n.configPath,expectedRevision:n.configRevision,catalog:o,choice:l})}:{status:"cancelled"}}finally{t&&r.close?.()}}a(Xi,"runProviderSetupWizard");async function hl(e,o,n){let t=o.find(l=>l.name===n);if(!t)throw new Error(`Unknown setup provider: ${n}`);let r=[...new Set(t.models)],s=await e.choose(`Choose a model for ${t.name}.`,r.map(l=>({value:l,label:l===t.defaultModel?`${l} (default)`:l})));return s?{kind:"builtin",provider:t.name,model:s}:void 0}a(hl,"collectBuiltinChoice");async function yl(e){let o=await rn(e,"Custom provider name (a unique local alias used by /model and config.json)");if(!o)return;let n=await e.choose("Protocol family (check the provider API documentation for OpenAI or Anthropic compatibility)",[{value:"openai",label:"OpenAI-compatible"},{value:"anthropic",label:"Anthropic-compatible"}]);if(n!=="openai"&&n!=="anthropic")return;let t=await rn(e,"API Base URL from the provider documentation, for example https://example.com/v1");if(!t)return;let r=await rn(e,["Environment-variable name only (for example MY_PROVIDER_API_KEY).","Do not paste an API key here.","config.json stores this name only.","After setup, set this environment variable's value to this provider's API key."].join(" "));if(!r)return;let s=await rn(e,"Model identifier from the provider documentation, for example provider/model-name");if(s)return{kind:"custom",provider:it({name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s})}}a(yl,"collectCustomChoice");async function rn(e,o){let t=(await e.text(o))?.trim();return t||void 0}a(rn,"requiredText");function vl(e,o){if(e.kind==="custom"){let t=e.provider;return`provider=${t.name}, protocol=${t.protocol}, baseUrl=${t.baseUrl}, model=${t.model}, apiKeyEnv=${t.apiKeyEnv}`}let n=o.find(t=>t.name===e.provider);return`provider=${e.provider}, model=${e.model}, apiKeyEnv=${n?.apiKeyEnv??"<unknown>"}`}a(vl,"summarizeChoice");function kl(e){let o=zi.createInterface({input:e.input,output:e.output}),n=!1;o.on("close",()=>{n=!0}),o.on("SIGINT",()=>o.close());let t=a(r=>new Promise((s,l)=>{let c=!1,d=a(f=>{c||(c=!0,o.removeListener("close",u),s(f))},"finish"),u=a(()=>d(void 0),"onClose");if(n){d(void 0);return}o.once("close",u);try{o.question(r,f=>d(f))}catch(f){o.removeListener("close",u),n?d(void 0):l(f)}}),"question");return{async choose(r,s){for(e.output.write(`
6
- ${ct.cyan(r)}
2
+ import{A as Be,C as $i,D as Si,E as xi,F as rt,I as nn,K as Ai,O as Ri,Q as tn,Y as Ce,ba as Ci,c as wi,d as hi,da as Ei,ea as Ii,f as yi,fa as Ti,h as nt,i as tt,m as vi,n as ki,y as bi}from"./chunk-C4DTUKTR.js";import{a as Pi}from"./chunk-OK4AXDC5.js";import{ha as fi,ia as mi,ma as pi,oa as gi}from"./chunk-DSMONSVB.js";import{i as Jo}from"./chunk-2TM3W3GK.js";import{$ as ri,Bb as et,Db as vo,Hb as ko,Ib as ot,Va as di,Wa as ui,i as Yn,ib as Ke,n as Vr,yb as on,zb as Re}from"./chunk-Q5VRWSKG.js";import{A as ci,D as Ae,J as He,m as Qo,n as Zo,o as Fe,q as ho,r as en,s as ii,t as si,v as ai,w as Zn,x as li,y as yo}from"./chunk-JS452J2F.js";import{Lb as Zr,Nb as ei,Ob as oi,Rb as Jn,Sa as Vo,X as Qr,bd as ti,c as Yr,d as Jr,dd as le,jc as Qn,kc as Yo,nc as ni}from"./chunk-7JXA3533.js";import{C as Pr,Pa as go,Qa as De,Ra as je,ka as po,ma as Gn,ya as zn}from"./chunk-BHE66SP3.js";import{$b as Or,Gc as qo,Ia as he,Ic as Go,Ig as Xr,Ja as W,Jc as Ur,Ka as ae,La as Mr,Lc as Fr,Ld as V,Md as oe,Qa as _r,Ra as Lr,Rd as Hr,Sa as Xn,Vd as Kr,Wd as zo,Zb as Wr,Zd as Br,cg as Ue,dc as wo,dg as zr,hg as Vn,k as Bo,pc as Nr,pe as qr,qc as Dr,rc as jr,rg as Xo,t as G,uf as Gr}from"./chunk-BNVSKIAB.js";import{a}from"./chunk-ONUPGMER.js";import*as Un from"fs";import*as Fo from"path";import*as Nn from"fs";import On from"path";import i from"chalk";var rn=["plan","accept-edits","auto","auto-in-project"];function el(e){return e==="auto"||e==="auto-in-project"}a(el,"isAutoMode");function _m(e,o){return el(e)&&o==="llm"}a(_m,"isAutoLlmMode");function ol(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ol,"permissionModeDisplayName");var nl='[deprecated] permissionMode "auto-in-project" is now an alias for "auto" (FEATURE_092, v0.7.33). The alias will be removed in v0.7.38 \u2014 please update ~/.kodax/config.json to use "auto".';function Lm(e=o=>{G({source:"repl:permission",level:"warn",message:o})}){let o=!1;return()=>{o||(o=!0,e(nl))}}a(Lm,"createAutoInProjectDeprecationEmitter");function sn(e){switch(e){case"plan":return new Set(["bash","write","edit","undo"]);case"accept-edits":return new Set(["bash"]);case"auto":case"auto-in-project":return new Set}}a(sn,"computeConfirmTools");function _i(e){return e!==void 0&&rn.includes(e)}a(_i,"isPermissionMode");function bo(e,o){return _i(e)?e:o}a(bo,"normalizePermissionMode");import{createHash as tl,randomUUID as rl}from"node:crypto";import qe from"node:fs";import Li from"node:path";var So=class extends Error{static{a(this,"ProviderSetupConfigConflictError")}constructor(o){super(`KodaX configuration changed while setup was open: ${o}. Re-run \`kodax setup\`.`),this.name="ProviderSetupConfigConflictError"}},Ge=class extends Error{static{a(this,"ProviderSetupInvalidConfigError")}constructor(o,n){super(`KodaX configuration cannot be safely updated: ${o}. ${n}`),this.name="ProviderSetupInvalidConfigError"}},Ui=/^[A-Za-z_][A-Za-z0-9_]*$/,il=new Set(["accesskey","apikey","accesstoken","auth","authorization","bearertoken","clientsecret","credential","key","password","privatekey","refreshtoken","secret","sig","signature","token","xapikey"]);function ze(){return Object.entries(po).filter(([,e])=>e.capabilityProfile.transport!=="cli-bridge").map(([e,o])=>({name:e,apiKeyEnv:o.apiKeyEnv,defaultModel:o.model,models:[...new Set(o.models?[o.model,...o.models.map(n=>n.id)]:[o.model])]})).sort((e,o)=>e.name===Gn?-1:o.name===Gn?1:e.name.localeCompare(o.name))}a(ze,"getProviderSetupCatalog");function Fi(e={}){let o=e.configPath??W("config.json"),n=e.catalog??ze(),t=e.environment??process.env,r=it(o);if(!r.config)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:r.error??"config.json is not a JSON object."};let s=Bi(r.config);if(s)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:s};let l=Ni(e.explicitProvider);if(l){let d=ji(r.config,l,n);return d&&(!d.requiresCredential||Di(t,d.apiKeyEnv))?Wi(o,r.revision,l):Oi(o,r.revision,l,d?.apiKeyEnv)}if(!r.exists)return{status:"needs-provider",configPath:o,configRevision:r.revision};let c=Ni(r.config.provider);if(c){let d=ji(r.config,c,n);return d?!d.requiresCredential||Di(t,d.apiKeyEnv)?Wi(o,r.revision,c):Oi(o,r.revision,c,d.apiKeyEnv):{status:"invalid-config",configPath:o,configRevision:r.revision,reason:`provider "${c}" is not a valid built-in or custom provider.`}}return{status:"needs-provider",configPath:o,configRevision:r.revision}}a(Fi,"inspectProviderSetupReadiness");function Hi(e){let o=e.configPath??W("config.json"),n=e.catalog??ze();try{return yi(o,()=>{let t=it(o);if(!t.config)throw new Ge(o,t.error??"config.json is invalid JSON.");if(t.revision!==e.expectedRevision)throw new So(o);sl(t.config,o);let r=ll(e.choice,n,t.config),s={...t.config,provider:r.provider,model:r.model,...r.customProviders?{customProviders:r.customProviders}:{}};if(it(o).revision!==e.expectedRevision)throw new So(o);return cl(o,s),{provider:r.provider,model:r.model,apiKeyEnv:r.apiKeyEnv,configPath:o}})}catch(t){throw t instanceof hi?new So(o):t}}a(Hi,"persistProviderSetupChoice");function Ki(e){let n=(e.platform??process.platform)==="win32"?`Required next step: use this provider's API key as the value of the user environment variable "${e.apiKeyEnv}" in Windows Environment Variables.`:`Required next step: use this provider's API key as the value of the environment variable "${e.apiKeyEnv}" in your shell profile.`;return[`config.json stores the environment-variable name only: "${e.apiKeyEnv}"; it never stores the API key.`,n,"KodaX cannot set this environment variable for you.","Close and restart this terminal so the environment is refreshed.","Then run `kodax` again.","Optional: run `kodax doctor` to verify local configuration without an LLM request."]}a(Ki,"providerSetupRestartInstructions");function Wi(e,o,n){return{status:"ready",configPath:e,configRevision:o,...n?{provider:n}:{}}}a(Wi,"ready");function Oi(e,o,n,t){return{status:"needs-credential",configPath:e,configRevision:o,provider:n,...t?{apiKeyEnv:t}:{}}}a(Oi,"needsCredential");function Ni(e){return typeof e=="string"&&e.trim()?e.trim():void 0}a(Ni,"normalizedString");function Di(e,o){return o!==void 0&&!!e[o]?.trim()}a(Di,"hasEnvironmentValue");function ji(e,o,n){let t=n.find(l=>l.name===o);if(t)return{apiKeyEnv:t.apiKeyEnv,requiresCredential:!0};if(Object.entries(po).find(([l])=>l===o)?.[1]?.capabilityProfile.transport==="cli-bridge")return{requiresCredential:!1};let s=al(e,o);return s?{apiKeyEnv:s.apiKeyEnv,requiresCredential:!0}:void 0}a(ji,"resolveConfiguredProvider");function sl(e,o){let n=Bi(e);if(n)throw new Ge(o,n)}a(sl,"assertCustomProvidersPreservable");function Bi(e){let o=e.customProviders;if(o===void 0)return;if(!Array.isArray(o))return"Existing customProviders must be an array; repair it before running setup.";let n=new Set;for(let t of o){let r=st(t);if(!r)return"Existing customProviders contains an invalid entry; repair it before running setup.";let s=qi(r.baseUrl);if(s)return`Existing customProviders entry "${r.name}" is unsafe: ${s}`;if(n.has(r.name))return`Existing customProviders contains duplicate name "${r.name}"; repair it before running setup.`;n.add(r.name)}}a(Bi,"existingCustomProvidersError");function al(e,o){let n=e.customProviders;if(Array.isArray(n))for(let t of n){let r=st(t);if(r?.name===o)return r}}a(al,"findValidCustomProvider");function st(e){if(!Gi(e))return;let{name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s}=e;if(typeof o!="string"||n!=="openai"&&n!=="anthropic"||typeof t!="string"||typeof r!="string"||typeof s!="string")return;let l={...e,name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s};try{return zn(l),Ui.test(l.apiKeyEnv)?l:void 0}catch{return}}a(st,"toValidCustomProvider");function ll(e,o,n){if(e.kind==="builtin"){let d=o.find(u=>u.name===e.provider);if(!d||!d.models.includes(e.model))throw new Error("Choose a supported built-in provider and model.");return{provider:d.name,model:e.model,apiKeyEnv:d.apiKeyEnv}}let t=at(e.provider);if(o.some(d=>d.name===t.name))throw new Error(`Custom provider name "${t.name}" conflicts with a built-in provider.`);let r=n.customProviders,s=Array.isArray(r)?r.flatMap(d=>{let u=st(d);return u?[u]:[]}):[],c=s.find(d=>d.name===t.name)?s.map(d=>d.name===t.name?t:d):[...s,t];return{provider:t.name,model:t.model,apiKeyEnv:t.apiKeyEnv,customProviders:c}}a(ll,"normalizeProviderSetupChoice");function at(e){let o={name:e.name.trim(),protocol:e.protocol,baseUrl:e.baseUrl.trim(),apiKeyEnv:e.apiKeyEnv.trim(),model:e.model.trim()},n=qi(o.baseUrl);if(n)throw new Error(n);if(zn(o),!Ui.test(o.apiKeyEnv))throw new Error("Custom provider API key environment variable name is invalid.");return o}a(at,"validateProviderSetupCustomMetadata");function qi(e){let o;try{o=new URL(e)}catch{return"Custom provider Base URL must be a valid absolute URL."}if(o.protocol!=="https:"&&o.protocol!=="http:")return"Custom provider Base URL must use http or https.";if(o.username||o.password)return"Custom provider Base URL must not contain credentials.";let n=[...o.searchParams.keys()].find(t=>il.has(t.toLowerCase().replace(/[-_.]/g,"")));return n===void 0?void 0:`Custom provider Base URL must not contain credential query parameter "${n}".`}a(qi,"customProviderEndpointError");function it(e){if(!qe.existsSync(e))return{configPath:e,revision:$o(void 0),exists:!1,config:{}};let o;try{o=qe.readFileSync(e,"utf8")}catch(n){return{configPath:e,revision:$o(void 0),exists:!0,error:n instanceof Error?n.message:"config.json cannot be read."}}try{let n=JSON.parse(o);return Gi(n)?{configPath:e,revision:$o(o),exists:!0,config:n}:{configPath:e,revision:$o(o),exists:!0,error:"config.json must contain a JSON object."}}catch(n){return{configPath:e,revision:$o(o),exists:!0,error:n instanceof Error?n.message:"config.json is invalid JSON."}}}a(it,"readConfig");function $o(e){return tl("sha256").update(e??"<missing>","utf8").digest("hex")}a($o,"revisionFor");function Gi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Gi,"isRecord");function cl(e,o){let n=Li.dirname(e);qe.mkdirSync(n,{recursive:!0});let t=Li.join(n,`.config.${process.pid}.${rl()}.tmp`);try{qe.writeFileSync(t,`${JSON.stringify(o,null,2)}
3
+ `,{encoding:"utf8",mode:384}),qe.renameSync(t,e)}catch(r){throw qe.rmSync(t,{force:!0}),r}}a(cl,"writeConfigAtomically");import{existsSync as zi,mkdirSync as dl,readFileSync as Xi,writeFileSync as ul}from"node:fs";import Xe from"node:path";var fl={core:{},mcp:{version:1,servers:{}},extensions:{version:1,paths:[]},a2a:{version:2,agents:{}}},ml=["core","mcp","extensions","a2a"];function lt(e,o){return o==="core"?Xe.join(e,"config.json"):Xe.join(e,"integrations",`${o}.json`)}a(lt,"activePath");function pl(e,o){return o==="core"?Xe.join(e,"config.example.jsonc"):Xe.join(e,"integrations",`${o}.example.jsonc`)}a(pl,"templatePath");function gl(e){let o=e.replaceAll("\\","/");return ml.flatMap(n=>[{domain:n,kind:"active",path:lt(e,n),content:`${JSON.stringify(fl[n],null,2)}
4
+ `},{domain:n,kind:"template",path:pl(e,n),content:wi(n).replaceAll("~/.kodax",o)}])}a(gl,"configFiles");function xo(e,o){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error(`${o} must contain a JSON object.`);return e}a(xo,"requireRecord");function wl(e,o){let n=xo(e,"A2A config"),t=Object.keys(n).find(s=>!["version","agents","server"].includes(s));if(t)throw new Error(`A2A config contains unknown field "${t}".`);if(n.version!==1&&n.version!==2)throw new Error("A2A config version must be 1 or 2.");let r=xo(n.agents,"A2A config agents");if(n.server!==void 0&&xo(n.server,"A2A config server"),o)o(e);else if(Object.keys(r).length>0||n.server!==void 0)throw new Error("A2A config contains active declarations that require the KodaX host validator.")}a(wl,"validateA2ADocument");function hl(e,o){let n=Xi(e.path,"utf8"),t;try{t=JSON.parse(n)}catch{throw new Error(`${e.domain} config is invalid JSON.`)}e.domain==="core"?xo(t,"Core config"):e.domain==="mcp"?nt(t):e.domain==="extensions"?tt(t):wl(t,o)}a(hl,"validateActiveFile");function Vi(e,o){if(!zi(e.path))return{domain:e.domain,kind:e.kind,path:e.path,status:"missing"};if(e.kind==="template")return{domain:e.domain,kind:e.kind,path:e.path,status:"existing"};try{return hl(e,o),{domain:e.domain,kind:e.kind,path:e.path,status:"existing"}}catch(n){return{domain:e.domain,kind:e.kind,path:e.path,status:"invalid",diagnostic:n instanceof Error?n.message:`${e.domain} config is invalid.`}}}a(Vi,"existingFileResult");function yl(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}a(yl,"isAlreadyExists");function vl(e,o){dl(Xe.dirname(e.path),{recursive:!0,mode:448});try{return ul(e.path,e.content,{encoding:"utf8",flag:"wx",mode:384}),{domain:e.domain,kind:e.kind,path:e.path,status:"created"}}catch(n){if(yl(n))return Vi(e,o);throw n}}a(vl,"createIfMissing");function kl(e){let o=lt(e,"core");if(zi(o))try{let n=xo(JSON.parse(Xi(o,"utf8")),"Core config"),t=vi(e);t.mcp.action==="create"&&nt({version:1,servers:n.mcpServers}),t.extensions.action==="create"&&tt({version:1,paths:n.extensions})}catch(n){return`Legacy integration configuration is invalid: ${n instanceof Error?n.message:"Legacy integration config is invalid."}`}}a(kl,"legacyIntegrationDiagnostic");function Yi(e={}){let o=Xe.resolve(e.configHome??he()),n=gl(o),t=n.map(s=>Vi(s,e.validateA2A));if(t.some(s=>s.status==="invalid"))return{configHome:o,files:t};let r=kl(o);if(r){let s=lt(o,"core");return t=t.map(l=>l.path===s?{...l,status:"invalid",diagnostic:r}:l),{configHome:o,files:t}}return ki({configHome:o}),{configHome:o,files:n.map(s=>vl(s,e.validateA2A))}}a(Yi,"initializeSetupConfiguration");import Ee from"node:path";var Ji=[{id:"interrupt",name:"Interrupt",description:"Interrupt the current streaming response",defaultBindings:[{key:"c",ctrl:!0}],context:"global",priority:200,category:"global",configurable:!1},{id:"showHelp",name:"Toggle Help",description:"Show or hide shortcut help when the input is empty",defaultBindings:[{key:"?"}],context:"global",priority:150,category:"global",configurable:!0},{id:"toggleThinking",name:"Cycle Reasoning Effort",description:"Cycle reasoning effort for the active model: off, low \u2026 max, auto",defaultBindings:[{key:"t",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleTranscriptMode",name:"Toggle Transcript Mode",description:"Toggle transcript mode on or off",defaultBindings:[{key:"o",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"openTranscriptSearch",name:"Search Transcript",description:"Open transcript search",defaultBindings:[{key:"f",ctrl:!0}],context:"global",priority:150,category:"navigation",configurable:!0},{id:"togglePermissionMode",name:"Cycle Permissions",description:"Cycle permission mode: plan, accept-edits, auto-in-project",defaultBindings:[{key:"tab",shift:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleAgentMode",name:"Cycle Agent Mode",description:"Cycle agent mode: AMA, SA",defaultBindings:[{key:"m",meta:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"submitInput",name:"Submit Input",description:"Submit the current input",defaultBindings:[{key:"enter"}],context:"input",priority:50,category:"global",configurable:!1},{id:"acceptCompletion",name:"Accept Completion",description:"Accept the current autocomplete suggestion",defaultBindings:[{key:"tab"}],context:"input",priority:60,category:"editing",configurable:!0},{id:"cancelInput",name:"Cancel Input",description:"Cancel or clear the current input",defaultBindings:[{key:"escape"}],context:"input",priority:70,category:"editing",configurable:!0},{id:"newline",name:"Insert Newline",description:"Insert a newline in the current input",defaultBindings:[{key:"enter",shift:!0},{key:"j",ctrl:!0}],context:"input",priority:40,category:"editing",configurable:!0},{id:"historyUp",name:"History Up",description:"Browse previous input history",defaultBindings:[{key:"up"}],context:"input",priority:30,category:"navigation",configurable:!0},{id:"historyDown",name:"History Down",description:"Browse next input history",defaultBindings:[{key:"down"}],context:"input",priority:30,category:"navigation",configurable:!0},{id:"moveLeft",name:"Move Left",description:"Move the cursor left",defaultBindings:[{key:"left"}],context:"input",priority:20,category:"navigation",configurable:!1},{id:"moveRight",name:"Move Right",description:"Move the cursor right",defaultBindings:[{key:"right"}],context:"input",priority:20,category:"navigation",configurable:!1},{id:"moveToStart",name:"Move To Start",description:"Move the cursor to the start of the line",defaultBindings:[{key:"a",ctrl:!0}],context:"input",priority:25,category:"navigation",configurable:!0},{id:"moveToEnd",name:"Move To End",description:"Move the cursor to the end of the line",defaultBindings:[{key:"e",ctrl:!0}],context:"input",priority:25,category:"navigation",configurable:!0},{id:"killLineRight",name:"Delete To End",description:"Delete from the cursor to the end of the current line",defaultBindings:[{key:"k",ctrl:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"killLineLeft",name:"Delete To Start",description:"Delete from the start of the line to the cursor",defaultBindings:[{key:"u",ctrl:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"deleteWordLeft",name:"Delete Word Left",description:"Delete the word before the cursor",defaultBindings:[{key:"w",ctrl:!0},{key:"backspace",meta:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"moveLineUp",name:"Move Line Up",description:"Move to the previous visual line in multiline input",defaultBindings:[{key:"up",ctrl:!0}],context:"input",priority:20,category:"navigation",configurable:!0},{id:"moveLineDown",name:"Move Line Down",description:"Move to the next visual line in multiline input",defaultBindings:[{key:"down",ctrl:!0}],context:"input",priority:20,category:"navigation",configurable:!0},{id:"backspace",name:"Backspace",description:"Delete the previous character",defaultBindings:[{key:"backspace"}],context:"input",priority:10,category:"editing",configurable:!1},{id:"delete",name:"Delete",description:"Delete the next character",defaultBindings:[{key:"delete"}],context:"input",priority:10,category:"editing",configurable:!1}];function bl(e){let o=[];e.ctrl&&o.push("Ctrl"),e.meta&&o.push("Alt"),e.shift&&o.push("Shift");let n={tab:"Tab",escape:"Esc",enter:"Enter",backspace:"Backspace"};return o.push(n[e.key]??(e.key.length===1?e.key.toUpperCase():e.key)),o.join("+")}a(bl,"formatBinding");function ct(e){let n=Ji.find(t=>t.id===e)?.defaultBindings[0];return n?bl(n):"<unavailable>"}a(ct,"shortcut");function $l(){return Object.entries(po).filter(([,e])=>e.capabilityProfile.transport==="cli-bridge").map(([e])=>e).sort()}a($l,"defaultCliBridges");function dt(e={}){let o=Ee.resolve(e.configHome??he()),n=e.catalog??ze(),t=e.cliBridges??$l(),r=n.map(s=>` ${s.name.padEnd(18)} ${s.apiKeyEnv} (default model: ${s.defaultModel})`);return["KodaX setup guide","","Configuration files (existing files are never overwritten by setup):",` Core: ${Ee.join(o,"config.json")}`,` Annotated template: ${Ee.join(o,"config.example.jsonc")}`,` MCP: ${Ee.join(o,"integrations","mcp.json")}`,` Extensions: ${Ee.join(o,"integrations","extensions.json")}`,` A2A: ${Ee.join(o,"integrations","a2a.json")}`,` Integration templates: ${Ee.join(o,"integrations","*.example.jsonc")}`," Existing active files are validated first. If one is invalid, setup reports"," it and stops without creating or overwriting any configuration file."," The annotated core template includes `sandbox.envPass` for exact command-target"," environment passthrough; setup never stores an environment-variable value.","","Built-in API providers and credential environment variables:",...r,...t.length>0?[` CLI bridges: ${t.join(", ")} (authenticate with the provider CLI; no KodaX API-key variable)`]:[],"","Set the variable named for your provider; keep the credential out of config.json:"," Custom providers: `apiKeyEnv` is the environment-variable name stored in config.json,"," never the API key value."," Put the provider's actual API key in the value of that exact environment variable."," KodaX does not set this environment variable for you."," Windows PowerShell (persistent user variable):",' [Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "<your-key>", "User")'," macOS/Linux shell profile:",' export OPENAI_API_KEY="<your-key>"'," Obtain the key from the provider console, then close and restart the terminal."," Run `kodax doctor` to verify local configuration without sending an LLM request.","","Setup commands:"," kodax setup Initialize missing files and choose a built-in or custom provider"," kodax setup --custom Configure only a custom OpenAI/Anthropic-compatible provider"," kodax setup --help Show this guide without changing files","","Sandbox containment (optional; permission decisions still work when it is unavailable):"," `kodax setup`, first-run setup, and `/setup` check sandbox readiness once."," Windows: setup can launch the one-time UAC provisioning flow; the terminal itself"," does not need to run as Administrator. Declining UAC is non-fatal."," macOS: ASRT uses Seatbelt/sandbox-exec; install ripgrep with `brew install ripgrep`."," Linux: ASRT uses bubblewrap; install bubblewrap, socat, and ripgrep with apt,"," dnf, or pacman. KodaX never invokes sudo or a package manager automatically."," Ordinary startup and tool calls do not repeat setup reminders or trigger UAC."," Inspect/activate explicitly: `kodax sandbox doctor` / `kodax sandbox setup`."," Model-issued commands filter credential-shaped variables by default. Add exact names"," such as GH_TOKEN to user-level `sandbox.envPass` only when command access is intended."," The default list is empty; NODE_OPTIONS and BASH_ENV remain blocked."," Restart KodaX (and any persistent daemon) after changing the list or host variables."," SDK: `@kodax-ai/kodax/sandbox` exposes doctor, activation, capability metadata,"," and policy-controlled command execution independent of Auto[LLM].","","CLI basics:"," kodax Enter the interactive REPL",' kodax -p "task" Run one task and exit'," kodax -r Search and resume a saved session"," kodax -c Continue the most recent non-empty session","","Inside the REPL:"," /model [provider[/model]] List or switch provider/model"," /mode [plan|accept-edits|auto] Switch permission mode"," /effort [off|auto|low|medium|high|xhigh|max] Set reasoning depth"," /agent-mode [ama|sa|toggle] Switch AMA/SA execution"," /setup --help Show this guide","","Default shortcuts:",` ${ct("toggleThinking")} Cycle reasoning effort`,` ${ct("togglePermissionMode")} Cycle permission mode`,` ${ct("toggleAgentMode")} Cycle AMA/SA`," Tab Accept completion"," Esc Cancel or clear input"].join(`
5
+ `)}a(dt,"renderSetupGuide");import*as Qi from"node:readline";import ut from"chalk";async function Zi(e={}){let o=e.catalog??ze(),n=Fi({...e.configPath?{configPath:e.configPath}:{},catalog:o});if(n.status==="invalid-config")throw new Ge(n.configPath,n.reason);if(o.length===0)throw new Error("No built-in API providers are available for setup.");let t=e.interaction===void 0,r=e.interaction??Rl({input:e.input??process.stdin,output:e.output??process.stdout});try{let s=e.customOnly?"custom":await r.choose("Choose a provider. KodaX will save metadata only and will never ask for an API key.",[...o.map(u=>({value:`builtin:${u.name}`,label:`${u.name} \u2014 ${u.defaultModel} (set ${u.apiKeyEnv})`})),{value:"custom",label:"Custom OpenAI/Anthropic-compatible provider"},{value:"cancel",label:"Cancel"}]);if(!s||s==="cancel")return{status:"cancelled"};let l=s==="custom"?await xl(r):await Sl(r,o,s.slice(8));if(!l)return{status:"cancelled"};let c=Al(l,o);return await r.confirm(`Save ${c}? config.json will store the environment-variable name only. You must set that variable to the provider's API key after setup. No credential value will be written.`)?{status:"configured",selection:Hi({configPath:n.configPath,expectedRevision:n.configRevision,catalog:o,choice:l})}:{status:"cancelled"}}finally{t&&r.close?.()}}a(Zi,"runProviderSetupWizard");async function Sl(e,o,n){let t=o.find(l=>l.name===n);if(!t)throw new Error(`Unknown setup provider: ${n}`);let r=[...new Set(t.models)],s=await e.choose(`Choose a model for ${t.name}.`,r.map(l=>({value:l,label:l===t.defaultModel?`${l} (default)`:l})));return s?{kind:"builtin",provider:t.name,model:s}:void 0}a(Sl,"collectBuiltinChoice");async function xl(e){let o=await an(e,"Custom provider name (a unique local alias used by /model and config.json)");if(!o)return;let n=await e.choose("Protocol family (check the provider API documentation for OpenAI or Anthropic compatibility)",[{value:"openai",label:"OpenAI-compatible"},{value:"anthropic",label:"Anthropic-compatible"}]);if(n!=="openai"&&n!=="anthropic")return;let t=await an(e,"API Base URL from the provider documentation, for example https://example.com/v1");if(!t)return;let r=await an(e,["Environment-variable name only (for example MY_PROVIDER_API_KEY).","Do not paste an API key here.","config.json stores this name only.","After setup, set this environment variable's value to this provider's API key."].join(" "));if(!r)return;let s=await an(e,"Model identifier from the provider documentation, for example provider/model-name");if(s)return{kind:"custom",provider:at({name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s})}}a(xl,"collectCustomChoice");async function an(e,o){let t=(await e.text(o))?.trim();return t||void 0}a(an,"requiredText");function Al(e,o){if(e.kind==="custom"){let t=e.provider;return`provider=${t.name}, protocol=${t.protocol}, baseUrl=${t.baseUrl}, model=${t.model}, apiKeyEnv=${t.apiKeyEnv}`}let n=o.find(t=>t.name===e.provider);return`provider=${e.provider}, model=${e.model}, apiKeyEnv=${n?.apiKeyEnv??"<unknown>"}`}a(Al,"summarizeChoice");function Rl(e){let o=Qi.createInterface({input:e.input,output:e.output}),n=!1;o.on("close",()=>{n=!0}),o.on("SIGINT",()=>o.close());let t=a(r=>new Promise((s,l)=>{let c=!1,d=a(f=>{c||(c=!0,o.removeListener("close",u),s(f))},"finish"),u=a(()=>d(void 0),"onClose");if(n){d(void 0);return}o.once("close",u);try{o.question(r,f=>d(f))}catch(f){o.removeListener("close",u),n?d(void 0):l(f)}}),"question");return{async choose(r,s){for(e.output.write(`
6
+ ${ut.cyan(r)}
7
7
  `),s.forEach((l,c)=>e.output.write(` ${c+1}. ${l.label}
8
- `));;){let l=await t(ct.dim(`Select 1-${s.length} (q to cancel): `));if(l===void 0||l.trim().toLowerCase()==="q")return;let c=Number.parseInt(l.trim(),10)-1,d=s[c];if(d)return d.value;e.output.write(ct.yellow(`Choose one of the numbered options.
9
- `))}},async text(r,s){let l=s?` [${s}]`:"",c=await t(`${r}${l} (q to cancel): `);if(!(c===void 0||c.trim().toLowerCase()==="q"))return c.trim()||s},async confirm(r){return(await t(`${r} [y/N]: `))?.trim().toLowerCase()==="y"},close:a(()=>o.close(),"close")}}a(kl,"createTerminalProviderSetupInteraction");async function Vi(e){let o=e.resolve(e.provider),n=[];for(let t of e.efforts){if(e.signal?.aborted)break;let r=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:t},{modelOverride:e.model,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{r=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(s){n.push({effort:t,status:"error",error:s instanceof Error?s.message:String(s)});continue}r?(Tr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(Vi,"probeProviderReasoningEfforts");import an from"fs";import rs from"path";import ut from"node:path";var El=tn("accept-edits");function Il(e,o,n){if(e.name==="bash"){let t=typeof e.input.command=="string"?e.input.command:"";return t.length>0&&yo(t,o,n)}if(Ke.has(e.name)){let t=typeof e.input.path=="string"?e.input.path:"";if(!t||!o)return!1;let r=ut.isAbsolute(t)?ut.resolve(t):ut.resolve(n||o,t);return!Ae(r,o)}return!El.has(e.name)}a(Il,"allowsAcceptEditsClassifierFallback");import sn from"node:path";import mt from"node:os";function os(){try{return ge()}catch{return}}a(os,"safeGetAgentConfigHome");function ft(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return Ir(e.replace(n,mt.homedir()),o)}a(ft,"resolveShellWriteTarget");function es(e,o){let n=os();if(n&&ie(e,n))return"user-kodax";let t=sn.join(sn.resolve(o),".kodax");if(ie(e,t))return"project-kodax"}a(es,"resolveProtectedZone");function Pl(){let e=new Set;try{e.add(mt.tmpdir())}catch{}for(let o of["TEMP","TMP","TMPDIR"]){let n=process.env[o];n&&n.length>0&&e.add(n)}return Array.from(e)}a(Pl,"getSystemTempDirs");var Tl=new Set(["bash"]),Ml={toolNames:Tl,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],s=new Set,l=new Set,c=Pl(),d=sn.resolve(o);for(let u of Zn(t)){let f;try{f=ft(u,n)}catch{continue}let p=es(f,o);if(p){s.has(f)||(s.add(f),r.push({kind:"protected_path",path:u,zone:p}));continue}if(Ae(f,o)){let k=c.some(A=>ie(f,A)),b=ie(f,d);!k&&!b&&!l.has(f)&&(l.add(f),r.push({kind:"outside_project",path:u}))}}for(let u of vo(t)){let f;try{f=ft(u,n)}catch{continue}es(f,o)||ie(f,d)||c.some(b=>ie(f,b))||r.push({kind:"shell_redirect_outside",target:u})}return r}},Lp=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([sn.join(mt.homedir(),".kodax")]),s=os();s&&r.add(s);for(let l of Qn(t)){let c=ft(l,n);if([...r].some(d=>ie(c,d)))return{denied:!0,patternId:"user_kodax_write",reason:`Shell write to credential-zone path \`${l}\` (under ~/.kodax/) is permanently denied. KodaX config edits must use the \`kodax config\` CLI or SDK config API.`}}return{denied:!1}},"replBashUserKodaxWriteDeny");var ln=W("config.json");function is(){return rs.join(process.cwd(),".kodax","config.local.json")}a(is,"getProjectConfigFile");function Vp(e=process.env){let o=xo(ln);return _l({settings:o.autoMode,env:e})}a(Vp,"loadAutoModeSettings");function _l(e={}){let o=e.settings??{},n=e.env??{},t=n.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,s=o.engine==="llm"||o.engine==="rules"?o.engine:void 0,l=r??s??"llm",c=ts(o.classifierModel),d=ts(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=n.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,p=Number.isFinite(f)&&f>0?Math.floor(f):void 0,k=typeof o.timeoutMs=="number"&&o.timeoutMs>0?Math.floor(o.timeoutMs):void 0,b=ns(n.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),A=typeof o.speculativeWindowMs=="number"?ns(String(o.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:p??k,speculativeWindowMs:b??A}}a(_l,"resolveAutoModeSettings");function ns(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(ns,"parseSpeculativeWindow");function ts(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(ts,"nonEmptyString");function xo(e){try{if(an.existsSync(e))return JSON.parse(an.readFileSync(e,"utf-8"))}catch{}return{}}a(xo,"readJsonFile");function ss(e,o){an.mkdirSync(rs.dirname(e),{recursive:!0}),an.writeFileSync(e,JSON.stringify(o,null,2))}a(ss,"writeJsonFile");function pt(e){let o=xo(ln);ss(ln,{...o,permissionMode:e})}a(pt,"savePermissionModeUser");function Yp(){let e=xo(ln),o=xo(is()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Yp,"loadAlwaysAllowTools");function Jp(e,o,n=!1){let t=Qo(e,o,n);if(!t)return;let r=is(),s=xo(r),l=s.alwaysAllowTools??[];l.includes(t)||ss(r,{...s,alwaysAllowTools:[...l,t]})}a(Jp,"saveAlwaysAllowToolPattern");var gt=["ama","sa"];function as(e){let o=gt.indexOf(e);return gt[(o+1)%gt.length]??"ama"}a(as,"nextAgentMode");var we=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let s=r.toLowerCase();if(s!==n){if(t.has(s))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(s))throw new Error(`Alias "${r}" conflicts with existing command "${s}"`);if(this.aliases.has(s)){let l=this.aliases.get(s);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(s)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let s=r.toLowerCase();s!==n&&this.aliases.set(s,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let s of r.aliases)this.aliases.delete(s.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Ll=new we;var Wl="learning-recovery";function rg(e){return e.filter(o=>o.id!==Wl)}a(rg,"dismissLearningRecoveryAfterQuerySubmit");function wt(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(wt,"formatLearningStatus");function ig(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${wt(e)} [/learn]`}a(ig,"formatLearningRecoverySummary");import z from"chalk";import{Buffer as us}from"node:buffer";import{spawn as Ol}from"node:child_process";import ls from"node:process";var Ee="\x1B",Nl="\x07",ht=`${Ee}\\`;function cs(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(cs,"shouldPreferNativeClipboard");function Dl(e,o){let n=us.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?ht:Nl,r=`${Ee}]52;c;${n}${t}`;return o.TMUX?`${Ee}Ptmux;${r.replaceAll(Ee,`${Ee}${Ee}`)}${ht}`:o.STY?`${Ee}P${r}${ht}`:r}a(Dl,"buildOscSequence");async function cn(e,o,n){return new Promise((t,r)=>{let s=Ol(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";s.on("error",r),s.stderr?.on("data",c=>{l+=c.toString()}),s.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),s.stdin?.write(n),s.stdin?.end()})}a(cn,"execClipboardCommand");function jl(e){let o="$stream = [Console]::OpenStandardInput(); $buffer = New-Object byte[] 8192; $memory = New-Object System.IO.MemoryStream; while (($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) { $memory.Write($buffer, 0, $read) }; $text = [System.Text.Encoding]::UTF8.GetString($memory.ToArray()); Set-Clipboard -Value $text",n=us.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(jl,"buildWindowsClipboardCandidates");async function ds(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=jl(e);for(let[r,s,l]of t)try{if(await cn(r,s,l))return!0}catch{}return!1}case"darwin":return cn("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,s]of t)try{if(await cn(r,s,e))return!0}catch{}return!1}default:return!1}}a(ds,"tryNativeClipboard");async function Ul(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await cn("tmux",n,e)}catch{return!1}}a(Ul,"tryTmuxClipboard");async function fs(e,o={}){let n=o.env??ls.env,t=o.platform??ls.platform,r=e.trimEnd(),s=Dl(r,n);if(!r)throw new Error("Nothing to copy.");if(cs(n,t))try{if(await ds(r,n,t))return{path:"native"}}catch{}if(await Ul(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(s))return{path:"osc52"};if(!cs(n,t))try{if(await ds(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(fs,"copyTextToClipboard");var yt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(yt||(yt={}));var B;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(B||(B={}));var mg={[B.Scheduled]:"\u25CB",[B.Validating]:"\u25CC",[B.AwaitingApproval]:"?",[B.Executing]:"\u25CB",[B.Success]:"\u2713",[B.Error]:"\u2717",[B.Cancelled]:"-"},ms;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(ms||(ms={}));var pg={streamingState:yt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Fl="[redacted]",ps="[truncated]";function ae(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(ae,"truncateToolReplayText");function Hl(e){let o=e.toLowerCase().replace(/[\s_-]/g,"");return o.includes("token")||o.includes("password")||o.includes("secret")||o.includes("apikey")||o.includes("accesstoken")||o==="authorization"||o==="cookie"||o==="setcookie"}a(Hl,"isSensitiveToolInputKey");function gs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(gs,"isRecord");function vt(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return ae(e);if(o>=6)return ps;if(typeof e=="object"&&e!==null){if(n.has(e))return ps;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>vt(r,o+1,n));if(!gs(e))return ae(String(e));let t={};for(let[r,s]of Object.entries(e).slice(0,50))t[r]=Hl(r)?Fl:vt(s,o+1,n);return t}return ae(String(e))}a(vt,"sanitizeToolJsonValue");function ws(e){if(!e)return;let o=vt(e);return gs(o)?o:void 0}a(ws,"sanitizeToolInput");function hs(e){if(e!==void 0){if(typeof e=="string")return ae(e);try{return ae(JSON.stringify(e))}catch{return ae(String(e))}}}a(hs,"stringifyToolReplayValue");function kg(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool",...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Yl),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(kg,"seedToHistoryItem");var Kl="[Thinking]",Bl="[/Thinking]",ql="Untitled Session",ys=50,Gl=60,ks="...",bs=["[Managed Task]","[Managed Task Protocol Retry]","Assigned native agent identity:","Tool policy:","Blocked tools:","Allowed shell patterns:","Dependency handoff artifacts:","Dependency summary preview:","Preferred agent:","Read structured bundle first:","Read human summary next:"],$s=[/(?:^|\n)You are the [^\n]+ role for a managed KodaX task\./,/(?:^|\n)Primary task:/,/(?:^|\n)Work intent:/,/(?:^|\n)Complexity:/,/(?:^|\n)Risk:/,/(?:^|\n)Harness:/,/(?:^|\n)Brainstorm required:/],zl=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,Xl="Session ended before the tool completed.";function Vl(e){switch(e){case"success":return B.Success;case"error":return B.Error;case"cancelled":return B.Cancelled;case"awaiting_approval":return B.AwaitingApproval;default:return e}}a(Vl,"toolCallSeedToHistoryToolStatus");function Yl(e){return{id:e.id,name:e.name,status:Vl(e.status),...e.input!==void 0?{input:e.input}:{},...e.preview!==void 0?{preview:e.preview}:{},...e.output!==void 0?{output:e.output}:{},...e.error!==void 0?{error:e.error}:{},startTime:e.startTime??Date.now(),...e.endTime!==void 0?{endTime:e.endTime}:{}}}a(Yl,"toolCallSeedToHistoryToolCall");function Jl(e){let o=-1;for(let n of bs){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of $s){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Jl,"findControlPlaneCutIndex");function Zl(e){return bs.some(o=>e.includes(o))||$s.some(o=>o.test(e))}a(Zl,"hasControlPlaneSignal");function Ss(e){let o=[];for(let n of e)n&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&o.push(String(n.text));return o}a(Ss,"collectTextBlocks");function un(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(un,"isRecord");function Ql(e){if(typeof e=="string")return ae(e);if(e===void 0)return"";try{return hs(e)??""}catch{return ae(String(e))}}a(Ql,"toolResultContentToString");function ec(e){let o=Ql(e.content),n=o.trimStart(),t=e.is_error===!0||n.startsWith("[Tool Error]")||n.startsWith("[Error]"),r=n.startsWith("[Cancelled]")||n.startsWith("[Blocked]");return t?{status:"error",error:o}:r?{status:"cancelled",error:o}:{status:"success",output:o}}a(ec,"inferToolResultSeed");function oc(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!un(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,ec(n));return o}a(oc,"collectToolResultSeeds");function nc(e,o){if(e.type!=="tool_use"||typeof e.id!="string"||typeof e.name!="string")return;let n=o.get(e.id)??{status:"cancelled",error:Xl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:ws(un(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(nc,"buildToolCallSeed");function tc(e){return typeof e=="string"?e:Array.isArray(e)?Ss(e).join(`
10
- `):""}a(tc,"extractAssistantTextOnly");function Ro(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(Ro,"pushSeed");function vs(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(vs,"stripLegacyTagBoundaryNewlines");function rc(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?Ao(String(n.command??"")):o==="read"||o==="write"||o==="edit"?Ao(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?Ao(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?Ao(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(rc,"formatToolUseSummary");function Ao(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(Ao,"truncateToolHint");function ic(e){if(!e.includes(Kl)||!e.includes(Bl))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(zl)){let r=t.index??-1,s=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+s.length;Ro(o,"assistant",vs(e.slice(n,c))),Ro(o,"thinking",l),n=r+t[0].length}return Ro(o,"assistant",vs(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(ic,"parseLegacyAssistantContent");function xs(e,o){if(typeof e=="string")return ic(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],s=a(()=>{t.length!==0&&(Ro(n,"assistant",t.join(`
11
- `)),t.length=0)},"flushAssistantBuffer"),l=a(()=>{r.length!==0&&(n.push({type:"tool_group",tools:[...r]}),r.length=0)},"flushToolBuffer");for(let c of e)if(!(!un(c)||typeof c.type!="string"))switch(c.type){case"text":l(),"text"in c&&t.push(String(c.text));break;case"thinking":s(),l(),"thinking"in c&&Ro(n,"thinking",String(c.thinking));break;case"tool_use":if(s(),o){let d=nc(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=rc({name:c.name,...un(c.input)?{input:c.input}:{}});d&&n.push({type:"tool_summary",text:d})}break;case"tool_result":case"redacted_thinking":break;default:break}return l(),s(),n}a(xs,"extractAssistantHistorySeeds");var sc=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],ac=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function lc(e){return sc.some(o=>e.includes(o))}a(lc,"isManagedWorkerPrompt");function As(e){return e.replace(ac,"").trim()}a(As,"stripManagedProtocolBlocks");function cc(e){switch(e.role){case"assistant":return xs(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=As(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=dn(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=dn(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=dn(e.content);return o.trim().length===0||lc(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(cc,"extractHistorySeedsFromMessageWithoutTimestamp");function Rs(e,o){if(o===void 0)return[...e];let n=Date.parse(o);return!Number.isFinite(n)||n<0?[...e]:e.map(t=>({...t,timestamp:n}))}a(Rs,"withMessageTimestamp");function dc(e){return Rs(cc(e),e.timestamp)}a(dc,"extractHistorySeedsFromMessage");function bg(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=oc(e[n+1]),s=Rs(xs(t.content,r),t.timestamp);o.push(...s.map(l=>l.type==="assistant"?{...l,text:As(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...dc(t))}}return o}a(bg,"extractHistorySeedsFromMessages");function dn(e){return typeof e=="string"?e:Array.isArray(e)?Ss(e).join(`
12
- `):""}a(dn,"extractTextContent");function uc(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>ys?`${o.slice(0,ys)}${ks}`:o:ql}a(uc,"formatSessionTitle");function fc(e){if(e.role!=="user")return!1;let o=e.content;return!Array.isArray(o)||o.length===0?!1:o.every(n=>!!n&&typeof n=="object"&&"type"in n&&n.type==="tool_result")}a(fc,"isPureToolResultUserMessage");function kt(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=tc(n.content);return t&&t.trim()!=="..."?t:""}if(!fc(n))return""}}return""}a(kt,"extractLastAssistantText");function $g(e,o,n,t){let r=[kt(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let s of r){let l=Cs(s);if(l)return l}return""}a($g,"resolveCompletedAssistantText");function Cs(e){let o=e.trim();if(!o||o==="...")return"";let n=Jl(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Cs,"sanitizeUserFacingAssistantText");function Sg(e){let o=e.trim();return o.length>0&&Cs(o).length===0&&Zl(o)}a(Sg,"isControlPlaneOnlyAssistantText");function xg(e){let o=e.find(t=>t.role==="user"),n=o?dn(o.content):"";return uc(n)}a(xg,"extractTitle");function Ag(e,o=Gl){let n=e.replace(/\n/g," "),t=n.length>o?ks:"";return n.slice(0,o)+t}a(Ag,"formatMessagePreview");var bt={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=kt(o.messages);if(!n){console.log(z.yellow(`
13
- No assistant message found to copy.`)),console.log(z.dim("The assistant needs to respond first before you can copy its message."));return}try{await fs(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(z.green(`
8
+ `));;){let l=await t(ut.dim(`Select 1-${s.length} (q to cancel): `));if(l===void 0||l.trim().toLowerCase()==="q")return;let c=Number.parseInt(l.trim(),10)-1,d=s[c];if(d)return d.value;e.output.write(ut.yellow(`Choose one of the numbered options.
9
+ `))}},async text(r,s){let l=s?` [${s}]`:"",c=await t(`${r}${l} (q to cancel): `);if(!(c===void 0||c.trim().toLowerCase()==="q"))return c.trim()||s},async confirm(r){return(await t(`${r} [y/N]: `))?.trim().toLowerCase()==="y"},close:a(()=>o.close(),"close")}}a(Rl,"createTerminalProviderSetupInteraction");async function es(e){let o=e.resolve(e.provider),n=[];for(let t of e.efforts){if(e.signal?.aborted)break;let r=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:t},{modelOverride:e.model,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{r=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(s){n.push({effort:t,status:"error",error:s instanceof Error?s.message:String(s)});continue}r?(Lr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(es,"probeProviderReasoningEfforts");import cn from"fs";import cs from"path";import mt from"node:path";var Ll=sn("accept-edits");function Wl(e,o,n){if(e.name==="bash"){let t=typeof e.input.command=="string"?e.input.command:"";return t.length>0&&vo(t,o,n)}if(Ke.has(e.name)){let t=typeof e.input.path=="string"?e.input.path:"";if(!t||!o)return!1;let r=mt.isAbsolute(t)?mt.resolve(t):mt.resolve(n||o,t);return!Re(r,o)}return!Ll.has(e.name)}a(Wl,"allowsAcceptEditsClassifierFallback");import ln from"node:path";import gt from"node:os";function ss(){try{return he()}catch{return}}a(ss,"safeGetAgentConfigHome");function pt(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return Mr(e.replace(n,gt.homedir()),o)}a(pt,"resolveShellWriteTarget");function is(e,o){let n=ss();if(n&&ae(e,n))return"user-kodax";let t=ln.join(ln.resolve(o),".kodax");if(ae(e,t))return"project-kodax"}a(is,"resolveProtectedZone");function Ol(){let e=new Set;try{e.add(gt.tmpdir())}catch{}for(let o of["TEMP","TMP","TMPDIR"]){let n=process.env[o];n&&n.length>0&&e.add(n)}return Array.from(e)}a(Ol,"getSystemTempDirs");var Nl=new Set(["bash"]),Dl={toolNames:Nl,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],s=new Set,l=new Set,c=Ol(),d=ln.resolve(o);for(let u of et(t)){let f;try{f=pt(u,n)}catch{continue}let p=is(f,o);if(p){s.has(f)||(s.add(f),r.push({kind:"protected_path",path:u,zone:p}));continue}if(Re(f,o)){let k=c.some(A=>ae(f,A)),b=ae(f,d);!k&&!b&&!l.has(f)&&(l.add(f),r.push({kind:"outside_project",path:u}))}}for(let u of ko(t)){let f;try{f=pt(u,n)}catch{continue}is(f,o)||ae(f,d)||c.some(b=>ae(f,b))||r.push({kind:"shell_redirect_outside",target:u})}return r}},Hp=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([ln.join(gt.homedir(),".kodax")]),s=ss();s&&r.add(s);for(let l of ot(t)){let c=pt(l,n);if([...r].some(d=>ae(c,d)))return{denied:!0,patternId:"user_kodax_write",reason:`Shell write to credential-zone path \`${l}\` (under ~/.kodax/) is permanently denied. KodaX config edits must use the \`kodax config\` CLI or SDK config API.`}}return{denied:!1}},"replBashUserKodaxWriteDeny");var dn=W("config.json");function ds(){return cs.join(process.cwd(),".kodax","config.local.json")}a(ds,"getProjectConfigFile");function tg(e=process.env){let o=Ao(dn);return jl({settings:o.autoMode,env:e})}a(tg,"loadAutoModeSettings");function jl(e={}){let o=e.settings??{},n=e.env??{},t=n.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,s=o.engine==="llm"||o.engine==="rules"?o.engine:void 0,l=r??s??"llm",c=ls(o.classifierModel),d=ls(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=n.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,p=Number.isFinite(f)&&f>0?Math.floor(f):void 0,k=typeof o.timeoutMs=="number"&&o.timeoutMs>0?Math.floor(o.timeoutMs):void 0,b=as(n.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),A=typeof o.speculativeWindowMs=="number"?as(String(o.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:p??k,speculativeWindowMs:b??A}}a(jl,"resolveAutoModeSettings");function as(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(as,"parseSpeculativeWindow");function ls(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(ls,"nonEmptyString");function Ao(e){try{if(cn.existsSync(e))return JSON.parse(cn.readFileSync(e,"utf-8"))}catch{}return{}}a(Ao,"readJsonFile");function us(e,o){cn.mkdirSync(cs.dirname(e),{recursive:!0}),cn.writeFileSync(e,JSON.stringify(o,null,2))}a(us,"writeJsonFile");function wt(e){let o=Ao(dn);us(dn,{...o,permissionMode:e})}a(wt,"savePermissionModeUser");function rg(){let e=Ao(dn),o=Ao(ds()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(rg,"loadAlwaysAllowTools");function ig(e,o,n=!1){let t=on(e,o,n);if(!t)return;let r=ds(),s=Ao(r),l=s.alwaysAllowTools??[];l.includes(t)||us(r,{...s,alwaysAllowTools:[...l,t]})}a(ig,"saveAlwaysAllowToolPattern");var ht=["ama","sa"];function fs(e){let o=ht.indexOf(e);return ht[(o+1)%ht.length]??"ama"}a(fs,"nextAgentMode");function Ul(e){return[...Yr(e),...Jr(e)].sort((o,n)=>o.start-n.start)}a(Ul,"collectSkillReferences");var Ro=class extends Error{static{a(this,"MultipleUserSkillReferencesError")}constructor(o){super(`Only one Skill can be active per request; found: ${o.join(", ")}.`),this.name="MultipleUserSkillReferencesError"}};function ms(e){let o=Ul(e);return o.map((n,t)=>({name:n.name,argumentsText:e.slice(n.end,o[t+1]?.start).trim()}))}a(ms,"parseUserSkillReferences");function un(e,o){let n=ms(e).filter(t=>o(t.name));if(n.length>1)throw new Ro(n.map(t=>t.name));return n[0]}a(un,"assertSingleKnownUserSkillReference");function fg(e,o,n){let t=ms(e);return un(e,o)??(n?void 0:t[0])}a(fg,"findQueueableUserSkillReference");async function Fl(e,o){let n=o.projectRoot??o.workingDirectory,t=V(n);return t.size===0&&(t=await oe(n)),un(e,r=>t.has(r))}a(Fl,"resolveUserSkillReference");async function yt(e,o,n){let t=n.projectRoot??n.workingDirectory,r=V(t);if(r.size===0&&(r=await oe(t)),!r.has(e))return;let s=await r.loadFull(e),l=await Hr(s,o,n);return{prompt:l.content,source:"skill",displayName:e,path:s.skillFilePath,disableModelInvocation:l.disableModelInvocation,userInvocable:!0,allowedTools:s.allowedTools,context:s.context,agent:s.agent,argumentHint:s.argumentHint,model:s.model,hooks:s.hooks,skillInvocation:{name:e,path:s.skillFilePath,description:s.description,arguments:o||void 0,allowedTools:s.allowedTools,context:s.context,agent:s.agent,argumentHint:s.argumentHint,model:s.model,hookEvents:s.hooks?Object.entries(s.hooks).filter(([,c])=>Array.isArray(c)&&c.length>0).map(([c])=>c):void 0,expandedContent:l.content}}}a(yt,"createUserSkillInvocation");async function mg(e,o){let n=await Fl(e,o);return n?yt(n.name,n.argumentsText,o):void 0}a(mg,"resolveUserSkillInvocation");function pg(e,o){return{...e,contextTokenSnapshot:o}}a(pg,"preserveQueuedSkillContextSnapshot");var ye=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let s=r.toLowerCase();if(s!==n){if(t.has(s))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(s))throw new Error(`Alias "${r}" conflicts with existing command "${s}"`);if(this.aliases.has(s)){let l=this.aliases.get(s);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(s)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let s=r.toLowerCase();s!==n&&this.aliases.set(s,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let s of r.aliases)this.aliases.delete(s.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Hl=new ye;var Kl="learning-recovery";function vg(e){return e.filter(o=>o.id!==Kl)}a(vg,"dismissLearningRecoveryAfterQuerySubmit");function vt(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(vt,"formatLearningStatus");function kg(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${vt(e)} [/learn]`}a(kg,"formatLearningRecoverySummary");import z from"chalk";import{Buffer as hs}from"node:buffer";import{spawn as Bl}from"node:child_process";import ps from"node:process";var Ie="\x1B",ql="\x07",kt=`${Ie}\\`;function gs(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(gs,"shouldPreferNativeClipboard");function Gl(e,o){let n=hs.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?kt:ql,r=`${Ie}]52;c;${n}${t}`;return o.TMUX?`${Ie}Ptmux;${r.replaceAll(Ie,`${Ie}${Ie}`)}${kt}`:o.STY?`${Ie}P${r}${kt}`:r}a(Gl,"buildOscSequence");async function fn(e,o,n){return new Promise((t,r)=>{let s=Bl(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";s.on("error",r),s.stderr?.on("data",c=>{l+=c.toString()}),s.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),s.stdin?.write(n),s.stdin?.end()})}a(fn,"execClipboardCommand");function zl(e){let o="$stream = [Console]::OpenStandardInput(); $buffer = New-Object byte[] 8192; $memory = New-Object System.IO.MemoryStream; while (($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) { $memory.Write($buffer, 0, $read) }; $text = [System.Text.Encoding]::UTF8.GetString($memory.ToArray()); Set-Clipboard -Value $text",n=hs.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(zl,"buildWindowsClipboardCandidates");async function ws(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=zl(e);for(let[r,s,l]of t)try{if(await fn(r,s,l))return!0}catch{}return!1}case"darwin":return fn("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,s]of t)try{if(await fn(r,s,e))return!0}catch{}return!1}default:return!1}}a(ws,"tryNativeClipboard");async function Xl(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await fn("tmux",n,e)}catch{return!1}}a(Xl,"tryTmuxClipboard");async function ys(e,o={}){let n=o.env??ps.env,t=o.platform??ps.platform,r=e.trimEnd(),s=Gl(r,n);if(!r)throw new Error("Nothing to copy.");if(gs(n,t))try{if(await ws(r,n,t))return{path:"native"}}catch{}if(await Xl(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(s))return{path:"osc52"};if(!gs(n,t))try{if(await ws(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(ys,"copyTextToClipboard");var bt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(bt||(bt={}));var B;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(B||(B={}));var Eg={[B.Scheduled]:"\u25CB",[B.Validating]:"\u25CC",[B.AwaitingApproval]:"?",[B.Executing]:"\u25CB",[B.Success]:"\u2713",[B.Error]:"\u2717",[B.Cancelled]:"-"},vs;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(vs||(vs={}));var Ig={streamingState:bt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Vl="[redacted]",ks="[truncated]";function ce(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(ce,"truncateToolReplayText");function Yl(e){let o=e.toLowerCase().replace(/[\s_-]/g,"");return o.includes("token")||o.includes("password")||o.includes("secret")||o.includes("apikey")||o.includes("accesstoken")||o==="authorization"||o==="cookie"||o==="setcookie"}a(Yl,"isSensitiveToolInputKey");function bs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(bs,"isRecord");function $t(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return ce(e);if(o>=6)return ks;if(typeof e=="object"&&e!==null){if(n.has(e))return ks;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>$t(r,o+1,n));if(!bs(e))return ce(String(e));let t={};for(let[r,s]of Object.entries(e).slice(0,50))t[r]=Yl(r)?Vl:$t(s,o+1,n);return t}return ce(String(e))}a($t,"sanitizeToolJsonValue");function $s(e){if(!e)return;let o=$t(e);return bs(o)?o:void 0}a($s,"sanitizeToolInput");function Ss(e){if(e!==void 0){if(typeof e=="string")return ce(e);try{return ce(JSON.stringify(e))}catch{return ce(String(e))}}}a(Ss,"stringifyToolReplayValue");function Wg(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool",...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(rc),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(Wg,"seedToHistoryItem");var Jl="[Thinking]",Ql="[/Thinking]",Zl="Untitled Session",xs=50,ec=60,Rs="...",Cs=["[Managed Task]","[Managed Task Protocol Retry]","Assigned native agent identity:","Tool policy:","Blocked tools:","Allowed shell patterns:","Dependency handoff artifacts:","Dependency summary preview:","Preferred agent:","Read structured bundle first:","Read human summary next:"],Es=[/(?:^|\n)You are the [^\n]+ role for a managed KodaX task\./,/(?:^|\n)Primary task:/,/(?:^|\n)Work intent:/,/(?:^|\n)Complexity:/,/(?:^|\n)Risk:/,/(?:^|\n)Harness:/,/(?:^|\n)Brainstorm required:/],oc=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,nc="Session ended before the tool completed.";function tc(e){switch(e){case"success":return B.Success;case"error":return B.Error;case"cancelled":return B.Cancelled;case"awaiting_approval":return B.AwaitingApproval;default:return e}}a(tc,"toolCallSeedToHistoryToolStatus");function rc(e){return{id:e.id,name:e.name,status:tc(e.status),...e.input!==void 0?{input:e.input}:{},...e.preview!==void 0?{preview:e.preview}:{},...e.output!==void 0?{output:e.output}:{},...e.error!==void 0?{error:e.error}:{},startTime:e.startTime??Date.now(),...e.endTime!==void 0?{endTime:e.endTime}:{}}}a(rc,"toolCallSeedToHistoryToolCall");function ic(e){let o=-1;for(let n of Cs){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of Es){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(ic,"findControlPlaneCutIndex");function sc(e){return Cs.some(o=>e.includes(o))||Es.some(o=>o.test(e))}a(sc,"hasControlPlaneSignal");function Is(e){let o=[];for(let n of e)n&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&o.push(String(n.text));return o}a(Is,"collectTextBlocks");function pn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(pn,"isRecord");function ac(e){if(typeof e=="string")return ce(e);if(e===void 0)return"";try{return Ss(e)??""}catch{return ce(String(e))}}a(ac,"toolResultContentToString");function lc(e){let o=ac(e.content),n=o.trimStart(),t=e.is_error===!0||n.startsWith("[Tool Error]")||n.startsWith("[Error]"),r=n.startsWith("[Cancelled]")||n.startsWith("[Blocked]");return t?{status:"error",error:o}:r?{status:"cancelled",error:o}:{status:"success",output:o}}a(lc,"inferToolResultSeed");function cc(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!pn(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,lc(n));return o}a(cc,"collectToolResultSeeds");function dc(e,o){if(e.type!=="tool_use"||typeof e.id!="string"||typeof e.name!="string")return;let n=o.get(e.id)??{status:"cancelled",error:nc};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:$s(pn(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(dc,"buildToolCallSeed");function uc(e){return typeof e=="string"?e:Array.isArray(e)?Is(e).join(`
10
+ `):""}a(uc,"extractAssistantTextOnly");function Eo(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(Eo,"pushSeed");function As(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(As,"stripLegacyTagBoundaryNewlines");function fc(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?Co(String(n.command??"")):o==="read"||o==="write"||o==="edit"?Co(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?Co(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?Co(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(fc,"formatToolUseSummary");function Co(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(Co,"truncateToolHint");function mc(e){if(!e.includes(Jl)||!e.includes(Ql))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(oc)){let r=t.index??-1,s=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+s.length;Eo(o,"assistant",As(e.slice(n,c))),Eo(o,"thinking",l),n=r+t[0].length}return Eo(o,"assistant",As(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(mc,"parseLegacyAssistantContent");function Ts(e,o){if(typeof e=="string")return mc(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],s=a(()=>{t.length!==0&&(Eo(n,"assistant",t.join(`
11
+ `)),t.length=0)},"flushAssistantBuffer"),l=a(()=>{r.length!==0&&(n.push({type:"tool_group",tools:[...r]}),r.length=0)},"flushToolBuffer");for(let c of e)if(!(!pn(c)||typeof c.type!="string"))switch(c.type){case"text":l(),"text"in c&&t.push(String(c.text));break;case"thinking":s(),l(),"thinking"in c&&Eo(n,"thinking",String(c.thinking));break;case"tool_use":if(s(),o){let d=dc(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=fc({name:c.name,...pn(c.input)?{input:c.input}:{}});d&&n.push({type:"tool_summary",text:d})}break;case"tool_result":case"redacted_thinking":break;default:break}return l(),s(),n}a(Ts,"extractAssistantHistorySeeds");var pc=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],gc=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function wc(e){return pc.some(o=>e.includes(o))}a(wc,"isManagedWorkerPrompt");function Ps(e){return e.replace(gc,"").trim()}a(Ps,"stripManagedProtocolBlocks");function hc(e){switch(e.role){case"assistant":return Ts(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=Ps(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=mn(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=mn(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=mn(e.content);return o.trim().length===0||wc(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(hc,"extractHistorySeedsFromMessageWithoutTimestamp");function Ms(e,o){if(o===void 0)return[...e];let n=Date.parse(o);return!Number.isFinite(n)||n<0?[...e]:e.map(t=>({...t,timestamp:n}))}a(Ms,"withMessageTimestamp");function yc(e){return Ms(hc(e),e.timestamp)}a(yc,"extractHistorySeedsFromMessage");function Og(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=cc(e[n+1]),s=Ms(Ts(t.content,r),t.timestamp);o.push(...s.map(l=>l.type==="assistant"?{...l,text:Ps(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...yc(t))}}return o}a(Og,"extractHistorySeedsFromMessages");function mn(e){return typeof e=="string"?e:Array.isArray(e)?Is(e).join(`
12
+ `):""}a(mn,"extractTextContent");function vc(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>xs?`${o.slice(0,xs)}${Rs}`:o:Zl}a(vc,"formatSessionTitle");function kc(e){if(e.role!=="user")return!1;let o=e.content;return!Array.isArray(o)||o.length===0?!1:o.every(n=>!!n&&typeof n=="object"&&"type"in n&&n.type==="tool_result")}a(kc,"isPureToolResultUserMessage");function St(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=uc(n.content);return t&&t.trim()!=="..."?t:""}if(!kc(n))return""}}return""}a(St,"extractLastAssistantText");function Ng(e,o,n,t){let r=[St(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let s of r){let l=_s(s);if(l)return l}return""}a(Ng,"resolveCompletedAssistantText");function _s(e){let o=e.trim();if(!o||o==="...")return"";let n=ic(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(_s,"sanitizeUserFacingAssistantText");function Dg(e){let o=e.trim();return o.length>0&&_s(o).length===0&&sc(o)}a(Dg,"isControlPlaneOnlyAssistantText");function jg(e){let o=e.find(t=>t.role==="user"),n=o?mn(o.content):"";return vc(n)}a(jg,"extractTitle");function Ug(e,o=ec){let n=e.replace(/\n/g," "),t=n.length>o?Rs:"";return n.slice(0,o)+t}a(Ug,"formatMessagePreview");var xt={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=St(o.messages);if(!n){console.log(z.yellow(`
13
+ No assistant message found to copy.`)),console.log(z.dim("The assistant needs to respond first before you can copy its message."));return}try{await ys(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(z.green(`
14
14
  Copied to clipboard!`)),console.log(z.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(z.red(`
15
15
  Failed to copy to clipboard: ${r}`)),console.log(z.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:a(()=>{console.log(z.bold(`
16
16
  /copy - Copy Last Assistant Message
17
17
  `)),console.log("Usage:"),console.log(z.cyan(" /copy")+` - Copy the last assistant message to clipboard
18
18
  `),console.log("Description:"),console.log(" This command copies the most recent assistant response to your system clipboard."),console.log(` Useful for quickly sharing or saving AI responses.
19
19
  `),console.log("Examples:"),console.log(z.dim(" User: Explain how async/await works")),console.log(z.dim(" AI: [responds with explanation]")),console.log(z.cyan(" /copy")+z.dim(` - Copies the explanation to clipboard
20
- `)),console.log("Notes:"),console.log(" - Only copies assistant messages, not user messages"),console.log(" - Works with both plain text and formatted responses"),console.log(" - Requires clipboard permissions on some systems")},"detailedHelp")};import w from"chalk";function mc(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(mc,"resolveCwd");function pc(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.userLabel} ${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.userLabel} ${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.userLabel} ${o.memoryKind}`;case"reasoning_handoff":return`${o.userLabel} ${o.title}`}}a(pc,"proposalLabel");function g(e=""){console.log(e)}a(g,"writeOutput");function gc(e){for(let o of e)g(w.yellow(`[learn] ${o}`))}a(gc,"printWarnings");function Es(e){g(w.yellow(`
21
- Consumer impact:`)),g(w.dim(` action: ${e.action}`));let o=[["workflow capsules",e.workflowCapsules],["saved workflows",e.savedWorkflows],["constructed agents",e.constructedAgents],["prompt references",e.promptReferences]];for(let[n,t]of o)if(t.length!==0){g(w.dim(` ${n}:`));for(let r of t)g(w.dim(` - ${r}`))}}a(Es,"printConsumerImpact");async function wc(e){let o=Bo(e),n=await Ko(o);return gc(n.warnings),{storePath:o,store:n}}a(wc,"readStore");function hc(e,o){return e.find(n=>n.proposalId===o)}a(hc,"findProposal");function yc(e,o){let n=e.filter(t=>t.status==="pending");if(g(w.cyan(`
20
+ `)),console.log("Notes:"),console.log(" - Only copies assistant messages, not user messages"),console.log(" - Works with both plain text and formatted responses"),console.log(" - Requires clipboard permissions on some systems")},"detailedHelp")};import w from"chalk";function bc(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(bc,"resolveCwd");function $c(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.userLabel} ${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.userLabel} ${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.userLabel} ${o.memoryKind}`;case"reasoning_handoff":return`${o.userLabel} ${o.title}`}}a($c,"proposalLabel");function g(e=""){console.log(e)}a(g,"writeOutput");function Sc(e){for(let o of e)g(w.yellow(`[learn] ${o}`))}a(Sc,"printWarnings");function Ls(e){g(w.yellow(`
21
+ Consumer impact:`)),g(w.dim(` action: ${e.action}`));let o=[["workflow capsules",e.workflowCapsules],["saved workflows",e.savedWorkflows],["constructed agents",e.constructedAgents],["prompt references",e.promptReferences]];for(let[n,t]of o)if(t.length!==0){g(w.dim(` ${n}:`));for(let r of t)g(w.dim(` - ${r}`))}}a(Ls,"printConsumerImpact");async function xc(e){let o=Go(e),n=await qo(o);return Sc(n.warnings),{storePath:o,store:n}}a(xc,"readStore");function Ac(e,o){return e.find(n=>n.proposalId===o)}a(Ac,"findProposal");function Rc(e,o){let n=e.filter(t=>t.status==="pending");if(g(w.cyan(`
22
22
  [learn] pending learning suggestions`)),g(w.dim(` ${o}`)),n.length===0){g(w.dim(` (none)
23
- `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";g(` ${w.cyan(t.proposalId)} ${w.dim(`[${r}]`)} ${pc(t)}`)}g(w.dim(`
23
+ `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";g(` ${w.cyan(t.proposalId)} ${w.dim(`[${r}]`)} ${$c(t)}`)}g(w.dim(`
24
24
  Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
25
- `))}a(yc,"printPending");function vc(e){if(g(w.cyan(`
25
+ `))}a(Rc,"printPending");function Cc(e){if(g(w.cyan(`
26
26
  [learn] ${e.proposalId}`)),g(w.dim(` status: ${e.status}`)),g(w.dim(` kind : ${e.proposal.destination}`)),g(`
27
- Proposal:`),g(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Es(e.proposal.consumerImpact),!e.applyPlan){g(w.dim(`
27
+ Proposal:`),g(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Ls(e.proposal.consumerImpact),!e.applyPlan){g(w.dim(`
28
28
  No F224 apply plan is attached. Approval records the handoff only.
29
29
  `));return}g(`
30
- Apply plan:`),g(w.dim(` kind : ${e.applyPlan.kind}`)),g(w.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)g(w.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&g(o.content);g()}a(vc,"printDiff");async function kc(e,o,n={}){let t=await Dr(e,o,n);switch(t.status){case"approved_already_applied":g(w.green(`
30
+ Apply plan:`),g(w.dim(` kind : ${e.applyPlan.kind}`)),g(w.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)g(w.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&g(o.content);g()}a(Cc,"printDiff");async function Ec(e,o,n={}){let t=await Fr(e,o,n);switch(t.status){case"approved_already_applied":g(w.green(`
31
31
  [learn] approved ${o.proposalId}; files already match the apply plan.`)),g(w.dim(` recovered a pending proposal without applying it again.
32
32
  `));return;case"blocked_snapshot_conflict":g(w.red(`
33
33
  [learn] refusing to reapply ${o.proposalId}; ${t.relativePath} changed after the last snapshot.`)),g(w.dim(` snapshot: ${t.snapshotPath}`)),g(w.dim(` Review the file manually, then reject or recreate the learning proposal.
@@ -37,84 +37,84 @@ Apply plan:`),g(w.dim(` kind : ${e.applyPlan.kind}`)),g(w.dim(` skillRoot:
37
37
  [learn] ${o.proposalId} has no skill apply plan; nothing was applied.
38
38
  `));return;case"blocked_consumer_impact":g(w.yellow(`
39
39
  [learn] ${o.proposalId} requires manual consumer-impact review before approval.`)),g(w.dim(` Run /learn diff ${o.proposalId}, then /learn approve ${o.proposalId} --ack-impact after review.
40
- `)),Es(t.impact),g();return;case"approved_handoff":g(w.green(`
40
+ `)),Ls(t.impact),g();return;case"approved_handoff":g(w.green(`
41
41
  [learn] approved ${o.proposalId} as a downstream handoff.`)),g(w.dim(` F224 does not mutate workflow, memory, or reasoning carriers directly.
42
42
  `));return;case"blocked_not_pending":g(w.dim(`
43
43
  [learn] ${o.proposalId} is already ${t.reviewStatus}.
44
- `));return}}a(kc,"approveProposal");function fn(){g(w.cyan(`
44
+ `));return}}a(Ec,"approveProposal");function gn(){g(w.cyan(`
45
45
  /learn - Inspect and control learned capabilities`)),g(w.dim(" /learn Open the Learning Center")),g(w.dim(" /learn list [search] List learned capabilities")),g(w.dim(" /learn ready [search] List capabilities ready for review/control")),g(w.dim(" /learn pending [search] Compatibility alias for `/learn ready`")),g(w.dim(" /learn show <name|slug> Inspect a capability")),g(w.dim(" /learn trust|reject|disable|rollback <name|slug>")),g(w.dim(" /learn promote <name|slug|capability-id> [--scope user]")),g(w.dim(" /learn promote --help Explain formal user-catalog promotion")),g(w.dim(" Compatibility: diff, approve and reject remain accepted.")),g(w.dim(` /learn help
46
- `))}a(fn,"printHelp");function he(e,o){return{...o===void 0?{}:{target:o},scope:"user",help:!1,error:e}}a(he,"invalidPromoteInvocation");function bc(e,o){let n="user",t=!1;for(let r=0;r<o.length;r+=1){let s=o[r];if(s==="--scope"){if(t)return he("duplicate --scope option",e);let c=o[r+1];if(!c)return he("missing value for --scope",e);n=c,t=!0,r+=1;continue}if(s.startsWith("--scope=")){if(t)return he("duplicate --scope option",e);if(n=s.slice(8),!n)return he("missing value for --scope",e);t=!0;continue}let l=s.startsWith("-")?`unknown promote option: ${s}`:`unexpected promote argument: ${s}`;return he(l,e)}return n!=="user"?he(`unsupported promote scope: ${n}; only user is supported`,e):{target:e,scope:"user",help:!1}}a(bc,"parsePromoteOptions");function Is(e){let o=e.slice(1);if(o.some(t=>t==="--help"||t==="-h")||o[0]?.toLowerCase()==="help")return{scope:"user",help:!0};let n=o[0];return n?n.startsWith("-")?he(`unknown promote option: ${n}`):bc(n,o.slice(1)):he("missing learned Skill name, slug, or capability ID")}a(Is,"parseLearnPromoteInvocation");function mn(){g(w.cyan(`
46
+ `))}a(gn,"printHelp");function ve(e,o){return{...o===void 0?{}:{target:o},scope:"user",help:!1,error:e}}a(ve,"invalidPromoteInvocation");function Ic(e,o){let n="user",t=!1;for(let r=0;r<o.length;r+=1){let s=o[r];if(s==="--scope"){if(t)return ve("duplicate --scope option",e);let c=o[r+1];if(!c)return ve("missing value for --scope",e);n=c,t=!0,r+=1;continue}if(s.startsWith("--scope=")){if(t)return ve("duplicate --scope option",e);if(n=s.slice(8),!n)return ve("missing value for --scope",e);t=!0;continue}let l=s.startsWith("-")?`unknown promote option: ${s}`:`unexpected promote argument: ${s}`;return ve(l,e)}return n!=="user"?ve(`unsupported promote scope: ${n}; only user is supported`,e):{target:e,scope:"user",help:!1}}a(Ic,"parsePromoteOptions");function Ws(e){let o=e.slice(1);if(o.some(t=>t==="--help"||t==="-h")||o[0]?.toLowerCase()==="help")return{scope:"user",help:!0};let n=o[0];return n?n.startsWith("-")?ve(`unknown promote option: ${n}`):Ic(n,o.slice(1)):ve("missing learned Skill name, slug, or capability ID")}a(Ws,"parseLearnPromoteInvocation");function wn(){g(w.cyan(`
47
47
  /learn promote - Move one learned Skill into the formal user catalog`)),g(w.bold(`
48
48
  Usage:`)),g(w.dim(" /learn promote <name|slug|capability-id> [--scope user]")),g(w.dim(" /learn promote --help")),g(w.dim(" /help learn promote")),g(w.bold(`
49
49
  What it does:`)),g(w.dim(" Promote is an explicit ownership transfer, not automatic canary activation.")),g(w.dim(" Automatic evidence: testing -> active_learned inside the project Learned Area.")),g(w.dim(" Explicit promote: reviewed ready or active_learned -> promoted_user.")),g(w.dim(" The exact fingerprinted revision is copied to the configured KodaX")),g(w.dim(" user Skill directory (normally ~/.kodax/skills/<slug>/SKILL.md).")),g(w.dim(" Promotion never overwrites different formal Skill content.")),g(w.bold(`
50
50
  Before promoting:`)),g(w.dim(" Use /learn show <name|slug> to inspect the exact revision and lifecycle.")),g(w.dim(" The Learning Center offers this action for active_learned Skills.")),g(w.bold(`
51
51
  Examples:`)),g(w.dim(" /learn promote normalize-release-notes")),g(w.dim(` /learn promote normalize-release-notes --scope user
52
- `))}a(mn,"printPromoteHelp");async function $c(e,o){let n=o.learning;if(!n)return!1;let t=(e[0]??"").toLowerCase();if(t===""&&o.openLearningCenter)return(await n.list({limit:1})).items.length===0?(g(w.cyan(`
52
+ `))}a(wn,"printPromoteHelp");async function Tc(e,o){let n=o.learning;if(!n)return!1;let t=(e[0]??"").toLowerCase();if(t===""&&o.openLearningCenter)return(await n.list({limit:1})).items.length===0?(g(w.cyan(`
53
53
  [learn] Learning Center`)),g(w.dim(` Learning Center has no learned capabilities.
54
54
  `)),!0):(await o.openLearningCenter(),!0);if(t===""||t==="list"||t==="ready"||t==="pending"){t==="pending"&&g(w.dim("[learn] `pending` is a compatibility alias for /learn ready; Memory pipeline health: /memory doctor."));let d=await n.list({search:e.slice(1).join(" ").trim()||void 0,...t==="ready"||t==="pending"?{lifecycle:"ready"}:{},limit:200});g(w.cyan(`
55
- [learn] Learning Center`)),d.items.length===0&&g(w.dim(" (none)"));let u=new Map;for(let f of d.items)u.set(f.slug,(u.get(f.slug)??0)+1);for(let f of d.items){let p=(u.get(f.slug)??0)>1?` ${w.dim(`id=${f.capabilityId}`)}`:"";g(` ${w.cyan(f.slug)}${p} ${w.dim(`[${f.carrier}/${f.lifecycle}]`)} ${f.displayName}`)}return g(),!0}let r=t==="promote"?Is(e):void 0,s=r?.target??e[1],l=s?await Sc(n,s):void 0;if((t==="show"||t==="diff")&&l)return o.openLearningCenter?await o.openLearningCenter(l):g(`${JSON.stringify(await n.get(l),null,2)}
55
+ [learn] Learning Center`)),d.items.length===0&&g(w.dim(" (none)"));let u=new Map;for(let f of d.items)u.set(f.slug,(u.get(f.slug)??0)+1);for(let f of d.items){let p=(u.get(f.slug)??0)>1?` ${w.dim(`id=${f.capabilityId}`)}`:"";g(` ${w.cyan(f.slug)}${p} ${w.dim(`[${f.carrier}/${f.lifecycle}]`)} ${f.displayName}`)}return g(),!0}let r=t==="promote"?Ws(e):void 0,s=r?.target??e[1],l=s?await Pc(n,s):void 0;if((t==="show"||t==="diff")&&l)return o.openLearningCenter?await o.openLearningCenter(l):g(`${JSON.stringify(await n.get(l),null,2)}
56
56
  `),!0;if(!l)return!1;if(t==="trust"||t==="approve")await n.trust(l);else if(t==="reject")await n.reject(l);else if(t==="disable")await n.disable(l);else if(t==="rollback")await n.rollback(l);else if(t==="promote"){if(!r||r.help||r.error)return!1;await n.promote(l,r.scope)}else if(t==="review")await n.review(l);else return!1;let c=s??l;return g(t==="promote"?w.green(`
57
57
  [learn] promoted ${c} to the formal user Skill catalog.
58
58
  `):w.dim(`
59
59
  [learn] ${t} accepted for ${c}.
60
- `)),!0}a($c,"runLearningCenterCommand");async function Sc(e,o){try{return(await e.get(o)).capabilityId}catch(n){let r=(await e.list({limit:200})).items.find(s=>s.source.kind==="f224_proposal"&&s.source.proposalId===o);if(r)return r.capabilityId;throw n}}a(Sc,"resolveLearningCapabilityId");var $t={name:"learn",description:"Inspect and control the Learning Center",usage:"/learn [list|ready|pending|show|review|trust|reject|disable|rollback|promote|help] [name|slug|capability-id] [--scope user]",argumentHint:"list [search] | ready [search] | pending [search] | show <slug> | trust <slug> | disable <slug> | promote <slug> [--scope user] | help [promote]",handler:a(async(e,o,n)=>{let t=mc(o),r=(e[0]??"pending").toLowerCase();if(r==="help"||r==="-h"||r==="--help"){e[1]?.toLowerCase()==="promote"?mn():fn();return}if(r==="promote"){let u=Is(e);if(u.help){mn();return}if(u.error){g(w.yellow(`
60
+ `)),!0}a(Tc,"runLearningCenterCommand");async function Pc(e,o){try{return(await e.get(o)).capabilityId}catch(n){let r=(await e.list({limit:200})).items.find(s=>s.source.kind==="f224_proposal"&&s.source.proposalId===o);if(r)return r.capabilityId;throw n}}a(Pc,"resolveLearningCapabilityId");var At={name:"learn",description:"Inspect and control the Learning Center",usage:"/learn [list|ready|pending|show|review|trust|reject|disable|rollback|promote|help] [name|slug|capability-id] [--scope user]",argumentHint:"list [search] | ready [search] | pending [search] | show <slug> | trust <slug> | disable <slug> | promote <slug> [--scope user] | help [promote]",handler:a(async(e,o,n)=>{let t=bc(o),r=(e[0]??"pending").toLowerCase();if(r==="help"||r==="-h"||r==="--help"){e[1]?.toLowerCase()==="promote"?wn():gn();return}if(r==="promote"){let u=Ws(e);if(u.help){wn();return}if(u.error){g(w.yellow(`
61
61
  [learn] ${u.error}.
62
- `)),mn();return}}if(await $c(e,n))return;if(r==="promote"){g(w.yellow(`
62
+ `)),wn();return}}if(await Tc(e,n))return;if(r==="promote"){g(w.yellow(`
63
63
  [learn] Learning Center controls are unavailable in this runtime.
64
64
  `));return}if(r==="ready"){g(w.yellow(`
65
65
  [learn] Learning Center controls are unavailable in this runtime.
66
- `));return}r==="pending"&&g(w.dim("[learn] Learning Center controls are unavailable; showing the legacy pending learning proposals."));let{storePath:s,store:l}=await wc(t);if(r==="pending"||r==="list"){yc(l.proposals,s);return}let c=e[1];if(!c){g(w.yellow(`
66
+ `));return}r==="pending"&&g(w.dim("[learn] Learning Center controls are unavailable; showing the legacy pending learning proposals."));let{storePath:s,store:l}=await xc(t);if(r==="pending"||r==="list"){Rc(l.proposals,s);return}let c=e[1];if(!c){g(w.yellow(`
67
67
  [learn] missing proposal id for ${r}.
68
- `)),fn();return}let d=hc(l.proposals,c);if(!d){g(w.yellow(`
68
+ `)),gn();return}let d=Ac(l.proposals,c);if(!d){g(w.yellow(`
69
69
  [learn] proposal not found: ${c}
70
- `));return}if(r==="diff"){vc(d);return}if(r==="approve"){if(l.warnings.length>0){g(w.red(`
70
+ `));return}if(r==="diff"){Cc(d);return}if(r==="approve"){if(l.warnings.length>0){g(w.red(`
71
71
  [learn] refusing to mutate a corrupt learning store.
72
72
  `));return}if(d.status!=="pending"){g(w.dim(`
73
73
  [learn] ${d.proposalId} is already ${d.status}.
74
- `));return}let u=new Set(e.slice(2));await kc(s,d,{acknowledgeImpact:u.has("--ack-impact")});return}if(r==="reject"){if(l.warnings.length>0){g(w.red(`
74
+ `));return}let u=new Set(e.slice(2));await Ec(s,d,{acknowledgeImpact:u.has("--ack-impact")});return}if(r==="reject"){if(l.warnings.length>0){g(w.red(`
75
75
  [learn] refusing to mutate a corrupt learning store.
76
76
  `));return}if(d.status!=="pending"){g(w.dim(`
77
77
  [learn] ${d.proposalId} is already ${d.status}.
78
- `));return}let u=e.slice(2).join(" ").trim();await Nr(s,c,"rejected",u.length>0?{rejectedReason:u}:{}),g(w.dim(`
78
+ `));return}let u=e.slice(2).join(" ").trim();await Ur(s,c,"rejected",u.length>0?{rejectedReason:u}:{}),g(w.dim(`
79
79
  [learn] rejected ${c}.
80
80
  `));return}g(w.yellow(`
81
81
  [learn] unknown subcommand: ${r}
82
- `)),fn()},"handler"),detailedHelp:a((e=[])=>{e[0]?.toLowerCase()==="promote"?mn():fn()},"detailedHelp")};import*as H from"node:fs";import*as V from"node:path";import{spawn as xc}from"node:child_process";import m from"chalk";var _s=900*1e3,Ve=new Map,Ls=[["/memory","Summarize accepted memories"],["/memory list","Same as `/memory`"],["/memory remember --key <key> [--kind <kind>] <text>","Store one explicit claim"],["/memory forget <ref>","Forget one exact memory ref"],["/memory decisions","Show mutations that need your decision"],["/memory show <ref>","Show one memory or decision"],["/memory approve <ref>","Approve one exact decision"],["/memory reject <ref>","Reject one exact decision"],["/memory doctor","Diagnose background learning"],["/memory open","Open Memory externally"],["/memory help","Show this help"]];async function Ws(e,o,n){let t=e.context?.executionCwd??e.context?.gitRoot??o,r=e.context?.memoryIdentity??Xn(e,t,n),s=Gr(e,r,t),l=await Promise.all(s.map(d=>Hr({configHome:d.configHome,tenantId:d.tenantId,agentId:d.agentId,projectId:d.projectId??null}))),c=new Map;for(let d of l.flat()){let u=d.jobId??`${d.ownerSessionRef}:${d.reviewKey}`;c.has(u)||c.set(u,d)}return[...c.values()].sort((d,u)=>d.createdAt.localeCompare(u.createdAt)||d.reviewKey.localeCompare(u.reviewKey))}a(Ws,"listCurrentProjectEpisodeReviews");function Ps(e){return e instanceof Error?e.message:String(e)}a(Ps,"formatMemoryError");function Ac(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Ac,"resolveCwd");function Os(e){let o;try{o=H.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.log(m.red(`[memory] failed to read memory directory ${e}: ${Ps(t)}`)),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=V.join(e,t.name),s="",l=0;try{s=H.readFileSync(r,"utf-8"),l=H.statSync(r).mtimeMs}catch(p){console.log(m.red(`[memory] failed to read ${r}: ${Ps(p)}`));continue}let d=go(s).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=V.basename(t.name,".md");n.push({filename:t.name,absPath:r,mtimeMs:l,title:d.name?.trim()||f,description:d.description?.trim()||f,type:d.type,parseOk:u})}return n}a(Os,"readTopicFiles");function Rc(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(Rc,"buildIndexLines");async function Cc(e){let o=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]});if(console.log(m.cyan(`
83
- [memory] accepted Memory`)),o.length===0)console.log(m.dim(" No accepted memories yet."));else{let t=o.slice(0,50);for(let r=0;r<t.length;r+=1){let s=t[r],l=await e.readRef(s);console.log(` ${m.cyan(`[memory:${r+1}]`)} ${s.title??s.id}`),console.log(m.dim(` ref: ${qo(s)}`)),console.log(` ${go(l.body).body.trim().replace(/\s+/g," ").slice(0,360)}`)}t.length<o.length&&console.log(m.dim(` Showing ${t.length} of ${o.length}.`))}let n=[...new Set(o.flatMap(t=>t.storageUri===void 0?[]:[V.dirname(t.storageUri)]))];console.log(m.dim(`
84
- ${o.length} accepted across ${n.length} storage scope${n.length===1?"":"s"}`));for(let t of n)console.log(m.dim(` storage: ${t}`));console.log()}a(Cc,"listAcceptedMemory");function Ec(e){let o="fact",n,t=[];for(let r=0;r<e.length;r+=1){let s=e[r];if(s==="--kind"){let l=e[r+1];if(l!=="fact"&&l!=="policy"&&l!=="preference"&&l!=="procedure")return{statement:"",claimKind:o,error:"--kind must be fact, preference, policy, or procedure"};o=l,r+=1;continue}if(s==="--key"){if(n=e[r+1]?.trim(),n===void 0||n.length===0)return{statement:"",claimKind:o,error:"--key requires a stable semantic identifier"};r+=1;continue}s!==void 0&&t.push(s)}return{statement:t.join(" ").trim(),claimKind:o,...n===void 0?{}:{claimKey:n}}}a(Ec,"parseRememberCommand");async function Ic(e,o){console.log(m.cyan(`
85
- [memory] per-project memory directory`)),console.log(m.dim(` ${e}`));let n=Os(e),t=n.filter(l=>!l.parseOk);console.log(m.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,s="";try{s=H.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(m.yellow(`
82
+ `)),gn()},"handler"),detailedHelp:a((e=[])=>{e[0]?.toLowerCase()==="promote"?wn():gn()},"detailedHelp")};import*as H from"node:fs";import*as Y from"node:path";import{spawn as Mc}from"node:child_process";import m from"chalk";var js=900*1e3,Ve=new Map,Us=[["/memory","Summarize accepted memories"],["/memory list","Same as `/memory`"],["/memory remember --key <key> [--kind <kind>] <text>","Store one explicit claim"],["/memory forget <ref>","Forget one exact memory ref"],["/memory decisions","Show mutations that need your decision"],["/memory show <ref>","Show one memory or decision"],["/memory approve <ref>","Approve one exact decision"],["/memory reject <ref>","Reject one exact decision"],["/memory doctor","Diagnose background learning"],["/memory open","Open Memory externally"],["/memory help","Show this help"]];async function Fs(e,o,n){let t=e.context?.executionCwd??e.context?.gitRoot??o,r=e.context?.memoryIdentity??Yn(e,t,n),s=Vr(e,r,t),l=await Promise.all(s.map(d=>qr({configHome:d.configHome,tenantId:d.tenantId,agentId:d.agentId,projectId:d.projectId??null}))),c=new Map;for(let d of l.flat()){let u=d.jobId??`${d.ownerSessionRef}:${d.reviewKey}`;c.has(u)||c.set(u,d)}return[...c.values()].sort((d,u)=>d.createdAt.localeCompare(u.createdAt)||d.reviewKey.localeCompare(u.reviewKey))}a(Fs,"listCurrentProjectEpisodeReviews");function Os(e){return e instanceof Error?e.message:String(e)}a(Os,"formatMemoryError");function _c(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(_c,"resolveCwd");function Hs(e){let o;try{o=H.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.log(m.red(`[memory] failed to read memory directory ${e}: ${Os(t)}`)),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=Y.join(e,t.name),s="",l=0;try{s=H.readFileSync(r,"utf-8"),l=H.statSync(r).mtimeMs}catch(p){console.log(m.red(`[memory] failed to read ${r}: ${Os(p)}`));continue}let d=wo(s).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=Y.basename(t.name,".md");n.push({filename:t.name,absPath:r,mtimeMs:l,title:d.name?.trim()||f,description:d.description?.trim()||f,type:d.type,parseOk:u})}return n}a(Hs,"readTopicFiles");function Lc(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(Lc,"buildIndexLines");async function Wc(e){let o=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]});if(console.log(m.cyan(`
83
+ [memory] accepted Memory`)),o.length===0)console.log(m.dim(" No accepted memories yet."));else{let t=o.slice(0,50);for(let r=0;r<t.length;r+=1){let s=t[r],l=await e.readRef(s);console.log(` ${m.cyan(`[memory:${r+1}]`)} ${s.title??s.id}`),console.log(m.dim(` ref: ${zo(s)}`)),console.log(` ${wo(l.body).body.trim().replace(/\s+/g," ").slice(0,360)}`)}t.length<o.length&&console.log(m.dim(` Showing ${t.length} of ${o.length}.`))}let n=[...new Set(o.flatMap(t=>t.storageUri===void 0?[]:[Y.dirname(t.storageUri)]))];console.log(m.dim(`
84
+ ${o.length} accepted across ${n.length} storage scope${n.length===1?"":"s"}`));for(let t of n)console.log(m.dim(` storage: ${t}`));console.log()}a(Wc,"listAcceptedMemory");function Oc(e){let o="fact",n,t=[];for(let r=0;r<e.length;r+=1){let s=e[r];if(s==="--kind"){let l=e[r+1];if(l!=="fact"&&l!=="policy"&&l!=="preference"&&l!=="procedure")return{statement:"",claimKind:o,error:"--kind must be fact, preference, policy, or procedure"};o=l,r+=1;continue}if(s==="--key"){if(n=e[r+1]?.trim(),n===void 0||n.length===0)return{statement:"",claimKind:o,error:"--key requires a stable semantic identifier"};r+=1;continue}s!==void 0&&t.push(s)}return{statement:t.join(" ").trim(),claimKind:o,...n===void 0?{}:{claimKey:n}}}a(Oc,"parseRememberCommand");async function Nc(e,o){console.log(m.cyan(`
85
+ [memory] per-project memory directory`)),console.log(m.dim(` ${e}`));let n=Hs(e),t=n.filter(l=>!l.parseOk);console.log(m.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,s="";try{s=H.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(m.yellow(`
86
86
  Derived MEMORY.md index does not exist.`)),n.length>0?console.log(m.dim(" Run `/memory rebuild` to seed it from existing topic files.")):console.log(m.dim(" This is not evidence that accepted Memory is missing; use `/memory list`.")),console.log();return}console.log(m.cyan(`
87
87
  --- MEMORY.md ---`)),s.trim().length===0?console.log(m.dim(" (empty)")):console.log(s.trimEnd()),console.log(m.cyan(`--- end ---
88
- `))}a(Ic,"listStorageIndex");async function Pc(e,o,n,t,r){await Ic(e,o);let s=n.lineage?.entries??[],l=0,c=0,d=0;for(let I of s)I.type==="memory_outcome_digest"?l+=1:I.type==="memory_review_receipt"?c+=1:I.type==="client_notice"&&I.source==="memory-agent"&&(d+=1);console.log(m.cyan(`
89
- [memory] this-session pipeline`)),console.log(m.dim(` outcome digests : ${l}`)),console.log(m.dim(` review receipts : ${c}`)),console.log(m.dim(` client notices : ${d}`));let u=t.createKodaXOptions?.(),f,p,k,b,A;if(u!==void 0){let I=await Ws(u,r,n.sessionId);f=I.length;let M=Ds(I);p=M.automatic,k=M.attention,b=M.unknown;let re=I[0];re!==void 0&&(A=Ns(re.createdAt,Date.now()))}console.log(m.cyan(`
90
- [memory] pending episode reviews (current project, all sessions)`)),f===void 0?console.log(m.dim(" unavailable \u2014 KodaX options are not bound in this session")):(console.log(m.dim(` pending: ${f}`)),console.log(m.dim(` automatic queue: ${p??0}`)),console.log(m.dim(` needs attention: ${k??0}`)),console.log(m.dim(` unknown state: ${b??0}`)),A!==void 0&&console.log(m.dim(` oldest pending age: ${A}`)));let R,v=!1;if(u===void 0)R="unknown \u2014 KodaX options are not bound in this session";else if(u.learningReviewer!==void 0||u.memoryReviewer!==void 0)R="configured (custom reviewer bound)";else{let I=!1;try{I=po(u.provider).isConfigured()}catch{I=!1}R=I?"production reviewer auto-installed at session start":`MISSING \u2014 provider "${u.provider}" is not configured; episode review cannot run`,v=!I}console.log(m.cyan(`
91
- [memory] reviewer`)),console.log(v?m.yellow(` ${R}`):m.dim(` ${R}`));let $=[];if(f!==void 0&&f>0?((p??0)>0&&$.push(l===0?"review segment: pending reviews from earlier sessions are waiting":c===0?"review segment: digests captured but no review ever completed; the backlog is growing":"review segment: pending reviews are still waiting"),(k??0)>0&&$.push(`review segment: ${k} job(s) need operator attention and cannot be processed by review-drain`),(b??0)>0&&$.push(`review segment: ${b} job(s) have missing or invalid state and require repair`)):l===0?$.push("capture segment: no memory outcome digests recorded in this session yet"):c===0&&$.push("review segment: digests captured but no review completed in this session"),v&&$.push("reviewer missing: configure a provider (`kodax setup`) to unblock episode review"),$.length>0){console.log();for(let I of $)console.log(m.yellow(` ! ${I}`));(p??0)>0&&console.log(m.dim(" Run `kodax memory review-drain` to process the backlog in the foreground."))}console.log()}a(Pc,"statusMemory");function Ns(e,o){let n=Date.parse(e);if(Number.isNaN(n))return"unknown";let t=Math.max(0,Math.floor((o-n)/6e4));if(t<60)return`${t}m`;let r=Math.floor(t/60);return r<48?`${r}h`:`${Math.floor(r/24)}d`}a(Ns,"formatPendingAge");function Ds(e){let o=0,n=0,t=0;for(let r of e)r.status==="attention"?n+=1:r.status==="unknown"?t+=1:o+=1;return{automatic:o,attention:n,unknown:t}}a(Ds,"countReviewStates");function Tc(e){if(e===void 0)return 20;if(!/^\d+$/.test(e))return;let o=Number(e);return Number.isSafeInteger(o)&&o>0&&o<=200?o:void 0}a(Tc,"parseReviewListLimit");function Mc(e){return e.providerAttempts===void 0?"legacy review job":[`provider=${e.providerAttempts}`,`apply=${e.applyAttempts??0}`,`completion=${e.completionAttempts??0}`].join(", ")}a(Mc,"formatReviewAttempts");async function _c(e,o,n,t){let r=Tc(t);if(r===void 0){console.log(m.yellow(`
88
+ `))}a(Nc,"listStorageIndex");async function Dc(e,o,n,t,r){await Nc(e,o);let s=n.lineage?.entries??[],l=0,c=0,d=0;for(let I of s)I.type==="memory_outcome_digest"?l+=1:I.type==="memory_review_receipt"?c+=1:I.type==="client_notice"&&I.source==="memory-agent"&&(d+=1);console.log(m.cyan(`
89
+ [memory] this-session pipeline`)),console.log(m.dim(` outcome digests : ${l}`)),console.log(m.dim(` review receipts : ${c}`)),console.log(m.dim(` client notices : ${d}`));let u=t.createKodaXOptions?.(),f,p,k,b,A;if(u!==void 0){let I=await Fs(u,r,n.sessionId);f=I.length;let M=Bs(I);p=M.automatic,k=M.attention,b=M.unknown;let se=I[0];se!==void 0&&(A=Ks(se.createdAt,Date.now()))}console.log(m.cyan(`
90
+ [memory] pending episode reviews (current project, all sessions)`)),f===void 0?console.log(m.dim(" unavailable \u2014 KodaX options are not bound in this session")):(console.log(m.dim(` pending: ${f}`)),console.log(m.dim(` automatic queue: ${p??0}`)),console.log(m.dim(` needs attention: ${k??0}`)),console.log(m.dim(` unknown state: ${b??0}`)),A!==void 0&&console.log(m.dim(` oldest pending age: ${A}`)));let R,v=!1;if(u===void 0)R="unknown \u2014 KodaX options are not bound in this session";else if(u.learningReviewer!==void 0||u.memoryReviewer!==void 0)R="configured (custom reviewer bound)";else{let I=!1;try{I=go(u.provider).isConfigured()}catch{I=!1}R=I?"production reviewer auto-installed at session start":`MISSING \u2014 provider "${u.provider}" is not configured; episode review cannot run`,v=!I}console.log(m.cyan(`
91
+ [memory] reviewer`)),console.log(v?m.yellow(` ${R}`):m.dim(` ${R}`));let $=[];if(f!==void 0&&f>0?((p??0)>0&&$.push(l===0?"review segment: pending reviews from earlier sessions are waiting":c===0?"review segment: digests captured but no review ever completed; the backlog is growing":"review segment: pending reviews are still waiting"),(k??0)>0&&$.push(`review segment: ${k} job(s) need operator attention and cannot be processed by review-drain`),(b??0)>0&&$.push(`review segment: ${b} job(s) have missing or invalid state and require repair`)):l===0?$.push("capture segment: no memory outcome digests recorded in this session yet"):c===0&&$.push("review segment: digests captured but no review completed in this session"),v&&$.push("reviewer missing: configure a provider (`kodax setup`) to unblock episode review"),$.length>0){console.log();for(let I of $)console.log(m.yellow(` ! ${I}`));(p??0)>0&&console.log(m.dim(" Run `kodax memory review-drain` to process the backlog in the foreground."))}console.log()}a(Dc,"statusMemory");function Ks(e,o){let n=Date.parse(e);if(Number.isNaN(n))return"unknown";let t=Math.max(0,Math.floor((o-n)/6e4));if(t<60)return`${t}m`;let r=Math.floor(t/60);return r<48?`${r}h`:`${Math.floor(r/24)}d`}a(Ks,"formatPendingAge");function Bs(e){let o=0,n=0,t=0;for(let r of e)r.status==="attention"?n+=1:r.status==="unknown"?t+=1:o+=1;return{automatic:o,attention:n,unknown:t}}a(Bs,"countReviewStates");function jc(e){if(e===void 0)return 20;if(!/^\d+$/.test(e))return;let o=Number(e);return Number.isSafeInteger(o)&&o>0&&o<=200?o:void 0}a(jc,"parseReviewListLimit");function Uc(e){return e.providerAttempts===void 0?"legacy review job":[`provider=${e.providerAttempts}`,`apply=${e.applyAttempts??0}`,`completion=${e.completionAttempts??0}`].join(", ")}a(Uc,"formatReviewAttempts");async function Fc(e,o,n,t){let r=jc(t);if(r===void 0){console.log(m.yellow(`
92
92
  [memory] review list limit must be an integer from 1 to 200.
93
93
  `));return}let s=o.createKodaXOptions?.();if(s===void 0){console.log(m.yellow(`
94
- [memory] episode-review jobs are unavailable in this session.`)),console.log(m.dim(" KodaX options are not bound; use `/memory status` for diagnostics.\n"));return}let l=await Ws(s,n,e.sessionId),c=l.slice(0,r),d=Ds(l);console.log(m.cyan(`
95
- [memory] episode-review jobs`)),console.log(m.dim(` showing ${c.length} of ${l.length} (oldest first)`)),console.log(m.dim(` automatic queue: ${d.automatic}, needs attention: ${d.attention}, unknown state: ${d.unknown}`)),c.length===0&&console.log(m.dim(" (none)"));for(let u of c){let f=u.jobId?.slice(0,12)??`legacy:${u.reviewKey}`;console.log(` ${m.cyan(f)} ${m.dim(`[${u.status}]`)} ${u.reviewKey}`),console.log(m.dim(` age=${Ns(u.createdAt,Date.now())}, session=${u.ownerSessionRef}, attempts: ${Mc(u)}`)),u.nextAttemptAt!==void 0&&console.log(m.dim(` next provider attempt: ${u.nextAttemptAt}`)),u.nextApplyAttemptAt!==void 0&&console.log(m.dim(` next apply attempt: ${u.nextApplyAttemptAt}`)),u.nextCompletionAttemptAt!==void 0&&console.log(m.dim(` next completion attempt: ${u.nextCompletionAttemptAt}`)),u.lastError!==void 0&&console.log(m.yellow(` last error: ${u.lastError.slice(0,160)}`))}d.automatic>0&&console.log(m.dim("\n Process the automatic queue with `kodax memory review-drain [--max N]`.")),d.attention>0&&console.log(m.yellow(" Attention jobs require operator intervention and are not auto-drained.")),d.unknown>0&&console.log(m.yellow(" Unknown-state jobs require persisted-state repair before draining.")),console.log()}a(_c,"listEpisodeReviews");async function Lc(e,o){let n=!1;try{n=H.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(m.yellow(`
96
- [memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log(m.dim(` ${e}`)),console.log(m.dim(" This repairs a derived index only; use `/memory list` for accepted Memory.\n"));return}let t=Os(e);if(t.length===0){console.log(m.yellow(`
94
+ [memory] episode-review jobs are unavailable in this session.`)),console.log(m.dim(" KodaX options are not bound; use `/memory status` for diagnostics.\n"));return}let l=await Fs(s,n,e.sessionId),c=l.slice(0,r),d=Bs(l);console.log(m.cyan(`
95
+ [memory] episode-review jobs`)),console.log(m.dim(` showing ${c.length} of ${l.length} (oldest first)`)),console.log(m.dim(` automatic queue: ${d.automatic}, needs attention: ${d.attention}, unknown state: ${d.unknown}`)),c.length===0&&console.log(m.dim(" (none)"));for(let u of c){let f=u.jobId?.slice(0,12)??`legacy:${u.reviewKey}`;console.log(` ${m.cyan(f)} ${m.dim(`[${u.status}]`)} ${u.reviewKey}`),console.log(m.dim(` age=${Ks(u.createdAt,Date.now())}, session=${u.ownerSessionRef}, attempts: ${Uc(u)}`)),u.nextAttemptAt!==void 0&&console.log(m.dim(` next provider attempt: ${u.nextAttemptAt}`)),u.nextApplyAttemptAt!==void 0&&console.log(m.dim(` next apply attempt: ${u.nextApplyAttemptAt}`)),u.nextCompletionAttemptAt!==void 0&&console.log(m.dim(` next completion attempt: ${u.nextCompletionAttemptAt}`)),u.lastError!==void 0&&console.log(m.yellow(` last error: ${u.lastError.slice(0,160)}`))}d.automatic>0&&console.log(m.dim("\n Process the automatic queue with `kodax memory review-drain [--max N]`.")),d.attention>0&&console.log(m.yellow(" Attention jobs require operator intervention and are not auto-drained.")),d.unknown>0&&console.log(m.yellow(" Unknown-state jobs require persisted-state repair before draining.")),console.log()}a(Fc,"listEpisodeReviews");async function Hc(e,o){let n=!1;try{n=H.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(m.yellow(`
96
+ [memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log(m.dim(` ${e}`)),console.log(m.dim(" This repairs a derived index only; use `/memory list` for accepted Memory.\n"));return}let t=Hs(e);if(t.length===0){console.log(m.yellow(`
97
97
  [memory] no topic files found \u2014 nothing to rebuild.`)),console.log(m.dim(` ${e}
98
- `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=Rc(r).join(`
98
+ `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=Lc(r).join(`
99
99
  `)+`
100
100
  `;H.writeFileSync(o,l,"utf-8"),console.log(m.green(`
101
- [memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log(m.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log(m.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log(m.dim(` - ${d.filename}`));console.log(m.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(Lc,"rebuildMemory");async function Wc(e,o,n,t){let r=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]}),s=n===void 0?void 0:await St(e,n,!0);if(n!==void 0&&s===void 0){console.log(m.yellow("\n[memory] choose one memory:<number> or exact ref from `/memory list`.\n"));return}let l=[...new Set((s===void 0?r:[s]).flatMap(u=>u.storageUri===void 0?[]:[u.storageUri]))],c=[...new Set(l.map(u=>V.dirname(u)))];if(s===void 0&&c.length>1){console.log(m.yellow(`
102
- [memory] accepted Memory spans multiple scopes; choose one item to open:`));for(let u=0;u<r.length;u+=1)console.log(m.dim(` /memory open memory:${u+1} ${r[u]?.title??r[u]?.id}`));console.log();return}let d=s?.storageUri??(c[0]===void 0?o:H.existsSync(V.join(c[0],"MEMORY.md"))?V.join(c[0],"MEMORY.md"):c[0]);!H.existsSync(d)&&d===o&&H.mkdirSync(d,{recursive:!0}),t!==void 0?await t(d):await Oc(d),console.log(m.green(`
101
+ [memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log(m.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log(m.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log(m.dim(` - ${d.filename}`));console.log(m.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(Hc,"rebuildMemory");async function Kc(e,o,n,t){let r=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]}),s=n===void 0?void 0:await Rt(e,n,!0);if(n!==void 0&&s===void 0){console.log(m.yellow("\n[memory] choose one memory:<number> or exact ref from `/memory list`.\n"));return}let l=[...new Set((s===void 0?r:[s]).flatMap(u=>u.storageUri===void 0?[]:[u.storageUri]))],c=[...new Set(l.map(u=>Y.dirname(u)))];if(s===void 0&&c.length>1){console.log(m.yellow(`
102
+ [memory] accepted Memory spans multiple scopes; choose one item to open:`));for(let u=0;u<r.length;u+=1)console.log(m.dim(` /memory open memory:${u+1} ${r[u]?.title??r[u]?.id}`));console.log();return}let d=s?.storageUri??(c[0]===void 0?o:H.existsSync(Y.join(c[0],"MEMORY.md"))?Y.join(c[0],"MEMORY.md"):c[0]);!H.existsSync(d)&&d===o&&H.mkdirSync(d,{recursive:!0}),t!==void 0?await t(d):await Bc(d),console.log(m.green(`
103
103
  [memory] opened in your external editor/file browser.`)),console.log(m.dim(` ${d}
104
- `))}a(Wc,"openMemory");async function Oc(e){let{executable:o,args:n}=Nc(process.platform,e);await new Promise((t,r)=>{let s=xc(o,n,{detached:!0,stdio:"ignore",windowsHide:!0});s.once("error",r),s.once("close",l=>{l===0?t():r(new Error(`external opener exited with code ${l??"unknown"}`))}),s.unref()})}a(Oc,"launchExternalPath");function Nc(e,o){return e==="win32"?{executable:V.join(process.env.SystemRoot??"C:\\Windows","explorer.exe"),args:[o]}:{executable:e==="darwin"?"open":"xdg-open",args:[o]}}a(Nc,"externalOpenInvocation");function Dc(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(Dc,"proposalLabel");function Ts(e){if(console.log(m.cyan(`
104
+ `))}a(Kc,"openMemory");async function Bc(e){let{executable:o,args:n}=qc(process.platform,e);await new Promise((t,r)=>{let s=Mc(o,n,{detached:!0,stdio:"ignore",windowsHide:!0});s.once("error",r),s.once("close",l=>{l===0?t():r(new Error(`external opener exited with code ${l??"unknown"}`))}),s.unref()})}a(Bc,"launchExternalPath");function qc(e,o){return e==="win32"?{executable:Y.join(process.env.SystemRoot??"C:\\Windows","explorer.exe"),args:[o]}:{executable:e==="darwin"?"open":"xdg-open",args:[o]}}a(qc,"externalOpenInvocation");function Gc(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(Gc,"proposalLabel");function Ns(e){if(console.log(m.cyan(`
105
105
  [memory] decisions that need you`)),e.length===0){console.log(m.dim(` (none)
106
- `));return}for(let o=0;o<e.length;o+=1){let n=e[o];if(console.log(` ${m.cyan(`[decision:${o+1}]`)} ${n.preview.summary}`),console.log(m.dim(` ${Dc(n)}; risk=${n.risk}`)),console.log(m.dim(` why: ${n.rationale}`)),n.preview.diff!==void 0){let t=go(n.preview.diff).body.trim().replace(/\s+/g," ");t.length>0&&console.log(` proposed: ${t.slice(0,360)}`)}console.log(m.dim(` ref: ${n.id}`))}console.log(m.dim(`
106
+ `));return}for(let o=0;o<e.length;o+=1){let n=e[o];if(console.log(` ${m.cyan(`[decision:${o+1}]`)} ${n.preview.summary}`),console.log(m.dim(` ${Gc(n)}; risk=${n.risk}`)),console.log(m.dim(` why: ${n.rationale}`)),n.preview.diff!==void 0){let t=wo(n.preview.diff).body.trim().replace(/\s+/g," ");t.length>0&&console.log(` proposed: ${t.slice(0,360)}`)}console.log(m.dim(` ref: ${n.id}`))}console.log(m.dim(`
107
107
  Use /memory show decision:<number>, then approve or reject the exact decision ref shown.
108
- `))}a(Ts,"printMemoryInbox");function jc(e){if(console.log(m.cyan(`
108
+ `))}a(Ns,"printMemoryInbox");function zc(e){if(console.log(m.cyan(`
109
109
  [memory] ${e.id}`)),console.log(m.dim(` action : ${e.action}`)),console.log(m.dim(` risk : ${e.risk}`)),console.log(m.dim(` reason : ${e.rationale}`)),console.log(m.dim(` summary: ${e.preview.summary}`)),e.preview.changedPaths.length>0){console.log(m.dim(" changed paths:"));for(let o of e.preview.changedPaths)console.log(m.dim(` - ${o}`))}if(e.preview.warnings.length>0){console.log(m.yellow(" warnings:"));for(let o of e.preview.warnings)console.log(m.yellow(` - ${o}`))}e.preview.diff!==void 0&&e.preview.diff.trim().length>0&&(console.log(m.cyan(`
110
- --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(m.cyan("--- end ---"))),console.log()}a(jc,"printMemoryProposal");function Uc(e){if(!e.applied){console.log(m.yellow(`
110
+ --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(m.cyan("--- end ---"))),console.log()}a(zc,"printMemoryProposal");function Xc(e){if(!e.applied){console.log(m.yellow(`
111
111
  [memory] ${e.proposalId} was not applied.`)),console.log(m.dim(` ${e.skippedReason??"no reason provided"}
112
112
  `));return}console.log(m.green(`
113
- [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(m.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Uc,"printApplyResult");function Fc(e){if(!e.rejected){console.log(m.yellow(`
113
+ [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(m.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Xc,"printApplyResult");function Vc(e){if(!e.rejected){console.log(m.yellow(`
114
114
  [memory] ${e.proposalId} was not rejected.`)),console.log(m.dim(` ${e.skippedReason??"no reason provided"}
115
115
  `));return}console.log(m.dim(`
116
- [memory] rejected ${e.proposalId}.`)),e.review!==void 0&&console.log(m.dim(` review actions: ${e.review.actions.length}`));for(let o of e.warnings)console.log(m.dim(` review warning: ${o}`));console.log()}a(Fc,"printRejectResult");function Ms(){console.log(m.cyan(`
117
- /memory - View and manage durable Memory`));for(let[e,o]of Ls)console.log(m.dim(` ${e.padEnd(48)}${o}`));console.log()}a(Ms,"printHelp");function Hc(e){if(e.status==="remembered"){console.log(m.green(`
116
+ [memory] rejected ${e.proposalId}.`)),e.review!==void 0&&console.log(m.dim(` review actions: ${e.review.actions.length}`));for(let o of e.warnings)console.log(m.dim(` review warning: ${o}`));console.log()}a(Vc,"printRejectResult");function Ds(){console.log(m.cyan(`
117
+ /memory - View and manage durable Memory`));for(let[e,o]of Us)console.log(m.dim(` ${e.padEnd(48)}${o}`));console.log()}a(Ds,"printHelp");function Yc(e){if(e.status==="remembered"){console.log(m.green(`
118
118
  [memory] Memory remembered: ${e.changedRefIds.join(", ")}.
119
119
  `));return}if(e.status==="updated"){console.log(m.green(`
120
120
  [memory] Memory updated: ${e.changedRefIds.join(", ")}.
@@ -125,30 +125,30 @@ Examples:`)),g(w.dim(" /learn promote normalize-release-notes")),g(w.dim(` /le
125
125
  Use \`/memory decisions\` to inspect it, then approve or reject it.
126
126
  `));return}console.log(m.yellow(`
127
127
  [memory] Memory was not changed: ${e.reason??e.status}.
128
- `))}a(Hc,"printRememberResult");async function St(e,o,n=!1){if(o===void 0)return;let t=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]}),r=/^memory:([1-9]\d*)$/.exec(o);return n&&r!==null?t[Number(r[1])-1]:t.find(s=>qo(s)===o||s.id===o)}a(St,"resolveAcceptedRef");async function js(e,o,n=!1){if(o===void 0)return;let t=/^decision:([1-9]\d*)$/.exec(o);return n&&t!==null?(await e.listInbox())[Number(t[1])-1]:e.showProposal(o)}a(js,"resolveProposal");function Kc(){console.log(m.bold(`
128
+ `))}a(Yc,"printRememberResult");async function Rt(e,o,n=!1){if(o===void 0)return;let t=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]}),r=/^memory:([1-9]\d*)$/.exec(o);return n&&r!==null?t[Number(r[1])-1]:t.find(s=>zo(s)===o||s.id===o)}a(Rt,"resolveAcceptedRef");async function qs(e,o,n=!1){if(o===void 0)return;let t=/^decision:([1-9]\d*)$/.exec(o);return n&&t!==null?(await e.listInbox())[Number(t[1])-1]:e.showProposal(o)}a(qs,"resolveProposal");function Jc(){console.log(m.bold(`
129
129
  /memory - View and manage durable Memory
130
- `)),console.log("Usage:");for(let[e,o]of Ls)console.log(m.cyan(` ${e.padEnd(48)}`)+m.dim(o));console.log("Description:"),console.log(m.dim(` Normal use is conversational: ask KodaX what it remembers, tell it
130
+ `)),console.log("Usage:");for(let[e,o]of Us)console.log(m.cyan(` ${e.padEnd(48)}`)+m.dim(o));console.log("Description:"),console.log(m.dim(` Normal use is conversational: ask KodaX what it remembers, tell it
131
131
  to remember something, or ask it to forget one item. Slash commands
132
132
  are the explicit inspection and recovery escape hatch. MEMORY.md is
133
133
  a derived storage index, not the user-visible source of truth.
134
134
  `)),console.log("Notes:"),console.log(m.dim(" - Ordinary explicit remember/forget operations apply immediately.")),console.log(m.dim(" - Conflicts become readable decisions; broad requests ask for clarification.")),console.log(m.dim(` - Restricted content is rejected, and background learning runs automatically.
135
- `))}a(Kc,"printDetailedHelp");function Bc(e,o){let n=Ac(e),t=o.createKodaXOptions?.(),r=t?.context?.executionCwd??e.runtimeInfo?.executionCwd??n,s=t===void 0?void 0:t.context?.memoryIdentity??Xn(t,r,e.sessionId??"memory-command"),l=s?.projectId===void 0?Mr(n):_r(s,"project"),c=t?.memoryReviewer;return{cwd:n,memoryDir:l,entrypointPath:V.join(l,"MEMORY.md"),controller:Fr({cwd:r,...s===void 0?{}:{identity:s},...c===void 0?{}:{memoryReviewer:c}}),context:e,callbacks:o}}a(Bc,"createMemoryCommandRuntime");async function qc(e,o){let n=Ec(o);if(n.error!==void 0||n.statement.length===0){console.log(m.yellow(`
135
+ `))}a(Jc,"printDetailedHelp");function Qc(e,o){let n=_c(e),t=o.createKodaXOptions?.(),r=t?.context?.executionCwd??e.runtimeInfo?.executionCwd??n,s=t===void 0?void 0:t.context?.memoryIdentity??Yn(t,r,e.sessionId??"memory-command"),l=s?.projectId===void 0?Wr(n):Or(s,"project"),c=t?.memoryReviewer;return{cwd:n,memoryDir:l,entrypointPath:Y.join(l,"MEMORY.md"),controller:Br({cwd:r,...s===void 0?{}:{identity:s},...c===void 0?{}:{memoryReviewer:c}}),context:e,callbacks:o}}a(Qc,"createMemoryCommandRuntime");async function Zc(e,o){let n=Oc(o);if(n.error!==void 0||n.statement.length===0){console.log(m.yellow(`
136
136
  [memory] ${n.error??"missing text to remember"}.
137
- `));return}if(n.claimKey===void 0){console.log(m.yellow("\n[memory] `/memory remember` requires --key so future corrections and conflicts address the same claim.\n"));return}Hc(await e.controller.remember({statement:n.statement,claimKind:n.claimKind,claimKey:n.claimKey,evidenceRef:`user-command:${e.context.sessionId??"interactive"}`}))}a(qc,"runRememberCommand");async function Gc(e,o){let n=await St(e.controller,o);if(n===void 0||o===void 0){console.log(m.yellow("\n[memory] use the exact ref from `/memory list`; numbered aliases are read-only.\n"));return}let t=await e.controller.forgetRef(o,n.bodyFingerprint);console.log(t.acknowledged?m.green(`
137
+ `));return}if(n.claimKey===void 0){console.log(m.yellow("\n[memory] `/memory remember` requires --key so future corrections and conflicts address the same claim.\n"));return}Yc(await e.controller.remember({statement:n.statement,claimKind:n.claimKind,claimKey:n.claimKey,evidenceRef:`user-command:${e.context.sessionId??"interactive"}`}))}a(Zc,"runRememberCommand");async function ed(e,o){let n=await Rt(e.controller,o);if(n===void 0||o===void 0){console.log(m.yellow("\n[memory] use the exact ref from `/memory list`; numbered aliases are read-only.\n"));return}let t=await e.controller.forgetRef(o,n.bodyFingerprint);console.log(t.acknowledged?m.green(`
138
138
  [memory] Memory forgotten: ${n.title??n.id}.
139
139
  `):m.yellow(`
140
140
  [memory] Memory was not forgotten: ${t.warnings[0]??n.id}.
141
- `))}a(Gc,"runForgetCommand");async function zc(e,o){if(o===void 0){console.log(m.yellow(`
141
+ `))}a(ed,"runForgetCommand");async function od(e,o){if(o===void 0){console.log(m.yellow(`
142
142
  [memory] choose memory:<number>, decision:<number>, or an exact ref.
143
- `));return}let n=await St(e.controller,o,!0);if(n!==void 0){let r=await e.controller.readRef(n);console.log(m.cyan(`
144
- [memory] ${n.title??n.id}`)),console.log(m.dim(` ref: ${qo(n)}`)),console.log(`
145
- ${go(r.body).body.trim()}
146
- `);return}let t=await js(e.controller,o,!0);if(t===void 0){console.log(m.yellow(`
143
+ `));return}let n=await Rt(e.controller,o,!0);if(n!==void 0){let r=await e.controller.readRef(n);console.log(m.cyan(`
144
+ [memory] ${n.title??n.id}`)),console.log(m.dim(` ref: ${zo(n)}`)),console.log(`
145
+ ${wo(r.body).body.trim()}
146
+ `);return}let t=await qs(e.controller,o,!0);if(t===void 0){console.log(m.yellow(`
147
147
  [memory] Memory or decision not found: ${o}
148
- `));return}jc(t),Yc(e.cwd,t)}a(zc,"runShowCommand");async function Xc(e,o,n,t){let r=await js(e.controller,n);if(r===void 0){console.log(m.yellow("\n[memory] use the exact decision ref from `/memory show`; numbered aliases are read-only.\n"));return}let s=Jc(e.cwd,r.id);if(s===void 0){console.log(m.yellow(`
148
+ `));return}zc(t),rd(e.cwd,t)}a(od,"runShowCommand");async function nd(e,o,n,t){let r=await qs(e.controller,n);if(r===void 0){console.log(m.yellow("\n[memory] use the exact decision ref from `/memory show`; numbered aliases are read-only.\n"));return}let s=id(e.cwd,r.id);if(s===void 0){console.log(m.yellow(`
149
149
  [memory] preview required before ${o}: /memory show ${n??r.id}
150
- `));return}if(Ve.delete(At(e.cwd,r.id)),o==="approve"){Uc(await e.controller.approveProposal(r.id,s.fingerprints,s.revision));return}Fc(await e.controller.rejectProposal(r.id,t,s.revision))}a(Xc,"runDecisionCommand");async function Vc(e,o,n){if(o==="help"||o==="--help"||o==="-h")return Ms();if(o==="list")return Cc(e.controller);if(o==="remember")return qc(e,n.slice(1));if(o==="forget")return Gc(e,n[1]);if(o==="doctor"||o==="status")return Pc(e.memoryDir,e.entrypointPath,e.context,e.callbacks,e.cwd);if(o==="reviews")return _c(e.context,e.callbacks,e.cwd,n[1]);if(o==="pending"||o==="inbox")return console.log(m.dim("[memory] `pending` is a compatibility alias for /memory decisions.")),Ts(await e.controller.listInbox());if(o==="decisions"||o==="proposals")return Ts(await e.controller.listInbox());if(o==="show")return zc(e,n[1]);if(o==="approve"||o==="reject")return Xc(e,o,n[1],n.slice(2).join(" ").trim());if(o==="rebuild")return Lc(e.memoryDir,e.entrypointPath);if(o==="open")return Wc(e.controller,e.memoryDir,n[1],e.callbacks.openExternalPath);console.log(m.yellow(`
151
- [memory] unknown subcommand: ${o}`)),Ms()}a(Vc,"runMemorySubcommand");var xt={name:"memory",description:"View or manage durable Memory",usage:"/memory [list|remember|forget|decisions|show|approve|reject|doctor|open|help]",argumentHint:"list | remember <text> | forget <ref> | decisions | show <ref> | approve <ref> | reject <ref> [reason] | doctor | open | help",handler:a(async(e,o,n)=>{await Vc(Bc(o,n),(e[0]??"list").toLowerCase(),e)},"handler"),detailedHelp:Kc};function At(e,o){return`${e}\0${o}`}a(At,"previewCacheKey");function Yc(e,o){Zc(Date.now()),Ve.set(At(e,o.id),{fingerprints:o.expectedFingerprints,revision:Ur(o),createdAtMs:Date.now()})}a(Yc,"cacheProposalPreview");function Jc(e,o){let n=At(e,o),t=Ve.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>_s){Ve.delete(n);return}return t}}a(Jc,"readCachedProposalPreview");function Zc(e){for(let[o,n]of Ve)e-n.createdAtMs>_s&&Ve.delete(o)}a(Zc,"pruneExpiredPreviewFingerprints");import E from"chalk";function Us(){console.log(`
150
+ `));return}if(Ve.delete(Et(e.cwd,r.id)),o==="approve"){Xc(await e.controller.approveProposal(r.id,s.fingerprints,s.revision));return}Vc(await e.controller.rejectProposal(r.id,t,s.revision))}a(nd,"runDecisionCommand");async function td(e,o,n){if(o==="help"||o==="--help"||o==="-h")return Ds();if(o==="list")return Wc(e.controller);if(o==="remember")return Zc(e,n.slice(1));if(o==="forget")return ed(e,n[1]);if(o==="doctor"||o==="status")return Dc(e.memoryDir,e.entrypointPath,e.context,e.callbacks,e.cwd);if(o==="reviews")return Fc(e.context,e.callbacks,e.cwd,n[1]);if(o==="pending"||o==="inbox")return console.log(m.dim("[memory] `pending` is a compatibility alias for /memory decisions.")),Ns(await e.controller.listInbox());if(o==="decisions"||o==="proposals")return Ns(await e.controller.listInbox());if(o==="show")return od(e,n[1]);if(o==="approve"||o==="reject")return nd(e,o,n[1],n.slice(2).join(" ").trim());if(o==="rebuild")return Hc(e.memoryDir,e.entrypointPath);if(o==="open")return Kc(e.controller,e.memoryDir,n[1],e.callbacks.openExternalPath);console.log(m.yellow(`
151
+ [memory] unknown subcommand: ${o}`)),Ds()}a(td,"runMemorySubcommand");var Ct={name:"memory",description:"View or manage durable Memory",usage:"/memory [list|remember|forget|decisions|show|approve|reject|doctor|open|help]",argumentHint:"list | remember <text> | forget <ref> | decisions | show <ref> | approve <ref> | reject <ref> [reason] | doctor | open | help",handler:a(async(e,o,n)=>{await td(Qc(o,n),(e[0]??"list").toLowerCase(),e)},"handler"),detailedHelp:Jc};function Et(e,o){return`${e}\0${o}`}a(Et,"previewCacheKey");function rd(e,o){sd(Date.now()),Ve.set(Et(e,o.id),{fingerprints:o.expectedFingerprints,revision:Kr(o),createdAtMs:Date.now()})}a(rd,"cacheProposalPreview");function id(e,o){let n=Et(e,o),t=Ve.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>js){Ve.delete(n);return}return t}}a(id,"readCachedProposalPreview");function sd(e){for(let[o,n]of Ve)e-n.createdAtMs>js&&Ve.delete(o)}a(sd,"pruneExpiredPreviewFingerprints");import E from"chalk";function Gs(){console.log(`
152
152
  ${E.bold("/goal")} \u2014 persistent session goal
153
153
 
154
154
  ${E.bold("Subcommands:")}
@@ -164,20 +164,20 @@ ${E.bold("Notes:")}
164
164
  - Token budget is optional; set it only when you want a hard ceiling.
165
165
  - update_goal({complete}) is verifier-gated; the agent cannot
166
166
  self-declare done without runtime confirmation.
167
- `.trim())}a(Us,"printHelp");function Qc(e){let o=null,n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!Vn(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(s.startsWith("--tokens=")){let l=s.slice(9),c=Number(l);if(!Vn(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(s.startsWith("--"))return{error:`unknown flag: ${s}`};n.push(s)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(Qc,"parseCreateArgs");function ed(e){if(!e)return E.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${E.bold("Goal:")} ${e.objective}`,`${E.bold("Status:")} ${e.status}`,`${E.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${E.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${E.bold("Token budget:")} ${E.dim("none")}`);return o.push(`${E.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${E.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
168
- `)}a(ed,"renderStatus");async function Co(e,o,n,t){if(!e.lineage)throw new Error("session lineage unavailable \u2014 open or start a new session before using /goal");e.lineage=Br(e.lineage,n,t),await o.saveSession()}a(Co,"persist");async function od(e,o,n){if(!o.lineage){console.log(E.red("[/goal] no active session lineage"));return}let t=Ue(o.lineage);if(t&&t.status!=="complete"){console.log(E.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=Qc(e);if("error"in r){console.log(E.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await Co(o,n,null,"cleared");let s=Xr(r.objective,r.tokenBudget);await Co(o,n,s,"created"),console.log(E.green(`[/goal] created: "${s.objective}"`)),s.tokenBudget!==null&&console.log(E.dim(` budget: ${s.tokenBudget} tokens`))}catch(s){let l=s instanceof Error?s.message:String(s);console.log(E.red(`[/goal] ${l}`))}}a(od,"doCreate");async function nd(e){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let o=Ue(e.lineage);console.log(ed(o))}a(nd,"doStatus");async function td(e,o){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=Ue(e.lineage);if(!n){console.log(E.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(E.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=Vr(n);await Co(e,o,t,"paused"),console.log(E.green("[/goal] paused"))}a(td,"doPause");async function rd(e,o){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=Ue(e.lineage);if(!n){console.log(E.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(E.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=Yr(n);await Co(e,o,t,"resumed"),console.log(E.green("[/goal] resumed"))}a(rd,"doResume");async function id(e,o){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}if(!Ue(e.lineage)){console.log(E.yellow("[/goal] no goal to clear"));return}await Co(e,o,null,"cleared"),console.log(E.green("[/goal] cleared"))}a(id,"doClear");var Fs={name:"goal",description:"Manage a persistent session goal (FEATURE_192)",usage:"/goal [<objective> [--tokens N] | status | pause | resume | clear | help]",argumentHint:"<objective> | status | pause | resume | clear | help",handler:a(async(e,o,n)=>{let t=(e[0]??"status").toLowerCase();if(t==="help"||t==="--help"||t==="-h"){Us();return}if(t==="status"){await nd(o);return}if(t==="pause"){await td(o,n);return}if(t==="resume"){await rd(o,n);return}if(t==="clear"){await id(o,n);return}await od(e,o,n)},"handler"),detailedHelp:Us};import{existsSync as ua}from"node:fs";import{join as oe}from"node:path";import h from"chalk";import Et from"path";import{createHash as fd}from"crypto";import{execFile as sd}from"child_process";import pn from"fs";import Y from"path";import{promisify as ad}from"util";var ld=ad(sd);function q(e){if(!(!e||!e.trim()))return Y.resolve(e).replace(/\\/g,"/")}a(q,"normalizePath");async function Ye(e,o,n=5e3){try{let{stdout:t}=await ld("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576,timeout:n}),r=t.trim();return r||void 0}catch{return}}a(Ye,"gitStdout");function cd(e){let o=Y.resolve(e);for(;;){let n=Y.join(o,".git");try{let r=pn.statSync(n);if(r.isDirectory()){let s=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:s,workspaceRoot:s}}if(r.isFile()){let s=/^gitdir:\s*(.+)$/im.exec(pn.readFileSync(n,"utf8"));if(s?.[1]){let l=Y.resolve(o,s[1].trim()),c;try{c=Y.resolve(l,pn.readFileSync(Y.join(l,"commondir"),"utf8").trim())}catch{}let d=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:Rt(c)??d,workspaceRoot:d}}}}catch{}let t=Y.dirname(o);if(t===o)return;o=t}}a(cd,"filesystemWorkspaceIdentity");function dd(e){let[o,n]=e?.split(/\r?\n/).map(s=>s.trim())??[],t=q(o);if(!t)return;let r=n?q(Y.isAbsolute(n)?n:Y.resolve(t,n)):void 0;return{canonicalRoot:Rt(r)??t,workspaceRoot:t}}a(dd,"parseProjectIdentityOutput");async function ud(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=cd(o);return n!==void 0?n:dd(await Ye(o,["rev-parse","--path-format=absolute","--show-toplevel","--git-common-dir"],e.timeoutMs??2e3))??{canonicalRoot:o,workspaceRoot:o}}a(ud,"resolveWorkspaceProjectIdentity");async function Zg(e={}){return(await ud(e)).canonicalRoot}a(Zg,"resolveCanonicalWorkspaceRoot");function Rt(e){let o=q(e);if(o)return Y.posix.basename(o)===".git"?Y.posix.dirname(o):o}a(Rt,"deriveCanonicalRepoRoot");async function Qg(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=q(await Ye(o,["rev-parse","--show-toplevel"])),t=n??o,[r,s]=await Promise.all([Ye(t,["rev-parse","--path-format=absolute","--git-common-dir"]).then(l=>l??Ye(t,["rev-parse","--git-common-dir"])),Ye(t,["branch","--show-current"]).then(l=>l??Ye(t,["rev-parse","--abbrev-ref","HEAD"]))]);return{canonicalRepoRoot:Rt(r)??n,workspaceRoot:n,executionCwd:o,branch:s&&s!=="HEAD"?s:void 0,workspaceKind:e.workspaceKind??"detected"}}a(Qg,"inspectWorkspaceRuntime");function ew(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:q(e.canonicalRepoRoot)===q(o.canonicalRepoRoot)}a(ew,"isSameCanonicalRepo");function ow(e){return!!(e?.workspaceRoot&&pn.existsSync(e.workspaceRoot))}a(ow,"workspaceExists");function Hs(e){let o=q(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=q(e.runtimeInfo?.executionCwd??o),t=q(e.runtimeInfo?.canonicalRepoRoot??o);if(!(!o&&!n&&!t))return{canonicalRepoRoot:t,workspaceRoot:o,executionCwd:n,branch:e.runtimeInfo?.branch,workspaceKind:e.runtimeInfo?.workspaceKind??"detected"}}a(Hs,"resolveSessionRuntimeInfo");function Ct(e){if(!e?.workspaceRoot)return"No git workspace detected";let o=e.branch?` @ ${e.branch}`:"",n=e.workspaceKind??"detected";return`${e.workspaceRoot}${o} [${n}]`}a(Ct,"formatWorkspaceTruth");var Ks="_unknown",Bs=80;function md(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(md,"caseFold");function pd(e){return md(Et.resolve(e).replace(/\\/g,"/"))}a(pd,"normalizeRoot");function qs(e){return fd("sha256").update(e).digest("hex").slice(0,10)}a(qs,"shortHash");function gd(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Bs?o.slice(o.length-Bs):o}a(gd,"slugify");function ye(e){if(!e||!e.trim())return{key:Ks,canonicalRoot:null,displayName:Ks};let o=pd(e),n=gd(o),t=n?`${n}-${qs(o)}`:qs(o),r=Et.basename(Et.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(ye,"deriveProjectKeyFromRoot");function wd(e){let o=Hs({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return ye(n)}a(wd,"deriveProjectKeyFromData");function aw(e,o){let n=wd(e).canonicalRoot;return n!==null&&o.some(t=>ye(t).canonicalRoot===n)}a(aw,"sessionProjectMatchesAnyRoot");import Ie from"chalk";function gn(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(gn,"resolveLearningCommandCwd");function Je(e=""){process.stdout.write(`${e}
169
- `)}a(Je,"writeOutput");function hd(e,o){return o==="skill"?e.proposal.destination==="skill_patch"||e.proposal.destination==="skill_create":o==="workflow"?e.proposal.destination==="workflow_handoff":e.proposal.destination==="memdir_handoff"||e.proposal.destination==="reasoning_handoff"}a(hd,"matchesFilter");function yd(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(yd,"headingForFilter");function vd(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.memoryKind}`;case"reasoning_handoff":return o.title}}a(vd,"proposalLabel");async function wn(e,o){let n=Bo(e),t=await Ko(n);for(let s of t.warnings)Je(Ie.yellow(`[learn] ${s}`));let r=t.proposals.filter(s=>s.status==="pending").filter(s=>hd(s,o));if(Je(Ie.cyan(`
170
- [learn] ${yd(o)}`)),Je(Ie.dim(` ${n}`)),r.length===0){Je(Ie.dim(` (none)
171
- `));return}for(let s of r)Je(` ${Ie.cyan(s.proposalId)} ${Ie.dim(`[${s.proposal.destination}]`)} ${vd(s)}`);Je(Ie.dim(`
167
+ `.trim())}a(Gs,"printHelp");function ad(e){let o=null,n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!Jn(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(s.startsWith("--tokens=")){let l=s.slice(9),c=Number(l);if(!Jn(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(s.startsWith("--"))return{error:`unknown flag: ${s}`};n.push(s)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(ad,"parseCreateArgs");function ld(e){if(!e)return E.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${E.bold("Goal:")} ${e.objective}`,`${E.bold("Status:")} ${e.status}`,`${E.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${E.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${E.bold("Token budget:")} ${E.dim("none")}`);return o.push(`${E.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${E.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
168
+ `)}a(ld,"renderStatus");async function Io(e,o,n,t){if(!e.lineage)throw new Error("session lineage unavailable \u2014 open or start a new session before using /goal");e.lineage=zr(e.lineage,n,t),await o.saveSession()}a(Io,"persist");async function cd(e,o,n){if(!o.lineage){console.log(E.red("[/goal] no active session lineage"));return}let t=Ue(o.lineage);if(t&&t.status!=="complete"){console.log(E.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=ad(e);if("error"in r){console.log(E.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await Io(o,n,null,"cleared");let s=Zr(r.objective,r.tokenBudget);await Io(o,n,s,"created"),console.log(E.green(`[/goal] created: "${s.objective}"`)),s.tokenBudget!==null&&console.log(E.dim(` budget: ${s.tokenBudget} tokens`))}catch(s){let l=s instanceof Error?s.message:String(s);console.log(E.red(`[/goal] ${l}`))}}a(cd,"doCreate");async function dd(e){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let o=Ue(e.lineage);console.log(ld(o))}a(dd,"doStatus");async function ud(e,o){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=Ue(e.lineage);if(!n){console.log(E.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(E.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=ei(n);await Io(e,o,t,"paused"),console.log(E.green("[/goal] paused"))}a(ud,"doPause");async function fd(e,o){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=Ue(e.lineage);if(!n){console.log(E.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(E.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=oi(n);await Io(e,o,t,"resumed"),console.log(E.green("[/goal] resumed"))}a(fd,"doResume");async function md(e,o){if(!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}if(!Ue(e.lineage)){console.log(E.yellow("[/goal] no goal to clear"));return}await Io(e,o,null,"cleared"),console.log(E.green("[/goal] cleared"))}a(md,"doClear");var zs={name:"goal",description:"Manage a persistent session goal (FEATURE_192)",usage:"/goal [<objective> [--tokens N] | status | pause | resume | clear | help]",argumentHint:"<objective> | status | pause | resume | clear | help",handler:a(async(e,o,n)=>{let t=(e[0]??"status").toLowerCase();if(t==="help"||t==="--help"||t==="-h"){Gs();return}if(t==="status"){await dd(o);return}if(t==="pause"){await ud(o,n);return}if(t==="resume"){await fd(o,n);return}if(t==="clear"){await md(o,n);return}await cd(e,o,n)},"handler"),detailedHelp:Gs};import{existsSync as ha}from"node:fs";import{join as te}from"node:path";import h from"chalk";import Pt from"path";import{createHash as kd}from"crypto";import{execFile as pd}from"child_process";import hn from"fs";import J from"path";import{promisify as gd}from"util";var wd=gd(pd);function q(e){if(!(!e||!e.trim()))return J.resolve(e).replace(/\\/g,"/")}a(q,"normalizePath");async function Ye(e,o,n=5e3){try{let{stdout:t}=await wd("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576,timeout:n}),r=t.trim();return r||void 0}catch{return}}a(Ye,"gitStdout");function hd(e){let o=J.resolve(e);for(;;){let n=J.join(o,".git");try{let r=hn.statSync(n);if(r.isDirectory()){let s=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:s,workspaceRoot:s}}if(r.isFile()){let s=/^gitdir:\s*(.+)$/im.exec(hn.readFileSync(n,"utf8"));if(s?.[1]){let l=J.resolve(o,s[1].trim()),c;try{c=J.resolve(l,hn.readFileSync(J.join(l,"commondir"),"utf8").trim())}catch{}let d=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:It(c)??d,workspaceRoot:d}}}}catch{}let t=J.dirname(o);if(t===o)return;o=t}}a(hd,"filesystemWorkspaceIdentity");function yd(e){let[o,n]=e?.split(/\r?\n/).map(s=>s.trim())??[],t=q(o);if(!t)return;let r=n?q(J.isAbsolute(n)?n:J.resolve(t,n)):void 0;return{canonicalRoot:It(r)??t,workspaceRoot:t}}a(yd,"parseProjectIdentityOutput");async function vd(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=hd(o);return n!==void 0?n:yd(await Ye(o,["rev-parse","--path-format=absolute","--show-toplevel","--git-common-dir"],e.timeoutMs??2e3))??{canonicalRoot:o,workspaceRoot:o}}a(vd,"resolveWorkspaceProjectIdentity");async function mw(e={}){return(await vd(e)).canonicalRoot}a(mw,"resolveCanonicalWorkspaceRoot");function It(e){let o=q(e);if(o)return J.posix.basename(o)===".git"?J.posix.dirname(o):o}a(It,"deriveCanonicalRepoRoot");async function pw(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=q(await Ye(o,["rev-parse","--show-toplevel"])),t=n??o,[r,s]=await Promise.all([Ye(t,["rev-parse","--path-format=absolute","--git-common-dir"]).then(l=>l??Ye(t,["rev-parse","--git-common-dir"])),Ye(t,["branch","--show-current"]).then(l=>l??Ye(t,["rev-parse","--abbrev-ref","HEAD"]))]);return{canonicalRepoRoot:It(r)??n,workspaceRoot:n,executionCwd:o,branch:s&&s!=="HEAD"?s:void 0,workspaceKind:e.workspaceKind??"detected"}}a(pw,"inspectWorkspaceRuntime");function gw(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:q(e.canonicalRepoRoot)===q(o.canonicalRepoRoot)}a(gw,"isSameCanonicalRepo");function ww(e){return!!(e?.workspaceRoot&&hn.existsSync(e.workspaceRoot))}a(ww,"workspaceExists");function Xs(e){let o=q(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=q(e.runtimeInfo?.executionCwd??o),t=q(e.runtimeInfo?.canonicalRepoRoot??o);if(!(!o&&!n&&!t))return{canonicalRepoRoot:t,workspaceRoot:o,executionCwd:n,branch:e.runtimeInfo?.branch,workspaceKind:e.runtimeInfo?.workspaceKind??"detected"}}a(Xs,"resolveSessionRuntimeInfo");function Tt(e){if(!e?.workspaceRoot)return"No git workspace detected";let o=e.branch?` @ ${e.branch}`:"",n=e.workspaceKind??"detected";return`${e.workspaceRoot}${o} [${n}]`}a(Tt,"formatWorkspaceTruth");var Vs="_unknown",Ys=80;function bd(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(bd,"caseFold");function $d(e){return bd(Pt.resolve(e).replace(/\\/g,"/"))}a($d,"normalizeRoot");function Js(e){return kd("sha256").update(e).digest("hex").slice(0,10)}a(Js,"shortHash");function Sd(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Ys?o.slice(o.length-Ys):o}a(Sd,"slugify");function ke(e){if(!e||!e.trim())return{key:Vs,canonicalRoot:null,displayName:Vs};let o=$d(e),n=Sd(o),t=n?`${n}-${Js(o)}`:Js(o),r=Pt.basename(Pt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(ke,"deriveProjectKeyFromRoot");function xd(e){let o=Xs({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return ke(n)}a(xd,"deriveProjectKeyFromData");function $w(e,o){let n=xd(e).canonicalRoot;return n!==null&&o.some(t=>ke(t).canonicalRoot===n)}a($w,"sessionProjectMatchesAnyRoot");import Te from"chalk";function yn(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(yn,"resolveLearningCommandCwd");function Je(e=""){process.stdout.write(`${e}
169
+ `)}a(Je,"writeOutput");function Ad(e,o){return o==="skill"?e.proposal.destination==="skill_patch"||e.proposal.destination==="skill_create":o==="workflow"?e.proposal.destination==="workflow_handoff":e.proposal.destination==="memdir_handoff"||e.proposal.destination==="reasoning_handoff"}a(Ad,"matchesFilter");function Rd(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(Rd,"headingForFilter");function Cd(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.memoryKind}`;case"reasoning_handoff":return o.title}}a(Cd,"proposalLabel");async function vn(e,o){let n=Go(e),t=await qo(n);for(let s of t.warnings)Je(Te.yellow(`[learn] ${s}`));let r=t.proposals.filter(s=>s.status==="pending").filter(s=>Ad(s,o));if(Je(Te.cyan(`
170
+ [learn] ${Rd(o)}`)),Je(Te.dim(` ${n}`)),r.length===0){Je(Te.dim(` (none)
171
+ `));return}for(let s of r)Je(` ${Te.cyan(s.proposalId)} ${Te.dim(`[${s.proposal.destination}]`)} ${Cd(s)}`);Je(Te.dim(`
172
172
  Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
173
- `))}a(wn,"printLearningPendingForFilter");import{join as iu}from"node:path";import En from"chalk";import{existsSync as le,readdirSync as Md,readFileSync as kn,writeFileSync as bw}from"node:fs";import{dirname as _d,join as ee}from"node:path";import C from"chalk";import{existsSync as kd,readFileSync as bd}from"node:fs";var Gs=4,zs=180,Xs=6e3,Vs=360,It="[truncated]";function Pe(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Pe,"detectWorkflowLocale");function Eo(...e){return Pe(e.filter(o=>typeof o=="string").join(`
174
- `))}a(Eo,"inferWorkflowLocaleFromParts");function ve(e,o={}){let n=e.trim();return o.full===!0||n.length<=Xs?n:`${n.slice(0,Xs).trimEnd()}
173
+ `))}a(vn,"printLearningPendingForFilter");import{join as mu}from"node:path";import Pn from"chalk";import{existsSync as de,readdirSync as Ud,readFileSync as Sn,writeFileSync as Ow}from"node:fs";import{dirname as Fd,join as ne}from"node:path";import C from"chalk";import{existsSync as Ed,readFileSync as Id}from"node:fs";var Qs=4,Zs=180,ea=6e3,oa=360,Mt="[truncated]";function Pe(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Pe,"detectWorkflowLocale");function To(...e){return Pe(e.filter(o=>typeof o=="string").join(`
174
+ `))}a(To,"inferWorkflowLocaleFromParts");function be(e,o={}){let n=e.trim();return o.full===!0||n.length<=ea?n:`${n.slice(0,ea).trimEnd()}
175
175
 
176
- ${It}`}a(ve,"trimResultPreview");function Pt(e){return e.includes(It)}a(Pt,"isWorkflowResultPreviewTruncated");function $d(e,o){return o==="zh"?`[\u7ED3\u679C\u9884\u89C8\u5DF2\u622A\u65AD\u3002\u5B8C\u6574\u7ED3\u679C\u8BF7\u7528 /workflow show --full ${e} \u67E5\u770B\uFF1Bartifact \u6587\u4EF6\u4E5F\u4FDD\u5B58\u5728\u672C\u6B21 run \u76EE\u5F55\u3002]`:`[Result preview truncated. Use /workflow show --full ${e} for the complete result; artifacts are also saved in the run directory.]`}a($d,"formatWorkflowResultTruncationHint");function Ze(e,o,n){let t=e.lastIndexOf(It);return t<0?e:`${e.slice(0,t).trimEnd()}
176
+ ${Mt}`}a(be,"trimResultPreview");function _t(e){return e.includes(Mt)}a(_t,"isWorkflowResultPreviewTruncated");function Td(e,o){return o==="zh"?`[\u7ED3\u679C\u9884\u89C8\u5DF2\u622A\u65AD\u3002\u5B8C\u6574\u7ED3\u679C\u8BF7\u7528 /workflow show --full ${e} \u67E5\u770B\uFF1Bartifact \u6587\u4EF6\u4E5F\u4FDD\u5B58\u5728\u672C\u6B21 run \u76EE\u5F55\u3002]`:`[Result preview truncated. Use /workflow show --full ${e} for the complete result; artifacts are also saved in the run directory.]`}a(Td,"formatWorkflowResultTruncationHint");function Qe(e,o,n){let t=e.lastIndexOf(Mt);return t<0?e:`${e.slice(0,t).trimEnd()}
177
177
 
178
- ${$d(o,n)}`}a(Ze,"replaceWorkflowResultTruncationMarker");function Sd(e){let o=e.replace(/\s+/g," ").trim();return o.length<=Vs?o:`${o.slice(0,Vs).trimEnd()}...`}a(Sd,"trimWorkflowLaunchSummary");function ke(e,o={}){if(typeof e=="string"&&e.trim().length>0)return ve(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return ve(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return ve(t,o)}}if(e&&typeof e=="object")for(let n of["summary","report","text","result"]){let t=e[n];if(typeof t=="string"&&t.trim().length>0)return ve(t,o)}if(e!=null)try{let n=JSON.stringify(e,null,2);if(typeof n=="string"){let t=n.trim();if(t.length>0&&t!=="{}"&&t!=="[]"&&t!=='""')return ve(n,o)}}catch{}}a(ke,"formatResult");function Io(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&J(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>J(d,"name")==="synthesize")??n[0],s=r?J(r,"summary"):void 0;if(s)return ve(s,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?J(l,"summary")??J(l,"error"):void 0;return c?ve(c,o):void 0}a(Io,"formatFinalEventSummary");function xd(e,o={}){if(!(!e.path||!kd(e.path)))try{let n=JSON.parse(bd(e.path,"utf8")),t=ke(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?ve(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(xd,"formatArtifactPreview");function Qe(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let s=e[r];if(!s)continue;let l=xd(s,n);if(l)return o==="zh"?`\u4EA7\u7269 ${s.name}:
178
+ ${Td(o,n)}`}a(Qe,"replaceWorkflowResultTruncationMarker");function Pd(e){let o=e.replace(/\s+/g," ").trim();return o.length<=oa?o:`${o.slice(0,oa).trimEnd()}...`}a(Pd,"trimWorkflowLaunchSummary");function $e(e,o={}){if(typeof e=="string"&&e.trim().length>0)return be(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return be(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return be(t,o)}}if(e&&typeof e=="object")for(let n of["summary","report","text","result"]){let t=e[n];if(typeof t=="string"&&t.trim().length>0)return be(t,o)}if(e!=null)try{let n=JSON.stringify(e,null,2);if(typeof n=="string"){let t=n.trim();if(t.length>0&&t!=="{}"&&t!=="[]"&&t!=='""')return be(n,o)}}catch{}}a($e,"formatResult");function Po(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&Q(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>Q(d,"name")==="synthesize")??n[0],s=r?Q(r,"summary"):void 0;if(s)return be(s,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?Q(l,"summary")??Q(l,"error"):void 0;return c?be(c,o):void 0}a(Po,"formatFinalEventSummary");function Md(e,o={}){if(!(!e.path||!Ed(e.path)))try{let n=JSON.parse(Id(e.path,"utf8")),t=$e(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?be(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(Md,"formatArtifactPreview");function Ze(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let s=e[r];if(!s)continue;let l=Md(s,n);if(l)return o==="zh"?`\u4EA7\u7269 ${s.name}:
179
179
  ${l}`:`Artifact ${s.name}:
180
- ${l}`}if(e.length===0)return;let t=e.map(r=>r.name).join(", ");return o==="zh"?`\u5DF2\u751F\u6210\u4EA7\u7269: ${t}`:`Artifacts created: ${t}`}a(Qe,"formatArtifactResult");function Tt(e){let o=e.resultText?Ze(e.resultText,e.runId,e.locale):void 0;if(e.locale==="zh"){let t=e.resultText&&e.isFallbackPreview!==!0?`Workflow \u5DF2\u5B8C\u6210\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`:`Workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7ED3\u679C\u5951\u7EA6\u5931\u8D25\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`;if(o){let r=e.isFallbackPreview===!0?"\u7ED3\u679C\u5951\u7EA6\u5F02\u5E38\uFF1Aworkflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u5B8C\u6574\u6700\u7EC8\u7ED3\u679C\u3002\u4EE5\u4E0B\u662F\u6700\u540E\u7EFC\u5408\u8F93\u51FA\uFF1A":"\u6700\u7EC8\u7ED3\u679C\uFF1A";return`${t}
180
+ ${l}`}if(e.length===0)return;let t=e.map(r=>r.name).join(", ");return o==="zh"?`\u5DF2\u751F\u6210\u4EA7\u7269: ${t}`:`Artifacts created: ${t}`}a(Ze,"formatArtifactResult");function Lt(e){let o=e.resultText?Qe(e.resultText,e.runId,e.locale):void 0;if(e.locale==="zh"){let t=e.resultText&&e.isFallbackPreview!==!0?`Workflow \u5DF2\u5B8C\u6210\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`:`Workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7ED3\u679C\u5951\u7EA6\u5931\u8D25\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`;if(o){let r=e.isFallbackPreview===!0?"\u7ED3\u679C\u5951\u7EA6\u5F02\u5E38\uFF1Aworkflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u5B8C\u6574\u6700\u7EC8\u7ED3\u679C\u3002\u4EE5\u4E0B\u662F\u6700\u540E\u7EFC\u5408\u8F93\u51FA\uFF1A":"\u6700\u7EC8\u7ED3\u679C\uFF1A";return`${t}
181
181
 
182
182
  ${r}
183
183
 
@@ -187,89 +187,89 @@ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7
187
187
  ${t}
188
188
 
189
189
  ${o}`}return[n,"","The workflow ended, but the generated script violated the result contract: it did not return displayable final text or a previewable artifact. This is not a normal completion state; fix the generated script and rerun it."].join(`
190
- `)}a(Tt,"formatWorkflowCompletionAnswer");function Mt(e){let o=e.summary.phases.length>0?e.summary.phases.join(" -> "):"dynamic",n=e.summary.maxAgents===null?"unbounded":String(e.summary.maxAgents),t=e.summary.plannedAgents===void 0?e.locale==="zh"?`\u6700\u591A ${n} \u4E2A\u667A\u80FD\u4F53`:`up to ${n} agents`:e.locale==="zh"?`\u8BA1\u5212\u7EA6 ${e.summary.plannedAgents} \u4E2A\u667A\u80FD\u4F53\uFF0C\u5B89\u5168\u4E0A\u9650 ${n}`:`about ${e.summary.plannedAgents} planned agents, safety cap ${n}`,r=e.summary.maxConcurrency===null?"unbounded":String(e.summary.maxConcurrency),s=Sd(e.approvalSummary);if(e.locale==="zh"){let c=e.summary.writesFiles?"\u5982\u9700\u5199\u6587\u4EF6\uFF0C\u4ECD\u4F1A\u7ECF\u8FC7\u6B63\u5E38\u6743\u9650\u786E\u8BA4\u3002":"\u8FD9\u662F\u53EA\u8BFB\u63A2\u67E5\uFF0C\u4E0D\u4F1A\u4E3B\u52A8\u4FEE\u6539\u6587\u4EF6\u3002";return[`\u6211\u4F1A\u7528 workflow \u505A\u8FD9\u6B21\u4EFB\u52A1\uFF0C\u5DF2\u542F\u52A8 ${e.summary.name}\uFF08${e.runId}\uFF09\u3002`,`\u8BA1\u5212\uFF1A${s}`,`\u9636\u6BB5\uFF1A${o}\uFF1B\u89C4\u6A21\uFF1A${t}\uFF0C\u5E76\u53D1 ${r}\u3002${c}`,"\u8FD0\u884C\u8FC7\u7A0B\u4F1A\u5728\u4E0B\u65B9\u52A8\u6001\u66F4\u65B0\uFF0C\u5B8C\u6210\u540E\u6211\u4F1A\u76F4\u63A5\u6C47\u603B\u7ED3\u8BBA\u3002"].join(`
190
+ `)}a(Lt,"formatWorkflowCompletionAnswer");function Wt(e){let o=e.summary.phases.length>0?e.summary.phases.join(" -> "):"dynamic",n=e.summary.maxAgents===null?"unbounded":String(e.summary.maxAgents),t=e.summary.plannedAgents===void 0?e.locale==="zh"?`\u6700\u591A ${n} \u4E2A\u667A\u80FD\u4F53`:`up to ${n} agents`:e.locale==="zh"?`\u8BA1\u5212\u7EA6 ${e.summary.plannedAgents} \u4E2A\u667A\u80FD\u4F53\uFF0C\u5B89\u5168\u4E0A\u9650 ${n}`:`about ${e.summary.plannedAgents} planned agents, safety cap ${n}`,r=e.summary.maxConcurrency===null?"unbounded":String(e.summary.maxConcurrency),s=Pd(e.approvalSummary);if(e.locale==="zh"){let c=e.summary.writesFiles?"\u5982\u9700\u5199\u6587\u4EF6\uFF0C\u4ECD\u4F1A\u7ECF\u8FC7\u6B63\u5E38\u6743\u9650\u786E\u8BA4\u3002":"\u8FD9\u662F\u53EA\u8BFB\u63A2\u67E5\uFF0C\u4E0D\u4F1A\u4E3B\u52A8\u4FEE\u6539\u6587\u4EF6\u3002";return[`\u6211\u4F1A\u7528 workflow \u505A\u8FD9\u6B21\u4EFB\u52A1\uFF0C\u5DF2\u542F\u52A8 ${e.summary.name}\uFF08${e.runId}\uFF09\u3002`,`\u8BA1\u5212\uFF1A${s}`,`\u9636\u6BB5\uFF1A${o}\uFF1B\u89C4\u6A21\uFF1A${t}\uFF0C\u5E76\u53D1 ${r}\u3002${c}`,"\u8FD0\u884C\u8FC7\u7A0B\u4F1A\u5728\u4E0B\u65B9\u52A8\u6001\u66F4\u65B0\uFF0C\u5B8C\u6210\u540E\u6211\u4F1A\u76F4\u63A5\u6C47\u603B\u7ED3\u8BBA\u3002"].join(`
191
191
  `)}let l=e.summary.writesFiles?"File-writing work still goes through normal permission gates.":"This is read-only and will not modify files.";return[`I will use a workflow for this task: ${e.summary.name} (${e.runId}).`,`Plan: ${s}`,`Phases: ${o}; scale: ${t}, ${r} concurrent. ${l}`,"Progress will update below, and I will summarize the result when it finishes."].join(`
192
- `)}a(Mt,"formatWorkflowLaunchAnswer");function J(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(J,"readEventString");function _t(e,o="en",n){if(e.type!=="agent_completed"&&e.type!=="agent_unverified"&&e.type!=="agent_failed"&&e.type!=="agent_summary_updated"||e.type==="agent_completed"&&J(e,"status")!=="completed")return;let t=J(e,"summary")??J(e,"error");if(!t)return;let r=J(e,"summaryKind");if(r==="pending")return;let s=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=J(e,"name")??J(e,"taskId")??"agent";return Td(l,t,o,n,s)}a(_t,"formatWorkflowAgentDigest");function Ad(e){let o=e.replace(/\s+/g," ").trim();return o.length<=zs?o:`${o.slice(0,zs).trimEnd()}...`}a(Ad,"trimWorkflowAgentDigestExcerpt");function Rd(e){return/^(?:conclusion|finding|confirmed issue|issue|evidence|risk|next|unresolved|decision|result|summary|结论|发现|问题|证据|风险|下一步|未决|判断|决定|结果|摘要)[::]/i.test(e)||/^(?:[A-Z]{1,3}-?\d+|[HMSLP]\d+)[.)::\s-]/i.test(e)?!0:/(?:critical|high|medium|low)\s+severity|(?:严重|高危|中危|低危)/i.test(e)}a(Rd,"isHighSignalWorkflowAgentDigestLine");function Cd(e){let o=e.toLowerCase();return!!(/\[\/?workflow handoff\]/i.test(e)||/^\|.*\|$/.test(e)||/^\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?$/.test(e)||/^(?:i now have|i have|i now understand|here is|let me|i will|this report|the report)\b/.test(o)||/^(?:scope|review scope|范围|审查范围)[::]/i.test(e)||/^feature[_\s-]*\d+.*(?:report|review|audit|map|审查|报告|地图|变更地图)/i.test(e)||/^feature[_\s-]*\d+.*改动分布.*feature/i.test(e)||/(?:review report|audit|审查报告|综合报告|分析报告|变更地图)$/i.test(e)&&e.length<140)}a(Cd,"isLowInformationWorkflowAgentDigestLine");function Ed(e){return e.replace(/\s+/g," ").trim()}a(Ed,"compactWorkflowAgentDigestLine");function Id(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=Ed(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!Cd(t))return o.truncateLines===!1?t:Ad(t)}a(Id,"normalizeWorkflowAgentDigestLine");function Pd(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let s=Id(r,o);if(!s)continue;let l=Rd(s)?n:t;n.includes(s)||t.includes(s)||l.push(s)}return n.length>0?n.slice(0,Gs):t.length>0?t.slice(0,Gs):[]}a(Pd,"extractWorkflowAgentDigestExcerpts");function Td(e,o,n,t,r="excerpt"){let s=r==="digest",c=Pd(o,{truncateLines:!s}).map(f=>`- ${f}`),d=t?n==="zh"?`\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show ${t} \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002`:`This is a child-agent digest; use /workflow show ${t} for the event timeline.`:n==="zh"?"\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002":"This is a child-agent digest; use /workflow show for the event timeline.",u=n==="zh"?s?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u8981\uFF1A`:r==="digest-failed"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF08\u667A\u80FD\u6458\u8981\u4E0D\u53EF\u7528\uFF0C\u4EE5\u4E0B\u4E3A\u672C\u5730\u6458\u5F55\uFF09\uFF1A`:`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u5F55\u6458\u8981\uFF1A`:s?`Agent ${e} completed. Summary:`:r==="digest-failed"?`Agent ${e} completed (smart summary unavailable; local excerpt):`:`Agent ${e} completed. Extracted summary:`;return c.length===0?[n==="zh"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF0C\u4F46\u672A\u80FD\u63D0\u53D6\u5230\u6709\u6548\u6458\u8981\u3002`:`Agent ${e} completed. No useful summary could be extracted.`,d].join(`
192
+ `)}a(Wt,"formatWorkflowLaunchAnswer");function Q(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(Q,"readEventString");function Ot(e,o="en",n){if(e.type!=="agent_completed"&&e.type!=="agent_unverified"&&e.type!=="agent_failed"&&e.type!=="agent_summary_updated"||e.type==="agent_completed"&&Q(e,"status")!=="completed")return;let t=Q(e,"summary")??Q(e,"error");if(!t)return;let r=Q(e,"summaryKind");if(r==="pending")return;let s=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=Q(e,"name")??Q(e,"taskId")??"agent";return jd(l,t,o,n,s)}a(Ot,"formatWorkflowAgentDigest");function _d(e){let o=e.replace(/\s+/g," ").trim();return o.length<=Zs?o:`${o.slice(0,Zs).trimEnd()}...`}a(_d,"trimWorkflowAgentDigestExcerpt");function Ld(e){return/^(?:conclusion|finding|confirmed issue|issue|evidence|risk|next|unresolved|decision|result|summary|结论|发现|问题|证据|风险|下一步|未决|判断|决定|结果|摘要)[::]/i.test(e)||/^(?:[A-Z]{1,3}-?\d+|[HMSLP]\d+)[.)::\s-]/i.test(e)?!0:/(?:critical|high|medium|low)\s+severity|(?:严重|高危|中危|低危)/i.test(e)}a(Ld,"isHighSignalWorkflowAgentDigestLine");function Wd(e){let o=e.toLowerCase();return!!(/\[\/?workflow handoff\]/i.test(e)||/^\|.*\|$/.test(e)||/^\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?$/.test(e)||/^(?:i now have|i have|i now understand|here is|let me|i will|this report|the report)\b/.test(o)||/^(?:scope|review scope|范围|审查范围)[::]/i.test(e)||/^feature[_\s-]*\d+.*(?:report|review|audit|map|审查|报告|地图|变更地图)/i.test(e)||/^feature[_\s-]*\d+.*改动分布.*feature/i.test(e)||/(?:review report|audit|审查报告|综合报告|分析报告|变更地图)$/i.test(e)&&e.length<140)}a(Wd,"isLowInformationWorkflowAgentDigestLine");function Od(e){return e.replace(/\s+/g," ").trim()}a(Od,"compactWorkflowAgentDigestLine");function Nd(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=Od(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!Wd(t))return o.truncateLines===!1?t:_d(t)}a(Nd,"normalizeWorkflowAgentDigestLine");function Dd(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let s=Nd(r,o);if(!s)continue;let l=Ld(s)?n:t;n.includes(s)||t.includes(s)||l.push(s)}return n.length>0?n.slice(0,Qs):t.length>0?t.slice(0,Qs):[]}a(Dd,"extractWorkflowAgentDigestExcerpts");function jd(e,o,n,t,r="excerpt"){let s=r==="digest",c=Dd(o,{truncateLines:!s}).map(f=>`- ${f}`),d=t?n==="zh"?`\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show ${t} \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002`:`This is a child-agent digest; use /workflow show ${t} for the event timeline.`:n==="zh"?"\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002":"This is a child-agent digest; use /workflow show for the event timeline.",u=n==="zh"?s?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u8981\uFF1A`:r==="digest-failed"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF08\u667A\u80FD\u6458\u8981\u4E0D\u53EF\u7528\uFF0C\u4EE5\u4E0B\u4E3A\u672C\u5730\u6458\u5F55\uFF09\uFF1A`:`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u5F55\u6458\u8981\uFF1A`:s?`Agent ${e} completed. Summary:`:r==="digest-failed"?`Agent ${e} completed (smart summary unavailable; local excerpt):`:`Agent ${e} completed. Extracted summary:`;return c.length===0?[n==="zh"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF0C\u4F46\u672A\u80FD\u63D0\u53D6\u5230\u6709\u6548\u6458\u8981\u3002`:`Agent ${e} completed. No useful summary could be extracted.`,d].join(`
193
193
  `):[u,...c,d].join(`
194
- `)}a(Td,"formatWorkflowAgentLongDigest");function hn(e){return(o,n="en")=>_t(o,n,e)}a(hn,"createWorkflowAgentDigestLimiter");import T from"chalk";function Lt(){return[`${T.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${T.bold("Subcommands:")}`,` ${T.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${T.cyan("/workflow create <request>")} Build & run a workflow for a request. The Worker investigates first, then authors it (scout-then-author). Requires AMA \u2014 Solo (SA) mode runs no workflows.`,` ${T.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${T.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${T.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${T.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${T.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${T.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${T.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${T.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${T.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${T.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${T.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${T.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${T.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${T.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${T.bold("Examples:")}`,` ${T.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${T.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${T.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${T.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${T.dim("/workflow prune --dry-run")}`,` ${T.dim("/workflow save run-lx3 generated-audit")}`,"",`${T.bold("Safety:")}`," - Generated and workflow capsule (.workflow.json) workflows run in the capability WorkflowApi runner."," - For rerun, a run id reruns its saved snapshot; a saved name runs the current saved capsule version."," - For revise --replace, only a saved generated capsule name can move; the previous capsule is archived."," - Local .ts/.mjs/.js workflows are trusted-local and require explicit confirmation."," - File, shell, MCP, and web effects still go through child agents and existing permission gates."].join(`
195
- `)}a(Lt,"renderWorkflowHelp");function yn(){console.log(`
196
- ${Lt()}
197
- `)}a(yn,"printWorkflowHelp");var Ld=new Set(["completed","failed","stopped","denied","cancelled"]);function Wt(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${C.cyan(o.name)} \u2014 ${o.description}`).join(`
198
- `)}a(Wt,"formatWorkflowList");var Wd=6,Od=900;function Nd(e){let o=e.replace(/\r\n/g,`
194
+ `)}a(jd,"formatWorkflowAgentLongDigest");function kn(e){return(o,n="en")=>Ot(o,n,e)}a(kn,"createWorkflowAgentDigestLimiter");import P from"chalk";function Nt(){return[`${P.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${P.bold("Subcommands:")}`,` ${P.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${P.cyan("/workflow create <request>")} Build & run a workflow for a request. The Worker investigates first, then authors it (scout-then-author). Requires AMA \u2014 Solo (SA) mode runs no workflows.`,` ${P.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${P.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${P.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${P.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${P.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${P.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${P.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${P.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${P.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${P.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${P.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${P.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${P.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${P.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${P.bold("Examples:")}`,` ${P.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${P.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${P.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${P.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${P.dim("/workflow prune --dry-run")}`,` ${P.dim("/workflow save run-lx3 generated-audit")}`,"",`${P.bold("Safety:")}`," - Generated and workflow capsule (.workflow.json) workflows run in the capability WorkflowApi runner."," - For rerun, a run id reruns its saved snapshot; a saved name runs the current saved capsule version."," - For revise --replace, only a saved generated capsule name can move; the previous capsule is archived."," - Local .ts/.mjs/.js workflows are trusted-local and require explicit confirmation."," - File, shell, MCP, and web effects still go through child agents and existing permission gates."].join(`
195
+ `)}a(Nt,"renderWorkflowHelp");function bn(){console.log(`
196
+ ${Nt()}
197
+ `)}a(bn,"printWorkflowHelp");var Hd=new Set(["completed","failed","stopped","denied","cancelled"]);function Dt(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${C.cyan(o.name)} \u2014 ${o.description}`).join(`
198
+ `)}a(Dt,"formatWorkflowList");var Kd=6,Bd=900;function qd(e){let o=e.replace(/\r\n/g,`
199
199
  `).replace(/\r/g,`
200
200
  `).split(`
201
- `),n=[],t=0,r=!1;for(let l of o){if(n.length>=Wd)break;let c=` ${l}`,d=Od-t;if(d<=0){r=!0;break}if(c.length>d){d>16&&n.push(`${c.slice(0,d-4)} ...`),r=!0;break}n.push(c),t+=c.length+1}let s=Math.max(0,o.length-n.length);if(s>0||r){let l=s>0?`${s} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(Nd,"renderApprovalScriptPreview");function ce(e,o){let n=a(s=>s===null?"\u221E":String(s),"cap"),t=e.plannedAgents===void 0?void 0:String(e.plannedAgents),r=t===void 0?`agent total cap: ${n(e.maxAgents)}`:`planned agents: ${t} \xB7 agent safety cap: ${n(e.maxAgents)}`;return[`Run workflow ${C.cyan(e.name)}?`,` ${e.description}`,` phases: ${e.phases.length>0?e.phases.join(" \u2192 "):"(dynamic)"}`,` ${r} \xB7 max concurrency: ${n(e.maxConcurrency)} \xB7 token budget: ${n(e.tokenBudget)}`,` writes files: ${e.writesFiles?C.yellow("yes"):"no (read-only)"}`,...o?[` source: ${o.source}`,` sandbox/trust: ${o.sandbox}`,` worktree isolation: ${o.mayUseWorktree?"may request worktree":"shared cwd / per-child default"}`,...o.rawScriptPath?[` raw script: ${o.rawScriptPath}`]:o.rawScript?[" raw script: preview below"]:[],...o.rawScript&&!o.rawScriptPath?[" raw script preview:",...Nd(o.rawScript)]:[]]:[]].join(`
202
- `)}a(ce,"renderApprovalPrompt");function To(e){if(!le(e))return[];let o=[];for(let n of Md(e)){let t=ee(e,n,"run.json");if(le(t))try{let r=JSON.parse(kn(t,"utf8"));o.push({runId:n,workflow:typeof r.workflow=="string"?r.workflow:"?",status:typeof r.status=="string"?r.status:"?",totalSpawned:typeof r.totalSpawned=="number"?r.totalSpawned:0,endedAt:typeof r.endedAt=="number"?r.endedAt:0})}catch{}}return o.sort((n,t)=>t.endedAt-n.endedAt)}a(To,"readWorkflowRuns");function Dd(e){let o=ee(e,"events.jsonl");if(!le(o))return[];let n=kn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let s=JSON.parse(r);if(typeof s!="object"||s===null)continue;let l=s;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(Dd,"readWorkflowEvents");function jd(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(jd,"readStringArray");function vn(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(vn,"readNonEmptyString");function Ys(e,o){let n=o?vn(o.scriptSnapshotPath):ee(e,"script.js"),t=o?vn(o.manifestSnapshotPath):ee(e,"manifest.json");return!n||!t?!1:le(n)&&le(t)}a(Ys,"hasGeneratedWorkflowSnapshot");function Zs(e,o){if(o)return Ys(e,o);let n=ee(e,"run.json");if(!le(n))return!1;try{let t=JSON.parse(kn(n,"utf8"));return typeof t=="object"&&t!==null?Ys(e,t):!1}catch{return!1}}a(Zs,"hasRerunnableGeneratedWorkflowRun");function Ud(e){for(let o of[...e].reverse()){if(o.type!=="workflow_failed")continue;let n=o.data?.error;if(typeof n=="string"&&n.trim().length>0)return n}}a(Ud,"readWorkflowFailure");function Mo(e,o){let n=ee(e,o),t=ee(n,"run.json"),r=Dd(n),s=Ud(r);if(!(!le(t)&&r.length===0)){if(!le(t))return{runId:o,workflow:"?",status:s?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...s?{error:s}:{}};try{let l=JSON.parse(kn(t,"utf8")),c=vn(l.scriptSnapshotPath),d=vn(l.manifestSnapshotPath);return{runId:o,workflow:typeof l.workflow=="string"?l.workflow:"?",status:typeof l.status=="string"?l.status:"?",totalSpawned:typeof l.totalSpawned=="number"?l.totalSpawned:0,eventCount:r.length,runDir:n,canRerun:Zs(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...s?{error:s}:{},artifacts:jd(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:s?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...s?{error:s}:{}}}}}a(Mo,"readWorkflowRunDetail");function Po(e){return e==="completed"?C.green("ok"):e==="failed"?C.red("x"):e==="running"?C.cyan("run"):e==="paused"?C.yellow("pause"):e==="stopped"?C.dim("stop"):e==="denied"?C.dim("deny"):e==="cancelled"?C.dim("cancel"):C.dim("-")}a(Po,"statusIcon");function Ot(e){return Ld.has(e)}a(Ot,"isTerminalWorkflowStatus");function Qs(e){if(!e)return;let o=[];return e.displayName&&e.displayName!==e.workflowName&&o.push(`display: ${e.displayName}`),e.source&&o.push(`source: ${e.source}`),e.savedWorkflowName&&o.push(`saved: ${e.savedWorkflowName}`),e.revisionOf&&o.push(`revision of: ${e.revisionOf}`),o.length>0?o.join(", "):void 0}a(Qs,"formatProcessListMeta");function Nt(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let s=t.map(l=>{let c=Qs(o.processSnapshots?.get(l.runId));return` ${Po(l.status)} ${C.cyan(l.workflow)} ${C.dim(l.runId)} - ${l.status} (${l.totalSpawned} agents)${c?C.dim(` [${c}]`):""}`});return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&s.push(C.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),s.join(`
203
- `)}let r=t.map(s=>` ${Po(s.status)} ${C.cyan(s.workflow)} ${C.dim(s.runId)} \u2014 ${s.status} (${s.totalSpawned} agents)`);return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&r.push(C.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),r.join(`
204
- `)}a(Nt,"formatRunsList");function Dt(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=Qs(o.processSnapshots?.get(n.runId));return` ${Po(n.status)} ${C.cyan(n.workflow)} ${C.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?C.dim(` [${t}]`):""}`}).join(`
205
- `):e.map(n=>` ${Po(n.status)} ${C.cyan(n.workflow)} ${C.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
206
- `)}a(Dt,"formatManagedRunsList");function eo(e){return e.status==="running"||e.status==="paused"}a(eo,"isActiveManagedWorkflowRun");function jt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${Po(o.status)} ${C.cyan(o.workflow)} ${C.dim(o.runId)} - ${o.status}`).join(`
207
- `)}a(jt,"formatWorkflowPruneCandidates");function Ut(e,o){return e.filter(eo)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Ut,"selectDefaultWorkflowRunId");function Ft(e){return e.find(eo)?.runId}a(Ft,"selectDefaultActiveWorkflowRunId");function Js(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(Js,"formatTime");function Fd(e,o=10){let n=e.map(xn).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(Fd,"formatRecentWorkflowEvents");function Ht(e,o){return o?.canRerun??(e?.runDir?Zs(e.runDir):!1)}a(Ht,"canRerunWorkflowRun");function Hd(e){return e?e.artifacts.map(o=>({name:o,path:ee(e.runDir,"artifacts",`${ri(o)}.json`)})):[]}a(Hd,"workflowArtifactRefs");function Kt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Kt,"formatWorkflowNextActions");function ea(e,o){return o?`Use /workflow show ${e} for events. /workflow revise ${e} <change> can repair the saved script; /workflow rerun ${e} repeats it unchanged.`:`Use /workflow show ${e} for events.`}a(ea,"formatWorkflowFailureAction");function Bt(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",s=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=Js(e?.startedAt??o?.startedAt??t?.startedAt),p=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,k=Js(e?.endedAt??o?.endedAt??p),b=t?.error??e?.error??o?.error,A=o?.artifacts??t?.artifacts?.map(fe=>fe.name)??[],R=Hd(o),v=e?.resultText,$=n.full===!0||v===void 0?Qe(R,Pe(r),{full:n.full===!0}):void 0,I=n.full===!0?$??v??t?.resultSummary:v!==void 0?ke(v):t?.resultSummary!==void 0?ke(t.resultSummary):$,M=I?Ze(I,s,Pe(I)):void 0,re=n.full===!0||!I||!Pt(I)?"result:":"result preview:",Oe=o?Fd(o.events):[],co=Ht(e,o);return[` ${C.cyan(r)} ${C.dim(s)}`,...t?.displayName&&t.displayName!==r?[` display name: ${t.displayName}`]:[],` status: ${l}`,...t?.source?[` source: ${t.source}`]:[],...t?.savedWorkflowName?[` saved workflow: ${t.savedWorkflowName}`]:[],...t?.sourceRunId?[` source run: ${t.sourceRunId}`]:[],...t?.sourceWorkflowName?[` source workflow: ${t.sourceWorkflowName}`]:[],...t?.revisionOf?[` revision of: ${t.revisionOf}`]:[],` agents: ${c}`,` events: ${d}`,...f?[` started: ${f}`]:[],...k?[` ended: ${k}`]:[],...u?[` run dir: ${u}`]:[],...A.length>0?[` artifacts: ${A.join(", ")}`]:[],...b?[` error: ${b}`]:[],...M?["",` ${re}`,...M.split(`
208
- `).map(fe=>` ${fe}`)]:[],...Oe.length>0?[""," recent events:",...Oe.map(fe=>` ${fe.trimEnd()}`)]:[],"",` next: ${Kt(s,co)}`].join(`
209
- `)}a(Bt,"formatWorkflowRunSnapshot");function qt(e){return{project:ee(e,".kodax","workflows"),personal:W("workflows")}}a(qt,"savedWorkflowDirs");async function oa(e,o){return new Set((await Fe(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(oa,"nextRevisionWorkflowName");function na(e){let o=e.resolution.kind==="run"?e.resolution.runId:e.capsule.provenance?.fromRunId,n=e.resolution.kind==="saved"?e.resolution.savedWorkflow.name:e.capsule.provenance?.fromWorkflowName,t=e.resolution.kind==="run"?e.resolution.runId:e.resolution.kind==="saved"?e.resolution.savedWorkflow.name:void 0;return{...o!==void 0?{fromRunId:o}:{},...n!==void 0?{fromWorkflowName:n}:{},...t!==void 0?{revisionOf:t}:{},...e.replacesWorkflowName!==void 0?{replacesWorkflowName:e.replacesWorkflowName}:{},createdAt:new Date().toISOString(),kodaxVersion:wi}}a(na,"buildWorkflowRevisionProvenance");function Gt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${C.cyan(o.name)} ${C.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
210
- `)}a(Gt,"formatSavedList");function ta(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(ta,"isSafeWorkflowRunId");function Te(e){if(e.confirm)return e.confirm;let o=e.readline;if(o)return n=>new Promise(t=>{o.question(`${n} (y/N) `,r=>t(/^y(es)?$/i.test(r.trim())))})}a(Te,"resolveConfirm");function Kd(e){console.log(C.red(`
201
+ `),n=[],t=0,r=!1;for(let l of o){if(n.length>=Kd)break;let c=` ${l}`,d=Bd-t;if(d<=0){r=!0;break}if(c.length>d){d>16&&n.push(`${c.slice(0,d-4)} ...`),r=!0;break}n.push(c),t+=c.length+1}let s=Math.max(0,o.length-n.length);if(s>0||r){let l=s>0?`${s} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(qd,"renderApprovalScriptPreview");function ue(e,o){let n=a(s=>s===null?"\u221E":String(s),"cap"),t=e.plannedAgents===void 0?void 0:String(e.plannedAgents),r=t===void 0?`agent total cap: ${n(e.maxAgents)}`:`planned agents: ${t} \xB7 agent safety cap: ${n(e.maxAgents)}`;return[`Run workflow ${C.cyan(e.name)}?`,` ${e.description}`,` phases: ${e.phases.length>0?e.phases.join(" \u2192 "):"(dynamic)"}`,` ${r} \xB7 max concurrency: ${n(e.maxConcurrency)} \xB7 token budget: ${n(e.tokenBudget)}`,` writes files: ${e.writesFiles?C.yellow("yes"):"no (read-only)"}`,...o?[` source: ${o.source}`,` sandbox/trust: ${o.sandbox}`,` worktree isolation: ${o.mayUseWorktree?"may request worktree":"shared cwd / per-child default"}`,...o.rawScriptPath?[` raw script: ${o.rawScriptPath}`]:o.rawScript?[" raw script: preview below"]:[],...o.rawScript&&!o.rawScriptPath?[" raw script preview:",...qd(o.rawScript)]:[]]:[]].join(`
202
+ `)}a(ue,"renderApprovalPrompt");function _o(e){if(!de(e))return[];let o=[];for(let n of Ud(e)){let t=ne(e,n,"run.json");if(de(t))try{let r=JSON.parse(Sn(t,"utf8"));o.push({runId:n,workflow:typeof r.workflow=="string"?r.workflow:"?",status:typeof r.status=="string"?r.status:"?",totalSpawned:typeof r.totalSpawned=="number"?r.totalSpawned:0,endedAt:typeof r.endedAt=="number"?r.endedAt:0})}catch{}}return o.sort((n,t)=>t.endedAt-n.endedAt)}a(_o,"readWorkflowRuns");function Gd(e){let o=ne(e,"events.jsonl");if(!de(o))return[];let n=Sn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let s=JSON.parse(r);if(typeof s!="object"||s===null)continue;let l=s;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(Gd,"readWorkflowEvents");function zd(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(zd,"readStringArray");function $n(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a($n,"readNonEmptyString");function na(e,o){let n=o?$n(o.scriptSnapshotPath):ne(e,"script.js"),t=o?$n(o.manifestSnapshotPath):ne(e,"manifest.json");return!n||!t?!1:de(n)&&de(t)}a(na,"hasGeneratedWorkflowSnapshot");function ra(e,o){if(o)return na(e,o);let n=ne(e,"run.json");if(!de(n))return!1;try{let t=JSON.parse(Sn(n,"utf8"));return typeof t=="object"&&t!==null?na(e,t):!1}catch{return!1}}a(ra,"hasRerunnableGeneratedWorkflowRun");function Xd(e){for(let o of[...e].reverse()){if(o.type!=="workflow_failed")continue;let n=o.data?.error;if(typeof n=="string"&&n.trim().length>0)return n}}a(Xd,"readWorkflowFailure");function Lo(e,o){let n=ne(e,o),t=ne(n,"run.json"),r=Gd(n),s=Xd(r);if(!(!de(t)&&r.length===0)){if(!de(t))return{runId:o,workflow:"?",status:s?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...s?{error:s}:{}};try{let l=JSON.parse(Sn(t,"utf8")),c=$n(l.scriptSnapshotPath),d=$n(l.manifestSnapshotPath);return{runId:o,workflow:typeof l.workflow=="string"?l.workflow:"?",status:typeof l.status=="string"?l.status:"?",totalSpawned:typeof l.totalSpawned=="number"?l.totalSpawned:0,eventCount:r.length,runDir:n,canRerun:ra(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...s?{error:s}:{},artifacts:zd(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:s?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...s?{error:s}:{}}}}}a(Lo,"readWorkflowRunDetail");function Mo(e){return e==="completed"?C.green("ok"):e==="failed"?C.red("x"):e==="running"?C.cyan("run"):e==="paused"?C.yellow("pause"):e==="stopped"?C.dim("stop"):e==="denied"?C.dim("deny"):e==="cancelled"?C.dim("cancel"):C.dim("-")}a(Mo,"statusIcon");function jt(e){return Hd.has(e)}a(jt,"isTerminalWorkflowStatus");function ia(e){if(!e)return;let o=[];return e.displayName&&e.displayName!==e.workflowName&&o.push(`display: ${e.displayName}`),e.source&&o.push(`source: ${e.source}`),e.savedWorkflowName&&o.push(`saved: ${e.savedWorkflowName}`),e.revisionOf&&o.push(`revision of: ${e.revisionOf}`),o.length>0?o.join(", "):void 0}a(ia,"formatProcessListMeta");function Ut(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let s=t.map(l=>{let c=ia(o.processSnapshots?.get(l.runId));return` ${Mo(l.status)} ${C.cyan(l.workflow)} ${C.dim(l.runId)} - ${l.status} (${l.totalSpawned} agents)${c?C.dim(` [${c}]`):""}`});return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&s.push(C.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),s.join(`
203
+ `)}let r=t.map(s=>` ${Mo(s.status)} ${C.cyan(s.workflow)} ${C.dim(s.runId)} \u2014 ${s.status} (${s.totalSpawned} agents)`);return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&r.push(C.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),r.join(`
204
+ `)}a(Ut,"formatRunsList");function Ft(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=ia(o.processSnapshots?.get(n.runId));return` ${Mo(n.status)} ${C.cyan(n.workflow)} ${C.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?C.dim(` [${t}]`):""}`}).join(`
205
+ `):e.map(n=>` ${Mo(n.status)} ${C.cyan(n.workflow)} ${C.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
206
+ `)}a(Ft,"formatManagedRunsList");function eo(e){return e.status==="running"||e.status==="paused"}a(eo,"isActiveManagedWorkflowRun");function Ht(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${Mo(o.status)} ${C.cyan(o.workflow)} ${C.dim(o.runId)} - ${o.status}`).join(`
207
+ `)}a(Ht,"formatWorkflowPruneCandidates");function Kt(e,o){return e.filter(eo)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Kt,"selectDefaultWorkflowRunId");function Bt(e){return e.find(eo)?.runId}a(Bt,"selectDefaultActiveWorkflowRunId");function ta(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(ta,"formatTime");function Vd(e,o=10){let n=e.map(Cn).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(Vd,"formatRecentWorkflowEvents");function qt(e,o){return o?.canRerun??(e?.runDir?ra(e.runDir):!1)}a(qt,"canRerunWorkflowRun");function Yd(e){return e?e.artifacts.map(o=>({name:o,path:ne(e.runDir,"artifacts",`${ci(o)}.json`)})):[]}a(Yd,"workflowArtifactRefs");function Gt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Gt,"formatWorkflowNextActions");function sa(e,o){return o?`Use /workflow show ${e} for events. /workflow revise ${e} <change> can repair the saved script; /workflow rerun ${e} repeats it unchanged.`:`Use /workflow show ${e} for events.`}a(sa,"formatWorkflowFailureAction");function zt(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",s=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=ta(e?.startedAt??o?.startedAt??t?.startedAt),p=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,k=ta(e?.endedAt??o?.endedAt??p),b=t?.error??e?.error??o?.error,A=o?.artifacts??t?.artifacts?.map(pe=>pe.name)??[],R=Yd(o),v=e?.resultText,$=n.full===!0||v===void 0?Ze(R,Pe(r),{full:n.full===!0}):void 0,I=n.full===!0?$??v??t?.resultSummary:v!==void 0?$e(v):t?.resultSummary!==void 0?$e(t.resultSummary):$,M=I?Qe(I,s,Pe(I)):void 0,se=n.full===!0||!I||!_t(I)?"result:":"result preview:",Ne=o?Vd(o.events):[],uo=qt(e,o);return[` ${C.cyan(r)} ${C.dim(s)}`,...t?.displayName&&t.displayName!==r?[` display name: ${t.displayName}`]:[],` status: ${l}`,...t?.source?[` source: ${t.source}`]:[],...t?.savedWorkflowName?[` saved workflow: ${t.savedWorkflowName}`]:[],...t?.sourceRunId?[` source run: ${t.sourceRunId}`]:[],...t?.sourceWorkflowName?[` source workflow: ${t.sourceWorkflowName}`]:[],...t?.revisionOf?[` revision of: ${t.revisionOf}`]:[],` agents: ${c}`,` events: ${d}`,...f?[` started: ${f}`]:[],...k?[` ended: ${k}`]:[],...u?[` run dir: ${u}`]:[],...A.length>0?[` artifacts: ${A.join(", ")}`]:[],...b?[` error: ${b}`]:[],...M?["",` ${se}`,...M.split(`
208
+ `).map(pe=>` ${pe}`)]:[],...Ne.length>0?[""," recent events:",...Ne.map(pe=>` ${pe.trimEnd()}`)]:[],"",` next: ${Gt(s,uo)}`].join(`
209
+ `)}a(zt,"formatWorkflowRunSnapshot");function Xt(e){return{project:ne(e,".kodax","workflows"),personal:W("workflows")}}a(Xt,"savedWorkflowDirs");async function aa(e,o){return new Set((await Fe(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(aa,"nextRevisionWorkflowName");function la(e){let o=e.resolution.kind==="run"?e.resolution.runId:e.capsule.provenance?.fromRunId,n=e.resolution.kind==="saved"?e.resolution.savedWorkflow.name:e.capsule.provenance?.fromWorkflowName,t=e.resolution.kind==="run"?e.resolution.runId:e.resolution.kind==="saved"?e.resolution.savedWorkflow.name:void 0;return{...o!==void 0?{fromRunId:o}:{},...n!==void 0?{fromWorkflowName:n}:{},...t!==void 0?{revisionOf:t}:{},...e.replacesWorkflowName!==void 0?{replacesWorkflowName:e.replacesWorkflowName}:{},createdAt:new Date().toISOString(),kodaxVersion:bi}}a(la,"buildWorkflowRevisionProvenance");function Vt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${C.cyan(o.name)} ${C.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
210
+ `)}a(Vt,"formatSavedList");function ca(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(ca,"isSafeWorkflowRunId");function Me(e){if(e.confirm)return e.confirm;let o=e.readline;if(o)return n=>new Promise(t=>{o.question(`${n} (y/N) `,r=>t(/^y(es)?$/i.test(r.trim())))})}a(Me,"resolveConfirm");function Jd(e){console.log(C.red(`
211
211
  [workflow] invalid run id: ${e||"<empty>"}
212
- `))}a(Kd,"printInvalidRunId");function be(e){return ta(e)?!0:(Kd(e),!1)}a(be,"ensureSafeRunId");function bn(){let e=Bd(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(bn,"currentWorkflowPreflightEnv");function Bd(e){let o=e;for(;;){if(le(ee(o,".git")))return!0;let n=_d(o);if(n===o)return!1;o=n}}a(Bd,"hasGitMarker");function $n(e){console.log(C.red(`
213
- [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(C.red(` - ${o.requirement}: ${o.message}`));console.log()}a($n,"printPreflightFailure");function Sn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(C.yellow(`
214
- [workflow] capsule preflight warnings:`));for(let n of o)console.log(C.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(Sn,"printPreflightWarnings");async function ra(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
212
+ `))}a(Jd,"printInvalidRunId");function Se(e){return ca(e)?!0:(Jd(e),!1)}a(Se,"ensureSafeRunId");function xn(){let e=Qd(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(xn,"currentWorkflowPreflightEnv");function Qd(e){let o=e;for(;;){if(de(ne(o,".git")))return!0;let n=Fd(o);if(n===o)return!1;o=n}}a(Qd,"hasGitMarker");function An(e){console.log(C.red(`
213
+ [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(C.red(` - ${o.requirement}: ${o.message}`));console.log()}a(An,"printPreflightFailure");function Rn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(C.yellow(`
214
+ [workflow] capsule preflight warnings:`));for(let n of o)console.log(C.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(Rn,"printPreflightWarnings");async function da(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
215
215
  ${e.path}`)){console.log(C.dim(`Workflow cancelled.
216
- `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await wo(e.path),c=ho(l,bn());if(!c.ok){$n(c);return}Sn(c),n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:l.manifest.mayUseWorktree===!0,rawScriptPath:e.path,rawScript:l.source},t={manifest:l.manifest,source:l.source},r=l.provenance}return{module:await Zo(e.path),approvalContext:n,...t!==void 0?{scriptSnapshot:t}:{},...r!==void 0?{provenance:r}:{}}}catch(n){let t=n instanceof Error?n.message:String(n);console.log(C.red(`
216
+ `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await ho(e.path),c=yo(l,xn());if(!c.ok){An(c);return}Rn(c),n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:l.manifest.mayUseWorktree===!0,rawScriptPath:e.path,rawScript:l.source},t={manifest:l.manifest,source:l.source},r=l.provenance}return{module:await en(e.path),approvalContext:n,...t!==void 0?{scriptSnapshot:t}:{},...r!==void 0?{provenance:r}:{}}}catch(n){let t=n instanceof Error?n.message:String(n);console.log(C.red(`
217
217
  [workflow] failed to load ${e.path}: ${t}
218
- `));return}}a(ra,"prepareSavedWorkflow");function zt(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(zt,"workflowEventStatus");function xn(e){let o=e.data?.name??e.data?.taskId??"",n=zt(e);switch(e.type){case"phase_started":return` > phase: ${e.data?.name??""}`;case"phase_finished":return` done phase: ${e.data?.name??""}`;case"agent_spawned":return` + ${o}`;case"agent_completed":return n==="failed"?` failed ${o}`:n==="completed_unverified"?` unverified ${o}`:` done ${o}`;case"agent_unverified":return` unverified ${o}`;case"agent_failed":return` failed ${o}`;case"agent_stopped":return` stopped ${o}`;case"workflow_log":return` log ${e.data?.message??""}`;case"artifact_written":return` artifact ${e.data?.name??""}`;case"synthesis_completed":return" synthesis complete";case"workflow_completed":return" workflow completed";case"workflow_stopped":return" workflow stopped";case"workflow_failed":return` workflow failed: ${e.data?.error??"unknown error"}`;default:return}}a(xn,"formatWorkflowEvent");function ia(e){let o=xn(e);o&&console.log(C.dim(o))}a(ia,"renderWorkflowEvent");import Rn from"chalk";import qd from"string-width";var Gd=9;function zd(e,o=Gd){let n=qd(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(zd,"padWorkflowLiveSymbol");function la(e,o={}){let n=e.items.filter(p=>p.kind==="agent"),t=n.filter(p=>p.status==="running").map(p=>p.title),r=n.filter(p=>p.status==="completed").length,s=n.filter(p=>p.status==="failed").length,l=n.filter(p=>p.status==="cancelled").length,c=e.status==="completed"?"completed":e.status==="failed"?"failed":e.status==="cancelled"?"stopped":"running",d=e.activePhaseId===void 0?void 0:e.items.find(p=>p.id===e.activePhaseId)?.title,u=Date.parse(e.startedAt),f=o.message??e.latestMessage;return{runId:e.runId,workflow:e.displayName??e.workflowName,status:c,...d!==void 0?{phase:d}:{},...e.activePhaseIndex!==void 0?{phaseIndex:e.activePhaseIndex}:{},...e.phaseCount!==void 0?{phaseTotal:e.phaseCount}:{},...Number.isFinite(u)?{startedAt:u}:{},elapsedMs:e.elapsedMs,activeAgents:t,totalSpawned:e.progress.spawnedAgents,...e.progress.plannedItems!==void 0?{plannedAgents:e.progress.plannedItems}:{},...e.progress.agentCap!==void 0?{agentCap:e.progress.agentCap}:{},...e.tokens!==void 0?{tokenBudgetSpent:e.tokens.spent}:{},...e.tokens?.total!==void 0?{tokenBudgetTotal:e.tokens.total}:{},completedAgents:r,failedAgents:s,stoppedAgents:l,...f!==void 0?{message:f}:{},...o.locale!==void 0?{locale:o.locale}:{}}}a(la,"workflowLiveSnapshotFromProcess");function _w(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${zd(o.symbol)}${o.text}`)}a(_w,"formatWorkflowLiveViewModelForTranscript");var Xd=6,sa={en:{workflow:"workflow",phase:"phase",agent:"agent",more:"more",progress:"progress",waiting:"waiting",hint:"hint",finished:"finished",failed:"failed",stopped:"stopped",started:"started",cap:"cap",budget:"budget",spent:"spent",waitingForFirstAgent:"waiting for first agent",showStopHint:a(e=>`show: /workflow show ${e} | stop: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} active agent${e===1?"":"s"}`,"activeAgents")},zh:{workflow:"\u5DE5\u4F5C\u6D41",phase:"\u9636\u6BB5",agent:"\u667A\u80FD\u4F53",more:"\u66F4\u591A",progress:"\u8FDB\u5EA6",waiting:"\u7B49\u5F85",hint:"\u63D0\u793A",finished:"\u5B8C\u6210",failed:"\u5931\u8D25",stopped:"\u505C\u6B62",started:"\u5DF2\u542F\u52A8",cap:"\u4E0A\u9650",budget:"\u9884\u7B97",spent:"\u5DF2\u7528",waitingForFirstAgent:"\u7B49\u5F85\u7B2C\u4E00\u4E2A\u667A\u80FD\u4F53\u542F\u52A8",showStopHint:a(e=>`\u67E5\u770B: /workflow show ${e} | \u505C\u6B62: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`,"activeAgents")}},Vd={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function Yd(e){return e.length>14?`${e.slice(0,14)}...`:e}a(Yd,"shortRunId");function An(e){return e==="zh"?sa.zh:sa.en}a(An,"workflowLiveLabels");function Jd(e,o){let n=Math.max(0,Math.floor(e)),t=Math.floor(n/1e3),r=t%60,s=Math.floor(t/60),l=s%60,c=Math.floor(s/60);return o==="zh"?c>0?`${c}\u5C0F\u65F6${String(l).padStart(2,"0")}\u5206`:l>0?`${l}\u5206${String(r).padStart(2,"0")}\u79D2`:`${r}\u79D2`:c>0?`${c}h${l}m${r}s`:l>0?`${l}m${r}s`:`${r}s`}a(Jd,"formatElapsedMs");function aa(e){let o=Math.max(0,Math.floor(e));return o>=1e6?`${(o/1e6).toFixed(1).replace(/\.0$/,"")}M`:o>=1e3?`${(o/1e3).toFixed(1).replace(/\.0$/,"")}k`:String(o)}a(aa,"formatTokenCount");function Zd(e){if(e.tokenBudgetSpent===void 0)return;let o=An(e.locale),n=aa(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=aa(e.tokenBudgetTotal);return e.tokenBudgetSpent<=0?`${o.budget} ${t} tokens`:`${o.spent} ${n}/${t} tokens`}if(!(e.tokenBudgetSpent<=0))return`${o.spent} ${n} tokens`}a(Zd,"formatWorkflowTokenUsage");function Qd(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Jd(t,e.locale));let r=Zd(e);return r!==void 0&&n.push(r),n}a(Qd,"formatWorkflowHeaderMetrics");function eu(e){let o=An(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=ca(e,n),r=[];e.activeAgents.length>0&&r.push(o.activeAgents(e.activeAgents.length)),e.plannedAgents!==void 0&&r.push(`${o.started} ${e.totalSpawned}`),e.failedAgents>0&&r.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&r.push(`${e.stoppedAgents} ${o.stopped}`),e.agentCap!==void 0&&r.push(`${o.cap} ${e.agentCap}`);let s=r.length===0?"":e.locale==="zh"?`\uFF08${r.join("\uFF0C")}\uFF09`:` (${r.join(", ")})`;return`${n}/${t} ${o.finished}${s}`}a(eu,"formatWorkflowProgress");function ou(e){let o=An(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=ca(e),r=e.locale==="zh"?`${n}/${t} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`:`${n}/${t} active agent${n===1?"":"s"}`,s=[];return e.failedAgents>0&&s.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&s.push(`${e.stoppedAgents} ${o.stopped}`),s.length===0?r:e.locale==="zh"?`${r}\uFF0C${s.join("\uFF0C")}`:`${r}, ${s.join(", ")}`}a(ou,"formatWorkflowCounter");function ca(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(ca,"workflowProgressDenominator");function nu(e){if(e.phase)return e.phaseIndex!==void 0&&e.phaseTotal!==void 0&&e.phaseIndex>0&&e.phaseTotal>0?`${e.phaseIndex}/${e.phaseTotal} ${e.phase}`:e.phase}a(nu,"formatWorkflowPhase");function Lw(e,o=Date.now()){if(!e||e.status!=="running")return Vd;let n=[],t=An(e.locale),r=Qd(e,o),s=r.length===0?"":` \xB7 ${r.join(" \xB7 ")}`;n.push({kind:"header",id:"header",symbol:t.workflow,symbolColor:e.failedAgents>0?"red":"cyan",text:`${e.workflow} (${Yd(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${s}`,isActive:!0});let l=nu(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=eu(e);c&&n.push({kind:"summary",id:"progress",symbol:t.progress,symbolColor:e.failedAgents>0?"red":"green",text:c,isActive:!1}),e.totalSpawned===0&&e.activeAgents.length===0&&n.push({kind:"summary",id:"waiting",symbol:t.waiting,symbolColor:"dim",text:t.waitingForFirstAgent,isActive:!1}),n.push({kind:"hint",id:"controls",symbol:t.hint,symbolColor:"dim",text:e.message??t.showStopHint(e.runId),isActive:!1});let d=n.slice(0,Xd);return{shouldRender:!0,workflow:e.workflow,runId:e.runId,...e.phase!==void 0?{phase:e.phase}:{},...e.phaseIndex!==void 0?{phaseIndex:e.phaseIndex}:{},...e.phaseTotal!==void 0?{phaseTotal:e.phaseTotal}:{},activeCount:e.activeAgents.length,totalSpawned:e.totalSpawned,...e.plannedAgents!==void 0?{plannedAgents:e.plannedAgents}:{},completedAgents:e.completedAgents,failedAgents:e.failedAgents,stoppedAgents:e.stoppedAgents,counterText:ou(e),rows:d}}a(Lw,"buildWorkflowLiveViewModel");function tu(e,o){return o!==0?!1:e.name==="WorkflowScriptExecutionError"||/restricted workflow script|workflow generation source|workflow command .* must|unsupported workflow command/i.test(e.message)}a(tu,"isWorkflowHarnessFailure");function Xt(e){let o=ea(e.runId,e.canRerun),n=e.partialResultText?Ze(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return tu(e.error,e.totalSpawned)?[`Workflow harness failed before launching child agents (${e.runId}): ${e.error.message}`,"This points to an invalid generated workflow script or saved capsule, not a failed child-agent task.",...t,o].join(`
218
+ `));return}}a(da,"prepareSavedWorkflow");function Yt(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(Yt,"workflowEventStatus");function Cn(e){let o=e.data?.name??e.data?.taskId??"",n=Yt(e);switch(e.type){case"phase_started":return` > phase: ${e.data?.name??""}`;case"phase_finished":return` done phase: ${e.data?.name??""}`;case"agent_spawned":return` + ${o}`;case"agent_completed":return n==="failed"?` failed ${o}`:n==="completed_unverified"?` unverified ${o}`:` done ${o}`;case"agent_unverified":return` unverified ${o}`;case"agent_failed":return` failed ${o}`;case"agent_stopped":return` stopped ${o}`;case"workflow_log":return` log ${e.data?.message??""}`;case"artifact_written":return` artifact ${e.data?.name??""}`;case"synthesis_completed":return" synthesis complete";case"workflow_completed":return" workflow completed";case"workflow_stopped":return" workflow stopped";case"workflow_failed":return` workflow failed: ${e.data?.error??"unknown error"}`;default:return}}a(Cn,"formatWorkflowEvent");function ua(e){let o=Cn(e);o&&console.log(C.dim(o))}a(ua,"renderWorkflowEvent");import In from"chalk";import Zd from"string-width";var eu=9;function ou(e,o=eu){let n=Zd(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(ou,"padWorkflowLiveSymbol");function pa(e,o={}){let n=e.items.filter(p=>p.kind==="agent"),t=n.filter(p=>p.status==="running").map(p=>p.title),r=n.filter(p=>p.status==="completed").length,s=n.filter(p=>p.status==="failed").length,l=n.filter(p=>p.status==="cancelled").length,c=e.status==="completed"?"completed":e.status==="failed"?"failed":e.status==="cancelled"?"stopped":"running",d=e.activePhaseId===void 0?void 0:e.items.find(p=>p.id===e.activePhaseId)?.title,u=Date.parse(e.startedAt),f=o.message??e.latestMessage;return{runId:e.runId,workflow:e.displayName??e.workflowName,status:c,...d!==void 0?{phase:d}:{},...e.activePhaseIndex!==void 0?{phaseIndex:e.activePhaseIndex}:{},...e.phaseCount!==void 0?{phaseTotal:e.phaseCount}:{},...Number.isFinite(u)?{startedAt:u}:{},elapsedMs:e.elapsedMs,activeAgents:t,totalSpawned:e.progress.spawnedAgents,...e.progress.plannedItems!==void 0?{plannedAgents:e.progress.plannedItems}:{},...e.progress.agentCap!==void 0?{agentCap:e.progress.agentCap}:{},...e.tokens!==void 0?{tokenBudgetSpent:e.tokens.spent}:{},...e.tokens?.total!==void 0?{tokenBudgetTotal:e.tokens.total}:{},completedAgents:r,failedAgents:s,stoppedAgents:l,...f!==void 0?{message:f}:{},...o.locale!==void 0?{locale:o.locale}:{}}}a(pa,"workflowLiveSnapshotFromProcess");function Xw(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${ou(o.symbol)}${o.text}`)}a(Xw,"formatWorkflowLiveViewModelForTranscript");var nu=6,fa={en:{workflow:"workflow",phase:"phase",agent:"agent",more:"more",progress:"progress",waiting:"waiting",hint:"hint",finished:"finished",failed:"failed",stopped:"stopped",started:"started",cap:"cap",budget:"budget",spent:"spent",waitingForFirstAgent:"waiting for first agent",showStopHint:a(e=>`show: /workflow show ${e} | stop: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} active agent${e===1?"":"s"}`,"activeAgents")},zh:{workflow:"\u5DE5\u4F5C\u6D41",phase:"\u9636\u6BB5",agent:"\u667A\u80FD\u4F53",more:"\u66F4\u591A",progress:"\u8FDB\u5EA6",waiting:"\u7B49\u5F85",hint:"\u63D0\u793A",finished:"\u5B8C\u6210",failed:"\u5931\u8D25",stopped:"\u505C\u6B62",started:"\u5DF2\u542F\u52A8",cap:"\u4E0A\u9650",budget:"\u9884\u7B97",spent:"\u5DF2\u7528",waitingForFirstAgent:"\u7B49\u5F85\u7B2C\u4E00\u4E2A\u667A\u80FD\u4F53\u542F\u52A8",showStopHint:a(e=>`\u67E5\u770B: /workflow show ${e} | \u505C\u6B62: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`,"activeAgents")}},tu={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function ru(e){return e.length>14?`${e.slice(0,14)}...`:e}a(ru,"shortRunId");function En(e){return e==="zh"?fa.zh:fa.en}a(En,"workflowLiveLabels");function iu(e,o){let n=Math.max(0,Math.floor(e)),t=Math.floor(n/1e3),r=t%60,s=Math.floor(t/60),l=s%60,c=Math.floor(s/60);return o==="zh"?c>0?`${c}\u5C0F\u65F6${String(l).padStart(2,"0")}\u5206`:l>0?`${l}\u5206${String(r).padStart(2,"0")}\u79D2`:`${r}\u79D2`:c>0?`${c}h${l}m${r}s`:l>0?`${l}m${r}s`:`${r}s`}a(iu,"formatElapsedMs");function ma(e){let o=Math.max(0,Math.floor(e));return o>=1e6?`${(o/1e6).toFixed(1).replace(/\.0$/,"")}M`:o>=1e3?`${(o/1e3).toFixed(1).replace(/\.0$/,"")}k`:String(o)}a(ma,"formatTokenCount");function su(e){if(e.tokenBudgetSpent===void 0)return;let o=En(e.locale),n=ma(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=ma(e.tokenBudgetTotal);return e.tokenBudgetSpent<=0?`${o.budget} ${t} tokens`:`${o.spent} ${n}/${t} tokens`}if(!(e.tokenBudgetSpent<=0))return`${o.spent} ${n} tokens`}a(su,"formatWorkflowTokenUsage");function au(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(iu(t,e.locale));let r=su(e);return r!==void 0&&n.push(r),n}a(au,"formatWorkflowHeaderMetrics");function lu(e){let o=En(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=ga(e,n),r=[];e.activeAgents.length>0&&r.push(o.activeAgents(e.activeAgents.length)),e.plannedAgents!==void 0&&r.push(`${o.started} ${e.totalSpawned}`),e.failedAgents>0&&r.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&r.push(`${e.stoppedAgents} ${o.stopped}`),e.agentCap!==void 0&&r.push(`${o.cap} ${e.agentCap}`);let s=r.length===0?"":e.locale==="zh"?`\uFF08${r.join("\uFF0C")}\uFF09`:` (${r.join(", ")})`;return`${n}/${t} ${o.finished}${s}`}a(lu,"formatWorkflowProgress");function cu(e){let o=En(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=ga(e),r=e.locale==="zh"?`${n}/${t} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`:`${n}/${t} active agent${n===1?"":"s"}`,s=[];return e.failedAgents>0&&s.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&s.push(`${e.stoppedAgents} ${o.stopped}`),s.length===0?r:e.locale==="zh"?`${r}\uFF0C${s.join("\uFF0C")}`:`${r}, ${s.join(", ")}`}a(cu,"formatWorkflowCounter");function ga(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(ga,"workflowProgressDenominator");function du(e){if(e.phase)return e.phaseIndex!==void 0&&e.phaseTotal!==void 0&&e.phaseIndex>0&&e.phaseTotal>0?`${e.phaseIndex}/${e.phaseTotal} ${e.phase}`:e.phase}a(du,"formatWorkflowPhase");function Vw(e,o=Date.now()){if(!e||e.status!=="running")return tu;let n=[],t=En(e.locale),r=au(e,o),s=r.length===0?"":` \xB7 ${r.join(" \xB7 ")}`;n.push({kind:"header",id:"header",symbol:t.workflow,symbolColor:e.failedAgents>0?"red":"cyan",text:`${e.workflow} (${ru(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${s}`,isActive:!0});let l=du(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=lu(e);c&&n.push({kind:"summary",id:"progress",symbol:t.progress,symbolColor:e.failedAgents>0?"red":"green",text:c,isActive:!1}),e.totalSpawned===0&&e.activeAgents.length===0&&n.push({kind:"summary",id:"waiting",symbol:t.waiting,symbolColor:"dim",text:t.waitingForFirstAgent,isActive:!1}),n.push({kind:"hint",id:"controls",symbol:t.hint,symbolColor:"dim",text:e.message??t.showStopHint(e.runId),isActive:!1});let d=n.slice(0,nu);return{shouldRender:!0,workflow:e.workflow,runId:e.runId,...e.phase!==void 0?{phase:e.phase}:{},...e.phaseIndex!==void 0?{phaseIndex:e.phaseIndex}:{},...e.phaseTotal!==void 0?{phaseTotal:e.phaseTotal}:{},activeCount:e.activeAgents.length,totalSpawned:e.totalSpawned,...e.plannedAgents!==void 0?{plannedAgents:e.plannedAgents}:{},completedAgents:e.completedAgents,failedAgents:e.failedAgents,stoppedAgents:e.stoppedAgents,counterText:cu(e),rows:d}}a(Vw,"buildWorkflowLiveViewModel");function uu(e,o){return o!==0?!1:e.name==="WorkflowScriptExecutionError"||/restricted workflow script|workflow generation source|workflow command .* must|unsupported workflow command/i.test(e.message)}a(uu,"isWorkflowHarnessFailure");function Jt(e){let o=sa(e.runId,e.canRerun),n=e.partialResultText?Qe(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return uu(e.error,e.totalSpawned)?[`Workflow harness failed before launching child agents (${e.runId}): ${e.error.message}`,"This points to an invalid generated workflow script or saved capsule, not a failed child-agent task.",...t,o].join(`
219
219
  `):[`Workflow failed (${e.runId}): ${e.error.message}`,...t,o].join(`
220
- `)}a(Xt,"formatWorkflowFailedMessage");function ru(e,o,n){return Qe(e.artifacts,o,n)??Io(e.events,n)}a(ru,"formatWorkflowFailurePartialResult");function Cn(e){let o=e?.usage;if(typeof o!="object"||o===null)return 0;let n=o,t=n.totalTokens;if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;let r=n.inputTokens,s=n.outputTokens,l=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof s=="number"&&Number.isFinite(s)&&s>0?s:0;return l+c}a(Cn,"readWorkflowEventUsageTokens");function D(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(Rn.red(`
220
+ `)}a(Jt,"formatWorkflowFailedMessage");function fu(e,o,n){return Ze(e.artifacts,o,n)??Po(e.events,n)}a(fu,"formatWorkflowFailurePartialResult");function Tn(e){let o=e?.usage;if(typeof o!="object"||o===null)return 0;let n=o,t=n.totalTokens;if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;let r=n.inputTokens,s=n.outputTokens,l=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof s=="number"&&Number.isFinite(s)&&s>0?s:0;return l+c}a(Tn,"readWorkflowEventUsageTokens");function D(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(In.red(`
221
221
  ${o.text}
222
- `));return}if(o.type==="success"){console.log(Rn.green(`
222
+ `));return}if(o.type==="success"){console.log(In.green(`
223
223
  ${o.text}
224
- `));return}if(o.type==="event"){console.log(Rn.dim(o.text));return}if(o.type==="assistant"){console.log(`
224
+ `));return}if(o.type==="event"){console.log(In.dim(o.text));return}if(o.type==="assistant"){console.log(`
225
225
  ${o.text}
226
- `);return}console.log(Rn.dim(`
226
+ `);return}console.log(In.dim(`
227
227
  ${o.text}
228
- `))}a(D,"emitWorkflowRunMessage");function oo(e,o,n={}){let t=n.presentation==="agentic"?hn(n.runId??"current"):void 0,r=!1;return s=>{if(r&&(s.type==="agent_completed"||s.type==="agent_unverified"||s.type==="agent_failed"||s.type==="agent_summary_updated"))return;o?.onEvent(s);let l=xn(s);if(e.onWorkflowRunMessage){if(l&&D(e,{type:"event",text:l}),t){let c=t(s,n.locale??"en");c&&D(e,{type:"assistant",text:c,final:!1})}(s.type==="workflow_completed"||s.type==="workflow_failed"||s.type==="workflow_stopped")&&(r=!0);return}(s.type==="workflow_completed"||s.type==="workflow_failed"||s.type==="workflow_stopped")&&(r=!0),l&&ia(s)}}a(oo,"workflowEventSink");function no(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(no,"subscribeWorkflowLiveProcess");function Me(e,o,n,t="en"){let r=Date.now(),s=new Map,l,c=0,d=0,u=0,f=0,p=0,k=!1,b=n.phases??[],A=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,R=a((v,$)=>{let I=l===void 0?-1:b.indexOf(l),M=I>=0?I+1:void 0,re=b.length>0?b.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:v,...l!==void 0?{phase:l}:{},...M!==void 0?{phaseIndex:M}:{},...re!==void 0?{phaseTotal:re}:{},startedAt:r,elapsedMs:Math.max(0,Date.now()-r),activeAgents:[...s.values()],totalSpawned:c,...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},...n.maxAgents!==void 0?{agentCap:n.maxAgents}:{},tokenBudgetSpent:p,...A!==void 0?{tokenBudgetTotal:A}:{},completedAgents:d,failedAgents:u,stoppedAgents:f,...$!==void 0?{message:$}:{},locale:t})},"emit");return{running:a(v=>{k||R("running",v)},"running"),onProcessEvent:a(v=>{if(k&&v.type!=="workflow_finished")return;let $=v.snapshot.status;(v.type==="workflow_finished"||$==="completed"||$==="failed"||$==="cancelled")&&(k=!0);let I=v.type==="workflow_updated"?v.message:void 0;e.onWorkflowRunUpdate?.(la(v.snapshot,I===void 0?{locale:t}:{locale:t,message:I}))},"onProcessEvent"),onEvent:a(v=>{if(!k)switch(v.type){case"phase_started":{let $=v.data?.name;l=typeof $=="string"?$:l,R("running");break}case"agent_spawned":{let $=typeof v.data?.taskId=="string"?v.data.taskId:`task-${c+1}`,I=typeof v.data?.name=="string"?v.data.name:$;s.set($,I),c+=1,R("running");break}case"agent_completed":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Cn(v.data),zt(v)==="failed"?u+=1:d+=1,R("running");break}case"agent_unverified":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Cn(v.data),d+=1,R("running");break}case"agent_failed":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Cn(v.data),u+=1,R("running");break}case"agent_stopped":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Cn(v.data),f+=1,R("running");break}case"synthesis_completed":{R("running","synthesis complete");break}default:break}},"onEvent"),complete:a((v,$)=>{k||(k=!0,R(v,$))},"complete")}}a(Me,"createWorkflowLiveUpdateEmitter");function _e(e,o,n,t,r={}){e.done.then(s=>{if(s.kind==="failed"){if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}let l=r.locale??"en",c={full:r.presentation==="agentic"},d=ru(s.state,l,c),u=Xt({runId:n,error:s.error,canRerun:r.canRerun===!0,totalSpawned:s.state.totalSpawned,...d!==void 0?{partialResultText:d}:{},locale:l});t?.complete("failed",s.error.message),D(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?Xt({runId:n,error:s.error,canRerun:r.canRerun===!0,totalSpawned:s.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&D(o,{type:"assistant",text:u,final:!0});return}if(s.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=ke(s.result,c)??Qe(s.state.artifacts,l,c),u=d===void 0?Io(s.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){D(o,{type:"assistant",text:Tt({runId:n,totalSpawned:s.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}D(o,{type:"success",text:[`Workflow completed (${s.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
228
+ `))}a(D,"emitWorkflowRunMessage");function oo(e,o,n={}){let t=n.presentation==="agentic"?kn(n.runId??"current"):void 0,r=!1;return s=>{if(r&&(s.type==="agent_completed"||s.type==="agent_unverified"||s.type==="agent_failed"||s.type==="agent_summary_updated"))return;o?.onEvent(s);let l=Cn(s);if(e.onWorkflowRunMessage){if(l&&D(e,{type:"event",text:l}),t){let c=t(s,n.locale??"en");c&&D(e,{type:"assistant",text:c,final:!1})}(s.type==="workflow_completed"||s.type==="workflow_failed"||s.type==="workflow_stopped")&&(r=!0);return}(s.type==="workflow_completed"||s.type==="workflow_failed"||s.type==="workflow_stopped")&&(r=!0),l&&ua(s)}}a(oo,"workflowEventSink");function no(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(no,"subscribeWorkflowLiveProcess");function _e(e,o,n,t="en"){let r=Date.now(),s=new Map,l,c=0,d=0,u=0,f=0,p=0,k=!1,b=n.phases??[],A=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,R=a((v,$)=>{let I=l===void 0?-1:b.indexOf(l),M=I>=0?I+1:void 0,se=b.length>0?b.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:v,...l!==void 0?{phase:l}:{},...M!==void 0?{phaseIndex:M}:{},...se!==void 0?{phaseTotal:se}:{},startedAt:r,elapsedMs:Math.max(0,Date.now()-r),activeAgents:[...s.values()],totalSpawned:c,...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},...n.maxAgents!==void 0?{agentCap:n.maxAgents}:{},tokenBudgetSpent:p,...A!==void 0?{tokenBudgetTotal:A}:{},completedAgents:d,failedAgents:u,stoppedAgents:f,...$!==void 0?{message:$}:{},locale:t})},"emit");return{running:a(v=>{k||R("running",v)},"running"),onProcessEvent:a(v=>{if(k&&v.type!=="workflow_finished")return;let $=v.snapshot.status;(v.type==="workflow_finished"||$==="completed"||$==="failed"||$==="cancelled")&&(k=!0);let I=v.type==="workflow_updated"?v.message:void 0;e.onWorkflowRunUpdate?.(pa(v.snapshot,I===void 0?{locale:t}:{locale:t,message:I}))},"onProcessEvent"),onEvent:a(v=>{if(!k)switch(v.type){case"phase_started":{let $=v.data?.name;l=typeof $=="string"?$:l,R("running");break}case"agent_spawned":{let $=typeof v.data?.taskId=="string"?v.data.taskId:`task-${c+1}`,I=typeof v.data?.name=="string"?v.data.name:$;s.set($,I),c+=1,R("running");break}case"agent_completed":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Tn(v.data),Yt(v)==="failed"?u+=1:d+=1,R("running");break}case"agent_unverified":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Tn(v.data),d+=1,R("running");break}case"agent_failed":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Tn(v.data),u+=1,R("running");break}case"agent_stopped":{let $=typeof v.data?.taskId=="string"?v.data.taskId:void 0;$&&s.delete($),p+=Tn(v.data),f+=1,R("running");break}case"synthesis_completed":{R("running","synthesis complete");break}default:break}},"onEvent"),complete:a((v,$)=>{k||(k=!0,R(v,$))},"complete")}}a(_e,"createWorkflowLiveUpdateEmitter");function Le(e,o,n,t,r={}){e.done.then(s=>{if(s.kind==="failed"){if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}let l=r.locale??"en",c={full:r.presentation==="agentic"},d=fu(s.state,l,c),u=Jt({runId:n,error:s.error,canRerun:r.canRerun===!0,totalSpawned:s.state.totalSpawned,...d!==void 0?{partialResultText:d}:{},locale:l});t?.complete("failed",s.error.message),D(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?Jt({runId:n,error:s.error,canRerun:r.canRerun===!0,totalSpawned:s.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&D(o,{type:"assistant",text:u,final:!0});return}if(s.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=$e(s.result,c)??Ze(s.state.artifacts,l,c),u=d===void 0?Po(s.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){D(o,{type:"assistant",text:Lt({runId:n,totalSpawned:s.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}D(o,{type:"success",text:[`Workflow completed (${s.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
229
229
  `)}),f&&D(o,{type:"info",text:`Workflow result:
230
- ${f}`})}}).catch(s=>{let l=s instanceof Error?s.message:String(s);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),D(o,{type:"error",text:Xt({runId:n,error:s instanceof Error?s:new Error(l),canRerun:r.canRerun===!0})})})}a(_e,"observeManagedWorkflowDone");function Le(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(Le,"unsubscribeWorkflowLiveProcessOnDone");function $e(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){D(e.callbacks,{type:"error",text:`Workflow builder failed: ${o.message}`});return}!e.onBuilderEvent&&(o.stage==="started"||o.stage==="generating"||o.stage==="validating"||o.stage==="ready")&&console.log(En.dim(`
230
+ ${f}`})}}).catch(s=>{let l=s instanceof Error?s.message:String(s);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),D(o,{type:"error",text:Jt({runId:n,error:s instanceof Error?s:new Error(l),canRerun:r.canRerun===!0})})})}a(Le,"observeManagedWorkflowDone");function We(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(We,"unsubscribeWorkflowLiveProcessOnDone");function xe(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){D(e.callbacks,{type:"error",text:`Workflow builder failed: ${o.message}`});return}!e.onBuilderEvent&&(o.stage==="started"||o.stage==="generating"||o.stage==="validating"||o.stage==="ready")&&console.log(Pn.dim(`
231
231
  [workflow] ${o.message}
232
- `))}a($e,"emitWorkflowBuilderEvent");function _o(e){return{source:e.source,displayName:e.displayName,...e.goal!==void 0?{goal:e.goal}:{},...e.savedWorkflowName!==void 0?{savedWorkflowName:e.savedWorkflowName}:{},...e.sourceRunId!==void 0?{sourceRunId:e.sourceRunId}:{},...e.sourceWorkflowName!==void 0?{sourceWorkflowName:e.sourceWorkflowName}:{},...e.revisionOf!==void 0?{revisionOf:e.revisionOf}:{},...e.hostMetadata!==void 0?{hostMetadata:{...e.hostMetadata}}:{}}}a(_o,"buildWorkflowProcessMetadata");async function su(e){let o=e.approval==="required"?Te(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(En.red(`
232
+ `))}a(xe,"emitWorkflowBuilderEvent");function Wo(e){return{source:e.source,displayName:e.displayName,...e.goal!==void 0?{goal:e.goal}:{},...e.savedWorkflowName!==void 0?{savedWorkflowName:e.savedWorkflowName}:{},...e.sourceRunId!==void 0?{sourceRunId:e.sourceRunId}:{},...e.sourceWorkflowName!==void 0?{sourceWorkflowName:e.sourceWorkflowName}:{},...e.revisionOf!==void 0?{revisionOf:e.revisionOf}:{},...e.hostMetadata!==void 0?{hostMetadata:{...e.hostMetadata}}:{}}}a(Wo,"buildWorkflowProcessMetadata");async function pu(e){let o=e.approval==="required"?Me(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(Pn.red(`
233
233
  [workflow] refusing to start a workflow without an interactive approval channel.
234
- `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(En.red(`
234
+ `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(Pn.red(`
235
235
  [workflow] cannot start - REPL options unavailable in this context.
236
- `)),"failed";let t=Pe(e.request),r,s;try{if($e(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let v=Yo(e.builtin.name);if(!v)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);s={module:v,args:e.builtin.args,approvalDescription:v.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{$e(e,{stage:"generating",message:"Workflow - generating harness"});let $=await(e.generateWorkflow??Vo)({request:e.request,options:r});if($.kind==="declined")return $e(e,{stage:"declined",message:$.reason}),console.log(En.dim(`
236
+ `)),"failed";let t=Pe(e.request),r,s;try{if(xe(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let v=Qo(e.builtin.name);if(!v)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);s={module:v,args:e.builtin.args,approvalDescription:v.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{xe(e,{stage:"generating",message:"Workflow - generating harness"});let $=await(e.generateWorkflow??Jo)({request:e.request,options:r});if($.kind==="declined")return xe(e,{stage:"declined",message:$.reason}),console.log(Pn.dim(`
237
237
  Workflow not created: ${$.reason}
238
- `)),"declined";s={module:$.module,args:{request:e.request},approvalDescription:$.approvalSummary,mayUseWorktree:$.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:$.scriptSnapshot,rawScript:$.scriptSnapshot.source}}$e(e,{stage:"validating",message:"Workflow - validating harness"})}catch(v){let $=v instanceof Error?v.message:String(v);return $e(e,{stage:"failed",message:$}),"failed"}$e(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=xe(s.module);l!=="agentic"&&D(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${s.approvalDescription}`});let d=ye(process.cwd()).key,u=e.runBaseDir??W("workflow-runs",d),f=e.runManager??He(),p=`run-${Date.now().toString(36)}`,k=iu(u,p);if(o){if(!await o(ce(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree,...s.rawScript!==void 0?{rawScript:s.rawScript}:{}})))return $e(e,{stage:"cancelled",message:"Workflow cancelled"}),D(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(D(e.callbacks,{type:"info",text:ce(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree})}),D(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${s.sandbox}); normal permission gates still apply.`}));l==="agentic"?D(e.callbacks,{type:"assistant",text:Mt({runId:p,summary:c,approvalSummary:s.approvalDescription,locale:t}),final:!1}):D(e.callbacks,{type:"info",text:`Started workflow ${s.module.meta.name} (${p}). Use /workflow show ${p} for status.`});let b=Me(e.callbacks,p,s.module.meta,t);b.running(`Use /workflow show ${p} for status or /workflow stop ${p} to stop.`);let A=no(f,b,p),R=f.startFromOptions({module:s.module,args:s.args,options:r,runId:p,runDir:k,...s.scriptSnapshot!==void 0?{scriptSnapshot:s.scriptSnapshot}:{},processMetadata:_o({source:e.processSource??"command",displayName:s.module.meta.name,goal:e.request,hostMetadata:{workflowAuthorship:"kodax-generated"}}),onEvent:oo(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:p})});return Le(R,A),$e(e,{stage:"launched",message:`Workflow ${s.module.meta.name} started`}),_e(R,e.callbacks,p,b,{canRerun:!0,presentation:l,locale:t}),"started"}a(su,"startGeneratedWorkflowFromRequest");function Vt(e){let o=e[0]?.toLowerCase();if(o==="help"||o==="--help"||o==="-h")return{kind:"help"};if(!o||o==="list")return{kind:"list"};if(o==="runs")return{kind:"runs",rawArgs:e.slice(1)};if(o==="show"){let n=e.slice(1),t=n.includes("--full"),r=n.find(s=>s!=="--full")??"";return t?{kind:"show",runId:r,full:!0}:{kind:"show",runId:r}}if(o==="pause")return{kind:"pause",runId:e[1]??""};if(o==="resume")return{kind:"resume",runId:e[1]??""};if(o==="stop")return{kind:"stop",runId:e[1]??""};if(o==="delete"){let n=e.slice(1),t=n.includes("--force"),r=n.includes("--saved"),s=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&s?"conflict":r?"saved":s?"run":void 0;return{kind:"delete",target:l,...t?{force:!0}:{},...c?{scope:c}:{}}}if(o==="prune")return{kind:"prune",rawArgs:e.slice(1)};if(o==="save")return{kind:"save",runId:e[1]??"",name:e[2]??""};if(o==="rename")return{kind:"rename",target:e[1]??"",newName:e.slice(2).join(" ").trim()};if(o==="revise"){let n=e.slice(1),t=n.includes("--replace"),r=n.filter(s=>s!=="--replace");return{kind:"revise",target:r[0]??"",request:r.slice(1).join(" ").trim(),...t?{replace:!0}:{}}}return o==="rerun"?{kind:"rerun",runId:e[1]??"",rawArgs:e.slice(2).join(" ").trim()}:o==="create"?{kind:"create",request:e.slice(1).join(" ").trim()}:{kind:"start",name:e[0],rawArgs:e.slice(1).join(" ").trim()}}a(Vt,"parseWorkflowInvocation");function Lo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(Lo,"parseWorkflowArgs");function Yt(e){return["Revise this existing KodaX dynamic workflow capsule.","Return a complete revised workflow, not a patch.","Preserve the reusable workflow intent, safety requirements, and compatible args shape unless the requested change explicitly requires otherwise.","",`Target: ${e.target}`,"","Original manifest:",JSON.stringify(e.capsule.manifest,null,2),"","Original source:","```js",e.capsule.source,"```","",`Change request: ${e.changeRequest}`].join(`
239
- `)}a(Yt,"buildWorkflowRevisionRequest");function da(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(da,"parseNonNegativeInteger");function Jt(e){let o=!1,n=20;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let s=da(e[t+1]);if(s===void 0||s<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(s,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(Jt,"parseWorkflowRunsOptions");function au(e){if(!e)return;let o=/^(\d+)([dh]?)$/i.exec(e.trim());if(!o)return;let n=Number(o[1]);return!Number.isInteger(n)||n<=0?void 0:(o[2]?.toLowerCase()||"d")==="h"?n*60*60*1e3:n*24*60*60*1e3}a(au,"parseOlderThanMs");function Zt(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let s=e[r];if(s==="--dry-run"){o=!0;continue}if(s==="--keep"){let l=da(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(s==="--older-than"){let l=au(e[r+1]);if(l===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=l,r+=1;continue}return{dryRun:o,error:`unknown option: ${s??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:50}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}a(Zt,"parseWorkflowPruneOptions");var lu=1440*60*1e3;function cu(e){return new Map(e.map(o=>[o.runId,o]))}a(cu,"processSnapshotsByRunId");function du(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/lu}:{}}}a(du,"workflowPruneRetentionOptions");function uu(e,o){let n=new Map(e.map(t=>[t.runId,t]));return o.map(t=>{let r=n.get(t);return{runId:t,workflow:r?.workflow??"?",status:r?.status??"?",endedAt:r?.endedAt??0}})}a(uu,"workflowPruneCandidateSummaries");function fa(e){return _o({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(fa,"buildSavedWorkflowProcessMetadata");var ma={name:"workflow",description:"Run a dynamic multi-agent workflow (FEATURE_217)",usage:"/workflow [help | list | pending | runs | show | pause | resume | stop | delete | prune | rerun | save | rename | revise | create | <name> [args] | <request>]",argumentHint:"help | list | pending | runs [--all|--limit N] | show [runId] | pause <runId> | resume <runId> | stop [runId] | delete [--force] [--run|--saved] <runId|savedName> | prune --dry-run|--keep N|--older-than Nd | rerun <runId|savedName> [args] | save <runId> <name> | rename <runId|alias|savedName> <newName> | revise [--replace] <runId|alias|savedName> <change> | create <request> | <name> [args]",detailedHelp:yn,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await wn(gn(o),"workflow");return}let r=Vt(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(h.yellow(`
238
+ `)),"declined";s={module:$.module,args:{request:e.request},approvalDescription:$.approvalSummary,mayUseWorktree:$.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:$.scriptSnapshot,rawScript:$.scriptSnapshot.source}}xe(e,{stage:"validating",message:"Workflow - validating harness"})}catch(v){let $=v instanceof Error?v.message:String(v);return xe(e,{stage:"failed",message:$}),"failed"}xe(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=Ae(s.module);l!=="agentic"&&D(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${s.approvalDescription}`});let d=ke(process.cwd()).key,u=e.runBaseDir??W("workflow-runs",d),f=e.runManager??He(),p=`run-${Date.now().toString(36)}`,k=mu(u,p);if(o){if(!await o(ue(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree,...s.rawScript!==void 0?{rawScript:s.rawScript}:{}})))return xe(e,{stage:"cancelled",message:"Workflow cancelled"}),D(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(D(e.callbacks,{type:"info",text:ue(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree})}),D(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${s.sandbox}); normal permission gates still apply.`}));l==="agentic"?D(e.callbacks,{type:"assistant",text:Wt({runId:p,summary:c,approvalSummary:s.approvalDescription,locale:t}),final:!1}):D(e.callbacks,{type:"info",text:`Started workflow ${s.module.meta.name} (${p}). Use /workflow show ${p} for status.`});let b=_e(e.callbacks,p,s.module.meta,t);b.running(`Use /workflow show ${p} for status or /workflow stop ${p} to stop.`);let A=no(f,b,p),R=f.startFromOptions({module:s.module,args:s.args,options:r,runId:p,runDir:k,...s.scriptSnapshot!==void 0?{scriptSnapshot:s.scriptSnapshot}:{},processMetadata:Wo({source:e.processSource??"command",displayName:s.module.meta.name,goal:e.request,hostMetadata:{workflowAuthorship:"kodax-generated"}}),onEvent:oo(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:p})});return We(R,A),xe(e,{stage:"launched",message:`Workflow ${s.module.meta.name} started`}),Le(R,e.callbacks,p,b,{canRerun:!0,presentation:l,locale:t}),"started"}a(pu,"startGeneratedWorkflowFromRequest");function Qt(e){let o=e[0]?.toLowerCase();if(o==="help"||o==="--help"||o==="-h")return{kind:"help"};if(!o||o==="list")return{kind:"list"};if(o==="runs")return{kind:"runs",rawArgs:e.slice(1)};if(o==="show"){let n=e.slice(1),t=n.includes("--full"),r=n.find(s=>s!=="--full")??"";return t?{kind:"show",runId:r,full:!0}:{kind:"show",runId:r}}if(o==="pause")return{kind:"pause",runId:e[1]??""};if(o==="resume")return{kind:"resume",runId:e[1]??""};if(o==="stop")return{kind:"stop",runId:e[1]??""};if(o==="delete"){let n=e.slice(1),t=n.includes("--force"),r=n.includes("--saved"),s=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&s?"conflict":r?"saved":s?"run":void 0;return{kind:"delete",target:l,...t?{force:!0}:{},...c?{scope:c}:{}}}if(o==="prune")return{kind:"prune",rawArgs:e.slice(1)};if(o==="save")return{kind:"save",runId:e[1]??"",name:e[2]??""};if(o==="rename")return{kind:"rename",target:e[1]??"",newName:e.slice(2).join(" ").trim()};if(o==="revise"){let n=e.slice(1),t=n.includes("--replace"),r=n.filter(s=>s!=="--replace");return{kind:"revise",target:r[0]??"",request:r.slice(1).join(" ").trim(),...t?{replace:!0}:{}}}return o==="rerun"?{kind:"rerun",runId:e[1]??"",rawArgs:e.slice(2).join(" ").trim()}:o==="create"?{kind:"create",request:e.slice(1).join(" ").trim()}:{kind:"start",name:e[0],rawArgs:e.slice(1).join(" ").trim()}}a(Qt,"parseWorkflowInvocation");function Oo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(Oo,"parseWorkflowArgs");function Zt(e){return["Revise this existing KodaX dynamic workflow capsule.","Return a complete revised workflow, not a patch.","Preserve the reusable workflow intent, safety requirements, and compatible args shape unless the requested change explicitly requires otherwise.","",`Target: ${e.target}`,"","Original manifest:",JSON.stringify(e.capsule.manifest,null,2),"","Original source:","```js",e.capsule.source,"```","",`Change request: ${e.changeRequest}`].join(`
239
+ `)}a(Zt,"buildWorkflowRevisionRequest");function wa(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(wa,"parseNonNegativeInteger");function er(e){let o=!1,n=20;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let s=wa(e[t+1]);if(s===void 0||s<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(s,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(er,"parseWorkflowRunsOptions");function gu(e){if(!e)return;let o=/^(\d+)([dh]?)$/i.exec(e.trim());if(!o)return;let n=Number(o[1]);return!Number.isInteger(n)||n<=0?void 0:(o[2]?.toLowerCase()||"d")==="h"?n*60*60*1e3:n*24*60*60*1e3}a(gu,"parseOlderThanMs");function or(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let s=e[r];if(s==="--dry-run"){o=!0;continue}if(s==="--keep"){let l=wa(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(s==="--older-than"){let l=gu(e[r+1]);if(l===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=l,r+=1;continue}return{dryRun:o,error:`unknown option: ${s??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:50}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}a(or,"parseWorkflowPruneOptions");var wu=1440*60*1e3;function hu(e){return new Map(e.map(o=>[o.runId,o]))}a(hu,"processSnapshotsByRunId");function yu(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/wu}:{}}}a(yu,"workflowPruneRetentionOptions");function vu(e,o){let n=new Map(e.map(t=>[t.runId,t]));return o.map(t=>{let r=n.get(t);return{runId:t,workflow:r?.workflow??"?",status:r?.status??"?",endedAt:r?.endedAt??0}})}a(vu,"workflowPruneCandidateSummaries");function ya(e){return Wo({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(ya,"buildSavedWorkflowProcessMetadata");var va={name:"workflow",description:"Run a dynamic multi-agent workflow (FEATURE_217)",usage:"/workflow [help | list | pending | runs | show | pause | resume | stop | delete | prune | rerun | save | rename | revise | create | <name> [args] | <request>]",argumentHint:"help | list | pending | runs [--all|--limit N] | show [runId] | pause <runId> | resume <runId> | stop [runId] | delete [--force] [--run|--saved] <runId|savedName> | prune --dry-run|--keep N|--older-than Nd | rerun <runId|savedName> [args] | save <runId> <name> | rename <runId|alias|savedName> <newName> | revise [--replace] <runId|alias|savedName> <change> | create <request> | <name> [args]",detailedHelp:bn,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await vn(yn(o),"workflow");return}let r=Qt(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(h.yellow(`
240
240
  [workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
241
241
  Switch with /agent-mode ama, then request it explicitly via /workflow.
242
- `));return}let s=ye(process.cwd()).key,l=W("workflow-runs",s),c=He(),d=qt(process.cwd()),u=ai({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async y=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:ci(y)}}),"createWorkflowFromText");if(r.kind==="help"){yn();return}if(r.kind==="list"){console.log(h.bold(`
243
- Built-in workflows:`)),console.log(Wt(Jo())),console.log(h.bold(`
244
- Pattern templates:`));for(let x of li())console.log(` ${h.cyan(x.name)} ${h.dim(`(${x.pattern})`)} - ${x.description}`);let y=await Fe(d);y.length>0&&(console.log(h.bold(`
245
- Saved workflows:`)),console.log(Gt(y))),console.log(h.dim(`
242
+ `));return}let s=ke(process.cwd()).key,l=W("workflow-runs",s),c=He(),d=Xt(process.cwd()),u=fi({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async y=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:pi(y)}}),"createWorkflowFromText");if(r.kind==="help"){bn();return}if(r.kind==="list"){console.log(h.bold(`
243
+ Built-in workflows:`)),console.log(Dt(Zo())),console.log(h.bold(`
244
+ Pattern templates:`));for(let x of mi())console.log(` ${h.cyan(x.name)} ${h.dim(`(${x.pattern})`)} - ${x.description}`);let y=await Fe(d);y.length>0&&(console.log(h.bold(`
245
+ Saved workflows:`)),console.log(Vt(y))),console.log(h.dim(`
246
246
  Run one with: /workflow <name> <question or JSON args>`)),console.log(h.dim(` Show usage with: /workflow help
247
- `));return}if(r.kind==="runs"){let y=Jt(r.rawArgs);if(y.error){console.log(h.yellow(`
247
+ `));return}if(r.kind==="runs"){let y=er(r.rawArgs);if(y.error){console.log(h.yellow(`
248
248
  Usage: /workflow runs [--all] [--limit N]
249
249
  ${y.error}
250
- `));return}let x=cu(u.listWorkflowProcessSnapshots({activeOnly:!1})),S=c.list().filter(eo);S.length>0&&(console.log(h.bold(`
251
- Active workflow runs:`)),console.log(Dt(S,{processSnapshots:x}))),console.log(h.bold(`
252
- Workflow runs:`)),console.log(Nt(To(l),{limit:y.all?void 0:y.limit,showLimitHint:!y.all,processSnapshots:x})),console.log();return}if(r.kind==="show"){let y=To(l),x=r.runId||Ut(c.list(),y);if(!x){console.log(h.yellow(`
250
+ `));return}let x=hu(u.listWorkflowProcessSnapshots({activeOnly:!1})),S=c.list().filter(eo);S.length>0&&(console.log(h.bold(`
251
+ Active workflow runs:`)),console.log(Ft(S,{processSnapshots:x}))),console.log(h.bold(`
252
+ Workflow runs:`)),console.log(Ut(_o(l),{limit:y.all?void 0:y.limit,showLimitHint:!y.all,processSnapshots:x})),console.log();return}if(r.kind==="show"){let y=_o(l),x=r.runId||Kt(c.list(),y);if(!x){console.log(h.yellow(`
253
253
  No workflow runs yet. Start one with /workflow create <request>.
254
- `));return}if(!be(x))return;let S=c.get(x),_=Mo(l,x),P=u.getWorkflowProcessSnapshot(x);console.log(h.bold(`
255
- Workflow run:`)),console.log(Bt(S,_,{full:r.full===!0,...P?{processSnapshot:P}:{}})),console.log();return}if(r.kind==="pause"){if(!be(r.runId))return;let y=c.pause(r.runId);console.log(y?h.dim(`Paused workflow ${r.runId}.
254
+ `));return}if(!Se(x))return;let S=c.get(x),_=Lo(l,x),T=u.getWorkflowProcessSnapshot(x);console.log(h.bold(`
255
+ Workflow run:`)),console.log(zt(S,_,{full:r.full===!0,...T?{processSnapshot:T}:{}})),console.log();return}if(r.kind==="pause"){if(!Se(r.runId))return;let y=c.pause(r.runId);console.log(y?h.dim(`Paused workflow ${r.runId}.
256
256
  `):h.yellow(`No running workflow ${r.runId}.
257
- `));return}if(r.kind==="resume"){if(!be(r.runId))return;let y=c.resume(r.runId);console.log(y?h.dim(`Resumed workflow ${r.runId}.
257
+ `));return}if(r.kind==="resume"){if(!Se(r.runId))return;let y=c.resume(r.runId);console.log(y?h.dim(`Resumed workflow ${r.runId}.
258
258
  `):h.yellow(`No paused workflow ${r.runId}.
259
- `));return}if(r.kind==="stop"){let y=r.runId||Ft(c.list());if(!y){console.log(h.yellow(`
259
+ `));return}if(r.kind==="stop"){let y=r.runId||Bt(c.list());if(!y){console.log(h.yellow(`
260
260
  No active workflow to stop.
261
- `));return}if(!be(y))return;let x=await u.stopWorkflow(y,"stopped by user"),S=c.get(y),_=Mo(l,y),P=u.getWorkflowProcessSnapshot(y),j=S?.status??_?.status??P?.status,X=S?!eo(S):_?Ot(_.status):P!==void 0&&Go(P.status),N=Kt(y,Ht(S,_));console.log(x?h.dim(`Stopped workflow ${y}.
261
+ `));return}if(!Se(y))return;let x=await u.stopWorkflow(y,"stopped by user"),S=c.get(y),_=Lo(l,y),T=u.getWorkflowProcessSnapshot(y),j=S?.status??_?.status??T?.status,X=S?!eo(S):_?jt(_.status):T!==void 0&&Xo(T.status),N=Gt(y,qt(S,_));console.log(x?h.dim(`Stopped workflow ${y}.
262
262
  `):j&&X?h.yellow(`Workflow ${y} is already ${j}. Next: ${N}.
263
263
  `):h.yellow(`No active workflow ${y}.
264
264
  `));return}if(r.kind==="delete"){if(!r.target){console.log(h.yellow(`
265
265
  Usage: /workflow delete [--force] [--run|--saved] <runId|savedName>
266
266
  `));return}if(r.scope==="conflict"){console.log(h.red(`
267
267
  [workflow] choose only one delete scope: --run or --saved.
268
- `));return}let y=a(async(me,Z)=>{try{let pe=await u.deleteSavedWorkflow(me,Z);if(!pe){console.log(h.red(`
268
+ `));return}let y=a(async(ge,Z)=>{try{let we=await u.deleteSavedWorkflow(ge,Z);if(!we){console.log(h.red(`
269
269
  [workflow] saved workflow deletion is unavailable in this context.
270
270
  `));return}console.log(h.dim(`
271
- Deleted saved workflow ${pe.name}.
272
- `))}catch(pe){let U=pe instanceof Error?pe.message:String(pe);console.log(h.red(`
271
+ Deleted saved workflow ${we.name}.
272
+ `))}catch(we){let U=we instanceof Error?we.message:String(we);console.log(h.red(`
273
273
  [workflow] delete failed: ${U}
274
274
  `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await y(r.target);return}let x=c.getWorkflowProcessSnapshot(r.target),S=x?void 0:await u.resolveWorkflowIdentity(r.target),_;if(S?.kind==="ambiguous")if(S.run)_=S.run.runId;else{console.log(h.red(`
275
275
  [workflow] ambiguous delete target: ${r.target} matches multiple workflow run/display names${S.matches.includes("saved")?" and a saved workflow name":""}. Use the concrete run id, or --saved when deleting a generated saved capsule.
@@ -277,32 +277,32 @@ Deleted saved workflow ${pe.name}.
277
277
  No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
278
278
  `));return}await y(S.savedWorkflow.name,S.savedWorkflow.source);return}if(S?.kind==="missing"){console.log(h.yellow(`
279
279
  No persisted workflow run or generated saved workflow ${r.target}.
280
- `));return}let P=S?.kind==="run"?S.runId:_??r.target;if(!be(P))return;if(await u.deleteWorkflowRun(P,{force:r.force})){console.log(h.dim(`
281
- Deleted workflow run ${P}${r.force?" with --force":""}.
282
- `));return}let X=x??c.getWorkflowProcessSnapshot(P),N=u.getWorkflowProcessSnapshot(P);if(!N&&!ua(oe(l,P,"run.json"))){console.log(h.yellow(`
280
+ `));return}let T=S?.kind==="run"?S.runId:_??r.target;if(!Se(T))return;if(await u.deleteWorkflowRun(T,{force:r.force})){console.log(h.dim(`
281
+ Deleted workflow run ${T}${r.force?" with --force":""}.
282
+ `));return}let X=x??c.getWorkflowProcessSnapshot(T),N=u.getWorkflowProcessSnapshot(T);if(!N&&!ha(te(l,T,"run.json"))){console.log(h.yellow(`
283
283
  No persisted workflow run or generated saved workflow ${r.target}.
284
- `));return}if(X&&!Go(X.status)){console.log(h.yellow(`
285
- Workflow ${P} is ${X.status}. Stop it before deleting the run record.
286
- `));return}if(N&&!Go(N.status)){console.log(h.yellow(`
287
- Workflow ${P} is a non-terminal persisted ${N.status} record. If it is stale, run /workflow delete --force ${P}.
284
+ `));return}if(X&&!Xo(X.status)){console.log(h.yellow(`
285
+ Workflow ${T} is ${X.status}. Stop it before deleting the run record.
286
+ `));return}if(N&&!Xo(N.status)){console.log(h.yellow(`
287
+ Workflow ${T} is a non-terminal persisted ${N.status} record. If it is stale, run /workflow delete --force ${T}.
288
288
  `));return}console.log(h.yellow(`
289
- Workflow ${P} is not a deletable terminal run.
290
- `));return}if(r.kind==="prune"){let y=Zt(r.rawArgs);if(y.error){console.log(h.yellow(`
289
+ Workflow ${T} is not a deletable terminal run.
290
+ `));return}if(r.kind==="prune"){let y=or(r.rawArgs);if(y.error){console.log(h.yellow(`
291
291
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
292
292
  ${y.error}
293
293
  `));return}if(!y.dryRun&&y.keep===void 0&&y.olderThanMs===void 0){console.log(h.yellow(`
294
294
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
295
295
  No cleanup rule was provided.
296
- `));return}let x=To(l),S=await u.pruneWorkflowRuns(du(y)),_=uu(x,S.candidates);console.log(h.bold(y.dryRun?`
296
+ `));return}let x=_o(l),S=await u.pruneWorkflowRuns(yu(y)),_=vu(x,S.candidates);console.log(h.bold(y.dryRun?`
297
297
  Workflow prune preview:`:`
298
- Workflow prune:`)),console.log(jt(_)),S.protectedRuns>0&&console.log(h.dim(`
298
+ Workflow prune:`)),console.log(Ht(_)),S.protectedRuns>0&&console.log(h.dim(`
299
299
  Protected ${S.protectedRuns} active workflow run${S.protectedRuns===1?"":"s"} from pruning.`)),y.dryRun?console.log(h.dim(`
300
300
  Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
301
301
  `)):console.log(h.dim(`
302
302
  Deleted ${S.deleted} workflow run${S.deleted===1?"":"s"}.
303
303
  `));return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(h.yellow(`
304
304
  Usage: /workflow save <runId> <name>
305
- `));return}if(!be(r.runId))return;try{let y=await ti({runDir:oe(l,r.runId),targetDir:d.project??oe(process.cwd(),".kodax","workflows"),name:r.name});console.log(h.green(`
305
+ `));return}if(!Se(r.runId))return;try{let y=await li({runDir:te(l,r.runId),targetDir:d.project??te(process.cwd(),".kodax","workflows"),name:r.name});console.log(h.green(`
306
306
  Saved workflow ${y.name} to ${y.path}
307
307
  `))}catch(y){let x=y instanceof Error?y.message:String(y);console.log(h.red(`
308
308
  [workflow] save failed: ${x}
@@ -316,13 +316,13 @@ Usage: /workflow rename <runId|alias|savedName> <newName>
316
316
  [workflow] rename failed: ${y.runId}
317
317
  `));return}console.log(h.green(`
318
318
  Renamed workflow run ${y.runId} to ${r.newName.trim()}.
319
- `));return}try{let x=await oi({dirs:d,name:y.savedWorkflow.name,newName:r.newName,source:y.savedWorkflow.source});console.log(h.green(`
319
+ `));return}try{let x=await si({dirs:d,name:y.savedWorkflow.name,newName:r.newName,source:y.savedWorkflow.source});console.log(h.green(`
320
320
  Renamed saved workflow ${r.target} to ${x.name}.
321
321
  `))}catch(x){let S=x instanceof Error?x.message:String(x);console.log(h.red(`
322
322
  [workflow] rename failed: ${S}
323
323
  `))}return}if(r.kind==="revise"){if(!r.target||!r.request){console.log(h.yellow(`
324
324
  Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
325
- `));return}let y=Te(n);if(!y){console.log(h.red(`
325
+ `));return}let y=Me(n);if(!y){console.log(h.red(`
326
326
  [workflow] refusing to revise a workflow without an interactive approval channel.
327
327
  `));return}let x=n.createKodaXOptions;if(!x){console.log(h.red(`
328
328
  [workflow] cannot revise - REPL options unavailable in this context.
@@ -332,51 +332,51 @@ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
332
332
  [workflow] revise target not found: ${r.target}
333
333
  `));return}if(r.replace===!0&&S.kind!=="saved"){console.log(h.red(`
334
334
  [workflow] revise --replace requires a saved workflow name target.
335
- `));return}let _;try{if(S.kind==="run")_=(await Jn({runDir:S.runDir})).capsule;else{if(S.savedWorkflow.execution!=="capability-generated"){console.log(h.red(`
335
+ `));return}let _;try{if(S.kind==="run")_=(await Zn({runDir:S.runDir})).capsule;else{if(S.savedWorkflow.execution!=="capability-generated"){console.log(h.red(`
336
336
  [workflow] only generated workflow capsules can be revised.
337
- `));return}_=await wo(S.savedWorkflow.path)}}catch(F){let uo=F instanceof Error?F.message:String(F);console.log(h.red(`
338
- [workflow] revise failed: ${uo}
339
- `));return}let P=Yt({target:r.target,capsule:_,changeRequest:r.request}),j;try{j=await Vo({request:P,options:x()})}catch(F){let uo=F instanceof Error?F.message:String(F);console.log(h.red(`
340
- [workflow] revise generation failed: ${uo}
337
+ `));return}_=await ho(S.savedWorkflow.path)}}catch(F){let fo=F instanceof Error?F.message:String(F);console.log(h.red(`
338
+ [workflow] revise failed: ${fo}
339
+ `));return}let T=Zt({target:r.target,capsule:_,changeRequest:r.request}),j;try{j=await Jo({request:T,options:x()})}catch(F){let fo=F instanceof Error?F.message:String(F);console.log(h.red(`
340
+ [workflow] revise generation failed: ${fo}
341
341
  `));return}if(j.kind==="declined"){console.log(h.dim(`
342
342
  Workflow revision not created: ${j.reason}
343
- `));return}let X=r.replace===!0&&S.kind==="saved"?S:void 0,N=X?.savedWorkflow.name,me=N??await oa(d,j.manifest.name),Z=me===j.manifest.name?j.manifest:{...j.manifest,name:me};if(!await y(ce(xe({meta:Z,run:j.module.run}),{source:N?`revision-replace:${N}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Z.mayUseWorktree===!0,rawScript:j.source}))){console.log(h.dim(`Workflow revision cancelled.
344
- `));return}let U={name:me,manifest:Z,source:j.source,intent:qr(Z,{originalRequest:r.request}),..._.inputs!==void 0?{inputs:_.inputs}:{},..._.requires!==void 0?{requires:_.requires}:{},provenance:na({capsule:_,resolution:S,...N!==void 0?{replacesWorkflowName:N}:{}})};if(X){let F=await ni({...U,dirs:d,savedSource:X.savedWorkflow.source});console.log(h.green(`
343
+ `));return}let X=r.replace===!0&&S.kind==="saved"?S:void 0,N=X?.savedWorkflow.name,ge=N??await aa(d,j.manifest.name),Z=ge===j.manifest.name?j.manifest:{...j.manifest,name:ge};if(!await y(ue(Ae({meta:Z,run:j.module.run}),{source:N?`revision-replace:${N}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Z.mayUseWorktree===!0,rawScript:j.source}))){console.log(h.dim(`Workflow revision cancelled.
344
+ `));return}let U={name:ge,manifest:Z,source:j.source,intent:Xr(Z,{originalRequest:r.request}),..._.inputs!==void 0?{inputs:_.inputs}:{},..._.requires!==void 0?{requires:_.requires}:{},provenance:la({capsule:_,resolution:S,...N!==void 0?{replacesWorkflowName:N}:{}})};if(X){let F=await ai({...U,dirs:d,savedSource:X.savedWorkflow.source});console.log(h.green(`
345
345
  Replaced saved workflow ${F.name} with revised capsule at ${F.path}
346
346
  `)),console.log(h.dim(`Previous capsule archived at ${F.previousPath}
347
- `));return}let Fo=await ei({...U,dir:d.project??oe(process.cwd(),".kodax","workflows")});console.log(h.green(`
348
- Saved workflow revision ${Fo.name} to ${Fo.path}
347
+ `));return}let Ko=await ii({...U,dir:d.project??te(process.cwd(),".kodax","workflows")});console.log(h.green(`
348
+ Saved workflow revision ${Ko.name} to ${Ko.path}
349
349
  `));return}if(r.kind==="rerun"){if(!r.runId){console.log(h.yellow(`
350
350
  Usage: /workflow rerun <runId|savedName> [args]
351
- `));return}if(!be(r.runId))return;let y=Te(n);if(!y){console.log(h.red(`
351
+ `));return}if(!Se(r.runId))return;let y=Me(n);if(!y){console.log(h.red(`
352
352
  [workflow] refusing to rerun a workflow without an interactive approval channel.
353
353
  `));return}let x=n.createKodaXOptions;if(!x){console.log(h.red(`
354
354
  [workflow] cannot start \u2014 REPL options unavailable in this context.
355
- `));return}let S=(await Fe(d)).find(L=>L.name===r.runId),_=c.list().some(L=>L.runId===r.runId)||ua(oe(l,r.runId,"run.json"));if(S&&_){console.log(h.red(`
355
+ `));return}let S=(await Fe(d)).find(L=>L.name===r.runId),_=c.list().some(L=>L.runId===r.runId)||ha(te(l,r.runId,"run.json"));if(S&&_){console.log(h.red(`
356
356
  [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
357
357
  `)),console.log(h.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
358
- `));return}if(S&&!_){let L=await ra(S,y);if(!L)return;let fo=Eo(r.rawArgs,L.module.meta.name,L.module.meta.description,L.scriptSnapshot?.source),Rr="agentic";if(!await y(ce(xe(L.module),L.approvalContext))){console.log(h.dim(`Workflow cancelled.
359
- `));return}let Q=`run-${Date.now().toString(36)}`,Ga=oe(l,Q);console.log(h.dim(`
360
- Started workflow ${L.module.meta.name} (${Q}). Use /workflow show ${Q} for status.
361
- `));let Kn=Me(n,Q,L.module.meta,fo);Kn.running(`Use /workflow show ${Q} for status or /workflow stop ${Q} to stop.`);let za=no(c,Kn,Q),Cr=c.startFromOptions({module:L.module,args:Lo(r.rawArgs),options:x(),runId:Q,runDir:Ga,...L.scriptSnapshot?{scriptSnapshot:L.scriptSnapshot}:{},processMetadata:fa({displayName:L.module.meta.name,savedWorkflowName:S.name,provenance:L.provenance}),onEvent:oo(n,void 0,{presentation:Rr,locale:fo,runId:Q})});Le(Cr,za),_e(Cr,n,Q,Kn,{canRerun:L.scriptSnapshot!==void 0,presentation:Rr,locale:fo});return}let P;try{P=await Jn({runDir:oe(l,r.runId)})}catch(L){let fo=L instanceof Error?L.message:String(L);console.log(h.red(`
362
- [workflow] rerun failed: ${fo}
363
- `));return}let X=Mo(l,r.runId)?.scriptSnapshotPath??oe(l,r.runId,"script.js"),N=Eo(r.rawArgs,P.capsule.manifest.name,P.capsule.manifest.description,P.capsule.source),me="agentic",Z=ho(P.capsule,bn());if(!Z.ok){$n(Z);return}if(Sn(Z),!await y(ce(xe(P.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:P.capsule.manifest.mayUseWorktree===!0,rawScriptPath:X,rawScript:P.capsule.source}))){console.log(h.dim(`Workflow cancelled.
364
- `));return}let U=`run-${Date.now().toString(36)}`,Fo=oe(l,U);console.log(h.dim(`
365
- Started workflow ${P.module.meta.name} (${U}). Use /workflow show ${U} for status.
366
- `));let F=Me(n,U,P.module.meta,N);F.running(`Use /workflow show ${U} for status or /workflow stop ${U} to stop.`);let uo=no(c,F,U),Ar=c.startFromOptions({module:P.module,args:Lo(r.rawArgs),options:x(),runId:U,runDir:Fo,scriptSnapshot:{manifest:P.capsule.manifest,source:P.capsule.source},processMetadata:_o({source:"command",displayName:P.module.meta.name,sourceRunId:r.runId}),onEvent:oo(n,void 0,{presentation:me,locale:N,runId:U})});Le(Ar,uo),_e(Ar,n,U,F,{canRerun:!0,presentation:me,locale:N});return}if(r.kind==="create"){if(!r.request){console.log(h.yellow(`
358
+ `));return}if(S&&!_){let L=await da(S,y);if(!L)return;let mo=To(r.rawArgs,L.module.meta.name,L.module.meta.description,L.scriptSnapshot?.source),Ir="agentic";if(!await y(ue(Ae(L.module),L.approvalContext))){console.log(h.dim(`Workflow cancelled.
359
+ `));return}let ee=`run-${Date.now().toString(36)}`,Qa=te(l,ee);console.log(h.dim(`
360
+ Started workflow ${L.module.meta.name} (${ee}). Use /workflow show ${ee} for status.
361
+ `));let qn=_e(n,ee,L.module.meta,mo);qn.running(`Use /workflow show ${ee} for status or /workflow stop ${ee} to stop.`);let Za=no(c,qn,ee),Tr=c.startFromOptions({module:L.module,args:Oo(r.rawArgs),options:x(),runId:ee,runDir:Qa,...L.scriptSnapshot?{scriptSnapshot:L.scriptSnapshot}:{},processMetadata:ya({displayName:L.module.meta.name,savedWorkflowName:S.name,provenance:L.provenance}),onEvent:oo(n,void 0,{presentation:Ir,locale:mo,runId:ee})});We(Tr,Za),Le(Tr,n,ee,qn,{canRerun:L.scriptSnapshot!==void 0,presentation:Ir,locale:mo});return}let T;try{T=await Zn({runDir:te(l,r.runId)})}catch(L){let mo=L instanceof Error?L.message:String(L);console.log(h.red(`
362
+ [workflow] rerun failed: ${mo}
363
+ `));return}let X=Lo(l,r.runId)?.scriptSnapshotPath??te(l,r.runId,"script.js"),N=To(r.rawArgs,T.capsule.manifest.name,T.capsule.manifest.description,T.capsule.source),ge="agentic",Z=yo(T.capsule,xn());if(!Z.ok){An(Z);return}if(Rn(Z),!await y(ue(Ae(T.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:T.capsule.manifest.mayUseWorktree===!0,rawScriptPath:X,rawScript:T.capsule.source}))){console.log(h.dim(`Workflow cancelled.
364
+ `));return}let U=`run-${Date.now().toString(36)}`,Ko=te(l,U);console.log(h.dim(`
365
+ Started workflow ${T.module.meta.name} (${U}). Use /workflow show ${U} for status.
366
+ `));let F=_e(n,U,T.module.meta,N);F.running(`Use /workflow show ${U} for status or /workflow stop ${U} to stop.`);let fo=no(c,F,U),Er=c.startFromOptions({module:T.module,args:Oo(r.rawArgs),options:x(),runId:U,runDir:Ko,scriptSnapshot:{manifest:T.capsule.manifest,source:T.capsule.source},processMetadata:Wo({source:"command",displayName:T.module.meta.name,sourceRunId:r.runId}),onEvent:oo(n,void 0,{presentation:ge,locale:N,runId:U})});We(Er,fo),Le(Er,n,U,F,{canRerun:!0,presentation:ge,locale:N});return}if(r.kind==="create"){if(!r.request){console.log(h.yellow(`
367
367
  Usage: /workflow create <request>
368
- `));return}return await f(r.request)}let p=Te(n);if(!p){console.log(h.red(`
368
+ `));return}return await f(r.request)}let p=Me(n);if(!p){console.log(h.red(`
369
369
  [workflow] refusing to start a workflow without an interactive approval channel.
370
- `));return}let k={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},b,A=Yo(r.name),R,v;if(!A){let y=(await Fe(d)).find(x=>x.name===r.name);if(!y){let x=[r.name,r.rawArgs].filter(S=>S&&S.length>0).join(" ").trim();return await f(x)}if(R=y,y.execution==="trusted-local"&&!await p(`Run local workflow file? This EXECUTES local code:
370
+ `));return}let k={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},b,A=Qo(r.name),R,v;if(!A){let y=(await Fe(d)).find(x=>x.name===r.name);if(!y){let x=[r.name,r.rawArgs].filter(S=>S&&S.length>0).join(" ").trim();return await f(x)}if(R=y,y.execution==="trusted-local"&&!await p(`Run local workflow file? This EXECUTES local code:
371
371
  ${y.path}`)){console.log(h.dim(`Workflow cancelled.
372
- `));return}try{if(y.execution==="capability-generated"){let x=await wo(y.path),S=ho(x,bn());if(!S.ok){$n(S);return}Sn(S),k={source:`saved:${y.source}`,sandbox:y.execution,mayUseWorktree:x.manifest.mayUseWorktree===!0,rawScriptPath:y.path,rawScript:x.source},b={manifest:x.manifest,source:x.source},v=x.provenance}A=await Zo(y.path),y.execution==="trusted-local"&&(k={source:`saved:${y.source}`,sandbox:y.execution,mayUseWorktree:!1})}catch(x){let S=x instanceof Error?x.message:String(x);console.log(h.red(`
372
+ `));return}try{if(y.execution==="capability-generated"){let x=await ho(y.path),S=yo(x,xn());if(!S.ok){An(S);return}Rn(S),k={source:`saved:${y.source}`,sandbox:y.execution,mayUseWorktree:x.manifest.mayUseWorktree===!0,rawScriptPath:y.path,rawScript:x.source},b={manifest:x.manifest,source:x.source},v=x.provenance}A=await en(y.path),y.execution==="trusted-local"&&(k={source:`saved:${y.source}`,sandbox:y.execution,mayUseWorktree:!1})}catch(x){let S=x instanceof Error?x.message:String(x);console.log(h.red(`
373
373
  [workflow] failed to load ${y.path}: ${S}
374
374
  `));return}}let $=n.createKodaXOptions;if(!$){console.log(h.red(`
375
375
  [workflow] cannot start \u2014 REPL options unavailable in this context.
376
- `));return}if(!await p(ce(xe(A),k))){console.log(h.dim(`Workflow cancelled.
377
- `));return}let M=`run-${Date.now().toString(36)}`,re=oe(l,M);console.log(h.dim(`
376
+ `));return}if(!await p(ue(Ae(A),k))){console.log(h.dim(`Workflow cancelled.
377
+ `));return}let M=`run-${Date.now().toString(36)}`,se=te(l,M);console.log(h.dim(`
378
378
  Started workflow ${A.meta.name} (${M}). Use /workflow show ${M} for status.
379
- `));let Oe=Eo(r.rawArgs,A.meta.name,A.meta.description,b?.source),co=Me(n,M,A.meta,Oe);co.running(`Use /workflow show ${M} for status or /workflow stop ${M} to stop.`);let fe="agentic",qa=no(c,co,M),xr=c.startFromOptions({module:A,args:Lo(r.rawArgs),options:$(),runId:M,runDir:re,...b?{scriptSnapshot:b}:{},processMetadata:R?fa({displayName:A.meta.name,savedWorkflowName:R.name,provenance:v}):_o({source:"command",displayName:A.meta.name}),onEvent:oo(n,void 0,{presentation:fe,locale:Oe,runId:M})});Le(xr,qa),_e(xr,n,M,co,{canRerun:b!==void 0,presentation:fe,locale:Oe})},"handler")};import K from"chalk";var Qt={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(K.yellow(`
379
+ `));let Ne=To(r.rawArgs,A.meta.name,A.meta.description,b?.source),uo=_e(n,M,A.meta,Ne);uo.running(`Use /workflow show ${M} for status or /workflow stop ${M} to stop.`);let pe="agentic",Ja=no(c,uo,M),Cr=c.startFromOptions({module:A,args:Oo(r.rawArgs),options:$(),runId:M,runDir:se,...b?{scriptSnapshot:b}:{},processMetadata:R?ya({displayName:A.meta.name,savedWorkflowName:R.name,provenance:v}):Wo({source:"command",displayName:A.meta.name}),onEvent:oo(n,void 0,{presentation:pe,locale:Ne,runId:M})});We(Cr,Ja),Le(Cr,n,M,uo,{canRerun:b!==void 0,presentation:pe,locale:Ne})},"handler")};import K from"chalk";var nr={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(K.yellow(`
380
380
  Current session is already empty.`)),console.log(K.dim("You can start a new conversation directly."));return}if(n.confirm&&!await n.confirm("Start a new session? This will clear the current conversation history.")){console.log(K.dim(`
381
381
  Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(K.dim(`
382
382
  [Previous session saved]`))}catch{console.log(K.yellow(`
@@ -386,11 +386,11 @@ Cancelled. Current session preserved.`));return}try{await n.saveSession(),consol
386
386
  `)),console.log("Usage:"),console.log(K.cyan(" /new")+` - Clear current session and start fresh
387
387
  `),console.log("Description:"),console.log(" This command clears the current conversation history and starts a new session."),console.log(" It automatically saves the previous session before clearing."),console.log(` Useful for switching contexts or starting a new topic.
388
388
  `),console.log("Examples:"),console.log(K.dim(" User: Help me refactor the authentication module")),console.log(K.dim(" AI: [provides refactoring help]")),console.log(K.cyan(" /new")),console.log(K.dim(" \u2713 Started new session")),console.log(K.dim(" User: Now I need help with database optimization")),console.log(K.dim(` AI: [provides database help]
389
- `)),console.log("Notes:"),console.log(" \u2022 Automatically saves previous session before clearing"),console.log(" \u2022 Prompts for confirmation if there are messages in the current session"),console.log(" \u2022 Use /load to resume a previous session"),console.log(" \u2022 Use /sessions to see all saved sessions")},"detailedHelp")};import O from"chalk";var Ph="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Th="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function Mh(e){return Qr(e.error,e.messageCount)}a(Mh,"shouldOfferSessionRecovery");var er={name:"recover",aliases:["handoff"],description:"Create a fresh session from safe memory and continue",usage:"/recover [prompt]",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(O.yellow(`
389
+ `)),console.log("Notes:"),console.log(" \u2022 Automatically saves previous session before clearing"),console.log(" \u2022 Prompts for confirmation if there are messages in the current session"),console.log(" \u2022 Use /load to resume a previous session"),console.log(" \u2022 Use /sessions to see all saved sessions")},"detailedHelp")};import O from"chalk";var qh="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Gh="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function zh(e){return ri(e.error,e.messageCount)}a(zh,"shouldOfferSessionRecovery");var tr={name:"recover",aliases:["handoff"],description:"Create a fresh session from safe memory and continue",usage:"/recover [prompt]",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(O.yellow(`
390
390
  Current session is empty. Start a normal message instead.`));return}if(!n.recoverSession){console.log(O.red(`
391
391
  [Recover is not available in this host]
392
392
  `));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(O.dim(`
393
- Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(zn(e.join(" ")))}catch(r){let s=r instanceof Error?r.message:String(r);console.log(O.red(`
393
+ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(Vn(e.join(" ")))}catch(r){let s=r instanceof Error?r.message:String(r);console.log(O.red(`
394
394
  [Recover failed] ${s}
395
395
  `));return}t==="blocked"?console.log(O.yellow(`
396
396
  [Recover blocked by the current session transition guard]
@@ -400,13 +400,13 @@ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSessi
400
400
  [Nothing to recover from this session]
401
401
  `))},"handler"),detailedHelp:a(()=>{console.log(O.cyan(`
402
402
  /recover - Continue in a Fresh Session
403
- `)),console.log(O.bold("Usage:")),console.log(O.dim(" /recover ")+"Continue with a safe memory summary"),console.log(O.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(O.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(O.bold("Description:")),console.log(O.dim(" Saves the current session, creates a new local session,")),console.log(O.dim(" carries over only a compact memory summary, and runs the")),console.log(O.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(O.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as fu}from"node:child_process";import{promisify as mu}from"node:util";import ne from"chalk";var pu=mu(fu),or=1e5;async function Oo(e,o){let{stdout:n}=await pu("git",e,{cwd:o,maxBuffer:67108864,windowsHide:!0});return n}a(Oo,"git");async function gu(e){for(let o of["main","master","develop"])try{return await Oo(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(gu,"detectBaseBranch");async function Wo(e,o){return(await Oo(["rev-parse",e],o)).trim()}a(Wo,"resolveRef");async function wu(e,o){try{return await Wo(e,o)}catch{return}}a(wu,"tryResolveRef");async function hu(e,o){let n=e[0];if(n==="base"){let t=await gu(o);return{diff:await Oo(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Wo(t,o),headRef:await Wo("HEAD",o)}}if(n==="sha"&&e[1]){let t=await wu(`${e[1]}^`,o);return{diff:await Oo(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Wo(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Oo(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Wo("HEAD",o)}}a(hu,"getDiff");function yu(e){let o=!1,n=!1,t=!1,r=!1,s=[],l=[],c=a(f=>f==="--workflow"||f==="workflow"?(o=!0,!0):f==="--lean"||f==="lean"?(n=!0,!0):!1,"applyModeArg");for(let f=0;f<e.length;f+=1){let p=e[f];if(p!==void 0){if(r){l.push(p);continue}if(p==="--"){r=!0;continue}if(!c(p)){if(!t&&p==="base"){s.push("base"),t=!0;continue}if(!t&&p==="sha"){for(s.push("sha"),t=!0;f+1<e.length;){let k=e[f+1];if(k===void 0)break;if(k==="--"){r=!0,f+=1;break}if(c(k)){f+=1;continue}s.push(k),f+=1;break}continue}l.push(p)}}}let d=l.join(" ").trim(),u=s[0]==="sha"&&!s[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:s,prompt:d.length>0?d:void 0,...u?{error:u}:{}}}a(yu,"parseReviewInvocation");function vu(e,o={}){let n=[`Review ${e} with KodaX's built-in scoped-review workflow.`,"Use the captured immutable review packets as the sole review input.","The built-in gives each ordinary packet one primary with both specVerdict and qualityVerdict, adds a second primary only for routing-high, sends only candidate findings to a fresh independent verifier, and performs capable final synthesis.","Final output must lead with verified findings, cite files or diff hunks, and state when no issues are found."];return o.lean===!0&&n.splice(2,0,"Add one lean/minimal-diff reviewer: find code that can be deleted or replaced by existing repo code, stdlib/native platform features, or already-installed dependencies.","Lean review must not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior."),o.customPrompt&&n.push(`User review focus: ${o.customPrompt}`),o.packets&&o.packets.length>0&&n.push(`Captured packets: ${o.packets.length}.`,"Do not call changed_scope or recapture Git: these packets are the sole immutable review input."),n.join(`
404
- `)}a(vu,"buildReviewWorkflowRequest");function ku(e){return e.length<=or?e:`${e.slice(0,or)}
403
+ `)),console.log(O.bold("Usage:")),console.log(O.dim(" /recover ")+"Continue with a safe memory summary"),console.log(O.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(O.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(O.bold("Description:")),console.log(O.dim(" Saves the current session, creates a new local session,")),console.log(O.dim(" carries over only a compact memory summary, and runs the")),console.log(O.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(O.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as ku}from"node:child_process";import{promisify as bu}from"node:util";import re from"chalk";var $u=bu(ku),rr=1e5;async function Do(e,o){let{stdout:n}=await $u("git",e,{cwd:o,maxBuffer:67108864,windowsHide:!0});return n}a(Do,"git");async function Su(e){for(let o of["main","master","develop"])try{return await Do(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(Su,"detectBaseBranch");async function No(e,o){return(await Do(["rev-parse",e],o)).trim()}a(No,"resolveRef");async function xu(e,o){try{return await No(e,o)}catch{return}}a(xu,"tryResolveRef");async function Au(e,o){let n=e[0];if(n==="base"){let t=await Su(o);return{diff:await Do(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await No(t,o),headRef:await No("HEAD",o)}}if(n==="sha"&&e[1]){let t=await xu(`${e[1]}^`,o);return{diff:await Do(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await No(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Do(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await No("HEAD",o)}}a(Au,"getDiff");function Ru(e){let o=!1,n=!1,t=!1,r=!1,s=[],l=[],c=a(f=>f==="--workflow"||f==="workflow"?(o=!0,!0):f==="--lean"||f==="lean"?(n=!0,!0):!1,"applyModeArg");for(let f=0;f<e.length;f+=1){let p=e[f];if(p!==void 0){if(r){l.push(p);continue}if(p==="--"){r=!0;continue}if(!c(p)){if(!t&&p==="base"){s.push("base"),t=!0;continue}if(!t&&p==="sha"){for(s.push("sha"),t=!0;f+1<e.length;){let k=e[f+1];if(k===void 0)break;if(k==="--"){r=!0,f+=1;break}if(c(k)){f+=1;continue}s.push(k),f+=1;break}continue}l.push(p)}}}let d=l.join(" ").trim(),u=s[0]==="sha"&&!s[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:s,prompt:d.length>0?d:void 0,...u?{error:u}:{}}}a(Ru,"parseReviewInvocation");function Cu(e,o={}){let n=[`Review ${e} with KodaX's built-in scoped-review workflow.`,"Use the captured immutable review packets as the sole review input.","The built-in gives each ordinary packet one primary with both specVerdict and qualityVerdict, adds a second primary only for routing-high, sends only candidate findings to a fresh independent verifier, and performs capable final synthesis.","Final output must lead with verified findings, cite files or diff hunks, and state when no issues are found."];return o.lean===!0&&n.splice(2,0,"Add one lean/minimal-diff reviewer: find code that can be deleted or replaced by existing repo code, stdlib/native platform features, or already-installed dependencies.","Lean review must not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior."),o.customPrompt&&n.push(`User review focus: ${o.customPrompt}`),o.packets&&o.packets.length>0&&n.push(`Captured packets: ${o.packets.length}.`,"Do not call changed_scope or recapture Git: these packets are the sole immutable review input."),n.join(`
404
+ `)}a(Cu,"buildReviewWorkflowRequest");function Eu(e){return e.length<=rr?e:`${e.slice(0,rr)}
405
405
 
406
- [diff truncated to ${or} chars - review the rest with a narrower scope]`}a(ku,"truncateDiff");function bu(e){let o=ku(e.diff),n=[`Review the following ${e.label} as a third-party reviewer (not the author).`,"Look for bugs (logic errors, null/undefined handling, off-by-one, races),","security (injection, secret exposure, auth bypass), performance hotpaths,","and design (over-engineering vs missing abstraction).","Cite specific diff lines. For each finding, note whether it is verifiable by","tsc / lint / test / build. If the diff is small or risk-free, say so briefly."];return e.lean===!0&&n.push("","Lean pass:","- After correctness/security findings, look for unnecessary code introduced by the diff.","- Prefer deletion or replacement with existing repo code, stdlib/native platform features, or already-installed dependencies when that is verifiably simpler.","- Do not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior.","- For each lean suggestion, say what was skipped or can be removed, and when it should be added back."),e.customPrompt&&n.push("",`User review focus: ${e.customPrompt}`),n.push("","```diff",o,"```"),n.join(`
407
- `)}a(bu,"buildReviewPrompt");function pa(e){let o=[e.workflow?"--workflow":void 0,e.lean?"--lean":void 0].filter(n=>n!==void 0);return o.length>0?`/review ${o.join(" ")}`:"/review"}a(pa,"buildDisplayName");function $u(){console.log(ne.bold(`
406
+ [diff truncated to ${rr} chars - review the rest with a narrower scope]`}a(Eu,"truncateDiff");function Iu(e){let o=Eu(e.diff),n=[`Review the following ${e.label} as a third-party reviewer (not the author).`,"Look for bugs (logic errors, null/undefined handling, off-by-one, races),","security (injection, secret exposure, auth bypass), performance hotpaths,","and design (over-engineering vs missing abstraction).","Cite specific diff lines. For each finding, note whether it is verifiable by","tsc / lint / test / build. If the diff is small or risk-free, say so briefly."];return e.lean===!0&&n.push("","Lean pass:","- After correctness/security findings, look for unnecessary code introduced by the diff.","- Prefer deletion or replacement with existing repo code, stdlib/native platform features, or already-installed dependencies when that is verifiably simpler.","- Do not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior.","- For each lean suggestion, say what was skipped or can be removed, and when it should be added back."),e.customPrompt&&n.push("",`User review focus: ${e.customPrompt}`),n.push("","```diff",o,"```"),n.join(`
407
+ `)}a(Iu,"buildReviewPrompt");function ka(e){let o=[e.workflow?"--workflow":void 0,e.lean?"--lean":void 0].filter(n=>n!==void 0);return o.length>0?`/review ${o.join(" ")}`:"/review"}a(ka,"buildDisplayName");function Tu(){console.log(re.bold(`
408
408
  /review - Review Git Changes
409
- `)),console.log("Usage:"),console.log(ne.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(ne.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(ne.dim(" base ")+"Review changes against the detected base branch"),console.log(ne.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(ne.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(ne.dim(" --workflow ")+"Run the deterministic scoped-review workflow"),console.log(),console.log("Examples:"),console.log(ne.dim(" /review --lean")),console.log(ne.dim(" /review base focus on auth and data loss")),console.log(ne.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a($u,"printReviewHelp");var ga={name:"review",description:"Review git changes for bugs, security, performance, design, and optional lean diffs",usage:"/review [--lean] [--workflow] [base | sha <hash>] [prompt...]",argumentHint:"[--lean] [--workflow] [base | sha <hash>] [prompt...]",detailedHelp:$u,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=yu(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r;try{r=await hu(t.diffArgs,n)}catch(s){return{success:!1,message:`/review: git failed - ${s instanceof Error?s.message:String(s)}`}}if(!r.diff.trim())return{success:!0,message:"No changes to review."};if(t.workflow){let s;try{s=await di({cwd:n,sessionId:o.sessionId,label:r.label,diff:r.diff,scope:r.scope,...r.baseRef?{baseRef:r.baseRef}:{},...r.headRef?{headRef:r.headRef}:{},customPrompt:t.prompt})}catch(l){return{success:!1,message:`/review: could not create review packet - ${l instanceof Error?l.message:String(l)}`}}return{success:!0,workflow:{request:vu(r.label,{lean:t.lean,customPrompt:t.prompt,packets:s}),source:"command",displayName:pa(t),processSource:"review",builtin:{name:"scoped-review",args:{packets:s,...t.lean?{lean:!0}:{},...t.prompt?{reviewFocus:t.prompt}:{}}}}}}return{success:!0,invocation:{prompt:bu({label:r.label,diff:r.diff,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:pa(t)}}},"handler")};import{constants as Su}from"node:fs";import{access as xu,readFile as Au,writeFile as Ru}from"node:fs/promises";import{join as Cu}from"node:path";import te from"chalk";var va=`# KodaX Lean Mode
409
+ `)),console.log("Usage:"),console.log(re.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(re.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(re.dim(" base ")+"Review changes against the detected base branch"),console.log(re.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(re.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(re.dim(" --workflow ")+"Run the deterministic scoped-review workflow"),console.log(),console.log("Examples:"),console.log(re.dim(" /review --lean")),console.log(re.dim(" /review base focus on auth and data loss")),console.log(re.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(Tu,"printReviewHelp");var ba={name:"review",description:"Review git changes for bugs, security, performance, design, and optional lean diffs",usage:"/review [--lean] [--workflow] [base | sha <hash>] [prompt...]",argumentHint:"[--lean] [--workflow] [base | sha <hash>] [prompt...]",detailedHelp:Tu,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=Ru(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r;try{r=await Au(t.diffArgs,n)}catch(s){return{success:!1,message:`/review: git failed - ${s instanceof Error?s.message:String(s)}`}}if(!r.diff.trim())return{success:!0,message:"No changes to review."};if(t.workflow){let s;try{s=await gi({cwd:n,sessionId:o.sessionId,label:r.label,diff:r.diff,scope:r.scope,...r.baseRef?{baseRef:r.baseRef}:{},...r.headRef?{headRef:r.headRef}:{},customPrompt:t.prompt})}catch(l){return{success:!1,message:`/review: could not create review packet - ${l instanceof Error?l.message:String(l)}`}}return{success:!0,workflow:{request:Cu(r.label,{lean:t.lean,customPrompt:t.prompt,packets:s}),source:"command",displayName:ka(t),processSource:"review",builtin:{name:"scoped-review",args:{packets:s,...t.lean?{lean:!0}:{},...t.prompt?{reviewFocus:t.prompt}:{}}}}}}return{success:!0,invocation:{prompt:Iu({label:r.label,diff:r.diff,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:ka(t)}}},"handler")};import{constants as Pu}from"node:fs";import{access as Mu,readFile as _u,writeFile as Lu}from"node:fs/promises";import{join as Wu}from"node:path";import ie from"chalk";var Aa=`# KodaX Lean Mode
410
410
 
411
411
  Before writing code:
412
412
  1. Do we need to build this at all?
@@ -426,19 +426,19 @@ Never cut:
426
426
  After coding:
427
427
  - explain what was skipped
428
428
  - say when to add it back
429
- `;function Eu(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(Eu,"resolveTargetRoot");async function ka(e){try{return await xu(e,Su.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(ka,"pathExists");function wa(e){return console.log(te.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(wa,"existingAgentsResult");function In(e){return e instanceof Error?e.message:String(e)}a(In,"errorMessage");async function ha(e,o){let n;try{n=await ka(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${In(t)}`}}if(n)return wa(e);try{await Ru(e,va,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?wa(e):{success:!1,message:`/agents init: failed to write ${e}: ${In(t)}`}}if(o.reloadAgentsFiles)try{await o.reloadAgentsFiles()}catch(t){return{success:!1,message:`/agents init: created ${e} but failed to reload AGENTS.md files: ${In(t)}`}}return console.log(te.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(ha,"initializeAgentsFile");function Iu(e,o){return[`Review and update the target project's AGENTS.md at ${e}.`,"","Goal: ensure the project instructions include KodaX Lean Mode guidance, without duplicating equivalent existing guidance.","","Required behavior:","- First inspect the existing AGENTS.md content and decide whether lean/minimal-diff constraints are already present.","- If equivalent guidance already exists, leave the file unchanged and explain that no change was needed.","- If guidance is missing or partial, edit AGENTS.md with the smallest clear diff that merges the Lean Mode ideas into the existing structure.","- Do not add duplicate headings or repeat bullets that already exist with equivalent meaning.","- Preserve existing project-specific instructions and ordering unless a small local insertion is clearly better.","- Never weaken trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior.","","Lean Mode guidance to merge when missing:","","```markdown",va.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
430
- `)}a(Iu,"buildLeanReviewPrompt");function ya(){console.log(te.bold(`
429
+ `;function Ou(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(Ou,"resolveTargetRoot");async function Ra(e){try{return await Mu(e,Pu.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(Ra,"pathExists");function $a(e){return console.log(ie.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a($a,"existingAgentsResult");function Mn(e){return e instanceof Error?e.message:String(e)}a(Mn,"errorMessage");async function Sa(e,o){let n;try{n=await Ra(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${Mn(t)}`}}if(n)return $a(e);try{await Lu(e,Aa,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?$a(e):{success:!1,message:`/agents init: failed to write ${e}: ${Mn(t)}`}}if(o.reloadAgentsFiles)try{await o.reloadAgentsFiles()}catch(t){return{success:!1,message:`/agents init: created ${e} but failed to reload AGENTS.md files: ${Mn(t)}`}}return console.log(ie.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(Sa,"initializeAgentsFile");function Nu(e,o){return[`Review and update the target project's AGENTS.md at ${e}.`,"","Goal: ensure the project instructions include KodaX Lean Mode guidance, without duplicating equivalent existing guidance.","","Required behavior:","- First inspect the existing AGENTS.md content and decide whether lean/minimal-diff constraints are already present.","- If equivalent guidance already exists, leave the file unchanged and explain that no change was needed.","- If guidance is missing or partial, edit AGENTS.md with the smallest clear diff that merges the Lean Mode ideas into the existing structure.","- Do not add duplicate headings or repeat bullets that already exist with equivalent meaning.","- Preserve existing project-specific instructions and ordering unless a small local insertion is clearly better.","- Never weaken trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior.","","Lean Mode guidance to merge when missing:","","```markdown",Aa.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
430
+ `)}a(Nu,"buildLeanReviewPrompt");function xa(){console.log(ie.bold(`
431
431
  /agents - Manage Target Project Instructions
432
- `)),console.log("Usage:"),console.log(te.cyan(" /agents init")),console.log(te.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(te.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(te.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(te.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(te.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(te.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(ya,"printAgentsHelp");var nr={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:ya,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return ya(),!0;let r=Eu(o),s=Cu(r,"AGENTS.md");if(t==="init")return await ha(s,n);let l;try{l=await ka(s)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${s}: ${In(d)}`}}if(!l)return await ha(s,n);let c;try{c=await Au(s,"utf8")}catch(d){let u=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${s}: ${u}`}}return{success:!0,invocation:{prompt:Iu(s,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function Tn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(Tn,"getPastedTextRefNumLines");function Pu(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(Pu,"formatPastedTextRef");function Tu(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(Tu,"formatTruncatedTextRef");var Mu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function _u(e){let o=[],n=new RegExp(Mu.source,"g");for(let t of e.matchAll(n)){let r=Number.parseInt(t[2]??"0",10);!Number.isFinite(r)||r<=0||o.push({id:r,kind:t[1],match:t[0],index:t.index??0})}return o}a(_u,"parseReferences");function Lu(e,o){let n=_u(e);if(n.length===0)return e;let t=a(s=>o instanceof Map?o.get(s):o[s],"getContent"),r=e;for(let s=n.length-1;s>=0;s--){let l=n[s];if(l.kind==="Image")continue;let c=t(l.id);!c||c.type!=="text"||(r=r.slice(0,l.index)+c.content+r.slice(l.index+l.match.length))}return r}a(Lu,"expandPastedTextRefs");var Wu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Ou=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function Nu(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(Nu,"isAtWordBoundaryAfter");function Du(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(Du,"isAtWordBoundaryBefore");function Jh(e,o){if(o<=0||!Nu(e,o))return null;let t=e.slice(0,o).match(Wu);if(!t)return null;let r=o-t[0].length,s=Number.parseInt(t[2]??"0",10);return!Number.isFinite(s)||s<=0?null:{start:r,end:o,id:s,kind:t[1]}}a(Jh,"findPlaceholderBeforeCursor");function Zh(e,o){if(o>=e.length||!Du(e,o))return null;let t=e.slice(o).match(Ou);if(!t)return null;let r=Number.parseInt(t[2]??"0",10);return!Number.isFinite(r)||r<=0?null:{start:o,end:o+t[0].length,id:r,kind:t[1]}}a(Zh,"findPlaceholderAfterCursor");function Qh(e){return e.length>800||Tn(e)>2}a(Qh,"shouldReplacePasteWithPlaceholder");function ey(e,o){if(e.length<=1e4)return{truncatedText:e,placeholderContent:""};let n=Math.floor(1e3/2),t=Math.floor(1e3/2),r=e.slice(0,n),s=e.slice(-t),l=e.slice(n,-t),c=Tn(l),d=Tu(o,c);return{truncatedText:r+d+s,placeholderContent:l}}a(ey,"maybeTruncateLongInput");var tr=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=Tn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:Pu(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=Tn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,numLines:t}}adopt(o){this.contents.set(o.id,o),o.id>=this.nextId&&(this.nextId=o.id+1)}peekNextId(){return this.nextId}get(o){return this.contents.get(o)}expand(o){return Lu(o,this.contents)}snapshot(){return new Map(this.contents)}restore(o){this.contents.clear();for(let[n,t]of o)this.contents.set(n,t);for(let n of o.keys())n>=this.nextId&&(this.nextId=n+1)}reset(){this.contents.clear(),this.nextId=1}size(){return this.contents.size}export(){return Array.from(this.contents.values())}},Pn=null;function oy(){return Pn===null&&(Pn=new tr),Pn}a(oy,"getOrCreateModulePasteStore");function ba(){return Pn??void 0}a(ba,"getActivePasteStore");import{createHash as ju}from"node:crypto";import{mkdir as Uu,readdir as Fu,readFile as Hu,stat as Ku,unlink as Bu,writeFile as qu}from"node:fs/promises";import*as rr from"node:path";var Gu="paste-cache",zu=720*60*60*1e3;function ir(){return W(Gu)}a(ir,"getPasteCacheDir");function $a(e){return rr.join(ir(),`${e}.txt`)}a($a,"getPastePath");function ay(e){return ju("sha256").update(e).digest("hex").slice(0,16)}a(ay,"hashPastedText");async function ly(e,o){try{let n=ir();return await Uu(n,{recursive:!0}),await qu($a(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(ly,"storePastedText");async function Sa(e){try{return await Hu($a(e),{encoding:"utf8"})}catch{return null}}a(Sa,"retrievePastedText");async function cy(e=zu){let o=ir(),n=Date.now()-e,t=0,r=0,s;try{s=await Fu(o)}catch{return{scanned:t,removed:r}}for(let l of s){if(!l.endsWith(".txt"))continue;t+=1;let c=rr.join(o,l);try{(await Ku(c)).mtimeMs<n&&(await Bu(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(cy,"cleanupOldPastes");import*as dr from"path";import*as Aa from"os";function Xu(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Xu,"escapeRegExp");function Vu(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Xu(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(Vu,"deriveArgumentHintFromUsage");function sr(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??Vu(e.usage,e.name)}}a(sr,"toCommandDefinition");function ar(e){for(let o of xa)try{let n=sr(o,"builtin");e.register(n)}catch(n){G({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(ar,"registerBuiltinCommands");import*as de from"fs";import*as We from"path";function Yu(e){if(Array.isArray(e))return e.map(o=>String(o).trim()).filter(o=>o.length>0);if(typeof e=="string")return e.split(",").map(o=>o.trim()).filter(o=>o.length>0)}a(Yu,"normalizeAliases");function Ju(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(Ju,"normalizePriority");function Zu(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Wr(e["allowed-tools"]),context:e.context==="fork"?"fork":void 0,agent:typeof e.agent=="string"?e.agent:void 0,argumentHint:typeof e["argument-hint"]=="string"?e["argument-hint"]:void 0,model:typeof e.model=="string"?e.model:void 0,hooks:Or(e.hooks),frontmatter:e}}a(Zu,"buildExecutionMetadata");function Qu(e,o){try{let n=de.readFileSync(e,"utf-8"),[t,r]=Lr(n),s=t??{},l=We.basename(e,".md"),c=typeof s.name=="string"&&s.name.trim()?s.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof s.description=="string"&&s.description.trim()?s.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:Yu(s.aliases),priority:Ju(s.priority),content:r.trim(),location:o,path:e,frontmatter:s,execution:Zu(s)}}catch(n){G({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(Qu,"parseCommandFile");function lr(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],s=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!de.existsSync(s))continue;let c=We.resolve(s);try{c=de.realpathSync.native?.(s)??de.realpathSync(s)}catch{c=We.resolve(s)}if(!n.has(c)){n.add(c);try{let d=de.readdirSync(s);for(let u of d){if(!u.endsWith(".md"))continue;let f=We.join(s,u),p=Qu(f,l);p&&o.push(p)}}catch(d){G({source:"repl:commands",level:"error",message:`Error scanning directory ${s}.`,detail:d})}}}return o}a(lr,"discoverCommands");function cr(e,o){for(let n of e)try{o.register({name:n.name,aliases:n.aliases,description:n.description,source:"extension",priority:n.priority,location:n.location,path:n.path,userInvocable:n.execution.userInvocable,disableModelInvocation:n.execution.disableModelInvocation,allowedTools:n.execution.allowedTools,context:n.execution.context,agent:n.execution.agent,argumentHint:n.execution.argumentHint,model:n.execution.model,hooks:n.execution.hooks,frontmatter:n.frontmatter,handler:a(async()=>({success:!0,invocation:{...n.execution,prompt:n.content,source:"prompt",displayName:n.name,path:n.path}}),"handler")})}catch(t){G({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(cr,"registerDiscoveredCommands");function ur(e,o){ar(e);try{let n=Aa.homedir(),t=o??process.cwd(),r=lr([{path:dr.join(t,".kodax","commands"),location:"project"},{path:W("commands"),location:"user"},{path:dr.join(n,".agents","commands"),location:"user"}]);cr(r,e)}catch(n){G({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(ur,"registerAllCommands");function Ey(e){let o=new we;return ur(o,e),o.getAll()}a(Ey,"listRegisteredCommands");function ef(e){return{global:e.filter(o=>o.scope==="global").length,directory:e.filter(o=>o.scope==="directory").length,project:e.filter(o=>o.scope==="project").length}}a(ef,"summarizeAgentsFiles");async function Ma(e){let o=Se(e);return await o.reload(),o.size}a(Ma,"reloadSkillRegistry");function of(e,o){if(!Array.isArray(o))return[];let n=[];for(let t of o){if(typeof t!="string")continue;let r=t.trim();r&&n.push(_n.isAbsolute(r)?r:_n.resolve(_n.dirname(e),r))}return n}a(of,"normalizeConfiguredExtensionPaths");function nf(){let e=_n.join(ge(),"config.json");try{if(!Ln.existsSync(e))return{};let o=JSON.parse(Ln.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:of(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(i.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(nf,"loadExtensionReloadConfig");async function tf(){try{return await Jr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(i.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(tf,"discoverDefaultExtensionsForReload");async function rf(){let e=nf(),o=await Yn(e.extensions??[]),n=await Yn(await tf()),t=await Xo(n,o),r=[...t,...o],s=se();if(!s&&r.length>0&&(s=Zr({config:e}).activate()),!s)return{reloaded:0,loaded:0,failures:0};let l=io(s),c=l.failures.length;await s.reloadExtensions({continueOnError:!0});let d=io(s),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(A=>A.path),p=await Xo(t,f),k=await Xo(o,[...f,...p]);await s.loadExtensions(p,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await s.loadExtensions(k,{continueOnError:!0,loadSource:"config",stage:"reload"});let b=io(s);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,b.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,b.failures.length-c)}}a(rf,"reloadExtensionRuntimeFromDisk");function sf(e){return{...e,enabled:!0}}a(sf,"createManualCompactionConfig");function fr(e){e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace unchanged: ${Ct(e.runtimeInfo)}`)):console.log(i.dim(" Workspace unchanged."))}a(fr,"printWorkspaceUnchangedNote");var xa=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];ue.size===0&&Wn(),ue.has(o.toLowerCase())||!!On(o)?wr(o,e.slice(1)):kf(o)}else vf()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
432
+ `)),console.log("Usage:"),console.log(ie.cyan(" /agents init")),console.log(ie.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ie.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ie.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ie.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ie.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ie.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(xa,"printAgentsHelp");var ir={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:xa,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return xa(),!0;let r=Ou(o),s=Wu(r,"AGENTS.md");if(t==="init")return await Sa(s,n);let l;try{l=await Ra(s)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${s}: ${Mn(d)}`}}if(!l)return await Sa(s,n);let c;try{c=await _u(s,"utf8")}catch(d){let u=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${s}: ${u}`}}return{success:!0,invocation:{prompt:Nu(s,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function Ln(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(Ln,"getPastedTextRefNumLines");function Du(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(Du,"formatPastedTextRef");function ju(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(ju,"formatTruncatedTextRef");var Uu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function Fu(e){let o=[],n=new RegExp(Uu.source,"g");for(let t of e.matchAll(n)){let r=Number.parseInt(t[2]??"0",10);!Number.isFinite(r)||r<=0||o.push({id:r,kind:t[1],match:t[0],index:t.index??0})}return o}a(Fu,"parseReferences");function Hu(e,o){let n=Fu(e);if(n.length===0)return e;let t=a(s=>o instanceof Map?o.get(s):o[s],"getContent"),r=e;for(let s=n.length-1;s>=0;s--){let l=n[s];if(l.kind==="Image")continue;let c=t(l.id);!c||c.type!=="text"||(r=r.slice(0,l.index)+c.content+r.slice(l.index+l.match.length))}return r}a(Hu,"expandPastedTextRefs");var Ku=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Bu=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function qu(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(qu,"isAtWordBoundaryAfter");function Gu(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(Gu,"isAtWordBoundaryBefore");function fy(e,o){if(o<=0||!qu(e,o))return null;let t=e.slice(0,o).match(Ku);if(!t)return null;let r=o-t[0].length,s=Number.parseInt(t[2]??"0",10);return!Number.isFinite(s)||s<=0?null:{start:r,end:o,id:s,kind:t[1]}}a(fy,"findPlaceholderBeforeCursor");function my(e,o){if(o>=e.length||!Gu(e,o))return null;let t=e.slice(o).match(Bu);if(!t)return null;let r=Number.parseInt(t[2]??"0",10);return!Number.isFinite(r)||r<=0?null:{start:o,end:o+t[0].length,id:r,kind:t[1]}}a(my,"findPlaceholderAfterCursor");function py(e){return e.length>800||Ln(e)>2}a(py,"shouldReplacePasteWithPlaceholder");function gy(e,o){if(e.length<=1e4)return{truncatedText:e,placeholderContent:""};let n=Math.floor(1e3/2),t=Math.floor(1e3/2),r=e.slice(0,n),s=e.slice(-t),l=e.slice(n,-t),c=Ln(l),d=ju(o,c);return{truncatedText:r+d+s,placeholderContent:l}}a(gy,"maybeTruncateLongInput");var sr=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=Ln(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:Du(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=Ln(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,numLines:t}}adopt(o){this.contents.set(o.id,o),o.id>=this.nextId&&(this.nextId=o.id+1)}peekNextId(){return this.nextId}get(o){return this.contents.get(o)}expand(o){return Hu(o,this.contents)}snapshot(){return new Map(this.contents)}restore(o){this.contents.clear();for(let[n,t]of o)this.contents.set(n,t);for(let n of o.keys())n>=this.nextId&&(this.nextId=n+1)}reset(){this.contents.clear(),this.nextId=1}size(){return this.contents.size}export(){return Array.from(this.contents.values())}},_n=null;function wy(){return _n===null&&(_n=new sr),_n}a(wy,"getOrCreateModulePasteStore");function Ca(){return _n??void 0}a(Ca,"getActivePasteStore");import{createHash as zu}from"node:crypto";import{mkdir as Xu,readdir as Vu,readFile as Yu,stat as Ju,unlink as Qu,writeFile as Zu}from"node:fs/promises";import*as ar from"node:path";var ef="paste-cache",of=720*60*60*1e3;function lr(){return W(ef)}a(lr,"getPasteCacheDir");function Ea(e){return ar.join(lr(),`${e}.txt`)}a(Ea,"getPastePath");function $y(e){return zu("sha256").update(e).digest("hex").slice(0,16)}a($y,"hashPastedText");async function Sy(e,o){try{let n=lr();return await Xu(n,{recursive:!0}),await Zu(Ea(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(Sy,"storePastedText");async function Ia(e){try{return await Yu(Ea(e),{encoding:"utf8"})}catch{return null}}a(Ia,"retrievePastedText");async function xy(e=of){let o=lr(),n=Date.now()-e,t=0,r=0,s;try{s=await Vu(o)}catch{return{scanned:t,removed:r}}for(let l of s){if(!l.endsWith(".txt"))continue;t+=1;let c=ar.join(o,l);try{(await Ju(c)).mtimeMs<n&&(await Qu(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(xy,"cleanupOldPastes");import*as mr from"path";import*as Pa from"os";function nf(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(nf,"escapeRegExp");function tf(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${nf(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(tf,"deriveArgumentHintFromUsage");function cr(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??tf(e.usage,e.name)}}a(cr,"toCommandDefinition");function dr(e){for(let o of Ta)try{let n=cr(o,"builtin");e.register(n)}catch(n){G({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(dr,"registerBuiltinCommands");import*as fe from"fs";import*as Oe from"path";function rf(e){if(Array.isArray(e))return e.map(o=>String(o).trim()).filter(o=>o.length>0);if(typeof e=="string")return e.split(",").map(o=>o.trim()).filter(o=>o.length>0)}a(rf,"normalizeAliases");function sf(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(sf,"normalizePriority");function af(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Dr(e["allowed-tools"]),context:e.context==="fork"?"fork":void 0,agent:typeof e.agent=="string"?e.agent:void 0,argumentHint:typeof e["argument-hint"]=="string"?e["argument-hint"]:void 0,model:typeof e.model=="string"?e.model:void 0,hooks:jr(e.hooks),frontmatter:e}}a(af,"buildExecutionMetadata");function lf(e,o){try{let n=fe.readFileSync(e,"utf-8"),[t,r]=Nr(n),s=t??{},l=Oe.basename(e,".md"),c=typeof s.name=="string"&&s.name.trim()?s.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof s.description=="string"&&s.description.trim()?s.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:rf(s.aliases),priority:sf(s.priority),content:r.trim(),location:o,path:e,frontmatter:s,execution:af(s)}}catch(n){G({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(lf,"parseCommandFile");function ur(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],s=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!fe.existsSync(s))continue;let c=Oe.resolve(s);try{c=fe.realpathSync.native?.(s)??fe.realpathSync(s)}catch{c=Oe.resolve(s)}if(!n.has(c)){n.add(c);try{let d=fe.readdirSync(s);for(let u of d){if(!u.endsWith(".md"))continue;let f=Oe.join(s,u),p=lf(f,l);p&&o.push(p)}}catch(d){G({source:"repl:commands",level:"error",message:`Error scanning directory ${s}.`,detail:d})}}}return o}a(ur,"discoverCommands");function fr(e,o){for(let n of e)try{o.register({name:n.name,aliases:n.aliases,description:n.description,source:"extension",priority:n.priority,location:n.location,path:n.path,userInvocable:n.execution.userInvocable,disableModelInvocation:n.execution.disableModelInvocation,allowedTools:n.execution.allowedTools,context:n.execution.context,agent:n.execution.agent,argumentHint:n.execution.argumentHint,model:n.execution.model,hooks:n.execution.hooks,frontmatter:n.frontmatter,handler:a(async()=>({success:!0,invocation:{...n.execution,prompt:n.content,source:"prompt",displayName:n.name,path:n.path}}),"handler")})}catch(t){G({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(fr,"registerDiscoveredCommands");function pr(e,o){dr(e);try{let n=Pa.homedir(),t=o??process.cwd(),r=ur([{path:mr.join(t,".kodax","commands"),location:"project"},{path:W("commands"),location:"user"},{path:mr.join(n,".agents","commands"),location:"user"}]);fr(r,e)}catch(n){G({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(pr,"registerAllCommands");function Ky(e){let o=new ye;return pr(o,e),o.getAll()}a(Ky,"listRegisteredCommands");function cf(e){return{global:e.filter(o=>o.scope==="global").length,directory:e.filter(o=>o.scope==="directory").length,project:e.filter(o=>o.scope==="project").length}}a(cf,"summarizeAgentsFiles");async function Da(e){let o=V(e);return await o.reload(),o.size}a(Da,"reloadSkillRegistry");function df(e,o){if(!Array.isArray(o))return[];let n=[];for(let t of o){if(typeof t!="string")continue;let r=t.trim();r&&n.push(On.isAbsolute(r)?r:On.resolve(On.dirname(e),r))}return n}a(df,"normalizeConfiguredExtensionPaths");function uf(){let e=On.join(he(),"config.json");try{if(!Nn.existsSync(e))return{};let o=JSON.parse(Nn.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:df(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(i.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(uf,"loadExtensionReloadConfig");async function ff(){try{return await ni()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(i.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(ff,"discoverDefaultExtensionsForReload");async function mf(){let e=uf(),o=await Qn(e.extensions??[]),n=await Qn(await ff()),t=await Yo(n,o),r=[...t,...o],s=le();if(!s&&r.length>0&&(s=ti({config:e}).activate()),!s)return{reloaded:0,loaded:0,failures:0};let l=io(s),c=l.failures.length;await s.reloadExtensions({continueOnError:!0});let d=io(s),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(A=>A.path),p=await Yo(t,f),k=await Yo(o,[...f,...p]);await s.loadExtensions(p,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await s.loadExtensions(k,{continueOnError:!0,loadSource:"config",stage:"reload"});let b=io(s);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,b.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,b.failures.length-c)}}a(mf,"reloadExtensionRuntimeFromDisk");function pf(e){return{...e,enabled:!0}}a(pf,"createManualCompactionConfig");function gr(e){e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace unchanged: ${Tt(e.runtimeInfo)}`)):console.log(i.dim(" Workspace unchanged."))}a(gr,"printWorkspaceUnchangedNote");var Ta=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];me.size===0&&Dn(),me.has(o.toLowerCase())||!!Uo(o)?vr(o,e.slice(1)):Ef(o)}else Cf()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
433
433
  /help - Show Command Help
434
434
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /help ")+"Show all available commands"),console.log(i.dim(" /help <command> ")+"Show detailed help for a specific command"),console.log(i.dim(" /<command> help ")+"Shortcut for command-specific help"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /help ")+"# List all commands"),console.log(i.dim(" /help mode ")+"# Detailed help for /mode"),console.log(i.dim(" /mode help ")+"# Same detailed help shortcut"),console.log()},"detailedHelp")},{name:"setup",description:"Initialize configuration and configure a provider",usage:"/setup [--custom|--help]",handler:a(async(e,o,n)=>{let t=e.length===1&&e[0]==="--custom";if(e.length>0&&!t){console.log(i.red(`
435
435
  [Usage: /setup [--custom|--help]]`));return}if(console.log(`
436
- ${lt()}
437
- `),n.prepareSetupSandbox){let c=await n.prepareSetupSandbox(),d=c.status==="ready"?i.green("active"):c.status==="cancelled"?i.yellow("cancelled"):i.yellow("not active");console.log(`Sandbox: [${d}]`);for(let u of c.lines)console.log(` ${u}`);console.log()}let r=qi({validateA2A:n.validateSetupA2AConfig});for(let c of r.files){let d=c.status==="created"?i.green("created"):c.status==="invalid"?i.red("invalid"):c.status==="missing"?i.yellow("missing"):i.dim("existing");console.log(` [${d}] ${c.path}`),c.diagnostic&&console.log(` ${i.red(c.diagnostic)}`)}if(console.log(),r.files.some(c=>c.status==="invalid")){console.log(i.red("Setup stopped: fix the invalid active configuration above, then run /setup again."));return}let l=await Xi({interaction:{choose:a(async(c,d)=>{let u=d.map(p=>p.label),f=await n.ui.select(c,u);return d.find(p=>p.label===f)?.value},"choose"),text:a((c,d)=>n.ui.input(c,d),"text"),confirm:a(c=>n.ui.confirm(c),"confirm")},customOnly:t});if(l.status==="cancelled"){console.log(i.dim(`
436
+ ${dt()}
437
+ `),n.prepareSetupSandbox){let c=await n.prepareSetupSandbox(),d=c.status==="ready"?i.green("active"):c.status==="cancelled"?i.yellow("cancelled"):i.yellow("not active");console.log(`Sandbox: [${d}]`);for(let u of c.lines)console.log(` ${u}`);console.log()}let r=Yi({validateA2A:n.validateSetupA2AConfig});for(let c of r.files){let d=c.status==="created"?i.green("created"):c.status==="invalid"?i.red("invalid"):c.status==="missing"?i.yellow("missing"):i.dim("existing");console.log(` [${d}] ${c.path}`),c.diagnostic&&console.log(` ${i.red(c.diagnostic)}`)}if(console.log(),r.files.some(c=>c.status==="invalid")){console.log(i.red("Setup stopped: fix the invalid active configuration above, then run /setup again."));return}let l=await Zi({interaction:{choose:a(async(c,d)=>{let u=d.map(p=>p.label),f=await n.ui.select(c,u);return d.find(p=>p.label===f)?.value},"choose"),text:a((c,d)=>n.ui.input(c,d),"text"),confirm:a(c=>n.ui.confirm(c),"confirm")},customOnly:t});if(l.status==="cancelled"){console.log(i.dim(`
438
438
  Provider setup cancelled. Configuration files remain initialized.
439
439
  `));return}console.log(i.green(`
440
- Provider setup saved: ${l.selection.provider}/${l.selection.model}`)),console.log(i.dim(`Config: ${l.selection.configPath}`));for(let c of Di({apiKeyEnv:l.selection.apiKeyEnv}))console.log(` ${c}`);console.log()},"handler"),detailedHelp:a(()=>{console.log(`
441
- ${lt()}
440
+ Provider setup saved: ${l.selection.provider}/${l.selection.model}`)),console.log(i.dim(`Config: ${l.selection.configPath}`));for(let c of Ki({apiKeyEnv:l.selection.apiKeyEnv}))console.log(` ${c}`);console.log()},"handler"),detailedHelp:a(()=>{console.log(`
441
+ ${dt()}
442
442
  `)},"detailedHelp")},{name:"exit",aliases:["quit","q","bye"],description:"Exit interactive mode",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(i.green(`
443
443
  Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
444
444
  /exit - Exit Interactive Mode
@@ -450,62 +450,62 @@ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{consol
450
450
  `+t))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
451
451
  /cost - Session Cost Report
452
452
  `)),console.log(i.bold("Description:")),console.log(i.dim(" Shows token usage and estimated cost for the current session,")),console.log(i.dim(" broken down by provider and AMA role.")),console.log()},"detailedHelp")},{name:"paste",description:"Inspect pasted text stored in the input buffer",usage:"/paste show <id> | /paste list",argumentHint:"show <id> | list",handler:a(async e=>{let o=e[0]?.toLowerCase();if(!o||o==="help"){console.log(i.cyan(`
453
- /paste - Inspect stored paste contents`)),console.log(i.dim(" /paste list - Show all pasted text ids in this session")),console.log(i.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=ba();if(!n){console.log(i.yellow(`
453
+ /paste - Inspect stored paste contents`)),console.log(i.dim(" /paste list - Show all pasted text ids in this session")),console.log(i.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=Ca();if(!n){console.log(i.yellow(`
454
454
  [No paste registry active]`)),console.log(i.dim(" The REPL composer is not mounted, or no paste has been captured yet."));return}if(o==="list"){let t=n.export();if(t.length===0){console.log(i.dim(`
455
455
  [No pasted content in this session yet]`));return}console.log(i.bold(`
456
456
  Pasted content in this session:
457
457
  `));for(let r of t){let s=r.content?.length??0,l=r.contentHash?` (hash ${r.contentHash.slice(0,8)})`:"";console.log(` ${i.cyan(`#${r.id}`)} ${r.type} ${s} chars${l}`)}console.log();return}if(o==="show"){let t=e[1],r=t?Number.parseInt(t,10):NaN;if(!Number.isFinite(r)||r<=0){console.log(i.yellow(`
458
458
  Usage: /paste show <id>`));return}let s=n.get(r);if(!s){console.log(i.dim(`
459
- [No paste registered with id #${r}]`));return}let l=s.content??"";if(!l&&s.contentHash){let c=await Sa(s.contentHash);c&&(l=c)}if(!l){console.log(i.yellow(`
459
+ [No paste registered with id #${r}]`));return}let l=s.content??"";if(!l&&s.contentHash){let c=await Ia(s.contentHash);c&&(l=c)}if(!l){console.log(i.yellow(`
460
460
  [Paste #${r} has no stored content (hash ${s.contentHash??"n/a"})]`));return}console.log(i.bold(`
461
461
  Pasted text #${r} (${l.length} chars):
462
462
  `)),console.log(l),console.log();return}console.log(i.yellow(`
463
463
  [Unknown /paste subcommand: ${o}]`)),console.log(i.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
464
464
  /paste - Inspect stored paste contents
465
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /paste list - Show all pasted text ids in this session")),console.log(i.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(i.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(i.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(i.dim(" to the LLM on submit. Use this command to see what was captured.")),console.log()},"detailedHelp")},{name:"compact",description:"Manually trigger context compaction",usage:"/compact [instructions]",handler:a(async(e,o,n,t)=>{try{let r=await Ri(o.gitRoot),s=t.provider,l=po(s);if(!l){console.log(i.red(`
466
- [Provider not found: ${s}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??Ho(o.messages),f=sf(r);console.log(i.dim(`
467
- [Compacting conversation...]`)),n.startCompacting?.();try{let p=await Kr(o.messages,f,l,d,c,void 0,u,ii,si,t.model,!0,l.getEffectiveMaxOutputTokens(t.model));if(!p.compacted){console.log(i.green(`
465
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /paste list - Show all pasted text ids in this session")),console.log(i.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(i.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(i.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(i.dim(" to the LLM on submit. Use this command to see what was captured.")),console.log()},"detailedHelp")},{name:"compact",description:"Manually trigger context compaction",usage:"/compact [instructions]",handler:a(async(e,o,n,t)=>{try{let r=await Pi(o.gitRoot),s=t.provider,l=go(s);if(!l){console.log(i.red(`
466
+ [Provider not found: ${s}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??Bo(o.messages),f=pf(r);console.log(i.dim(`
467
+ [Compacting conversation...]`)),n.startCompacting?.();try{let p=await Gr(o.messages,f,l,d,c,void 0,u,di,ui,t.model,!0,l.getEffectiveMaxOutputTokens(t.model));if(!p.compacted){console.log(i.green(`
468
468
  [No compaction needed]`)),console.log(i.dim(`Current token usage: ${p.tokensBefore.toLocaleString()}
469
- `));return}o.messages=p.messages,o.contextTokenSnapshot={currentTokens:p.tokensAfter,baselineEstimatedTokens:Ho(p.messages),source:o.contextTokenSnapshot?.source??"estimate"},n.onCompactStats?.({tokensBefore:p.tokensBefore,tokensAfter:p.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(i.green(`
469
+ `));return}o.messages=p.messages,o.contextTokenSnapshot={currentTokens:p.tokensAfter,baselineEstimatedTokens:Bo(p.messages),source:o.contextTokenSnapshot?.source??"estimate"},n.onCompactStats?.({tokensBefore:p.tokensBefore,tokensAfter:p.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(i.green(`
470
470
  [Compaction complete: ${Math.round(p.tokensBefore/1e3)}k -> ${Math.round(p.tokensAfter/1e3)}k tokens, ${Math.round((1-p.tokensAfter/p.tokensBefore)*100)}% reduced]`)),console.log()}finally{n.stopCompacting?.()}}catch(r){let s=r instanceof Error?r.message:String(r);console.log(i.red(`
471
471
  [Compaction failed: ${s}]
472
472
  `))}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
473
473
  /compact - Manual Context Compaction
474
474
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /compact ")+"Compact conversation with default instructions"),console.log(i.dim(" /compact <text> ")+"Compact with custom instructions for the summary"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Manually triggers context compaction using LLM-generated summaries.")),console.log(i.dim(" All eligible older messages are replaced atomically with a structured checkpoint.")),console.log(i.dim(" Automatic large compaction is always enabled; /compact bypasses its trigger comparison.")),console.log(),console.log(i.bold("What it does:")),console.log(i.dim(" 1. Protects 20% of the effective trigger as recent raw context")),console.log(i.dim(" 2. Summarizes the complete eligible prefix in one atomic wave")),console.log(i.dim(" 3. Tracks files that were read/modified in the conversation")),console.log(i.dim(" 4. Replaces old messages with summary to save tokens")),console.log(),console.log(i.bold("Configuration:")),console.log(i.dim(" Config file: ~/.kodax/config.json")),console.log(i.dim(" Settings:")),console.log(i.dim(" - compaction.triggerPercent: 15-90, default 75")),console.log(i.dim(" - compaction.triggerTokens: Optional absolute token threshold; 0 disables this limiter")),console.log(i.dim(" - The smaller percentage/absolute threshold wins")),console.log(i.dim(" - compaction.enabled: deprecated and ignored; automatic compaction stays on")),console.log(i.dim(" - compaction.contextWindow: Optional token-window override")),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /compact ")+"# Compact with default instructions"),console.log(i.dim(" /compact focus on auth logic ")+"# Emphasize authentication in summary"),console.log(),console.log(i.dim(" See also: /help status (shows token usage)")),console.log()},"detailedHelp")},{name:"reload",description:"Reload project rules, skills, and active extensions",handler:a(async(e,o,n,t)=>{console.log(i.cyan(`
475
475
  Reloading project rule files, skills, and runtime extensions...
476
- `));try{let r=await n.reloadAgentsFiles?.()??[],s=ef(r),l=await Ma(o.gitRoot),c=await rf(),d=c.reloaded+c.loaded,u=c.failures;if(r.length===0&&l===0&&d===0&&u===0){console.log(i.yellow(`No project rule files, skills, or active extensions found.
476
+ `));try{let r=await n.reloadAgentsFiles?.()??[],s=cf(r),l=await Da(o.gitRoot),c=await mf(),d=c.reloaded+c.loaded,u=c.failures;if(r.length===0&&l===0&&d===0&&u===0){console.log(i.yellow(`No project rule files, skills, or active extensions found.
477
477
  `)),console.log(i.dim(" Create AGENTS.md or CLAUDE.md in your project, add skills, or load extensions with --extension.")),console.log();return}console.log(i.green(`Reloaded successfully:
478
478
  `)),s.global>0&&console.log(i.dim(` - Global: ${s.global} file(s)`)),s.directory>0&&console.log(i.dim(` - Directory: ${s.directory} file(s)`)),s.project>0&&console.log(i.dim(` - Project: ${s.project} file(s)`)),c.reloaded>0&&console.log(i.dim(` - Extensions reloaded: ${c.reloaded} module(s)`)),c.loaded>0&&console.log(i.dim(` - Extensions loaded: ${c.loaded} module(s)`)),l>0&&console.log(i.dim(` - Skills: ${l} skill(s)`)),u>0&&console.log(i.yellow(` - Failures: ${u} recorded (run /extensions for details)`)),console.log(i.dim(" Updated rules, skills, and extensions will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(i.red(`Failed to reload.
479
479
  `)),console.log(i.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
480
480
  /reload - Reload Project Context
481
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(i.bold("Description:")),console.log(" Reloads project-level context rules from AGENTS.md, CLAUDE.md, and .kodax/AGENTS.md files."),console.log(" Reloads skills from .kodax/skills/, ~/.kodax/skills/, ~/.agents/skills/, plugins, and builtins."),console.log(" Rediscovers default/configured extensions, creates a runtime if needed, and hot-reloads loaded extensions."),console.log(),console.log(i.bold("Rule Priority:")),console.log(i.dim(" 1. Global: ")+"~/.kodax/AGENTS.md"),console.log(i.dim(" 2. Directory: ")+"AGENTS.md or CLAUDE.md from project root to current directory"),console.log(i.dim(" 3. Project: ")+".kodax/AGENTS.md at the project root"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /reload ")+"# Reload and show loaded rules"),console.log()},"detailedHelp")},{name:"extensions",aliases:["ext"],description:"Show active extension runtime diagnostics",usage:"/extensions",handler:a(async()=>{let e=se();if(!e){console.log(i.yellow(`
481
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(i.bold("Description:")),console.log(" Reloads project-level context rules from AGENTS.md, CLAUDE.md, and .kodax/AGENTS.md files."),console.log(" Reloads skills from .kodax/skills/, ~/.kodax/skills/, ~/.agents/skills/, plugins, and builtins."),console.log(" Rediscovers default/configured extensions, creates a runtime if needed, and hot-reloads loaded extensions."),console.log(),console.log(i.bold("Rule Priority:")),console.log(i.dim(" 1. Global: ")+"~/.kodax/AGENTS.md"),console.log(i.dim(" 2. Directory: ")+"AGENTS.md or CLAUDE.md from project root to current directory"),console.log(i.dim(" 3. Project: ")+".kodax/AGENTS.md at the project root"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /reload ")+"# Reload and show loaded rules"),console.log()},"detailedHelp")},{name:"extensions",aliases:["ext"],description:"Show active extension runtime diagnostics",usage:"/extensions",handler:a(async()=>{let e=le();if(!e){console.log(i.yellow(`
482
482
  [No active extension runtime]
483
483
  `));return}let o=io(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(i.bold(`
484
484
  Extension Runtime:
485
- `)),console.log(i.dim(` Loaded: ${o.loadedExtensions.length}`)),console.log(i.dim(` Capabilities: ${o.capabilityProviders.length}`)),console.log(i.dim(` Commands: ${o.commands.length}`)),console.log(i.dim(` Hooks: ${o.hooks.length}`)),console.log(i.dim(` Failures: ${o.failures.length}`)),console.log(i.dim(` Extension Tools: ${n.length}`)),o.defaults.activeTools!==void 0&&console.log(i.dim(` Active Tools: ${o.defaults.activeTools.join(", ")||"(none)"}`)),(o.defaults.modelSelection.provider||o.defaults.modelSelection.model)&&console.log(i.dim(` Model Override: ${o.defaults.modelSelection.provider??"(inherit)"} / ${o.defaults.modelSelection.model??"(inherit)"}`)),o.defaults.thinkingLevel&&console.log(i.dim(` Thinking: ${o.defaults.thinkingLevel}`)),console.log(),o.loadedExtensions.length>0){console.log(i.bold("Loaded Extensions:"));for(let t of o.loadedExtensions)console.log(i.dim(` - ${t.label} [${t.loadSource}] (${t.path})`));console.log()}if(o.commands.length>0){console.log(i.bold("Extension Commands:"));for(let t of o.commands){let r=t.aliases?.length?` [${t.aliases.join(", ")}]`:"";console.log(i.dim(` - /${t.name}${r} ${t.description}`))}console.log()}if(o.capabilityProviders.length>0){console.log(i.bold("Capability Providers:"));for(let t of o.capabilityProviders){let r=If(t.metadata);console.log(i.dim(` - ${t.id} [${t.kinds.join(", ")}]${r?` ${r}`:""}`))}console.log()}if(n.length>0){console.log(i.bold("Extension Tools:"));for(let t of n){let r=t.shadowedSources.length>0?` overrides: ${t.shadowedSources.map(s=>s.label??s.id??s.kind).join(", ")}`:"";console.log(i.dim(` - ${t.name}${r}`))}console.log()}if(o.hooks.length>0){console.log(i.bold("Hook Participation:"));for(let t of o.hooks)console.log(i.dim(` - ${t.hook} [#${t.order}] ${t.source.label}`));console.log()}if(o.failures.length>0){console.log(i.bold("Recent Failures:"));for(let t of o.failures.slice(-10))console.log(i.dim(` - [${t.stage}] ${t.source.label}: ${t.target} -> ${t.message}`));console.log()}},"handler")},{name:"sandbox",description:"Inspect the optional ASRT sandbox backend",usage:"/sandbox",handler:a(async(e,o,n)=>{if(e.length>0){console.log(i.red(`
485
+ `)),console.log(i.dim(` Loaded: ${o.loadedExtensions.length}`)),console.log(i.dim(` Capabilities: ${o.capabilityProviders.length}`)),console.log(i.dim(` Commands: ${o.commands.length}`)),console.log(i.dim(` Hooks: ${o.hooks.length}`)),console.log(i.dim(` Failures: ${o.failures.length}`)),console.log(i.dim(` Extension Tools: ${n.length}`)),o.defaults.activeTools!==void 0&&console.log(i.dim(` Active Tools: ${o.defaults.activeTools.join(", ")||"(none)"}`)),(o.defaults.modelSelection.provider||o.defaults.modelSelection.model)&&console.log(i.dim(` Model Override: ${o.defaults.modelSelection.provider??"(inherit)"} / ${o.defaults.modelSelection.model??"(inherit)"}`)),o.defaults.thinkingLevel&&console.log(i.dim(` Thinking: ${o.defaults.thinkingLevel}`)),console.log(),o.loadedExtensions.length>0){console.log(i.bold("Loaded Extensions:"));for(let t of o.loadedExtensions)console.log(i.dim(` - ${t.label} [${t.loadSource}] (${t.path})`));console.log()}if(o.commands.length>0){console.log(i.bold("Extension Commands:"));for(let t of o.commands){let r=t.aliases?.length?` [${t.aliases.join(", ")}]`:"";console.log(i.dim(` - /${t.name}${r} ${t.description}`))}console.log()}if(o.capabilityProviders.length>0){console.log(i.bold("Capability Providers:"));for(let t of o.capabilityProviders){let r=Nf(t.metadata);console.log(i.dim(` - ${t.id} [${t.kinds.join(", ")}]${r?` ${r}`:""}`))}console.log()}if(n.length>0){console.log(i.bold("Extension Tools:"));for(let t of n){let r=t.shadowedSources.length>0?` overrides: ${t.shadowedSources.map(s=>s.label??s.id??s.kind).join(", ")}`:"";console.log(i.dim(` - ${t.name}${r}`))}console.log()}if(o.hooks.length>0){console.log(i.bold("Hook Participation:"));for(let t of o.hooks)console.log(i.dim(` - ${t.hook} [#${t.order}] ${t.source.label}`));console.log()}if(o.failures.length>0){console.log(i.bold("Recent Failures:"));for(let t of o.failures.slice(-10))console.log(i.dim(` - [${t.stage}] ${t.source.label}: ${t.target} -> ${t.message}`));console.log()}},"handler")},{name:"sandbox",description:"Inspect the optional ASRT sandbox backend",usage:"/sandbox",handler:a(async(e,o,n)=>{if(e.length>0){console.log(i.red(`
486
486
  [Usage: /sandbox]`));return}if(!n.inspectSandbox){console.log(i.dim(`
487
487
  Sandbox diagnostics are unavailable because this host did not provide them.
488
488
  `));return}let t=await n.inspectSandbox(),r=t.ready?i.green("ready"):i.yellow("unavailable");console.log(i.bold(`
489
489
  Sandbox
490
490
  `)),console.log(i.dim(` Status: ${r}`)),console.log(i.dim(` Platform: ${t.platform}`)),console.log(i.dim(` Backend: ${t.backend}`)),console.log(i.dim(` ASRT: ${t.version}`));for(let s of t.diagnostics)console.log(i.dim(` Diagnostic: ${s}`));if(!t.ready)for(let s of t.guidance)console.log(i.dim(` Guidance: ${s}`));console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
491
491
  /sandbox - Inspect Sandbox Readiness
492
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /sandbox ")+"Refresh and display ASRT readiness"),console.log(),console.log(i.dim("This command is read-only. It never activates ASRT or requests elevation.")),console.log(i.dim("Use `kodax sandbox setup` explicitly when activation is required.")),console.log()},"detailedHelp")},{name:"status",aliases:["info","ctx"],description:"Show current session status",handler:a(async(e,o,n,t)=>{await bf(o,t,e,n)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
492
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /sandbox ")+"Refresh and display ASRT readiness"),console.log(),console.log(i.dim("This command is read-only. It never activates ASRT or requests elevation.")),console.log(i.dim("Use `kodax sandbox setup` explicitly when activation is required.")),console.log()},"detailedHelp")},{name:"status",aliases:["info","ctx"],description:"Show current session status",handler:a(async(e,o,n,t)=>{await If(o,t,e,n)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
493
493
  /status - Show Session Status
494
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /status ")+"Display current session information"),console.log(i.dim(" /status workspace ")+"Show deeper workspace/runtime details"),console.log(i.dim(" /status runtime ")+"Show SDK runtime mode, identity, and queue counters"),console.log(i.dim(" /info, /ctx ")+"Aliases for /status"),console.log(),console.log(i.bold("Displays:")),console.log(i.dim(" - Current mode (code/ask)")),console.log(i.dim(" - Session ID")),console.log(i.dim(" - Message count")),console.log(i.dim(" - Estimated token usage")),console.log(i.dim(" - Current workspace truth")),console.log(i.dim(" - Session timestamps")),console.log(i.dim(" - Repo-intelligence mode and active runtime summary")),console.log()},"detailedHelp")},{name:"mcp",description:"Show MCP server status or refresh catalogs",usage:"/mcp [status|refresh]",handler:a(async e=>{let o=se();if(!o){console.log(i.yellow(`
494
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /status ")+"Display current session information"),console.log(i.dim(" /status workspace ")+"Show deeper workspace/runtime details"),console.log(i.dim(" /status runtime ")+"Show SDK runtime mode, identity, and queue counters"),console.log(i.dim(" /info, /ctx ")+"Aliases for /status"),console.log(),console.log(i.bold("Displays:")),console.log(i.dim(" - Current mode (code/ask)")),console.log(i.dim(" - Session ID")),console.log(i.dim(" - Message count")),console.log(i.dim(" - Estimated token usage")),console.log(i.dim(" - Current workspace truth")),console.log(i.dim(" - Session timestamps")),console.log(i.dim(" - Repo-intelligence mode and active runtime summary")),console.log()},"detailedHelp")},{name:"mcp",description:"Show MCP server status or refresh catalogs",usage:"/mcp [status|refresh]",handler:a(async e=>{let o=le();if(!o){console.log(i.yellow(`
495
495
  [No extension runtime active \u2014 MCP is not available]`));return}let t=io(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(i.dim(`
496
496
  Refreshing MCP catalogs...`));try{await o.refreshCapabilityProviders("mcp"),console.log(i.green("MCP catalogs refreshed."))}catch(c){console.log(i.red(`Refresh failed: ${c instanceof Error?c.message:String(c)}`))}return}if(console.log(i.cyan(`
497
497
  MCP Status
498
498
  `)),!t){console.log(i.yellow(" No MCP provider registered.")),console.log(i.dim(" Add servers to ~/.kodax/integrations/mcp.json or run `kodax mcp add`.\n"));return}let l=t.metadata?.servers??[];console.log(i.dim(` Servers: ${l.length}`)),console.log();for(let c of l){let d=c.status==="ready"?i.green:c.status==="error"?i.red:i.yellow;console.log(` ${i.bold(c.serverId)} ${d(c.status)} connect=${i.dim(c.connect)}`),c.cachedAt&&console.log(i.dim(` tools=${c.tools} resources=${c.resources} prompts=${c.prompts}`)),c.lastError&&console.log(i.red(` error: ${c.lastError}`))}console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
499
499
  /mcp - MCP Server Management
500
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /mcp ")+"Show MCP server status"),console.log(i.dim(" /mcp status ")+"Same as /mcp"),console.log(i.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),console.log(i.dim(" Config: ~/.kodax/integrations/mcp.json")),console.log(i.dim(" Template: ~/.kodax/integrations/mcp.example.jsonc")),console.log()},"detailedHelp")},{name:"repo-intel",description:"Inspect built-in repo intelligence",usage:"/repo-intel [status|mode|trace]",handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(r==="status"){let s=await zo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:gr(o)});Ia(s);return}if(r==="mode"){if(e.length===1){console.log(i.dim(`
500
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /mcp ")+"Show MCP server status"),console.log(i.dim(" /mcp status ")+"Same as /mcp"),console.log(i.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),console.log(i.dim(" Config: ~/.kodax/integrations/mcp.json")),console.log(i.dim(" Template: ~/.kodax/integrations/mcp.example.jsonc")),console.log()},"detailedHelp")},{name:"repo-intel",description:"Inspect built-in repo intelligence",usage:"/repo-intel [status|mode|trace]",handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(r==="status"){let s=await Vo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:yr(o)});Wa(s);return}if(r==="mode"){if(e.length===1){console.log(i.dim(`
501
501
  Current repo-intelligence mode: ${i.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(i.dim(`Usage: /repo-intel mode [auto|full|light|off]
502
- `));return}let s=df(e[1]);if(!s){console.log(i.red(`
502
+ `));return}let s=yf(e[1]);if(!s){console.log(i.red(`
503
503
  [Invalid repo-intelligence mode: ${e[1]}]`)),console.log(i.dim(`Usage: /repo-intel mode [auto|full|light|off]
504
- `));return}let l=Ea({mode:s},{repoIntelligenceMode:s},n,t);ro(`Repo intelligence mode: ${s}`,l);return}if(r==="trace"){let s=e[1]?.toLowerCase();if(!s){console.log(i.dim(`
504
+ `));return}let l=La({mode:s},{repoIntelligenceMode:s},n,t);ro(`Repo intelligence mode: ${s}`,l);return}if(r==="trace"){let s=e[1]?.toLowerCase();if(!s){console.log(i.dim(`
505
505
  Current repo-intelligence trace: ${i.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(i.dim(`Usage: /repo-intel trace [on|off|toggle]
506
- `));return}let l=uf(s,t.repoIntelligenceTrace??!1);if(l===null){console.log(i.red(`
506
+ `));return}let l=vf(s,t.repoIntelligenceTrace??!1);if(l===null){console.log(i.red(`
507
507
  [Invalid trace value: ${e[1]}]`)),console.log(i.dim(`Usage: /repo-intel trace [on|off|toggle]
508
- `));return}let c=Ea({trace:l},{repoIntelligenceTrace:l},n,t);ro(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(i.yellow(`
508
+ `));return}let c=La({trace:l},{repoIntelligenceTrace:l},n,t);ro(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(i.yellow(`
509
509
  [Repo intelligence refresh is automatic in this build]`)),console.log(i.dim(`Use /repo-intel status to inspect the current engine state.
510
510
  `));return}console.log(i.red(`
511
511
  [Unknown /repo-intel subcommand: ${e[0]}]`)),console.log(i.dim(`Usage: /repo-intel [status|mode|trace]
@@ -513,7 +513,7 @@ Current repo-intelligence trace: ${i.cyan(t.repoIntelligenceTrace?"on":"off")}`)
513
513
  /repo-intel - Built-in Repo Intelligence
514
514
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /repo-intel ")+"Show built-in repo-intelligence status"),console.log(i.dim(" /repo-intel status ")+"Show built-in engine status without probing an external daemon"),console.log(i.dim(" /repo-intel mode auto ")+"Let KodaX pick the best repo-intelligence engine"),console.log(i.dim(" /repo-intel mode full ")+"Prefer the full repo-intelligence engine"),console.log(i.dim(" /repo-intel mode light ")+"Use the light repo-intelligence engine"),console.log(i.dim(" /repo-intel mode off ")+"Disable repo-intelligence injection"),console.log(i.dim(" /repo-intel trace on|off|toggle ")+"Toggle repo-intelligence trace output"),console.log(),console.log(i.bold("Notes:")),console.log(i.dim(" - /status now includes a compact repo-intelligence summary.")),console.log(i.dim(" - External repointel endpoint/bin controls are deprecated for built-in KodaX.")),console.log()},"detailedHelp")},{name:"repointel",aliases:["ri"],description:"Deprecated alias for /repo-intel status",usage:"/repointel [status]",userInvocable:!1,handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(console.log(i.yellow(`
515
515
  [/repointel is deprecated; use /repo-intel status]
516
- `)),r==="status"){let s=await zo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:gr(o)});Ia(s);return}if(r==="mode"){console.log(i.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
516
+ `)),r==="status"){let s=await Vo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:yr(o)});Wa(s);return}if(r==="mode"){console.log(i.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
517
517
  `));return}if(r==="trace"){console.log(i.dim(`Use /repo-intel trace [on|off|toggle] to change repo-intelligence trace output.
518
518
  `));return}if(r==="warm"||r==="endpoint"||r==="bin"){console.log(i.dim("Repo intelligence is built into KodaX; external daemon/bin controls are no longer a normal REPL command surface.")),console.log(i.dim(`Use /repo-intel status to inspect the active engine.
519
519
  `));return}console.log(i.dim(`Usage: /repointel [status]
@@ -523,14 +523,14 @@ Current repo-intelligence trace: ${i.cyan(t.repoIntelligenceTrace?"on":"off")}`)
523
523
  Child-task provider fallback: `)+i.yellow("off")+i.dim(" (no chain configured)")):(console.log(i.dim(`
524
524
  Child-task provider fallback: `)+i.green("on")),console.log(i.dim(" Order: ")+i.cyan(r.join(" \u2192 ")))),console.log(i.dim(`
525
525
  When a child's primary provider is exhausted/down, KodaX re-runs it`)),console.log(i.dim(` on the next provider in this list. Set: /fallback ark-coding,kimi-code
526
- `));return}if(s==="off"||s==="clear"||s==="none"){Re({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(i.green(`
526
+ `));return}if(s==="off"||s==="clear"||s==="none"){Ce({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(i.green(`
527
527
  \u2713 `)+i.dim(`Child-task provider fallback disabled.
528
528
  `));return}let l=e.join(",").split(",").map(c=>c.trim()).filter(Boolean);if(l.length===0){console.log(i.red(`
529
529
  [/fallback: no provider ids given]`)),console.log(i.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
530
- `));return}Re({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(i.green(`
530
+ `));return}Ce({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(i.green(`
531
531
  \u2713 `)+i.dim("Child-task fallback order: ")+i.cyan(l.join(" \u2192 "))),console.log(i.dim(` Provider ids must match your configured providers (see /status or kodax doctor).
532
- `))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto)",usage:"/mode [plan|accept-edits|auto]",handler:a(async(e,o,n,t)=>{if(e.length===0){let s=ko(t.permissionMode,"accept-edits")??"accept-edits";console.log(i.dim(`
533
- Current mode: ${i.cyan(s)}`)),console.log(i.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];nn.includes(r)?(n.setPermissionMode?await n.setPermissionMode(r):t.permissionMode=r,pt(r),console.log(i.cyan(`
532
+ `))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto)",usage:"/mode [plan|accept-edits|auto]",handler:a(async(e,o,n,t)=>{if(e.length===0){let s=bo(t.permissionMode,"accept-edits")??"accept-edits";console.log(i.dim(`
533
+ Current mode: ${i.cyan(s)}`)),console.log(i.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];rn.includes(r)?(n.setPermissionMode?await n.setPermissionMode(r):t.permissionMode=r,wt(r),console.log(i.cyan(`
534
534
  [Switched to ${r} mode] (saved)`))):console.log(i.red(`
535
535
  [Unknown mode: ${e[0]}. Use: plan | accept-edits | auto]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
536
536
  /mode - Switch Permission Mode
@@ -545,7 +545,7 @@ Classifier engine: ${i.cyan(t.engine)}`)),console.log(i.dim(` classifier health
545
545
  [auto-mode classifier stats]`)),console.log(i.dim(` engine: ${i.cyan(t.engine)}`)),console.log(i.dim(` classifier health: ${t.classifierHealth}`)),console.log(i.dim(" Denial tracker:")),console.log(i.dim(` consecutive blocks: ${t.denials.consecutive} / 3`)),console.log(i.dim(` cumulative blocks: ${t.denials.cumulative} / 20`)),console.log(i.dim(" Circuit breaker:")),console.log(i.dim(` errors in window: ${t.breaker.timestamps.filter(r=>r>=Date.now()-600*1e3).length} / 5 (10 min)`)),console.log(),t.engine==="rules"?console.log(i.yellow(" \u21AA rules engine is active. /auto-engine llm to enable the classifier.")):t.classifierHealth==="degraded"&&console.log(i.yellow(" \u21AA classifier calls are temporarily skipped; Accept-edits fallback is active and engine remains llm.")),console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
546
546
  /auto-denials - Auto-Mode Classifier Diagnostic Dump
547
547
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto-denials ")+"Print engine + tracker + breaker counters"),console.log(),console.log(i.bold("Diagnostics and fallback (FEATURE_092):")),console.log(i.dim(" - Block counters are diagnostic only; they never select rules.")),console.log(i.dim(" - 5 errors in 10 min \u2192 skip classifier temporarily and use Accept-edits fallback.")),console.log(i.dim(" - The selected engine remains llm unless the user/host explicitly selects rules.")),console.log()},"detailedHelp")},{name:"save",description:"Save current session",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(i.green(`
548
- [Session saved]`)),fr(o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
548
+ [Session saved]`)),gr(o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
549
549
  /save - Save Current Session
550
550
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /save ")+"Save current conversation to session storage"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Manually saves the current conversation session.")),console.log(i.dim(" Sessions are auto-saved after each message, but you can")),console.log(i.dim(" use this to ensure the session is persisted.")),console.log(i.dim(" Saving updates session storage only; the current workspace stays untouched.")),console.log(),console.log(i.dim(" See also: /help load, /help sessions")),console.log()},"detailedHelp")},{name:"load",aliases:["resume"],description:"Load a session",usage:"/load <session-id>",handler:a(async(e,o,n)=>{if(e.length===0){console.log(i.red(`
551
551
  [Usage: /load <session-id>]`)),await n.listSessions();return}await n.loadSession(e[0])==="missing"&&console.log(i.red(`
@@ -570,110 +570,111 @@ Classifier engine: ${i.cyan(t.engine)}`)),console.log(i.dim(` classifier health
570
570
  /history - Show Conversation History
571
571
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /history ")+"Display recent messages in current session"),console.log(i.dim(" /hist ")+"Alias for /history"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows the last 20 messages in the current conversation.")),console.log(i.dim(" Useful for reviewing what has been discussed.")),console.log()},"detailedHelp")},{name:"delete",aliases:["rm","del"],description:"Delete a session",usage:"/delete <session-id> or /delete all",handler:a(async(e,o,n)=>{if(e.length===0){console.log(i.red(`
572
572
  [Usage: /delete <session-id> or /delete all]`)),await n.listSessions?.();return}e[0]==="all"?(await n.deleteAllSessions?.(),console.log(i.green(`
573
- [All sessions deleted]`)),fr(o)):(await n.deleteSession?.(e[0]),console.log(i.green(`
574
- [Session deleted: ${e[0]}]`)),fr(o))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
573
+ [All sessions deleted]`)),gr(o)):(await n.deleteSession?.(e[0]),console.log(i.green(`
574
+ [Session deleted: ${e[0]}]`)),gr(o))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
575
575
  /delete - Delete Saved Sessions
576
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /delete ")+"Show usage (lists sessions)"),console.log(i.dim(" /delete <id> ")+"Delete a specific session"),console.log(i.dim(" /delete all ")+"Delete ALL sessions"),console.log(i.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(i.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(i.bold("Workspace behavior:")),console.log(i.dim(" Deletes saved session records only.")),console.log(i.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(i.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=on().providerModels;if(e.length===0){console.log(i.bold(`
576
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /delete ")+"Show usage (lists sessions)"),console.log(i.dim(" /delete <id> ")+"Delete a specific session"),console.log(i.dim(" /delete all ")+"Delete ALL sessions"),console.log(i.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(i.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(i.bold("Workspace behavior:")),console.log(i.dim(" Deletes saved session records only.")),console.log(i.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(i.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=tn().providerModels;if(e.length===0){console.log(i.bold(`
577
577
  Available Providers:
578
- `));let c=bi(r);for(let d of c){let u=d.configured?i.green("[configured]"):i.red("[not configured]"),f=d.custom?i.yellow(" [custom]"):"",p=d.name===t.provider,k=p?i.cyan(" *"):"";console.log(` ${i.bold(d.name)}${k} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(i.yellow(` ! ${nt(d.capabilityProfile)}`));let b=Be(d.name,r),A=p?t.model:null;for(let R of b){let $=p&&(A===R||!A&&R===d.model)?i.cyan(">"):" ";console.log(` ${$} ${R}`)}console.log()}console.log(i.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(i.dim("Usage:")),console.log(i.dim(" /model <provider> Switch provider")),console.log(i.dim(" /model <provider>/<model> Switch to specific model")),console.log(i.dim(` /model /<model> Switch model within current provider
578
+ `));let c=Ri(r);for(let d of c){let u=d.configured?i.green("[configured]"):i.red("[not configured]"),f=d.custom?i.yellow(" [custom]"):"",p=d.name===t.provider,k=p?i.cyan(" *"):"";console.log(` ${i.bold(d.name)}${k} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(i.yellow(` ! ${rt(d.capabilityProfile)}`));let b=Be(d.name,r),A=p?t.model:null;for(let R of b){let $=p&&(A===R||!A&&R===d.model)?i.cyan(">"):" ";console.log(` ${$} ${R}`)}console.log()}console.log(i.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(i.dim("Usage:")),console.log(i.dim(" /model <provider> Switch provider")),console.log(i.dim(" /model <provider>/<model> Switch to specific model")),console.log(i.dim(` /model /<model> Switch model within current provider
579
579
  `));return}let s=(e[0]??"").trim();if(!s)return;if(s.startsWith("/")){let c=s.slice(1);if(!c){console.log(i.red(`
580
580
  [Missing model name after /]`));return}let d=Be(t.provider,r);if(!d.includes(c)){console.log(i.red(`
581
581
  [Unknown model: ${c}]`)),console.log(i.dim(`Available models for ${t.provider}: ${d.join(", ")}
582
- `));return}Re({model:c}),n.switchProvider?.(t.provider,c),console.log(i.cyan(`
582
+ `));return}Ce({model:c}),n.switchProvider?.(t.provider,c),console.log(i.cyan(`
583
583
  [Switched to ${c}] (saved)`));return}if(s.includes("/")){let c=s.indexOf("/"),d=s.slice(0,c),u=s.slice(c+1);if(!u||!d){console.log(i.red(`
584
- [Invalid format. Use: /model <provider>/<model>]`));return}if(!Ne(d)){console.log(i.red(`
585
- [Unknown provider: ${d}]`)),console.log(i.dim(`Available: ${De().join(", ")}
584
+ [Invalid format. Use: /model <provider>/<model>]`));return}if(!De(d)){console.log(i.red(`
585
+ [Unknown provider: ${d}]`)),console.log(i.dim(`Available: ${je().join(", ")}
586
586
  `));return}let f=Be(d,r);if(!f.includes(u)){console.log(i.red(`
587
587
  [Unknown model: ${u}]`)),console.log(i.dim(`Available models for ${d}: ${f.join(", ")}
588
- `));return}Re({provider:d,model:u}),n.switchProvider?.(d,u),console.log(i.cyan(`
589
- [Switched to ${d}/${u}] (saved)`));return}let l=s;Ne(l)?(Re({provider:l,model:void 0}),n.switchProvider?.(l),console.log(i.cyan(`
588
+ `));return}Ce({provider:d,model:u}),n.switchProvider?.(d,u),console.log(i.cyan(`
589
+ [Switched to ${d}/${u}] (saved)`));return}let l=s;De(l)?(Ce({provider:l,model:void 0}),n.switchProvider?.(l),console.log(i.cyan(`
590
590
  [Switched to ${l}] (saved)`))):(console.log(i.red(`
591
- [Unknown provider: ${l}]`)),console.log(i.dim(`Available: ${De().join(", ")}
591
+ [Unknown provider: ${l}]`)),console.log(i.dim(`Available: ${je().join(", ")}
592
592
  `)))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
593
593
  /model - Switch LLM Provider/Model
594
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /model ")+"List all providers with models"),console.log(i.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(i.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(i.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /model ")+"# See available providers & models"),console.log(i.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(i.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(i.dim(" /model /claude-opus-4-6 ")+"# Switch to Opus within current provider"),console.log()},"detailedHelp")},{name:"provider",description:"Inspect provider semantics and policy constraints",usage:"/provider [<provider>[/<model>]]",handler:a(async(e,o,n,t)=>{let r=(e[0]??"").trim();if(r==="forget-capability"){let f=(e[1]??"").trim();if(!f){Gn(),console.log(i.dim(`
594
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /model ")+"List all providers with models"),console.log(i.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(i.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(i.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /model ")+"# See available providers & models"),console.log(i.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(i.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(i.dim(" /model /claude-opus-4-6 ")+"# Switch to Opus within current provider"),console.log()},"detailedHelp")},{name:"provider",description:"Inspect provider semantics and policy constraints",usage:"/provider [<provider>[/<model>]]",handler:a(async(e,o,n,t)=>{let r=(e[0]??"").trim();if(r==="forget-capability"){let f=(e[1]??"").trim();if(!f){Xn(),console.log(i.dim(`
595
595
  [Cleared all learned capability overrides]
596
- `));return}let p=f.indexOf("/"),k=p===-1?f:f.slice(0,p),b=p===-1?void 0:f.slice(p+1)||void 0;Gn(k,b),console.log(i.dim(`
596
+ `));return}let p=f.indexOf("/"),k=p===-1?f:f.slice(0,p),b=p===-1?void 0:f.slice(p+1)||void 0;Xn(k,b),console.log(i.dim(`
597
597
  [Cleared learned capability overrides for ${k}${b?`/${b}`:""}]
598
- `));return}if(r==="probe"){let f=en(t.provider,t.model).filter(k=>k!=="auto"&&k!=="off"),p=`${t.provider}/${t.model??"(default)"}`;console.log(i.dim(`
599
- [Probing ${p} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let k=await Vi({provider:t.provider,model:t.model,efforts:f,resolve:po,now:a(()=>new Date().toISOString(),"now")});for(let b of k){let A=b.status==="accepted"?i.green("\u2713"):b.status==="rejected"?i.red("\u2717"):i.yellow("!");console.log(i.dim(` ${A} ${b.effort}${b.error?` \u2014 ${b.error}`:""}`))}console.log(i.dim(` (rejections recorded; undo with /provider forget-capability)
598
+ `));return}if(r==="probe"){let f=nn(t.provider,t.model).filter(k=>k!=="auto"&&k!=="off"),p=`${t.provider}/${t.model??"(default)"}`;console.log(i.dim(`
599
+ [Probing ${p} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let k=await es({provider:t.provider,model:t.model,efforts:f,resolve:go,now:a(()=>new Date().toISOString(),"now")});for(let b of k){let A=b.status==="accepted"?i.green("\u2713"):b.status==="rejected"?i.red("\u2717"):i.yellow("!");console.log(i.dim(` ${A} ${b.effort}${b.error?` \u2014 ${b.error}`:""}`))}console.log(i.dim(` (rejections recorded; undo with /provider forget-capability)
600
600
  `))}catch(k){let b=k instanceof Error?k.message:String(k);console.log(i.red(`
601
601
  [Probe failed: ${b}]
602
- `))}return}let s=t.provider,l=t.model;if(r)if(r.includes("/")){let f=r.indexOf("/");s=r.slice(0,f).trim(),l=r.slice(f+1).trim()||void 0}else s=r,l=void 0;if(!Ne(s)){console.log(i.red(`
603
- [Unknown provider: ${s}]`)),console.log(i.dim(`Available: ${De().join(", ")}
604
- `));return}let c=yi(s,l);if(!c){console.log(i.red(`
605
- [Provider details unavailable: ${s}]`)),console.log();return}let d=Ai(s,l,t.reasoningMode);console.log(i.bold(`
602
+ `))}return}let s=t.provider,l=t.model;if(r)if(r.includes("/")){let f=r.indexOf("/");s=r.slice(0,f).trim(),l=r.slice(f+1).trim()||void 0}else s=r,l=void 0;if(!De(s)){console.log(i.red(`
603
+ [Unknown provider: ${s}]`)),console.log(i.dim(`Available: ${je().join(", ")}
604
+ `));return}let c=Si(s,l);if(!c){console.log(i.red(`
605
+ [Provider details unavailable: ${s}]`)),console.log();return}let d=Ti(s,l,t.reasoningMode);console.log(i.bold(`
606
606
  Provider Details:
607
- `)),console.log(i.dim(` Provider: ${i.cyan(c.provider)}${c.model?` / ${i.cyan(c.model)}`:""}`)),console.log(i.dim(` Source: ${Si(c.sourceKind)}`)),console.log(),console.log(i.bold("Capability Matrix:"));for(let f of xi(c))console.log(i.dim(` - ${f}`));console.log(i.dim(` - Session effort: ${La(t.effort)}`));let u=Pr(s,l);if(u.length>0&&console.log(i.dim(` - Learned unsupported: ${u.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(i.bold("Common Scenarios:"));for(let f of d){let p=f.decision.status==="block"?i.red:f.decision.status==="warn"?i.yellow:i.green;console.log(p(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(i.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
607
+ `)),console.log(i.dim(` Provider: ${i.cyan(c.provider)}${c.model?` / ${i.cyan(c.model)}`:""}`)),console.log(i.dim(` Source: ${Ei(c.sourceKind)}`)),console.log(),console.log(i.bold("Capability Matrix:"));for(let f of Ii(c))console.log(i.dim(` - ${f}`));console.log(i.dim(` - Session effort: ${Ua(t.effort)}`));let u=_r(s,l);if(u.length>0&&console.log(i.dim(` - Learned unsupported: ${u.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(i.bold("Common Scenarios:"));for(let f of d){let p=f.decision.status==="block"?i.red:f.decision.status==="warn"?i.yellow:i.green;console.log(p(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(i.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
608
608
  /provider - Inspect Provider Semantics
609
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /provider ")+"Inspect the current provider/model"),console.log(i.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(i.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(i.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(i.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(i.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(i.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or set native reasoning effort",usage:"/thinking [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await mr("thinking",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
609
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /provider ")+"Inspect the current provider/model"),console.log(i.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(i.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(i.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(i.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(i.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(i.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or set native reasoning effort",usage:"/thinking [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await wr("thinking",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
610
610
  /thinking - Set Native Reasoning Effort
611
- `)),console.log(i.bold("Usage:")),Ca("thinking"),console.log(i.dim(" /t ")+"Alias for /thinking"),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set native reasoning effort",usage:"/reasoning [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await mr("reasoning",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
611
+ `)),console.log(i.bold("Usage:")),_a("thinking"),console.log(i.dim(" /t ")+"Alias for /thinking"),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set native reasoning effort",usage:"/reasoning [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await wr("reasoning",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
612
612
  /reasoning - Set Native Reasoning Effort
613
- `)),console.log(i.bold("Usage:")),Ca("reasoning"),console.log(i.dim(" /reason ")+"Alias for /reasoning"),console.log()},"detailedHelp")},{name:"effort",description:"Show or set native reasoning effort",usage:"/effort [level]",handler:a(async(e,o,n,t)=>{await mr("effort",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
613
+ `)),console.log(i.bold("Usage:")),_a("reasoning"),console.log(i.dim(" /reason ")+"Alias for /reasoning"),console.log()},"detailedHelp")},{name:"effort",description:"Show or set native reasoning effort",usage:"/effort [level]",handler:a(async(e,o,n,t)=>{await wr("effort",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
614
614
  /effort - Set Native Reasoning Effort
615
615
  `)),console.log(i.bold("Usage:")),console.log(i.dim(" /effort ")+"Show current native reasoning effort"),console.log(i.dim(" /effort auto ")+"Clear the explicit effort override"),console.log(i.dim(" /effort off ")+"Disable reasoning effort"),console.log(i.dim(" /effort low ")+"Use low native reasoning effort"),console.log(i.dim(" /effort medium ")+"Use medium native reasoning effort"),console.log(i.dim(" /effort high ")+"Use high native reasoning effort"),console.log(i.dim(" /effort xhigh ")+"Use extra-high effort when the model supports it"),console.log(i.dim(" /effort max ")+"Use max effort when the model supports it"),console.log(i.dim(" /effort none ")+"Legacy alias for /effort off"),console.log(i.dim(`
616
616
  Run /effort to see the active model's supported values.`)),console.log()},"detailedHelp")},{name:"agent-mode",aliases:["am"],description:"Show or set agent mode",usage:"/agent-mode [ama|sa|toggle]",handler:a(async(e,o,n,t)=>{if(e.length===0){console.log(i.dim(`
617
617
  Agent mode: ${i.cyan(t.agentMode.toUpperCase())}`)),console.log(i.dim(`Usage: /agent-mode [ama|sa|toggle]
618
618
  `));return}let r=e[0]?.toLowerCase();if(r==="amaw"||r==="ama-workflow"){console.log(i.yellow(`
619
- [AMAW was retired in v0.7.72. Use AMA; Workflow execution now requires an explicit /workflow request.]`));return}let s=r==="toggle"?as(t.agentMode):r==="ama"||r==="sa"?r:void 0;if(!s){console.log(i.red(`
619
+ [AMAW was retired in v0.7.72. Use AMA; Workflow execution now requires an explicit /workflow request.]`));return}let s=r==="toggle"?fs(t.agentMode):r==="ama"||r==="sa"?r:void 0;if(!s){console.log(i.red(`
620
620
  [Invalid agent mode: ${e[0]}]`)),console.log(i.dim(`Usage: /agent-mode [ama|sa|toggle]
621
- `));return}let l=gf(s,n,t);ro(`Agent mode: ${s.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
621
+ `));return}let l=Sf(s,n,t);ro(`Agent mode: ${s.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
622
622
  /agent-mode - Adaptive Multi-Agent Mode Control
623
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /agent-mode ")+"Show current agent mode"),console.log(i.dim(" /agent-mode ama ")+"Adaptive multi-agent mode; workflows require an explicit /workflow request"),console.log(i.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(i.dim(" /agent-mode toggle ")+"Cycle AMA -> SA"),console.log(i.dim(" /am ")+"Alias for /agent-mode"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" AMA runs the adaptive multi-agent harness. Sub-agents are available when parallel")),console.log(i.dim(" work materially improves speed or quality. Workflows only run when explicitly")),console.log(i.dim(" requested with /workflow or by naming a Workflow.")),console.log(i.dim(" SA forces a single solo agent \u2014 no sub-agents and no workflows \u2014 to save tokens.")),console.log()},"detailedHelp")},{name:"auto",aliases:["a"],description:"Quick switch to auto mode",handler:a(async(e,o,n,t)=>{t.permissionMode="auto",n.setPermissionMode?.("auto"),pt("auto"),console.log(i.cyan(`
623
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /agent-mode ")+"Show current agent mode"),console.log(i.dim(" /agent-mode ama ")+"Adaptive multi-agent mode; workflows require an explicit /workflow request"),console.log(i.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(i.dim(" /agent-mode toggle ")+"Cycle AMA -> SA"),console.log(i.dim(" /am ")+"Alias for /agent-mode"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" AMA runs the adaptive multi-agent harness. Sub-agents are available when parallel")),console.log(i.dim(" work materially improves speed or quality. Workflows only run when explicitly")),console.log(i.dim(" requested with /workflow or by naming a Workflow.")),console.log(i.dim(" SA forces a single solo agent \u2014 no sub-agents and no workflows \u2014 to save tokens.")),console.log()},"detailedHelp")},{name:"auto",aliases:["a"],description:"Quick switch to auto mode",handler:a(async(e,o,n,t)=>{t.permissionMode="auto",n.setPermissionMode?.("auto"),wt("auto"),console.log(i.cyan(`
624
624
  [Switched to auto mode] (saved)`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
625
625
  /auto - Quick Switch to Auto Mode
626
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto ")+"Switch to auto mode"),console.log(i.dim(" /a ")+"Alias for /auto"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Equivalent to /mode auto.")),console.log(i.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(i.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(i.dim(" See also: /help mode, /auto-engine, /auto-denials")),console.log()},"detailedHelp")},{name:"skill",description:"Skill namespace - list, invoke, or review skill learning",usage:"/skill[:name] [pending|args]",handler:a(async(e,o)=>{if((e[0]??"").toLowerCase()==="pending"){await wn(gn(o),"skill");return}await xf(e,o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
626
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto ")+"Switch to auto mode"),console.log(i.dim(" /a ")+"Alias for /auto"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Equivalent to /mode auto.")),console.log(i.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(i.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(i.dim(" See also: /help mode, /auto-engine, /auto-denials")),console.log()},"detailedHelp")},{name:"skill",description:"Skill namespace - list, invoke, or review skill learning",usage:"/skill[:name] [pending|args]",handler:a(async(e,o)=>{if((e[0]??"").toLowerCase()==="pending"){await vn(yn(o),"skill");return}await Mf(e,o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
627
627
  /skill - Skill Namespace
628
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /skill ")+"List all available skills"),console.log(i.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(i.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(i.dim(" /skill reload ")+"Reload skills from disk"),console.log(i.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(i.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(i.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(i.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /skill ")+"# List all skills"),console.log(i.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(i.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(i.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(i.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let s=on().verifierLog===!0,l=n?"on":"off",c=s===n?"":` (env=${n?"on":"off"}, config=${s?"on":"off"})`;console.log(i.dim(`
628
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /skill ")+"List all available skills"),console.log(i.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(i.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(i.dim(" /skill reload ")+"Reload skills from disk"),console.log(i.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(i.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(i.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(i.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /skill ")+"# List all skills"),console.log(i.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(i.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(i.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(i.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let s=tn().verifierLog===!0,l=n?"on":"off",c=s===n?"":` (env=${n?"on":"off"}, config=${s?"on":"off"})`;console.log(i.dim(`
629
629
  Sidecar Verifier log: ${i.cyan(l)}${c}`)),console.log(i.dim(" When on, a one-line summary persists per verifier call:\n `[Sidecar Verifier] {verdict} \xB7 {provider}/{model} \xB7 {ms}ms \xB7 {trace}`")),console.log(i.dim(`Usage: /verifier-log [on|off]
630
630
  `));return}let t;if(o==="on"||o==="true"||o==="1")t=!0;else if(o==="off"||o==="false"||o==="0")t=!1;else{console.log(i.red(`
631
631
  [Invalid value: ${e[0]}]`)),console.log(i.dim(`Usage: /verifier-log [on|off]
632
- `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=No({verifierLog:t});ro(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
632
+ `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=jo({verifierLog:t});ro(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
633
633
  /verifier-log - Sidecar Verifier Log Toggle
634
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /verifier-log ")+"Show current state"),console.log(i.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(i.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(i.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(i.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(i.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(i.bold("Equivalent env var:")),console.log(i.dim(" KODAX_VERIFIER_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},{name:"stall-log",description:"Toggle Stall Sidecar log line (off by default)",usage:"/stall-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_STALL_LOG==="1";if(!o){let s=on().stallLog===!0,l=n?"on":"off",c=s===n?"":` (env=${n?"on":"off"}, config=${s?"on":"off"})`;console.log(i.dim(`
634
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /verifier-log ")+"Show current state"),console.log(i.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(i.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(i.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(i.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(i.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(i.bold("Equivalent env var:")),console.log(i.dim(" KODAX_VERIFIER_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},{name:"stall-log",description:"Toggle Stall Sidecar log line (off by default)",usage:"/stall-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_STALL_LOG==="1";if(!o){let s=tn().stallLog===!0,l=n?"on":"off",c=s===n?"":` (env=${n?"on":"off"}, config=${s?"on":"off"})`;console.log(i.dim(`
635
635
  Stall Sidecar log: ${i.cyan(l)}${c}`)),console.log(i.dim(" When on, a one-line summary persists per L2 stall verdict:\n `[Stall Sidecar] isStuck={true|false} \xB7 {provider}/{model} \xB7 {ms}ms \xB7 {trace}`")),console.log(i.dim(`Usage: /stall-log [on|off]
636
636
  `));return}let t;if(o==="on"||o==="true"||o==="1")t=!0;else if(o==="off"||o==="false"||o==="0")t=!1;else{console.log(i.red(`
637
637
  [Invalid value: ${e[0]}]`)),console.log(i.dim(`Usage: /stall-log [on|off]
638
- `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=No({stallLog:t});ro(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
638
+ `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=jo({stallLog:t});ro(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
639
639
  /stall-log - Stall Sidecar Log Toggle
640
- `)),console.log(i.bold("Usage:")),console.log(i.dim(" /stall-log ")+"Show current state"),console.log(i.dim(" /stall-log on ")+"Enable + persist to config"),console.log(i.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(i.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(i.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(i.dim(" a one-line summary:")),console.log(i.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(i.bold("Equivalent env var:")),console.log(i.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},bt,$t,xt,Fs,ma,Qt,er,ga,nr],af={General:["help","copy","exit","clear","compact","reload","extensions","status","agents"],Permission:["mode","auto"],Session:["new","recover","save","load","sessions","history","delete"],Settings:["model","provider","thinking","reasoning","effort","agent-mode","plan","repo-intel"],Skills:["skill","learn"]};function lf(e){let o=Do();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(lf,"getCommandsForCategory");function _a(e){return e!=="off"}a(_a,"reasoningModeToLegacyThinking");function La(e){return e==="none"?"off":e??"auto"}a(La,"formatReasoningEffortDisplay");function Wa(e){return en(e.provider,e.model).map(o=>o==="off"?"none":o)}a(Wa,"getCanonicalReasoningEffortOptions");function cf(e,o){return`Usage: /${e} ${Wa(o).join("|")}|<provider-value>`}a(cf,"formatReasoningEffortUsage");function Ra(e){let o=$i(e);return ki({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Ra,"formatCurrentReasoningEffortStatus");function df(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(df,"normalizeRepoIntelPublicMode");function uf(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(uf,"resolveToggleFlag");function No(e){try{return Re(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(No,"persistUserConfig");function ro(e,o){if(o.saved){console.log(i.cyan(`
640
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /stall-log ")+"Show current state"),console.log(i.dim(" /stall-log on ")+"Enable + persist to config"),console.log(i.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(i.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(i.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(i.dim(" a one-line summary:")),console.log(i.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(i.bold("Equivalent env var:")),console.log(i.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},xt,At,Ct,zs,va,nr,tr,ba,ir],gf={General:["help","copy","exit","clear","compact","reload","extensions","status","agents"],Permission:["mode","auto"],Session:["new","recover","save","load","sessions","history","delete"],Settings:["model","provider","thinking","reasoning","effort","agent-mode","plan","repo-intel"],Skills:["skill","learn"]};function wf(e){let o=so();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(wf,"getCommandsForCategory");function ja(e){return e!=="off"}a(ja,"reasoningModeToLegacyThinking");function Ua(e){return e==="none"?"off":e??"auto"}a(Ua,"formatReasoningEffortDisplay");function Fa(e){return nn(e.provider,e.model).map(o=>o==="off"?"none":o)}a(Fa,"getCanonicalReasoningEffortOptions");function hf(e,o){return`Usage: /${e} ${Fa(o).join("|")}|<provider-value>`}a(hf,"formatReasoningEffortUsage");function Ma(e){let o=Ci(e);return Ai({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Ma,"formatCurrentReasoningEffortStatus");function yf(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(yf,"normalizeRepoIntelPublicMode");function vf(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(vf,"resolveToggleFlag");function jo(e){try{return Ce(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(jo,"persistUserConfig");function ro(e,o){if(o.saved){console.log(i.cyan(`
641
641
  [${e}] (saved)`));return}console.log(i.yellow(`
642
- [${e}]`)),console.log(i.red(`[Config save failed: ${o.error.message}]`))}a(ro,"printPersistedCommandStatus");var ff={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function mr(e,o,n,t){let r=cf(e,t);if(o.length===0){let f=Ra(t);console.log(i.dim(`
643
- Reasoning effort: ${i.cyan(f)}`)),console.log(i.dim(`Compatibility: ${i.cyan(t.reasoningMode)}`)),console.log(i.dim(`Available: ${Wa(t).join(", ")}`)),console.log(i.dim(`${r}
642
+ [${e}]`)),console.log(i.red(`[Config save failed: ${o.error.message}]`))}a(ro,"printPersistedCommandStatus");var kf={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function wr(e,o,n,t){let r=hf(e,t);if(o.length===0){let f=Ma(t);console.log(i.dim(`
643
+ Reasoning effort: ${i.cyan(f)}`)),console.log(i.dim(`Compatibility: ${i.cyan(t.reasoningMode)}`)),console.log(i.dim(`Available: ${Fa(t).join(", ")}`)),console.log(i.dim(`${r}
644
644
  `));return}if(o.length>1){console.log(i.red(`
645
645
  [Reasoning effort accepts exactly one value]`)),console.log(i.dim(`${r}
646
- `));return}let s=o[0].toLowerCase(),l;try{l=Er(ff[s]??s)}catch(f){let p=f instanceof Error?f.message:String(f);console.log(i.red(`
646
+ `));return}let s=o[0].toLowerCase(),l;try{l=Pr(kf[s]??s)}catch(f){let p=f instanceof Error?f.message:String(f);console.log(i.red(`
647
647
  [Invalid reasoning effort: ${p}]`)),console.log(i.dim(`${r}
648
- `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l;if(c==="none"&&!en(t.provider,t.model).includes("off")){let f=t.model?`${t.provider}/${t.model}`:t.provider;console.log(i.red(`
648
+ `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l;if(c==="none"&&!nn(t.provider,t.model).includes("off")){let f=t.model?`${t.provider}/${t.model}`:t.provider;console.log(i.red(`
649
649
  [${f} does not support disabling reasoning]`)),console.log(i.dim(`${r}
650
- `));return}let d=mf(c,t),u=pf(c,n,t);ro(`Reasoning effort: ${Ra(d)}`,u)}a(mr,"handleReasoningEffortCommand");function Ca(e){console.log(i.dim(` /${e} `)+"Show current native reasoning effort"),console.log(i.dim(` /${e} none `)+"Disable reasoning when supported"),console.log(i.dim(` /${e} auto `)+"Clear the explicit effort override"),console.log(i.dim(` /${e} low `)+"Use low native reasoning effort"),console.log(i.dim(` /${e} medium `)+"Use medium native reasoning effort"),console.log(i.dim(` /${e} high `)+"Use high native reasoning effort"),console.log(i.dim(` /${e} xhigh `)+"Use extra-high native reasoning effort"),console.log(i.dim(` /${e} max `)+"Use maximum native reasoning effort")}a(Ca,"printReasoningEffortHelp");function Oa(e){return e==="none"?"off":"auto"}a(Oa,"resolveReasoningModeAfterEffort");function mf(e,o){let n=Oa(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:_a(n)}}a(mf,"resolveConfigAfterReasoningEffort");function pf(e,o,n){let t=Oa(e),r=_a(t),s=No({effort:e,reasoningMode:t,thinking:r});return o.setEffort?o.setEffort(e):(n.effort=e,n.effortOverride=e!==void 0),o.setReasoningMode?o.setReasoningMode(t):(n.reasoningMode=t,n.thinking=r),s}a(pf,"applyReasoningEffort");function gf(e,o,n){let t=No({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(gf,"applyAgentMode");function Ea(e,o,n,t){let r=No(o);return n.setRepoIntelligenceRuntime?n.setRepoIntelligenceRuntime(e):(e.mode!==void 0&&(t.repoIntelligenceMode=e.mode),e.trace!==void 0&&(t.repoIntelligenceTrace=e.trace)),r}a(Ea,"applyRepoIntelligenceRuntimeConfig");function wf(e){let o=e.configuredMode===e.requestedMode?e.configuredMode:`${e.configuredMode} -> ${e.requestedMode}`,n=e.fallbackToLight?", fallback=light":"";return`${o} => ${e.effectiveEngine} (${e.status}${n})`}a(wf,"formatRepoIntelligenceSummary");function gr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(gr,"getRepoIntelInspectionWorkspaceRoot");function hf(e){return e.status}a(hf,"formatRepoIntelStatusLabel");function yf(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(yf,"formatRepoIntelActiveEngine");function Ia(e){console.log(i.bold(`
650
+ `));return}let d=bf(c,t),u=$f(c,n,t);ro(`Reasoning effort: ${Ma(d)}`,u)}a(wr,"handleReasoningEffortCommand");function _a(e){console.log(i.dim(` /${e} `)+"Show current native reasoning effort"),console.log(i.dim(` /${e} none `)+"Disable reasoning when supported"),console.log(i.dim(` /${e} auto `)+"Clear the explicit effort override"),console.log(i.dim(` /${e} low `)+"Use low native reasoning effort"),console.log(i.dim(` /${e} medium `)+"Use medium native reasoning effort"),console.log(i.dim(` /${e} high `)+"Use high native reasoning effort"),console.log(i.dim(` /${e} xhigh `)+"Use extra-high native reasoning effort"),console.log(i.dim(` /${e} max `)+"Use maximum native reasoning effort")}a(_a,"printReasoningEffortHelp");function Ha(e){return e==="none"?"off":"auto"}a(Ha,"resolveReasoningModeAfterEffort");function bf(e,o){let n=Ha(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:ja(n)}}a(bf,"resolveConfigAfterReasoningEffort");function $f(e,o,n){let t=Ha(e),r=ja(t),s=jo({effort:e,reasoningMode:t,thinking:r});return o.setEffort?o.setEffort(e):(n.effort=e,n.effortOverride=e!==void 0),o.setReasoningMode?o.setReasoningMode(t):(n.reasoningMode=t,n.thinking=r),s}a($f,"applyReasoningEffort");function Sf(e,o,n){let t=jo({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(Sf,"applyAgentMode");function La(e,o,n,t){let r=jo(o);return n.setRepoIntelligenceRuntime?n.setRepoIntelligenceRuntime(e):(e.mode!==void 0&&(t.repoIntelligenceMode=e.mode),e.trace!==void 0&&(t.repoIntelligenceTrace=e.trace)),r}a(La,"applyRepoIntelligenceRuntimeConfig");function xf(e){let o=e.configuredMode===e.requestedMode?e.configuredMode:`${e.configuredMode} -> ${e.requestedMode}`,n=e.fallbackToLight?", fallback=light":"";return`${o} => ${e.effectiveEngine} (${e.status}${n})`}a(xf,"formatRepoIntelligenceSummary");function yr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(yr,"getRepoIntelInspectionWorkspaceRoot");function Af(e){return e.status}a(Af,"formatRepoIntelStatusLabel");function Rf(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(Rf,"formatRepoIntelActiveEngine");function Wa(e){console.log(i.bold(`
651
651
  Repo Intelligence:
652
- `)),console.log(i.dim(` Mode: ${i.cyan(e.configuredMode)}`)),console.log(i.dim(` Engine: ${i.cyan(yf(e))}`)),console.log(i.dim(` Status: ${i.cyan(hf(e))}`)),console.log(i.dim(` Trace: ${i.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(i.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(i.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(i.yellow(" Fallback: light engine is currently active")),e.error&&console.log(i.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(i.yellow(` Warning: ${o}`));console.log()}a(Ia,"printRepoIntelStatus");function Pa(e,o){if(o.length!==0){console.log(i.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${i.cyan(`/${n.name}`)}${i.dim(t)} ${n.description}`)}console.log()}}a(Pa,"printCommandSection");function vf(){console.log(i.bold(`
652
+ `)),console.log(i.dim(` Mode: ${i.cyan(e.configuredMode)}`)),console.log(i.dim(` Engine: ${i.cyan(Rf(e))}`)),console.log(i.dim(` Status: ${i.cyan(Af(e))}`)),console.log(i.dim(` Trace: ${i.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(i.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(i.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(i.yellow(" Fallback: light engine is currently active")),e.error&&console.log(i.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(i.yellow(` Warning: ${o}`));console.log()}a(Wa,"printRepoIntelStatus");function Oa(e,o){if(o.length!==0){console.log(i.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${i.cyan(`/${n.name}`)}${i.dim(t)} ${n.description}`)}console.log()}}a(Oa,"printCommandSection");function Cf(){console.log(i.bold(`
653
653
  Available Commands:
654
- `));let e=Do(),o=new Set;for(let[t,r]of Object.entries(af)){let s=lf(r);if(s.length!==0){for(let l of s)o.add(l.name.toLowerCase());Pa(t,s)}}let n=new Map;for(let t of e.getAll()){if(t.userInvocable===!1||o.has(t.name.toLowerCase()))continue;let r=t.source==="extension"?"Extensions":t.source==="skill"?"Skill Commands":t.source==="prompt"?"Prompt Commands":"Other Commands",s=n.get(r)??[];s.push(t),n.set(r,s)}for(let t of Rf()){if(o.has(t.name.toLowerCase()))continue;let r=n.get("Extensions")??[];r.push({name:t.name,aliases:t.aliases,description:t.description}),n.set("Extensions",r)}for(let t of["Extensions","Skill Commands","Prompt Commands","Other Commands"])Pa(t,n.get(t)??[]);console.log(i.dim("Special syntax:")),console.log(` ${i.cyan("@path")} Attach image to context`),console.log(` ${i.cyan("!command")} Execute shell command`),console.log(),console.log(i.dim("Skills:")),console.log(` ${i.cyan("/skill")} List all available skills`),console.log(` ${i.cyan("/<skill-name>")} Invoke a skill when no command has that name`),console.log(` ${i.cyan("/skill:<name>")} Compatibility form (e.g., /skill:code-review)`),console.log(` ${i.cyan("/skill pending")} Review pending skill learning suggestions`),console.log(),console.log(i.dim(`Tip: ${i.cyan("/<command> help")} shows command-specific help.`)),console.log()}a(vf,"printHelp");function kf(e){let o=zr({topic:e});if(console.log(`
654
+ `));let e=so(),o=new Set;for(let[t,r]of Object.entries(gf)){let s=wf(r);if(s.length!==0){for(let l of s)o.add(l.name.toLowerCase());Oa(t,s)}}let n=new Map;for(let t of e.getAll()){if(t.userInvocable===!1||o.has(t.name.toLowerCase()))continue;let r=t.source==="extension"?"Extensions":t.source==="skill"?"Skill Commands":t.source==="prompt"?"Prompt Commands":"Other Commands",s=n.get(r)??[];s.push(t),n.set(r,s)}for(let t of Lf()){if(o.has(t.name.toLowerCase()))continue;let r=n.get("Extensions")??[];r.push({name:t.name,aliases:t.aliases,description:t.description}),n.set("Extensions",r)}for(let t of["Extensions","Skill Commands","Prompt Commands","Other Commands"])Oa(t,n.get(t)??[]);console.log(i.dim("Special syntax:")),console.log(` ${i.cyan("@path")} Attach image to context`),console.log(` ${i.cyan("!command")} Execute shell command`),console.log(),console.log(i.dim("Skills:")),console.log(` ${i.cyan("/skill")} List all available skills`),console.log(` ${i.cyan("/<skill-name>")} Invoke a skill when no command has that name`),console.log(` ${i.cyan("/skill:<name>")} Compatibility form (e.g., /skill:code-review)`),console.log(` ${i.cyan("/skill pending")} Review pending skill learning suggestions`),console.log(),console.log(i.dim(`Tip: ${i.cyan("/<command> help")} shows command-specific help.`)),console.log()}a(Cf,"printHelp");function Ef(e){let o=Qr({topic:e});if(console.log(`
655
655
  ${i.cyan(o.title)}`),console.log(o.content),o.topics.length>0){console.log();for(let n of o.topics)console.log(`- ${n.id}: ${n.summary}`)}o.topics.length===0&&o.nextTopics.length>0&&console.log(i.dim(`
656
- Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(kf,"printManualTopic");function wr(e,o=[]){ue.size===0&&Wn();let n=ue.get(e.toLowerCase());if(!n){let t=On(e);if(!t){console.log(i.yellow(`
656
+ Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(Ef,"printManualTopic");function vr(e,o=[]){me.size===0&&Dn();let n=me.get(e.toLowerCase());if(!n){let t=Uo(e);if(!t){console.log(i.yellow(`
657
657
  [Unknown command: /${e}. Type /help for available commands]`));return}console.log(i.cyan(`
658
658
  /${t.name}`)),t.aliases?.length&&console.log(i.dim(`Aliases: ${t.aliases.join(", ")}`)),console.log(i.dim(`
659
659
  ${t.description}`)),console.log(i.dim(`
660
- Usage: ${Cf(t)}`)),console.log();return}n.detailedHelp?n.detailedHelp(o):(console.log(i.cyan(`
660
+ Usage: ${Wf(t)}`)),console.log();return}n.detailedHelp?n.detailedHelp(o):(console.log(i.cyan(`
661
661
  /${n.name}`)),n.aliases?.length&&console.log(i.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(i.dim(`
662
662
  ${n.description}`)),n.usage&&console.log(i.dim(`
663
- Usage: ${n.usage}`)),console.log())}a(wr,"printDetailedHelp");async function bf(e,o,n=[],t){let r=n[0]?.toLowerCase(),s=e.contextTokenSnapshot?.currentTokens??Ho(e.messages),l=e.contextTokenSnapshot?.source??"estimate",c=hi(o.provider),d=vi(o.provider,o.model,o.reasoningMode);if(console.log(i.bold(`
663
+ Usage: ${n.usage}`)),console.log())}a(vr,"printDetailedHelp");async function If(e,o,n=[],t){let r=n[0]?.toLowerCase(),s=e.contextTokenSnapshot?.currentTokens??Bo(e.messages),l=e.contextTokenSnapshot?.source??"estimate",c=$i(o.provider),d=xi(o.provider,o.model,o.reasoningMode);if(console.log(i.bold(`
664
664
  Session Status:
665
- `)),console.log(i.dim(` Provider: ${i.cyan(o.provider)}${o.model?` / ${i.cyan(o.model)}`:""}`)),console.log(i.dim(` Permission: ${i.cyan(o.permissionMode)}`)),console.log(i.dim(` Reasoning: ${i.cyan(o.reasoningMode)}`)),console.log(i.dim(` Effort: ${i.cyan(La(o.effort))}`)),console.log(i.dim(` Agent Mode: ${i.cyan(o.agentMode.toUpperCase())}`)),c){let f=nt(c),p=c.transport==="cli-bridge"?i.yellow(f):i.cyan(f);console.log(i.dim(` Provider Cap: ${p}`))}if(d&&d.status!=="allow"){let f=d.status==="block"?i.red:i.yellow;console.log(i.dim(` Provider Policy: ${f(d.summary)}`))}console.log(i.dim(` Session ID: ${e.sessionId}`)),console.log(i.dim(` Messages: ${e.messages.length}`)),console.log(i.dim(` Tokens: ~${s} (${l})`));let u=await zo({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:gr(e)});console.log(i.dim(` Repo Intel: ${i.cyan(wf(u))}`)),e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace: ${i.cyan(Ct(e.runtimeInfo))}`)):e.gitRoot&&console.log(i.dim(` Workspace: ${i.cyan(e.gitRoot)}`)),(r==="workspace"||r==="worktree"||r==="runtime")&&(e.runtimeInfo?.canonicalRepoRoot&&console.log(i.dim(` Canonical: ${e.runtimeInfo.canonicalRepoRoot}`)),e.runtimeInfo?.executionCwd&&console.log(i.dim(` Exec CWD: ${e.runtimeInfo.executionCwd}`)),e.runtimeInfo?.workspaceKind&&console.log(i.dim(` Kind: ${e.runtimeInfo.workspaceKind}`))),r==="runtime"&&await Sf(t),await $f(t),console.log(i.dim(` Created: ${e.createdAt}`)),console.log(i.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(bf,"printStatus");async function $f(e){if(e?.getLearningSummary)try{console.log(i.dim(` Learning: ${wt(await e.getLearningSummary())}`))}catch(o){console.log(i.dim(` Learning: unavailable (${o instanceof Error?o.message:String(o)})`))}}a($f,"printLearningSurfaceStatus");async function Sf(e){if(!e?.getRuntimeStatus){console.log(i.dim(" SDK Runtime: unavailable (host did not provide runtime status)"));return}let o;try{o=await e.getRuntimeStatus()}catch(t){console.log(i.dim(` SDK Runtime: unavailable (${t instanceof Error?t.message:String(t)})`));return}if(!o){console.log(i.dim(" SDK Runtime: unavailable"));return}console.log(i.dim(` SDK Runtime: ${i.cyan(o.mode)} profile=${i.cyan(o.profile)}`)),console.log(i.dim(` Runtime ID: ${o.runtimeId}`)),o.health&&console.log(i.dim(` Health: ${o.health}`)),o.endpoint&&console.log(i.dim(` Endpoint: ${o.endpoint}`)),o.startedAt&&console.log(i.dim(` Runtime Up: ${o.startedAt}`));let n=[to("sessions",o.sessions),to("runs",o.runs),to("active",o.activeRuns),to("queued",o.queuedRuns),to("pending permissions",o.pendingPermissions),to("workflows",o.workflows)].filter(t=>t!==void 0);n.length>0&&console.log(i.dim(` Runtime Ctrs: ${n.join(" ")}`))}a(Sf,"printRuntimeSurfaceStatus");function to(e,o){return o===void 0?void 0:`${e}=${o}`}a(to,"formatRuntimeCount");async function xf(e,o){let n=Se(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await Ma(o.gitRoot);console.log(i.green(`
666
- Skills reloaded: ${r} skill(s)`)),console.log(i.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await je(o.gitRoot),Af(n.listUserInvocable())}a(xf,"handleSkillNamespaceCommand");function Af(e){if(console.log(i.bold(`
665
+ `)),console.log(i.dim(` Provider: ${i.cyan(o.provider)}${o.model?` / ${i.cyan(o.model)}`:""}`)),console.log(i.dim(` Permission: ${i.cyan(o.permissionMode)}`)),console.log(i.dim(` Reasoning: ${i.cyan(o.reasoningMode)}`)),console.log(i.dim(` Effort: ${i.cyan(Ua(o.effort))}`)),console.log(i.dim(` Agent Mode: ${i.cyan(o.agentMode.toUpperCase())}`)),c){let f=rt(c),p=c.transport==="cli-bridge"?i.yellow(f):i.cyan(f);console.log(i.dim(` Provider Cap: ${p}`))}if(d&&d.status!=="allow"){let f=d.status==="block"?i.red:i.yellow;console.log(i.dim(` Provider Policy: ${f(d.summary)}`))}console.log(i.dim(` Session ID: ${e.sessionId}`)),console.log(i.dim(` Messages: ${e.messages.length}`)),console.log(i.dim(` Tokens: ~${s} (${l})`));let u=await Vo({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:yr(e)});console.log(i.dim(` Repo Intel: ${i.cyan(xf(u))}`)),e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace: ${i.cyan(Tt(e.runtimeInfo))}`)):e.gitRoot&&console.log(i.dim(` Workspace: ${i.cyan(e.gitRoot)}`)),(r==="workspace"||r==="worktree"||r==="runtime")&&(e.runtimeInfo?.canonicalRepoRoot&&console.log(i.dim(` Canonical: ${e.runtimeInfo.canonicalRepoRoot}`)),e.runtimeInfo?.executionCwd&&console.log(i.dim(` Exec CWD: ${e.runtimeInfo.executionCwd}`)),e.runtimeInfo?.workspaceKind&&console.log(i.dim(` Kind: ${e.runtimeInfo.workspaceKind}`))),r==="runtime"&&await Pf(t),await Tf(t),console.log(i.dim(` Created: ${e.createdAt}`)),console.log(i.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(If,"printStatus");async function Tf(e){if(e?.getLearningSummary)try{console.log(i.dim(` Learning: ${vt(await e.getLearningSummary())}`))}catch(o){console.log(i.dim(` Learning: unavailable (${o instanceof Error?o.message:String(o)})`))}}a(Tf,"printLearningSurfaceStatus");async function Pf(e){if(!e?.getRuntimeStatus){console.log(i.dim(" SDK Runtime: unavailable (host did not provide runtime status)"));return}let o;try{o=await e.getRuntimeStatus()}catch(t){console.log(i.dim(` SDK Runtime: unavailable (${t instanceof Error?t.message:String(t)})`));return}if(!o){console.log(i.dim(" SDK Runtime: unavailable"));return}console.log(i.dim(` SDK Runtime: ${i.cyan(o.mode)} profile=${i.cyan(o.profile)}`)),console.log(i.dim(` Runtime ID: ${o.runtimeId}`)),o.health&&console.log(i.dim(` Health: ${o.health}`)),o.endpoint&&console.log(i.dim(` Endpoint: ${o.endpoint}`)),o.startedAt&&console.log(i.dim(` Runtime Up: ${o.startedAt}`));let n=[to("sessions",o.sessions),to("runs",o.runs),to("active",o.activeRuns),to("queued",o.queuedRuns),to("pending permissions",o.pendingPermissions),to("workflows",o.workflows)].filter(t=>t!==void 0);n.length>0&&console.log(i.dim(` Runtime Ctrs: ${n.join(" ")}`))}a(Pf,"printRuntimeSurfaceStatus");function to(e,o){return o===void 0?void 0:`${e}=${o}`}a(to,"formatRuntimeCount");async function Mf(e,o){let n=V(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await Da(o.gitRoot);console.log(i.green(`
666
+ Skills reloaded: ${r} skill(s)`)),console.log(i.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await oe(o.gitRoot),_f(n.listUserInvocable())}a(Mf,"handleSkillNamespaceCommand");function _f(e){if(console.log(i.bold(`
667
667
  Available Skills:
668
668
  `)),e.length===0){console.log(i.dim(" No skills found.")),console.log(i.dim(`
669
- Skills can be placed in:`)),console.log(i.dim(" - .kodax/skills/")),console.log(i.dim(" - ~/.kodax/skills/")),console.log(i.dim(" - ~/.agents/skills/"));return}let o=Do(),n=e.map(r=>{let s=o.get(r.name)!==void 0||On(r.name)!==void 0;return{skill:r,invocation:s?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:s}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:s}=r,l=r.invocation.padEnd(t),c=s.argumentHint?` ${s.argumentHint}`:"",d=s.source==="builtin"?" [builtin]":s.source==="user"?" [user]":s.source==="plugin"?" [plugin]":"",u=r.commandNameTaken?" [command name exists]":"",f=s.description.length>50?s.description.slice(0,50)+"...":s.description;console.log(` ${i.cyan(l)}${i.dim(c)}${i.dim(d)}${i.dim(u)} ${i.dim(f)}`)}console.log(),console.log(i.dim(`Total: ${e.length} skills`)),console.log(i.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(i.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(Af,"printSkillsListPiMonoStyle");var ue=new we;function Wn(e){ue.size>0||ur(ue,e)}a(Wn,"initCommandRegistry");function Do(e){return Wn(e),ue}a(Do,"getCommandRegistry");function Rf(){return se()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(Rf,"getActiveExtensionCommands");function On(e){let o=se(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(s=>s.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(On,"getActiveExtensionCommand");function Cf(e){return e.usage??`/${e.name}`}a(Cf,"formatExtensionCommandUsage");function Ef(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(Ef,"formatExtensionDiagnosticValue");function If(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${Ef(t)}`);return o.length>0?o.join(" | "):void 0}a(If,"formatExtensionDiagnosticMetadata");function io(e){let o=e.getDiagnostics;if(typeof o=="function")return o.call(e);let n=e.getDefaults,t=typeof n=="function"?n.call(e):void 0;return{loadedExtensions:[],capabilityProviders:e.listCapabilityProviders().map(r=>({id:r.id,kinds:[...r.kinds],source:{kind:"extension",id:`extension:${r.id}`,label:r.id,path:"(runtime)"}})),commands:e.listCommands().map(r=>({name:r.name,aliases:r.aliases,description:r.description,usage:r.usage,metadata:r.metadata,source:{kind:"extension",id:`extension-command:${r.name}`,label:r.name,path:"(runtime)"}})),tools:[],hooks:[],failures:[],defaults:{activeTools:t?.activeTools,modelSelection:t?.modelSelection??{},thinkingLevel:t?.thinkingLevel}}}a(io,"getExtensionRuntimeDiagnostics");function Pf(e,o){if(o.invocation)return{prompt:o.invocation.prompt,source:"extension",displayName:o.invocation.displayName??`/${e.name}`,disableModelInvocation:o.invocation.disableModelInvocation,allowedTools:o.invocation.allowedTools,context:o.invocation.context,model:o.invocation.model}}a(Pf,"toExtensionInvocationRequest");function Tf(e){return e.map(o=>{if(typeof o=="string")return o;if(o instanceof Error)return o.stack??o.message;try{return JSON.stringify(o)}catch{return String(o)}}).join(" ")}a(Tf,"formatDiagnosticParts");function Mn(e,o,n){G({source:e,level:o,message:Tf(n)})}a(Mn,"emitCommandDiagnostic");async function Mf(e,o,n){let t=se();if(!t)return console.log(i.yellow(`
670
- [Extension runtime is not active for /${e.name}]`)),!1;let r=await e.handler(o,{sessionId:n.sessionId,gitRoot:n.gitRoot,workingDirectory:n.runtimeInfo?.executionCwd??n.gitRoot??process.cwd(),reloadExtensions:a(()=>t.reloadExtensions(),"reloadExtensions"),getDiagnostics:a(()=>io(t),"getDiagnostics"),logger:{debug:a((...l)=>Mn(`repl:extension-command:${e.name}`,"debug",l),"debug"),info:a((...l)=>Mn(`repl:extension-command:${e.name}`,"info",l),"info"),warn:a((...l)=>Mn(`repl:extension-command:${e.name}`,"warn",l),"warn"),error:a((...l)=>Mn(`repl:extension-command:${e.name}`,"error",l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let s=Pf(e,r);return s?{invocation:s}:!0}a(Mf,"executeExtensionCommand");function yv(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),s=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:s,skillInvocation:{name:c}}:{command:"skill",args:s}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),s=c?[c,...s]:s}return{command:r,args:s}}a(yv,"parseCommand");function Ta(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Ta,"isCommandHelpRequest");async function vv(e,o,n,t){if(ue.size===0&&Wn(o.gitRoot),e.skillInvocation)return await pr({command:e.skillInvocation.name,args:e.args},o);let r=ue.get(e.command);if(r){if(r.userInvocable===!1)return console.log(i.yellow(`
671
- [Command /${r.name} is not user-invocable]`)),!1;if(Ta(e.args))return wr(e.command,e.args.slice(1)),!0;try{let d=await r.handler(e.args,o,n,t);return d&&typeof d=="object"?d:!0}catch(d){return console.log(i.red(`
672
- [Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let s=On(e.command);if(s){if(Ta(e.args))return wr(e.command),!0;try{return await Mf(s,e.args,o)}catch(d){return console.log(i.red(`
673
- [Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await _f(e,o);if(l)return await pr({command:l.skill.name,args:l.args},o);let c=await Na(e.command,o);return c?await pr({command:c.name,args:e.args},o):(console.log(i.yellow(`
674
- [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(vv,"executeCommand");async function _f(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Na(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(_f,"resolveNamespacedDirectSkillCommand");async function Na(e,o){let n=Se(o.gitRoot);n.size===0&&await je(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(Na,"resolveDirectSkillCommand");async function pr(e,o){let n=Se(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await je(o.gitRoot);try{let s=n.get(t);if(!s)return console.log(i.red(`
675
- [Skill not found: ${t}]`)),!1;if(!s.userInvocable)return console.log(i.yellow(`
676
- [Skill "${t}" is not user-invocable]`)),!1;console.log(i.cyan(`
677
- [Invoking skill: ${t}]`)),s.argumentHint&&console.log(i.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{},executeDynamicContext:o.skillDynamicContext?.execute,disableDynamicContext:o.skillDynamicContext?.disable},d=await jr(l,r,c);return console.log(i.green(`Skill activated: ${t}`)),console.log(i.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:{prompt:d.content,source:"skill",displayName:t,path:l.skillFilePath,disableModelInvocation:d.disableModelInvocation,userInvocable:l.userInvocable,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hooks:l.hooks,skillInvocation:{name:t,path:l.skillFilePath,description:l.description,arguments:r||void 0,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hookEvents:l.hooks?Object.entries(l.hooks).filter(([,u])=>Array.isArray(u)&&u.length>0).map(([u])=>u):void 0,expandedContent:d.content}}}}catch(s){return console.log(i.red(`
678
- [Error invoking skill: ${s instanceof Error?s.message:String(s)}]`)),!1}}a(pr,"executeSkillCommand");var Nn=class{static{a(this,"SkillCompleter")}gitRoot;constructor(o){this.gitRoot=o}canComplete(o,n){return this.parseTrigger(o.slice(0,n))!==void 0}async getCompletions(o,n){let t=this.parseTrigger(o.slice(0,n));if(!t)return[];let r=t.partial.toLowerCase();return(await this.getSkills()).filter(l=>{let c=l.name.toLowerCase();return c.includes(r)||this.fuzzyIncludes(r,c)}).map(l=>({text:`${t.invocationPrefix}${l.name}`,display:l.name,description:this.truncateDescription(l.description),type:"skill"})).sort((l,c)=>{let d=l.display.toLowerCase().startsWith(r),u=c.display.toLowerCase().startsWith(r);return d&&!u?-1:!d&&u?1:l.display.length-c.display.length})}setGitRoot(o){this.gitRoot!==o&&(this.gitRoot=o)}parseTrigger(o){let n=o.match(/(^|\s)\/skill:([^\s]*)$/);if(n)return{partial:n[2]??"",invocationPrefix:"/skill:"};let t=o.match(/(^|\s)\/([^\s]*)$/);if(t)return{partial:t[2]??"",invocationPrefix:"/"}}async getSkills(){try{let o=Se(this.gitRoot);return o.size===0&&await je(this.gitRoot),o.listUserInvocable()}catch{return[]}}fuzzyIncludes(o,n){let t=0;for(let r=0;r<n.length&&t<o.length;r+=1)n[r]===o[t]&&(t+=1);return t===o.length}truncateDescription(o,n=50){return o.length<=n?o:o.slice(0,n-3)+"..."}};import{exec as Lf}from"node:child_process";import*as so from"node:path";import{promisify as Wf}from"node:util";var Da=Wf(Lf);function Of(e){let o=e.slice(3);if(!o)return;let n=o.indexOf(" -> ");return(n===-1?o:o.slice(n+4)).replace(/^"(.*)"$/,"$1").trim()||void 0}a(Of,"pathFromPorcelainLine");async function ja(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([Da("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0}),Da("git status --porcelain=v1 -uall",{cwd:e,windowsHide:!0})]),r=n.trim(),s=[],l=new Set;for(let c of t.split(`
679
- `)){if(!c.trim())continue;let d=Of(c);if(!d)continue;let u=so.resolve(r,d),f=so.relative(e,u).split(so.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),s.push(f),s.length>=o))break}return s}catch{return[]}}a(ja,"getRecentWorkingSetFiles");function ao(e){let o=e.lastIndexOf("/");if(o===-1)return-1;for(;o>0&&!/\s/.test(e[o-1]??"");)if(o=e.lastIndexOf("/",o-1),o===-1)return-1;return o}a(ao,"findCommandSlashIndex");var hr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=ja){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let s=t.slice(r+1),l=[],c=this.resolveCwd(),d=s.lastIndexOf("/"),u=d===-1?c:jo.join(c,s.slice(0,d)),f=d===-1?s:s.slice(d+1);try{let k=(await this.readdir(u)).filter(b=>b.toLowerCase().startsWith(f.toLowerCase()));for(let b of k){let A=jo.join(u,b),R=await this.isDirectory(A),v=d===-1?b:s.slice(0,d+1)+b;l.push({text:"@"+v+(R?"/":""),display:b+(R?"/":""),description:R?"directory":"file",type:"file"})}}catch{}if(d===-1){let p=await this.getRecentFiles(c),k=new Set(l.map(R=>R.text)),b=f.toLowerCase(),A=[];for(let R of p){if(f&&!jo.basename(R).toLowerCase().startsWith(b))continue;let v="@"+R;k.has(v)||(k.add(v),A.push({text:v,display:R,description:"recent",type:"file"}))}l.unshift(...A)}return l}async getRecentFiles(o){let n=Date.now(),t=this.recentCache.get(o);if(t&&t.expiresAt>n)return t.files;let r=await this.recentFilesProvider(o);return this.recentCache.set(o,{files:r,expiresAt:Date.now()+this.cacheTimeout}),r}resolveCwd(){return typeof this.cwdSource=="function"?this.cwdSource():this.cwdSource??process.cwd()}async readdir(o){let n=Date.now(),t=this.cache.get(o);return t&&t.expiresAt>n?t.entries:(t&&this.cache.delete(o),new Promise(r=>{Dn.readdir(o,(s,l)=>{s?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{Dn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},yr=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of Do().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=se();for(let n of o?.listCommands()??[])n.metadata?.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]})}canComplete(o,n){let t=o.slice(0,n),r=ao(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=ao(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let s=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(s,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(s,u)&&l.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),s=0;for(let l=0;l<r.length&&s<t.length;l++)r[l]===t[s]&&s++;return s===t.length}};function _v(e){let o=new hr(e),n=new Nn,t=new yr;return async r=>{let s=r.includes("@"),l=r.includes("/");if(!s&&!l)return[[],r];let c=[];if(l){let u=await Nf(r,r.length);c.push(...u)}if(l&&n.canComplete(r,r.length)){let u=await n.getCompletions(r,r.length);c.push(...u)}if(l&&t.canComplete(r,r.length)){let u=await t.getCompletions(r,r.length);c.push(...u)}if(s&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>Df(r,u)),r]}}a(_v,"createCompleter");async function Nf(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-JHXUJWHC.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(Nf,"getArgumentCompletions");function Df(e,o){if(o.type!=="argument")return o.text;let n=ao(e);if(n!==-1&&!/\s/.test(e.slice(n)))return`${e} ${o.text}`;let r=e.match(/\S+$/)?.[0]??"";return`${r?e.slice(0,e.length-r.length):e}${o.text}`}a(Df,"formatReadlineCompletion");import{existsSync as jn,readdirSync as Ka,readFileSync as Ba}from"node:fs";import{join as Un}from"node:path";var jf=[{name:"plan",description:"Read-only planning mode - blocks all modifications",type:"enum"},{name:"accept-edits",description:"File edits auto-approved, bash requires confirmation",type:"enum"},{name:"auto",description:"Use auto-mode classifier for tool permissions",type:"enum"}],lo=[{name:"none",description:"Disable reasoning when the model supports it",type:"enum"},{name:"auto",description:"Clear the explicit effort override",type:"enum"},{name:"low",description:"Use low reasoning effort",type:"enum"},{name:"medium",description:"Use medium reasoning effort",type:"enum"},{name:"high",description:"Use high reasoning effort",type:"enum"},{name:"xhigh",description:"Use extra-high reasoning effort",type:"enum"},{name:"max",description:"Use maximum reasoning effort",type:"enum"}];function Uf(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Ne(n))try{return Be(n).filter(s=>!t||s.toLowerCase().includes(t.toLowerCase())).map(s=>({name:`${n}/${s}`,description:s,type:"enum"}))}catch{}return[]}return De().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Uf,"getModelArgs");var vr=[{name:"workspace",description:"Inspect current workspace/runtime truth in more detail",type:"enum"},{name:"runtime",description:"Alias for workspace runtime inspection",type:"enum"},{name:"worktree",description:"Alias for workspace runtime inspection",type:"enum"}],kr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Ff=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],Hf=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],Kf=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],Ua=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],Fa=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],Bf=[{name:"list",description:"Summarize accepted Memory",type:"enum"},{name:"remember",description:"Remember one explicit keyed claim now",type:"enum"},{name:"forget",description:"Forget one exact accepted Memory",type:"enum"},{name:"decisions",description:"List exceptional changes that need you",type:"enum"},{name:"show",description:"Show one accepted Memory or decision",type:"enum"},{name:"approve",description:"Approve one reviewed decision",type:"enum"},{name:"reject",description:"Reject one reviewed decision",type:"enum"},{name:"doctor",description:"Diagnose the Memory pipeline",type:"enum"},{name:"open",description:"Open Memory in an external editor",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],qf=[{name:"list",description:"List learned capabilities",type:"enum"},{name:"ready",description:"List capabilities ready for review/control",type:"enum"},{name:"pending",description:"Compatibility alias for ready capabilities",type:"enum"},{name:"show",description:"Inspect one exact learned capability",type:"enum"},{name:"review",description:"Start or restart bounded canary review",type:"enum"},{name:"trust",description:"Explicitly trust a reviewed revision",type:"enum"},{name:"reject",description:"Reject a learned capability",type:"enum"},{name:"disable",description:"Disable an active learned capability",type:"enum"},{name:"rollback",description:"Restore the previous good revision",type:"enum"},{name:"promote",description:"Promote an exact revision to the user Skill catalog",type:"enum"},{name:"help",description:"Show Learning Center help",type:"enum"}];function Gf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?qf:n==="help"&&t<=2?[{name:"promote",description:"Show dedicated promotion help",type:"enum"}]:n!=="promote"?[]:t<=2?[{name:"--help",description:"Show dedicated promotion help",type:"enum"}]:t<=3?[{name:"--scope",description:"Choose the formal user Skill scope",type:"enum"}]:e[2]?.toLowerCase()==="--scope"&&t<=4?[{name:"user",description:"Promote to the formal user Skill catalog",type:"enum"}]:[]}a(Gf,"getLearnArgs");var zf=[{name:"status",description:"Show current persistent goal",type:"enum"},{name:"pause",description:"Pause the active goal",type:"enum"},{name:"resume",description:"Resume a paused goal",type:"enum"},{name:"clear",description:"Clear the current goal",type:"enum"},{name:"help",description:"Show goal help",type:"enum"},{name:"--tokens",description:"Set an optional goal token budget",type:"enum"}],Xf=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Vf=[{name:"--lean",description:"Add a minimal-diff/YAGNI review pass",type:"enum"},{name:"--workflow",description:"Review through a dynamic workflow",type:"enum"},{name:"base",description:"Review changes against the detected base branch",type:"enum"},{name:"sha",description:"Review a specific commit",type:"enum"},{name:"help",description:"Show review help",type:"enum"}],Yf=[{name:"init",description:"Create AGENTS.md in the target project if absent",type:"enum"},{name:"lean",description:"Initialize or LLM-review AGENTS.md for Lean Mode guidance",type:"enum"},{name:"help",description:"Show agents help",type:"enum"}],Jf=[{name:"status",description:"Inspect the current repo-intelligence runtime state",type:"enum"},{name:"mode",description:"Switch repo-intelligence runtime mode",type:"enum"},{name:"trace",description:"Toggle repo-intelligence trace output",type:"enum"}],Zf=[{name:"auto",description:"Let KodaX pick the best repo-intelligence engine",type:"enum"},{name:"full",description:"Prefer the full repo-intelligence engine",type:"enum"},{name:"light",description:"Use the light repo-intelligence engine",type:"enum"},{name:"off",description:"Disable repo-intelligence injection",type:"enum"}],Qf=[{name:"on",description:"Enable repo-intelligence trace output",type:"enum"},{name:"off",description:"Disable repo-intelligence trace output",type:"enum"},{name:"toggle",description:"Toggle repo-intelligence trace output",type:"enum"}],em=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],om=[{name:"list",description:"List built-in and saved workflows",type:"enum"},{name:"create",description:"Generate and run a workflow from a request",type:"enum"},{name:"runs",description:"List active and recent workflow runs",type:"enum"},{name:"show",description:"Show latest run or a specific workflow run",type:"enum"},{name:"pause",description:"Pause future child launches for a run",type:"enum"},{name:"resume",description:"Resume a paused run",type:"enum"},{name:"stop",description:"Stop an active workflow run",type:"enum"},{name:"delete",description:"Delete one persisted workflow run or generated saved capsule",type:"enum"},{name:"prune",description:"Preview or delete old terminal workflow runs",type:"enum"},{name:"rerun",description:"Rerun a run id or saved workflow name",type:"enum"},{name:"save",description:"Save a generated run as a workflow capsule",type:"enum"},{name:"rename",description:"Rename a run display name or saved workflow capsule",type:"enum"},{name:"revise",description:"Generate a revised workflow capsule",type:"enum"},{name:"help",description:"Show workflow help",type:"enum"}],nm=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),tm=new Set(["show","delete","rerun","save","rename","revise"]),rm=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],im=[{name:"--dry-run",description:"Preview cleanup without deleting runs",type:"enum"},{name:"--keep",description:"Keep the newest N terminal runs",type:"enum"},{name:"--older-than",description:"Delete terminal runs older than Nd or Nh",type:"enum"}],sm=[{name:"--force",description:"Delete stale non-terminal run records",type:"enum"},{name:"--run",description:"Treat the target as a workflow run record",type:"enum"},{name:"--saved",description:"Treat the target as a generated saved workflow capsule",type:"enum"}],am=[".workflow.json",".ts",".mjs",".js"];function lm(e,o){switch(e){case"pause":return o==="running";case"resume":return o==="paused";case"stop":return o==="running"||o==="paused";case"delete":return o!=="running"&&o!=="paused";default:return!0}}a(lm,"workflowRunMatchesSubcommand");function Fn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Fn,"isWorkflowRunEntryName");function cm(e,o){let n=Un(e,"workflow-metadata.json");if(jn(n))try{let r=JSON.parse(Ba(n,"utf8"));if(typeof r=="object"&&r!==null){let s=r.displayName;if(typeof s=="string"&&Fn(s.trim()))return s.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Fn(t.trim())?t.trim():void 0}a(cm,"readWorkflowRunDisplayName");function dm(){let e=ye(process.cwd()).key,o=W("workflow-runs",e);if(!jn(o))return[];let n=[];for(let t of Ka(o)){if(!Fn(t))continue;let r=Un(o,t,"run.json");if(jn(r))try{let s=JSON.parse(Ba(r,"utf8")),l=typeof s.workflow=="string"?s.workflow:"?",c=typeof s.status=="string"?s.status:"?",d=typeof s.endedAt=="number"?s.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=cm(Un(o,t),s);u&&u!==t&&n.push({arg:{name:u,description:`${l} alias for ${t} - ${c}`,type:"string"},endedAt:d})}catch{}}return n.sort((t,r)=>r.endedAt-t.endedAt).map(t=>t.arg)}a(dm,"getPersistedWorkflowRunIdArgs");function Hn(e){let o=He().list().filter(r=>lm(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=tm.has(e)?dm():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(Hn,"getWorkflowRunIdArgs");function um(e){for(let o of am)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Fn(n)?n:void 0}}a(um,"savedWorkflowNameFromFile");function Uo(e={}){let o=[{path:W("workflows"),source:"personal"},{path:Un(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(jn(t.path))try{for(let r of Ka(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let s=um(r);s&&n.set(s,{name:s,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(Uo,"getSavedWorkflowNameArgs");function fm(){let e=new Map;for(let o of Hn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Uo()){let n=e.get(o.name);if(n){e.set(o.name,{...n,description:`${n.description}; also ${o.description}`});continue}e.set(o.name,{...o,description:o.description,type:"string"})}return[...e.values()]}a(fm,"getWorkflowRerunArgs");function br(e){let o=new Map;for(let n of Hn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Uo({generatedOnly:e==="delete"})){let t=o.get(n.name);if(t){o.set(n.name,{...t,description:`${t.description}; also ${n.description}`});continue}o.set(n.name,{...n,description:n.description,type:"string"})}return[...o.values()]}a(br,"getWorkflowRunOrSavedNameArgs");function Ha(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Uo({generatedOnly:!0}):o.has("--run")?Hn("delete"):br("delete")}a(Ha,"getWorkflowDeleteTargetArgs");function mm(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...om,...Jo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Uo()];if(n==="rerun"&&t<=2)return fm();if(n==="rename"&&t<=2)return br("rename");if(n==="delete"&&t<=2)return[...sm,...Ha(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Ha(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...br("revise")];if(e[1]==="--replace"&&t<=3)return Uo()}return nm.has(n)&&t<=2?Hn(n):n==="runs"&&t<=2?rm:n==="prune"&&t<=2?im:[]}a(mm,"getWorkflowArgs");function pm(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Jf:t>2?[]:n==="mode"?Zf:n==="trace"?Qf:[]}a(pm,"getRepoIntelArgs");var gm=new Map([["mode",jf],["thinking",lo],["think",lo],["t",lo],["reasoning",lo],["reason",lo],["effort",lo],["status",vr],["info",vr],["ctx",vr],["mcp",Ff],["fallback",Hf],["auto-engine",Kf],["agent-mode",Ua],["am",Ua],["verifier-log",Fa],["stall-log",Fa],["memory",Bf],["goal",zf],["paste",Xf],["review",Vf],["agents",Yf],["delete",kr],["rm",kr],["del",kr]]),wm=new Set(["model","m","provider"]),hm=new Set(["repo-intel"]),ym=new Set(["repointel","ri"]),vm=new Set(["workflow"]),km=new Set(["learn"]);function $r(e,o,n=[]){let t=e.toLowerCase();return wm.has(t)?Uf(o):hm.has(t)?pm(n):ym.has(t)?n.length<=1?em:[]:vm.has(t)?mm(n):km.has(t)?Gf(n):gm.get(t)??[]}a($r,"getCommandArguments");var Sr=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=ao(t);if(r===-1)return!1;let s=t.slice(r),l=s.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=s.slice(1).toLowerCase();return $r(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=ao(t);if(r===-1)return[];let s=t.slice(r),l=s.indexOf(" "),c=(l===-1?s.slice(1):s.slice(1,l)).toLowerCase(),d=l===-1?"":s.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,p=u[f]??"",k=p.toLowerCase(),b=$r(c,p,u);if(!b||b.length===0)return[];let A=new Set(u.slice(0,-1).map(v=>v.toLowerCase()));return b.filter(v=>!A.has(v.name.toLowerCase())).filter(v=>!k||v.name.includes("/")?!0:v.name.toLowerCase().includes(k)).map(v=>({text:v.name,display:v.name,description:v.description,type:"argument"})).sort((v,$)=>{if(!k)return 0;let I=v.display.toLowerCase().startsWith(k),M=$.display.toLowerCase().startsWith(k);return I&&!M?-1:!I&&M?1:v.display.length-$.display.length})}};function Gv(){return new Sr}a(Gv,"createArgumentCompleter");export{yt as a,B as b,mg as c,ms as d,pg as e,nn as f,Xa as g,Am as h,Va as i,Rm as j,tn as k,Ei as l,ko as m,$o as n,Ge as o,ze as p,Oi as q,Ni as r,Di as s,qi as t,Gi as u,lt as v,Xi as w,Il as x,Ml as y,Lp as z,Vp as A,_l as B,pt as C,Yp as D,Jp as E,as as F,rg as G,ig as H,fs as I,ae as J,ws as K,hs as L,kg as M,Yl as N,dc as O,bg as P,dn as Q,kt as R,$g as S,Cs as T,Sg as U,xg as V,Ag as W,Zg as X,Qg as Y,ew as Z,ow as _,Hs as $,Ct as aa,Ks as ba,ye as ca,wd as da,aw as ea,Eo as fa,_t as ga,Te as ha,Gd as ia,zd as ja,la as ka,_w as la,Lw as ma,su as na,Ph as oa,Th as pa,Mh as qa,Jh as ra,Zh as sa,Qh as ta,ey as ua,oy as va,ba as wa,ay as xa,ly as ya,Sa as za,cy as Aa,Ey as Ba,xa as Ca,Do as Da,yv as Ea,vv as Fa,Nn as Ga,Sr as Ha,Gv as Ia,ao as Ja,hr as Ka,yr as La,_v as Ma};
669
+ Skills can be placed in:`)),console.log(i.dim(" - .kodax/skills/")),console.log(i.dim(" - ~/.kodax/skills/")),console.log(i.dim(" - ~/.agents/skills/"));return}let o=so(),n=e.map(r=>{let s=o.get(r.name)!==void 0||Uo(r.name)!==void 0;return{skill:r,invocation:s?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:s}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:s}=r,l=r.invocation.padEnd(t),c=s.argumentHint?` ${s.argumentHint}`:"",d=s.source==="builtin"?" [builtin]":s.source==="user"?" [user]":s.source==="plugin"?" [plugin]":"",u=r.commandNameTaken?" [command name exists]":"",f=s.description.length>50?s.description.slice(0,50)+"...":s.description;console.log(` ${i.cyan(l)}${i.dim(c)}${i.dim(d)}${i.dim(u)} ${i.dim(f)}`)}console.log(),console.log(i.dim(`Total: ${e.length} skills`)),console.log(i.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(i.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(_f,"printSkillsListPiMonoStyle");var me=new ye;function Dn(e){me.size>0||pr(me,e)}a(Dn,"initCommandRegistry");function so(e){return Dn(e),me}a(so,"getCommandRegistry");function Lv(e,o){return so(o).has(e)||!!Uo(e)}a(Lv,"isRegisteredUserCommand");function Lf(){return le()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(Lf,"getActiveExtensionCommands");function Uo(e){let o=le(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(s=>s.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(Uo,"getActiveExtensionCommand");function Wf(e){return e.usage??`/${e.name}`}a(Wf,"formatExtensionCommandUsage");function Of(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(Of,"formatExtensionDiagnosticValue");function Nf(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${Of(t)}`);return o.length>0?o.join(" | "):void 0}a(Nf,"formatExtensionDiagnosticMetadata");function io(e){let o=e.getDiagnostics;if(typeof o=="function")return o.call(e);let n=e.getDefaults,t=typeof n=="function"?n.call(e):void 0;return{loadedExtensions:[],capabilityProviders:e.listCapabilityProviders().map(r=>({id:r.id,kinds:[...r.kinds],source:{kind:"extension",id:`extension:${r.id}`,label:r.id,path:"(runtime)"}})),commands:e.listCommands().map(r=>({name:r.name,aliases:r.aliases,description:r.description,usage:r.usage,metadata:r.metadata,source:{kind:"extension",id:`extension-command:${r.name}`,label:r.name,path:"(runtime)"}})),tools:[],hooks:[],failures:[],defaults:{activeTools:t?.activeTools,modelSelection:t?.modelSelection??{},thinkingLevel:t?.thinkingLevel}}}a(io,"getExtensionRuntimeDiagnostics");function Df(e,o){if(o.invocation)return{prompt:o.invocation.prompt,source:"extension",displayName:o.invocation.displayName??`/${e.name}`,disableModelInvocation:o.invocation.disableModelInvocation,allowedTools:o.invocation.allowedTools,context:o.invocation.context,model:o.invocation.model}}a(Df,"toExtensionInvocationRequest");function jf(e){return e.map(o=>{if(typeof o=="string")return o;if(o instanceof Error)return o.stack??o.message;try{return JSON.stringify(o)}catch{return String(o)}}).join(" ")}a(jf,"formatDiagnosticParts");function Wn(e,o,n){G({source:e,level:o,message:jf(n)})}a(Wn,"emitCommandDiagnostic");async function Uf(e,o,n){let t=le();if(!t)return console.log(i.yellow(`
670
+ [Extension runtime is not active for /${e.name}]`)),!1;let r=await e.handler(o,{sessionId:n.sessionId,gitRoot:n.gitRoot,workingDirectory:n.runtimeInfo?.executionCwd??n.gitRoot??process.cwd(),reloadExtensions:a(()=>t.reloadExtensions(),"reloadExtensions"),getDiagnostics:a(()=>io(t),"getDiagnostics"),logger:{debug:a((...l)=>Wn(`repl:extension-command:${e.name}`,"debug",l),"debug"),info:a((...l)=>Wn(`repl:extension-command:${e.name}`,"info",l),"info"),warn:a((...l)=>Wn(`repl:extension-command:${e.name}`,"warn",l),"warn"),error:a((...l)=>Wn(`repl:extension-command:${e.name}`,"error",l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let s=Df(e,r);return s?{invocation:s}:!0}a(Uf,"executeExtensionCommand");function Wv(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),s=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:s,skillInvocation:{name:c}}:{command:"skill",args:s}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),s=c?[c,...s]:s}return{command:r,args:s}}a(Wv,"parseCommand");function Na(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Na,"isCommandHelpRequest");async function Ov(e,o,n,t,r){if(me.size===0&&Dn(o.gitRoot),r!==void 0){let u=V(o.gitRoot);u.size===0&&(u=await oe(o.gitRoot));try{un(r,f=>u.has(f))}catch(f){if(!(f instanceof Ro))throw f;return console.log(i.yellow(`
671
+ ${f.message}
672
+ `)),!1}}if(e.skillInvocation)return await hr({command:e.skillInvocation.name,args:e.args},o);let s=me.get(e.command);if(s){if(s.userInvocable===!1)return console.log(i.yellow(`
673
+ [Command /${s.name} is not user-invocable]`)),!1;if(Na(e.args))return vr(e.command,e.args.slice(1)),!0;try{let u=await s.handler(e.args,o,n,t);return u&&typeof u=="object"?u:!0}catch(u){return console.log(i.red(`
674
+ [Command failed: ${u instanceof Error?u.message:String(u)}]`)),!1}}let l=Uo(e.command);if(l){if(Na(e.args))return vr(e.command),!0;try{return await Uf(l,e.args,o)}catch(u){return console.log(i.red(`
675
+ [Extension command failed: ${u instanceof Error?u.message:String(u)}]`)),!1}}let c=await Ff(e,o);if(c)return await hr({command:c.skill.name,args:c.args},o);let d=await Ka(e.command,o);return d?await hr({command:d.name,args:e.args},o):(console.log(i.yellow(`
676
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(Ov,"executeCommand");async function Ff(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Ka(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(Ff,"resolveNamespacedDirectSkillCommand");async function Ka(e,o){let n=V(o.gitRoot);return n.size===0&&(n=await oe(o.gitRoot)),n.get(e)}a(Ka,"resolveDirectSkillCommand");async function hr(e,o){let n=V(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&(n=await oe(o.gitRoot));try{let s=n.get(t);if(!s)return console.log(i.red(`
677
+ [Skill not found: ${t}]`)),!1;console.log(i.cyan(`
678
+ [Invoking skill: ${t}]`)),s.argumentHint&&console.log(i.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await yt(t,r,{workingDirectory:o.runtimeInfo?.executionCwd??process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{},executeDynamicContext:o.skillDynamicContext?.execute,disableDynamicContext:o.skillDynamicContext?.disable});return l?(console.log(i.green(`Skill activated: ${t}`)),console.log(i.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:l}):!1}catch(s){return console.log(i.red(`
679
+ [Error invoking skill: ${s instanceof Error?s.message:String(s)}]`)),!1}}a(hr,"executeSkillCommand");var jn=class{static{a(this,"SkillCompleter")}gitRoot;constructor(o){this.gitRoot=o}canComplete(o,n){return this.parseTrigger(o.slice(0,n))!==void 0}async getCompletions(o,n){let t=this.parseTrigger(o.slice(0,n));if(!t)return[];let r=t.partial.toLowerCase();return(await this.getSkills()).filter(l=>{let c=l.name.toLowerCase();return c.includes(r)||this.fuzzyIncludes(r,c)}).map(l=>({text:`${t.invocationPrefix}${l.name}`,display:l.name,description:this.truncateDescription(l.description),type:"skill"})).sort((l,c)=>{let d=l.display.toLowerCase().startsWith(r),u=c.display.toLowerCase().startsWith(r);return d&&!u?-1:!d&&u?1:l.display.length-c.display.length})}setGitRoot(o){this.gitRoot!==o&&(this.gitRoot=o)}parseTrigger(o){let n=o.match(/(^|\s)\/skill:([^\s]*)$/);if(n)return{partial:n[2]??"",invocationPrefix:"/skill:"};let t=o.match(/(^|\s)\/([^\s]*)$/);if(t)return{partial:t[2]??"",invocationPrefix:"/"}}async getSkills(){try{let o=V(this.gitRoot);return o.size===0&&await oe(this.gitRoot),o.listUserInvocable()}catch{return[]}}fuzzyIncludes(o,n){let t=0;for(let r=0;r<n.length&&t<o.length;r+=1)n[r]===o[t]&&(t+=1);return t===o.length}truncateDescription(o,n=50){return o.length<=n?o:o.slice(0,n-3)+"..."}};import{exec as Hf}from"node:child_process";import*as ao from"node:path";import{promisify as Kf}from"node:util";var Ba=Kf(Hf);function Bf(e){let o=e.slice(3);if(!o)return;let n=o.indexOf(" -> ");return(n===-1?o:o.slice(n+4)).replace(/^"(.*)"$/,"$1").trim()||void 0}a(Bf,"pathFromPorcelainLine");async function qa(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([Ba("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0}),Ba("git status --porcelain=v1 -uall",{cwd:e,windowsHide:!0})]),r=n.trim(),s=[],l=new Set;for(let c of t.split(`
680
+ `)){if(!c.trim())continue;let d=Bf(c);if(!d)continue;let u=ao.resolve(r,d),f=ao.relative(e,u).split(ao.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),s.push(f),s.length>=o))break}return s}catch{return[]}}a(qa,"getRecentWorkingSetFiles");function lo(e){let o=e.lastIndexOf("/");if(o===-1)return-1;for(;o>0&&!/\s/.test(e[o-1]??"");)if(o=e.lastIndexOf("/",o-1),o===-1)return-1;return o}a(lo,"findCommandSlashIndex");var kr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=qa){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let s=t.slice(r+1),l=[],c=this.resolveCwd(),d=s.lastIndexOf("/"),u=d===-1?c:Fo.join(c,s.slice(0,d)),f=d===-1?s:s.slice(d+1);try{let k=(await this.readdir(u)).filter(b=>b.toLowerCase().startsWith(f.toLowerCase()));for(let b of k){let A=Fo.join(u,b),R=await this.isDirectory(A),v=d===-1?b:s.slice(0,d+1)+b;l.push({text:"@"+v+(R?"/":""),display:b+(R?"/":""),description:R?"directory":"file",type:"file"})}}catch{}if(d===-1){let p=await this.getRecentFiles(c),k=new Set(l.map(R=>R.text)),b=f.toLowerCase(),A=[];for(let R of p){if(f&&!Fo.basename(R).toLowerCase().startsWith(b))continue;let v="@"+R;k.has(v)||(k.add(v),A.push({text:v,display:R,description:"recent",type:"file"}))}l.unshift(...A)}return l}async getRecentFiles(o){let n=Date.now(),t=this.recentCache.get(o);if(t&&t.expiresAt>n)return t.files;let r=await this.recentFilesProvider(o);return this.recentCache.set(o,{files:r,expiresAt:Date.now()+this.cacheTimeout}),r}resolveCwd(){return typeof this.cwdSource=="function"?this.cwdSource():this.cwdSource??process.cwd()}async readdir(o){let n=Date.now(),t=this.cache.get(o);return t&&t.expiresAt>n?t.entries:(t&&this.cache.delete(o),new Promise(r=>{Un.readdir(o,(s,l)=>{s?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{Un.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},br=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of so().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=le();for(let n of o?.listCommands()??[])n.metadata?.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]})}canComplete(o,n){let t=o.slice(0,n),r=lo(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=lo(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let s=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(s,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(s,u)&&l.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),s=0;for(let l=0;l<r.length&&s<t.length;l++)r[l]===t[s]&&s++;return s===t.length}};function Yv(e){let o=new kr(e),n=new jn,t=new br;return async r=>{let s=r.includes("@"),l=r.includes("/");if(!s&&!l)return[[],r];let c=[];if(l){let u=await qf(r,r.length);c.push(...u)}if(l&&n.canComplete(r,r.length)){let u=await n.getCompletions(r,r.length);c.push(...u)}if(l&&t.canComplete(r,r.length)){let u=await t.getCompletions(r,r.length);c.push(...u)}if(s&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>Gf(r,u)),r]}}a(Yv,"createCompleter");async function qf(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-KCYDGTQW.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(qf,"getArgumentCompletions");function Gf(e,o){if(o.type!=="argument")return o.text;let n=lo(e);if(n!==-1&&!/\s/.test(e.slice(n)))return`${e} ${o.text}`;let r=e.match(/\S+$/)?.[0]??"";return`${r?e.slice(0,e.length-r.length):e}${o.text}`}a(Gf,"formatReadlineCompletion");import{existsSync as Fn,readdirSync as Va,readFileSync as Ya}from"node:fs";import{join as Hn}from"node:path";var zf=[{name:"plan",description:"Read-only planning mode - blocks all modifications",type:"enum"},{name:"accept-edits",description:"File edits auto-approved, bash requires confirmation",type:"enum"},{name:"auto",description:"Use auto-mode classifier for tool permissions",type:"enum"}],co=[{name:"none",description:"Disable reasoning when the model supports it",type:"enum"},{name:"auto",description:"Clear the explicit effort override",type:"enum"},{name:"low",description:"Use low reasoning effort",type:"enum"},{name:"medium",description:"Use medium reasoning effort",type:"enum"},{name:"high",description:"Use high reasoning effort",type:"enum"},{name:"xhigh",description:"Use extra-high reasoning effort",type:"enum"},{name:"max",description:"Use maximum reasoning effort",type:"enum"}];function Xf(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(De(n))try{return Be(n).filter(s=>!t||s.toLowerCase().includes(t.toLowerCase())).map(s=>({name:`${n}/${s}`,description:s,type:"enum"}))}catch{}return[]}return je().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Xf,"getModelArgs");var $r=[{name:"workspace",description:"Inspect current workspace/runtime truth in more detail",type:"enum"},{name:"runtime",description:"Alias for workspace runtime inspection",type:"enum"},{name:"worktree",description:"Alias for workspace runtime inspection",type:"enum"}],Sr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Vf=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],Yf=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],Jf=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],Ga=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],za=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],Qf=[{name:"list",description:"Summarize accepted Memory",type:"enum"},{name:"remember",description:"Remember one explicit keyed claim now",type:"enum"},{name:"forget",description:"Forget one exact accepted Memory",type:"enum"},{name:"decisions",description:"List exceptional changes that need you",type:"enum"},{name:"show",description:"Show one accepted Memory or decision",type:"enum"},{name:"approve",description:"Approve one reviewed decision",type:"enum"},{name:"reject",description:"Reject one reviewed decision",type:"enum"},{name:"doctor",description:"Diagnose the Memory pipeline",type:"enum"},{name:"open",description:"Open Memory in an external editor",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],Zf=[{name:"list",description:"List learned capabilities",type:"enum"},{name:"ready",description:"List capabilities ready for review/control",type:"enum"},{name:"pending",description:"Compatibility alias for ready capabilities",type:"enum"},{name:"show",description:"Inspect one exact learned capability",type:"enum"},{name:"review",description:"Start or restart bounded canary review",type:"enum"},{name:"trust",description:"Explicitly trust a reviewed revision",type:"enum"},{name:"reject",description:"Reject a learned capability",type:"enum"},{name:"disable",description:"Disable an active learned capability",type:"enum"},{name:"rollback",description:"Restore the previous good revision",type:"enum"},{name:"promote",description:"Promote an exact revision to the user Skill catalog",type:"enum"},{name:"help",description:"Show Learning Center help",type:"enum"}];function em(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Zf:n==="help"&&t<=2?[{name:"promote",description:"Show dedicated promotion help",type:"enum"}]:n!=="promote"?[]:t<=2?[{name:"--help",description:"Show dedicated promotion help",type:"enum"}]:t<=3?[{name:"--scope",description:"Choose the formal user Skill scope",type:"enum"}]:e[2]?.toLowerCase()==="--scope"&&t<=4?[{name:"user",description:"Promote to the formal user Skill catalog",type:"enum"}]:[]}a(em,"getLearnArgs");var om=[{name:"status",description:"Show current persistent goal",type:"enum"},{name:"pause",description:"Pause the active goal",type:"enum"},{name:"resume",description:"Resume a paused goal",type:"enum"},{name:"clear",description:"Clear the current goal",type:"enum"},{name:"help",description:"Show goal help",type:"enum"},{name:"--tokens",description:"Set an optional goal token budget",type:"enum"}],nm=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],tm=[{name:"--lean",description:"Add a minimal-diff/YAGNI review pass",type:"enum"},{name:"--workflow",description:"Review through a dynamic workflow",type:"enum"},{name:"base",description:"Review changes against the detected base branch",type:"enum"},{name:"sha",description:"Review a specific commit",type:"enum"},{name:"help",description:"Show review help",type:"enum"}],rm=[{name:"init",description:"Create AGENTS.md in the target project if absent",type:"enum"},{name:"lean",description:"Initialize or LLM-review AGENTS.md for Lean Mode guidance",type:"enum"},{name:"help",description:"Show agents help",type:"enum"}],im=[{name:"status",description:"Inspect the current repo-intelligence runtime state",type:"enum"},{name:"mode",description:"Switch repo-intelligence runtime mode",type:"enum"},{name:"trace",description:"Toggle repo-intelligence trace output",type:"enum"}],sm=[{name:"auto",description:"Let KodaX pick the best repo-intelligence engine",type:"enum"},{name:"full",description:"Prefer the full repo-intelligence engine",type:"enum"},{name:"light",description:"Use the light repo-intelligence engine",type:"enum"},{name:"off",description:"Disable repo-intelligence injection",type:"enum"}],am=[{name:"on",description:"Enable repo-intelligence trace output",type:"enum"},{name:"off",description:"Disable repo-intelligence trace output",type:"enum"},{name:"toggle",description:"Toggle repo-intelligence trace output",type:"enum"}],lm=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],cm=[{name:"list",description:"List built-in and saved workflows",type:"enum"},{name:"create",description:"Generate and run a workflow from a request",type:"enum"},{name:"runs",description:"List active and recent workflow runs",type:"enum"},{name:"show",description:"Show latest run or a specific workflow run",type:"enum"},{name:"pause",description:"Pause future child launches for a run",type:"enum"},{name:"resume",description:"Resume a paused run",type:"enum"},{name:"stop",description:"Stop an active workflow run",type:"enum"},{name:"delete",description:"Delete one persisted workflow run or generated saved capsule",type:"enum"},{name:"prune",description:"Preview or delete old terminal workflow runs",type:"enum"},{name:"rerun",description:"Rerun a run id or saved workflow name",type:"enum"},{name:"save",description:"Save a generated run as a workflow capsule",type:"enum"},{name:"rename",description:"Rename a run display name or saved workflow capsule",type:"enum"},{name:"revise",description:"Generate a revised workflow capsule",type:"enum"},{name:"help",description:"Show workflow help",type:"enum"}],dm=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),um=new Set(["show","delete","rerun","save","rename","revise"]),fm=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],mm=[{name:"--dry-run",description:"Preview cleanup without deleting runs",type:"enum"},{name:"--keep",description:"Keep the newest N terminal runs",type:"enum"},{name:"--older-than",description:"Delete terminal runs older than Nd or Nh",type:"enum"}],pm=[{name:"--force",description:"Delete stale non-terminal run records",type:"enum"},{name:"--run",description:"Treat the target as a workflow run record",type:"enum"},{name:"--saved",description:"Treat the target as a generated saved workflow capsule",type:"enum"}],gm=[".workflow.json",".ts",".mjs",".js"];function wm(e,o){switch(e){case"pause":return o==="running";case"resume":return o==="paused";case"stop":return o==="running"||o==="paused";case"delete":return o!=="running"&&o!=="paused";default:return!0}}a(wm,"workflowRunMatchesSubcommand");function Kn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Kn,"isWorkflowRunEntryName");function hm(e,o){let n=Hn(e,"workflow-metadata.json");if(Fn(n))try{let r=JSON.parse(Ya(n,"utf8"));if(typeof r=="object"&&r!==null){let s=r.displayName;if(typeof s=="string"&&Kn(s.trim()))return s.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Kn(t.trim())?t.trim():void 0}a(hm,"readWorkflowRunDisplayName");function ym(){let e=ke(process.cwd()).key,o=W("workflow-runs",e);if(!Fn(o))return[];let n=[];for(let t of Va(o)){if(!Kn(t))continue;let r=Hn(o,t,"run.json");if(Fn(r))try{let s=JSON.parse(Ya(r,"utf8")),l=typeof s.workflow=="string"?s.workflow:"?",c=typeof s.status=="string"?s.status:"?",d=typeof s.endedAt=="number"?s.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=hm(Hn(o,t),s);u&&u!==t&&n.push({arg:{name:u,description:`${l} alias for ${t} - ${c}`,type:"string"},endedAt:d})}catch{}}return n.sort((t,r)=>r.endedAt-t.endedAt).map(t=>t.arg)}a(ym,"getPersistedWorkflowRunIdArgs");function Bn(e){let o=He().list().filter(r=>wm(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=um.has(e)?ym():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(Bn,"getWorkflowRunIdArgs");function vm(e){for(let o of gm)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Kn(n)?n:void 0}}a(vm,"savedWorkflowNameFromFile");function Ho(e={}){let o=[{path:W("workflows"),source:"personal"},{path:Hn(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(Fn(t.path))try{for(let r of Va(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let s=vm(r);s&&n.set(s,{name:s,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(Ho,"getSavedWorkflowNameArgs");function km(){let e=new Map;for(let o of Bn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Ho()){let n=e.get(o.name);if(n){e.set(o.name,{...n,description:`${n.description}; also ${o.description}`});continue}e.set(o.name,{...o,description:o.description,type:"string"})}return[...e.values()]}a(km,"getWorkflowRerunArgs");function xr(e){let o=new Map;for(let n of Bn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Ho({generatedOnly:e==="delete"})){let t=o.get(n.name);if(t){o.set(n.name,{...t,description:`${t.description}; also ${n.description}`});continue}o.set(n.name,{...n,description:n.description,type:"string"})}return[...o.values()]}a(xr,"getWorkflowRunOrSavedNameArgs");function Xa(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Ho({generatedOnly:!0}):o.has("--run")?Bn("delete"):xr("delete")}a(Xa,"getWorkflowDeleteTargetArgs");function bm(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...cm,...Zo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Ho()];if(n==="rerun"&&t<=2)return km();if(n==="rename"&&t<=2)return xr("rename");if(n==="delete"&&t<=2)return[...pm,...Xa(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Xa(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...xr("revise")];if(e[1]==="--replace"&&t<=3)return Ho()}return dm.has(n)&&t<=2?Bn(n):n==="runs"&&t<=2?fm:n==="prune"&&t<=2?mm:[]}a(bm,"getWorkflowArgs");function $m(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?im:t>2?[]:n==="mode"?sm:n==="trace"?am:[]}a($m,"getRepoIntelArgs");var Sm=new Map([["mode",zf],["thinking",co],["think",co],["t",co],["reasoning",co],["reason",co],["effort",co],["status",$r],["info",$r],["ctx",$r],["mcp",Vf],["fallback",Yf],["auto-engine",Jf],["agent-mode",Ga],["am",Ga],["verifier-log",za],["stall-log",za],["memory",Qf],["goal",om],["paste",nm],["review",tm],["agents",rm],["delete",Sr],["rm",Sr],["del",Sr]]),xm=new Set(["model","m","provider"]),Am=new Set(["repo-intel"]),Rm=new Set(["repointel","ri"]),Cm=new Set(["workflow"]),Em=new Set(["learn"]);function Ar(e,o,n=[]){let t=e.toLowerCase();return xm.has(t)?Xf(o):Am.has(t)?$m(n):Rm.has(t)?n.length<=1?lm:[]:Cm.has(t)?bm(n):Em.has(t)?em(n):Sm.get(t)??[]}a(Ar,"getCommandArguments");var Rr=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=lo(t);if(r===-1)return!1;let s=t.slice(r),l=s.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=s.slice(1).toLowerCase();return Ar(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=lo(t);if(r===-1)return[];let s=t.slice(r),l=s.indexOf(" "),c=(l===-1?s.slice(1):s.slice(1,l)).toLowerCase(),d=l===-1?"":s.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,p=u[f]??"",k=p.toLowerCase(),b=Ar(c,p,u);if(!b||b.length===0)return[];let A=new Set(u.slice(0,-1).map(v=>v.toLowerCase()));return b.filter(v=>!A.has(v.name.toLowerCase())).filter(v=>!k||v.name.includes("/")?!0:v.name.toLowerCase().includes(k)).map(v=>({text:v.name,display:v.name,description:v.description,type:"argument"})).sort((v,$)=>{if(!k)return 0;let I=v.display.toLowerCase().startsWith(k),M=$.display.toLowerCase().startsWith(k);return I&&!M?-1:!I&&M?1:v.display.length-$.display.length})}};function ck(){return new Rr}a(ck,"createArgumentCompleter");export{bt as a,B as b,Eg as c,vs as d,Ig as e,rn as f,el as g,_m as h,ol as i,Lm as j,sn as k,_i as l,bo as m,So as n,Ge as o,ze as p,Fi as q,Hi as r,Ki as s,Yi as t,Ji as u,dt as v,Zi as w,Wl as x,Dl as y,Hp as z,tg as A,jl as B,wt as C,rg as D,ig as E,fs as F,Ro as G,fg as H,yt as I,mg as J,pg as K,vg as L,kg as M,ys as N,ce as O,$s as P,Ss as Q,Wg as R,rc as S,yc as T,Og as U,mn as V,St as W,Ng as X,_s as Y,Dg as Z,jg as _,Ug as $,mw as aa,pw as ba,gw as ca,ww as da,Xs as ea,Tt as fa,Vs as ga,ke as ha,xd as ia,$w as ja,To as ka,Ot as la,Me as ma,eu as na,ou as oa,pa,Xw as qa,Vw as ra,pu as sa,qh as ta,Gh as ua,zh as va,fy as wa,my as xa,py as ya,gy as za,wy as Aa,Ca as Ba,$y as Ca,Sy as Da,Ia as Ea,xy as Fa,Ky as Ga,Ta as Ha,so as Ia,Lv as Ja,Wv as Ka,Ov as La,jn as Ma,Rr as Na,ck as Oa,lo as Pa,kr as Qa,br as Ra,Yv as Sa};