@kodax-ai/kodax 0.7.96 → 0.7.97-alpha.2

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 (127) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +85 -62
  3. package/README_CN.md +57 -67
  4. package/config-templates/config.example.jsonc +0 -14
  5. package/dist/chunks/{agent-7N427EVB.js → agent-J7SHFM5N.js} +1 -1
  6. package/dist/chunks/argument-completer-ZJQOWTIS.js +2 -0
  7. package/dist/chunks/{chunk-ABZDFK2X.js → chunk-2GV6MQ4T.js} +14 -14
  8. package/dist/chunks/{chunk-6QI3GOYG.js → chunk-3PS3YEDS.js} +1 -1
  9. package/dist/chunks/chunk-4VJMQDTH.js +417 -0
  10. package/dist/chunks/{chunk-NI7PBPUR.js → chunk-5DSUVP46.js} +1 -1
  11. package/dist/chunks/chunk-5P7RTSZT.js +21 -0
  12. package/dist/chunks/{chunk-XXNR6S4Q.js → chunk-6ZAQKFIM.js} +1 -1
  13. package/dist/chunks/chunk-7V2QBZ73.js +137 -0
  14. package/dist/chunks/{chunk-C7U542KM.js → chunk-F7DHZH6T.js} +1 -1
  15. package/dist/chunks/{chunk-7IMWOR34.js → chunk-HSRYDDPF.js} +1 -1
  16. package/dist/chunks/chunk-K3DQGSQU.js +372 -0
  17. package/dist/chunks/chunk-NO23K2CB.js +2 -0
  18. package/dist/chunks/{chunk-NKT3B3DR.js → chunk-OT5WHAX4.js} +1 -1
  19. package/dist/chunks/{chunk-YEAUDI6U.js → chunk-QGWHJIO4.js} +1 -1
  20. package/dist/chunks/chunk-QOFFAY5C.js +261 -0
  21. package/dist/chunks/{chunk-4PFZ7BEE.js → chunk-QVDTORL3.js} +11 -11
  22. package/dist/chunks/chunk-QZ4B4AWG.js +473 -0
  23. package/dist/chunks/chunk-RXDS6CNA.js +355 -0
  24. package/dist/chunks/{chunk-WV3DJVW4.js → chunk-VDGPJQL7.js} +135 -135
  25. package/dist/chunks/chunk-VEZ4WHPN.js +641 -0
  26. package/dist/chunks/chunk-ZPPAT25E.js +5 -0
  27. package/dist/chunks/chunk-ZQYWDI4O.js +1 -0
  28. package/dist/chunks/chunk-ZS2GUADU.js +498 -0
  29. package/dist/chunks/{chunk-GN2IY5YE.js → chunk-ZTYZYXGV.js} +1 -1
  30. package/dist/chunks/{chunk-EM4XJBTK.js → chunk-ZZQ4GDVU.js} +1 -1
  31. package/dist/chunks/{client-6WZZTTSV.js → client-MXOJ5XUN.js} +1 -1
  32. package/dist/chunks/{compaction-config-ZMEJU4U7.js → compaction-config-5VZSGKBQ.js} +1 -1
  33. package/dist/chunks/{construction-bootstrap-RX4DMHI7.js → construction-bootstrap-U2ZU2WAT.js} +1 -1
  34. package/dist/chunks/dist-CSLNWLOE.js +2 -0
  35. package/dist/chunks/dist-XXMJMJDU.js +2 -0
  36. package/dist/chunks/host-RUXYZFYN.js +2 -0
  37. package/dist/chunks/readline-helpers-JCVULR4C.js +2 -0
  38. package/dist/chunks/run-manager-DRIM5VNE.js +2 -0
  39. package/dist/chunks/utils-MQEBGKIX.js +2 -0
  40. package/dist/index.d.ts +63 -30
  41. package/dist/index.js +10 -6
  42. package/dist/kodax_bootstrap.js +1 -1
  43. package/dist/kodax_cli.js +1745 -1734
  44. package/dist/kodax_resume.js +32 -35
  45. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  46. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  47. package/dist/native/win32-x64/manifest.json +2 -2
  48. package/dist/sandbox-network-broker.js +77 -77
  49. package/dist/sdk-a2a.d.ts +33 -18
  50. package/dist/sdk-a2a.js +8 -9
  51. package/dist/sdk-agent.d.ts +33 -26
  52. package/dist/sdk-agent.js +1 -1
  53. package/dist/sdk-client.d.ts +40 -0
  54. package/dist/sdk-client.js +2 -0
  55. package/dist/sdk-coding.d.ts +87 -499
  56. package/dist/sdk-coding.js +1 -1
  57. package/dist/sdk-experimental-memory.d.ts +3 -4
  58. package/dist/sdk-experimental-memory.js +1 -1
  59. package/dist/sdk-llm.d.ts +11 -9
  60. package/dist/sdk-llm.js +1 -1
  61. package/dist/sdk-mcp.d.ts +3 -3
  62. package/dist/sdk-mcp.js +1 -1
  63. package/dist/sdk-media.d.ts +3 -1
  64. package/dist/sdk-media.js +1 -1
  65. package/dist/sdk-repl.d.ts +317 -70
  66. package/dist/sdk-repl.js +2 -2
  67. package/dist/sdk-runtime.d.ts +580 -452
  68. package/dist/sdk-runtime.js +1 -1
  69. package/dist/sdk-sandbox.js +1 -1
  70. package/dist/sdk-session.d.ts +13 -9
  71. package/dist/sdk-session.js +1 -1
  72. package/dist/sdk-skills.js +1 -1
  73. package/dist/semantic-worker.js +57 -57
  74. package/dist/types-chunks/{base.d-Bt9lhwSV.d.ts → base.d-ZBOdjDUT.d.ts} +2 -1
  75. package/dist/types-chunks/{bash-prefix-extractor.d-DWFIMg0v.d.ts → bash-prefix-extractor.d-DvswAXKS.d.ts} +136 -66
  76. package/dist/types-chunks/{capability-learning.d-gRtO03f6.d.ts → capability-learning.d-B4pxKwP4.d.ts} +1 -1
  77. package/dist/types-chunks/{capability.d-Ch5Vos33.d.ts → capability.d-DOF3r0fJ.d.ts} +1 -1
  78. package/dist/types-chunks/{capsule.d-Dj1n6s0Y.d.ts → capsule.d-B4atvlxE.d.ts} +7 -19
  79. package/dist/types-chunks/client-contract-A1jdk6xz.d.ts +1993 -0
  80. package/dist/types-chunks/{controller.d-C0IM1Tud.d.ts → controller.d-BkUJ_3sl.d.ts} +1 -1
  81. package/dist/types-chunks/{controller.d-J2t1q8Ly.d.ts → controller.d-yyKajPTi.d.ts} +140 -1380
  82. package/dist/types-chunks/{cost-tracker.d-BWI4lFWn.d.ts → cost-tracker.d-BeaenODW.d.ts} +2 -47
  83. package/dist/types-chunks/{history-retrieval.d-CPN5PMBV.d.ts → history-retrieval.d-JdFfkeF3.d.ts} +2 -2
  84. package/dist/types-chunks/{manager.d-rtmywU9M.d.ts → manager.d-C_20XqCV.d.ts} +8 -1
  85. package/dist/types-chunks/manifest.d-Bw2i-zQi.d.ts +18 -0
  86. package/dist/types-chunks/provider-credential-context.d-BH2OaB1b.d.ts +47 -0
  87. package/dist/types-chunks/provider-request-observation.d-jL8T6wVO.d.ts +34 -0
  88. package/dist/types-chunks/{public-api.d-amBop8Nk.d.ts → public-api.d-Cq8ILMte.d.ts} +52 -13
  89. package/dist/types-chunks/{resolver.d-BrwLoWNr.d.ts → resolver.d-DLY01RHx.d.ts} +4 -2
  90. package/dist/types-chunks/{types.d-CSv0_cZC.d.ts → review-inbox.d-BeaLRNHx.d.ts} +251 -3
  91. package/dist/types-chunks/{shell-command-sets.d-oejwpP_7.d.ts → review-packet.d-D4bbTbq3.d.ts} +46 -3
  92. package/dist/types-chunks/{exec-policy.d-BPESl90L.d.ts → run-manager.d-C7Q71rin.d.ts} +385 -62
  93. package/dist/types-chunks/runtime-client-info-CxnlZlW5.d.ts +175 -0
  94. package/dist/types-chunks/{sdk-session-B6XjHNU1.d.ts → sdk-session-BDFjCpDn.d.ts} +12 -4
  95. package/dist/types-chunks/{side-query.d-DHWG1JZg.d.ts → side-query.d-DTrhVd_r.d.ts} +4 -3
  96. package/dist/types-chunks/trusted-repl-entry-vbUM8R6P.d.ts +445 -0
  97. package/dist/types-chunks/{types.d-CtO8mR1s.d.ts → types.d-BJTN-RZr.d.ts} +5 -5
  98. package/dist/types-chunks/{types.d-BrQMB-hy.d.ts → types.d-BjOq57-z.d.ts} +6 -0
  99. package/dist/types-chunks/types.d-o7t9dds4.d.ts +1484 -0
  100. package/dist/types-chunks/{utils.d-DcznBeQ3.d.ts → utils.d-CWiMhFfu.d.ts} +202 -36
  101. package/docs/CLIENT_CONTRACT.md +441 -0
  102. package/docs/SDK_MIGRATION.md +123 -0
  103. package/docs/SPACE_SDK_SEAMS.md +139 -0
  104. package/package.json +10 -5
  105. package/public_docs/README.md +12 -133
  106. package/public_docs/configuration/config-files.md +8 -14
  107. package/public_docs/sdk/embedder-guide.md +494 -420
  108. package/dist/chunks/argument-completer-FAIHW7HZ.js +0 -2
  109. package/dist/chunks/chunk-66XN5AFU.js +0 -417
  110. package/dist/chunks/chunk-7O2AIFNE.js +0 -373
  111. package/dist/chunks/chunk-DSXUXUZG.js +0 -5
  112. package/dist/chunks/chunk-GYO73UYQ.js +0 -275
  113. package/dist/chunks/chunk-HPCS3LZ5.js +0 -324
  114. package/dist/chunks/chunk-HZYRLIOC.js +0 -137
  115. package/dist/chunks/chunk-SC2ELSUS.js +0 -675
  116. package/dist/chunks/chunk-TEUD5VPJ.js +0 -471
  117. package/dist/chunks/chunk-TYZ2ZAYL.js +0 -487
  118. package/dist/chunks/dist-3UCCMCYR.js +0 -2
  119. package/dist/chunks/dist-F5IWZSAY.js +0 -2
  120. package/dist/chunks/host-W2JJ3V3Q.js +0 -2
  121. package/dist/chunks/run-manager-RBWU3EVE.js +0 -2
  122. package/dist/chunks/utils-DJ4ZFJGL.js +0 -2
  123. package/dist/runtime-worker.js +0 -5381
  124. package/dist/types-chunks/review-inbox.d-CTeUIKda.d.ts +0 -225
  125. package/dist/types-chunks/run-manager.d-hm1XgEou.d.ts +0 -94
  126. package/dist/types-chunks/trusted-repl-entry-D0w5M0UZ.d.ts +0 -323
  127. package/dist/types-chunks/types.d-B1l9pWyX.d.ts +0 -146
