@kodax-ai/kodax 0.7.78 → 0.7.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +3475 -3197
  2. package/README.md +346 -275
  3. package/README_CN.md +274 -214
  4. package/config-templates/config.example.jsonc +11 -1
  5. package/config-templates/integrations/a2a.example.jsonc +23 -7
  6. package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +2 -1
  7. package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +1 -0
  8. package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +4 -3
  9. package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +1 -0
  10. package/dist/builtin/skill-creator/scripts/compare-runs.js +4 -3
  11. package/dist/builtin/skill-creator/scripts/generate-review.js +2 -1
  12. package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +1 -0
  13. package/dist/builtin/skill-creator/scripts/grade-evals.js +4 -3
  14. package/dist/builtin/skill-creator/scripts/improve-description.js +2 -1
  15. package/dist/builtin/skill-creator/scripts/init-skill.d.ts +1 -0
  16. package/dist/builtin/skill-creator/scripts/init-skill.js +4 -3
  17. package/dist/builtin/skill-creator/scripts/install-skill.d.ts +1 -0
  18. package/dist/builtin/skill-creator/scripts/install-skill.js +4 -3
  19. package/dist/builtin/skill-creator/scripts/package-skill.d.ts +1 -0
  20. package/dist/builtin/skill-creator/scripts/package-skill.js +4 -3
  21. package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +1 -0
  22. package/dist/builtin/skill-creator/scripts/quick-validate.js +4 -3
  23. package/dist/builtin/skill-creator/scripts/run-eval.d.ts +1 -0
  24. package/dist/builtin/skill-creator/scripts/run-eval.js +4 -3
  25. package/dist/builtin/skill-creator/scripts/run-loop.js +2 -1
  26. package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +2 -1
  27. package/dist/builtin/skill-creator/scripts/utils.d.ts +3 -0
  28. package/dist/builtin/skill-creator/scripts/utils.js +5 -1
  29. package/dist/chunks/{agent-ASP4MS3X.js → agent-V4AC5JZD.js} +1 -1
  30. package/dist/chunks/argument-completer-ZPC2MLES.js +2 -0
  31. package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-67THZRM6.js} +1 -1
  32. package/dist/chunks/chunk-6GVQDQTQ.js +292 -0
  33. package/dist/chunks/{chunk-TQDBTTIM.js → chunk-B6UY3VHV.js} +40 -40
  34. package/dist/chunks/{chunk-7OEBJGHK.js → chunk-BBOVVDQJ.js} +1 -1
  35. package/dist/chunks/chunk-CR2IF7VF.js +30 -0
  36. package/dist/chunks/{chunk-UID7BLAB.js → chunk-CXHEZY5G.js} +1 -1
  37. package/dist/chunks/chunk-EDZ4QILG.js +266 -0
  38. package/dist/chunks/chunk-GEECPO2H.js +218 -0
  39. package/dist/chunks/chunk-H5LLM7DB.js +89 -0
  40. package/dist/chunks/chunk-KLWP7POA.js +467 -0
  41. package/dist/chunks/{chunk-2CFHBKRE.js → chunk-M4N2JZTZ.js} +2 -2
  42. package/dist/chunks/{chunk-YAZQTC2L.js → chunk-OWQT3FTE.js} +1 -1
  43. package/dist/chunks/chunk-Q4M7DJOD.js +319 -0
  44. package/dist/chunks/{chunk-6FOJVETH.js → chunk-QCZLCLFL.js} +7 -7
  45. package/dist/chunks/chunk-RQPMGRTR.js +810 -0
  46. package/dist/chunks/chunk-SG6P4SZS.js +123 -0
  47. package/dist/chunks/chunk-TSTVAU5E.js +386 -0
  48. package/dist/chunks/chunk-ZCZZUE5E.js +662 -0
  49. package/dist/chunks/compaction-config-AEUGVROL.js +2 -0
  50. package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-K3ZGEN5N.js} +1 -1
  51. package/dist/chunks/dist-GFJFRPAV.js +2 -0
  52. package/dist/chunks/{dist-BFT5YIGU.js → dist-JMO47GJV.js} +1 -1
  53. package/dist/chunks/host-23K2Q6RZ.js +2 -0
  54. package/dist/chunks/run-manager-PGIR6ITA.js +2 -0
  55. package/dist/chunks/{utils-SID4HW2Q.js → utils-6LEKJPQN.js} +1 -1
  56. package/dist/index.d.ts +20 -20
  57. package/dist/index.js +2 -2
  58. package/dist/kodax_bootstrap.js +2 -1
  59. package/dist/kodax_cli.js +1816 -1458
  60. package/dist/kodax_resume.js +570 -34
  61. package/dist/provider-capabilities.json +85 -50
  62. package/dist/runtime-worker.js +1713 -1361
  63. package/dist/sandbox-workspace-session.js +285 -19
  64. package/dist/sdk-a2a.d.ts +19 -13
  65. package/dist/sdk-a2a.js +8 -8
  66. package/dist/sdk-agent.d.ts +73 -141
  67. package/dist/sdk-agent.js +1 -1
  68. package/dist/sdk-coding.d.ts +29 -60
  69. package/dist/sdk-coding.js +1 -1
  70. package/dist/sdk-experimental-memory.d.ts +3 -3
  71. package/dist/sdk-experimental-memory.js +1 -1
  72. package/dist/sdk-llm.d.ts +7 -7
  73. package/dist/sdk-llm.js +1 -1
  74. package/dist/sdk-mcp.d.ts +1 -1
  75. package/dist/sdk-mcp.js +1 -1
  76. package/dist/sdk-media.d.ts +1 -1
  77. package/dist/sdk-media.js +1 -1
  78. package/dist/sdk-repl.d.ts +25 -26
  79. package/dist/sdk-repl.js +2 -2
  80. package/dist/sdk-runtime.d.ts +227 -31
  81. package/dist/sdk-runtime.js +1 -1
  82. package/dist/sdk-sandbox.js +1 -1
  83. package/dist/sdk-session.d.ts +8 -8
  84. package/dist/sdk-session.js +1 -1
  85. package/dist/sdk-skills.js +1 -1
  86. package/dist/semantic-worker.js +283 -18
  87. package/dist/types-chunks/{base.d-4e74xDdy.d.ts → base.d-DxG0m09Z.d.ts} +1 -1
  88. package/dist/types-chunks/{bash-prefix-extractor.d-uAe2Oqda.d.ts → bash-prefix-extractor.d-CNSidpmv.d.ts} +28 -7
  89. package/dist/types-chunks/{capability-learning.d-CVsdHw4j.d.ts → capability-learning.d-iPSiAmc_.d.ts} +1 -1
  90. package/dist/types-chunks/{capsule.d-BlSv9l3V.d.ts → capsule.d-B3q98pLQ.d.ts} +9 -7
  91. package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-RGV7Pjv9.d.ts} +328 -3
  92. package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-1NLSFTyN.d.ts} +126 -52
  93. package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-BAegI14A.d.ts} +16 -3
  94. package/dist/types-chunks/{oauth-login.d-Bgb4rdLN.d.ts → oauth-login.d-6i-vidxv.d.ts} +6 -2
  95. package/dist/types-chunks/{public-api.d-B3AohsxN.d.ts → public-api.d-BpJhHoa7.d.ts} +334 -25
  96. package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-CZ12Ow3X.d.ts} +5 -5
  97. package/dist/types-chunks/{resolver.d-iAQ9ocLB.d.ts → resolver.d-C9IW4fmU.d.ts} +5 -2
  98. package/dist/types-chunks/{run-manager.d-D1twIhF9.d.ts → run-manager.d-CX3AUocA.d.ts} +1 -1
  99. package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-B3cfJKqF.d.ts} +3 -3
  100. package/dist/types-chunks/{side-query.d-DTuLPcC5.d.ts → side-query.d-CP1LiRiH.d.ts} +8 -2
  101. package/dist/types-chunks/{types-D3g6XUQr.d.ts → types-Bf3Y3mW-.d.ts} +1 -1
  102. package/dist/types-chunks/{types.d-BH0ZkTGf.d.ts → types.d-BZ9oXvTV.d.ts} +2 -2
  103. package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-C0_rn--1.d.ts} +4 -4
  104. package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
  105. package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-CGpHavsU.d.ts} +14 -6
  106. package/docs/SDK_EMBEDDER_GUIDE.md +1144 -598
  107. package/package.json +4 -1
  108. package/dist/chunks/argument-completer-JYQ7FX3W.js +0 -2
  109. package/dist/chunks/chunk-35PPHOQ2.js +0 -292
  110. package/dist/chunks/chunk-43QNNDHR.js +0 -29
  111. package/dist/chunks/chunk-5GO6FH7L.js +0 -458
  112. package/dist/chunks/chunk-5NDCSFOP.js +0 -78
  113. package/dist/chunks/chunk-6XM4B6K2.js +0 -48
  114. package/dist/chunks/chunk-6YZUE6NC.js +0 -240
  115. package/dist/chunks/chunk-KQLQYHWU.js +0 -386
  116. package/dist/chunks/chunk-NXO6GWSY.js +0 -46
  117. package/dist/chunks/chunk-T2XZTLYE.js +0 -316
  118. package/dist/chunks/chunk-VAT2QYXM.js +0 -765
  119. package/dist/chunks/chunk-YVRYHC4C.js +0 -655
  120. package/dist/chunks/compaction-config-BQSSIWK5.js +0 -2
  121. package/dist/chunks/dist-PCFE24YP.js +0 -2
  122. package/dist/chunks/host-UTFXCYYM.js +0 -2
  123. package/dist/chunks/run-manager-PJU3WIFJ.js +0 -2
  124. package/dist/types-chunks/guardrail.d-BRE_ErEj.d.ts +0 -156
