@kodax-ai/kodax 0.7.97-beta.2 → 0.7.97-beta.3

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 (161) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +55 -2
  3. package/README_CN.md +37 -1
  4. package/dist/artifacts/dist/contract.js +1 -1
  5. package/dist/artifacts/dist/contract.js.map +1 -1
  6. package/dist/artifacts/dist/document-render.d.ts +1 -1
  7. package/dist/artifacts/dist/document-render.js +41 -10
  8. package/dist/artifacts/dist/document-render.js.map +1 -1
  9. package/dist/artifacts/dist/kodax.js +1 -1
  10. package/dist/artifacts/dist/kodax.js.map +1 -1
  11. package/dist/artifacts/dist/libreoffice.d.ts +6 -1
  12. package/dist/artifacts/dist/libreoffice.js +37 -13
  13. package/dist/artifacts/dist/libreoffice.js.map +1 -1
  14. package/dist/artifacts/dist/runtime.js +13 -6
  15. package/dist/artifacts/dist/runtime.js.map +1 -1
  16. package/dist/artifacts/skills/artifact-review/SKILL.md +5 -1
  17. package/dist/chunks/agent-NWQPMZ7B.js +2 -0
  18. package/dist/chunks/agent-adapter-V3IPADCX.js +2 -0
  19. package/dist/chunks/argument-completer-VNKHT4X4.js +2 -0
  20. package/dist/chunks/{bedrock-native-Z5VNWF5U.js → bedrock-native-OEPOBW6W.js} +1 -1
  21. package/dist/chunks/{chunk-NSR4RW2F.js → chunk-3I2MIS4D.js} +1 -1
  22. package/dist/chunks/{chunk-RYBUYHDL.js → chunk-3Y5PBEOD.js} +1 -1
  23. package/dist/chunks/chunk-4FVCMKG2.js +20 -0
  24. package/dist/chunks/{chunk-F6GJXQNA.js → chunk-4GYXZTOD.js} +7 -7
  25. package/dist/chunks/{chunk-EISRVOBJ.js → chunk-4Z7ZHL6V.js} +2 -2
  26. package/dist/chunks/{chunk-W2CWO4PQ.js → chunk-576AAIQM.js} +1 -1
  27. package/dist/chunks/chunk-5E2P4RYS.js +4 -0
  28. package/dist/chunks/{chunk-X5M7TLJV.js → chunk-5LFQ5FVY.js} +1 -1
  29. package/dist/chunks/{chunk-WMMESRP3.js → chunk-6RDMSU4B.js} +1 -1
  30. package/dist/chunks/{chunk-3CP7AUWY.js → chunk-7BA4TSKC.js} +1 -1
  31. package/dist/chunks/{chunk-I325ER7D.js → chunk-AUU3N4V4.js} +1 -1
  32. package/dist/chunks/{chunk-DCE7XQUG.js → chunk-AYDLX2UK.js} +1 -1
  33. package/dist/chunks/{chunk-D36OIMV7.js → chunk-BP3NAYKY.js} +64 -64
  34. package/dist/chunks/{chunk-6TITQQAI.js → chunk-BSCSKJNC.js} +230 -229
  35. package/dist/chunks/{chunk-2HH5AS7E.js → chunk-DAQGOWKD.js} +88 -462
  36. package/dist/chunks/{chunk-UF3GZ5PO.js → chunk-EZF6ZRCO.js} +1 -1
  37. package/dist/chunks/chunk-F2TFWNVZ.js +2 -0
  38. package/dist/chunks/{chunk-53CJDQS2.js → chunk-FVXZ5L33.js} +1 -1
  39. package/dist/chunks/{chunk-MCDZNQWD.js → chunk-G32BMSHH.js} +75 -71
  40. package/dist/chunks/chunk-HJLYZ5AX.js +361 -0
  41. package/dist/chunks/{chunk-P55RJIOG.js → chunk-IOIFCU46.js} +1 -1
  42. package/dist/chunks/{chunk-DV5YPYLW.js → chunk-IR46ZHXU.js} +1 -1
  43. package/dist/chunks/chunk-NJDR5EEF.js +6 -0
  44. package/dist/chunks/{chunk-KDSO7V4O.js → chunk-OC3DQXN6.js} +1 -1
  45. package/dist/chunks/{chunk-J2L2NK6E.js → chunk-OMVAPRQI.js} +90 -57
  46. package/dist/chunks/chunk-OXCB2TRF.js +42 -0
  47. package/dist/chunks/{chunk-C6JGLEYD.js → chunk-P6R6V7EW.js} +1 -1
  48. package/dist/chunks/{chunk-SK3RRGHJ.js → chunk-PFBZ4ZXO.js} +28 -28
  49. package/dist/chunks/{chunk-V2XJSFFE.js → chunk-QDE6THC5.js} +1 -1
  50. package/dist/chunks/{chunk-EPK6EWRI.js → chunk-QRYEP34M.js} +1 -1
  51. package/dist/chunks/chunk-ROWYE472.js +460 -0
  52. package/dist/chunks/{chunk-R42S4BLA.js → chunk-SQGESMNC.js} +1 -1
  53. package/dist/chunks/{chunk-XZSFUGPN.js → chunk-U73VEVMP.js} +1 -1
  54. package/dist/chunks/{chunk-D425EZGC.js → chunk-V2TG7GNW.js} +1 -1
  55. package/dist/chunks/{chunk-QSZCR5GC.js → chunk-VRO2CDBY.js} +97 -97
  56. package/dist/chunks/{chunk-BBZWF2EA.js → chunk-WMQQQY3D.js} +1 -1
  57. package/dist/chunks/{chunk-JAF2YLZO.js → chunk-X3YYJJTF.js} +2 -2
  58. package/dist/chunks/{chunk-UL6YIT4M.js → chunk-XYRI6ER5.js} +1 -1
  59. package/dist/chunks/chunk-YRPB3LID.js +3 -0
  60. package/dist/chunks/{chunk-5MUVRFMU.js → chunk-ZDAU3LZ2.js} +1 -1
  61. package/dist/chunks/{chunk-WWPVEK6B.js → chunk-ZP3YSYWM.js} +10 -10
  62. package/dist/chunks/{client-LTIFNED5.js → client-NJ32JBC3.js} +1 -1
  63. package/dist/chunks/compaction-config-JBQGU3NO.js +2 -0
  64. package/dist/chunks/{construction-bootstrap-OAZKGI5Y.js → construction-bootstrap-CM47ZXG7.js} +1 -1
  65. package/dist/chunks/dist-O6BHIQEP.js +2 -0
  66. package/dist/chunks/{google-native-WLL27OV7.js → google-native-BV5GKT5B.js} +1 -1
  67. package/dist/chunks/host-PI5NL4W4.js +2 -0
  68. package/dist/chunks/{mistral-native-JXPIDDYZ.js → mistral-native-X42JCFZH.js} +1 -1
  69. package/dist/chunks/{model-DZF6URW3.js → model-MT3WJX76.js} +1 -1
  70. package/dist/chunks/{permission-YVVMLQ5I.js → permission-YVDVSE6H.js} +1 -1
  71. package/dist/chunks/{pi-messages-5LLOZH57.js → pi-messages-DVJANXV5.js} +1 -1
  72. package/dist/chunks/readline-helpers-5JS7UGTE.js +2 -0
  73. package/dist/chunks/run-manager-Y6VYEWSJ.js +2 -0
  74. package/dist/chunks/running-session-ANMBA5XV.js +2 -0
  75. package/dist/chunks/skills-XL2XIBWV.js +2 -0
  76. package/dist/chunks/{tool-dispatch-MLM3QTSU.js → tool-dispatch-2FOG65FC.js} +1 -1
  77. package/dist/chunks/{utils-2QNMYRGA.js → utils-XZ22R6VB.js} +1 -1
  78. package/dist/client-history.js +2 -0
  79. package/dist/history-turn.js +3 -0
  80. package/dist/index.d.ts +19 -19
  81. package/dist/index.js +2 -2
  82. package/dist/kodax_bootstrap.js +1 -1
  83. package/dist/kodax_cli.js +1472 -1810
  84. package/dist/kodax_doctor.js +1 -1
  85. package/dist/maintenance-scheduler.js +2 -0
  86. package/dist/manual-topics.json +32 -3
  87. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  88. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  89. package/dist/native/win32-x64/manifest.json +2 -2
  90. package/dist/one-shot-task.js +1 -1
  91. package/dist/provider-auth-cli.js +1 -1
  92. package/dist/runtime-daemon-schema.json +1 -1
  93. package/dist/sandbox-network-broker.js +93 -441
  94. package/dist/sdk-a2a.d.ts +13 -13
  95. package/dist/sdk-a2a.js +1 -1
  96. package/dist/sdk-agent.d.ts +17 -12
  97. package/dist/sdk-agent.js +1 -1
  98. package/dist/sdk-client.d.ts +6 -6
  99. package/dist/sdk-client.js +1 -1
  100. package/dist/sdk-coding.d.ts +17 -17
  101. package/dist/sdk-coding.js +1 -1
  102. package/dist/sdk-experimental-memory.d.ts +2 -2
  103. package/dist/sdk-experimental-memory.js +1 -1
  104. package/dist/sdk-llm.d.ts +4 -2
  105. package/dist/sdk-llm.js +1 -1
  106. package/dist/sdk-mcp.js +1 -1
  107. package/dist/sdk-media.d.ts +13 -13
  108. package/dist/sdk-media.js +1 -1
  109. package/dist/sdk-repl.d.ts +16 -16
  110. package/dist/sdk-repl.js +1 -1
  111. package/dist/sdk-runtime.d.ts +46 -46
  112. package/dist/sdk-runtime.js +1 -1
  113. package/dist/sdk-sandbox.js +1 -1
  114. package/dist/sdk-session.d.ts +7 -7
  115. package/dist/sdk-session.js +1 -1
  116. package/dist/sdk-skills.js +1 -1
  117. package/dist/semantic-worker.js +87 -435
  118. package/dist/storage-repair-cli.js +1 -1
  119. package/dist/types-chunks/{bash-prefix-extractor.d-CJliu5-D.d.ts → bash-prefix-extractor.d-BghXa_md.d.ts} +9 -3
  120. package/dist/types-chunks/{capsule.d-EMwSALqK.d.ts → capsule.d-BTlvC5qq.d.ts} +4 -4
  121. package/dist/types-chunks/{client-contract-B7q69yMA.d.ts → client-contract-B7ZSFKTv.d.ts} +52 -4
  122. package/dist/types-chunks/{controller.d-C0SAuNKu.d.ts → controller.d-Btu5FDdw.d.ts} +1 -1
  123. package/dist/types-chunks/{controller.d-D-hPLKaA.d.ts → controller.d-D6rEz5LS.d.ts} +3 -3
  124. package/dist/types-chunks/{history-retrieval.d-BwEUR9cb.d.ts → history-retrieval.d-B_AriUJp.d.ts} +1 -1
  125. package/dist/types-chunks/{manifest.d-YE3-AIeO.d.ts → manifest.d-Yyce-hHj.d.ts} +1 -1
  126. package/dist/types-chunks/{public-api.d-BhDU643p.d.ts → public-api.d-BLv3lFmw.d.ts} +9 -4
  127. package/dist/types-chunks/{review-inbox.d-Bgt46S7L.d.ts → review-inbox.d-yREk25Vf.d.ts} +2 -0
  128. package/dist/types-chunks/{review-packet.d-ChOfJaNI.d.ts → review-packet.d-xwXxHmML.d.ts} +1 -1
  129. package/dist/types-chunks/{run-manager.d-ChzguipG.d.ts → run-manager.d-D4sa9JYz.d.ts} +26 -12
  130. package/dist/types-chunks/{runtime-client-info-P_mRDG7j.d.ts → runtime-client-info-oRMrkHmb.d.ts} +2 -2
  131. package/dist/types-chunks/{runtime-event-BW5Pla7a.d.ts → runtime-event-BOyaILWg.d.ts} +3 -1
  132. package/dist/types-chunks/{sdk-runtime-cDe7qmN3.d.ts → sdk-runtime-CYyXmQok.d.ts} +27 -13
  133. package/dist/types-chunks/{sdk-session-D3pcSbnA.d.ts → sdk-session-D6mS5qgO.d.ts} +6 -3
  134. package/dist/types-chunks/{skill-invocation-error.d-gsNNDnnt.d.ts → skill-invocation-error.d-Be3qg4JQ.d.ts} +3 -3
  135. package/dist/types-chunks/{trusted-repl-entry-Bbkd2HlO.d.ts → trusted-repl-entry-YWNc4m-Z.d.ts} +7 -7
  136. package/dist/types-chunks/{types.d-BlXTogOo.d.ts → types.d-BQ-hbni4.d.ts} +1 -1
  137. package/dist/types-chunks/{utils.d-CxHyBvO6.d.ts → utils.d-C0F3Uf2X.d.ts} +6 -6
  138. package/dist/windows-effect-job-programs.json +4 -0
  139. package/docs/ARTIFACT_SDK.md +3 -3
  140. package/docs/CLIENT_CONTRACT.md +4 -2
  141. package/docs/SDK_MIGRATION.md +9 -5
  142. package/docs/SPACE_SDK_SEAMS.md +12 -1
  143. package/package.json +4 -3
  144. package/public_docs/README.md +10 -3
  145. package/public_docs/sdk/embedder-guide.md +1 -1
  146. package/dist/chunks/agent-DS7M57WD.js +0 -2
  147. package/dist/chunks/agent-adapter-TLWGGK3V.js +0 -2
  148. package/dist/chunks/argument-completer-OGCXKTRQ.js +0 -2
  149. package/dist/chunks/chunk-GJXOTOZB.js +0 -465
  150. package/dist/chunks/chunk-KE2NBMAP.js +0 -20
  151. package/dist/chunks/chunk-OGTRDK4Q.js +0 -359
  152. package/dist/chunks/chunk-R2HTPDI7.js +0 -2
  153. package/dist/chunks/chunk-SDPZFH6M.js +0 -4
  154. package/dist/chunks/chunk-XDMNJW6J.js +0 -42
  155. package/dist/chunks/compaction-config-ECMOFP5H.js +0 -2
  156. package/dist/chunks/dist-5J53DGAO.js +0 -2
  157. package/dist/chunks/host-65E5NM5P.js +0 -2
  158. package/dist/chunks/readline-helpers-UZXWBRXQ.js +0 -2
  159. package/dist/chunks/run-manager-ZFACIZM2.js +0 -2
  160. package/dist/chunks/running-session-Q5Y6A2QV.js +0 -2
  161. package/dist/chunks/skills-TJP6BLZJ.js +0 -2