@@ -0,0 +1,641 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{A as Ne,C as fi,D as mi,E as pi,F as qn,I as Fo,K as gi,O as wi,Q as Ho,_ as ke,c as si,d as ai,da as hi,f as li,fa as yi,ga as vi,h as Bn,ha as ki,i as Kn,m as ci,n as di,y as ui}from"./chunk-QOFFAY5C.js";import{a as Si}from"./chunk-QGWHJIO4.js";import{Db as ni,Eb as ti,Fa as Fn,Ga as Uo,Ia as ei,Ib as ri,Kb as ii,Oa as Hn,Pa as oi}from"./chunk-QZ4B4AWG.js";import{J as Kr,ob as qr,pb as Gr,qb as zr}from"./chunk-K3DQGSQU.js";import{i as Wo}from"./chunk-OT5WHAX4.js";import{A as Qr,D as ve,J as Zr,m as Oo,n as Do,o as _e,q as ro,r as jo,s as Xr,t as Vr,v as Jr,w as Un,x as Yr,y as io}from"./chunk-2GV6MQ4T.js";import{$b as jr,Bc as jn,Cc as No,Fc as Hr,bc as Ur,cc as Fr,fb as _o,fc as Dn,g as Wr,h as Or,ha as Dr,td as Br,vd as re}from"./chunk-4VJMQDTH.js";import{$d as Mo,Ag as ye,Bf as Ir,Ka as fe,La as D,Lc as Ar,Lf as Tr,Ma as me,Na as vr,Nc as Rr,Nf as Pr,Qd as V,Rd as Q,Rf as Lr,Rg as Nr,Sa as kr,Ta as Sr,Ua as Wn,Wa as Me,Wd as Cr,_d as Er,ic as to,k as ue,lg as Mr,mg as _r,qg as On,uc as $r,v as Y,vc as xr,wc as br}from"./chunk-VDGPJQL7.js";import{Ha as no,Ja as Mn,S as Lo,Va as _n,lb as Nn,mb as Pe,nb as Le}from"./chunk-7V2QBZ73.js";import{a}from"./chunk-ONUPGMER.js";import*as Cn from"fs";import*as Io from"path";import*as bn from"fs";import $n from"path";import{randomUUID as xn}from"node:crypto";import i from"chalk";var Bo=["plan","accept-edits","auto","full-access","auto-in-project"],Fa=["plan","accept-edits","auto","full-access"];function Ha(e){return e==="auto"||e==="auto-in-project"}a(Ha,"isAutoMode");function Se(e){return e==="auto-in-project"?"auto":e}a(Se,"canonicalizePermissionMode");function Ba(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto";case"full-access":return"Full Access"}}a(Ba,"permissionModeDisplayName");function xi(e){switch(e){case"plan":return new Set(["bash","write","edit","undo"]);case"accept-edits":return new Set(["bash"]);case"auto":case"full-access":case"auto-in-project":return new Set}}a(xi,"computeConfirmTools");function bi(e){return e!==void 0&&Bo.includes(e)}a(bi,"isPermissionMode");function so(e,o){return bi(e)?Se(e):o===void 0?void 0:Se(o)}a(so,"normalizePermissionMode");import{createHash as Ka,randomUUID as qa}from"node:crypto";import We from"node:fs";import Ai from"node:path";var lo=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"}},Oe=class extends Error{static{a(this,"ProviderSetupInvalidConfigError")}constructor(o,n){super(`KodaX configuration cannot be safely updated: ${o}. ${n}`),this.name="ProviderSetupInvalidConfigError"}},Pi=/^[A-Za-z_][A-Za-z0-9_]*$/,Ga=new Set(["accesskey","apikey","accesstoken","auth","authorization","bearertoken","clientsecret","credential","key","password","privatekey","refreshtoken","secret","sig","signature","token","xapikey"]);function De(){return Object.entries(no).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===Mn?-1:o.name===Mn?1:e.name.localeCompare(o.name))}a(De,"getProviderSetupCatalog");function Li(e={}){let o=e.configPath??D("config.json"),n=e.catalog??De(),t=e.environment??process.env,r=Gn(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=Ni(r.config);if(s)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:s};let l=Ei(e.explicitProvider);if(l){let d=Ti(r.config,l,n);return d&&(!d.requiresCredential||Ii(t,d.apiKeyEnv))?Ri(o,r.revision,l):Ci(o,r.revision,l,d?.apiKeyEnv)}if(!r.exists)return{status:"needs-provider",configPath:o,configRevision:r.revision};let c=Ei(r.config.provider);if(c){let d=Ti(r.config,c,n);return d?!d.requiresCredential||Ii(t,d.apiKeyEnv)?Ri(o,r.revision,c):Ci(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(Li,"inspectProviderSetupReadiness");function Mi(e){let o=e.configPath??D("config.json"),n=e.catalog??De();try{return li(o,()=>{let t=Gn(o);if(!t.config)throw new Oe(o,t.error??"config.json is invalid JSON.");if(t.revision!==e.expectedRevision)throw new lo(o);za(t.config,o);let r=Va(e.choice,n,t.config),s={...t.config,provider:r.provider,model:r.model,...r.customProviders?{customProviders:r.customProviders}:{}};if(Gn(o).revision!==e.expectedRevision)throw new lo(o);return Ja(o,s),{provider:r.provider,model:r.model,apiKeyEnv:r.apiKeyEnv,configPath:o}})}catch(t){throw t instanceof ai?new lo(o):t}}a(Mi,"persistProviderSetupChoice");function _i(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(_i,"providerSetupRestartInstructions");function Ri(e,o,n){return{status:"ready",configPath:e,configRevision:o,...n?{provider:n}:{}}}a(Ri,"ready");function Ci(e,o,n,t){return{status:"needs-credential",configPath:e,configRevision:o,provider:n,...t?{apiKeyEnv:t}:{}}}a(Ci,"needsCredential");function Ei(e){return typeof e=="string"&&e.trim()?e.trim():void 0}a(Ei,"normalizedString");function Ii(e,o){return o!==void 0&&!!e[o]?.trim()}a(Ii,"hasEnvironmentValue");function Ti(e,o,n){let t=n.find(l=>l.name===o);if(t)return{apiKeyEnv:t.apiKeyEnv,requiresCredential:!0};if(Object.entries(no).find(([l])=>l===o)?.[1]?.capabilityProfile.transport==="cli-bridge")return{requiresCredential:!1};let s=Xa(e,o);return s?{apiKeyEnv:s.apiKeyEnv,requiresCredential:!0}:void 0}a(Ti,"resolveConfiguredProvider");function za(e,o){let n=Ni(e);if(n)throw new Oe(o,n)}a(za,"assertCustomProvidersPreservable");function Ni(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=zn(t);if(!r)return"Existing customProviders contains an invalid entry; repair it before running setup.";let s=Wi(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(Ni,"existingCustomProvidersError");function Xa(e,o){let n=e.customProviders;if(Array.isArray(n))for(let t of n){let r=zn(t);if(r?.name===o)return r}}a(Xa,"findValidCustomProvider");function zn(e){if(!Oi(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 _n(l),Pi.test(l.apiKeyEnv)?l:void 0}catch{return}}a(zn,"toValidCustomProvider");function Va(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=Xn(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=zn(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(Va,"normalizeProviderSetupChoice");function Xn(e){let o={name:e.name.trim(),protocol:e.protocol,baseUrl:e.baseUrl.trim(),apiKeyEnv:e.apiKeyEnv.trim(),model:e.model.trim()},n=Wi(o.baseUrl);if(n)throw new Error(n);if(_n(o),!Pi.test(o.apiKeyEnv))throw new Error("Custom provider API key environment variable name is invalid.");return o}a(Xn,"validateProviderSetupCustomMetadata");function Wi(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=>Ga.has(t.toLowerCase().replace(/[-_.]/g,"")));return n===void 0?void 0:`Custom provider Base URL must not contain credential query parameter "${n}".`}a(Wi,"customProviderEndpointError");function Gn(e){if(!We.existsSync(e))return{configPath:e,revision:ao(void 0),exists:!1,config:{}};let o;try{o=We.readFileSync(e,"utf8")}catch(n){return{configPath:e,revision:ao(void 0),exists:!0,error:n instanceof Error?n.message:"config.json cannot be read."}}try{let n=JSON.parse(o);return Oi(n)?{configPath:e,revision:ao(o),exists:!0,config:n}:{configPath:e,revision:ao(o),exists:!0,error:"config.json must contain a JSON object."}}catch(n){return{configPath:e,revision:ao(o),exists:!0,error:n instanceof Error?n.message:"config.json is invalid JSON."}}}a(Gn,"readConfig");function ao(e){return Ka("sha256").update(e??"<missing>","utf8").digest("hex")}a(ao,"revisionFor");function Oi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Oi,"isRecord");function Ja(e,o){let n=Ai.dirname(e);We.mkdirSync(n,{recursive:!0});let t=Ai.join(n,`.config.${process.pid}.${qa()}.tmp`);try{We.writeFileSync(t,`${JSON.stringify(o,null,2)}
3
+ `,{encoding:"utf8",mode:384}),We.renameSync(t,e)}catch(r){throw We.rmSync(t,{force:!0}),r}}a(Ja,"writeConfigAtomically");import{existsSync as Di,mkdirSync as Ya,readFileSync as ji,writeFileSync as Qa}from"node:fs";import je from"node:path";var Za={core:{},mcp:{version:1,servers:{}},extensions:{version:1,paths:[]},a2a:{version:2,agents:{}}},el=["core","mcp","extensions","a2a"];function Vn(e,o){return o==="core"?je.join(e,"config.json"):je.join(e,"integrations",`${o}.json`)}a(Vn,"activePath");function ol(e,o){return o==="core"?je.join(e,"config.example.jsonc"):je.join(e,"integrations",`${o}.example.jsonc`)}a(ol,"templatePath");function nl(e){let o=e.replaceAll("\\","/");return el.flatMap(n=>[{domain:n,kind:"active",path:Vn(e,n),content:`${JSON.stringify(Za[n],null,2)}
4
+ `},{domain:n,kind:"template",path:ol(e,n),content:si(n).replaceAll("~/.kodax",o)}])}a(nl,"configFiles");function co(e,o){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error(`${o} must contain a JSON object.`);return e}a(co,"requireRecord");function tl(e,o){let n=co(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=co(n.agents,"A2A config agents");if(n.server!==void 0&&co(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(tl,"validateA2ADocument");function rl(e,o){let n=ji(e.path,"utf8"),t;try{t=JSON.parse(n)}catch{throw new Error(`${e.domain} config is invalid JSON.`)}e.domain==="core"?co(t,"Core config"):e.domain==="mcp"?Bn(t):e.domain==="extensions"?Kn(t):tl(t,o)}a(rl,"validateActiveFile");function Ui(e,o){if(!Di(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 rl(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(Ui,"existingFileResult");function il(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}a(il,"isAlreadyExists");function sl(e,o){Ya(je.dirname(e.path),{recursive:!0,mode:448});try{return Qa(e.path,e.content,{encoding:"utf8",flag:"wx",mode:384}),{domain:e.domain,kind:e.kind,path:e.path,status:"created"}}catch(n){if(il(n))return Ui(e,o);throw n}}a(sl,"createIfMissing");function al(e){let o=Vn(e,"core");if(Di(o))try{let n=co(JSON.parse(ji(o,"utf8")),"Core config"),t=ci(e);t.mcp.action==="create"&&Bn({version:1,servers:n.mcpServers}),t.extensions.action==="create"&&Kn({version:1,paths:n.extensions})}catch(n){return`Legacy integration configuration is invalid: ${n instanceof Error?n.message:"Legacy integration config is invalid."}`}}a(al,"legacyIntegrationDiagnostic");function Fi(e={}){let o=je.resolve(e.configHome??fe()),n=nl(o),t=n.map(s=>Ui(s,e.validateA2A));if(t.some(s=>s.status==="invalid"))return{configHome:o,files:t};let r=al(o);if(r){let s=Vn(o,"core");return t=t.map(l=>l.path===s?{...l,status:"invalid",diagnostic:r}:l),{configHome:o,files:t}}return di({configHome:o}),{configHome:o,files:n.map(s=>sl(s,e.validateA2A))}}a(Fi,"initializeSetupConfiguration");import $e from"node:path";var Hi=[{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, full-access",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 ll(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(ll,"formatBinding");function Jn(e){let n=Hi.find(t=>t.id===e)?.defaultBindings[0];return n?ll(n):"<unavailable>"}a(Jn,"shortcut");function cl(){return Object.entries(no).filter(([,e])=>e.capabilityProfile.transport==="cli-bridge").map(([e])=>e).sort()}a(cl,"defaultCliBridges");function Yn(e={}){let o=$e.resolve(e.configHome??fe()),n=e.catalog??De(),t=e.cliBridges??cl(),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: ${$e.join(o,"config.json")}`,` Annotated template: ${$e.join(o,"config.example.jsonc")}`,` MCP: ${$e.join(o,"integrations","mcp.json")}`,` Extensions: ${$e.join(o,"integrations","extensions.json")}`,` A2A: ${$e.join(o,"integrations","a2a.json")}`,` Integration templates: ${$e.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 documents the four permission profiles and Auto review.","","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 (Edits and Auto attempt it before a host-boundary decision):"," `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."," Interactive Windows CLI startup verifies the installed generation once. A missing or"," stale generation runs the same setup boundary before the REPL; concurrent startups"," converge through the setup-only lock, and ready state stays silent."," Headless, print-mode, daemon, and SDK startup never trigger UAC automatically."," Ordinary tool calls never run setup, wait on its lock, or repeat an installer."," In the REPL, use `/sandbox` to inspect readiness."," Run `kodax sandbox doctor` directly in a host terminal, not through the Bash tool."," Activate explicitly from a host terminal with `kodax sandbox setup`."," Sandboxed commands inherit the host environment, including normal development identity."," Fixed KodaX/Electron execution-control variables remain blocked."," Restart KodaX (and any persistent daemon) after changing 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|full-access] 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:",` ${Jn("toggleThinking")} Cycle reasoning effort`,` ${Jn("togglePermissionMode")} Cycle permission mode`,` ${Jn("toggleAgentMode")} Cycle AMA/SA`," Tab Accept completion"," Esc Cancel or clear input"].join(`
5
+ `)}a(Yn,"renderSetupGuide");import*as Bi from"node:readline";import Qn from"chalk";async function Ki(e={}){let o=e.catalog??De(),n=Li({...e.configPath?{configPath:e.configPath}:{},catalog:o});if(n.status==="invalid-config")throw new Oe(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??ml({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 ul(r):await dl(r,o,s.slice(8));if(!l)return{status:"cancelled"};let c=fl(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:Mi({configPath:n.configPath,expectedRevision:n.configRevision,catalog:o,choice:l})}:{status:"cancelled"}}finally{t&&r.close?.()}}a(Ki,"runProviderSetupWizard");async function dl(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(dl,"collectBuiltinChoice");async function ul(e){let o=await Ko(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 Ko(e,"API Base URL from the provider documentation, for example https://example.com/v1");if(!t)return;let r=await Ko(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 Ko(e,"Model identifier from the provider documentation, for example provider/model-name");if(s)return{kind:"custom",provider:Xn({name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s})}}a(ul,"collectCustomChoice");async function Ko(e,o){let t=(await e.text(o))?.trim();return t||void 0}a(Ko,"requiredText");function fl(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(fl,"summarizeChoice");function ml(e){let o=Bi.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
+ ${Qn.cyan(r)}
7
+ `),s.forEach((l,c)=>e.output.write(` ${c+1}. ${l.label}
8
+ `));;){let l=await t(Qn.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(Qn.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(ml,"createTerminalProviderSetupInteraction");async function qi(e){let o=e.resolve(e.provider),n=e.model??o.getModel(),t=[];for(let r of e.efforts){if(e.signal?.aborted)break;let s=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:r},{modelOverride:n,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{s=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(l){t.push({effort:r,status:"error",error:l instanceof Error?l.message:String(l)});continue}s?(Sr(e.provider,n,r,"probed",e.now(),e.configHome),t.push({effort:r,status:"rejected"})):t.push({effort:r,status:"accepted"})}return t}a(qi,"probeProviderReasoningEfforts");import Go from"fs";import Vi from"path";import qo from"node:path";import et from"node:os";function Xi(){try{return fe()}catch{return}}a(Xi,"safeGetAgentConfigHome");function Zn(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return vr(e.replace(n,et.homedir()),o)}a(Zn,"resolveShellWriteTarget");function zi(e,o){let n=Xi();if(n&&me(e,n))return"user-kodax";let t=qo.join(qo.resolve(o),".kodax");if(me(e,t))return"project-kodax"}a(zi,"resolveProtectedZone");function wl(){let e=new Set;try{e.add(et.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(wl,"getSystemTempDirs");var hl=new Set(["bash"]),yl={toolNames:hl,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=wl(),d=qo.resolve(o);for(let u of ei(t)){let f;try{f=Zn(u,n)}catch{continue}let m=zi(f,o);if(m){s.has(f)||(s.add(f),r.push({kind:"protected_path",path:u,zone:m}));continue}if(Uo(f,o)){let h=c.some(x=>me(f,x)),S=me(f,d);!h&&!S&&!l.has(f)&&(l.add(f),r.push({kind:"outside_project",path:u}))}}for(let u of Hn(t)){let f;try{f=Zn(u,n)}catch{continue}zi(f,o)||me(f,d)||c.some(S=>me(f,S))||r.push({kind:"shell_redirect_outside",target:u})}return r}},Zm=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([qo.join(et.homedir(),".kodax")]),s=Xi();s&&r.add(s);for(let l of oi(t)){let c=Zn(l,n);if([...r].some(d=>me(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 zo=D("config.json");function Ji(){return Vi.join(process.cwd(),".kodax","config.local.json")}a(Ji,"getProjectConfigFile");function $p(e=process.env){let o=uo(zo);return kl({settings:o.autoMode,autoReview:o.autoReview,env:e})}a($p,"loadAutoModeSettings");function kl(e={}){let o=e.settings??{},n=e.env??{},t=ot(o.classifierModel),r=ot(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),s=ot(e.autoReview?.policy);return{classifierModel:t,classifierModelEnv:r,reviewPolicy:s}}a(kl,"resolveAutoModeSettings");function ot(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(ot,"nonEmptyString");function uo(e){try{if(Go.existsSync(e))return JSON.parse(Go.readFileSync(e,"utf-8"))}catch{}return{}}a(uo,"readJsonFile");function Yi(e,o){Go.mkdirSync(Vi.dirname(e),{recursive:!0}),Go.writeFileSync(e,JSON.stringify(o,null,2))}a(Yi,"writeJsonFile");function nt(e){let o=uo(zo);Yi(zo,{...o,permissionMode:Se(e)})}a(nt,"savePermissionModeUser");function xp(){let e=uo(zo),o=uo(Ji()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(xp,"loadAlwaysAllowTools");function bp(e,o,n=!1){let t=Fn(e,o,n);if(!t)return;let r=Ji(),s=uo(r),l=s.alwaysAllowTools??[];l.includes(t)||Yi(r,{...s,alwaysAllowTools:[...l,t]})}a(bp,"saveAlwaysAllowToolPattern");var tt=["ama","sa"];function Qi(e){let o=tt.indexOf(e);return tt[(o+1)%tt.length]??"ama"}a(Qi,"nextAgentMode");function Sl(e){return[...Wr(e),...Or(e)].sort((o,n)=>o.start-n.start)}a(Sl,"collectSkillReferences");var fo=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 Zi(e){let o=Sl(e);return o.map((n,t)=>({name:n.name,argumentsText:e.slice(n.end,o[t+1]?.start).trim()}))}a(Zi,"parseUserSkillReferences");function Xo(e,o){let n=Zi(e).filter(t=>o(t.name));if(n.length>1)throw new fo(n.map(t=>t.name));return n[0]}a(Xo,"assertSingleKnownUserSkillReference");function Pp(e,o,n){let t=Zi(e);return Xo(e,o)??(n?void 0:t[0])}a(Pp,"findQueueableUserSkillReference");async function Vo(e,o){let n=o.projectRoot??o.workingDirectory,t=V(n);return t.size===0&&(t=await Q(n)),Xo(e,r=>t.has(r))}a(Vo,"resolveUserSkillReference");async function es(e,o,n){let t=n.projectRoot??n.workingDirectory,r=V(t);if(r.size===0&&(r=await Q(t)),!r.has(e))return;let s=await r.loadFull(e),l=await Cr(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(es,"createUserSkillInvocation");async function rt(e,o,n){return es(e,o,n)}a(rt,"prepareUserSkillInvocation");async function Lp(e,o){let n=await Vo(e,o);return n?rt(n.name,n.argumentsText,o):void 0}a(Lp,"prepareUserSkillInvocationFromInput");async function Mp(e,o){let n=await Vo(e,o);return n?es(n.name,n.argumentsText,o):void 0}a(Mp,"resolveUserSkillInvocation");function _p(e,o){return{...e,contextTokenSnapshot:o}}a(_p,"preserveQueuedSkillContextSnapshot");var pe=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}},$l=new pe;var xl="learning-recovery";function jp(e){return e.filter(o=>o.id!==xl)}a(jp,"dismissLearningRecoveryAfterQuerySubmit");function it(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(it,"formatLearningStatus");function Up(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${it(e)} [/learn]`}a(Up,"formatLearningRecoverySummary");import X from"chalk";import{Buffer as rs}from"node:buffer";import{spawn as bl}from"node:child_process";import os from"node:process";var xe="\x1B",Al="\x07",st=`${xe}\\`;function ns(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(ns,"shouldPreferNativeClipboard");function Rl(e,o){let n=rs.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?st:Al,r=`${xe}]52;c;${n}${t}`;return o.TMUX?`${xe}Ptmux;${r.replaceAll(xe,`${xe}${xe}`)}${st}`:o.STY?`${xe}P${r}${st}`:r}a(Rl,"buildOscSequence");async function Jo(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(Jo,"execClipboardCommand");function Cl(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=rs.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Cl,"buildWindowsClipboardCandidates");async function ts(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Cl(e);for(let[r,s,l]of t)try{if(await Jo(r,s,l))return!0}catch{}return!1}case"darwin":return Jo("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,s]of t)try{if(await Jo(r,s,e))return!0}catch{}return!1}default:return!1}}a(ts,"tryNativeClipboard");async function El(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await Jo("tmux",n,e)}catch{return!1}}a(El,"tryTmuxClipboard");async function is(e,o={}){let n=o.env??os.env,t=o.platform??os.platform,r=e.trimEnd(),s=Rl(r,n);if(!r)throw new Error("Nothing to copy.");if(ns(n,t))try{if(await ts(r,n,t))return{path:"native"}}catch{}if(await El(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(s))return{path:"osc52"};if(!ns(n,t))try{if(await ts(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(is,"copyTextToClipboard");var at;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(at||(at={}));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 Xp={[B.Scheduled]:"\u25CB",[B.Validating]:"\u25CC",[B.AwaitingApproval]:"?",[B.Executing]:"\u25CB",[B.Success]:"\u2713",[B.Error]:"\u2717",[B.Cancelled]:"-"},ss;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(ss||(ss={}));var Vp={streamingState:at.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Il="[redacted]",as="[truncated]";function ie(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(ie,"truncateToolReplayText");function Tl(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(Tl,"isSensitiveToolInputKey");function ls(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(ls,"isRecord");function lt(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return ie(e);if(o>=6)return as;if(typeof e=="object"&&e!==null){if(n.has(e))return as;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>lt(r,o+1,n));if(!ls(e))return ie(String(e));let t={};for(let[r,s]of Object.entries(e).slice(0,50))t[r]=Tl(r)?Il:lt(s,o+1,n);return t}return ie(String(e))}a(lt,"sanitizeToolJsonValue");function cs(e){if(!e)return;let o=lt(e);return ls(o)?o:void 0}a(cs,"sanitizeToolInput");function ds(e){if(e!==void 0){if(typeof e=="string")return ie(e);try{return ie(JSON.stringify(e))}catch{return ie(String(e))}}}a(ds,"stringifyToolReplayValue");function og(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(Dl),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(og,"seedToHistoryItem");var Pl="[Thinking]",Ll="[/Thinking]",Ml="Untitled Session",us=50,_l=60,ms="...",ps=["[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:"],gs=[/(?:^|\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:/],Nl=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,Wl="Session ended before the tool completed.";function Ol(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(Ol,"toolCallSeedToHistoryToolStatus");function Dl(e){return{id:e.id,...e.assistantOutputId!==void 0?{assistantOutputId:e.assistantOutputId}:{},name:e.name,status:Ol(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(Dl,"toolCallSeedToHistoryToolCall");function jl(e){let o=-1;for(let n of ps){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of gs){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(jl,"findControlPlaneCutIndex");function Ul(e){return ps.some(o=>e.includes(o))||gs.some(o=>o.test(e))}a(Ul,"hasControlPlaneSignal");function ws(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(ws,"collectTextBlocks");function Qo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Qo,"isRecord");function Fl(e){if(typeof e=="string")return ie(e);if(e===void 0)return"";try{return ds(e)??""}catch{return ie(String(e))}}a(Fl,"toolResultContentToString");function Hl(e){let o=Fl(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(Hl,"inferToolResultSeed");function Bl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!Qo(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,Hl(n));return o}a(Bl,"collectToolResultSeeds");function Kl(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:Wl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:cs(Qo(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(Kl,"buildToolCallSeed");function ql(e){return typeof e=="string"?e:Array.isArray(e)?ws(e).join(`
10
+ `):""}a(ql,"extractAssistantTextOnly");function po(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(po,"pushSeed");function fs(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(fs,"stripLegacyTagBoundaryNewlines");function Gl(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?mo(String(n.command??"")):o==="read"||o==="write"||o==="edit"?mo(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?mo(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?mo(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(Gl,"formatToolUseSummary");function mo(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(mo,"truncateToolHint");function zl(e){if(!e.includes(Pl)||!e.includes(Ll))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(Nl)){let r=t.index??-1,s=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+s.length;po(o,"assistant",fs(e.slice(n,c))),po(o,"thinking",l),n=r+t[0].length}return po(o,"assistant",fs(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(zl,"parseLegacyAssistantContent");function hs(e,o,n=!1){if(typeof e=="string")return n?e.length>0?[{type:"assistant",text:e}]:[]:zl(e);if(!Array.isArray(e))return[];let t=[],r=[],s=[],l=a(()=>{r.length!==0&&(n?t.push({type:"assistant",text:r.join("")}):po(t,"assistant",r.join(`
11
+ `)),r.length=0)},"flushAssistantBuffer"),c=a(()=>{s.length!==0&&(t.push({type:"tool_group",tools:[...s]}),s.length=0)},"flushToolBuffer");for(let d of e)if(!(!Qo(d)||typeof d.type!="string"))switch(d.type){case"text":c(),"text"in d&&r.push(String(d.text));break;case"thinking":if(l(),c(),"thinking"in d){let u=t.at(-1);n&&u?.type==="thinking"?u.text+=String(d.thinking):n?t.push({type:"thinking",text:String(d.thinking)}):po(t,"thinking",String(d.thinking))}break;case"tool_use":if(l(),o){let u=Kl(d,o);u&&s.push(u)}else if(typeof d.name=="string"){let u=Gl({name:d.name,...Qo(d.input)?{input:d.input}:{}});u&&t.push({type:"tool_summary",text:u})}break;case"tool_result":case"redacted_thinking":break;default:break}return c(),l(),t}a(hs,"extractAssistantHistorySeeds");var Xl=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],Vl=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function Jl(e){return Xl.some(o=>e.includes(o))}a(Jl,"isManagedWorkerPrompt");function ys(e){return e.replace(Vl,"").trim()}a(ys,"stripManagedProtocolBlocks");function Yl(e){switch(e.role){case"assistant":{let o=hs(e.content,void 0,e.outputId!==void 0);return e.outputId?o:o.flatMap(n=>{if(n.type!=="assistant")return[n];let t=ys(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]})}case"user":{if(e._source==="sidecar-verifier"){let n=Yo(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=Yo(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=Yo(e.content);return o.trim().length===0||e.inputId===void 0&&Jl(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(Yl,"extractHistorySeedsFromMessageWithoutTimestamp");function vs(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(vs,"withMessageTimestamp");function Ql(e){return vs(Yl(e),e.timestamp).map(o=>o.type==="user"&&e.inputId!==void 0?{...o,inputId:e.inputId}:e.outputId&&(o.type==="assistant"||o.type==="thinking")?{...o,outputId:e.outputId}:o)}a(Ql,"extractHistorySeedsFromMessage");function ng(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=Bl(e[n+1]),s=vs(hs(t.content,r,t.outputId!==void 0),t.timestamp);o.push(...s.map(l=>t.outputId&&l.type==="tool_group"?{...l,tools:l.tools.map(c=>({...c,assistantOutputId:t.outputId}))}:t.outputId&&(l.type==="assistant"||l.type==="thinking")?{...l,outputId:t.outputId}:l.type==="assistant"?{...l,text:ys(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&(t.outputId!==void 0||l.text.trim()!=="...")));continue}o.push(...Ql(t))}}return o}a(ng,"extractHistorySeedsFromMessages");function Yo(e){return typeof e=="string"?e:Array.isArray(e)?ws(e).join(`
12
+ `):""}a(Yo,"extractTextContent");function Zl(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>us?`${o.slice(0,us)}${ms}`:o:Ml}a(Zl,"formatSessionTitle");function ec(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(ec,"isPureToolResultUserMessage");function ct(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=ql(n.content);return t&&t.trim()!=="..."?t:""}if(!ec(n))return""}}return""}a(ct,"extractLastAssistantText");function tg(e,o,n,t){let r=[ct(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let s of r){let l=ks(s);if(l)return l}return""}a(tg,"resolveCompletedAssistantText");function ks(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(ks,"sanitizeUserFacingAssistantText");function rg(e){let o=e.trim();return o.length>0&&ks(o).length===0&&Ul(o)}a(rg,"isControlPlaneOnlyAssistantText");function ig(e){let o=e.find(t=>t.role==="user"),n=o?Yo(o.content):"";return Zl(n)}a(ig,"extractTitle");function sg(e,o=_l){let n=e.replace(/\n/g," "),t=n.length>o?ms:"";return n.slice(0,o)+t}a(sg,"formatMessagePreview");var dt={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=ct(o.messages);if(!n){console.log(X.yellow(`
13
+ No assistant message found to copy.`)),console.log(X.dim("The assistant needs to respond first before you can copy its message."));return}try{await is(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(X.green(`
14
+ Copied to clipboard!`)),console.log(X.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(X.red(`
15
+ Failed to copy to clipboard: ${r}`)),console.log(X.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:a(()=>{console.log(X.bold(`
16
+ /copy - Copy Last Assistant Message
17
+ `)),console.log("Usage:"),console.log(X.cyan(" /copy")+` - Copy the last assistant message to clipboard
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
+ `),console.log("Examples:"),console.log(X.dim(" User: Explain how async/await works")),console.log(X.dim(" AI: [responds with explanation]")),console.log(X.cyan(" /copy")+X.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")};async function Zo(e,o,n){let t=o[0]?.toLowerCase(),r=!t||t==="status",s=null;if(!r&&e==="fallbackProviders"){if(s=["off","clear","none"].includes(t)?null:o.join(",").split(",").map(d=>d.trim()).filter(Boolean),Array.isArray(s)&&!s.length)return{success:!1,message:"No fallback provider ids given"}}else if(!r){if(["on","true","1"].includes(t))s=!0;else if(["off","false","0"].includes(t))s=!1;else if(!["clear","reset"].includes(t))return{success:!1,message:"Expected on, off or clear"}}let l=!1,c;if(!r)try{await n.patch({[e]:s}),l=!0}catch(d){c=String(d)}try{let[d,u]=await Promise.all([n.read(),n.readEffective()]);l=JSON.stringify(d[e]??null)===JSON.stringify(s);let f=u[e],m=s??(e==="fallbackProviders"?[]:!1),h=f.applied&&(r||JSON.stringify(f.value)===JSON.stringify(m));return{success:r||l&&h,message:[`${e}: effective=${JSON.stringify(f.value)}; source=${f.source}; applied=${f.applied}`,`Host default=${JSON.stringify(d[e]??null)}`,...r?[]:[l?"Host default saved":`Host default save failed: ${c}`,h?"Host applied":"Host desired value not applied"],...c&&l?[`Update reported an error: ${c}; state confirmed by Host queries`]:[]].join(`
21
+ `)}}catch(d){return{success:!1,message:`${l?"Host default saved; ":c?`Update failed: ${c}; saved state unconfirmed; `:""}Effective state unavailable: ${String(d)}`}}}a(Zo,"hostExecutionConfigCommand");async function Ue(e,o,n,t){let r=[],s=!0;try{await e.config.patch(o),r.push("Host default saved")}catch(l){try{let c=await e.config.read();Object.entries(o).every(([u,f])=>JSON.stringify(c[u]??null)===JSON.stringify(f))?r.push(`Host default saved (confirmed by Host query after error: ${String(l)})`):(s=!1,r.push(`Host default save failed: ${String(l)}`))}catch(c){s=!1,r.push(`Host default saved state unconfirmed: ${String(l)}; read failed: ${String(c)}`)}}try{await n(),r.push("Session applied")}catch(l){s=!1,r.push(`Session apply failed: ${String(l)}`)}return{success:s,message:`[${t}] ${r.join("; ")}`}}a(Ue,"saveAndApplyHostSetting");async function en(e,o,n){try{let t=await o.catalog.reasoningEfforts({provider:n.provider,model:n.model});if(!e.length)return{success:!0,message:`Reasoning effort: ${n.hostSettings?.effort??n.effort??"auto"}
22
+ Available: ${t.join(", ")}`};if(e.length!==1)return{success:!1,message:"Reasoning effort accepts exactly one value"};let r={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"},s=e[0].toLowerCase(),l=Lo(r[s]??s),c=["auto","unset","clear","reset"].includes(l)?void 0:l;if(c==="none"&&!t.includes("off"))return{success:!1,message:`${n.provider}/${n.model??"(default)"} does not support disabling reasoning`};let d=c==="none"?"off":"auto";return await Ue(o,{effort:c??null,reasoningMode:d,thinking:d!=="off"},async()=>{if(!o.setEffort||!o.setReasoningMode)throw new Error("Session effort control unavailable");await o.setEffort(c),await o.setReasoningMode(d)},`Reasoning effort: ${c??"auto"}`)}catch(t){return{success:!1,message:`Reasoning effort failed: ${String(t)}`}}}a(en,"hostEffortCommand");async function Ss(e,o,n){try{let t=await o.catalog.providers();if(!e.length)return{success:!0,message:t.map(u=>`${u.name}${u.name===n.provider?" *":""} [${u.configured?"configured":"not configured"}]
23
+ ${u.models.join(`
24
+ `)}`).join(`
25
+ `)};let r=e[0].trim(),s=r.indexOf("/"),l=s===0?n.provider:s<0?r:r.slice(0,s),c=s<0?void 0:r.slice(s+1),d=t.find(u=>u.name===l);return d?s>=0&&(!c||!d.models.includes(c))?{success:!1,message:`Unknown Host model: ${c}. Available: ${d.models.join(", ")}`}:await Ue(o,{...s===0?{}:{provider:l},model:c??null},async()=>{if(!o.switchProvider)throw new Error("Session model control unavailable");await o.switchProvider(l,c)},`Model: ${l}${c?`/${c}`:""}`):{success:!1,message:`Unknown Host provider: ${l}`}}catch(t){return{success:!1,message:`Host model query failed: ${String(t)}`}}}a(Ss,"hostModelCommand");import A from"chalk";function R(e=""){console.log(e)}a(R,"writeOutput");function ut(){R(A.cyan(`
26
+ /learn - Inspect and control learned capabilities`)),R(A.dim(" /learn Open the Learning Center")),R(A.dim(" /learn list [search] List learned capabilities")),R(A.dim(" /learn ready [search] List capabilities ready for review/control")),R(A.dim(" /learn pending [search] Compatibility alias for `/learn ready`")),R(A.dim(" /learn show <name|slug> Inspect a capability")),R(A.dim(" /learn trust|reject|disable|rollback <name|slug>")),R(A.dim(" /learn promote <name|slug|capability-id> [--scope user]")),R(A.dim(" /learn promote --help Explain formal user-catalog promotion")),R(A.dim(" Compatibility: diff, approve and reject remain accepted.")),R(A.dim(` /learn help
27
+ `))}a(ut,"printHelp");function ge(e,o){return{...o===void 0?{}:{target:o},scope:"user",help:!1,error:e}}a(ge,"invalidPromoteInvocation");function oc(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 ge("duplicate --scope option",e);let c=o[r+1];if(!c)return ge("missing value for --scope",e);n=c,t=!0,r+=1;continue}if(s.startsWith("--scope=")){if(t)return ge("duplicate --scope option",e);if(n=s.slice(8),!n)return ge("missing value for --scope",e);t=!0;continue}let l=s.startsWith("-")?`unknown promote option: ${s}`:`unexpected promote argument: ${s}`;return ge(l,e)}return n!=="user"?ge(`unsupported promote scope: ${n}; only user is supported`,e):{target:e,scope:"user",help:!1}}a(oc,"parsePromoteOptions");function $s(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("-")?ge(`unknown promote option: ${n}`):oc(n,o.slice(1)):ge("missing learned Skill name, slug, or capability ID")}a($s,"parseLearnPromoteInvocation");function on(){R(A.cyan(`
28
+ /learn promote - Move one learned Skill into the formal user catalog`)),R(A.bold(`
29
+ Usage:`)),R(A.dim(" /learn promote <name|slug|capability-id> [--scope user]")),R(A.dim(" /learn promote --help")),R(A.dim(" /help learn promote")),R(A.bold(`
30
+ What it does:`)),R(A.dim(" Promote is an explicit ownership transfer, not automatic canary activation.")),R(A.dim(" Automatic evidence: testing -> active_learned inside the project Learned Area.")),R(A.dim(" Explicit promote: reviewed ready or active_learned -> promoted_user.")),R(A.dim(" The exact fingerprinted revision is copied to the configured KodaX")),R(A.dim(" user Skill directory (normally ~/.kodax/skills/<slug>/SKILL.md).")),R(A.dim(" Promotion never overwrites different formal Skill content.")),R(A.bold(`
31
+ Before promoting:`)),R(A.dim(" Use /learn show <name|slug> to inspect the exact revision and lifecycle.")),R(A.dim(" The Learning Center offers this action for active_learned Skills.")),R(A.bold(`
32
+ Examples:`)),R(A.dim(" /learn promote normalize-release-notes")),R(A.dim(` /learn promote normalize-release-notes --scope user
33
+ `))}a(on,"printPromoteHelp");async function nc(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?(R(A.cyan(`
34
+ [learn] Learning Center`)),R(A.dim(` Learning Center has no learned capabilities.
35
+ `)),!0):(await o.openLearningCenter(),!0);if(t===""||t==="list"||t==="ready"||t==="pending"){t==="pending"&&R(A.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});R(A.cyan(`
36
+ [learn] Learning Center`)),d.items.length===0&&R(A.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 m=(u.get(f.slug)??0)>1?` ${A.dim(`id=${f.capabilityId}`)}`:"";R(` ${A.cyan(f.slug)}${m} ${A.dim(`[${f.carrier}/${f.lifecycle}]`)} ${f.displayName}`)}return R(),!0}let r=t==="promote"?$s(e):void 0,s=r?.target??e[1],l=s?await tc(n,s):void 0;if((t==="show"||t==="diff")&&l)return o.openLearningCenter?await o.openLearningCenter(l):R(`${JSON.stringify(await n.get(l),null,2)}
37
+ `),!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 R(t==="promote"?A.green(`
38
+ [learn] promoted ${c} to the formal user Skill catalog.
39
+ `):A.dim(`
40
+ [learn] ${t} accepted for ${c}.
41
+ `)),!0}a(nc,"runLearningCenterCommand");async function tc(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(tc,"resolveLearningCapabilityId");var ft={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=(e[0]??"pending").toLowerCase();if(t==="help"||t==="-h"||t==="--help"){e[1]?.toLowerCase()==="promote"?on():ut();return}if(t==="promote"){let r=$s(e);if(r.help){on();return}if(r.error){R(A.yellow(`
42
+ [learn] ${r.error}.
43
+ `)),on();return}}if(!await nc(e,n)){if(!n.learning){R(A.yellow(`
44
+ [learn] Learning Center controls are unavailable in this runtime.
45
+ `));return}R(A.yellow(`
46
+ [learn] unknown subcommand or missing target: ${t}
47
+ `)),ut()}},"handler"),detailedHelp:a((e=[])=>{e[0]?.toLowerCase()==="promote"?on():ut()},"detailedHelp")};import*as se from"node:fs";import*as Z from"node:path";import{spawn as rc}from"node:child_process";import p from"chalk";var As=900*1e3,Fe=new Map,Rs=[["/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 ic(e){let o=await e.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]});if(console.log(p.cyan(`
48
+ [memory] accepted Memory`)),o.length===0)console.log(p.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(` ${p.cyan(`[memory:${r+1}]`)} ${s.title??s.id}`),console.log(p.dim(` ref: ${Mo(s)}`)),console.log(` ${to(l.body).body.trim().replace(/\s+/g," ").slice(0,360)}`)}t.length<o.length&&console.log(p.dim(` Showing ${t.length} of ${o.length}.`))}let n=[...new Set(o.flatMap(t=>t.storageUri===void 0?[]:[Z.dirname(t.storageUri)]))];console.log(p.dim(`
49
+ ${o.length} accepted across ${n.length} storage scope${n.length===1?"":"s"}`));for(let t of n)console.log(p.dim(` storage: ${t}`));console.log()}a(ic,"listAcceptedMemory");function sc(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(sc,"parseRememberCommand");function xs(e){return e instanceof Error?e.message:String(e)}a(xs,"formatMemoryError");function ac(e){let o;try{o=se.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.log(p.red(`[memory] failed to read memory directory ${e}: ${xs(t)}`)),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=Z.join(e,t.name);try{let s=se.readFileSync(r,"utf-8"),l=se.statSync(r).mtimeMs,c=to(s).frontmatter,d=c.name!==void 0||c.description!==void 0||c.type!==void 0,u=Z.basename(t.name,".md");n.push({filename:t.name,absPath:r,mtimeMs:l,title:c.name?.trim()||u,description:c.description?.trim()||u,parseOk:d})}catch(s){console.log(p.red(`[memory] failed to read ${r}: ${xs(s)}`))}}return n}a(ac,"readTopicFiles");async function lc(e,o){console.log(p.cyan(`
50
+ [memory] per-project memory directory`)),console.log(p.dim(` ${e}`));let n=ac(e),t=n.filter(l=>!l.parseOk);console.log(p.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,s="";try{s=se.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(p.yellow(`
51
+ Derived MEMORY.md index does not exist.`)),n.length>0?console.log(p.dim(" Run `/memory rebuild` to seed it from existing topic files.")):console.log(p.dim(" This is not evidence that accepted Memory is missing; use `/memory list`.")),console.log();return}console.log(p.cyan(`
52
+ --- MEMORY.md ---`)),s.trim().length===0?console.log(p.dim(" (empty)")):console.log(s.trimEnd()),console.log(p.cyan(`--- end ---
53
+ `))}a(lc,"listStorageIndex");async function cc(e){let o=e.callbacks.createKodaXOptions?.();await lc(e.memoryDir,e.entrypointPath);let n=e.context.lineage?.entries??[],t=0,r=0,s=0;for(let S of n)S.type==="memory_outcome_digest"?t+=1:S.type==="memory_review_receipt"?r+=1:S.type==="client_notice"&&S.source==="memory-agent"&&(s+=1);console.log(p.cyan(`
54
+ [memory] this-session pipeline`)),console.log(p.dim(` outcome digests : ${t}`)),console.log(p.dim(` review receipts : ${r}`)),console.log(p.dim(` client notices : ${s}`));let l=await e.plane.listReviews(),c=l.length,d=Es(l),u=l[0];console.log(p.cyan(`
55
+ [memory] pending episode reviews (current project, all sessions)`)),console.log(p.dim(` pending: ${c}`)),console.log(p.dim(` automatic queue: ${d.automatic}`)),console.log(p.dim(` needs attention: ${d.attention}`)),console.log(p.dim(` unknown state: ${d.unknown}`)),u!==void 0&&console.log(p.dim(` oldest pending age: ${Cs(u.createdAt,Date.now())}`));let f,m=!1;if(o?.learningReviewer!==void 0||o?.memoryReviewer!==void 0)f="configured (custom reviewer bound)";else{let S=e.plane.reviewerProviderConfigured();f=S?"production reviewer auto-installed at session start":"MISSING \u2014 Host reviewer provider is not configured; episode review cannot run",m=!S}console.log(p.cyan(`
56
+ [memory] reviewer`)),console.log(m?p.yellow(` ${f}`):p.dim(` ${f}`));let h=[];if(c>0?(d.automatic>0&&h.push(t===0?"review segment: pending reviews from earlier sessions are waiting":r===0?"review segment: digests captured but no review ever completed; the backlog is growing":"review segment: pending reviews are still waiting"),d.attention>0&&h.push(`review segment: ${d.attention} job(s) need operator attention and cannot be processed by review-drain`),d.unknown>0&&h.push(`review segment: ${d.unknown} job(s) have missing or invalid state and require repair`)):t===0?h.push("capture segment: no memory outcome digests recorded in this session yet"):r===0&&h.push("review segment: digests captured but no review completed in this session"),m&&h.push("reviewer missing: configure a provider (`kodax setup`) to unblock episode review"),h.length>0){console.log();for(let S of h)console.log(p.yellow(` ! ${S}`));d.automatic>0&&console.log(p.dim(" Run `kodax memory review-drain` to process the backlog in the foreground."))}console.log()}a(cc,"statusMemory");function Cs(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(Cs,"formatPendingAge");function Es(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(Es,"countReviewStates");function dc(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(dc,"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){let n=dc(o);if(n===void 0){console.log(p.yellow(`
57
+ [memory] review list limit must be an integer from 1 to 200.
58
+ `));return}let t=await e.plane.listReviews(),r=t.slice(0,n),s=Es(t);console.log(p.cyan(`
59
+ [memory] episode-review jobs`)),console.log(p.dim(` showing ${r.length} of ${t.length} (oldest first)`)),console.log(p.dim(` automatic queue: ${s.automatic}, needs attention: ${s.attention}, unknown state: ${s.unknown}`)),r.length===0&&console.log(p.dim(" (none)"));for(let l of r){let c=l.jobId?.slice(0,12)??`legacy:${l.reviewKey}`;console.log(` ${p.cyan(c)} ${p.dim(`[${l.status}]`)} ${l.reviewKey}`),console.log(p.dim(` age=${Cs(l.createdAt,Date.now())}, session=${l.ownerSessionRef}, attempts: ${uc(l)}`)),l.nextAttemptAt!==void 0&&console.log(p.dim(` next provider attempt: ${l.nextAttemptAt}`)),l.nextApplyAttemptAt!==void 0&&console.log(p.dim(` next apply attempt: ${l.nextApplyAttemptAt}`)),l.nextCompletionAttemptAt!==void 0&&console.log(p.dim(` next completion attempt: ${l.nextCompletionAttemptAt}`)),l.lastError!==void 0&&console.log(p.yellow(` last error: ${l.lastError.slice(0,160)}`))}s.automatic>0&&console.log(p.dim("\n Process the automatic queue with `kodax memory review-drain [--max N]`.")),s.attention>0&&console.log(p.yellow(" Attention jobs require operator intervention and are not auto-drained.")),s.unknown>0&&console.log(p.yellow(" Unknown-state jobs require persisted-state repair before draining.")),console.log()}a(fc,"listEpisodeReviews");async function mc(e){let o=await e.rebuild();if(o.status==="missing-dir"){console.log(p.yellow(`
60
+ [memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log(p.dim(` ${o.memoryRoot}`)),console.log(p.dim(" This repairs a derived index only; use `/memory list` for accepted Memory.\n"));return}if(o.status==="no-topics"){console.log(p.yellow(`
61
+ [memory] no topic files found \u2014 nothing to rebuild.`)),console.log(p.dim(` ${o.memoryRoot}
62
+ `));return}if(console.log(p.green(`
63
+ [memory] rebuilt MEMORY.md with ${o.entryCount} entries (newest first).`)),console.log(p.dim(` ${o.entrypointPath}`)),o.malformedFiles.length>0){console.log(p.yellow(` ${o.malformedFiles.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let n of o.malformedFiles)console.log(p.dim(` - ${n}`));console.log(p.dim(` Tip: add \`---
64
+ name: ...
65
+ description: ...
66
+ type: ...
67
+ ---\` at the top of those files.`))}for(let n of o.warnings)console.log(p.red(` [memory] ${n}`));console.log()}a(mc,"runRebuild");async function pc(e,o,n){let t=e.controller,r=await t.listRefs({kinds:["memdir"],lifecycles:["active","trusted"]}),s=o===void 0?void 0:await pt(t,o,!0);if(o!==void 0&&s===void 0){console.log(p.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(f=>f.storageUri===void 0?[]:[f.storageUri]))],c=[...new Set(l.map(f=>Z.dirname(f)))];if(s===void 0&&c.length>1){console.log(p.yellow(`
68
+ [memory] accepted Memory spans multiple scopes; choose one item to open:`));for(let f=0;f<r.length;f+=1)console.log(p.dim(` /memory open memory:${f+1} ${r[f]?.title??r[f]?.id}`));console.log();return}let d=s?.storageUri??(c[0]===void 0?e.memoryDir:se.existsSync(Z.join(c[0],"MEMORY.md"))?Z.join(c[0],"MEMORY.md"):c[0]),u;try{u=await e.plane.ensureOpenTarget(d)}catch(f){console.log(p.red(`
69
+ [memory] ${f instanceof Error?f.message:String(f)}
70
+ `));return}n!==void 0?await n(u):await gc(u),console.log(p.green(`
71
+ [memory] opened in your external editor/file browser.`)),console.log(p.dim(` ${u}
72
+ `))}a(pc,"openMemory");async function gc(e){let{executable:o,args:n}=wc(process.platform,e);await new Promise((t,r)=>{let s=rc(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(gc,"launchExternalPath");function wc(e,o){return e==="win32"?{executable:Z.join(process.env.SystemRoot??"C:\\Windows","explorer.exe"),args:[o]}:{executable:e==="darwin"?"open":"xdg-open",args:[o]}}a(wc,"externalOpenInvocation");function hc(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(hc,"proposalLabel");function bs(e){if(console.log(p.cyan(`
73
+ [memory] decisions that need you`)),e.length===0){console.log(p.dim(` (none)
74
+ `));return}for(let o=0;o<e.length;o+=1){let n=e[o];if(console.log(` ${p.cyan(`[decision:${o+1}]`)} ${n.preview.summary}`),console.log(p.dim(` ${hc(n)}; risk=${n.risk}`)),console.log(p.dim(` why: ${n.rationale}`)),n.preview.diff!==void 0){let t=to(n.preview.diff).body.trim().replace(/\s+/g," ");t.length>0&&console.log(` proposed: ${t.slice(0,360)}`)}console.log(p.dim(` ref: ${n.id}`))}console.log(p.dim(`
75
+ Use /memory show decision:<number>, then approve or reject the exact decision ref shown.
76
+ `))}a(bs,"printMemoryInbox");function yc(e){if(console.log(p.cyan(`
77
+ [memory] ${e.id}`)),console.log(p.dim(` action : ${e.action}`)),console.log(p.dim(` risk : ${e.risk}`)),console.log(p.dim(` reason : ${e.rationale}`)),console.log(p.dim(` summary: ${e.preview.summary}`)),e.preview.changedPaths.length>0){console.log(p.dim(" changed paths:"));for(let o of e.preview.changedPaths)console.log(p.dim(` - ${o}`))}if(e.preview.warnings.length>0){console.log(p.yellow(" warnings:"));for(let o of e.preview.warnings)console.log(p.yellow(` - ${o}`))}e.preview.diff!==void 0&&e.preview.diff.trim().length>0&&(console.log(p.cyan(`
78
+ --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(yc,"printMemoryProposal");function vc(e){if(!e.applied){console.log(p.yellow(`
79
+ [memory] ${e.proposalId} was not applied.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
80
+ `));return}console.log(p.green(`
81
+ [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(vc,"printApplyResult");function kc(e){if(!e.rejected){console.log(p.yellow(`
82
+ [memory] ${e.proposalId} was not rejected.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
83
+ `));return}console.log(p.dim(`
84
+ [memory] rejected ${e.proposalId}.`)),e.review!==void 0&&console.log(p.dim(` review actions: ${e.review.actions.length}`));for(let o of e.warnings)console.log(p.dim(` review warning: ${o}`));console.log()}a(kc,"printRejectResult");function mt(){console.log(p.cyan(`
85
+ /memory - View and manage durable Memory`));for(let[e,o]of Rs)console.log(p.dim(` ${e.padEnd(48)}${o}`));console.log()}a(mt,"printHelp");function Sc(e){if(e.status==="remembered"){console.log(p.green(`
86
+ [memory] Memory remembered: ${e.changedRefIds.join(", ")}.
87
+ `));return}if(e.status==="updated"){console.log(p.green(`
88
+ [memory] Memory updated: ${e.changedRefIds.join(", ")}.
89
+ `));return}if(e.status==="already_known"){console.log(p.dim(`
90
+ [memory] Already remembered: ${e.changedRefIds.join(", ")}.
91
+ `));return}if(e.status==="needs_review"&&e.proposalIds.length>0){console.log(p.yellow(`
92
+ [memory] This claim conflicts with existing Memory and needs your decision: ${e.proposalIds.join(", ")}.
93
+ Use \`/memory decisions\` to inspect it, then approve or reject it.
94
+ `));return}console.log(p.yellow(`
95
+ [memory] Memory was not changed: ${e.reason??e.status}.
96
+ `))}a(Sc,"printRememberResult");async function pt(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=>Mo(s)===o||s.id===o)}a(pt,"resolveAcceptedRef");async function Is(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(Is,"resolveProposal");function $c(){console.log(p.bold(`
97
+ /memory - View and manage durable Memory
98
+ `)),console.log("Usage:");for(let[e,o]of Rs)console.log(p.cyan(` ${e.padEnd(48)}`)+p.dim(o));console.log("Description:"),console.log(p.dim(` Normal use is conversational: ask KodaX what it remembers, tell it
99
+ to remember something, or ask it to forget one item. Slash commands
100
+ are the explicit inspection and recovery escape hatch. MEMORY.md is
101
+ a derived storage index, not the user-visible source of truth.
102
+ `)),console.log("Notes:"),console.log(p.dim(" - Ordinary explicit remember/forget operations apply immediately.")),console.log(p.dim(" - Conflicts become readable decisions; broad requests ask for clarification.")),console.log(p.dim(` - Restricted content is rejected, and background learning runs automatically.
103
+ `))}a($c,"printDetailedHelp");function xc(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(xc,"resolveCwd");async function bc(e,o){let n=xc(e),r=o.createKodaXOptions?.()?.context?.executionCwd??e.runtimeInfo?.executionCwd??n,s=await o.memory?.(r);if(s!==void 0)return{cwd:n,memoryDir:s.memoryRoot,entrypointPath:s.entrypointPath,controller:s.controller,plane:s,context:e,callbacks:o}}a(bc,"createMemoryCommandRuntime");async function Ac(e,o){let n=sc(o);if(n.error!==void 0||n.statement.length===0){console.log(p.yellow(`
104
+ [memory] ${n.error??"missing text to remember"}.
105
+ `));return}if(n.claimKey===void 0){console.log(p.yellow("\n[memory] `/memory remember` requires --key so future corrections and conflicts address the same claim.\n"));return}Sc(await e.controller.remember({statement:n.statement,claimKind:n.claimKind,claimKey:n.claimKey,evidenceRef:`user-command:${e.context.sessionId??"interactive"}`}))}a(Ac,"runRememberCommand");async function Rc(e,o){let n=await pt(e.controller,o);if(n===void 0||o===void 0){console.log(p.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?p.green(`
106
+ [memory] Memory forgotten: ${n.title??n.id}.
107
+ `):p.yellow(`
108
+ [memory] Memory was not forgotten: ${t.warnings[0]??n.id}.
109
+ `))}a(Rc,"runForgetCommand");async function Cc(e,o){if(o===void 0){console.log(p.yellow(`
110
+ [memory] choose memory:<number>, decision:<number>, or an exact ref.
111
+ `));return}let n=await pt(e.controller,o,!0);if(n!==void 0){let r=await e.controller.readRef(n);console.log(p.cyan(`
112
+ [memory] ${n.title??n.id}`)),console.log(p.dim(` ref: ${Mo(n)}`)),console.log(`
113
+ ${to(r.body).body.trim()}
114
+ `);return}let t=await Is(e.controller,o,!0);if(t===void 0){console.log(p.yellow(`
115
+ [memory] Memory or decision not found: ${o}
116
+ `));return}yc(t),Tc(e.cwd,t)}a(Cc,"runShowCommand");async function Ec(e,o,n,t){let r=await Is(e.controller,n);if(r===void 0){console.log(p.yellow("\n[memory] use the exact decision ref from `/memory show`; numbered aliases are read-only.\n"));return}let s=Pc(e.cwd,r.id);if(s===void 0){console.log(p.yellow(`
117
+ [memory] preview required before ${o}: /memory show ${n??r.id}
118
+ `));return}if(Fe.delete(wt(e.cwd,r.id)),o==="approve"){vc(await e.controller.approveProposal(r.id,s.fingerprints,s.revision));return}kc(await e.controller.rejectProposal(r.id,t,s.revision))}a(Ec,"runDecisionCommand");async function Ic(e,o,n){if(o==="help"||o==="--help"||o==="-h")return mt();if(o==="list")return ic(e.controller);if(o==="remember")return Ac(e,n.slice(1));if(o==="forget")return Rc(e,n[1]);if(o==="doctor"||o==="status")return cc(e);if(o==="reviews")return fc(e,n[1]);if(o==="pending"||o==="inbox")return console.log(p.dim("[memory] `pending` is a compatibility alias for /memory decisions.")),bs(await e.controller.listInbox());if(o==="decisions"||o==="proposals")return bs(await e.controller.listInbox());if(o==="show")return Cc(e,n[1]);if(o==="approve"||o==="reject")return Ec(e,o,n[1],n.slice(2).join(" ").trim());if(o==="rebuild")return mc(e.plane);if(o==="open")return pc(e,n[1],e.callbacks.openExternalPath);console.log(p.yellow(`
119
+ [memory] unknown subcommand: ${o}`)),mt()}a(Ic,"runMemorySubcommand");var gt={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)=>{let t=(e[0]??"list").toLowerCase();if(t==="help"||t==="--help"||t==="-h"){mt();return}let r=await bc(o,n);if(r===void 0){console.log(p.yellow(`
120
+ [memory] Memory controls are unavailable in this runtime.
121
+ `));return}await Ic(r,t,e)},"handler"),detailedHelp:$c};function wt(e,o){return`${e}\0${o}`}a(wt,"previewCacheKey");function Tc(e,o){Lc(Date.now()),Fe.set(wt(e,o.id),{fingerprints:o.expectedFingerprints,revision:Er(o),createdAtMs:Date.now()})}a(Tc,"cacheProposalPreview");function Pc(e,o){let n=wt(e,o),t=Fe.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>As){Fe.delete(n);return}return t}}a(Pc,"readCachedProposalPreview");function Lc(e){for(let[o,n]of Fe)e-n.createdAtMs>As&&Fe.delete(o)}a(Lc,"pruneExpiredPreviewFingerprints");import C from"chalk";function Ts(){console.log(`
122
+ ${C.bold("/goal")} \u2014 persistent session goal
123
+
124
+ ${C.bold("Subcommands:")}
125
+ ${C.cyan("/goal <objective> [--tokens N]")} Create a new persistent goal.
126
+ ${C.cyan("/goal status")} Show current goal (default).
127
+ ${C.cyan("/goal pause")} Pause an active goal.
128
+ ${C.cyan("/goal resume")} Resume a paused goal.
129
+ ${C.cyan("/goal clear")} Clear the current goal.
130
+ ${C.cyan("/goal help")} Show this help.
131
+
132
+ ${C.bold("Notes:")}
133
+ - The agent auto-continues toward an active goal on every Worker turn end.
134
+ - Token budget is optional; set it only when you want a hard ceiling.
135
+ - update_goal({complete}) is verifier-gated; the agent cannot
136
+ self-declare done without runtime confirmation.
137
+ `.trim())}a(Ts,"printHelp");function Mc(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(!Dn(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(!Dn(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(Mc,"parseCreateArgs");function _c(e){if(!e)return C.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${C.bold("Goal:")} ${e.objective}`,`${C.bold("Status:")} ${e.status}`,`${C.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${C.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${C.bold("Token budget:")} ${C.dim("none")}`);return o.push(`${C.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${C.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
138
+ `)}a(_c,"renderStatus");async function go(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=_r(e.lineage,n,t),await o.saveSession()}a(go,"persist");async function wo(e,o){return o.goal?o.goal.read(e.sessionId):e.lineage?Mr(e.lineage):null}a(wo,"readGoalState");async function nn(e,o){let n=await o.refreshSessionLineage?.();n&&(e.lineage=n)}a(nn,"refreshBoundLineage");async function Nc(e,o,n){let t=n.goal;if(!t&&!o.lineage){console.log(C.red("[/goal] no active session lineage"));return}let r=await wo(o,n);if(r&&r.status!=="complete"){console.log(C.yellow(`[/goal] a goal is already active (status: ${r.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let s=Mc(e);if("error"in s){console.log(C.red(`[/goal] ${s.error}`));return}try{if(t){r&&r.status==="complete"&&await t.clear(o.sessionId);let c=await t.create({sessionId:o.sessionId,objective:s.objective,...s.tokenBudget!==null?{tokenBudget:s.tokenBudget}:{}});await nn(o,n),console.log(C.green(`[/goal] created: "${c.objective}"`)),c.tokenBudget!==null&&console.log(C.dim(` budget: ${c.tokenBudget} tokens`));return}r&&r.status==="complete"&&await go(o,n,null,"cleared");let l=jr(s.objective,s.tokenBudget);await go(o,n,l,"created"),console.log(C.green(`[/goal] created: "${l.objective}"`)),l.tokenBudget!==null&&console.log(C.dim(` budget: ${l.tokenBudget} tokens`))}catch(l){let c=l instanceof Error?l.message:String(l);console.log(C.red(`[/goal] ${c}`))}}a(Nc,"doCreate");async function Wc(e,o){if(!o.goal&&!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=await wo(e,o);console.log(_c(n))}a(Wc,"doStatus");async function Oc(e,o){if(!o.goal&&!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=await wo(e,o);if(!n){console.log(C.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(C.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}if(o.goal){await o.goal.pause(e.sessionId),await nn(e,o),console.log(C.green("[/goal] paused"));return}let t=Ur(n);await go(e,o,t,"paused"),console.log(C.green("[/goal] paused"))}a(Oc,"doPause");async function Dc(e,o){if(!o.goal&&!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=await wo(e,o);if(!n){console.log(C.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(C.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}if(o.goal){await o.goal.resume(e.sessionId),await nn(e,o),console.log(C.green("[/goal] resumed"));return}let t=Fr(n);await go(e,o,t,"resumed"),console.log(C.green("[/goal] resumed"))}a(Dc,"doResume");async function jc(e,o){if(!o.goal&&!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}if(!await wo(e,o)){console.log(C.yellow("[/goal] no goal to clear"));return}if(o.goal){await o.goal.clear(e.sessionId),await nn(e,o),console.log(C.green("[/goal] cleared"));return}await go(e,o,null,"cleared"),console.log(C.green("[/goal] cleared"))}a(jc,"doClear");var Ps={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"){Ts();return}if(t==="status"){await Wc(o,n);return}if(t==="pause"){await Oc(o,n);return}if(t==="resume"){await Dc(o,n);return}if(t==="clear"){await jc(o,n);return}await Nc(e,o,n)},"handler"),detailedHelp:Ts};import{existsSync as sa}from"node:fs";import{join as Ee}from"node:path";import w from"chalk";import vt from"path";import{createHash as qc}from"crypto";import{execFile as Uc}from"child_process";import Be from"fs";import N from"path";import{promisify as Fc}from"util";var Hc=Fc(Uc);function q(e){if(!(!e||!e.trim()))return N.resolve(e).replace(/\\/g,"/")}a(q,"normalizePath");async function He(e,o,n=5e3){try{await Me({cwd:e});let{stdout:t}=await Hc("git",o,{cwd:e,windowsHide:!0,maxBuffer:1024*1024,timeout:n}),r=t.trim();return r||void 0}catch{return}}a(He,"gitStdout");function Ms(e){let o=N.resolve(e);for(;;){let n=N.join(o,".git");try{let r=Be.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(Be.readFileSync(n,"utf8"));if(s?.[1]){let l=N.resolve(o,s[1].trim()),c;try{c=N.resolve(l,Be.readFileSync(N.join(l,"commondir"),"utf8").trim())}catch{}let d=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:ht(c)??d,workspaceRoot:d}}}}catch{}let t=N.dirname(o);if(t===o)return;o=t}}a(Ms,"filesystemWorkspaceIdentity");function Ls(e){let o=N.resolve(e).replace(/\\/g,"/");return process.platform==="win32"||process.platform==="darwin"?o.toLowerCase():o}a(Ls,"comparablePath");function Ng(e){let o=N.join(N.resolve(e),".git","worktrees"),n;try{n=Be.readdirSync(o,{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return[];throw r}let t=Ls(e);return n.flatMap(r=>{if(!r.isDirectory())return[];try{let s=N.join(o,r.name),l=Be.readFileSync(N.join(s,"gitdir"),"utf8").trim();if(!l)return[];let c=N.isAbsolute(l)?l:N.resolve(s,l),d=N.dirname(c),u=Ms(d);return u!==void 0&&Ls(u.canonicalRoot)===t?[u.workspaceRoot]:[]}catch{return[]}})}a(Ng,"discoverLinkedWorkspaceRoots");function Bc(e){let[o,n]=e?.split(/\r?\n/).map(s=>s.trim())??[],t=q(o);if(!t)return;let r=n?q(N.isAbsolute(n)?n:N.resolve(t,n)):void 0;return{canonicalRoot:ht(r)??t,workspaceRoot:t}}a(Bc,"parseProjectIdentityOutput");async function Kc(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=Ms(o);return n!==void 0?n:Bc(await He(o,["rev-parse","--path-format=absolute","--show-toplevel","--git-common-dir"],e.timeoutMs??2e3))??{canonicalRoot:o,workspaceRoot:o}}a(Kc,"resolveWorkspaceProjectIdentity");async function Wg(e={}){return(await Kc(e)).canonicalRoot}a(Wg,"resolveCanonicalWorkspaceRoot");function ht(e){let o=q(e);if(o)return N.posix.basename(o)===".git"?N.posix.dirname(o):o}a(ht,"deriveCanonicalRepoRoot");async function Og(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=q(await He(o,["rev-parse","--show-toplevel"])),t=n??o,[r,s]=await Promise.all([He(t,["rev-parse","--path-format=absolute","--git-common-dir"]).then(l=>l??He(t,["rev-parse","--git-common-dir"])),He(t,["branch","--show-current"]).then(l=>l??He(t,["rev-parse","--abbrev-ref","HEAD"]))]);return{canonicalRepoRoot:ht(r)??n,workspaceRoot:n,executionCwd:o,branch:s&&s!=="HEAD"?s:void 0,workspaceKind:e.workspaceKind??"detected"}}a(Og,"inspectWorkspaceRuntime");function Dg(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:q(e.canonicalRepoRoot)===q(o.canonicalRepoRoot)}a(Dg,"isSameCanonicalRepo");function jg(e){return!!(e?.workspaceRoot&&Be.existsSync(e.workspaceRoot))}a(jg,"workspaceExists");function _s(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(_s,"resolveSessionRuntimeInfo");function yt(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(yt,"formatWorkspaceTruth");var Ns="_unknown",Ws=80;function Gc(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(Gc,"caseFold");function zc(e){return Gc(vt.resolve(e).replace(/\\/g,"/"))}a(zc,"normalizeRoot");function Os(e){return qc("sha256").update(e).digest("hex").slice(0,10)}a(Os,"shortHash");function Xc(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Ws?o.slice(o.length-Ws):o}a(Xc,"slugify");function Ke(e){if(!e||!e.trim())return{key:Ns,canonicalRoot:null,displayName:Ns};let o=zc(e),n=Xc(o),t=n?`${n}-${Os(o)}`:Os(o),r=vt.basename(vt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Ke,"deriveProjectKeyFromRoot");function Vc(e){let o=_s({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Ke(n)}a(Vc,"deriveProjectKeyFromData");function qg(e,o){let n=Vc(e).canonicalRoot;return n!==null&&o.some(t=>Ke(t).canonicalRoot===n)}a(qg,"sessionProjectMatchesAnyRoot");import be from"chalk";function tn(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(tn,"resolveLearningCommandCwd");function qe(e=""){process.stdout.write(`${e}
139
+ `)}a(qe,"writeOutput");function Jc(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(Jc,"matchesFilter");function Yc(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(Yc,"headingForFilter");function Qc(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(Qc,"proposalLabel");async function rn(e,o){let n=Rr(e),t=await Ar(n);for(let s of t.warnings)qe(be.yellow(`[learn] ${s}`));let r=t.proposals.filter(s=>s.status==="pending").filter(s=>Jc(s,o));if(qe(be.cyan(`
140
+ [learn] ${Yc(o)}`)),qe(be.dim(` ${n}`)),r.length===0){qe(be.dim(` (none)
141
+ `));return}for(let s of r)qe(` ${be.cyan(s.proposalId)} ${be.dim(`[${s.proposal.destination}]`)} ${Qc(s)}`);qe(be.dim(`
142
+ Review these in the Learning Center (/learn list, /learn show <id>).
143
+ `))}a(rn,"printLearningPendingForFilter");import hn from"chalk";import{existsSync as ae,readdirSync as ud,readFileSync as ln,writeFileSync as iw}from"node:fs";import{dirname as fd,join as ee}from"node:path";import T from"chalk";import{existsSync as Zc,readFileSync as ed}from"node:fs";var Ds=4,js=180,Us=6e3,Fs=360,kt="[truncated]";function Ae(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ae,"detectWorkflowLocale");function ho(...e){return Ae(e.filter(o=>typeof o=="string").join(`
144
+ `))}a(ho,"inferWorkflowLocaleFromParts");function ze(e,o={}){let n=e.trim();return o.full===!0||n.length<=Us?n:`${n.slice(0,Us).trimEnd()}
145
+
146
+ ${kt}`}a(ze,"trimResultPreview");function St(e){return e.includes(kt)}a(St,"isWorkflowResultPreviewTruncated");function od(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(od,"formatWorkflowResultTruncationHint");function Xe(e,o,n){let t=e.lastIndexOf(kt);return t<0?e:`${e.slice(0,t).trimEnd()}
147
+
148
+ ${od(o,n)}`}a(Xe,"replaceWorkflowResultTruncationMarker");function nd(e){let o=e.replace(/\s+/g," ").trim();return o.length<=Fs?o:`${o.slice(0,Fs).trimEnd()}...`}a(nd,"trimWorkflowLaunchSummary");function Re(e,o={}){if(typeof e=="string"&&e.trim().length>0)return ze(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return ze(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return ze(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 ze(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 ze(n,o)}}catch{}}a(Re,"formatResult");function td(e,o={}){if(!(!e.path||!Zc(e.path)))try{let n=JSON.parse(ed(e.path,"utf8")),t=Re(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?ze(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(td,"formatArtifactPreview");function yo(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let s=e[r];if(!s)continue;let l=td(s,n);if(l)return o==="zh"?`\u4EA7\u7269 ${s.name}:
149
+ ${l}`:`Artifact ${s.name}:
150
+ ${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(yo,"formatArtifactResult");function $t(e){let o=e.resultText?Xe(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}
151
+
152
+ ${r}
153
+
154
+ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u751F\u6210\u811A\u672C\u8FDD\u53CD\u7ED3\u679C\u5951\u7EA6\uFF1A\u6CA1\u6709\u8FD4\u56DE\u53EF\u76F4\u63A5\u5C55\u793A\u7684\u6700\u7EC8\u7ED3\u679C\u6216\u53EF\u9884\u89C8\u4EA7\u7269\u3002\u8FD9\u4E0D\u662F\u6B63\u5E38\u5B8C\u6210\u72B6\u6001\uFF0C\u9700\u8981\u4FEE\u590D\u751F\u6210\u811A\u672C\u540E\u91CD\u65B0\u8FD0\u884C\u3002"].join(`
155
+ `)}let n=e.resultText&&e.isFallbackPreview!==!0?`Workflow completed (${e.totalSpawned} agents, run ${e.runId}).`:`Workflow ended with a result contract failure (${e.totalSpawned} agents, run ${e.runId}).`;if(o){let t=e.isFallbackPreview===!0?"Result contract violation: the workflow ended without returning a complete final result. Last synthesis output:":"Final result:";return`${n}
156
+
157
+ ${t}
158
+
159
+ ${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(`
160
+ `)}a($t,"formatWorkflowCompletionAnswer");function xt(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=nd(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(`
161
+ `)}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(`
162
+ `)}a(xt,"formatWorkflowLaunchAnswer");function Ge(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(Ge,"readEventString");function Hs(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"&&Ge(e,"status")!=="completed")return;let t=Ge(e,"summary")??Ge(e,"error");if(!t)return;let r=Ge(e,"summaryKind");if(r==="pending")return;let s=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=Ge(e,"name")??Ge(e,"taskId")??"agent";return dd(l,t,o,n,s)}a(Hs,"formatWorkflowAgentDigest");function rd(e){let o=e.replace(/\s+/g," ").trim();return o.length<=js?o:`${o.slice(0,js).trimEnd()}...`}a(rd,"trimWorkflowAgentDigestExcerpt");function id(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(id,"isHighSignalWorkflowAgentDigestLine");function sd(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(sd,"isLowInformationWorkflowAgentDigestLine");function ad(e){return e.replace(/\s+/g," ").trim()}a(ad,"compactWorkflowAgentDigestLine");function ld(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=ad(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!sd(t))return o.truncateLines===!1?t:rd(t)}a(ld,"normalizeWorkflowAgentDigestLine");function cd(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let s=ld(r,o);if(!s)continue;let l=id(s)?n:t;n.includes(s)||t.includes(s)||l.push(s)}return n.length>0?n.slice(0,Ds):t.length>0?t.slice(0,Ds):[]}a(cd,"extractWorkflowAgentDigestExcerpts");function dd(e,o,n,t,r="excerpt"){let s=r==="digest",c=cd(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(`
163
+ `):[u,...c,d].join(`
164
+ `)}a(dd,"formatWorkflowAgentLongDigest");import L from"chalk";function bt(){return[`${L.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${L.bold("Subcommands:")}`,` ${L.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${L.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.`,` ${L.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${L.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${L.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${L.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${L.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${L.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${L.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${L.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${L.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${L.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${L.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${L.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${L.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${L.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${L.bold("Examples:")}`,` ${L.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${L.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${L.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${L.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${L.dim("/workflow prune --dry-run")}`,` ${L.dim("/workflow save run-lx3 generated-audit")}`,"",`${L.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(`
165
+ `)}a(bt,"renderWorkflowHelp");function sn(){console.log(`
166
+ ${bt()}
167
+ `)}a(sn,"printWorkflowHelp");var md=new Set(["completed","failed","stopped","denied","cancelled"]);function At(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${T.cyan(o.name)} \u2014 ${o.description}`).join(`
168
+ `)}a(At,"formatWorkflowList");var pd=6,gd=900;function wd(e){let o=e.replace(/\r\n/g,`
169
+ `).replace(/\r/g,`
170
+ `).split(`
171
+ `),n=[],t=0,r=!1;for(let l of o){if(n.length>=pd)break;let c=` ${l}`,d=gd-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(wd,"renderApprovalScriptPreview");function le(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 ${T.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?T.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:",...wd(o.rawScript)]:[]]:[]].join(`
172
+ `)}a(le,"renderApprovalPrompt");function ko(e){if(!ae(e))return[];let o=[];for(let n of ud(e)){let t=ee(e,n,"run.json");if(ae(t))try{let r=JSON.parse(ln(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(ko,"readWorkflowRuns");function hd(e){let o=ee(e,"events.jsonl");if(!ae(o))return[];let n=ln(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(hd,"readWorkflowEvents");function yd(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(yd,"readStringArray");function an(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(an,"readNonEmptyString");function Bs(e,o){let n=o?an(o.scriptSnapshotPath):ee(e,"script.js"),t=o?an(o.manifestSnapshotPath):ee(e,"manifest.json");return!n||!t?!1:ae(n)&&ae(t)}a(Bs,"hasGeneratedWorkflowSnapshot");function zs(e,o){if(o)return Bs(e,o);let n=ee(e,"run.json");if(!ae(n))return!1;try{let t=JSON.parse(ln(n,"utf8"));return typeof t=="object"&&t!==null?Bs(e,t):!1}catch{return!1}}a(zs,"hasRerunnableGeneratedWorkflowRun");function vd(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(vd,"readWorkflowFailure");function So(e,o){let n=ee(e,o),t=ee(n,"run.json"),r=hd(n),s=vd(r);if(!(!ae(t)&&r.length===0)){if(!ae(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(ln(t,"utf8")),c=an(l.scriptSnapshotPath),d=an(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:yd(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(So,"readWorkflowRunDetail");function vo(e){return e==="completed"?T.green("ok"):e==="failed"?T.red("x"):e==="running"?T.cyan("run"):e==="paused"?T.yellow("pause"):e==="stopped"?T.dim("stop"):e==="denied"?T.dim("deny"):e==="cancelled"?T.dim("cancel"):T.dim("-")}a(vo,"statusIcon");function Rt(e){return md.has(e)}a(Rt,"isTerminalWorkflowStatus");function Xs(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(Xs,"formatProcessListMeta");function Ct(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=Xs(o.processSnapshots?.get(l.runId));return` ${vo(l.status)} ${T.cyan(l.workflow)} ${T.dim(l.runId)} - ${l.status} (${l.totalSpawned} agents)${c?T.dim(` [${c}]`):""}`});return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&s.push(T.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),s.join(`
173
+ `)}let r=t.map(s=>` ${vo(s.status)} ${T.cyan(s.workflow)} ${T.dim(s.runId)} \u2014 ${s.status} (${s.totalSpawned} agents)`);return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&r.push(T.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),r.join(`
174
+ `)}a(Ct,"formatRunsList");function Et(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=Xs(o.processSnapshots?.get(n.runId));return` ${vo(n.status)} ${T.cyan(n.workflow)} ${T.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?T.dim(` [${t}]`):""}`}).join(`
175
+ `):e.map(n=>` ${vo(n.status)} ${T.cyan(n.workflow)} ${T.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
176
+ `)}a(Et,"formatManagedRunsList");function we(e){return e.status==="running"||e.status==="paused"}a(we,"isActiveManagedWorkflowRun");function It(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${vo(o.status)} ${T.cyan(o.workflow)} ${T.dim(o.runId)} - ${o.status}`).join(`
177
+ `)}a(It,"formatWorkflowPruneCandidates");function Tt(e,o){return e.filter(we)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Tt,"selectDefaultWorkflowRunId");function Pt(e){return e.find(we)?.runId}a(Pt,"selectDefaultActiveWorkflowRunId");function Ks(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(Ks,"formatTime");function kd(e,o=10){let n=e.map(ea).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(kd,"formatRecentWorkflowEvents");function Lt(e,o){return o?.canRerun??(e?.runDir?zs(e.runDir):!1)}a(Lt,"canRerunWorkflowRun");function Sd(e){return e?e.artifacts.map(o=>({name:o,path:ee(e.runDir,"artifacts",`${Qr(o)}.json`)})):[]}a(Sd,"workflowArtifactRefs");function Mt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Mt,"formatWorkflowNextActions");function Vs(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(Vs,"formatWorkflowFailureAction");function _t(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=Ks(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,h=Ks(e?.endedAt??o?.endedAt??m),S=t?.error??e?.error??o?.error,x=o?.artifacts??t?.artifacts?.map(I=>I.name)??[],y=Sd(o),E=e?.resultText,k=n.full===!0||E===void 0?yo(y,Ae(r),{full:n.full===!0}):void 0,v=n.full===!0?k??E??t?.resultSummary:E!==void 0?Re(E):t?.resultSummary!==void 0?Re(t.resultSummary):k,M=v?Xe(v,s,Ae(v)):void 0,g=n.full===!0||!v||!St(v)?"result:":"result preview:",b=o?kd(o.events):[],$=Lt(e,o);return[` ${T.cyan(r)} ${T.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}`]:[],...h?[` ended: ${h}`]:[],...u?[` run dir: ${u}`]:[],...x.length>0?[` artifacts: ${x.join(", ")}`]:[],...S?[` error: ${S}`]:[],...M?["",` ${g}`,...M.split(`
178
+ `).map(I=>` ${I}`)]:[],...b.length>0?[""," recent events:",...b.map(I=>` ${I.trimEnd()}`)]:[],"",` next: ${Mt(s,$)}`].join(`
179
+ `)}a(_t,"formatWorkflowRunSnapshot");function cn(e){return e.progress?.spawnedAgents??(e.counts===void 0?0:e.counts.pending+e.counts.running+e.counts.completed+e.counts.failed+e.counts.cancelled+e.counts.skipped)}a(cn,"totalSpawnedFromProcess");function Nt(e){return{project:ee(e,".kodax","workflows"),personal:D("workflows")}}a(Nt,"savedWorkflowDirs");async function Js(e,o){return new Set((await _e(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(Js,"nextRevisionWorkflowName");function Ys(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:ui}}a(Ys,"buildWorkflowRevisionProvenance");function Wt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${T.cyan(o.name)} ${T.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
180
+ `)}a(Wt,"formatSavedList");function Qs(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Qs,"isSafeWorkflowRunId");function Ce(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(Ce,"resolveConfirm");function $d(e){console.log(T.red(`
181
+ [workflow] invalid run id: ${e||"<empty>"}
182
+ `))}a($d,"printInvalidRunId");function he(e){return Qs(e)?!0:($d(e),!1)}a(he,"ensureSafeRunId");function dn(){let e=xd(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(dn,"currentWorkflowPreflightEnv");function xd(e){let o=e;for(;;){if(ae(ee(o,".git")))return!0;let n=fd(o);if(n===o)return!1;o=n}}a(xd,"hasGitMarker");function un(e){console.log(T.red(`
183
+ [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(T.red(` - ${o.requirement}: ${o.message}`));console.log()}a(un,"printPreflightFailure");function fn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(T.yellow(`
184
+ [workflow] capsule preflight warnings:`));for(let n of o)console.log(T.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(fn,"printPreflightWarnings");async function Zs(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
185
+ ${e.path}`)){console.log(T.dim(`Workflow cancelled.
186
+ `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await ro(e.path),c=io(l,dn());if(!c.ok){un(c);return}fn(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 jo(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(T.red(`
187
+ [workflow] failed to load ${e.path}: ${t}
188
+ `));return}}a(Zs,"prepareSavedWorkflow");function Ot(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(Ot,"workflowEventStatus");function ea(e){let o=e.data?.name??e.data?.taskId??"",n=Ot(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(ea,"formatWorkflowEvent");import pn from"chalk";import bd from"string-width";var Ad=9;function Rd(e,o=Ad){let n=bd(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Rd,"padWorkflowLiveSymbol");function ta(e,o={}){let n=e.items.filter(m=>m.kind==="agent"),t=n.filter(m=>m.status==="running").map(m=>m.title),r=n.filter(m=>m.status==="completed").length,s=n.filter(m=>m.status==="failed").length,l=n.filter(m=>m.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(m=>m.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(ta,"workflowLiveSnapshotFromProcess");function hw(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Rd(o.symbol)}${o.text}`)}a(hw,"formatWorkflowLiveViewModelForTranscript");var Cd=6,oa={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")}},Ed={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function Id(e){return e.length>14?`${e.slice(0,14)}...`:e}a(Id,"shortRunId");function mn(e){return e==="zh"?oa.zh:oa.en}a(mn,"workflowLiveLabels");function Td(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(Td,"formatElapsedMs");function na(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(na,"formatTokenCount");function Pd(e){if(e.tokenBudgetSpent===void 0)return;let o=mn(e.locale),n=na(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=na(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(Pd,"formatWorkflowTokenUsage");function Ld(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Td(t,e.locale));let r=Pd(e);return r!==void 0&&n.push(r),n}a(Ld,"formatWorkflowHeaderMetrics");function Md(e){let o=mn(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=ra(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(Md,"formatWorkflowProgress");function _d(e){let o=mn(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=ra(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(_d,"formatWorkflowCounter");function ra(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(ra,"workflowProgressDenominator");function Nd(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(Nd,"formatWorkflowPhase");function yw(e,o=Date.now()){if(!e||e.status!=="running")return Ed;let n=[],t=mn(e.locale),r=Ld(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} (${Id(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${s}`,isActive:!0});let l=Nd(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=Md(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,Cd);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:_d(e),rows:d}}a(yw,"buildWorkflowLiveViewModel");function Wd(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(Wd,"isWorkflowHarnessFailure");function Od(e){let o=Vs(e.runId,e.canRerun),n=e.partialResultText?Xe(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return Wd(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(`
189
+ `):[`Workflow failed (${e.runId}): ${e.error.message}`,...t,o].join(`
190
+ `)}a(Od,"formatWorkflowFailedMessage");function gn(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(gn,"readWorkflowEventUsageTokens");function j(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(pn.red(`
191
+ ${o.text}
192
+ `));return}if(o.type==="success"){console.log(pn.green(`
193
+ ${o.text}
194
+ `));return}if(o.type==="event"){console.log(pn.dim(o.text));return}if(o.type==="assistant"){console.log(`
195
+ ${o.text}
196
+ `);return}console.log(pn.dim(`
197
+ ${o.text}
198
+ `))}a(j,"emitWorkflowRunMessage");function $o(e,o,n,t="en"){let r=Date.now(),s=new Map,l,c=0,d=0,u=0,f=0,m=0,h=!1,S=n.phases??[],x=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,y=a((k,v)=>{let M=l===void 0?-1:S.indexOf(l),g=M>=0?M+1:void 0,b=S.length>0?S.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:k,...l!==void 0?{phase:l}:{},...g!==void 0?{phaseIndex:g}:{},...b!==void 0?{phaseTotal:b}:{},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:m,...x!==void 0?{tokenBudgetTotal:x}:{},completedAgents:d,failedAgents:u,stoppedAgents:f,...v!==void 0?{message:v}:{},locale:t})},"emit"),E=a((k,v)=>{ye(k.status)&&(h=!0),e.onWorkflowRunUpdate?.(ta(k,v===void 0?{locale:t}:{locale:t,message:v}))},"publishSnapshot");return{running:a(k=>{h||y("running",k)},"running"),onProcessEvent:a(k=>{if(h&&k.type!=="workflow_finished")return;k.type==="workflow_finished"&&(h=!0);let v=k.type==="workflow_updated"?k.message:void 0;E(k.snapshot,v)},"onProcessEvent"),onSnapshot:a(k=>{h||E(k)},"onSnapshot"),onEvent:a(k=>{if(!h)switch(k.type){case"phase_started":{let v=k.data?.name;l=typeof v=="string"?v:l,y("running");break}case"agent_spawned":{let v=typeof k.data?.taskId=="string"?k.data.taskId:`task-${c+1}`,M=typeof k.data?.name=="string"?k.data.name:v;s.set(v,M),c+=1,y("running");break}case"agent_completed":{let v=typeof k.data?.taskId=="string"?k.data.taskId:void 0;v&&s.delete(v),m+=gn(k.data),Ot(k)==="failed"?u+=1:d+=1,y("running");break}case"agent_unverified":{let v=typeof k.data?.taskId=="string"?k.data.taskId:void 0;v&&s.delete(v),m+=gn(k.data),d+=1,y("running");break}case"agent_failed":{let v=typeof k.data?.taskId=="string"?k.data.taskId:void 0;v&&s.delete(v),m+=gn(k.data),u+=1,y("running");break}case"agent_stopped":{let v=typeof k.data?.taskId=="string"?k.data.taskId:void 0;v&&s.delete(v),m+=gn(k.data),f+=1,y("running");break}case"synthesis_completed":{y("running","synthesis complete");break}default:break}},"onEvent"),complete:a((k,v)=>{h||(h=!0,y(k,v))},"complete")}}a($o,"createWorkflowLiveUpdateEmitter");function wn(e,o,n,t,r={}){let s=r.locale??"en",l=!1,c,d=a(y=>{c?.close();let E=cn(y);if(y.status==="cancelled"){t?.complete("stopped","Workflow stopped by user.");return}if(y.status==="failed"){let M=y.error??"Workflow failed.";t?.complete("failed",M),j(o,{type:"error",text:Od({runId:n,error:new Error(M),canRerun:r.canRerun===!0,totalSpawned:E,locale:s})});return}if(y.status!=="completed")return;let k=y.artifacts!==void 0&&y.artifacts.length>0?yo(y.artifacts,s,{full:r.presentation==="agentic"}):void 0,v=y.resultSummary??k??y.latestMessage;if(t?.complete("completed",v!==void 0?"completed with result":"completed"),r.presentation==="agentic"){j(o,{type:"assistant",text:$t({runId:n,totalSpawned:E,...v!==void 0?{resultText:v}:{},locale:s}),final:!0});return}j(o,{type:"success",text:[`Workflow completed (${E} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
199
+ `)}),v!==void 0&&j(o,{type:"info",text:`Workflow result:
200
+ ${v}`})},"finish"),u=0,f,m=1e3,h=0,S=a(async(y,E)=>{for(await E;!l&&y===u;){let k=h,v=await e.get(n);if(l||y!==u)return;if(k===h){if(m=1e3,v===void 0||v.runId!==n)return;t?.onSnapshot(v),ye(v.status)&&(l=!0,d(v));return}}},"restoreSnapshot"),x=a(()=>{if(l)return;let y=++u,E=a(v=>{if(l||y!==u)return;u+=1,c?.close();let M=typeof v=="object"&&v!==null&&"code"in v&&v.code==="daemon_upgrade_required";j(o,{type:"error",text:`Workflow observation interrupted (run ${n})${M?"":"; reconnecting"}: ${v instanceof Error?v.message:String(v)}`}),!M&&(f=setTimeout(x,m),f.unref?.(),m=Math.min(m*2,1e4))},"failed"),k=e.subscribe({runId:n},v=>{l||y!==u||v.snapshot.runId!==n||(h+=1,t?.onProcessEvent(v),v.type==="workflow_finished"&&(l=!0,f&&clearTimeout(f),d(v.snapshot)))},E);c=k,(l||y!==u)&&k.close(),S(y,k.ready).catch(E)},"open");x()}a(wn,"observeHostWorkflowDone");function J(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){j(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(hn.dim(`
201
+ [workflow] ${o.message}
202
+ `))}a(J,"emitWorkflowBuilderEvent");function xo(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(xo,"buildWorkflowProcessMetadata");async function Dd(e){let o=e.approval==="required"?Ce(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(hn.red(`
203
+ [workflow] refusing to start a workflow without an interactive approval channel.
204
+ `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(hn.red(`
205
+ [workflow] cannot start - REPL options unavailable in this context.
206
+ `)),"failed";let t=Ae(e.request),r,s;try{if(J(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let S=Oo(e.builtin.name);if(!S)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);s={module:S,args:e.builtin.args,approvalDescription:S.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{J(e,{stage:"generating",message:"Workflow - generating harness"});let x=await(e.generateWorkflow??Wo)({request:e.request,options:r});if(x.kind==="declined")return J(e,{stage:"declined",message:x.reason}),console.log(hn.dim(`
207
+ Workflow not created: ${x.reason}
208
+ `)),"declined";s={module:x.module,args:{request:e.request},approvalDescription:x.approvalSummary,mayUseWorktree:x.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:x.scriptSnapshot,rawScript:x.scriptSnapshot.source}}J(e,{stage:"validating",message:"Workflow - validating harness"})}catch(S){let x=S instanceof Error?S.message:String(S);return J(e,{stage:"failed",message:x}),"failed"}J(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=ve(s.module);if(l!=="agentic"&&j(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${s.approvalDescription}`}),o){if(!await o(le(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree,...s.rawScript!==void 0?{rawScript:s.rawScript}:{}})))return J(e,{stage:"cancelled",message:"Workflow cancelled"}),j(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(j(e.callbacks,{type:"info",text:le(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree})}),j(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${s.sandbox}); normal permission gates still apply.`}));let d=e.callbacks.workflows;if(d===void 0)return J(e,{stage:"failed",message:"Workflow Host runtime is unavailable in this session"}),j(e.callbacks,{type:"error",text:"The workflow Host runtime is unavailable in this session; cannot start."}),"failed";let u=s.scriptSnapshot;if(e.builtin===void 0&&u===void 0)return J(e,{stage:"failed",message:"Generated workflow is missing its script capsule"}),"failed";let f=await d.start({...e.sessionId!==void 0?{sessionId:e.sessionId}:{},projectRoot:r.context?.gitRoot??process.cwd(),source:e.builtin!==void 0?{kind:"name",name:e.builtin.name}:{kind:"inline",manifest:u?.manifest,source:u?.source??""},args:s.args,metadata:xo({source:e.processSource??"command",displayName:s.module.meta.name,goal:e.request})});if(f.kind==="declined")return J(e,{stage:"declined",message:f.reason}),j(e.callbacks,{type:"error",text:`Host declined to start: ${f.reason}`}),"declined";let m=f.runId;l==="agentic"?j(e.callbacks,{type:"assistant",text:xt({runId:m,summary:c,approvalSummary:s.approvalDescription,locale:t}),final:!1}):j(e.callbacks,{type:"info",text:`Started workflow ${s.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let h=$o(e.callbacks,m,s.module.meta,t);return h.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`),wn(d,e.callbacks,m,h,{canRerun:!0,presentation:l,locale:t}),J(e,{stage:"launched",message:`Workflow ${s.module.meta.name} started`}),"started"}a(Dd,"startGeneratedWorkflowFromRequest");function Dt(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(Dt,"parseWorkflowInvocation");function bo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(bo,"parseWorkflowArgs");function jt(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(`
209
+ `)}a(jt,"buildWorkflowRevisionRequest");function ia(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(ia,"parseNonNegativeInteger");function Ut(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=ia(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(Ut,"parseWorkflowRunsOptions");function jd(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(jd,"parseOlderThanMs");function Ft(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=ia(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=jd(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(Ft,"parseWorkflowPruneOptions");var Ud=1440*60*1e3,Ht=`
210
+ [workflow] workflow controls are unavailable in this runtime.
211
+ `,Bt=`
212
+ [workflow] cannot start \u2014 the workflow Host runtime is unavailable in this session.
213
+ `;async function Fd(e){let o=await e.list(),n=new Map;for(let t of o){let r=await e.get(t.runId);r!==void 0&&n.set(t.runId,r)}return[n,o.filter(we)]}a(Fd,"hostControlActiveRuns");function Kt(e){return e===void 0?void 0:{runId:e.runId,workflow:e.workflowName,status:Hd(e.status),totalSpawned:cn(e),eventCount:0,startedAt:Date.parse(e.startedAt),runDir:""}}a(Kt,"toManagedSnapshot");function Hd(e){switch(e){case"paused":return"paused";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"stopped";default:return"running"}}a(Hd,"managedStatusFromProcess");async function qt(e,o,n,t,r){let s=await e.start({...n.sessionId!==void 0?{sessionId:n.sessionId}:{},projectRoot:n.projectRoot,source:n.source,...n.args!==void 0?{args:n.args}:{},...n.metadata!==void 0?{metadata:n.metadata}:{}});if(s.kind==="declined"){console.log(w.red(`
214
+ [workflow] Host declined to start: ${s.reason}
215
+ `));return}let l=s.runId;console.log(w.dim(`
216
+ Started workflow ${t.name} (${l}). Use /workflow show ${l} for status.
217
+ `));let c=$o(o,l,t,r.locale);c.running(`Use /workflow show ${l} for status or /workflow stop ${l} to stop.`),wn(e,o,l,c,{canRerun:r.canRerun,presentation:r.presentation,...r.locale!==void 0?{locale:r.locale}:{}})}a(qt,"startWorkflowViaHost");function Bd(e){return new Map(e.map(o=>[o.runId,o]))}a(Bd,"processSnapshotsByRunId");function Kd(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/Ud}:{}}}a(Kd,"workflowPruneRetentionOptions");function qd(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(qd,"workflowPruneCandidateSummaries");function aa(e){return xo({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(aa,"buildSavedWorkflowProcessMetadata");var la={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:sn,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await rn(tn(o),"workflow");return}let r=Dt(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(w.yellow(`
218
+ [workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
219
+ Switch with /agent-mode ama, then request it explicitly via /workflow.
220
+ `));return}let s=Ke(process.cwd()).key,l=D("workflow-runs",s),c=n.workflows,d=Nt(process.cwd()),u=ni({runManager:Zr(),runBaseDir:l,savedWorkflowDirs:d}),f=a(async g=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:ri(g)}}),"createWorkflowFromText");if(r.kind==="help"){sn();return}if(r.kind==="list"){console.log(w.bold(`
221
+ Built-in workflows:`)),console.log(At(Do())),console.log(w.bold(`
222
+ Pattern templates:`));for(let b of ti())console.log(` ${w.cyan(b.name)} ${w.dim(`(${b.pattern})`)} - ${b.description}`);let g=await _e(d);g.length>0&&(console.log(w.bold(`
223
+ Saved workflows:`)),console.log(Wt(g))),console.log(w.dim(`
224
+ Run one with: /workflow <name> <question or JSON args>`)),console.log(w.dim(` Show usage with: /workflow help
225
+ `));return}if(r.kind==="runs"){let g=Ut(r.rawArgs);if(g.error){console.log(w.yellow(`
226
+ Usage: /workflow runs [--all] [--limit N]
227
+ ${g.error}
228
+ `));return}let[b,$]=c===void 0?[Bd(u.listWorkflowProcessSnapshots({activeOnly:!1})),[]]:await Fd(c);$.length>0&&(console.log(w.bold(`
229
+ Active workflow runs:`)),console.log(Et($,{processSnapshots:b}))),console.log(w.bold(`
230
+ Workflow runs:`)),console.log(Ct(ko(l),{limit:g.all?void 0:g.limit,showLimitHint:!g.all,processSnapshots:b})),console.log();return}if(r.kind==="show"){let g=ko(l),b=c===void 0?[]:await c.list(),$=r.runId||Tt(b,g);if(!$){console.log(w.yellow(`
231
+ No workflow runs yet. Start one with /workflow create <request>.
232
+ `));return}if(!he($))return;let I=c===void 0?void 0:Kt(await c.get($)),W=So(l,$),_=c===void 0?u.getWorkflowProcessSnapshot($):await c.get($);console.log(w.bold(`
233
+ Workflow run:`)),console.log(_t(I,W,{full:r.full===!0,..._?{processSnapshot:_}:{}})),console.log();return}if(r.kind==="pause"){if(!he(r.runId))return;if(c===void 0){console.log(w.red(Ht));return}let g=await c.pause(r.runId);console.log(g?w.dim(`Paused workflow ${r.runId}.
234
+ `):w.yellow(`No running workflow ${r.runId}.
235
+ `));return}if(r.kind==="resume"){if(!he(r.runId))return;if(c===void 0){console.log(w.red(Ht));return}let g=await c.resume(r.runId);console.log(g?w.dim(`Resumed workflow ${r.runId}.
236
+ `):w.yellow(`No paused workflow ${r.runId}.
237
+ `));return}if(r.kind==="stop"){if(c===void 0){console.log(w.red(Ht));return}let g=(await c.list()).filter(we),b=(await Promise.all(g.map(async K=>o.sessionId&&(await c.get(K.runId))?.hostMetadata?.ownerSessionId===o.sessionId?K:void 0))).filter(K=>K!==void 0),$=r.runId||Pt(b);if(!$){console.log(w.yellow(`
238
+ No active workflow to stop.
239
+ `));return}if(!he($))return;let I=await c.get($);if(I&&we(Kt(I))&&(!o.sessionId||I.hostMetadata?.ownerSessionId!==o.sessionId)){process.stdout.write(`${w.red("Stop the workflow from the Session that owns it.")}
240
+ `);return}let W=await c.stop($,o.sessionId?{sessionId:o.sessionId}:void 0),_=Kt(await c.get($)),H=So(l,$),O=await c.get($),G=_?.status??H?.status??O?.status,te=_?!we(_):H?Rt(H.status):O!==void 0&&ye(O.status),P=Mt($,Lt(_,H));console.log(W?w.dim(`Stop requested for workflow ${$}; waiting for cleanup.
241
+ `):G&&te?w.yellow(`Workflow ${$} is already ${G}. Next: ${P}.
242
+ `):w.yellow(`No active workflow ${$}.
243
+ `));return}if(r.kind==="delete"){if(!r.target){console.log(w.yellow(`
244
+ Usage: /workflow delete [--force] [--run|--saved] <runId|savedName>
245
+ `));return}if(r.scope==="conflict"){console.log(w.red(`
246
+ [workflow] choose only one delete scope: --run or --saved.
247
+ `));return}let g=a(async(G,te)=>{try{let P=await u.deleteSavedWorkflow(G,te);if(!P){console.log(w.red(`
248
+ [workflow] saved workflow deletion is unavailable in this context.
249
+ `));return}console.log(w.dim(`
250
+ Deleted saved workflow ${P.name}.
251
+ `))}catch(P){let K=P instanceof Error?P.message:String(P);console.log(w.red(`
252
+ [workflow] delete failed: ${K}
253
+ `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await g(r.target);return}let b=c===void 0?void 0:await c.get(r.target),$=b?void 0:await u.resolveWorkflowIdentity(r.target),I;if($?.kind==="ambiguous")if($.run)I=$.run.runId;else{console.log(w.red(`
254
+ [workflow] ambiguous delete target: ${r.target} matches multiple workflow run/display names${$.matches.includes("saved")?" and a saved workflow name":""}. Use the concrete run id, or --saved when deleting a generated saved capsule.
255
+ `));return}if($?.kind==="saved"){if(r.scope==="run"){console.log(w.yellow(`
256
+ No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
257
+ `));return}await g($.savedWorkflow.name,$.savedWorkflow.source);return}if($?.kind==="missing"){console.log(w.yellow(`
258
+ No persisted workflow run or generated saved workflow ${r.target}.
259
+ `));return}let W=$?.kind==="run"?$.runId:I??r.target;if(!he(W))return;if(await u.deleteWorkflowRun(W,{force:r.force})){console.log(w.dim(`
260
+ Deleted workflow run ${W}${r.force?" with --force":""}.
261
+ `));return}let H=b??(c===void 0?void 0:await c.get(W)),O=u.getWorkflowProcessSnapshot(W);if(!O&&!sa(Ee(l,W,"run.json"))){console.log(w.yellow(`
262
+ No persisted workflow run or generated saved workflow ${r.target}.
263
+ `));return}if(H&&!ye(H.status)){console.log(w.yellow(`
264
+ Workflow ${W} is ${H.status}. Stop it before deleting the run record.
265
+ `));return}if(O&&!ye(O.status)){console.log(w.yellow(`
266
+ Workflow ${W} is a non-terminal persisted ${O.status} record. If it is stale, run /workflow delete --force ${W}.
267
+ `));return}console.log(w.yellow(`
268
+ Workflow ${W} is not a deletable terminal run.
269
+ `));return}if(r.kind==="prune"){let g=Ft(r.rawArgs);if(g.error){console.log(w.yellow(`
270
+ Usage: /workflow prune --dry-run | --keep N | --older-than Nd
271
+ ${g.error}
272
+ `));return}if(!g.dryRun&&g.keep===void 0&&g.olderThanMs===void 0){console.log(w.yellow(`
273
+ Usage: /workflow prune --dry-run | --keep N | --older-than Nd
274
+ No cleanup rule was provided.
275
+ `));return}let b=ko(l),$=await u.pruneWorkflowRuns(Kd(g)),I=qd(b,$.candidates);console.log(w.bold(g.dryRun?`
276
+ Workflow prune preview:`:`
277
+ Workflow prune:`)),console.log(It(I)),$.protectedRuns>0&&console.log(w.dim(`
278
+ Protected ${$.protectedRuns} active workflow run${$.protectedRuns===1?"":"s"} from pruning.`)),g.dryRun?console.log(w.dim(`
279
+ Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
280
+ `)):console.log(w.dim(`
281
+ Deleted ${$.deleted} workflow run${$.deleted===1?"":"s"}.
282
+ `));return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(w.yellow(`
283
+ Usage: /workflow save <runId> <name>
284
+ `));return}if(!he(r.runId))return;try{let g=await Yr({runDir:Ee(l,r.runId),targetDir:d.project??Ee(process.cwd(),".kodax","workflows"),name:r.name});console.log(w.green(`
285
+ Saved workflow ${g.name} to ${g.path}
286
+ `))}catch(g){let b=g instanceof Error?g.message:String(g);console.log(w.red(`
287
+ [workflow] save failed: ${b}
288
+ `))}return}if(r.kind==="rename"){if(!r.target||!r.newName){console.log(w.yellow(`
289
+ Usage: /workflow rename <runId|alias|savedName> <newName>
290
+ `));return}let g=await u.resolveWorkflowIdentity(r.target);if(g.kind==="ambiguous"){console.log(w.red(`
291
+ [workflow] ambiguous rename target: ${r.target} matches both a workflow run id and a saved workflow name.
292
+ `));return}if(g.kind==="missing"){console.log(w.red(`
293
+ [workflow] rename target not found: ${r.target}
294
+ `));return}if(g.kind==="run"){if(!await u.renameWorkflowRun(g.runId,r.newName)){console.log(w.red(`
295
+ [workflow] rename failed: ${g.runId}
296
+ `));return}console.log(w.green(`
297
+ Renamed workflow run ${g.runId} to ${r.newName.trim()}.
298
+ `));return}try{let b=await Vr({dirs:d,name:g.savedWorkflow.name,newName:r.newName,source:g.savedWorkflow.source});console.log(w.green(`
299
+ Renamed saved workflow ${r.target} to ${b.name}.
300
+ `))}catch(b){let $=b instanceof Error?b.message:String(b);console.log(w.red(`
301
+ [workflow] rename failed: ${$}
302
+ `))}return}if(r.kind==="revise"){if(!r.target||!r.request){console.log(w.yellow(`
303
+ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
304
+ `));return}let g=Ce(n);if(!g){console.log(w.red(`
305
+ [workflow] refusing to revise a workflow without an interactive approval channel.
306
+ `));return}let b=n.createKodaXOptions;if(!b){console.log(w.red(`
307
+ [workflow] cannot revise - REPL options unavailable in this context.
308
+ `));return}let $=await u.resolveWorkflowIdentity(r.target);if($.kind==="ambiguous"){console.log(w.red(`
309
+ [workflow] ambiguous revise target: ${r.target} matches both a workflow run id and a saved workflow name.
310
+ `));return}if($.kind==="missing"){console.log(w.red(`
311
+ [workflow] revise target not found: ${r.target}
312
+ `));return}if(r.replace===!0&&$.kind!=="saved"){console.log(w.red(`
313
+ [workflow] revise --replace requires a saved workflow name target.
314
+ `));return}let I;try{if($.kind==="run")I=(await Un({runDir:$.runDir})).capsule;else{if($.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
315
+ [workflow] only generated workflow capsules can be revised.
316
+ `));return}I=await ro($.savedWorkflow.path)}}catch(z){let Ln=z instanceof Error?z.message:String(z);console.log(w.red(`
317
+ [workflow] revise failed: ${Ln}
318
+ `));return}let W=jt({target:r.target,capsule:I,changeRequest:r.request}),_;try{_=await Wo({request:W,options:b()})}catch(z){let Ln=z instanceof Error?z.message:String(z);console.log(w.red(`
319
+ [workflow] revise generation failed: ${Ln}
320
+ `));return}if(_.kind==="declined"){console.log(w.dim(`
321
+ Workflow revision not created: ${_.reason}
322
+ `));return}let H=r.replace===!0&&$.kind==="saved"?$:void 0,O=H?.savedWorkflow.name,G=O??await Js(d,_.manifest.name),te=G===_.manifest.name?_.manifest:{..._.manifest,name:G};if(!await g(le(ve({meta:te,run:_.module.run}),{source:O?`revision-replace:${O}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:te.mayUseWorktree===!0,rawScript:_.source}))){console.log(w.dim(`Workflow revision cancelled.
323
+ `));return}let K={name:G,manifest:te,source:_.source,intent:Nr(te,{originalRequest:r.request}),...I.inputs!==void 0?{inputs:I.inputs}:{},...I.requires!==void 0?{requires:I.requires}:{},provenance:Ys({capsule:I,resolution:$,...O!==void 0?{replacesWorkflowName:O}:{}})};if(H){let z=await Jr({...K,dirs:d,savedSource:H.savedWorkflow.source});console.log(w.green(`
324
+ Replaced saved workflow ${z.name} with revised capsule at ${z.path}
325
+ `)),console.log(w.dim(`Previous capsule archived at ${z.previousPath}
326
+ `));return}let Po=await Xr({...K,dir:d.project??Ee(process.cwd(),".kodax","workflows")});console.log(w.green(`
327
+ Saved workflow revision ${Po.name} to ${Po.path}
328
+ `));return}if(r.kind==="rerun"){if(!r.runId){console.log(w.yellow(`
329
+ Usage: /workflow rerun <runId|savedName> [args]
330
+ `));return}if(!he(r.runId))return;let g=Ce(n);if(!g){console.log(w.red(`
331
+ [workflow] refusing to rerun a workflow without an interactive approval channel.
332
+ `));return}let b=(await _e(d)).find(P=>P.name===r.runId),$=sa(Ee(l,r.runId,"run.json"));if(b&&$){console.log(w.red(`
333
+ [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
334
+ `)),console.log(w.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
335
+ `));return}if(b&&!$){let P=await Zs(b,g);if(!P)return;let K=ho(r.rawArgs,P.module.meta.name,P.module.meta.description,P.scriptSnapshot?.source),Po="agentic";if(!await g(le(ve(P.module),P.approvalContext))){console.log(w.dim(`Workflow cancelled.
336
+ `));return}if(c===void 0){console.log(w.red(Bt));return}await qt(c,n,{sessionId:o.sessionId,projectRoot:o.gitRoot??process.cwd(),source:P.scriptSnapshot?{kind:"inline",manifest:P.scriptSnapshot.manifest,source:P.scriptSnapshot.source}:{kind:"name",name:b.name},args:bo(r.rawArgs),metadata:aa({displayName:P.module.meta.name,savedWorkflowName:b.name,provenance:P.provenance})},P.module.meta,{locale:K,canRerun:P.scriptSnapshot!==void 0,presentation:Po});return}let I;try{I=await Un({runDir:Ee(l,r.runId)})}catch(P){let K=P instanceof Error?P.message:String(P);console.log(w.red(`
337
+ [workflow] rerun failed: ${K}
338
+ `));return}let _=So(l,r.runId)?.scriptSnapshotPath??Ee(l,r.runId,"script.js"),H=ho(r.rawArgs,I.capsule.manifest.name,I.capsule.manifest.description,I.capsule.source),O="agentic",G=io(I.capsule,dn());if(!G.ok){un(G);return}if(fn(G),!await g(le(ve(I.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:I.capsule.manifest.mayUseWorktree===!0,rawScriptPath:_,rawScript:I.capsule.source}))){console.log(w.dim(`Workflow cancelled.
339
+ `));return}if(c===void 0){console.log(w.red(Bt));return}await qt(c,n,{sessionId:o.sessionId,projectRoot:o.gitRoot??process.cwd(),source:{kind:"inline",manifest:I.capsule.manifest,source:I.capsule.source},args:bo(r.rawArgs),metadata:xo({source:"command",displayName:I.module.meta.name,sourceRunId:r.runId})},I.module.meta,{locale:H,canRerun:!0,presentation:O});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
340
+ Usage: /workflow create <request>
341
+ `));return}return await f(r.request)}let m=Ce(n);if(!m){console.log(w.red(`
342
+ [workflow] refusing to start a workflow without an interactive approval channel.
343
+ `));return}let h={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},S,x=Oo(r.name),y,E;if(!x){let g=(await _e(d)).find(b=>b.name===r.name);if(!g){let b=[r.name,r.rawArgs].filter($=>$&&$.length>0).join(" ").trim();return await f(b)}if(y=g,g.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
344
+ ${g.path}`)){console.log(w.dim(`Workflow cancelled.
345
+ `));return}try{if(g.execution==="capability-generated"){let b=await ro(g.path),$=io(b,dn());if(!$.ok){un($);return}fn($),h={source:`saved:${g.source}`,sandbox:g.execution,mayUseWorktree:b.manifest.mayUseWorktree===!0,rawScriptPath:g.path,rawScript:b.source},S={manifest:b.manifest,source:b.source},E=b.provenance}x=await jo(g.path),g.execution==="trusted-local"&&(h={source:`saved:${g.source}`,sandbox:g.execution,mayUseWorktree:!1})}catch(b){let $=b instanceof Error?b.message:String(b);console.log(w.red(`
346
+ [workflow] failed to load ${g.path}: ${$}
347
+ `));return}}if(!await m(le(ve(x),h))){console.log(w.dim(`Workflow cancelled.
348
+ `));return}let v=ho(r.rawArgs,x.meta.name,x.meta.description,S?.source),M="agentic";if(c===void 0){console.log(w.red(Bt));return}await qt(c,n,{sessionId:o.sessionId,projectRoot:o.gitRoot??process.cwd(),source:S?{kind:"inline",manifest:S.manifest,source:S.source}:{kind:"name",name:r.name},args:bo(r.rawArgs),metadata:y?aa({displayName:x.meta.name,savedWorkflowName:y.name,provenance:E}):xo({source:"command",displayName:x.meta.name})},x.meta,{locale:v,canRerun:S!==void 0,presentation:M})},"handler")};import U from"chalk";var Gt={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if((n.getSessionStatus?(await n.getSessionStatus()).messageCount:o.messages.length)===0){console.log(U.yellow(`
349
+ Current session is already empty.`)),console.log(U.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(U.dim(`
350
+ Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(U.dim(`
351
+ [Previous session saved]`))}catch{console.log(U.yellow(`
352
+ [Warning: Failed to save previous session]`))}await n.startNewSession?.(),o.messages=[],n.clearHistory(),console.log(U.green(`
353
+ \u2713 Started new session`)),console.log(U.dim("Conversation history cleared. Ready for a fresh start!"))},"handler"),detailedHelp:a(()=>{console.log(U.bold(`
354
+ /new - Start New Session
355
+ `)),console.log("Usage:"),console.log(U.cyan(" /new")+` - Clear current session and start fresh
356
+ `),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.
357
+ `),console.log("Examples:"),console.log(U.dim(" User: Help me refactor the authentication module")),console.log(U.dim(" AI: [provides refactoring help]")),console.log(U.cyan(" /new")),console.log(U.dim(" \u2713 Started new session")),console.log(U.dim(" User: Now I need help with database optimization")),console.log(U.dim(` AI: [provides database help]
358
+ `)),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 F from"chalk";var ch="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",dh="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function uh(e){return Kr(e.error,e.messageCount)}a(uh,"shouldOfferSessionRecovery");var zt={name:"recover",aliases:["handoff"],description:"Create a fresh session from safe memory and continue",usage:"/recover [prompt]",handler:a(async(e,o,n)=>{if(!n.recoverSession){console.log(F.red(`
359
+ [Recover is not available in this host]
360
+ `));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(F.dim(`
361
+ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(On(e.join(" ")))}catch(r){return{success:!1,message:`[Recover failed] ${r instanceof Error?r.message:String(r)}`}}t==="blocked"?console.log(F.yellow(`
362
+ [Recover blocked by the current session transition guard]
363
+ `)):t==="failed"?console.log(F.red(`
364
+ [Recover failed]
365
+ `)):t==="empty"&&console.log(F.yellow(`
366
+ [Nothing to recover from this session]
367
+ `))},"handler"),detailedHelp:a(()=>{console.log(F.cyan(`
368
+ /recover - Continue in a Fresh Session
369
+ `)),console.log(F.bold("Usage:")),console.log(F.dim(" /recover ")+"Continue with a safe memory summary"),console.log(F.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(F.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(F.bold("Description:")),console.log(F.dim(" Saves the current session, creates a new local session,")),console.log(F.dim(" carries over only a compact memory summary, and runs the")),console.log(F.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(F.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as Xd}from"node:child_process";import{promisify as Vd}from"node:util";import oe from"chalk";function Ie(e){let o=e.message!==void 0?{message:e.message}:{};return e.kind==="started"?{startedRunId:e.runId,...o}:{success:e.success,...o}}a(Ie,"clientCommandResult");function Gd(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Gd,"escapeRegExp");function zd(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Gd(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(zd,"deriveArgumentHintFromUsage");function Xt(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??zd(e.usage,e.name)}}a(Xt,"toCommandDefinition");import{randomUUID as Jd}from"node:crypto";var Yd=Vd(Xd),Vt=1e5;async function Ro(e,o){await Me({cwd:o});let{stdout:n}=await Yd("git",e,{cwd:o,maxBuffer:64*1024*1024,windowsHide:!0});return n}a(Ro,"git");async function Qd(e){for(let o of["main","master","develop"])try{return await Ro(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(Qd,"detectBaseBranch");async function Ao(e,o){return(await Ro(["rev-parse",e],o)).trim()}a(Ao,"resolveRef");async function Zd(e,o){try{return await Ao(e,o)}catch{return}}a(Zd,"tryResolveRef");async function eu(e,o){let n=e[0];if(n==="base"){let t=await Qd(o);return{diff:await Ro(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Ao(t,o),headRef:await Ao("HEAD",o)}}if(n==="sha"&&e[1]){let t=await Zd(`${e[1]}^`,o);return{diff:await Ro(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Ao(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Ro(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Ao("HEAD",o)}}a(eu,"getDiff");function ou(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 m=e[f];if(m!==void 0){if(r){l.push(m);continue}if(m==="--"){r=!0;continue}if(!c(m)){if(!t&&m==="base"){s.push("base"),t=!0;continue}if(!t&&m==="sha"){for(s.push("sha"),t=!0;f+1<e.length;){let h=e[f+1];if(h===void 0)break;if(h==="--"){r=!0,f+=1;break}if(c(h)){f+=1;continue}s.push(h),f+=1;break}continue}l.push(m)}}}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(ou,"parseReviewInvocation");function nu(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(`
370
+ `)}a(nu,"buildReviewWorkflowRequest");function tu(e){return e.length<=Vt?e:`${e.slice(0,Vt)}
371
+
372
+ [diff truncated to ${Vt} chars - review the rest with a narrower scope]`}a(tu,"truncateDiff");function ru(e){let o=tu(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(`
373
+ `)}a(ru,"buildReviewPrompt");function ca(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(ca,"buildDisplayName");function iu(){console.log(oe.bold(`
374
+ /review - Review Git Changes
375
+ `)),console.log("Usage:"),console.log(oe.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(oe.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(oe.dim(" base ")+"Review changes against the detected base branch"),console.log(oe.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(oe.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(oe.dim(" --workflow ")+"Run the deterministic scoped-review workflow"),console.log(),console.log("Examples:"),console.log(oe.dim(" /review --lean")),console.log(oe.dim(" /review base focus on auth and data loss")),console.log(oe.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(iu,"printReviewHelp");var da={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:iu,handler:a(async(e,o,n)=>{if(n?.startReview){let l=await n.startReview({sessionId:o.sessionId,inputId:Jd(),args:e});return Ie(l)}let t=o.gitRoot??process.cwd(),r=ou(e);if(r.error)return{success:!1,message:`/review: ${r.error}`};let s;try{s=await eu(r.diffArgs,t)}catch(l){return{success:!1,message:`/review: git failed - ${l instanceof Error?l.message:String(l)}`}}if(!s.diff.trim())return{success:!0,message:"No changes to review."};if(r.workflow){let l;try{l=await ii({cwd:t,sessionId:o.sessionId,label:s.label,diff:s.diff,scope:s.scope,...s.baseRef?{baseRef:s.baseRef}:{},...s.headRef?{headRef:s.headRef}:{},customPrompt:r.prompt})}catch(c){return{success:!1,message:`/review: could not create review packet - ${c instanceof Error?c.message:String(c)}`}}return{success:!0,workflow:{request:nu(s.label,{lean:r.lean,customPrompt:r.prompt,packets:l}),source:"command",displayName:ca(r),processSource:"review",builtin:{name:"scoped-review",args:{packets:l,...r.lean?{lean:!0}:{},...r.prompt?{reviewFocus:r.prompt}:{}}}}}}return{success:!0,invocation:{prompt:ru({label:s.label,diff:s.diff,lean:r.lean,customPrompt:r.prompt}),source:"prompt",displayName:ca(r)}}},"handler")};import{constants as su}from"node:fs";import{access as au,readFile as lu,writeFile as cu}from"node:fs/promises";import{join as du}from"node:path";import ne from"chalk";import{randomUUID as uu}from"node:crypto";var pa=`# KodaX Lean Mode
376
+
377
+ Before writing code:
378
+ 1. Do we need to build this at all?
379
+ 2. Does the codebase already have this?
380
+ 3. Can stdlib or native platform solve it?
381
+ 4. Can an existing dependency solve it?
382
+ 5. Can this be a minimal diff?
383
+ 6. Only then write code.
384
+
385
+ Never cut:
386
+ - trust-boundary validation
387
+ - security checks
388
+ - data-loss protection
389
+ - accessibility basics
390
+ - explicitly requested behavior
391
+
392
+ After coding:
393
+ - explain what was skipped
394
+ - say when to add it back
395
+ `;function fu(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(fu,"resolveTargetRoot");async function ga(e){try{return await au(e,su.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(ga,"pathExists");function ua(e){return console.log(ne.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(ua,"existingAgentsResult");function yn(e){return e instanceof Error?e.message:String(e)}a(yn,"errorMessage");async function fa(e,o){let n;try{n=await ga(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${yn(t)}`}}if(n)return ua(e);try{await cu(e,pa,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?ua(e):{success:!1,message:`/agents init: failed to write ${e}: ${yn(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: ${yn(t)}`}}return console.log(ne.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(fa,"initializeAgentsFile");function mu(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",pa.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
396
+ `)}a(mu,"buildLeanReviewPrompt");function ma(){console.log(ne.bold(`
397
+ /agents - Manage Target Project Instructions
398
+ `)),console.log("Usage:"),console.log(ne.cyan(" /agents init")),console.log(ne.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ne.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ne.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ne.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ne.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ne.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(ma,"printAgentsHelp");var Jt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:ma,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return ma(),!0;let r=fu(o),s=du(r,"AGENTS.md");if(t==="init")return await fa(s,n);let l;try{l=await ga(s)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${s}: ${yn(d)}`}}if(!l)return await fa(s,n);if(n?.reviewAgentsLean){let d=await n.reviewAgentsLean({sessionId:o.sessionId,inputId:uu()});return Ie(d)}let c;try{c=await lu(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:mu(s,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function kn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(kn,"getPastedTextRefNumLines");function pu(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(pu,"formatPastedTextRef");function gu(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(gu,"formatTruncatedTextRef");var wu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function hu(e){let o=[],n=new RegExp(wu.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(hu,"parseReferences");function yu(e,o){let n=hu(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(yu,"expandPastedTextRefs");var vu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,ku=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function Su(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(Su,"isAtWordBoundaryAfter");function $u(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a($u,"isAtWordBoundaryBefore");function Oh(e,o){if(o<=0||!Su(e,o))return null;let t=e.slice(0,o).match(vu);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(Oh,"findPlaceholderBeforeCursor");function Dh(e,o){if(o>=e.length||!$u(e,o))return null;let t=e.slice(o).match(ku);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(Dh,"findPlaceholderAfterCursor");function jh(e){return e.length>800||kn(e)>2}a(jh,"shouldReplacePasteWithPlaceholder");function Uh(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=kn(l),d=gu(o,c);return{truncatedText:r+d+s,placeholderContent:l}}a(Uh,"maybeTruncateLongInput");var Yt=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=kn(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=kn(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 yu(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())}},vn=null;function Fh(){return vn===null&&(vn=new Yt),vn}a(Fh,"getOrCreateModulePasteStore");function wa(){return vn??void 0}a(wa,"getActivePasteStore");import{createHash as xu}from"node:crypto";import{mkdir as bu,readdir as Au,readFile as Ru,stat as Cu,unlink as Eu,writeFile as Iu}from"node:fs/promises";import*as Qt from"node:path";var Tu="paste-cache",Pu=720*60*60*1e3;function Zt(){return D(Tu)}a(Zt,"getPasteCacheDir");function ha(e){return Qt.join(Zt(),`${e}.txt`)}a(ha,"getPastePath");function zh(e){return xu("sha256").update(e).digest("hex").slice(0,16)}a(zh,"hashPastedText");async function Xh(e,o){try{let n=Zt();return await bu(n,{recursive:!0}),await Iu(ha(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(Xh,"storePastedText");async function ya(e){try{return await Ru(ha(e),{encoding:"utf8"})}catch{return null}}a(ya,"retrievePastedText");async function Vh(e=Pu){let o=Zt(),n=Date.now()-e,t=0,r=0,s;try{s=await Au(o)}catch{return{scanned:t,removed:r}}for(let l of s){if(!l.endsWith(".txt"))continue;t+=1;let c=Qt.join(o,l);try{(await Cu(c)).mtimeMs<n&&(await Eu(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(Vh,"cleanupOldPastes");import*as tr from"path";import*as rr from"os";function er(e){for(let o of va)try{let n=Xt(o,"builtin");e.register(n)}catch(n){Y({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(er,"registerBuiltinCommands");import*as ce from"fs";import*as Te from"path";function Lu(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(Lu,"normalizeAliases");function Mu(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(Mu,"normalizePriority");function _u(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:xr(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:br(e.hooks),frontmatter:e}}a(_u,"buildExecutionMetadata");function Nu(e,o){try{let n=ce.readFileSync(e,"utf-8"),[t,r]=$r(n),s=t??{},l=Te.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:Lu(s.aliases),priority:Mu(s.priority),content:r.trim(),location:o,path:e,frontmatter:s,execution:_u(s)}}catch(n){Y({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(Nu,"parseCommandFile");function or(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(!ce.existsSync(s))continue;let c=Te.resolve(s);try{c=ce.realpathSync.native?.(s)??ce.realpathSync(s)}catch{c=Te.resolve(s)}if(!n.has(c)){n.add(c);try{let d=ce.readdirSync(s);for(let u of d){if(!u.endsWith(".md"))continue;let f=Te.join(s,u),m=Nu(f,l);m&&o.push(m)}}catch(d){Y({source:"repl:commands",level:"error",message:`Error scanning directory ${s}.`,detail:d})}}}return o}a(or,"discoverCommands");function nr(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){Y({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(nr,"registerDiscoveredCommands");function ir(e,o){er(e);try{let n=rr.homedir(),t=o??process.cwd(),r=or([...Wu(t)]);nr(r,e)}catch(n){Y({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(ir,"registerAllCommands");function Wu(e){let o=rr.homedir();return[{path:tr.join(e,".kodax","commands"),location:"project"},{path:D("commands"),location:"user"},{path:tr.join(o,".agents","commands"),location:"user"}]}a(Wu,"commandDiscoveryDirs");function fy(e){let o=new pe;return ir(o,e),o.getAll()}a(fy,"listRegisteredCommands");function Ou(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(Ou,"summarizeAgentsFiles");async function Ra(e){let o=V(e);return await o.reload(),o.size}a(Ra,"reloadSkillRegistry");function Du(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(Du,"normalizeConfiguredExtensionPaths");function ju(){let e=$n.join(fe(),"config.json");try{if(!bn.existsSync(e))return{};let o=JSON.parse(bn.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Du(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(ju,"loadExtensionReloadConfig");async function Uu(){try{return await Hr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(i.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Uu,"discoverDefaultExtensionsForReload");async function Fu(){let e=ju(),o=await jn(e.extensions??[]),n=await jn(await Uu()),t=await No(n,o),r=[...t,...o],s=re();if(!s&&r.length>0&&(s=Br({config:e}).activate()),!s)return{reloaded:0,loaded:0,failures:0};let l=Ye(s),c=l.failures.length;await s.reloadExtensions({continueOnError:!0});let d=Ye(s),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(x=>x.path),m=await No(t,f),h=await No(o,[...f,...m]);await s.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await s.loadExtensions(h,{continueOnError:!0,loadSource:"config",stage:"reload"});let S=Ye(s);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,S.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,S.failures.length-c)}}a(Fu,"reloadExtensionRuntimeFromDisk");function Hu(e){return{...e,enabled:!0}}a(Hu,"createManualCompactionConfig");function sr(e){e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace unchanged: ${yt(e.runtimeInfo)}`)):console.log(i.dim(" Workspace unchanged."))}a(sr,"printWorkspaceUnchangedNote");var va=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async(e,o,n)=>{if(e.length>0){let t=e[0];if(de.size===0&&An(),de.has(t.toLowerCase())||!!Eo(t))ur(t,e.slice(1));else{if(n?.commandClient&&await Pa({command:t.toLowerCase(),args:[]},o.gitRoot,n.listHostCommands))return Ie(await n.commandClient.execute({sessionId:o.sessionId,inputId:xn(),name:t,args:["--help",...e.slice(1)]}));nf(t)}}else of(await n?.listHostCommands?.(o.gitRoot??process.cwd()))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
399
+ /help - Show Command Help
400
+ `)),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(`
401
+ [Usage: /setup [--custom|--help]]`));return}if(console.log(`
402
+ ${Yn()}
403
+ `),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=Fi({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 Ki({interaction:{choose:a(async(c,d)=>{let u=d.map(m=>m.label),f=await n.ui.select(c,u);return d.find(m=>m.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(`
404
+ Provider setup cancelled. Configuration files remain initialized.
405
+ `));return}console.log(i.green(`
406
+ Provider setup saved: ${l.selection.provider}/${l.selection.model}`)),console.log(i.dim(`Config: ${l.selection.configPath}`));for(let c of _i({apiKeyEnv:l.selection.apiKeyEnv}))console.log(` ${c}`);console.log()},"handler"),detailedHelp:a(()=>{console.log(`
407
+ ${Yn()}
408
+ `)},"detailedHelp")},{name:"exit",aliases:["quit","q","bye"],description:"Exit interactive mode",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(i.green(`
409
+ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
410
+ /exit - Exit Interactive Mode
411
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /exit ")+"Save session and exit"),console.log(i.dim(" /quit, /q, /bye ")+"Aliases for /exit"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Saves the current conversation session and exits interactive mode.")),console.log(i.dim(" Sessions can be resumed later with /load or CLI -c option.")),console.log(i.dim(" Exiting never removes or mutates the current workspace.")),console.log()},"detailedHelp")},{name:"clear",description:"Clear conversation history",handler:a(async(e,o,n)=>{o.messages=[],o.contextTokenSnapshot=void 0,n.clearHistory(),console.log(i.yellow(`
412
+ [Conversation cleared]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
413
+ /clear - Clear Conversation History
414
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /clear ")+"Clear all messages in current session"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Removes all messages from the current conversation context.")),console.log(i.dim(" Useful for starting fresh while keeping the session.")),console.log(),console.log(i.yellow(" Warning: This action cannot be undone!")),console.log()},"detailedHelp")},{name:"cost",description:"Show session cost report",usage:"/cost",handler:a(async(e,o,n)=>{let t=n.getCostReport?.();if(!t){console.log(i.dim(`
415
+ [No cost data available yet]`));return}console.log(i.cyan(`
416
+ `+t))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
417
+ /cost - Session Cost Report
418
+ `)),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(`
419
+ /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=wa();if(!n){console.log(i.yellow(`
420
+ [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(`
421
+ [No pasted content in this session yet]`));return}console.log(i.bold(`
422
+ Pasted content in this session:
423
+ `));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(`
424
+ Usage: /paste show <id>`));return}let s=n.get(r);if(!s){console.log(i.dim(`
425
+ [No paste registered with id #${r}]`));return}let l=s.content??"";if(!l&&s.contentHash){let c=await ya(s.contentHash);c&&(l=c)}if(!l){console.log(i.yellow(`
426
+ [Paste #${r} has no stored content (hash ${s.contentHash??"n/a"})]`));return}console.log(i.bold(`
427
+ Pasted text #${r} (${l.length} chars):
428
+ `)),console.log(l),console.log();return}console.log(i.yellow(`
429
+ [Unknown /paste subcommand: ${o}]`)),console.log(i.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
430
+ /paste - Inspect stored paste contents
431
+ `)),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=e.length>0?e.join(" "):void 0;if(n.compactSession){console.log(i.dim(`
432
+ [Compacting conversation...]`)),n.startCompacting?.();try{let m=await n.compactSession.compact({sessionId:o.sessionId,...r!==void 0?{customInstructions:r}:{}});if(!m.compacted){if(m.reason&&m.reason!=="no compaction needed")throw new Error(m.reason);console.log(i.green(`
433
+ [No compaction needed]`)),console.log(i.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
434
+ `));return}o.messages=[...m.messages],o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:ue(o.messages),source:o.contextTokenSnapshot?.source??"estimate"},n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter}),n.clearHistory?.(),o.lineage=await n.refreshSessionLineage?.()??o.lineage,console.log(i.green(`
435
+ [Compaction complete: ${Math.round(m.tokensBefore/1e3)}k -> ${Math.round(m.tokensAfter/1e3)}k tokens, ${Math.round((1-m.tokensAfter/m.tokensBefore)*100)}% reduced]`)),console.log()}finally{n.stopCompacting?.()}return}let s={...await Si(o.gitRoot),...Object.fromEntries(Object.entries(n.createKodaXOptions?.().compaction??{}).filter(([,m])=>m!==void 0))},l=t.provider,c=Nn(l);if(!c){console.log(i.red(`
436
+ [Provider not found: ${l}]`));return}let d=s.contextWindow??c.getEffectiveContextWindow?.(t.model)??c.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??ue(o.messages),f=Hu(s);console.log(i.dim(`
437
+ [Compacting conversation...]`)),n.startCompacting?.();try{let m=await Ir(o.messages,f,c,d,r,void 0,u,qr,Gr,t.model,!0,c.getEffectiveMaxOutputTokens(t.model));if(!m.compacted){console.log(i.green(`
438
+ [No compaction needed]`)),console.log(i.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
439
+ `));return}let h=await zr({compacted:m.messages,artifactLedger:m.artifactLedger??[],tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter,capacity:{contextWindow:d,reservedResponseTokens:c.getEffectiveMaxOutputTokens(t.model),fixedInputTokens:Math.max(0,u-ue(o.messages))}}),S={messages:o.messages,lineage:o.lineage,title:o.title,artifactLedger:o.artifactLedger,contextTokenSnapshot:o.contextTokenSnapshot,sessionSnapshotDirty:o.sessionSnapshotDirty},x={summary:m.summary??"",tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter,...m.anchor,reason:"manual"},y=Tr(o.messages,o.lineage),E=Lr(y,h.compacted,x,h.postCompactAttachmentsForLineage),k=Pr(E),v=Math.max(0,u-ue(o.messages))+ue(k),M=[...E.entries].reverse().find(g=>g.type==="compaction");o.lineage={...E,entries:E.entries.map(g=>g.type==="compaction"&&g.id===M?.id?{...g,tokensAfter:v}:g)},o.messages=k,o.artifactLedger=m.artifactLedger??o.artifactLedger,o.sessionSnapshotDirty=!0,o.contextTokenSnapshot={currentTokens:v,baselineEstimatedTokens:ue(o.messages),source:o.contextTokenSnapshot?.source??"estimate"};try{await n.saveSession(o.lineage)}catch(g){throw Object.assign(o,S),g}n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:v}),n.clearHistory?.(),console.log(i.green(`
440
+ [Compaction complete: ${Math.round(m.tokensBefore/1e3)}k -> ${Math.round(v/1e3)}k tokens, ${Math.round((1-v/m.tokensBefore)*100)}% reduced]`)),console.log()}finally{n.stopCompacting?.()}}catch(r){let s=r instanceof Error?r.message:String(r);console.log(i.red(`
441
+ [Compaction failed: ${s}]
442
+ `))}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
443
+ /compact - Manual Context Compaction
444
+ `)),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(`
445
+ Reloading project rule files, skills, and runtime extensions...
446
+ `));try{let r=await n.reloadAgentsFiles?.()??[],s=Ou(r),l=await Ra(o.gitRoot),c=await Fu(),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.
447
+ `)),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:
448
+ `)),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.
449
+ `)),console.log(i.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
450
+ /reload - Reload Project Context
451
+ `)),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(e,o,n)=>{let t=n.inspectExtensions?void 0:re(),r=n.inspectExtensions?(await n.inspectExtensions()).diagnostics:t?Ye(t):void 0;if(!r){console.log(i.yellow(`
452
+ [No active extension runtime]
453
+ `));return}let s=r.tools.filter(l=>l.source.kind==="extension");if(console.log(i.bold(`
454
+ Extension Runtime:
455
+ `)),console.log(i.dim(` Loaded: ${r.loadedExtensions.length}`)),console.log(i.dim(` Capabilities: ${r.capabilityProviders.length}`)),console.log(i.dim(` Commands: ${r.commands.length}`)),console.log(i.dim(` Hooks: ${r.hooks.length}`)),console.log(i.dim(` Failures: ${r.failures.length}`)),console.log(i.dim(` Extension Tools: ${s.length}`)),r.defaults.activeTools!==void 0&&console.log(i.dim(` Active Tools: ${r.defaults.activeTools.join(", ")||"(none)"}`)),(r.defaults.modelSelection.provider||r.defaults.modelSelection.model)&&console.log(i.dim(` Model Override: ${r.defaults.modelSelection.provider??"(inherit)"} / ${r.defaults.modelSelection.model??"(inherit)"}`)),r.defaults.thinkingLevel&&console.log(i.dim(` Thinking: ${r.defaults.thinkingLevel}`)),console.log(),r.loadedExtensions.length>0){console.log(i.bold("Loaded Extensions:"));for(let l of r.loadedExtensions)console.log(i.dim(` - ${l.label} [${l.loadSource}] (${l.path})`));console.log()}if(r.commands.length>0){console.log(i.bold("Extension Commands:"));for(let l of r.commands){let c=l.aliases?.length?` [${l.aliases.join(", ")}]`:"";console.log(i.dim(` - /${l.name}${c} ${l.description}`))}console.log()}if(r.capabilityProviders.length>0){console.log(i.bold("Capability Providers:"));for(let l of r.capabilityProviders){let c=mf(l.metadata);console.log(i.dim(` - ${l.id} [${l.kinds.join(", ")}]${c?` ${c}`:""}`))}console.log()}if(s.length>0){console.log(i.bold("Extension Tools:"));for(let l of s){let c=l.shadowedSources.length>0?` overrides: ${l.shadowedSources.map(d=>d.label??d.id??d.kind).join(", ")}`:"";console.log(i.dim(` - ${l.name}${c}`))}console.log()}if(r.hooks.length>0){console.log(i.bold("Hook Participation:"));for(let l of r.hooks)console.log(i.dim(` - ${l.hook} [#${l.order}] ${l.source.label}`));console.log()}if(r.failures.length>0){console.log(i.bold("Recent Failures:"));for(let l of r.failures.slice(-10))console.log(i.dim(` - [${l.stage}] ${l.source.label}: ${l.target} -> ${l.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(`
456
+ [Usage: /sandbox]`));return}if(!n.inspectSandbox){console.log(i.dim(`
457
+ Sandbox diagnostics are unavailable because this host did not provide them.
458
+ `));return}let t=await n.inspectSandbox(),r=t.ready?i.green("ready"):i.yellow("unavailable");console.log(i.bold(`
459
+ Sandbox
460
+ `)),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(`
461
+ /sandbox - Inspect Sandbox Readiness
462
+ `)),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 tf(o,t,e,n)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
463
+ /status - Show Session Status
464
+ `)),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,o,n)=>{let t=n.mcp,r=t?void 0:re();if(!t&&!r){console.log(i.yellow(`
465
+ [No extension runtime active \u2014 MCP is not available]`));return}let l=(r?Ye(r):void 0)?.capabilityProviders.find(f=>f.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(i.dim(`
466
+ Refreshing MCP catalogs...`));try{t?await t.listTools({forceRefresh:!0}):await r.refreshCapabilityProviders("mcp"),console.log(i.green("MCP catalogs refreshed."))}catch(f){console.log(i.red(`Refresh failed: ${f instanceof Error?f.message:String(f)}`))}return}if(console.log(i.cyan(`
467
+ MCP Status
468
+ `)),!t&&!l){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 d=l?.metadata,u=t?await t.status():d?.servers??[];console.log(i.dim(` Servers: ${u.length}`)),console.log();for(let f of u){let m=f.status==="ready"?i.green:f.status==="error"?i.red:i.yellow;console.log(` ${i.bold(f.serverId)} ${m(f.status)} connect=${i.dim(f.connect)}`),f.cachedAt&&console.log(i.dim(` tools=${f.tools} resources=${f.resources} prompts=${f.prompts}`)),f.lastError&&console.log(i.red(` error: ${f.lastError}`))}console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
469
+ /mcp - MCP Server Management
470
+ `)),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 _o({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:dr(o)});xa(s);return}if(r==="mode"){if(e.length===1){console.log(i.dim(`
471
+ Current repo-intelligence mode: ${i.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(i.dim(`Usage: /repo-intel mode [auto|full|light|off]
472
+ `));return}let s=Gu(e[1]);if(!s){console.log(i.red(`
473
+ [Invalid repo-intelligence mode: ${e[1]}]`)),console.log(i.dim(`Usage: /repo-intel mode [auto|full|light|off]
474
+ `));return}if(n.config)return Ue(n,{repoIntelligenceMode:s},async()=>{if(!n.setRepoIntelligenceRuntime)throw new Error("Session repo intelligence control unavailable");await n.setRepoIntelligenceRuntime({mode:s})},`Repo intelligence mode: ${s}`);let l=$a({mode:s},{repoIntelligenceMode:s},n,t);Je(`Repo intelligence mode: ${s}`,l);return}if(r==="trace"){let s=e[1]?.toLowerCase();if(!s){console.log(i.dim(`
475
+ Current repo-intelligence trace: ${i.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(i.dim(`Usage: /repo-intel trace [on|off|toggle]
476
+ `));return}let l=zu(s,t.repoIntelligenceTrace??!1);if(l===null){console.log(i.red(`
477
+ [Invalid trace value: ${e[1]}]`)),console.log(i.dim(`Usage: /repo-intel trace [on|off|toggle]
478
+ `));return}if(n.config)return Ue(n,{repoIntelligenceTrace:l},async()=>{if(!n.setRepoIntelligenceRuntime)throw new Error("Session repo intelligence control unavailable");await n.setRepoIntelligenceRuntime({trace:l})},`Repo intelligence trace: ${l?"on":"off"}`);let c=$a({trace:l},{repoIntelligenceTrace:l},n,t);Je(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(i.yellow(`
479
+ [Repo intelligence refresh is automatic in this build]`)),console.log(i.dim(`Use /repo-intel status to inspect the current engine state.
480
+ `));return}console.log(i.red(`
481
+ [Unknown /repo-intel subcommand: ${e[0]}]`)),console.log(i.dim(`Usage: /repo-intel [status|mode|trace]
482
+ `))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
483
+ /repo-intel - Built-in Repo Intelligence
484
+ `)),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(`
485
+ [/repointel is deprecated; use /repo-intel status]
486
+ `)),r==="status"){let s=await _o({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:dr(o)});xa(s);return}if(r==="mode"){console.log(i.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
487
+ `));return}if(r==="trace"){console.log(i.dim(`Use /repo-intel trace [on|off|toggle] to change repo-intelligence trace output.
488
+ `));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.
489
+ `));return}console.log(i.dim(`Usage: /repointel [status]
490
+ `))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
491
+ /repointel - Deprecated
492
+ `)),console.log(i.dim("Use /repo-intel status for built-in repo-intelligence diagnostics.")),console.log(i.dim("External endpoint/bin/warm controls are deprecated for KodaX.")),console.log()},"detailedHelp")},{name:"fallback",description:"Configure the cross-provider fallback chain for child tasks",usage:"/fallback [status | <p1,p2,...> | off]",handler:a(async(e,o,n,t)=>{if(n.config)return Zo("fallbackProviders",e,n.config);let r=(process.env.KODAX_FALLBACK_PROVIDERS??"").split(",").map(c=>c.trim()).filter(Boolean),s=e[0]?.toLowerCase();if(!s||s==="status"){r.length===0?console.log(i.dim(`
493
+ Child-task provider fallback: `)+i.yellow("off")+i.dim(" (no chain configured)")):(console.log(i.dim(`
494
+ Child-task provider fallback: `)+i.green("on")),console.log(i.dim(" Order: ")+i.cyan(r.join(" \u2192 ")))),console.log(i.dim(`
495
+ 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
496
+ `));return}if(s==="off"||s==="clear"||s==="none"){ke({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(i.green(`
497
+ \u2713 `)+i.dim(`Child-task provider fallback disabled.
498
+ `));return}let l=e.join(",").split(",").map(c=>c.trim()).filter(Boolean);if(l.length===0){console.log(i.red(`
499
+ [/fallback: no provider ids given]`)),console.log(i.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
500
+ `));return}ke({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(i.green(`
501
+ \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).
502
+ `))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto/full-access)",usage:"/mode [plan|accept-edits|auto|full-access]",handler:a(async(e,o,n,t)=>{if(e.length===0){let s=t.hostSettings?t.hostSettings.permissionMode??"Host default":so(t.permissionMode,"accept-edits")??"accept-edits";console.log(i.dim(`
503
+ Current mode: ${i.cyan(s)}`)),console.log(i.dim("Usage: /mode [plan|accept-edits|auto|full-access]"));return}let r=e[0];if(Bo.includes(r)){let s=Se(r);n.setPermissionMode?await n.setPermissionMode(s):t.permissionMode=s,nt(s),console.log(i.cyan(`
504
+ [Switched to ${s} mode] (saved)`))}else console.log(i.red(`
505
+ [Unknown mode: ${e[0]}. Use: plan | accept-edits | auto | full-access]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
506
+ /mode - Switch Permission Mode
507
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /mode ")+"Show current permission mode"),console.log(i.dim(" /mode plan ")+"Read-only: blocks all modifications"),console.log(i.dim(" /mode accept-edits ")+"Sandbox first; user decides only at the host boundary"),console.log(i.dim(" /mode auto ")+"Sandbox first; LLM review only at the host boundary"),console.log(i.dim(" /mode full-access ")+"Run directly on the host after Exec Policy"),console.log(),console.log(i.bold("Permission Levels:")),console.log(i.yellow(" plan ")+i.dim("- Read-only planning, no file/command modifications")),console.log(i.green(" accept-edits ")+i.dim("- Sandbox first; user decides host-boundary fallbacks")),console.log(i.green(" auto ")+i.dim("- Sandbox first; LLM reviews host-boundary fallbacks")),console.log(i.red(" full-access ")+i.dim("- Direct host execution; Exec Policy still applies")),console.log(),console.log(i.bold("Notes:")),console.log(i.dim(" - Mode is saved to ~/.kodax/config.json (user-level)")),console.log()},"detailedHelp")},{name:"auto-denials",description:"Show Auto reviewer denial tracker + circuit breaker stats",usage:"/auto-denials",handler:a(async(e,o,n)=>{let t=await n.getAutoModeStats?.();if(!t){console.log(i.yellow(`
508
+ [auto-denials] not in auto mode \u2014 switch via /mode auto first`));return}console.log(i.cyan(`
509
+ [auto-mode reviewer stats]`)),console.log(i.dim(` reviewer 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.classifierHealth==="degraded"&&console.log(i.yellow(" \u21AA reviewer calls are temporarily skipped; host-boundary operations fail closed with safer-route guidance.")),console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
510
+ /auto-denials - Auto Reviewer Diagnostic Dump
511
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto-denials ")+"Print reviewer tracker + breaker counters"),console.log(),console.log(i.bold("Diagnostics and fail-closed behavior:")),console.log(i.dim(" - Block counters are diagnostic only.")),console.log(i.dim(" - 5 errors in 10 min \u2192 skip the reviewer temporarily and block host-boundary operations.")),console.log()},"detailedHelp")},{name:"save",description:"Save current session",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(i.green(`
512
+ [Session saved]`)),sr(o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
513
+ /save - Save Current Session
514
+ `)),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)return console.log(i.red(`
515
+ [Usage: /load <session-id>]`)),n.listSessions();await n.loadSession(e[0])==="missing"&&console.log(i.red(`
516
+ [Session not found: ${e[0]}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
517
+ /load - Load a Saved Session
518
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /load ")+"List available sessions"),console.log(i.dim(" /load <session-id> ")+"Load a specific session"),console.log(i.dim(" /resume <id> ")+"Alias for /load"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /load ")+"# See all sessions"),console.log(i.dim(" /load 20260219_143052")+"# Load session by ID"),console.log(),console.log(i.bold("Workspace behavior:")),console.log(i.dim(" /load can resume sessions from sibling workspaces in the same canonical repo.")),console.log(i.dim(" If a saved workspace is unavailable, KodaX explains the fallback before loading.")),console.log(),console.log(i.dim(" See also: /help sessions, /help save")),console.log()},"detailedHelp")},{name:"tree",description:"Inspect or switch the current session tree",usage:"/tree [entry-id|label] | /tree label <entry-id|label> <name> | /tree unlabel <entry-id|label>",handler:a(async(e,o,n)=>{if(e.length===0){await n.printSessionTree?.();return}let t=e[0]?.trim().toLowerCase();if(t==="label"){if(e.length<3){console.log(i.red(`
519
+ [Usage: /tree label <entry-id|label> <name>]`));return}await n.labelSessionBranch?.(e[1],e.slice(2).join(" "))||console.log(i.red(`
520
+ [Tree entry not found: ${e[1]}]`));return}if(t==="unlabel"){if(e.length<2){console.log(i.red(`
521
+ [Usage: /tree unlabel <entry-id|label>]`));return}await n.labelSessionBranch?.(e[1],void 0)||console.log(i.red(`
522
+ [Tree entry not found: ${e[1]}]`));return}await n.switchSessionBranch?.(e[0])==="missing"&&console.log(i.red(`
523
+ [Tree entry not found: ${e[0]}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
524
+ /tree - Inspect Session Lineage
525
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /tree ")+"Show the current session tree"),console.log(i.dim(" /tree <entry-id|label> ")+"Jump to a previous branch point"),console.log(i.dim(" /tree label <entry-id|label> <name>")+"Attach a lightweight checkpoint label"),console.log(i.dim(" /tree unlabel <entry-id|label> ")+"Clear an existing checkpoint label"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Session history is stored as a branchable tree. Use /tree to")),console.log(i.dim(" inspect the lineage, revisit an earlier branch safely, and add")),console.log(i.dim(" bookmark-style checkpoint labels without changing git state.")),console.log()},"detailedHelp")},{name:"fork",description:"Fork the current branch into a new session",usage:"/fork [entry-id|label]",handler:a(async(e,o,n)=>{await n.forkSession?.(e[0])==="failed"&&console.log(i.red(`
526
+ [Unable to fork session${e[0]?` from ${e[0]}`:""}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
527
+ /fork - Export a Branch to a New Session
528
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /fork ")+"Fork from the active branch"),console.log(i.dim(" /fork <entry-id|label>")+"Fork from a selected tree node"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Creates a new session file from the selected branch so you can")),console.log(i.dim(" continue there without mutating the current session lineage.")),console.log()},"detailedHelp")},{name:"rewind",description:"Rewind the current session to a previous point",usage:"/rewind [entry-id|label]",handler:a(async(e,o,n)=>{await n.rewindSession?.(e[0])==="failed"&&console.log(i.red(`
529
+ [Unable to rewind${e[0]?` to ${e[0]}`:" \u2014 no previous turn found"}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
530
+ /rewind - Rewind Session to a Previous Point
531
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /rewind ")+"Rewind to the previous user input"),console.log(i.dim(" /rewind <entry-id|label>")+"Rewind to a specific tree node"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Truncates the session after the target entry. Unlike /fork,")),console.log(i.dim(" this modifies the current session in place. The rewind event")),console.log(i.dim(" is recorded in the lineage for auditability.")),console.log(),console.log(i.yellow(" \u26A0 This is irreversible. Use /fork first to preserve a copy.")),console.log()},"detailedHelp")},{name:"sessions",aliases:["ls","list"],description:"List recent sessions",handler:a(async(e,o,n)=>n.listSessions(),"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
532
+ /sessions - List Saved Sessions
533
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /sessions ")+"List all saved sessions"),console.log(i.dim(" /ls, /list ")+"Aliases for /sessions"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows recent conversation sessions with their IDs,")),console.log(i.dim(" message counts, titles, and workspace truth. Use /load <id> to resume.")),console.log(i.dim(" This keeps sibling worktree sessions inspectable without a persistent cockpit.")),console.log(),console.log(i.dim(" See also: /help load, /help delete")),console.log()},"detailedHelp")},{name:"history",aliases:["hist"],description:"Show conversation history",handler:a(async(e,o,n)=>n.printHistory(),"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
534
+ /history - Show Conversation History
535
+ `)),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)return console.log(i.red(`
536
+ [Usage: /delete <session-id> or /delete all]`)),n.listSessions();e[0]==="all"?(await n.deleteAllSessions?.(),console.log(i.green(`
537
+ [All sessions deleted]`)),sr(o)):(await n.deleteSession?.(e[0]),console.log(i.green(`
538
+ [Session deleted: ${e[0]}]`)),sr(o))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
539
+ /delete - Delete Saved Sessions
540
+ `)),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)=>{if(n.config)return Ss(e,n,t);let r=Ho().providerModels;if(e.length===0){console.log(i.bold(`
541
+ Available Providers:
542
+ `));let c=wi(r);for(let d of c){let u=d.configured?i.green("[configured]"):i.red("[not configured]"),f=d.custom?i.yellow(" [custom]"):"",m=d.name===t.provider,h=m?i.cyan(" *"):"";console.log(` ${i.bold(d.name)}${h} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(i.yellow(` ! ${qn(d.capabilityProfile)}`));let S=Ne(d.name,r),x=m?t.model:null;for(let y of S){let k=m&&(x===y||!x&&y===d.model)?i.cyan(">"):" ";console.log(` ${k} ${y}`)}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
543
+ `));return}let s=(e[0]??"").trim();if(!s)return;if(s.startsWith("/")){let c=s.slice(1);if(!c){console.log(i.red(`
544
+ [Missing model name after /]`));return}let d=Ne(t.provider,r);if(!d.includes(c)){console.log(i.red(`
545
+ [Unknown model: ${c}]`)),console.log(i.dim(`Available models for ${t.provider}: ${d.join(", ")}
546
+ `));return}ke({model:c}),await n.switchProvider?.(t.provider,c),console.log(i.cyan(`
547
+ [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(`
548
+ [Invalid format. Use: /model <provider>/<model>]`));return}if(!Pe(d)){console.log(i.red(`
549
+ [Unknown provider: ${d}]`)),console.log(i.dim(`Available: ${Le().join(", ")}
550
+ `));return}let f=Ne(d,r);if(!f.includes(u)){console.log(i.red(`
551
+ [Unknown model: ${u}]`)),console.log(i.dim(`Available models for ${d}: ${f.join(", ")}
552
+ `));return}ke({provider:d,model:u}),await n.switchProvider?.(d,u),console.log(i.cyan(`
553
+ [Switched to ${d}/${u}] (saved)`));return}let l=s;Pe(l)?(ke({provider:l,model:void 0}),await n.switchProvider?.(l),console.log(i.cyan(`
554
+ [Switched to ${l}] (saved)`))):(console.log(i.red(`
555
+ [Unknown provider: ${l}]`)),console.log(i.dim(`Available: ${Le().join(", ")}
556
+ `)))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
557
+ /model - Switch LLM Provider/Model
558
+ `)),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(),m=a(()=>{let x=f.indexOf("/");return{provider:x===-1?f:f.slice(0,x),model:x===-1?void 0:f.slice(x+1)||void 0}},"parseTarget"),h=a(()=>{if(!f){Wn(),console.log(i.dim(`
559
+ [Cleared all learned capability overrides]
560
+ `));return}let{provider:x,model:y}=m();Wn(x,y),console.log(i.dim(`
561
+ [Cleared learned capability overrides for ${x}${y?`/${y}`:""}]
562
+ `))},"clearLocal"),S=n?.providerCapabilities;if(S!==void 0){let{provider:x,model:y}=m();try{return await S.forgetCapabilities(f?{provider:x,model:y}:void 0),{success:!0,message:i.dim(`[Cleared Host learned capability overrides${f?` for ${f}`:""}]`)}}catch(E){return{success:!1,message:i.red(`[Forget failed: ${E instanceof Error?E.message:String(E)}]`)}}}h();return}if(r==="probe"){let f=`${t.provider}/${t.model??"(default)"}`;try{let m=n?.providerCapabilities,h=(m?await m.reasoningEfforts({provider:t.provider,model:t.model}):Fo(t.provider,t.model)).filter(y=>y!=="auto"&&y!=="off"),S=m?await m.probeReasoningEfforts({provider:t.provider,model:t.model,efforts:h}):await qi({provider:t.provider,model:t.model,efforts:h,resolve:Nn,now:a(()=>new Date().toISOString(),"now")}),x=S.map(y=>{let E=y.status==="accepted"?i.green("\u2713"):y.status==="rejected"?i.red("\u2717"):i.yellow("!");return i.dim(` ${E} ${y.effort}${y.error?` \u2014 ${y.error}`:""}`)});return{success:S.every(y=>y.status!=="error"),message:[i.dim(`[Probing ${f} \u2014 ${h.length} efforts, minimal requests\u2026]`),...x,i.dim(" (rejections recorded; undo with /provider forget-capability)")].join(`
563
+ `)}}catch(m){let h=m instanceof Error?m.message:String(m);return{success:!1,message:i.red(`[Probe failed: ${h}]`)}}}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(!Pe(s)){console.log(i.red(`
564
+ [Unknown provider: ${s}]`)),console.log(i.dim(`Available: ${Le().join(", ")}
565
+ `));return}let c=mi(s,l);if(!c){console.log(i.red(`
566
+ [Provider details unavailable: ${s}]`)),console.log();return}let d=ki(s,l,t.reasoningMode);console.log(i.bold(`
567
+ Provider Details:
568
+ `)),console.log(i.dim(` Provider: ${i.cyan(c.provider)}${c.model?` / ${i.cyan(c.model)}`:""}`)),console.log(i.dim(` Source: ${yi(c.sourceKind)}`)),console.log(),console.log(i.bold("Capability Matrix:"));for(let f of vi(c))console.log(i.dim(` - ${f}`));console.log(i.dim(` - Session effort: ${t.hostSettings?t.hostSettings.effort??"Host default":Ea(t.effort)}`));let u=kr(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 m=f.decision.status==="block"?i.red:f.decision.status==="warn"?i.yellow:i.green;console.log(m(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(i.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
569
+ /provider - Inspect Provider Semantics
570
+ `)),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)=>{if(n.config)return en(e,n,t);await ar("thinking",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
571
+ /thinking - Set Native Reasoning Effort
572
+ `)),console.log(i.bold("Usage:")),Sa("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)=>{if(n.config)return en(e,n,t);await ar("reasoning",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
573
+ /reasoning - Set Native Reasoning Effort
574
+ `)),console.log(i.bold("Usage:")),Sa("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)=>{if(n.config)return en(e,n,t);await ar("effort",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
575
+ /effort - Set Native Reasoning Effort
576
+ `)),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(`
577
+ 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(`
578
+ Agent mode: ${i.cyan(t.hostSettings?t.hostSettings.agentMode?.toUpperCase()??"Host default":t.agentMode.toUpperCase())}`)),console.log(i.dim(`Usage: /agent-mode [ama|sa|toggle]
579
+ `));return}let r=e[0]?.toLowerCase();if(r==="amaw"||r==="ama-workflow"){console.log(i.yellow(`
580
+ [AMAW was retired in v0.7.72. Use AMA; Workflow execution now requires an explicit /workflow request.]`));return}let s=r==="toggle"?Qi(t.agentMode):r==="ama"||r==="sa"?r:void 0;if(!s){console.log(i.red(`
581
+ [Invalid agent mode: ${e[0]}]`)),console.log(i.dim(`Usage: /agent-mode [ama|sa|toggle]
582
+ `));return}if(n.config)return Ue(n,{agentMode:s},async()=>{if(!n.setAgentMode)throw new Error("Session agent mode control unavailable");await n.setAgentMode(s)},`Agent mode: ${s.toUpperCase()}`);let l=await Yu(s,n,t);Je(`Agent mode: ${s.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
583
+ /agent-mode - Adaptive Multi-Agent Mode Control
584
+ `)),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"),nt("auto"),console.log(i.cyan(`
585
+ [Switched to auto mode] (saved)`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
586
+ /auto - Quick Switch to Auto Mode
587
+ `)),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 runs sandboxed calls first, then uses the LLM reviewer at the host boundary;")),console.log(i.dim(" ordinary actions continue silently; reviewer concerns block the exact attempt with recovery guidance.")),console.log(),console.log(i.dim(" See also: /help mode, /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 rn(tn(o),"skill");return}await af(e,o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
588
+ /skill - Skill Namespace
589
+ `)),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,o,n)=>{if(n.config)return Zo("verifierLog",e,n.config);let t=e[0]?.toLowerCase(),r=process.env.KODAX_VERIFIER_LOG==="1";if(!t){let c=Ho().verifierLog===!0,d=r?"on":"off",u=c===r?"":` (env=${r?"on":"off"}, config=${c?"on":"off"})`;console.log(i.dim(`
590
+ Sidecar Verifier log: ${i.cyan(d)}${u}`)),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]
591
+ `));return}let s;if(t==="on"||t==="true"||t==="1")s=!0;else if(t==="off"||t==="false"||t==="0")s=!1;else{console.log(i.red(`
592
+ [Invalid value: ${e[0]}]`)),console.log(i.dim(`Usage: /verifier-log [on|off]
593
+ `));return}s?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let l=Co({verifierLog:s});Je(`Sidecar Verifier log: ${s?"on":"off"}`,l)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
594
+ /verifier-log - Sidecar Verifier Log Toggle
595
+ `)),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,o,n)=>{if(n.config)return Zo("stallLog",e,n.config);let t=e[0]?.toLowerCase(),r=process.env.KODAX_STALL_LOG==="1";if(!t){let c=Ho().stallLog===!0,d=r?"on":"off",u=c===r?"":` (env=${r?"on":"off"}, config=${c?"on":"off"})`;console.log(i.dim(`
596
+ Stall Sidecar log: ${i.cyan(d)}${u}`)),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]
597
+ `));return}let s;if(t==="on"||t==="true"||t==="1")s=!0;else if(t==="off"||t==="false"||t==="0")s=!1;else{console.log(i.red(`
598
+ [Invalid value: ${e[0]}]`)),console.log(i.dim(`Usage: /stall-log [on|off]
599
+ `));return}s?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let l=Co({stallLog:s});Je(`Stall Sidecar log: ${s?"on":"off"}`,l)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
600
+ /stall-log - Stall Sidecar Log Toggle
601
+ `)),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")},dt,ft,gt,Ps,la,Gt,zt,da,Jt],Bu={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 Ku(e){let o=Qe();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(Ku,"getCommandsForCategory");function Ca(e){return e!=="off"}a(Ca,"reasoningModeToLegacyThinking");function Ea(e){return e==="none"?"off":e??"auto"}a(Ea,"formatReasoningEffortDisplay");function Ia(e){return Fo(e.provider,e.model).map(o=>o==="off"?"none":o)}a(Ia,"getCanonicalReasoningEffortOptions");function qu(e,o){return`Usage: /${e} ${Ia(o).join("|")}|<provider-value>`}a(qu,"formatReasoningEffortUsage");function ka(e){if(e.hostSettings)return e.hostSettings.effort??e.hostSettings.reasoningMode??(e.hostSettings.thinking===void 0?"Host default":e.hostSettings.thinking?"on":"off");let o=hi(e);return gi({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(ka,"formatCurrentReasoningEffortStatus");function Gu(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(Gu,"normalizeRepoIntelPublicMode");function zu(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(zu,"resolveToggleFlag");function Co(e){try{return ke(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Co,"persistUserConfig");function Je(e,o){if(o.saved){console.log(i.cyan(`
602
+ [${e}] (saved)`));return}console.log(i.yellow(`
603
+ [${e}]`)),console.log(i.red(`[Config save failed: ${o.error.message}]`))}a(Je,"printPersistedCommandStatus");var Xu={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function ar(e,o,n,t){let r=qu(e,t);if(o.length===0){let f=ka(t);console.log(i.dim(`
604
+ Reasoning effort: ${i.cyan(f)}`)),console.log(i.dim(`Compatibility: ${i.cyan(t.hostSettings?t.hostSettings.reasoningMode??"Host default":t.reasoningMode)}`)),console.log(i.dim(`Available: ${Ia(t).join(", ")}`)),console.log(i.dim(`${r}
605
+ `));return}if(o.length>1){console.log(i.red(`
606
+ [Reasoning effort accepts exactly one value]`)),console.log(i.dim(`${r}
607
+ `));return}let s=o[0].toLowerCase(),l;try{l=Lo(Xu[s]??s)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(i.red(`
608
+ [Invalid reasoning effort: ${m}]`)),console.log(i.dim(`${r}
609
+ `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l;if(c==="none"&&!Fo(t.provider,t.model).includes("off")){let f=t.model?`${t.provider}/${t.model}`:t.provider;console.log(i.red(`
610
+ [${f} does not support disabling reasoning]`)),console.log(i.dim(`${r}
611
+ `));return}let d=Vu(c,t),u=await Ju(c,n,t);Je(`Reasoning effort: ${ka(d)}`,u)}a(ar,"handleReasoningEffortCommand");function Sa(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(Sa,"printReasoningEffortHelp");function Ta(e){return e==="none"?"off":"auto"}a(Ta,"resolveReasoningModeAfterEffort");function Vu(e,o){let n=Ta(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:Ca(n)}}a(Vu,"resolveConfigAfterReasoningEffort");async function Ju(e,o,n){let t=Ta(e),r=Ca(t),s=Co({effort:e,reasoningMode:t,thinking:r});return o.setEffort?await o.setEffort(e):(n.effort=e,n.effortOverride=e!==void 0),o.setReasoningMode?await o.setReasoningMode(t):(n.reasoningMode=t,n.thinking=r),s}a(Ju,"applyReasoningEffort");async function Yu(e,o,n){let t=Co({agentMode:e});return o.setAgentMode?await o.setAgentMode(e):n.agentMode=e,t}a(Yu,"applyAgentMode");function $a(e,o,n,t){let r=Co(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($a,"applyRepoIntelligenceRuntimeConfig");function Qu(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(Qu,"formatRepoIntelligenceSummary");function dr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(dr,"getRepoIntelInspectionWorkspaceRoot");function Zu(e){return e.status}a(Zu,"formatRepoIntelStatusLabel");function ef(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(ef,"formatRepoIntelActiveEngine");function xa(e){console.log(i.bold(`
612
+ Repo Intelligence:
613
+ `)),console.log(i.dim(` Mode: ${i.cyan(e.configuredMode)}`)),console.log(i.dim(` Engine: ${i.cyan(ef(e))}`)),console.log(i.dim(` Status: ${i.cyan(Zu(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(xa,"printRepoIntelStatus");function ba(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(ba,"printCommandSection");function of(e=[]){console.log(i.bold(`
614
+ Available Commands:
615
+ `));let o=Qe(),n=new Set;for(let[r,s]of Object.entries(Bu)){let l=Ku(s);if(l.length!==0){for(let c of l)n.add(c.name.toLowerCase());ba(r,l)}}let t=new Map;for(let r of o.getAll()){if(r.userInvocable===!1||n.has(r.name.toLowerCase()))continue;let s=r.source==="extension"?"Extensions":r.source==="skill"?"Skill Commands":r.source==="prompt"?"Prompt Commands":"Other Commands",l=t.get(s)??[];l.push(r),n.add(r.name.toLowerCase()),t.set(s,l)}for(let r of df()){if(n.has(r.name.toLowerCase()))continue;let s=t.get("Extensions")??[];s.push({name:r.name,aliases:r.aliases,description:r.description}),n.add(r.name.toLowerCase()),t.set("Extensions",s)}for(let r of e){if(r.userInvocable===!1||n.has(r.name.toLowerCase()))continue;let s=r.source==="extension"?"Extensions":"Prompt Commands",l=t.get(s)??[];l.push({name:r.name,aliases:[...r.aliases??[]],description:r.description}),t.set(s,l),n.add(r.name.toLowerCase())}for(let r of["Extensions","Skill Commands","Prompt Commands","Other Commands"])ba(r,t.get(r)??[]);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(of,"printHelp");function nf(e){let o=Dr({topic:e});if(console.log(`
616
+ ${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(`
617
+ Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(nf,"printManualTopic");function ur(e,o=[]){de.size===0&&An();let n=de.get(e.toLowerCase());if(!n){let t=Eo(e);if(!t){console.log(i.yellow(`
618
+ [Unknown command: /${e}. Type /help for available commands]`));return}console.log(i.cyan(`
619
+ /${t.name}`)),t.aliases?.length&&console.log(i.dim(`Aliases: ${t.aliases.join(", ")}`)),console.log(i.dim(`
620
+ ${t.description}`)),console.log(i.dim(`
621
+ Usage: ${uf(t)}`)),console.log();return}n.detailedHelp?n.detailedHelp(o):(console.log(i.cyan(`
622
+ /${n.name}`)),n.aliases?.length&&console.log(i.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(i.dim(`
623
+ ${n.description}`)),n.usage&&console.log(i.dim(`
624
+ Usage: ${n.usage}`)),console.log())}a(ur,"printDetailedHelp");async function tf(e,o,n=[],t){let r=n[0]?.toLowerCase(),s=await t?.getSessionStatus?.(),l=t?.getSessionStatus?s?.tokens:e.contextTokenSnapshot?.currentTokens??ue(e.messages),c=t?.getSessionStatus?"Host estimate":e.contextTokenSnapshot?.source??"estimate",d=t?.getSessionStatus?s?.messageCount:e.messages.length,u=fi(o.provider),f=pi(o.provider,o.model,o.reasoningMode);if(console.log(i.bold(`
625
+ Session Status:
626
+ `)),console.log(i.dim(` Provider: ${i.cyan(o.provider)}${o.model?` / ${i.cyan(o.model)}`:""}`)),console.log(i.dim(` Permission: ${i.cyan(o.hostSettings?o.hostSettings.permissionMode??"Host default":o.permissionMode)}`)),console.log(i.dim(` Reasoning: ${i.cyan(o.hostSettings?o.hostSettings.reasoningMode??"Host default":o.reasoningMode)}`)),console.log(i.dim(` Effort: ${i.cyan(o.hostSettings?o.hostSettings.effort??"Host default":Ea(o.effort))}`)),console.log(i.dim(` Agent Mode: ${i.cyan(o.hostSettings?o.hostSettings.agentMode?.toUpperCase()??"Host default":o.agentMode.toUpperCase())}`)),u){let h=qn(u),S=u.transport==="cli-bridge"?i.yellow(h):i.cyan(h);console.log(i.dim(` Provider Cap: ${S}`))}if(f&&f.status!=="allow"){let h=f.status==="block"?i.red:i.yellow;console.log(i.dim(` Provider Policy: ${h(f.summary)}`))}console.log(i.dim(` Session ID: ${e.sessionId}`)),console.log(i.dim(` Messages: ${d??"unavailable"}`)),console.log(i.dim(` Tokens: ${l===void 0?"unavailable":`~${l} (${c})`}`));let m=await _o({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:dr(e)});console.log(i.dim(` Repo Intel: ${i.cyan(Qu(m))}`)),e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace: ${i.cyan(yt(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 rf(t),console.log(i.dim(` Created: ${e.createdAt}`)),console.log(i.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(tf,"printStatus");async function rf(e){if(e?.getLearningSummary)try{console.log(i.dim(` Learning: ${it(await e.getLearningSummary())}`))}catch(o){console.log(i.dim(` Learning: unavailable (${o instanceof Error?o.message:String(o)})`))}}a(rf,"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=[Ve("sessions",o.sessions),Ve("runs",o.runs),Ve("active",o.activeRuns),Ve("queued",o.queuedRuns),Ve("pending permissions",o.pendingPermissions),Ve("workflows",o.workflows)].filter(t=>t!==void 0);n.length>0&&console.log(i.dim(` Runtime Ctrs: ${n.join(" ")}`))}a(sf,"printRuntimeSurfaceStatus");function Ve(e,o){return o===void 0?void 0:`${e}=${o}`}a(Ve,"formatRuntimeCount");async function af(e,o){let n=V(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await Ra(o.gitRoot);console.log(i.green(`
627
+ 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 Q(o.gitRoot),lf(n.listUserInvocable())}a(af,"handleSkillNamespaceCommand");function lf(e){if(console.log(i.bold(`
628
+ Available Skills:
629
+ `)),e.length===0){console.log(i.dim(" No skills found.")),console.log(i.dim(`
630
+ 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=Qe(),n=e.map(r=>{let s=o.get(r.name)!==void 0||Eo(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(lf,"printSkillsListPiMonoStyle");var de=new pe;function An(e){de.size>0||ir(de,e)}a(An,"initCommandRegistry");function Qe(e){return An(e),de}a(Qe,"getCommandRegistry");function cf(e,o){return Qe(o).has(e)||!!Eo(e)}a(cf,"isRegisteredUserCommand");function df(){return re()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(df,"getActiveExtensionCommands");function Eo(e){let o=re(),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(Eo,"getActiveExtensionCommand");function uf(e){return e.usage??`/${e.name}`}a(uf,"formatExtensionCommandUsage");function ff(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(ff,"formatExtensionDiagnosticValue");function mf(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${ff(t)}`);return o.length>0?o.join(" | "):void 0}a(mf,"formatExtensionDiagnosticMetadata");function Ye(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(Ye,"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 gf(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(gf,"formatDiagnosticParts");function Sn(e,o,n){Y({source:e,level:o,message:gf(n)})}a(Sn,"emitCommandDiagnostic");async function wf(e,o,n,t){let r=re();if(!r)return console.log(i.yellow(`
631
+ [Extension runtime is not active for /${e.name}]`)),!1;let s;if(e.execution!=="configuration"){if(!t.executeToolInvocation)throw new Error(JSON.stringify({code:"runtime_execution_unavailable",denialSource:"runtime_capability",remediation:"Connect the Session execution owner before invoking this extension command."}));let c=await t.executeToolInvocation({name:`extension_command__${e.name}`,input:{args:o}},`/${e.name} ${o.join(" ")}`);if(!c.success)throw new Error(c.lastText);s=JSON.parse(c.lastText)}else s=await e.handler(o,{sessionId:n.sessionId,gitRoot:n.gitRoot,workingDirectory:n.runtimeInfo?.executionCwd??n.gitRoot??process.cwd(),reloadExtensions:a(()=>r.reloadExtensions(),"reloadExtensions"),getDiagnostics:a(()=>Ye(r),"getDiagnostics"),logger:{debug:a((...c)=>Sn(`repl:extension-command:${e.name}`,"debug",c),"debug"),info:a((...c)=>Sn(`repl:extension-command:${e.name}`,"info",c),"info"),warn:a((...c)=>Sn(`repl:extension-command:${e.name}`,"warn",c),"warn"),error:a((...c)=>Sn(`repl:extension-command:${e.name}`,"error",c),"error")}});if(!s)return!0;s.message&&console.log(s.message);let l=pf(e,s);return l?{invocation:l}:!0}a(wf,"executeExtensionCommand");async function Pa(e,o,n){return e.skillInvocation?!1:cf(e.command,o)?!0:(await n?.(o??process.cwd()))?.some(r=>[r.name,...r.aliases??[]].some(s=>s.trim().toLowerCase()===e.command))??!1}a(Pa,"isRegisteredHostCommand");async function sv(e,o,n){let t=hf(e);return!t||t.skillInvocation?null:await Pa(t,o,n)?t:await Vo(e,{workingDirectory:o??process.cwd(),projectRoot:o})?null:t}a(sv,"parseHostCommand");function hf(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(hf,"parseCommand");function Aa(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Aa,"isCommandHelpRequest");async function lr(e,o){try{return Ie(await e.execute(o))}catch(n){return{success:!1,message:`Command /${o.name} failed: ${n instanceof Error?n.message:String(n)}`}}}a(lr,"executeHostCommand");async function av(e,o,n,t,r){if(de.size===0&&An(o.gitRoot),r!==void 0){let u=V(o.gitRoot);u.size===0&&(u=await Q(o.gitRoot));try{Xo(r,f=>u.has(f))}catch(f){if(!(f instanceof fo))throw f;return console.log(i.yellow(`
632
+ ${f.message}
633
+ `)),!1}}if(e.skillInvocation)return await cr({command:e.skillInvocation.name,args:e.args},o,n);let s=de.get(e.command);if(s){if(s.userInvocable===!1)return console.log(i.yellow(`
634
+ [Command /${s.name} is not user-invocable]`)),!1;if(Aa(e.args))return ur(e.command,e.args.slice(1)),!0;if(n.commandClient&&(s.source==="extension"||s.source==="prompt"))return lr(n.commandClient,{sessionId:o.sessionId,inputId:xn(),name:e.command,args:e.args});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(`
635
+ [Command failed: ${u instanceof Error?u.message:String(u)}]`)),!1}}let l=Eo(e.command);if(l){if(Aa(e.args))return ur(e.command),!0;try{return n.commandClient?lr(n.commandClient,{sessionId:o.sessionId,inputId:xn(),name:e.command,args:e.args}):await wf(l,e.args,o,n)}catch(u){return console.log(i.red(`
636
+ [Extension command failed: ${u instanceof Error?u.message:String(u)}]`)),!1}}if(n.commandClient)return lr(n.commandClient,{sessionId:o.sessionId,inputId:xn(),name:e.command,args:e.args});let c=await yf(e,o);if(c)return await cr({command:c.skill.name,args:c.args},o,n);let d=await La(e.command,o);return d?await cr({command:d.name,args:e.args},o,n):(console.log(i.yellow(`
637
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(av,"executeCommand");async function yf(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await La(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(yf,"resolveNamespacedDirectSkillCommand");async function La(e,o){let n=V(o.gitRoot);return n.size===0&&(n=await Q(o.gitRoot)),n.get(e)}a(La,"resolveDirectSkillCommand");async function cr(e,o,n){let t=V(o.gitRoot),r=e.command,s=e.args.join(" ");t.size===0&&(t=await Q(o.gitRoot));try{let l=t.get(r);if(!l)return console.log(i.red(`
638
+ [Skill not found: ${r}]`)),!1;console.log(i.cyan(`
639
+ [Invoking skill: ${r}]`)),l.argumentHint&&console.log(i.dim(`Arguments: ${s||"(none)"}`)),console.log();let c=await rt(r,s,{workingDirectory:o.runtimeInfo?.executionCwd??process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{},executeDynamicContext:o.skillDynamicContext?.execute,disableDynamicContext:o.skillDynamicContext?.disable});return c?(console.log(i.green(`Skill activated: ${r}`)),console.log(i.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:c}):!1}catch(l){return console.log(i.red(`
640
+ [Error invoking skill: ${l instanceof Error?l.message:String(l)}]`)),!1}}a(cr,"executeSkillCommand");var Rn=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 Q(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 vf}from"node:child_process";import*as Ze from"node:path";import{promisify as kf}from"node:util";var Ma=kf(vf);function Sf(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(Sf,"pathFromPorcelainLine");async function _a(e,o=10){try{await Me({cwd:e});let[{stdout:n},{stdout:t}]=await Promise.all([Ma("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0}),Ma("git status --porcelain=v1 -uall",{cwd:e,windowsHide:!0})]),r=n.trim(),s=[],l=new Set;for(let c of t.split(`
641
+ `)){if(!c.trim())continue;let d=Sf(c);if(!d)continue;let u=Ze.resolve(r,d),f=Ze.relative(e,u).split(Ze.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),s.push(f),s.length>=o))break}return s}catch{return[]}}a(_a,"getRecentWorkingSetFiles");function eo(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(eo,"findCommandSlashIndex");var fr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=_a){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:Io.join(c,s.slice(0,d)),f=d===-1?s:s.slice(d+1);try{let h=(await this.readdir(u)).filter(S=>S.toLowerCase().startsWith(f.toLowerCase()));for(let S of h){let x=Io.join(u,S),y=await this.isDirectory(x),E=d===-1?S:s.slice(0,d+1)+S;l.push({text:"@"+E+(y?"/":""),display:S+(y?"/":""),description:y?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),h=new Set(l.map(y=>y.text)),S=f.toLowerCase(),x=[];for(let y of m){if(f&&!Io.basename(y).toLowerCase().startsWith(S))continue;let E="@"+y;h.has(E)||(h.add(E),x.push({text:E,display:y,description:"recent",type:"file"}))}l.unshift(...x)}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=>{Cn.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=>{Cn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},mr=class{static{a(this,"CommandCompleter")}readHostCommands;commands;constructor(o){this.readHostCommands=o,this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of Qe().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=re();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=eo(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();for(let c of await this.readHostCommands?.()??[])c.userInvocable===!1||this.commands.has(c.name)||this.commands.set(c.name,{description:c.description,aliases:[...c.aliases??[]]});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,o,n){let t=new fr(e),r=new Rn,s=new mr(o?()=>o(typeof e=="function"?e():e??process.cwd()):void 0);return async l=>{let c=l.includes("@"),d=l.includes("/");if(!c&&!d)return[[],l];let u=[];if(d){let m=await $f(l,l.length,n);u.push(...m)}if(d&&r.canComplete(l,l.length)){let m=await r.getCompletions(l,l.length);u.push(...m)}if(d&&s.canComplete(l,l.length)){let m=await s.getCompletions(l,l.length);u.push(...m)}if(c&&t.canComplete(l,l.length)){let m=await t.getCompletions(l,l.length);u.push(...m)}return[u.map(m=>xf(l,m)),l]}}a($v,"createCompleter");async function $f(e,o,n){let{ArgumentCompleter:t}=await import("./argument-completer-ZJQOWTIS.js"),r=new t(()=>n);return r.canComplete(e,o)?r.getCompletions(e,o):[]}a($f,"getArgumentCompletions");function xf(e,o){if(o.type!=="argument")return o.text;let n=eo(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(xf,"formatReadlineCompletion");import{existsSync as En,readdirSync as Da,readFileSync as ja}from"node:fs";import{join as In}from"node:path";var bf=[{name:"plan",description:"Read-only planning mode - blocks all modifications",type:"enum"},{name:"accept-edits",description:"Sandbox first; user decides only at the host boundary",type:"enum"},{name:"auto",description:"Use sandbox execution with LLM review at the host boundary",type:"enum"},{name:"full-access",description:"Direct host execution without sandbox or approval prompts",type:"enum"}],oo=[{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 Af(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Pe(n))try{return Ne(n).filter(s=>!t||s.toLowerCase().includes(t.toLowerCase())).map(s=>({name:`${n}/${s}`,description:s,type:"enum"}))}catch{}return[]}return Le().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Af,"getModelArgs");var pr=[{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"}],gr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Rf=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],Cf=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],Na=[{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"}],Wa=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],Ef=[{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"}],If=[{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 Tf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?If: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(Tf,"getLearnArgs");var Pf=[{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"}],Lf=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Mf=[{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"}],_f=[{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"}],Nf=[{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"}],Wf=[{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"}],Of=[{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"}],Df=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],jf=[{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"}],Uf=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Ff=new Set(["show","delete","rerun","save","rename","revise"]),Hf=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Bf=[{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"}],Kf=[{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"}],qf=[".workflow.json",".ts",".mjs",".js"];function Tn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Tn,"isWorkflowRunEntryName");function Gf(e,o){let n=In(e,"workflow-metadata.json");if(En(n))try{let r=JSON.parse(ja(n,"utf8"));if(typeof r=="object"&&r!==null){let s=r.displayName;if(typeof s=="string"&&Tn(s.trim()))return s.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Tn(t.trim())?t.trim():void 0}a(Gf,"readWorkflowRunDisplayName");function zf(){let e=Ke(process.cwd()).key,o=D("workflow-runs",e);if(!En(o))return[];let n=[];for(let t of Da(o)){if(!Tn(t))continue;let r=In(o,t,"run.json");if(En(r))try{let s=JSON.parse(ja(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=Gf(In(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(zf,"getPersistedWorkflowRunIdArgs");function Pn(e){return Ff.has(e)?zf():[]}a(Pn,"getWorkflowRunIdArgs");function Xf(e){for(let o of qf)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Tn(n)?n:void 0}}a(Xf,"savedWorkflowNameFromFile");function To(e={}){let o=[{path:D("workflows"),source:"personal"},{path:In(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(En(t.path))try{for(let r of Da(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let s=Xf(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(To,"getSavedWorkflowNameArgs");function Vf(){let e=new Map;for(let o of Pn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of To()){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(Vf,"getWorkflowRerunArgs");function wr(e){let o=new Map;for(let n of Pn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of To({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(wr,"getWorkflowRunOrSavedNameArgs");function Oa(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?To({generatedOnly:!0}):o.has("--run")?Pn("delete"):wr("delete")}a(Oa,"getWorkflowDeleteTargetArgs");function Jf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...jf,...Do().map(r=>({name:r.name,description:r.description,type:"enum"})),...To()];if(n==="rerun"&&t<=2)return Vf();if(n==="rename"&&t<=2)return wr("rename");if(n==="delete"&&t<=2)return[...Kf,...Oa(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Oa(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...wr("revise")];if(e[1]==="--replace"&&t<=3)return To()}return Uf.has(n)&&t<=2?Pn(n):n==="runs"&&t<=2?Hf:n==="prune"&&t<=2?Bf:[]}a(Jf,"getWorkflowArgs");function Yf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Nf:t>2?[]:n==="mode"?Wf:n==="trace"?Of:[]}a(Yf,"getRepoIntelArgs");var Qf=new Map([["mode",bf],["thinking",oo],["think",oo],["t",oo],["reasoning",oo],["reason",oo],["effort",oo],["status",pr],["info",pr],["ctx",pr],["mcp",Rf],["fallback",Cf],["agent-mode",Na],["am",Na],["verifier-log",Wa],["stall-log",Wa],["memory",Ef],["goal",Pf],["paste",Lf],["review",Mf],["agents",_f],["delete",gr],["rm",gr],["del",gr]]),Zf=new Set(["model","m","provider"]),em=new Set(["repo-intel"]),om=new Set(["repointel","ri"]),nm=new Set(["workflow"]),tm=new Set(["learn"]);function hr(e,o,n=[]){let t=e.toLowerCase();return Zf.has(t)?Af(o):em.has(t)?Yf(n):om.has(t)?n.length<=1?Df:[]:nm.has(t)?Jf(n):tm.has(t)?Tf(n):Qf.get(t)??[]}a(hr,"getCommandArguments");async function rm(e,o,n){if(["effort","thinking","think","t","reasoning","reason"].includes(o))return(await e.catalog.reasoningEfforts(e.selection())).map(l=>({name:l==="off"?"none":l,description:"Host reasoning effort",type:"enum"}));if(!["model","m"].includes(o))return;let t=await e.catalog.providers(),r=n.indexOf("/");if(r<0)return t.map(l=>({name:l.name,description:`Switch to ${l.name} provider`,type:"enum"}));let s=n.slice(0,r)||e.selection().provider;return(t.find(l=>l.name===s)?.models??[]).filter(l=>l.toLowerCase().includes(n.slice(r+1).toLowerCase())).map(l=>({name:`${n.slice(0,r)}/${l}`,description:l,type:"enum"}))}a(rm,"hostSettingArguments");var yr=class{static{a(this,"ArgumentCompleter")}hostSource;constructor(o){this.hostSource=o}canComplete(o,n){let t=o.slice(0,n),r=eo(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 hr(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=eo(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,m=u[f]??"",h=m.toLowerCase(),S=this.hostSource?.(),x=(S?await rm(S,c,m):void 0)??hr(c,m,u);if(!x||x.length===0)return[];let y=new Set(u.slice(0,-1).map(k=>k.toLowerCase()));return x.filter(k=>!y.has(k.name.toLowerCase())).filter(k=>!h||k.name.includes("/")?!0:k.name.toLowerCase().includes(h)).map(k=>({text:k.name,display:k.name,description:k.description,type:"argument"})).sort((k,v)=>{if(!h)return 0;let M=k.display.toLowerCase().startsWith(h),g=v.display.toLowerCase().startsWith(h);return M&&!g?-1:!M&&g?1:k.display.length-v.display.length})}};function Nv(){return new yr}a(Nv,"createArgumentCompleter");export{ho as a,Hs as b,at as c,B as d,Xp as e,ss as f,Vp as g,ie as h,cs as i,ds as j,og as k,Dl as l,Ql as m,ng as n,Yo as o,ct as p,tg as q,ks as r,rg as s,ig as t,sg as u,Bo as v,Fa as w,Ha as x,Se as y,Ba as z,xi as A,bi as B,so as C,lo as D,Oe as E,De as F,Li as G,Mi as H,_i as I,Fi as J,Hi as K,Yn as L,Ki as M,qi as N,yl as O,Zm as P,$p as Q,kl as R,nt as S,xp as T,bp as U,Qi as V,fo as W,Pp as X,es as Y,Lp as Z,Mp as _,_p as $,jp as aa,Up as ba,is as ca,Ue as da,en as ea,Ng as fa,Kc as ga,Wg as ha,Og as ia,Dg as ja,jg as ka,_s as la,yt as ma,Ns as na,Ke as oa,Vc as pa,qg as qa,Ce as ra,Ad as sa,Rd as ta,ta as ua,hw as va,yw as wa,Dd as xa,ch as ya,dh as za,uh as Aa,ou as Ba,nu as Ca,ru as Da,ca as Ea,mu as Fa,Oh as Ga,Dh as Ha,jh as Ia,Uh as Ja,Fh as Ka,wa as La,zh as Ma,Xh as Na,ya as Oa,Vh as Pa,or as Qa,Wu as Ra,fy as Sa,va as Ta,Qe as Ua,cf as Va,Pa as Wa,sv as Xa,hf as Ya,av as Za,Rn as _a,yr as $a,Nv as ab,eo as bb,fr as cb,mr as db,$v as eb};