@@ -0,0 +1,662 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{A as qe,C as Vs,D as Xs,E as Ys,F as ht,I as sn,K as Js,O as Zs,Q as an,Y as Re,ba as Qs,c as Hs,d as Bs,da as ei,ea as oi,f as Gs,fa as ni,h as pt,i as gt,m as Ks,n as zs,y as qs}from"./chunk-EDZ4QILG.js";import{a as ti}from"./chunk-BBOVVDQJ.js";import{Ja as Ds,Ka as Us,Oa as js,Qa as Fs}from"./chunk-KLWP7POA.js";import{Ta as Ws,Ua as Ns,Z as Ts}from"./chunk-B6UY3VHV.js";import{i as on}from"./chunk-CXHEZY5G.js";import{A as Os,D as Ae,J as ze,m as nn,n as tn,o as Ke,q as yo,r as rn,s as Ps,t as _s,v as Ls,w as mt,x as Ms,y as vo}from"./chunk-QCZLCLFL.js";import{$b as en,Fb as bs,Hb as $s,Ib as As,Lb as ut,Ma as Qo,R as xs,Sc as Es,Uc as ae,_b as ft,cc as Rs,hd as Cs,jd as Is}from"./chunk-TSTVAU5E.js";import{C as is,Pa as lt,Qa as Fe,Ra as He,ka as wo,ma as it,ya as at}from"./chunk-SG6P4SZS.js";import{Da as as,Ea as ls,Fa as ct,Ld as Ss,fd as Ge,gd as ks,kd as dt,ud as Zo,yc as vs}from"./chunk-RQPMGRTR.js";import{$a as $e,J as fs,K as ms,L as ps,X as Yo,Z as Jo,_ as gs,a as Vo,aa as hs,ab as Be,d as q,fb as ws,g as oe,h as O,i as j,j as Xo,lb as ys,s as cs,t as ds,y as us}from"./chunk-GEECPO2H.js";import{a,b as st,d as sc}from"./chunk-ONUPGMER.js";var Pi=st((Oh,Ti)=>{"use strict";Ti.exports=a(function(o){return o.map(function(n){return n===""?"''":n&&typeof n=="object"?n.op.replace(/(.)/g,"\\$1"):/["\s\\]/.test(n)&&!/'/.test(n)?"'"+n.replace(/(['])/g,"\\$1")+"'":/["'\s]/.test(n)?'"'+n.replace(/(["\\$`!])/g,"\\$1")+'"':String(n).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")}).join(" ")},"quote")});var Di=st((Nh,Ni)=>{"use strict";var Wi="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",_i=new RegExp("^"+Wi+"$"),Li="|&;()<> \\t",Lc='"((\\\\"|[^"])*?)"',Mc="'((\\\\'|[^'])*?)'",Oc=/^#$/,Mi="'",Oi='"',$t="$",Ie="",Wc=4294967296;for(At=0;At<4;At++)Ie+=(Wc*Math.random()).toString(16);var At,Nc=new RegExp("^"+Ie);function Dc(e,o){for(var n=o.lastIndex,t=[],r;r=o.exec(e);)t.push(r),o.lastIndex===r.index&&(o.lastIndex+=1);return o.lastIndex=n,t}a(Dc,"matchAll");function Uc(e,o,n){var t=typeof e=="function"?e(n):e[n];return typeof t>"u"&&n!=""?t="":typeof t>"u"&&(t="$"),typeof t=="object"?o+Ie+JSON.stringify(t)+Ie:o+t}a(Uc,"getVar");function jc(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+Li+`]|[^\\s'"`+Li+"])+",s=new RegExp(["("+Wi+")","("+r+"|"+Lc+"|"+Mc+")+"].join("|"),"g"),l=Dc(e,s);if(l.length===0)return[];o||(o={});var c=!1;return l.map(function(d){var u=d[0];if(!u||c)return;if(_i.test(u))return{op:u};var f=!1,m=!1,S="",x=!1,k;function b(){k+=1;var T,L,J=u.charAt(k);if(J==="{"){if(k+=1,u.charAt(k)==="}")throw new Error("Bad substitution: "+u.slice(k-2,k+1));if(T=u.indexOf("}",k),T<0)throw new Error("Bad substitution: "+u.slice(k));L=u.slice(k,T),k=T}else if(/[*@#?$!_-]/.test(J))L=J,k+=1;else{var Z=u.slice(k);T=Z.match(/[^\w\d_]/),T?(L=Z.slice(0,T.index),k+=T.index-1):(L=Z,k=u.length)}return Uc(o,"",L)}for(a(b,"parseEnvVar"),k=0;k<u.length;k++){var g=u.charAt(k);if(x=x||!f&&(g==="*"||g==="?"),m)S+=g,m=!1;else if(f)g===f?f=!1:f==Mi?S+=g:g===t?(k+=1,g=u.charAt(k),g===Oi||g===t||g===$t?S+=g:S+=t+g):g===$t?S+=b():S+=g;else if(g===Oi||g===Mi)f=g;else{if(_i.test(g))return{op:u};if(Oc.test(g)){c=!0;var A={comment:e.slice(d.index+k+1)};return S.length?[S,A]:[A]}else g===t?m=!0:g===$t?S+=b():S+=g}}return x?{op:"glob",pattern:S}:S}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(jc,"parseInternal");Ni.exports=a(function(o,n,t){var r=jc(o,n,t);return typeof n!="function"?r:r.reduce(function(s,l){if(typeof l=="object")return s.concat(l);var c=l.split(RegExp("("+Ie+".*?"+Ie+")","g"));return c.length===1?s.concat(c[0]):s.concat(c.filter(Boolean).map(function(d){return Nc.test(d)?JSON.parse(d.split(Ie)[1]):d}))},[])},"parse")});var Ui=st(Rt=>{"use strict";Rt.quote=Pi();Rt.parse=Di()});import*as Qn from"fs";import*as Ko from"path";import*as Xn from"fs";import Vn from"path";import i from"chalk";var ln=["plan","accept-edits","auto","auto-in-project"];function ic(e){return e==="auto"||e==="auto-in-project"}a(ic,"isAutoMode");function oh(e,o){return ic(e)&&o==="llm"}a(oh,"isAutoLlmMode");function ac(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ac,"permissionModeDisplayName");var lc='[deprecated] permissionMode "auto-in-project" is now an alias for "auto" (FEATURE_092, v0.7.33). The alias will be removed in v0.7.38 \u2014 please update ~/.kodax/config.json to use "auto".';function nh(e=o=>{q({source:"repl:permission",level:"warn",message:o})}){let o=!1;return()=>{o||(o=!0,e(lc))}}a(nh,"createAutoInProjectDeprecationEmitter");var ri=Cs(),Ee=new Set(ri.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),si=new Set(ri.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),ii=new Set(["npm install","npm i","npm uninstall","npm remove","npm update","npm ci","yarn add","yarn remove","yarn upgrade","pnpm add","pnpm remove","pnpm update","git clean","git reset","git checkout","git switch","git merge","git rebase","git cherry-pick","git revert","git commit","git push","git pull","rm","mv","cp","mkdir","rmdir","touch","chmod","chown","del","erase","rd","copy","move","ren","curl","wget","dd","tar","kill","pkill","killall"]),ai=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","where","grep","find","head","tail","more","wc","findstr","git status","git diff","git log","git show","git branch","git remote","git ls-files","git rev-parse","git grep","git tag","git stash list","git describe","git config --get","npm","tsc","go","cargo","rustc"]);function cn(e){switch(e){case"plan":return new Set(["bash","write","edit","undo"]);case"accept-edits":return new Set(["bash"]);case"auto":case"auto-in-project":return new Set}}a(cn,"computeConfirmTools");function li(e){return e!==void 0&&ln.includes(e)}a(li,"isPermissionMode");function ko(e,o){return li(e)?e:o}a(ko,"normalizePermissionMode");import{createHash as cc,randomUUID as dc}from"node:crypto";import Ve from"node:fs";import ci from"node:path";var xo=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"}},Xe=class extends Error{static{a(this,"ProviderSetupInvalidConfigError")}constructor(o,n){super(`KodaX configuration cannot be safely updated: ${o}. ${n}`),this.name="ProviderSetupInvalidConfigError"}},gi=/^[A-Za-z_][A-Za-z0-9_]*$/,uc=new Set(["accesskey","apikey","accesstoken","auth","authorization","bearertoken","clientsecret","credential","key","password","privatekey","refreshtoken","secret","sig","signature","token","xapikey"]);function Ye(){return Object.entries(wo).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===it?-1:o.name===it?1:e.name.localeCompare(o.name))}a(Ye,"getProviderSetupCatalog");function hi(e={}){let o=e.configPath??O("config.json"),n=e.catalog??Ye(),t=e.environment??process.env,r=wt(o);if(!r.config)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:r.error??"config.json is not a JSON object."};let s=vi(r.config);if(s)return{status:"invalid-config",configPath:o,configRevision:r.revision,reason:s};let l=fi(e.explicitProvider);if(l){let d=pi(r.config,l,n);return d&&(!d.requiresCredential||mi(t,d.apiKeyEnv))?di(o,r.revision,l):ui(o,r.revision,l,d?.apiKeyEnv)}if(!r.exists)return{status:"needs-provider",configPath:o,configRevision:r.revision};let c=fi(r.config.provider);if(c){let d=pi(r.config,c,n);return d?!d.requiresCredential||mi(t,d.apiKeyEnv)?di(o,r.revision,c):ui(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(hi,"inspectProviderSetupReadiness");function wi(e){let o=e.configPath??O("config.json"),n=e.catalog??Ye();try{return Gs(o,()=>{let t=wt(o);if(!t.config)throw new Xe(o,t.error??"config.json is invalid JSON.");if(t.revision!==e.expectedRevision)throw new xo(o);fc(t.config,o);let r=pc(e.choice,n,t.config),s={...t.config,provider:r.provider,model:r.model,...r.customProviders?{customProviders:r.customProviders}:{}};if(wt(o).revision!==e.expectedRevision)throw new xo(o);return gc(o,s),{provider:r.provider,model:r.model,apiKeyEnv:r.apiKeyEnv,configPath:o}})}catch(t){throw t instanceof Bs?new xo(o):t}}a(wi,"persistProviderSetupChoice");function yi(e){let n=(e.platform??process.platform)==="win32"?`Required next step: use this provider's API key as the value of the user environment variable "${e.apiKeyEnv}" in Windows Environment Variables.`:`Required next step: use this provider's API key as the value of the environment variable "${e.apiKeyEnv}" in your shell profile.`;return[`config.json stores the environment-variable name only: "${e.apiKeyEnv}"; it never stores the API key.`,n,"KodaX cannot set this environment variable for you.","Close and restart this terminal so the environment is refreshed.","Then run `kodax` again.","Optional: run `kodax doctor` to verify local configuration without an LLM request."]}a(yi,"providerSetupRestartInstructions");function di(e,o,n){return{status:"ready",configPath:e,configRevision:o,...n?{provider:n}:{}}}a(di,"ready");function ui(e,o,n,t){return{status:"needs-credential",configPath:e,configRevision:o,provider:n,...t?{apiKeyEnv:t}:{}}}a(ui,"needsCredential");function fi(e){return typeof e=="string"&&e.trim()?e.trim():void 0}a(fi,"normalizedString");function mi(e,o){return o!==void 0&&!!e[o]?.trim()}a(mi,"hasEnvironmentValue");function pi(e,o,n){let t=n.find(l=>l.name===o);if(t)return{apiKeyEnv:t.apiKeyEnv,requiresCredential:!0};if(Object.entries(wo).find(([l])=>l===o)?.[1]?.capabilityProfile.transport==="cli-bridge")return{requiresCredential:!1};let s=mc(e,o);return s?{apiKeyEnv:s.apiKeyEnv,requiresCredential:!0}:void 0}a(pi,"resolveConfiguredProvider");function fc(e,o){let n=vi(e);if(n)throw new Xe(o,n)}a(fc,"assertCustomProvidersPreservable");function vi(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=yt(t);if(!r)return"Existing customProviders contains an invalid entry; repair it before running setup.";let s=ki(r.baseUrl);if(s)return`Existing customProviders entry "${r.name}" is unsafe: ${s}`;if(n.has(r.name))return`Existing customProviders contains duplicate name "${r.name}"; repair it before running setup.`;n.add(r.name)}}a(vi,"existingCustomProvidersError");function mc(e,o){let n=e.customProviders;if(Array.isArray(n))for(let t of n){let r=yt(t);if(r?.name===o)return r}}a(mc,"findValidCustomProvider");function yt(e){if(!Si(e))return;let{name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s}=e;if(typeof o!="string"||n!=="openai"&&n!=="anthropic"||typeof t!="string"||typeof r!="string"||typeof s!="string")return;let l={...e,name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s};try{return at(l),gi.test(l.apiKeyEnv)?l:void 0}catch{return}}a(yt,"toValidCustomProvider");function pc(e,o,n){if(e.kind==="builtin"){let d=o.find(u=>u.name===e.provider);if(!d||!d.models.includes(e.model))throw new Error("Choose a supported built-in provider and model.");return{provider:d.name,model:e.model,apiKeyEnv:d.apiKeyEnv}}let t=vt(e.provider);if(o.some(d=>d.name===t.name))throw new Error(`Custom provider name "${t.name}" conflicts with a built-in provider.`);let r=n.customProviders,s=Array.isArray(r)?r.flatMap(d=>{let u=yt(d);return u?[u]:[]}):[],c=s.find(d=>d.name===t.name)?s.map(d=>d.name===t.name?t:d):[...s,t];return{provider:t.name,model:t.model,apiKeyEnv:t.apiKeyEnv,customProviders:c}}a(pc,"normalizeProviderSetupChoice");function vt(e){let o={name:e.name.trim(),protocol:e.protocol,baseUrl:e.baseUrl.trim(),apiKeyEnv:e.apiKeyEnv.trim(),model:e.model.trim()},n=ki(o.baseUrl);if(n)throw new Error(n);if(at(o),!gi.test(o.apiKeyEnv))throw new Error("Custom provider API key environment variable name is invalid.");return o}a(vt,"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=>uc.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 wt(e){if(!Ve.existsSync(e))return{configPath:e,revision:So(void 0),exists:!1,config:{}};let o;try{o=Ve.readFileSync(e,"utf8")}catch(n){return{configPath:e,revision:So(void 0),exists:!0,error:n instanceof Error?n.message:"config.json cannot be read."}}try{let n=JSON.parse(o);return Si(n)?{configPath:e,revision:So(o),exists:!0,config:n}:{configPath:e,revision:So(o),exists:!0,error:"config.json must contain a JSON object."}}catch(n){return{configPath:e,revision:So(o),exists:!0,error:n instanceof Error?n.message:"config.json is invalid JSON."}}}a(wt,"readConfig");function So(e){return cc("sha256").update(e??"<missing>","utf8").digest("hex")}a(So,"revisionFor");function Si(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Si,"isRecord");function gc(e,o){let n=ci.dirname(e);Ve.mkdirSync(n,{recursive:!0});let t=ci.join(n,`.config.${process.pid}.${dc()}.tmp`);try{Ve.writeFileSync(t,`${JSON.stringify(o,null,2)}
3
+ `,{encoding:"utf8",mode:384}),Ve.renameSync(t,e)}catch(r){throw Ve.rmSync(t,{force:!0}),r}}a(gc,"writeConfigAtomically");import{existsSync as xi,mkdirSync as hc,readFileSync as bi,writeFileSync as wc}from"node:fs";import Je from"node:path";var yc={core:{},mcp:{version:1,servers:{}},extensions:{version:1,paths:[]},a2a:{version:2,agents:{}}},vc=["core","mcp","extensions","a2a"];function kt(e,o){return o==="core"?Je.join(e,"config.json"):Je.join(e,"integrations",`${o}.json`)}a(kt,"activePath");function kc(e,o){return o==="core"?Je.join(e,"config.example.jsonc"):Je.join(e,"integrations",`${o}.example.jsonc`)}a(kc,"templatePath");function Sc(e){let o=e.replaceAll("\\","/");return vc.flatMap(n=>[{domain:n,kind:"active",path:kt(e,n),content:`${JSON.stringify(yc[n],null,2)}
4
+ `},{domain:n,kind:"template",path:kc(e,n),content:Hs(n).replaceAll("~/.kodax",o)}])}a(Sc,"configFiles");function bo(e,o){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error(`${o} must contain a JSON object.`);return e}a(bo,"requireRecord");function xc(e,o){let n=bo(e,"A2A config"),t=Object.keys(n).find(s=>!["version","agents","server"].includes(s));if(t)throw new Error(`A2A config contains unknown field "${t}".`);if(n.version!==1&&n.version!==2)throw new Error("A2A config version must be 1 or 2.");let r=bo(n.agents,"A2A config agents");if(n.server!==void 0&&bo(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(xc,"validateA2ADocument");function bc(e,o){let n=bi(e.path,"utf8"),t;try{t=JSON.parse(n)}catch{throw new Error(`${e.domain} config is invalid JSON.`)}e.domain==="core"?bo(t,"Core config"):e.domain==="mcp"?pt(t):e.domain==="extensions"?gt(t):xc(t,o)}a(bc,"validateActiveFile");function $i(e,o){if(!xi(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 bc(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($i,"existingFileResult");function $c(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}a($c,"isAlreadyExists");function Ac(e,o){hc(Je.dirname(e.path),{recursive:!0,mode:448});try{return wc(e.path,e.content,{encoding:"utf8",flag:"wx",mode:384}),{domain:e.domain,kind:e.kind,path:e.path,status:"created"}}catch(n){if($c(n))return $i(e,o);throw n}}a(Ac,"createIfMissing");function Rc(e){let o=kt(e,"core");if(xi(o))try{let n=bo(JSON.parse(bi(o,"utf8")),"Core config"),t=Ks(e);t.mcp.action==="create"&&pt({version:1,servers:n.mcpServers}),t.extensions.action==="create"&&gt({version:1,paths:n.extensions})}catch(n){return`Legacy integration configuration is invalid: ${n instanceof Error?n.message:"Legacy integration config is invalid."}`}}a(Rc,"legacyIntegrationDiagnostic");function Ai(e={}){let o=Je.resolve(e.configHome??oe()),n=Sc(o),t=n.map(s=>$i(s,e.validateA2A));if(t.some(s=>s.status==="invalid"))return{configHome:o,files:t};let r=Rc(o);if(r){let s=kt(o,"core");return t=t.map(l=>l.path===s?{...l,status:"invalid",diagnostic:r}:l),{configHome:o,files:t}}return zs({configHome:o}),{configHome:o,files:n.map(s=>Ac(s,e.validateA2A))}}a(Ai,"initializeSetupConfiguration");import Ce from"node:path";var Ri=[{id:"interrupt",name:"Interrupt",description:"Interrupt the current streaming response",defaultBindings:[{key:"c",ctrl:!0}],context:"global",priority:200,category:"global",configurable:!1},{id:"showHelp",name:"Toggle Help",description:"Show or hide shortcut help when the input is empty",defaultBindings:[{key:"?"}],context:"global",priority:150,category:"global",configurable:!0},{id:"toggleThinking",name:"Cycle Reasoning Effort",description:"Cycle reasoning effort for the active model: off, low \u2026 max, auto",defaultBindings:[{key:"t",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleTranscriptMode",name:"Toggle Transcript Mode",description:"Toggle transcript mode on or off",defaultBindings:[{key:"o",ctrl:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"openTranscriptSearch",name:"Search Transcript",description:"Open transcript search",defaultBindings:[{key:"f",ctrl:!0}],context:"global",priority:150,category:"navigation",configurable:!0},{id:"togglePermissionMode",name:"Cycle Permissions",description:"Cycle permission mode: plan, accept-edits, auto-in-project",defaultBindings:[{key:"tab",shift:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"toggleAgentMode",name:"Cycle Agent Mode",description:"Cycle agent mode: AMA, SA",defaultBindings:[{key:"m",meta:!0}],context:"global",priority:150,category:"mode",configurable:!0},{id:"submitInput",name:"Submit Input",description:"Submit the current input",defaultBindings:[{key:"enter"}],context:"input",priority:50,category:"global",configurable:!1},{id:"acceptCompletion",name:"Accept Completion",description:"Accept the current autocomplete suggestion",defaultBindings:[{key:"tab"}],context:"input",priority:60,category:"editing",configurable:!0},{id:"cancelInput",name:"Cancel Input",description:"Cancel or clear the current input",defaultBindings:[{key:"escape"}],context:"input",priority:70,category:"editing",configurable:!0},{id:"newline",name:"Insert Newline",description:"Insert a newline in the current input",defaultBindings:[{key:"enter",shift:!0},{key:"j",ctrl:!0}],context:"input",priority:40,category:"editing",configurable:!0},{id:"historyUp",name:"History Up",description:"Browse previous input history",defaultBindings:[{key:"up"}],context:"input",priority:30,category:"navigation",configurable:!0},{id:"historyDown",name:"History Down",description:"Browse next input history",defaultBindings:[{key:"down"}],context:"input",priority:30,category:"navigation",configurable:!0},{id:"moveLeft",name:"Move Left",description:"Move the cursor left",defaultBindings:[{key:"left"}],context:"input",priority:20,category:"navigation",configurable:!1},{id:"moveRight",name:"Move Right",description:"Move the cursor right",defaultBindings:[{key:"right"}],context:"input",priority:20,category:"navigation",configurable:!1},{id:"moveToStart",name:"Move To Start",description:"Move the cursor to the start of the line",defaultBindings:[{key:"a",ctrl:!0}],context:"input",priority:25,category:"navigation",configurable:!0},{id:"moveToEnd",name:"Move To End",description:"Move the cursor to the end of the line",defaultBindings:[{key:"e",ctrl:!0}],context:"input",priority:25,category:"navigation",configurable:!0},{id:"killLineRight",name:"Delete To End",description:"Delete from the cursor to the end of the current line",defaultBindings:[{key:"k",ctrl:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"killLineLeft",name:"Delete To Start",description:"Delete from the start of the line to the cursor",defaultBindings:[{key:"u",ctrl:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"deleteWordLeft",name:"Delete Word Left",description:"Delete the word before the cursor",defaultBindings:[{key:"w",ctrl:!0},{key:"backspace",meta:!0}],context:"input",priority:25,category:"editing",configurable:!0},{id:"moveLineUp",name:"Move Line Up",description:"Move to the previous visual line in multiline input",defaultBindings:[{key:"up",ctrl:!0}],context:"input",priority:20,category:"navigation",configurable:!0},{id:"moveLineDown",name:"Move Line Down",description:"Move to the next visual line in multiline input",defaultBindings:[{key:"down",ctrl:!0}],context:"input",priority:20,category:"navigation",configurable:!0},{id:"backspace",name:"Backspace",description:"Delete the previous character",defaultBindings:[{key:"backspace"}],context:"input",priority:10,category:"editing",configurable:!1},{id:"delete",name:"Delete",description:"Delete the next character",defaultBindings:[{key:"delete"}],context:"input",priority:10,category:"editing",configurable:!1}];function Ec(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(Ec,"formatBinding");function St(e){let n=Ri.find(t=>t.id===e)?.defaultBindings[0];return n?Ec(n):"<unavailable>"}a(St,"shortcut");function Cc(){return Object.entries(wo).filter(([,e])=>e.capabilityProfile.transport==="cli-bridge").map(([e])=>e).sort()}a(Cc,"defaultCliBridges");function xt(e={}){let o=Ce.resolve(e.configHome??oe()),n=e.catalog??Ye(),t=e.cliBridges??Cc(),r=n.map(s=>` ${s.name.padEnd(18)} ${s.apiKeyEnv} (default model: ${s.defaultModel})`);return["KodaX setup guide","","Configuration files (existing files are never overwritten by setup):",` Core: ${Ce.join(o,"config.json")}`,` Annotated template: ${Ce.join(o,"config.example.jsonc")}`,` MCP: ${Ce.join(o,"integrations","mcp.json")}`,` Extensions: ${Ce.join(o,"integrations","extensions.json")}`,` A2A: ${Ce.join(o,"integrations","a2a.json")}`,` Integration templates: ${Ce.join(o,"integrations","*.example.jsonc")}`," Existing active files are validated first. If one is invalid, setup reports"," it and stops without creating or overwriting any configuration file."," The annotated core template includes `sandbox.envPass` for exact command-target"," environment passthrough; setup never stores an environment-variable value.","","Built-in API providers and credential environment variables:",...r,...t.length>0?[` CLI bridges: ${t.join(", ")} (authenticate with the provider CLI; no KodaX API-key variable)`]:[],"","Set the variable named for your provider; keep the credential out of config.json:"," Custom providers: `apiKeyEnv` is the environment-variable name stored in config.json,"," never the API key value."," Put the provider's actual API key in the value of that exact environment variable."," KodaX does not set this environment variable for you."," Windows PowerShell (persistent user variable):",' [Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "<your-key>", "User")'," macOS/Linux shell profile:",' export OPENAI_API_KEY="<your-key>"'," Obtain the key from the provider console, then close and restart the terminal."," Run `kodax doctor` to verify local configuration without sending an LLM request.","","Setup commands:"," kodax setup Initialize missing files and choose a built-in or custom provider"," kodax setup --custom Configure only a custom OpenAI/Anthropic-compatible provider"," kodax setup --help Show this guide without changing files","","Sandbox containment (optional; permission decisions still work when it is unavailable):"," `kodax setup`, first-run setup, and `/setup` check sandbox readiness once."," Windows: setup can launch the one-time UAC provisioning flow; the terminal itself"," does not need to run as Administrator. Declining UAC is non-fatal."," macOS: ASRT uses Seatbelt/sandbox-exec; install ripgrep with `brew install ripgrep`."," Linux: ASRT uses bubblewrap; install bubblewrap, socat, and ripgrep with apt,"," dnf, or pacman. KodaX never invokes sudo or a package manager automatically."," Ordinary startup and tool calls do not repeat setup reminders or trigger UAC."," Inspect/activate explicitly: `kodax sandbox doctor` / `kodax sandbox setup`."," Model-issued commands filter credential-shaped variables by default. Add exact names"," such as GH_TOKEN to user-level `sandbox.envPass` only when command access is intended."," The default list is empty; NODE_OPTIONS and BASH_ENV remain blocked."," Restart KodaX (and any persistent daemon) after changing the list or host variables."," SDK: `@kodax-ai/kodax/sandbox` exposes doctor, activation, capability metadata,"," and policy-controlled command execution independent of Auto[LLM].","","CLI basics:"," kodax Enter the interactive REPL",' kodax -p "task" Run one task and exit'," kodax -r Search and resume a saved session"," kodax -c Continue the most recent non-empty session","","Inside the REPL:"," /model [provider[/model]] List or switch provider/model"," /mode [plan|accept-edits|auto] Switch permission mode"," /effort [off|auto|low|medium|high|xhigh|max] Set reasoning depth"," /agent-mode [ama|sa|toggle] Switch AMA/SA execution"," /setup --help Show this guide","","Default shortcuts:",` ${St("toggleThinking")} Cycle reasoning effort`,` ${St("togglePermissionMode")} Cycle permission mode`,` ${St("toggleAgentMode")} Cycle AMA/SA`," Tab Accept completion"," Esc Cancel or clear input"].join(`
5
+ `)}a(xt,"renderSetupGuide");import*as Ei from"node:readline";import bt from"chalk";async function Ci(e={}){let o=e.catalog??Ye(),n=hi({...e.configPath?{configPath:e.configPath}:{},catalog:o});if(n.status==="invalid-config")throw new Xe(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??_c({input:e.input??process.stdin,output:e.output??process.stdout});try{let s=e.customOnly?"custom":await r.choose("Choose a provider. KodaX will save metadata only and will never ask for an API key.",[...o.map(u=>({value:`builtin:${u.name}`,label:`${u.name} \u2014 ${u.defaultModel} (set ${u.apiKeyEnv})`})),{value:"custom",label:"Custom OpenAI/Anthropic-compatible provider"},{value:"cancel",label:"Cancel"}]);if(!s||s==="cancel")return{status:"cancelled"};let l=s==="custom"?await Tc(r):await Ic(r,o,s.slice(8));if(!l)return{status:"cancelled"};let c=Pc(l,o);return await r.confirm(`Save ${c}? config.json will store the environment-variable name only. You must set that variable to the provider's API key after setup. No credential value will be written.`)?{status:"configured",selection:wi({configPath:n.configPath,expectedRevision:n.configRevision,catalog:o,choice:l})}:{status:"cancelled"}}finally{t&&r.close?.()}}a(Ci,"runProviderSetupWizard");async function Ic(e,o,n){let t=o.find(l=>l.name===n);if(!t)throw new Error(`Unknown setup provider: ${n}`);let r=[...new Set(t.models)],s=await e.choose(`Choose a model for ${t.name}.`,r.map(l=>({value:l,label:l===t.defaultModel?`${l} (default)`:l})));return s?{kind:"builtin",provider:t.name,model:s}:void 0}a(Ic,"collectBuiltinChoice");async function Tc(e){let o=await dn(e,"Custom provider name (a unique local alias used by /model and config.json)");if(!o)return;let n=await e.choose("Protocol family (check the provider API documentation for OpenAI or Anthropic compatibility)",[{value:"openai",label:"OpenAI-compatible"},{value:"anthropic",label:"Anthropic-compatible"}]);if(n!=="openai"&&n!=="anthropic")return;let t=await dn(e,"API Base URL from the provider documentation, for example https://example.com/v1");if(!t)return;let r=await dn(e,["Environment-variable name only (for example MY_PROVIDER_API_KEY).","Do not paste an API key here.","config.json stores this name only.","After setup, set this environment variable's value to this provider's API key."].join(" "));if(!r)return;let s=await dn(e,"Model identifier from the provider documentation, for example provider/model-name");if(s)return{kind:"custom",provider:vt({name:o,protocol:n,baseUrl:t,apiKeyEnv:r,model:s})}}a(Tc,"collectCustomChoice");async function dn(e,o){let t=(await e.text(o))?.trim();return t||void 0}a(dn,"requiredText");function Pc(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(Pc,"summarizeChoice");function _c(e){let o=Ei.createInterface({input:e.input,output:e.output}),n=!1;o.on("close",()=>{n=!0}),o.on("SIGINT",()=>o.close());let t=a(r=>new Promise((s,l)=>{let c=!1,d=a(f=>{c||(c=!0,o.removeListener("close",u),s(f))},"finish"),u=a(()=>d(void 0),"onClose");if(n){d(void 0);return}o.once("close",u);try{o.question(r,f=>d(f))}catch(f){o.removeListener("close",u),n?d(void 0):l(f)}}),"question");return{async choose(r,s){for(e.output.write(`
6
+ ${bt.cyan(r)}
7
+ `),s.forEach((l,c)=>e.output.write(` ${c+1}. ${l.label}
8
+ `));;){let l=await t(bt.dim(`Select 1-${s.length} (q to cancel): `));if(l===void 0||l.trim().toLowerCase()==="q")return;let c=Number.parseInt(l.trim(),10)-1,d=s[c];if(d)return d.value;e.output.write(bt.yellow(`Choose one of the numbered options.
9
+ `))}},async text(r,s){let l=s?` [${s}]`:"",c=await t(`${r}${l} (q to cancel): `);if(!(c===void 0||c.trim().toLowerCase()==="q"))return c.trim()||s},async confirm(r){return(await t(`${r} [y/N]: `))?.trim().toLowerCase()==="y"},close:a(()=>o.close(),"close")}}a(_c,"createTerminalProviderSetupInteraction");async function Ii(e){let o=e.resolve(e.provider),n=[];for(let t of e.efforts){if(e.signal?.aborted)break;let r=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:t},{modelOverride:e.model,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{r=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(s){n.push({effort:t,status:"error",error:s instanceof Error?s.message:String(s)});continue}r?(ls(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(Ii,"probeProviderReasoningEfforts");import Sn from"fs";import Sa from"path";import un from"fs";import N from"path";import Eo from"os";var Hi=sc(Ui(),1);var ji=new Set(["/dev/null","nul","NUL"]);function Fc(e){let o=[],n=0,t=null,r=!1;for(let s=0;s<e.length;s+=1){let l=e[s];if(l===`
10
+ `||l==="\r"){t===null&&(o.push(e.slice(n,s)),l==="\r"&&e[s+1]===`
11
+ `&&(s+=1),n=s+1,r=!1);continue}if(!r){if(t===null&&l==="#"){r=!0;continue}if(l==="\\"&&t!=="'"){let c=e[s+1];c!==`
12
+ `&&c!=="\r"&&c!==void 0&&(s+=1);continue}l!=="'"&&l!=='"'||(t===null?t=l:t===l&&(t=null))}}return o.push(e.slice(n)),o}a(Fc,"splitUnquotedShellLines");function Hc(e){let o=e.at(-1);return o!==void 0&&typeof o!="string"&&"op"in o&&["&&","||","|",";"].includes(o.op)}a(Hc,"endsWithShellContinuation");function Bc(e){let o=[];for(let n of Fc(e)){let t=(0,Hi.parse)(n,r=>`$${r}`).filter(r=>typeof r=="string"||!("comment"in r));t.length!==0&&(o.length>0&&!Hc(o)&&o.push({op:";"}),o.push(...t))}return o}a(Bc,"parseAllShellLines");function Gc(e){let o=null,n=!1,t=!1,r=!0;for(let s=0;s<e.length;s+=1){let l=e[s];if(l===`
13
+ `||l==="\r"){let c=t&&!n;n=!1,t=!1,l==="\r"&&e[s+1]===`
14
+ `&&(s+=1),!c&&o===null&&(r=!0);continue}if(!n){if(l==="$"&&e[s+1]==="("&&!t&&o!=="'")return!0;t?(t=!1,r=!1):l==="\\"&&o!=="'"?t=!0:l==="'"&&o!=='"'?(o=o==="'"?null:"'",r=!1):l==='"'&&o!=="'"?(o=o==='"'?null:'"',r=!1):l==="#"&&o===null&&r?n=!0:o===null&&/[\s;|&()<>]/.test(l)?r=!0:r=!1}}return!1}a(Gc,"hasActiveBashCommandSubstitution");function Kc(e){let o=null,n=!1;for(let t=0;t<e.length;t+=1){let r=e[t];if(r===`
15
+ `||r==="\r"){n=!1,r==="\r"&&e[t+1]===`
16
+ `&&(t+=1);continue}if(!n){if(r==="$"&&e[t+1]==="("&&o!=="'")return!0;r==="'"&&o!=='"'?o=o==="'"?null:"'":r==='"'&&o!=="'"?o=o==='"'?null:'"':r==="#"&&o===null&&(n=!0)}}return!1}a(Kc,"hasActivePowerShellCommandSubstitution");function zc(e){return Gc(e)||Kc(e)}a(zc,"hasActiveCommandSubstitution");function Et(e){return ji.has(e)||ji.has(e.toLowerCase())}a(Et,"isNullDevice");function $o(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`")||zc(o))return{statements:[],unparseable:!0};let n;try{n=Bc(o)}catch{return{statements:[],unparseable:!0}}let t=[],r=[],s=[],l=[],c=null,d=!1,u=a(()=>{(s.length>0||l.length>0)&&(r.push({argv:s,redirections:l}),s=[],l=[])},"flushStage"),f=a(m=>{u(),r.length>0&&(t.push({precedingOp:c,stages:r}),r=[]),c=m},"flushStatement");for(let m=0;m<n.length;m+=1){let S=n[m];if(typeof S=="string"){s.push(S);continue}if("op"in S){let x=S.op;if(x==="&&"||x==="||"||x===";"){f(x);continue}if(x==="|"){u();continue}if(x==="&"){let k=n[m+1];if(s.length===0&&r.length===0&&typeof k=="string")continue;if(k!==void 0&&typeof k!="string"&&"op"in k&&(k.op===">"||k.op===">>")){let b=n[m+2];if(typeof b!="string"){d=!0,m+=1;continue}l.push(Fi(`&${k.op}`,b)),m+=2;continue}d=!0;continue}if(Vc(x)){let k=null,b=s[s.length-1];b!==void 0&&/^[0-9]+$/.test(b)&&(k=b,s.pop());let g=n[m+1];if(typeof g!="string"){d=!0;continue}l.push(Fi(k?`${k}${x}`:x,g)),m+=1;continue}if(x==="glob"){let k=S.pattern;typeof k=="string"?s.push(k):d=!0;continue}d=!0;continue}if("comment"in S)break;d=!0}return f(null),{statements:t,unparseable:d}}a($o,"parseBashCommand");var qc=new Set([">",">>","<","<<","<<<","&>","&>>",">&"]),Bi=/^([0-9]+|&)(>>?|<<?)$/,Gi=/^([0-9]+)?(>&)$/;function Vc(e){return qc.has(e)||Bi.test(e)||Gi.test(e)}a(Vc,"isRedirectionOp");function Fi(e,o){let n=null,t=e,r=Bi.exec(e),s=Gi.exec(e);s?(n=s[1]??null,t=s[2]):r&&(n=r[1],t=r[2]);let l=t===">&"&&/^(?:[0-9]+|-)$/.test(o);return{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o,...l?{descriptorDuplication:!0}:{}}}a(Fi,"parseRedirection");import Qe from"node:path";var Xc={verbose:"switch",debug:"switch",erroraction:"value",warningaction:"value",informationaction:"value",progressaction:"value",errorvariable:"value",warningvariable:"value",informationvariable:"value",outvariable:"value",outbuffer:"value",pipelinevariable:"value",whatif:"switch",confirm:"switch",usetransaction:"switch"},Ao={path:"value",literalpath:"value",filter:"value",include:"value",exclude:"value"},zi={"copy-item":le(["path","destination"],{...Ao,destination:"value",container:"switch",recurse:"switch",force:"switch",passthru:"switch",credential:"value",fromsession:"value",tosession:"value"}),"move-item":le(["path","destination"],{...Ao,destination:"value",force:"switch",passthru:"switch",credential:"value"}),"set-content":le(["path","value"],{...Ao,value:"value",passthru:"switch",force:"switch",credential:"value",nonewline:"switch",encoding:"value",asbytestream:"switch",stream:"value"}),"add-content":le(["path","value"],{...Ao,value:"value",passthru:"switch",force:"switch",credential:"value",nonewline:"switch",encoding:"value",asbytestream:"switch",stream:"value"}),"out-file":le(["filepath","encoding"],{filepath:"value",literalpath:"value",inputobject:"value",encoding:"value",append:"switch",force:"switch",noclobber:"switch",width:"value",nonewline:"switch"}),"new-item":le(["path"],{path:"value",name:"value",itemtype:"value",value:"value",force:"switch",credential:"value"}),ni:le(["path"],{path:"value",name:"value",itemtype:"value",value:"value",force:"switch",credential:"value"}),"remove-item":le(["path"],{...Ao,recurse:"switch",force:"switch",credential:"value",stream:"value"}),"rename-item":le(["path","newname"],{path:"value",literalpath:"value",newname:"value",force:"switch",passthru:"switch",credential:"value"})},Yc={ea:"erroraction",ev:"errorvariable",wa:"warningaction",wv:"warningvariable",ia:"informationaction",infa:"informationaction",iv:"informationvariable",ov:"outvariable",ob:"outbuffer",pv:"pipelinevariable",vb:"verbose",db:"debug",wi:"whatif",cf:"confirm",usetx:"usetransaction",pspath:"literalpath",nooverwrite:"noclobber",type:"itemtype",target:"value"};function le(e,o){return{positionals:e,parameters:{...Xc,...o}}}a(le,"spec");function Bh(e){return zi[e.toLowerCase()]!==void 0}a(Bh,"isPowerShellMutationCommand");function qi(e){let o=ld(e[0]??""),n=zi[o];if(!n)return Ze(`unsupported PowerShell command: ${o||"<empty>"}`);let t=Jc(e.slice(1),n);if(!t.complete)return Ze(t.reason??"PowerShell parameter binding is incomplete");if(t.values.has("fromsession")||t.values.has("tosession"))return Ze("PowerShell remoting changes the filesystem host");if((o==="new-item"||o==="ni")&&/^(?:symboliclink|junction|hardlink)$/i.test(t.values.get("itemtype")??""))return Ze("PowerShell link creation has an unmodelled target relationship");if(nd(t))return Ze("PowerShell path contains bracket wildcard syntax");let r=Qc(o,t);return r?["filter","include","exclude"].some(s=>t.values.has(s))?{status:"incomplete",operations:[r],reason:"PowerShell provider selectors make the concrete target set unresolved"}:ed(r).some(od)?{status:"incomplete",operations:[r],reason:"PowerShell path contains dynamic, wildcard, or array syntax"}:{status:"complete",operations:[r]}:Ze("PowerShell mutation target is missing or ambiguous")}a(qi,"analyzePowerShellMutation");function Jc(e,o){let n=new Map,t=new Set,r=0,s=!1;for(let l=0;l<e.length;l+=1){let c=e[l];if(c==="--"){s=!0;continue}if(!s&&c.startsWith("-")){let u=Zc(c,o);if(!u)return Ro(n,t,`unknown or ambiguous parameter ${c}`);if(u.kind==="switch"){let m=rd(u.inlineValue);if(m===void 0)return Ro(n,t,`switch ${c} has an unsupported value`);m&&t.add(u.name);continue}let f=u.inlineValue??e[l+1];if(f===void 0||u.inlineValue===void 0&&f.startsWith("-"))return Ro(n,t,`parameter ${c} has no bound value`);if(n.has(u.name))return Ro(n,t,`parameter ${c} is repeated`);n.set(u.name,f),u.inlineValue===void 0&&(l+=1);continue}for(;o.positionals[r]&&n.has(o.positionals[r]);)r+=1;let d=o.positionals[r];if(!d||n.has(d))return Ro(n,t,`unexpected positional argument ${c}`);n.set(d,c),r+=1}return{complete:!0,values:n,switches:t}}a(Jc,"bindArguments");function Zc(e,o){let n=/^--?([^:]+)(?::(.*))?$/.exec(e);if(!n)return;let t=n[1].toLowerCase(),r=Yc[t],s=Object.keys(o.parameters),l=r&&o.parameters[r]!==void 0?[r]:s.filter(u=>u.startsWith(t));if(l.length!==1)return;let c=l[0],d=o.parameters[c];return n[2]===void 0?{name:c,kind:d}:{name:c,kind:d,inlineValue:n[2]}}a(Zc,"parseParameter");function Qc(e,o){let n=Ki(o,"path","literalpath"),t=o.switches.has("force"),r=o.switches.has("whatif")?{whatIf:!0}:{};if(e==="copy-item"||e==="move-item"){if(!n)return;let l=o.values.get("destination")??sd(n);return{kind:e==="copy-item"?"copy":"move",source:n,destination:l,options:{force:t,...r,recursive:e==="copy-item"&&o.switches.has("recurse"),overwritePossible:!0}}}if(e==="rename-item"){let l=o.values.get("newname");return!n||!l||/[\\/]/.test(l)?void 0:{kind:"rename",source:n,destination:id(n,l),options:{force:t,...r}}}if(e==="new-item"||e==="ni"){let l=o.values.get("name"),c=l?ad(o.values.get("path")??".",l):o.values.get("path"),d=o.values.get("itemtype"),u=d?{force:t,...r,itemType:d}:{force:t,...r};return c?{kind:"create",target:c,options:u}:void 0}let s=e==="out-file"?Ki(o,"filepath","literalpath"):n;if(s)return e==="remove-item"?{kind:"delete",target:s,options:{force:t,...r,recursive:o.switches.has("recurse")}}:{kind:"write",target:s,options:{force:t,...r,append:e==="add-content"||o.switches.has("append")}}}a(Qc,"buildOperation");function Ki(e,...o){let n=o.map(t=>e.values.get(t)).filter(t=>!!t);return n.length===1?n[0]:void 0}a(Ki,"pathValue");function ed(e){return"target"in e?[e.target]:[e.source,e.destination]}a(ed,"operationPaths");function od(e){return/^\$env:(?:temp|tmp)(?=$|[\\/])/i.test(e)?!1:/[,*?`$]|@\(|[{}]/.test(e)||td(e)}a(od,"isAmbiguousPathExpression");function nd(e){return["path","filepath","destination","newname","name"].some(o=>/[\[\]]/.test(e.values.get(o)??""))}a(nd,"hasUnmodelledBracketWildcard");function td(e){return/^[a-z]:[\\/]/i.test(e)?!1:/^[a-z][a-z0-9_.-]*:/i.test(e)}a(td,"isPowerShellProviderPath");function rd(e){if(e===void 0||/^\$?true$|^1$/i.test(e))return!0;if(/^\$?false$|^0$/i.test(e))return!1}a(rd,"parseSwitchValue");function sd(e){let o=/^[a-z]:|\\/i.test(e)?Qe.win32:Qe.posix;return o.join(".",o.basename(e))}a(sd,"defaultDestination");function id(e,o){let n=/^[a-z]:|\\/i.test(e)?Qe.win32:Qe.posix;return n.join(n.dirname(e),o)}a(id,"joinSourceParent");function ad(e,o){return(/^[a-z]:|\\/i.test(e)?Qe.win32:Qe.posix).join(e,o)}a(ad,"joinPath");function ld(e){return e.replace(/\\/g,"/").split("/").at(-1)?.toLowerCase()??""}a(ld,"commandName");function Ro(e,o,n){return{complete:!1,values:e,switches:o,reason:n}}a(Ro,"failed");function Ze(e){return{status:"incomplete",operations:[],reason:e}}a(Ze,"incomplete");var cd=N.join(".agent","plan_mode_doc.md"),fn=new Map,mn=null,dd=new Set(["status","log","diff","show","ls-files","rev-parse","grep","describe"]),Ct=new Set(["-C","--git-dir","--work-tree","--namespace","--super-prefix"]),Vi=new Set(["--git-dir","--work-tree"]),ud=new Set(["--bare","--no-pager","--no-replace-objects","--literal-pathspecs","--glob-pathspecs","--noglob-pathspecs","--icase-pathspecs","--no-optional-locks"]),fd=new Set(["-d","-D","-m","-M","-c","-C","-f","-t","-u","--delete","--move","--copy","--force","--edit-description","--set-upstream-to","--unset-upstream","--create-reflog","--track","--no-track","--recurse-submodules"]),md=new Set(["-a","-s","-u","-d","-f","-m","-F","--annotate","--sign","--local-user","--delete","--force","--message","--file","--create-reflog"]),Xi=new Set(["--ext-diff","--textconv","--open-files-in-pager","--output","--ext-grep","--help"]),pd=new Set(["--add","--replace-all","--unset","--unset-all","--rename-section","--remove-section","--edit","-e"]),gd=new Set(["--get","--get-all","--get-regexp","--get-urlmatch","--list","-l"]),hd=new Set(["set","unset","rename-section","remove-section","edit"]);function ea(e,o,n){let t=1;for(;t<e.length&&e[t].startsWith("-");){let r=e[t],s=r.toLowerCase();if(r==="-c"||r.startsWith("-c")&&r.length>2||s==="--config-env"||s.startsWith("--config-env="))return;if(r==="-C"||Vi.has(s)){let u=e[t+1];if(!u)return;o?.add(t+1),n?.add(u),t+=2;continue}let c=[...Vi].find(u=>s.startsWith(`${u}=`)),d=c?r.slice(c.length+1):r.startsWith("-C")&&r.length>2?r.slice(2):void 0;if(d!==void 0){if(!d)return;o?.add(t),n?.add(d),t+=1;continue}if(ud.has(s)){t+=1;continue}if(Ct.has(r)||Ct.has(s)){if(e[t+1]===void 0)return;t+=2;continue}if([...Ct].some(u=>r.startsWith(`${u}=`)||s.startsWith(`${u}=`))||r.startsWith("-C")&&r.length>2){t+=1;continue}return}return t}a(ea,"consumeGitGlobalOptions");function wd(e){return ea(e)}a(wd,"findGitSubcommandIndex");function It(e,o,n){let t=[];for(let r=0;r<e.length;r+=1){let s=e[r];if(s==="--")break;if(!o.find(d=>gn(s,d)))continue;let c=s.indexOf("=");c>=0?t.push(s.slice(c+1)):n&&e[r+1]!==void 0&&(t.push(e[r+1]),r+=1)}return t}a(It,"gitFormatValues");function oa(e,o){for(let n=0;n<e.length;n+=1){if(e[n]!=="%")continue;let t=n+1;for(;e[t]==="%";)t+=1;if((t-n)%2===1&&o(e.slice(t)))return!0;n=t-1}return!1}a(oa,"hasActiveGitFormatSequence");function na(e){return oa(e,o=>/^[+\- ]?G[?GSKFPT]/.test(o))}a(na,"hasGitPrettySignaturePlaceholder");function yd(e){return oa(e,o=>/^\(\*?signature(?::[^)]*)?\)/i.test(o))}a(yd,"hasGitRefSignatureAtom");var vd=new Set(["oneline","short","medium","full","fuller","reference","email","raw","mboxrd"]);function kd(e){if(na(e))return!0;let o=e.toLowerCase();return o.startsWith("format:")||o.startsWith("tformat:")||e.includes("%")?!1:!vd.has(o)}a(kd,"gitPrettyFormatMayVerifySignature");function ta(e,o){if(e==="stash"&&o[0]?.toLowerCase()==="list")return ta("log",o.slice(1));let n=o.indexOf("--"),t=n<0?o:o.slice(0,n);return e==="tag"&&t.some(r=>r==="-v"||gn(r,"--verify"))||(e==="log"||e==="show")&&t.some(r=>gn(r,"--show-signature"))?!0:e==="log"||e==="show"?It(o,["--format"],!0).some(na)||It(o,["--pretty"],!1).some(kd):e==="branch"||e==="tag"?It(o,["--format"],!0).some(yd):!1}a(ta,"gitSignatureInspectionMayExecute");function Yi(e,o){let n=new Set([...o].filter(t=>/^-[^-]$/.test(t)).map(t=>t.slice(1)));return e.some(t=>o.has(t)||[...o].some(r=>r.startsWith("--")&&t.startsWith(`${r}=`))||ia(t,n,new Set))||e.some(t=>!t.startsWith("-"))}a(Yi,"hasGitMutationArguments");function ra(e){if(!e.startsWith("-")||e.startsWith("--")||e.length<2)return{pager:!1,consumesNext:!1};for(let o=1;o<e.length;o+=1){let n=e[o];if(n==="O")return{pager:!0,consumesNext:!1};let t=n==="e"?"pattern":n==="f"?"pattern-file":"mABC".includes(n)?"other":void 0;if(t){let r=e.slice(o+1)||void 0;return{pager:!1,valueKind:t,attachedValue:r,consumesNext:r===void 0}}}return{pager:!1,consumesNext:!1}}a(ra,"parseGitGrepShortOption");function Sd(e){for(let o=0;o<e.length;o+=1){let n=e[o];if(n==="--")return!1;if(n==="--regexp"||n==="--file"){o+=1;continue}let t=ra(n);if(t.pager)return!0;t.consumesNext&&(o+=1)}return!1}a(Sd,"hasGitGrepPagerOption");function xd(e){let o=wd(e);if(o===void 0)return!1;let n=e[o];if(!n)return!1;let t=n.toLowerCase(),r=e.slice(o+1),s=r.map(d=>d.toLowerCase()),l=s.indexOf("--"),c=l<0?s:s.slice(0,l);if(ta(t,r)||c.some(d=>Xi.has(d)||[...Xi].some(u=>d.startsWith(`${u}=`)))||t==="grep"&&Sd(r))return!1;if(dd.has(t))return!0;if(t==="stash")return s[0]==="list"||s[0]==="show";if(t==="config"){let d=s[0];return hd.has(d??"")?!1:(d==="get"||d==="list"||s.some(f=>gd.has(f)))&&!s.some(f=>pd.has(f))}if(t==="branch"){let d=s.some(f=>["--list","-l","--contains","--no-contains","--merged","--no-merged","--points-at","--show-current","--all","-a","--remotes","-r"].includes(f)||["--list=","--contains=","--no-contains=","--merged=","--no-merged=","--points-at="].some(m=>f.startsWith(m))),u=r.some(f=>!f.startsWith("-"));return!Yi(r.filter(f=>f.startsWith("-")),fd)&&(!u||d)}if(t==="tag")return(r.length===0||s.every(u=>u.startsWith("-"))||s.includes("-l")||s.includes("--list"))&&!Yi(r.filter(u=>u.startsWith("-")),md);if(t==="remote"){let d=s.find(u=>!u.startsWith("-"));return d===void 0||d==="get-url"?!0:d!=="show"?!1:s.includes("-n")||s.includes("--no-query")}return!1}a(xd,"isGitReadCommand");var bd=/(?:^|_)(?:api_?key|access_?key|secret|token|password|passwd|credential|private_?key|auth|cookie)(?:_|$)/i,$d=new Set(["-eq","-ne","-gt","-ge","-lt","-le","-like","-notlike","-match","-notmatch","-contains","-notcontains","-in","-notin"]);function Ad(e){return e.length>0&&!/[${};&|<>`]/.test(e)&&!e.includes("$(")}a(Ad,"isSafePowerShellLiteral");function Rd(e){let o=/^\$env:([a-z_][a-z0-9_]*)$/i.exec(e[0]??"");return!o||bd.test(o[1])?!1:e.length===1?!0:e.length===3&&["-split","-like","-notlike","-match","-notmatch"].includes(e[1]?.toLowerCase()??"")&&(e[2]?.length??0)>0&&!/[{}&|<>`]/.test(e[2]??"")&&!(e[2]??"").includes("$(")}a(Rd,"isSafePowerShellEnvironmentRead");function Ed(e){let o=e.slice(1),n=o[0]==="{"&&o.at(-1)==="}"?o.slice(1,-1):o;if(n.length!==3)return!1;let[t,r,s]=n;return/^\$_(?:(?:\.)?[a-z_][a-z0-9_]*)?$/i.test(t??"")&&$d.has(r?.toLowerCase()??"")&&Ad(s??"")}a(Ed,"isSafeWhereObjectRead");function Cd(e){let o=new Set(["-unique","-wait"]),n=new Set(["-first","-last","-skip","-index"]),t=new Set(["-property","-expandproperty"]);for(let r=1;r<e.length;r+=1){let s=e[r]??"",l=s.toLowerCase();if(!o.has(l)){if(n.has(l)){if(!/^\d+(?:,\d+)*$/.test(e[++r]??""))return!1;continue}if(t.has(l)){if(!/^(?:\*|[a-z_][a-z0-9_]*)(?:,(?:\*|[a-z_][a-z0-9_]*))*$/i.test(e[++r]??""))return!1;continue}if(!/^(?:\*|[a-z_][a-z0-9_]*)(?:,(?:\*|[a-z_][a-z0-9_]*))*$/i.test(s))return!1}}return!0}a(Cd,"isSafeSelectObjectRead");function Id(e){return!e.slice(1).some(o=>/^--pre(?:=|$)/i.test(o)||/^--hostname-bin(?:=|$)/i.test(o))}a(Id,"isSafeRipgrepRead");var Td=/^(?:-delete|-exec|-execdir|-ok|-okdir|-fprint|-fprint0|-fprintf|-fls)$/i;function Pd(e){return!e.slice(1).some(o=>Td.test(o))}a(Pd,"isSafeFindRead");var sa=new Set(["H","I","L","P","T"]);var Pt=new Set(["o"]),_d=new Set(["--charset","--filelimit","--output","--sort","--timefmt"]);function gn(e,o){let n=e.indexOf("="),t=(n>=0?e.slice(0,n):e).toLowerCase();return t.startsWith("--")&&t.length>=3&&o.startsWith(t)}a(gn,"longOptionCouldMatch");function ia(e,o,n){if(!/^-[^-]/.test(e))return!1;for(let t of e.slice(1)){if(o.has(t))return!0;if(n.has(t))return!1}return!1}a(ia,"shortOptionClusterContains");function Ld(e){return!e.slice(1).some(o=>ia(o,Pt,sa)||gn(o,"--output"))}a(Ld,"isSafeTreeRead");function Md(e){let o=e.slice(1);if(o.length===0)return!0;for(let n=0;n<o.length;n+=1){let t=o[n]??"",r=t.toLowerCase();if(!(r==="/t"||r==="--help"||r==="--version"||t.startsWith("+"))){if(r==="-s"||r==="--set"||r.startsWith("--set="))return!1;if(["-d","--date","-r","--reference"].includes(r)){if(o[++n]===void 0)return!1;continue}if(!/^--(?:date|reference)=/i.test(t)&&!(/^(?:-u|--utc|--universal|-R|--rfc-email|--resolution|--debug)$/i.test(t)||/^--(?:iso-8601|rfc-3339)(?:=|$)/i.test(t)))return!1}}return!0}a(Md,"isSafeDateRead");function Od(e){return e.length>0&&!/[\\/]/.test(e)}a(Od,"isBareShellExecutable");function Wd(e){if(e.length===0||!Od(e[0]??""))return!1;if(Rd(e))return!0;let o=(e[0]??"").toLowerCase(),n=yn(e[0]??"");if(o==="where.exe")return!0;if(n==="where-object"||o==="where"||o==="?")return Ed(["where-object",...e.slice(1)]);if(n==="select-object")return Cd(e);if(n==="rg"||n==="ripgrep")return Id(e);if(n==="find")return Pd(e);if(n==="less")return!1;if(n==="tree")return Ld(e);if(n==="date")return Md(e);let r=[n,...e.slice(1).map(s=>s.toLowerCase())].join(" ");if(n==="git")return xd([n,...e.slice(1)]);for(let s of ai)if(r===s||r.startsWith(s+" ")){if(["npm","tsc","go","cargo","rustc"].includes(s)){let c=r.split(/\s+/).slice(1);if(c.length>0&&!c.every(d=>/^(-v|--version|-h|--help)$/.test(d)))return!1}return!0}return!1}a(Wd,"isShellReadOnlyArgv");function Co(e){if(!e||!e.trim())return!1;let o=$o(e.trim());if(o.unparseable||o.statements.length===0)return!1;let n=o.statements.length>1||(o.statements[0]?.stages.length??0)>1;for(let t of o.statements){if(t.precedingOp!==null&&t.precedingOp!=="&&"&&t.precedingOp!==";")return!1;for(let r of t.stages){for(let l of r.redirections)if(!l.descriptorDuplication&&(l.input||!Et(l.target)))return!1;if(r.argv.join(" ")&&!(n&&r.argv[0]?.toLowerCase()==="cd"&&r.argv.length>=2)&&!Wd(r.argv))return!1}}return!0}a(Co,"isBashReadCommand");function Nd(e){let o=e.trim();return o?Co(o)?null:"[Blocked] Direct !command execution only supports safe read-only commands. Use the bash tool for commands that write files, invoke shells, or require confirmation.":"[Shell: No command provided]"}a(Nd,"getDirectShellBypassBlockReason");var aa=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]),Dd={bash:new Set(["-c"]),dash:new Set(["-c"]),sh:new Set(["-c"]),zsh:new Set(["-c"]),cmd:new Set(["/c"]),powershell:new Set(["-command","-c"]),pwsh:new Set(["-command","-c"])};function _t(e){let o=e[0]?.replace(/\\/g,"/"),n=o?.slice(o.lastIndexOf("/")+1).replace(/\.exe$/i,"").toLowerCase();if(!n)return;let t=Dd[n];if(!t)return;let r=e.findIndex((s,l)=>l>0&&t.has(s.toLowerCase()));return r>=0?e[r+1]:void 0}a(_t,"getNestedShellCommand");function Nt(e){return la(e,0)}a(Nt,"isBashWriteCommand");function la(e,o){if(!e||!e.trim())return!1;let n=$o(e);if(n.unparseable)return!1;for(let t of n.statements)for(let r of t.stages){let s=r.argv.map(c=>c.toLowerCase());if(s.length>0){let c=s[0],d=s.length>=2?`${s[0]} ${s[1]}`:null;for(let u of ii)if(u===c||d!==null&&u===d)return!0}for(let c of s)if(aa.has(c))return!0;for(let c of r.redirections)if(!c.descriptorDuplication&&!c.input&&!Et(c.target))return!0;let l=o<3?_t(r.argv):void 0;if(l!==void 0&&la(l,o+1))return!0}return!1}a(la,"isBashWriteCommandAtDepth");function Dt(e){let o=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\((.+)\)$/);return o?{tool:o[1].toLowerCase(),pattern:o[2]}:{tool:e.toLowerCase(),pattern:null}}a(Dt,"parseAllowedToolPattern");function Ud(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(Ud,"matchesBashPatternLegacy");function jd(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a(jd,"matchesBashPatternByExtractedPrefix");async function Ut(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let s=o.command??"",l=[];for(let c of n){let d=Dt(c);if(d.tool==="bash"){if(d.pattern===null)return!0;l.push({pattern:d.pattern})}}if(l.length===0)return!1;if(t){let c;try{c=await t.extract(s,r)}catch{return!1}if(c.kind!=="prefix")return!1;for(let{pattern:d}of l)if(d&&jd(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&Ud(s,c))return!0;return!1}a(Ut,"isToolCallAllowed");function jt(e,o,n){if(e.toLowerCase()!=="bash")return"";let t=o.command??"",r=t.split(" ");return r.length>1?`Bash(${r.slice(0,2).join(" ")}:*)`:`Bash(${t})`}a(jt,"generateSavePattern");function Te(e,o){try{let n=N.resolve(e),t=N.resolve(o),r=oe(),s=N.join(t,".kodax");return j(n,s)||j(n,r)?!0:!(j(n,t)||ma().some(c=>j(n,c)))}catch{return!1}}a(Te,"isAlwaysConfirmPath");function pn(e){return!e||e.startsWith("-")?!1:/^\.\.?[/\\]/.test(e)||e.startsWith("~/")||e.startsWith("~\\")||/^[a-zA-Z]:[/\\]/.test(e)||/^\\\\/.test(e)?!0:e.startsWith("/")&&e.length>1?!(process.platform==="win32"&&Lt.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e)||e.split(/[/\\]+/).includes(".."))}a(pn,"looksLikePath");var Lt=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/,Ji={python:new Set(["-c"]),py:new Set(["-c"]),node:new Set(["-e","--eval","-p","--print"]),ruby:new Set(["-e"]),perl:new Set(["-e"])},Fd=new Set(["rg","ripgrep","grep","egrep","fgrep","findstr","select-string","sls","sed","awk"]),Hd=new Set(["-e","--regexp","--regex","-pattern"]),Bd=new Set(["-f","--file"]),Zi=new Set(["-g","--glob","--iglob","-r","--replace"]),Tt=new Set(["--include","--exclude","--exclude-dir"]),Gd={rg:Zi,ripgrep:Zi,grep:Tt,egrep:Tt,fgrep:Tt,awk:new Set(["-v","--assign"]),"select-string":new Set(["-inputobject"])},Kd={rg:new Set(["--ignore-file"]),ripgrep:new Set(["--ignore-file"]),grep:new Set(["--exclude-from"]),egrep:new Set(["--exclude-from"]),fgrep:new Set(["--exclude-from"]),"select-string":new Set(["-path","-literalpath"])},zd=["path","literalpath","include","exclude","pattern","simplematch","casesensitive","quiet","list","allmatches","notmatch","encoding","context","raw","culture","inputobject","noemphasis","verbose","debug","erroraction","warningaction","informationaction","errorvariable","warningvariable","informationvariable","outvariable","outbuffer","pipelinevariable","progressaction"],qd=new Set(["simplematch","casesensitive","quiet","list","allmatches","notmatch","raw","noemphasis","verbose","debug"]),Vd={pspath:"literalpath",vb:"verbose",db:"debug",ea:"erroraction",wa:"warningaction",infa:"informationaction",ev:"errorvariable",wv:"warningvariable",iv:"informationvariable",ov:"outvariable",ob:"outbuffer",pv:"pipelinevariable"},Xd=new Set(["-f","--file","--blob"]),Yd=new Set(["-g","-s","--format","--pretty","--date","--encoding","--diff-algorithm","--word-diff-regex","--diff-filter","--find-object","--line-prefix","--src-prefix","--dst-prefix","--grep","--author","--committer","--since","--after","--until","--before","--max-count","-n","--skip","--min-parents","--max-parents","--inter-hunk-context","--anchored"]),Jd=new Set(["--max-count","--after-context","--before-context","--context","--threads"]);function yn(e){let o=e.replace(/\\/g,"/");return(o.split("/").pop()??o).toLowerCase().replace(/\.exe$/,"")}a(yn,"commandBasename");function Zd(){return{sourceIndexes:new Set,pathIndexes:new Set,pathValues:new Set}}a(Zd,"createCommandArgumentRoles");function W(e,o,n,t){let r=e[o];r!==void 0&&(n.add(o),t?.add(r))}a(W,"addIndexedValue");function ca(e,o,n){let t=e[o];if(!t)return;let r=/^%[A-Za-z_][A-Za-z0-9_]*%[/\\]/.test(t)||/^\$(?:env:)?(?:\{[A-Za-z_][A-Za-z0-9_]*\}|[A-Za-z_][A-Za-z0-9_]*)[/\\]/i.test(t),s=/[*?[\]]/.test(t)||/\{[^{}]*,[^{}]*\}/.test(t);(pn(t)||r||s)&&W(e,o,n.pathIndexes,n.pathValues)}a(ca,"addGitPathCandidate");function hn(e,o){let n=e.toLowerCase();if(o.startsWith("--")){let t=`${o}=`;return n.startsWith(t)?e.slice(t.length):void 0}return n.startsWith(o)&&e.length>o.length?e.slice(o.length):void 0}a(hn,"attachedOptionValue");function Qd(e,o,n){for(let t=1;t<e.length;t+=1){let r=e[t]??"",s=r.toLowerCase();for(let l of o){if(s===l){W(e,t+1,n.sourceIndexes);break}if(hn(r,l)!==void 0){n.sourceIndexes.add(t);break}}}}a(Qd,"collectScriptSourceRoles");function Mt(e,o,n,t){if(o)for(let r=1;r<e.length;r+=1){let s=e[r]??"";if(s==="--")break;let l=s.toLowerCase();for(let c of o){if(l===c){W(e,r+1,n,t);break}let d=hn(s,c);if(d!==void 0){n.add(r),t?.add(d);break}}}}a(Mt,"collectFlagValueRoles");function eu(e,o,n){let t=!1,r=!1;for(let s=o+1;s<e.length;s+=1){let l=e[s]??"";if(l==="--"){r=!0;continue}let c=l.toLowerCase();if(!r&&c==="--file"){W(e,s+1,n.pathIndexes,n.pathValues),t=!0,s+=1;continue}if(!r&&c.startsWith("--file=")){n.pathIndexes.add(s),n.pathValues.add(l.slice(l.indexOf("=")+1)),t=!0;continue}if(!r&&(c==="--regexp"||c==="-e")){W(e,s+1,n.sourceIndexes),t=!0,s+=1;continue}if(!r&&c.startsWith("--regexp=")){n.sourceIndexes.add(s),t=!0;continue}if(!r&&Jd.has(c)){W(e,s+1,n.sourceIndexes),s+=1;continue}if(!r){let d=ra(l);if(d.valueKind==="pattern-file"){d.attachedValue!==void 0?(n.pathIndexes.add(s),n.pathValues.add(d.attachedValue)):(W(e,s+1,n.pathIndexes,n.pathValues),s+=1),t=!0;continue}if(d.valueKind==="pattern"){d.attachedValue!==void 0?n.sourceIndexes.add(s):(W(e,s+1,n.sourceIndexes),s+=1),t=!0;continue}if(d.valueKind==="other"){d.consumesNext&&(W(e,s+1,n.sourceIndexes),s+=1);continue}if(l.startsWith("-"))continue}if(!t){n.sourceIndexes.add(s),t=!0;continue}ca(e,s,n)}}a(eu,"collectGitGrepArgumentRoles");function ou(e,o,n){let t=!1;for(let r=o+1;r<e.length;r+=1){let s=e[r]??"";if(s==="--"){t=!0;continue}if(!t&&Yd.has(s.toLowerCase())){W(e,r+1,n.sourceIndexes),r+=1;continue}!t&&s.startsWith("-")||ca(e,r,n)}}a(ou,"collectGitReadPathRoles");function nu(e){let o=/^-([^:]+)(?::(.*))?$/s.exec(e);if(!o)return;let n=o[1]?.toLowerCase()??"",t=Vd[n],r=t?[t]:zd.filter(s=>s.startsWith(n));if(r.length===1)return{name:r[0],...o[2]!==void 0?{attachedValue:o[2]}:{}}}a(nu,"resolvePowerShellSelectStringParameter");function tu(e,o){let n=!1;for(let t=1;t<e.length;t+=1){let r=e[t]??"",s=nu(r);if(s){if(qd.has(s.name))continue;let l=s.attachedValue===void 0?t+1:t,c=s.attachedValue??e[l];if(c===void 0)continue;s.name==="path"||s.name==="literalpath"?(o.pathIndexes.add(l),o.pathValues.add(c)):o.sourceIndexes.add(l),s.name==="pattern"&&(n=!0),s.attachedValue===void 0&&(t+=1);continue}if(!r.startsWith("-")){if(!n){o.sourceIndexes.add(t),n=!0;continue}W(e,t,o.pathIndexes,o.pathValues)}}}a(tu,"collectPowerShellSelectStringArgumentRoles");function ru(e,o){let n=yn(e[0]??"");if(n==="select-string"||n==="sls"){tu(e,o);return}Mt(e,Gd[n],o.sourceIndexes),Mt(e,Kd[n],o.pathIndexes,o.pathValues);let t=!1;for(let s=1;s<e.length;s+=1){let l=e[s]??"";if(l==="--")break;let c=l.toLowerCase();if(n==="findstr"&&c.startsWith("/f:")){o.pathIndexes.add(s),o.pathValues.add(l.slice(3));continue}if(n==="findstr"&&c.startsWith("/c:")){o.sourceIndexes.add(s),t=!0;continue}if(n==="findstr"&&c.startsWith("/g:")){o.pathIndexes.add(s),o.pathValues.add(l.slice(3)),t=!0;continue}for(let d of Hd){if(c===d){W(e,s+1,o.sourceIndexes),t=!0;break}if(hn(l,d)!==void 0){o.sourceIndexes.add(s),t=!0;break}}for(let d of Bd){if(c===d){W(e,s+1,o.pathIndexes,o.pathValues),t=!0;break}let u=hn(l,d);if(u!==void 0){o.pathValues.add(u),t=!0;break}}}if(!t){let s=!1;for(let l=1;l<e.length;l+=1){let c=e[l]??"";if(c==="--"){s=!0;continue}if(!(o.sourceIndexes.has(l)||o.pathIndexes.has(l))&&!(!s&&c.startsWith("-"))&&!(n==="findstr"&&Lt.test(c))){W(e,l,o.sourceIndexes);break}}}let r=!1;for(let s=1;s<e.length;s+=1){let l=e[s]??"";if(l==="--"){r=!0;continue}!r&&l.startsWith("-")||o.sourceIndexes.has(s)||o.pathIndexes.has(s)||n==="findstr"&&Lt.test(l)||W(e,s,o.pathIndexes,o.pathValues)}}a(ru,"collectRegexArgumentRoles");function su(e,o){if(!e.slice(1).some(r=>/^--from(?:tab)?file(?:=|$)/i.test(r)))return;let t=!1;for(let r=1;r<e.length;r+=1){let s=e[r]??"",l=/^--from(?:tab)?file=(.*)$/i.exec(s)?.[1];if(l!==void 0){o.pathIndexes.add(r),l&&o.pathValues.add(l);continue}if(/^--from(?:tab)?file$/i.test(s)||s==="--"){o.sourceIndexes.add(r),s==="--"&&(t=!0);continue}if(!t&&/^-[^-]/.test(s)){let c=s.slice(1),d=[...c].findIndex(u=>sa.has(u)||Pt.has(u));if(o.sourceIndexes.add(r),d>=0&&c.slice(d+1).length===0){let u=Pt.has(c[d]??"");W(e,r+1,u?o.pathIndexes:o.sourceIndexes,u?o.pathValues:void 0),r+=1}continue}if(!t&&s.startsWith("--")){let c=s.split("=",1)[0]?.toLowerCase()??"";if(o.sourceIndexes.add(r),_d.has(c)&&!s.includes("=")){let d=c==="--output";W(e,r+1,d?o.pathIndexes:o.sourceIndexes,d?o.pathValues:void 0),r+=1}continue}W(e,r,o.pathIndexes,o.pathValues)}}a(su,"collectTreeFileListRoles");function Ot(e){let o=Zd(),n=yn(e[0]??"");if(n==="git"){let r=ea(e,o.pathIndexes,o.pathValues),s=r===void 0?void 0:e[r]?.toLowerCase();r!==void 0&&s==="grep"?eu(e,r,o):r!==void 0&&(s==="diff"||s==="log"||s==="show")?ou(e,r,o):s==="config"&&Mt(e,Xd,o.pathIndexes,o.pathValues)}let t=/^python(?:\d+(?:\.\d+)*)?$/.test(n)?Ji.python:Ji[n];return t&&Qd(e,t,o),Fd.has(n)&&ru(e,o),n==="tree"&&su(e,o),o}a(Ot,"collectCommandArgumentRoles");function Ft(e){let o=[],n=[],t="",r=-1,s,l=a(d=>{r<0||(n.push({value:t,start:r,end:d}),t="",r=-1)},"finishWord"),c=a(()=>{n.length>0&&o.push(n),n=[]},"finishStage");for(let d=0;d<e.length;d+=1){let u=e[d];if(s){u===s?s=void 0:s==='"'&&u==="\\"&&e[d+1]==='"'?(t+=`${u}${e[d+1]}`,d+=1):t+=u;continue}u==='"'||u==="'"?(r<0&&(r=d),s=u):/\s/.test(u)?l(d):u==="|"||u==="&"||u===";"?(l(d),c()):(r<0&&(r=d),t+=u)}return s?[]:(l(e.length),c(),o)}a(Ft,"tokenizeRawCommandStages");function da(e){let o=e.split("");for(let n of Ft(e)){let t=Ot(n.map(r=>r.value));for(let r of t.sourceIndexes){let s=n[r];if(s)for(let l=s.start;l<s.end;l+=1)o[l]=" "}}return o.join("")}a(da,"maskRawInlineSources");function iu(e){let o=[],n;for(let s of[/"([A-Za-z]:\\[^"\r\n]+)"/g,/'([A-Za-z]:\\[^'\r\n]+)'/g])for(;(n=s.exec(e))!==null;)o.push(n[1]);let t=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(n=t.exec(e))!==null;)o.push(n[1]);let r=/(?:^|[\s:=<>])([a-zA-Z]:\\[^\s"'|;&<>]+)/g;for(;(n=r.exec(e))!==null;)o.push(n[1]);return o}a(iu,"legacyRegexPathScan");function vn(e){let o=new Set,n=$o(e);if(n.unparseable)return[];for(let t of Ft(e)){let r=t.map(l=>l.value),s=Ot(r);for(let l of s.pathValues)o.add(l);if(process.platform==="win32")for(let l=0;l<r.length;l+=1){if(s.sourceIndexes.has(l)||s.pathIndexes.has(l))continue;let c=r[l];pn(c)&&o.add(c)}}for(let t of n.statements)for(let r of t.stages){let s=Ot(r.argv);if(process.platform!=="win32")for(let l of s.pathValues)o.add(l);for(let l=0;l<r.argv.length;l+=1){let c=r.argv[l];s.sourceIndexes.has(l)||s.pathIndexes.has(l)||pn(c)&&o.add(c)}for(let l of r.redirections)l.descriptorDuplication||pn(l.target)&&o.add(l.target)}for(let t of iu(da(e)))o.add(t);return Array.from(o)}a(vn,"extractPathsFromCommand");function au(e,o,n=o){let t=vn(e);for(let r of t){let s=Xo(r,n);if(Te(s,o))return!0}return!1}a(au,"isCommandOnProtectedPath");function Qi(e){let o=N.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(Qi,"normalizePathForComparison");function lu(e,o){return Qi(e)===Qi(o)}a(lu,"pathsEqual");function Ht(e,o){try{let n=N.resolve(o),t=N.resolve(n,fa(ua(e)));return j(t,n)}catch{return!1}}a(Ht,"isPathInsideProject");function cu(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(cu,"collectAbsolutePathCandidates");function Bt(e){let o=N.resolve(e),n=fn.get(o);if(n)return n;if(un.existsSync(o)){let c=un.realpathSync.native(o);return fn.set(o,c),c}let t=[],r=o;for(;!un.existsSync(r);){let c=N.dirname(r);if(c===r)return fn.set(o,o),o;t.unshift(N.basename(r)),r=c}let s=un.realpathSync.native(r),l=N.join(s,...t);return fn.set(o,l),l}a(Bt,"resolveExistingPathPrefix");function ua(e){return e==="~"?Eo.homedir():e.startsWith(`~${N.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?N.join(Eo.homedir(),e.slice(2)):e}a(ua,"expandHomeDirectory");function fa(e){let o=Eo.tmpdir(),n=[[/^%temp%/i,o],[/^%tmp%/i,o],[/^\$env:temp\b/i,o],[/^\$env:tmp\b/i,o],[/^\$tmpdir\b/i,o],[/^\$temp\b/i,o],[/^\$tmp\b/i,o]];for(let[t,r]of n)if(t.test(e))return e.replace(t,r);return e}a(fa,"expandSystemTempAlias");function du(e,o,n=o){let t=N.resolve(n??o??process.cwd()),r=fa(ua(e)),s=N.isAbsolute(r)?N.resolve(r):N.resolve(t,r);return Bt(s)}a(du,"resolvePermissionPath");function ma(){if(mn)return mn;let e=new Set,o=[Eo.tmpdir(),process.env.TEMP,process.env.TMP,process.env.TMPDIR].filter(n=>typeof n=="string"&&n.trim().length>0);for(let n of o)try{e.add(Bt(n))}catch{}return mn=Array.from(e),mn}a(ma,"getSystemTempDirectories");function Gt(e){let o=Bt(e??process.cwd());return{projectPlanDoc:N.join(o,cd),systemTempDirs:ma()}}a(Gt,"getPlanModeAllowedWritablePaths");function Wt(e,o,n=o){let t=du(e,o,n),{projectPlanDoc:r,systemTempDirs:s}=Gt(o);return lu(t,r)?!0:s.some(l=>j(t,l))}a(Wt,"isPlanModeAllowedPath");function uu(e){let{projectPlanDoc:o,systemTempDirs:n}=Gt(e),t=n[0]??Eo.tmpdir();return`${o} or the system temp directory (${t})`}a(uu,"formatPlanModeAllowedLocations");var fu=new Set(["-a","--append","-i","--ignore-interrupts"]);function mu(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];fu.has(t)||t.startsWith("-")||o.push(t)}return o}a(mu,"collectTeeTargets");function pu(e){let o=qi(e.argv),n=[];for(let t of o.operations)"target"in t?n.push(t.target):t.kind==="copy"?n.push(t.destination):n.push(t.source,t.destination);return n}a(pu,"collectPowerShellWriteTargets");function eo(e){return wn(e,0,!0)}a(eo,"collectBashWriteTargets");function pa(e){return wn(e,0,!1)}a(pa,"collectDeterministicBashWriteTargets");var gu=new Set(["rm","rmdir","mkdir","touch","mv","move","ren","del","erase","rd"]),hu=new Set(["cp","copy"]),wu={copy:new Set(["/a","/b","/d","/j","/l","/n","/v","/y","/-y","/z"]),del:new Set(["/p","/f","/s","/q","/a"]),erase:new Set(["/p","/f","/s","/q","/a"]),move:new Set(["/y","/-y"]),rd:new Set(["/s","/q"]),rmdir:new Set(["/s","/q"])};function yu(e,o){let n=o.toLowerCase(),t=n.slice(0,n.indexOf(":")>=0?n.indexOf(":"):n.length);return wu[e]?.has(t)===!0}a(yu,"isCmdMutationSwitch");function vu(e,o,n=1){let t=[],r=!1;for(let s=n;s<o.length;s+=1){let l=o[s];if(!r&&["touch","chmod","chown"].includes(e)){if(e==="touch"&&l==="-r"||l==="--reference"){s+=1;continue}if(/^--reference=/.test(l)||e==="touch"&&/^-r.+/.test(l))continue}l==="--"?r=!0:(r||!l.startsWith("-")&&!yu(e,l))&&t.push(l)}return t}a(vu,"collectPositionalArgs");function ku(e){let o=yn(e.argv[0]??""),n=vu(o,e.argv);if(gu.has(o))return n;if(hu.has(o)){let t=e.argv.findIndex(s=>s==="-t"||s==="--target-directory");if(t>=0){let s=e.argv[t+1];return s?[s]:[]}let r=e.argv.find(s=>s.startsWith("--target-directory="));return r?[r.slice(19)]:n.slice(-1)}if(o==="chmod"||o==="chown")return e.argv.some(r=>r==="--reference"||r.startsWith("--reference="))?n:n.slice(1);if(o==="dd"){let t=e.argv.find(r=>r.startsWith("of="));return t?[t.slice(3)]:[]}return[]}a(ku,"collectDirectCommandWriteTargets");function Su(e){let o=[],n=da(e),t;for(let r=0;r<n.length;r+=1){let s=n[r];if(t!==void 0){s===t?t=void 0:s==="\\"&&t==='"'&&(r+=1);continue}if(s==='"'||s==="'"){t=s;continue}if(s==="\\"){r+=1;continue}if(s!==">")continue;for(n[r+1]===">"&&(r+=1);/\s/.test(n[r+1]??"");)r+=1;let l=n[r+1],c=r+(l==='"'||l==="'"?2:1),d=c;for(;d<n.length;){let u=n[d];if(l==='"'||l==="'"){if(u===l)break}else if(/\s|[|;&<>]/.test(u))break;d+=1}d>c&&o.push(n.slice(c,d)),r=d}return o}a(Su,"collectRawOutputRedirectionTargets");function wn(e,o,n){let t=new Set,r=a(l=>{let c=l?.trim();c&&t.add(c)},"pushTarget");if(n)for(let l of vn(e))r(l);else for(let l of Su(e))r(l);let s=$o(e);if(s.unparseable){if(o<3)for(let l of Ft(e)){let c=_t(l.map(d=>d.value));if(c!==void 0)for(let d of wn(c,o+1,n))r(d)}return Array.from(t)}for(let l of s.statements)for(let c of l.stages){for(let f of c.redirections)f.descriptorDuplication||f.input||r(f.target);let d=c.argv[0]?.toLowerCase();if(!d)continue;if(d==="tee")for(let f of mu(c))r(f);else if(aa.has(d))for(let f of pu(c))r(f);if(!n)for(let f of ku(c))r(f);let u=o<3?_t(c.argv):void 0;if(u!==void 0)for(let f of wn(u,o+1,n))r(f)}return Array.from(t)}a(wn,"collectBashWriteTargetsAtDepth");function ga(e,o){if(!Nt(e))return{dangerous:!1};let n=new Set([...eo(e),...cu(e)]);for(let t of n)if(!Ht(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(ga,"getBashOutsideProjectWriteRisk");function ha(e,o,n,t=n){let r=uu(n);if(Is(e))return null;if(Ee.has(e)){let s=typeof o.path=="string"?o.path:"";return s?Wt(s,n,t)?null:`[Blocked] Plan mode only allows file modifications in ${r}. Requested path: ${s}`:`[Blocked] Tool '${e}' is not allowed in plan mode unless it targets ${r}.`}if(e==="bash"){let s=o.command??"";if(!Nt(s))return null;let l=eo(s);if(l.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${r}. Could not determine a safe target from: ${s.slice(0,80)}${s.length>80?"...":""}`;let c=l.find(d=>!Wt(d,n,t));return c?`[Blocked] Plan mode only allows bash write operations in ${r}. Blocked target: ${c}`:null}return`[Blocked] Tool '${e}' has side effects and is not permitted in plan mode. Switch to accept-edits or auto mode to use it, or work within ${r}.`}a(ha,"getPlanModeBlockReason");import Kt from"node:path";var xu=cn("accept-edits");function bu(e,o,n){if(e.name==="bash"){let t=typeof e.input.command=="string"?e.input.command:"";return t.length>0&&Co(t)}if(Ee.has(e.name)){let t=typeof e.input.path=="string"?e.input.path:"";if(!t||!o)return!1;let r=Kt.isAbsolute(t)?Kt.resolve(t):Kt.resolve(n||o,t);return!Te(r,o)}return!xu.has(e.name)}a(bu,"allowsAcceptEditsClassifierFallback");import kn from"node:path";import qt from"node:os";function ya(){try{return oe()}catch{return}}a(ya,"safeGetAgentConfigHome");function zt(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return Xo(e.replace(n,qt.homedir()),o)}a(zt,"resolveShellWriteTarget");function wa(e,o){let n=ya();if(n&&j(e,n))return"user-kodax";let t=kn.join(kn.resolve(o),".kodax");if(j(e,t))return"project-kodax"}a(wa,"resolveProtectedZone");function $u(){let e=new Set;try{e.add(qt.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($u,"getSystemTempDirs");var Au=new Set(["bash"]),Ru={toolNames:Au,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],s=new Set,l=new Set,c=$u(),d=kn.resolve(o);for(let u of vn(t)){let f;try{f=zt(u,n)}catch{continue}let m=wa(f,o);if(m){s.has(f)||(s.add(f),r.push({kind:"protected_path",path:u,zone:m}));continue}if(Te(f,o)){let S=c.some(k=>j(f,k)),x=j(f,d);!S&&!x&&!l.has(f)&&(l.add(f),r.push({kind:"outside_project",path:u}))}}for(let u of eo(t)){let f;try{f=zt(u,n)}catch{continue}wa(f,o)||j(f,d)||c.some(x=>j(f,x))||r.push({kind:"shell_redirect_outside",target:u})}return r}},vw=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([kn.join(qt.homedir(),".kodax")]),s=ya();s&&r.add(s);for(let l of pa(t)){let c=zt(l,n);if([...r].some(d=>j(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 xn=O("config.json");function xa(){return Sa.join(process.cwd(),".kodax","config.local.json")}a(xa,"getProjectConfigFile");function Ow(e=process.env){let o=Io(xn);return Eu({settings:o.autoMode,env:e})}a(Ow,"loadAutoModeSettings");function Eu(e={}){let o=e.settings??{},n=e.env??{},t=n.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,s=o.engine==="llm"||o.engine==="rules"?o.engine:void 0,l=r??s??"llm",c=ka(o.classifierModel),d=ka(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=n.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,m=Number.isFinite(f)&&f>0?Math.floor(f):void 0,S=typeof o.timeoutMs=="number"&&o.timeoutMs>0?Math.floor(o.timeoutMs):void 0,x=va(n.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),k=typeof o.speculativeWindowMs=="number"?va(String(o.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??S,speculativeWindowMs:x??k}}a(Eu,"resolveAutoModeSettings");function va(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(va,"parseSpeculativeWindow");function ka(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(ka,"nonEmptyString");function Io(e){try{if(Sn.existsSync(e))return JSON.parse(Sn.readFileSync(e,"utf-8"))}catch{}return{}}a(Io,"readJsonFile");function ba(e,o){Sn.mkdirSync(Sa.dirname(e),{recursive:!0}),Sn.writeFileSync(e,JSON.stringify(o,null,2))}a(ba,"writeJsonFile");function Vt(e){let o=Io(xn);ba(xn,{...o,permissionMode:e})}a(Vt,"savePermissionModeUser");function Ww(){let e=Io(xn),o=Io(xa()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Ww,"loadAlwaysAllowTools");function Nw(e,o,n=!1){let t=jt(e,o,n);if(!t)return;let r=xa(),s=Io(r),l=s.alwaysAllowTools??[];l.includes(t)||ba(r,{...s,alwaysAllowTools:[...l,t]})}a(Nw,"saveAlwaysAllowToolPattern");var Xt=["ama","sa"];function $a(e){let o=Xt.indexOf(e);return Xt[(o+1)%Xt.length]??"ama"}a($a,"nextAgentMode");var we=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let s=r.toLowerCase();if(s!==n){if(t.has(s))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(s))throw new Error(`Alias "${r}" conflicts with existing command "${s}"`);if(this.aliases.has(s)){let l=this.aliases.get(s);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(s)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let s=r.toLowerCase();s!==n&&this.aliases.set(s,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let s of r.aliases)this.aliases.delete(s.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Cu=new we;function Yt(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(Yt,"formatLearningStatus");function Gw(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${Yt(e)} [/learn]`}a(Gw,"formatLearningRecoverySummary");import V from"chalk";import{Buffer as Ca}from"node:buffer";import{spawn as Iu}from"node:child_process";import Aa from"node:process";var Pe="\x1B",Tu="\x07",Jt=`${Pe}\\`;function Ra(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(Ra,"shouldPreferNativeClipboard");function Pu(e,o){let n=Ca.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?Jt:Tu,r=`${Pe}]52;c;${n}${t}`;return o.TMUX?`${Pe}Ptmux;${r.replaceAll(Pe,`${Pe}${Pe}`)}${Jt}`:o.STY?`${Pe}P${r}${Jt}`:r}a(Pu,"buildOscSequence");async function bn(e,o,n){return new Promise((t,r)=>{let s=Iu(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";s.on("error",r),s.stderr?.on("data",c=>{l+=c.toString()}),s.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),s.stdin?.write(n),s.stdin?.end()})}a(bn,"execClipboardCommand");function _u(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=Ca.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(_u,"buildWindowsClipboardCandidates");async function Ea(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=_u(e);for(let[r,s,l]of t)try{if(await bn(r,s,l))return!0}catch{}return!1}case"darwin":return bn("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,s]of t)try{if(await bn(r,s,e))return!0}catch{}return!1}default:return!1}}a(Ea,"tryNativeClipboard");async function Lu(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await bn("tmux",n,e)}catch{return!1}}a(Lu,"tryTmuxClipboard");async function Ia(e,o={}){let n=o.env??Aa.env,t=o.platform??Aa.platform,r=e.trimEnd(),s=Pu(r,n);if(!r)throw new Error("Nothing to copy.");if(Ra(n,t))try{if(await Ea(r,n,t))return{path:"native"}}catch{}if(await Lu(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(s))return{path:"osc52"};if(!Ra(n,t))try{if(await Ea(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(Ia,"copyTextToClipboard");var Zt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(Zt||(Zt={}));var z;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(z||(z={}));var Zw={[z.Scheduled]:"\u25CB",[z.Validating]:"\u25CC",[z.AwaitingApproval]:"?",[z.Executing]:"\u25CB",[z.Success]:"\u2713",[z.Error]:"\u2717",[z.Cancelled]:"-"},Ta;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(Ta||(Ta={}));var Qw={streamingState:Zt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Mu="[redacted]",Pa="[truncated]";function ce(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(ce,"truncateToolReplayText");function Ou(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(Ou,"isSensitiveToolInputKey");function _a(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(_a,"isRecord");function Qt(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return ce(e);if(o>=6)return Pa;if(typeof e=="object"&&e!==null){if(n.has(e))return Pa;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>Qt(r,o+1,n));if(!_a(e))return ce(String(e));let t={};for(let[r,s]of Object.entries(e).slice(0,50))t[r]=Ou(r)?Mu:Qt(s,o+1,n);return t}return ce(String(e))}a(Qt,"sanitizeToolJsonValue");function La(e){if(!e)return;let o=Qt(e);return _a(o)?o:void 0}a(La,"sanitizeToolInput");function Ma(e){if(e!==void 0){if(typeof e=="string")return ce(e);try{return ce(JSON.stringify(e))}catch{return ce(String(e))}}}a(Ma,"stringifyToolReplayValue");function sy(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool",...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Bu),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(sy,"seedToHistoryItem");var Wu="[Thinking]",Nu="[/Thinking]",Du="Untitled Session",Oa=50,Uu=60,Na="...",Da=["[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:"],Ua=[/(?:^|\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:/],ju=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,Fu="Session ended before the tool completed.";function Hu(e){switch(e){case"success":return z.Success;case"error":return z.Error;case"cancelled":return z.Cancelled;case"awaiting_approval":return z.AwaitingApproval;default:return e}}a(Hu,"toolCallSeedToHistoryToolStatus");function Bu(e){return{id:e.id,name:e.name,status:Hu(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(Bu,"toolCallSeedToHistoryToolCall");function Gu(e){let o=-1;for(let n of Da){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of Ua){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Gu,"findControlPlaneCutIndex");function Ku(e){return Da.some(o=>e.includes(o))||Ua.some(o=>o.test(e))}a(Ku,"hasControlPlaneSignal");function ja(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(ja,"collectTextBlocks");function An(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(An,"isRecord");function zu(e){if(typeof e=="string")return ce(e);if(e===void 0)return"";try{return Ma(e)??""}catch{return ce(String(e))}}a(zu,"toolResultContentToString");function qu(e){let o=zu(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(qu,"inferToolResultSeed");function Vu(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!An(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,qu(n));return o}a(Vu,"collectToolResultSeeds");function Xu(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:Fu};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:La(An(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(Xu,"buildToolCallSeed");function Yu(e){return typeof e=="string"?e:Array.isArray(e)?ja(e).join(`
17
+ `):""}a(Yu,"extractAssistantTextOnly");function Po(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(Po,"pushSeed");function Wa(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(Wa,"stripLegacyTagBoundaryNewlines");function Ju(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?To(String(n.command??"")):o==="read"||o==="write"||o==="edit"?To(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?To(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?To(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(Ju,"formatToolUseSummary");function To(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(To,"truncateToolHint");function Zu(e){if(!e.includes(Wu)||!e.includes(Nu))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(ju)){let r=t.index??-1,s=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+s.length;Po(o,"assistant",Wa(e.slice(n,c))),Po(o,"thinking",l),n=r+t[0].length}return Po(o,"assistant",Wa(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(Zu,"parseLegacyAssistantContent");function Fa(e,o){if(typeof e=="string")return Zu(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],s=a(()=>{t.length!==0&&(Po(n,"assistant",t.join(`
18
+ `)),t.length=0)},"flushAssistantBuffer"),l=a(()=>{r.length!==0&&(n.push({type:"tool_group",tools:[...r]}),r.length=0)},"flushToolBuffer");for(let c of e)if(!(!An(c)||typeof c.type!="string"))switch(c.type){case"text":l(),"text"in c&&t.push(String(c.text));break;case"thinking":s(),l(),"thinking"in c&&Po(n,"thinking",String(c.thinking));break;case"tool_use":if(s(),o){let d=Xu(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=Ju({name:c.name,...An(c.input)?{input:c.input}:{}});d&&n.push({type:"tool_summary",text:d})}break;case"tool_result":case"redacted_thinking":break;default:break}return l(),s(),n}a(Fa,"extractAssistantHistorySeeds");var Qu=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],ef=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function of(e){return Qu.some(o=>e.includes(o))}a(of,"isManagedWorkerPrompt");function Ha(e){return e.replace(ef,"").trim()}a(Ha,"stripManagedProtocolBlocks");function nf(e){switch(e.role){case"assistant":return Fa(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=Ha(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=$n(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=$n(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=$n(e.content);return o.trim().length===0||of(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(nf,"extractHistorySeedsFromMessageWithoutTimestamp");function Ba(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(Ba,"withMessageTimestamp");function tf(e){return Ba(nf(e),e.timestamp)}a(tf,"extractHistorySeedsFromMessage");function iy(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=Vu(e[n+1]),s=Ba(Fa(t.content,r),t.timestamp);o.push(...s.map(l=>l.type==="assistant"?{...l,text:Ha(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...tf(t))}}return o}a(iy,"extractHistorySeedsFromMessages");function $n(e){return typeof e=="string"?e:Array.isArray(e)?ja(e).join(`
19
+ `):""}a($n,"extractTextContent");function rf(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>Oa?`${o.slice(0,Oa)}${Na}`:o:Du}a(rf,"formatSessionTitle");function sf(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(sf,"isPureToolResultUserMessage");function er(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=Yu(n.content);return t&&t.trim()!=="..."?t:""}if(!sf(n))return""}}return""}a(er,"extractLastAssistantText");function ay(e,o,n,t){let r=[er(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let s of r){let l=Ga(s);if(l)return l}return""}a(ay,"resolveCompletedAssistantText");function Ga(e){let o=e.trim();if(!o||o==="...")return"";let n=Gu(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Ga,"sanitizeUserFacingAssistantText");function ly(e){let o=e.trim();return o.length>0&&Ga(o).length===0&&Ku(o)}a(ly,"isControlPlaneOnlyAssistantText");function cy(e){let o=e.find(t=>t.role==="user"),n=o?$n(o.content):"";return rf(n)}a(cy,"extractTitle");function dy(e,o=Uu){let n=e.replace(/\n/g," "),t=n.length>o?Na:"";return n.slice(0,o)+t}a(dy,"formatMessagePreview");var or={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=er(o.messages);if(!n){console.log(V.yellow(`
20
+ No assistant message found to copy.`)),console.log(V.dim("The assistant needs to respond first before you can copy its message."));return}try{await Ia(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(V.green(`
21
+ Copied to clipboard!`)),console.log(V.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(V.red(`
22
+ Failed to copy to clipboard: ${r}`)),console.log(V.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:a(()=>{console.log(V.bold(`
23
+ /copy - Copy Last Assistant Message
24
+ `)),console.log("Usage:"),console.log(V.cyan(" /copy")+` - Copy the last assistant message to clipboard
25
+ `),console.log("Description:"),console.log(" This command copies the most recent assistant response to your system clipboard."),console.log(` Useful for quickly sharing or saving AI responses.
26
+ `),console.log("Examples:"),console.log(V.dim(" User: Explain how async/await works")),console.log(V.dim(" AI: [responds with explanation]")),console.log(V.cyan(" /copy")+V.dim(` - Copies the explanation to clipboard
27
+ `)),console.log("Notes:"),console.log(" - Only copies assistant messages, not user messages"),console.log(" - Works with both plain text and formatted responses"),console.log(" - Requires clipboard permissions on some systems")},"detailedHelp")};import v from"chalk";function af(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(af,"resolveCwd");function lf(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.userLabel} ${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.userLabel} ${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.userLabel} ${o.memoryKind}`;case"reasoning_handoff":return`${o.userLabel} ${o.title}`}}a(lf,"proposalLabel");function w(e=""){process.stdout.write(`${e}
28
+ `)}a(w,"writeOutput");function cf(e){for(let o of e)w(v.yellow(`[learn] ${o}`))}a(cf,"printWarnings");function Ka(e){w(v.yellow(`
29
+ Consumer impact:`)),w(v.dim(` action: ${e.action}`));let o=[["workflow capsules",e.workflowCapsules],["saved workflows",e.savedWorkflows],["constructed agents",e.constructedAgents],["prompt references",e.promptReferences]];for(let[n,t]of o)if(t.length!==0){w(v.dim(` ${n}:`));for(let r of t)w(v.dim(` - ${r}`))}}a(Ka,"printConsumerImpact");async function df(e){let o=Jo(e),n=await Yo(o);return cf(n.warnings),{storePath:o,store:n}}a(df,"readStore");function uf(e,o){return e.find(n=>n.proposalId===o)}a(uf,"findProposal");function ff(e,o){let n=e.filter(t=>t.status==="pending");if(w(v.cyan(`
30
+ [learn] pending learning suggestions`)),w(v.dim(` ${o}`)),n.length===0){w(v.dim(` (none)
31
+ `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";w(` ${v.cyan(t.proposalId)} ${v.dim(`[${r}]`)} ${lf(t)}`)}w(v.dim(`
32
+ Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
33
+ `))}a(ff,"printPending");function mf(e){if(w(v.cyan(`
34
+ [learn] ${e.proposalId}`)),w(v.dim(` status: ${e.status}`)),w(v.dim(` kind : ${e.proposal.destination}`)),w(`
35
+ Proposal:`),w(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Ka(e.proposal.consumerImpact),!e.applyPlan){w(v.dim(`
36
+ No F224 apply plan is attached. Approval records the handoff only.
37
+ `));return}w(`
38
+ Apply plan:`),w(v.dim(` kind : ${e.applyPlan.kind}`)),w(v.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)w(v.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&w(o.content);w()}a(mf,"printDiff");async function pf(e,o,n={}){let t=await hs(e,o,n);switch(t.status){case"approved_already_applied":w(v.green(`
39
+ [learn] approved ${o.proposalId}; files already match the apply plan.`)),w(v.dim(` recovered a pending proposal without applying it again.
40
+ `));return;case"blocked_snapshot_conflict":w(v.red(`
41
+ [learn] refusing to reapply ${o.proposalId}; ${t.relativePath} changed after the last snapshot.`)),w(v.dim(` snapshot: ${t.snapshotPath}`)),w(v.dim(` Review the file manually, then reject or recreate the learning proposal.
42
+ `));return;case"approved_applied":w(v.green(`
43
+ [learn] approved and applied ${o.proposalId}.`)),w(v.dim(` changed: ${t.changedPaths.join(", ")||"(none)"}
44
+ `));return;case"blocked_missing_apply_plan":w(v.red(`
45
+ [learn] ${o.proposalId} has no skill apply plan; nothing was applied.
46
+ `));return;case"blocked_consumer_impact":w(v.yellow(`
47
+ [learn] ${o.proposalId} requires manual consumer-impact review before approval.`)),w(v.dim(` Run /learn diff ${o.proposalId}, then /learn approve ${o.proposalId} --ack-impact after review.
48
+ `)),Ka(t.impact),w();return;case"approved_handoff":w(v.green(`
49
+ [learn] approved ${o.proposalId} as a downstream handoff.`)),w(v.dim(` F224 does not mutate workflow, memory, or reasoning carriers directly.
50
+ `));return;case"blocked_not_pending":w(v.dim(`
51
+ [learn] ${o.proposalId} is already ${t.reviewStatus}.
52
+ `));return}}a(pf,"approveProposal");function Rn(){w(v.cyan(`
53
+ /learn - Inspect and control learned capabilities`)),w(v.dim(" /learn Open the Learning Center")),w(v.dim(" /learn list [search] List learned capabilities")),w(v.dim(" /learn show <name|slug> Inspect a capability")),w(v.dim(" /learn trust|reject|disable|rollback <name|slug>")),w(v.dim(" /learn promote <name|slug|capability-id> [--scope user]")),w(v.dim(" /learn promote --help Explain formal user-catalog promotion")),w(v.dim(" Compatibility: pending, diff, approve and reject remain accepted.")),w(v.dim(` /learn help
54
+ `))}a(Rn,"printHelp");function ye(e,o){return{...o===void 0?{}:{target:o},scope:"user",help:!1,error:e}}a(ye,"invalidPromoteInvocation");function gf(e,o){let n="user",t=!1;for(let r=0;r<o.length;r+=1){let s=o[r];if(s==="--scope"){if(t)return ye("duplicate --scope option",e);let c=o[r+1];if(!c)return ye("missing value for --scope",e);n=c,t=!0,r+=1;continue}if(s.startsWith("--scope=")){if(t)return ye("duplicate --scope option",e);if(n=s.slice(8),!n)return ye("missing value for --scope",e);t=!0;continue}let l=s.startsWith("-")?`unknown promote option: ${s}`:`unexpected promote argument: ${s}`;return ye(l,e)}return n!=="user"?ye(`unsupported promote scope: ${n}; only user is supported`,e):{target:e,scope:"user",help:!1}}a(gf,"parsePromoteOptions");function za(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("-")?ye(`unknown promote option: ${n}`):gf(n,o.slice(1)):ye("missing learned Skill name, slug, or capability ID")}a(za,"parseLearnPromoteInvocation");function En(){w(v.cyan(`
55
+ /learn promote - Move one learned Skill into the formal user catalog`)),w(v.bold(`
56
+ Usage:`)),w(v.dim(" /learn promote <name|slug|capability-id> [--scope user]")),w(v.dim(" /learn promote --help")),w(v.dim(" /help learn promote")),w(v.bold(`
57
+ What it does:`)),w(v.dim(" Promote is an explicit ownership transfer, not automatic canary activation.")),w(v.dim(" Automatic evidence: testing -> active_learned inside the project Learned Area.")),w(v.dim(" Explicit promote: reviewed ready or active_learned -> promoted_user.")),w(v.dim(" The exact fingerprinted revision is copied to the configured KodaX")),w(v.dim(" user Skill directory (normally ~/.kodax/skills/<slug>/SKILL.md).")),w(v.dim(" Promotion never overwrites different formal Skill content.")),w(v.bold(`
58
+ Before promoting:`)),w(v.dim(" Use /learn show <name|slug> to inspect the exact revision and lifecycle.")),w(v.dim(" The Learning Center offers this action for active_learned Skills.")),w(v.bold(`
59
+ Examples:`)),w(v.dim(" /learn promote normalize-release-notes")),w(v.dim(` /learn promote normalize-release-notes --scope user
60
+ `))}a(En,"printPromoteHelp");async function hf(e,o){let n=o.learning;if(!n)return!1;let t=(e[0]??"").toLowerCase();if(t===""&&o.openLearningCenter)return await o.openLearningCenter(),!0;if(t===""||t==="list"||t==="pending"){let d=await n.list({search:e.slice(1).join(" ").trim()||void 0,...t==="pending"?{lifecycle:"ready"}:{},limit:200});w(v.cyan(`
61
+ [learn] Learning Center`)),d.items.length===0&&w(v.dim(" (none)"));let u=new Map;for(let f of d.items)u.set(f.slug,(u.get(f.slug)??0)+1);for(let f of d.items){let m=(u.get(f.slug)??0)>1?` ${v.dim(`id=${f.capabilityId}`)}`:"";w(` ${v.cyan(f.slug)}${m} ${v.dim(`[${f.carrier}/${f.lifecycle}]`)} ${f.displayName}`)}return w(),!0}let r=t==="promote"?za(e):void 0,s=r?.target??e[1],l=s?await wf(n,s):void 0;if((t==="show"||t==="diff")&&l)return o.openLearningCenter?await o.openLearningCenter(l):w(`${JSON.stringify(await n.get(l),null,2)}
62
+ `),!0;if(!l)return!1;if(t==="trust"||t==="approve")await n.trust(l);else if(t==="reject")await n.reject(l);else if(t==="disable")await n.disable(l);else if(t==="rollback")await n.rollback(l);else if(t==="promote"){if(!r||r.help||r.error)return!1;await n.promote(l,r.scope)}else if(t==="review")await n.review(l);else return!1;let c=s??l;return w(t==="promote"?v.green(`
63
+ [learn] promoted ${c} to the formal user Skill catalog.
64
+ `):v.dim(`
65
+ [learn] ${t} accepted for ${c}.
66
+ `)),!0}a(hf,"runLearningCenterCommand");async function wf(e,o){try{return(await e.get(o)).capabilityId}catch(n){let r=(await e.list({limit:200})).items.find(s=>s.source.kind==="f224_proposal"&&s.source.proposalId===o);if(r)return r.capabilityId;throw n}}a(wf,"resolveLearningCapabilityId");var nr={name:"learn",description:"Inspect and control the Learning Center",usage:"/learn [list|show|review|trust|reject|disable|rollback|promote|help] [name|slug|capability-id] [--scope user]",argumentHint:"list | show <slug> | trust <slug> | disable <slug> | promote <slug> [--scope user] | help [promote]",handler:a(async(e,o,n)=>{let t=af(o),r=(e[0]??"pending").toLowerCase();if(r==="help"||r==="-h"||r==="--help"){e[1]?.toLowerCase()==="promote"?En():Rn();return}if(r==="promote"){let u=za(e);if(u.help){En();return}if(u.error){w(v.yellow(`
67
+ [learn] ${u.error}.
68
+ `)),En();return}}if(await hf(e,n))return;if(r==="promote"){w(v.yellow(`
69
+ [learn] Learning Center controls are unavailable in this runtime.
70
+ `));return}let{storePath:s,store:l}=await df(t);if(r==="pending"||r==="list"){ff(l.proposals,s);return}let c=e[1];if(!c){w(v.yellow(`
71
+ [learn] missing proposal id for ${r}.
72
+ `)),Rn();return}let d=uf(l.proposals,c);if(!d){w(v.yellow(`
73
+ [learn] proposal not found: ${c}
74
+ `));return}if(r==="diff"){mf(d);return}if(r==="approve"){if(l.warnings.length>0){w(v.red(`
75
+ [learn] refusing to mutate a corrupt learning store.
76
+ `));return}if(d.status!=="pending"){w(v.dim(`
77
+ [learn] ${d.proposalId} is already ${d.status}.
78
+ `));return}let u=new Set(e.slice(2));await pf(s,d,{acknowledgeImpact:u.has("--ack-impact")});return}if(r==="reject"){if(l.warnings.length>0){w(v.red(`
79
+ [learn] refusing to mutate a corrupt learning store.
80
+ `));return}if(d.status!=="pending"){w(v.dim(`
81
+ [learn] ${d.proposalId} is already ${d.status}.
82
+ `));return}let u=e.slice(2).join(" ").trim();await gs(s,c,"rejected",u.length>0?{rejectedReason:u}:{}),w(v.dim(`
83
+ [learn] rejected ${c}.
84
+ `));return}w(v.yellow(`
85
+ [learn] unknown subcommand: ${r}
86
+ `)),Rn()},"handler"),detailedHelp:a((e=[])=>{e[0]?.toLowerCase()==="promote"?En():Rn()},"detailedHelp")};import*as ne from"node:fs";import*as In from"node:path";import p from"chalk";var Xa=900*1e3,_e=new Map;function qa(e){return e instanceof Error?e.message:String(e)}a(qa,"formatMemoryError");function yf(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(yf,"resolveCwd");function Ya(e){let o;try{o=ne.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.log(p.red(`[memory] failed to read memory directory ${e}: ${qa(t)}`)),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=In.join(e,t.name),s="",l=0;try{s=ne.readFileSync(r,"utf-8"),l=ne.statSync(r).mtimeMs}catch(m){console.log(p.red(`[memory] failed to read ${r}: ${qa(m)}`));continue}let d=us(s).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=In.basename(t.name,".md");n.push({filename:t.name,absPath:r,mtimeMs:l,title:d.name?.trim()||f,description:d.description?.trim()||f,type:d.type,parseOk:u})}return n}a(Ya,"readTopicFiles");function vf(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(vf,"buildIndexLines");async function kf(e,o){console.log(p.cyan(`
87
+ [memory] per-project memory directory`)),console.log(p.dim(` ${e}`));let n=Ya(e),t=n.filter(l=>!l.parseOk);console.log(p.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,s="";try{s=ne.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(p.yellow(`
88
+ MEMORY.md does not exist yet.`)),n.length>0?console.log(p.dim(" Run `/memory rebuild` to seed it from existing topic files.")):console.log(p.dim(" The LLM will create it on first save \u2014 no action needed.")),console.log();return}console.log(p.cyan(`
89
+ --- MEMORY.md ---`)),s.trim().length===0?console.log(p.dim(" (empty)")):console.log(s.trimEnd()),console.log(p.cyan(`--- end ---
90
+ `))}a(kf,"listMemory");async function Sf(e,o){let n=!1;try{n=ne.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(p.yellow(`
91
+ [memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log(p.dim(` ${e}`)),console.log(p.dim(` The LLM will create both the directory and MEMORY.md on first save.
92
+ `));return}let t=Ya(e);if(t.length===0){console.log(p.yellow(`
93
+ [memory] no topic files found \u2014 nothing to rebuild.`)),console.log(p.dim(` ${e}
94
+ `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=vf(r).join(`
95
+ `)+`
96
+ `;ne.writeFileSync(o,l,"utf-8"),console.log(p.green(`
97
+ [memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log(p.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log(p.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log(p.dim(` - ${d.filename}`));console.log(p.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(Sf,"rebuildMemory");function xf(e,o){console.log(p.cyan(`
98
+ [memory] open these paths in your editor:`)),console.log(p.dim(" index :"),o),console.log(p.dim(" dir :"),e),console.log(p.dim(`
99
+ (No in-REPL editor is provided \u2014 open the file in your usual editor.
100
+ Use \`/memory rebuild\` after manual edits if you renamed any topic file.)
101
+ `))}a(xf,"openMemory");function bf(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(bf,"proposalLabel");function $f(e){if(console.log(p.cyan(`
102
+ [memory] pending memory proposals`)),e.length===0){console.log(p.dim(` (none)
103
+ `));return}for(let o of e)console.log(` ${p.cyan(o.id)} ${p.dim(`[${o.action}]`)} ${bf(o)}`);console.log(p.dim(`
104
+ Use /memory show <id>, /memory approve <id>, or /memory reject <id>.
105
+ `))}a($f,"printMemoryInbox");function Af(e){if(console.log(p.cyan(`
106
+ [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(`
107
+ --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Af,"printMemoryProposal");function Rf(e){if(!e.applied){console.log(p.yellow(`
108
+ [memory] ${e.proposalId} was not applied.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
109
+ `));return}console.log(p.green(`
110
+ [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Rf,"printApplyResult");function Ef(e){if(!e.rejected){console.log(p.yellow(`
111
+ [memory] ${e.proposalId} was not rejected.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
112
+ `));return}console.log(p.dim(`
113
+ [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(Ef,"printRejectResult");function Cf(e){console.log(p.cyan(`
114
+ [memory] governance report ${e.reportId}`));for(let o of e.warnings)console.log(p.yellow(` warning: ${o}`));for(let o of e.findings)console.log(` ${p.dim(`[${o.severity}]`)} ${o.kind}: ${o.summary}`),o.refIds.length>0&&console.log(p.dim(` refs: ${o.refIds.join(", ")}`));console.log()}a(Cf,"printGovernanceReport");function Va(){console.log(p.cyan(`
115
+ /memory - Inspect or rebuild per-project memory`)),console.log(p.dim(" /memory List MEMORY.md + memory directory")),console.log(p.dim(" /memory list Same as `/memory`")),console.log(p.dim(" /memory pending List pending memory learning proposals")),console.log(p.dim(" /memory show <id> Preview a memory proposal")),console.log(p.dim(" /memory approve <id> Approve and apply a memory proposal")),console.log(p.dim(" /memory reject <id> Reject a memory proposal")),console.log(p.dim(" /memory curate Report duplicate/stale/quarantined refs")),console.log(p.dim(" /memory rebuild Regenerate MEMORY.md from topic frontmatter")),console.log(p.dim(" /memory open Print paths so you can open them in your editor")),console.log(p.dim(" /memory help Show this help")),console.log()}a(Va,"printHelp");function If(){console.log(p.bold(`
116
+ /memory - Inspect or rebuild project memory
117
+ `)),console.log("Usage:"),console.log(p.cyan(" /memory ")+p.dim("Show MEMORY.md + topic file count")),console.log(p.cyan(" /memory list ")+p.dim("Alias for `/memory`")),console.log(p.cyan(" /memory pending ")+p.dim("List pending memory learning proposals")),console.log(p.cyan(" /memory show <id> ")+p.dim("Preview a memory proposal")),console.log(p.cyan(" /memory approve <id> ")+p.dim("Approve and apply a memory proposal")),console.log(p.cyan(" /memory reject <id> ")+p.dim("Reject a memory proposal")),console.log(p.cyan(" /memory curate ")+p.dim("Report duplicate/stale/quarantined refs")),console.log(p.cyan(" /memory rebuild ")+p.dim("Regenerate MEMORY.md (newest first by mtime)")),console.log(p.cyan(" /memory open ")+p.dim("Print the index + dir paths for editor use")),console.log(p.cyan(" /memory help ")+p.dim(`Show this help
118
+ `)),console.log("Description:"),console.log(p.dim(` Each project gets its own memory directory under your KodaX agent
119
+ home \u2014 \`<agentConfigHome>/projects/<project-key>/memory/\`. The LLM
120
+ owns reads/writes; this command is your escape hatch when the
121
+ MEMORY.md index drifts from the topic files on disk.
122
+ `)),console.log("Notes:"),console.log(p.dim(" \u2022 Rebuild ONLY rewrites MEMORY.md. Topic files are never touched.")),console.log(p.dim(" \u2022 Rebuild sorts entries by file mtime descending \u2014 the same")),console.log(p.dim(" natural-LRU order the LLM produces by prepending new entries.")),console.log(p.dim(" \u2022 Files missing or with malformed frontmatter still appear in")),console.log(p.dim(" the rebuilt index using their filename as fallback; the command")),console.log(p.dim(` prints a warning so you can fix the frontmatter.
123
+ `))}a(If,"printDetailedHelp");var tr={name:"memory",description:"Inspect, govern, or rebuild per-project memory",usage:"/memory [list|pending|show|approve|reject|curate|rebuild|open|help]",argumentHint:"list | pending | show <id> | approve <id> | reject <id> [reason] | curate | rebuild | open | help",handler:a(async(e,o,n)=>{let t=yf(o),r=cs(t),s=ds(t),l=(e[0]??"list").toLowerCase(),c=n.createKodaXOptions?.().memoryReviewer,d=ys({cwd:t,...c!==void 0?{memoryReviewer:c}:{}});if(l==="help"||l==="--help"||l==="-h"){Va();return}if(l==="list"){await kf(r,s);return}if(l==="pending"||l==="inbox"){$f(await d.listInbox());return}if(l==="show"){let u=e[1];if(u===void 0){console.log(p.yellow(`
124
+ [memory] missing proposal id for show.
125
+ `));return}let f=await d.showProposal(u);if(f===void 0){console.log(p.yellow(`
126
+ [memory] proposal not found: ${u}
127
+ `));return}Af(f),Tf(t,f.id,f.expectedFingerprints);return}if(l==="approve"){let u=e[1];if(u===void 0){console.log(p.yellow(`
128
+ [memory] missing proposal id for approve.
129
+ `));return}let f=Pf(t,u);if(f===void 0){console.log(p.yellow(`
130
+ [memory] preview required before approve: /memory show ${u}
131
+ `));return}let m=await d.approveProposal(u,f);_e.delete(Cn(t,u)),Rf(m);return}if(l==="reject"){let u=e[1];if(u===void 0){console.log(p.yellow(`
132
+ [memory] missing proposal id for reject.
133
+ `));return}let f=await d.rejectProposal(u,e.slice(2).join(" ").trim());_e.delete(Cn(t,u)),Ef(f);return}if(l==="curate"){Cf(await d.runCurator());return}if(l==="rebuild"){await Sf(r,s);return}if(l==="open"){xf(r,s);return}console.log(p.yellow(`
134
+ [memory] unknown subcommand: ${l}`)),Va()},"handler"),detailedHelp:If};function Cn(e,o){return`${e}\0${o}`}a(Cn,"previewCacheKey");function Tf(e,o,n){_f(Date.now()),_e.set(Cn(e,o),{fingerprints:n,createdAtMs:Date.now()})}a(Tf,"cachePreviewFingerprints");function Pf(e,o){let n=Cn(e,o),t=_e.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>Xa){_e.delete(n);return}return t.fingerprints}}a(Pf,"readCachedPreviewFingerprints");function _f(e){for(let[o,n]of _e)e-n.createdAtMs>Xa&&_e.delete(o)}a(_f,"pruneExpiredPreviewFingerprints");import C from"chalk";function Ja(){console.log(`
135
+ ${C.bold("/goal")} \u2014 persistent session goal
136
+
137
+ ${C.bold("Subcommands:")}
138
+ ${C.cyan("/goal <objective> [--tokens N]")} Create a new persistent goal.
139
+ ${C.cyan("/goal status")} Show current goal (default).
140
+ ${C.cyan("/goal pause")} Pause an active goal.
141
+ ${C.cyan("/goal resume")} Resume a paused goal.
142
+ ${C.cyan("/goal clear")} Clear the current goal.
143
+ ${C.cyan("/goal help")} Show this help.
144
+
145
+ ${C.bold("Notes:")}
146
+ - The agent auto-continues toward an active goal on every Worker turn end.
147
+ - Token budget is optional; set it only when you want a hard ceiling.
148
+ - update_goal({complete}) is verifier-gated; the agent cannot
149
+ self-declare done without runtime confirmation.
150
+ `.trim())}a(Ja,"printHelp");function Lf(e){let o=null,n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!ut(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(s.startsWith("--tokens=")){let l=s.slice(9),c=Number(l);if(!ut(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(s.startsWith("--"))return{error:`unknown flag: ${s}`};n.push(s)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(Lf,"parseCreateArgs");function Mf(e){if(!e)return C.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${C.bold("Goal:")} ${e.objective}`,`${C.bold("Status:")} ${e.status}`,`${C.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${C.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${C.bold("Token budget:")} ${C.dim("none")}`);return o.push(`${C.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${C.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
151
+ `)}a(Mf,"renderStatus");async function _o(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=ks(e.lineage,n,t),await o.saveSession()}a(_o,"persist");async function Of(e,o,n){if(!o.lineage){console.log(C.red("[/goal] no active session lineage"));return}let t=Ge(o.lineage);if(t&&t.status!=="complete"){console.log(C.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=Lf(e);if("error"in r){console.log(C.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await _o(o,n,null,"cleared");let s=bs(r.objective,r.tokenBudget);await _o(o,n,s,"created"),console.log(C.green(`[/goal] created: "${s.objective}"`)),s.tokenBudget!==null&&console.log(C.dim(` budget: ${s.tokenBudget} tokens`))}catch(s){let l=s instanceof Error?s.message:String(s);console.log(C.red(`[/goal] ${l}`))}}a(Of,"doCreate");async function Wf(e){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let o=Ge(e.lineage);console.log(Mf(o))}a(Wf,"doStatus");async function Nf(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=Ge(e.lineage);if(!n){console.log(C.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(C.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=$s(n);await _o(e,o,t,"paused"),console.log(C.green("[/goal] paused"))}a(Nf,"doPause");async function Df(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=Ge(e.lineage);if(!n){console.log(C.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(C.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=As(n);await _o(e,o,t,"resumed"),console.log(C.green("[/goal] resumed"))}a(Df,"doResume");async function Uf(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}if(!Ge(e.lineage)){console.log(C.yellow("[/goal] no goal to clear"));return}await _o(e,o,null,"cleared"),console.log(C.green("[/goal] cleared"))}a(Uf,"doClear");var Za={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"){Ja();return}if(t==="status"){await Wf(o);return}if(t==="pause"){await Nf(o,n);return}if(t==="resume"){await Df(o,n);return}if(t==="clear"){await Uf(o,n);return}await Of(e,o,n)},"handler"),detailedHelp:Ja};import{existsSync as xl}from"node:fs";import{join as re}from"node:path";import h from"chalk";import ir from"path";import{createHash as Kf}from"crypto";import{execFile as jf}from"child_process";import Ff from"fs";import rr from"path";import{promisify as Hf}from"util";var Bf=Hf(jf);function ve(e){if(!(!e||!e.trim()))return rr.resolve(e).replace(/\\/g,"/")}a(ve,"normalizePath");async function Lo(e,o){try{let{stdout:n}=await Bf("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}a(Lo,"gitStdout");function Gf(e){let o=ve(e);if(o)return rr.posix.basename(o)===".git"?rr.posix.dirname(o):o}a(Gf,"deriveCanonicalRepoRoot");async function Oy(e={}){let o=ve(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=ve(await Lo(o,["rev-parse","--show-toplevel"])),t=n??o,[r,s]=await Promise.all([Lo(t,["rev-parse","--path-format=absolute","--git-common-dir"]).then(l=>l??Lo(t,["rev-parse","--git-common-dir"])),Lo(t,["branch","--show-current"]).then(l=>l??Lo(t,["rev-parse","--abbrev-ref","HEAD"]))]);return{canonicalRepoRoot:Gf(r)??n,workspaceRoot:n,executionCwd:o,branch:s&&s!=="HEAD"?s:void 0,workspaceKind:e.workspaceKind??"detected"}}a(Oy,"inspectWorkspaceRuntime");function Wy(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:ve(e.canonicalRepoRoot)===ve(o.canonicalRepoRoot)}a(Wy,"isSameCanonicalRepo");function Ny(e){return!!(e?.workspaceRoot&&Ff.existsSync(e.workspaceRoot))}a(Ny,"workspaceExists");function Qa(e){let o=ve(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=ve(e.runtimeInfo?.executionCwd??o),t=ve(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(Qa,"resolveSessionRuntimeInfo");function sr(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(sr,"formatWorkspaceTruth");var el="_unknown",ol=80;function zf(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(zf,"caseFold");function qf(e){return zf(ir.resolve(e).replace(/\\/g,"/"))}a(qf,"normalizeRoot");function nl(e){return Kf("sha256").update(e).digest("hex").slice(0,10)}a(nl,"shortHash");function Vf(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>ol?o.slice(o.length-ol):o}a(Vf,"slugify");function Le(e){if(!e||!e.trim())return{key:el,canonicalRoot:null,displayName:el};let o=qf(e),n=Vf(o),t=n?`${n}-${nl(o)}`:nl(o),r=ir.basename(ir.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Le,"deriveProjectKeyFromRoot");function By(e){let o=Qa({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Le(n)}a(By,"deriveProjectKeyFromData");import Me from"chalk";function Tn(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Tn,"resolveLearningCommandCwd");function oo(e=""){process.stdout.write(`${e}
152
+ `)}a(oo,"writeOutput");function Xf(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(Xf,"matchesFilter");function Yf(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(Yf,"headingForFilter");function Jf(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(Jf,"proposalLabel");async function Pn(e,o){let n=Jo(e),t=await Yo(n);for(let s of t.warnings)oo(Me.yellow(`[learn] ${s}`));let r=t.proposals.filter(s=>s.status==="pending").filter(s=>Xf(s,o));if(oo(Me.cyan(`
153
+ [learn] ${Yf(o)}`)),oo(Me.dim(` ${n}`)),r.length===0){oo(Me.dim(` (none)
154
+ `));return}for(let s of r)oo(` ${Me.cyan(s.proposalId)} ${Me.dim(`[${s.proposal.destination}]`)} ${Jf(s)}`);oo(Me.dim(`
155
+ Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
156
+ `))}a(Pn,"printLearningPendingForFilter");import{join as Nm}from"node:path";import Bn from"chalk";import{existsSync as de,readdirSync as dm,readFileSync as On,writeFileSync as tv}from"node:fs";import{dirname as um,join as te}from"node:path";import E from"chalk";import{existsSync as Zf,readFileSync as Qf}from"node:fs";var tl=4,rl=180,sl=6e3,il=360,ar="[truncated]";function Oe(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Oe,"detectWorkflowLocale");function Mo(...e){return Oe(e.filter(o=>typeof o=="string").join(`
157
+ `))}a(Mo,"inferWorkflowLocaleFromParts");function ke(e,o={}){let n=e.trim();return o.full===!0||n.length<=sl?n:`${n.slice(0,sl).trimEnd()}
158
+
159
+ ${ar}`}a(ke,"trimResultPreview");function lr(e){return e.includes(ar)}a(lr,"isWorkflowResultPreviewTruncated");function em(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(em,"formatWorkflowResultTruncationHint");function no(e,o,n){let t=e.lastIndexOf(ar);return t<0?e:`${e.slice(0,t).trimEnd()}
160
+
161
+ ${em(o,n)}`}a(no,"replaceWorkflowResultTruncationMarker");function om(e){let o=e.replace(/\s+/g," ").trim();return o.length<=il?o:`${o.slice(0,il).trimEnd()}...`}a(om,"trimWorkflowLaunchSummary");function Se(e,o={}){if(typeof e=="string"&&e.trim().length>0)return ke(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return ke(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return ke(t,o)}}if(e&&typeof e=="object")for(let n of["summary","report","text","result"]){let t=e[n];if(typeof t=="string"&&t.trim().length>0)return ke(t,o)}if(e!=null)try{let n=JSON.stringify(e,null,2);if(typeof n=="string"){let t=n.trim();if(t.length>0&&t!=="{}"&&t!=="[]"&&t!=='""')return ke(n,o)}}catch{}}a(Se,"formatResult");function Oo(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&Y(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>Y(d,"name")==="synthesize")??n[0],s=r?Y(r,"summary"):void 0;if(s)return ke(s,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?Y(l,"summary")??Y(l,"error"):void 0;return c?ke(c,o):void 0}a(Oo,"formatFinalEventSummary");function nm(e,o={}){if(!(!e.path||!Zf(e.path)))try{let n=JSON.parse(Qf(e.path,"utf8")),t=Se(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?ke(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(nm,"formatArtifactPreview");function to(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let s=e[r];if(!s)continue;let l=nm(s,n);if(l)return o==="zh"?`\u4EA7\u7269 ${s.name}:
162
+ ${l}`:`Artifact ${s.name}:
163
+ ${l}`}if(e.length===0)return;let t=e.map(r=>r.name).join(", ");return o==="zh"?`\u5DF2\u751F\u6210\u4EA7\u7269: ${t}`:`Artifacts created: ${t}`}a(to,"formatArtifactResult");function cr(e){let o=e.resultText?no(e.resultText,e.runId,e.locale):void 0;if(e.locale==="zh"){let t=e.resultText&&e.isFallbackPreview!==!0?`Workflow \u5DF2\u5B8C\u6210\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`:`Workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7ED3\u679C\u5951\u7EA6\u5931\u8D25\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`;if(o){let r=e.isFallbackPreview===!0?"\u7ED3\u679C\u5951\u7EA6\u5F02\u5E38\uFF1Aworkflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u5B8C\u6574\u6700\u7EC8\u7ED3\u679C\u3002\u4EE5\u4E0B\u662F\u6700\u540E\u7EFC\u5408\u8F93\u51FA\uFF1A":"\u6700\u7EC8\u7ED3\u679C\uFF1A";return`${t}
164
+
165
+ ${r}
166
+
167
+ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u751F\u6210\u811A\u672C\u8FDD\u53CD\u7ED3\u679C\u5951\u7EA6\uFF1A\u6CA1\u6709\u8FD4\u56DE\u53EF\u76F4\u63A5\u5C55\u793A\u7684\u6700\u7EC8\u7ED3\u679C\u6216\u53EF\u9884\u89C8\u4EA7\u7269\u3002\u8FD9\u4E0D\u662F\u6B63\u5E38\u5B8C\u6210\u72B6\u6001\uFF0C\u9700\u8981\u4FEE\u590D\u751F\u6210\u811A\u672C\u540E\u91CD\u65B0\u8FD0\u884C\u3002"].join(`
168
+ `)}let n=e.resultText&&e.isFallbackPreview!==!0?`Workflow completed (${e.totalSpawned} agents, run ${e.runId}).`:`Workflow ended with a result contract failure (${e.totalSpawned} agents, run ${e.runId}).`;if(o){let t=e.isFallbackPreview===!0?"Result contract violation: the workflow ended without returning a complete final result. Last synthesis output:":"Final result:";return`${n}
169
+
170
+ ${t}
171
+
172
+ ${o}`}return[n,"","The workflow ended, but the generated script violated the result contract: it did not return displayable final text or a previewable artifact. This is not a normal completion state; fix the generated script and rerun it."].join(`
173
+ `)}a(cr,"formatWorkflowCompletionAnswer");function dr(e){let o=e.summary.phases.length>0?e.summary.phases.join(" -> "):"dynamic",n=e.summary.maxAgents===null?"unbounded":String(e.summary.maxAgents),t=e.summary.plannedAgents===void 0?e.locale==="zh"?`\u6700\u591A ${n} \u4E2A\u667A\u80FD\u4F53`:`up to ${n} agents`:e.locale==="zh"?`\u8BA1\u5212\u7EA6 ${e.summary.plannedAgents} \u4E2A\u667A\u80FD\u4F53\uFF0C\u5B89\u5168\u4E0A\u9650 ${n}`:`about ${e.summary.plannedAgents} planned agents, safety cap ${n}`,r=e.summary.maxConcurrency===null?"unbounded":String(e.summary.maxConcurrency),s=om(e.approvalSummary);if(e.locale==="zh"){let c=e.summary.writesFiles?"\u5982\u9700\u5199\u6587\u4EF6\uFF0C\u4ECD\u4F1A\u7ECF\u8FC7\u6B63\u5E38\u6743\u9650\u786E\u8BA4\u3002":"\u8FD9\u662F\u53EA\u8BFB\u63A2\u67E5\uFF0C\u4E0D\u4F1A\u4E3B\u52A8\u4FEE\u6539\u6587\u4EF6\u3002";return[`\u6211\u4F1A\u7528 workflow \u505A\u8FD9\u6B21\u4EFB\u52A1\uFF0C\u5DF2\u542F\u52A8 ${e.summary.name}\uFF08${e.runId}\uFF09\u3002`,`\u8BA1\u5212\uFF1A${s}`,`\u9636\u6BB5\uFF1A${o}\uFF1B\u89C4\u6A21\uFF1A${t}\uFF0C\u5E76\u53D1 ${r}\u3002${c}`,"\u8FD0\u884C\u8FC7\u7A0B\u4F1A\u5728\u4E0B\u65B9\u52A8\u6001\u66F4\u65B0\uFF0C\u5B8C\u6210\u540E\u6211\u4F1A\u76F4\u63A5\u6C47\u603B\u7ED3\u8BBA\u3002"].join(`
174
+ `)}let l=e.summary.writesFiles?"File-writing work still goes through normal permission gates.":"This is read-only and will not modify files.";return[`I will use a workflow for this task: ${e.summary.name} (${e.runId}).`,`Plan: ${s}`,`Phases: ${o}; scale: ${t}, ${r} concurrent. ${l}`,"Progress will update below, and I will summarize the result when it finishes."].join(`
175
+ `)}a(dr,"formatWorkflowLaunchAnswer");function Y(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(Y,"readEventString");function ur(e,o="en",n){if(e.type!=="agent_completed"&&e.type!=="agent_unverified"&&e.type!=="agent_failed"&&e.type!=="agent_summary_updated"||e.type==="agent_completed"&&Y(e,"status")!=="completed")return;let t=Y(e,"summary")??Y(e,"error");if(!t)return;let r=Y(e,"summaryKind");if(r==="pending")return;let s=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=Y(e,"name")??Y(e,"taskId")??"agent";return cm(l,t,o,n,s)}a(ur,"formatWorkflowAgentDigest");function tm(e){let o=e.replace(/\s+/g," ").trim();return o.length<=rl?o:`${o.slice(0,rl).trimEnd()}...`}a(tm,"trimWorkflowAgentDigestExcerpt");function rm(e){return/^(?:conclusion|finding|confirmed issue|issue|evidence|risk|next|unresolved|decision|result|summary|结论|发现|问题|证据|风险|下一步|未决|判断|决定|结果|摘要)[::]/i.test(e)||/^(?:[A-Z]{1,3}-?\d+|[HMSLP]\d+)[.)::\s-]/i.test(e)?!0:/(?:critical|high|medium|low)\s+severity|(?:严重|高危|中危|低危)/i.test(e)}a(rm,"isHighSignalWorkflowAgentDigestLine");function sm(e){let o=e.toLowerCase();return!!(/\[\/?workflow handoff\]/i.test(e)||/^\|.*\|$/.test(e)||/^\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?$/.test(e)||/^(?:i now have|i have|i now understand|here is|let me|i will|this report|the report)\b/.test(o)||/^(?:scope|review scope|范围|审查范围)[::]/i.test(e)||/^feature[_\s-]*\d+.*(?:report|review|audit|map|审查|报告|地图|变更地图)/i.test(e)||/^feature[_\s-]*\d+.*改动分布.*feature/i.test(e)||/(?:review report|audit|审查报告|综合报告|分析报告|变更地图)$/i.test(e)&&e.length<140)}a(sm,"isLowInformationWorkflowAgentDigestLine");function im(e){return e.replace(/\s+/g," ").trim()}a(im,"compactWorkflowAgentDigestLine");function am(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=im(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!sm(t))return o.truncateLines===!1?t:tm(t)}a(am,"normalizeWorkflowAgentDigestLine");function lm(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let s=am(r,o);if(!s)continue;let l=rm(s)?n:t;n.includes(s)||t.includes(s)||l.push(s)}return n.length>0?n.slice(0,tl):t.length>0?t.slice(0,tl):[]}a(lm,"extractWorkflowAgentDigestExcerpts");function cm(e,o,n,t,r="excerpt"){let s=r==="digest",c=lm(o,{truncateLines:!s}).map(f=>`- ${f}`),d=t?n==="zh"?`\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show ${t} \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002`:`This is a child-agent digest; use /workflow show ${t} for the event timeline.`:n==="zh"?"\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002":"This is a child-agent digest; use /workflow show for the event timeline.",u=n==="zh"?s?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u8981\uFF1A`:r==="digest-failed"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF08\u667A\u80FD\u6458\u8981\u4E0D\u53EF\u7528\uFF0C\u4EE5\u4E0B\u4E3A\u672C\u5730\u6458\u5F55\uFF09\uFF1A`:`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u5F55\u6458\u8981\uFF1A`:s?`Agent ${e} completed. Summary:`:r==="digest-failed"?`Agent ${e} completed (smart summary unavailable; local excerpt):`:`Agent ${e} completed. Extracted summary:`;return c.length===0?[n==="zh"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF0C\u4F46\u672A\u80FD\u63D0\u53D6\u5230\u6709\u6548\u6458\u8981\u3002`:`Agent ${e} completed. No useful summary could be extracted.`,d].join(`
176
+ `):[u,...c,d].join(`
177
+ `)}a(cm,"formatWorkflowAgentLongDigest");function _n(e){return(o,n="en")=>ur(o,n,e)}a(_n,"createWorkflowAgentDigestLimiter");import P from"chalk";function fr(){return[`${P.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${P.bold("Subcommands:")}`,` ${P.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${P.cyan("/workflow create <request>")} Build & run a workflow for a request. The Worker investigates first, then authors it (scout-then-author). Requires AMA \u2014 Solo (SA) mode runs no workflows.`,` ${P.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${P.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${P.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${P.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${P.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${P.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${P.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${P.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${P.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${P.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${P.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${P.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${P.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${P.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${P.bold("Examples:")}`,` ${P.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${P.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${P.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${P.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${P.dim("/workflow prune --dry-run")}`,` ${P.dim("/workflow save run-lx3 generated-audit")}`,"",`${P.bold("Safety:")}`," - Generated and workflow capsule (.workflow.json) workflows run in the capability WorkflowApi runner."," - For rerun, a run id reruns its saved snapshot; a saved name runs the current saved capsule version."," - For revise --replace, only a saved generated capsule name can move; the previous capsule is archived."," - Local .ts/.mjs/.js workflows are trusted-local and require explicit confirmation."," - File, shell, MCP, and web effects still go through child agents and existing permission gates."].join(`
178
+ `)}a(fr,"renderWorkflowHelp");function Ln(){console.log(`
179
+ ${fr()}
180
+ `)}a(Ln,"printWorkflowHelp");var fm=new Set(["completed","failed","stopped","denied","cancelled"]);function mr(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${E.cyan(o.name)} \u2014 ${o.description}`).join(`
181
+ `)}a(mr,"formatWorkflowList");var mm=6,pm=900;function gm(e){let o=e.replace(/\r\n/g,`
182
+ `).replace(/\r/g,`
183
+ `).split(`
184
+ `),n=[],t=0,r=!1;for(let l of o){if(n.length>=mm)break;let c=` ${l}`,d=pm-t;if(d<=0){r=!0;break}if(c.length>d){d>16&&n.push(`${c.slice(0,d-4)} ...`),r=!0;break}n.push(c),t+=c.length+1}let s=Math.max(0,o.length-n.length);if(s>0||r){let l=s>0?`${s} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(gm,"renderApprovalScriptPreview");function ue(e,o){let n=a(s=>s===null?"\u221E":String(s),"cap"),t=e.plannedAgents===void 0?void 0:String(e.plannedAgents),r=t===void 0?`agent total cap: ${n(e.maxAgents)}`:`planned agents: ${t} \xB7 agent safety cap: ${n(e.maxAgents)}`;return[`Run workflow ${E.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?E.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:",...gm(o.rawScript)]:[]]:[]].join(`
185
+ `)}a(ue,"renderApprovalPrompt");function No(e){if(!de(e))return[];let o=[];for(let n of dm(e)){let t=te(e,n,"run.json");if(de(t))try{let r=JSON.parse(On(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(No,"readWorkflowRuns");function hm(e){let o=te(e,"events.jsonl");if(!de(o))return[];let n=On(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let s=JSON.parse(r);if(typeof s!="object"||s===null)continue;let l=s;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(hm,"readWorkflowEvents");function wm(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(wm,"readStringArray");function Mn(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(Mn,"readNonEmptyString");function al(e,o){let n=o?Mn(o.scriptSnapshotPath):te(e,"script.js"),t=o?Mn(o.manifestSnapshotPath):te(e,"manifest.json");return!n||!t?!1:de(n)&&de(t)}a(al,"hasGeneratedWorkflowSnapshot");function cl(e,o){if(o)return al(e,o);let n=te(e,"run.json");if(!de(n))return!1;try{let t=JSON.parse(On(n,"utf8"));return typeof t=="object"&&t!==null?al(e,t):!1}catch{return!1}}a(cl,"hasRerunnableGeneratedWorkflowRun");function ym(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(ym,"readWorkflowFailure");function Do(e,o){let n=te(e,o),t=te(n,"run.json"),r=hm(n),s=ym(r);if(!(!de(t)&&r.length===0)){if(!de(t))return{runId:o,workflow:"?",status:s?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...s?{error:s}:{}};try{let l=JSON.parse(On(t,"utf8")),c=Mn(l.scriptSnapshotPath),d=Mn(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:cl(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...s?{error:s}:{},artifacts:wm(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:s?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...s?{error:s}:{}}}}}a(Do,"readWorkflowRunDetail");function Wo(e){return e==="completed"?E.green("ok"):e==="failed"?E.red("x"):e==="running"?E.cyan("run"):e==="paused"?E.yellow("pause"):e==="stopped"?E.dim("stop"):e==="denied"?E.dim("deny"):e==="cancelled"?E.dim("cancel"):E.dim("-")}a(Wo,"statusIcon");function pr(e){return fm.has(e)}a(pr,"isTerminalWorkflowStatus");function dl(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(dl,"formatProcessListMeta");function gr(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let s=t.map(l=>{let c=dl(o.processSnapshots?.get(l.runId));return` ${Wo(l.status)} ${E.cyan(l.workflow)} ${E.dim(l.runId)} - ${l.status} (${l.totalSpawned} agents)${c?E.dim(` [${c}]`):""}`});return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&s.push(E.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),s.join(`
186
+ `)}let r=t.map(s=>` ${Wo(s.status)} ${E.cyan(s.workflow)} ${E.dim(s.runId)} \u2014 ${s.status} (${s.totalSpawned} agents)`);return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&r.push(E.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),r.join(`
187
+ `)}a(gr,"formatRunsList");function hr(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=dl(o.processSnapshots?.get(n.runId));return` ${Wo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?E.dim(` [${t}]`):""}`}).join(`
188
+ `):e.map(n=>` ${Wo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
189
+ `)}a(hr,"formatManagedRunsList");function ro(e){return e.status==="running"||e.status==="paused"}a(ro,"isActiveManagedWorkflowRun");function wr(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${Wo(o.status)} ${E.cyan(o.workflow)} ${E.dim(o.runId)} - ${o.status}`).join(`
190
+ `)}a(wr,"formatWorkflowPruneCandidates");function yr(e,o){return e.filter(ro)[0]?.runId??e[0]?.runId??o[0]?.runId}a(yr,"selectDefaultWorkflowRunId");function vr(e){return e.find(ro)?.runId}a(vr,"selectDefaultActiveWorkflowRunId");function ll(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(ll,"formatTime");function vm(e,o=10){let n=e.map(Un).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(vm,"formatRecentWorkflowEvents");function kr(e,o){return o?.canRerun??(e?.runDir?cl(e.runDir):!1)}a(kr,"canRerunWorkflowRun");function km(e){return e?e.artifacts.map(o=>({name:o,path:te(e.runDir,"artifacts",`${Os(o)}.json`)})):[]}a(km,"workflowArtifactRefs");function Sr(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Sr,"formatWorkflowNextActions");function ul(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(ul,"formatWorkflowFailureAction");function xr(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",s=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=ll(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,S=ll(e?.endedAt??o?.endedAt??m),x=t?.error??e?.error??o?.error,k=o?.artifacts??t?.artifacts?.map(pe=>pe.name)??[],b=km(o),g=e?.resultText,A=n.full===!0||g===void 0?to(b,Oe(r),{full:n.full===!0}):void 0,T=n.full===!0?A??g??t?.resultSummary:g!==void 0?Se(g):t?.resultSummary!==void 0?Se(t.resultSummary):A,L=T?no(T,s,Oe(T)):void 0,J=n.full===!0||!T||!lr(T)?"result:":"result preview:",Z=o?vm(o.events):[],po=kr(e,o);return[` ${E.cyan(r)} ${E.dim(s)}`,...t?.displayName&&t.displayName!==r?[` display name: ${t.displayName}`]:[],` status: ${l}`,...t?.source?[` source: ${t.source}`]:[],...t?.savedWorkflowName?[` saved workflow: ${t.savedWorkflowName}`]:[],...t?.sourceRunId?[` source run: ${t.sourceRunId}`]:[],...t?.sourceWorkflowName?[` source workflow: ${t.sourceWorkflowName}`]:[],...t?.revisionOf?[` revision of: ${t.revisionOf}`]:[],` agents: ${c}`,` events: ${d}`,...f?[` started: ${f}`]:[],...S?[` ended: ${S}`]:[],...u?[` run dir: ${u}`]:[],...k.length>0?[` artifacts: ${k.join(", ")}`]:[],...x?[` error: ${x}`]:[],...L?["",` ${J}`,...L.split(`
191
+ `).map(pe=>` ${pe}`)]:[],...Z.length>0?[""," recent events:",...Z.map(pe=>` ${pe.trimEnd()}`)]:[],"",` next: ${Sr(s,po)}`].join(`
192
+ `)}a(xr,"formatWorkflowRunSnapshot");function br(e){return{project:te(e,".kodax","workflows"),personal:O("workflows")}}a(br,"savedWorkflowDirs");async function fl(e,o){return new Set((await Ke(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(fl,"nextRevisionWorkflowName");function ml(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:qs}}a(ml,"buildWorkflowRevisionProvenance");function $r(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${E.cyan(o.name)} ${E.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
193
+ `)}a($r,"formatSavedList");function pl(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(pl,"isSafeWorkflowRunId");function We(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(We,"resolveConfirm");function Sm(e){console.log(E.red(`
194
+ [workflow] invalid run id: ${e||"<empty>"}
195
+ `))}a(Sm,"printInvalidRunId");function xe(e){return pl(e)?!0:(Sm(e),!1)}a(xe,"ensureSafeRunId");function Wn(){let e=xm(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(Wn,"currentWorkflowPreflightEnv");function xm(e){let o=e;for(;;){if(de(te(o,".git")))return!0;let n=um(o);if(n===o)return!1;o=n}}a(xm,"hasGitMarker");function Nn(e){console.log(E.red(`
196
+ [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(E.red(` - ${o.requirement}: ${o.message}`));console.log()}a(Nn,"printPreflightFailure");function Dn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(E.yellow(`
197
+ [workflow] capsule preflight warnings:`));for(let n of o)console.log(E.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(Dn,"printPreflightWarnings");async function gl(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
198
+ ${e.path}`)){console.log(E.dim(`Workflow cancelled.
199
+ `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await yo(e.path),c=vo(l,Wn());if(!c.ok){Nn(c);return}Dn(c),n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:l.manifest.mayUseWorktree===!0,rawScriptPath:e.path,rawScript:l.source},t={manifest:l.manifest,source:l.source},r=l.provenance}return{module:await rn(e.path),approvalContext:n,...t!==void 0?{scriptSnapshot:t}:{},...r!==void 0?{provenance:r}:{}}}catch(n){let t=n instanceof Error?n.message:String(n);console.log(E.red(`
200
+ [workflow] failed to load ${e.path}: ${t}
201
+ `));return}}a(gl,"prepareSavedWorkflow");function Ar(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(Ar,"workflowEventStatus");function Un(e){let o=e.data?.name??e.data?.taskId??"",n=Ar(e);switch(e.type){case"phase_started":return` > phase: ${e.data?.name??""}`;case"phase_finished":return` done phase: ${e.data?.name??""}`;case"agent_spawned":return` + ${o}`;case"agent_completed":return n==="failed"?` failed ${o}`:n==="completed_unverified"?` unverified ${o}`:` done ${o}`;case"agent_unverified":return` unverified ${o}`;case"agent_failed":return` failed ${o}`;case"agent_stopped":return` stopped ${o}`;case"workflow_log":return` log ${e.data?.message??""}`;case"artifact_written":return` artifact ${e.data?.name??""}`;case"synthesis_completed":return" synthesis complete";case"workflow_completed":return" workflow completed";case"workflow_stopped":return" workflow stopped";case"workflow_failed":return` workflow failed: ${e.data?.error??"unknown error"}`;default:return}}a(Un,"formatWorkflowEvent");function hl(e){let o=Un(e);o&&console.log(E.dim(o))}a(hl,"renderWorkflowEvent");import Fn from"chalk";import bm from"string-width";var $m=9;function Am(e,o=$m){let n=bm(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Am,"padWorkflowLiveSymbol");function vl(e,o={}){let n=e.items.filter(m=>m.kind==="agent"),t=n.filter(m=>m.status==="running").map(m=>m.title),r=n.filter(m=>m.status==="completed").length,s=n.filter(m=>m.status==="failed").length,l=n.filter(m=>m.status==="cancelled").length,c=e.status==="completed"?"completed":e.status==="failed"?"failed":e.status==="cancelled"?"stopped":"running",d=e.activePhaseId===void 0?void 0:e.items.find(m=>m.id===e.activePhaseId)?.title,u=Date.parse(e.startedAt),f=o.message??e.latestMessage;return{runId:e.runId,workflow:e.displayName??e.workflowName,status:c,...d!==void 0?{phase:d}:{},...e.activePhaseIndex!==void 0?{phaseIndex:e.activePhaseIndex}:{},...e.phaseCount!==void 0?{phaseTotal:e.phaseCount}:{},...Number.isFinite(u)?{startedAt:u}:{},elapsedMs:e.elapsedMs,activeAgents:t,totalSpawned:e.progress.spawnedAgents,...e.progress.plannedItems!==void 0?{plannedAgents:e.progress.plannedItems}:{},...e.progress.agentCap!==void 0?{agentCap:e.progress.agentCap}:{},...e.tokens!==void 0?{tokenBudgetSpent:e.tokens.spent}:{},...e.tokens?.total!==void 0?{tokenBudgetTotal:e.tokens.total}:{},completedAgents:r,failedAgents:s,stoppedAgents:l,...f!==void 0?{message:f}:{},...o.locale!==void 0?{locale:o.locale}:{}}}a(vl,"workflowLiveSnapshotFromProcess");function gv(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Am(o.symbol)}${o.text}`)}a(gv,"formatWorkflowLiveViewModelForTranscript");var Rm=6,wl={en:{workflow:"workflow",phase:"phase",agent:"agent",more:"more",progress:"progress",waiting:"waiting",hint:"hint",finished:"finished",failed:"failed",stopped:"stopped",started:"started",cap:"cap",budget:"budget",spent:"spent",waitingForFirstAgent:"waiting for first agent",showStopHint:a(e=>`show: /workflow show ${e} | stop: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} active agent${e===1?"":"s"}`,"activeAgents")},zh:{workflow:"\u5DE5\u4F5C\u6D41",phase:"\u9636\u6BB5",agent:"\u667A\u80FD\u4F53",more:"\u66F4\u591A",progress:"\u8FDB\u5EA6",waiting:"\u7B49\u5F85",hint:"\u63D0\u793A",finished:"\u5B8C\u6210",failed:"\u5931\u8D25",stopped:"\u505C\u6B62",started:"\u5DF2\u542F\u52A8",cap:"\u4E0A\u9650",budget:"\u9884\u7B97",spent:"\u5DF2\u7528",waitingForFirstAgent:"\u7B49\u5F85\u7B2C\u4E00\u4E2A\u667A\u80FD\u4F53\u542F\u52A8",showStopHint:a(e=>`\u67E5\u770B: /workflow show ${e} | \u505C\u6B62: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`,"activeAgents")}},Em={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function Cm(e){return e.length>14?`${e.slice(0,14)}...`:e}a(Cm,"shortRunId");function jn(e){return e==="zh"?wl.zh:wl.en}a(jn,"workflowLiveLabels");function Im(e,o){let n=Math.max(0,Math.floor(e)),t=Math.floor(n/1e3),r=t%60,s=Math.floor(t/60),l=s%60,c=Math.floor(s/60);return o==="zh"?c>0?`${c}\u5C0F\u65F6${String(l).padStart(2,"0")}\u5206`:l>0?`${l}\u5206${String(r).padStart(2,"0")}\u79D2`:`${r}\u79D2`:c>0?`${c}h${l}m${r}s`:l>0?`${l}m${r}s`:`${r}s`}a(Im,"formatElapsedMs");function yl(e){let o=Math.max(0,Math.floor(e));return o>=1e6?`${(o/1e6).toFixed(1).replace(/\.0$/,"")}M`:o>=1e3?`${(o/1e3).toFixed(1).replace(/\.0$/,"")}k`:String(o)}a(yl,"formatTokenCount");function Tm(e){if(e.tokenBudgetSpent===void 0)return;let o=jn(e.locale),n=yl(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=yl(e.tokenBudgetTotal);return e.tokenBudgetSpent<=0?`${o.budget} ${t} tokens`:`${o.spent} ${n}/${t} tokens`}if(!(e.tokenBudgetSpent<=0))return`${o.spent} ${n} tokens`}a(Tm,"formatWorkflowTokenUsage");function Pm(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Im(t,e.locale));let r=Tm(e);return r!==void 0&&n.push(r),n}a(Pm,"formatWorkflowHeaderMetrics");function _m(e){let o=jn(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=kl(e,n),r=[];e.activeAgents.length>0&&r.push(o.activeAgents(e.activeAgents.length)),e.plannedAgents!==void 0&&r.push(`${o.started} ${e.totalSpawned}`),e.failedAgents>0&&r.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&r.push(`${e.stoppedAgents} ${o.stopped}`),e.agentCap!==void 0&&r.push(`${o.cap} ${e.agentCap}`);let s=r.length===0?"":e.locale==="zh"?`\uFF08${r.join("\uFF0C")}\uFF09`:` (${r.join(", ")})`;return`${n}/${t} ${o.finished}${s}`}a(_m,"formatWorkflowProgress");function Lm(e){let o=jn(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=kl(e),r=e.locale==="zh"?`${n}/${t} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`:`${n}/${t} active agent${n===1?"":"s"}`,s=[];return e.failedAgents>0&&s.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&s.push(`${e.stoppedAgents} ${o.stopped}`),s.length===0?r:e.locale==="zh"?`${r}\uFF0C${s.join("\uFF0C")}`:`${r}, ${s.join(", ")}`}a(Lm,"formatWorkflowCounter");function kl(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(kl,"workflowProgressDenominator");function Mm(e){if(e.phase)return e.phaseIndex!==void 0&&e.phaseTotal!==void 0&&e.phaseIndex>0&&e.phaseTotal>0?`${e.phaseIndex}/${e.phaseTotal} ${e.phase}`:e.phase}a(Mm,"formatWorkflowPhase");function hv(e,o=Date.now()){if(!e||e.status!=="running")return Em;let n=[],t=jn(e.locale),r=Pm(e,o),s=r.length===0?"":` \xB7 ${r.join(" \xB7 ")}`;n.push({kind:"header",id:"header",symbol:t.workflow,symbolColor:e.failedAgents>0?"red":"cyan",text:`${e.workflow} (${Cm(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${s}`,isActive:!0});let l=Mm(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=_m(e);c&&n.push({kind:"summary",id:"progress",symbol:t.progress,symbolColor:e.failedAgents>0?"red":"green",text:c,isActive:!1}),e.totalSpawned===0&&e.activeAgents.length===0&&n.push({kind:"summary",id:"waiting",symbol:t.waiting,symbolColor:"dim",text:t.waitingForFirstAgent,isActive:!1}),n.push({kind:"hint",id:"controls",symbol:t.hint,symbolColor:"dim",text:e.message??t.showStopHint(e.runId),isActive:!1});let d=n.slice(0,Rm);return{shouldRender:!0,workflow:e.workflow,runId:e.runId,...e.phase!==void 0?{phase:e.phase}:{},...e.phaseIndex!==void 0?{phaseIndex:e.phaseIndex}:{},...e.phaseTotal!==void 0?{phaseTotal:e.phaseTotal}:{},activeCount:e.activeAgents.length,totalSpawned:e.totalSpawned,...e.plannedAgents!==void 0?{plannedAgents:e.plannedAgents}:{},completedAgents:e.completedAgents,failedAgents:e.failedAgents,stoppedAgents:e.stoppedAgents,counterText:Lm(e),rows:d}}a(hv,"buildWorkflowLiveViewModel");function Om(e,o){return o!==0?!1:e.name==="WorkflowScriptExecutionError"||/restricted workflow script|workflow generation source|workflow command .* must|unsupported workflow command/i.test(e.message)}a(Om,"isWorkflowHarnessFailure");function Rr(e){let o=ul(e.runId,e.canRerun),n=e.partialResultText?no(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return Om(e.error,e.totalSpawned)?[`Workflow harness failed before launching child agents (${e.runId}): ${e.error.message}`,"This points to an invalid generated workflow script or saved capsule, not a failed child-agent task.",...t,o].join(`
202
+ `):[`Workflow failed (${e.runId}): ${e.error.message}`,...t,o].join(`
203
+ `)}a(Rr,"formatWorkflowFailedMessage");function Wm(e,o,n){return to(e.artifacts,o,n)??Oo(e.events,n)}a(Wm,"formatWorkflowFailurePartialResult");function Hn(e){let o=e?.usage;if(typeof o!="object"||o===null)return 0;let n=o,t=n.totalTokens;if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;let r=n.inputTokens,s=n.outputTokens,l=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof s=="number"&&Number.isFinite(s)&&s>0?s:0;return l+c}a(Hn,"readWorkflowEventUsageTokens");function F(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(Fn.red(`
204
+ ${o.text}
205
+ `));return}if(o.type==="success"){console.log(Fn.green(`
206
+ ${o.text}
207
+ `));return}if(o.type==="event"){console.log(Fn.dim(o.text));return}if(o.type==="assistant"){console.log(`
208
+ ${o.text}
209
+ `);return}console.log(Fn.dim(`
210
+ ${o.text}
211
+ `))}a(F,"emitWorkflowRunMessage");function so(e,o,n={}){let t=n.presentation==="agentic"?_n(n.runId??"current"):void 0,r=!1;return s=>{if(r&&(s.type==="agent_completed"||s.type==="agent_unverified"||s.type==="agent_failed"||s.type==="agent_summary_updated"))return;o?.onEvent(s);let l=Un(s);if(e.onWorkflowRunMessage){if(l&&F(e,{type:"event",text:l}),t){let c=t(s,n.locale??"en");c&&F(e,{type:"assistant",text:c,final:!1})}(s.type==="workflow_completed"||s.type==="workflow_failed"||s.type==="workflow_stopped")&&(r=!0);return}(s.type==="workflow_completed"||s.type==="workflow_failed"||s.type==="workflow_stopped")&&(r=!0),l&&hl(s)}}a(so,"workflowEventSink");function io(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(io,"subscribeWorkflowLiveProcess");function Ne(e,o,n,t="en"){let r=Date.now(),s=new Map,l,c=0,d=0,u=0,f=0,m=0,S=!1,x=n.phases??[],k=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,b=a((g,A)=>{let T=l===void 0?-1:x.indexOf(l),L=T>=0?T+1:void 0,J=x.length>0?x.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:g,...l!==void 0?{phase:l}:{},...L!==void 0?{phaseIndex:L}:{},...J!==void 0?{phaseTotal:J}:{},startedAt:r,elapsedMs:Math.max(0,Date.now()-r),activeAgents:[...s.values()],totalSpawned:c,...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},...n.maxAgents!==void 0?{agentCap:n.maxAgents}:{},tokenBudgetSpent:m,...k!==void 0?{tokenBudgetTotal:k}:{},completedAgents:d,failedAgents:u,stoppedAgents:f,...A!==void 0?{message:A}:{},locale:t})},"emit");return{running:a(g=>{S||b("running",g)},"running"),onProcessEvent:a(g=>{if(S&&g.type!=="workflow_finished")return;let A=g.snapshot.status;(g.type==="workflow_finished"||A==="completed"||A==="failed"||A==="cancelled")&&(S=!0);let T=g.type==="workflow_updated"?g.message:void 0;e.onWorkflowRunUpdate?.(vl(g.snapshot,T===void 0?{locale:t}:{locale:t,message:T}))},"onProcessEvent"),onEvent:a(g=>{if(!S)switch(g.type){case"phase_started":{let A=g.data?.name;l=typeof A=="string"?A:l,b("running");break}case"agent_spawned":{let A=typeof g.data?.taskId=="string"?g.data.taskId:`task-${c+1}`,T=typeof g.data?.name=="string"?g.data.name:A;s.set(A,T),c+=1,b("running");break}case"agent_completed":{let A=typeof g.data?.taskId=="string"?g.data.taskId:void 0;A&&s.delete(A),m+=Hn(g.data),Ar(g)==="failed"?u+=1:d+=1,b("running");break}case"agent_unverified":{let A=typeof g.data?.taskId=="string"?g.data.taskId:void 0;A&&s.delete(A),m+=Hn(g.data),d+=1,b("running");break}case"agent_failed":{let A=typeof g.data?.taskId=="string"?g.data.taskId:void 0;A&&s.delete(A),m+=Hn(g.data),u+=1,b("running");break}case"agent_stopped":{let A=typeof g.data?.taskId=="string"?g.data.taskId:void 0;A&&s.delete(A),m+=Hn(g.data),f+=1,b("running");break}case"synthesis_completed":{b("running","synthesis complete");break}default:break}},"onEvent"),complete:a((g,A)=>{S||(S=!0,b(g,A))},"complete")}}a(Ne,"createWorkflowLiveUpdateEmitter");function De(e,o,n,t,r={}){e.done.then(s=>{if(s.kind==="failed"){if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}let l=r.locale??"en",c={full:r.presentation==="agentic"},d=Wm(s.state,l,c),u=Rr({runId:n,error:s.error,canRerun:r.canRerun===!0,totalSpawned:s.state.totalSpawned,...d!==void 0?{partialResultText:d}:{},locale:l});t?.complete("failed",s.error.message),F(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?Rr({runId:n,error:s.error,canRerun:r.canRerun===!0,totalSpawned:s.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&F(o,{type:"assistant",text:u,final:!0});return}if(s.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=Se(s.result,c)??to(s.state.artifacts,l,c),u=d===void 0?Oo(s.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){F(o,{type:"assistant",text:cr({runId:n,totalSpawned:s.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}F(o,{type:"success",text:[`Workflow completed (${s.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
212
+ `)}),f&&F(o,{type:"info",text:`Workflow result:
213
+ ${f}`})}}).catch(s=>{let l=s instanceof Error?s.message:String(s);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),F(o,{type:"error",text:Rr({runId:n,error:s instanceof Error?s:new Error(l),canRerun:r.canRerun===!0})})})}a(De,"observeManagedWorkflowDone");function Ue(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(Ue,"unsubscribeWorkflowLiveProcessOnDone");function be(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){F(e.callbacks,{type:"error",text:`Workflow builder failed: ${o.message}`});return}!e.onBuilderEvent&&(o.stage==="started"||o.stage==="generating"||o.stage==="validating"||o.stage==="ready")&&console.log(Bn.dim(`
214
+ [workflow] ${o.message}
215
+ `))}a(be,"emitWorkflowBuilderEvent");function Uo(e){return{source:e.source,displayName:e.displayName,...e.goal!==void 0?{goal:e.goal}:{},...e.savedWorkflowName!==void 0?{savedWorkflowName:e.savedWorkflowName}:{},...e.sourceRunId!==void 0?{sourceRunId:e.sourceRunId}:{},...e.sourceWorkflowName!==void 0?{sourceWorkflowName:e.sourceWorkflowName}:{},...e.revisionOf!==void 0?{revisionOf:e.revisionOf}:{},...e.hostMetadata!==void 0?{hostMetadata:{...e.hostMetadata}}:{}}}a(Uo,"buildWorkflowProcessMetadata");async function Dm(e){let o=e.approval==="required"?We(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(Bn.red(`
216
+ [workflow] refusing to start a workflow without an interactive approval channel.
217
+ `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(Bn.red(`
218
+ [workflow] cannot start - REPL options unavailable in this context.
219
+ `)),"failed";let t=Oe(e.request),r,s;try{if(be(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let g=nn(e.builtin.name);if(!g)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);s={module:g,args:e.builtin.args,approvalDescription:g.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{be(e,{stage:"generating",message:"Workflow - generating harness"});let A=await(e.generateWorkflow??on)({request:e.request,options:r});if(A.kind==="declined")return be(e,{stage:"declined",message:A.reason}),console.log(Bn.dim(`
220
+ Workflow not created: ${A.reason}
221
+ `)),"declined";s={module:A.module,args:{request:e.request},approvalDescription:A.approvalSummary,mayUseWorktree:A.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:A.scriptSnapshot,rawScript:A.scriptSnapshot.source}}be(e,{stage:"validating",message:"Workflow - validating harness"})}catch(g){let A=g instanceof Error?g.message:String(g);return be(e,{stage:"failed",message:A}),"failed"}be(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=Ae(s.module);l!=="agentic"&&F(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${s.approvalDescription}`});let d=Le(process.cwd()).key,u=e.runBaseDir??O("workflow-runs",d),f=e.runManager??ze(),m=`run-${Date.now().toString(36)}`,S=Nm(u,m);if(o){if(!await o(ue(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree,...s.rawScript!==void 0?{rawScript:s.rawScript}:{}})))return be(e,{stage:"cancelled",message:"Workflow cancelled"}),F(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(F(e.callbacks,{type:"info",text:ue(c,{source:e.sourceLabel??"generated",sandbox:s.sandbox,mayUseWorktree:s.mayUseWorktree})}),F(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${s.sandbox}); normal permission gates still apply.`}));l==="agentic"?F(e.callbacks,{type:"assistant",text:dr({runId:m,summary:c,approvalSummary:s.approvalDescription,locale:t}),final:!1}):F(e.callbacks,{type:"info",text:`Started workflow ${s.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let x=Ne(e.callbacks,m,s.module.meta,t);x.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`);let k=io(f,x,m),b=f.startFromOptions({module:s.module,args:s.args,options:r,runId:m,runDir:S,...s.scriptSnapshot!==void 0?{scriptSnapshot:s.scriptSnapshot}:{},processMetadata:Uo({source:e.processSource??"command",displayName:s.module.meta.name,goal:e.request,hostMetadata:{workflowAuthorship:"kodax-generated"}}),onEvent:so(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:m})});return Ue(b,k),be(e,{stage:"launched",message:`Workflow ${s.module.meta.name} started`}),De(b,e.callbacks,m,x,{canRerun:!0,presentation:l,locale:t}),"started"}a(Dm,"startGeneratedWorkflowFromRequest");function Er(e){let o=e[0]?.toLowerCase();if(o==="help"||o==="--help"||o==="-h")return{kind:"help"};if(!o||o==="list")return{kind:"list"};if(o==="runs")return{kind:"runs",rawArgs:e.slice(1)};if(o==="show"){let n=e.slice(1),t=n.includes("--full"),r=n.find(s=>s!=="--full")??"";return t?{kind:"show",runId:r,full:!0}:{kind:"show",runId:r}}if(o==="pause")return{kind:"pause",runId:e[1]??""};if(o==="resume")return{kind:"resume",runId:e[1]??""};if(o==="stop")return{kind:"stop",runId:e[1]??""};if(o==="delete"){let n=e.slice(1),t=n.includes("--force"),r=n.includes("--saved"),s=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&s?"conflict":r?"saved":s?"run":void 0;return{kind:"delete",target:l,...t?{force:!0}:{},...c?{scope:c}:{}}}if(o==="prune")return{kind:"prune",rawArgs:e.slice(1)};if(o==="save")return{kind:"save",runId:e[1]??"",name:e[2]??""};if(o==="rename")return{kind:"rename",target:e[1]??"",newName:e.slice(2).join(" ").trim()};if(o==="revise"){let n=e.slice(1),t=n.includes("--replace"),r=n.filter(s=>s!=="--replace");return{kind:"revise",target:r[0]??"",request:r.slice(1).join(" ").trim(),...t?{replace:!0}:{}}}return o==="rerun"?{kind:"rerun",runId:e[1]??"",rawArgs:e.slice(2).join(" ").trim()}:o==="create"?{kind:"create",request:e.slice(1).join(" ").trim()}:{kind:"start",name:e[0],rawArgs:e.slice(1).join(" ").trim()}}a(Er,"parseWorkflowInvocation");function jo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(jo,"parseWorkflowArgs");function Cr(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(`
222
+ `)}a(Cr,"buildWorkflowRevisionRequest");function Sl(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(Sl,"parseNonNegativeInteger");function Ir(e){let o=!1,n=20;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let s=Sl(e[t+1]);if(s===void 0||s<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(s,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(Ir,"parseWorkflowRunsOptions");function Um(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(Um,"parseOlderThanMs");function Tr(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let s=e[r];if(s==="--dry-run"){o=!0;continue}if(s==="--keep"){let l=Sl(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(s==="--older-than"){let l=Um(e[r+1]);if(l===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=l,r+=1;continue}return{dryRun:o,error:`unknown option: ${s??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:50}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}a(Tr,"parseWorkflowPruneOptions");var jm=1440*60*1e3;function Fm(e){return new Map(e.map(o=>[o.runId,o]))}a(Fm,"processSnapshotsByRunId");function Hm(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/jm}:{}}}a(Hm,"workflowPruneRetentionOptions");function Bm(e,o){let n=new Map(e.map(t=>[t.runId,t]));return o.map(t=>{let r=n.get(t);return{runId:t,workflow:r?.workflow??"?",status:r?.status??"?",endedAt:r?.endedAt??0}})}a(Bm,"workflowPruneCandidateSummaries");function bl(e){return Uo({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(bl,"buildSavedWorkflowProcessMetadata");var $l={name:"workflow",description:"Run a dynamic multi-agent workflow (FEATURE_217)",usage:"/workflow [help | list | pending | runs | show | pause | resume | stop | delete | prune | rerun | save | rename | revise | create | <name> [args] | <request>]",argumentHint:"help | list | pending | runs [--all|--limit N] | show [runId] | pause <runId> | resume <runId> | stop [runId] | delete [--force] [--run|--saved] <runId|savedName> | prune --dry-run|--keep N|--older-than Nd | rerun <runId|savedName> [args] | save <runId> <name> | rename <runId|alias|savedName> <newName> | revise [--replace] <runId|alias|savedName> <change> | create <request> | <name> [args]",detailedHelp:Ln,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await Pn(Tn(o),"workflow");return}let r=Er(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(h.yellow(`
223
+ [workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
224
+ Switch with /agent-mode ama, then request it explicitly via /workflow.
225
+ `));return}let s=Le(process.cwd()).key,l=O("workflow-runs",s),c=ze(),d=br(process.cwd()),u=Ds({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async y=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:js(y)}}),"createWorkflowFromText");if(r.kind==="help"){Ln();return}if(r.kind==="list"){console.log(h.bold(`
226
+ Built-in workflows:`)),console.log(mr(tn())),console.log(h.bold(`
227
+ Pattern templates:`));for(let R of Us())console.log(` ${h.cyan(R.name)} ${h.dim(`(${R.pattern})`)} - ${R.description}`);let y=await Ke(d);y.length>0&&(console.log(h.bold(`
228
+ Saved workflows:`)),console.log($r(y))),console.log(h.dim(`
229
+ Run one with: /workflow <name> <question or JSON args>`)),console.log(h.dim(` Show usage with: /workflow help
230
+ `));return}if(r.kind==="runs"){let y=Ir(r.rawArgs);if(y.error){console.log(h.yellow(`
231
+ Usage: /workflow runs [--all] [--limit N]
232
+ ${y.error}
233
+ `));return}let R=Fm(u.listWorkflowProcessSnapshots({activeOnly:!1})),$=c.list().filter(ro);$.length>0&&(console.log(h.bold(`
234
+ Active workflow runs:`)),console.log(hr($,{processSnapshots:R}))),console.log(h.bold(`
235
+ Workflow runs:`)),console.log(gr(No(l),{limit:y.all?void 0:y.limit,showLimitHint:!y.all,processSnapshots:R})),console.log();return}if(r.kind==="show"){let y=No(l),R=r.runId||yr(c.list(),y);if(!R){console.log(h.yellow(`
236
+ No workflow runs yet. Start one with /workflow create <request>.
237
+ `));return}if(!xe(R))return;let $=c.get(R),_=Do(l,R),I=u.getWorkflowProcessSnapshot(R);console.log(h.bold(`
238
+ Workflow run:`)),console.log(xr($,_,{full:r.full===!0,...I?{processSnapshot:I}:{}})),console.log();return}if(r.kind==="pause"){if(!xe(r.runId))return;let y=c.pause(r.runId);console.log(y?h.dim(`Paused workflow ${r.runId}.
239
+ `):h.yellow(`No running workflow ${r.runId}.
240
+ `));return}if(r.kind==="resume"){if(!xe(r.runId))return;let y=c.resume(r.runId);console.log(y?h.dim(`Resumed workflow ${r.runId}.
241
+ `):h.yellow(`No paused workflow ${r.runId}.
242
+ `));return}if(r.kind==="stop"){let y=r.runId||vr(c.list());if(!y){console.log(h.yellow(`
243
+ No active workflow to stop.
244
+ `));return}if(!xe(y))return;let R=await u.stopWorkflow(y,"stopped by user"),$=c.get(y),_=Do(l,y),I=u.getWorkflowProcessSnapshot(y),H=$?.status??_?.status??I?.status,X=$?!ro($):_?pr(_.status):I!==void 0&&Zo(I.status),U=Sr(y,kr($,_));console.log(R?h.dim(`Stopped workflow ${y}.
245
+ `):H&&X?h.yellow(`Workflow ${y} is already ${H}. Next: ${U}.
246
+ `):h.yellow(`No active workflow ${y}.
247
+ `));return}if(r.kind==="delete"){if(!r.target){console.log(h.yellow(`
248
+ Usage: /workflow delete [--force] [--run|--saved] <runId|savedName>
249
+ `));return}if(r.scope==="conflict"){console.log(h.red(`
250
+ [workflow] choose only one delete scope: --run or --saved.
251
+ `));return}let y=a(async(ge,Q)=>{try{let he=await u.deleteSavedWorkflow(ge,Q);if(!he){console.log(h.red(`
252
+ [workflow] saved workflow deletion is unavailable in this context.
253
+ `));return}console.log(h.dim(`
254
+ Deleted saved workflow ${he.name}.
255
+ `))}catch(he){let B=he instanceof Error?he.message:String(he);console.log(h.red(`
256
+ [workflow] delete failed: ${B}
257
+ `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await y(r.target);return}let R=c.getWorkflowProcessSnapshot(r.target),$=R?void 0:await u.resolveWorkflowIdentity(r.target),_;if($?.kind==="ambiguous")if($.run)_=$.run.runId;else{console.log(h.red(`
258
+ [workflow] ambiguous delete target: ${r.target} matches multiple workflow run/display names${$.matches.includes("saved")?" and a saved workflow name":""}. Use the concrete run id, or --saved when deleting a generated saved capsule.
259
+ `));return}if($?.kind==="saved"){if(r.scope==="run"){console.log(h.yellow(`
260
+ No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
261
+ `));return}await y($.savedWorkflow.name,$.savedWorkflow.source);return}if($?.kind==="missing"){console.log(h.yellow(`
262
+ No persisted workflow run or generated saved workflow ${r.target}.
263
+ `));return}let I=$?.kind==="run"?$.runId:_??r.target;if(!xe(I))return;if(await u.deleteWorkflowRun(I,{force:r.force})){console.log(h.dim(`
264
+ Deleted workflow run ${I}${r.force?" with --force":""}.
265
+ `));return}let X=R??c.getWorkflowProcessSnapshot(I),U=u.getWorkflowProcessSnapshot(I);if(!U&&!xl(re(l,I,"run.json"))){console.log(h.yellow(`
266
+ No persisted workflow run or generated saved workflow ${r.target}.
267
+ `));return}if(X&&!Zo(X.status)){console.log(h.yellow(`
268
+ Workflow ${I} is ${X.status}. Stop it before deleting the run record.
269
+ `));return}if(U&&!Zo(U.status)){console.log(h.yellow(`
270
+ Workflow ${I} is a non-terminal persisted ${U.status} record. If it is stale, run /workflow delete --force ${I}.
271
+ `));return}console.log(h.yellow(`
272
+ Workflow ${I} is not a deletable terminal run.
273
+ `));return}if(r.kind==="prune"){let y=Tr(r.rawArgs);if(y.error){console.log(h.yellow(`
274
+ Usage: /workflow prune --dry-run | --keep N | --older-than Nd
275
+ ${y.error}
276
+ `));return}if(!y.dryRun&&y.keep===void 0&&y.olderThanMs===void 0){console.log(h.yellow(`
277
+ Usage: /workflow prune --dry-run | --keep N | --older-than Nd
278
+ No cleanup rule was provided.
279
+ `));return}let R=No(l),$=await u.pruneWorkflowRuns(Hm(y)),_=Bm(R,$.candidates);console.log(h.bold(y.dryRun?`
280
+ Workflow prune preview:`:`
281
+ Workflow prune:`)),console.log(wr(_)),$.protectedRuns>0&&console.log(h.dim(`
282
+ Protected ${$.protectedRuns} active workflow run${$.protectedRuns===1?"":"s"} from pruning.`)),y.dryRun?console.log(h.dim(`
283
+ Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
284
+ `)):console.log(h.dim(`
285
+ Deleted ${$.deleted} workflow run${$.deleted===1?"":"s"}.
286
+ `));return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(h.yellow(`
287
+ Usage: /workflow save <runId> <name>
288
+ `));return}if(!xe(r.runId))return;try{let y=await Ms({runDir:re(l,r.runId),targetDir:d.project??re(process.cwd(),".kodax","workflows"),name:r.name});console.log(h.green(`
289
+ Saved workflow ${y.name} to ${y.path}
290
+ `))}catch(y){let R=y instanceof Error?y.message:String(y);console.log(h.red(`
291
+ [workflow] save failed: ${R}
292
+ `))}return}if(r.kind==="rename"){if(!r.target||!r.newName){console.log(h.yellow(`
293
+ Usage: /workflow rename <runId|alias|savedName> <newName>
294
+ `));return}let y=await u.resolveWorkflowIdentity(r.target);if(y.kind==="ambiguous"){console.log(h.red(`
295
+ [workflow] ambiguous rename target: ${r.target} matches both a workflow run id and a saved workflow name.
296
+ `));return}if(y.kind==="missing"){console.log(h.red(`
297
+ [workflow] rename target not found: ${r.target}
298
+ `));return}if(y.kind==="run"){if(!await u.renameWorkflowRun(y.runId,r.newName)){console.log(h.red(`
299
+ [workflow] rename failed: ${y.runId}
300
+ `));return}console.log(h.green(`
301
+ Renamed workflow run ${y.runId} to ${r.newName.trim()}.
302
+ `));return}try{let R=await _s({dirs:d,name:y.savedWorkflow.name,newName:r.newName,source:y.savedWorkflow.source});console.log(h.green(`
303
+ Renamed saved workflow ${r.target} to ${R.name}.
304
+ `))}catch(R){let $=R instanceof Error?R.message:String(R);console.log(h.red(`
305
+ [workflow] rename failed: ${$}
306
+ `))}return}if(r.kind==="revise"){if(!r.target||!r.request){console.log(h.yellow(`
307
+ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
308
+ `));return}let y=We(n);if(!y){console.log(h.red(`
309
+ [workflow] refusing to revise a workflow without an interactive approval channel.
310
+ `));return}let R=n.createKodaXOptions;if(!R){console.log(h.red(`
311
+ [workflow] cannot revise - REPL options unavailable in this context.
312
+ `));return}let $=await u.resolveWorkflowIdentity(r.target);if($.kind==="ambiguous"){console.log(h.red(`
313
+ [workflow] ambiguous revise target: ${r.target} matches both a workflow run id and a saved workflow name.
314
+ `));return}if($.kind==="missing"){console.log(h.red(`
315
+ [workflow] revise target not found: ${r.target}
316
+ `));return}if(r.replace===!0&&$.kind!=="saved"){console.log(h.red(`
317
+ [workflow] revise --replace requires a saved workflow name target.
318
+ `));return}let _;try{if($.kind==="run")_=(await mt({runDir:$.runDir})).capsule;else{if($.savedWorkflow.execution!=="capability-generated"){console.log(h.red(`
319
+ [workflow] only generated workflow capsules can be revised.
320
+ `));return}_=await yo($.savedWorkflow.path)}}catch(G){let go=G instanceof Error?G.message:String(G);console.log(h.red(`
321
+ [workflow] revise failed: ${go}
322
+ `));return}let I=Cr({target:r.target,capsule:_,changeRequest:r.request}),H;try{H=await on({request:I,options:R()})}catch(G){let go=G instanceof Error?G.message:String(G);console.log(h.red(`
323
+ [workflow] revise generation failed: ${go}
324
+ `));return}if(H.kind==="declined"){console.log(h.dim(`
325
+ Workflow revision not created: ${H.reason}
326
+ `));return}let X=r.replace===!0&&$.kind==="saved"?$:void 0,U=X?.savedWorkflow.name,ge=U??await fl(d,H.manifest.name),Q=ge===H.manifest.name?H.manifest:{...H.manifest,name:ge};if(!await y(ue(Ae({meta:Q,run:H.module.run}),{source:U?`revision-replace:${U}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Q.mayUseWorktree===!0,rawScript:H.source}))){console.log(h.dim(`Workflow revision cancelled.
327
+ `));return}let B={name:ge,manifest:Q,source:H.source,intent:Ss(Q,{originalRequest:r.request}),..._.inputs!==void 0?{inputs:_.inputs}:{},..._.requires!==void 0?{requires:_.requires}:{},provenance:ml({capsule:_,resolution:$,...U!==void 0?{replacesWorkflowName:U}:{}})};if(X){let G=await Ls({...B,dirs:d,savedSource:X.savedWorkflow.source});console.log(h.green(`
328
+ Replaced saved workflow ${G.name} with revised capsule at ${G.path}
329
+ `)),console.log(h.dim(`Previous capsule archived at ${G.previousPath}
330
+ `));return}let qo=await Ps({...B,dir:d.project??re(process.cwd(),".kodax","workflows")});console.log(h.green(`
331
+ Saved workflow revision ${qo.name} to ${qo.path}
332
+ `));return}if(r.kind==="rerun"){if(!r.runId){console.log(h.yellow(`
333
+ Usage: /workflow rerun <runId|savedName> [args]
334
+ `));return}if(!xe(r.runId))return;let y=We(n);if(!y){console.log(h.red(`
335
+ [workflow] refusing to rerun a workflow without an interactive approval channel.
336
+ `));return}let R=n.createKodaXOptions;if(!R){console.log(h.red(`
337
+ [workflow] cannot start \u2014 REPL options unavailable in this context.
338
+ `));return}let $=(await Ke(d)).find(M=>M.name===r.runId),_=c.list().some(M=>M.runId===r.runId)||xl(re(l,r.runId,"run.json"));if($&&_){console.log(h.red(`
339
+ [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
340
+ `)),console.log(h.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
341
+ `));return}if($&&!_){let M=await gl($,y);if(!M)return;let ho=Mo(r.rawArgs,M.module.meta.name,M.module.meta.description,M.scriptSnapshot?.source),rs="agentic";if(!await y(ue(Ae(M.module),M.approvalContext))){console.log(h.dim(`Workflow cancelled.
342
+ `));return}let ee=`run-${Date.now().toString(36)}`,tc=re(l,ee);console.log(h.dim(`
343
+ Started workflow ${M.module.meta.name} (${ee}). Use /workflow show ${ee} for status.
344
+ `));let rt=Ne(n,ee,M.module.meta,ho);rt.running(`Use /workflow show ${ee} for status or /workflow stop ${ee} to stop.`);let rc=io(c,rt,ee),ss=c.startFromOptions({module:M.module,args:jo(r.rawArgs),options:R(),runId:ee,runDir:tc,...M.scriptSnapshot?{scriptSnapshot:M.scriptSnapshot}:{},processMetadata:bl({displayName:M.module.meta.name,savedWorkflowName:$.name,provenance:M.provenance}),onEvent:so(n,void 0,{presentation:rs,locale:ho,runId:ee})});Ue(ss,rc),De(ss,n,ee,rt,{canRerun:M.scriptSnapshot!==void 0,presentation:rs,locale:ho});return}let I;try{I=await mt({runDir:re(l,r.runId)})}catch(M){let ho=M instanceof Error?M.message:String(M);console.log(h.red(`
345
+ [workflow] rerun failed: ${ho}
346
+ `));return}let X=Do(l,r.runId)?.scriptSnapshotPath??re(l,r.runId,"script.js"),U=Mo(r.rawArgs,I.capsule.manifest.name,I.capsule.manifest.description,I.capsule.source),ge="agentic",Q=vo(I.capsule,Wn());if(!Q.ok){Nn(Q);return}if(Dn(Q),!await y(ue(Ae(I.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:I.capsule.manifest.mayUseWorktree===!0,rawScriptPath:X,rawScript:I.capsule.source}))){console.log(h.dim(`Workflow cancelled.
347
+ `));return}let B=`run-${Date.now().toString(36)}`,qo=re(l,B);console.log(h.dim(`
348
+ Started workflow ${I.module.meta.name} (${B}). Use /workflow show ${B} for status.
349
+ `));let G=Ne(n,B,I.module.meta,U);G.running(`Use /workflow show ${B} for status or /workflow stop ${B} to stop.`);let go=io(c,G,B),ts=c.startFromOptions({module:I.module,args:jo(r.rawArgs),options:R(),runId:B,runDir:qo,scriptSnapshot:{manifest:I.capsule.manifest,source:I.capsule.source},processMetadata:Uo({source:"command",displayName:I.module.meta.name,sourceRunId:r.runId}),onEvent:so(n,void 0,{presentation:ge,locale:U,runId:B})});Ue(ts,go),De(ts,n,B,G,{canRerun:!0,presentation:ge,locale:U});return}if(r.kind==="create"){if(!r.request){console.log(h.yellow(`
350
+ Usage: /workflow create <request>
351
+ `));return}return await f(r.request)}let m=We(n);if(!m){console.log(h.red(`
352
+ [workflow] refusing to start a workflow without an interactive approval channel.
353
+ `));return}let S={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},x,k=nn(r.name),b,g;if(!k){let y=(await Ke(d)).find(R=>R.name===r.name);if(!y){let R=[r.name,r.rawArgs].filter($=>$&&$.length>0).join(" ").trim();return await f(R)}if(b=y,y.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
354
+ ${y.path}`)){console.log(h.dim(`Workflow cancelled.
355
+ `));return}try{if(y.execution==="capability-generated"){let R=await yo(y.path),$=vo(R,Wn());if(!$.ok){Nn($);return}Dn($),S={source:`saved:${y.source}`,sandbox:y.execution,mayUseWorktree:R.manifest.mayUseWorktree===!0,rawScriptPath:y.path,rawScript:R.source},x={manifest:R.manifest,source:R.source},g=R.provenance}k=await rn(y.path),y.execution==="trusted-local"&&(S={source:`saved:${y.source}`,sandbox:y.execution,mayUseWorktree:!1})}catch(R){let $=R instanceof Error?R.message:String(R);console.log(h.red(`
356
+ [workflow] failed to load ${y.path}: ${$}
357
+ `));return}}let A=n.createKodaXOptions;if(!A){console.log(h.red(`
358
+ [workflow] cannot start \u2014 REPL options unavailable in this context.
359
+ `));return}if(!await m(ue(Ae(k),S))){console.log(h.dim(`Workflow cancelled.
360
+ `));return}let L=`run-${Date.now().toString(36)}`,J=re(l,L);console.log(h.dim(`
361
+ Started workflow ${k.meta.name} (${L}). Use /workflow show ${L} for status.
362
+ `));let Z=Mo(r.rawArgs,k.meta.name,k.meta.description,x?.source),po=Ne(n,L,k.meta,Z);po.running(`Use /workflow show ${L} for status or /workflow stop ${L} to stop.`);let pe="agentic",nc=io(c,po,L),ns=c.startFromOptions({module:k,args:jo(r.rawArgs),options:A(),runId:L,runDir:J,...x?{scriptSnapshot:x}:{},processMetadata:b?bl({displayName:k.meta.name,savedWorkflowName:b.name,provenance:g}):Uo({source:"command",displayName:k.meta.name}),onEvent:so(n,void 0,{presentation:pe,locale:Z,runId:L})});Ue(ns,nc),De(ns,n,L,po,{canRerun:x!==void 0,presentation:pe,locale:Z})},"handler")};import K from"chalk";var Pr={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(K.yellow(`
363
+ Current session is already empty.`)),console.log(K.dim("You can start a new conversation directly."));return}if(n.confirm&&!await n.confirm("Start a new session? This will clear the current conversation history.")){console.log(K.dim(`
364
+ Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(K.dim(`
365
+ [Previous session saved]`))}catch{console.log(K.yellow(`
366
+ [Warning: Failed to save previous session]`))}n.startNewSession?.(),o.messages=[],n.clearHistory(),console.log(K.green(`
367
+ \u2713 Started new session`)),console.log(K.dim("Conversation history cleared. Ready for a fresh start!"))},"handler"),detailedHelp:a(()=>{console.log(K.bold(`
368
+ /new - Start New Session
369
+ `)),console.log("Usage:"),console.log(K.cyan(" /new")+` - Clear current session and start fresh
370
+ `),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.
371
+ `),console.log("Examples:"),console.log(K.dim(" User: Help me refactor the authentication module")),console.log(K.dim(" AI: [provides refactoring help]")),console.log(K.cyan(" /new")),console.log(K.dim(" \u2713 Started new session")),console.log(K.dim(" User: Now I need help with database optimization")),console.log(K.dim(` AI: [provides database help]
372
+ `)),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 D from"chalk";var fk="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",mk="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function pk(e){return Ts(e.error,e.messageCount)}a(pk,"shouldOfferSessionRecovery");var _r={name:"recover",aliases:["handoff"],description:"Create a fresh session from safe memory and continue",usage:"/recover [prompt]",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(D.yellow(`
373
+ Current session is empty. Start a normal message instead.`));return}if(!n.recoverSession){console.log(D.red(`
374
+ [Recover is not available in this host]
375
+ `));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(D.dim(`
376
+ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(dt(e.join(" ")))}catch(r){let s=r instanceof Error?r.message:String(r);console.log(D.red(`
377
+ [Recover failed] ${s}
378
+ `));return}t==="blocked"?console.log(D.yellow(`
379
+ [Recover blocked by the current session transition guard]
380
+ `)):t==="failed"?console.log(D.red(`
381
+ [Recover failed]
382
+ `)):t==="empty"&&console.log(D.yellow(`
383
+ [Nothing to recover from this session]
384
+ `))},"handler"),detailedHelp:a(()=>{console.log(D.cyan(`
385
+ /recover - Continue in a Fresh Session
386
+ `)),console.log(D.bold("Usage:")),console.log(D.dim(" /recover ")+"Continue with a safe memory summary"),console.log(D.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(D.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(D.bold("Description:")),console.log(D.dim(" Saves the current session, creates a new local session,")),console.log(D.dim(" carries over only a compact memory summary, and runs the")),console.log(D.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(D.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as Gm}from"node:child_process";import{promisify as Km}from"node:util";import se from"chalk";var zm=Km(Gm),Lr=1e5;async function Ho(e,o){let{stdout:n}=await zm("git",e,{cwd:o,maxBuffer:67108864,windowsHide:!0});return n}a(Ho,"git");async function qm(e){for(let o of["main","master","develop"])try{return await Ho(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(qm,"detectBaseBranch");async function Fo(e,o){return(await Ho(["rev-parse",e],o)).trim()}a(Fo,"resolveRef");async function Vm(e,o){try{return await Fo(e,o)}catch{return}}a(Vm,"tryResolveRef");async function Xm(e,o){let n=e[0];if(n==="base"){let t=await qm(o);return{diff:await Ho(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Fo(t,o),headRef:await Fo("HEAD",o)}}if(n==="sha"&&e[1]){let t=await Vm(`${e[1]}^`,o);return{diff:await Ho(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Fo(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Ho(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Fo("HEAD",o)}}a(Xm,"getDiff");function Ym(e){let o=!1,n=!1,t=!1,r=!1,s=[],l=[],c=a(f=>f==="--workflow"||f==="workflow"?(o=!0,!0):f==="--lean"||f==="lean"?(n=!0,!0):!1,"applyModeArg");for(let f=0;f<e.length;f+=1){let m=e[f];if(m!==void 0){if(r){l.push(m);continue}if(m==="--"){r=!0;continue}if(!c(m)){if(!t&&m==="base"){s.push("base"),t=!0;continue}if(!t&&m==="sha"){for(s.push("sha"),t=!0;f+1<e.length;){let S=e[f+1];if(S===void 0)break;if(S==="--"){r=!0,f+=1;break}if(c(S)){f+=1;continue}s.push(S),f+=1;break}continue}l.push(m)}}}let d=l.join(" ").trim(),u=s[0]==="sha"&&!s[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:s,prompt:d.length>0?d:void 0,...u?{error:u}:{}}}a(Ym,"parseReviewInvocation");function Jm(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(`
387
+ `)}a(Jm,"buildReviewWorkflowRequest");function Zm(e){return e.length<=Lr?e:`${e.slice(0,Lr)}
388
+
389
+ [diff truncated to ${Lr} chars - review the rest with a narrower scope]`}a(Zm,"truncateDiff");function Qm(e){let o=Zm(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(`
390
+ `)}a(Qm,"buildReviewPrompt");function Al(e){let o=[e.workflow?"--workflow":void 0,e.lean?"--lean":void 0].filter(n=>n!==void 0);return o.length>0?`/review ${o.join(" ")}`:"/review"}a(Al,"buildDisplayName");function ep(){console.log(se.bold(`
391
+ /review - Review Git Changes
392
+ `)),console.log("Usage:"),console.log(se.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(se.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(se.dim(" base ")+"Review changes against the detected base branch"),console.log(se.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(se.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(se.dim(" --workflow ")+"Run the deterministic scoped-review workflow"),console.log(),console.log("Examples:"),console.log(se.dim(" /review --lean")),console.log(se.dim(" /review base focus on auth and data loss")),console.log(se.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(ep,"printReviewHelp");var Rl={name:"review",description:"Review git changes for bugs, security, performance, design, and optional lean diffs",usage:"/review [--lean] [--workflow] [base | sha <hash>] [prompt...]",argumentHint:"[--lean] [--workflow] [base | sha <hash>] [prompt...]",detailedHelp:ep,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=Ym(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r;try{r=await Xm(t.diffArgs,n)}catch(s){return{success:!1,message:`/review: git failed - ${s instanceof Error?s.message:String(s)}`}}if(!r.diff.trim())return{success:!0,message:"No changes to review."};if(t.workflow){let s;try{s=await Fs({cwd:n,sessionId:o.sessionId,label:r.label,diff:r.diff,scope:r.scope,...r.baseRef?{baseRef:r.baseRef}:{},...r.headRef?{headRef:r.headRef}:{},customPrompt:t.prompt})}catch(l){return{success:!1,message:`/review: could not create review packet - ${l instanceof Error?l.message:String(l)}`}}return{success:!0,workflow:{request:Jm(r.label,{lean:t.lean,customPrompt:t.prompt,packets:s}),source:"command",displayName:Al(t),processSource:"review",builtin:{name:"scoped-review",args:{packets:s,...t.lean?{lean:!0}:{},...t.prompt?{reviewFocus:t.prompt}:{}}}}}}return{success:!0,invocation:{prompt:Qm({label:r.label,diff:r.diff,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:Al(t)}}},"handler")};import{constants as op}from"node:fs";import{access as np,readFile as tp,writeFile as rp}from"node:fs/promises";import{join as sp}from"node:path";import ie from"chalk";var Tl=`# KodaX Lean Mode
393
+
394
+ Before writing code:
395
+ 1. Do we need to build this at all?
396
+ 2. Does the codebase already have this?
397
+ 3. Can stdlib or native platform solve it?
398
+ 4. Can an existing dependency solve it?
399
+ 5. Can this be a minimal diff?
400
+ 6. Only then write code.
401
+
402
+ Never cut:
403
+ - trust-boundary validation
404
+ - security checks
405
+ - data-loss protection
406
+ - accessibility basics
407
+ - explicitly requested behavior
408
+
409
+ After coding:
410
+ - explain what was skipped
411
+ - say when to add it back
412
+ `;function ip(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(ip,"resolveTargetRoot");async function Pl(e){try{return await np(e,op.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(Pl,"pathExists");function El(e){return console.log(ie.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(El,"existingAgentsResult");function Gn(e){return e instanceof Error?e.message:String(e)}a(Gn,"errorMessage");async function Cl(e,o){let n;try{n=await Pl(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${Gn(t)}`}}if(n)return El(e);try{await rp(e,Tl,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?El(e):{success:!1,message:`/agents init: failed to write ${e}: ${Gn(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: ${Gn(t)}`}}return console.log(ie.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(Cl,"initializeAgentsFile");function ap(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",Tl.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
413
+ `)}a(ap,"buildLeanReviewPrompt");function Il(){console.log(ie.bold(`
414
+ /agents - Manage Target Project Instructions
415
+ `)),console.log("Usage:"),console.log(ie.cyan(" /agents init")),console.log(ie.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ie.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ie.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ie.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ie.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ie.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(Il,"printAgentsHelp");var Mr={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:Il,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return Il(),!0;let r=ip(o),s=sp(r,"AGENTS.md");if(t==="init")return await Cl(s,n);let l;try{l=await Pl(s)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${s}: ${Gn(d)}`}}if(!l)return await Cl(s,n);let c;try{c=await tp(s,"utf8")}catch(d){let u=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${s}: ${u}`}}return{success:!0,invocation:{prompt:ap(s,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function zn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(zn,"getPastedTextRefNumLines");function lp(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(lp,"formatPastedTextRef");function cp(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(cp,"formatTruncatedTextRef");var dp=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function up(e){let o=[],n=new RegExp(dp.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(up,"parseReferences");function fp(e,o){let n=up(e);if(n.length===0)return e;let t=a(s=>o instanceof Map?o.get(s):o[s],"getContent"),r=e;for(let s=n.length-1;s>=0;s--){let l=n[s];if(l.kind==="Image")continue;let c=t(l.id);!c||c.type!=="text"||(r=r.slice(0,l.index)+c.content+r.slice(l.index+l.match.length))}return r}a(fp,"expandPastedTextRefs");var mp=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,pp=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function gp(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(gp,"isAtWordBoundaryAfter");function hp(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(hp,"isAtWordBoundaryBefore");function Lk(e,o){if(o<=0||!gp(e,o))return null;let t=e.slice(0,o).match(mp);if(!t)return null;let r=o-t[0].length,s=Number.parseInt(t[2]??"0",10);return!Number.isFinite(s)||s<=0?null:{start:r,end:o,id:s,kind:t[1]}}a(Lk,"findPlaceholderBeforeCursor");function Mk(e,o){if(o>=e.length||!hp(e,o))return null;let t=e.slice(o).match(pp);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(Mk,"findPlaceholderAfterCursor");function Ok(e){return e.length>800||zn(e)>2}a(Ok,"shouldReplacePasteWithPlaceholder");function Wk(e,o){if(e.length<=1e4)return{truncatedText:e,placeholderContent:""};let n=Math.floor(1e3/2),t=Math.floor(1e3/2),r=e.slice(0,n),s=e.slice(-t),l=e.slice(n,-t),c=zn(l),d=cp(o,c);return{truncatedText:r+d+s,placeholderContent:l}}a(Wk,"maybeTruncateLongInput");var Or=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=zn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:lp(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=zn(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 fp(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())}},Kn=null;function Nk(){return Kn===null&&(Kn=new Or),Kn}a(Nk,"getOrCreateModulePasteStore");function _l(){return Kn??void 0}a(_l,"getActivePasteStore");import{createHash as wp}from"node:crypto";import{mkdir as yp,readdir as vp,readFile as kp,stat as Sp,unlink as xp,writeFile as bp}from"node:fs/promises";import*as Wr from"node:path";var $p="paste-cache",Ap=720*60*60*1e3;function Nr(){return O($p)}a(Nr,"getPasteCacheDir");function Ll(e){return Wr.join(Nr(),`${e}.txt`)}a(Ll,"getPastePath");function Bk(e){return wp("sha256").update(e).digest("hex").slice(0,16)}a(Bk,"hashPastedText");async function Gk(e,o){try{let n=Nr();return await yp(n,{recursive:!0}),await bp(Ll(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(Gk,"storePastedText");async function Ml(e){try{return await kp(Ll(e),{encoding:"utf8"})}catch{return null}}a(Ml,"retrievePastedText");async function Kk(e=Ap){let o=Nr(),n=Date.now()-e,t=0,r=0,s;try{s=await vp(o)}catch{return{scanned:t,removed:r}}for(let l of s){if(!l.endsWith(".txt"))continue;t+=1;let c=Wr.join(o,l);try{(await Sp(c)).mtimeMs<n&&(await xp(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(Kk,"cleanupOldPastes");import*as Hr from"path";import*as Wl from"os";function Rp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Rp,"escapeRegExp");function Ep(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Rp(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(Ep,"deriveArgumentHintFromUsage");function Dr(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??Ep(e.usage,e.name)}}a(Dr,"toCommandDefinition");function Ur(e){for(let o of Ol)try{let n=Dr(o,"builtin");e.register(n)}catch(n){q({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(Ur,"registerBuiltinCommands");import*as fe from"fs";import*as je from"path";function Cp(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(Cp,"normalizeAliases");function Ip(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(Ip,"normalizePriority");function Tp(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:ms(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:ps(e.hooks),frontmatter:e}}a(Tp,"buildExecutionMetadata");function Pp(e,o){try{let n=fe.readFileSync(e,"utf-8"),[t,r]=fs(n),s=t??{},l=je.basename(e,".md"),c=typeof s.name=="string"&&s.name.trim()?s.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof s.description=="string"&&s.description.trim()?s.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:Cp(s.aliases),priority:Ip(s.priority),content:r.trim(),location:o,path:e,frontmatter:s,execution:Tp(s)}}catch(n){q({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(Pp,"parseCommandFile");function jr(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],s=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!fe.existsSync(s))continue;let c=je.resolve(s);try{c=fe.realpathSync.native?.(s)??fe.realpathSync(s)}catch{c=je.resolve(s)}if(!n.has(c)){n.add(c);try{let d=fe.readdirSync(s);for(let u of d){if(!u.endsWith(".md"))continue;let f=je.join(s,u),m=Pp(f,l);m&&o.push(m)}}catch(d){q({source:"repl:commands",level:"error",message:`Error scanning directory ${s}.`,detail:d})}}}return o}a(jr,"discoverCommands");function Fr(e,o){for(let n of e)try{o.register({name:n.name,aliases:n.aliases,description:n.description,source:"extension",priority:n.priority,location:n.location,path:n.path,userInvocable:n.execution.userInvocable,disableModelInvocation:n.execution.disableModelInvocation,allowedTools:n.execution.allowedTools,context:n.execution.context,agent:n.execution.agent,argumentHint:n.execution.argumentHint,model:n.execution.model,hooks:n.execution.hooks,frontmatter:n.frontmatter,handler:a(async()=>({success:!0,invocation:{...n.execution,prompt:n.content,source:"prompt",displayName:n.name,path:n.path}}),"handler")})}catch(t){q({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(Fr,"registerDiscoveredCommands");function Br(e,o){Ur(e);try{let n=Wl.homedir(),t=o??process.cwd(),r=jr([{path:Hr.join(t,".kodax","commands"),location:"project"},{path:O("commands"),location:"user"},{path:Hr.join(n,".agents","commands"),location:"user"}]);Fr(r,e)}catch(n){q({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(Br,"registerAllCommands");function dS(e){let o=new we;return Br(o,e),o.getAll()}a(dS,"listRegisteredCommands");function _p(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(_p,"summarizeAgentsFiles");async function Bl(e){let o=$e(e);return await o.reload(),o.size}a(Bl,"reloadSkillRegistry");function Lp(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(Vn.isAbsolute(r)?r:Vn.resolve(Vn.dirname(e),r))}return n}a(Lp,"normalizeConfiguredExtensionPaths");function Mp(){let e=Vn.join(oe(),"config.json");try{if(!Xn.existsSync(e))return{};let o=JSON.parse(Xn.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Lp(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(i.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(Mp,"loadExtensionReloadConfig");async function Op(){try{return await Rs()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(i.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Op,"discoverDefaultExtensionsForReload");async function Wp(){let e=Mp(),o=await ft(e.extensions??[]),n=await ft(await Op()),t=await en(n,o),r=[...t,...o],s=ae();if(!s&&r.length>0&&(s=Es({config:e}).activate()),!s)return{reloaded:0,loaded:0,failures:0};let l=co(s),c=l.failures.length;await s.reloadExtensions({continueOnError:!0});let d=co(s),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(k=>k.path),m=await en(t,f),S=await en(o,[...f,...m]);await s.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await s.loadExtensions(S,{continueOnError:!0,loadSource:"config",stage:"reload"});let x=co(s);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,x.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,x.failures.length-c)}}a(Wp,"reloadExtensionRuntimeFromDisk");function Np(e){return{...e,enabled:!0}}a(Np,"createManualCompactionConfig");function Gr(e){e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace unchanged: ${sr(e.runtimeInfo)}`)):console.log(i.dim(" Workspace unchanged."))}a(Gr,"printWorkspaceUnchangedNote");var Ol=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];me.size===0&&Yn(),me.has(o.toLowerCase())||!!Jn(o)?Vr(o,e.slice(1)):Jp(o)}else Yp()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
416
+ /help - Show Command Help
417
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /help ")+"Show all available commands"),console.log(i.dim(" /help <command> ")+"Show detailed help for a specific command"),console.log(i.dim(" /<command> help ")+"Shortcut for command-specific help"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /help ")+"# List all commands"),console.log(i.dim(" /help mode ")+"# Detailed help for /mode"),console.log(i.dim(" /mode help ")+"# Same detailed help shortcut"),console.log()},"detailedHelp")},{name:"setup",description:"Initialize configuration and configure a provider",usage:"/setup [--custom|--help]",handler:a(async(e,o,n)=>{let t=e.length===1&&e[0]==="--custom";if(e.length>0&&!t){console.log(i.red(`
418
+ [Usage: /setup [--custom|--help]]`));return}if(console.log(`
419
+ ${xt()}
420
+ `),n.prepareSetupSandbox){let c=await n.prepareSetupSandbox(),d=c.status==="ready"?i.green("active"):c.status==="cancelled"?i.yellow("cancelled"):i.yellow("not active");console.log(`Sandbox: [${d}]`);for(let u of c.lines)console.log(` ${u}`);console.log()}let r=Ai({validateA2A:n.validateSetupA2AConfig});for(let c of r.files){let d=c.status==="created"?i.green("created"):c.status==="invalid"?i.red("invalid"):c.status==="missing"?i.yellow("missing"):i.dim("existing");console.log(` [${d}] ${c.path}`),c.diagnostic&&console.log(` ${i.red(c.diagnostic)}`)}if(console.log(),r.files.some(c=>c.status==="invalid")){console.log(i.red("Setup stopped: fix the invalid active configuration above, then run /setup again."));return}let l=await Ci({interaction:{choose:a(async(c,d)=>{let u=d.map(m=>m.label),f=await n.ui.select(c,u);return d.find(m=>m.label===f)?.value},"choose"),text:a((c,d)=>n.ui.input(c,d),"text"),confirm:a(c=>n.ui.confirm(c),"confirm")},customOnly:t});if(l.status==="cancelled"){console.log(i.dim(`
421
+ Provider setup cancelled. Configuration files remain initialized.
422
+ `));return}console.log(i.green(`
423
+ Provider setup saved: ${l.selection.provider}/${l.selection.model}`)),console.log(i.dim(`Config: ${l.selection.configPath}`));for(let c of yi({apiKeyEnv:l.selection.apiKeyEnv}))console.log(` ${c}`);console.log()},"handler"),detailedHelp:a(()=>{console.log(`
424
+ ${xt()}
425
+ `)},"detailedHelp")},{name:"exit",aliases:["quit","q","bye"],description:"Exit interactive mode",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(i.green(`
426
+ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
427
+ /exit - Exit Interactive Mode
428
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /exit ")+"Save session and exit"),console.log(i.dim(" /quit, /q, /bye ")+"Aliases for /exit"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Saves the current conversation session and exits interactive mode.")),console.log(i.dim(" Sessions can be resumed later with /load or CLI -c option.")),console.log(i.dim(" Exiting never removes or mutates the current workspace.")),console.log()},"detailedHelp")},{name:"clear",description:"Clear conversation history",handler:a(async(e,o,n)=>{o.messages=[],o.contextTokenSnapshot=void 0,n.clearHistory(),console.log(i.yellow(`
429
+ [Conversation cleared]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
430
+ /clear - Clear Conversation History
431
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /clear ")+"Clear all messages in current session"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Removes all messages from the current conversation context.")),console.log(i.dim(" Useful for starting fresh while keeping the session.")),console.log(),console.log(i.yellow(" Warning: This action cannot be undone!")),console.log()},"detailedHelp")},{name:"cost",description:"Show session cost report",usage:"/cost",handler:a(async(e,o,n)=>{let t=n.getCostReport?.();if(!t){console.log(i.dim(`
432
+ [No cost data available yet]`));return}console.log(i.cyan(`
433
+ `+t))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
434
+ /cost - Session Cost Report
435
+ `)),console.log(i.bold("Description:")),console.log(i.dim(" Shows token usage and estimated cost for the current session,")),console.log(i.dim(" broken down by provider and AMA role.")),console.log()},"detailedHelp")},{name:"paste",description:"Inspect pasted text stored in the input buffer",usage:"/paste show <id> | /paste list",argumentHint:"show <id> | list",handler:a(async e=>{let o=e[0]?.toLowerCase();if(!o||o==="help"){console.log(i.cyan(`
436
+ /paste - Inspect stored paste contents`)),console.log(i.dim(" /paste list - Show all pasted text ids in this session")),console.log(i.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=_l();if(!n){console.log(i.yellow(`
437
+ [No paste registry active]`)),console.log(i.dim(" The REPL composer is not mounted, or no paste has been captured yet."));return}if(o==="list"){let t=n.export();if(t.length===0){console.log(i.dim(`
438
+ [No pasted content in this session yet]`));return}console.log(i.bold(`
439
+ Pasted content in this session:
440
+ `));for(let r of t){let s=r.content?.length??0,l=r.contentHash?` (hash ${r.contentHash.slice(0,8)})`:"";console.log(` ${i.cyan(`#${r.id}`)} ${r.type} ${s} chars${l}`)}console.log();return}if(o==="show"){let t=e[1],r=t?Number.parseInt(t,10):NaN;if(!Number.isFinite(r)||r<=0){console.log(i.yellow(`
441
+ Usage: /paste show <id>`));return}let s=n.get(r);if(!s){console.log(i.dim(`
442
+ [No paste registered with id #${r}]`));return}let l=s.content??"";if(!l&&s.contentHash){let c=await Ml(s.contentHash);c&&(l=c)}if(!l){console.log(i.yellow(`
443
+ [Paste #${r} has no stored content (hash ${s.contentHash??"n/a"})]`));return}console.log(i.bold(`
444
+ Pasted text #${r} (${l.length} chars):
445
+ `)),console.log(l),console.log();return}console.log(i.yellow(`
446
+ [Unknown /paste subcommand: ${o}]`)),console.log(i.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
447
+ /paste - Inspect stored paste contents
448
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /paste list - Show all pasted text ids in this session")),console.log(i.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(i.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(i.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(i.dim(" to the LLM on submit. Use this command to see what was captured.")),console.log()},"detailedHelp")},{name:"compact",description:"Manually trigger context compaction",usage:"/compact [instructions]",handler:a(async(e,o,n,t)=>{try{let r=await ti(o.gitRoot),s=t.provider,l=lt(s);if(!l){console.log(i.red(`
449
+ [Provider not found: ${s}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??Vo(o.messages),f=Np(r);console.log(i.dim(`
450
+ [Compacting conversation...]`)),n.startCompacting?.();try{let m=await vs(o.messages,f,l,d,c,void 0,u,Ws,Ns,t.model,!0,l.getEffectiveMaxOutputTokens(t.model));if(!m.compacted){console.log(i.green(`
451
+ [No compaction needed]`)),console.log(i.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
452
+ `));return}o.messages=m.messages,o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:Vo(m.messages),source:o.contextTokenSnapshot?.source??"estimate"},n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(i.green(`
453
+ [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?.()}}catch(r){let s=r instanceof Error?r.message:String(r);console.log(i.red(`
454
+ [Compaction failed: ${s}]
455
+ `))}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
456
+ /compact - Manual Context Compaction
457
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /compact ")+"Compact conversation with default instructions"),console.log(i.dim(" /compact <text> ")+"Compact with custom instructions for the summary"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Manually triggers context compaction using LLM-generated summaries.")),console.log(i.dim(" All eligible older messages are replaced atomically with a structured checkpoint.")),console.log(i.dim(" Automatic large compaction is always enabled; /compact bypasses its trigger comparison.")),console.log(),console.log(i.bold("What it does:")),console.log(i.dim(" 1. Protects 20% of the effective trigger as recent raw context")),console.log(i.dim(" 2. Summarizes the complete eligible prefix in one atomic wave")),console.log(i.dim(" 3. Tracks files that were read/modified in the conversation")),console.log(i.dim(" 4. Replaces old messages with summary to save tokens")),console.log(),console.log(i.bold("Configuration:")),console.log(i.dim(" Config file: ~/.kodax/config.json")),console.log(i.dim(" Settings:")),console.log(i.dim(" - compaction.triggerPercent: 15-90, default 75")),console.log(i.dim(" - compaction.triggerTokens: Optional absolute token threshold; 0 disables this limiter")),console.log(i.dim(" - The smaller percentage/absolute threshold wins")),console.log(i.dim(" - compaction.enabled: deprecated and ignored; automatic compaction stays on")),console.log(i.dim(" - compaction.contextWindow: Optional token-window override")),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /compact ")+"# Compact with default instructions"),console.log(i.dim(" /compact focus on auth logic ")+"# Emphasize authentication in summary"),console.log(),console.log(i.dim(" See also: /help status (shows token usage)")),console.log()},"detailedHelp")},{name:"reload",description:"Reload project rules, skills, and active extensions",handler:a(async(e,o,n,t)=>{console.log(i.cyan(`
458
+ Reloading project rule files, skills, and runtime extensions...
459
+ `));try{let r=await n.reloadAgentsFiles?.()??[],s=_p(r),l=await Bl(o.gitRoot),c=await Wp(),d=c.reloaded+c.loaded,u=c.failures;if(r.length===0&&l===0&&d===0&&u===0){console.log(i.yellow(`No project rule files, skills, or active extensions found.
460
+ `)),console.log(i.dim(" Create AGENTS.md or CLAUDE.md in your project, add skills, or load extensions with --extension.")),console.log();return}console.log(i.green(`Reloaded successfully:
461
+ `)),s.global>0&&console.log(i.dim(` - Global: ${s.global} file(s)`)),s.directory>0&&console.log(i.dim(` - Directory: ${s.directory} file(s)`)),s.project>0&&console.log(i.dim(` - Project: ${s.project} file(s)`)),c.reloaded>0&&console.log(i.dim(` - Extensions reloaded: ${c.reloaded} module(s)`)),c.loaded>0&&console.log(i.dim(` - Extensions loaded: ${c.loaded} module(s)`)),l>0&&console.log(i.dim(` - Skills: ${l} skill(s)`)),u>0&&console.log(i.yellow(` - Failures: ${u} recorded (run /extensions for details)`)),console.log(i.dim(" Updated rules, skills, and extensions will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(i.red(`Failed to reload.
462
+ `)),console.log(i.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
463
+ /reload - Reload Project Context
464
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(i.bold("Description:")),console.log(" Reloads project-level context rules from AGENTS.md, CLAUDE.md, and .kodax/AGENTS.md files."),console.log(" Reloads skills from .kodax/skills/, ~/.kodax/skills/, ~/.agents/skills/, plugins, and builtins."),console.log(" Rediscovers default/configured extensions, creates a runtime if needed, and hot-reloads loaded extensions."),console.log(),console.log(i.bold("Rule Priority:")),console.log(i.dim(" 1. Global: ")+"~/.kodax/AGENTS.md"),console.log(i.dim(" 2. Directory: ")+"AGENTS.md or CLAUDE.md from project root to current directory"),console.log(i.dim(" 3. Project: ")+".kodax/AGENTS.md at the project root"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /reload ")+"# Reload and show loaded rules"),console.log()},"detailedHelp")},{name:"extensions",aliases:["ext"],description:"Show active extension runtime diagnostics",usage:"/extensions",handler:a(async()=>{let e=ae();if(!e){console.log(i.yellow(`
465
+ [No active extension runtime]
466
+ `));return}let o=co(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(i.bold(`
467
+ Extension Runtime:
468
+ `)),console.log(i.dim(` Loaded: ${o.loadedExtensions.length}`)),console.log(i.dim(` Capabilities: ${o.capabilityProviders.length}`)),console.log(i.dim(` Commands: ${o.commands.length}`)),console.log(i.dim(` Hooks: ${o.hooks.length}`)),console.log(i.dim(` Failures: ${o.failures.length}`)),console.log(i.dim(` Extension Tools: ${n.length}`)),o.defaults.activeTools!==void 0&&console.log(i.dim(` Active Tools: ${o.defaults.activeTools.join(", ")||"(none)"}`)),(o.defaults.modelSelection.provider||o.defaults.modelSelection.model)&&console.log(i.dim(` Model Override: ${o.defaults.modelSelection.provider??"(inherit)"} / ${o.defaults.modelSelection.model??"(inherit)"}`)),o.defaults.thinkingLevel&&console.log(i.dim(` Thinking: ${o.defaults.thinkingLevel}`)),console.log(),o.loadedExtensions.length>0){console.log(i.bold("Loaded Extensions:"));for(let t of o.loadedExtensions)console.log(i.dim(` - ${t.label} [${t.loadSource}] (${t.path})`));console.log()}if(o.commands.length>0){console.log(i.bold("Extension Commands:"));for(let t of o.commands){let r=t.aliases?.length?` [${t.aliases.join(", ")}]`:"";console.log(i.dim(` - /${t.name}${r} ${t.description}`))}console.log()}if(o.capabilityProviders.length>0){console.log(i.bold("Capability Providers:"));for(let t of o.capabilityProviders){let r=ig(t.metadata);console.log(i.dim(` - ${t.id} [${t.kinds.join(", ")}]${r?` ${r}`:""}`))}console.log()}if(n.length>0){console.log(i.bold("Extension Tools:"));for(let t of n){let r=t.shadowedSources.length>0?` overrides: ${t.shadowedSources.map(s=>s.label??s.id??s.kind).join(", ")}`:"";console.log(i.dim(` - ${t.name}${r}`))}console.log()}if(o.hooks.length>0){console.log(i.bold("Hook Participation:"));for(let t of o.hooks)console.log(i.dim(` - ${t.hook} [#${t.order}] ${t.source.label}`));console.log()}if(o.failures.length>0){console.log(i.bold("Recent Failures:"));for(let t of o.failures.slice(-10))console.log(i.dim(` - [${t.stage}] ${t.source.label}: ${t.target} -> ${t.message}`));console.log()}},"handler")},{name:"sandbox",description:"Inspect the optional ASRT sandbox backend",usage:"/sandbox",handler:a(async(e,o,n)=>{if(e.length>0){console.log(i.red(`
469
+ [Usage: /sandbox]`));return}if(!n.inspectSandbox){console.log(i.dim(`
470
+ Sandbox diagnostics are unavailable because this host did not provide them.
471
+ `));return}let t=await n.inspectSandbox(),r=t.ready?i.green("ready"):i.yellow("unavailable");console.log(i.bold(`
472
+ Sandbox
473
+ `)),console.log(i.dim(` Status: ${r}`)),console.log(i.dim(` Platform: ${t.platform}`)),console.log(i.dim(` Backend: ${t.backend}`)),console.log(i.dim(` ASRT: ${t.version}`));for(let s of t.diagnostics)console.log(i.dim(` Diagnostic: ${s}`));if(!t.ready)for(let s of t.guidance)console.log(i.dim(` Guidance: ${s}`));console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
474
+ /sandbox - Inspect Sandbox Readiness
475
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /sandbox ")+"Refresh and display ASRT readiness"),console.log(),console.log(i.dim("This command is read-only. It never activates ASRT or requests elevation.")),console.log(i.dim("Use `kodax sandbox setup` explicitly when activation is required.")),console.log()},"detailedHelp")},{name:"status",aliases:["info","ctx"],description:"Show current session status",handler:a(async(e,o,n,t)=>{await Zp(o,t,e,n)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
476
+ /status - Show Session Status
477
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /status ")+"Display current session information"),console.log(i.dim(" /status workspace ")+"Show deeper workspace/runtime details"),console.log(i.dim(" /status runtime ")+"Show SDK runtime mode, identity, and queue counters"),console.log(i.dim(" /info, /ctx ")+"Aliases for /status"),console.log(),console.log(i.bold("Displays:")),console.log(i.dim(" - Current mode (code/ask)")),console.log(i.dim(" - Session ID")),console.log(i.dim(" - Message count")),console.log(i.dim(" - Estimated token usage")),console.log(i.dim(" - Current workspace truth")),console.log(i.dim(" - Session timestamps")),console.log(i.dim(" - Repo-intelligence mode and active runtime summary")),console.log()},"detailedHelp")},{name:"mcp",description:"Show MCP server status or refresh catalogs",usage:"/mcp [status|refresh]",handler:a(async e=>{let o=ae();if(!o){console.log(i.yellow(`
478
+ [No extension runtime active \u2014 MCP is not available]`));return}let t=co(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(i.dim(`
479
+ Refreshing MCP catalogs...`));try{await o.refreshCapabilityProviders("mcp"),console.log(i.green("MCP catalogs refreshed."))}catch(c){console.log(i.red(`Refresh failed: ${c instanceof Error?c.message:String(c)}`))}return}if(console.log(i.cyan(`
480
+ MCP Status
481
+ `)),!t){console.log(i.yellow(" No MCP provider registered.")),console.log(i.dim(" Add servers to ~/.kodax/integrations/mcp.json or run `kodax mcp add`.\n"));return}let l=t.metadata?.servers??[];console.log(i.dim(` Servers: ${l.length}`)),console.log();for(let c of l){let d=c.status==="ready"?i.green:c.status==="error"?i.red:i.yellow;console.log(` ${i.bold(c.serverId)} ${d(c.status)} connect=${i.dim(c.connect)}`),c.cachedAt&&console.log(i.dim(` tools=${c.tools} resources=${c.resources} prompts=${c.prompts}`)),c.lastError&&console.log(i.red(` error: ${c.lastError}`))}console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
482
+ /mcp - MCP Server Management
483
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /mcp ")+"Show MCP server status"),console.log(i.dim(" /mcp status ")+"Same as /mcp"),console.log(i.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),console.log(i.dim(" Config: ~/.kodax/integrations/mcp.json")),console.log(i.dim(" Template: ~/.kodax/integrations/mcp.example.jsonc")),console.log()},"detailedHelp")},{name:"repo-intel",description:"Inspect built-in repo intelligence",usage:"/repo-intel [status|mode|trace]",handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(r==="status"){let s=await Qo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:qr(o)});jl(s);return}if(r==="mode"){if(e.length===1){console.log(i.dim(`
484
+ Current repo-intelligence mode: ${i.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(i.dim(`Usage: /repo-intel mode [auto|full|light|off]
485
+ `));return}let s=Fp(e[1]);if(!s){console.log(i.red(`
486
+ [Invalid repo-intelligence mode: ${e[1]}]`)),console.log(i.dim(`Usage: /repo-intel mode [auto|full|light|off]
487
+ `));return}let l=Ul({mode:s},{repoIntelligenceMode:s},n,t);lo(`Repo intelligence mode: ${s}`,l);return}if(r==="trace"){let s=e[1]?.toLowerCase();if(!s){console.log(i.dim(`
488
+ Current repo-intelligence trace: ${i.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(i.dim(`Usage: /repo-intel trace [on|off|toggle]
489
+ `));return}let l=Hp(s,t.repoIntelligenceTrace??!1);if(l===null){console.log(i.red(`
490
+ [Invalid trace value: ${e[1]}]`)),console.log(i.dim(`Usage: /repo-intel trace [on|off|toggle]
491
+ `));return}let c=Ul({trace:l},{repoIntelligenceTrace:l},n,t);lo(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(i.yellow(`
492
+ [Repo intelligence refresh is automatic in this build]`)),console.log(i.dim(`Use /repo-intel status to inspect the current engine state.
493
+ `));return}console.log(i.red(`
494
+ [Unknown /repo-intel subcommand: ${e[0]}]`)),console.log(i.dim(`Usage: /repo-intel [status|mode|trace]
495
+ `))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
496
+ /repo-intel - Built-in Repo Intelligence
497
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /repo-intel ")+"Show built-in repo-intelligence status"),console.log(i.dim(" /repo-intel status ")+"Show built-in engine status without probing an external daemon"),console.log(i.dim(" /repo-intel mode auto ")+"Let KodaX pick the best repo-intelligence engine"),console.log(i.dim(" /repo-intel mode full ")+"Prefer the full repo-intelligence engine"),console.log(i.dim(" /repo-intel mode light ")+"Use the light repo-intelligence engine"),console.log(i.dim(" /repo-intel mode off ")+"Disable repo-intelligence injection"),console.log(i.dim(" /repo-intel trace on|off|toggle ")+"Toggle repo-intelligence trace output"),console.log(),console.log(i.bold("Notes:")),console.log(i.dim(" - /status now includes a compact repo-intelligence summary.")),console.log(i.dim(" - External repointel endpoint/bin controls are deprecated for built-in KodaX.")),console.log()},"detailedHelp")},{name:"repointel",aliases:["ri"],description:"Deprecated alias for /repo-intel status",usage:"/repointel [status]",userInvocable:!1,handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(console.log(i.yellow(`
498
+ [/repointel is deprecated; use /repo-intel status]
499
+ `)),r==="status"){let s=await Qo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:qr(o)});jl(s);return}if(r==="mode"){console.log(i.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
500
+ `));return}if(r==="trace"){console.log(i.dim(`Use /repo-intel trace [on|off|toggle] to change repo-intelligence trace output.
501
+ `));return}if(r==="warm"||r==="endpoint"||r==="bin"){console.log(i.dim("Repo intelligence is built into KodaX; external daemon/bin controls are no longer a normal REPL command surface.")),console.log(i.dim(`Use /repo-intel status to inspect the active engine.
502
+ `));return}console.log(i.dim(`Usage: /repointel [status]
503
+ `))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
504
+ /repointel - Deprecated
505
+ `)),console.log(i.dim("Use /repo-intel status for built-in repo-intelligence diagnostics.")),console.log(i.dim("External endpoint/bin/warm controls are deprecated for KodaX.")),console.log()},"detailedHelp")},{name:"fallback",description:"Configure the cross-provider fallback chain for child tasks",usage:"/fallback [status | <p1,p2,...> | off]",handler:a(async(e,o,n,t)=>{let r=(process.env.KODAX_FALLBACK_PROVIDERS??"").split(",").map(c=>c.trim()).filter(Boolean),s=e[0]?.toLowerCase();if(!s||s==="status"){r.length===0?console.log(i.dim(`
506
+ Child-task provider fallback: `)+i.yellow("off")+i.dim(" (no chain configured)")):(console.log(i.dim(`
507
+ Child-task provider fallback: `)+i.green("on")),console.log(i.dim(" Order: ")+i.cyan(r.join(" \u2192 ")))),console.log(i.dim(`
508
+ When a child's primary provider is exhausted/down, KodaX re-runs it`)),console.log(i.dim(` on the next provider in this list. Set: /fallback ark-coding,kimi-code
509
+ `));return}if(s==="off"||s==="clear"||s==="none"){Re({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(i.green(`
510
+ \u2713 `)+i.dim(`Child-task provider fallback disabled.
511
+ `));return}let l=e.join(",").split(",").map(c=>c.trim()).filter(Boolean);if(l.length===0){console.log(i.red(`
512
+ [/fallback: no provider ids given]`)),console.log(i.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
513
+ `));return}Re({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(i.green(`
514
+ \u2713 `)+i.dim("Child-task fallback order: ")+i.cyan(l.join(" \u2192 "))),console.log(i.dim(` Provider ids must match your configured providers (see /status or kodax doctor).
515
+ `))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto)",usage:"/mode [plan|accept-edits|auto]",handler:a(async(e,o,n,t)=>{if(e.length===0){let s=ko(t.permissionMode,"accept-edits")??"accept-edits";console.log(i.dim(`
516
+ Current mode: ${i.cyan(s)}`)),console.log(i.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];ln.includes(r)?(n.setPermissionMode?await n.setPermissionMode(r):t.permissionMode=r,Vt(r),console.log(i.cyan(`
517
+ [Switched to ${r} mode] (saved)`))):console.log(i.red(`
518
+ [Unknown mode: ${e[0]}. Use: plan | accept-edits | auto]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
519
+ /mode - Switch Permission Mode
520
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /mode ")+"Show current permission mode"),console.log(i.dim(" /mode plan ")+"Read-only: blocks all modifications"),console.log(i.dim(" /mode accept-edits ")+"File edits auto, bash requires confirmation"),console.log(i.dim(" /mode auto ")+"LLM classifier reviews each tool call (FEATURE_092)"),console.log(i.dim(" /mode auto-in-project ")+i.gray("(deprecated alias for auto; will be removed in v0.7.38)")),console.log(),console.log(i.bold("Permission Levels:")),console.log(i.yellow(" plan ")+i.dim("- Read-only planning, no file/command modifications")),console.log(i.green(" accept-edits ")+i.dim("- File edits auto-approved, bash still requires confirmation")),console.log(i.green(" auto ")+i.dim("- LLM classifier (engine=llm, default) or rules engine reviews each call")),console.log(),console.log(i.bold("Notes:")),console.log(i.dim(" - .kodax/ directory and project-external paths always require confirmation")),console.log(i.dim(" - Mode is saved to ~/.kodax/config.json (user-level)")),console.log()},"detailedHelp")},{name:"auto-engine",description:"Show or set auto-mode classifier engine (llm | rules)",usage:"/auto-engine [llm|rules]",handler:a(async(e,o,n)=>{let t=await n.getAutoModeStats?.();if(!t){console.log(i.yellow(`
521
+ [auto-engine] not in auto mode \u2014 switch via /mode auto first`));return}if(e.length===0){console.log(i.dim(`
522
+ Classifier engine: ${i.cyan(t.engine)}`)),console.log(i.dim(` classifier health: ${t.classifierHealth}`)),t.classifierModel&&console.log(i.dim(` classifier model: ${t.classifierModel}`)),console.log(i.dim(` consecutive denials: ${t.denials.consecutive}`)),console.log(i.dim(` cumulative denials: ${t.denials.cumulative}`)),console.log(i.dim(` breaker errors: ${t.breaker.timestamps.filter(s=>s>=Date.now()-600*1e3).length}`)),console.log(i.dim("Usage: /auto-engine [llm|rules]"));return}let r=e[0];if(r!=="llm"&&r!=="rules"){console.log(i.red(`
523
+ [auto-engine] unknown engine "${e[0]}" \u2014 use llm or rules`));return}await n.setAutoModeEngine?.(r),console.log(i.cyan(`
524
+ [auto-engine] switched to ${r}`)),console.log(r==="rules"?i.dim(" deterministic workspace/temp rules are now active"):i.dim(" classifier selected; degraded health temporarily uses Accept-edits fallback"))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
525
+ /auto-engine - Auto-Mode Classifier Engine Toggle
526
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto-engine ")+"Show current engine + denial/breaker counts"),console.log(i.dim(" /auto-engine llm ")+"Resume classifier consultation (default)"),console.log(i.dim(" /auto-engine rules ")+"Skip classifier; use deterministic workspace/temp rules"),console.log(),console.log(i.bold("Notes:")),console.log(i.dim(" - Only meaningful in auto mode (/mode auto).")),console.log(i.dim(" - Denial counters are diagnostic only; they do not change the selected engine.")),console.log(i.dim(" - Five classifier failures in 10 minutes temporarily skip classifier calls")),console.log(i.dim(" and apply Accept-edits fallback; the selected engine remains llm.")),console.log(i.dim(" - Override via env: KODAX_AUTO_MODE_ENGINE=rules.")),console.log()},"detailedHelp")},{name:"auto-denials",description:"Show auto-mode classifier denial tracker + circuit breaker stats",usage:"/auto-denials",handler:a(async(e,o,n)=>{let t=await n.getAutoModeStats?.();if(!t){console.log(i.yellow(`
527
+ [auto-denials] not in auto mode \u2014 switch via /mode auto first`));return}console.log(i.cyan(`
528
+ [auto-mode classifier stats]`)),console.log(i.dim(` engine: ${i.cyan(t.engine)}`)),console.log(i.dim(` classifier health: ${t.classifierHealth}`)),console.log(i.dim(" Denial tracker:")),console.log(i.dim(` consecutive blocks: ${t.denials.consecutive} / 3`)),console.log(i.dim(` cumulative blocks: ${t.denials.cumulative} / 20`)),console.log(i.dim(" Circuit breaker:")),console.log(i.dim(` errors in window: ${t.breaker.timestamps.filter(r=>r>=Date.now()-600*1e3).length} / 5 (10 min)`)),console.log(),t.engine==="rules"?console.log(i.yellow(" \u21AA rules engine is active. /auto-engine llm to enable the classifier.")):t.classifierHealth==="degraded"&&console.log(i.yellow(" \u21AA classifier calls are temporarily skipped; Accept-edits fallback is active and engine remains llm.")),console.log()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
529
+ /auto-denials - Auto-Mode Classifier Diagnostic Dump
530
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto-denials ")+"Print engine + tracker + breaker counters"),console.log(),console.log(i.bold("Diagnostics and fallback (FEATURE_092):")),console.log(i.dim(" - Block counters are diagnostic only; they never select rules.")),console.log(i.dim(" - 5 errors in 10 min \u2192 skip classifier temporarily and use Accept-edits fallback.")),console.log(i.dim(" - The selected engine remains llm unless the user/host explicitly selects rules.")),console.log()},"detailedHelp")},{name:"save",description:"Save current session",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(i.green(`
531
+ [Session saved]`)),Gr(o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
532
+ /save - Save Current Session
533
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /save ")+"Save current conversation to session storage"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Manually saves the current conversation session.")),console.log(i.dim(" Sessions are auto-saved after each message, but you can")),console.log(i.dim(" use this to ensure the session is persisted.")),console.log(i.dim(" Saving updates session storage only; the current workspace stays untouched.")),console.log(),console.log(i.dim(" See also: /help load, /help sessions")),console.log()},"detailedHelp")},{name:"load",aliases:["resume"],description:"Load a session",usage:"/load <session-id>",handler:a(async(e,o,n)=>{if(e.length===0){console.log(i.red(`
534
+ [Usage: /load <session-id>]`)),await n.listSessions();return}await n.loadSession(e[0])==="missing"&&console.log(i.red(`
535
+ [Session not found: ${e[0]}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
536
+ /load - Load a Saved Session
537
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /load ")+"List available sessions"),console.log(i.dim(" /load <session-id> ")+"Load a specific session"),console.log(i.dim(" /resume <id> ")+"Alias for /load"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /load ")+"# See all sessions"),console.log(i.dim(" /load 20260219_143052")+"# Load session by ID"),console.log(),console.log(i.bold("Workspace behavior:")),console.log(i.dim(" /load can resume sessions from sibling workspaces in the same canonical repo.")),console.log(i.dim(" If a saved workspace is unavailable, KodaX explains the fallback before loading.")),console.log(),console.log(i.dim(" See also: /help sessions, /help save")),console.log()},"detailedHelp")},{name:"tree",description:"Inspect or switch the current session tree",usage:"/tree [entry-id|label] | /tree label <entry-id|label> <name> | /tree unlabel <entry-id|label>",handler:a(async(e,o,n)=>{if(e.length===0){await n.printSessionTree?.();return}let t=e[0]?.trim().toLowerCase();if(t==="label"){if(e.length<3){console.log(i.red(`
538
+ [Usage: /tree label <entry-id|label> <name>]`));return}await n.labelSessionBranch?.(e[1],e.slice(2).join(" "))||console.log(i.red(`
539
+ [Tree entry not found: ${e[1]}]`));return}if(t==="unlabel"){if(e.length<2){console.log(i.red(`
540
+ [Usage: /tree unlabel <entry-id|label>]`));return}await n.labelSessionBranch?.(e[1],void 0)||console.log(i.red(`
541
+ [Tree entry not found: ${e[1]}]`));return}await n.switchSessionBranch?.(e[0])==="missing"&&console.log(i.red(`
542
+ [Tree entry not found: ${e[0]}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
543
+ /tree - Inspect Session Lineage
544
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /tree ")+"Show the current session tree"),console.log(i.dim(" /tree <entry-id|label> ")+"Jump to a previous branch point"),console.log(i.dim(" /tree label <entry-id|label> <name>")+"Attach a lightweight checkpoint label"),console.log(i.dim(" /tree unlabel <entry-id|label> ")+"Clear an existing checkpoint label"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Session history is stored as a branchable tree. Use /tree to")),console.log(i.dim(" inspect the lineage, revisit an earlier branch safely, and add")),console.log(i.dim(" bookmark-style checkpoint labels without changing git state.")),console.log()},"detailedHelp")},{name:"fork",description:"Fork the current branch into a new session",usage:"/fork [entry-id|label]",handler:a(async(e,o,n)=>{await n.forkSession?.(e[0])==="failed"&&console.log(i.red(`
545
+ [Unable to fork session${e[0]?` from ${e[0]}`:""}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
546
+ /fork - Export a Branch to a New Session
547
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /fork ")+"Fork from the active branch"),console.log(i.dim(" /fork <entry-id|label>")+"Fork from a selected tree node"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Creates a new session file from the selected branch so you can")),console.log(i.dim(" continue there without mutating the current session lineage.")),console.log()},"detailedHelp")},{name:"rewind",description:"Rewind the current session to a previous point",usage:"/rewind [entry-id|label]",handler:a(async(e,o,n)=>{await n.rewindSession?.(e[0])==="failed"&&console.log(i.red(`
548
+ [Unable to rewind${e[0]?` to ${e[0]}`:" \u2014 no previous turn found"}]`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
549
+ /rewind - Rewind Session to a Previous Point
550
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /rewind ")+"Rewind to the previous user input"),console.log(i.dim(" /rewind <entry-id|label>")+"Rewind to a specific tree node"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Truncates the session after the target entry. Unlike /fork,")),console.log(i.dim(" this modifies the current session in place. The rewind event")),console.log(i.dim(" is recorded in the lineage for auditability.")),console.log(),console.log(i.yellow(" \u26A0 This is irreversible. Use /fork first to preserve a copy.")),console.log()},"detailedHelp")},{name:"sessions",aliases:["ls","list"],description:"List recent sessions",handler:a(async(e,o,n)=>{await n.listSessions()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
551
+ /sessions - List Saved Sessions
552
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /sessions ")+"List all saved sessions"),console.log(i.dim(" /ls, /list ")+"Aliases for /sessions"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows recent conversation sessions with their IDs,")),console.log(i.dim(" message counts, titles, and workspace truth. Use /load <id> to resume.")),console.log(i.dim(" This keeps sibling worktree sessions inspectable without a persistent cockpit.")),console.log(),console.log(i.dim(" See also: /help load, /help delete")),console.log()},"detailedHelp")},{name:"history",aliases:["hist"],description:"Show conversation history",handler:a(async(e,o,n)=>{n.printHistory()},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
553
+ /history - Show Conversation History
554
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /history ")+"Display recent messages in current session"),console.log(i.dim(" /hist ")+"Alias for /history"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows the last 20 messages in the current conversation.")),console.log(i.dim(" Useful for reviewing what has been discussed.")),console.log()},"detailedHelp")},{name:"delete",aliases:["rm","del"],description:"Delete a session",usage:"/delete <session-id> or /delete all",handler:a(async(e,o,n)=>{if(e.length===0){console.log(i.red(`
555
+ [Usage: /delete <session-id> or /delete all]`)),await n.listSessions?.();return}e[0]==="all"?(await n.deleteAllSessions?.(),console.log(i.green(`
556
+ [All sessions deleted]`)),Gr(o)):(await n.deleteSession?.(e[0]),console.log(i.green(`
557
+ [Session deleted: ${e[0]}]`)),Gr(o))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
558
+ /delete - Delete Saved Sessions
559
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /delete ")+"Show usage (lists sessions)"),console.log(i.dim(" /delete <id> ")+"Delete a specific session"),console.log(i.dim(" /delete all ")+"Delete ALL sessions"),console.log(i.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(i.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(i.bold("Workspace behavior:")),console.log(i.dim(" Deletes saved session records only.")),console.log(i.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(i.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=an().providerModels;if(e.length===0){console.log(i.bold(`
560
+ Available Providers:
561
+ `));let c=Zs(r);for(let d of c){let u=d.configured?i.green("[configured]"):i.red("[not configured]"),f=d.custom?i.yellow(" [custom]"):"",m=d.name===t.provider,S=m?i.cyan(" *"):"";console.log(` ${i.bold(d.name)}${S} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(i.yellow(` ! ${ht(d.capabilityProfile)}`));let x=qe(d.name,r),k=m?t.model:null;for(let b of x){let A=m&&(k===b||!k&&b===d.model)?i.cyan(">"):" ";console.log(` ${A} ${b}`)}console.log()}console.log(i.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(i.dim("Usage:")),console.log(i.dim(" /model <provider> Switch provider")),console.log(i.dim(" /model <provider>/<model> Switch to specific model")),console.log(i.dim(` /model /<model> Switch model within current provider
562
+ `));return}let s=(e[0]??"").trim();if(!s)return;if(s.startsWith("/")){let c=s.slice(1);if(!c){console.log(i.red(`
563
+ [Missing model name after /]`));return}let d=qe(t.provider,r);if(!d.includes(c)){console.log(i.red(`
564
+ [Unknown model: ${c}]`)),console.log(i.dim(`Available models for ${t.provider}: ${d.join(", ")}
565
+ `));return}Re({model:c}),n.switchProvider?.(t.provider,c),console.log(i.cyan(`
566
+ [Switched to ${c}] (saved)`));return}if(s.includes("/")){let c=s.indexOf("/"),d=s.slice(0,c),u=s.slice(c+1);if(!u||!d){console.log(i.red(`
567
+ [Invalid format. Use: /model <provider>/<model>]`));return}if(!Fe(d)){console.log(i.red(`
568
+ [Unknown provider: ${d}]`)),console.log(i.dim(`Available: ${He().join(", ")}
569
+ `));return}let f=qe(d,r);if(!f.includes(u)){console.log(i.red(`
570
+ [Unknown model: ${u}]`)),console.log(i.dim(`Available models for ${d}: ${f.join(", ")}
571
+ `));return}Re({provider:d,model:u}),n.switchProvider?.(d,u),console.log(i.cyan(`
572
+ [Switched to ${d}/${u}] (saved)`));return}let l=s;Fe(l)?(Re({provider:l,model:void 0}),n.switchProvider?.(l),console.log(i.cyan(`
573
+ [Switched to ${l}] (saved)`))):(console.log(i.red(`
574
+ [Unknown provider: ${l}]`)),console.log(i.dim(`Available: ${He().join(", ")}
575
+ `)))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
576
+ /model - Switch LLM Provider/Model
577
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /model ")+"List all providers with models"),console.log(i.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(i.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(i.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /model ")+"# See available providers & models"),console.log(i.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(i.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(i.dim(" /model /claude-opus-4-6 ")+"# Switch to Opus within current provider"),console.log()},"detailedHelp")},{name:"provider",description:"Inspect provider semantics and policy constraints",usage:"/provider [<provider>[/<model>]]",handler:a(async(e,o,n,t)=>{let r=(e[0]??"").trim();if(r==="forget-capability"){let f=(e[1]??"").trim();if(!f){ct(),console.log(i.dim(`
578
+ [Cleared all learned capability overrides]
579
+ `));return}let m=f.indexOf("/"),S=m===-1?f:f.slice(0,m),x=m===-1?void 0:f.slice(m+1)||void 0;ct(S,x),console.log(i.dim(`
580
+ [Cleared learned capability overrides for ${S}${x?`/${x}`:""}]
581
+ `));return}if(r==="probe"){let f=sn(t.provider,t.model).filter(S=>S!=="auto"&&S!=="off"),m=`${t.provider}/${t.model??"(default)"}`;console.log(i.dim(`
582
+ [Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let S=await Ii({provider:t.provider,model:t.model,efforts:f,resolve:lt,now:a(()=>new Date().toISOString(),"now")});for(let x of S){let k=x.status==="accepted"?i.green("\u2713"):x.status==="rejected"?i.red("\u2717"):i.yellow("!");console.log(i.dim(` ${k} ${x.effort}${x.error?` \u2014 ${x.error}`:""}`))}console.log(i.dim(` (rejections recorded; undo with /provider forget-capability)
583
+ `))}catch(S){let x=S instanceof Error?S.message:String(S);console.log(i.red(`
584
+ [Probe failed: ${x}]
585
+ `))}return}let s=t.provider,l=t.model;if(r)if(r.includes("/")){let f=r.indexOf("/");s=r.slice(0,f).trim(),l=r.slice(f+1).trim()||void 0}else s=r,l=void 0;if(!Fe(s)){console.log(i.red(`
586
+ [Unknown provider: ${s}]`)),console.log(i.dim(`Available: ${He().join(", ")}
587
+ `));return}let c=Xs(s,l);if(!c){console.log(i.red(`
588
+ [Provider details unavailable: ${s}]`)),console.log();return}let d=ni(s,l,t.reasoningMode);console.log(i.bold(`
589
+ Provider Details:
590
+ `)),console.log(i.dim(` Provider: ${i.cyan(c.provider)}${c.model?` / ${i.cyan(c.model)}`:""}`)),console.log(i.dim(` Source: ${ei(c.sourceKind)}`)),console.log(),console.log(i.bold("Capability Matrix:"));for(let f of oi(c))console.log(i.dim(` - ${f}`));console.log(i.dim(` - Session effort: ${Kl(t.effort)}`));let u=as(s,l);if(u.length>0&&console.log(i.dim(` - Learned unsupported: ${u.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(i.bold("Common Scenarios:"));for(let f of d){let m=f.decision.status==="block"?i.red:f.decision.status==="warn"?i.yellow:i.green;console.log(m(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(i.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
591
+ /provider - Inspect Provider Semantics
592
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /provider ")+"Inspect the current provider/model"),console.log(i.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(i.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(i.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(i.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(i.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(i.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or set native reasoning effort",usage:"/thinking [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await Kr("thinking",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
593
+ /thinking - Set Native Reasoning Effort
594
+ `)),console.log(i.bold("Usage:")),Dl("thinking"),console.log(i.dim(" /t ")+"Alias for /thinking"),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set native reasoning effort",usage:"/reasoning [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await Kr("reasoning",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
595
+ /reasoning - Set Native Reasoning Effort
596
+ `)),console.log(i.bold("Usage:")),Dl("reasoning"),console.log(i.dim(" /reason ")+"Alias for /reasoning"),console.log()},"detailedHelp")},{name:"effort",description:"Show or set native reasoning effort",usage:"/effort [level]",handler:a(async(e,o,n,t)=>{await Kr("effort",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
597
+ /effort - Set Native Reasoning Effort
598
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /effort ")+"Show current native reasoning effort"),console.log(i.dim(" /effort auto ")+"Clear the explicit effort override"),console.log(i.dim(" /effort off ")+"Disable reasoning effort"),console.log(i.dim(" /effort low ")+"Use low native reasoning effort"),console.log(i.dim(" /effort medium ")+"Use medium native reasoning effort"),console.log(i.dim(" /effort high ")+"Use high native reasoning effort"),console.log(i.dim(" /effort xhigh ")+"Use extra-high effort when the model supports it"),console.log(i.dim(" /effort max ")+"Use max effort when the model supports it"),console.log(i.dim(" /effort none ")+"Legacy alias for /effort off"),console.log(i.dim(`
599
+ Run /effort to see the active model's supported values.`)),console.log()},"detailedHelp")},{name:"agent-mode",aliases:["am"],description:"Show or set agent mode",usage:"/agent-mode [ama|sa|toggle]",handler:a(async(e,o,n,t)=>{if(e.length===0){console.log(i.dim(`
600
+ Agent mode: ${i.cyan(t.agentMode.toUpperCase())}`)),console.log(i.dim(`Usage: /agent-mode [ama|sa|toggle]
601
+ `));return}let r=e[0]?.toLowerCase();if(r==="amaw"||r==="ama-workflow"){console.log(i.yellow(`
602
+ [AMAW was retired in v0.7.72. Use AMA; Workflow execution now requires an explicit /workflow request.]`));return}let s=r==="toggle"?$a(t.agentMode):r==="ama"||r==="sa"?r:void 0;if(!s){console.log(i.red(`
603
+ [Invalid agent mode: ${e[0]}]`)),console.log(i.dim(`Usage: /agent-mode [ama|sa|toggle]
604
+ `));return}let l=zp(s,n,t);lo(`Agent mode: ${s.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
605
+ /agent-mode - Adaptive Multi-Agent Mode Control
606
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /agent-mode ")+"Show current agent mode"),console.log(i.dim(" /agent-mode ama ")+"Adaptive multi-agent mode; workflows require an explicit /workflow request"),console.log(i.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(i.dim(" /agent-mode toggle ")+"Cycle AMA -> SA"),console.log(i.dim(" /am ")+"Alias for /agent-mode"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" AMA runs the adaptive multi-agent harness. Sub-agents are available when parallel")),console.log(i.dim(" work materially improves speed or quality. Workflows only run when explicitly")),console.log(i.dim(" requested with /workflow or by naming a Workflow.")),console.log(i.dim(" SA forces a single solo agent \u2014 no sub-agents and no workflows \u2014 to save tokens.")),console.log()},"detailedHelp")},{name:"auto",aliases:["a"],description:"Quick switch to auto mode",handler:a(async(e,o,n,t)=>{t.permissionMode="auto",n.setPermissionMode?.("auto"),Vt("auto"),console.log(i.cyan(`
607
+ [Switched to auto mode] (saved)`))},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
608
+ /auto - Quick Switch to Auto Mode
609
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /auto ")+"Switch to auto mode"),console.log(i.dim(" /a ")+"Alias for /auto"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Equivalent to /mode auto.")),console.log(i.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(i.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(i.dim(" See also: /help mode, /auto-engine, /auto-denials")),console.log()},"detailedHelp")},{name:"skill",description:"Skill namespace - list, invoke, or review skill learning",usage:"/skill[:name] [pending|args]",handler:a(async(e,o)=>{if((e[0]??"").toLowerCase()==="pending"){await Pn(Tn(o),"skill");return}await og(e,o)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
610
+ /skill - Skill Namespace
611
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /skill ")+"List all available skills"),console.log(i.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(i.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(i.dim(" /skill reload ")+"Reload skills from disk"),console.log(i.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(i.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(i.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(i.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(i.bold("Examples:")),console.log(i.dim(" /skill ")+"# List all skills"),console.log(i.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(i.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(i.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(i.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let s=an().verifierLog===!0,l=n?"on":"off",c=s===n?"":` (env=${n?"on":"off"}, config=${s?"on":"off"})`;console.log(i.dim(`
612
+ Sidecar Verifier log: ${i.cyan(l)}${c}`)),console.log(i.dim(" When on, a one-line summary persists per verifier call:\n `[Sidecar Verifier] {verdict} \xB7 {provider}/{model} \xB7 {ms}ms \xB7 {trace}`")),console.log(i.dim(`Usage: /verifier-log [on|off]
613
+ `));return}let t;if(o==="on"||o==="true"||o==="1")t=!0;else if(o==="off"||o==="false"||o==="0")t=!1;else{console.log(i.red(`
614
+ [Invalid value: ${e[0]}]`)),console.log(i.dim(`Usage: /verifier-log [on|off]
615
+ `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Bo({verifierLog:t});lo(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
616
+ /verifier-log - Sidecar Verifier Log Toggle
617
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /verifier-log ")+"Show current state"),console.log(i.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(i.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(i.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(i.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(i.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(i.bold("Equivalent env var:")),console.log(i.dim(" KODAX_VERIFIER_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},{name:"stall-log",description:"Toggle Stall Sidecar log line (off by default)",usage:"/stall-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_STALL_LOG==="1";if(!o){let s=an().stallLog===!0,l=n?"on":"off",c=s===n?"":` (env=${n?"on":"off"}, config=${s?"on":"off"})`;console.log(i.dim(`
618
+ Stall Sidecar log: ${i.cyan(l)}${c}`)),console.log(i.dim(" When on, a one-line summary persists per L2 stall verdict:\n `[Stall Sidecar] isStuck={true|false} \xB7 {provider}/{model} \xB7 {ms}ms \xB7 {trace}`")),console.log(i.dim(`Usage: /stall-log [on|off]
619
+ `));return}let t;if(o==="on"||o==="true"||o==="1")t=!0;else if(o==="off"||o==="false"||o==="0")t=!1;else{console.log(i.red(`
620
+ [Invalid value: ${e[0]}]`)),console.log(i.dim(`Usage: /stall-log [on|off]
621
+ `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Bo({stallLog:t});lo(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(i.cyan(`
622
+ /stall-log - Stall Sidecar Log Toggle
623
+ `)),console.log(i.bold("Usage:")),console.log(i.dim(" /stall-log ")+"Show current state"),console.log(i.dim(" /stall-log on ")+"Enable + persist to config"),console.log(i.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(i.bold("Description:")),console.log(i.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(i.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(i.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(i.dim(" a one-line summary:")),console.log(i.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(i.bold("Equivalent env var:")),console.log(i.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},or,nr,tr,Za,$l,Pr,_r,Rl,Mr],Dp={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 Up(e){let o=Go();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(Up,"getCommandsForCategory");function Gl(e){return e!=="off"}a(Gl,"reasoningModeToLegacyThinking");function Kl(e){return e==="none"?"off":e??"auto"}a(Kl,"formatReasoningEffortDisplay");function zl(e){return sn(e.provider,e.model).map(o=>o==="off"?"none":o)}a(zl,"getCanonicalReasoningEffortOptions");function jp(e,o){return`Usage: /${e} ${zl(o).join("|")}|<provider-value>`}a(jp,"formatReasoningEffortUsage");function Nl(e){let o=Qs(e);return Js({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Nl,"formatCurrentReasoningEffortStatus");function Fp(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(Fp,"normalizeRepoIntelPublicMode");function Hp(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(Hp,"resolveToggleFlag");function Bo(e){try{return Re(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Bo,"persistUserConfig");function lo(e,o){if(o.saved){console.log(i.cyan(`
624
+ [${e}] (saved)`));return}console.log(i.yellow(`
625
+ [${e}]`)),console.log(i.red(`[Config save failed: ${o.error.message}]`))}a(lo,"printPersistedCommandStatus");var Bp={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function Kr(e,o,n,t){let r=jp(e,t);if(o.length===0){let f=Nl(t);console.log(i.dim(`
626
+ Reasoning effort: ${i.cyan(f)}`)),console.log(i.dim(`Compatibility: ${i.cyan(t.reasoningMode)}`)),console.log(i.dim(`Available: ${zl(t).join(", ")}`)),console.log(i.dim(`${r}
627
+ `));return}if(o.length>1){console.log(i.red(`
628
+ [Reasoning effort accepts exactly one value]`)),console.log(i.dim(`${r}
629
+ `));return}let s=o[0].toLowerCase(),l;try{l=is(Bp[s]??s)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(i.red(`
630
+ [Invalid reasoning effort: ${m}]`)),console.log(i.dim(`${r}
631
+ `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l;if(c==="none"&&!sn(t.provider,t.model).includes("off")){let f=t.model?`${t.provider}/${t.model}`:t.provider;console.log(i.red(`
632
+ [${f} does not support disabling reasoning]`)),console.log(i.dim(`${r}
633
+ `));return}let d=Gp(c,t),u=Kp(c,n,t);lo(`Reasoning effort: ${Nl(d)}`,u)}a(Kr,"handleReasoningEffortCommand");function Dl(e){console.log(i.dim(` /${e} `)+"Show current native reasoning effort"),console.log(i.dim(` /${e} none `)+"Disable reasoning when supported"),console.log(i.dim(` /${e} auto `)+"Clear the explicit effort override"),console.log(i.dim(` /${e} low `)+"Use low native reasoning effort"),console.log(i.dim(` /${e} medium `)+"Use medium native reasoning effort"),console.log(i.dim(` /${e} high `)+"Use high native reasoning effort"),console.log(i.dim(` /${e} xhigh `)+"Use extra-high native reasoning effort"),console.log(i.dim(` /${e} max `)+"Use maximum native reasoning effort")}a(Dl,"printReasoningEffortHelp");function ql(e){return e==="none"?"off":"auto"}a(ql,"resolveReasoningModeAfterEffort");function Gp(e,o){let n=ql(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:Gl(n)}}a(Gp,"resolveConfigAfterReasoningEffort");function Kp(e,o,n){let t=ql(e),r=Gl(t),s=Bo({effort:e,reasoningMode:t,thinking:r});return o.setEffort?o.setEffort(e):(n.effort=e,n.effortOverride=e!==void 0),o.setReasoningMode?o.setReasoningMode(t):(n.reasoningMode=t,n.thinking=r),s}a(Kp,"applyReasoningEffort");function zp(e,o,n){let t=Bo({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(zp,"applyAgentMode");function Ul(e,o,n,t){let r=Bo(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(Ul,"applyRepoIntelligenceRuntimeConfig");function qp(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(qp,"formatRepoIntelligenceSummary");function qr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(qr,"getRepoIntelInspectionWorkspaceRoot");function Vp(e){return e.status}a(Vp,"formatRepoIntelStatusLabel");function Xp(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(Xp,"formatRepoIntelActiveEngine");function jl(e){console.log(i.bold(`
634
+ Repo Intelligence:
635
+ `)),console.log(i.dim(` Mode: ${i.cyan(e.configuredMode)}`)),console.log(i.dim(` Engine: ${i.cyan(Xp(e))}`)),console.log(i.dim(` Status: ${i.cyan(Vp(e))}`)),console.log(i.dim(` Trace: ${i.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(i.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(i.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(i.yellow(" Fallback: light engine is currently active")),e.error&&console.log(i.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(i.yellow(` Warning: ${o}`));console.log()}a(jl,"printRepoIntelStatus");function Fl(e,o){if(o.length!==0){console.log(i.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${i.cyan(`/${n.name}`)}${i.dim(t)} ${n.description}`)}console.log()}}a(Fl,"printCommandSection");function Yp(){console.log(i.bold(`
636
+ Available Commands:
637
+ `));let e=Go(),o=new Set;for(let[t,r]of Object.entries(Dp)){let s=Up(r);if(s.length!==0){for(let l of s)o.add(l.name.toLowerCase());Fl(t,s)}}let n=new Map;for(let t of e.getAll()){if(t.userInvocable===!1||o.has(t.name.toLowerCase()))continue;let r=t.source==="extension"?"Extensions":t.source==="skill"?"Skill Commands":t.source==="prompt"?"Prompt Commands":"Other Commands",s=n.get(r)??[];s.push(t),n.set(r,s)}for(let t of tg()){if(o.has(t.name.toLowerCase()))continue;let r=n.get("Extensions")??[];r.push({name:t.name,aliases:t.aliases,description:t.description}),n.set("Extensions",r)}for(let t of["Extensions","Skill Commands","Prompt Commands","Other Commands"])Fl(t,n.get(t)??[]);console.log(i.dim("Special syntax:")),console.log(` ${i.cyan("@path")} Attach image to context`),console.log(` ${i.cyan("!command")} Execute shell command`),console.log(),console.log(i.dim("Skills:")),console.log(` ${i.cyan("/skill")} List all available skills`),console.log(` ${i.cyan("/<skill-name>")} Invoke a skill when no command has that name`),console.log(` ${i.cyan("/skill:<name>")} Compatibility form (e.g., /skill:code-review)`),console.log(` ${i.cyan("/skill pending")} Review pending skill learning suggestions`),console.log(),console.log(i.dim(`Tip: ${i.cyan("/<command> help")} shows command-specific help.`)),console.log()}a(Yp,"printHelp");function Jp(e){let o=xs({topic:e});if(console.log(`
638
+ ${i.cyan(o.title)}`),console.log(o.content),o.topics.length>0){console.log();for(let n of o.topics)console.log(`- ${n.id}: ${n.summary}`)}o.topics.length===0&&o.nextTopics.length>0&&console.log(i.dim(`
639
+ Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(Jp,"printManualTopic");function Vr(e,o=[]){me.size===0&&Yn();let n=me.get(e.toLowerCase());if(!n){let t=Jn(e);if(!t){console.log(i.yellow(`
640
+ [Unknown command: /${e}. Type /help for available commands]`));return}console.log(i.cyan(`
641
+ /${t.name}`)),t.aliases?.length&&console.log(i.dim(`Aliases: ${t.aliases.join(", ")}`)),console.log(i.dim(`
642
+ ${t.description}`)),console.log(i.dim(`
643
+ Usage: ${rg(t)}`)),console.log();return}n.detailedHelp?n.detailedHelp(o):(console.log(i.cyan(`
644
+ /${n.name}`)),n.aliases?.length&&console.log(i.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(i.dim(`
645
+ ${n.description}`)),n.usage&&console.log(i.dim(`
646
+ Usage: ${n.usage}`)),console.log())}a(Vr,"printDetailedHelp");async function Zp(e,o,n=[],t){let r=n[0]?.toLowerCase(),s=e.contextTokenSnapshot?.currentTokens??Vo(e.messages),l=e.contextTokenSnapshot?.source??"estimate",c=Vs(o.provider),d=Ys(o.provider,o.model,o.reasoningMode);if(console.log(i.bold(`
647
+ Session Status:
648
+ `)),console.log(i.dim(` Provider: ${i.cyan(o.provider)}${o.model?` / ${i.cyan(o.model)}`:""}`)),console.log(i.dim(` Permission: ${i.cyan(o.permissionMode)}`)),console.log(i.dim(` Reasoning: ${i.cyan(o.reasoningMode)}`)),console.log(i.dim(` Effort: ${i.cyan(Kl(o.effort))}`)),console.log(i.dim(` Agent Mode: ${i.cyan(o.agentMode.toUpperCase())}`)),c){let f=ht(c),m=c.transport==="cli-bridge"?i.yellow(f):i.cyan(f);console.log(i.dim(` Provider Cap: ${m}`))}if(d&&d.status!=="allow"){let f=d.status==="block"?i.red:i.yellow;console.log(i.dim(` Provider Policy: ${f(d.summary)}`))}console.log(i.dim(` Session ID: ${e.sessionId}`)),console.log(i.dim(` Messages: ${e.messages.length}`)),console.log(i.dim(` Tokens: ~${s} (${l})`));let u=await Qo({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:qr(e)});console.log(i.dim(` Repo Intel: ${i.cyan(qp(u))}`)),e.runtimeInfo?.workspaceRoot?console.log(i.dim(` Workspace: ${i.cyan(sr(e.runtimeInfo))}`)):e.gitRoot&&console.log(i.dim(` Workspace: ${i.cyan(e.gitRoot)}`)),(r==="workspace"||r==="worktree"||r==="runtime")&&(e.runtimeInfo?.canonicalRepoRoot&&console.log(i.dim(` Canonical: ${e.runtimeInfo.canonicalRepoRoot}`)),e.runtimeInfo?.executionCwd&&console.log(i.dim(` Exec CWD: ${e.runtimeInfo.executionCwd}`)),e.runtimeInfo?.workspaceKind&&console.log(i.dim(` Kind: ${e.runtimeInfo.workspaceKind}`))),r==="runtime"&&await eg(t),await Qp(t),console.log(i.dim(` Created: ${e.createdAt}`)),console.log(i.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(Zp,"printStatus");async function Qp(e){if(e?.getLearningSummary)try{console.log(i.dim(` Learning: ${Yt(await e.getLearningSummary())}`))}catch(o){console.log(i.dim(` Learning: unavailable (${o instanceof Error?o.message:String(o)})`))}}a(Qp,"printLearningSurfaceStatus");async function eg(e){if(!e?.getRuntimeStatus){console.log(i.dim(" SDK Runtime: unavailable (host did not provide runtime status)"));return}let o;try{o=await e.getRuntimeStatus()}catch(t){console.log(i.dim(` SDK Runtime: unavailable (${t instanceof Error?t.message:String(t)})`));return}if(!o){console.log(i.dim(" SDK Runtime: unavailable"));return}console.log(i.dim(` SDK Runtime: ${i.cyan(o.mode)} profile=${i.cyan(o.profile)}`)),console.log(i.dim(` Runtime ID: ${o.runtimeId}`)),o.health&&console.log(i.dim(` Health: ${o.health}`)),o.endpoint&&console.log(i.dim(` Endpoint: ${o.endpoint}`)),o.startedAt&&console.log(i.dim(` Runtime Up: ${o.startedAt}`));let n=[ao("sessions",o.sessions),ao("runs",o.runs),ao("active",o.activeRuns),ao("queued",o.queuedRuns),ao("pending permissions",o.pendingPermissions),ao("workflows",o.workflows)].filter(t=>t!==void 0);n.length>0&&console.log(i.dim(` Runtime Ctrs: ${n.join(" ")}`))}a(eg,"printRuntimeSurfaceStatus");function ao(e,o){return o===void 0?void 0:`${e}=${o}`}a(ao,"formatRuntimeCount");async function og(e,o){let n=$e(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await Bl(o.gitRoot);console.log(i.green(`
649
+ Skills reloaded: ${r} skill(s)`)),console.log(i.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await Be(o.gitRoot),ng(n.listUserInvocable())}a(og,"handleSkillNamespaceCommand");function ng(e){if(console.log(i.bold(`
650
+ Available Skills:
651
+ `)),e.length===0){console.log(i.dim(" No skills found.")),console.log(i.dim(`
652
+ Skills can be placed in:`)),console.log(i.dim(" - .kodax/skills/")),console.log(i.dim(" - ~/.kodax/skills/")),console.log(i.dim(" - ~/.agents/skills/"));return}let o=Go(),n=e.map(r=>{let s=o.get(r.name)!==void 0||Jn(r.name)!==void 0;return{skill:r,invocation:s?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:s}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:s}=r,l=r.invocation.padEnd(t),c=s.argumentHint?` ${s.argumentHint}`:"",d=s.source==="builtin"?" [builtin]":s.source==="user"?" [user]":s.source==="plugin"?" [plugin]":"",u=r.commandNameTaken?" [command name exists]":"",f=s.description.length>50?s.description.slice(0,50)+"...":s.description;console.log(` ${i.cyan(l)}${i.dim(c)}${i.dim(d)}${i.dim(u)} ${i.dim(f)}`)}console.log(),console.log(i.dim(`Total: ${e.length} skills`)),console.log(i.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(i.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(ng,"printSkillsListPiMonoStyle");var me=new we;function Yn(e){me.size>0||Br(me,e)}a(Yn,"initCommandRegistry");function Go(e){return Yn(e),me}a(Go,"getCommandRegistry");function tg(){return ae()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(tg,"getActiveExtensionCommands");function Jn(e){let o=ae(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(s=>s.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(Jn,"getActiveExtensionCommand");function rg(e){return e.usage??`/${e.name}`}a(rg,"formatExtensionCommandUsage");function sg(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(sg,"formatExtensionDiagnosticValue");function ig(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${sg(t)}`);return o.length>0?o.join(" | "):void 0}a(ig,"formatExtensionDiagnosticMetadata");function co(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(co,"getExtensionRuntimeDiagnostics");function ag(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(ag,"toExtensionInvocationRequest");function lg(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(lg,"formatDiagnosticParts");function qn(e,o,n){q({source:e,level:o,message:lg(n)})}a(qn,"emitCommandDiagnostic");async function cg(e,o,n){let t=ae();if(!t)return console.log(i.yellow(`
653
+ [Extension runtime is not active for /${e.name}]`)),!1;let r=await e.handler(o,{sessionId:n.sessionId,gitRoot:n.gitRoot,workingDirectory:n.runtimeInfo?.executionCwd??n.gitRoot??process.cwd(),reloadExtensions:a(()=>t.reloadExtensions(),"reloadExtensions"),getDiagnostics:a(()=>co(t),"getDiagnostics"),logger:{debug:a((...l)=>qn(`repl:extension-command:${e.name}`,"debug",l),"debug"),info:a((...l)=>qn(`repl:extension-command:${e.name}`,"info",l),"info"),warn:a((...l)=>qn(`repl:extension-command:${e.name}`,"warn",l),"warn"),error:a((...l)=>qn(`repl:extension-command:${e.name}`,"error",l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let s=ag(e,r);return s?{invocation:s}:!0}a(cg,"executeExtensionCommand");function ex(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),s=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:s,skillInvocation:{name:c}}:{command:"skill",args:s}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),s=c?[c,...s]:s}return{command:r,args:s}}a(ex,"parseCommand");function Hl(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Hl,"isCommandHelpRequest");async function ox(e,o,n,t){if(me.size===0&&Yn(o.gitRoot),e.skillInvocation)return await zr({command:e.skillInvocation.name,args:e.args},o);let r=me.get(e.command);if(r){if(r.userInvocable===!1)return console.log(i.yellow(`
654
+ [Command /${r.name} is not user-invocable]`)),!1;if(Hl(e.args))return Vr(e.command,e.args.slice(1)),!0;try{let d=await r.handler(e.args,o,n,t);return d&&typeof d=="object"?d:!0}catch(d){return console.log(i.red(`
655
+ [Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let s=Jn(e.command);if(s){if(Hl(e.args))return Vr(e.command),!0;try{return await cg(s,e.args,o)}catch(d){return console.log(i.red(`
656
+ [Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await dg(e,o);if(l)return await zr({command:l.skill.name,args:l.args},o);let c=await Vl(e.command,o);return c?await zr({command:c.name,args:e.args},o):(console.log(i.yellow(`
657
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(ox,"executeCommand");async function dg(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Vl(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(dg,"resolveNamespacedDirectSkillCommand");async function Vl(e,o){let n=$e(o.gitRoot);n.size===0&&await Be(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(Vl,"resolveDirectSkillCommand");async function zr(e,o){let n=$e(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await Be(o.gitRoot);try{let s=n.get(t);if(!s)return console.log(i.red(`
658
+ [Skill not found: ${t}]`)),!1;if(!s.userInvocable)return console.log(i.yellow(`
659
+ [Skill "${t}" is not user-invocable]`)),!1;console.log(i.cyan(`
660
+ [Invoking skill: ${t}]`)),s.argumentHint&&console.log(i.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{},executeDynamicContext:o.skillDynamicContext?.execute,disableDynamicContext:o.skillDynamicContext?.disable},d=await ws(l,r,c);return console.log(i.green(`Skill activated: ${t}`)),console.log(i.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:{prompt:d.content,source:"skill",displayName:t,path:l.skillFilePath,disableModelInvocation:d.disableModelInvocation,userInvocable:l.userInvocable,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hooks:l.hooks,skillInvocation:{name:t,path:l.skillFilePath,description:l.description,arguments:r||void 0,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hookEvents:l.hooks?Object.entries(l.hooks).filter(([,u])=>Array.isArray(u)&&u.length>0).map(([u])=>u):void 0,expandedContent:d.content}}}}catch(s){return console.log(i.red(`
661
+ [Error invoking skill: ${s instanceof Error?s.message:String(s)}]`)),!1}}a(zr,"executeSkillCommand");var Zn=class{static{a(this,"SkillCompleter")}gitRoot;constructor(o){this.gitRoot=o}canComplete(o,n){return this.parseTrigger(o.slice(0,n))!==void 0}async getCompletions(o,n){let t=this.parseTrigger(o.slice(0,n));if(!t)return[];let r=t.partial.toLowerCase();return(await this.getSkills()).filter(l=>{let c=l.name.toLowerCase();return c.includes(r)||this.fuzzyIncludes(r,c)}).map(l=>({text:`${t.invocationPrefix}${l.name}`,display:l.name,description:this.truncateDescription(l.description),type:"skill"})).sort((l,c)=>{let d=l.display.toLowerCase().startsWith(r),u=c.display.toLowerCase().startsWith(r);return d&&!u?-1:!d&&u?1:l.display.length-c.display.length})}setGitRoot(o){this.gitRoot!==o&&(this.gitRoot=o)}parseTrigger(o){let n=o.match(/(^|\s)\/skill:([^\s]*)$/);if(n)return{partial:n[2]??"",invocationPrefix:"/skill:"};let t=o.match(/(^|\s)\/([^\s]*)$/);if(t)return{partial:t[2]??"",invocationPrefix:"/"}}async getSkills(){try{let o=$e(this.gitRoot);return o.size===0&&await Be(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 ug}from"node:child_process";import*as uo from"node:path";import{promisify as fg}from"node:util";var Xl=fg(ug);function mg(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(mg,"pathFromPorcelainLine");async function Yl(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([Xl("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0}),Xl("git status --porcelain=v1 -uall",{cwd:e,windowsHide:!0})]),r=n.trim(),s=[],l=new Set;for(let c of t.split(`
662
+ `)){if(!c.trim())continue;let d=mg(c);if(!d)continue;let u=uo.resolve(r,d),f=uo.relative(e,u).split(uo.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),s.push(f),s.length>=o))break}return s}catch{return[]}}a(Yl,"getRecentWorkingSetFiles");function fo(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(fo,"findCommandSlashIndex");var Xr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Yl){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let s=t.slice(r+1),l=[],c=this.resolveCwd(),d=s.lastIndexOf("/"),u=d===-1?c:Ko.join(c,s.slice(0,d)),f=d===-1?s:s.slice(d+1);try{let S=(await this.readdir(u)).filter(x=>x.toLowerCase().startsWith(f.toLowerCase()));for(let x of S){let k=Ko.join(u,x),b=await this.isDirectory(k),g=d===-1?x:s.slice(0,d+1)+x;l.push({text:"@"+g+(b?"/":""),display:x+(b?"/":""),description:b?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),S=new Set(l.map(b=>b.text)),x=f.toLowerCase(),k=[];for(let b of m){if(f&&!Ko.basename(b).toLowerCase().startsWith(x))continue;let g="@"+b;S.has(g)||(S.add(g),k.push({text:g,display:b,description:"recent",type:"file"}))}l.unshift(...k)}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=>{Qn.readdir(o,(s,l)=>{s?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{Qn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},Yr=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of Go().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=ae();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=fo(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=fo(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let s=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(s,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(s,u)&&l.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),s=0;for(let l=0;l<r.length&&s<t.length;l++)r[l]===t[s]&&s++;return s===t.length}};function gx(e){let o=new Xr(e),n=new Zn,t=new Yr;return async r=>{let s=r.includes("@"),l=r.includes("/");if(!s&&!l)return[[],r];let c=[];if(l){let u=await pg(r,r.length);c.push(...u)}if(l&&n.canComplete(r,r.length)){let u=await n.getCompletions(r,r.length);c.push(...u)}if(l&&t.canComplete(r,r.length)){let u=await t.getCompletions(r,r.length);c.push(...u)}if(s&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>gg(r,u)),r]}}a(gx,"createCompleter");async function pg(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-ZPC2MLES.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(pg,"getArgumentCompletions");function gg(e,o){if(o.type!=="argument")return o.text;let n=fo(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(gg,"formatReadlineCompletion");import{existsSync as et,readdirSync as ec,readFileSync as oc}from"node:fs";import{join as ot}from"node:path";var hg=[{name:"plan",description:"Read-only planning mode - blocks all modifications",type:"enum"},{name:"accept-edits",description:"File edits auto-approved, bash requires confirmation",type:"enum"},{name:"auto",description:"Use auto-mode classifier for tool permissions",type:"enum"}],mo=[{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 wg(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Fe(n))try{return qe(n).filter(s=>!t||s.toLowerCase().includes(t.toLowerCase())).map(s=>({name:`${n}/${s}`,description:s,type:"enum"}))}catch{}return[]}return He().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(wg,"getModelArgs");var Jr=[{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"}],Zr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],yg=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],vg=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],kg=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],Jl=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],Zl=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],Sg=[{name:"list",description:"List project memory files",type:"enum"},{name:"pending",description:"List pending memory proposals",type:"enum"},{name:"show",description:"Preview a memory proposal",type:"enum"},{name:"approve",description:"Approve a memory proposal",type:"enum"},{name:"reject",description:"Reject a memory proposal",type:"enum"},{name:"curate",description:"Report memory governance findings",type:"enum"},{name:"rebuild",description:"Rebuild MEMORY.md index",type:"enum"},{name:"open",description:"Print the memory entrypoint path",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],xg=[{name:"list",description:"List learned 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 bg(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?xg: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(bg,"getLearnArgs");var $g=[{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"}],Ag=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Rg=[{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"}],Eg=[{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"}],Cg=[{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"}],Ig=[{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"}],Tg=[{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"}],Pg=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],_g=[{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"}],Lg=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Mg=new Set(["show","delete","rerun","save","rename","revise"]),Og=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Wg=[{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"}],Ng=[{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"}],Dg=[".workflow.json",".ts",".mjs",".js"];function Ug(e,o){switch(e){case"pause":return o==="running";case"resume":return o==="paused";case"stop":return o==="running"||o==="paused";case"delete":return o!=="running"&&o!=="paused";default:return!0}}a(Ug,"workflowRunMatchesSubcommand");function nt(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(nt,"isWorkflowRunEntryName");function jg(e,o){let n=ot(e,"workflow-metadata.json");if(et(n))try{let r=JSON.parse(oc(n,"utf8"));if(typeof r=="object"&&r!==null){let s=r.displayName;if(typeof s=="string"&&nt(s.trim()))return s.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&nt(t.trim())?t.trim():void 0}a(jg,"readWorkflowRunDisplayName");function Fg(){let e=Le(process.cwd()).key,o=O("workflow-runs",e);if(!et(o))return[];let n=[];for(let t of ec(o)){if(!nt(t))continue;let r=ot(o,t,"run.json");if(et(r))try{let s=JSON.parse(oc(r,"utf8")),l=typeof s.workflow=="string"?s.workflow:"?",c=typeof s.status=="string"?s.status:"?",d=typeof s.endedAt=="number"?s.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=jg(ot(o,t),s);u&&u!==t&&n.push({arg:{name:u,description:`${l} alias for ${t} - ${c}`,type:"string"},endedAt:d})}catch{}}return n.sort((t,r)=>r.endedAt-t.endedAt).map(t=>t.arg)}a(Fg,"getPersistedWorkflowRunIdArgs");function tt(e){let o=ze().list().filter(r=>Ug(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=Mg.has(e)?Fg():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(tt,"getWorkflowRunIdArgs");function Hg(e){for(let o of Dg)if(e.endsWith(o)){let n=e.slice(0,-o.length);return nt(n)?n:void 0}}a(Hg,"savedWorkflowNameFromFile");function zo(e={}){let o=[{path:O("workflows"),source:"personal"},{path:ot(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(et(t.path))try{for(let r of ec(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let s=Hg(r);s&&n.set(s,{name:s,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(zo,"getSavedWorkflowNameArgs");function Bg(){let e=new Map;for(let o of tt("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of zo()){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(Bg,"getWorkflowRerunArgs");function Qr(e){let o=new Map;for(let n of tt(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of zo({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(Qr,"getWorkflowRunOrSavedNameArgs");function Ql(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?zo({generatedOnly:!0}):o.has("--run")?tt("delete"):Qr("delete")}a(Ql,"getWorkflowDeleteTargetArgs");function Gg(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[..._g,...tn().map(r=>({name:r.name,description:r.description,type:"enum"})),...zo()];if(n==="rerun"&&t<=2)return Bg();if(n==="rename"&&t<=2)return Qr("rename");if(n==="delete"&&t<=2)return[...Ng,...Ql(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Ql(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...Qr("revise")];if(e[1]==="--replace"&&t<=3)return zo()}return Lg.has(n)&&t<=2?tt(n):n==="runs"&&t<=2?Og:n==="prune"&&t<=2?Wg:[]}a(Gg,"getWorkflowArgs");function Kg(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Cg:t>2?[]:n==="mode"?Ig:n==="trace"?Tg:[]}a(Kg,"getRepoIntelArgs");var zg=new Map([["mode",hg],["thinking",mo],["think",mo],["t",mo],["reasoning",mo],["reason",mo],["effort",mo],["status",Jr],["info",Jr],["ctx",Jr],["mcp",yg],["fallback",vg],["auto-engine",kg],["agent-mode",Jl],["am",Jl],["verifier-log",Zl],["stall-log",Zl],["memory",Sg],["goal",$g],["paste",Ag],["review",Rg],["agents",Eg],["delete",Zr],["rm",Zr],["del",Zr]]),qg=new Set(["model","m","provider"]),Vg=new Set(["repo-intel"]),Xg=new Set(["repointel","ri"]),Yg=new Set(["workflow"]),Jg=new Set(["learn"]);function es(e,o,n=[]){let t=e.toLowerCase();return qg.has(t)?wg(o):Vg.has(t)?Kg(n):Xg.has(t)?n.length<=1?Pg:[]:Yg.has(t)?Gg(n):Jg.has(t)?bg(n):zg.get(t)??[]}a(es,"getCommandArguments");var os=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=fo(t);if(r===-1)return!1;let s=t.slice(r),l=s.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=s.slice(1).toLowerCase();return es(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=fo(t);if(r===-1)return[];let s=t.slice(r),l=s.indexOf(" "),c=(l===-1?s.slice(1):s.slice(1,l)).toLowerCase(),d=l===-1?"":s.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,m=(u[f]??"").toLowerCase(),S=es(c,m,u);if(!S||S.length===0)return[];let x=new Set(u.slice(0,-1).map(b=>b.toLowerCase()));return S.filter(b=>!x.has(b.name.toLowerCase())).filter(b=>!m||b.name.includes("/")?!0:b.name.toLowerCase().includes(m)).map(b=>({text:b.name,display:b.name,description:b.description,type:"argument"})).sort((b,g)=>{if(!m)return 0;let A=b.display.toLowerCase().startsWith(m),T=g.display.toLowerCase().startsWith(m);return A&&!T?-1:!A&&T?1:b.display.length-g.display.length})}};function Cx(){return new os}a(Cx,"createArgumentCompleter");export{Zt as a,z as b,Zw as c,Ta as d,Qw as e,ln as f,ic as g,oh as h,ac as i,nh as j,Ee as k,cn as l,li as m,ko as n,xo as o,Xe as p,Ye as q,hi as r,wi as s,yi as t,Ai as u,Ri as v,xt as w,Ci as x,Et as y,$o as z,Bh as A,qi as B,wd as C,ta as D,ra as E,Wd as F,Co as G,Nd as H,Nt as I,Ut as J,jt as K,Te as L,Ft as M,vn as N,au as O,Ht as P,eo as Q,pa as R,ga as S,ha as T,bu as U,Ru as V,vw as W,Ow as X,Eu as Y,Vt as Z,Ww as _,Nw as $,$a as aa,Gw as ba,Ia as ca,ce as da,La as ea,Ma as fa,sy as ga,Bu as ha,tf as ia,iy as ja,$n as ka,er as la,ay as ma,Ga as na,ly as oa,cy as pa,dy as qa,Oy as ra,Wy as sa,Ny as ta,Qa as ua,sr as va,el as wa,Le as xa,By as ya,Mo as za,ur as Aa,We as Ba,$m as Ca,Am as Da,vl as Ea,gv as Fa,hv as Ga,Dm as Ha,fk as Ia,mk as Ja,pk as Ka,Lk as La,Mk as Ma,Ok as Na,Wk as Oa,Nk as Pa,_l as Qa,Bk as Ra,Gk as Sa,Ml as Ta,Kk as Ua,dS as Va,Ol as Wa,Go as Xa,ex as Ya,ox as Za,Zn as _a,os as $a,Cx as ab,fo as bb,Xr as cb,Yr as db,gx as eb};