@@ -1,16 +1,16 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{D as vi,F as Ue,H as ki,I as Si,J as xi,K as Jn,N as qo,P as bi,T as $i,V as Yn,c as pi,d as gi,da as xe,f as wi,h as je,ia as Ai,k as Se,ka as Ri,la as Ci,m as Xn,ma as Ei,n as Vn,r as hi,s as yi}from"./chunk-EISRVOBJ.js";import{a as Ii}from"./chunk-DCE7XQUG.js";import{Ra as di,Sa as ui,Wa as fi,Ya as mi}from"./chunk-QSZCR5GC.js";import{i as Fo}from"./chunk-V2XJSFFE.js";import{A as li,I as ke,O as ci,m as Ho,n as Bo,o as De,q as co,r as Ko,s as ri,t as ii,v as si,w as Gn,x as ai,y as uo}from"./chunk-JAF2YLZO.js";import{A as Xr,q as Bn,r as lo,t as Gr,z as Kn}from"./chunk-X5M7TLJV.js";import{nb as oi,ob as ni,pb as ti}from"./chunk-D36OIMV7.js";import{c as Kr,d as qr,i as ei}from"./chunk-XDMNJW6J.js";import{Ed as Zr,Gd as ie,Mc as zn,Nc as Uo,Qc as Qr,ja as zr,mc as Vr,nb as jo,oc as Jr,pc as Yr,sc as qn}from"./chunk-OGTRDK4Q.js";import{Bd as Or,Ld as Dr,Nd as jr,Rd as Ur,Sa as Er,Tb as ao,Ua as Un,Va as Fn,Xe as Br,Zb as Nr,_b as Do,ad as Wr,me as Fr,ne as Hr,r as pe,re as Hn,ze as ve}from"./chunk-2HH5AS7E.js";import{W as Ir,X as Tr,Y as Pr,b as fe,c as O,d as me,e as xr,h as Q,j as Oe,la as Mr,na as Lr,qb as V,rb as Z,wb as _r}from"./chunk-J2L2NK6E.js";import{B as io,D as jn,E as $r,P as Ar,Q as Wo,R as Rr,Ua as Cr,ga as Oo,ha as Ne,ia as We}from"./chunk-SK3RRGHJ.js";import{a as so}from"./chunk-WMMESRP3.js";import{N as No}from"./chunk-KE2NBMAP.js";import{I as br}from"./chunk-V5RCDBKU.js";import{a}from"./chunk-V4WSBIXB.js";import*as Ln from"fs";import*as Mo from"path";import*as In from"fs";import Cn from"path";import{randomUUID as En}from"node:crypto";import s from"chalk";var zo=["plan","accept-edits","auto","full-access","auto-in-project"],Va=["plan","accept-edits","auto","full-access"];function Ja(e){return e==="auto"||e==="auto-in-project"}a(Ja,"isAutoMode");function be(e){return e==="auto-in-project"?"auto":e}a(be,"canonicalizePermissionMode");function Ya(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(Ya,"permissionModeDisplayName");function Pi(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(Pi,"computeConfirmTools");function Mi(e){return e!==void 0&&zo.includes(e)}a(Mi,"isPermissionMode");function fo(e,o){return Mi(e)?be(e):o===void 0?void 0:be(o)}a(fo,"normalizePermissionMode");import{createHash as Qa}from"node:crypto";import Li from"node:fs";var $e=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"}},Ae=class extends Error{static{a(this,"ProviderSetupInvalidConfigError")}constructor(o,n){super(`KodaX configuration cannot be safely updated: ${o}. ${n}`),this.name="ProviderSetupInvalidConfigError"}},ji=/^[A-Za-z_][A-Za-z0-9_]*$/,Za=new Set(["accesskey","apikey","accesstoken","auth","authorization","bearertoken","clientsecret","credential","key","password","privatekey","refreshtoken","secret","sig","signature","token","xapikey"]);function He(){return Object.entries(io).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===jn?-1:o.name===jn?1:e.name.localeCompare(o.name))}a(He,"getProviderSetupCatalog");function Ui(e={}){let o=e.configPath??O("config.json"),n=e.catalog??He(),t=e.environment??process.env,r=Go(o);if(!r.config)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:r.error??"config.json is not a JSON object."};let i=Bi(r.config);if(i)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:i};let l=Wi(e.explicitProvider);if(l){let d=Di(r.config,l,n);return d?.hostBroker?{status:"needs-host-broker",configPath:o,configRevision:r.revision,provider:l}:d&&(!d.requiresCredential||Oi(t,d.apiKeyEnv))?_i(o,r.revision,l):Ni(o,r.revision,l,d?.apiKeyEnv)}if(!r.exists)return{status:"needs-provider",configPath:o,configRevision:r.revision};let c=Wi(r.config.provider);if(c){let d=Di(r.config,c,n);return d?d.hostBroker?{status:"needs-host-broker",configPath:o,configRevision:r.revision,provider:c}:!d.requiresCredential||Oi(t,d.apiKeyEnv)?_i(o,r.revision,c):Ni(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(Ui,"inspectProviderSetupReadiness");function Fi(e){let o=e.configPath??O("config.json"),n=e.catalog??He();try{return Se(o,()=>{let t=Go(o);if(!t.config)throw new Ae(o,t.error??"config.json is invalid JSON.");if(t.revision!==e.expectedRevision)throw new $e(o);el(t.config,o);let r=nl(e.choice,n,t.config),i={...t.config,provider:r.provider,model:r.model,...r.customProviders?{customProviders:r.customProviders}:{}};if(Go(o).revision!==e.expectedRevision)throw new $e(o);return zi(o,i),{provider:r.provider,model:r.model,apiKeyEnv:r.apiKeyEnv,configPath:o}})}catch(t){throw t instanceof gi?new $e(o):t}}a(Fi,"persistProviderSetupChoice");function Hi(e){if(e.credentialSource==="file")return["The API key was saved in permission-protected plaintext auth.json, separately from config.json.","Run `kodax` again. No environment-variable setup is required for this saved connection.","Saving a key does not verify its online validity or model entitlement."];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(Hi,"providerSetupRestartInstructions");function _i(e,o,n){return{status:"ready",configPath:e,configRevision:o,...n?{provider:n}:{}}}a(_i,"ready");function Ni(e,o,n,t){return{status:"needs-credential",configPath:e,configRevision:o,provider:n,...t?{apiKeyEnv:t}:{}}}a(Ni,"needsCredential");function Wi(e){return typeof e=="string"&&e.trim()?e.trim():void 0}a(Wi,"normalizedString");function Oi(e,o){return o!==void 0&&!!e[o]?.trim()}a(Oi,"hasEnvironmentValue");function Di(e,o,n){let t=n.find(l=>l.name===o);if(t)return{apiKeyEnv:t.apiKeyEnv,requiresCredential:!0};if(Object.entries(io).find(([l])=>l===o)?.[1]?.capabilityProfile.transport==="cli-bridge")return{requiresCredential:!1};let i=ol(e,o);return i?{apiKeyEnv:i.apiKeyEnv,requiresCredential:!0,...i.oauth||i.cloud?{hostBroker:!0}:{}}:void 0}a(Di,"resolveConfiguredProvider");function el(e,o){let n=Bi(e);if(n)throw new Ae(o,n)}a(el,"assertCustomProvidersPreservable");function Bi(e){let o=e.customProviders;if(o===void 0)return;if(!Array.isArray(o))return"Existing customProviders must be an array; repair it before running setup.";let n=new Set;for(let t of o){let r=Xo(t);if(!r)return"Existing customProviders contains an invalid entry; repair it before running setup.";let i=Ki(r.baseUrl);if(i)return`Existing customProviders entry "${r.name}" is unsafe: ${i}`;if(n.has(r.name))return`Existing customProviders contains duplicate name "${r.name}"; repair it before running setup.`;n.add(r.name)}}a(Bi,"existingCustomProvidersError");function ol(e,o){let n=e.customProviders;if(Array.isArray(n))for(let t of n){let r=Xo(t);if(r?.name===o)return r}}a(ol,"findValidCustomProvider");function Xo(e){if(!qi(e))return;let{name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:i}=e;if(typeof o!="string"||!["openai","anthropic","google","bedrock","mistral","pi-messages"].includes(String(n))||typeof t!="string"||typeof r!="string"||typeof i!="string")return;let l={...e,name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:i};try{return Wo(l),ji.test(l.apiKeyEnv)?l:void 0}catch{return}}a(Xo,"toValidCustomProvider");function nl(e,o,n){if(e.kind==="builtin"){let d=o.find(f=>f.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=Vo(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,i=Array.isArray(r)?r.flatMap(d=>{let f=Xo(d);return f?[f]:[]}):[],c=i.find(d=>d.name===t.name)?i.map(d=>d.name===t.name?t:d):[...i,t];return{provider:t.name,model:t.model,apiKeyEnv:t.apiKeyEnv,customProviders:c}}a(nl,"normalizeProviderSetupChoice");function Vo(e){let o={name:e.name.trim(),protocol:e.protocol,...e.api!==void 0?{api:e.api}:{},...e.oauth!==void 0?{oauth:e.oauth}:{},...e.cloud!==void 0?{cloud:e.cloud}:{},...e.authentication!==void 0?{authentication:e.authentication}:{},baseUrl:e.baseUrl.trim(),apiKeyEnv:e.apiKeyEnv.trim(),model:e.model.trim()};for(let t of["oauthRegistration","models","toolCapabilities","cacheCapabilities","reasoningProfile","reasoningCapability","reasoningPreset","reasoning","contextWindow","maxOutputTokens","supportsThinking","imageInput","promptCacheAffinity","replayReasoningContent","strictThinkingSignature","verifyStrategy"])e[t]!==void 0&&Object.assign(o,{[t]:structuredClone(e[t])});let n=Ki(o.baseUrl);if(n)throw new Error(n);if(Wo(o),!ji.test(o.apiKeyEnv))throw new Error("Custom provider API key environment variable name is invalid.");return o}a(Vo,"validateProviderSetupCustomMetadata");function Ki(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=>Za.has(t.toLowerCase().replace(/[-_.]/g,"")));return n===void 0?void 0:`Custom provider Base URL must not contain credential query parameter "${n}".`}a(Ki,"customProviderEndpointError");function Go(e){try{Li.lstatSync(e)}catch(n){return n!==null&&typeof n=="object"&&"code"in n&&n.code==="ENOENT"?{configPath:e,revision:Fe(void 0),exists:!1,config:{}}:{configPath:e,revision:Fe(void 0),exists:!0,error:"config.json cannot be read."}}let o;try{o=Li.readFileSync(e,"utf8")}catch{return{configPath:e,revision:Fe(void 0),exists:!0,error:"config.json cannot be read."}}try{let n=JSON.parse(o);return qi(n)?{configPath:e,revision:Fe(o),exists:!0,config:n}:{configPath:e,revision:Fe(o),exists:!0,error:"config.json must contain a JSON object."}}catch{return{configPath:e,revision:Fe(o),exists:!0,error:"config.json is invalid JSON; retain and repair the original."}}}a(Go,"readConfig");function Fe(e){return Qa("sha256").update(e??"<missing>","utf8").digest("hex")}a(Fe,"revisionFor");function qi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(qi,"isRecord");function zi(e,o){je(e,`${JSON.stringify(o,null,2)}
3
- `)}a(zi,"writeConfigAtomically");function Em(e){let o=e.configPath??O("config.json");Se(o,()=>{let n=Go(o);if(n.error||!n.config)throw new Ae(o,n.error??"Missing configuration.");let t=n.config.customProviders;if(!Array.isArray(t))throw new Error("OAuth login requires a configured custom connection.");let r=!1,i=t.map(l=>{let c=Xo(l);if(!c||c.name!==e.name)return l;if(c.oauth!==e.service||c.oauthRegistration!==e.expectedRegistration)throw new $e(o);r=!0;let d={...c,oauthRegistration:e.registration};return Wo(d),d});if(!r)throw new $e(o);zi(o,{...n.config,customProviders:i})})}a(Em,"linkProviderOAuthRegistration");import{existsSync as Gi,mkdirSync as tl,readFileSync as Xi,writeFileSync as rl}from"node:fs";import Be from"node:path";var il={core:{},mcp:{version:1,servers:{}},extensions:{version:1,paths:[]},a2a:{version:2,agents:{}}},sl=["core","mcp","extensions","a2a"];function Qn(e,o){return o==="core"?Be.join(e,"config.json"):Be.join(e,"integrations",`${o}.json`)}a(Qn,"activePath");function al(e,o){return o==="core"?Be.join(e,"config.example.jsonc"):Be.join(e,"integrations",`${o}.example.jsonc`)}a(al,"templatePath");function ll(e){let o=e.replaceAll("\\","/");return sl.flatMap(n=>[{domain:n,kind:"active",path:Qn(e,n),content:`${JSON.stringify(il[n],null,2)}
2
+ import{a as Ei}from"./chunk-AYDLX2UK.js";import{D as vi,F as Ue,H as ki,I as Si,J as xi,K as Jn,N as qo,P as bi,T as $i,V as Yn,c as pi,d as gi,da as xe,f as wi,h as je,ia as Ai,k as Se,ka as Ri,la as Ci,m as Xn,ma as Ii,n as Vn,r as hi,s as yi}from"./chunk-4Z7ZHL6V.js";import{Ra as di,Sa as ui,Wa as fi,Ya as mi}from"./chunk-VRO2CDBY.js";import{nb as oi,ob as ni,pb as ti}from"./chunk-BP3NAYKY.js";import{i as Fo}from"./chunk-QDE6THC5.js";import{A as li,I as ke,O as ci,m as Ho,n as Bo,o as De,q as co,r as Ko,s as ri,t as ii,v as si,w as Gn,x as ai,y as uo}from"./chunk-X3YYJJTF.js";import{c as Kr,d as qr,i as ei}from"./chunk-OXCB2TRF.js";import{A as Xr,q as Bn,r as lo,t as Gr,z as Kn}from"./chunk-5LFQ5FVY.js";import{Fd as Zr,Hd as ie,Nc as zn,Oc as Uo,Rc as Qr,ka as zr,nc as Vr,ob as jo,pc as Jr,qc as Yr,tc as qn}from"./chunk-HJLYZ5AX.js";import{Bd as Or,Ld as Dr,Nd as jr,Rd as Ur,Sa as Ir,Tb as ao,Ua as Un,Va as Fn,Xe as Br,Zb as Nr,_b as Do,ad as Wr,me as Fr,ne as Hr,r as pe,re as Hn,ze as ve}from"./chunk-DAQGOWKD.js";import{X as Er,Y as Tr,Z as Pr,b as fe,c as O,d as me,e as xr,h as Q,j as Oe,ma as Mr,oa as Lr,rb as V,sb as Z,xb as _r}from"./chunk-OMVAPRQI.js";import{B as io,D as jn,E as $r,P as Ar,Q as Wo,R as Rr,Ua as Cr,ga as Oo,ha as Ne,ia as We}from"./chunk-PFBZ4ZXO.js";import{a as so}from"./chunk-6RDMSU4B.js";import{N as No}from"./chunk-4FVCMKG2.js";import{I as br}from"./chunk-V5RCDBKU.js";import{a}from"./chunk-V4WSBIXB.js";import*as Ln from"fs";import*as Mo from"path";import*as En from"fs";import Cn from"path";import{randomUUID as In}from"node:crypto";import s from"chalk";var zo=["plan","accept-edits","auto","full-access","auto-in-project"],Va=["plan","accept-edits","auto","full-access"];function Ja(e){return e==="auto"||e==="auto-in-project"}a(Ja,"isAutoMode");function be(e){return e==="auto-in-project"?"auto":e}a(be,"canonicalizePermissionMode");function Ya(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(Ya,"permissionModeDisplayName");function Pi(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(Pi,"computeConfirmTools");function Mi(e){return e!==void 0&&zo.includes(e)}a(Mi,"isPermissionMode");function fo(e,o){return Mi(e)?be(e):o===void 0?void 0:be(o)}a(fo,"normalizePermissionMode");import{createHash as Qa}from"node:crypto";import Li from"node:fs";var $e=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"}},Ae=class extends Error{static{a(this,"ProviderSetupInvalidConfigError")}constructor(o,n){super(`KodaX configuration cannot be safely updated: ${o}. ${n}`),this.name="ProviderSetupInvalidConfigError"}},ji=/^[A-Za-z_][A-Za-z0-9_]*$/,Za=new Set(["accesskey","apikey","accesstoken","auth","authorization","bearertoken","clientsecret","credential","key","password","privatekey","refreshtoken","secret","sig","signature","token","xapikey"]);function He(){return Object.entries(io).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===jn?-1:o.name===jn?1:e.name.localeCompare(o.name))}a(He,"getProviderSetupCatalog");function Ui(e={}){let o=e.configPath??O("config.json"),n=e.catalog??He(),t=e.environment??process.env,r=Go(o);if(!r.config)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:r.error??"config.json is not a JSON object."};let i=Bi(r.config);if(i)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:i};let l=Wi(e.explicitProvider);if(l){let d=Di(r.config,l,n);return d?.hostBroker?{status:"needs-host-broker",configPath:o,configRevision:r.revision,provider:l}:d&&(!d.requiresCredential||Oi(t,d.apiKeyEnv))?_i(o,r.revision,l):Ni(o,r.revision,l,d?.apiKeyEnv)}if(!r.exists)return{status:"needs-provider",configPath:o,configRevision:r.revision};let c=Wi(r.config.provider);if(c){let d=Di(r.config,c,n);return d?d.hostBroker?{status:"needs-host-broker",configPath:o,configRevision:r.revision,provider:c}:!d.requiresCredential||Oi(t,d.apiKeyEnv)?_i(o,r.revision,c):Ni(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(Ui,"inspectProviderSetupReadiness");function Fi(e){let o=e.configPath??O("config.json"),n=e.catalog??He();try{return Se(o,()=>{let t=Go(o);if(!t.config)throw new Ae(o,t.error??"config.json is invalid JSON.");if(t.revision!==e.expectedRevision)throw new $e(o);el(t.config,o);let r=nl(e.choice,n,t.config),i={...t.config,provider:r.provider,model:r.model,...r.customProviders?{customProviders:r.customProviders}:{}};if(Go(o).revision!==e.expectedRevision)throw new $e(o);return zi(o,i),{provider:r.provider,model:r.model,apiKeyEnv:r.apiKeyEnv,configPath:o}})}catch(t){throw t instanceof gi?new $e(o):t}}a(Fi,"persistProviderSetupChoice");function Hi(e){if(e.credentialSource==="file")return["The API key was saved in permission-protected plaintext auth.json, separately from config.json.","Run `kodax` again. No environment-variable setup is required for this saved connection.","Saving a key does not verify its online validity or model entitlement."];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(Hi,"providerSetupRestartInstructions");function _i(e,o,n){return{status:"ready",configPath:e,configRevision:o,...n?{provider:n}:{}}}a(_i,"ready");function Ni(e,o,n,t){return{status:"needs-credential",configPath:e,configRevision:o,provider:n,...t?{apiKeyEnv:t}:{}}}a(Ni,"needsCredential");function Wi(e){return typeof e=="string"&&e.trim()?e.trim():void 0}a(Wi,"normalizedString");function Oi(e,o){return o!==void 0&&!!e[o]?.trim()}a(Oi,"hasEnvironmentValue");function Di(e,o,n){let t=n.find(l=>l.name===o);if(t)return{apiKeyEnv:t.apiKeyEnv,requiresCredential:!0};if(Object.entries(io).find(([l])=>l===o)?.[1]?.capabilityProfile.transport==="cli-bridge")return{requiresCredential:!1};let i=ol(e,o);return i?{apiKeyEnv:i.apiKeyEnv,requiresCredential:!0,...i.oauth||i.cloud?{hostBroker:!0}:{}}:void 0}a(Di,"resolveConfiguredProvider");function el(e,o){let n=Bi(e);if(n)throw new Ae(o,n)}a(el,"assertCustomProvidersPreservable");function Bi(e){let o=e.customProviders;if(o===void 0)return;if(!Array.isArray(o))return"Existing customProviders must be an array; repair it before running setup.";let n=new Set;for(let t of o){let r=Xo(t);if(!r)return"Existing customProviders contains an invalid entry; repair it before running setup.";let i=Ki(r.baseUrl);if(i)return`Existing customProviders entry "${r.name}" is unsafe: ${i}`;if(n.has(r.name))return`Existing customProviders contains duplicate name "${r.name}"; repair it before running setup.`;n.add(r.name)}}a(Bi,"existingCustomProvidersError");function ol(e,o){let n=e.customProviders;if(Array.isArray(n))for(let t of n){let r=Xo(t);if(r?.name===o)return r}}a(ol,"findValidCustomProvider");function Xo(e){if(!qi(e))return;let{name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:i}=e;if(typeof o!="string"||!["openai","anthropic","google","bedrock","mistral","pi-messages"].includes(String(n))||typeof t!="string"||typeof r!="string"||typeof i!="string")return;let l={...e,name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:i};try{return Wo(l),ji.test(l.apiKeyEnv)?l:void 0}catch{return}}a(Xo,"toValidCustomProvider");function nl(e,o,n){if(e.kind==="builtin"){let d=o.find(f=>f.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=Vo(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,i=Array.isArray(r)?r.flatMap(d=>{let f=Xo(d);return f?[f]:[]}):[],c=i.find(d=>d.name===t.name)?i.map(d=>d.name===t.name?t:d):[...i,t];return{provider:t.name,model:t.model,apiKeyEnv:t.apiKeyEnv,customProviders:c}}a(nl,"normalizeProviderSetupChoice");function Vo(e){let o={name:e.name.trim(),protocol:e.protocol,...e.api!==void 0?{api:e.api}:{},...e.oauth!==void 0?{oauth:e.oauth}:{},...e.cloud!==void 0?{cloud:e.cloud}:{},...e.authentication!==void 0?{authentication:e.authentication}:{},baseUrl:e.baseUrl.trim(),apiKeyEnv:e.apiKeyEnv.trim(),model:e.model.trim()};for(let t of["oauthRegistration","models","toolCapabilities","cacheCapabilities","reasoningProfile","reasoningCapability","reasoningPreset","reasoning","contextWindow","maxOutputTokens","supportsThinking","imageInput","promptCacheAffinity","replayReasoningContent","strictThinkingSignature","verifyStrategy"])e[t]!==void 0&&Object.assign(o,{[t]:structuredClone(e[t])});let n=Ki(o.baseUrl);if(n)throw new Error(n);if(Wo(o),!ji.test(o.apiKeyEnv))throw new Error("Custom provider API key environment variable name is invalid.");return o}a(Vo,"validateProviderSetupCustomMetadata");function Ki(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=>Za.has(t.toLowerCase().replace(/[-_.]/g,"")));return n===void 0?void 0:`Custom provider Base URL must not contain credential query parameter "${n}".`}a(Ki,"customProviderEndpointError");function Go(e){try{Li.lstatSync(e)}catch(n){return n!==null&&typeof n=="object"&&"code"in n&&n.code==="ENOENT"?{configPath:e,revision:Fe(void 0),exists:!1,config:{}}:{configPath:e,revision:Fe(void 0),exists:!0,error:"config.json cannot be read."}}let o;try{o=Li.readFileSync(e,"utf8")}catch{return{configPath:e,revision:Fe(void 0),exists:!0,error:"config.json cannot be read."}}try{let n=JSON.parse(o);return qi(n)?{configPath:e,revision:Fe(o),exists:!0,config:n}:{configPath:e,revision:Fe(o),exists:!0,error:"config.json must contain a JSON object."}}catch{return{configPath:e,revision:Fe(o),exists:!0,error:"config.json is invalid JSON; retain and repair the original."}}}a(Go,"readConfig");function Fe(e){return Qa("sha256").update(e??"<missing>","utf8").digest("hex")}a(Fe,"revisionFor");function qi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(qi,"isRecord");function zi(e,o){je(e,`${JSON.stringify(o,null,2)}
3
+ `)}a(zi,"writeConfigAtomically");function Im(e){let o=e.configPath??O("config.json");Se(o,()=>{let n=Go(o);if(n.error||!n.config)throw new Ae(o,n.error??"Missing configuration.");let t=n.config.customProviders;if(!Array.isArray(t))throw new Error("OAuth login requires a configured custom connection.");let r=!1,i=t.map(l=>{let c=Xo(l);if(!c||c.name!==e.name)return l;if(c.oauth!==e.service||c.oauthRegistration!==e.expectedRegistration)throw new $e(o);r=!0;let d={...c,oauthRegistration:e.registration};return Wo(d),d});if(!r)throw new $e(o);zi(o,{...n.config,customProviders:i})})}a(Im,"linkProviderOAuthRegistration");import{existsSync as Gi,mkdirSync as tl,readFileSync as Xi,writeFileSync as rl}from"node:fs";import Be from"node:path";var il={core:{},mcp:{version:1,servers:{}},extensions:{version:1,paths:[]},a2a:{version:2,agents:{}}},sl=["core","mcp","extensions","a2a"];function Qn(e,o){return o==="core"?Be.join(e,"config.json"):Be.join(e,"integrations",`${o}.json`)}a(Qn,"activePath");function al(e,o){return o==="core"?Be.join(e,"config.example.jsonc"):Be.join(e,"integrations",`${o}.example.jsonc`)}a(al,"templatePath");function ll(e){let o=e.replaceAll("\\","/");return sl.flatMap(n=>[{domain:n,kind:"active",path:Qn(e,n),content:`${JSON.stringify(il[n],null,2)}
4
4
  `},{domain:n,kind:"template",path:al(e,n),content:pi(n).replaceAll("~/.kodax",o)}])}a(ll,"configFiles");function mo(e,o){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error(`${o} must contain a JSON object.`);return e}a(mo,"requireRecord");function cl(e,o){let n=mo(e,"A2A config"),t=Object.keys(n).find(i=>!["version","agents","server"].includes(i));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=mo(n.agents,"A2A config agents");if(n.server!==void 0&&mo(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(cl,"validateA2ADocument");function dl(e,o){let n=Xi(e.path,"utf8"),t;try{t=JSON.parse(n)}catch{throw new Error(`${e.domain} config is invalid JSON.`)}e.domain==="core"?mo(t,"Core config"):e.domain==="mcp"?Xn(t):e.domain==="extensions"?Vn(t):cl(t,o)}a(dl,"validateActiveFile");function Jo(e,o){if(!Gi(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 dl(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(Jo,"existingFileResult");function ul(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}a(ul,"isAlreadyExists");function fl(e,o){if(e.domain==="core"&&e.kind==="active"){let n=Jo(e,o);return n.status!=="missing"?n:Se(e.path,()=>{let t=Jo(e,o);return t.status!=="missing"?t:(je(e.path,e.content),{domain:e.domain,kind:e.kind,path:e.path,status:"created"})})}tl(Be.dirname(e.path),{recursive:!0,mode:448});try{return rl(e.path,e.content,{encoding:"utf8",flag:"wx",mode:384}),{domain:e.domain,kind:e.kind,path:e.path,status:"created"}}catch(n){if(ul(n))return Jo(e,o);throw n}}a(fl,"createIfMissing");function ml(e){let o=Qn(e,"core");if(Gi(o))try{let n=mo(JSON.parse(Xi(o,"utf8")),"Core config"),t=hi(e);t.mcp.action==="create"&&Xn({version:1,servers:n.mcpServers}),t.extensions.action==="create"&&Vn({version:1,paths:n.extensions})}catch(n){return`Legacy integration configuration is invalid: ${n instanceof Error?n.message:"Legacy integration config is invalid."}`}}a(ml,"legacyIntegrationDiagnostic");function Vi(e={}){let o=Be.resolve(e.configHome??fe()),n=ll(o),t=n.map(i=>Jo(i,e.validateA2A));if(t.some(i=>i.status==="invalid"))return{configHome:o,files:t};let r=ml(o);if(r){let i=Qn(o,"core");return t=t.map(l=>l.path===i?{...l,status:"invalid",diagnostic:r}:l),{configHome:o,files:t}}return yi({configHome:o}),{configHome:o,files:n.map(i=>fl(i,e.validateA2A))}}a(Vi,"initializeSetupConfiguration");import Re from"node:path";var Ji=[{id:"interrupt",name:"Interrupt",description:"Interrupt the current streaming response",defaultBindings:[{key:"c",ctrl:!0}],context:"global",priority:200,category:"global",configurable:!1},{id:"showHelp",name:"Toggle Help",description:"Show or hide shortcut help when the input is empty",defaultBindings:[{key:"?"}],context:"global",priority:150,category:"global",configurable:!0},{id:"toggleThinking",name:"Cycle Reasoning Effort",description:"Cycle reasoning effort for the active model: off, low \u2026 max, auto",defaultBindings:[{key:"t",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleTranscriptMode",name:"Toggle Transcript Mode",description:"Toggle transcript mode on or off",defaultBindings:[{key:"o",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"openTranscriptSearch",name:"Search Transcript",description:"Open transcript search",defaultBindings:[{key:"f",ctrl:!0}],context:"global",priority:150,category:"navigation",configurable:!0},{id:"togglePermissionMode",name:"Cycle Permissions",description:"Cycle permission mode: plan, accept-edits, auto, full-access",defaultBindings:[{key:"tab",shift:!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 pl(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(pl,"formatBinding");function Yi(e){let n=Ji.find(t=>t.id===e)?.defaultBindings[0];return n?pl(n):"<unavailable>"}a(Yi,"shortcut");function gl(){return Object.entries(io).filter(([,e])=>e.capabilityProfile.transport==="cli-bridge").map(([e])=>e).sort()}a(gl,"defaultCliBridges");function Zn(e={}){let o=Re.resolve(e.configHome??fe()),n=e.catalog??He(),t=e.cliBridges??gl(),r=n.map(i=>` ${i.name.padEnd(18)} ${i.apiKeyEnv} (default model: ${i.defaultModel})`);return["KodaX setup guide","","Configuration files (existing files are never overwritten by setup):",` Core: ${Re.join(o,"config.json")}`,` Annotated template: ${Re.join(o,"config.example.jsonc")}`,` MCP: ${Re.join(o,"integrations","mcp.json")}`,` Extensions: ${Re.join(o,"integrations","extensions.json")}`,` A2A: ${Re.join(o,"integrations","a2a.json")}`,` Integration templates: ${Re.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)`]:[],"","Credentials stay outside config.json:"," Recommended: enter a hidden API key in setup; it is saved in local permission-protected plaintext auth.json."," Manage saved keys: kodax auth set-key <provider>, status <provider>, remove-key <provider>."," Saved values take priority over the approved environment variable. Removing one reveals the remaining source."," Environment variables remain available as an alternative:"," 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 Show AMA execution status"," /setup --help Show this guide","","Default shortcuts:",` ${Yi("toggleThinking")} Cycle reasoning effort`,` ${Yi("togglePermissionMode")} Cycle permission mode`," Tab Accept completion"," Esc Cancel or clear input"].join(`
5
5
  `)}a(Zn,"renderSetupGuide");import*as es from"node:readline";import Zi from"node:path";import{existsSync as wl}from"node:fs";function Qi(e){let o=!1;return{output:new Proxy(e,{get(t,r){if(r==="write"&&o)return(l,c,d)=>{let f=typeof c=="function"?c:d;return typeof f=="function"&&f(),!0};let i=Reflect.get(t,r,t);return typeof i=="function"?i.bind(t):i}}),async read(t,r){if(Reflect.get(t,"closed")===!0)return;if(o)throw new Error("A hidden input is already active.");e.write(`${r} (q to cancel): `),o=!0;let i=Reflect.get(t,"historySize");Reflect.set(t,"historySize",0);let l=new AbortController;try{return await new Promise((c,d)=>{let f=a(m=>{t.removeListener("close",u),t.removeListener("SIGINT",u),c(m==="q"?void 0:m?.trim())},"finish"),u=a(()=>{l.abort(),f()},"onCancel");t.once("close",u),t.once("SIGINT",u);try{t.question("",{signal:l.signal},m=>f(m))}catch(m){t.removeListener("close",u),t.removeListener("SIGINT",u),d(m)}})}finally{o=!1,Reflect.set(t,"historySize",i),e.write(`
6
6
  `)}}}}a(Qi,"createSecretReadlineSurface");import et from"chalk";async function os(e={}){let o=e.catalog??He(),n=Ui({...e.configPath?{configPath:e.configPath}:{},catalog:o});if(n.status==="invalid-config")throw new Ae(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??xl({input:e.input??process.stdin,output:e.output??process.stdout});try{let i=e.customOnly?"custom":await r.choose("Choose a provider. Credentials can be saved locally or supplied through an environment variable.",[...o.map(h=>({value:`builtin:${h.name}`,label:`${h.name} \u2014 ${h.defaultModel} (set ${h.apiKeyEnv})`})),{value:"custom",label:"Custom compatible or native provider"},{value:"cancel",label:"Cancel"}]);if(!i||i==="cancel")return{status:"cancelled"};let l=i==="custom"?await yl(r):await hl(r,o,i.slice(8));if(!l)return{status:"cancelled"};let c,d;if(r.secret&&!(l.kind==="custom"&&l.provider.oauth)){if(d=await r.choose("Credential source",[{value:"save-key",label:"Enter and save an API key (hidden input)"},{value:"environment",label:"Use the named environment variable"},...l.kind==="custom"&&l.provider.cloud?[{value:"cloud",label:"Use existing environment or trusted Main cloud identity"}]:[],{value:"cancel",label:"Cancel"}]),!d||!["save-key","environment","cloud"].includes(d))return{status:"cancelled"};if(d==="save-key"&&(c=await r.secret("API key (hidden; stored in permission-protected plaintext auth.json)"),c===void 0))return{status:"cancelled"}}let f=Sl(l,o);if(!await r.confirm(`Save ${f}? config.json stores public metadata. ${c===void 0?"Environment, OAuth login or trusted Main cloud identity supplies credentials.":"The API key is saved separately in permission-protected plaintext auth.json."}`))return{status:"cancelled"};let u=a(()=>Fi({configPath:n.configPath,expectedRevision:n.configRevision,catalog:o,choice:l}),"persist"),m=Zi.join(Zi.dirname(n.configPath),"auth.json");if(c===void 0&&(!d||!wl(m)))return{status:"configured",selection:u()};let y=l.kind==="custom"?Rr({...l.provider}):$r(l.provider),k=Cr(m),b={profile:e.profile??"default",provider:y.name,connectionFingerprint:y.getCredentialConnectionFingerprint()},v=await k.describeApiKey(b),A=await k.readApiKey(b);if((A?.revision??v.revision)!==v.revision||v.configured!==(A!==void 0))throw new Error("Provider credentials changed while setup was open. Retry setup.");if(c===void 0&&!A)return{status:"configured",selection:u()};let S=c===void 0?await k.removeApiKey(b,v.revision??null):await k.setApiKey(b,c,v.revision??null);try{return{status:"configured",selection:u(),...c===void 0?{}:{credentialSource:"file"}}}catch(h){try{A?await k.setApiKey(b,A.key,S.revision):await k.removeApiKey(b,S.revision)}catch(L){throw new AggregateError([h,L],"Provider setup failed and credential rollback conflicted. Refresh both files before retrying.")}throw h}}finally{t&&r.close?.()}}a(os,"runProviderSetupWizard");async function hl(e,o,n){let t=o.find(l=>l.name===n);if(!t)throw new Error(`Unknown setup provider: ${n}`);let r=[...new Set(t.models)],i=await e.choose(`Choose a model for ${t.name}.`,r.map(l=>({value:l,label:l===t.defaultModel?`${l} (default)`:l})));return i?{kind:"builtin",provider:t.name,model:i}:void 0}a(hl,"collectBuiltinChoice");async function yl(e){let o=await J(e,"Custom provider name (a unique local alias used by /model and config.json)");if(!o)return;let n=await e.choose("Protocol (select the actual provider API)",[{value:"openai",label:"OpenAI-compatible"},{value:"anthropic",label:"Anthropic-compatible"},{value:"responses",label:"OpenAI Responses"},{value:"gemini",label:"Gemini native"},{value:"vertex",label:"Vertex native"},{value:"bedrock",label:"Amazon Bedrock Converse"},{value:"azure",label:"Azure OpenAI Responses"},{value:"mistral",label:"Mistral native"},{value:"pi-messages",label:"Pi Messages"},{value:"oauth",label:"OAuth subscription (your own registered client)"}]);if(!n)return;if(n==="oauth")return vl(e,o);if(["gemini","vertex","bedrock","azure"].includes(n))return kl(e,o,n);if(!["openai","responses","anthropic","mistral","pi-messages"].includes(n))return;let t=await J(e,"API Base URL from the provider documentation, for example https://example.com/v1");if(!t)return;let r=await J(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 i=await J(e,"Model identifier from the provider documentation, for example provider/model-name");if(i)return{kind:"custom",provider:Vo({name:o,protocol:n==="responses"?"openai":n,...n==="responses"?{api:"responses"}:{},baseUrl:t,apiKeyEnv:r,model:i})}}a(yl,"collectCustomChoice");async function vl(e,o){let n=["openai-chatgpt","openai-codex","github-copilot","anthropic","openrouter","kimi-coding","meta","xai","radius"],t=await e.choose("OAuth service (requires your issued client registration)",n.map(c=>({value:c,label:c}))),r=n.find(c=>c===t);if(!r)return;let i=await J(e,"Model identifier from the provider documentation");if(!i)return;let l;if(r==="github-copilot"){let c=await e.choose("Copilot model API",[{value:"responses",label:"Responses"},{value:"chat-completions",label:"Chat Completions"},{value:"anthropic-messages",label:"Anthropic Messages"}]);if(!c)return;l=c}return{kind:"custom",provider:Ar({name:o,model:i,service:r,...l?{api:l}:{}})}}a(vl,"collectOAuthChoice");async function kl(e,o,n){let t;if(n==="vertex"){let l=await J(e,"Google Cloud project ID"),c=l&&await J(e,"Vertex location (for example global or us-central1)");if(!l||!c)return;t=so({name:o,model:"pending",service:n,project:l,location:c})}else if(n==="bedrock"){let l=await J(e,"AWS region");if(!l)return;t=so({name:o,model:"pending",service:n,region:l})}else if(n==="azure"){let l=await J(e,"Azure HTTPS resource endpoint");if(!l)return;t=so({name:o,model:"pending",service:n,endpoint:l})}else t=so({name:o,model:"pending",service:"gemini"});let r=await J(e,"Environment-variable name only; native cloud identities may use the trusted Host credential resolver instead."),i=r&&await J(e,"Model identifier from the provider documentation");if(!(!r||!i))return{kind:"custom",provider:Vo({...t,apiKeyEnv:r,model:i})}}a(kl,"collectCloudChoice");async function J(e,o){let t=(await e.text(o))?.trim();return t||void 0}a(J,"requiredText");function Sl(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(Sl,"summarizeChoice");function xl(e){let o=Qi(e.output),n=es.createInterface({input:e.input,output:o.output,terminal:!!(Reflect.get(e.input,"isTTY")&&Reflect.get(e.output,"isTTY")),historySize:0}),t=!1;n.on("close",()=>{t=!0}),n.on("SIGINT",()=>n.close());let r=a(i=>new Promise((l,c)=>{let d=!1,f=a(m=>{d||(d=!0,n.removeListener("close",u),l(m))},"finish"),u=a(()=>f(void 0),"onClose");if(t){f(void 0);return}n.once("close",u);try{n.question(i,m=>f(m))}catch(m){n.removeListener("close",u),t?f(void 0):c(m)}}),"question");return{async choose(i,l){for(e.output.write(`
7
7
  ${et.cyan(i)}
8
8
  `),l.forEach((c,d)=>e.output.write(` ${d+1}. ${c.label}
9
9
  `));;){let c=await r(et.dim(`Select 1-${l.length} (q to cancel): `));if(c===void 0||c.trim().toLowerCase()==="q")return;let d=Number.parseInt(c.trim(),10)-1,f=l[d];if(f)return f.value;e.output.write(et.yellow(`Choose one of the numbered options.
10
- `))}},async text(i,l){let c=l?` [${l}]`:"",d=await r(`${i}${c} (q to cancel): `);if(!(d===void 0||d.trim().toLowerCase()==="q"))return d.trim()||l},async secret(i){if(!t)return o.read(n,i)},async confirm(i){return(await r(`${i} [y/N]: `))?.trim().toLowerCase()==="y"},close:a(()=>n.close(),"close")}}a(xl,"createTerminalProviderSetupInteraction");async function ns(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 i=!1;try{await br(o,"utility",e.signal,l=>o.stream([{role:"user",content:"ping"}],[],"",{effort:r},{modelOverride:n,maxOutputTokensOverride:o.getReasoningProfile?.(n)?.supportsManualThinkingBudget&&r!=="none"?1025:16,singleAttempt:!0,onReasoningEffortRejected:a(c=>{c.cacheScope?Un(e.provider,n,c.effort,"probed",e.now(),e.configHome,c.cacheScope):Un(e.provider,n,c.effort,"probed",e.now(),e.configHome),i=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},l))}catch(l){t.push({effort:r,status:i?"rejected":"error",error:l instanceof Error?l.message:String(l)});continue}i?t.push({effort:r,status:"rejected"}):t.push({effort:r,status:"accepted"})}return t}a(ns,"probeProviderReasoningEfforts");import Qo from"fs";import ss from"path";import Yo from"node:path";import nt from"node:os";function is(){try{return fe()}catch{return}}a(is,"safeGetAgentConfigHome");function ot(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return xr(e.replace(n,nt.homedir()),o)}a(ot,"resolveShellWriteTarget");function rs(e,o){let n=is();if(n&&me(e,n))return"user-kodax";let t=Yo.join(Yo.resolve(o),".kodax");if(me(e,t))return"project-kodax"}a(rs,"resolveProtectedZone");function Al(){let e=new Set;try{e.add(nt.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(Al,"getSystemTempDirs");var Rl=new Set(["bash"]),Cl={toolNames:Rl,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],i=new Set,l=new Set,c=Al(),d=Yo.resolve(o);for(let f of Gr(t)){let u;try{u=ot(f,n)}catch{continue}let m=rs(u,o);if(m){i.has(u)||(i.add(u),r.push({kind:"protected_path",path:f,zone:m}));continue}if(lo(u,o)){let y=c.some(b=>me(u,b)),k=me(u,d);!y&&!k&&!l.has(u)&&(l.add(u),r.push({kind:"outside_project",path:f}))}}for(let f of Kn(t)){let u;try{u=ot(f,n)}catch{continue}rs(u,o)||me(u,d)||c.some(k=>me(u,k))||!lo(u,o)||r.push({kind:"shell_redirect_outside",target:f})}return r}},yp=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([Yo.join(nt.homedir(),".kodax")]),i=is();i&&r.add(i);for(let l of Xr(t)){let c=ot(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 po=O("config.json");function as(){return ss.join(process.cwd(),".kodax","config.local.json")}a(as,"getProjectConfigFile");function Hp(e=process.env){let o=Zo(po);return Il({settings:o.autoMode,autoReview:o.autoReview,env:e})}a(Hp,"loadAutoModeSettings");function Il(e={}){let o=e.settings??{},n=e.env??{},t=tt(o.classifierModel),r=tt(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),i=tt(e.autoReview?.policy);return{classifierModel:t,classifierModelEnv:r,reviewPolicy:i}}a(Il,"resolveAutoModeSettings");function tt(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(tt,"nonEmptyString");function Zo(e){try{if(Qo.existsSync(e))return JSON.parse(Qo.readFileSync(e,"utf-8"))}catch{}return{}}a(Zo,"readJsonFile");function Tl(e,o){Qo.mkdirSync(ss.dirname(e),{recursive:!0}),Qo.writeFileSync(e,JSON.stringify(o,null,2))}a(Tl,"writeJsonFile");function rt(e){Se(po,()=>{let o=wi(po);je(po,JSON.stringify({...o,permissionMode:be(e)},null,2))})}a(rt,"savePermissionModeUser");function Bp(){let e=Zo(po),o=Zo(as()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Bp,"loadAlwaysAllowTools");function Kp(e,o,n=!1){let t=Bn(e,o,n);if(!t)return;let r=as(),i=Zo(r),l=i.alwaysAllowTools??[];l.includes(t)||Tl(r,{...i,alwaysAllowTools:[...l,t]})}a(Kp,"saveAlwaysAllowToolPattern");function Pl(e){return[...Kr(e),...qr(e)].sort((o,n)=>o.start-n.start)}a(Pl,"collectSkillReferences");var go=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 ls(e){let o=Pl(e);return o.map((n,t)=>({name:n.name,argumentsText:e.slice(n.end,o[t+1]?.start).trim()}))}a(ls,"parseUserSkillReferences");function en(e,o){let n=ls(e).filter(t=>o(t.name));if(n.length>1)throw new go(n.map(t=>t.name));return n[0]}a(en,"assertSingleKnownUserSkillReference");function Vp(e,o,n){let t=ls(e);return en(e,o)??(n?void 0:t[0])}a(Vp,"findQueueableUserSkillReference");async function on(e,o){let n=o.projectRoot??o.workingDirectory,t=V(n);return t.size===0&&(t=await Z(n)),en(e,r=>t.has(r))}a(on,"resolveUserSkillReference");async function cs(e,o,n){let t=n.projectRoot??n.workingDirectory,r=V(t);if(r.size===0&&(r=await Z(t)),!r.has(e))return;let i=await r.loadFull(e),l=await _r(i,o,n);return{prompt:l.content,source:"skill",displayName:e,path:i.skillFilePath,disableModelInvocation:l.disableModelInvocation,userInvocable:!0,allowedTools:i.allowedTools,context:i.context,agent:i.agent,argumentHint:i.argumentHint,model:i.model,hooks:i.hooks,skillInvocation:{name:e,path:i.skillFilePath,description:i.description,arguments:o||void 0,allowedTools:i.allowedTools,context:i.context,agent:i.agent,argumentHint:i.argumentHint,model:i.model,hookEvents:i.hooks?Object.entries(i.hooks).filter(([,c])=>Array.isArray(c)&&c.length>0).map(([c])=>c):void 0,expandedContent:l.content}}}a(cs,"createUserSkillInvocation");async function it(e,o,n){return cs(e,o,n)}a(it,"prepareUserSkillInvocation");async function Jp(e,o){let n=await on(e,o);return n?it(n.name,n.argumentsText,o):void 0}a(Jp,"prepareUserSkillInvocationFromInput");async function Yp(e,o){let n=await on(e,o);return n?cs(n.name,n.argumentsText,o):void 0}a(Yp,"resolveUserSkillInvocation");function Qp(e,o){return{...e,contextTokenSnapshot:o}}a(Qp,"preserveQueuedSkillContextSnapshot");var ge=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 i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,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 i of r.aliases)this.aliases.delete(i.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}},Ml=new ge;var Ll="learning-recovery";function tg(e){return e.filter(o=>o.id!==Ll)}a(tg,"dismissLearningRecoveryAfterQuerySubmit");function st(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(st,"formatLearningStatus");function rg(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${st(e)} [/learn]`}a(rg,"formatLearningRecoverySummary");import X from"chalk";import{Buffer as ms}from"node:buffer";import{spawn as _l}from"node:child_process";import ds from"node:process";var Ce="\x1B",Nl="\x07",at=`${Ce}\\`;function us(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(us,"shouldPreferNativeClipboard");function Wl(e,o){let n=ms.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?at:Nl,r=`${Ce}]52;c;${n}${t}`;return o.TMUX?`${Ce}Ptmux;${r.replaceAll(Ce,`${Ce}${Ce}`)}${at}`:o.STY?`${Ce}P${r}${at}`:r}a(Wl,"buildOscSequence");async function nn(e,o,n){return new Promise((t,r)=>{let i=_l(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";i.on("error",r),i.stdin?.on("error",r),i.stderr?.on("data",c=>{l+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}a(nn,"execClipboardCommand");function Ol(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=ms.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Ol,"buildWindowsClipboardCandidates");async function fs(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Ol(e);for(let[r,i,l]of t)try{if(await nn(r,i,l))return!0}catch{}return!1}case"darwin":return nn("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await nn(r,i,e))return!0}catch{}return!1}default:return!1}}a(fs,"tryNativeClipboard");async function Dl(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await nn("tmux",n,e)}catch{return!1}}a(Dl,"tryTmuxClipboard");async function ps(e,o={}){let n=o.env??ds.env,t=o.platform??ds.platform,r=e.trimEnd(),i=Wl(r,n);if(!r)throw new Error("Nothing to copy.");if(us(n,t))try{if(await fs(r,n,t))return{path:"native"}}catch{}if(await Dl(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!us(n,t))try{if(await fs(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(ps,"copyTextToClipboard");var lt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(lt||(lt={}));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 fg={[B.Scheduled]:"\u25CB",[B.Validating]:"\u25CC",[B.AwaitingApproval]:"?",[B.Executing]:"\u25CB",[B.Success]:"\u2713",[B.Error]:"\u2717",[B.Cancelled]:"-"},gs;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(gs||(gs={}));var mg={streamingState:lt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var jl="[redacted]",ws="[truncated]";function se(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(se,"truncateToolReplayText");function Ul(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(Ul,"isSensitiveToolInputKey");function hs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(hs,"isRecord");function ct(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return se(e);if(o>=6)return ws;if(typeof e=="object"&&e!==null){if(n.has(e))return ws;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>ct(r,o+1,n));if(!hs(e))return se(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=Ul(r)?jl:ct(i,o+1,n);return t}return se(String(e))}a(ct,"sanitizeToolJsonValue");function ys(e){if(!e)return;let o=ct(e);return hs(o)?o:void 0}a(ys,"sanitizeToolInput");function vs(e){if(e!==void 0){if(typeof e=="string")return se(e);try{return se(JSON.stringify(e))}catch{return se(String(e))}}}a(vs,"stringifyToolReplayValue");function kg(e){if(e.type==="task_result"){let{summary:o,...n}=e.taskResult;return{type:"event",text:o,taskResult:n,...e.timestamp===void 0?{}:{timestamp:e.timestamp}}}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(Xl),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(kg,"seedToHistoryItem");var Fl="[Thinking]",Hl="[/Thinking]",Bl="Untitled Session",ks=50,Kl=60,xs="...",bs=["[Managed Task]","[Managed Task Protocol Retry]","Assigned native agent identity:","Tool policy:","Blocked tools:","Allowed shell patterns:","Dependency handoff artifacts:","Dependency summary preview:","Preferred agent:","Read structured bundle first:","Read human summary next:"],$s=[/(?:^|\n)You are the [^\n]+ role for a managed KodaX task\./,/(?:^|\n)Primary task:/,/(?:^|\n)Work intent:/,/(?:^|\n)Complexity:/,/(?:^|\n)Risk:/,/(?:^|\n)Harness:/,/(?:^|\n)Brainstorm required:/],ql=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,zl="Session ended before the tool completed.";function Gl(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(Gl,"toolCallSeedToHistoryToolStatus");function Xl(e){return{id:e.id,...e.assistantOutputId!==void 0?{assistantOutputId:e.assistantOutputId}:{},name:e.name,status:Gl(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(Xl,"toolCallSeedToHistoryToolCall");function Vl(e){let o=-1;for(let n of bs){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of $s){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Vl,"findControlPlaneCutIndex");function Jl(e){return bs.some(o=>e.includes(o))||$s.some(o=>o.test(e))}a(Jl,"hasControlPlaneSignal");function As(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(As,"collectTextBlocks");function rn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(rn,"isRecord");function Yl(e){if(typeof e=="string")return se(e);if(e===void 0)return"";try{return vs(e)??""}catch{return se(String(e))}}a(Yl,"toolResultContentToString");function Ql(e){let o=Yl(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(Ql,"inferToolResultSeed");function Zl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!rn(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,Ql(n));return o}a(Zl,"collectToolResultSeeds");function ec(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:zl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:ys(rn(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(ec,"buildToolCallSeed");function oc(e){return typeof e=="string"?e:Array.isArray(e)?As(e).join(`
10
+ `))}},async text(i,l){let c=l?` [${l}]`:"",d=await r(`${i}${c} (q to cancel): `);if(!(d===void 0||d.trim().toLowerCase()==="q"))return d.trim()||l},async secret(i){if(!t)return o.read(n,i)},async confirm(i){return(await r(`${i} [y/N]: `))?.trim().toLowerCase()==="y"},close:a(()=>n.close(),"close")}}a(xl,"createTerminalProviderSetupInteraction");async function ns(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 i=!1;try{await br(o,"utility",e.signal,l=>o.stream([{role:"user",content:"ping"}],[],"",{effort:r},{modelOverride:n,maxOutputTokensOverride:o.getReasoningProfile?.(n)?.supportsManualThinkingBudget&&r!=="none"?1025:16,singleAttempt:!0,onReasoningEffortRejected:a(c=>{c.cacheScope?Un(e.provider,n,c.effort,"probed",e.now(),e.configHome,c.cacheScope):Un(e.provider,n,c.effort,"probed",e.now(),e.configHome),i=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},l))}catch(l){t.push({effort:r,status:i?"rejected":"error",error:l instanceof Error?l.message:String(l)});continue}i?t.push({effort:r,status:"rejected"}):t.push({effort:r,status:"accepted"})}return t}a(ns,"probeProviderReasoningEfforts");import Qo from"fs";import ss from"path";import Yo from"node:path";import nt from"node:os";function is(){try{return fe()}catch{return}}a(is,"safeGetAgentConfigHome");function ot(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return xr(e.replace(n,nt.homedir()),o)}a(ot,"resolveShellWriteTarget");function rs(e,o){let n=is();if(n&&me(e,n))return"user-kodax";let t=Yo.join(Yo.resolve(o),".kodax");if(me(e,t))return"project-kodax"}a(rs,"resolveProtectedZone");function Al(){let e=new Set;try{e.add(nt.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(Al,"getSystemTempDirs");var Rl=new Set(["bash"]),Cl={toolNames:Rl,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],i=new Set,l=new Set,c=Al(),d=Yo.resolve(o);for(let f of Gr(t)){let u;try{u=ot(f,n)}catch{continue}let m=rs(u,o);if(m){i.has(u)||(i.add(u),r.push({kind:"protected_path",path:f,zone:m}));continue}if(lo(u,o)){let y=c.some(b=>me(u,b)),k=me(u,d);!y&&!k&&!l.has(u)&&(l.add(u),r.push({kind:"outside_project",path:f}))}}for(let f of Kn(t)){let u;try{u=ot(f,n)}catch{continue}rs(u,o)||me(u,d)||c.some(k=>me(u,k))||!lo(u,o)||r.push({kind:"shell_redirect_outside",target:f})}return r}},yp=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([Yo.join(nt.homedir(),".kodax")]),i=is();i&&r.add(i);for(let l of Xr(t)){let c=ot(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 po=O("config.json");function as(){return ss.join(process.cwd(),".kodax","config.local.json")}a(as,"getProjectConfigFile");function Hp(e=process.env){let o=Zo(po);return El({settings:o.autoMode,autoReview:o.autoReview,env:e})}a(Hp,"loadAutoModeSettings");function El(e={}){let o=e.settings??{},n=e.env??{},t=tt(o.classifierModel),r=tt(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),i=tt(e.autoReview?.policy);return{classifierModel:t,classifierModelEnv:r,reviewPolicy:i}}a(El,"resolveAutoModeSettings");function tt(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(tt,"nonEmptyString");function Zo(e){try{if(Qo.existsSync(e))return JSON.parse(Qo.readFileSync(e,"utf-8"))}catch{}return{}}a(Zo,"readJsonFile");function Tl(e,o){Qo.mkdirSync(ss.dirname(e),{recursive:!0}),Qo.writeFileSync(e,JSON.stringify(o,null,2))}a(Tl,"writeJsonFile");function rt(e){Se(po,()=>{let o=wi(po);je(po,JSON.stringify({...o,permissionMode:be(e)},null,2))})}a(rt,"savePermissionModeUser");function Bp(){let e=Zo(po),o=Zo(as()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Bp,"loadAlwaysAllowTools");function Kp(e,o,n=!1){let t=Bn(e,o,n);if(!t)return;let r=as(),i=Zo(r),l=i.alwaysAllowTools??[];l.includes(t)||Tl(r,{...i,alwaysAllowTools:[...l,t]})}a(Kp,"saveAlwaysAllowToolPattern");function Pl(e){return[...Kr(e),...qr(e)].sort((o,n)=>o.start-n.start)}a(Pl,"collectSkillReferences");var go=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 ls(e){let o=Pl(e);return o.map((n,t)=>({name:n.name,argumentsText:e.slice(n.end,o[t+1]?.start).trim()}))}a(ls,"parseUserSkillReferences");function en(e,o){let n=ls(e).filter(t=>o(t.name));if(n.length>1)throw new go(n.map(t=>t.name));return n[0]}a(en,"assertSingleKnownUserSkillReference");function Vp(e,o,n){let t=ls(e);return en(e,o)??(n?void 0:t[0])}a(Vp,"findQueueableUserSkillReference");async function on(e,o){let n=o.projectRoot??o.workingDirectory,t=V(n);return t.size===0&&(t=await Z(n)),en(e,r=>t.has(r))}a(on,"resolveUserSkillReference");async function cs(e,o,n){let t=n.projectRoot??n.workingDirectory,r=V(t);if(r.size===0&&(r=await Z(t)),!r.has(e))return;let i=await r.loadFull(e),l=await _r(i,o,n);return{prompt:l.content,source:"skill",displayName:e,path:i.skillFilePath,disableModelInvocation:l.disableModelInvocation,userInvocable:!0,allowedTools:i.allowedTools,context:i.context,agent:i.agent,argumentHint:i.argumentHint,model:i.model,hooks:i.hooks,skillInvocation:{name:e,path:i.skillFilePath,description:i.description,arguments:o||void 0,allowedTools:i.allowedTools,context:i.context,agent:i.agent,argumentHint:i.argumentHint,model:i.model,hookEvents:i.hooks?Object.entries(i.hooks).filter(([,c])=>Array.isArray(c)&&c.length>0).map(([c])=>c):void 0,expandedContent:l.content}}}a(cs,"createUserSkillInvocation");async function it(e,o,n){return cs(e,o,n)}a(it,"prepareUserSkillInvocation");async function Jp(e,o){let n=await on(e,o);return n?it(n.name,n.argumentsText,o):void 0}a(Jp,"prepareUserSkillInvocationFromInput");async function Yp(e,o){let n=await on(e,o);return n?cs(n.name,n.argumentsText,o):void 0}a(Yp,"resolveUserSkillInvocation");function Qp(e,o){return{...e,contextTokenSnapshot:o}}a(Qp,"preserveQueuedSkillContextSnapshot");var ge=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 i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,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 i of r.aliases)this.aliases.delete(i.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}},Ml=new ge;var Ll="learning-recovery";function tg(e){return e.filter(o=>o.id!==Ll)}a(tg,"dismissLearningRecoveryAfterQuerySubmit");function st(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(st,"formatLearningStatus");function rg(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${st(e)} [/learn]`}a(rg,"formatLearningRecoverySummary");import X from"chalk";import{Buffer as ms}from"node:buffer";import{spawn as _l}from"node:child_process";import ds from"node:process";var Ce="\x1B",Nl="\x07",at=`${Ce}\\`;function us(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(us,"shouldPreferNativeClipboard");function Wl(e,o){let n=ms.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?at:Nl,r=`${Ce}]52;c;${n}${t}`;return o.TMUX?`${Ce}Ptmux;${r.replaceAll(Ce,`${Ce}${Ce}`)}${at}`:o.STY?`${Ce}P${r}${at}`:r}a(Wl,"buildOscSequence");async function nn(e,o,n){return new Promise((t,r)=>{let i=_l(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";i.on("error",r),i.stdin?.on("error",r),i.stderr?.on("data",c=>{l+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}a(nn,"execClipboardCommand");function Ol(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=ms.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Ol,"buildWindowsClipboardCandidates");async function fs(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Ol(e);for(let[r,i,l]of t)try{if(await nn(r,i,l))return!0}catch{}return!1}case"darwin":return nn("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await nn(r,i,e))return!0}catch{}return!1}default:return!1}}a(fs,"tryNativeClipboard");async function Dl(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await nn("tmux",n,e)}catch{return!1}}a(Dl,"tryTmuxClipboard");async function ps(e,o={}){let n=o.env??ds.env,t=o.platform??ds.platform,r=e.trimEnd(),i=Wl(r,n);if(!r)throw new Error("Nothing to copy.");if(us(n,t))try{if(await fs(r,n,t))return{path:"native"}}catch{}if(await Dl(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!us(n,t))try{if(await fs(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(ps,"copyTextToClipboard");var lt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(lt||(lt={}));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 fg={[B.Scheduled]:"\u25CB",[B.Validating]:"\u25CC",[B.AwaitingApproval]:"?",[B.Executing]:"\u25CB",[B.Success]:"\u2713",[B.Error]:"\u2717",[B.Cancelled]:"-"},gs;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(gs||(gs={}));var mg={streamingState:lt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var jl="[redacted]",ws="[truncated]";function se(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(se,"truncateToolReplayText");function Ul(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(Ul,"isSensitiveToolInputKey");function hs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(hs,"isRecord");function ct(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return se(e);if(o>=6)return ws;if(typeof e=="object"&&e!==null){if(n.has(e))return ws;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>ct(r,o+1,n));if(!hs(e))return se(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=Ul(r)?jl:ct(i,o+1,n);return t}return se(String(e))}a(ct,"sanitizeToolJsonValue");function ys(e){if(!e)return;let o=ct(e);return hs(o)?o:void 0}a(ys,"sanitizeToolInput");function vs(e){if(e!==void 0){if(typeof e=="string")return se(e);try{return se(JSON.stringify(e))}catch{return se(String(e))}}}a(vs,"stringifyToolReplayValue");function kg(e){if(e.type==="task_result"){let{summary:o,...n}=e.taskResult;return{type:"event",text:o,taskResult:n,historyBoundary:e.historyBoundary,...e.timestamp===void 0?{}:{timestamp:e.timestamp}}}return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool",historyBoundary:e.historyBoundary,...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Xl),historyBoundary:e.historyBoundary,...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(kg,"seedToHistoryItem");var Fl="[Thinking]",Hl="[/Thinking]",Bl="Untitled Session",ks=50,Kl=60,xs="...",bs=["[Managed Task]","[Managed Task Protocol Retry]","Assigned native agent identity:","Tool policy:","Blocked tools:","Allowed shell patterns:","Dependency handoff artifacts:","Dependency summary preview:","Preferred agent:","Read structured bundle first:","Read human summary next:"],$s=[/(?:^|\n)You are the [^\n]+ role for a managed KodaX task\./,/(?:^|\n)Primary task:/,/(?:^|\n)Work intent:/,/(?:^|\n)Complexity:/,/(?:^|\n)Risk:/,/(?:^|\n)Harness:/,/(?:^|\n)Brainstorm required:/],ql=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,zl="Session ended before the tool completed.";function Gl(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(Gl,"toolCallSeedToHistoryToolStatus");function Xl(e){return{id:e.id,...e.assistantOutputId!==void 0?{assistantOutputId:e.assistantOutputId}:{},name:e.name,status:Gl(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(Xl,"toolCallSeedToHistoryToolCall");function Vl(e){let o=-1;for(let n of bs){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of $s){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Vl,"findControlPlaneCutIndex");function Jl(e){return bs.some(o=>e.includes(o))||$s.some(o=>o.test(e))}a(Jl,"hasControlPlaneSignal");function As(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(As,"collectTextBlocks");function rn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(rn,"isRecord");function Yl(e){if(typeof e=="string")return se(e);if(e===void 0)return"";try{return vs(e)??""}catch{return se(String(e))}}a(Yl,"toolResultContentToString");function Ql(e){let o=Yl(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(Ql,"inferToolResultSeed");function Zl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!rn(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,Ql(n));return o}a(Zl,"collectToolResultSeeds");function ec(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:zl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:ys(rn(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(ec,"buildToolCallSeed");function oc(e){return typeof e=="string"?e:Array.isArray(e)?As(e).join(`
11
11
  `):""}a(oc,"extractAssistantTextOnly");function ho(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(ho,"pushSeed");function Ss(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(Ss,"stripLegacyTagBoundaryNewlines");function nc(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?wo(String(n.command??"")):o==="read"||o==="write"||o==="edit"?wo(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?wo(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?wo(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(nc,"formatToolUseSummary");function wo(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(wo,"truncateToolHint");function tc(e){if(!e.includes(Fl)||!e.includes(Hl))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(ql)){let r=t.index??-1,i=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+i.length;ho(o,"assistant",Ss(e.slice(n,c))),ho(o,"thinking",l),n=r+t[0].length}return ho(o,"assistant",Ss(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(tc,"parseLegacyAssistantContent");function Rs(e,o,n=!1){if(typeof e=="string")return n?e.length>0?[{type:"assistant",text:e}]:[]:tc(e);if(!Array.isArray(e))return[];let t=[],r=[],i=[],l=a(()=>{r.length!==0&&(n?t.push({type:"assistant",text:r.join("")}):ho(t,"assistant",r.join(`
12
- `)),r.length=0)},"flushAssistantBuffer"),c=a(()=>{i.length!==0&&(t.push({type:"tool_group",tools:[...i]}),i.length=0)},"flushToolBuffer");for(let d of e)if(!(!rn(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 f=t.at(-1);n&&f?.type==="thinking"?f.text+=String(d.thinking):n?t.push({type:"thinking",text:String(d.thinking)}):ho(t,"thinking",String(d.thinking))}break;case"tool_use":if(l(),o){let f=ec(d,o);f&&i.push(f)}else if(typeof d.name=="string"){let f=nc({name:d.name,...rn(d.input)?{input:d.input}:{}});f&&t.push({type:"tool_summary",text:f})}break;case"tool_result":case"redacted_thinking":break;default:break}return c(),l(),t}a(Rs,"extractAssistantHistorySeeds");var rc=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],ic=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function sc(e){return rc.some(o=>e.includes(o))}a(sc,"isManagedWorkerPrompt");function Cs(e){return e.replace(ic,"").trim()}a(Cs,"stripManagedProtocolBlocks");function ac(e){switch(e.role){case"assistant":{let o=Rs(e.content,void 0,e.outputId!==void 0);return e.outputId?o:o.flatMap(n=>{if(n.type!=="assistant")return[n];let t=Cs(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]})}case"user":{if(e._source==="sidecar-verifier"){let n=tn(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=tn(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=tn(e.content);return o.trim().length===0||e.inputId===void 0&&sc(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(ac,"extractHistorySeedsFromMessageWithoutTimestamp");function dt(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(dt,"withMessageTimestamp");function lc(e){return dt(ac(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(lc,"extractHistorySeedsFromMessage");function Sg(e,o=!1){let n=[];for(let t=0;t<e.length;t+=1){let r=e[t];if(r){if(o){let i=Wr(r);if(i.length>0){n.push(...dt(i.map(l=>({type:"task_result",text:l.summary,taskResult:l})),r.timestamp));continue}}if(r.role==="assistant"){let i=Zl(e[t+1]),l=dt(Rs(r.content,i,r.outputId!==void 0),r.timestamp);n.push(...l.map(c=>r.outputId&&c.type==="tool_group"?{...c,tools:c.tools.map(d=>({...d,assistantOutputId:r.outputId}))}:r.outputId&&(c.type==="assistant"||c.type==="thinking")?{...c,outputId:r.outputId}:c.type==="assistant"?{...c,text:Cs(c.text)}:c).filter(c=>c.type!=="assistant"||c.text.length>0&&(r.outputId!==void 0||c.text.trim()!=="...")));continue}n.push(...lc(r))}}return n}a(Sg,"extractHistorySeedsFromMessages");function tn(e){return typeof e=="string"?e:Array.isArray(e)?As(e).join(`
13
- `):""}a(tn,"extractTextContent");function cc(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>ks?`${o.slice(0,ks)}${xs}`:o:Bl}a(cc,"formatSessionTitle");function dc(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(dc,"isPureToolResultUserMessage");function ut(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=oc(n.content);return t&&t.trim()!=="..."?t:""}if(!dc(n))return""}}return""}a(ut,"extractLastAssistantText");function xg(e,o,n,t){let r=[ut(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=Es(i);if(l)return l}return""}a(xg,"resolveCompletedAssistantText");function Es(e){let o=e.trim();if(!o||o==="...")return"";let n=Vl(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Es,"sanitizeUserFacingAssistantText");function bg(e){let o=e.trim();return o.length>0&&Es(o).length===0&&Jl(o)}a(bg,"isControlPlaneOnlyAssistantText");function $g(e){let o=e.find(t=>t.role==="user"),n=o?tn(o.content):"";return cc(n)}a($g,"extractTitle");function Ag(e,o=Kl){let n=e.replace(/\n/g," "),t=n.length>o?xs:"";return n.slice(0,o)+t}a(Ag,"formatMessagePreview");var ft={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=ut(o.messages);if(!n){console.log(X.yellow(`
12
+ `)),r.length=0)},"flushAssistantBuffer"),c=a(()=>{i.length!==0&&(t.push({type:"tool_group",tools:[...i]}),i.length=0)},"flushToolBuffer");for(let d of e)if(!(!rn(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 f=t.at(-1);n&&f?.type==="thinking"?f.text+=String(d.thinking):n?t.push({type:"thinking",text:String(d.thinking)}):ho(t,"thinking",String(d.thinking))}break;case"tool_use":if(l(),o){let f=ec(d,o);f&&i.push(f)}else if(typeof d.name=="string"){let f=nc({name:d.name,...rn(d.input)?{input:d.input}:{}});f&&t.push({type:"tool_summary",text:f})}break;case"tool_result":case"redacted_thinking":break;default:break}return c(),l(),t}a(Rs,"extractAssistantHistorySeeds");var rc=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],ic=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function sc(e){return rc.some(o=>e.includes(o))}a(sc,"isManagedWorkerPrompt");function Cs(e){return e.replace(ic,"").trim()}a(Cs,"stripManagedProtocolBlocks");function ac(e){switch(e.role){case"assistant":{let o=Rs(e.content,void 0,e.outputId!==void 0);return e.outputId?o:o.flatMap(n=>{if(n.type!=="assistant")return[n];let t=Cs(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]})}case"user":{if(e._source==="sidecar-verifier"){let n=tn(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=tn(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=tn(e.content);return o.trim().length===0||e.inputId===void 0&&sc(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(ac,"extractHistorySeedsFromMessageWithoutTimestamp");function dt(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(dt,"withMessageTimestamp");function lc(e){return dt(ac(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(lc,"extractHistorySeedsFromMessage");function Sg(e,o=!1,n){let t=[];for(let r=0;r<e.length;r+=1){let i=e[r];if(!i)continue;let l=n?.get(i),c=a(d=>{t.push(...d.map(f=>l?{...f,historyBoundary:l}:f))},"append");if(o){let d=Wr(i);if(d.length>0){c(dt(d.map(f=>({type:"task_result",text:f.summary,taskResult:f})),i.timestamp));continue}}if(i.role==="assistant"){let d=Zl(e[r+1]),f=dt(Rs(i.content,d,i.outputId!==void 0),i.timestamp);c(f.map(u=>i.outputId&&u.type==="tool_group"?{...u,tools:u.tools.map(m=>({...m,assistantOutputId:i.outputId}))}:i.outputId&&(u.type==="assistant"||u.type==="thinking")?{...u,outputId:i.outputId}:u.type==="assistant"?{...u,text:Cs(u.text)}:u).filter(u=>u.type!=="assistant"||u.text.length>0&&(i.outputId!==void 0||u.text.trim()!=="...")));continue}c(lc(i))}return t}a(Sg,"extractHistorySeedsFromMessages");function tn(e){return typeof e=="string"?e:Array.isArray(e)?As(e).join(`
13
+ `):""}a(tn,"extractTextContent");function cc(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>ks?`${o.slice(0,ks)}${xs}`:o:Bl}a(cc,"formatSessionTitle");function dc(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(dc,"isPureToolResultUserMessage");function ut(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=oc(n.content);return t&&t.trim()!=="..."?t:""}if(!dc(n))return""}}return""}a(ut,"extractLastAssistantText");function xg(e,o,n,t){let r=[ut(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=Is(i);if(l)return l}return""}a(xg,"resolveCompletedAssistantText");function Is(e){let o=e.trim();if(!o||o==="...")return"";let n=Vl(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Is,"sanitizeUserFacingAssistantText");function bg(e){let o=e.trim();return o.length>0&&Is(o).length===0&&Jl(o)}a(bg,"isControlPlaneOnlyAssistantText");function $g(e){let o=e.find(t=>t.role==="user"),n=o?tn(o.content):"";return cc(n)}a($g,"extractTitle");function Ag(e,o=Kl){let n=e.replace(/\n/g," "),t=n.length>o?xs:"";return n.slice(0,o)+t}a(Ag,"formatMessagePreview");var ft={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=ut(o.messages);if(!n){console.log(X.yellow(`
14
14
  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 ps(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(X.green(`
15
15
  Copied to clipboard!`)),console.log(X.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(X.red(`
16
16
  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(`
@@ -20,10 +20,10 @@ Failed to copy to clipboard: ${r}`)),console.log(X.dim("You may need to check cl
20
20
  `),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
21
21
  `)),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 mt(e,o,n){let t=o[0]?.toLowerCase(),r=!t||t==="status",i=null;if(!r&&e==="fallbackProviders"){if(i=["off","clear","none"].includes(t)?null:o.join(",").split(",").map(d=>d.trim()).filter(Boolean),Array.isArray(i)&&!i.length)return{success:!1,message:"No fallback provider ids given"}}else if(!r){if(["on","true","1"].includes(t))i=!0;else if(["off","false","0"].includes(t))i=!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]:i}),l=!0}catch(d){c=String(d)}try{let[d,f]=await Promise.all([n.read(),n.readEffective()]);l=JSON.stringify(d[e]??null)===JSON.stringify(i);let u=f[e],m=i??(e==="fallbackProviders"?[]:!1),y=u.applied&&(r||JSON.stringify(u.value)===JSON.stringify(m));return{success:r||l&&y,message:[`${e}: effective=${JSON.stringify(u.value)}; source=${u.source}; applied=${u.applied}`,`Host default=${JSON.stringify(d[e]??null)}`,...r?[]:[l?"Host default saved":`Host default save failed: ${c}`,y?"Host applied":"Host desired value not applied"],...c&&l?[`Update reported an error: ${c}; state confirmed by Host queries`]:[]].join(`
22
22
  `)}}catch(d){return{success:!1,message:`${l?"Host default saved; ":c?`Update failed: ${c}; saved state unconfirmed; `:""}Effective state unavailable: ${String(d)}`}}}a(mt,"hostExecutionConfigCommand");async function Ke(e,o,n,t){let r=[],i=!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(([f,u])=>JSON.stringify(c[f]??null)===JSON.stringify(u))?r.push(`Host default saved (confirmed by Host query after error: ${String(l)})`):(i=!1,r.push(`Host default save failed: ${String(l)}`))}catch(c){i=!1,r.push(`Host default saved state unconfirmed: ${String(l)}; read failed: ${String(c)}`)}}try{await n(),r.push("Session applied")}catch(l){i=!1,r.push(`Session apply failed: ${String(l)}`)}return{success:i,message:`[${t}] ${r.join("; ")}`}}a(Ke,"saveAndApplyHostSetting");async function sn(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"}
23
- 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"},i=e[0].toLowerCase(),l=No(r[i]??i),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 Ke(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(sn,"hostEffortCommand");async function Is(e,o,n){try{let t=await o.catalog.providers();if(!e.length)return{success:!0,message:t.map(f=>`${f.name}${f.name===n.provider?" *":""} [${f.configured?"configured":"not configured"}]
23
+ 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"},i=e[0].toLowerCase(),l=No(r[i]??i),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 Ke(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(sn,"hostEffortCommand");async function Es(e,o,n){try{let t=await o.catalog.providers();if(!e.length)return{success:!0,message:t.map(f=>`${f.name}${f.name===n.provider?" *":""} [${f.configured?"configured":"not configured"}]
24
24
  ${f.models.join(`
25
25
  `)}`).join(`
26
- `)};let r=e[0].trim(),i=r.indexOf("/"),l=i===0?n.provider:i<0?r:r.slice(0,i),c=i<0?void 0:r.slice(i+1),d=t.find(f=>f.name===l);return d?i>=0&&(!c||!d.models.includes(c))?{success:!1,message:`Unknown Host model: ${c}. Available: ${d.models.join(", ")}`}:await Ke(o,{...i===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(Is,"hostModelCommand");import R from"chalk";function C(e=""){console.log(e)}a(C,"writeOutput");function pt(){C(R.cyan(`
26
+ `)};let r=e[0].trim(),i=r.indexOf("/"),l=i===0?n.provider:i<0?r:r.slice(0,i),c=i<0?void 0:r.slice(i+1),d=t.find(f=>f.name===l);return d?i>=0&&(!c||!d.models.includes(c))?{success:!1,message:`Unknown Host model: ${c}. Available: ${d.models.join(", ")}`}:await Ke(o,{...i===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(Es,"hostModelCommand");import R from"chalk";function C(e=""){console.log(e)}a(C,"writeOutput");function pt(){C(R.cyan(`
27
27
  /learn - Inspect and control learned capabilities`)),C(R.dim(" /learn Open the Learning Center")),C(R.dim(" /learn list [search] List learned capabilities")),C(R.dim(" /learn ready [search] List capabilities ready for review/control")),C(R.dim(" /learn pending [search] Compatibility alias for `/learn ready`")),C(R.dim(" /learn show <name|slug> Inspect a capability")),C(R.dim(" /learn trust|reject|disable|rollback <name|slug>")),C(R.dim(" /learn promote <name|slug|capability-id> [--scope user]")),C(R.dim(" /learn promote --help Explain formal user-catalog promotion")),C(R.dim(" Compatibility: diff, approve and reject remain accepted.")),C(R.dim(` /learn help
28
28
  `))}a(pt,"printHelp");function we(e,o){return{...o===void 0?{}:{target:o},scope:"user",help:!1,error:e}}a(we,"invalidPromoteInvocation");function uc(e,o){let n="user",t=!1;for(let r=0;r<o.length;r+=1){let i=o[r];if(i==="--scope"){if(t)return we("duplicate --scope option",e);let c=o[r+1];if(!c)return we("missing value for --scope",e);n=c,t=!0,r+=1;continue}if(i.startsWith("--scope=")){if(t)return we("duplicate --scope option",e);if(n=i.slice(8),!n)return we("missing value for --scope",e);t=!0;continue}let l=i.startsWith("-")?`unknown promote option: ${i}`:`unexpected promote argument: ${i}`;return we(l,e)}return n!=="user"?we(`unsupported promote scope: ${n}; only user is supported`,e):{target:e,scope:"user",help:!1}}a(uc,"parsePromoteOptions");function Ts(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("-")?we(`unknown promote option: ${n}`):uc(n,o.slice(1)):we("missing learned Skill name, slug, or capability ID")}a(Ts,"parseLearnPromoteInvocation");function an(){C(R.cyan(`
29
29
  /learn promote - Move one learned Skill into the formal user catalog`)),C(R.bold(`
@@ -74,12 +74,12 @@ type: ...
74
74
  [memory] decisions that need you`)),e.length===0){console.log(p.dim(` (none)
75
75
  `));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(` ${Cc(n)}; risk=${n.risk}`)),console.log(p.dim(` why: ${n.rationale}`)),n.preview.diff!==void 0){let t=ao(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(`
76
76
  Use /memory show decision:<number>, then approve or reject the exact decision ref shown.
77
- `))}a(Ms,"printMemoryInbox");function Ec(e){if(console.log(p.cyan(`
77
+ `))}a(Ms,"printMemoryInbox");function Ic(e){if(console.log(p.cyan(`
78
78
  [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(`
79
- --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Ec,"printMemoryProposal");function Ic(e){if(!e.applied){console.log(p.yellow(`
79
+ --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Ic,"printMemoryProposal");function Ec(e){if(!e.applied){console.log(p.yellow(`
80
80
  [memory] ${e.proposalId} was not applied.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
81
81
  `));return}console.log(p.green(`
82
- [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Ic,"printApplyResult");function Tc(e){if(!e.rejected){console.log(p.yellow(`
82
+ [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Ec,"printApplyResult");function Tc(e){if(!e.rejected){console.log(p.yellow(`
83
83
  [memory] ${e.proposalId} was not rejected.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
84
84
  `));return}console.log(p.dim(`
85
85
  [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(Tc,"printRejectResult");function wt(){console.log(p.cyan(`
@@ -114,34 +114,34 @@ Use \`/memory decisions\` to inspect it, then approve or reject it.
114
114
  ${ao(r.body).body.trim()}
115
115
  `);return}let t=await Os(e.controller,o,!0);if(t===void 0){console.log(p.yellow(`
116
116
  [memory] Memory or decision not found: ${o}
117
- `));return}Ec(t),Uc(e.cwd,t)}a(Oc,"runShowCommand");async function Dc(e,o,n,t){let r=await Os(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 i=Fc(e.cwd,r.id);if(i===void 0){console.log(p.yellow(`
117
+ `));return}Ic(t),Uc(e.cwd,t)}a(Oc,"runShowCommand");async function Dc(e,o,n,t){let r=await Os(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 i=Fc(e.cwd,r.id);if(i===void 0){console.log(p.yellow(`
118
118
  [memory] preview required before ${o}: /memory show ${n??r.id}
119
- `));return}if(qe.delete(vt(e.cwd,r.id)),o==="approve"){Ic(await e.controller.approveProposal(r.id,i.fingerprints,i.revision));return}Tc(await e.controller.rejectProposal(r.id,t,i.revision))}a(Dc,"runDecisionCommand");async function jc(e,o,n){if(o==="help"||o==="--help"||o==="-h")return wt();if(o==="list")return gc(e.controller);if(o==="remember")return Nc(e,n.slice(1));if(o==="forget")return Wc(e,n[1]);if(o==="doctor"||o==="status")return vc(e);if(o==="reviews")return xc(e,n[1]);if(o==="pending"||o==="inbox")return console.log(p.dim("[memory] `pending` is a compatibility alias for /memory decisions.")),Ms(await e.controller.listInbox());if(o==="decisions"||o==="proposals")return Ms(await e.controller.listInbox());if(o==="show")return Oc(e,n[1]);if(o==="approve"||o==="reject")return Dc(e,o,n[1],n.slice(2).join(" ").trim());if(o==="rebuild")return bc(e.plane);if(o==="open")return $c(e,n[1],e.callbacks.openExternalPath);console.log(p.yellow(`
119
+ `));return}if(qe.delete(vt(e.cwd,r.id)),o==="approve"){Ec(await e.controller.approveProposal(r.id,i.fingerprints,i.revision));return}Tc(await e.controller.rejectProposal(r.id,t,i.revision))}a(Dc,"runDecisionCommand");async function jc(e,o,n){if(o==="help"||o==="--help"||o==="-h")return wt();if(o==="list")return gc(e.controller);if(o==="remember")return Nc(e,n.slice(1));if(o==="forget")return Wc(e,n[1]);if(o==="doctor"||o==="status")return vc(e);if(o==="reviews")return xc(e,n[1]);if(o==="pending"||o==="inbox")return console.log(p.dim("[memory] `pending` is a compatibility alias for /memory decisions.")),Ms(await e.controller.listInbox());if(o==="decisions"||o==="proposals")return Ms(await e.controller.listInbox());if(o==="show")return Oc(e,n[1]);if(o==="approve"||o==="reject")return Dc(e,o,n[1],n.slice(2).join(" ").trim());if(o==="rebuild")return bc(e.plane);if(o==="open")return $c(e,n[1],e.callbacks.openExternalPath);console.log(p.yellow(`
120
120
  [memory] unknown subcommand: ${o}`)),wt()}a(jc,"runMemorySubcommand");var yt={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"){wt();return}let r=await _c(o,n);if(r===void 0){console.log(p.yellow(`
121
121
  [memory] Memory controls are unavailable in this runtime.
122
- `));return}await jc(r,t,e)},"handler"),detailedHelp:Mc};function vt(e,o){return`${e}\0${o}`}a(vt,"previewCacheKey");function Uc(e,o){Hc(Date.now()),qe.set(vt(e,o.id),{fingerprints:o.expectedFingerprints,revision:Nr(o),createdAtMs:Date.now()})}a(Uc,"cacheProposalPreview");function Fc(e,o){let n=vt(e,o),t=qe.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>Ls){qe.delete(n);return}return t}}a(Fc,"readCachedProposalPreview");function Hc(e){for(let[o,n]of qe)e-n.createdAtMs>Ls&&qe.delete(o)}a(Hc,"pruneExpiredPreviewFingerprints");import E from"chalk";function Ds(){console.log(`
123
- ${E.bold("/goal")} \u2014 persistent session goal
122
+ `));return}await jc(r,t,e)},"handler"),detailedHelp:Mc};function vt(e,o){return`${e}\0${o}`}a(vt,"previewCacheKey");function Uc(e,o){Hc(Date.now()),qe.set(vt(e,o.id),{fingerprints:o.expectedFingerprints,revision:Nr(o),createdAtMs:Date.now()})}a(Uc,"cacheProposalPreview");function Fc(e,o){let n=vt(e,o),t=qe.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>Ls){qe.delete(n);return}return t}}a(Fc,"readCachedProposalPreview");function Hc(e){for(let[o,n]of qe)e-n.createdAtMs>Ls&&qe.delete(o)}a(Hc,"pruneExpiredPreviewFingerprints");import I from"chalk";function Ds(){console.log(`
123
+ ${I.bold("/goal")} \u2014 persistent session goal
124
124
 
125
- ${E.bold("Subcommands:")}
126
- ${E.cyan("/goal <objective> [--tokens N]")} Create a new persistent goal.
127
- ${E.cyan("/goal status")} Show current goal (default).
128
- ${E.cyan("/goal pause")} Pause an active goal.
129
- ${E.cyan("/goal resume")} Resume a paused goal.
130
- ${E.cyan("/goal clear")} Clear the current goal.
131
- ${E.cyan("/goal help")} Show this help.
125
+ ${I.bold("Subcommands:")}
126
+ ${I.cyan("/goal <objective> [--tokens N]")} Create a new persistent goal.
127
+ ${I.cyan("/goal status")} Show current goal (default).
128
+ ${I.cyan("/goal pause")} Pause an active goal.
129
+ ${I.cyan("/goal resume")} Resume a paused goal.
130
+ ${I.cyan("/goal clear")} Clear the current goal.
131
+ ${I.cyan("/goal help")} Show this help.
132
132
 
133
- ${E.bold("Notes:")}
133
+ ${I.bold("Notes:")}
134
134
  - The agent auto-continues toward an active goal on every Worker turn end.
135
135
  - Token budget is optional; set it only when you want a hard ceiling.
136
136
  - update_goal({complete}) records the agent\u2019s completion claim after
137
137
  checking the objective against actual evidence.
138
- `.trim())}a(Ds,"printHelp");function Bc(e){let o=null,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!qn(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(i.startsWith("--tokens=")){let l=i.slice(9),c=Number(l);if(!qn(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(i.startsWith("--"))return{error:`unknown flag: ${i}`};n.push(i)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(Bc,"parseCreateArgs");function Kc(e){if(!e)return E.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${E.bold("Goal:")} ${e.objective}`,`${E.bold("Status:")} ${e.status}`,`${E.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${E.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${E.bold("Token budget:")} ${E.dim("none")}`);return o.push(`${E.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${E.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
139
- `)}a(Kc,"renderStatus");async function yo(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=Hr(e.lineage,n,t),await o.saveSession()}a(yo,"persist");async function vo(e,o){return o.goal?o.goal.read(e.sessionId):e.lineage?Fr(e.lineage):null}a(vo,"readGoalState");async function ln(e,o){let n=await o.refreshSessionLineage?.();n&&(e.lineage=n)}a(ln,"refreshBoundLineage");async function qc(e,o,n){let t=n.goal;if(!t&&!o.lineage){console.log(E.red("[/goal] no active session lineage"));return}let r=await vo(o,n);if(r&&r.status!=="complete"){console.log(E.yellow(`[/goal] a goal is already active (status: ${r.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let i=Bc(e);if("error"in i){console.log(E.red(`[/goal] ${i.error}`));return}try{if(t){r&&r.status==="complete"&&await t.clear(o.sessionId);let c=await t.create({sessionId:o.sessionId,objective:i.objective,...i.tokenBudget!==null?{tokenBudget:i.tokenBudget}:{}});await ln(o,n),console.log(E.green(`[/goal] created: "${c.objective}"`)),c.tokenBudget!==null&&console.log(E.dim(` budget: ${c.tokenBudget} tokens`));return}r&&r.status==="complete"&&await yo(o,n,null,"cleared");let l=Vr(i.objective,i.tokenBudget);await yo(o,n,l,"created"),console.log(E.green(`[/goal] created: "${l.objective}"`)),l.tokenBudget!==null&&console.log(E.dim(` budget: ${l.tokenBudget} tokens`))}catch(l){let c=l instanceof Error?l.message:String(l);console.log(E.red(`[/goal] ${c}`))}}a(qc,"doCreate");async function zc(e,o){if(!o.goal&&!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=await vo(e,o);console.log(Kc(n))}a(zc,"doStatus");async function Gc(e,o){if(!o.goal&&!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=await vo(e,o);if(!n){console.log(E.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(E.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}if(o.goal){await o.goal.pause(e.sessionId),await ln(e,o),console.log(E.green("[/goal] paused"));return}let t=Jr(n);await yo(e,o,t,"paused"),console.log(E.green("[/goal] paused"))}a(Gc,"doPause");async function Xc(e,o){if(!o.goal&&!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}let n=await vo(e,o);if(!n){console.log(E.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(E.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}if(o.goal){await o.goal.resume(e.sessionId),await ln(e,o),console.log(E.green("[/goal] resumed"));return}let t=Yr(n);await yo(e,o,t,"resumed"),console.log(E.green("[/goal] resumed"))}a(Xc,"doResume");async function Vc(e,o){if(!o.goal&&!e.lineage){console.log(E.red("[/goal] no active session lineage"));return}if(!await vo(e,o)){console.log(E.yellow("[/goal] no goal to clear"));return}if(o.goal){await o.goal.clear(e.sessionId),await ln(e,o),console.log(E.green("[/goal] cleared"));return}await yo(e,o,null,"cleared"),console.log(E.green("[/goal] cleared"))}a(Vc,"doClear");var js={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"){Ds();return}if(t==="status"){await zc(o,n);return}if(t==="pause"){await Gc(o,n);return}if(t==="resume"){await Xc(o,n);return}if(t==="clear"){await Vc(o,n);return}await qc(e,o,n)},"handler"),detailedHelp:Ds};import{existsSync as pa}from"node:fs";import{join as Me}from"node:path";import w from"chalk";import xt from"path";import{createHash as od}from"crypto";import{execFile as Jc}from"child_process";import Ge from"fs";import N from"path";import{promisify as Yc}from"util";var Qc=Yc(Jc);function q(e){if(!(!e||!e.trim()))return N.resolve(e).replace(/\\/g,"/")}a(q,"normalizePath");async function ze(e,o,n=5e3){try{await Oe({cwd:e});let{stdout:t}=await Qc("git",o,{cwd:e,windowsHide:!0,maxBuffer:1024*1024,timeout:n}),r=t.trim();return r||void 0}catch{return}}a(ze,"gitStdout");function Fs(e){let o=N.resolve(e);for(;;){let n=N.join(o,".git");try{let r=Ge.statSync(n);if(r.isDirectory()){let i=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:i,workspaceRoot:i}}if(r.isFile()){let i=/^gitdir:\s*(.+)$/im.exec(Ge.readFileSync(n,"utf8"));if(i?.[1]){let l=N.resolve(o,i[1].trim()),c;try{c=N.resolve(l,Ge.readFileSync(N.join(l,"commondir"),"utf8").trim())}catch{}let d=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:kt(c)??d,workspaceRoot:d}}}}catch{}let t=N.dirname(o);if(t===o)return;o=t}}a(Fs,"filesystemWorkspaceIdentity");function Us(e){let o=N.resolve(e).replace(/\\/g,"/");return process.platform==="win32"||process.platform==="darwin"?o.toLowerCase():o}a(Us,"comparablePath");function ew(e){let o=N.join(N.resolve(e),".git","worktrees"),n;try{n=Ge.readdirSync(o,{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return[];throw r}let t=Us(e);return n.flatMap(r=>{if(!r.isDirectory())return[];try{let i=N.join(o,r.name),l=Ge.readFileSync(N.join(i,"gitdir"),"utf8").trim();if(!l)return[];let c=N.isAbsolute(l)?l:N.resolve(i,l),d=N.dirname(c),f=Fs(d);return f!==void 0&&Us(f.canonicalRoot)===t?[f.workspaceRoot]:[]}catch{return[]}})}a(ew,"discoverLinkedWorkspaceRoots");function Zc(e){let[o,n]=e?.split(/\r?\n/).map(i=>i.trim())??[],t=q(o);if(!t)return;let r=n?q(N.isAbsolute(n)?n:N.resolve(t,n)):void 0;return{canonicalRoot:kt(r)??t,workspaceRoot:t}}a(Zc,"parseProjectIdentityOutput");async function ed(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=Fs(o);return n!==void 0?n:Zc(await ze(o,["rev-parse","--path-format=absolute","--show-toplevel","--git-common-dir"],e.timeoutMs??2e3))??{canonicalRoot:o,workspaceRoot:o}}a(ed,"resolveWorkspaceProjectIdentity");async function ow(e={}){return(await ed(e)).canonicalRoot}a(ow,"resolveCanonicalWorkspaceRoot");function kt(e){let o=q(e);if(o)return N.posix.basename(o)===".git"?N.posix.dirname(o):o}a(kt,"deriveCanonicalRepoRoot");async function nw(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=q(await ze(o,["rev-parse","--show-toplevel"])),t=n??o,[r,i]=await Promise.all([ze(t,["rev-parse","--path-format=absolute","--git-common-dir"]).then(l=>l??ze(t,["rev-parse","--git-common-dir"])),ze(t,["branch","--show-current"]).then(l=>l??ze(t,["rev-parse","--abbrev-ref","HEAD"]))]);return{canonicalRepoRoot:kt(r)??n,workspaceRoot:n,executionCwd:o,branch:i&&i!=="HEAD"?i:void 0,workspaceKind:e.workspaceKind??"detected"}}a(nw,"inspectWorkspaceRuntime");function tw(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:q(e.canonicalRepoRoot)===q(o.canonicalRepoRoot)}a(tw,"isSameCanonicalRepo");function rw(e){return!!(e?.workspaceRoot&&Ge.existsSync(e.workspaceRoot))}a(rw,"workspaceExists");function Hs(e){let o=q(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=q(e.runtimeInfo?.executionCwd??o),t=q(e.runtimeInfo?.canonicalRepoRoot??o);if(!(!o&&!n&&!t))return{canonicalRepoRoot:t,workspaceRoot:o,executionCwd:n,branch:e.runtimeInfo?.branch,workspaceKind:e.runtimeInfo?.workspaceKind??"detected"}}a(Hs,"resolveSessionRuntimeInfo");function St(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(St,"formatWorkspaceTruth");var Bs="_unknown",Ks=80;function nd(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(nd,"caseFold");function td(e){return nd(xt.resolve(e).replace(/\\/g,"/"))}a(td,"normalizeRoot");function qs(e){return od("sha256").update(e).digest("hex").slice(0,10)}a(qs,"shortHash");function rd(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Ks?o.slice(o.length-Ks):o}a(rd,"slugify");function Xe(e){if(!e||!e.trim())return{key:Bs,canonicalRoot:null,displayName:Bs};let o=td(e),n=rd(o),t=n?`${n}-${qs(o)}`:qs(o),r=xt.basename(xt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Xe,"deriveProjectKeyFromRoot");function id(e){let o=Hs({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Xe(n)}a(id,"deriveProjectKeyFromData");function dw(e,o){let n=id(e).canonicalRoot;return n!==null&&o.some(t=>Xe(t).canonicalRoot===n)}a(dw,"sessionProjectMatchesAnyRoot");import Ee from"chalk";function cn(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(cn,"resolveLearningCommandCwd");function Ve(e=""){process.stdout.write(`${e}
140
- `)}a(Ve,"writeOutput");function sd(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(sd,"matchesFilter");function ad(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(ad,"headingForFilter");function ld(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(ld,"proposalLabel");async function dn(e,o){let n=Lr(e),t=await Mr(n);for(let i of t.warnings)Ve(Ee.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>sd(i,o));if(Ve(Ee.cyan(`
141
- [learn] ${ad(o)}`)),Ve(Ee.dim(` ${n}`)),r.length===0){Ve(Ee.dim(` (none)
142
- `));return}for(let i of r)Ve(` ${Ee.cyan(i.proposalId)} ${Ee.dim(`[${i.proposal.destination}]`)} ${ld(i)}`);Ve(Ee.dim(`
138
+ `.trim())}a(Ds,"printHelp");function Bc(e){let o=null,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!qn(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(i.startsWith("--tokens=")){let l=i.slice(9),c=Number(l);if(!qn(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(i.startsWith("--"))return{error:`unknown flag: ${i}`};n.push(i)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(Bc,"parseCreateArgs");function Kc(e){if(!e)return I.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${I.bold("Goal:")} ${e.objective}`,`${I.bold("Status:")} ${e.status}`,`${I.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${I.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${I.bold("Token budget:")} ${I.dim("none")}`);return o.push(`${I.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${I.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
139
+ `)}a(Kc,"renderStatus");async function yo(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=Hr(e.lineage,n,t),await o.saveSession()}a(yo,"persist");async function vo(e,o){return o.goal?o.goal.read(e.sessionId):e.lineage?Fr(e.lineage):null}a(vo,"readGoalState");async function ln(e,o){let n=await o.refreshSessionLineage?.();n&&(e.lineage=n)}a(ln,"refreshBoundLineage");async function qc(e,o,n){let t=n.goal;if(!t&&!o.lineage){console.log(I.red("[/goal] no active session lineage"));return}let r=await vo(o,n);if(r&&r.status!=="complete"){console.log(I.yellow(`[/goal] a goal is already active (status: ${r.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let i=Bc(e);if("error"in i){console.log(I.red(`[/goal] ${i.error}`));return}try{if(t){r&&r.status==="complete"&&await t.clear(o.sessionId);let c=await t.create({sessionId:o.sessionId,objective:i.objective,...i.tokenBudget!==null?{tokenBudget:i.tokenBudget}:{}});await ln(o,n),console.log(I.green(`[/goal] created: "${c.objective}"`)),c.tokenBudget!==null&&console.log(I.dim(` budget: ${c.tokenBudget} tokens`));return}r&&r.status==="complete"&&await yo(o,n,null,"cleared");let l=Vr(i.objective,i.tokenBudget);await yo(o,n,l,"created"),console.log(I.green(`[/goal] created: "${l.objective}"`)),l.tokenBudget!==null&&console.log(I.dim(` budget: ${l.tokenBudget} tokens`))}catch(l){let c=l instanceof Error?l.message:String(l);console.log(I.red(`[/goal] ${c}`))}}a(qc,"doCreate");async function zc(e,o){if(!o.goal&&!e.lineage){console.log(I.red("[/goal] no active session lineage"));return}let n=await vo(e,o);console.log(Kc(n))}a(zc,"doStatus");async function Gc(e,o){if(!o.goal&&!e.lineage){console.log(I.red("[/goal] no active session lineage"));return}let n=await vo(e,o);if(!n){console.log(I.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(I.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}if(o.goal){await o.goal.pause(e.sessionId),await ln(e,o),console.log(I.green("[/goal] paused"));return}let t=Jr(n);await yo(e,o,t,"paused"),console.log(I.green("[/goal] paused"))}a(Gc,"doPause");async function Xc(e,o){if(!o.goal&&!e.lineage){console.log(I.red("[/goal] no active session lineage"));return}let n=await vo(e,o);if(!n){console.log(I.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(I.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}if(o.goal){await o.goal.resume(e.sessionId),await ln(e,o),console.log(I.green("[/goal] resumed"));return}let t=Yr(n);await yo(e,o,t,"resumed"),console.log(I.green("[/goal] resumed"))}a(Xc,"doResume");async function Vc(e,o){if(!o.goal&&!e.lineage){console.log(I.red("[/goal] no active session lineage"));return}if(!await vo(e,o)){console.log(I.yellow("[/goal] no goal to clear"));return}if(o.goal){await o.goal.clear(e.sessionId),await ln(e,o),console.log(I.green("[/goal] cleared"));return}await yo(e,o,null,"cleared"),console.log(I.green("[/goal] cleared"))}a(Vc,"doClear");var js={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"){Ds();return}if(t==="status"){await zc(o,n);return}if(t==="pause"){await Gc(o,n);return}if(t==="resume"){await Xc(o,n);return}if(t==="clear"){await Vc(o,n);return}await qc(e,o,n)},"handler"),detailedHelp:Ds};import{existsSync as pa}from"node:fs";import{join as Me}from"node:path";import w from"chalk";import xt from"path";import{createHash as od}from"crypto";import{execFile as Jc}from"child_process";import Ge from"fs";import N from"path";import{promisify as Yc}from"util";var Qc=Yc(Jc);function q(e){if(!(!e||!e.trim()))return N.resolve(e).replace(/\\/g,"/")}a(q,"normalizePath");async function ze(e,o,n=5e3){try{await Oe({cwd:e});let{stdout:t}=await Qc("git",o,{cwd:e,windowsHide:!0,maxBuffer:1024*1024,timeout:n}),r=t.trim();return r||void 0}catch{return}}a(ze,"gitStdout");function Fs(e){let o=N.resolve(e);for(;;){let n=N.join(o,".git");try{let r=Ge.statSync(n);if(r.isDirectory()){let i=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:i,workspaceRoot:i}}if(r.isFile()){let i=/^gitdir:\s*(.+)$/im.exec(Ge.readFileSync(n,"utf8"));if(i?.[1]){let l=N.resolve(o,i[1].trim()),c;try{c=N.resolve(l,Ge.readFileSync(N.join(l,"commondir"),"utf8").trim())}catch{}let d=q(o)??o.replace(/\\/g,"/");return{canonicalRoot:kt(c)??d,workspaceRoot:d}}}}catch{}let t=N.dirname(o);if(t===o)return;o=t}}a(Fs,"filesystemWorkspaceIdentity");function Us(e){let o=N.resolve(e).replace(/\\/g,"/");return process.platform==="win32"||process.platform==="darwin"?o.toLowerCase():o}a(Us,"comparablePath");function ew(e){let o=N.join(N.resolve(e),".git","worktrees"),n;try{n=Ge.readdirSync(o,{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return[];throw r}let t=Us(e);return n.flatMap(r=>{if(!r.isDirectory())return[];try{let i=N.join(o,r.name),l=Ge.readFileSync(N.join(i,"gitdir"),"utf8").trim();if(!l)return[];let c=N.isAbsolute(l)?l:N.resolve(i,l),d=N.dirname(c),f=Fs(d);return f!==void 0&&Us(f.canonicalRoot)===t?[f.workspaceRoot]:[]}catch{return[]}})}a(ew,"discoverLinkedWorkspaceRoots");function Zc(e){let[o,n]=e?.split(/\r?\n/).map(i=>i.trim())??[],t=q(o);if(!t)return;let r=n?q(N.isAbsolute(n)?n:N.resolve(t,n)):void 0;return{canonicalRoot:kt(r)??t,workspaceRoot:t}}a(Zc,"parseProjectIdentityOutput");async function ed(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=Fs(o);return n!==void 0?n:Zc(await ze(o,["rev-parse","--path-format=absolute","--show-toplevel","--git-common-dir"],e.timeoutMs??2e3))??{canonicalRoot:o,workspaceRoot:o}}a(ed,"resolveWorkspaceProjectIdentity");async function ow(e={}){return(await ed(e)).canonicalRoot}a(ow,"resolveCanonicalWorkspaceRoot");function kt(e){let o=q(e);if(o)return N.posix.basename(o)===".git"?N.posix.dirname(o):o}a(kt,"deriveCanonicalRepoRoot");async function nw(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=q(await ze(o,["rev-parse","--show-toplevel"])),t=n??o,[r,i]=await Promise.all([ze(t,["rev-parse","--path-format=absolute","--git-common-dir"]).then(l=>l??ze(t,["rev-parse","--git-common-dir"])),ze(t,["branch","--show-current"]).then(l=>l??ze(t,["rev-parse","--abbrev-ref","HEAD"]))]);return{canonicalRepoRoot:kt(r)??n,workspaceRoot:n,executionCwd:o,branch:i&&i!=="HEAD"?i:void 0,workspaceKind:e.workspaceKind??"detected"}}a(nw,"inspectWorkspaceRuntime");function tw(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:q(e.canonicalRepoRoot)===q(o.canonicalRepoRoot)}a(tw,"isSameCanonicalRepo");function rw(e){return!!(e?.workspaceRoot&&Ge.existsSync(e.workspaceRoot))}a(rw,"workspaceExists");function Hs(e){let o=q(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=q(e.runtimeInfo?.executionCwd??o),t=q(e.runtimeInfo?.canonicalRepoRoot??o);if(!(!o&&!n&&!t))return{canonicalRepoRoot:t,workspaceRoot:o,executionCwd:n,branch:e.runtimeInfo?.branch,workspaceKind:e.runtimeInfo?.workspaceKind??"detected"}}a(Hs,"resolveSessionRuntimeInfo");function St(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(St,"formatWorkspaceTruth");var Bs="_unknown",Ks=80;function nd(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(nd,"caseFold");function td(e){return nd(xt.resolve(e).replace(/\\/g,"/"))}a(td,"normalizeRoot");function qs(e){return od("sha256").update(e).digest("hex").slice(0,10)}a(qs,"shortHash");function rd(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Ks?o.slice(o.length-Ks):o}a(rd,"slugify");function Xe(e){if(!e||!e.trim())return{key:Bs,canonicalRoot:null,displayName:Bs};let o=td(e),n=rd(o),t=n?`${n}-${qs(o)}`:qs(o),r=xt.basename(xt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Xe,"deriveProjectKeyFromRoot");function id(e){let o=Hs({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Xe(n)}a(id,"deriveProjectKeyFromData");function dw(e,o){let n=id(e).canonicalRoot;return n!==null&&o.some(t=>Xe(t).canonicalRoot===n)}a(dw,"sessionProjectMatchesAnyRoot");import Ie from"chalk";function cn(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(cn,"resolveLearningCommandCwd");function Ve(e=""){process.stdout.write(`${e}
140
+ `)}a(Ve,"writeOutput");function sd(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(sd,"matchesFilter");function ad(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(ad,"headingForFilter");function ld(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(ld,"proposalLabel");async function dn(e,o){let n=Lr(e),t=await Mr(n);for(let i of t.warnings)Ve(Ie.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>sd(i,o));if(Ve(Ie.cyan(`
141
+ [learn] ${ad(o)}`)),Ve(Ie.dim(` ${n}`)),r.length===0){Ve(Ie.dim(` (none)
142
+ `));return}for(let i of r)Ve(` ${Ie.cyan(i.proposalId)} ${Ie.dim(`[${i.proposal.destination}]`)} ${ld(i)}`);Ve(Ie.dim(`
143
143
  Review these in the Learning Center (/learn list, /learn show <id>).
144
- `))}a(dn,"printLearningPendingForFilter");import xn from"chalk";import{existsSync as le,readdirSync as Sd,readFileSync as mn,writeFileSync as $w}from"node:fs";import{dirname as xd,join as oe}from"node:path";import T from"chalk";import{existsSync as cd,readFileSync as dd}from"node:fs";var zs=4,Gs=180,Xs=6e3,Vs=360,bt="[truncated]";function Ie(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ie,"detectWorkflowLocale");function ko(...e){return Ie(e.filter(o=>typeof o=="string").join(`
144
+ `))}a(dn,"printLearningPendingForFilter");import xn from"chalk";import{existsSync as le,readdirSync as Sd,readFileSync as mn,writeFileSync as $w}from"node:fs";import{dirname as xd,join as oe}from"node:path";import T from"chalk";import{existsSync as cd,readFileSync as dd}from"node:fs";var zs=4,Gs=180,Xs=6e3,Vs=360,bt="[truncated]";function Ee(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ee,"detectWorkflowLocale");function ko(...e){return Ee(e.filter(o=>typeof o=="string").join(`
145
145
  `))}a(ko,"inferWorkflowLocaleFromParts");function Ye(e,o={}){let n=e.trim();return o.full===!0||n.length<=Xs?n:`${n.slice(0,Xs).trimEnd()}
146
146
 
147
147
  ${bt}`}a(Ye,"trimResultPreview");function $t(e){return e.includes(bt)}a($t,"isWorkflowResultPreviewTruncated");function ud(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(ud,"formatWorkflowResultTruncationHint");function Qe(e,o,n){let t=e.lastIndexOf(bt);return t<0?e:`${e.slice(0,t).trimEnd()}
@@ -165,18 +165,18 @@ ${o}`}return[n,"","The workflow ended, but the generated script violated the res
165
165
  `)}a(kd,"formatWorkflowAgentLongDigest");import M from"chalk";function Ct(){return[`${M.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${M.bold("Subcommands:")}`,` ${M.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${M.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.`,` ${M.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${M.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${M.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${M.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${M.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${M.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${M.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${M.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${M.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${M.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${M.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${M.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${M.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${M.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${M.bold("Examples:")}`,` ${M.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${M.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${M.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${M.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${M.dim("/workflow prune --dry-run")}`,` ${M.dim("/workflow save run-lx3 generated-audit")}`,"",`${M.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(`
166
166
  `)}a(Ct,"renderWorkflowHelp");function un(){console.log(`
167
167
  ${Ct()}
168
- `)}a(un,"printWorkflowHelp");var bd=new Set(["completed","failed","stopped","denied","cancelled"]);function Et(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${T.cyan(o.name)} \u2014 ${o.description}`).join(`
169
- `)}a(Et,"formatWorkflowList");var $d=6,Ad=900;function Rd(e){let o=e.replace(/\r\n/g,`
168
+ `)}a(un,"printWorkflowHelp");var bd=new Set(["completed","failed","stopped","denied","cancelled"]);function It(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${T.cyan(o.name)} \u2014 ${o.description}`).join(`
169
+ `)}a(It,"formatWorkflowList");var $d=6,Ad=900;function Rd(e){let o=e.replace(/\r\n/g,`
170
170
  `).replace(/\r/g,`
171
171
  `).split(`
172
172
  `),n=[],t=0,r=!1;for(let l of o){if(n.length>=$d)break;let c=` ${l}`,d=Ad-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 i=Math.max(0,o.length-n.length);if(i>0||r){let l=i>0?`${i} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(Rd,"renderApprovalScriptPreview");function ce(e,o){let n=a(i=>i===null?"\u221E":String(i),"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:",...Rd(o.rawScript)]:[]]:[]].join(`
173
- `)}a(ce,"renderApprovalPrompt");function bo(e){if(!le(e))return[];let o=[];for(let n of Sd(e)){let t=oe(e,n,"run.json");if(le(t))try{let r=JSON.parse(mn(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(bo,"readWorkflowRuns");function Cd(e){let o=oe(e,"events.jsonl");if(!le(o))return[];let n=mn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let i=JSON.parse(r);if(typeof i!="object"||i===null)continue;let l=i;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(Cd,"readWorkflowEvents");function Ed(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(Ed,"readStringArray");function fn(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(fn,"readNonEmptyString");function Ys(e,o){let n=o?fn(o.scriptSnapshotPath):oe(e,"script.js"),t=o?fn(o.manifestSnapshotPath):oe(e,"manifest.json");return!n||!t?!1:le(n)&&le(t)}a(Ys,"hasGeneratedWorkflowSnapshot");function oa(e,o){if(o)return Ys(e,o);let n=oe(e,"run.json");if(!le(n))return!1;try{let t=JSON.parse(mn(n,"utf8"));return typeof t=="object"&&t!==null?Ys(e,t):!1}catch{return!1}}a(oa,"hasRerunnableGeneratedWorkflowRun");function Id(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(Id,"readWorkflowFailure");function $o(e,o){let n=oe(e,o),t=oe(n,"run.json"),r=Cd(n),i=Id(r);if(!(!le(t)&&r.length===0)){if(!le(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let l=JSON.parse(mn(t,"utf8")),c=fn(l.scriptSnapshotPath),d=fn(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:oa(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...i?{error:i}:{},artifacts:Ed(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a($o,"readWorkflowRunDetail");function xo(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(xo,"statusIcon");function It(e){return bd.has(e)}a(It,"isTerminalWorkflowStatus");function na(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(na,"formatProcessListMeta");function Tt(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 i=t.map(l=>{let c=na(o.processSnapshots?.get(l.runId));return` ${xo(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&&i.push(T.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),i.join(`
173
+ `)}a(ce,"renderApprovalPrompt");function bo(e){if(!le(e))return[];let o=[];for(let n of Sd(e)){let t=oe(e,n,"run.json");if(le(t))try{let r=JSON.parse(mn(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(bo,"readWorkflowRuns");function Cd(e){let o=oe(e,"events.jsonl");if(!le(o))return[];let n=mn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let i=JSON.parse(r);if(typeof i!="object"||i===null)continue;let l=i;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(Cd,"readWorkflowEvents");function Id(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(Id,"readStringArray");function fn(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(fn,"readNonEmptyString");function Ys(e,o){let n=o?fn(o.scriptSnapshotPath):oe(e,"script.js"),t=o?fn(o.manifestSnapshotPath):oe(e,"manifest.json");return!n||!t?!1:le(n)&&le(t)}a(Ys,"hasGeneratedWorkflowSnapshot");function oa(e,o){if(o)return Ys(e,o);let n=oe(e,"run.json");if(!le(n))return!1;try{let t=JSON.parse(mn(n,"utf8"));return typeof t=="object"&&t!==null?Ys(e,t):!1}catch{return!1}}a(oa,"hasRerunnableGeneratedWorkflowRun");function Ed(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(Ed,"readWorkflowFailure");function $o(e,o){let n=oe(e,o),t=oe(n,"run.json"),r=Cd(n),i=Ed(r);if(!(!le(t)&&r.length===0)){if(!le(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let l=JSON.parse(mn(t,"utf8")),c=fn(l.scriptSnapshotPath),d=fn(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:oa(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...i?{error:i}:{},artifacts:Id(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a($o,"readWorkflowRunDetail");function xo(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(xo,"statusIcon");function Et(e){return bd.has(e)}a(Et,"isTerminalWorkflowStatus");function na(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(na,"formatProcessListMeta");function Tt(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 i=t.map(l=>{let c=na(o.processSnapshots?.get(l.runId));return` ${xo(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&&i.push(T.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),i.join(`
174
174
  `)}let r=t.map(i=>` ${xo(i.status)} ${T.cyan(i.workflow)} ${T.dim(i.runId)} \u2014 ${i.status} (${i.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(`
175
175
  `)}a(Tt,"formatRunsList");function Pt(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=na(o.processSnapshots?.get(n.runId));return` ${xo(n.status)} ${T.cyan(n.workflow)} ${T.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?T.dim(` [${t}]`):""}`}).join(`
176
176
  `):e.map(n=>` ${xo(n.status)} ${T.cyan(n.workflow)} ${T.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
177
177
  `)}a(Pt,"formatManagedRunsList");function he(e){return e.status==="running"||e.status==="paused"}a(he,"isActiveManagedWorkflowRun");function Mt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${xo(o.status)} ${T.cyan(o.workflow)} ${T.dim(o.runId)} - ${o.status}`).join(`
178
- `)}a(Mt,"formatWorkflowPruneCandidates");function Lt(e,o){return e.filter(he)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Lt,"selectDefaultWorkflowRunId");function _t(e){return e.find(he)?.runId}a(_t,"selectDefaultActiveWorkflowRunId");function Qs(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(Qs,"formatTime");function Td(e,o=10){let n=e.map(la).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(Td,"formatRecentWorkflowEvents");function Nt(e,o){return o?.canRerun??(e?.runDir?oa(e.runDir):!1)}a(Nt,"canRerunWorkflowRun");function Pd(e){return e?e.artifacts.map(o=>({name:o,path:oe(e.runDir,"artifacts",`${li(o)}.json`)})):[]}a(Pd,"workflowArtifactRefs");function Wt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Wt,"formatWorkflowNextActions");function ta(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(ta,"formatWorkflowFailureAction");function Ot(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",i=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,f=e?.runDir??o?.runDir??"",u=Qs(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,y=Qs(e?.endedAt??o?.endedAt??m),k=t?.error??e?.error??o?.error,b=o?.artifacts??t?.artifacts?.map(I=>I.name)??[],v=Pd(o),A=e?.resultText,S=n.full===!0||A===void 0?So(v,Ie(r),{full:n.full===!0}):void 0,h=n.full===!0?S??A??t?.resultSummary:A!==void 0?Te(A):t?.resultSummary!==void 0?Te(t.resultSummary):S,L=h?Qe(h,i,Ie(h)):void 0,g=n.full===!0||!h||!$t(h)?"result:":"result preview:",$=o?Td(o.events):[],x=Nt(e,o);return[` ${T.cyan(r)} ${T.dim(i)}`,...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}`,...u?[` started: ${u}`]:[],...y?[` ended: ${y}`]:[],...f?[` run dir: ${f}`]:[],...b.length>0?[` artifacts: ${b.join(", ")}`]:[],...k?[` error: ${k}`]:[],...L?["",` ${g}`,...L.split(`
179
- `).map(I=>` ${I}`)]:[],...$.length>0?[""," recent events:",...$.map(I=>` ${I.trimEnd()}`)]:[],"",` next: ${Wt(i,x)}`].join(`
178
+ `)}a(Mt,"formatWorkflowPruneCandidates");function Lt(e,o){return e.filter(he)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Lt,"selectDefaultWorkflowRunId");function _t(e){return e.find(he)?.runId}a(_t,"selectDefaultActiveWorkflowRunId");function Qs(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(Qs,"formatTime");function Td(e,o=10){let n=e.map(la).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(Td,"formatRecentWorkflowEvents");function Nt(e,o){return o?.canRerun??(e?.runDir?oa(e.runDir):!1)}a(Nt,"canRerunWorkflowRun");function Pd(e){return e?e.artifacts.map(o=>({name:o,path:oe(e.runDir,"artifacts",`${li(o)}.json`)})):[]}a(Pd,"workflowArtifactRefs");function Wt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Wt,"formatWorkflowNextActions");function ta(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(ta,"formatWorkflowFailureAction");function Ot(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",i=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,f=e?.runDir??o?.runDir??"",u=Qs(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,y=Qs(e?.endedAt??o?.endedAt??m),k=t?.error??e?.error??o?.error,b=o?.artifacts??t?.artifacts?.map(E=>E.name)??[],v=Pd(o),A=e?.resultText,S=n.full===!0||A===void 0?So(v,Ee(r),{full:n.full===!0}):void 0,h=n.full===!0?S??A??t?.resultSummary:A!==void 0?Te(A):t?.resultSummary!==void 0?Te(t.resultSummary):S,L=h?Qe(h,i,Ee(h)):void 0,g=n.full===!0||!h||!$t(h)?"result:":"result preview:",$=o?Td(o.events):[],x=Nt(e,o);return[` ${T.cyan(r)} ${T.dim(i)}`,...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}`,...u?[` started: ${u}`]:[],...y?[` ended: ${y}`]:[],...f?[` run dir: ${f}`]:[],...b.length>0?[` artifacts: ${b.join(", ")}`]:[],...k?[` error: ${k}`]:[],...L?["",` ${g}`,...L.split(`
179
+ `).map(E=>` ${E}`)]:[],...$.length>0?[""," recent events:",...$.map(E=>` ${E.trimEnd()}`)]:[],"",` next: ${Wt(i,x)}`].join(`
180
180
  `)}a(Ot,"formatWorkflowRunSnapshot");function pn(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(pn,"totalSpawnedFromProcess");function Dt(e){return{project:oe(e,".kodax","workflows"),personal:O("workflows")}}a(Dt,"savedWorkflowDirs");async function ra(e,o){return new Set((await De(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(ra,"nextRevisionWorkflowName");function ia(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:vi}}a(ia,"buildWorkflowRevisionProvenance");function jt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${T.cyan(o.name)} ${T.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
181
181
  `)}a(jt,"formatSavedList");function sa(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(sa,"isSafeWorkflowRunId");function Pe(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(Pe,"resolveConfirm");function Md(e){console.log(T.red(`
182
182
  [workflow] invalid run id: ${e||"<empty>"}
@@ -204,7 +204,7 @@ ${h}`})},"finish"),f=0,u,m=1e3,y=0,k=a(async(v,A)=>{for(await A;!l&&v===f;){let
204
204
  [workflow] refusing to start a workflow without an interactive approval channel.
205
205
  `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(xn.red(`
206
206
  [workflow] cannot start - REPL options unavailable in this context.
207
- `)),"failed";let t=Ie(e.request),r,i;try{if(Y(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let k=Ho(e.builtin.name);if(!k)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);i={module:k,args:e.builtin.args,approvalDescription:k.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{Y(e,{stage:"generating",message:"Workflow - generating harness"});let b=await(e.generateWorkflow??Fo)({request:e.request,options:r});if(b.kind==="declined")return Y(e,{stage:"declined",message:b.reason}),console.log(xn.dim(`
207
+ `)),"failed";let t=Ee(e.request),r,i;try{if(Y(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let k=Ho(e.builtin.name);if(!k)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);i={module:k,args:e.builtin.args,approvalDescription:k.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{Y(e,{stage:"generating",message:"Workflow - generating harness"});let b=await(e.generateWorkflow??Fo)({request:e.request,options:r});if(b.kind==="declined")return Y(e,{stage:"declined",message:b.reason}),console.log(xn.dim(`
208
208
  Workflow not created: ${b.reason}
209
209
  `)),"declined";i={module:b.module,args:{request:e.request},approvalDescription:b.approvalSummary,mayUseWorktree:b.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:b.scriptSnapshot,rawScript:b.scriptSnapshot.source}}Y(e,{stage:"validating",message:"Workflow - validating harness"})}catch(k){let b=k instanceof Error?k.message:String(k);return Y(e,{stage:"failed",message:b}),"failed"}Y(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=ke(i.module);if(l!=="agentic"&&j(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${i.approvalDescription}`}),o){if(!await o(ce(c,{source:e.sourceLabel??"generated",sandbox:i.sandbox,mayUseWorktree:i.mayUseWorktree,...i.rawScript!==void 0?{rawScript:i.rawScript}:{}})))return Y(e,{stage:"cancelled",message:"Workflow cancelled"}),j(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(j(e.callbacks,{type:"info",text:ce(c,{source:e.sourceLabel??"generated",sandbox:i.sandbox,mayUseWorktree:i.mayUseWorktree})}),j(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${i.sandbox}); normal permission gates still apply.`}));let d=e.callbacks.workflows;if(d===void 0)return Y(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 f=i.scriptSnapshot;if(e.builtin===void 0&&f===void 0)return Y(e,{stage:"failed",message:"Generated workflow is missing its script capsule"}),"failed";let u=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:f?.manifest,source:f?.source??""},args:i.args,metadata:Ro({source:e.processSource??"command",displayName:i.module.meta.name,goal:e.request})});if(u.kind==="declined")return Y(e,{stage:"declined",message:u.reason}),j(e.callbacks,{type:"error",text:`Host declined to start: ${u.reason}`}),"declined";let m=u.runId;l==="agentic"?j(e.callbacks,{type:"assistant",text:Rt({runId:m,summary:c,approvalSummary:i.approvalDescription,locale:t}),final:!1}):j(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let y=Ao(e.callbacks,m,i.module.meta,t);return y.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`),Sn(d,e.callbacks,m,y,{canRerun:!0,presentation:l,locale:t}),Y(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),"started"}a(Xd,"startGeneratedWorkflowFromRequest");function Ft(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(i=>i!=="--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"),i=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&i?"conflict":r?"saved":i?"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(i=>i!=="--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(Ft,"parseWorkflowInvocation");function Co(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(Co,"parseWorkflowArgs");function Ht(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(`
210
210
  `)}a(Ht,"buildWorkflowRevisionRequest");function ma(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(ma,"parseNonNegativeInteger");function Bt(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 i=ma(e[t+1]);if(i===void 0||i<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(i,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(Bt,"parseWorkflowRunsOptions");function Vd(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(Vd,"parseOlderThanMs");function Kt(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let i=e[r];if(i==="--dry-run"){o=!0;continue}if(i==="--keep"){let l=ma(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(i==="--older-than"){let l=Vd(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: ${i??""}`}}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(Kt,"parseWorkflowPruneOptions");var Jd=1440*60*1e3,qt=`
@@ -219,7 +219,7 @@ Started workflow ${t.name} (${l}). Use /workflow show ${l} for status.
219
219
  [workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
220
220
  Switch with /agent-mode ama, then request it explicitly via /workflow.
221
221
  `));return}let i=Xe(process.cwd()).key,l=O("workflow-runs",i),c=n.workflows,d=Dt(process.cwd()),f=di({runManager:ci(),runBaseDir:l,savedWorkflowDirs:d}),u=a(async g=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:fi(g)}}),"createWorkflowFromText");if(r.kind==="help"){un();return}if(r.kind==="list"){console.log(w.bold(`
222
- Built-in workflows:`)),console.log(Et(Bo())),console.log(w.bold(`
222
+ Built-in workflows:`)),console.log(It(Bo())),console.log(w.bold(`
223
223
  Pattern templates:`));for(let $ of ui())console.log(` ${w.cyan($.name)} ${w.dim(`(${$.pattern})`)} - ${$.description}`);let g=await De(d);g.length>0&&(console.log(w.bold(`
224
224
  Saved workflows:`)),console.log(jt(g))),console.log(w.dim(`
225
225
  Run one with: /workflow <name> <question or JSON args>`)),console.log(w.dim(` Show usage with: /workflow help
@@ -230,15 +230,15 @@ ${g.error}
230
230
  Active workflow runs:`)),console.log(Pt(x,{processSnapshots:$}))),console.log(w.bold(`
231
231
  Workflow runs:`)),console.log(Tt(bo(l),{limit:g.all?void 0:g.limit,showLimitHint:!g.all,processSnapshots:$})),console.log();return}if(r.kind==="show"){let g=bo(l),$=c===void 0?[]:await c.list(),x=r.runId||Lt($,g);if(!x){console.log(w.yellow(`
232
232
  No workflow runs yet. Start one with /workflow create <request>.
233
- `));return}if(!ye(x))return;let I=c===void 0?void 0:Gt(await c.get(x)),W=$o(l,x),_=c===void 0?f.getWorkflowProcessSnapshot(x):await c.get(x);console.log(w.bold(`
234
- Workflow run:`)),console.log(Ot(I,W,{full:r.full===!0,..._?{processSnapshot:_}:{}})),console.log();return}if(r.kind==="pause"){if(!ye(r.runId))return;if(c===void 0){console.log(w.red(qt));return}let g=await c.pause(r.runId);console.log(g?w.dim(`Paused workflow ${r.runId}.
233
+ `));return}if(!ye(x))return;let E=c===void 0?void 0:Gt(await c.get(x)),W=$o(l,x),_=c===void 0?f.getWorkflowProcessSnapshot(x):await c.get(x);console.log(w.bold(`
234
+ Workflow run:`)),console.log(Ot(E,W,{full:r.full===!0,..._?{processSnapshot:_}:{}})),console.log();return}if(r.kind==="pause"){if(!ye(r.runId))return;if(c===void 0){console.log(w.red(qt));return}let g=await c.pause(r.runId);console.log(g?w.dim(`Paused workflow ${r.runId}.
235
235
  `):w.yellow(`No running workflow ${r.runId}.
236
236
  `));return}if(r.kind==="resume"){if(!ye(r.runId))return;if(c===void 0){console.log(w.red(qt));return}let g=await c.resume(r.runId);console.log(g?w.dim(`Resumed workflow ${r.runId}.
237
237
  `):w.yellow(`No paused workflow ${r.runId}.
238
238
  `));return}if(r.kind==="stop"){if(c===void 0){console.log(w.red(qt));return}let g=(await c.list()).filter(he),$=(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),x=r.runId||_t($);if(!x){console.log(w.yellow(`
239
239
  No active workflow to stop.
240
- `));return}if(!ye(x))return;let I=await c.get(x);if(I&&he(Gt(I))&&(!o.sessionId||I.hostMetadata?.ownerSessionId!==o.sessionId)){process.stdout.write(`${w.red("Stop the workflow from the Session that owns it.")}
241
- `);return}let W=await c.stop(x,o.sessionId?{sessionId:o.sessionId}:void 0),_=Gt(await c.get(x)),H=$o(l,x),D=await c.get(x),z=_?.status??H?.status??D?.status,re=_?!he(_):H?It(H.status):D!==void 0&&ve(D.status),P=Wt(x,Nt(_,H));console.log(W?w.dim(`Stop requested for workflow ${x}; waiting for cleanup.
240
+ `));return}if(!ye(x))return;let E=await c.get(x);if(E&&he(Gt(E))&&(!o.sessionId||E.hostMetadata?.ownerSessionId!==o.sessionId)){process.stdout.write(`${w.red("Stop the workflow from the Session that owns it.")}
241
+ `);return}let W=await c.stop(x,o.sessionId?{sessionId:o.sessionId}:void 0),_=Gt(await c.get(x)),H=$o(l,x),D=await c.get(x),z=_?.status??H?.status??D?.status,re=_?!he(_):H?Et(H.status):D!==void 0&&ve(D.status),P=Wt(x,Nt(_,H));console.log(W?w.dim(`Stop requested for workflow ${x}; waiting for cleanup.
242
242
  `):z&&re?w.yellow(`Workflow ${x} is already ${z}. Next: ${P}.
243
243
  `):w.yellow(`No active workflow ${x}.
244
244
  `));return}if(r.kind==="delete"){if(!r.target){console.log(w.yellow(`
@@ -251,13 +251,13 @@ Usage: /workflow delete [--force] [--run|--saved] <runId|savedName>
251
251
  Deleted saved workflow ${P.name}.
252
252
  `))}catch(P){let K=P instanceof Error?P.message:String(P);console.log(w.red(`
253
253
  [workflow] delete failed: ${K}
254
- `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await g(r.target);return}let $=c===void 0?void 0:await c.get(r.target),x=$?void 0:await f.resolveWorkflowIdentity(r.target),I;if(x?.kind==="ambiguous")if(x.run)I=x.run.runId;else{console.log(w.red(`
254
+ `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await g(r.target);return}let $=c===void 0?void 0:await c.get(r.target),x=$?void 0:await f.resolveWorkflowIdentity(r.target),E;if(x?.kind==="ambiguous")if(x.run)E=x.run.runId;else{console.log(w.red(`
255
255
  [workflow] ambiguous delete target: ${r.target} matches multiple workflow run/display names${x.matches.includes("saved")?" and a saved workflow name":""}. Use the concrete run id, or --saved when deleting a generated saved capsule.
256
256
  `));return}if(x?.kind==="saved"){if(r.scope==="run"){console.log(w.yellow(`
257
257
  No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
258
258
  `));return}await g(x.savedWorkflow.name,x.savedWorkflow.source);return}if(x?.kind==="missing"){console.log(w.yellow(`
259
259
  No persisted workflow run or generated saved workflow ${r.target}.
260
- `));return}let W=x?.kind==="run"?x.runId:I??r.target;if(!ye(W))return;if(await f.deleteWorkflowRun(W,{force:r.force})){console.log(w.dim(`
260
+ `));return}let W=x?.kind==="run"?x.runId:E??r.target;if(!ye(W))return;if(await f.deleteWorkflowRun(W,{force:r.force})){console.log(w.dim(`
261
261
  Deleted workflow run ${W}${r.force?" with --force":""}.
262
262
  `));return}let H=$??(c===void 0?void 0:await c.get(W)),D=f.getWorkflowProcessSnapshot(W);if(!D&&!pa(Me(l,W,"run.json"))){console.log(w.yellow(`
263
263
  No persisted workflow run or generated saved workflow ${r.target}.
@@ -273,9 +273,9 @@ ${g.error}
273
273
  `));return}if(!g.dryRun&&g.keep===void 0&&g.olderThanMs===void 0){console.log(w.yellow(`
274
274
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
275
275
  No cleanup rule was provided.
276
- `));return}let $=bo(l),x=await f.pruneWorkflowRuns(eu(g)),I=ou($,x.candidates);console.log(w.bold(g.dryRun?`
276
+ `));return}let $=bo(l),x=await f.pruneWorkflowRuns(eu(g)),E=ou($,x.candidates);console.log(w.bold(g.dryRun?`
277
277
  Workflow prune preview:`:`
278
- Workflow prune:`)),console.log(Mt(I)),x.protectedRuns>0&&console.log(w.dim(`
278
+ Workflow prune:`)),console.log(Mt(E)),x.protectedRuns>0&&console.log(w.dim(`
279
279
  Protected ${x.protectedRuns} active workflow run${x.protectedRuns===1?"":"s"} from pruning.`)),g.dryRun?console.log(w.dim(`
280
280
  Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
281
281
  `)):console.log(w.dim(`
@@ -312,16 +312,16 @@ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
312
312
  [workflow] revise target not found: ${r.target}
313
313
  `));return}if(r.replace===!0&&x.kind!=="saved"){console.log(w.red(`
314
314
  [workflow] revise --replace requires a saved workflow name target.
315
- `));return}let I;try{if(x.kind==="run")I=(await Gn({runDir:x.runDir})).capsule;else{if(x.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
315
+ `));return}let E;try{if(x.kind==="run")E=(await Gn({runDir:x.runDir})).capsule;else{if(x.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
316
316
  [workflow] only generated workflow capsules can be revised.
317
- `));return}I=await co(x.savedWorkflow.path)}}catch(G){let Dn=G instanceof Error?G.message:String(G);console.log(w.red(`
317
+ `));return}E=await co(x.savedWorkflow.path)}}catch(G){let Dn=G instanceof Error?G.message:String(G);console.log(w.red(`
318
318
  [workflow] revise failed: ${Dn}
319
- `));return}let W=Ht({target:r.target,capsule:I,changeRequest:r.request}),_;try{_=await Fo({request:W,options:$()})}catch(G){let Dn=G instanceof Error?G.message:String(G);console.log(w.red(`
319
+ `));return}let W=Ht({target:r.target,capsule:E,changeRequest:r.request}),_;try{_=await Fo({request:W,options:$()})}catch(G){let Dn=G instanceof Error?G.message:String(G);console.log(w.red(`
320
320
  [workflow] revise generation failed: ${Dn}
321
321
  `));return}if(_.kind==="declined"){console.log(w.dim(`
322
322
  Workflow revision not created: ${_.reason}
323
323
  `));return}let H=r.replace===!0&&x.kind==="saved"?x:void 0,D=H?.savedWorkflow.name,z=D??await ra(d,_.manifest.name),re=z===_.manifest.name?_.manifest:{..._.manifest,name:z};if(!await g(ce(ke({meta:re,run:_.module.run}),{source:D?`revision-replace:${D}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:re.mayUseWorktree===!0,rawScript:_.source}))){console.log(w.dim(`Workflow revision cancelled.
324
- `));return}let K={name:z,manifest:re,source:_.source,intent:Br(re,{originalRequest:r.request}),...I.inputs!==void 0?{inputs:I.inputs}:{},...I.requires!==void 0?{requires:I.requires}:{},provenance:ia({capsule:I,resolution:x,...D!==void 0?{replacesWorkflowName:D}:{}})};if(H){let G=await si({...K,dirs:d,savedSource:H.savedWorkflow.source});console.log(w.green(`
324
+ `));return}let K={name:z,manifest:re,source:_.source,intent:Br(re,{originalRequest:r.request}),...E.inputs!==void 0?{inputs:E.inputs}:{},...E.requires!==void 0?{requires:E.requires}:{},provenance:ia({capsule:E,resolution:x,...D!==void 0?{replacesWorkflowName:D}:{}})};if(H){let G=await si({...K,dirs:d,savedSource:H.savedWorkflow.source});console.log(w.green(`
325
325
  Replaced saved workflow ${G.name} with revised capsule at ${G.path}
326
326
  `)),console.log(w.dim(`Previous capsule archived at ${G.previousPath}
327
327
  `));return}let _o=await ri({...K,dir:d.project??Me(process.cwd(),".kodax","workflows")});console.log(w.green(`
@@ -334,10 +334,10 @@ Usage: /workflow rerun <runId|savedName> [args]
334
334
  [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
335
335
  `)),console.log(w.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
336
336
  `));return}if($&&!x){let P=await aa($,g);if(!P)return;let K=ko(r.rawArgs,P.module.meta.name,P.module.meta.description,P.scriptSnapshot?.source),_o="agentic";if(!await g(ce(ke(P.module),P.approvalContext))){console.log(w.dim(`Workflow cancelled.
337
- `));return}if(c===void 0){console.log(w.red(zt));return}await Xt(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:$.name},args:Co(r.rawArgs),metadata:ga({displayName:P.module.meta.name,savedWorkflowName:$.name,provenance:P.provenance})},P.module.meta,{locale:K,canRerun:P.scriptSnapshot!==void 0,presentation:_o});return}let I;try{I=await Gn({runDir:Me(l,r.runId)})}catch(P){let K=P instanceof Error?P.message:String(P);console.log(w.red(`
337
+ `));return}if(c===void 0){console.log(w.red(zt));return}await Xt(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:$.name},args:Co(r.rawArgs),metadata:ga({displayName:P.module.meta.name,savedWorkflowName:$.name,provenance:P.provenance})},P.module.meta,{locale:K,canRerun:P.scriptSnapshot!==void 0,presentation:_o});return}let E;try{E=await Gn({runDir:Me(l,r.runId)})}catch(P){let K=P instanceof Error?P.message:String(P);console.log(w.red(`
338
338
  [workflow] rerun failed: ${K}
339
- `));return}let _=$o(l,r.runId)?.scriptSnapshotPath??Me(l,r.runId,"script.js"),H=ko(r.rawArgs,I.capsule.manifest.name,I.capsule.manifest.description,I.capsule.source),D="agentic",z=uo(I.capsule,gn());if(!z.ok){wn(z);return}if(hn(z),!await g(ce(ke(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.
340
- `));return}if(c===void 0){console.log(w.red(zt));return}await Xt(c,n,{sessionId:o.sessionId,projectRoot:o.gitRoot??process.cwd(),source:{kind:"inline",manifest:I.capsule.manifest,source:I.capsule.source},args:Co(r.rawArgs),metadata:Ro({source:"command",displayName:I.module.meta.name,sourceRunId:r.runId})},I.module.meta,{locale:H,canRerun:!0,presentation:D});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
339
+ `));return}let _=$o(l,r.runId)?.scriptSnapshotPath??Me(l,r.runId,"script.js"),H=ko(r.rawArgs,E.capsule.manifest.name,E.capsule.manifest.description,E.capsule.source),D="agentic",z=uo(E.capsule,gn());if(!z.ok){wn(z);return}if(hn(z),!await g(ce(ke(E.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:E.capsule.manifest.mayUseWorktree===!0,rawScriptPath:_,rawScript:E.capsule.source}))){console.log(w.dim(`Workflow cancelled.
340
+ `));return}if(c===void 0){console.log(w.red(zt));return}await Xt(c,n,{sessionId:o.sessionId,projectRoot:o.gitRoot??process.cwd(),source:{kind:"inline",manifest:E.capsule.manifest,source:E.capsule.source},args:Co(r.rawArgs),metadata:Ro({source:"command",displayName:E.module.meta.name,sourceRunId:r.runId})},E.module.meta,{locale:H,canRerun:!0,presentation:D});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
341
341
  Usage: /workflow create <request>
342
342
  `));return}return await u(r.request)}let m=Pe(n);if(!m){console.log(w.red(`
343
343
  [workflow] refusing to start a workflow without an interactive approval channel.
@@ -356,7 +356,7 @@ Cancelled. Current session preserved.`));return}try{await n.saveSession(),consol
356
356
  `)),console.log("Usage:"),console.log(U.cyan(" /new")+` - Clear current session and start fresh
357
357
  `),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.
358
358
  `),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]
359
- `)),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 Eh="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Ih="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function Th(e){return ei(e.error,e.messageCount)}a(Th,"shouldOfferSessionRecovery");var Jt={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
+ `)),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 Ih="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Eh="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function Th(e){return ei(e.error,e.messageCount)}a(Th,"shouldOfferSessionRecovery");var Jt={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(`
360
360
  [Recover is not available in this host]
361
361
  `));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(`
362
362
  Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(Hn(e.join(" ")))}catch(r){return{success:!1,message:`[Recover failed] ${r instanceof Error?r.message:String(r)}`}}t==="blocked"?console.log(F.yellow(`
@@ -367,7 +367,7 @@ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSessi
367
367
  [Nothing to recover from this session]
368
368
  `))},"handler"),detailedHelp:a(()=>{console.log(F.cyan(`
369
369
  /recover - Continue in a Fresh Session
370
- `)),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 ru}from"node:child_process";import{promisify as iu}from"node:util";import ne from"chalk";function Le(e){let o=e.message!==void 0?{message:e.message}:{};return e.kind==="started"?{startedRunId:e.runId,...o}:{success:e.success,...o}}a(Le,"clientCommandResult");function nu(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(nu,"escapeRegExp");function tu(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${nu(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(tu,"deriveArgumentHintFromUsage");function Yt(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??tu(e.usage,e.name)}}a(Yt,"toCommandDefinition");import{randomUUID as su}from"node:crypto";var au=iu(ru),Qt=1e5;async function Io(e,o){await Oe({cwd:o});let{stdout:n}=await au("git",e,{cwd:o,maxBuffer:64*1024*1024,windowsHide:!0});return n}a(Io,"git");async function lu(e){for(let o of["main","master","develop"])try{return await Io(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(lu,"detectBaseBranch");async function Eo(e,o){return(await Io(["rev-parse",e],o)).trim()}a(Eo,"resolveRef");async function cu(e,o){try{return await Eo(e,o)}catch{return}}a(cu,"tryResolveRef");async function du(e,o){let n=e[0];if(n==="base"){let t=await lu(o);return{diff:await Io(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Eo(t,o),headRef:await Eo("HEAD",o)}}if(n==="sha"&&e[1]){let t=await cu(`${e[1]}^`,o);return{diff:await Io(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Eo(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Io(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Eo("HEAD",o)}}a(du,"getDiff");function uu(e){let o=!1,n=!1,t=!1,r=!1,i=[],l=[],c=a(u=>u==="--workflow"||u==="workflow"?(o=!0,!0):u==="--lean"||u==="lean"?(n=!0,!0):!1,"applyModeArg");for(let u=0;u<e.length;u+=1){let m=e[u];if(m!==void 0){if(r){l.push(m);continue}if(m==="--"){r=!0;continue}if(!c(m)){if(!t&&m==="base"){i.push("base"),t=!0;continue}if(!t&&m==="sha"){for(i.push("sha"),t=!0;u+1<e.length;){let y=e[u+1];if(y===void 0)break;if(y==="--"){r=!0,u+=1;break}if(c(y)){u+=1;continue}i.push(y),u+=1;break}continue}l.push(m)}}}let d=l.join(" ").trim(),f=i[0]==="sha"&&!i[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:i,prompt:d.length>0?d:void 0,...f?{error:f}:{}}}a(uu,"parseReviewInvocation");function fu(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
+ `)),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 ru}from"node:child_process";import{promisify as iu}from"node:util";import ne from"chalk";function Le(e){let o=e.message!==void 0?{message:e.message}:{};return e.kind==="started"?{startedRunId:e.runId,...o}:{success:e.success,...o}}a(Le,"clientCommandResult");function nu(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(nu,"escapeRegExp");function tu(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${nu(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(tu,"deriveArgumentHintFromUsage");function Yt(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??tu(e.usage,e.name)}}a(Yt,"toCommandDefinition");import{randomUUID as su}from"node:crypto";var au=iu(ru),Qt=1e5;async function Eo(e,o){await Oe({cwd:o});let{stdout:n}=await au("git",e,{cwd:o,maxBuffer:64*1024*1024,windowsHide:!0});return n}a(Eo,"git");async function lu(e){for(let o of["main","master","develop"])try{return await Eo(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(lu,"detectBaseBranch");async function Io(e,o){return(await Eo(["rev-parse",e],o)).trim()}a(Io,"resolveRef");async function cu(e,o){try{return await Io(e,o)}catch{return}}a(cu,"tryResolveRef");async function du(e,o){let n=e[0];if(n==="base"){let t=await lu(o);return{diff:await Eo(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Io(t,o),headRef:await Io("HEAD",o)}}if(n==="sha"&&e[1]){let t=await cu(`${e[1]}^`,o);return{diff:await Eo(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Io(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Eo(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Io("HEAD",o)}}a(du,"getDiff");function uu(e){let o=!1,n=!1,t=!1,r=!1,i=[],l=[],c=a(u=>u==="--workflow"||u==="workflow"?(o=!0,!0):u==="--lean"||u==="lean"?(n=!0,!0):!1,"applyModeArg");for(let u=0;u<e.length;u+=1){let m=e[u];if(m!==void 0){if(r){l.push(m);continue}if(m==="--"){r=!0;continue}if(!c(m)){if(!t&&m==="base"){i.push("base"),t=!0;continue}if(!t&&m==="sha"){for(i.push("sha"),t=!0;u+1<e.length;){let y=e[u+1];if(y===void 0)break;if(y==="--"){r=!0,u+=1;break}if(c(y)){u+=1;continue}i.push(y),u+=1;break}continue}l.push(m)}}}let d=l.join(" ").trim(),f=i[0]==="sha"&&!i[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:i,prompt:d.length>0?d:void 0,...f?{error:f}:{}}}a(uu,"parseReviewInvocation");function fu(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(`
371
371
  `)}a(fu,"buildReviewWorkflowRequest");function mu(e){return e.length<=Qt?e:`${e.slice(0,Qt)}
372
372
 
373
373
  [diff truncated to ${Qt} chars - review the rest with a narrower scope]`}a(mu,"truncateDiff");function pu(e){let o=mu(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(`
@@ -396,8 +396,8 @@ After coding:
396
396
  `;function xu(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(xu,"resolveTargetRoot");async function ba(e){try{return await hu(e,wu.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(ba,"pathExists");function va(e){return console.log(te.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(va,"existingAgentsResult");function bn(e){return e instanceof Error?e.message:String(e)}a(bn,"errorMessage");async function ka(e,o){let n;try{n=await ba(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${bn(t)}`}}if(n)return va(e);try{await vu(e,xa,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?va(e):{success:!1,message:`/agents init: failed to write ${e}: ${bn(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: ${bn(t)}`}}return console.log(te.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(ka,"initializeAgentsFile");function bu(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",xa.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
397
397
  `)}a(bu,"buildLeanReviewPrompt");function Sa(){console.log(te.bold(`
398
398
  /agents - Manage Target Project Instructions
399
- `)),console.log("Usage:"),console.log(te.cyan(" /agents init")),console.log(te.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(te.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(te.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(te.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(te.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(te.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(Sa,"printAgentsHelp");var Zt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:Sa,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return Sa(),!0;let r=xu(o),i=ku(r,"AGENTS.md");if(t==="init")return await ka(i,n);let l;try{l=await ba(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${bn(d)}`}}if(!l)return await ka(i,n);if(n?.reviewAgentsLean){let d=await n.reviewAgentsLean({sessionId:o.sessionId,inputId:Su()});return Le(d)}let c;try{c=await yu(i,"utf8")}catch(d){let f=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${i}: ${f}`}}return{success:!0,invocation:{prompt:bu(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};var $a={name:"work-mode",description:"Select Agent, Coding or Script for this idle Session",usage:"/work-mode [agent|coding|script]",handler:a(async(e,o,n,t)=>{if(!e.length)return{success:!0,message:`Work mode: ${t.hostSettings?t.hostSettings.workMode??"coding":t.workMode??"coding"}
400
- Choices: agent, coding (default), script. Permissions and AMA strategy are unchanged.`};let r=e[0]?.toLowerCase();if(e.length!==1||r!=="agent"&&r!=="coding"&&r!=="script")return{success:!1,message:"Usage: /work-mode [agent|coding|script]"};if(!n.setWorkMode)return{success:!1,message:"Session work mode control unavailable."};try{return await n.setWorkMode(r),{success:!0,message:`Work mode: ${r}. Applied to this Session; other Sessions and saved defaults are unchanged.`}}catch(i){return{success:!1,message:`Work mode was not changed: ${String(i)}`}}},"handler")};function An(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(An,"getPastedTextRefNumLines");function $u(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a($u,"formatPastedTextRef");function Au(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(Au,"formatTruncatedTextRef");var Ru=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function Cu(e){let o=[],n=new RegExp(Ru.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(Cu,"parseReferences");function Eu(e,o){let n=Cu(e);if(n.length===0)return e;let t=a(i=>o instanceof Map?o.get(i):o[i],"getContent"),r=e;for(let i=n.length-1;i>=0;i--){let l=n[i];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(Eu,"expandPastedTextRefs");var Iu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Tu=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function Pu(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(Pu,"isAtWordBoundaryAfter");function Mu(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(Mu,"isAtWordBoundaryBefore");function ry(e,o){if(o<=0||!Pu(e,o))return null;let t=e.slice(0,o).match(Iu);if(!t)return null;let r=o-t[0].length,i=Number.parseInt(t[2]??"0",10);return!Number.isFinite(i)||i<=0?null:{start:r,end:o,id:i,kind:t[1]}}a(ry,"findPlaceholderBeforeCursor");function iy(e,o){if(o>=e.length||!Mu(e,o))return null;let t=e.slice(o).match(Tu);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(iy,"findPlaceholderAfterCursor");function sy(e){return e.length>800||An(e)>2}a(sy,"shouldReplacePasteWithPlaceholder");function ay(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),i=e.slice(-t),l=e.slice(n,-t),c=An(l),d=Au(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(ay,"maybeTruncateLongInput");var er=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=An(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:$u(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=An(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 Eu(o,this.contents)}snapshot(){return new Map(this.contents)}restore(o){this.contents.clear();for(let[n,t]of o)this.contents.set(n,t);for(let n of o.keys())n>=this.nextId&&(this.nextId=n+1)}reset(){this.contents.clear(),this.nextId=1}size(){return this.contents.size}export(){return Array.from(this.contents.values())}},$n=null;function ly(){return $n===null&&($n=new er),$n}a(ly,"getOrCreateModulePasteStore");function Aa(){return $n??void 0}a(Aa,"getActivePasteStore");import{createHash as Lu}from"node:crypto";import{mkdir as _u,readdir as Nu,readFile as Wu,stat as Ou,unlink as Du,writeFile as ju}from"node:fs/promises";import*as or from"node:path";var Uu="paste-cache",Fu=720*60*60*1e3;function nr(){return O(Uu)}a(nr,"getPasteCacheDir");function Ra(e){return or.join(nr(),`${e}.txt`)}a(Ra,"getPastePath");function py(e){return Lu("sha256").update(e).digest("hex").slice(0,16)}a(py,"hashPastedText");async function gy(e,o){try{let n=nr();return await _u(n,{recursive:!0}),await ju(Ra(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(gy,"storePastedText");async function Ca(e){try{return await Wu(Ra(e),{encoding:"utf8"})}catch{return null}}a(Ca,"retrievePastedText");async function wy(e=Fu){let o=nr(),n=Date.now()-e,t=0,r=0,i;try{i=await Nu(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=or.join(o,l);try{(await Ou(c)).mtimeMs<n&&(await Du(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(wy,"cleanupOldPastes");import*as sr from"path";import*as ar from"os";function tr(e){for(let o of Ea)try{let n=Yt(o,"builtin");e.register(n)}catch(n){Q({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(tr,"registerBuiltinCommands");import*as de from"fs";import*as _e from"path";function Hu(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(Hu,"normalizeAliases");function Bu(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(Bu,"normalizePriority");function Ku(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Tr(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:Pr(e.hooks),frontmatter:e}}a(Ku,"buildExecutionMetadata");function qu(e,o){try{let n=de.readFileSync(e,"utf-8"),[t,r]=Ir(n),i=t??{},l=_e.basename(e,".md"),c=typeof i.name=="string"&&i.name.trim()?i.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof i.description=="string"&&i.description.trim()?i.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:Hu(i.aliases),priority:Bu(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Ku(i)}}catch(n){Q({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(qu,"parseCommandFile");function rr(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],i=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!de.existsSync(i))continue;let c=_e.resolve(i);try{c=de.realpathSync.native?.(i)??de.realpathSync(i)}catch{c=_e.resolve(i)}if(!n.has(c)){n.add(c);try{let d=de.readdirSync(i);for(let f of d){if(!f.endsWith(".md"))continue;let u=_e.join(i,f),m=qu(u,l);m&&o.push(m)}}catch(d){Q({source:"repl:commands",level:"error",message:`Error scanning directory ${i}.`,detail:d})}}}return o}a(rr,"discoverCommands");function ir(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){Q({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(ir,"registerDiscoveredCommands");function lr(e,o){tr(e);try{let n=ar.homedir(),t=o??process.cwd(),r=rr([...zu(t)]);ir(r,e)}catch(n){Q({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(lr,"registerAllCommands");function zu(e){let o=ar.homedir();return[{path:sr.join(e,".kodax","commands"),location:"project"},{path:O("commands"),location:"user"},{path:sr.join(o,".agents","commands"),location:"user"}]}a(zu,"commandDiscoveryDirs");function Ly(e){let o=new ge;return lr(o,e),o.getAll()}a(Ly,"listRegisteredCommands");function Gu(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(Gu,"summarizeAgentsFiles");async function Na(e){let o=V(e);return await o.reload(),o.size}a(Na,"reloadSkillRegistry");function Xu(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(Cn.isAbsolute(r)?r:Cn.resolve(Cn.dirname(e),r))}return n}a(Xu,"normalizeConfiguredExtensionPaths");function Vu(){let e=Cn.join(fe(),"config.json");try{if(!In.existsSync(e))return{};let o=JSON.parse(In.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Xu(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(s.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(Vu,"loadExtensionReloadConfig");async function Ju(){try{return await Qr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(s.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Ju,"discoverDefaultExtensionsForReload");async function Yu(){let e=Vu(),o=await zn(e.extensions??[]),n=await zn(await Ju()),t=await Uo(n,o),r=[...t,...o],i=ie();if(!i&&r.length>0&&(i=Zr({config:e}).activate()),!i)return{reloaded:0,loaded:0,failures:0};let l=eo(i),c=l.failures.length;await i.reloadExtensions({continueOnError:!0});let d=eo(i),f=Math.max(0,d.failures.length-c),u=d.loadedExtensions.map(b=>b.path),m=await Uo(t,u),y=await Uo(o,[...u,...m]);await i.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await i.loadExtensions(y,{continueOnError:!0,loadSource:"config",stage:"reload"});let k=eo(i);return{reloaded:Math.max(0,l.loadedExtensions.length-f),loaded:Math.max(0,k.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,k.failures.length-c)}}a(Yu,"reloadExtensionRuntimeFromDisk");function Qu(e){return{...e,enabled:!0}}a(Qu,"createManualCompactionConfig");function cr(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${St(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(cr,"printWorkspaceUnchangedNote");var Ea=[$a,{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(ue.size===0&&Pn(),ue.has(t.toLowerCase())||!!Po(t))pr(t,e.slice(1));else{if(n?.commandClient&&await Ua({command:t.toLowerCase(),args:[]},o.gitRoot,n.listHostCommands))return Le(await n.commandClient.execute({sessionId:o.sessionId,inputId:En(),name:t,args:["--help",...e.slice(1)]}));mf(t)}}else ff(await n?.listHostCommands?.(o.gitRoot??process.cwd()))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
399
+ `)),console.log("Usage:"),console.log(te.cyan(" /agents init")),console.log(te.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(te.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(te.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(te.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(te.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(te.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(Sa,"printAgentsHelp");var Zt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:Sa,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return Sa(),!0;let r=xu(o),i=ku(r,"AGENTS.md");if(t==="init")return await ka(i,n);let l;try{l=await ba(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${bn(d)}`}}if(!l)return await ka(i,n);if(n?.reviewAgentsLean){let d=await n.reviewAgentsLean({sessionId:o.sessionId,inputId:Su()});return Le(d)}let c;try{c=await yu(i,"utf8")}catch(d){let f=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${i}: ${f}`}}return{success:!0,invocation:{prompt:bu(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};var $a={name:"work-mode",description:"Select Agent, Coding or Script before the first Run",usage:"/work-mode [agent|coding|script]",handler:a(async(e,o,n,t)=>{if(!e.length)return{success:!0,message:`Work mode: ${t.hostSettings?t.hostSettings.workMode??"coding":t.workMode??"coding"}
400
+ New Session choices: agent, coding (default), script. Fixed after the first Run. Permissions and AMA strategy are unchanged.`};let r=e[0]?.toLowerCase();if(e.length!==1||r!=="agent"&&r!=="coding"&&r!=="script")return{success:!1,message:"Usage: /work-mode [agent|coding|script]"};if(!n.setWorkMode)return{success:!1,message:"Session work mode control unavailable."};try{return await n.setWorkMode(r),{success:!0,message:`Work mode: ${r}. Applied to this Session; other Sessions and saved defaults are unchanged.`}}catch(i){return{success:!1,message:`Work mode was not changed: ${String(i)}`}}},"handler")};function An(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(An,"getPastedTextRefNumLines");function $u(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a($u,"formatPastedTextRef");function Au(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(Au,"formatTruncatedTextRef");var Ru=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function Cu(e){let o=[],n=new RegExp(Ru.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(Cu,"parseReferences");function Iu(e,o){let n=Cu(e);if(n.length===0)return e;let t=a(i=>o instanceof Map?o.get(i):o[i],"getContent"),r=e;for(let i=n.length-1;i>=0;i--){let l=n[i];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(Iu,"expandPastedTextRefs");var Eu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Tu=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function Pu(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(Pu,"isAtWordBoundaryAfter");function Mu(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(Mu,"isAtWordBoundaryBefore");function ry(e,o){if(o<=0||!Pu(e,o))return null;let t=e.slice(0,o).match(Eu);if(!t)return null;let r=o-t[0].length,i=Number.parseInt(t[2]??"0",10);return!Number.isFinite(i)||i<=0?null:{start:r,end:o,id:i,kind:t[1]}}a(ry,"findPlaceholderBeforeCursor");function iy(e,o){if(o>=e.length||!Mu(e,o))return null;let t=e.slice(o).match(Tu);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(iy,"findPlaceholderAfterCursor");function sy(e){return e.length>800||An(e)>2}a(sy,"shouldReplacePasteWithPlaceholder");function ay(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),i=e.slice(-t),l=e.slice(n,-t),c=An(l),d=Au(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(ay,"maybeTruncateLongInput");var er=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=An(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:$u(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=An(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 Iu(o,this.contents)}snapshot(){return new Map(this.contents)}restore(o){this.contents.clear();for(let[n,t]of o)this.contents.set(n,t);for(let n of o.keys())n>=this.nextId&&(this.nextId=n+1)}reset(){this.contents.clear(),this.nextId=1}size(){return this.contents.size}export(){return Array.from(this.contents.values())}},$n=null;function ly(){return $n===null&&($n=new er),$n}a(ly,"getOrCreateModulePasteStore");function Aa(){return $n??void 0}a(Aa,"getActivePasteStore");import{createHash as Lu}from"node:crypto";import{mkdir as _u,readdir as Nu,readFile as Wu,stat as Ou,unlink as Du,writeFile as ju}from"node:fs/promises";import*as or from"node:path";var Uu="paste-cache",Fu=720*60*60*1e3;function nr(){return O(Uu)}a(nr,"getPasteCacheDir");function Ra(e){return or.join(nr(),`${e}.txt`)}a(Ra,"getPastePath");function py(e){return Lu("sha256").update(e).digest("hex").slice(0,16)}a(py,"hashPastedText");async function gy(e,o){try{let n=nr();return await _u(n,{recursive:!0}),await ju(Ra(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(gy,"storePastedText");async function Ca(e){try{return await Wu(Ra(e),{encoding:"utf8"})}catch{return null}}a(Ca,"retrievePastedText");async function wy(e=Fu){let o=nr(),n=Date.now()-e,t=0,r=0,i;try{i=await Nu(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=or.join(o,l);try{(await Ou(c)).mtimeMs<n&&(await Du(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(wy,"cleanupOldPastes");import*as sr from"path";import*as ar from"os";function tr(e){for(let o of Ia)try{let n=Yt(o,"builtin");e.register(n)}catch(n){Q({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(tr,"registerBuiltinCommands");import*as de from"fs";import*as _e from"path";function Hu(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(Hu,"normalizeAliases");function Bu(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(Bu,"normalizePriority");function Ku(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Tr(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:Pr(e.hooks),frontmatter:e}}a(Ku,"buildExecutionMetadata");function qu(e,o){try{let n=de.readFileSync(e,"utf-8"),[t,r]=Er(n),i=t??{},l=_e.basename(e,".md"),c=typeof i.name=="string"&&i.name.trim()?i.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof i.description=="string"&&i.description.trim()?i.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:Hu(i.aliases),priority:Bu(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Ku(i)}}catch(n){Q({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(qu,"parseCommandFile");function rr(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],i=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!de.existsSync(i))continue;let c=_e.resolve(i);try{c=de.realpathSync.native?.(i)??de.realpathSync(i)}catch{c=_e.resolve(i)}if(!n.has(c)){n.add(c);try{let d=de.readdirSync(i);for(let f of d){if(!f.endsWith(".md"))continue;let u=_e.join(i,f),m=qu(u,l);m&&o.push(m)}}catch(d){Q({source:"repl:commands",level:"error",message:`Error scanning directory ${i}.`,detail:d})}}}return o}a(rr,"discoverCommands");function ir(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){Q({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(ir,"registerDiscoveredCommands");function lr(e,o){tr(e);try{let n=ar.homedir(),t=o??process.cwd(),r=rr([...zu(t)]);ir(r,e)}catch(n){Q({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(lr,"registerAllCommands");function zu(e){let o=ar.homedir();return[{path:sr.join(e,".kodax","commands"),location:"project"},{path:O("commands"),location:"user"},{path:sr.join(o,".agents","commands"),location:"user"}]}a(zu,"commandDiscoveryDirs");function Ly(e){let o=new ge;return lr(o,e),o.getAll()}a(Ly,"listRegisteredCommands");function Gu(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(Gu,"summarizeAgentsFiles");async function Na(e){let o=V(e);return await o.reload(),o.size}a(Na,"reloadSkillRegistry");function Xu(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(Cn.isAbsolute(r)?r:Cn.resolve(Cn.dirname(e),r))}return n}a(Xu,"normalizeConfiguredExtensionPaths");function Vu(){let e=Cn.join(fe(),"config.json");try{if(!En.existsSync(e))return{};let o=JSON.parse(En.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Xu(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(s.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(Vu,"loadExtensionReloadConfig");async function Ju(){try{return await Qr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(s.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Ju,"discoverDefaultExtensionsForReload");async function Yu(){let e=Vu(),o=await zn(e.extensions??[]),n=await zn(await Ju()),t=await Uo(n,o),r=[...t,...o],i=ie();if(!i&&r.length>0&&(i=Zr({config:e}).activate()),!i)return{reloaded:0,loaded:0,failures:0};let l=eo(i),c=l.failures.length;await i.reloadExtensions({continueOnError:!0});let d=eo(i),f=Math.max(0,d.failures.length-c),u=d.loadedExtensions.map(b=>b.path),m=await Uo(t,u),y=await Uo(o,[...u,...m]);await i.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await i.loadExtensions(y,{continueOnError:!0,loadSource:"config",stage:"reload"});let k=eo(i);return{reloaded:Math.max(0,l.loadedExtensions.length-f),loaded:Math.max(0,k.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,k.failures.length-c)}}a(Yu,"reloadExtensionRuntimeFromDisk");function Qu(e){return{...e,enabled:!0}}a(Qu,"createManualCompactionConfig");function cr(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${St(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(cr,"printWorkspaceUnchangedNote");var Ia=[$a,{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(ue.size===0&&Pn(),ue.has(t.toLowerCase())||!!Po(t))pr(t,e.slice(1));else{if(n?.commandClient&&await Ua({command:t.toLowerCase(),args:[]},o.gitRoot,n.listHostCommands))return Le(await n.commandClient.execute({sessionId:o.sessionId,inputId:In(),name:t,args:["--help",...e.slice(1)]}));mf(t)}}else ff(await n?.listHostCommands?.(o.gitRoot??process.cwd()))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
401
401
  /help - Show Command Help
402
402
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /help ")+"Show all available commands"),console.log(s.dim(" /help <command> ")+"Show detailed help for a specific command"),console.log(s.dim(" /<command> help ")+"Shortcut for command-specific help"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /help ")+"# List all commands"),console.log(s.dim(" /help mode ")+"# Detailed help for /mode"),console.log(s.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(s.red(`
403
403
  [Usage: /setup [--custom|--help]]`));return}if(console.log(`
@@ -434,7 +434,7 @@ Pasted text #${r} (${l.length} chars):
434
434
  [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(s.green(`
435
435
  [No compaction needed]`)),console.log(s.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
436
436
  `));return}o.messages=[...m.messages],o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:pe(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(s.green(`
437
- [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 i={...await Ii(o.gitRoot),...Object.fromEntries(Object.entries(n.createKodaXOptions?.().compaction??{}).filter(([,m])=>m!==void 0))},l=t.provider,c=Oo(l);if(!c){console.log(s.red(`
437
+ [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 i={...await Ei(o.gitRoot),...Object.fromEntries(Object.entries(n.createKodaXOptions?.().compaction??{}).filter(([,m])=>m!==void 0))},l=t.provider,c=Oo(l);if(!c){console.log(s.red(`
438
438
  [Provider not found: ${l}]`));return}let d=i.contextWindow??c.getEffectiveContextWindow?.(t.model)??c.getContextWindow?.()??2e5,f=o.contextTokenSnapshot?.currentTokens??pe(o.messages),u=Qu(i);console.log(s.dim(`
439
439
  [Compacting conversation...]`)),n.startCompacting?.();try{let m=await Or(o.messages,u,c,d,r,void 0,f,oi,ni,t.model,!0,c.getEffectiveMaxOutputTokens(t.model));if(!m.compacted){console.log(s.green(`
440
440
  [No compaction needed]`)),console.log(s.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
@@ -446,11 +446,15 @@ Pasted text #${r} (${l.length} chars):
446
446
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /compact ")+"Compact conversation with default instructions"),console.log(s.dim(" /compact <text> ")+"Compact with custom instructions for the summary"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Manually triggers context compaction using LLM-generated summaries.")),console.log(s.dim(" All eligible older messages are replaced atomically with a structured checkpoint.")),console.log(s.dim(" Automatic large compaction is always enabled; /compact bypasses its trigger comparison.")),console.log(),console.log(s.bold("What it does:")),console.log(s.dim(" 1. Protects 20% of the effective trigger as recent raw context")),console.log(s.dim(" 2. Summarizes the complete eligible prefix in one atomic wave")),console.log(s.dim(" 3. Tracks files that were read/modified in the conversation")),console.log(s.dim(" 4. Replaces old messages with summary to save tokens")),console.log(),console.log(s.bold("Configuration:")),console.log(s.dim(" Config file: ~/.kodax/config.json")),console.log(s.dim(" Settings:")),console.log(s.dim(" - compaction.triggerPercent: 15-90, default 75")),console.log(s.dim(" - compaction.triggerTokens: Optional absolute token threshold; 0 disables this limiter")),console.log(s.dim(" - The smaller percentage/absolute threshold wins")),console.log(s.dim(" - compaction.enabled: deprecated and ignored; automatic compaction stays on")),console.log(s.dim(" - compaction.contextWindow: Optional token-window override")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /compact ")+"# Compact with default instructions"),console.log(s.dim(" /compact focus on auth logic ")+"# Emphasize authentication in summary"),console.log(),console.log(s.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(s.cyan(`
447
447
  Reloading project rule files, skills, and runtime extensions...
448
448
  `));try{let r=await n.reloadAgentsFiles?.()??[],i=Gu(r),l=await Na(o.gitRoot),c=await Yu(),d=c.reloaded+c.loaded,f=c.failures;if(r.length===0&&l===0&&d===0&&f===0){console.log(s.yellow(`No project rule files, skills, or active extensions found.
449
- `)),console.log(s.dim(" Create AGENTS.md or CLAUDE.md in your project, add skills, or load extensions with --extension.")),console.log();return}console.log(s.green(`Reloaded successfully:
450
- `)),i.global>0&&console.log(s.dim(` - Global: ${i.global} file(s)`)),i.directory>0&&console.log(s.dim(` - Directory: ${i.directory} file(s)`)),i.project>0&&console.log(s.dim(` - Project: ${i.project} file(s)`)),c.reloaded>0&&console.log(s.dim(` - Extensions reloaded: ${c.reloaded} module(s)`)),c.loaded>0&&console.log(s.dim(` - Extensions loaded: ${c.loaded} module(s)`)),l>0&&console.log(s.dim(` - Skills: ${l} skill(s)`)),f>0&&console.log(s.yellow(` - Failures: ${f} recorded (run /extensions for details)`)),console.log(s.dim(" Updated rules, skills, and extensions will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(s.red(`Failed to reload.
449
+ `)),process.stdout.write(s.dim(" Add AGENTS.md, .kodax/rules/*.md, skills, or extensions with --extension.")+`
450
+ `),console.log();return}console.log(s.green(`Reloaded successfully:
451
+ `)),i.global>0&&console.log(s.dim(` - Global: ${i.global} file(s)`)),i.directory>0&&console.log(s.dim(` - Directory: ${i.directory} file(s)`)),i.project>0&&console.log(s.dim(` - Project: ${i.project} file(s)`));for(let u of r)process.stdout.write(s.dim(` ${u.path}
452
+ `));c.reloaded>0&&console.log(s.dim(` - Extensions reloaded: ${c.reloaded} module(s)`)),c.loaded>0&&console.log(s.dim(` - Extensions loaded: ${c.loaded} module(s)`)),l>0&&console.log(s.dim(` - Skills: ${l} skill(s)`)),f>0&&console.log(s.yellow(` - Failures: ${f} recorded (run /extensions for details)`)),console.log(s.dim(" Updated rules, skills, and extensions will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(s.red(`Failed to reload.
451
453
  `)),console.log(s.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
452
454
  /reload - Reload Project Context
453
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(s.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(s.bold("Rule Priority:")),console.log(s.dim(" 1. Global: ")+"~/.kodax/AGENTS.md"),console.log(s.dim(" 2. Directory: ")+"AGENTS.md or CLAUDE.md from project root to current directory"),console.log(s.dim(" 3. Project: ")+".kodax/AGENTS.md at the project root"),console.log(),console.log(s.bold("Examples:")),console.log(s.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:ie(),r=n.inspectExtensions?(await n.inspectExtensions()).diagnostics:t?eo(t):void 0;if(!r){console.log(s.yellow(`
455
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(s.bold("Description:")),process.stdout.write(` Reloads AGENTS.md and user/project Markdown rule fragments.
456
+ `),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(s.bold("Rule Priority:")),process.stdout.write([" 1. User rules: ~/.kodax/rules/*.md"," 2. User: ~/.kodax/AGENTS.md"," 3. Project rules: .kodax/rules/*.md at the project root"," 4. Directory: AGENTS.md from project root to current directory"," 5. Project: .kodax/AGENTS.md at the project root"," Rules use complete files, up to 8 KiB each and 16 KiB per scope.",""].join(`
457
+ `)),console.log(),console.log(s.bold("Examples:")),console.log(s.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:ie(),r=n.inspectExtensions?(await n.inspectExtensions()).diagnostics:t?eo(t):void 0;if(!r){console.log(s.yellow(`
454
458
  [No active extension runtime]
455
459
  `));return}let i=r.tools.filter(l=>l.source.kind==="extension");if(console.log(s.bold(`
456
460
  Extension Runtime:
@@ -539,7 +543,7 @@ Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits
539
543
  [All sessions deleted]`)),cr(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
540
544
  [Session deleted: ${e[0]}]`)),cr(o))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
541
545
  /delete - Delete Saved Sessions
542
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /delete ")+"Show usage (lists sessions)"),console.log(s.dim(" /delete <id> ")+"Delete a specific session"),console.log(s.dim(" /delete all ")+"Delete ALL sessions"),console.log(s.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(s.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" Deletes saved session records only.")),console.log(s.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(s.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 Is(e,n,t);let r=Yn().providerModels;if(e.length===0){console.log(s.bold(`
546
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /delete ")+"Show usage (lists sessions)"),console.log(s.dim(" /delete <id> ")+"Delete a specific session"),console.log(s.dim(" /delete all ")+"Delete ALL sessions"),console.log(s.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(s.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" Deletes saved session records only.")),console.log(s.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(s.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 Es(e,n,t);let r=Yn().providerModels;if(e.length===0){console.log(s.bold(`
543
547
  Available Providers:
544
548
  `));let c=$i(r);for(let d of c){let f=d.configured?s.green("[configured]"):s.red("[not configured]"),u=d.custom?s.yellow(" [custom]"):"",m=d.name===t.provider,y=m?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${y} ${f}${u}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${Jn(d.capabilityProfile)}`));let k=Ue(d.name,r),b=m?t.model:null;for(let v of k){let S=m&&(b===v||!b&&v===d.model)?s.cyan(">"):" ";console.log(` ${S} ${v}`)}console.log()}console.log(s.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(s.dim("Usage:")),console.log(s.dim(" /model <provider> Switch provider")),console.log(s.dim(" /model <provider>/<model> Switch to specific model")),console.log(s.dim(` /model /<model> Switch model within current provider
545
549
  `));return}let i=(e[0]??"").trim();if(!i)return;if(i.startsWith("/")){let c=i.slice(1);if(!c){console.log(s.red(`
@@ -565,9 +569,9 @@ Available Providers:
565
569
  `)}}catch(m){let y=m instanceof Error?m.message:String(m);return{success:!1,message:s.red(`[Probe failed: ${y}]`)}}}let i=t.provider,l=t.model;if(r)if(r.includes("/")){let u=r.indexOf("/");i=r.slice(0,u).trim(),l=r.slice(u+1).trim()||void 0}else i=r,l=void 0;if(!Ne(i)){console.log(s.red(`
566
570
  [Unknown provider: ${i}]`)),console.log(s.dim(`Available: ${We().join(", ")}
567
571
  `));return}let c=Si(i,l);if(!c){console.log(s.red(`
568
- [Provider details unavailable: ${i}]`)),console.log();return}let d=Ei(i,l,t.reasoningMode);console.log(s.bold(`
572
+ [Provider details unavailable: ${i}]`)),console.log();return}let d=Ii(i,l,t.reasoningMode);console.log(s.bold(`
569
573
  Provider Details:
570
- `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${Ri(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let u of Ci(c))console.log(s.dim(` - ${u}`));console.log(s.dim(` - Session effort: ${t.hostSettings?t.hostSettings.effort??"Host default":Oa(t.effort)}`));let f=Oo(i).usesScopedReasoningLearning?.()?[]:Er(i,l);if(f.length>0&&console.log(s.dim(` - Learned unsupported: ${f.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(s.bold("Common Scenarios:"));for(let u of d){let m=u.decision.status==="block"?s.red:u.decision.status==="warn"?s.yellow:s.green;console.log(m(` - ${u.label}: ${u.decision.status.toUpperCase()}`)),console.log(s.dim(` ${u.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
574
+ `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${Ri(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let u of Ci(c))console.log(s.dim(` - ${u}`));console.log(s.dim(` - Session effort: ${t.hostSettings?t.hostSettings.effort??"Host default":Oa(t.effort)}`));let f=Oo(i).usesScopedReasoningLearning?.()?[]:Ir(i,l);if(f.length>0&&console.log(s.dim(` - Learned unsupported: ${f.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(s.bold("Common Scenarios:"));for(let u of d){let m=u.decision.status==="block"?s.red:u.decision.status==="warn"?s.yellow:s.green;console.log(m(` - ${u.label}: ${u.decision.status.toUpperCase()}`)),console.log(s.dim(` ${u.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
571
575
  /provider - Inspect Provider Semantics
572
576
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /provider ")+"Inspect the current provider/model"),console.log(s.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(s.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(s.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(s.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(s.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(s.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 sn(e,n,t);await dr("thinking",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
573
577
  /thinking - Set Native Reasoning Effort
@@ -591,9 +595,9 @@ Stall Sidecar log: ${s.cyan(d)}${f}`)),console.log(s.dim(" When on, a one-line
591
595
  [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /stall-log [on|off]
592
596
  `));return}i?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let l=Tn({stallLog:i});To(`Stall Sidecar log: ${i?"on":"off"}`,l)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
593
597
  /stall-log - Stall Sidecar Log Toggle
594
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /stall-log ")+"Show current state"),console.log(s.dim(" /stall-log on ")+"Enable + persist to config"),console.log(s.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(s.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(s.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(s.dim(" a one-line summary:")),console.log(s.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},ft,gt,yt,js,wa,Vt,Jt,ya,Zt],Zu={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 ef(e){let o=oo();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(ef,"getCommandsForCategory");function Wa(e){return e!=="off"}a(Wa,"reasoningModeToLegacyThinking");function Oa(e){return e==="none"?"off":e??"auto"}a(Oa,"formatReasoningEffortDisplay");function Da(e){return qo(e.provider,e.model).map(o=>o==="off"?"none":o)}a(Da,"getCanonicalReasoningEffortOptions");function of(e,o){return`Usage: /${e} ${Da(o).join("|")}|<provider-value>`}a(of,"formatReasoningEffortUsage");function Ia(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=Ai(e);return bi({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Ia,"formatCurrentReasoningEffortStatus");function nf(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(nf,"normalizeRepoIntelPublicMode");function tf(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(tf,"resolveToggleFlag");function Tn(e){try{return xe(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Tn,"persistUserConfig");function To(e,o){if(o.saved){console.log(s.cyan(`
598
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /stall-log ")+"Show current state"),console.log(s.dim(" /stall-log on ")+"Enable + persist to config"),console.log(s.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(s.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(s.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(s.dim(" a one-line summary:")),console.log(s.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},ft,gt,yt,js,wa,Vt,Jt,ya,Zt],Zu={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 ef(e){let o=oo();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(ef,"getCommandsForCategory");function Wa(e){return e!=="off"}a(Wa,"reasoningModeToLegacyThinking");function Oa(e){return e==="none"?"off":e??"auto"}a(Oa,"formatReasoningEffortDisplay");function Da(e){return qo(e.provider,e.model).map(o=>o==="off"?"none":o)}a(Da,"getCanonicalReasoningEffortOptions");function of(e,o){return`Usage: /${e} ${Da(o).join("|")}|<provider-value>`}a(of,"formatReasoningEffortUsage");function Ea(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=Ai(e);return bi({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Ea,"formatCurrentReasoningEffortStatus");function nf(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(nf,"normalizeRepoIntelPublicMode");function tf(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(tf,"resolveToggleFlag");function Tn(e){try{return xe(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Tn,"persistUserConfig");function To(e,o){if(o.saved){console.log(s.cyan(`
595
599
  [${e}] (saved)`));return}console.log(s.yellow(`
596
- [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(To,"printPersistedCommandStatus");var rf={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function dr(e,o,n,t){let r=of(e,t);if(o.length===0){let u=Ia(t);console.log(s.dim(`
600
+ [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(To,"printPersistedCommandStatus");var rf={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function dr(e,o,n,t){let r=of(e,t);if(o.length===0){let u=Ea(t);console.log(s.dim(`
597
601
  Reasoning effort: ${s.cyan(u)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.hostSettings?t.hostSettings.reasoningMode??"Host default":t.reasoningMode)}`)),console.log(s.dim(`Available: ${Da(t).join(", ")}`)),console.log(s.dim(`${r}
598
602
  `));return}if(o.length>1){console.log(s.red(`
599
603
  [Reasoning effort accepts exactly one value]`)),console.log(s.dim(`${r}
@@ -601,7 +605,7 @@ Reasoning effort: ${s.cyan(u)}`)),console.log(s.dim(`Compatibility: ${s.cyan(
601
605
  [Invalid reasoning effort: ${m}]`)),console.log(s.dim(`${r}
602
606
  `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l;if(c==="none"&&!qo(t.provider,t.model).includes("off")){let u=t.model?`${t.provider}/${t.model}`:t.provider;console.log(s.red(`
603
607
  [${u} does not support disabling reasoning]`)),console.log(s.dim(`${r}
604
- `));return}let d=sf(c,t),f=await af(c,n,t);To(`Reasoning effort: ${Ia(d)}`,f)}a(dr,"handleReasoningEffortCommand");function Ta(e){console.log(s.dim(` /${e} `)+"Show current native reasoning effort"),console.log(s.dim(` /${e} none `)+"Disable reasoning when supported"),console.log(s.dim(` /${e} auto `)+"Clear the explicit effort override"),console.log(s.dim(` /${e} low `)+"Use low native reasoning effort"),console.log(s.dim(` /${e} medium `)+"Use medium native reasoning effort"),console.log(s.dim(` /${e} high `)+"Use high native reasoning effort"),console.log(s.dim(` /${e} xhigh `)+"Use extra-high native reasoning effort"),console.log(s.dim(` /${e} max `)+"Use maximum native reasoning effort")}a(Ta,"printReasoningEffortHelp");function ja(e){return e==="none"?"off":"auto"}a(ja,"resolveReasoningModeAfterEffort");function sf(e,o){let n=ja(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:Wa(n)}}a(sf,"resolveConfigAfterReasoningEffort");async function af(e,o,n){let t=ja(e),r=Wa(t),i=Tn({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),i}a(af,"applyReasoningEffort");async function lf(e,o,n){let t=Tn({agentMode:e});return o.setAgentMode?await o.setAgentMode(e):n.agentMode=e,t}a(lf,"applyAgentMode");function Pa(e,o,n,t){let r=Tn(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(Pa,"applyRepoIntelligenceRuntimeConfig");function cf(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(cf,"formatRepoIntelligenceSummary");function mr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(mr,"getRepoIntelInspectionWorkspaceRoot");function df(e){return e.status}a(df,"formatRepoIntelStatusLabel");function uf(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(uf,"formatRepoIntelActiveEngine");function Ma(e){console.log(s.bold(`
608
+ `));return}let d=sf(c,t),f=await af(c,n,t);To(`Reasoning effort: ${Ea(d)}`,f)}a(dr,"handleReasoningEffortCommand");function Ta(e){console.log(s.dim(` /${e} `)+"Show current native reasoning effort"),console.log(s.dim(` /${e} none `)+"Disable reasoning when supported"),console.log(s.dim(` /${e} auto `)+"Clear the explicit effort override"),console.log(s.dim(` /${e} low `)+"Use low native reasoning effort"),console.log(s.dim(` /${e} medium `)+"Use medium native reasoning effort"),console.log(s.dim(` /${e} high `)+"Use high native reasoning effort"),console.log(s.dim(` /${e} xhigh `)+"Use extra-high native reasoning effort"),console.log(s.dim(` /${e} max `)+"Use maximum native reasoning effort")}a(Ta,"printReasoningEffortHelp");function ja(e){return e==="none"?"off":"auto"}a(ja,"resolveReasoningModeAfterEffort");function sf(e,o){let n=ja(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:Wa(n)}}a(sf,"resolveConfigAfterReasoningEffort");async function af(e,o,n){let t=ja(e),r=Wa(t),i=Tn({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),i}a(af,"applyReasoningEffort");async function lf(e,o,n){let t=Tn({agentMode:e});return o.setAgentMode?await o.setAgentMode(e):n.agentMode=e,t}a(lf,"applyAgentMode");function Pa(e,o,n,t){let r=Tn(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(Pa,"applyRepoIntelligenceRuntimeConfig");function cf(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(cf,"formatRepoIntelligenceSummary");function mr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(mr,"getRepoIntelInspectionWorkspaceRoot");function df(e){return e.status}a(df,"formatRepoIntelStatusLabel");function uf(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(uf,"formatRepoIntelActiveEngine");function Ma(e){console.log(s.bold(`
605
609
  Repo Intelligence:
606
610
  `)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(uf(e))}`)),console.log(s.dim(` Status: ${s.cyan(df(e))}`)),console.log(s.dim(` Trace: ${s.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(s.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(s.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(s.yellow(" Fallback: light engine is currently active")),e.error&&console.log(s.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(s.yellow(` Warning: ${o}`));console.log()}a(Ma,"printRepoIntelStatus");function La(e,o){if(o.length!==0){console.log(s.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${s.cyan(`/${n.name}`)}${s.dim(t)} ${n.description}`)}console.log()}}a(La,"printCommandSection");function ff(e=[]){console.log(s.bold(`
607
611
  Available Commands:
@@ -621,14 +625,14 @@ Skills reloaded: ${r} skill(s)`)),console.log(s.dim("Updated skills will apply t
621
625
  Available Skills:
622
626
  `)),e.length===0){console.log(s.dim(" No skills found.")),console.log(s.dim(`
623
627
  Skills can be placed in:`)),console.log(s.dim(" - .kodax/skills/")),console.log(s.dim(" - ~/.kodax/skills/")),console.log(s.dim(" - ~/.agents/skills/"));return}let o=oo(),n=e.map(r=>{let i=o.get(r.name)!==void 0||Po(r.name)!==void 0;return{skill:r,invocation:i?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:i}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:i}=r,l=r.invocation.padEnd(t),c=i.argumentHint?` ${i.argumentHint}`:"",d=i.source==="builtin"?" [builtin]":i.source==="user"?" [user]":i.source==="plugin"?" [plugin]":"",f=r.commandNameTaken?" [command name exists]":"",u=i.description.length>50?i.description.slice(0,50)+"...":i.description;console.log(` ${s.cyan(l)}${s.dim(c)}${s.dim(d)}${s.dim(f)} ${s.dim(u)}`)}console.log(),console.log(s.dim(`Total: ${e.length} skills`)),console.log(s.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(s.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(yf,"printSkillsListPiMonoStyle");var ue=new ge;function Pn(e){ue.size>0||lr(ue,e)}a(Pn,"initCommandRegistry");function oo(e){return Pn(e),ue}a(oo,"getCommandRegistry");function vf(e,o){return oo(o).has(e)||!!Po(e)}a(vf,"isRegisteredUserCommand");function kf(){return ie()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(kf,"getActiveExtensionCommands");function Po(e){let o=ie(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(i=>i.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(Po,"getActiveExtensionCommand");function Sf(e){return e.usage??`/${e.name}`}a(Sf,"formatExtensionCommandUsage");function xf(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(xf,"formatExtensionDiagnosticValue");function bf(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${xf(t)}`);return o.length>0?o.join(" | "):void 0}a(bf,"formatExtensionDiagnosticMetadata");function eo(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(eo,"getExtensionRuntimeDiagnostics");function $f(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($f,"toExtensionInvocationRequest");function Af(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(Af,"formatDiagnosticParts");function Rn(e,o,n){Q({source:e,level:o,message:Af(n)})}a(Rn,"emitCommandDiagnostic");async function Rf(e,o,n,t){let r=ie();if(!r)return console.log(s.yellow(`
624
- [Extension runtime is not active for /${e.name}]`)),!1;let i;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);i=JSON.parse(c.lastText)}else i=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(()=>eo(r),"getDiagnostics"),logger:{debug:a((...c)=>Rn(`repl:extension-command:${e.name}`,"debug",c),"debug"),info:a((...c)=>Rn(`repl:extension-command:${e.name}`,"info",c),"info"),warn:a((...c)=>Rn(`repl:extension-command:${e.name}`,"warn",c),"warn"),error:a((...c)=>Rn(`repl:extension-command:${e.name}`,"error",c),"error")}});if(!i)return!0;i.message&&console.log(i.message);let l=$f(e,i);return l?{invocation:l}:!0}a(Rf,"executeExtensionCommand");async function Ua(e,o,n){return e.skillInvocation?!1:vf(e.command,o)?!0:(await n?.(o??process.cwd()))?.some(r=>[r.name,...r.aliases??[]].some(i=>i.trim().toLowerCase()===e.command))??!1}a(Ua,"isRegisteredHostCommand");async function Cv(e,o,n){let t=Cf(e);return!t||t.skillInvocation?null:await Ua(t,o,n)?t:await on(e,{workingDirectory:o??process.cwd(),projectRoot:o})?null:t}a(Cv,"parseHostCommand");function Cf(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),i=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:i,skillInvocation:{name:c}}:{command:"skill",args:i}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),i=c?[c,...i]:i}return{command:r,args:i}}a(Cf,"parseCommand");function _a(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(_a,"isCommandHelpRequest");async function ur(e,o){try{return Le(await e.execute(o))}catch(n){return{success:!1,message:`Command /${o.name} failed: ${n instanceof Error?n.message:String(n)}`}}}a(ur,"executeHostCommand");async function Ev(e,o,n,t,r){if(ue.size===0&&Pn(o.gitRoot),r!==void 0){let f=V(o.gitRoot);f.size===0&&(f=await Z(o.gitRoot));try{en(r,u=>f.has(u))}catch(u){if(!(u instanceof go))throw u;return console.log(s.yellow(`
628
+ [Extension runtime is not active for /${e.name}]`)),!1;let i;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);i=JSON.parse(c.lastText)}else i=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(()=>eo(r),"getDiagnostics"),logger:{debug:a((...c)=>Rn(`repl:extension-command:${e.name}`,"debug",c),"debug"),info:a((...c)=>Rn(`repl:extension-command:${e.name}`,"info",c),"info"),warn:a((...c)=>Rn(`repl:extension-command:${e.name}`,"warn",c),"warn"),error:a((...c)=>Rn(`repl:extension-command:${e.name}`,"error",c),"error")}});if(!i)return!0;i.message&&console.log(i.message);let l=$f(e,i);return l?{invocation:l}:!0}a(Rf,"executeExtensionCommand");async function Ua(e,o,n){return e.skillInvocation?!1:vf(e.command,o)?!0:(await n?.(o??process.cwd()))?.some(r=>[r.name,...r.aliases??[]].some(i=>i.trim().toLowerCase()===e.command))??!1}a(Ua,"isRegisteredHostCommand");async function Cv(e,o,n){let t=Cf(e);return!t||t.skillInvocation?null:await Ua(t,o,n)?t:await on(e,{workingDirectory:o??process.cwd(),projectRoot:o})?null:t}a(Cv,"parseHostCommand");function Cf(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),i=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:i,skillInvocation:{name:c}}:{command:"skill",args:i}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),i=c?[c,...i]:i}return{command:r,args:i}}a(Cf,"parseCommand");function _a(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(_a,"isCommandHelpRequest");async function ur(e,o){try{return Le(await e.execute(o))}catch(n){return{success:!1,message:`Command /${o.name} failed: ${n instanceof Error?n.message:String(n)}`}}}a(ur,"executeHostCommand");async function Iv(e,o,n,t,r){if(ue.size===0&&Pn(o.gitRoot),r!==void 0){let f=V(o.gitRoot);f.size===0&&(f=await Z(o.gitRoot));try{en(r,u=>f.has(u))}catch(u){if(!(u instanceof go))throw u;return console.log(s.yellow(`
625
629
  ${u.message}
626
630
  `)),!1}}if(e.skillInvocation)return await fr({command:e.skillInvocation.name,args:e.args},o,n);let i=ue.get(e.command);if(i){if(i.userInvocable===!1)return console.log(s.yellow(`
627
- [Command /${i.name} is not user-invocable]`)),!1;if(_a(e.args))return pr(e.command,e.args.slice(1)),!0;if(n.commandClient&&(i.source==="extension"||i.source==="prompt"))return ur(n.commandClient,{sessionId:o.sessionId,inputId:En(),name:e.command,args:e.args});try{let f=await i.handler(e.args,o,n,t);return f&&typeof f=="object"?f:!0}catch(f){return console.log(s.red(`
628
- [Command failed: ${f instanceof Error?f.message:String(f)}]`)),!1}}let l=Po(e.command);if(l){if(_a(e.args))return pr(e.command),!0;try{return n.commandClient?ur(n.commandClient,{sessionId:o.sessionId,inputId:En(),name:e.command,args:e.args}):await Rf(l,e.args,o,n)}catch(f){return console.log(s.red(`
629
- [Extension command failed: ${f instanceof Error?f.message:String(f)}]`)),!1}}if(n.commandClient)return ur(n.commandClient,{sessionId:o.sessionId,inputId:En(),name:e.command,args:e.args});let c=await Ef(e,o);if(c)return await fr({command:c.skill.name,args:c.args},o,n);let d=await Fa(e.command,o);return d?await fr({command:d.name,args:e.args},o,n):(console.log(s.yellow(`
630
- [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(Ev,"executeCommand");async function Ef(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Fa(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(Ef,"resolveNamespacedDirectSkillCommand");async function Fa(e,o){let n=V(o.gitRoot);return n.size===0&&(n=await Z(o.gitRoot)),n.get(e)}a(Fa,"resolveDirectSkillCommand");async function fr(e,o,n){let t=V(o.gitRoot),r=e.command,i=e.args.join(" ");t.size===0&&(t=await Z(o.gitRoot));try{let l=t.get(r);if(!l)return console.log(s.red(`
631
+ [Command /${i.name} is not user-invocable]`)),!1;if(_a(e.args))return pr(e.command,e.args.slice(1)),!0;if(n.commandClient&&(i.source==="extension"||i.source==="prompt"))return ur(n.commandClient,{sessionId:o.sessionId,inputId:In(),name:e.command,args:e.args});try{let f=await i.handler(e.args,o,n,t);return f&&typeof f=="object"?f:!0}catch(f){return console.log(s.red(`
632
+ [Command failed: ${f instanceof Error?f.message:String(f)}]`)),!1}}let l=Po(e.command);if(l){if(_a(e.args))return pr(e.command),!0;try{return n.commandClient?ur(n.commandClient,{sessionId:o.sessionId,inputId:In(),name:e.command,args:e.args}):await Rf(l,e.args,o,n)}catch(f){return console.log(s.red(`
633
+ [Extension command failed: ${f instanceof Error?f.message:String(f)}]`)),!1}}if(n.commandClient)return ur(n.commandClient,{sessionId:o.sessionId,inputId:In(),name:e.command,args:e.args});let c=await If(e,o);if(c)return await fr({command:c.skill.name,args:c.args},o,n);let d=await Fa(e.command,o);return d?await fr({command:d.name,args:e.args},o,n):(console.log(s.yellow(`
634
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(Iv,"executeCommand");async function If(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Fa(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(If,"resolveNamespacedDirectSkillCommand");async function Fa(e,o){let n=V(o.gitRoot);return n.size===0&&(n=await Z(o.gitRoot)),n.get(e)}a(Fa,"resolveDirectSkillCommand");async function fr(e,o,n){let t=V(o.gitRoot),r=e.command,i=e.args.join(" ");t.size===0&&(t=await Z(o.gitRoot));try{let l=t.get(r);if(!l)return console.log(s.red(`
631
635
  [Skill not found: ${r}]`)),!1;console.log(s.cyan(`
632
636
  [Invoking skill: ${r}]`)),l.argumentHint&&console.log(s.dim(`Arguments: ${i||"(none)"}`)),console.log();let c=await it(r,i,{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(s.green(`Skill activated: ${r}`)),console.log(s.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:c}):!1}catch(l){return console.log(s.red(`
633
- [Error invoking skill: ${l instanceof Error?l.message:String(l)}]`)),!1}}a(fr,"executeSkillCommand");var Mn=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),f=c.display.toLowerCase().startsWith(r);return d&&!f?-1:!d&&f?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 Z(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 If}from"node:child_process";import*as no from"node:path";import{promisify as Tf}from"node:util";var Ha=Tf(If);function Pf(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(Pf,"pathFromPorcelainLine");async function Ba(e,o=10){try{await Oe({cwd:e});let[{stdout:n},{stdout:t}]=await Promise.all([Ha("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0}),Ha("git status --porcelain=v1 -uall",{cwd:e,windowsHide:!0})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
634
- `)){if(!c.trim())continue;let d=Pf(c);if(!d)continue;let f=no.resolve(r,d),u=no.relative(e,f).split(no.sep).join("/");if(!(!u||u.startsWith("..")||l.has(u))&&(l.add(u),i.push(u),i.length>=o))break}return i}catch{return[]}}a(Ba,"getRecentWorkingSetFiles");function to(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(to,"findCommandSlashIndex");var gr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Ba){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 i=t.slice(r+1),l=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),f=d===-1?c:Mo.join(c,i.slice(0,d)),u=d===-1?i:i.slice(d+1);try{let y=(await this.readdir(f)).filter(k=>k.toLowerCase().startsWith(u.toLowerCase()));for(let k of y){let b=Mo.join(f,k),v=await this.isDirectory(b),A=d===-1?k:i.slice(0,d+1)+k;l.push({text:"@"+A+(v?"/":""),display:k+(v?"/":""),description:v?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),y=new Set(l.map(v=>v.text)),k=u.toLowerCase(),b=[];for(let v of m){if(u&&!Mo.basename(v).toLowerCase().startsWith(k))continue;let A="@"+v;y.has(A)||(y.add(A),b.push({text:A,display:v,description:"recent",type:"file"}))}l.unshift(...b)}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=>{Ln.readdir(o,(i,l)=>{i?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{Ln.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},wr=class{static{a(this,"CommandCompleter")}readHostCommands;commands;constructor(o){this.readHostCommands=o,this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of oo().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=ie();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=to(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=to(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 i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let f of d.aliases)f!==c&&this.fuzzyMatch(i,f)&&l.push({text:"/"+f,display:"/"+f,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function Bv(e,o,n){let t=new gr(e),r=new Mn,i=new wr(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 f=[];if(d){let m=await Mf(l,l.length,n);f.push(...m)}if(d&&r.canComplete(l,l.length)){let m=await r.getCompletions(l,l.length);f.push(...m)}if(d&&i.canComplete(l,l.length)){let m=await i.getCompletions(l,l.length);f.push(...m)}if(c&&t.canComplete(l,l.length)){let m=await t.getCompletions(l,l.length);f.push(...m)}return[f.map(m=>Lf(l,m)),l]}}a(Bv,"createCompleter");async function Mf(e,o,n){let{ArgumentCompleter:t}=await import("./argument-completer-OGCXKTRQ.js"),r=new t(()=>n);return r.canComplete(e,o)?r.getCompletions(e,o):[]}a(Mf,"getArgumentCompletions");function Lf(e,o){if(o.type!=="argument")return o.text;let n=to(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(Lf,"formatReadlineCompletion");import{existsSync as _n,readdirSync as za,readFileSync as Ga}from"node:fs";import{join as Nn}from"node:path";var _f=[{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"}],ro=[{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 Nf(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Ne(n))try{return Ue(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return We().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Nf,"getModelArgs");var hr=[{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"}],yr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Wf=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],Of=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],Ka=[{name:"ama",description:"Use AMA agent mode",type:"enum"}],Df=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],jf=[{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"}],Uf=[{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 Ff(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Uf: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(Ff,"getLearnArgs");var Hf=[{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"}],Bf=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Kf=[{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"}],qf=[{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"}],zf=[{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"}],Gf=[{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"}],Xf=[{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"}],Vf=[{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"}],Yf=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Qf=new Set(["show","delete","rerun","save","rename","revise"]),Zf=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],em=[{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"}],om=[{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"}],nm=[".workflow.json",".ts",".mjs",".js"];function Wn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Wn,"isWorkflowRunEntryName");function tm(e,o){let n=Nn(e,"workflow-metadata.json");if(_n(n))try{let r=JSON.parse(Ga(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&Wn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Wn(t.trim())?t.trim():void 0}a(tm,"readWorkflowRunDisplayName");function rm(){let e=Xe(process.cwd()).key,o=O("workflow-runs",e);if(!_n(o))return[];let n=[];for(let t of za(o)){if(!Wn(t))continue;let r=Nn(o,t,"run.json");if(_n(r))try{let i=JSON.parse(Ga(r,"utf8")),l=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?",d=typeof i.endedAt=="number"?i.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let f=tm(Nn(o,t),i);f&&f!==t&&n.push({arg:{name:f,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(rm,"getPersistedWorkflowRunIdArgs");function On(e){return Qf.has(e)?rm():[]}a(On,"getWorkflowRunIdArgs");function im(e){for(let o of nm)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Wn(n)?n:void 0}}a(im,"savedWorkflowNameFromFile");function Lo(e={}){let o=[{path:O("workflows"),source:"personal"},{path:Nn(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(_n(t.path))try{for(let r of za(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=im(r);i&&n.set(i,{name:i,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(Lo,"getSavedWorkflowNameArgs");function sm(){let e=new Map;for(let o of On("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Lo()){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(sm,"getWorkflowRerunArgs");function vr(e){let o=new Map;for(let n of On(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Lo({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(vr,"getWorkflowRunOrSavedNameArgs");function qa(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Lo({generatedOnly:!0}):o.has("--run")?On("delete"):vr("delete")}a(qa,"getWorkflowDeleteTargetArgs");function am(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...Jf,...Bo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Lo()];if(n==="rerun"&&t<=2)return sm();if(n==="rename"&&t<=2)return vr("rename");if(n==="delete"&&t<=2)return[...om,...qa(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return qa(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...vr("revise")];if(e[1]==="--replace"&&t<=3)return Lo()}return Yf.has(n)&&t<=2?On(n):n==="runs"&&t<=2?Zf:n==="prune"&&t<=2?em:[]}a(am,"getWorkflowArgs");function lm(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?zf:t>2?[]:n==="mode"?Gf:n==="trace"?Xf:[]}a(lm,"getRepoIntelArgs");var cm=new Map([["mode",_f],["thinking",ro],["think",ro],["t",ro],["reasoning",ro],["reason",ro],["effort",ro],["status",hr],["info",hr],["ctx",hr],["mcp",Wf],["fallback",Of],["agent-mode",Ka],["am",Ka],["stall-log",Df],["memory",jf],["goal",Hf],["paste",Bf],["review",Kf],["agents",qf],["delete",yr],["rm",yr],["del",yr]]),dm=new Set(["model","m","provider"]),um=new Set(["repo-intel"]),fm=new Set(["repointel","ri"]),mm=new Set(["workflow"]),pm=new Set(["learn"]);function kr(e,o,n=[]){let t=e.toLowerCase();return dm.has(t)?Nf(o):um.has(t)?lm(n):fm.has(t)?n.length<=1?Vf:[]:mm.has(t)?am(n):pm.has(t)?Ff(n):cm.get(t)??[]}a(kr,"getCommandArguments");async function gm(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 i=n.slice(0,r)||e.selection().provider;return(t.find(l=>l.name===i)?.models??[]).filter(l=>l.toLowerCase().includes(n.slice(r+1).toLowerCase())).map(l=>({name:`${n.slice(0,r)}/${l}`,description:l,type:"enum"}))}a(gm,"hostSettingArguments");var Sr=class{static{a(this,"ArgumentCompleter")}hostSource;constructor(o){this.hostSource=o}canComplete(o,n){let t=o.slice(0,n),r=to(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return kr(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=to(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),f=d?d.split(/\s+/):[""],u=f.length-1,m=f[u]??"",y=m.toLowerCase(),k=this.hostSource?.(),b=(k?await gm(k,c,m):void 0)??kr(c,m,f);if(!b||b.length===0)return[];let v=new Set(f.slice(0,-1).map(S=>S.toLowerCase()));return b.filter(S=>!v.has(S.name.toLowerCase())).filter(S=>!y||S.name.includes("/")?!0:S.name.toLowerCase().includes(y)).map(S=>({text:S.name,display:S.name,description:S.description,type:"argument"})).sort((S,h)=>{if(!y)return 0;let L=S.display.toLowerCase().startsWith(y),g=h.display.toLowerCase().startsWith(y);return L&&!g?-1:!L&&g?1:S.display.length-h.display.length})}};function nk(){return new Sr}a(nk,"createArgumentCompleter");export{ko as a,Js as b,lt as c,B as d,fg as e,gs as f,mg as g,se as h,ys as i,vs as j,kg as k,Xl as l,lc as m,Sg as n,tn as o,ut as p,xg as q,Es as r,bg as s,$g as t,Ag as u,zo as v,Va as w,Ja as x,be as y,Ya as z,Pi as A,Mi as B,fo as C,$e as D,Ae as E,He as F,Ui as G,Fi as H,Hi as I,Em as J,Vi as K,Ji as L,Zn as M,Qi as N,os as O,xl as P,ns as Q,Cl as R,yp as S,Hp as T,Il as U,rt as V,Bp as W,Kp as X,go as Y,Vp as Z,cs as _,Jp as $,Yp as aa,Qp as ba,tg as ca,rg as da,ps as ea,sn as fa,ew as ga,ed as ha,ow as ia,nw as ja,tw as ka,rw as la,Hs as ma,St as na,Bs as oa,Xe as pa,id as qa,dw as ra,Pe as sa,Nd as ta,Wd as ua,ua as va,Ww as wa,Ow as xa,Xd as ya,Eh as za,Ih as Aa,Th as Ba,uu as Ca,fu as Da,pu as Ea,ha as Fa,bu as Ga,ry as Ha,iy as Ia,sy as Ja,ay as Ka,ly as La,Aa as Ma,py as Na,gy as Oa,Ca as Pa,wy as Qa,rr as Ra,zu as Sa,Ly as Ta,Ea as Ua,oo as Va,vf as Wa,Ua as Xa,Cv as Ya,Cf as Za,Ev as _a,Mn as $a,Sr as ab,nk as bb,to as cb,gr as db,wr as eb,Bv as fb};
637
+ [Error invoking skill: ${l instanceof Error?l.message:String(l)}]`)),!1}}a(fr,"executeSkillCommand");var Mn=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),f=c.display.toLowerCase().startsWith(r);return d&&!f?-1:!d&&f?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 Z(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 Ef}from"node:child_process";import*as no from"node:path";import{promisify as Tf}from"node:util";var Ha=Tf(Ef);function Pf(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(Pf,"pathFromPorcelainLine");async function Ba(e,o=10){try{await Oe({cwd:e});let[{stdout:n},{stdout:t}]=await Promise.all([Ha("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0}),Ha("git status --porcelain=v1 -uall",{cwd:e,windowsHide:!0})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
638
+ `)){if(!c.trim())continue;let d=Pf(c);if(!d)continue;let f=no.resolve(r,d),u=no.relative(e,f).split(no.sep).join("/");if(!(!u||u.startsWith("..")||l.has(u))&&(l.add(u),i.push(u),i.length>=o))break}return i}catch{return[]}}a(Ba,"getRecentWorkingSetFiles");function to(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(to,"findCommandSlashIndex");var gr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Ba){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 i=t.slice(r+1),l=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),f=d===-1?c:Mo.join(c,i.slice(0,d)),u=d===-1?i:i.slice(d+1);try{let y=(await this.readdir(f)).filter(k=>k.toLowerCase().startsWith(u.toLowerCase()));for(let k of y){let b=Mo.join(f,k),v=await this.isDirectory(b),A=d===-1?k:i.slice(0,d+1)+k;l.push({text:"@"+A+(v?"/":""),display:k+(v?"/":""),description:v?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),y=new Set(l.map(v=>v.text)),k=u.toLowerCase(),b=[];for(let v of m){if(u&&!Mo.basename(v).toLowerCase().startsWith(k))continue;let A="@"+v;y.has(A)||(y.add(A),b.push({text:A,display:v,description:"recent",type:"file"}))}l.unshift(...b)}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=>{Ln.readdir(o,(i,l)=>{i?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{Ln.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},wr=class{static{a(this,"CommandCompleter")}readHostCommands;commands;constructor(o){this.readHostCommands=o,this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of oo().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=ie();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=to(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=to(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 i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let f of d.aliases)f!==c&&this.fuzzyMatch(i,f)&&l.push({text:"/"+f,display:"/"+f,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function Bv(e,o,n){let t=new gr(e),r=new Mn,i=new wr(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 f=[];if(d){let m=await Mf(l,l.length,n);f.push(...m)}if(d&&r.canComplete(l,l.length)){let m=await r.getCompletions(l,l.length);f.push(...m)}if(d&&i.canComplete(l,l.length)){let m=await i.getCompletions(l,l.length);f.push(...m)}if(c&&t.canComplete(l,l.length)){let m=await t.getCompletions(l,l.length);f.push(...m)}return[f.map(m=>Lf(l,m)),l]}}a(Bv,"createCompleter");async function Mf(e,o,n){let{ArgumentCompleter:t}=await import("./argument-completer-VNKHT4X4.js"),r=new t(()=>n);return r.canComplete(e,o)?r.getCompletions(e,o):[]}a(Mf,"getArgumentCompletions");function Lf(e,o){if(o.type!=="argument")return o.text;let n=to(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(Lf,"formatReadlineCompletion");import{existsSync as _n,readdirSync as za,readFileSync as Ga}from"node:fs";import{join as Nn}from"node:path";var _f=[{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"}],ro=[{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 Nf(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Ne(n))try{return Ue(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return We().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Nf,"getModelArgs");var hr=[{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"}],yr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Wf=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],Of=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],Ka=[{name:"ama",description:"Use AMA agent mode",type:"enum"}],Df=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],jf=[{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"}],Uf=[{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 Ff(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Uf: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(Ff,"getLearnArgs");var Hf=[{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"}],Bf=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Kf=[{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"}],qf=[{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"}],zf=[{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"}],Gf=[{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"}],Xf=[{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"}],Vf=[{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"}],Yf=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Qf=new Set(["show","delete","rerun","save","rename","revise"]),Zf=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],em=[{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"}],om=[{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"}],nm=[".workflow.json",".ts",".mjs",".js"];function Wn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Wn,"isWorkflowRunEntryName");function tm(e,o){let n=Nn(e,"workflow-metadata.json");if(_n(n))try{let r=JSON.parse(Ga(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&Wn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Wn(t.trim())?t.trim():void 0}a(tm,"readWorkflowRunDisplayName");function rm(){let e=Xe(process.cwd()).key,o=O("workflow-runs",e);if(!_n(o))return[];let n=[];for(let t of za(o)){if(!Wn(t))continue;let r=Nn(o,t,"run.json");if(_n(r))try{let i=JSON.parse(Ga(r,"utf8")),l=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?",d=typeof i.endedAt=="number"?i.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let f=tm(Nn(o,t),i);f&&f!==t&&n.push({arg:{name:f,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(rm,"getPersistedWorkflowRunIdArgs");function On(e){return Qf.has(e)?rm():[]}a(On,"getWorkflowRunIdArgs");function im(e){for(let o of nm)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Wn(n)?n:void 0}}a(im,"savedWorkflowNameFromFile");function Lo(e={}){let o=[{path:O("workflows"),source:"personal"},{path:Nn(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(_n(t.path))try{for(let r of za(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=im(r);i&&n.set(i,{name:i,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(Lo,"getSavedWorkflowNameArgs");function sm(){let e=new Map;for(let o of On("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Lo()){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(sm,"getWorkflowRerunArgs");function vr(e){let o=new Map;for(let n of On(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Lo({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(vr,"getWorkflowRunOrSavedNameArgs");function qa(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Lo({generatedOnly:!0}):o.has("--run")?On("delete"):vr("delete")}a(qa,"getWorkflowDeleteTargetArgs");function am(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...Jf,...Bo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Lo()];if(n==="rerun"&&t<=2)return sm();if(n==="rename"&&t<=2)return vr("rename");if(n==="delete"&&t<=2)return[...om,...qa(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return qa(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...vr("revise")];if(e[1]==="--replace"&&t<=3)return Lo()}return Yf.has(n)&&t<=2?On(n):n==="runs"&&t<=2?Zf:n==="prune"&&t<=2?em:[]}a(am,"getWorkflowArgs");function lm(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?zf:t>2?[]:n==="mode"?Gf:n==="trace"?Xf:[]}a(lm,"getRepoIntelArgs");var cm=new Map([["mode",_f],["thinking",ro],["think",ro],["t",ro],["reasoning",ro],["reason",ro],["effort",ro],["status",hr],["info",hr],["ctx",hr],["mcp",Wf],["fallback",Of],["agent-mode",Ka],["am",Ka],["stall-log",Df],["memory",jf],["goal",Hf],["paste",Bf],["review",Kf],["agents",qf],["delete",yr],["rm",yr],["del",yr]]),dm=new Set(["model","m","provider"]),um=new Set(["repo-intel"]),fm=new Set(["repointel","ri"]),mm=new Set(["workflow"]),pm=new Set(["learn"]);function kr(e,o,n=[]){let t=e.toLowerCase();return dm.has(t)?Nf(o):um.has(t)?lm(n):fm.has(t)?n.length<=1?Vf:[]:mm.has(t)?am(n):pm.has(t)?Ff(n):cm.get(t)??[]}a(kr,"getCommandArguments");async function gm(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 i=n.slice(0,r)||e.selection().provider;return(t.find(l=>l.name===i)?.models??[]).filter(l=>l.toLowerCase().includes(n.slice(r+1).toLowerCase())).map(l=>({name:`${n.slice(0,r)}/${l}`,description:l,type:"enum"}))}a(gm,"hostSettingArguments");var Sr=class{static{a(this,"ArgumentCompleter")}hostSource;constructor(o){this.hostSource=o}canComplete(o,n){let t=o.slice(0,n),r=to(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return kr(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=to(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),f=d?d.split(/\s+/):[""],u=f.length-1,m=f[u]??"",y=m.toLowerCase(),k=this.hostSource?.(),b=(k?await gm(k,c,m):void 0)??kr(c,m,f);if(!b||b.length===0)return[];let v=new Set(f.slice(0,-1).map(S=>S.toLowerCase()));return b.filter(S=>!v.has(S.name.toLowerCase())).filter(S=>!y||S.name.includes("/")?!0:S.name.toLowerCase().includes(y)).map(S=>({text:S.name,display:S.name,description:S.description,type:"argument"})).sort((S,h)=>{if(!y)return 0;let L=S.display.toLowerCase().startsWith(y),g=h.display.toLowerCase().startsWith(y);return L&&!g?-1:!L&&g?1:S.display.length-h.display.length})}};function nk(){return new Sr}a(nk,"createArgumentCompleter");export{ko as a,Js as b,lt as c,B as d,fg as e,gs as f,mg as g,se as h,ys as i,vs as j,kg as k,Xl as l,lc as m,Sg as n,tn as o,ut as p,xg as q,Is as r,bg as s,$g as t,Ag as u,zo as v,Va as w,Ja as x,be as y,Ya as z,Pi as A,Mi as B,fo as C,$e as D,Ae as E,He as F,Ui as G,Fi as H,Hi as I,Im as J,Vi as K,Ji as L,Zn as M,Qi as N,os as O,xl as P,ns as Q,Cl as R,yp as S,Hp as T,El as U,rt as V,Bp as W,Kp as X,go as Y,Vp as Z,cs as _,Jp as $,Yp as aa,Qp as ba,tg as ca,rg as da,ps as ea,sn as fa,ew as ga,ed as ha,ow as ia,nw as ja,tw as ka,rw as la,Hs as ma,St as na,Bs as oa,Xe as pa,id as qa,dw as ra,Pe as sa,Nd as ta,Wd as ua,ua as va,Ww as wa,Ow as xa,Xd as ya,Ih as za,Eh as Aa,Th as Ba,uu as Ca,fu as Da,pu as Ea,ha as Fa,bu as Ga,ry as Ha,iy as Ia,sy as Ja,ay as Ka,ly as La,Aa as Ma,py as Na,gy as Oa,Ca as Pa,wy as Qa,rr as Ra,zu as Sa,Ly as Ta,Ia as Ua,oo as Va,vf as Wa,Ua as Xa,Cv as Ya,Cf as Za,Iv as _a,Mn as $a,Sr as ab,nk as bb,to as cb,gr as db,wr as eb,Bv as fb};