@kodax-ai/kodax 0.7.62 → 0.7.63

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 (46) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +2 -2
  3. package/README_CN.md +2 -2
  4. package/dist/chunks/{agent-4ZMCIEGD.js → agent-SL444XLN.js} +1 -1
  5. package/dist/chunks/argument-completer-EN63ZVJK.js +2 -0
  6. package/dist/chunks/{chunk-AY3BLB4Q.js → chunk-4MIHVNB7.js} +94 -94
  7. package/dist/chunks/{chunk-6HTR3GHZ.js → chunk-7MPU7TP6.js} +202 -202
  8. package/dist/chunks/{chunk-JILSZHCQ.js → chunk-HP4FXMEM.js} +2 -2
  9. package/dist/chunks/{chunk-OGRJQGKO.js → chunk-KCFVGXVK.js} +1 -1
  10. package/dist/chunks/{chunk-3KD26NCI.js → chunk-KHICMJIR.js} +166 -166
  11. package/dist/chunks/{chunk-HO6P6CPU.js → chunk-L3MF5V64.js} +1 -1
  12. package/dist/chunks/{chunk-WFE6FBQ2.js → chunk-LGR7ACBQ.js} +8 -8
  13. package/dist/chunks/{chunk-S4ISEA6F.js → chunk-RR7W7UF6.js} +146 -146
  14. package/dist/chunks/{chunk-E2Q4RIOD.js → chunk-UGTK2JIJ.js} +59 -59
  15. package/dist/chunks/{chunk-2F4R7WM7.js → chunk-VSWROENP.js} +1 -1
  16. package/dist/chunks/{compaction-config-SP3REMFR.js → compaction-config-4VIONMFB.js} +1 -1
  17. package/dist/chunks/{construction-bootstrap-4ZNFZFX2.js → construction-bootstrap-EFZBONTK.js} +1 -1
  18. package/dist/chunks/dist-EDF2YUF6.js +2 -0
  19. package/dist/chunks/host-J4HPDLFC.js +2 -0
  20. package/dist/chunks/{run-manager-UXIPDVVF.js → run-manager-ZVSW2OWM.js} +1 -1
  21. package/dist/chunks/{utils-XKWEVPE3.js → utils-5HDLYTZJ.js} +1 -1
  22. package/dist/index.d.ts +8 -8
  23. package/dist/index.js +2 -2
  24. package/dist/kodax_cli.js +860 -860
  25. package/dist/sdk-agent.d.ts +6 -6
  26. package/dist/sdk-agent.js +1 -1
  27. package/dist/sdk-coding.d.ts +585 -624
  28. package/dist/sdk-coding.js +1 -1
  29. package/dist/sdk-mcp.js +1 -1
  30. package/dist/sdk-repl.d.ts +9 -9
  31. package/dist/sdk-repl.js +2 -2
  32. package/dist/sdk-session.d.ts +4 -4
  33. package/dist/sdk-session.js +1 -1
  34. package/dist/sdk-skills.js +1 -1
  35. package/dist/types-chunks/{bash-prefix-extractor.d-Do_TCAmA.d.ts → bash-prefix-extractor.d-CZW9fRoa.d.ts} +126 -3
  36. package/dist/types-chunks/{guardrail.d-DRp0Lqvx.d.ts → guardrail.d-MR6LwMB2.d.ts} +2 -2
  37. package/dist/types-chunks/{process.d-DXkRD7hj.d.ts → process.d-CY2g03Mb.d.ts} +11 -4
  38. package/dist/types-chunks/{run-manager.d-CYY3pZeJ.d.ts → run-manager.d-CYTnWhZY.d.ts} +6 -17
  39. package/dist/types-chunks/{sdk-session-BGGOC0cT.d.ts → sdk-session-RBSBBKol.d.ts} +8 -6
  40. package/dist/types-chunks/{storage.d-C3umBC4g.d.ts → storage.d-C6kkAEch.d.ts} +2 -2
  41. package/dist/types-chunks/{types.d-DFf4Sfys.d.ts → types.d-1CnTg7Sd.d.ts} +1 -1
  42. package/dist/types-chunks/{utils.d-ChOEH3NF.d.ts → utils.d-C14jZ9ZM.d.ts} +4 -4
  43. package/package.json +1 -1
  44. package/dist/chunks/argument-completer-5PWSKFKI.js +0 -2
  45. package/dist/chunks/dist-IKWRJW6J.js +0 -2
  46. package/dist/chunks/host-XL5CH7QP.js +0 -2
@@ -1,27 +1,27 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as Jr}from"./chunk-HO6P6CPU.js";import{B as No,F as $e,H as Kr,J as Xr,K as Vr,L as Yr,j as Fr,l as Ue,m as Ln,n as Hr,o as Br,p as Gr,q as Wn,t as Wo,v as qr,x as Nn,y as On,z as zr}from"./chunk-2F4R7WM7.js";import{Aa as Dr,Ba as Ur,Ha as jr}from"./chunk-AY3BLB4Q.js";import{i as Po}from"./chunk-OGRJQGKO.js";import{d as Ar,e as Mo,f as Oe,h as to,i as Lo,j as Rr,k as Er,m as Tr,n as Pn,o as Cr,p as ro,q as Ir,t as ve,z as De}from"./chunk-JILSZHCQ.js";import{ea as _r,fa as Pr,h as xr}from"./chunk-WFE6FBQ2.js";import{Cc as te,Rc as Mr,Tc as Lr,Uc as Wr,Xc as Mn,_ as _o,kd as Nr,md as Or,w as br}from"./chunk-S4ISEA6F.js";import{Ja as Tn,Ka as Me,La as Le,s as En,z as ar}from"./chunk-S4GVQO3W.js";import{Ad as Ne,Ba as lr,Bd as vr,Ca as cr,Cb as fr,Da as In,Nb as mr,Ob as pr,Pb as gr,Qd as $r,Td as _n,ac as ke,ae as Io,bc as We,gc as wr,ic as To,k as Cn,kc as Co,lc as hr,mc as yr,re as Sr,va as Eo,vc as kr,wa as H,xb as dr,yb as ur}from"./chunk-E2Q4RIOD.js";import{a,b as Rn,c as da}from"./chunk-V4WSBIXB.js";var is=Rn((lf,ss)=>{"use strict";ss.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 ms=Rn((df,fs)=>{"use strict";var us="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",as=new RegExp("^"+us+"$"),ls="|&;()<> \\t",ma='"((\\\\"|[^"])*?)"',pa="'((\\\\'|[^'])*?)'",ga=/^#$/,cs="'",ds='"',Dn="$",Se="",wa=4294967296;for(Un=0;Un<4;Un++)Se+=(wa*Math.random()).toString(16);var Un,ha=new RegExp("^"+Se);function ya(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(ya,"matchAll");function ka(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+Se+JSON.stringify(t)+Se:o+t}a(ka,"getVar");function va(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+ls+`]|[^\\s'"`+ls+"])+",i=new RegExp(["("+us+")","("+r+"|"+ma+"|"+pa+")+"].join("|"),"g"),l=ya(e,i);if(l.length===0)return[];o||(o={});var c=!1;return l.map(function(d){var u=d[0];if(!u||c)return;if(as.test(u))return{op:u};var f=!1,m=!1,y="",v=!1,k;function $(){k+=1;var I,M,X=u.charAt(k);if(X==="{"){if(k+=1,u.charAt(k)==="}")throw new Error("Bad substitution: "+u.slice(k-2,k+1));if(I=u.indexOf("}",k),I<0)throw new Error("Bad substitution: "+u.slice(k));M=u.slice(k,I),k=I}else if(/[*@#?$!_-]/.test(X))M=X,k+=1;else{var V=u.slice(k);I=V.match(/[^\w\d_]/),I?(M=V.slice(0,I.index),k+=I.index-1):(M=V,k=u.length)}return ka(o,"",M)}for(a($,"parseEnvVar"),k=0;k<u.length;k++){var g=u.charAt(k);if(v=v||!f&&(g==="*"||g==="?"),m)y+=g,m=!1;else if(f)g===f?f=!1:f==cs?y+=g:g===t?(k+=1,g=u.charAt(k),g===ds||g===t||g===Dn?y+=g:y+=t+g):g===Dn?y+=$():y+=g;else if(g===ds||g===cs)f=g;else{if(as.test(g))return{op:u};if(ga.test(g)){c=!0;var R={comment:e.slice(d.index+k+1)};return y.length?[y,R]:[R]}else g===t?m=!0:g===Dn?y+=$():y+=g}}return v?{op:"glob",pattern:y}:y}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(va,"parseInternal");fs.exports=a(function(o,n,t){var r=va(o,n,t);return typeof n!="function"?r:r.reduce(function(i,l){if(typeof l=="object")return i.concat(l);var c=l.split(RegExp("("+Se+".*?"+Se+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return ha.test(d)?JSON.parse(d.split(Se)[1]):d}))},[])},"parse")});var ps=Rn(jn=>{"use strict";jn.quote=is();jn.parse=ms()});import*as kn from"fs";import*as xo from"path";import s from"chalk";var Oo=["plan","accept-edits","auto","auto-in-project"];function ef(e){return e==="auto"||e==="auto-in-project"}a(ef,"isAutoMode");function ua(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ua,"permissionModeDisplayName");var fa='[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 of(e=console.warn){let o=!1;return()=>{o||(o=!0,e(fa))}}a(of,"createAutoInProjectDeprecationEmitter");var Zr=Nr(),so=new Set(Zr.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),Qr=new Set(Zr.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),es=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"]),os=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","where","grep","find","awk","sed","head","tail","less","more","wc","findstr","fc","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","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function ns(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(ns,"computeConfirmTools");function ts(e){return e!==void 0&&Oo.includes(e)}a(ts,"isPermissionMode");function io(e,o){return ts(e)?e:o}a(io,"normalizePermissionMode");async function rs(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(i){n.push({effort:t,status:"error",error:i instanceof Error?i.message:String(i)});continue}r?(cr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(rs,"probeProviderReasoningEfforts");import Bo from"fs";import Cs from"path";import Do from"fs";import W from"path";import lo from"os";var hs=da(ps(),1);var gs=new Set(["/dev/null","nul","NUL"]);function Fn(e){return gs.has(e)||gs.has(e.toLowerCase())}a(Fn,"isNullDevice");function ao(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`"))return{statements:[],unparseable:!0};let n;try{n=(0,hs.parse)(o)}catch{return{statements:[],unparseable:!0}}let t=[],r=[],i=[],l=[],c=null,d=!1,u=a(()=>{(i.length>0||l.length>0)&&(r.push({argv:i,redirections:l}),i=[],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 y=n[m];if(typeof y=="string"){i.push(y);continue}if("op"in y){let v=y.op;if(v==="&&"||v==="||"||v===";"){f(v);continue}if(v==="|"){u();continue}if(v==="&"){let k=n[m+1];if(k!==void 0&&typeof k!="string"&&"op"in k&&(k.op===">"||k.op===">>")){let $=n[m+2];if(typeof $!="string"){d=!0,m+=1;continue}l.push(ws(`&${k.op}`,$)),m+=2;continue}d=!0;continue}if(Sa(v)){let k=null,$=i[i.length-1];$!==void 0&&/^[0-9]+$/.test($)&&(k=$,i.pop());let g=n[m+1];if(typeof g!="string"){d=!0;continue}l.push(ws(k?`${k}${v}`:v,g)),m+=1;continue}if(v==="glob"){let k=y.pattern;typeof k=="string"?i.push(k):d=!0;continue}d=!0;continue}if("comment"in y)break;d=!0}return f(null),{statements:t,unparseable:d}}a(ao,"parseBashCommand");var $a=new Set([">",">>","<","<<","<<<","&>","&>>"]),ys=/^([0-9]+|&)(>>?|<<?)$/;function Sa(e){return $a.has(e)||ys.test(e)}a(Sa,"isRedirectionOp");function ws(e,o){let n=null,t=e,r=ys.exec(e);return r&&(n=r[1],t=r[2]),{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o}}a(ws,"parseRedirection");var ba=W.join(".agent","plan_mode_doc.md"),Uo=new Map,jo=null;function xa(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of os)if(o===n||o.startsWith(n+" ")){if(n==="sed"&&o.split(/\s+/).some(i=>i.startsWith("-i")||i==="--in-place"))return!1;if(n==="awk"){let r=o.split(/\s+/);if(r.includes("-f")||r.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc","ruby","perl"].includes(n)){let r=o.split(/\s+/).slice(1);if(r.length>0&&!r.every(i=>/^(-v|--version|-h|--help)$/.test(i)))return!1}return!0}return!1}a(xa,"isSingleBashReadCommand");var Aa=/^[a-zA-Z0-9]+$/;function Ra(e){let o=e.trim();if(!o.endsWith("--help")||o.includes('"')||o.includes("'"))return!1;let n=!1;for(let t of o.split(/\s+/))if(t.startsWith("-"))if(t==="--help")n=!0;else return!1;else if(!Aa.test(t))return!1;return n}a(Ra,"isHelpCommand");function Bn(e){if(!e||!e.trim())return!1;if(Ra(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=ao(o);if(n.unparseable||n.statements.length===0)return!1;let t=n.statements.length>1||(n.statements[0]?.stages.length??0)>1;for(let r of n.statements){if(r.precedingOp!==null&&r.precedingOp!=="&&")return!1;for(let i of r.stages){for(let c of i.redirections)if(c.input||!Fn(c.target))return!1;let l=i.argv.join(" ");if(l&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!xa(l))return!1}}return!0}a(Bn,"isBashReadCommand");function Ea(e){let o=e.trim();return o?Bn(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(Ea,"getDirectShellBypassBlockReason");var vs=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]);function Gn(e){if(!e||!e.trim())return!1;let o=ao(e);if(o.unparseable)return!1;for(let n of o.statements)for(let t of n.stages){let r=t.argv.map(i=>i.toLowerCase());if(r.length>0){let i=r[0],l=r.length>=2?`${r[0]} ${r[1]}`:null;for(let c of es)if(c===i||l!==null&&c===l)return!0}for(let i of r)if(vs.has(i))return!0;for(let i of t.redirections)if(!i.input&&!Fn(i.target))return!0}return!1}a(Gn,"isBashWriteCommand");function qn(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(qn,"parseAllowedToolPattern");function Ta(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(Ta,"matchesBashPatternLegacy");function Ca(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a(Ca,"matchesBashPatternByExtractedPrefix");async function zn(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",l=[];for(let c of n){let d=qn(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(i,r)}catch{return!1}if(c.kind!=="prefix")return!1;for(let{pattern:d}of l)if(d&&Ca(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&Ta(i,c))return!0;return!1}a(zn,"isToolCallAllowed");function Kn(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(Kn,"generateSavePattern");function co(e,o){try{let n=W.resolve(e),t=W.resolve(o),r=Eo(),i=W.join(t,".kodax");return je(n,i)||je(n,r)?!0:!(je(n,t)||bs().some(c=>je(n,c)))}catch{return!1}}a(co,"isAlwaysConfirmPath");function ks(e){return!e||e.startsWith("-")?!1:/^\.\.?[/\\]/.test(e)||e.startsWith("~/")||e.startsWith("~\\")||/^[a-zA-Z]:[/\\]/.test(e)?!0:e.startsWith("/")&&e.length>1?!(process.platform==="win32"&&Ia.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e))}a(ks,"looksLikePath");var Ia=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/;function _a(e){let o=[],n=/["']([^"']+)["']/g,t;for(;(t=n.exec(e))!==null;)o.push(t[1]);let r=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|[a-zA-Z]:\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(t=r.exec(e))!==null;)o.push(t[1]);return o}a(_a,"legacyRegexPathScan");function Ho(e){let o=new Set,n=ao(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){for(let i of r.argv)ks(i)&&o.add(i);for(let i of r.redirections)ks(i.target)&&o.add(i.target)}for(let t of _a(e))o.add(t);return Array.from(o)}a(Ho,"extractPathsFromCommand");function Pa(e,o){let n=Ho(e);for(let t of n)if(co(t,o))return!0;return!1}a(Pa,"isCommandOnProtectedPath");function Fo(e){let o=W.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(Fo,"normalizePathForComparison");function Ma(e,o){return Fo(e)===Fo(o)}a(Ma,"pathsEqual");function je(e,o){let n=Fo(e),t=Fo(o);return n===t||n.startsWith(t+W.sep)}a(je,"isPathInsideDirectory");function Xn(e,o){try{let n=W.resolve(o),t=W.resolve(n,Ss($s(e)));return je(t,n)}catch{return!1}}a(Xn,"isPathInsideProject");function La(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(La,"collectAbsolutePathCandidates");function Vn(e){let o=W.resolve(e),n=Uo.get(o);if(n)return n;if(Do.existsSync(o)){let c=Do.realpathSync.native(o);return Uo.set(o,c),c}let t=[],r=o;for(;!Do.existsSync(r);){let c=W.dirname(r);if(c===r)return Uo.set(o,o),o;t.unshift(W.basename(r)),r=c}let i=Do.realpathSync.native(r),l=W.join(i,...t);return Uo.set(o,l),l}a(Vn,"resolveExistingPathPrefix");function $s(e){return e==="~"?lo.homedir():e.startsWith(`~${W.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?W.join(lo.homedir(),e.slice(2)):e}a($s,"expandHomeDirectory");function Ss(e){let o=lo.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(Ss,"expandSystemTempAlias");function Wa(e,o){let n=W.resolve(o??process.cwd()),t=Ss($s(e)),r=W.isAbsolute(t)?W.resolve(t):W.resolve(n,t);return Vn(r)}a(Wa,"resolvePermissionPath");function bs(){if(jo)return jo;let e=new Set,o=[lo.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(Vn(n))}catch{}return jo=Array.from(e),jo}a(bs,"getSystemTempDirectories");function Yn(e){let o=Vn(e??process.cwd());return{projectPlanDoc:W.join(o,ba),systemTempDirs:bs()}}a(Yn,"getPlanModeAllowedWritablePaths");function Hn(e,o){let n=Wa(e,o),{projectPlanDoc:t,systemTempDirs:r}=Yn(o);return Ma(n,t)?!0:r.some(i=>je(n,i))}a(Hn,"isPlanModeAllowedPath");function Na(e){let{projectPlanDoc:o,systemTempDirs:n}=Yn(e),t=n[0]??lo.tmpdir();return`${o} or the system temp directory (${t})`}a(Na,"formatPlanModeAllowedLocations");var Oa=new Set(["-a","--append","-i","--ignore-interrupts"]);function Da(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];Oa.has(t)||t.startsWith("-")||o.push(t)}return o}a(Da,"collectTeeTargets");function Ua(e){let o=[],n=1,t=!1;for(;n<e.argv.length;){let r=e.argv[n],i=r.toLowerCase();if(i==="-path"||i==="-literalpath"||i==="-destination"){let l=e.argv[n+1];if(l!==void 0&&!l.startsWith("-")){o.push(l),n+=2;continue}}!r.startsWith("-")&&!t&&(o.push(r),t=!0),n+=1}return o}a(Ua,"collectPowerShellWriteTargets");function Fe(e){let o=new Set,n=a(r=>{let i=r?.trim();i&&o.add(i)},"pushTarget");for(let r of Ho(e))n(r);let t=ao(e);if(t.unparseable)return Array.from(o);for(let r of t.statements)for(let i of r.stages){for(let c of i.redirections)c.input||n(c.target);let l=i.argv[0]?.toLowerCase();if(l){if(l==="tee")for(let c of Da(i))n(c);else if(vs.has(l))for(let c of Ua(i))n(c)}}return Array.from(o)}a(Fe,"collectBashWriteTargets");function xs(e,o){if(!Gn(e))return{dangerous:!1};let n=new Set([...Fe(e),...La(e)]);for(let t of n)if(!Xn(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(xs,"getBashOutsideProjectWriteRisk");function As(e,o,n){let t=Na(n);if(Or(e))return null;if(so.has(e)){let r=typeof o.path=="string"?o.path:"";return r?Hn(r,n)?null:`[Blocked] Plan mode only allows file modifications in ${t}. Requested path: ${r}`:`[Blocked] Tool '${e}' is not allowed in plan mode unless it targets ${t}.`}if(e==="bash"){let r=o.command??"";if(!Gn(r))return null;let i=Fe(r);if(i.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${t}. Could not determine a safe target from: ${r.slice(0,80)}${r.length>80?"...":""}`;let l=i.find(c=>!Hn(c,n));return l?`[Blocked] Plan mode only allows bash write operations in ${t}. Blocked target: ${l}`: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 ${t}.`}a(As,"getPlanModeBlockReason");import fe from"node:path";import ja from"node:os";function He(e,o){try{let n=fe.resolve(e),t=fe.resolve(o);return n===t?!0:n.startsWith(t+fe.sep)}catch{return!1}}a(He,"isPathUnder");function Fa(){try{return Eo()}catch{return}}a(Fa,"safeGetAgentConfigHome");function Rs(e,o){let n=Fa();if(n&&He(e,n))return"user-kodax";let t=fe.join(fe.resolve(o),".kodax");if(He(e,t))return"project-kodax"}a(Rs,"resolveProtectedZone");function Ha(){let e=new Set;try{e.add(ja.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(Ha,"getSystemTempDirs");var Ba=new Set(["bash"]),Ga={toolNames:Ba,collect(e,o){let n=typeof e.input.command=="string"?e.input.command:"";if(!n||!o)return[];let t=[],r=new Set,i=new Set,l=Ha(),c=fe.resolve(o);for(let d of Ho(n)){let u;try{u=fe.resolve(o,d)}catch{continue}let f=Rs(u,o);if(f){r.has(u)||(r.add(u),t.push({kind:"protected_path",path:d,zone:f}));continue}if(co(d,o)){let m=l.some(v=>He(u,v)),y=He(u,c);!m&&!y&&!i.has(u)&&(i.add(u),t.push({kind:"outside_project",path:d}))}}for(let d of Fe(n)){let u;try{u=fe.resolve(o,d)}catch{continue}Rs(u,o)||He(u,c)||l.some(y=>He(u,y))||t.push({kind:"shell_redirect_outside",target:d})}return t}};var Go=H("config.json");function Is(){return Cs.join(process.cwd(),".kodax","config.local.json")}a(Is,"getProjectConfigFile");function Vf(e=process.env){let n=uo(Go).autoMode??{},t=e.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,i=n.engine==="llm"||n.engine==="rules"?n.engine:void 0,l=r??i??"llm",c=Ts(n.classifierModel),d=Ts(e.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=e.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,m=Number.isFinite(f)&&f>0?Math.floor(f):void 0,y=typeof n.timeoutMs=="number"&&n.timeoutMs>0?Math.floor(n.timeoutMs):void 0,v=Es(e.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),k=typeof n.speculativeWindowMs=="number"?Es(String(n.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??y,speculativeWindowMs:v??k}}a(Vf,"loadAutoModeSettings");function Es(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(Es,"parseSpeculativeWindow");function Ts(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(Ts,"nonEmptyString");function uo(e){try{if(Bo.existsSync(e))return JSON.parse(Bo.readFileSync(e,"utf-8"))}catch{}return{}}a(uo,"readJsonFile");function _s(e,o){Bo.mkdirSync(Cs.dirname(e),{recursive:!0}),Bo.writeFileSync(e,JSON.stringify(o,null,2))}a(_s,"writeJsonFile");function Jn(e){let o=uo(Go);_s(Go,{...o,permissionMode:e})}a(Jn,"savePermissionModeUser");function Yf(){let e=uo(Go),o=uo(Is()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Yf,"loadAlwaysAllowTools");function Jf(e,o,n=!1){let t=Kn(e,o,n);if(!t)return;let r=Is(),i=uo(r),l=i.alwaysAllowTools??[];l.includes(t)||_s(r,{...i,alwaysAllowTools:[...l,t]})}a(Jf,"saveAlwaysAllowToolPattern");var Zn=["ama","amaw","sa"];function Ps(e){let o=Zn.indexOf(e);return Zn[(o+1)%Zn.length]??"ama"}a(Ps,"nextAgentMode");var Be=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let i of r.aliases)this.aliases.delete(i.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},qa=new Be;import q from"chalk";import{Buffer as Ns}from"node:buffer";import{spawn as za}from"node:child_process";import Ms from"node:process";var be="\x1B",Ka="\x07",Qn=`${be}\\`;function Ls(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(Ls,"shouldPreferNativeClipboard");function Xa(e,o){let n=Ns.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?Qn:Ka,r=`${be}]52;c;${n}${t}`;return o.TMUX?`${be}Ptmux;${r.replaceAll(be,`${be}${be}`)}${Qn}`:o.STY?`${be}P${r}${Qn}`:r}a(Xa,"buildOscSequence");async function qo(e,o,n){return new Promise((t,r)=>{let i=za(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";i.on("error",r),i.stderr?.on("data",c=>{l+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}a(qo,"execClipboardCommand");function Va(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=Ns.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Va,"buildWindowsClipboardCandidates");async function Ws(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Va(e);for(let[r,i,l]of t)try{if(await qo(r,i,l))return!0}catch{}return!1}case"darwin":return qo("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await qo(r,i,e))return!0}catch{}return!1}default:return!1}}a(Ws,"tryNativeClipboard");async function Ya(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await qo("tmux",n,e)}catch{return!1}}a(Ya,"tryTmuxClipboard");async function Os(e,o={}){let n=o.env??Ms.env,t=o.platform??Ms.platform,r=e.trimEnd(),i=Xa(r,n);if(!r)throw new Error("Nothing to copy.");if(Ls(n,t))try{if(await Ws(r,n,t))return{path:"native"}}catch{}if(await Ya(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!Ls(n,t))try{if(await Ws(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(Os,"copyTextToClipboard");var et;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(et||(et={}));var G;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(G||(G={}));var cm={[G.Scheduled]:"\u25CB",[G.Validating]:"\u25CC",[G.AwaitingApproval]:"?",[G.Executing]:"\u25CB",[G.Success]:"\u2713",[G.Error]:"\u2717",[G.Cancelled]:"-"},Ds;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(Ds||(Ds={}));var dm={streamingState:et.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Ja="[redacted]",Us="[truncated]";function re(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(re,"truncateToolReplayText");function Za(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(Za,"isSensitiveToolInputKey");function js(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(js,"isRecord");function ot(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return re(e);if(o>=6)return Us;if(typeof e=="object"&&e!==null){if(n.has(e))return Us;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>ot(r,o+1,n));if(!js(e))return re(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=Za(r)?Ja:ot(i,o+1,n);return t}return re(String(e))}a(ot,"sanitizeToolJsonValue");function Fs(e){if(!e)return;let o=ot(e);return js(o)?o:void 0}a(Fs,"sanitizeToolInput");function Hs(e){if(e!==void 0){if(typeof e=="string")return re(e);try{return re(JSON.stringify(e))}catch{return re(String(e))}}}a(Hs,"stringifyToolReplayValue");function wm(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool"}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(il)}:e}a(wm,"seedToHistoryItem");var Qa="[Thinking]",el="[/Thinking]",ol="Untitled Session",Bs=50,nl=60,qs="...",zs=["[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:"],Ks=[/(?:^|\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:/],tl=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,rl="Session ended before the tool completed.";function sl(e){switch(e){case"success":return G.Success;case"error":return G.Error;case"cancelled":return G.Cancelled;case"awaiting_approval":return G.AwaitingApproval;default:return e}}a(sl,"toolCallSeedToHistoryToolStatus");function il(e){return{id:e.id,name:e.name,status:sl(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(il,"toolCallSeedToHistoryToolCall");function al(e){let o=-1;for(let n of zs){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of Ks){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(al,"findControlPlaneCutIndex");function ll(e){return zs.some(o=>e.includes(o))||Ks.some(o=>o.test(e))}a(ll,"hasControlPlaneSignal");function Xs(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(Xs,"collectTextBlocks");function Ko(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Ko,"isRecord");function cl(e){if(typeof e=="string")return re(e);if(e===void 0)return"";try{return Hs(e)??""}catch{return re(String(e))}}a(cl,"toolResultContentToString");function dl(e){let o=cl(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(dl,"inferToolResultSeed");function ul(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!Ko(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,dl(n));return o}a(ul,"collectToolResultSeeds");function fl(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:rl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:Fs(Ko(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(fl,"buildToolCallSeed");function ml(e){return typeof e=="string"?e:Array.isArray(e)?Xs(e).join(`
3
- `):""}a(ml,"extractAssistantTextOnly");function mo(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(mo,"pushSeed");function Gs(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(Gs,"stripLegacyTagBoundaryNewlines");function pl(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?fo(String(n.command??"")):o==="read"||o==="write"||o==="edit"?fo(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?fo(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?fo(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(pl,"formatToolUseSummary");function fo(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(fo,"truncateToolHint");function gl(e){if(!e.includes(Qa)||!e.includes(el))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(tl)){let r=t.index??-1,i=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+i.length;mo(o,"assistant",Gs(e.slice(n,c))),mo(o,"thinking",l),n=r+t[0].length}return mo(o,"assistant",Gs(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(gl,"parseLegacyAssistantContent");function Vs(e,o){if(typeof e=="string")return gl(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],i=a(()=>{t.length!==0&&(mo(n,"assistant",t.join(`
4
- `)),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(!(!Ko(c)||typeof c.type!="string"))switch(c.type){case"text":l(),"text"in c&&t.push(String(c.text));break;case"thinking":i(),l(),"thinking"in c&&mo(n,"thinking",String(c.thinking));break;case"tool_use":if(i(),o){let d=fl(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=pl({name:c.name,...Ko(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(),i(),n}a(Vs,"extractAssistantHistorySeeds");var wl=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],hl=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function yl(e){return wl.some(o=>e.includes(o))}a(yl,"isManagedWorkerPrompt");function Ys(e){return e.replace(hl,"").trim()}a(Ys,"stripManagedProtocolBlocks");function kl(e){switch(e.role){case"assistant":return Vs(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=Ys(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=zo(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="task-completed"){let n=zo(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=zo(e.content);return o.trim().length===0||yl(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(kl,"extractHistorySeedsFromMessage");function hm(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=ul(e[n+1]),i=Vs(t.content,r);o.push(...i.map(l=>l.type==="assistant"?{...l,text:Ys(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...kl(t))}}return o}a(hm,"extractHistorySeedsFromMessages");function zo(e){return typeof e=="string"?e:Array.isArray(e)?Xs(e).join(`
5
- `):""}a(zo,"extractTextContent");function vl(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>Bs?`${o.slice(0,Bs)}${qs}`:o:ol}a(vl,"formatSessionTitle");function $l(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($l,"isPureToolResultUserMessage");function nt(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=ml(n.content);return t&&t.trim()!=="..."?t:""}if(!$l(n))return""}}return""}a(nt,"extractLastAssistantText");function ym(e,o,n,t){let r=[nt(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=Js(i);if(l)return l}return""}a(ym,"resolveCompletedAssistantText");function Js(e){let o=e.trim();if(!o||o==="...")return"";let n=al(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Js,"sanitizeUserFacingAssistantText");function km(e){let o=e.trim();return o.length>0&&Js(o).length===0&&ll(o)}a(km,"isControlPlaneOnlyAssistantText");function vm(e){let o=e.find(t=>t.role==="user"),n=o?zo(o.content):"";return vl(n)}a(vm,"extractTitle");function $m(e,o=nl){let n=e.replace(/\n/g," "),t=n.length>o?qs:"";return n.slice(0,o)+t}a($m,"formatMessagePreview");var tt={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=nt(o.messages);if(!n){console.log(q.yellow(`
6
- No assistant message found to copy.`)),console.log(q.dim("The assistant needs to respond first before you can copy its message."));return}try{await Os(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(q.green(`
2
+ import{a as ts}from"./chunk-L3MF5V64.js";import{B as Oo,F as $e,H as Qr,J as es,K as os,L as ns,j as Kr,l as je,m as Dn,n as Xr,o as Vr,p as Yr,q as Un,t as No,v as Jr,x as jn,y as Fn,z as Zr}from"./chunk-VSWROENP.js";import{Aa as Gr,Ba as qr,Ha as zr}from"./chunk-4MIHVNB7.js";import{i as _o}from"./chunk-KCFVGXVK.js";import{d as Cr,e as Mo,f as De,h as ro,i as Lo,j as Ir,k as Pr,m as _r,n as Wn,o as Mr,p as so,q as Lr,t as ve,z as Ue}from"./chunk-HP4FXMEM.js";import{ea as Or,fa as Dr,h as Tr}from"./chunk-LGR7ACBQ.js";import{Bc as Nr,Dc as te,Jb as Nn,Kb as Wo,Nb as Wr,Sc as Ur,Uc as jr,Vc as Fr,Yc as On,_ as Po,ld as Hr,nd as Br,w as Er}from"./chunk-RR7W7UF6.js";import{Ja as Pn,Ka as Me,La as Le,s as In,z as ur}from"./chunk-S4GVQO3W.js";import{Ad as Oe,Ba as fr,Bd as xr,Ca as mr,Cb as wr,Da as Mn,Nb as hr,Ob as yr,Pb as kr,Qd as Ar,Td as Ln,ac as ke,ae as Io,bc as Ne,gc as vr,ic as To,k as _n,kc as Co,lc as $r,mc as Sr,re as Rr,va as We,vc as br,wa as H,xb as pr,yb as gr}from"./chunk-UGTK2JIJ.js";import{a,b as Cn,c as wa}from"./chunk-V4WSBIXB.js";var fs=Cn((yf,us)=>{"use strict";us.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 ks=Cn((vf,ys)=>{"use strict";var hs="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",ms=new RegExp("^"+hs+"$"),ps="|&;()<> \\t",ka='"((\\\\"|[^"])*?)"',va="'((\\\\'|[^'])*?)'",$a=/^#$/,gs="'",ws='"',Hn="$",Se="",Sa=4294967296;for(Bn=0;Bn<4;Bn++)Se+=(Sa*Math.random()).toString(16);var Bn,ba=new RegExp("^"+Se);function xa(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(xa,"matchAll");function Aa(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+Se+JSON.stringify(t)+Se:o+t}a(Aa,"getVar");function Ra(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+ps+`]|[^\\s'"`+ps+"])+",i=new RegExp(["("+hs+")","("+r+"|"+ka+"|"+va+")+"].join("|"),"g"),l=xa(e,i);if(l.length===0)return[];o||(o={});var c=!1;return l.map(function(d){var u=d[0];if(!u||c)return;if(ms.test(u))return{op:u};var f=!1,m=!1,y="",v=!1,k;function $(){k+=1;var I,M,X=u.charAt(k);if(X==="{"){if(k+=1,u.charAt(k)==="}")throw new Error("Bad substitution: "+u.slice(k-2,k+1));if(I=u.indexOf("}",k),I<0)throw new Error("Bad substitution: "+u.slice(k));M=u.slice(k,I),k=I}else if(/[*@#?$!_-]/.test(X))M=X,k+=1;else{var V=u.slice(k);I=V.match(/[^\w\d_]/),I?(M=V.slice(0,I.index),k+=I.index-1):(M=V,k=u.length)}return Aa(o,"",M)}for(a($,"parseEnvVar"),k=0;k<u.length;k++){var g=u.charAt(k);if(v=v||!f&&(g==="*"||g==="?"),m)y+=g,m=!1;else if(f)g===f?f=!1:f==gs?y+=g:g===t?(k+=1,g=u.charAt(k),g===ws||g===t||g===Hn?y+=g:y+=t+g):g===Hn?y+=$():y+=g;else if(g===ws||g===gs)f=g;else{if(ms.test(g))return{op:u};if($a.test(g)){c=!0;var R={comment:e.slice(d.index+k+1)};return y.length?[y,R]:[R]}else g===t?m=!0:g===Hn?y+=$():y+=g}}return v?{op:"glob",pattern:y}:y}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(Ra,"parseInternal");ys.exports=a(function(o,n,t){var r=Ra(o,n,t);return typeof n!="function"?r:r.reduce(function(i,l){if(typeof l=="object")return i.concat(l);var c=l.split(RegExp("("+Se+".*?"+Se+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return ba.test(d)?JSON.parse(d.split(Se)[1]):d}))},[])},"parse")});var vs=Cn(Gn=>{"use strict";Gn.quote=fs();Gn.parse=ks()});import*as Sn from"fs";import*as Ao from"path";import*as yn from"fs";import hn from"path";import s from"chalk";var Do=["plan","accept-edits","auto","auto-in-project"];function uf(e){return e==="auto"||e==="auto-in-project"}a(uf,"isAutoMode");function ha(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ha,"permissionModeDisplayName");var ya='[deprecated] permissionMode "auto-in-project" is now an alias for "auto" (FEATURE_092, v0.7.33). The alias will be removed in v0.7.38 \u2014 please update ~/.kodax/config.json to use "auto".';function ff(e=console.warn){let o=!1;return()=>{o||(o=!0,e(ya))}}a(ff,"createAutoInProjectDeprecationEmitter");var rs=Hr(),io=new Set(rs.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),ss=new Set(rs.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),is=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"]),as=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","where","grep","find","awk","sed","head","tail","less","more","wc","findstr","fc","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","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function ls(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(ls,"computeConfirmTools");function cs(e){return e!==void 0&&Do.includes(e)}a(cs,"isPermissionMode");function ao(e,o){return cs(e)?e:o}a(ao,"normalizePermissionMode");async function ds(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(i){n.push({effort:t,status:"error",error:i instanceof Error?i.message:String(i)});continue}r?(mr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(ds,"probeProviderReasoningEfforts");import Go from"fs";import Ws from"path";import Uo from"fs";import W from"path";import co from"os";var bs=wa(vs(),1);var $s=new Set(["/dev/null","nul","NUL"]);function qn(e){return $s.has(e)||$s.has(e.toLowerCase())}a(qn,"isNullDevice");function lo(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`"))return{statements:[],unparseable:!0};let n;try{n=(0,bs.parse)(o)}catch{return{statements:[],unparseable:!0}}let t=[],r=[],i=[],l=[],c=null,d=!1,u=a(()=>{(i.length>0||l.length>0)&&(r.push({argv:i,redirections:l}),i=[],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 y=n[m];if(typeof y=="string"){i.push(y);continue}if("op"in y){let v=y.op;if(v==="&&"||v==="||"||v===";"){f(v);continue}if(v==="|"){u();continue}if(v==="&"){let k=n[m+1];if(k!==void 0&&typeof k!="string"&&"op"in k&&(k.op===">"||k.op===">>")){let $=n[m+2];if(typeof $!="string"){d=!0,m+=1;continue}l.push(Ss(`&${k.op}`,$)),m+=2;continue}d=!0;continue}if(Ta(v)){let k=null,$=i[i.length-1];$!==void 0&&/^[0-9]+$/.test($)&&(k=$,i.pop());let g=n[m+1];if(typeof g!="string"){d=!0;continue}l.push(Ss(k?`${k}${v}`:v,g)),m+=1;continue}if(v==="glob"){let k=y.pattern;typeof k=="string"?i.push(k):d=!0;continue}d=!0;continue}if("comment"in y)break;d=!0}return f(null),{statements:t,unparseable:d}}a(lo,"parseBashCommand");var Ea=new Set([">",">>","<","<<","<<<","&>","&>>"]),xs=/^([0-9]+|&)(>>?|<<?)$/;function Ta(e){return Ea.has(e)||xs.test(e)}a(Ta,"isRedirectionOp");function Ss(e,o){let n=null,t=e,r=xs.exec(e);return r&&(n=r[1],t=r[2]),{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o}}a(Ss,"parseRedirection");var Ca=W.join(".agent","plan_mode_doc.md"),jo=new Map,Fo=null;function Ia(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of as)if(o===n||o.startsWith(n+" ")){if(n==="sed"&&o.split(/\s+/).some(i=>i.startsWith("-i")||i==="--in-place"))return!1;if(n==="awk"){let r=o.split(/\s+/);if(r.includes("-f")||r.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc","ruby","perl"].includes(n)){let r=o.split(/\s+/).slice(1);if(r.length>0&&!r.every(i=>/^(-v|--version|-h|--help)$/.test(i)))return!1}return!0}return!1}a(Ia,"isSingleBashReadCommand");var Pa=/^[a-zA-Z0-9]+$/;function _a(e){let o=e.trim();if(!o.endsWith("--help")||o.includes('"')||o.includes("'"))return!1;let n=!1;for(let t of o.split(/\s+/))if(t.startsWith("-"))if(t==="--help")n=!0;else return!1;else if(!Pa.test(t))return!1;return n}a(_a,"isHelpCommand");function Kn(e){if(!e||!e.trim())return!1;if(_a(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=lo(o);if(n.unparseable||n.statements.length===0)return!1;let t=n.statements.length>1||(n.statements[0]?.stages.length??0)>1;for(let r of n.statements){if(r.precedingOp!==null&&r.precedingOp!=="&&")return!1;for(let i of r.stages){for(let c of i.redirections)if(c.input||!qn(c.target))return!1;let l=i.argv.join(" ");if(l&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!Ia(l))return!1}}return!0}a(Kn,"isBashReadCommand");function Ma(e){let o=e.trim();return o?Kn(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(Ma,"getDirectShellBypassBlockReason");var Rs=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]);function Xn(e){if(!e||!e.trim())return!1;let o=lo(e);if(o.unparseable)return!1;for(let n of o.statements)for(let t of n.stages){let r=t.argv.map(i=>i.toLowerCase());if(r.length>0){let i=r[0],l=r.length>=2?`${r[0]} ${r[1]}`:null;for(let c of is)if(c===i||l!==null&&c===l)return!0}for(let i of r)if(Rs.has(i))return!0;for(let i of t.redirections)if(!i.input&&!qn(i.target))return!0}return!1}a(Xn,"isBashWriteCommand");function Vn(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(Vn,"parseAllowedToolPattern");function La(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(La,"matchesBashPatternLegacy");function Wa(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a(Wa,"matchesBashPatternByExtractedPrefix");async function Yn(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",l=[];for(let c of n){let d=Vn(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(i,r)}catch{return!1}if(c.kind!=="prefix")return!1;for(let{pattern:d}of l)if(d&&Wa(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&La(i,c))return!0;return!1}a(Yn,"isToolCallAllowed");function Jn(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(Jn,"generateSavePattern");function uo(e,o){try{let n=W.resolve(e),t=W.resolve(o),r=We(),i=W.join(t,".kodax");return Fe(n,i)||Fe(n,r)?!0:!(Fe(n,t)||Cs().some(c=>Fe(n,c)))}catch{return!1}}a(uo,"isAlwaysConfirmPath");function As(e){return!e||e.startsWith("-")?!1:/^\.\.?[/\\]/.test(e)||e.startsWith("~/")||e.startsWith("~\\")||/^[a-zA-Z]:[/\\]/.test(e)?!0:e.startsWith("/")&&e.length>1?!(process.platform==="win32"&&Na.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e))}a(As,"looksLikePath");var Na=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/;function Oa(e){let o=[],n=/["']([^"']+)["']/g,t;for(;(t=n.exec(e))!==null;)o.push(t[1]);let r=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|[a-zA-Z]:\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(t=r.exec(e))!==null;)o.push(t[1]);return o}a(Oa,"legacyRegexPathScan");function Bo(e){let o=new Set,n=lo(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){for(let i of r.argv)As(i)&&o.add(i);for(let i of r.redirections)As(i.target)&&o.add(i.target)}for(let t of Oa(e))o.add(t);return Array.from(o)}a(Bo,"extractPathsFromCommand");function Da(e,o){let n=Bo(e);for(let t of n)if(uo(t,o))return!0;return!1}a(Da,"isCommandOnProtectedPath");function Ho(e){let o=W.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(Ho,"normalizePathForComparison");function Ua(e,o){return Ho(e)===Ho(o)}a(Ua,"pathsEqual");function Fe(e,o){let n=Ho(e),t=Ho(o);return n===t||n.startsWith(t+W.sep)}a(Fe,"isPathInsideDirectory");function Zn(e,o){try{let n=W.resolve(o),t=W.resolve(n,Ts(Es(e)));return Fe(t,n)}catch{return!1}}a(Zn,"isPathInsideProject");function ja(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(ja,"collectAbsolutePathCandidates");function Qn(e){let o=W.resolve(e),n=jo.get(o);if(n)return n;if(Uo.existsSync(o)){let c=Uo.realpathSync.native(o);return jo.set(o,c),c}let t=[],r=o;for(;!Uo.existsSync(r);){let c=W.dirname(r);if(c===r)return jo.set(o,o),o;t.unshift(W.basename(r)),r=c}let i=Uo.realpathSync.native(r),l=W.join(i,...t);return jo.set(o,l),l}a(Qn,"resolveExistingPathPrefix");function Es(e){return e==="~"?co.homedir():e.startsWith(`~${W.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?W.join(co.homedir(),e.slice(2)):e}a(Es,"expandHomeDirectory");function Ts(e){let o=co.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(Ts,"expandSystemTempAlias");function Fa(e,o){let n=W.resolve(o??process.cwd()),t=Ts(Es(e)),r=W.isAbsolute(t)?W.resolve(t):W.resolve(n,t);return Qn(r)}a(Fa,"resolvePermissionPath");function Cs(){if(Fo)return Fo;let e=new Set,o=[co.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(Qn(n))}catch{}return Fo=Array.from(e),Fo}a(Cs,"getSystemTempDirectories");function et(e){let o=Qn(e??process.cwd());return{projectPlanDoc:W.join(o,Ca),systemTempDirs:Cs()}}a(et,"getPlanModeAllowedWritablePaths");function zn(e,o){let n=Fa(e,o),{projectPlanDoc:t,systemTempDirs:r}=et(o);return Ua(n,t)?!0:r.some(i=>Fe(n,i))}a(zn,"isPlanModeAllowedPath");function Ha(e){let{projectPlanDoc:o,systemTempDirs:n}=et(e),t=n[0]??co.tmpdir();return`${o} or the system temp directory (${t})`}a(Ha,"formatPlanModeAllowedLocations");var Ba=new Set(["-a","--append","-i","--ignore-interrupts"]);function Ga(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];Ba.has(t)||t.startsWith("-")||o.push(t)}return o}a(Ga,"collectTeeTargets");function qa(e){let o=[],n=1,t=!1;for(;n<e.argv.length;){let r=e.argv[n],i=r.toLowerCase();if(i==="-path"||i==="-literalpath"||i==="-destination"){let l=e.argv[n+1];if(l!==void 0&&!l.startsWith("-")){o.push(l),n+=2;continue}}!r.startsWith("-")&&!t&&(o.push(r),t=!0),n+=1}return o}a(qa,"collectPowerShellWriteTargets");function He(e){let o=new Set,n=a(r=>{let i=r?.trim();i&&o.add(i)},"pushTarget");for(let r of Bo(e))n(r);let t=lo(e);if(t.unparseable)return Array.from(o);for(let r of t.statements)for(let i of r.stages){for(let c of i.redirections)c.input||n(c.target);let l=i.argv[0]?.toLowerCase();if(l){if(l==="tee")for(let c of Ga(i))n(c);else if(Rs.has(l))for(let c of qa(i))n(c)}}return Array.from(o)}a(He,"collectBashWriteTargets");function Is(e,o){if(!Xn(e))return{dangerous:!1};let n=new Set([...He(e),...ja(e)]);for(let t of n)if(!Zn(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(Is,"getBashOutsideProjectWriteRisk");function Ps(e,o,n){let t=Ha(n);if(Br(e))return null;if(io.has(e)){let r=typeof o.path=="string"?o.path:"";return r?zn(r,n)?null:`[Blocked] Plan mode only allows file modifications in ${t}. Requested path: ${r}`:`[Blocked] Tool '${e}' is not allowed in plan mode unless it targets ${t}.`}if(e==="bash"){let r=o.command??"";if(!Xn(r))return null;let i=He(r);if(i.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${t}. Could not determine a safe target from: ${r.slice(0,80)}${r.length>80?"...":""}`;let l=i.find(c=>!zn(c,n));return l?`[Blocked] Plan mode only allows bash write operations in ${t}. Blocked target: ${l}`: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 ${t}.`}a(Ps,"getPlanModeBlockReason");import fe from"node:path";import za from"node:os";function Be(e,o){try{let n=fe.resolve(e),t=fe.resolve(o);return n===t?!0:n.startsWith(t+fe.sep)}catch{return!1}}a(Be,"isPathUnder");function Ka(){try{return We()}catch{return}}a(Ka,"safeGetAgentConfigHome");function _s(e,o){let n=Ka();if(n&&Be(e,n))return"user-kodax";let t=fe.join(fe.resolve(o),".kodax");if(Be(e,t))return"project-kodax"}a(_s,"resolveProtectedZone");function Xa(){let e=new Set;try{e.add(za.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(Xa,"getSystemTempDirs");var Va=new Set(["bash"]),Ya={toolNames:Va,collect(e,o){let n=typeof e.input.command=="string"?e.input.command:"";if(!n||!o)return[];let t=[],r=new Set,i=new Set,l=Xa(),c=fe.resolve(o);for(let d of Bo(n)){let u;try{u=fe.resolve(o,d)}catch{continue}let f=_s(u,o);if(f){r.has(u)||(r.add(u),t.push({kind:"protected_path",path:d,zone:f}));continue}if(uo(d,o)){let m=l.some(v=>Be(u,v)),y=Be(u,c);!m&&!y&&!i.has(u)&&(i.add(u),t.push({kind:"outside_project",path:d}))}}for(let d of He(n)){let u;try{u=fe.resolve(o,d)}catch{continue}_s(u,o)||Be(u,c)||l.some(y=>Be(u,y))||t.push({kind:"shell_redirect_outside",target:d})}return t}};var qo=H("config.json");function Ns(){return Ws.join(process.cwd(),".kodax","config.local.json")}a(Ns,"getProjectConfigFile");function sm(e=process.env){let n=fo(qo).autoMode??{},t=e.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,i=n.engine==="llm"||n.engine==="rules"?n.engine:void 0,l=r??i??"llm",c=Ls(n.classifierModel),d=Ls(e.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=e.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,m=Number.isFinite(f)&&f>0?Math.floor(f):void 0,y=typeof n.timeoutMs=="number"&&n.timeoutMs>0?Math.floor(n.timeoutMs):void 0,v=Ms(e.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),k=typeof n.speculativeWindowMs=="number"?Ms(String(n.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??y,speculativeWindowMs:v??k}}a(sm,"loadAutoModeSettings");function Ms(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(Ms,"parseSpeculativeWindow");function Ls(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(Ls,"nonEmptyString");function fo(e){try{if(Go.existsSync(e))return JSON.parse(Go.readFileSync(e,"utf-8"))}catch{}return{}}a(fo,"readJsonFile");function Os(e,o){Go.mkdirSync(Ws.dirname(e),{recursive:!0}),Go.writeFileSync(e,JSON.stringify(o,null,2))}a(Os,"writeJsonFile");function ot(e){let o=fo(qo);Os(qo,{...o,permissionMode:e})}a(ot,"savePermissionModeUser");function im(){let e=fo(qo),o=fo(Ns()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(im,"loadAlwaysAllowTools");function am(e,o,n=!1){let t=Jn(e,o,n);if(!t)return;let r=Ns(),i=fo(r),l=i.alwaysAllowTools??[];l.includes(t)||Os(r,{...i,alwaysAllowTools:[...l,t]})}a(am,"saveAlwaysAllowToolPattern");var nt=["ama","amaw","sa"];function Ds(e){let o=nt.indexOf(e);return nt[(o+1)%nt.length]??"ama"}a(Ds,"nextAgentMode");var Ge=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let i of r.aliases)this.aliases.delete(i.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Ja=new Ge;import q from"chalk";import{Buffer as Hs}from"node:buffer";import{spawn as Za}from"node:child_process";import Us from"node:process";var be="\x1B",Qa="\x07",tt=`${be}\\`;function js(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(js,"shouldPreferNativeClipboard");function el(e,o){let n=Hs.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?tt:Qa,r=`${be}]52;c;${n}${t}`;return o.TMUX?`${be}Ptmux;${r.replaceAll(be,`${be}${be}`)}${tt}`:o.STY?`${be}P${r}${tt}`:r}a(el,"buildOscSequence");async function zo(e,o,n){return new Promise((t,r)=>{let i=Za(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";i.on("error",r),i.stderr?.on("data",c=>{l+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}a(zo,"execClipboardCommand");function ol(e){let o="$stream = [Console]::OpenStandardInput(); $buffer = New-Object byte[] 8192; $memory = New-Object System.IO.MemoryStream; while (($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) { $memory.Write($buffer, 0, $read) }; $text = [System.Text.Encoding]::UTF8.GetString($memory.ToArray()); Set-Clipboard -Value $text",n=Hs.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(ol,"buildWindowsClipboardCandidates");async function Fs(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=ol(e);for(let[r,i,l]of t)try{if(await zo(r,i,l))return!0}catch{}return!1}case"darwin":return zo("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await zo(r,i,e))return!0}catch{}return!1}default:return!1}}a(Fs,"tryNativeClipboard");async function nl(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await zo("tmux",n,e)}catch{return!1}}a(nl,"tryTmuxClipboard");async function Bs(e,o={}){let n=o.env??Us.env,t=o.platform??Us.platform,r=e.trimEnd(),i=el(r,n);if(!r)throw new Error("Nothing to copy.");if(js(n,t))try{if(await Fs(r,n,t))return{path:"native"}}catch{}if(await nl(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!js(n,t))try{if(await Fs(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(Bs,"copyTextToClipboard");var rt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(rt||(rt={}));var G;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(G||(G={}));var km={[G.Scheduled]:"\u25CB",[G.Validating]:"\u25CC",[G.AwaitingApproval]:"?",[G.Executing]:"\u25CB",[G.Success]:"\u2713",[G.Error]:"\u2717",[G.Cancelled]:"-"},Gs;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(Gs||(Gs={}));var vm={streamingState:rt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var tl="[redacted]",qs="[truncated]";function re(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(re,"truncateToolReplayText");function rl(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(rl,"isSensitiveToolInputKey");function zs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(zs,"isRecord");function st(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return re(e);if(o>=6)return qs;if(typeof e=="object"&&e!==null){if(n.has(e))return qs;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>st(r,o+1,n));if(!zs(e))return re(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=rl(r)?tl:st(i,o+1,n);return t}return re(String(e))}a(st,"sanitizeToolJsonValue");function Ks(e){if(!e)return;let o=st(e);return zs(o)?o:void 0}a(Ks,"sanitizeToolInput");function Xs(e){if(e!==void 0){if(typeof e=="string")return re(e);try{return re(JSON.stringify(e))}catch{return re(String(e))}}}a(Xs,"stringifyToolReplayValue");function Rm(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool"}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(fl)}:e}a(Rm,"seedToHistoryItem");var sl="[Thinking]",il="[/Thinking]",al="Untitled Session",Vs=50,ll=60,Js="...",Zs=["[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:"],Qs=[/(?:^|\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:/],cl=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,dl="Session ended before the tool completed.";function ul(e){switch(e){case"success":return G.Success;case"error":return G.Error;case"cancelled":return G.Cancelled;case"awaiting_approval":return G.AwaitingApproval;default:return e}}a(ul,"toolCallSeedToHistoryToolStatus");function fl(e){return{id:e.id,name:e.name,status:ul(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(fl,"toolCallSeedToHistoryToolCall");function ml(e){let o=-1;for(let n of Zs){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of Qs){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(ml,"findControlPlaneCutIndex");function pl(e){return Zs.some(o=>e.includes(o))||Qs.some(o=>o.test(e))}a(pl,"hasControlPlaneSignal");function ei(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(ei,"collectTextBlocks");function Xo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Xo,"isRecord");function gl(e){if(typeof e=="string")return re(e);if(e===void 0)return"";try{return Xs(e)??""}catch{return re(String(e))}}a(gl,"toolResultContentToString");function wl(e){let o=gl(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(wl,"inferToolResultSeed");function hl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!Xo(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,wl(n));return o}a(hl,"collectToolResultSeeds");function yl(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:dl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:Ks(Xo(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(yl,"buildToolCallSeed");function kl(e){return typeof e=="string"?e:Array.isArray(e)?ei(e).join(`
3
+ `):""}a(kl,"extractAssistantTextOnly");function po(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(po,"pushSeed");function Ys(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(Ys,"stripLegacyTagBoundaryNewlines");function vl(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?mo(String(n.command??"")):o==="read"||o==="write"||o==="edit"?mo(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?mo(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?mo(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(vl,"formatToolUseSummary");function mo(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(mo,"truncateToolHint");function $l(e){if(!e.includes(sl)||!e.includes(il))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(cl)){let r=t.index??-1,i=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+i.length;po(o,"assistant",Ys(e.slice(n,c))),po(o,"thinking",l),n=r+t[0].length}return po(o,"assistant",Ys(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a($l,"parseLegacyAssistantContent");function oi(e,o){if(typeof e=="string")return $l(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],i=a(()=>{t.length!==0&&(po(n,"assistant",t.join(`
4
+ `)),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(!(!Xo(c)||typeof c.type!="string"))switch(c.type){case"text":l(),"text"in c&&t.push(String(c.text));break;case"thinking":i(),l(),"thinking"in c&&po(n,"thinking",String(c.thinking));break;case"tool_use":if(i(),o){let d=yl(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=vl({name:c.name,...Xo(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(),i(),n}a(oi,"extractAssistantHistorySeeds");var Sl=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],bl=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function xl(e){return Sl.some(o=>e.includes(o))}a(xl,"isManagedWorkerPrompt");function ni(e){return e.replace(bl,"").trim()}a(ni,"stripManagedProtocolBlocks");function Al(e){switch(e.role){case"assistant":return oi(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=ni(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=Ko(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="task-completed"){let n=Ko(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=Ko(e.content);return o.trim().length===0||xl(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(Al,"extractHistorySeedsFromMessage");function Em(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=hl(e[n+1]),i=oi(t.content,r);o.push(...i.map(l=>l.type==="assistant"?{...l,text:ni(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...Al(t))}}return o}a(Em,"extractHistorySeedsFromMessages");function Ko(e){return typeof e=="string"?e:Array.isArray(e)?ei(e).join(`
5
+ `):""}a(Ko,"extractTextContent");function Rl(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>Vs?`${o.slice(0,Vs)}${Js}`:o:al}a(Rl,"formatSessionTitle");function El(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(El,"isPureToolResultUserMessage");function it(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=kl(n.content);return t&&t.trim()!=="..."?t:""}if(!El(n))return""}}return""}a(it,"extractLastAssistantText");function Tm(e,o,n,t){let r=[it(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=ti(i);if(l)return l}return""}a(Tm,"resolveCompletedAssistantText");function ti(e){let o=e.trim();if(!o||o==="...")return"";let n=ml(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(ti,"sanitizeUserFacingAssistantText");function Cm(e){let o=e.trim();return o.length>0&&ti(o).length===0&&pl(o)}a(Cm,"isControlPlaneOnlyAssistantText");function Im(e){let o=e.find(t=>t.role==="user"),n=o?Ko(o.content):"";return Rl(n)}a(Im,"extractTitle");function Pm(e,o=ll){let n=e.replace(/\n/g," "),t=n.length>o?Js:"";return n.slice(0,o)+t}a(Pm,"formatMessagePreview");var at={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=it(o.messages);if(!n){console.log(q.yellow(`
6
+ No assistant message found to copy.`)),console.log(q.dim("The assistant needs to respond first before you can copy its message."));return}try{await Bs(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(q.green(`
7
7
  Copied to clipboard!`)),console.log(q.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(q.red(`
8
8
  Failed to copy to clipboard: ${r}`)),console.log(q.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:a(()=>{console.log(q.bold(`
9
9
  /copy - Copy Last Assistant Message
10
10
  `)),console.log("Usage:"),console.log(q.cyan(" /copy")+` - Copy the last assistant message to clipboard
11
11
  `),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.
12
12
  `),console.log("Examples:"),console.log(q.dim(" User: Explain how async/await works")),console.log(q.dim(" AI: [responds with explanation]")),console.log(q.cyan(" /copy")+q.dim(` - Copies the explanation to clipboard
13
- `)),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 A from"chalk";function Sl(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Sl,"resolveCwd");function bl(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(bl,"proposalLabel");function x(e=""){process.stdout.write(`${e}
14
- `)}a(x,"writeOutput");function xl(e){for(let o of e)x(A.yellow(`[learn] ${o}`))}a(xl,"printWarnings");function Zs(e){x(A.yellow(`
15
- Consumer impact:`)),x(A.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){x(A.dim(` ${n}:`));for(let r of t)x(A.dim(` - ${r}`))}}a(Zs,"printConsumerImpact");async function Al(e){let o=Co(e),n=await To(o);return xl(n.warnings),{storePath:o,store:n}}a(Al,"readStore");function Rl(e,o){return e.find(n=>n.proposalId===o)}a(Rl,"findProposal");function El(e,o){let n=e.filter(t=>t.status==="pending");if(x(A.cyan(`
13
+ `)),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 A from"chalk";function Tl(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Tl,"resolveCwd");function Cl(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(Cl,"proposalLabel");function x(e=""){process.stdout.write(`${e}
14
+ `)}a(x,"writeOutput");function Il(e){for(let o of e)x(A.yellow(`[learn] ${o}`))}a(Il,"printWarnings");function ri(e){x(A.yellow(`
15
+ Consumer impact:`)),x(A.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){x(A.dim(` ${n}:`));for(let r of t)x(A.dim(` - ${r}`))}}a(ri,"printConsumerImpact");async function Pl(e){let o=Co(e),n=await To(o);return Il(n.warnings),{storePath:o,store:n}}a(Pl,"readStore");function _l(e,o){return e.find(n=>n.proposalId===o)}a(_l,"findProposal");function Ml(e,o){let n=e.filter(t=>t.status==="pending");if(x(A.cyan(`
16
16
  [learn] pending learning suggestions`)),x(A.dim(` ${o}`)),n.length===0){x(A.dim(` (none)
17
- `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";x(` ${A.cyan(t.proposalId)} ${A.dim(`[${r}]`)} ${bl(t)}`)}x(A.dim(`
17
+ `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";x(` ${A.cyan(t.proposalId)} ${A.dim(`[${r}]`)} ${Cl(t)}`)}x(A.dim(`
18
18
  Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
19
- `))}a(El,"printPending");function Tl(e){if(x(A.cyan(`
19
+ `))}a(Ml,"printPending");function Ll(e){if(x(A.cyan(`
20
20
  [learn] ${e.proposalId}`)),x(A.dim(` status: ${e.status}`)),x(A.dim(` kind : ${e.proposal.destination}`)),x(`
21
- Proposal:`),x(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Zs(e.proposal.consumerImpact),!e.applyPlan){x(A.dim(`
21
+ Proposal:`),x(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&ri(e.proposal.consumerImpact),!e.applyPlan){x(A.dim(`
22
22
  No F224 apply plan is attached. Approval records the handoff only.
23
23
  `));return}x(`
24
- Apply plan:`),x(A.dim(` kind : ${e.applyPlan.kind}`)),x(A.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)x(A.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&x(o.content);x()}a(Tl,"printDiff");async function Cl(e,o,n={}){let t=await kr(e,o,n);switch(t.status){case"approved_already_applied":x(A.green(`
24
+ Apply plan:`),x(A.dim(` kind : ${e.applyPlan.kind}`)),x(A.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)x(A.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&x(o.content);x()}a(Ll,"printDiff");async function Wl(e,o,n={}){let t=await br(e,o,n);switch(t.status){case"approved_already_applied":x(A.green(`
25
25
  [learn] approved ${o.proposalId}; files already match the apply plan.`)),x(A.dim(` recovered a pending proposal without applying it again.
26
26
  `));return;case"blocked_snapshot_conflict":x(A.red(`
27
27
  [learn] refusing to reapply ${o.proposalId}; ${t.relativePath} changed after the last snapshot.`)),x(A.dim(` snapshot: ${t.snapshotPath}`)),x(A.dim(` Review the file manually, then reject or recreate the learning proposal.
@@ -31,58 +31,58 @@ Apply plan:`),x(A.dim(` kind : ${e.applyPlan.kind}`)),x(A.dim(` skillRoot:
31
31
  [learn] ${o.proposalId} has no skill apply plan; nothing was applied.
32
32
  `));return;case"blocked_consumer_impact":x(A.yellow(`
33
33
  [learn] ${o.proposalId} requires manual consumer-impact review before approval.`)),x(A.dim(` Run /learn diff ${o.proposalId}, then /learn approve ${o.proposalId} --ack-impact after review.
34
- `)),Zs(t.impact),x();return;case"approved_handoff":x(A.green(`
34
+ `)),ri(t.impact),x();return;case"approved_handoff":x(A.green(`
35
35
  [learn] approved ${o.proposalId} as a downstream handoff.`)),x(A.dim(` F224 does not mutate workflow, memory, or reasoning carriers directly.
36
36
  `));return;case"blocked_not_pending":x(A.dim(`
37
37
  [learn] ${o.proposalId} is already ${t.reviewStatus}.
38
- `));return}}a(Cl,"approveProposal");function Xo(){x(A.cyan(`
38
+ `));return}}a(Wl,"approveProposal");function Vo(){x(A.cyan(`
39
39
  /learn - Review procedural learning suggestions`)),x(A.dim(" /learn pending List pending suggestions")),x(A.dim(" /learn diff <proposalId> Preview proposal and apply plan")),x(A.dim(" /learn approve <proposalId> [--ack-impact]")),x(A.dim(" /learn reject <proposalId> [reason]")),x(A.dim(` /learn help
40
- `))}a(Xo,"printHelp");var rt={name:"learn",description:"Review procedural learning suggestions (FEATURE_224)",usage:"/learn [pending|diff|approve|reject|help] [proposalId]",argumentHint:"pending | diff <id> | approve <id> | reject <id> [reason] | help",handler:a(async(e,o)=>{let n=Sl(o),t=(e[0]??"pending").toLowerCase();if(t==="help"||t==="-h"||t==="--help"){Xo();return}let{storePath:r,store:i}=await Al(n);if(t==="pending"||t==="list"){El(i.proposals,r);return}let l=e[1];if(!l){x(A.yellow(`
40
+ `))}a(Vo,"printHelp");var lt={name:"learn",description:"Review procedural learning suggestions (FEATURE_224)",usage:"/learn [pending|diff|approve|reject|help] [proposalId]",argumentHint:"pending | diff <id> | approve <id> | reject <id> [reason] | help",handler:a(async(e,o)=>{let n=Tl(o),t=(e[0]??"pending").toLowerCase();if(t==="help"||t==="-h"||t==="--help"){Vo();return}let{storePath:r,store:i}=await Pl(n);if(t==="pending"||t==="list"){Ml(i.proposals,r);return}let l=e[1];if(!l){x(A.yellow(`
41
41
  [learn] missing proposal id for ${t}.
42
- `)),Xo();return}let c=Rl(i.proposals,l);if(!c){x(A.yellow(`
42
+ `)),Vo();return}let c=_l(i.proposals,l);if(!c){x(A.yellow(`
43
43
  [learn] proposal not found: ${l}
44
- `));return}if(t==="diff"){Tl(c);return}if(t==="approve"){if(i.warnings.length>0){x(A.red(`
44
+ `));return}if(t==="diff"){Ll(c);return}if(t==="approve"){if(i.warnings.length>0){x(A.red(`
45
45
  [learn] refusing to mutate a corrupt learning store.
46
46
  `));return}if(c.status!=="pending"){x(A.dim(`
47
47
  [learn] ${c.proposalId} is already ${c.status}.
48
- `));return}let d=new Set(e.slice(2));await Cl(r,c,{acknowledgeImpact:d.has("--ack-impact")});return}if(t==="reject"){if(i.warnings.length>0){x(A.red(`
48
+ `));return}let d=new Set(e.slice(2));await Wl(r,c,{acknowledgeImpact:d.has("--ack-impact")});return}if(t==="reject"){if(i.warnings.length>0){x(A.red(`
49
49
  [learn] refusing to mutate a corrupt learning store.
50
50
  `));return}if(c.status!=="pending"){x(A.dim(`
51
51
  [learn] ${c.proposalId} is already ${c.status}.
52
- `));return}let d=e.slice(2).join(" ").trim();await hr(r,l,"rejected",d.length>0?{rejectedReason:d}:{}),x(A.dim(`
52
+ `));return}let d=e.slice(2).join(" ").trim();await $r(r,l,"rejected",d.length>0?{rejectedReason:d}:{}),x(A.dim(`
53
53
  [learn] rejected ${l}.
54
54
  `));return}x(A.yellow(`
55
55
  [learn] unknown subcommand: ${t}
56
- `)),Xo()},"handler"),detailedHelp:Xo};import*as Z from"node:fs";import*as Yo from"node:path";import p from"chalk";var ei=900*1e3,xe=new Map;function Il(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Il,"resolveCwd");function oi(e){let o;try{o=Z.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.error(`[memory] failed to read memory directory ${e}:`,t),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=Yo.join(e,t.name),i="",l=0;try{i=Z.readFileSync(r,"utf-8"),l=Z.statSync(r).mtimeMs}catch(m){console.error(`[memory] failed to read ${r}:`,m);continue}let d=fr(i).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=Yo.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(oi,"readTopicFiles");function _l(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(_l,"buildIndexLines");async function Pl(e,o){console.log(p.cyan(`
57
- [memory] per-project memory directory`)),console.log(p.dim(` ${e}`));let n=oi(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,i="";try{i=Z.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(p.yellow(`
56
+ `)),Vo()},"handler"),detailedHelp:Vo};import*as Z from"node:fs";import*as Jo from"node:path";import p from"chalk";var ii=900*1e3,xe=new Map;function Nl(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Nl,"resolveCwd");function ai(e){let o;try{o=Z.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.error(`[memory] failed to read memory directory ${e}:`,t),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=Jo.join(e,t.name),i="",l=0;try{i=Z.readFileSync(r,"utf-8"),l=Z.statSync(r).mtimeMs}catch(m){console.error(`[memory] failed to read ${r}:`,m);continue}let d=wr(i).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=Jo.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(ai,"readTopicFiles");function Ol(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(Ol,"buildIndexLines");async function Dl(e,o){console.log(p.cyan(`
57
+ [memory] per-project memory directory`)),console.log(p.dim(` ${e}`));let n=ai(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,i="";try{i=Z.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(p.yellow(`
58
58
  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(`
59
59
  --- MEMORY.md ---`)),i.trim().length===0?console.log(p.dim(" (empty)")):console.log(i.trimEnd()),console.log(p.cyan(`--- end ---
60
- `))}a(Pl,"listMemory");async function Ml(e,o){let n=!1;try{n=Z.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(p.yellow(`
60
+ `))}a(Dl,"listMemory");async function Ul(e,o){let n=!1;try{n=Z.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(p.yellow(`
61
61
  [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.
62
- `));return}let t=oi(e);if(t.length===0){console.log(p.yellow(`
62
+ `));return}let t=ai(e);if(t.length===0){console.log(p.yellow(`
63
63
  [memory] no topic files found \u2014 nothing to rebuild.`)),console.log(p.dim(` ${e}
64
- `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=_l(r).join(`
64
+ `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=Ol(r).join(`
65
65
  `)+`
66
66
  `;Z.writeFileSync(o,l,"utf-8"),console.log(p.green(`
67
- [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(Ml,"rebuildMemory");function Ll(e,o){console.log(p.cyan(`
67
+ [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(Ul,"rebuildMemory");function jl(e,o){console.log(p.cyan(`
68
68
  [memory] open these paths in your editor:`)),console.log(p.dim(" index :"),o),console.log(p.dim(" dir :"),e),console.log(p.dim(`
69
69
  (No in-REPL editor is provided \u2014 open the file in your usual editor.
70
70
  Use \`/memory rebuild\` after manual edits if you renamed any topic file.)
71
- `))}a(Ll,"openMemory");function Wl(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(Wl,"proposalLabel");function Nl(e){if(console.log(p.cyan(`
71
+ `))}a(jl,"openMemory");function Fl(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(Fl,"proposalLabel");function Hl(e){if(console.log(p.cyan(`
72
72
  [memory] pending memory proposals`)),e.length===0){console.log(p.dim(` (none)
73
- `));return}for(let o of e)console.log(` ${p.cyan(o.id)} ${p.dim(`[${o.action}]`)} ${Wl(o)}`);console.log(p.dim(`
73
+ `));return}for(let o of e)console.log(` ${p.cyan(o.id)} ${p.dim(`[${o.action}]`)} ${Fl(o)}`);console.log(p.dim(`
74
74
  Use /memory show <id>, /memory approve <id>, or /memory reject <id>.
75
- `))}a(Nl,"printMemoryInbox");function Ol(e){if(console.log(p.cyan(`
75
+ `))}a(Hl,"printMemoryInbox");function Bl(e){if(console.log(p.cyan(`
76
76
  [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(`
77
- --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Ol,"printMemoryProposal");function Dl(e){if(!e.applied){console.log(p.yellow(`
77
+ --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Bl,"printMemoryProposal");function Gl(e){if(!e.applied){console.log(p.yellow(`
78
78
  [memory] ${e.proposalId} was not applied.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
79
79
  `));return}console.log(p.green(`
80
- [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Dl,"printApplyResult");function Ul(e){if(!e.rejected){console.log(p.yellow(`
80
+ [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Gl,"printApplyResult");function ql(e){if(!e.rejected){console.log(p.yellow(`
81
81
  [memory] ${e.proposalId} was not rejected.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
82
82
  `));return}console.log(p.dim(`
83
- [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(Ul,"printRejectResult");function jl(e){console.log(p.cyan(`
84
- [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(jl,"printGovernanceReport");function Qs(){console.log(p.cyan(`
85
- /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(Qs,"printHelp");function Fl(){console.log(p.bold(`
83
+ [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(ql,"printRejectResult");function zl(e){console.log(p.cyan(`
84
+ [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(zl,"printGovernanceReport");function si(){console.log(p.cyan(`
85
+ /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(si,"printHelp");function Kl(){console.log(p.bold(`
86
86
  /memory - Inspect or rebuild project memory
87
87
  `)),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
88
88
  `)),console.log("Description:"),console.log(p.dim(` Each project gets its own memory directory under your KodaX agent
@@ -90,18 +90,18 @@ Apply plan:`),x(A.dim(` kind : ${e.applyPlan.kind}`)),x(A.dim(` skillRoot:
90
90
  owns reads/writes; this command is your escape hatch when the
91
91
  MEMORY.md index drifts from the topic files on disk.
92
92
  `)),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.
93
- `))}a(Fl,"printDetailedHelp");var st={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=Il(o),r=dr(t),i=ur(t),l=(e[0]??"list").toLowerCase(),c=n.createKodaXOptions?.().memoryReviewer,d=yr({cwd:t,...c!==void 0?{memoryReviewer:c}:{}});if(l==="help"||l==="--help"||l==="-h"){Qs();return}if(l==="list"){await Pl(r,i);return}if(l==="pending"||l==="inbox"){Nl(await d.listInbox());return}if(l==="show"){let u=e[1];if(u===void 0){console.log(p.yellow(`
93
+ `))}a(Kl,"printDetailedHelp");var ct={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=Nl(o),r=pr(t),i=gr(t),l=(e[0]??"list").toLowerCase(),c=n.createKodaXOptions?.().memoryReviewer,d=Sr({cwd:t,...c!==void 0?{memoryReviewer:c}:{}});if(l==="help"||l==="--help"||l==="-h"){si();return}if(l==="list"){await Dl(r,i);return}if(l==="pending"||l==="inbox"){Hl(await d.listInbox());return}if(l==="show"){let u=e[1];if(u===void 0){console.log(p.yellow(`
94
94
  [memory] missing proposal id for show.
95
95
  `));return}let f=await d.showProposal(u);if(f===void 0){console.log(p.yellow(`
96
96
  [memory] proposal not found: ${u}
97
- `));return}Ol(f),Hl(t,f.id,f.expectedFingerprints);return}if(l==="approve"){let u=e[1];if(u===void 0){console.log(p.yellow(`
97
+ `));return}Bl(f),Xl(t,f.id,f.expectedFingerprints);return}if(l==="approve"){let u=e[1];if(u===void 0){console.log(p.yellow(`
98
98
  [memory] missing proposal id for approve.
99
- `));return}let f=Bl(t,u);if(f===void 0){console.log(p.yellow(`
99
+ `));return}let f=Vl(t,u);if(f===void 0){console.log(p.yellow(`
100
100
  [memory] preview required before approve: /memory show ${u}
101
- `));return}let m=await d.approveProposal(u,f);xe.delete(Vo(t,u)),Dl(m);return}if(l==="reject"){let u=e[1];if(u===void 0){console.log(p.yellow(`
101
+ `));return}let m=await d.approveProposal(u,f);xe.delete(Yo(t,u)),Gl(m);return}if(l==="reject"){let u=e[1];if(u===void 0){console.log(p.yellow(`
102
102
  [memory] missing proposal id for reject.
103
- `));return}let f=await d.rejectProposal(u,e.slice(2).join(" ").trim());xe.delete(Vo(t,u)),Ul(f);return}if(l==="curate"){jl(await d.runCurator());return}if(l==="rebuild"){await Ml(r,i);return}if(l==="open"){Ll(r,i);return}console.log(p.yellow(`
104
- [memory] unknown subcommand: ${l}`)),Qs()},"handler"),detailedHelp:Fl};function Vo(e,o){return`${e}\0${o}`}a(Vo,"previewCacheKey");function Hl(e,o,n){Gl(Date.now()),xe.set(Vo(e,o),{fingerprints:n,createdAtMs:Date.now()})}a(Hl,"cachePreviewFingerprints");function Bl(e,o){let n=Vo(e,o),t=xe.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>ei){xe.delete(n);return}return t.fingerprints}}a(Bl,"readCachedPreviewFingerprints");function Gl(e){for(let[o,n]of xe)e-n.createdAtMs>ei&&xe.delete(o)}a(Gl,"pruneExpiredPreviewFingerprints");import T from"chalk";function ni(){console.log(`
103
+ `));return}let f=await d.rejectProposal(u,e.slice(2).join(" ").trim());xe.delete(Yo(t,u)),ql(f);return}if(l==="curate"){zl(await d.runCurator());return}if(l==="rebuild"){await Ul(r,i);return}if(l==="open"){jl(r,i);return}console.log(p.yellow(`
104
+ [memory] unknown subcommand: ${l}`)),si()},"handler"),detailedHelp:Kl};function Yo(e,o){return`${e}\0${o}`}a(Yo,"previewCacheKey");function Xl(e,o,n){Yl(Date.now()),xe.set(Yo(e,o),{fingerprints:n,createdAtMs:Date.now()})}a(Xl,"cachePreviewFingerprints");function Vl(e,o){let n=Yo(e,o),t=xe.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>ii){xe.delete(n);return}return t.fingerprints}}a(Vl,"readCachedPreviewFingerprints");function Yl(e){for(let[o,n]of xe)e-n.createdAtMs>ii&&xe.delete(o)}a(Yl,"pruneExpiredPreviewFingerprints");import T from"chalk";function li(){console.log(`
105
105
  ${T.bold("/goal")} \u2014 persistent session goal
106
106
 
107
107
  ${T.bold("Subcommands:")}
@@ -117,20 +117,20 @@ ${T.bold("Notes:")}
117
117
  - Token budget is optional; set it only when you want a hard ceiling.
118
118
  - update_goal({complete}) is verifier-gated; the agent cannot
119
119
  self-declare done without runtime confirmation.
120
- `.trim())}a(ni,"printHelp");function ql(e){let o=null,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!Mn(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(i.startsWith("--tokens=")){let l=i.slice(9),c=Number(l);if(!Mn(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(i.startsWith("--"))return{error:`unknown flag: ${i}`};n.push(i)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(ql,"parseCreateArgs");function zl(e){if(!e)return T.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${T.bold("Goal:")} ${e.objective}`,`${T.bold("Status:")} ${e.status}`,`${T.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${T.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${T.bold("Token budget:")} ${T.dim("none")}`);return o.push(`${T.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${T.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
121
- `)}a(zl,"renderStatus");async function po(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=vr(e.lineage,n,t),await o.saveSession()}a(po,"persist");async function Kl(e,o,n){if(!o.lineage){console.log(T.red("[/goal] no active session lineage"));return}let t=Ne(o.lineage);if(t&&t.status!=="complete"){console.log(T.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=ql(e);if("error"in r){console.log(T.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await po(o,n,null,"cleared");let i=Mr(r.objective,r.tokenBudget);await po(o,n,i,"created"),console.log(T.green(`[/goal] created: "${i.objective}"`)),i.tokenBudget!==null&&console.log(T.dim(` budget: ${i.tokenBudget} tokens`))}catch(i){let l=i instanceof Error?i.message:String(i);console.log(T.red(`[/goal] ${l}`))}}a(Kl,"doCreate");async function Xl(e){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let o=Ne(e.lineage);console.log(zl(o))}a(Xl,"doStatus");async function Vl(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let n=Ne(e.lineage);if(!n){console.log(T.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(T.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=Lr(n);await po(e,o,t,"paused"),console.log(T.green("[/goal] paused"))}a(Vl,"doPause");async function Yl(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let n=Ne(e.lineage);if(!n){console.log(T.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(T.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=Wr(n);await po(e,o,t,"resumed"),console.log(T.green("[/goal] resumed"))}a(Yl,"doResume");async function Jl(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}if(!Ne(e.lineage)){console.log(T.yellow("[/goal] no goal to clear"));return}await po(e,o,null,"cleared"),console.log(T.green("[/goal] cleared"))}a(Jl,"doClear");var ti={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"){ni();return}if(t==="status"){await Xl(o);return}if(t==="pause"){await Vl(o,n);return}if(t==="resume"){await Yl(o,n);return}if(t==="clear"){await Jl(o,n);return}await Kl(e,o,n)},"handler"),detailedHelp:ni};import{existsSync as Ei}from"node:fs";import{join as ee}from"node:path";import w from"chalk";import lt from"path";import{createHash as tc}from"crypto";import{execFile as Zl}from"child_process";import Ql from"fs";import it from"path";import{promisify as ec}from"util";var oc=ec(Zl);function me(e){if(!(!e||!e.trim()))return it.resolve(e).replace(/\\/g,"/")}a(me,"normalizePath");async function go(e,o){try{let{stdout:n}=await oc("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}a(go,"gitStdout");function nc(e){let o=me(e);if(o)return it.posix.basename(o)===".git"?it.posix.dirname(o):o}a(nc,"deriveCanonicalRepoRoot");async function zm(e={}){let o=me(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=me(await go(o,["rev-parse","--show-toplevel"])),t=await go(n??o,["rev-parse","--path-format=absolute","--git-common-dir"])??await go(n??o,["rev-parse","--git-common-dir"]),r=await go(n??o,["branch","--show-current"])??await go(n??o,["rev-parse","--abbrev-ref","HEAD"]);return{canonicalRepoRoot:nc(t)??n,workspaceRoot:n,executionCwd:o,branch:r&&r!=="HEAD"?r:void 0,workspaceKind:e.workspaceKind??"detected"}}a(zm,"inspectWorkspaceRuntime");function Km(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:me(e.canonicalRepoRoot)===me(o.canonicalRepoRoot)}a(Km,"isSameCanonicalRepo");function Xm(e){return!!(e?.workspaceRoot&&Ql.existsSync(e.workspaceRoot))}a(Xm,"workspaceExists");function ri(e){let o=me(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=me(e.runtimeInfo?.executionCwd??o),t=me(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(ri,"resolveSessionRuntimeInfo");function at(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(at,"formatWorkspaceTruth");var si="_unknown",ii=80;function rc(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(rc,"caseFold");function sc(e){return rc(lt.resolve(e).replace(/\\/g,"/"))}a(sc,"normalizeRoot");function ai(e){return tc("sha256").update(e).digest("hex").slice(0,10)}a(ai,"shortHash");function ic(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>ii?o.slice(o.length-ii):o}a(ic,"slugify");function Ae(e){if(!e||!e.trim())return{key:si,canonicalRoot:null,displayName:si};let o=sc(e),n=ic(o),t=n?`${n}-${ai(o)}`:ai(o),r=lt.basename(lt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Ae,"deriveProjectKeyFromRoot");function ep(e){let o=ri({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Ae(n)}a(ep,"deriveProjectKeyFromData");import Re from"chalk";function Jo(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Jo,"resolveLearningCommandCwd");function Ge(e=""){process.stdout.write(`${e}
122
- `)}a(Ge,"writeOutput");function ac(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(ac,"matchesFilter");function lc(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(lc,"headingForFilter");function cc(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(cc,"proposalLabel");async function Zo(e,o){let n=Co(e),t=await To(n);for(let i of t.warnings)Ge(Re.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>ac(i,o));if(Ge(Re.cyan(`
123
- [learn] ${lc(o)}`)),Ge(Re.dim(` ${n}`)),r.length===0){Ge(Re.dim(` (none)
124
- `));return}for(let i of r)Ge(` ${Re.cyan(i.proposalId)} ${Re.dim(`[${i.proposal.destination}]`)} ${cc(i)}`);Ge(Re.dim(`
120
+ `.trim())}a(li,"printHelp");function Jl(e){let o=null,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!On(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(i.startsWith("--tokens=")){let l=i.slice(9),c=Number(l);if(!On(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(i.startsWith("--"))return{error:`unknown flag: ${i}`};n.push(i)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(Jl,"parseCreateArgs");function Zl(e){if(!e)return T.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${T.bold("Goal:")} ${e.objective}`,`${T.bold("Status:")} ${e.status}`,`${T.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${T.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${T.bold("Token budget:")} ${T.dim("none")}`);return o.push(`${T.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${T.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
121
+ `)}a(Zl,"renderStatus");async function go(e,o,n,t){if(!e.lineage)throw new Error("session lineage unavailable \u2014 open or start a new session before using /goal");e.lineage=xr(e.lineage,n,t),await o.saveSession()}a(go,"persist");async function Ql(e,o,n){if(!o.lineage){console.log(T.red("[/goal] no active session lineage"));return}let t=Oe(o.lineage);if(t&&t.status!=="complete"){console.log(T.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=Jl(e);if("error"in r){console.log(T.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await go(o,n,null,"cleared");let i=Ur(r.objective,r.tokenBudget);await go(o,n,i,"created"),console.log(T.green(`[/goal] created: "${i.objective}"`)),i.tokenBudget!==null&&console.log(T.dim(` budget: ${i.tokenBudget} tokens`))}catch(i){let l=i instanceof Error?i.message:String(i);console.log(T.red(`[/goal] ${l}`))}}a(Ql,"doCreate");async function ec(e){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let o=Oe(e.lineage);console.log(Zl(o))}a(ec,"doStatus");async function oc(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let n=Oe(e.lineage);if(!n){console.log(T.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(T.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=jr(n);await go(e,o,t,"paused"),console.log(T.green("[/goal] paused"))}a(oc,"doPause");async function nc(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let n=Oe(e.lineage);if(!n){console.log(T.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(T.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=Fr(n);await go(e,o,t,"resumed"),console.log(T.green("[/goal] resumed"))}a(nc,"doResume");async function tc(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}if(!Oe(e.lineage)){console.log(T.yellow("[/goal] no goal to clear"));return}await go(e,o,null,"cleared"),console.log(T.green("[/goal] cleared"))}a(tc,"doClear");var ci={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"){li();return}if(t==="status"){await ec(o);return}if(t==="pause"){await oc(o,n);return}if(t==="resume"){await nc(o,n);return}if(t==="clear"){await tc(o,n);return}await Ql(e,o,n)},"handler"),detailedHelp:li};import{existsSync as Mi}from"node:fs";import{join as ee}from"node:path";import w from"chalk";import ft from"path";import{createHash as cc}from"crypto";import{execFile as rc}from"child_process";import sc from"fs";import dt from"path";import{promisify as ic}from"util";var ac=ic(rc);function me(e){if(!(!e||!e.trim()))return dt.resolve(e).replace(/\\/g,"/")}a(me,"normalizePath");async function wo(e,o){try{let{stdout:n}=await ac("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}a(wo,"gitStdout");function lc(e){let o=me(e);if(o)return dt.posix.basename(o)===".git"?dt.posix.dirname(o):o}a(lc,"deriveCanonicalRepoRoot");async function np(e={}){let o=me(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=me(await wo(o,["rev-parse","--show-toplevel"])),t=await wo(n??o,["rev-parse","--path-format=absolute","--git-common-dir"])??await wo(n??o,["rev-parse","--git-common-dir"]),r=await wo(n??o,["branch","--show-current"])??await wo(n??o,["rev-parse","--abbrev-ref","HEAD"]);return{canonicalRepoRoot:lc(t)??n,workspaceRoot:n,executionCwd:o,branch:r&&r!=="HEAD"?r:void 0,workspaceKind:e.workspaceKind??"detected"}}a(np,"inspectWorkspaceRuntime");function tp(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:me(e.canonicalRepoRoot)===me(o.canonicalRepoRoot)}a(tp,"isSameCanonicalRepo");function rp(e){return!!(e?.workspaceRoot&&sc.existsSync(e.workspaceRoot))}a(rp,"workspaceExists");function di(e){let o=me(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=me(e.runtimeInfo?.executionCwd??o),t=me(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(di,"resolveSessionRuntimeInfo");function ut(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(ut,"formatWorkspaceTruth");var ui="_unknown",fi=80;function dc(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(dc,"caseFold");function uc(e){return dc(ft.resolve(e).replace(/\\/g,"/"))}a(uc,"normalizeRoot");function mi(e){return cc("sha256").update(e).digest("hex").slice(0,10)}a(mi,"shortHash");function fc(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>fi?o.slice(o.length-fi):o}a(fc,"slugify");function Ae(e){if(!e||!e.trim())return{key:ui,canonicalRoot:null,displayName:ui};let o=uc(e),n=fc(o),t=n?`${n}-${mi(o)}`:mi(o),r=ft.basename(ft.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Ae,"deriveProjectKeyFromRoot");function dp(e){let o=di({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Ae(n)}a(dp,"deriveProjectKeyFromData");import Re from"chalk";function Zo(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Zo,"resolveLearningCommandCwd");function qe(e=""){process.stdout.write(`${e}
122
+ `)}a(qe,"writeOutput");function mc(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(mc,"matchesFilter");function pc(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(pc,"headingForFilter");function gc(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(gc,"proposalLabel");async function Qo(e,o){let n=Co(e),t=await To(n);for(let i of t.warnings)qe(Re.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>mc(i,o));if(qe(Re.cyan(`
123
+ [learn] ${pc(o)}`)),qe(Re.dim(` ${n}`)),r.length===0){qe(Re.dim(` (none)
124
+ `));return}for(let i of r)qe(` ${Re.cyan(i.proposalId)} ${Re.dim(`[${i.proposal.destination}]`)} ${gc(i)}`);qe(Re.dim(`
125
125
  Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
126
- `))}a(Zo,"printLearningPendingForFilter");import{join as Vc}from"node:path";import un from"chalk";import{existsSync as se,readdirSync as Sc,readFileSync as nn,writeFileSync as pp}from"node:fs";import{dirname as bc,join as Q}from"node:path";import E from"chalk";import{existsSync as dc,readFileSync as uc}from"node:fs";var li=4,ci=180,di=6e3,ui=360,ct="[truncated]";function Ee(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ee,"detectWorkflowLocale");function wo(...e){return Ee(e.filter(o=>typeof o=="string").join(`
127
- `))}a(wo,"inferWorkflowLocaleFromParts");function pe(e,o={}){let n=e.trim();return o.full===!0||n.length<=di?n:`${n.slice(0,di).trimEnd()}
126
+ `))}a(Qo,"printLearningPendingForFilter");import{join as od}from"node:path";import fn from"chalk";import{existsSync as se,readdirSync as Tc,readFileSync as tn,writeFileSync as xp}from"node:fs";import{dirname as Cc,join as Q}from"node:path";import E from"chalk";import{existsSync as wc,readFileSync as hc}from"node:fs";var pi=4,gi=180,wi=6e3,hi=360,mt="[truncated]";function Ee(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ee,"detectWorkflowLocale");function ho(...e){return Ee(e.filter(o=>typeof o=="string").join(`
127
+ `))}a(ho,"inferWorkflowLocaleFromParts");function pe(e,o={}){let n=e.trim();return o.full===!0||n.length<=wi?n:`${n.slice(0,wi).trimEnd()}
128
128
 
129
- ${ct}`}a(pe,"trimResultPreview");function dt(e){return e.includes(ct)}a(dt,"isWorkflowResultPreviewTruncated");function fc(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(fc,"formatWorkflowResultTruncationHint");function qe(e,o,n){let t=e.lastIndexOf(ct);return t<0?e:`${e.slice(0,t).trimEnd()}
129
+ ${mt}`}a(pe,"trimResultPreview");function pt(e){return e.includes(mt)}a(pt,"isWorkflowResultPreviewTruncated");function yc(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(yc,"formatWorkflowResultTruncationHint");function ze(e,o,n){let t=e.lastIndexOf(mt);return t<0?e:`${e.slice(0,t).trimEnd()}
130
130
 
131
- ${fc(o,n)}`}a(qe,"replaceWorkflowResultTruncationMarker");function mc(e){let o=e.replace(/\s+/g," ").trim();return o.length<=ui?o:`${o.slice(0,ui).trimEnd()}...`}a(mc,"trimWorkflowLaunchSummary");function ge(e,o={}){if(typeof e=="string"&&e.trim().length>0)return pe(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return pe(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return pe(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 pe(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 pe(n,o)}}catch{}}a(ge,"formatResult");function ho(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&K(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>K(d,"name")==="synthesize")??n[0],i=r?K(r,"summary"):void 0;if(i)return pe(i,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?K(l,"summary")??K(l,"error"):void 0;return c?pe(c,o):void 0}a(ho,"formatFinalEventSummary");function pc(e,o={}){if(!(!e.path||!dc(e.path)))try{let n=JSON.parse(uc(e.path,"utf8")),t=ge(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?pe(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(pc,"formatArtifactPreview");function ze(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let i=e[r];if(!i)continue;let l=pc(i,n);if(l)return o==="zh"?`\u4EA7\u7269 ${i.name}:
131
+ ${yc(o,n)}`}a(ze,"replaceWorkflowResultTruncationMarker");function kc(e){let o=e.replace(/\s+/g," ").trim();return o.length<=hi?o:`${o.slice(0,hi).trimEnd()}...`}a(kc,"trimWorkflowLaunchSummary");function ge(e,o={}){if(typeof e=="string"&&e.trim().length>0)return pe(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return pe(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return pe(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 pe(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 pe(n,o)}}catch{}}a(ge,"formatResult");function yo(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&K(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>K(d,"name")==="synthesize")??n[0],i=r?K(r,"summary"):void 0;if(i)return pe(i,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?K(l,"summary")??K(l,"error"):void 0;return c?pe(c,o):void 0}a(yo,"formatFinalEventSummary");function vc(e,o={}){if(!(!e.path||!wc(e.path)))try{let n=JSON.parse(hc(e.path,"utf8")),t=ge(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?pe(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(vc,"formatArtifactPreview");function Ke(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let i=e[r];if(!i)continue;let l=vc(i,n);if(l)return o==="zh"?`\u4EA7\u7269 ${i.name}:
132
132
  ${l}`:`Artifact ${i.name}:
133
- ${l}`}if(e.length===0)return;let t=e.map(r=>r.name).join(", ");return o==="zh"?`\u5DF2\u751F\u6210\u4EA7\u7269: ${t}`:`Artifacts created: ${t}`}a(ze,"formatArtifactResult");function ut(e){let o=e.resultText?qe(e.resultText,e.runId,e.locale):void 0;if(e.locale==="zh"){let t=e.resultText&&e.isFallbackPreview!==!0?`Workflow \u5DF2\u5B8C\u6210\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`:`Workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7ED3\u679C\u5951\u7EA6\u5931\u8D25\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`;if(o){let r=e.isFallbackPreview===!0?"\u7ED3\u679C\u5951\u7EA6\u5F02\u5E38\uFF1Aworkflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u5B8C\u6574\u6700\u7EC8\u7ED3\u679C\u3002\u4EE5\u4E0B\u662F\u6700\u540E\u7EFC\u5408\u8F93\u51FA\uFF1A":"\u6700\u7EC8\u7ED3\u679C\uFF1A";return`${t}
133
+ ${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(Ke,"formatArtifactResult");function gt(e){let o=e.resultText?ze(e.resultText,e.runId,e.locale):void 0;if(e.locale==="zh"){let t=e.resultText&&e.isFallbackPreview!==!0?`Workflow \u5DF2\u5B8C\u6210\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`:`Workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7ED3\u679C\u5951\u7EA6\u5931\u8D25\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`;if(o){let r=e.isFallbackPreview===!0?"\u7ED3\u679C\u5951\u7EA6\u5F02\u5E38\uFF1Aworkflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u5B8C\u6574\u6700\u7EC8\u7ED3\u679C\u3002\u4EE5\u4E0B\u662F\u6700\u540E\u7EFC\u5408\u8F93\u51FA\uFF1A":"\u6700\u7EC8\u7ED3\u679C\uFF1A";return`${t}
134
134
 
135
135
  ${r}
136
136
 
@@ -140,79 +140,79 @@ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7
140
140
  ${t}
141
141
 
142
142
  ${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(`
143
- `)}a(ut,"formatWorkflowCompletionAnswer");function ft(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),i=mc(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${i}`,`\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(`
143
+ `)}a(gt,"formatWorkflowCompletionAnswer");function wt(e){let o=e.summary.phases.length>0?e.summary.phases.join(" -> "):"dynamic",n=e.summary.maxAgents===null?"unbounded":String(e.summary.maxAgents),t=e.summary.plannedAgents===void 0?e.locale==="zh"?`\u6700\u591A ${n} \u4E2A\u667A\u80FD\u4F53`:`up to ${n} agents`:e.locale==="zh"?`\u8BA1\u5212\u7EA6 ${e.summary.plannedAgents} \u4E2A\u667A\u80FD\u4F53\uFF0C\u5B89\u5168\u4E0A\u9650 ${n}`:`about ${e.summary.plannedAgents} planned agents, safety cap ${n}`,r=e.summary.maxConcurrency===null?"unbounded":String(e.summary.maxConcurrency),i=kc(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${i}`,`\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(`
144
144
  `)}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: ${i}`,`Phases: ${o}; scale: ${t}, ${r} concurrent. ${l}`,"Progress will update below, and I will summarize the result when it finishes."].join(`
145
- `)}a(ft,"formatWorkflowLaunchAnswer");function K(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(K,"readEventString");function mt(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"&&K(e,"status")!=="completed")return;let t=K(e,"summary")??K(e,"error");if(!t)return;let r=K(e,"summaryKind");if(r==="pending")return;let i=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=K(e,"name")??K(e,"taskId")??"agent";return $c(l,t,o,n,i)}a(mt,"formatWorkflowAgentDigest");function gc(e){let o=e.replace(/\s+/g," ").trim();return o.length<=ci?o:`${o.slice(0,ci).trimEnd()}...`}a(gc,"trimWorkflowAgentDigestExcerpt");function wc(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(wc,"isHighSignalWorkflowAgentDigestLine");function hc(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(hc,"isLowInformationWorkflowAgentDigestLine");function yc(e){return e.replace(/\s+/g," ").trim()}a(yc,"compactWorkflowAgentDigestLine");function kc(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=yc(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!hc(t))return o.truncateLines===!1?t:gc(t)}a(kc,"normalizeWorkflowAgentDigestLine");function vc(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let i=kc(r,o);if(!i)continue;let l=wc(i)?n:t;n.includes(i)||t.includes(i)||l.push(i)}return n.length>0?n.slice(0,li):t.length>0?t.slice(0,li):[]}a(vc,"extractWorkflowAgentDigestExcerpts");function $c(e,o,n,t,r="excerpt"){let i=r==="digest",c=vc(o,{truncateLines:!i}).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"?i?`\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`:i?`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(`
145
+ `)}a(wt,"formatWorkflowLaunchAnswer");function K(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(K,"readEventString");function ht(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"&&K(e,"status")!=="completed")return;let t=K(e,"summary")??K(e,"error");if(!t)return;let r=K(e,"summaryKind");if(r==="pending")return;let i=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=K(e,"name")??K(e,"taskId")??"agent";return Ec(l,t,o,n,i)}a(ht,"formatWorkflowAgentDigest");function $c(e){let o=e.replace(/\s+/g," ").trim();return o.length<=gi?o:`${o.slice(0,gi).trimEnd()}...`}a($c,"trimWorkflowAgentDigestExcerpt");function Sc(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(Sc,"isHighSignalWorkflowAgentDigestLine");function bc(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(bc,"isLowInformationWorkflowAgentDigestLine");function xc(e){return e.replace(/\s+/g," ").trim()}a(xc,"compactWorkflowAgentDigestLine");function Ac(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=xc(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!bc(t))return o.truncateLines===!1?t:$c(t)}a(Ac,"normalizeWorkflowAgentDigestLine");function Rc(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let i=Ac(r,o);if(!i)continue;let l=Sc(i)?n:t;n.includes(i)||t.includes(i)||l.push(i)}return n.length>0?n.slice(0,pi):t.length>0?t.slice(0,pi):[]}a(Rc,"extractWorkflowAgentDigestExcerpts");function Ec(e,o,n,t,r="excerpt"){let i=r==="digest",c=Rc(o,{truncateLines:!i}).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"?i?`\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`:i?`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(`
146
146
  `):[u,...c,d].join(`
147
- `)}a($c,"formatWorkflowAgentLongDigest");function Qo(e){return(o,n="en")=>mt(o,n,e)}a(Qo,"createWorkflowAgentDigestLimiter");import _ from"chalk";function pt(){return[`${_.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${_.bold("Subcommands:")}`,` ${_.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${_.cyan("/workflow create <request>")} Build & run a workflow for a request. The Worker investigates first, then authors it (scout-then-author). Requires AMA or AMAW \u2014 Solo (SA) mode runs no workflows.`,` ${_.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${_.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${_.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${_.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${_.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${_.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${_.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${_.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${_.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${_.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${_.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${_.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${_.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${_.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${_.bold("Examples:")}`,` ${_.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${_.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${_.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${_.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${_.dim("/workflow prune --dry-run")}`,` ${_.dim("/workflow save run-lx3 generated-audit")}`,"",`${_.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(`
148
- `)}a(pt,"renderWorkflowHelp");function en(){console.log(`
149
- ${pt()}
150
- `)}a(en,"printWorkflowHelp");var xc=new Set(["completed","failed","stopped","denied","cancelled"]);function gt(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${E.cyan(o.name)} \u2014 ${o.description}`).join(`
151
- `)}a(gt,"formatWorkflowList");var Ac=6,Rc=900;function Ec(e){let o=e.replace(/\r\n/g,`
147
+ `)}a(Ec,"formatWorkflowAgentLongDigest");function en(e){return(o,n="en")=>ht(o,n,e)}a(en,"createWorkflowAgentDigestLimiter");import P from"chalk";function yt(){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 or AMAW \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(`
148
+ `)}a(yt,"renderWorkflowHelp");function on(){console.log(`
149
+ ${yt()}
150
+ `)}a(on,"printWorkflowHelp");var Ic=new Set(["completed","failed","stopped","denied","cancelled"]);function kt(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${E.cyan(o.name)} \u2014 ${o.description}`).join(`
151
+ `)}a(kt,"formatWorkflowList");var Pc=6,_c=900;function Mc(e){let o=e.replace(/\r\n/g,`
152
152
  `).replace(/\r/g,`
153
153
  `).split(`
154
- `),n=[],t=0,r=!1;for(let l of o){if(n.length>=Ac)break;let c=` ${l}`,d=Rc-t;if(d<=0){r=!0;break}if(c.length>d){d>16&&n.push(`${c.slice(0,d-4)} ...`),r=!0;break}n.push(c),t+=c.length+1}let i=Math.max(0,o.length-n.length);if(i>0||r){let l=i>0?`${i} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(Ec,"renderApprovalScriptPreview");function ie(e,o){let n=a(i=>i===null?"\u221E":String(i),"cap"),t=e.plannedAgents===void 0?void 0:String(e.plannedAgents),r=t===void 0?`agent total cap: ${n(e.maxAgents)}`:`planned agents: ${t} \xB7 agent safety cap: ${n(e.maxAgents)}`;return[`Run workflow ${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:",...Ec(o.rawScript)]:[]]:[]].join(`
155
- `)}a(ie,"renderApprovalPrompt");function ko(e){if(!se(e))return[];let o=[];for(let n of Sc(e)){let t=Q(e,n,"run.json");if(se(t))try{let r=JSON.parse(nn(t,"utf8"));o.push({runId:n,workflow:typeof r.workflow=="string"?r.workflow:"?",status:typeof r.status=="string"?r.status:"?",totalSpawned:typeof r.totalSpawned=="number"?r.totalSpawned:0,endedAt:typeof r.endedAt=="number"?r.endedAt:0})}catch{}}return o.sort((n,t)=>t.endedAt-n.endedAt)}a(ko,"readWorkflowRuns");function Tc(e){let o=Q(e,"events.jsonl");if(!se(o))return[];let n=nn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let i=JSON.parse(r);if(typeof i!="object"||i===null)continue;let l=i;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(Tc,"readWorkflowEvents");function Cc(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(Cc,"readStringArray");function on(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(on,"readNonEmptyString");function fi(e,o){let n=o?on(o.scriptSnapshotPath):Q(e,"script.js"),t=o?on(o.manifestSnapshotPath):Q(e,"manifest.json");return!n||!t?!1:se(n)&&se(t)}a(fi,"hasGeneratedWorkflowSnapshot");function pi(e,o){if(o)return fi(e,o);let n=Q(e,"run.json");if(!se(n))return!1;try{let t=JSON.parse(nn(n,"utf8"));return typeof t=="object"&&t!==null?fi(e,t):!1}catch{return!1}}a(pi,"hasRerunnableGeneratedWorkflowRun");function Ic(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(Ic,"readWorkflowFailure");function vo(e,o){let n=Q(e,o),t=Q(n,"run.json"),r=Tc(n),i=Ic(r);if(!(!se(t)&&r.length===0)){if(!se(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let l=JSON.parse(nn(t,"utf8")),c=on(l.scriptSnapshotPath),d=on(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:pi(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...i?{error:i}:{},artifacts:Cc(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a(vo,"readWorkflowRunDetail");function yo(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(yo,"statusIcon");function wt(e){return xc.has(e)}a(wt,"isTerminalWorkflowStatus");function gi(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(gi,"formatProcessListMeta");function ht(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let i=t.map(l=>{let c=gi(o.processSnapshots?.get(l.runId));return` ${yo(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&&i.push(E.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),i.join(`
156
- `)}let r=t.map(i=>` ${yo(i.status)} ${E.cyan(i.workflow)} ${E.dim(i.runId)} \u2014 ${i.status} (${i.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(`
157
- `)}a(ht,"formatRunsList");function yt(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=gi(o.processSnapshots?.get(n.runId));return` ${yo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?E.dim(` [${t}]`):""}`}).join(`
158
- `):e.map(n=>` ${yo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
159
- `)}a(yt,"formatManagedRunsList");function Ke(e){return e.status==="running"||e.status==="paused"}a(Ke,"isActiveManagedWorkflowRun");function kt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${yo(o.status)} ${E.cyan(o.workflow)} ${E.dim(o.runId)} - ${o.status}`).join(`
160
- `)}a(kt,"formatWorkflowPruneCandidates");function vt(e,o){return e.filter(Ke)[0]?.runId??e[0]?.runId??o[0]?.runId}a(vt,"selectDefaultWorkflowRunId");function $t(e){return e.find(Ke)?.runId}a($t,"selectDefaultActiveWorkflowRunId");function mi(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(mi,"formatTime");function _c(e,o=10){let n=e.map(an).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(_c,"formatRecentWorkflowEvents");function St(e,o){return o?.canRerun??(e?.runDir?pi(e.runDir):!1)}a(St,"canRerunWorkflowRun");function Pc(e){return e?e.artifacts.map(o=>({name:o,path:Q(e.runDir,"artifacts",`${Ir(o)}.json`)})):[]}a(Pc,"workflowArtifactRefs");function bt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(bt,"formatWorkflowNextActions");function wi(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(wi,"formatWorkflowFailureAction");function xt(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",i=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=mi(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,y=mi(e?.endedAt??o?.endedAt??m),v=t?.error??e?.error??o?.error,k=o?.artifacts??t?.artifacts?.map(ce=>ce.name)??[],$=Pc(o),g=e?.resultText,R=n.full===!0||g===void 0?ze($,Ee(r),{full:n.full===!0}):void 0,I=n.full===!0?R??g??t?.resultSummary:g!==void 0?ge(g):t?.resultSummary!==void 0?ge(t.resultSummary):R,M=I?qe(I,i,Ee(I)):void 0,X=n.full===!0||!I||!dt(I)?"result:":"result preview:",V=o?_c(o.events):[],eo=St(e,o);return[` ${E.cyan(r)} ${E.dim(i)}`,...t?.displayName&&t.displayName!==r?[` display name: ${t.displayName}`]:[],` status: ${l}`,...t?.source?[` source: ${t.source}`]:[],...t?.savedWorkflowName?[` saved workflow: ${t.savedWorkflowName}`]:[],...t?.sourceRunId?[` source run: ${t.sourceRunId}`]:[],...t?.sourceWorkflowName?[` source workflow: ${t.sourceWorkflowName}`]:[],...t?.revisionOf?[` revision of: ${t.revisionOf}`]:[],` agents: ${c}`,` events: ${d}`,...f?[` started: ${f}`]:[],...y?[` ended: ${y}`]:[],...u?[` run dir: ${u}`]:[],...k.length>0?[` artifacts: ${k.join(", ")}`]:[],...v?[` error: ${v}`]:[],...M?["",` ${X}`,...M.split(`
161
- `).map(ce=>` ${ce}`)]:[],...V.length>0?[""," recent events:",...V.map(ce=>` ${ce.trimEnd()}`)]:[],"",` next: ${bt(i,eo)}`].join(`
162
- `)}a(xt,"formatWorkflowRunSnapshot");function At(e){return{project:Q(e,".kodax","workflows"),personal:H("workflows")}}a(At,"savedWorkflowDirs");async function hi(e,o){return new Set((await Oe(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(hi,"nextRevisionWorkflowName");function yi(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:Fr}}a(yi,"buildWorkflowRevisionProvenance");function Rt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${E.cyan(o.name)} ${E.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
163
- `)}a(Rt,"formatSavedList");function ki(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(ki,"isSafeWorkflowRunId");function Te(e){if(e.confirm)return e.confirm;let o=e.readline;if(o)return n=>new Promise(t=>{o.question(`${n} (y/N) `,r=>t(/^y(es)?$/i.test(r.trim())))})}a(Te,"resolveConfirm");function Mc(e){console.log(E.red(`
154
+ `),n=[],t=0,r=!1;for(let l of o){if(n.length>=Pc)break;let c=` ${l}`,d=_c-t;if(d<=0){r=!0;break}if(c.length>d){d>16&&n.push(`${c.slice(0,d-4)} ...`),r=!0;break}n.push(c),t+=c.length+1}let i=Math.max(0,o.length-n.length);if(i>0||r){let l=i>0?`${i} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(Mc,"renderApprovalScriptPreview");function ie(e,o){let n=a(i=>i===null?"\u221E":String(i),"cap"),t=e.plannedAgents===void 0?void 0:String(e.plannedAgents),r=t===void 0?`agent total cap: ${n(e.maxAgents)}`:`planned agents: ${t} \xB7 agent safety cap: ${n(e.maxAgents)}`;return[`Run workflow ${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:",...Mc(o.rawScript)]:[]]:[]].join(`
155
+ `)}a(ie,"renderApprovalPrompt");function vo(e){if(!se(e))return[];let o=[];for(let n of Tc(e)){let t=Q(e,n,"run.json");if(se(t))try{let r=JSON.parse(tn(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(vo,"readWorkflowRuns");function Lc(e){let o=Q(e,"events.jsonl");if(!se(o))return[];let n=tn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let i=JSON.parse(r);if(typeof i!="object"||i===null)continue;let l=i;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(Lc,"readWorkflowEvents");function Wc(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(Wc,"readStringArray");function nn(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(nn,"readNonEmptyString");function yi(e,o){let n=o?nn(o.scriptSnapshotPath):Q(e,"script.js"),t=o?nn(o.manifestSnapshotPath):Q(e,"manifest.json");return!n||!t?!1:se(n)&&se(t)}a(yi,"hasGeneratedWorkflowSnapshot");function vi(e,o){if(o)return yi(e,o);let n=Q(e,"run.json");if(!se(n))return!1;try{let t=JSON.parse(tn(n,"utf8"));return typeof t=="object"&&t!==null?yi(e,t):!1}catch{return!1}}a(vi,"hasRerunnableGeneratedWorkflowRun");function Nc(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(Nc,"readWorkflowFailure");function $o(e,o){let n=Q(e,o),t=Q(n,"run.json"),r=Lc(n),i=Nc(r);if(!(!se(t)&&r.length===0)){if(!se(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let l=JSON.parse(tn(t,"utf8")),c=nn(l.scriptSnapshotPath),d=nn(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:vi(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...i?{error:i}:{},artifacts:Wc(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a($o,"readWorkflowRunDetail");function ko(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(ko,"statusIcon");function vt(e){return Ic.has(e)}a(vt,"isTerminalWorkflowStatus");function $i(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($i,"formatProcessListMeta");function $t(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let i=t.map(l=>{let c=$i(o.processSnapshots?.get(l.runId));return` ${ko(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&&i.push(E.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),i.join(`
156
+ `)}let r=t.map(i=>` ${ko(i.status)} ${E.cyan(i.workflow)} ${E.dim(i.runId)} \u2014 ${i.status} (${i.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(`
157
+ `)}a($t,"formatRunsList");function St(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=$i(o.processSnapshots?.get(n.runId));return` ${ko(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?E.dim(` [${t}]`):""}`}).join(`
158
+ `):e.map(n=>` ${ko(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
159
+ `)}a(St,"formatManagedRunsList");function Xe(e){return e.status==="running"||e.status==="paused"}a(Xe,"isActiveManagedWorkflowRun");function bt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${ko(o.status)} ${E.cyan(o.workflow)} ${E.dim(o.runId)} - ${o.status}`).join(`
160
+ `)}a(bt,"formatWorkflowPruneCandidates");function xt(e,o){return e.filter(Xe)[0]?.runId??e[0]?.runId??o[0]?.runId}a(xt,"selectDefaultWorkflowRunId");function At(e){return e.find(Xe)?.runId}a(At,"selectDefaultActiveWorkflowRunId");function ki(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(ki,"formatTime");function Oc(e,o=10){let n=e.map(ln).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(Oc,"formatRecentWorkflowEvents");function Rt(e,o){return o?.canRerun??(e?.runDir?vi(e.runDir):!1)}a(Rt,"canRerunWorkflowRun");function Dc(e){return e?e.artifacts.map(o=>({name:o,path:Q(e.runDir,"artifacts",`${Lr(o)}.json`)})):[]}a(Dc,"workflowArtifactRefs");function Et(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Et,"formatWorkflowNextActions");function Si(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(Si,"formatWorkflowFailureAction");function Tt(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",i=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=ki(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,y=ki(e?.endedAt??o?.endedAt??m),v=t?.error??e?.error??o?.error,k=o?.artifacts??t?.artifacts?.map(ce=>ce.name)??[],$=Dc(o),g=e?.resultText,R=n.full===!0||g===void 0?Ke($,Ee(r),{full:n.full===!0}):void 0,I=n.full===!0?R??g??t?.resultSummary:g!==void 0?ge(g):t?.resultSummary!==void 0?ge(t.resultSummary):R,M=I?ze(I,i,Ee(I)):void 0,X=n.full===!0||!I||!pt(I)?"result:":"result preview:",V=o?Oc(o.events):[],oo=Rt(e,o);return[` ${E.cyan(r)} ${E.dim(i)}`,...t?.displayName&&t.displayName!==r?[` display name: ${t.displayName}`]:[],` status: ${l}`,...t?.source?[` source: ${t.source}`]:[],...t?.savedWorkflowName?[` saved workflow: ${t.savedWorkflowName}`]:[],...t?.sourceRunId?[` source run: ${t.sourceRunId}`]:[],...t?.sourceWorkflowName?[` source workflow: ${t.sourceWorkflowName}`]:[],...t?.revisionOf?[` revision of: ${t.revisionOf}`]:[],` agents: ${c}`,` events: ${d}`,...f?[` started: ${f}`]:[],...y?[` ended: ${y}`]:[],...u?[` run dir: ${u}`]:[],...k.length>0?[` artifacts: ${k.join(", ")}`]:[],...v?[` error: ${v}`]:[],...M?["",` ${X}`,...M.split(`
161
+ `).map(ce=>` ${ce}`)]:[],...V.length>0?[""," recent events:",...V.map(ce=>` ${ce.trimEnd()}`)]:[],"",` next: ${Et(i,oo)}`].join(`
162
+ `)}a(Tt,"formatWorkflowRunSnapshot");function Ct(e){return{project:Q(e,".kodax","workflows"),personal:H("workflows")}}a(Ct,"savedWorkflowDirs");async function bi(e,o){return new Set((await De(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(bi,"nextRevisionWorkflowName");function xi(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:Kr}}a(xi,"buildWorkflowRevisionProvenance");function It(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${E.cyan(o.name)} ${E.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
163
+ `)}a(It,"formatSavedList");function Ai(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Ai,"isSafeWorkflowRunId");function Te(e){if(e.confirm)return e.confirm;let o=e.readline;if(o)return n=>new Promise(t=>{o.question(`${n} (y/N) `,r=>t(/^y(es)?$/i.test(r.trim())))})}a(Te,"resolveConfirm");function Uc(e){console.log(E.red(`
164
164
  [workflow] invalid run id: ${e||"<empty>"}
165
- `))}a(Mc,"printInvalidRunId");function we(e){return ki(e)?!0:(Mc(e),!1)}a(we,"ensureSafeRunId");function tn(){let e=Lc(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(tn,"currentWorkflowPreflightEnv");function Lc(e){let o=e;for(;;){if(se(Q(o,".git")))return!0;let n=bc(o);if(n===o)return!1;o=n}}a(Lc,"hasGitMarker");function rn(e){console.log(E.red(`
166
- [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(E.red(` - ${o.requirement}: ${o.message}`));console.log()}a(rn,"printPreflightFailure");function sn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(E.yellow(`
167
- [workflow] capsule preflight warnings:`));for(let n of o)console.log(E.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(sn,"printPreflightWarnings");async function vi(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
165
+ `))}a(Uc,"printInvalidRunId");function we(e){return Ai(e)?!0:(Uc(e),!1)}a(we,"ensureSafeRunId");function rn(){let e=jc(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(rn,"currentWorkflowPreflightEnv");function jc(e){let o=e;for(;;){if(se(Q(o,".git")))return!0;let n=Cc(o);if(n===o)return!1;o=n}}a(jc,"hasGitMarker");function sn(e){console.log(E.red(`
166
+ [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(E.red(` - ${o.requirement}: ${o.message}`));console.log()}a(sn,"printPreflightFailure");function an(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(E.yellow(`
167
+ [workflow] capsule preflight warnings:`));for(let n of o)console.log(E.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(an,"printPreflightWarnings");async function Ri(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
168
168
  ${e.path}`)){console.log(E.dim(`Workflow cancelled.
169
- `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await to(e.path),c=ro(l,tn());if(!c.ok){rn(c);return}sn(c),n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:l.manifest.mayUseWorktree===!0,rawScriptPath:e.path,rawScript:l.source},t={manifest:l.manifest,source:l.source},r=l.provenance}return{module:await Lo(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(`
169
+ `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await ro(e.path),c=so(l,rn());if(!c.ok){sn(c);return}an(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 Lo(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(`
170
170
  [workflow] failed to load ${e.path}: ${t}
171
- `));return}}a(vi,"prepareSavedWorkflow");function Et(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(Et,"workflowEventStatus");function an(e){let o=e.data?.name??e.data?.taskId??"",n=Et(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(an,"formatWorkflowEvent");function $i(e){let o=an(e);o&&console.log(E.dim(o))}a($i,"renderWorkflowEvent");import cn from"chalk";import Wc from"string-width";var Nc=9;function Oc(e,o=Nc){let n=Wc(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Oc,"padWorkflowLiveSymbol");function xi(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,i=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:i,stoppedAgents:l,...f!==void 0?{message:f}:{},...o.locale!==void 0?{locale:o.locale}:{}}}a(xi,"workflowLiveSnapshotFromProcess");function Rp(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Oc(o.symbol)}${o.text}`)}a(Rp,"formatWorkflowLiveViewModelForTranscript");var Dc=6,Si={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")}},Uc={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function jc(e){return e.length>14?`${e.slice(0,14)}...`:e}a(jc,"shortRunId");function ln(e){return e==="zh"?Si.zh:Si.en}a(ln,"workflowLiveLabels");function Fc(e,o){let n=Math.max(0,Math.floor(e)),t=Math.floor(n/1e3),r=t%60,i=Math.floor(t/60),l=i%60,c=Math.floor(i/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(Fc,"formatElapsedMs");function bi(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(bi,"formatTokenCount");function Hc(e){if(e.tokenBudgetSpent===void 0)return;let o=ln(e.locale),n=bi(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=bi(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(Hc,"formatWorkflowTokenUsage");function Bc(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Fc(t,e.locale));let r=Hc(e);return r!==void 0&&n.push(r),n}a(Bc,"formatWorkflowHeaderMetrics");function Gc(e){let o=ln(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=Ai(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 i=r.length===0?"":e.locale==="zh"?`\uFF08${r.join("\uFF0C")}\uFF09`:` (${r.join(", ")})`;return`${n}/${t} ${o.finished}${i}`}a(Gc,"formatWorkflowProgress");function qc(e){let o=ln(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=Ai(e),r=e.locale==="zh"?`${n}/${t} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`:`${n}/${t} active agent${n===1?"":"s"}`,i=[];return e.failedAgents>0&&i.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&i.push(`${e.stoppedAgents} ${o.stopped}`),i.length===0?r:e.locale==="zh"?`${r}\uFF0C${i.join("\uFF0C")}`:`${r}, ${i.join(", ")}`}a(qc,"formatWorkflowCounter");function Ai(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(Ai,"workflowProgressDenominator");function zc(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(zc,"formatWorkflowPhase");function Ep(e,o=Date.now()){if(!e||e.status!=="running")return Uc;let n=[],t=ln(e.locale),r=Bc(e,o),i=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} (${jc(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${i}`,isActive:!0});let l=zc(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=Gc(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,Dc);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:qc(e),rows:d}}a(Ep,"buildWorkflowLiveViewModel");function Kc(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(Kc,"isWorkflowHarnessFailure");function Tt(e){let o=wi(e.runId,e.canRerun),n=e.partialResultText?qe(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return Kc(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(`
171
+ `));return}}a(Ri,"prepareSavedWorkflow");function Pt(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(Pt,"workflowEventStatus");function ln(e){let o=e.data?.name??e.data?.taskId??"",n=Pt(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(ln,"formatWorkflowEvent");function Ei(e){let o=ln(e);o&&console.log(E.dim(o))}a(Ei,"renderWorkflowEvent");import dn from"chalk";import Fc from"string-width";var Hc=9;function Bc(e,o=Hc){let n=Fc(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Bc,"padWorkflowLiveSymbol");function Ii(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,i=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:i,stoppedAgents:l,...f!==void 0?{message:f}:{},...o.locale!==void 0?{locale:o.locale}:{}}}a(Ii,"workflowLiveSnapshotFromProcess");function Np(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Bc(o.symbol)}${o.text}`)}a(Np,"formatWorkflowLiveViewModelForTranscript");var Gc=6,Ti={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")}},qc={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function zc(e){return e.length>14?`${e.slice(0,14)}...`:e}a(zc,"shortRunId");function cn(e){return e==="zh"?Ti.zh:Ti.en}a(cn,"workflowLiveLabels");function Kc(e,o){let n=Math.max(0,Math.floor(e)),t=Math.floor(n/1e3),r=t%60,i=Math.floor(t/60),l=i%60,c=Math.floor(i/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(Kc,"formatElapsedMs");function Ci(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(Ci,"formatTokenCount");function Xc(e){if(e.tokenBudgetSpent===void 0)return;let o=cn(e.locale),n=Ci(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=Ci(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(Xc,"formatWorkflowTokenUsage");function Vc(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Kc(t,e.locale));let r=Xc(e);return r!==void 0&&n.push(r),n}a(Vc,"formatWorkflowHeaderMetrics");function Yc(e){let o=cn(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=Pi(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 i=r.length===0?"":e.locale==="zh"?`\uFF08${r.join("\uFF0C")}\uFF09`:` (${r.join(", ")})`;return`${n}/${t} ${o.finished}${i}`}a(Yc,"formatWorkflowProgress");function Jc(e){let o=cn(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=Pi(e),r=e.locale==="zh"?`${n}/${t} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`:`${n}/${t} active agent${n===1?"":"s"}`,i=[];return e.failedAgents>0&&i.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&i.push(`${e.stoppedAgents} ${o.stopped}`),i.length===0?r:e.locale==="zh"?`${r}\uFF0C${i.join("\uFF0C")}`:`${r}, ${i.join(", ")}`}a(Jc,"formatWorkflowCounter");function Pi(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(Pi,"workflowProgressDenominator");function Zc(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(Zc,"formatWorkflowPhase");function Op(e,o=Date.now()){if(!e||e.status!=="running")return qc;let n=[],t=cn(e.locale),r=Vc(e,o),i=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} (${zc(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${i}`,isActive:!0});let l=Zc(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=Yc(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,Gc);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:Jc(e),rows:d}}a(Op,"buildWorkflowLiveViewModel");function Qc(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(Qc,"isWorkflowHarnessFailure");function _t(e){let o=Si(e.runId,e.canRerun),n=e.partialResultText?ze(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return Qc(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(`
172
172
  `):[`Workflow failed (${e.runId}): ${e.error.message}`,...t,o].join(`
173
- `)}a(Tt,"formatWorkflowFailedMessage");function Xc(e,o,n){return ze(e.artifacts,o,n)??ho(e.events,n)}a(Xc,"formatWorkflowFailurePartialResult");function dn(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,i=n.outputTokens,l=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof i=="number"&&Number.isFinite(i)&&i>0?i:0;return l+c}a(dn,"readWorkflowEventUsageTokens");function D(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(cn.red(`
173
+ `)}a(_t,"formatWorkflowFailedMessage");function ed(e,o,n){return Ke(e.artifacts,o,n)??yo(e.events,n)}a(ed,"formatWorkflowFailurePartialResult");function un(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,i=n.outputTokens,l=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof i=="number"&&Number.isFinite(i)&&i>0?i:0;return l+c}a(un,"readWorkflowEventUsageTokens");function D(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(dn.red(`
174
174
  ${o.text}
175
- `));return}if(o.type==="success"){console.log(cn.green(`
175
+ `));return}if(o.type==="success"){console.log(dn.green(`
176
176
  ${o.text}
177
- `));return}if(o.type==="event"){console.log(cn.dim(o.text));return}if(o.type==="assistant"){console.log(`
177
+ `));return}if(o.type==="event"){console.log(dn.dim(o.text));return}if(o.type==="assistant"){console.log(`
178
178
  ${o.text}
179
- `);return}console.log(cn.dim(`
179
+ `);return}console.log(dn.dim(`
180
180
  ${o.text}
181
- `))}a(D,"emitWorkflowRunMessage");function Xe(e,o,n={}){let t=n.presentation==="agentic"?Qo(n.runId??"current"):void 0,r=!1;return i=>{if(r&&(i.type==="agent_completed"||i.type==="agent_unverified"||i.type==="agent_failed"||i.type==="agent_summary_updated"))return;o?.onEvent(i);let l=an(i);if(e.onWorkflowRunMessage){if(l&&D(e,{type:"event",text:l}),t){let c=t(i,n.locale??"en");c&&D(e,{type:"assistant",text:c,final:!1})}(i.type==="workflow_completed"||i.type==="workflow_failed"||i.type==="workflow_stopped")&&(r=!0);return}(i.type==="workflow_completed"||i.type==="workflow_failed"||i.type==="workflow_stopped")&&(r=!0),l&&$i(i)}}a(Xe,"workflowEventSink");function Ve(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(Ve,"subscribeWorkflowLiveProcess");function Ce(e,o,n,t="en"){let r=Date.now(),i=new Map,l,c=0,d=0,u=0,f=0,m=0,y=!1,v=n.phases??[],k=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,$=a((g,R)=>{let I=l===void 0?-1:v.indexOf(l),M=I>=0?I+1:void 0,X=v.length>0?v.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:g,...l!==void 0?{phase:l}:{},...M!==void 0?{phaseIndex:M}:{},...X!==void 0?{phaseTotal:X}:{},startedAt:r,elapsedMs:Math.max(0,Date.now()-r),activeAgents:[...i.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,...R!==void 0?{message:R}:{},locale:t})},"emit");return{running:a(g=>{y||$("running",g)},"running"),onProcessEvent:a(g=>{if(y&&g.type!=="workflow_finished")return;let R=g.snapshot.status;(g.type==="workflow_finished"||R==="completed"||R==="failed"||R==="cancelled")&&(y=!0);let I=g.type==="workflow_updated"?g.message:void 0;e.onWorkflowRunUpdate?.(xi(g.snapshot,I===void 0?{locale:t}:{locale:t,message:I}))},"onProcessEvent"),onEvent:a(g=>{if(!y)switch(g.type){case"phase_started":{let R=g.data?.name;l=typeof R=="string"?R:l,$("running");break}case"agent_spawned":{let R=typeof g.data?.taskId=="string"?g.data.taskId:`task-${c+1}`,I=typeof g.data?.name=="string"?g.data.name:R;i.set(R,I),c+=1,$("running");break}case"agent_completed":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=dn(g.data),Et(g)==="failed"?u+=1:d+=1,$("running");break}case"agent_unverified":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=dn(g.data),d+=1,$("running");break}case"agent_failed":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=dn(g.data),u+=1,$("running");break}case"agent_stopped":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=dn(g.data),f+=1,$("running");break}case"synthesis_completed":{$("running","synthesis complete");break}default:break}},"onEvent"),complete:a((g,R)=>{y||(y=!0,$(g,R))},"complete")}}a(Ce,"createWorkflowLiveUpdateEmitter");function Ie(e,o,n,t,r={}){e.done.then(i=>{if(i.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=Xc(i.state,l,c),u=Tt({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,...d!==void 0?{partialResultText:d}:{},locale:l});t?.complete("failed",i.error.message),D(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?Tt({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&D(o,{type:"assistant",text:u,final:!0});return}if(i.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=ge(i.result,c)??ze(i.state.artifacts,l,c),u=d===void 0?ho(i.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){D(o,{type:"assistant",text:ut({runId:n,totalSpawned:i.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}D(o,{type:"success",text:[`Workflow completed (${i.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
181
+ `))}a(D,"emitWorkflowRunMessage");function Ve(e,o,n={}){let t=n.presentation==="agentic"?en(n.runId??"current"):void 0,r=!1;return i=>{if(r&&(i.type==="agent_completed"||i.type==="agent_unverified"||i.type==="agent_failed"||i.type==="agent_summary_updated"))return;o?.onEvent(i);let l=ln(i);if(e.onWorkflowRunMessage){if(l&&D(e,{type:"event",text:l}),t){let c=t(i,n.locale??"en");c&&D(e,{type:"assistant",text:c,final:!1})}(i.type==="workflow_completed"||i.type==="workflow_failed"||i.type==="workflow_stopped")&&(r=!0);return}(i.type==="workflow_completed"||i.type==="workflow_failed"||i.type==="workflow_stopped")&&(r=!0),l&&Ei(i)}}a(Ve,"workflowEventSink");function Ye(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(Ye,"subscribeWorkflowLiveProcess");function Ce(e,o,n,t="en"){let r=Date.now(),i=new Map,l,c=0,d=0,u=0,f=0,m=0,y=!1,v=n.phases??[],k=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,$=a((g,R)=>{let I=l===void 0?-1:v.indexOf(l),M=I>=0?I+1:void 0,X=v.length>0?v.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:g,...l!==void 0?{phase:l}:{},...M!==void 0?{phaseIndex:M}:{},...X!==void 0?{phaseTotal:X}:{},startedAt:r,elapsedMs:Math.max(0,Date.now()-r),activeAgents:[...i.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,...R!==void 0?{message:R}:{},locale:t})},"emit");return{running:a(g=>{y||$("running",g)},"running"),onProcessEvent:a(g=>{if(y&&g.type!=="workflow_finished")return;let R=g.snapshot.status;(g.type==="workflow_finished"||R==="completed"||R==="failed"||R==="cancelled")&&(y=!0);let I=g.type==="workflow_updated"?g.message:void 0;e.onWorkflowRunUpdate?.(Ii(g.snapshot,I===void 0?{locale:t}:{locale:t,message:I}))},"onProcessEvent"),onEvent:a(g=>{if(!y)switch(g.type){case"phase_started":{let R=g.data?.name;l=typeof R=="string"?R:l,$("running");break}case"agent_spawned":{let R=typeof g.data?.taskId=="string"?g.data.taskId:`task-${c+1}`,I=typeof g.data?.name=="string"?g.data.name:R;i.set(R,I),c+=1,$("running");break}case"agent_completed":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=un(g.data),Pt(g)==="failed"?u+=1:d+=1,$("running");break}case"agent_unverified":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=un(g.data),d+=1,$("running");break}case"agent_failed":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=un(g.data),u+=1,$("running");break}case"agent_stopped":{let R=typeof g.data?.taskId=="string"?g.data.taskId:void 0;R&&i.delete(R),m+=un(g.data),f+=1,$("running");break}case"synthesis_completed":{$("running","synthesis complete");break}default:break}},"onEvent"),complete:a((g,R)=>{y||(y=!0,$(g,R))},"complete")}}a(Ce,"createWorkflowLiveUpdateEmitter");function Ie(e,o,n,t,r={}){e.done.then(i=>{if(i.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=ed(i.state,l,c),u=_t({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,...d!==void 0?{partialResultText:d}:{},locale:l});t?.complete("failed",i.error.message),D(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?_t({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&D(o,{type:"assistant",text:u,final:!0});return}if(i.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=ge(i.result,c)??Ke(i.state.artifacts,l,c),u=d===void 0?yo(i.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){D(o,{type:"assistant",text:gt({runId:n,totalSpawned:i.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}D(o,{type:"success",text:[`Workflow completed (${i.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
182
182
  `)}),f&&D(o,{type:"info",text:`Workflow result:
183
- ${f}`})}}).catch(i=>{let l=i instanceof Error?i.message:String(i);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),D(o,{type:"error",text:Tt({runId:n,error:i instanceof Error?i:new Error(l),canRerun:r.canRerun===!0})})})}a(Ie,"observeManagedWorkflowDone");function _e(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(_e,"unsubscribeWorkflowLiveProcessOnDone");function he(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){D(e.callbacks,{type:"error",text:`Workflow builder failed: ${o.message}`});return}!e.onBuilderEvent&&(o.stage==="started"||o.stage==="generating"||o.stage==="validating"||o.stage==="ready")&&console.log(un.dim(`
183
+ ${f}`})}}).catch(i=>{let l=i instanceof Error?i.message:String(i);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),D(o,{type:"error",text:_t({runId:n,error:i instanceof Error?i:new Error(l),canRerun:r.canRerun===!0})})})}a(Ie,"observeManagedWorkflowDone");function Pe(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(Pe,"unsubscribeWorkflowLiveProcessOnDone");function he(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){D(e.callbacks,{type:"error",text:`Workflow builder failed: ${o.message}`});return}!e.onBuilderEvent&&(o.stage==="started"||o.stage==="generating"||o.stage==="validating"||o.stage==="ready")&&console.log(fn.dim(`
184
184
  [workflow] ${o.message}
185
- `))}a(he,"emitWorkflowBuilderEvent");function $o(e){return{source:e.source,displayName:e.displayName,...e.goal!==void 0?{goal:e.goal}:{},...e.savedWorkflowName!==void 0?{savedWorkflowName:e.savedWorkflowName}:{},...e.sourceRunId!==void 0?{sourceRunId:e.sourceRunId}:{},...e.sourceWorkflowName!==void 0?{sourceWorkflowName:e.sourceWorkflowName}:{},...e.revisionOf!==void 0?{revisionOf:e.revisionOf}:{},...e.hostMetadata!==void 0?{hostMetadata:{...e.hostMetadata}}:{}}}a($o,"buildWorkflowProcessMetadata");async function Yc(e){let o=e.approval==="required"?Te(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(un.red(`
185
+ `))}a(he,"emitWorkflowBuilderEvent");function So(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(So,"buildWorkflowProcessMetadata");async function nd(e){let o=e.approval==="required"?Te(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(fn.red(`
186
186
  [workflow] refusing to generate a workflow without an interactive approval channel.
187
- `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(un.red(`
187
+ `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(fn.red(`
188
188
  [workflow] cannot generate - REPL options unavailable in this context.
189
- `)),"failed";let t=Ee(e.request),r,i;try{he(e,{stage:"started",message:"Workflow builder started"}),he(e,{stage:"generating",message:"Workflow - generating harness"}),r=n(),i=await(e.generateWorkflow??Po)({request:e.request,options:r}),he(e,{stage:"validating",message:"Workflow - validating harness"})}catch(g){let R=g instanceof Error?g.message:String(g);return he(e,{stage:"failed",message:R}),"failed"}if(i.kind==="declined")return he(e,{stage:"declined",message:i.reason}),console.log(un.dim(`
189
+ `)),"failed";let t=Ee(e.request),r,i;try{he(e,{stage:"started",message:"Workflow builder started"}),he(e,{stage:"generating",message:"Workflow - generating harness"}),r=n(),i=await(e.generateWorkflow??_o)({request:e.request,options:r}),he(e,{stage:"validating",message:"Workflow - validating harness"})}catch(g){let R=g instanceof Error?g.message:String(g);return he(e,{stage:"failed",message:R}),"failed"}if(i.kind==="declined")return he(e,{stage:"declined",message:i.reason}),console.log(fn.dim(`
190
190
  Workflow not created: ${i.reason}
191
- `)),"declined";he(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=ve(i.module);l!=="agentic"&&D(e.callbacks,{type:"info",text:`Generated workflow: ${i.approvalSummary}`});let d=Ae(process.cwd()).key,u=e.runBaseDir??H("workflow-runs",d),f=e.runManager??De(),m=`run-${Date.now().toString(36)}`,y=Vc(u,m);if(o){if(!await o(ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0,rawScript:i.scriptSnapshot.source})))return he(e,{stage:"cancelled",message:"Workflow cancelled"}),D(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(D(e.callbacks,{type:"info",text:ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0})}),D(e.callbacks,{type:"info",text:"Auto-started generated workflow (capability-isolated); normal permission gates still apply."}));l==="agentic"?D(e.callbacks,{type:"assistant",text:ft({runId:m,summary:c,approvalSummary:i.approvalSummary,locale:t}),final:!1}):D(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let v=Ce(e.callbacks,m,i.module.meta,t);v.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`);let k=Ve(f,v,m),$=f.startFromOptions({module:i.module,args:{request:e.request},options:r,runId:m,runDir:y,scriptSnapshot:i.scriptSnapshot,processMetadata:$o({source:e.processSource??"command",displayName:i.module.meta.name,goal:e.request}),onEvent:Xe(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:m})});return _e($,k),he(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),Ie($,e.callbacks,m,v,{canRerun:!0,presentation:l,locale:t}),"started"}a(Yc,"startGeneratedWorkflowFromRequest");function Ct(e){let o=e[0]?.toLowerCase();if(o==="help"||o==="--help"||o==="-h")return{kind:"help"};if(!o||o==="list")return{kind:"list"};if(o==="runs")return{kind:"runs",rawArgs:e.slice(1)};if(o==="show"){let n=e.slice(1),t=n.includes("--full"),r=n.find(i=>i!=="--full")??"";return t?{kind:"show",runId:r,full:!0}:{kind:"show",runId:r}}if(o==="pause")return{kind:"pause",runId:e[1]??""};if(o==="resume")return{kind:"resume",runId:e[1]??""};if(o==="stop")return{kind:"stop",runId:e[1]??""};if(o==="delete"){let n=e.slice(1),t=n.includes("--force"),r=n.includes("--saved"),i=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&i?"conflict":r?"saved":i?"run":void 0;return{kind:"delete",target:l,...t?{force:!0}:{},...c?{scope:c}:{}}}if(o==="prune")return{kind:"prune",rawArgs:e.slice(1)};if(o==="save")return{kind:"save",runId:e[1]??"",name:e[2]??""};if(o==="rename")return{kind:"rename",target:e[1]??"",newName:e.slice(2).join(" ").trim()};if(o==="revise"){let n=e.slice(1),t=n.includes("--replace"),r=n.filter(i=>i!=="--replace");return{kind:"revise",target:r[0]??"",request:r.slice(1).join(" ").trim(),...t?{replace:!0}:{}}}return o==="rerun"?{kind:"rerun",runId:e[1]??"",rawArgs:e.slice(2).join(" ").trim()}:o==="create"?{kind:"create",request:e.slice(1).join(" ").trim()}:{kind:"start",name:e[0],rawArgs:e.slice(1).join(" ").trim()}}a(Ct,"parseWorkflowInvocation");function So(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(So,"parseWorkflowArgs");function It(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(`
192
- `)}a(It,"buildWorkflowRevisionRequest");function Ri(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(Ri,"parseNonNegativeInteger");function _t(e){let o=!1,n=20;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let i=Ri(e[t+1]);if(i===void 0||i<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(i,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(_t,"parseWorkflowRunsOptions");function Jc(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(Jc,"parseOlderThanMs");function Pt(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let i=e[r];if(i==="--dry-run"){o=!0;continue}if(i==="--keep"){let l=Ri(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(i==="--older-than"){let l=Jc(e[r+1]);if(l===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=l,r+=1;continue}return{dryRun:o,error:`unknown option: ${i??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:50}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}a(Pt,"parseWorkflowPruneOptions");var Zc=1440*60*1e3;function Qc(e){return new Map(e.map(o=>[o.runId,o]))}a(Qc,"processSnapshotsByRunId");function ed(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/Zc}:{}}}a(ed,"workflowPruneRetentionOptions");function od(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(od,"workflowPruneCandidateSummaries");function Ti(e){return $o({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(Ti,"buildSavedWorkflowProcessMetadata");var Ci={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:en,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await Zo(Jo(o),"workflow");return}let r=Ct(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(w.yellow(`
191
+ `)),"declined";he(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=ve(i.module);l!=="agentic"&&D(e.callbacks,{type:"info",text:`Generated workflow: ${i.approvalSummary}`});let d=Ae(process.cwd()).key,u=e.runBaseDir??H("workflow-runs",d),f=e.runManager??Ue(),m=`run-${Date.now().toString(36)}`,y=od(u,m);if(o){if(!await o(ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0,rawScript:i.scriptSnapshot.source})))return he(e,{stage:"cancelled",message:"Workflow cancelled"}),D(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(D(e.callbacks,{type:"info",text:ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0})}),D(e.callbacks,{type:"info",text:"Auto-started generated workflow (capability-isolated); normal permission gates still apply."}));l==="agentic"?D(e.callbacks,{type:"assistant",text:wt({runId:m,summary:c,approvalSummary:i.approvalSummary,locale:t}),final:!1}):D(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let v=Ce(e.callbacks,m,i.module.meta,t);v.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`);let k=Ye(f,v,m),$=f.startFromOptions({module:i.module,args:{request:e.request},options:r,runId:m,runDir:y,scriptSnapshot:i.scriptSnapshot,processMetadata:So({source:e.processSource??"command",displayName:i.module.meta.name,goal:e.request}),onEvent:Ve(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:m})});return Pe($,k),he(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),Ie($,e.callbacks,m,v,{canRerun:!0,presentation:l,locale:t}),"started"}a(nd,"startGeneratedWorkflowFromRequest");function Mt(e){let o=e[0]?.toLowerCase();if(o==="help"||o==="--help"||o==="-h")return{kind:"help"};if(!o||o==="list")return{kind:"list"};if(o==="runs")return{kind:"runs",rawArgs:e.slice(1)};if(o==="show"){let n=e.slice(1),t=n.includes("--full"),r=n.find(i=>i!=="--full")??"";return t?{kind:"show",runId:r,full:!0}:{kind:"show",runId:r}}if(o==="pause")return{kind:"pause",runId:e[1]??""};if(o==="resume")return{kind:"resume",runId:e[1]??""};if(o==="stop")return{kind:"stop",runId:e[1]??""};if(o==="delete"){let n=e.slice(1),t=n.includes("--force"),r=n.includes("--saved"),i=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&i?"conflict":r?"saved":i?"run":void 0;return{kind:"delete",target:l,...t?{force:!0}:{},...c?{scope:c}:{}}}if(o==="prune")return{kind:"prune",rawArgs:e.slice(1)};if(o==="save")return{kind:"save",runId:e[1]??"",name:e[2]??""};if(o==="rename")return{kind:"rename",target:e[1]??"",newName:e.slice(2).join(" ").trim()};if(o==="revise"){let n=e.slice(1),t=n.includes("--replace"),r=n.filter(i=>i!=="--replace");return{kind:"revise",target:r[0]??"",request:r.slice(1).join(" ").trim(),...t?{replace:!0}:{}}}return o==="rerun"?{kind:"rerun",runId:e[1]??"",rawArgs:e.slice(2).join(" ").trim()}:o==="create"?{kind:"create",request:e.slice(1).join(" ").trim()}:{kind:"start",name:e[0],rawArgs:e.slice(1).join(" ").trim()}}a(Mt,"parseWorkflowInvocation");function bo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(bo,"parseWorkflowArgs");function Lt(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(`
192
+ `)}a(Lt,"buildWorkflowRevisionRequest");function _i(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(_i,"parseNonNegativeInteger");function Wt(e){let o=!1,n=20;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let i=_i(e[t+1]);if(i===void 0||i<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(i,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(Wt,"parseWorkflowRunsOptions");function td(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(td,"parseOlderThanMs");function Nt(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let i=e[r];if(i==="--dry-run"){o=!0;continue}if(i==="--keep"){let l=_i(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(i==="--older-than"){let l=td(e[r+1]);if(l===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=l,r+=1;continue}return{dryRun:o,error:`unknown option: ${i??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:50}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}a(Nt,"parseWorkflowPruneOptions");var rd=1440*60*1e3;function sd(e){return new Map(e.map(o=>[o.runId,o]))}a(sd,"processSnapshotsByRunId");function id(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/rd}:{}}}a(id,"workflowPruneRetentionOptions");function ad(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(ad,"workflowPruneCandidateSummaries");function Li(e){return So({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(Li,"buildSavedWorkflowProcessMetadata");var Wi={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:on,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await Qo(Zo(o),"workflow");return}let r=Mt(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(w.yellow(`
193
193
  [workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
194
194
  Switch with /agent-mode ama to author and run one via /workflow, or /agent-mode amaw to
195
195
  also let the agent start one from natural language.
196
- `));return}let i=Ae(process.cwd()).key,l=H("workflow-runs",i),c=De(),d=At(process.cwd()),u=Dr({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async h=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,...t.agentMode==="ama"?{agentModeOverride:"amaw"}:{},prompt:jr(h)}}),"createWorkflowFromText");if(r.kind==="help"){en();return}if(r.kind==="list"){console.log(w.bold(`
197
- Built-in workflows:`)),console.log(gt(Mo())),console.log(w.bold(`
198
- Pattern templates:`));for(let b of Ur())console.log(` ${w.cyan(b.name)} ${w.dim(`(${b.pattern})`)} - ${b.description}`);let h=await Oe(d);h.length>0&&(console.log(w.bold(`
199
- Saved workflows:`)),console.log(Rt(h))),console.log(w.dim(`
196
+ `));return}let i=Ae(process.cwd()).key,l=H("workflow-runs",i),c=Ue(),d=Ct(process.cwd()),u=Gr({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async h=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,...t.agentMode==="ama"?{agentModeOverride:"amaw"}:{},prompt:zr(h)}}),"createWorkflowFromText");if(r.kind==="help"){on();return}if(r.kind==="list"){console.log(w.bold(`
197
+ Built-in workflows:`)),console.log(kt(Mo())),console.log(w.bold(`
198
+ Pattern templates:`));for(let b of qr())console.log(` ${w.cyan(b.name)} ${w.dim(`(${b.pattern})`)} - ${b.description}`);let h=await De(d);h.length>0&&(console.log(w.bold(`
199
+ Saved workflows:`)),console.log(It(h))),console.log(w.dim(`
200
200
  Run one with: /workflow <name> <question or JSON args>`)),console.log(w.dim(` Show usage with: /workflow help
201
- `));return}if(r.kind==="runs"){let h=_t(r.rawArgs);if(h.error){console.log(w.yellow(`
201
+ `));return}if(r.kind==="runs"){let h=Wt(r.rawArgs);if(h.error){console.log(w.yellow(`
202
202
  Usage: /workflow runs [--all] [--limit N]
203
203
  ${h.error}
204
- `));return}let b=Qc(u.listWorkflowProcessSnapshots({activeOnly:!1})),S=c.list().filter(Ke);S.length>0&&(console.log(w.bold(`
205
- Active workflow runs:`)),console.log(yt(S,{processSnapshots:b}))),console.log(w.bold(`
206
- Workflow runs:`)),console.log(ht(ko(l),{limit:h.all?void 0:h.limit,showLimitHint:!h.all,processSnapshots:b})),console.log();return}if(r.kind==="show"){let h=ko(l),b=r.runId||vt(c.list(),h);if(!b){console.log(w.yellow(`
204
+ `));return}let b=sd(u.listWorkflowProcessSnapshots({activeOnly:!1})),S=c.list().filter(Xe);S.length>0&&(console.log(w.bold(`
205
+ Active workflow runs:`)),console.log(St(S,{processSnapshots:b}))),console.log(w.bold(`
206
+ Workflow runs:`)),console.log($t(vo(l),{limit:h.all?void 0:h.limit,showLimitHint:!h.all,processSnapshots:b})),console.log();return}if(r.kind==="show"){let h=vo(l),b=r.runId||xt(c.list(),h);if(!b){console.log(w.yellow(`
207
207
  No workflow runs yet. Start one with /workflow create <request>.
208
- `));return}if(!we(b))return;let S=c.get(b),P=vo(l,b),C=u.getWorkflowProcessSnapshot(b);console.log(w.bold(`
209
- Workflow run:`)),console.log(xt(S,P,{full:r.full===!0,...C?{processSnapshot:C}:{}})),console.log();return}if(r.kind==="pause"){if(!we(r.runId))return;let h=c.pause(r.runId);console.log(h?w.dim(`Paused workflow ${r.runId}.
208
+ `));return}if(!we(b))return;let S=c.get(b),_=$o(l,b),C=u.getWorkflowProcessSnapshot(b);console.log(w.bold(`
209
+ Workflow run:`)),console.log(Tt(S,_,{full:r.full===!0,...C?{processSnapshot:C}:{}})),console.log();return}if(r.kind==="pause"){if(!we(r.runId))return;let h=c.pause(r.runId);console.log(h?w.dim(`Paused workflow ${r.runId}.
210
210
  `):w.yellow(`No running workflow ${r.runId}.
211
211
  `));return}if(r.kind==="resume"){if(!we(r.runId))return;let h=c.resume(r.runId);console.log(h?w.dim(`Resumed workflow ${r.runId}.
212
212
  `):w.yellow(`No paused workflow ${r.runId}.
213
- `));return}if(r.kind==="stop"){let h=r.runId||$t(c.list());if(!h){console.log(w.yellow(`
213
+ `));return}if(r.kind==="stop"){let h=r.runId||At(c.list());if(!h){console.log(w.yellow(`
214
214
  No active workflow to stop.
215
- `));return}if(!we(h))return;let b=await u.stopWorkflow(h,"stopped by user"),S=c.get(h),P=vo(l,h),C=u.getWorkflowProcessSnapshot(h),U=S?.status??P?.status??C?.status,z=S?!Ke(S):P?wt(P.status):C!==void 0&&Io(C.status),O=bt(h,St(S,P));console.log(b?w.dim(`Stopped workflow ${h}.
215
+ `));return}if(!we(h))return;let b=await u.stopWorkflow(h,"stopped by user"),S=c.get(h),_=$o(l,h),C=u.getWorkflowProcessSnapshot(h),U=S?.status??_?.status??C?.status,z=S?!Xe(S):_?vt(_.status):C!==void 0&&Io(C.status),O=Et(h,Rt(S,_));console.log(b?w.dim(`Stopped workflow ${h}.
216
216
  `):U&&z?w.yellow(`Workflow ${h} is already ${U}. Next: ${O}.
217
217
  `):w.yellow(`No active workflow ${h}.
218
218
  `));return}if(r.kind==="delete"){if(!r.target){console.log(w.yellow(`
@@ -225,15 +225,15 @@ Usage: /workflow delete [--force] [--run|--saved] <runId|savedName>
225
225
  Deleted saved workflow ${ue.name}.
226
226
  `))}catch(ue){let j=ue instanceof Error?ue.message:String(ue);console.log(w.red(`
227
227
  [workflow] delete failed: ${j}
228
- `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await h(r.target);return}let b=c.getWorkflowProcessSnapshot(r.target),S=b?void 0:await u.resolveWorkflowIdentity(r.target),P;if(S?.kind==="ambiguous")if(S.run)P=S.run.runId;else{console.log(w.red(`
228
+ `))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await h(r.target);return}let b=c.getWorkflowProcessSnapshot(r.target),S=b?void 0:await u.resolveWorkflowIdentity(r.target),_;if(S?.kind==="ambiguous")if(S.run)_=S.run.runId;else{console.log(w.red(`
229
229
  [workflow] ambiguous delete target: ${r.target} matches multiple workflow run/display names${S.matches.includes("saved")?" and a saved workflow name":""}. Use the concrete run id, or --saved when deleting a generated saved capsule.
230
230
  `));return}if(S?.kind==="saved"){if(r.scope==="run"){console.log(w.yellow(`
231
231
  No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
232
232
  `));return}await h(S.savedWorkflow.name,S.savedWorkflow.source);return}if(S?.kind==="missing"){console.log(w.yellow(`
233
233
  No persisted workflow run or generated saved workflow ${r.target}.
234
- `));return}let C=S?.kind==="run"?S.runId:P??r.target;if(!we(C))return;if(await u.deleteWorkflowRun(C,{force:r.force})){console.log(w.dim(`
234
+ `));return}let C=S?.kind==="run"?S.runId:_??r.target;if(!we(C))return;if(await u.deleteWorkflowRun(C,{force:r.force})){console.log(w.dim(`
235
235
  Deleted workflow run ${C}${r.force?" with --force":""}.
236
- `));return}let z=b??c.getWorkflowProcessSnapshot(C),O=u.getWorkflowProcessSnapshot(C);if(!O&&!Ei(ee(l,C,"run.json"))){console.log(w.yellow(`
236
+ `));return}let z=b??c.getWorkflowProcessSnapshot(C),O=u.getWorkflowProcessSnapshot(C);if(!O&&!Mi(ee(l,C,"run.json"))){console.log(w.yellow(`
237
237
  No persisted workflow run or generated saved workflow ${r.target}.
238
238
  `));return}if(z&&!Io(z.status)){console.log(w.yellow(`
239
239
  Workflow ${C} is ${z.status}. Stop it before deleting the run record.
@@ -241,22 +241,22 @@ Workflow ${C} is ${z.status}. Stop it before deleting the run record.
241
241
  Workflow ${C} is a non-terminal persisted ${O.status} record. If it is stale, run /workflow delete --force ${C}.
242
242
  `));return}console.log(w.yellow(`
243
243
  Workflow ${C} is not a deletable terminal run.
244
- `));return}if(r.kind==="prune"){let h=Pt(r.rawArgs);if(h.error){console.log(w.yellow(`
244
+ `));return}if(r.kind==="prune"){let h=Nt(r.rawArgs);if(h.error){console.log(w.yellow(`
245
245
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
246
246
  ${h.error}
247
247
  `));return}if(!h.dryRun&&h.keep===void 0&&h.olderThanMs===void 0){console.log(w.yellow(`
248
248
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
249
249
  No cleanup rule was provided.
250
- `));return}let b=ko(l),S=await u.pruneWorkflowRuns(ed(h)),P=od(b,S.candidates);console.log(w.bold(h.dryRun?`
250
+ `));return}let b=vo(l),S=await u.pruneWorkflowRuns(id(h)),_=ad(b,S.candidates);console.log(w.bold(h.dryRun?`
251
251
  Workflow prune preview:`:`
252
- Workflow prune:`)),console.log(kt(P)),S.protectedRuns>0&&console.log(w.dim(`
252
+ Workflow prune:`)),console.log(bt(_)),S.protectedRuns>0&&console.log(w.dim(`
253
253
  Protected ${S.protectedRuns} active workflow run${S.protectedRuns===1?"":"s"} from pruning.`)),h.dryRun?console.log(w.dim(`
254
254
  Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
255
255
  `)):console.log(w.dim(`
256
256
  Deleted ${S.deleted} workflow run${S.deleted===1?"":"s"}.
257
257
  `));return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(w.yellow(`
258
258
  Usage: /workflow save <runId> <name>
259
- `));return}if(!we(r.runId))return;try{let h=await Cr({runDir:ee(l,r.runId),targetDir:d.project??ee(process.cwd(),".kodax","workflows"),name:r.name});console.log(w.green(`
259
+ `));return}if(!we(r.runId))return;try{let h=await Mr({runDir:ee(l,r.runId),targetDir:d.project??ee(process.cwd(),".kodax","workflows"),name:r.name});console.log(w.green(`
260
260
  Saved workflow ${h.name} to ${h.path}
261
261
  `))}catch(h){let b=h instanceof Error?h.message:String(h);console.log(w.red(`
262
262
  [workflow] save failed: ${b}
@@ -270,7 +270,7 @@ Usage: /workflow rename <runId|alias|savedName> <newName>
270
270
  [workflow] rename failed: ${h.runId}
271
271
  `));return}console.log(w.green(`
272
272
  Renamed workflow run ${h.runId} to ${r.newName.trim()}.
273
- `));return}try{let b=await Er({dirs:d,name:h.savedWorkflow.name,newName:r.newName,source:h.savedWorkflow.source});console.log(w.green(`
273
+ `));return}try{let b=await Pr({dirs:d,name:h.savedWorkflow.name,newName:r.newName,source:h.savedWorkflow.source});console.log(w.green(`
274
274
  Renamed saved workflow ${r.target} to ${b.name}.
275
275
  `))}catch(b){let S=b instanceof Error?b.message:String(b);console.log(w.red(`
276
276
  [workflow] rename failed: ${S}
@@ -286,51 +286,51 @@ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
286
286
  [workflow] revise target not found: ${r.target}
287
287
  `));return}if(r.replace===!0&&S.kind!=="saved"){console.log(w.red(`
288
288
  [workflow] revise --replace requires a saved workflow name target.
289
- `));return}let P;try{if(S.kind==="run")P=(await Pn({runDir:S.runDir})).capsule;else{if(S.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
289
+ `));return}let _;try{if(S.kind==="run")_=(await Wn({runDir:S.runDir})).capsule;else{if(S.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
290
290
  [workflow] only generated workflow capsules can be revised.
291
- `));return}P=await to(S.savedWorkflow.path)}}catch(F){let oo=F instanceof Error?F.message:String(F);console.log(w.red(`
292
- [workflow] revise failed: ${oo}
293
- `));return}let C=It({target:r.target,capsule:P,changeRequest:r.request}),U;try{U=await Po({request:C,options:b()})}catch(F){let oo=F instanceof Error?F.message:String(F);console.log(w.red(`
294
- [workflow] revise generation failed: ${oo}
291
+ `));return}_=await ro(S.savedWorkflow.path)}}catch(F){let no=F instanceof Error?F.message:String(F);console.log(w.red(`
292
+ [workflow] revise failed: ${no}
293
+ `));return}let C=Lt({target:r.target,capsule:_,changeRequest:r.request}),U;try{U=await _o({request:C,options:b()})}catch(F){let no=F instanceof Error?F.message:String(F);console.log(w.red(`
294
+ [workflow] revise generation failed: ${no}
295
295
  `));return}if(U.kind==="declined"){console.log(w.dim(`
296
296
  Workflow revision not created: ${U.reason}
297
- `));return}let z=r.replace===!0&&S.kind==="saved"?S:void 0,O=z?.savedWorkflow.name,de=O??await hi(d,U.manifest.name),Y=de===U.manifest.name?U.manifest:{...U.manifest,name:de};if(!await h(ie(ve({meta:Y,run:U.module.run}),{source:O?`revision-replace:${O}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Y.mayUseWorktree===!0,rawScript:U.source}))){console.log(w.dim(`Workflow revision cancelled.
298
- `));return}let j={name:de,manifest:Y,source:U.source,intent:Sr(Y,{originalRequest:r.request}),...P.inputs!==void 0?{inputs:P.inputs}:{},...P.requires!==void 0?{requires:P.requires}:{},provenance:yi({capsule:P,resolution:S,...O!==void 0?{replacesWorkflowName:O}:{}})};if(z){let F=await Tr({...j,dirs:d,savedSource:z.savedWorkflow.source});console.log(w.green(`
297
+ `));return}let z=r.replace===!0&&S.kind==="saved"?S:void 0,O=z?.savedWorkflow.name,de=O??await bi(d,U.manifest.name),Y=de===U.manifest.name?U.manifest:{...U.manifest,name:de};if(!await h(ie(ve({meta:Y,run:U.module.run}),{source:O?`revision-replace:${O}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Y.mayUseWorktree===!0,rawScript:U.source}))){console.log(w.dim(`Workflow revision cancelled.
298
+ `));return}let j={name:de,manifest:Y,source:U.source,intent:Rr(Y,{originalRequest:r.request}),..._.inputs!==void 0?{inputs:_.inputs}:{},..._.requires!==void 0?{requires:_.requires}:{},provenance:xi({capsule:_,resolution:S,...O!==void 0?{replacesWorkflowName:O}:{}})};if(z){let F=await _r({...j,dirs:d,savedSource:z.savedWorkflow.source});console.log(w.green(`
299
299
  Replaced saved workflow ${F.name} with revised capsule at ${F.path}
300
300
  `)),console.log(w.dim(`Previous capsule archived at ${F.previousPath}
301
- `));return}let Ro=await Rr({...j,dir:d.project??ee(process.cwd(),".kodax","workflows")});console.log(w.green(`
302
- Saved workflow revision ${Ro.name} to ${Ro.path}
301
+ `));return}let Eo=await Ir({...j,dir:d.project??ee(process.cwd(),".kodax","workflows")});console.log(w.green(`
302
+ Saved workflow revision ${Eo.name} to ${Eo.path}
303
303
  `));return}if(r.kind==="rerun"){if(!r.runId){console.log(w.yellow(`
304
304
  Usage: /workflow rerun <runId|savedName> [args]
305
305
  `));return}if(!we(r.runId))return;let h=Te(n);if(!h){console.log(w.red(`
306
306
  [workflow] refusing to rerun a workflow without an interactive approval channel.
307
307
  `));return}let b=n.createKodaXOptions;if(!b){console.log(w.red(`
308
308
  [workflow] cannot start \u2014 REPL options unavailable in this context.
309
- `));return}let S=(await Oe(d)).find(L=>L.name===r.runId),P=c.list().some(L=>L.runId===r.runId)||Ei(ee(l,r.runId,"run.json"));if(S&&P){console.log(w.red(`
309
+ `));return}let S=(await De(d)).find(L=>L.name===r.runId),_=c.list().some(L=>L.runId===r.runId)||Mi(ee(l,r.runId,"run.json"));if(S&&_){console.log(w.red(`
310
310
  [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
311
311
  `)),console.log(w.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
312
- `));return}if(S&&!P){let L=await vi(S,h);if(!L)return;let no=wo(r.rawArgs,L.module.meta.name,L.module.meta.description,L.scriptSnapshot?.source),sr="agentic";if(!await h(ie(ve(L.module),L.approvalContext))){console.log(w.dim(`Workflow cancelled.
313
- `));return}let J=`run-${Date.now().toString(36)}`,la=ee(l,J);console.log(w.dim(`
312
+ `));return}if(S&&!_){let L=await Ri(S,h);if(!L)return;let to=ho(r.rawArgs,L.module.meta.name,L.module.meta.description,L.scriptSnapshot?.source),cr="agentic";if(!await h(ie(ve(L.module),L.approvalContext))){console.log(w.dim(`Workflow cancelled.
313
+ `));return}let J=`run-${Date.now().toString(36)}`,pa=ee(l,J);console.log(w.dim(`
314
314
  Started workflow ${L.module.meta.name} (${J}). Use /workflow show ${J} for status.
315
- `));let An=Ce(n,J,L.module.meta,no);An.running(`Use /workflow show ${J} for status or /workflow stop ${J} to stop.`);let ca=Ve(c,An,J),ir=c.startFromOptions({module:L.module,args:So(r.rawArgs),options:b(),runId:J,runDir:la,...L.scriptSnapshot?{scriptSnapshot:L.scriptSnapshot}:{},processMetadata:Ti({displayName:L.module.meta.name,savedWorkflowName:S.name,provenance:L.provenance}),onEvent:Xe(n,void 0,{presentation:sr,locale:no,runId:J})});_e(ir,ca),Ie(ir,n,J,An,{canRerun:L.scriptSnapshot!==void 0,presentation:sr,locale:no});return}let C;try{C=await Pn({runDir:ee(l,r.runId)})}catch(L){let no=L instanceof Error?L.message:String(L);console.log(w.red(`
316
- [workflow] rerun failed: ${no}
317
- `));return}let z=vo(l,r.runId)?.scriptSnapshotPath??ee(l,r.runId,"script.js"),O=wo(r.rawArgs,C.capsule.manifest.name,C.capsule.manifest.description,C.capsule.source),de="agentic",Y=ro(C.capsule,tn());if(!Y.ok){rn(Y);return}if(sn(Y),!await h(ie(ve(C.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:C.capsule.manifest.mayUseWorktree===!0,rawScriptPath:z,rawScript:C.capsule.source}))){console.log(w.dim(`Workflow cancelled.
318
- `));return}let j=`run-${Date.now().toString(36)}`,Ro=ee(l,j);console.log(w.dim(`
315
+ `));let Tn=Ce(n,J,L.module.meta,to);Tn.running(`Use /workflow show ${J} for status or /workflow stop ${J} to stop.`);let ga=Ye(c,Tn,J),dr=c.startFromOptions({module:L.module,args:bo(r.rawArgs),options:b(),runId:J,runDir:pa,...L.scriptSnapshot?{scriptSnapshot:L.scriptSnapshot}:{},processMetadata:Li({displayName:L.module.meta.name,savedWorkflowName:S.name,provenance:L.provenance}),onEvent:Ve(n,void 0,{presentation:cr,locale:to,runId:J})});Pe(dr,ga),Ie(dr,n,J,Tn,{canRerun:L.scriptSnapshot!==void 0,presentation:cr,locale:to});return}let C;try{C=await Wn({runDir:ee(l,r.runId)})}catch(L){let to=L instanceof Error?L.message:String(L);console.log(w.red(`
316
+ [workflow] rerun failed: ${to}
317
+ `));return}let z=$o(l,r.runId)?.scriptSnapshotPath??ee(l,r.runId,"script.js"),O=ho(r.rawArgs,C.capsule.manifest.name,C.capsule.manifest.description,C.capsule.source),de="agentic",Y=so(C.capsule,rn());if(!Y.ok){sn(Y);return}if(an(Y),!await h(ie(ve(C.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:C.capsule.manifest.mayUseWorktree===!0,rawScriptPath:z,rawScript:C.capsule.source}))){console.log(w.dim(`Workflow cancelled.
318
+ `));return}let j=`run-${Date.now().toString(36)}`,Eo=ee(l,j);console.log(w.dim(`
319
319
  Started workflow ${C.module.meta.name} (${j}). Use /workflow show ${j} for status.
320
- `));let F=Ce(n,j,C.module.meta,O);F.running(`Use /workflow show ${j} for status or /workflow stop ${j} to stop.`);let oo=Ve(c,F,j),rr=c.startFromOptions({module:C.module,args:So(r.rawArgs),options:b(),runId:j,runDir:Ro,scriptSnapshot:{manifest:C.capsule.manifest,source:C.capsule.source},processMetadata:$o({source:"command",displayName:C.module.meta.name,sourceRunId:r.runId}),onEvent:Xe(n,void 0,{presentation:de,locale:O,runId:j})});_e(rr,oo),Ie(rr,n,j,F,{canRerun:!0,presentation:de,locale:O});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
320
+ `));let F=Ce(n,j,C.module.meta,O);F.running(`Use /workflow show ${j} for status or /workflow stop ${j} to stop.`);let no=Ye(c,F,j),lr=c.startFromOptions({module:C.module,args:bo(r.rawArgs),options:b(),runId:j,runDir:Eo,scriptSnapshot:{manifest:C.capsule.manifest,source:C.capsule.source},processMetadata:So({source:"command",displayName:C.module.meta.name,sourceRunId:r.runId}),onEvent:Ve(n,void 0,{presentation:de,locale:O,runId:j})});Pe(lr,no),Ie(lr,n,j,F,{canRerun:!0,presentation:de,locale:O});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
321
321
  Usage: /workflow create <request>
322
322
  `));return}return await f(r.request)}let m=Te(n);if(!m){console.log(w.red(`
323
323
  [workflow] refusing to start a workflow without an interactive approval channel.
324
- `));return}let y={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},v,k=Ar(r.name),$,g;if(!k){let h=(await Oe(d)).find(b=>b.name===r.name);if(!h){let b=[r.name,r.rawArgs].filter(S=>S&&S.length>0).join(" ").trim();return await f(b)}if($=h,h.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
324
+ `));return}let y={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},v,k=Cr(r.name),$,g;if(!k){let h=(await De(d)).find(b=>b.name===r.name);if(!h){let b=[r.name,r.rawArgs].filter(S=>S&&S.length>0).join(" ").trim();return await f(b)}if($=h,h.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
325
325
  ${h.path}`)){console.log(w.dim(`Workflow cancelled.
326
- `));return}try{if(h.execution==="capability-generated"){let b=await to(h.path),S=ro(b,tn());if(!S.ok){rn(S);return}sn(S),y={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:b.manifest.mayUseWorktree===!0,rawScriptPath:h.path,rawScript:b.source},v={manifest:b.manifest,source:b.source},g=b.provenance}k=await Lo(h.path),h.execution==="trusted-local"&&(y={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:!1})}catch(b){let S=b instanceof Error?b.message:String(b);console.log(w.red(`
326
+ `));return}try{if(h.execution==="capability-generated"){let b=await ro(h.path),S=so(b,rn());if(!S.ok){sn(S);return}an(S),y={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:b.manifest.mayUseWorktree===!0,rawScriptPath:h.path,rawScript:b.source},v={manifest:b.manifest,source:b.source},g=b.provenance}k=await Lo(h.path),h.execution==="trusted-local"&&(y={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:!1})}catch(b){let S=b instanceof Error?b.message:String(b);console.log(w.red(`
327
327
  [workflow] failed to load ${h.path}: ${S}
328
328
  `));return}}let R=n.createKodaXOptions;if(!R){console.log(w.red(`
329
329
  [workflow] cannot start \u2014 REPL options unavailable in this context.
330
330
  `));return}if(!await m(ie(ve(k),y))){console.log(w.dim(`Workflow cancelled.
331
331
  `));return}let M=`run-${Date.now().toString(36)}`,X=ee(l,M);console.log(w.dim(`
332
332
  Started workflow ${k.meta.name} (${M}). Use /workflow show ${M} for status.
333
- `));let V=wo(r.rawArgs,k.meta.name,k.meta.description,v?.source),eo=Ce(n,M,k.meta,V);eo.running(`Use /workflow show ${M} for status or /workflow stop ${M} to stop.`);let ce="agentic",aa=Ve(c,eo,M),tr=c.startFromOptions({module:k,args:So(r.rawArgs),options:R(),runId:M,runDir:X,...v?{scriptSnapshot:v}:{},processMetadata:$?Ti({displayName:k.meta.name,savedWorkflowName:$.name,provenance:g}):$o({source:"command",displayName:k.meta.name}),onEvent:Xe(n,void 0,{presentation:ce,locale:V,runId:M})});_e(tr,aa),Ie(tr,n,M,eo,{canRerun:v!==void 0,presentation:ce,locale:V})},"handler")};import B from"chalk";var Mt={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(B.yellow(`
333
+ `));let V=ho(r.rawArgs,k.meta.name,k.meta.description,v?.source),oo=Ce(n,M,k.meta,V);oo.running(`Use /workflow show ${M} for status or /workflow stop ${M} to stop.`);let ce="agentic",ma=Ye(c,oo,M),ar=c.startFromOptions({module:k,args:bo(r.rawArgs),options:R(),runId:M,runDir:X,...v?{scriptSnapshot:v}:{},processMetadata:$?Li({displayName:k.meta.name,savedWorkflowName:$.name,provenance:g}):So({source:"command",displayName:k.meta.name}),onEvent:Ve(n,void 0,{presentation:ce,locale:V,runId:M})});Pe(ar,ma),Ie(ar,n,M,oo,{canRerun:v!==void 0,presentation:ce,locale:V})},"handler")};import B from"chalk";var Ot={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(B.yellow(`
334
334
  Current session is already empty.`)),console.log(B.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(B.dim(`
335
335
  Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(B.dim(`
336
336
  [Previous session saved]`))}catch{console.log(B.yellow(`
@@ -340,11 +340,11 @@ Cancelled. Current session preserved.`));return}try{await n.saveSession(),consol
340
340
  `)),console.log("Usage:"),console.log(B.cyan(" /new")+` - Clear current session and start fresh
341
341
  `),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.
342
342
  `),console.log("Examples:"),console.log(B.dim(" User: Help me refactor the authentication module")),console.log(B.dim(" AI: [provides refactoring help]")),console.log(B.cyan(" /new")),console.log(B.dim(" \u2713 Started new session")),console.log(B.dim(" User: Now I need help with database optimization")),console.log(B.dim(` AI: [provides database help]
343
- `)),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 N from"chalk";var bg="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",xg="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function Ag(e){return xr(e.error,e.messageCount)}a(Ag,"shouldOfferSessionRecovery");var Lt={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(N.yellow(`
343
+ `)),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 N from"chalk";var Mg="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Lg="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function Wg(e){return Tr(e.error,e.messageCount)}a(Wg,"shouldOfferSessionRecovery");var Dt={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(N.yellow(`
344
344
  Current session is empty. Start a normal message instead.`));return}if(!n.recoverSession){console.log(N.red(`
345
345
  [Recover is not available in this host]
346
346
  `));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(N.dim(`
347
- Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(_n(e.join(" ")))}catch(r){let i=r instanceof Error?r.message:String(r);console.log(N.red(`
347
+ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(Ln(e.join(" ")))}catch(r){let i=r instanceof Error?r.message:String(r);console.log(N.red(`
348
348
  [Recover failed] ${i}
349
349
  `));return}t==="blocked"?console.log(N.yellow(`
350
350
  [Recover blocked by the current session transition guard]
@@ -354,13 +354,13 @@ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSessi
354
354
  [Nothing to recover from this session]
355
355
  `))},"handler"),detailedHelp:a(()=>{console.log(N.cyan(`
356
356
  /recover - Continue in a Fresh Session
357
- `)),console.log(N.bold("Usage:")),console.log(N.dim(" /recover ")+"Continue with a safe memory summary"),console.log(N.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(N.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(N.bold("Description:")),console.log(N.dim(" Saves the current session, creates a new local session,")),console.log(N.dim(" carries over only a compact memory summary, and runs the")),console.log(N.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(N.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as nd}from"node:child_process";import{promisify as td}from"node:util";import oe from"chalk";var rd=td(nd),Wt=1e5;async function fn(e,o){let{stdout:n}=await rd("git",e,{cwd:o,maxBuffer:67108864});return n}a(fn,"git");async function sd(e){for(let o of["main","master","develop"])try{return await fn(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(sd,"detectBaseBranch");async function id(e,o){let n=e[0];if(n==="base"){let t=await sd(o);return{diff:await fn(["diff",`${t}...HEAD`],o),label:`changes against ${t}`}}if(n==="sha"&&e[1])return{diff:await fn(["show",e[1]],o),label:`commit ${e[1]}`};if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await fn(["diff","HEAD"],o),label:"uncommitted changes"}}a(id,"getDiff");function ad(e){let o=!1,n=!1,t=!1,r=!1,i=[],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"){i.push("base"),t=!0;continue}if(!t&&m==="sha"){for(i.push("sha"),t=!0;f+1<e.length;){let y=e[f+1];if(y===void 0)break;if(y==="--"){r=!0,f+=1;break}if(c(y)){f+=1;continue}i.push(y),f+=1;break}continue}l.push(m)}}}let d=l.join(" ").trim(),u=i[0]==="sha"&&!i[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:i,prompt:d.length>0?d:void 0,...u?{error:u}:{}}}a(ad,"parseReviewInvocation");function ld(e,o={}){let n=[`Review ${e} with a dynamic workflow.`,"Create independent reviewers for correctness, security, performance, and design.","Have each reviewer inspect the relevant git diff evidence independently, then synthesize findings.","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}`),n.join(`
358
- `)}a(ld,"buildReviewWorkflowRequest");function cd(e){return e.length<=Wt?e:`${e.slice(0,Wt)}
357
+ `)),console.log(N.bold("Usage:")),console.log(N.dim(" /recover ")+"Continue with a safe memory summary"),console.log(N.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(N.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(N.bold("Description:")),console.log(N.dim(" Saves the current session, creates a new local session,")),console.log(N.dim(" carries over only a compact memory summary, and runs the")),console.log(N.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(N.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as ld}from"node:child_process";import{promisify as cd}from"node:util";import oe from"chalk";var dd=cd(ld),Ut=1e5;async function mn(e,o){let{stdout:n}=await dd("git",e,{cwd:o,maxBuffer:67108864});return n}a(mn,"git");async function ud(e){for(let o of["main","master","develop"])try{return await mn(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(ud,"detectBaseBranch");async function fd(e,o){let n=e[0];if(n==="base"){let t=await ud(o);return{diff:await mn(["diff",`${t}...HEAD`],o),label:`changes against ${t}`}}if(n==="sha"&&e[1])return{diff:await mn(["show",e[1]],o),label:`commit ${e[1]}`};if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await mn(["diff","HEAD"],o),label:"uncommitted changes"}}a(fd,"getDiff");function md(e){let o=!1,n=!1,t=!1,r=!1,i=[],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"){i.push("base"),t=!0;continue}if(!t&&m==="sha"){for(i.push("sha"),t=!0;f+1<e.length;){let y=e[f+1];if(y===void 0)break;if(y==="--"){r=!0,f+=1;break}if(c(y)){f+=1;continue}i.push(y),f+=1;break}continue}l.push(m)}}}let d=l.join(" ").trim(),u=i[0]==="sha"&&!i[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:i,prompt:d.length>0?d:void 0,...u?{error:u}:{}}}a(md,"parseReviewInvocation");function pd(e,o={}){let n=[`Review ${e} with a dynamic workflow.`,"Create independent reviewers for correctness, security, performance, and design.","Have each reviewer inspect the relevant git diff evidence independently, then synthesize findings.","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}`),n.join(`
358
+ `)}a(pd,"buildReviewWorkflowRequest");function gd(e){return e.length<=Ut?e:`${e.slice(0,Ut)}
359
359
 
360
- [diff truncated to ${Wt} chars - review the rest with a narrower scope]`}a(cd,"truncateDiff");function dd(e){let o=cd(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(`
361
- `)}a(dd,"buildReviewPrompt");function Ii(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(Ii,"buildDisplayName");function ud(){console.log(oe.bold(`
360
+ [diff truncated to ${Ut} chars - review the rest with a narrower scope]`}a(gd,"truncateDiff");function wd(e){let o=gd(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(`
361
+ `)}a(wd,"buildReviewPrompt");function Ni(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(Ni,"buildDisplayName");function hd(){console.log(oe.bold(`
362
362
  /review - Review Git Changes
363
- `)),console.log("Usage:"),console.log(oe.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(oe.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(oe.dim(" base ")+"Review changes against the detected base branch"),console.log(oe.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(oe.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(oe.dim(" --workflow ")+"Generate a dynamic multi-reviewer workflow"),console.log(),console.log("Examples:"),console.log(oe.dim(" /review --lean")),console.log(oe.dim(" /review base focus on auth and data loss")),console.log(oe.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(ud,"printReviewHelp");var _i={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:ud,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=ad(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r,i;try{({diff:r,label:i}=await id(t.diffArgs,n))}catch(l){return{success:!1,message:`/review: git failed - ${l instanceof Error?l.message:String(l)}`}}return r.trim()?t.workflow?{success:!0,workflow:{request:ld(i,{lean:t.lean,customPrompt:t.prompt}),source:"command",displayName:Ii(t),processSource:"review"}}:{success:!0,invocation:{prompt:dd({label:i,diff:r,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:Ii(t)}}:{success:!0,message:"No changes to review."}},"handler")};import{constants as fd}from"node:fs";import{access as md,readFile as pd,writeFile as gd}from"node:fs/promises";import{join as wd}from"node:path";import ne from"chalk";var Wi=`# KodaX Lean Mode
363
+ `)),console.log("Usage:"),console.log(oe.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(oe.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(oe.dim(" base ")+"Review changes against the detected base branch"),console.log(oe.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(oe.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(oe.dim(" --workflow ")+"Generate a dynamic multi-reviewer workflow"),console.log(),console.log("Examples:"),console.log(oe.dim(" /review --lean")),console.log(oe.dim(" /review base focus on auth and data loss")),console.log(oe.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(hd,"printReviewHelp");var Oi={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:hd,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=md(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r,i;try{({diff:r,label:i}=await fd(t.diffArgs,n))}catch(l){return{success:!1,message:`/review: git failed - ${l instanceof Error?l.message:String(l)}`}}return r.trim()?t.workflow?{success:!0,workflow:{request:pd(i,{lean:t.lean,customPrompt:t.prompt}),source:"command",displayName:Ni(t),processSource:"review"}}:{success:!0,invocation:{prompt:wd({label:i,diff:r,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:Ni(t)}}:{success:!0,message:"No changes to review."}},"handler")};import{constants as yd}from"node:fs";import{access as kd,readFile as vd,writeFile as $d}from"node:fs/promises";import{join as Sd}from"node:path";import ne from"chalk";var Fi=`# KodaX Lean Mode
364
364
 
365
365
  Before writing code:
366
366
  1. Do we need to build this at all?
@@ -380,10 +380,10 @@ Never cut:
380
380
  After coding:
381
381
  - explain what was skipped
382
382
  - say when to add it back
383
- `;function hd(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(hd,"resolveTargetRoot");async function Ni(e){try{return await md(e,fd.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(Ni,"pathExists");function Pi(e){return console.log(ne.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(Pi,"existingAgentsResult");function mn(e){return e instanceof Error?e.message:String(e)}a(mn,"errorMessage");async function Mi(e,o){let n;try{n=await Ni(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${mn(t)}`}}if(n)return Pi(e);try{await gd(e,Wi,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?Pi(e):{success:!1,message:`/agents init: failed to write ${e}: ${mn(t)}`}}if(o.reloadAgentsFiles)try{await o.reloadAgentsFiles()}catch(t){return{success:!1,message:`/agents init: created ${e} but failed to reload AGENTS.md files: ${mn(t)}`}}return console.log(ne.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(Mi,"initializeAgentsFile");function yd(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",Wi.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
384
- `)}a(yd,"buildLeanReviewPrompt");function Li(){console.log(ne.bold(`
383
+ `;function bd(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(bd,"resolveTargetRoot");async function Hi(e){try{return await kd(e,yd.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(Hi,"pathExists");function Di(e){return console.log(ne.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(Di,"existingAgentsResult");function pn(e){return e instanceof Error?e.message:String(e)}a(pn,"errorMessage");async function Ui(e,o){let n;try{n=await Hi(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${pn(t)}`}}if(n)return Di(e);try{await $d(e,Fi,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?Di(e):{success:!1,message:`/agents init: failed to write ${e}: ${pn(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: ${pn(t)}`}}return console.log(ne.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(Ui,"initializeAgentsFile");function xd(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",Fi.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
384
+ `)}a(xd,"buildLeanReviewPrompt");function ji(){console.log(ne.bold(`
385
385
  /agents - Manage Target Project Instructions
386
- `)),console.log("Usage:"),console.log(ne.cyan(" /agents init")),console.log(ne.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ne.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ne.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ne.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ne.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ne.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(Li,"printAgentsHelp");var Nt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:Li,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return Li(),!0;let r=hd(o),i=wd(r,"AGENTS.md");if(t==="init")return await Mi(i,n);let l;try{l=await Ni(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${mn(d)}`}}if(!l)return await Mi(i,n);let c;try{c=await pd(i,"utf8")}catch(d){let u=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${i}: ${u}`}}return{success:!0,invocation:{prompt:yd(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function gn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(gn,"getPastedTextRefNumLines");function kd(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(kd,"formatPastedTextRef");function vd(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(vd,"formatTruncatedTextRef");var $d=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function Sd(e){let o=[],n=new RegExp($d.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(Sd,"parseReferences");function bd(e,o){let n=Sd(e);if(n.length===0)return e;let t=a(i=>o instanceof Map?o.get(i):o[i],"getContent"),r=e;for(let i=n.length-1;i>=0;i--){let l=n[i];if(l.kind==="Image")continue;let c=t(l.id);!c||c.type!=="text"||(r=r.slice(0,l.index)+c.content+r.slice(l.index+l.match.length))}return r}a(bd,"expandPastedTextRefs");var xd=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Ad=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function Rd(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(Rd,"isAtWordBoundaryAfter");function Ed(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(Ed,"isAtWordBoundaryBefore");function Bg(e,o){if(o<=0||!Rd(e,o))return null;let t=e.slice(0,o).match(xd);if(!t)return null;let r=o-t[0].length,i=Number.parseInt(t[2]??"0",10);return!Number.isFinite(i)||i<=0?null:{start:r,end:o,id:i,kind:t[1]}}a(Bg,"findPlaceholderBeforeCursor");function Gg(e,o){if(o>=e.length||!Ed(e,o))return null;let t=e.slice(o).match(Ad);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(Gg,"findPlaceholderAfterCursor");function qg(e){return e.length>800||gn(e)>2}a(qg,"shouldReplacePasteWithPlaceholder");function zg(e,o){if(e.length<=1e4)return{truncatedText:e,placeholderContent:""};let n=Math.floor(1e3/2),t=Math.floor(1e3/2),r=e.slice(0,n),i=e.slice(-t),l=e.slice(n,-t),c=gn(l),d=vd(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(zg,"maybeTruncateLongInput");var Ot=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=gn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:kd(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=gn(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 bd(o,this.contents)}snapshot(){return new Map(this.contents)}restore(o){this.contents.clear();for(let[n,t]of o)this.contents.set(n,t);for(let n of o.keys())n>=this.nextId&&(this.nextId=n+1)}reset(){this.contents.clear(),this.nextId=1}size(){return this.contents.size}export(){return Array.from(this.contents.values())}},pn=null;function Kg(){return pn===null&&(pn=new Ot),pn}a(Kg,"getOrCreateModulePasteStore");function Oi(){return pn??void 0}a(Oi,"getActivePasteStore");import{createHash as Td}from"node:crypto";import{mkdir as Cd,readdir as Id,readFile as _d,stat as Pd,unlink as Md,writeFile as Ld}from"node:fs/promises";import*as Dt from"node:path";var Wd="paste-cache",Nd=720*60*60*1e3;function Ut(){return H(Wd)}a(Ut,"getPasteCacheDir");function Di(e){return Dt.join(Ut(),`${e}.txt`)}a(Di,"getPastePath");function Qg(e){return Td("sha256").update(e).digest("hex").slice(0,16)}a(Qg,"hashPastedText");async function ew(e,o){try{let n=Ut();return await Cd(n,{recursive:!0}),await Ld(Di(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(ew,"storePastedText");async function Ui(e){try{return await _d(Di(e),{encoding:"utf8"})}catch{return null}}a(Ui,"retrievePastedText");async function ow(e=Nd){let o=Ut(),n=Date.now()-e,t=0,r=0,i;try{i=await Id(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=Dt.join(o,l);try{(await Pd(c)).mtimeMs<n&&(await Md(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(ow,"cleanupOldPastes");import*as Gt from"path";import*as Fi from"os";function Od(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Od,"escapeRegExp");function Dd(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Od(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(Dd,"deriveArgumentHintFromUsage");function jt(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??Dd(e.usage,e.name)}}a(jt,"toCommandDefinition");function Ft(e){for(let o of ji)try{let n=jt(o,"builtin");e.register(n)}catch(n){console.error(`Failed to register command "${o.name}":`,n)}}a(Ft,"registerBuiltinCommands");import*as ae from"fs";import*as Pe from"path";function Ud(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(Ud,"normalizeAliases");function jd(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(jd,"normalizePriority");function Fd(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:pr(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:gr(e.hooks),frontmatter:e}}a(Fd,"buildExecutionMetadata");function Hd(e,o){try{let n=ae.readFileSync(e,"utf-8"),[t,r]=mr(n),i=t??{},l=Pe.basename(e,".md"),c=typeof i.name=="string"&&i.name.trim()?i.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof i.description=="string"&&i.description.trim()?i.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:Ud(i.aliases),priority:jd(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Fd(i)}}catch(n){console.error(`Error parsing command file ${e}:`,n);return}}a(Hd,"parseCommandFile");function Ht(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],i=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!ae.existsSync(i))continue;let c=Pe.resolve(i);try{c=ae.realpathSync.native?.(i)??ae.realpathSync(i)}catch{c=Pe.resolve(i)}if(!n.has(c)){n.add(c);try{let d=ae.readdirSync(i);for(let u of d){if(!u.endsWith(".md"))continue;let f=Pe.join(i,u),m=Hd(f,l);m&&o.push(m)}}catch(d){console.error(`Error scanning directory ${i}:`,d)}}}return o}a(Ht,"discoverCommands");function Bt(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){console.error(`Error registering command ${n.name}:`,t)}}a(Bt,"registerDiscoveredCommands");function Hi(e,o){Ft(e);try{let n=Fi.homedir(),t=o??process.cwd(),r=Ht([{path:Gt.join(t,".kodax","commands"),location:"project"},{path:H("commands"),location:"user"},{path:Gt.join(n,".agents","commands"),location:"user"}]);Bt(r,e)}catch(n){console.error("Failed to discover commands:",n)}}a(Hi,"registerAllCommands");function Bd(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(Bd,"summarizeAgentsFiles");async function Vi(e){let o=ke(e);return await o.reload(),o.size}a(Vi,"reloadSkillRegistry");function Gd(e,o,n){if(!Number.isFinite(o)||o<=0||n<=0)return{...e,enabled:!0};let t=o/n*100,r=Math.max(1,Math.ceil(t)-1);return{...e,enabled:!0,triggerPercent:Math.min(e.triggerPercent,r)}}a(Gd,"createManualCompactionConfig");function qt(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${at(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(qt,"printWorkspaceUnchangedNote");var ji=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];le.size===0&&wn(),le.has(o.toLowerCase())||!!hn(o)?Xt(o):tu(o)}else nu()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
386
+ `)),console.log("Usage:"),console.log(ne.cyan(" /agents init")),console.log(ne.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ne.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ne.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ne.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ne.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ne.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(ji,"printAgentsHelp");var jt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:ji,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return ji(),!0;let r=bd(o),i=Sd(r,"AGENTS.md");if(t==="init")return await Ui(i,n);let l;try{l=await Hi(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${pn(d)}`}}if(!l)return await Ui(i,n);let c;try{c=await vd(i,"utf8")}catch(d){let u=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${i}: ${u}`}}return{success:!0,invocation:{prompt:xd(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function wn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(wn,"getPastedTextRefNumLines");function Ad(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(Ad,"formatPastedTextRef");function Rd(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(Rd,"formatTruncatedTextRef");var Ed=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function Td(e){let o=[],n=new RegExp(Ed.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(Td,"parseReferences");function Cd(e,o){let n=Td(e);if(n.length===0)return e;let t=a(i=>o instanceof Map?o.get(i):o[i],"getContent"),r=e;for(let i=n.length-1;i>=0;i--){let l=n[i];if(l.kind==="Image")continue;let c=t(l.id);!c||c.type!=="text"||(r=r.slice(0,l.index)+c.content+r.slice(l.index+l.match.length))}return r}a(Cd,"expandPastedTextRefs");var Id=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Pd=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function _d(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(_d,"isAtWordBoundaryAfter");function Md(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(Md,"isAtWordBoundaryBefore");function Qg(e,o){if(o<=0||!_d(e,o))return null;let t=e.slice(0,o).match(Id);if(!t)return null;let r=o-t[0].length,i=Number.parseInt(t[2]??"0",10);return!Number.isFinite(i)||i<=0?null:{start:r,end:o,id:i,kind:t[1]}}a(Qg,"findPlaceholderBeforeCursor");function ew(e,o){if(o>=e.length||!Md(e,o))return null;let t=e.slice(o).match(Pd);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(ew,"findPlaceholderAfterCursor");function ow(e){return e.length>800||wn(e)>2}a(ow,"shouldReplacePasteWithPlaceholder");function nw(e,o){if(e.length<=1e4)return{truncatedText:e,placeholderContent:""};let n=Math.floor(1e3/2),t=Math.floor(1e3/2),r=e.slice(0,n),i=e.slice(-t),l=e.slice(n,-t),c=wn(l),d=Rd(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(nw,"maybeTruncateLongInput");var Ft=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=wn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:Ad(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=wn(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 Cd(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())}},gn=null;function tw(){return gn===null&&(gn=new Ft),gn}a(tw,"getOrCreateModulePasteStore");function Bi(){return gn??void 0}a(Bi,"getActivePasteStore");import{createHash as Ld}from"node:crypto";import{mkdir as Wd,readdir as Nd,readFile as Od,stat as Dd,unlink as Ud,writeFile as jd}from"node:fs/promises";import*as Ht from"node:path";var Fd="paste-cache",Hd=720*60*60*1e3;function Bt(){return H(Fd)}a(Bt,"getPasteCacheDir");function Gi(e){return Ht.join(Bt(),`${e}.txt`)}a(Gi,"getPastePath");function cw(e){return Ld("sha256").update(e).digest("hex").slice(0,16)}a(cw,"hashPastedText");async function dw(e,o){try{let n=Bt();return await Wd(n,{recursive:!0}),await jd(Gi(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(dw,"storePastedText");async function qi(e){try{return await Od(Gi(e),{encoding:"utf8"})}catch{return null}}a(qi,"retrievePastedText");async function uw(e=Hd){let o=Bt(),n=Date.now()-e,t=0,r=0,i;try{i=await Nd(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=Ht.join(o,l);try{(await Dd(c)).mtimeMs<n&&(await Ud(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(uw,"cleanupOldPastes");import*as Xt from"path";import*as Ki from"os";function Bd(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Bd,"escapeRegExp");function Gd(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Bd(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(Gd,"deriveArgumentHintFromUsage");function Gt(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??Gd(e.usage,e.name)}}a(Gt,"toCommandDefinition");function qt(e){for(let o of zi)try{let n=Gt(o,"builtin");e.register(n)}catch(n){console.error(`Failed to register command "${o.name}":`,n)}}a(qt,"registerBuiltinCommands");import*as ae from"fs";import*as _e from"path";function qd(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(qd,"normalizeAliases");function zd(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(zd,"normalizePriority");function Kd(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:yr(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:kr(e.hooks),frontmatter:e}}a(Kd,"buildExecutionMetadata");function Xd(e,o){try{let n=ae.readFileSync(e,"utf-8"),[t,r]=hr(n),i=t??{},l=_e.basename(e,".md"),c=typeof i.name=="string"&&i.name.trim()?i.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof i.description=="string"&&i.description.trim()?i.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:qd(i.aliases),priority:zd(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Kd(i)}}catch(n){console.error(`Error parsing command file ${e}:`,n);return}}a(Xd,"parseCommandFile");function zt(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],i=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!ae.existsSync(i))continue;let c=_e.resolve(i);try{c=ae.realpathSync.native?.(i)??ae.realpathSync(i)}catch{c=_e.resolve(i)}if(!n.has(c)){n.add(c);try{let d=ae.readdirSync(i);for(let u of d){if(!u.endsWith(".md"))continue;let f=_e.join(i,u),m=Xd(f,l);m&&o.push(m)}}catch(d){console.error(`Error scanning directory ${i}:`,d)}}}return o}a(zt,"discoverCommands");function Kt(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){console.error(`Error registering command ${n.name}:`,t)}}a(Kt,"registerDiscoveredCommands");function Xi(e,o){qt(e);try{let n=Ki.homedir(),t=o??process.cwd(),r=zt([{path:Xt.join(t,".kodax","commands"),location:"project"},{path:H("commands"),location:"user"},{path:Xt.join(n,".agents","commands"),location:"user"}]);Kt(r,e)}catch(n){console.error("Failed to discover commands:",n)}}a(Xi,"registerAllCommands");function Vd(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(Vd,"summarizeAgentsFiles");async function oa(e){let o=ke(e);return await o.reload(),o.size}a(oa,"reloadSkillRegistry");function Yd(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(hn.isAbsolute(r)?r:hn.resolve(hn.dirname(e),r))}return n}a(Yd,"normalizeConfiguredExtensionPaths");function Jd(){let e=hn.join(We(),"config.json");try{if(!yn.existsSync(e))return{};let o=JSON.parse(yn.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Yd(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(s.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(Jd,"loadExtensionReloadConfig");async function Zd(){try{return await Wr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(s.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Zd,"discoverDefaultExtensionsForReload");async function Qd(){let e=Jd(),o=await Nn(e.extensions??[]),n=await Nn(await Zd()),t=await Wo(n,o),r=[...t,...o],i=te();if(!i&&r.length>0&&(i=Nr({config:e}).activate()),!i)return{reloaded:0,loaded:0,failures:0};let l=Je(i),c=l.failures.length;await i.reloadExtensions({continueOnError:!0});let d=Je(i),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(k=>k.path),m=await Wo(t,f),y=await Wo(o,[...f,...m]);await i.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await i.loadExtensions(y,{continueOnError:!0,loadSource:"config",stage:"reload"});let v=Je(i);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,v.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,v.failures.length-c)}}a(Qd,"reloadExtensionRuntimeFromDisk");function eu(e,o,n){if(!Number.isFinite(o)||o<=0||n<=0)return{...e,enabled:!0};let t=o/n*100,r=Math.max(1,Math.ceil(t)-1);return{...e,enabled:!0,triggerPercent:Math.min(e.triggerPercent,r)}}a(eu,"createManualCompactionConfig");function Vt(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${ut(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(Vt,"printWorkspaceUnchangedNote");var zi=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];le.size===0&&kn(),le.has(o.toLowerCase())||!!vn(o)?Zt(o):mu(o)}else fu()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
387
387
  /help - Show Command Help
388
388
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /help ")+"Show all available commands"),console.log(s.dim(" /help <command> ")+"Show detailed help for a specific command"),console.log(s.dim(" /<command> help ")+"Shortcut for command-specific help"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /help ")+"# List all commands"),console.log(s.dim(" /help mode ")+"# Detailed help for /mode"),console.log(s.dim(" /mode help ")+"# Same detailed help shortcut"),console.log()},"detailedHelp")},{name:"exit",aliases:["quit","q","bye"],description:"Exit interactive mode",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(s.green(`
389
389
  Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
@@ -396,21 +396,21 @@ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{consol
396
396
  `+t))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
397
397
  /cost - Session Cost Report
398
398
  `)),console.log(s.bold("Description:")),console.log(s.dim(" Shows token usage and estimated cost for the current session,")),console.log(s.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(s.cyan(`
399
- /paste - Inspect stored paste contents`)),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=Oi();if(!n){console.log(s.yellow(`
399
+ /paste - Inspect stored paste contents`)),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=Bi();if(!n){console.log(s.yellow(`
400
400
  [No paste registry active]`)),console.log(s.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(s.dim(`
401
401
  [No pasted content in this session yet]`));return}console.log(s.bold(`
402
402
  Pasted content in this session:
403
403
  `));for(let r of t){let i=r.content?.length??0,l=r.contentHash?` (hash ${r.contentHash.slice(0,8)})`:"";console.log(` ${s.cyan(`#${r.id}`)} ${r.type} ${i} 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(s.yellow(`
404
404
  Usage: /paste show <id>`));return}let i=n.get(r);if(!i){console.log(s.dim(`
405
- [No paste registered with id #${r}]`));return}let l=i.content??"";if(!l&&i.contentHash){let c=await Ui(i.contentHash);c&&(l=c)}if(!l){console.log(s.yellow(`
405
+ [No paste registered with id #${r}]`));return}let l=i.content??"";if(!l&&i.contentHash){let c=await qi(i.contentHash);c&&(l=c)}if(!l){console.log(s.yellow(`
406
406
  [Paste #${r} has no stored content (hash ${i.contentHash??"n/a"})]`));return}console.log(s.bold(`
407
407
  Pasted text #${r} (${l.length} chars):
408
408
  `)),console.log(l),console.log();return}console.log(s.yellow(`
409
409
  [Unknown /paste subcommand: ${o}]`)),console.log(s.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
410
410
  /paste - Inspect stored paste contents
411
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(s.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(s.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(s.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 Jr(o.gitRoot),i=t.provider,l=Tn(i);if(!l){console.log(s.red(`
412
- [Provider not found: ${i}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??Cn(o.messages),f=Gd(r,u,d);console.log(s.dim(`
413
- [Compacting conversation...]`)),n.startCompacting?.();try{let m=await $r(o.messages,f,l,d,c,void 0,u,_r,Pr,t.model);if(!m.compacted){console.log(s.green(`
411
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(s.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(s.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(s.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 ts(o.gitRoot),i=t.provider,l=Pn(i);if(!l){console.log(s.red(`
412
+ [Provider not found: ${i}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??_n(o.messages),f=eu(r,u,d);console.log(s.dim(`
413
+ [Compacting conversation...]`)),n.startCompacting?.();try{let m=await Ar(o.messages,f,l,d,c,void 0,u,Or,Dr,t.model);if(!m.compacted){console.log(s.green(`
414
414
  [No compaction needed]`)),console.log(s.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
415
415
  `));return}o.messages=m.messages,o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:m.tokensAfter,source:"estimate"},n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(s.green(`
416
416
  [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 i=r instanceof Error?r.message:String(r);console.log(s.red(`
@@ -419,33 +419,33 @@ Pasted text #${r} (${l.length} chars):
419
419
  /compact - Manual Context Compaction
420
420
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /compact ")+"Compact conversation with default instructions"),console.log(s.dim(" /compact <text> ")+"Compact with custom instructions for the summary"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Manually triggers context compaction using LLM-generated summaries.")),console.log(s.dim(" Older messages are replaced with a structured summary, keeping recent context.")),console.log(s.dim(" /compact still works even if auto-compaction is disabled or the auto threshold is not reached.")),console.log(),console.log(s.bold("What it does:")),console.log(s.dim(" 1. Protects a recent slice of context from pruning/summary")),console.log(s.dim(" 2. Generates structured summary of older messages using LLM")),console.log(s.dim(" 3. Tracks files that were read/modified in the conversation")),console.log(s.dim(" 4. Replaces old messages with summary to save tokens")),console.log(),console.log(s.bold("Configuration:")),console.log(s.dim(" Config file: ~/.kodax/config.json")),console.log(s.dim(" Settings:")),console.log(s.dim(" - compaction.triggerPercent: Usage percentage that triggers compaction")),console.log(s.dim(" - compaction.enabled: Controls auto-compaction only; /compact always remains available")),console.log(s.dim(" - compaction.contextWindow: Optional token-window override")),console.log(s.dim(" - compaction.protectionPercent / rollingSummaryPercent / pruningThresholdTokens: Advanced tuning")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /compact ")+"# Compact with default instructions"),console.log(s.dim(" /compact focus on auth logic ")+"# Emphasize authentication in summary"),console.log(),console.log(s.dim(" See also: /help status (shows token usage)")),console.log()},"detailedHelp")},{name:"reload",description:"Reload project rules, skills, and active extensions",handler:a(async(e,o,n,t)=>{console.log(s.cyan(`
421
421
  Reloading project rule files, skills, and runtime extensions...
422
- `));try{let r=await n.reloadAgentsFiles?.()??[],i=Bd(r),l=await Vi(o.gitRoot),c=te(),d=c?Ye(c).loadedExtensions.length:0,u=c?Ye(c).failures.length:0,f=0,m=0;if(c){await c.reloadExtensions({continueOnError:!0});let y=Ye(c);f=d||y.loadedExtensions.length,m=Math.max(0,y.failures.length-u)}if(r.length===0&&l===0&&f===0){console.log(s.yellow(`No project rule files, skills, or active extensions found.
422
+ `));try{let r=await n.reloadAgentsFiles?.()??[],i=Vd(r),l=await oa(o.gitRoot),c=await Qd(),d=c.reloaded+c.loaded,u=c.failures;if(r.length===0&&l===0&&d===0&&u===0){console.log(s.yellow(`No project rule files, skills, or active extensions found.
423
423
  `)),console.log(s.dim(" Create AGENTS.md or CLAUDE.md in your project, add skills, or load extensions with --extension.")),console.log();return}console.log(s.green(`Reloaded successfully:
424
- `)),i.global>0&&console.log(s.dim(` - Global: ${i.global} file(s)`)),i.directory>0&&console.log(s.dim(` - Directory: ${i.directory} file(s)`)),i.project>0&&console.log(s.dim(` - Project: ${i.project} file(s)`)),f>0&&console.log(s.dim(` - Extensions: ${f} module(s)`)),l>0&&console.log(s.dim(` - Skills: ${l} skill(s)`)),m>0&&console.log(s.yellow(` - Failures: ${m} recorded (run /extensions for details)`)),console.log(s.dim(" Updated rules and skills will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(s.red(`Failed to reload.
424
+ `)),i.global>0&&console.log(s.dim(` - Global: ${i.global} file(s)`)),i.directory>0&&console.log(s.dim(` - Directory: ${i.directory} file(s)`)),i.project>0&&console.log(s.dim(` - Project: ${i.project} file(s)`)),c.reloaded>0&&console.log(s.dim(` - Extensions reloaded: ${c.reloaded} module(s)`)),c.loaded>0&&console.log(s.dim(` - Extensions loaded: ${c.loaded} module(s)`)),l>0&&console.log(s.dim(` - Skills: ${l} skill(s)`)),u>0&&console.log(s.yellow(` - Failures: ${u} recorded (run /extensions for details)`)),console.log(s.dim(" Updated rules, skills, and extensions will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(s.red(`Failed to reload.
425
425
  `)),console.log(s.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
426
426
  /reload - Reload Project Context
427
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(s.bold("Description:")),console.log(" Reloads project-level context rules from AGENTS.md, CLAUDE.md, and .kodax/AGENTS.md files."),console.log(" Reloads skills from .kodax/skills/, ~/.kodax/skills/, ~/.agents/skills/, plugins, and builtins."),console.log(" If a runtime extension host is active, it also hot-reloads loaded extensions."),console.log(),console.log(s.bold("Rule Priority:")),console.log(s.dim(" 1. Global: ")+"~/.kodax/AGENTS.md"),console.log(s.dim(" 2. Directory: ")+"AGENTS.md or CLAUDE.md from project root to current directory"),console.log(s.dim(" 3. Project: ")+".kodax/AGENTS.md at the project root"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /reload ")+"# Reload and show loaded rules"),console.log()},"detailedHelp")},{name:"extensions",aliases:["ext"],description:"Show active extension runtime diagnostics",usage:"/extensions",handler:a(async()=>{let e=te();if(!e){console.log(s.yellow(`
427
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reload ")+"Reload project rule files, skills, and active extensions"),console.log(),console.log(s.bold("Description:")),console.log(" Reloads project-level context rules from AGENTS.md, CLAUDE.md, and .kodax/AGENTS.md files."),console.log(" Reloads skills from .kodax/skills/, ~/.kodax/skills/, ~/.agents/skills/, plugins, and builtins."),console.log(" Rediscovers default/configured extensions, creates a runtime if needed, and hot-reloads loaded extensions."),console.log(),console.log(s.bold("Rule Priority:")),console.log(s.dim(" 1. Global: ")+"~/.kodax/AGENTS.md"),console.log(s.dim(" 2. Directory: ")+"AGENTS.md or CLAUDE.md from project root to current directory"),console.log(s.dim(" 3. Project: ")+".kodax/AGENTS.md at the project root"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /reload ")+"# Reload and show loaded rules"),console.log()},"detailedHelp")},{name:"extensions",aliases:["ext"],description:"Show active extension runtime diagnostics",usage:"/extensions",handler:a(async()=>{let e=te();if(!e){console.log(s.yellow(`
428
428
  [No active extension runtime]
429
- `));return}let o=Ye(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(s.bold(`
429
+ `));return}let o=Je(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(s.bold(`
430
430
  Extension Runtime:
431
- `)),console.log(s.dim(` Loaded: ${o.loadedExtensions.length}`)),console.log(s.dim(` Capabilities: ${o.capabilityProviders.length}`)),console.log(s.dim(` Commands: ${o.commands.length}`)),console.log(s.dim(` Hooks: ${o.hooks.length}`)),console.log(s.dim(` Failures: ${o.failures.length}`)),console.log(s.dim(` Extension Tools: ${n.length}`)),o.defaults.activeTools!==void 0&&console.log(s.dim(` Active Tools: ${o.defaults.activeTools.join(", ")||"(none)"}`)),(o.defaults.modelSelection.provider||o.defaults.modelSelection.model)&&console.log(s.dim(` Model Override: ${o.defaults.modelSelection.provider??"(inherit)"} / ${o.defaults.modelSelection.model??"(inherit)"}`)),o.defaults.thinkingLevel&&console.log(s.dim(` Thinking: ${o.defaults.thinkingLevel}`)),console.log(),o.loadedExtensions.length>0){console.log(s.bold("Loaded Extensions:"));for(let t of o.loadedExtensions)console.log(s.dim(` - ${t.label} [${t.loadSource}] (${t.path})`));console.log()}if(o.commands.length>0){console.log(s.bold("Extension Commands:"));for(let t of o.commands){let r=t.aliases?.length?` [${t.aliases.join(", ")}]`:"";console.log(s.dim(` - /${t.name}${r} ${t.description}`))}console.log()}if(o.capabilityProviders.length>0){console.log(s.bold("Capability Providers:"));for(let t of o.capabilityProviders){let r=du(t.metadata);console.log(s.dim(` - ${t.id} [${t.kinds.join(", ")}]${r?` ${r}`:""}`))}console.log()}if(n.length>0){console.log(s.bold("Extension Tools:"));for(let t of n){let r=t.shadowedSources.length>0?` overrides: ${t.shadowedSources.map(i=>i.label??i.id??i.kind).join(", ")}`:"";console.log(s.dim(` - ${t.name}${r}`))}console.log()}if(o.hooks.length>0){console.log(s.bold("Hook Participation:"));for(let t of o.hooks)console.log(s.dim(` - ${t.hook} [#${t.order}] ${t.source.label}`));console.log()}if(o.failures.length>0){console.log(s.bold("Recent Failures:"));for(let t of o.failures.slice(-10))console.log(s.dim(` - [${t.stage}] ${t.source.label}: ${t.target} -> ${t.message}`));console.log()}},"handler")},{name:"status",aliases:["info","ctx"],description:"Show current session status",handler:a(async(e,o,n,t)=>{await ru(o,t,e)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
431
+ `)),console.log(s.dim(` Loaded: ${o.loadedExtensions.length}`)),console.log(s.dim(` Capabilities: ${o.capabilityProviders.length}`)),console.log(s.dim(` Commands: ${o.commands.length}`)),console.log(s.dim(` Hooks: ${o.hooks.length}`)),console.log(s.dim(` Failures: ${o.failures.length}`)),console.log(s.dim(` Extension Tools: ${n.length}`)),o.defaults.activeTools!==void 0&&console.log(s.dim(` Active Tools: ${o.defaults.activeTools.join(", ")||"(none)"}`)),(o.defaults.modelSelection.provider||o.defaults.modelSelection.model)&&console.log(s.dim(` Model Override: ${o.defaults.modelSelection.provider??"(inherit)"} / ${o.defaults.modelSelection.model??"(inherit)"}`)),o.defaults.thinkingLevel&&console.log(s.dim(` Thinking: ${o.defaults.thinkingLevel}`)),console.log(),o.loadedExtensions.length>0){console.log(s.bold("Loaded Extensions:"));for(let t of o.loadedExtensions)console.log(s.dim(` - ${t.label} [${t.loadSource}] (${t.path})`));console.log()}if(o.commands.length>0){console.log(s.bold("Extension Commands:"));for(let t of o.commands){let r=t.aliases?.length?` [${t.aliases.join(", ")}]`:"";console.log(s.dim(` - /${t.name}${r} ${t.description}`))}console.log()}if(o.capabilityProviders.length>0){console.log(s.bold("Capability Providers:"));for(let t of o.capabilityProviders){let r=vu(t.metadata);console.log(s.dim(` - ${t.id} [${t.kinds.join(", ")}]${r?` ${r}`:""}`))}console.log()}if(n.length>0){console.log(s.bold("Extension Tools:"));for(let t of n){let r=t.shadowedSources.length>0?` overrides: ${t.shadowedSources.map(i=>i.label??i.id??i.kind).join(", ")}`:"";console.log(s.dim(` - ${t.name}${r}`))}console.log()}if(o.hooks.length>0){console.log(s.bold("Hook Participation:"));for(let t of o.hooks)console.log(s.dim(` - ${t.hook} [#${t.order}] ${t.source.label}`));console.log()}if(o.failures.length>0){console.log(s.bold("Recent Failures:"));for(let t of o.failures.slice(-10))console.log(s.dim(` - [${t.stage}] ${t.source.label}: ${t.target} -> ${t.message}`));console.log()}},"handler")},{name:"status",aliases:["info","ctx"],description:"Show current session status",handler:a(async(e,o,n,t)=>{await pu(o,t,e)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
432
432
  /status - Show Session Status
433
433
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /status ")+"Display current session information"),console.log(s.dim(" /status workspace ")+"Show deeper workspace/runtime details"),console.log(s.dim(" /info, /ctx ")+"Aliases for /status"),console.log(),console.log(s.bold("Displays:")),console.log(s.dim(" - Current mode (code/ask)")),console.log(s.dim(" - Session ID")),console.log(s.dim(" - Message count")),console.log(s.dim(" - Estimated token usage")),console.log(s.dim(" - Current workspace truth")),console.log(s.dim(" - Session timestamps")),console.log(s.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=te();if(!o){console.log(s.yellow(`
434
- [No extension runtime active \u2014 MCP is not available]`));return}let t=Ye(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(s.dim(`
434
+ [No extension runtime active \u2014 MCP is not available]`));return}let t=Je(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(s.dim(`
435
435
  Refreshing MCP catalogs...`));try{await o.refreshCapabilityProviders("mcp"),console.log(s.green("MCP catalogs refreshed."))}catch(c){console.log(s.red(`Refresh failed: ${c instanceof Error?c.message:String(c)}`))}return}if(console.log(s.cyan(`
436
436
  MCP Status
437
437
  `)),!t){console.log(s.yellow(" No MCP provider registered.")),console.log(s.dim(` Add mcpServers to ~/.kodax/config.json to enable MCP.
438
438
  `));return}let l=t.metadata?.servers??[];console.log(s.dim(` Servers: ${l.length}`)),console.log();for(let c of l){let d=c.status==="ready"?s.green:c.status==="error"?s.red:s.yellow;console.log(` ${s.bold(c.serverId)} ${d(c.status)} connect=${s.dim(c.connect)}`),c.cachedAt&&console.log(s.dim(` tools=${c.tools} resources=${c.resources} prompts=${c.prompts}`)),c.lastError&&console.log(s.red(` error: ${c.lastError}`))}console.log()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
439
439
  /mcp - MCP Server Management
440
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /mcp ")+"Show MCP server status"),console.log(s.dim(" /mcp status ")+"Same as /mcp"),console.log(s.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),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 i=await _o({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:Kt(o)});zi(i);return}if(r==="mode"){if(e.length===1){console.log(s.dim(`
440
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /mcp ")+"Show MCP server status"),console.log(s.dim(" /mcp status ")+"Same as /mcp"),console.log(s.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),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 i=await Po({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:Jt(o)});Zi(i);return}if(r==="mode"){if(e.length===1){console.log(s.dim(`
441
441
  Current repo-intelligence mode: ${s.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(s.dim(`Usage: /repo-intel mode [auto|full|light|off]
442
- `));return}let i=Xd(e[1]);if(!i){console.log(s.red(`
442
+ `));return}let i=ru(e[1]);if(!i){console.log(s.red(`
443
443
  [Invalid repo-intelligence mode: ${e[1]}]`)),console.log(s.dim(`Usage: /repo-intel mode [auto|full|light|off]
444
- `));return}let l=qi({mode:i},{repoIntelligenceMode:i},n,t);ye(`Repo intelligence mode: ${i}`,l);return}if(r==="trace"){let i=e[1]?.toLowerCase();if(!i){console.log(s.dim(`
444
+ `));return}let l=Ji({mode:i},{repoIntelligenceMode:i},n,t);ye(`Repo intelligence mode: ${i}`,l);return}if(r==="trace"){let i=e[1]?.toLowerCase();if(!i){console.log(s.dim(`
445
445
  Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(s.dim(`Usage: /repo-intel trace [on|off|toggle]
446
- `));return}let l=Vd(i,t.repoIntelligenceTrace??!1);if(l===null){console.log(s.red(`
446
+ `));return}let l=su(i,t.repoIntelligenceTrace??!1);if(l===null){console.log(s.red(`
447
447
  [Invalid trace value: ${e[1]}]`)),console.log(s.dim(`Usage: /repo-intel trace [on|off|toggle]
448
- `));return}let c=qi({trace:l},{repoIntelligenceTrace:l},n,t);ye(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(s.yellow(`
448
+ `));return}let c=Ji({trace:l},{repoIntelligenceTrace:l},n,t);ye(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(s.yellow(`
449
449
  [Repo intelligence refresh is automatic in this build]`)),console.log(s.dim(`Use /repo-intel status to inspect the current engine state.
450
450
  `));return}console.log(s.red(`
451
451
  [Unknown /repo-intel subcommand: ${e[0]}]`)),console.log(s.dim(`Usage: /repo-intel [status|mode|trace]
@@ -453,7 +453,7 @@ Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)
453
453
  /repo-intel - Built-in Repo Intelligence
454
454
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /repo-intel ")+"Show built-in repo-intelligence status"),console.log(s.dim(" /repo-intel status ")+"Show built-in engine status without probing an external daemon"),console.log(s.dim(" /repo-intel mode auto ")+"Let KodaX pick the best repo-intelligence engine"),console.log(s.dim(" /repo-intel mode full ")+"Prefer the full repo-intelligence engine"),console.log(s.dim(" /repo-intel mode light ")+"Use the light repo-intelligence engine"),console.log(s.dim(" /repo-intel mode off ")+"Disable repo-intelligence injection"),console.log(s.dim(" /repo-intel trace on|off|toggle ")+"Toggle repo-intelligence trace output"),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - /status now includes a compact repo-intelligence summary.")),console.log(s.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(s.yellow(`
455
455
  [/repointel is deprecated; use /repo-intel status]
456
- `)),r==="status"){let i=await _o({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:Kt(o)});zi(i);return}if(r==="mode"){console.log(s.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
456
+ `)),r==="status"){let i=await Po({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:Jt(o)});Zi(i);return}if(r==="mode"){console.log(s.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
457
457
  `));return}if(r==="trace"){console.log(s.dim(`Use /repo-intel trace [on|off|toggle] to change repo-intelligence trace output.
458
458
  `));return}if(r==="warm"||r==="endpoint"||r==="bin"){console.log(s.dim("Repo intelligence is built into KodaX; external daemon/bin controls are no longer a normal REPL command surface.")),console.log(s.dim(`Use /repo-intel status to inspect the active engine.
459
459
  `));return}console.log(s.dim(`Usage: /repointel [status]
@@ -469,8 +469,8 @@ Child-task provider fallback: `)+s.green("on")),console.log(s.dim(" Order: ")+s
469
469
  [/fallback: no provider ids given]`)),console.log(s.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
470
470
  `));return}$e({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(s.green(`
471
471
  \u2713 `)+s.dim("Child-task fallback order: ")+s.cyan(l.join(" \u2192 "))),console.log(s.dim(` Provider ids must match your configured providers (see /status or kodax doctor).
472
- `))},"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 i=io(t.permissionMode,"accept-edits")??"accept-edits";console.log(s.dim(`
473
- Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];Oo.includes(r)?(t.permissionMode=r,n.setPermissionMode?.(r),Jn(r),console.log(s.cyan(`
472
+ `))},"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 i=ao(t.permissionMode,"accept-edits")??"accept-edits";console.log(s.dim(`
473
+ Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];Do.includes(r)?(t.permissionMode=r,n.setPermissionMode?.(r),ot(r),console.log(s.cyan(`
474
474
  [Switched to ${r} mode] (saved)`))):console.log(s.red(`
475
475
  [Unknown mode: ${e[0]}. Use: plan | accept-edits | auto]`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
476
476
  /mode - Switch Permission Mode
@@ -485,7 +485,7 @@ Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denia
485
485
  [auto-mode classifier stats]`)),console.log(s.dim(` engine: ${s.cyan(t.engine)}`)),console.log(s.dim(" Denial tracker:")),console.log(s.dim(` consecutive blocks: ${t.denials.consecutive} / 3`)),console.log(s.dim(` cumulative blocks: ${t.denials.cumulative} / 20`)),console.log(s.dim(" Circuit breaker:")),console.log(s.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(s.yellow(" \u21AA engine has downgraded to rules. /auto-engine llm to flip back.")),console.log()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
486
486
  /auto-denials - Auto-Mode Classifier Diagnostic Dump
487
487
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto-denials ")+"Print engine + tracker + breaker counters"),console.log(),console.log(s.bold("Thresholds (FEATURE_092):")),console.log(s.dim(" - 3 consecutive blocks \u2192 engine downgrade to rules")),console.log(s.dim(" - 20 cumulative blocks \u2192 engine downgrade to rules")),console.log(s.dim(" - 5 errors in 10-min \u2192 circuit breaker trips \u2192 engine downgrade")),console.log()},"detailedHelp")},{name:"save",description:"Save current session",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(s.green(`
488
- [Session saved]`)),qt(o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
488
+ [Session saved]`)),Vt(o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
489
489
  /save - Save Current Session
490
490
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /save ")+"Save current conversation to session storage"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Manually saves the current conversation session.")),console.log(s.dim(" Sessions are auto-saved after each message, but you can")),console.log(s.dim(" use this to ensure the session is persisted.")),console.log(s.dim(" Saving updates session storage only; the current workspace stays untouched.")),console.log(),console.log(s.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(s.red(`
491
491
  [Usage: /load <session-id>]`)),await n.listSessions();return}await n.loadSession(e[0])==="missing"&&console.log(s.red(`
@@ -510,20 +510,20 @@ Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denia
510
510
  /history - Show Conversation History
511
511
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /history ")+"Display recent messages in current session"),console.log(s.dim(" /hist ")+"Alias for /history"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the last 20 messages in the current conversation.")),console.log(s.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(s.red(`
512
512
  [Usage: /delete <session-id> or /delete all]`)),await n.listSessions?.();return}e[0]==="all"?(await n.deleteAllSessions?.(),console.log(s.green(`
513
- [All sessions deleted]`)),qt(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
514
- [Session deleted: ${e[0]}]`)),qt(o))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
513
+ [All sessions deleted]`)),Vt(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
514
+ [Session deleted: ${e[0]}]`)),Vt(o))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
515
515
  /delete - Delete Saved Sessions
516
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /delete ")+"Show usage (lists sessions)"),console.log(s.dim(" /delete <id> ")+"Delete a specific session"),console.log(s.dim(" /delete all ")+"Delete ALL sessions"),console.log(s.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(s.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" Deletes saved session records only.")),console.log(s.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(s.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=No().providerModels;if(e.length===0){console.log(s.bold(`
516
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /delete ")+"Show usage (lists sessions)"),console.log(s.dim(" /delete <id> ")+"Delete a specific session"),console.log(s.dim(" /delete all ")+"Delete ALL sessions"),console.log(s.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(s.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" Deletes saved session records only.")),console.log(s.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(s.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=Oo().providerModels;if(e.length===0){console.log(s.bold(`
517
517
  Available Providers:
518
- `));let c=zr(r);for(let d of c){let u=d.configured?s.green("[configured]"):s.red("[not configured]"),f=d.custom?s.yellow(" [custom]"):"",m=d.name===t.provider,y=m?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${y} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${Wn(d.capabilityProfile)}`));let v=Ue(d.name,r),k=m?t.model:null;for(let $ of v){let R=m&&(k===$||!k&&$===d.model)?s.cyan(">"):" ";console.log(` ${R} ${$}`)}console.log()}console.log(s.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(s.dim("Usage:")),console.log(s.dim(" /model <provider> Switch provider")),console.log(s.dim(" /model <provider>/<model> Switch to specific model")),console.log(s.dim(` /model /<model> Switch model within current provider
518
+ `));let c=Zr(r);for(let d of c){let u=d.configured?s.green("[configured]"):s.red("[not configured]"),f=d.custom?s.yellow(" [custom]"):"",m=d.name===t.provider,y=m?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${y} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${Un(d.capabilityProfile)}`));let v=je(d.name,r),k=m?t.model:null;for(let $ of v){let R=m&&(k===$||!k&&$===d.model)?s.cyan(">"):" ";console.log(` ${R} ${$}`)}console.log()}console.log(s.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(s.dim("Usage:")),console.log(s.dim(" /model <provider> Switch provider")),console.log(s.dim(" /model <provider>/<model> Switch to specific model")),console.log(s.dim(` /model /<model> Switch model within current provider
519
519
  `));return}let i=(e[0]??"").trim();if(!i)return;if(i.startsWith("/")){let c=i.slice(1);if(!c){console.log(s.red(`
520
- [Missing model name after /]`));return}let d=Ue(t.provider,r);if(!d.includes(c)){console.log(s.red(`
520
+ [Missing model name after /]`));return}let d=je(t.provider,r);if(!d.includes(c)){console.log(s.red(`
521
521
  [Unknown model: ${c}]`)),console.log(s.dim(`Available models for ${t.provider}: ${d.join(", ")}
522
522
  `));return}$e({model:c}),n.switchProvider?.(t.provider,c),console.log(s.cyan(`
523
523
  [Switched to ${c}] (saved)`));return}if(i.includes("/")){let c=i.indexOf("/"),d=i.slice(0,c),u=i.slice(c+1);if(!u||!d){console.log(s.red(`
524
524
  [Invalid format. Use: /model <provider>/<model>]`));return}if(!Me(d)){console.log(s.red(`
525
525
  [Unknown provider: ${d}]`)),console.log(s.dim(`Available: ${Le().join(", ")}
526
- `));return}let f=Ue(d,r);if(!f.includes(u)){console.log(s.red(`
526
+ `));return}let f=je(d,r);if(!f.includes(u)){console.log(s.red(`
527
527
  [Unknown model: ${u}]`)),console.log(s.dim(`Available models for ${d}: ${f.join(", ")}
528
528
  `));return}$e({provider:d,model:u}),n.switchProvider?.(d,u),console.log(s.cyan(`
529
529
  [Switched to ${d}/${u}] (saved)`));return}let l=i;Me(l)?($e({provider:l,model:void 0}),n.switchProvider?.(l),console.log(s.cyan(`
@@ -531,94 +531,94 @@ Available Providers:
531
531
  [Unknown provider: ${l}]`)),console.log(s.dim(`Available: ${Le().join(", ")}
532
532
  `)))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
533
533
  /model - Switch LLM Provider/Model
534
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /model ")+"List all providers with models"),console.log(s.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(s.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(s.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /model ")+"# See available providers & models"),console.log(s.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(s.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(s.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){In(),console.log(s.dim(`
534
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /model ")+"List all providers with models"),console.log(s.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(s.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(s.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /model ")+"# See available providers & models"),console.log(s.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(s.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(s.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){Mn(),console.log(s.dim(`
535
535
  [Cleared all learned capability overrides]
536
- `));return}let m=f.indexOf("/"),y=m===-1?f:f.slice(0,m),v=m===-1?void 0:f.slice(m+1)||void 0;In(y,v),console.log(s.dim(`
536
+ `));return}let m=f.indexOf("/"),y=m===-1?f:f.slice(0,m),v=m===-1?void 0:f.slice(m+1)||void 0;Mn(y,v),console.log(s.dim(`
537
537
  [Cleared learned capability overrides for ${y}${v?`/${v}`:""}]
538
- `));return}if(r==="probe"){let f=Wo(t.provider,t.model).filter(y=>y!=="auto"&&y!=="off"),m=`${t.provider}/${t.model??"(default)"}`;console.log(s.dim(`
539
- [Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let y=await rs({provider:t.provider,model:t.model,efforts:f,resolve:Tn,now:a(()=>new Date().toISOString(),"now")});for(let v of y){let k=v.status==="accepted"?s.green("\u2713"):v.status==="rejected"?s.red("\u2717"):s.yellow("!");console.log(s.dim(` ${k} ${v.effort}${v.error?` \u2014 ${v.error}`:""}`))}console.log(s.dim(` (rejections recorded; undo with /provider forget-capability)
538
+ `));return}if(r==="probe"){let f=No(t.provider,t.model).filter(y=>y!=="auto"&&y!=="off"),m=`${t.provider}/${t.model??"(default)"}`;console.log(s.dim(`
539
+ [Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let y=await ds({provider:t.provider,model:t.model,efforts:f,resolve:Pn,now:a(()=>new Date().toISOString(),"now")});for(let v of y){let k=v.status==="accepted"?s.green("\u2713"):v.status==="rejected"?s.red("\u2717"):s.yellow("!");console.log(s.dim(` ${k} ${v.effort}${v.error?` \u2014 ${v.error}`:""}`))}console.log(s.dim(` (rejections recorded; undo with /provider forget-capability)
540
540
  `))}catch(y){let v=y instanceof Error?y.message:String(y);console.log(s.red(`
541
541
  [Probe failed: ${v}]
542
542
  `))}return}let i=t.provider,l=t.model;if(r)if(r.includes("/")){let f=r.indexOf("/");i=r.slice(0,f).trim(),l=r.slice(f+1).trim()||void 0}else i=r,l=void 0;if(!Me(i)){console.log(s.red(`
543
543
  [Unknown provider: ${i}]`)),console.log(s.dim(`Available: ${Le().join(", ")}
544
- `));return}let c=Br(i,l);if(!c){console.log(s.red(`
545
- [Provider details unavailable: ${i}]`)),console.log();return}let d=Yr(i,l,t.reasoningMode);console.log(s.bold(`
544
+ `));return}let c=Vr(i,l);if(!c){console.log(s.red(`
545
+ [Provider details unavailable: ${i}]`)),console.log();return}let d=ns(i,l,t.reasoningMode);console.log(s.bold(`
546
546
  Provider Details:
547
- `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${Xr(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let f of Vr(c))console.log(s.dim(` - ${f}`));console.log(s.dim(` - Session effort: ${Yi(t.effort)}`));let u=lr(i,l);if(u.length>0&&console.log(s.dim(` - Learned unsupported: ${u.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(s.bold("Common Scenarios:"));for(let f of d){let m=f.decision.status==="block"?s.red:f.decision.status==="warn"?s.yellow:s.green;console.log(m(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(s.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
547
+ `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${es(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let f of os(c))console.log(s.dim(` - ${f}`));console.log(s.dim(` - Session effort: ${na(t.effort)}`));let u=fr(i,l);if(u.length>0&&console.log(s.dim(` - Learned unsupported: ${u.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(s.bold("Common Scenarios:"));for(let f of d){let m=f.decision.status==="block"?s.red:f.decision.status==="warn"?s.yellow:s.green;console.log(m(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(s.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
548
548
  /provider - Inspect Provider Semantics
549
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /provider ")+"Inspect the current provider/model"),console.log(s.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(s.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(s.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(s.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(s.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(s.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or change reasoning mode (compat alias)",usage:"/thinking [on|off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let i=Ln(t.provider,t.model),l=t.thinking?s.green("ON"):s.dim("OFF");console.log(s.dim(`
550
- Thinking: ${l}`)),console.log(s.dim(`Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Effective control: ${s.cyan(Nn(i))}`)),console.log(s.dim(`Actual execution: ${On(t.reasoningMode,i)}`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
551
- `));return}let r=e[0].toLowerCase();if(r==="on"||r==="off"||En.includes(r)){let i=r==="on"?"auto":r==="off"?"off":r,l=Gi(i,n,t);ye(`Reasoning mode: ${i}`,l);return}console.log(s.red(`
549
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /provider ")+"Inspect the current provider/model"),console.log(s.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(s.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(s.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(s.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(s.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(s.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or change reasoning mode (compat alias)",usage:"/thinking [on|off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let i=Dn(t.provider,t.model),l=t.thinking?s.green("ON"):s.dim("OFF");console.log(s.dim(`
550
+ Thinking: ${l}`)),console.log(s.dim(`Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Effective control: ${s.cyan(jn(i))}`)),console.log(s.dim(`Actual execution: ${Fn(t.reasoningMode,i)}`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
551
+ `));return}let r=e[0].toLowerCase();if(r==="on"||r==="off"||In.includes(r)){let i=r==="on"?"auto":r==="off"?"off":r,l=Yi(i,n,t);ye(`Reasoning mode: ${i}`,l);return}console.log(s.red(`
552
552
  [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
553
553
  `))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
554
554
  /thinking - Legacy Alias for Reasoning Mode
555
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /thinking ")+"Show current reasoning status"),console.log(s.dim(" /thinking on ")+"Map to /reasoning auto"),console.log(s.dim(" /thinking off ")+"Map to /reasoning off"),console.log(s.dim(" /thinking auto ")+"Set reasoning mode to auto"),console.log(s.dim(" /thinking quick ")+"Set reasoning mode to quick"),console.log(s.dim(" /thinking balanced ")+"Set reasoning mode to balanced"),console.log(s.dim(" /thinking deep ")+"Set reasoning mode to deep"),console.log(s.dim(" /t ")+"Alias for /thinking"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Compatibility command for the new unified reasoning modes.")),console.log(s.dim(" Use /reasoning for the primary interface.")),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set reasoning mode",usage:"/reasoning [off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let l=Ln(t.provider,t.model);console.log(s.dim(`
556
- Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Thinking compatibility: ${t.thinking?s.green("ON"):s.dim("OFF")}`)),console.log(s.dim(`Effective control: ${s.cyan(Nn(l))}`)),console.log(s.dim(`Actual execution: ${On(t.reasoningMode,l)}`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
557
- `));return}let r=e[0].toLowerCase();if(!En.includes(r)){console.log(s.red(`
555
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /thinking ")+"Show current reasoning status"),console.log(s.dim(" /thinking on ")+"Map to /reasoning auto"),console.log(s.dim(" /thinking off ")+"Map to /reasoning off"),console.log(s.dim(" /thinking auto ")+"Set reasoning mode to auto"),console.log(s.dim(" /thinking quick ")+"Set reasoning mode to quick"),console.log(s.dim(" /thinking balanced ")+"Set reasoning mode to balanced"),console.log(s.dim(" /thinking deep ")+"Set reasoning mode to deep"),console.log(s.dim(" /t ")+"Alias for /thinking"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Compatibility command for the new unified reasoning modes.")),console.log(s.dim(" Use /reasoning for the primary interface.")),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set reasoning mode",usage:"/reasoning [off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let l=Dn(t.provider,t.model);console.log(s.dim(`
556
+ Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Thinking compatibility: ${t.thinking?s.green("ON"):s.dim("OFF")}`)),console.log(s.dim(`Effective control: ${s.cyan(jn(l))}`)),console.log(s.dim(`Actual execution: ${Fn(t.reasoningMode,l)}`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
557
+ `));return}let r=e[0].toLowerCase();if(!In.includes(r)){console.log(s.red(`
558
558
  [Invalid reasoning mode: ${e[0]}]`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
559
- `));return}let i=Gi(r,n,t);ye(`Reasoning mode: ${r}`,i)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
559
+ `));return}let i=Yi(r,n,t);ye(`Reasoning mode: ${r}`,i)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
560
560
  /reasoning - Set Reasoning Mode
561
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reasoning ")+"Show current reasoning mode"),console.log(s.dim(" /reasoning off ")+"Disable reasoning"),console.log(s.dim(" /reasoning auto ")+"Use semantic routing + adaptive depth"),console.log(s.dim(" /reasoning quick ")+"Low-depth reasoning"),console.log(s.dim(" /reasoning balanced ")+"Medium-depth reasoning"),console.log(s.dim(" /reasoning deep ")+"High-depth reasoning"),console.log(s.dim(" /reasoning:auto ")+"Inline form, equivalent to /reasoning auto"),console.log(s.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)=>{let r=Kd(t);if(e.length===0){let f=Bi(t);console.log(s.dim(`
562
- Reasoning effort: ${s.cyan(f)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Available: ${Wo(t.provider,t.model).join(", ")}`)),console.log(s.dim(`${r}
561
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reasoning ")+"Show current reasoning mode"),console.log(s.dim(" /reasoning off ")+"Disable reasoning"),console.log(s.dim(" /reasoning auto ")+"Use semantic routing + adaptive depth"),console.log(s.dim(" /reasoning quick ")+"Low-depth reasoning"),console.log(s.dim(" /reasoning balanced ")+"Medium-depth reasoning"),console.log(s.dim(" /reasoning deep ")+"High-depth reasoning"),console.log(s.dim(" /reasoning:auto ")+"Inline form, equivalent to /reasoning auto"),console.log(s.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)=>{let r=tu(t);if(e.length===0){let f=Vi(t);console.log(s.dim(`
562
+ Reasoning effort: ${s.cyan(f)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Available: ${No(t.provider,t.model).join(", ")}`)),console.log(s.dim(`${r}
563
563
  `));return}if(e.length>1){console.log(s.red(`
564
564
  [Reasoning effort accepts exactly one value]`)),console.log(s.dim(`${r}
565
- `));return}let i=e[0],l;try{l=ar(i)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(s.red(`
565
+ `));return}let i=e[0],l;try{l=ur(i)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(s.red(`
566
566
  [Invalid reasoning effort: ${m}]`)),console.log(s.dim(`${r}
567
- `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l,d=Yd(c,t),u=Jd(c,n,t);ye(`Reasoning effort: ${Bi(d)}`,u)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
567
+ `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l,d=iu(c,t),u=au(c,n,t);ye(`Reasoning effort: ${Vi(d)}`,u)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
568
568
  /effort - Set Native Reasoning Effort
569
569
  `)),console.log(s.bold("Usage:")),console.log(s.dim(" /effort ")+"Show current native reasoning effort"),console.log(s.dim(" /effort auto ")+"Clear the explicit effort override"),console.log(s.dim(" /effort off ")+"Disable reasoning effort"),console.log(s.dim(" /effort low ")+"Use low native reasoning effort"),console.log(s.dim(" /effort medium ")+"Use medium native reasoning effort"),console.log(s.dim(" /effort high ")+"Use high native reasoning effort"),console.log(s.dim(" /effort xhigh ")+"Use extra-high effort when the model supports it"),console.log(s.dim(" /effort max ")+"Use max effort when the model supports it"),console.log(s.dim(" /effort none ")+"Legacy alias for /effort off"),console.log(s.dim(`
570
570
  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|amaw|ama-workflow|sa|toggle]",handler:a(async(e,o,n,t)=>{if(e.length===0){console.log(s.dim(`
571
571
  Agent mode: ${s.cyan(t.agentMode.toUpperCase())}`)),console.log(s.dim(`Usage: /agent-mode [ama|amaw|ama-workflow|sa|toggle]
572
- `));return}let r=e[0]?.toLowerCase(),i=r==="toggle"?Ps(t.agentMode):r==="ama"||r==="sa"||r==="amaw"?r:r==="ama-workflow"?"amaw":void 0;if(!i){console.log(s.red(`
572
+ `));return}let r=e[0]?.toLowerCase(),i=r==="toggle"?Ds(t.agentMode):r==="ama"||r==="sa"||r==="amaw"?r:r==="ama-workflow"?"amaw":void 0;if(!i){console.log(s.red(`
573
573
  [Invalid agent mode: ${e[0]}]`)),console.log(s.dim(`Usage: /agent-mode [ama|amaw|ama-workflow|sa|toggle]
574
- `));return}let l=Zd(i,n,t);ye(`Agent mode: ${i.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
574
+ `));return}let l=lu(i,n,t);ye(`Agent mode: ${i.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
575
575
  /agent-mode - Adaptive Multi-Agent Mode Control
576
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /agent-mode ")+"Show current agent mode"),console.log(s.dim(" /agent-mode ama ")+"Adaptive multi-agent mode; workflows run only via the /workflow command"),console.log(s.dim(" /agent-mode amaw ")+"AMA + the agent may start a workflow itself from natural language"),console.log(s.dim(" /agent-mode ama-workflow")+"Alias for /agent-mode amaw"),console.log(s.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(s.dim(" /agent-mode toggle ")+"Cycle AMA -> AMAW -> SA"),console.log(s.dim(" /am ")+"Alias for /agent-mode"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" AMA runs the adaptive multi-agent harness. Workflows are command-gated: the /workflow")),console.log(s.dim(" command runs as a full scout-then-author Worker turn, but the agent never starts")),console.log(s.dim(" one on its own from natural language.")),console.log(s.dim(" AMAW is AMA plus self-activation: the agent may decide from natural language to author")),console.log(s.dim(" and run a workflow (run_workflow). /workflow behaves identically to AMA.")),console.log(s.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"),Jn("auto"),console.log(s.cyan(`
576
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /agent-mode ")+"Show current agent mode"),console.log(s.dim(" /agent-mode ama ")+"Adaptive multi-agent mode; workflows run only via the /workflow command"),console.log(s.dim(" /agent-mode amaw ")+"AMA + the agent may start a workflow itself from natural language"),console.log(s.dim(" /agent-mode ama-workflow")+"Alias for /agent-mode amaw"),console.log(s.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(s.dim(" /agent-mode toggle ")+"Cycle AMA -> AMAW -> SA"),console.log(s.dim(" /am ")+"Alias for /agent-mode"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" AMA runs the adaptive multi-agent harness. Workflows are command-gated: the /workflow")),console.log(s.dim(" command runs as a full scout-then-author Worker turn, but the agent never starts")),console.log(s.dim(" one on its own from natural language.")),console.log(s.dim(" AMAW is AMA plus self-activation: the agent may decide from natural language to author")),console.log(s.dim(" and run a workflow (run_workflow). /workflow behaves identically to AMA.")),console.log(s.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"),ot("auto"),console.log(s.cyan(`
577
577
  [Switched to auto mode] (saved)`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
578
578
  /auto - Quick Switch to Auto Mode
579
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto ")+"Switch to auto mode"),console.log(s.dim(" /a ")+"Alias for /auto"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Equivalent to /mode auto.")),console.log(s.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(s.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(s.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 Zo(Jo(o),"skill");return}await su(e,o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
579
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto ")+"Switch to auto mode"),console.log(s.dim(" /a ")+"Alias for /auto"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Equivalent to /mode auto.")),console.log(s.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(s.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(s.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 Qo(Zo(o),"skill");return}await gu(e,o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
580
580
  /skill - Skill Namespace
581
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(s.dim(" /skill reload ")+"Reload skills from disk"),console.log(s.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(s.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(s.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(s.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /skill ")+"# List all skills"),console.log(s.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(s.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(s.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(s.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 i=No().verifierLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
581
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(s.dim(" /skill reload ")+"Reload skills from disk"),console.log(s.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(s.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(s.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(s.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /skill ")+"# List all skills"),console.log(s.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(s.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(s.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(s.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 i=Oo().verifierLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
582
582
  Sidecar Verifier log: ${s.cyan(l)}${c}`)),console.log(s.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(s.dim(`Usage: /verifier-log [on|off]
583
583
  `));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(s.red(`
584
584
  [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /verifier-log [on|off]
585
- `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Je({verifierLog:t});ye(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
585
+ `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Ze({verifierLog:t});ye(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
586
586
  /verifier-log - Sidecar Verifier Log Toggle
587
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /verifier-log ")+"Show current state"),console.log(s.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(s.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(s.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(s.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(s.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.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 i=No().stallLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
587
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /verifier-log ")+"Show current state"),console.log(s.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(s.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(s.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(s.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(s.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.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 i=Oo().stallLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
588
588
  Stall Sidecar log: ${s.cyan(l)}${c}`)),console.log(s.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(s.dim(`Usage: /stall-log [on|off]
589
589
  `));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(s.red(`
590
590
  [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /stall-log [on|off]
591
- `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Je({stallLog:t});ye(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
591
+ `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Ze({stallLog:t});ye(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
592
592
  /stall-log - Stall Sidecar Log Toggle
593
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /stall-log ")+"Show current state"),console.log(s.dim(" /stall-log on ")+"Enable + persist to config"),console.log(s.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(s.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(s.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(s.dim(" a one-line summary:")),console.log(s.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},tt,rt,st,ti,Ci,Mt,Lt,_i,Nt],qd={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 zd(e){let o=bo();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(zd,"getCommandsForCategory");function Vt(e){return e!=="off"}a(Vt,"reasoningModeToLegacyThinking");function Yi(e){return e==="none"?"off":e??"auto"}a(Yi,"formatReasoningEffortDisplay");function Kd(e){return`Usage: /effort ${Wo(e.provider,e.model).join("|")}|<provider-value>`}a(Kd,"formatReasoningEffortUsage");function Bi(e){let o=Kr(e);return qr({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Bi,"formatCurrentReasoningEffortStatus");function Xd(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(Xd,"normalizeRepoIntelPublicMode");function Vd(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(Vd,"resolveToggleFlag");function Je(e){try{return $e(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Je,"persistUserConfig");function ye(e,o){if(o.saved){console.log(s.cyan(`
593
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /stall-log ")+"Show current state"),console.log(s.dim(" /stall-log on ")+"Enable + persist to config"),console.log(s.dim(" /stall-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Stall Sidecar (FEATURE_178) is the L2 anti-loop LLM judge that")),console.log(s.dim(" fires when the L1 rule-based detector spots a repeat-tool pattern.")),console.log(s.dim(" Off by default (silent happy path). When on, every L2 verdict emits")),console.log(s.dim(" a one-line summary:")),console.log(s.dim(" [Stall Sidecar] isStuck=true \xB7 zhipu/glm-5.1 (inherit) \xB7 1842ms \xB7 sidecar_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.dim(" KODAX_STALL_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},at,lt,ct,ci,Wi,Ot,Dt,Oi,jt],ou={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 nu(e){let o=xo();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(nu,"getCommandsForCategory");function Qt(e){return e!=="off"}a(Qt,"reasoningModeToLegacyThinking");function na(e){return e==="none"?"off":e??"auto"}a(na,"formatReasoningEffortDisplay");function tu(e){return`Usage: /effort ${No(e.provider,e.model).join("|")}|<provider-value>`}a(tu,"formatReasoningEffortUsage");function Vi(e){let o=Qr(e);return Jr({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Vi,"formatCurrentReasoningEffortStatus");function ru(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(ru,"normalizeRepoIntelPublicMode");function su(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(su,"resolveToggleFlag");function Ze(e){try{return $e(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Ze,"persistUserConfig");function ye(e,o){if(o.saved){console.log(s.cyan(`
594
594
  [${e}] (saved)`));return}console.log(s.yellow(`
595
- [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(ye,"printPersistedCommandStatus");function Gi(e,o,n){let t=Vt(e),r=e!=="off"&&n.effort==="none",i=Je({reasoningMode:e,thinking:t,...r?{effort:void 0}:{}});return o.setReasoningMode?o.setReasoningMode(e):(n.reasoningMode=e,n.thinking=t),r&&(o.setEffort?o.setEffort(void 0):(n.effort=void 0,n.effortOverride=!1)),i}a(Gi,"applyReasoningMode");function Ji(e){return e==="none"?"off":"auto"}a(Ji,"resolveReasoningModeAfterEffort");function Yd(e,o){let n=Ji(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:Vt(n)}}a(Yd,"resolveConfigAfterReasoningEffort");function Jd(e,o,n){let t=Ji(e),r=Vt(t),i=Je({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),i}a(Jd,"applyReasoningEffort");function Zd(e,o,n){let t=Je({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(Zd,"applyAgentMode");function qi(e,o,n,t){let r=Je(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(qi,"applyRepoIntelligenceRuntimeConfig");function Qd(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(Qd,"formatRepoIntelligenceSummary");function Kt(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(Kt,"getRepoIntelInspectionWorkspaceRoot");function eu(e){return e.status}a(eu,"formatRepoIntelStatusLabel");function ou(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(ou,"formatRepoIntelActiveEngine");function zi(e){console.log(s.bold(`
595
+ [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(ye,"printPersistedCommandStatus");function Yi(e,o,n){let t=Qt(e),r=e!=="off"&&n.effort==="none",i=Ze({reasoningMode:e,thinking:t,...r?{effort:void 0}:{}});return o.setReasoningMode?o.setReasoningMode(e):(n.reasoningMode=e,n.thinking=t),r&&(o.setEffort?o.setEffort(void 0):(n.effort=void 0,n.effortOverride=!1)),i}a(Yi,"applyReasoningMode");function ta(e){return e==="none"?"off":"auto"}a(ta,"resolveReasoningModeAfterEffort");function iu(e,o){let n=ta(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:Qt(n)}}a(iu,"resolveConfigAfterReasoningEffort");function au(e,o,n){let t=ta(e),r=Qt(t),i=Ze({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),i}a(au,"applyReasoningEffort");function lu(e,o,n){let t=Ze({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(lu,"applyAgentMode");function Ji(e,o,n,t){let r=Ze(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(Ji,"applyRepoIntelligenceRuntimeConfig");function cu(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(cu,"formatRepoIntelligenceSummary");function Jt(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(Jt,"getRepoIntelInspectionWorkspaceRoot");function du(e){return e.status}a(du,"formatRepoIntelStatusLabel");function uu(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(uu,"formatRepoIntelActiveEngine");function Zi(e){console.log(s.bold(`
596
596
  Repo Intelligence:
597
- `)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(ou(e))}`)),console.log(s.dim(` Status: ${s.cyan(eu(e))}`)),console.log(s.dim(` Trace: ${s.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(s.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(s.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(s.yellow(" Fallback: light engine is currently active")),e.error&&console.log(s.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(s.yellow(` Warning: ${o}`));console.log()}a(zi,"printRepoIntelStatus");function Ki(e,o){if(o.length!==0){console.log(s.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${s.cyan(`/${n.name}`)}${s.dim(t)} ${n.description}`)}console.log()}}a(Ki,"printCommandSection");function nu(){console.log(s.bold(`
597
+ `)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(uu(e))}`)),console.log(s.dim(` Status: ${s.cyan(du(e))}`)),console.log(s.dim(` Trace: ${s.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(s.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(s.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(s.yellow(" Fallback: light engine is currently active")),e.error&&console.log(s.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(s.yellow(` Warning: ${o}`));console.log()}a(Zi,"printRepoIntelStatus");function Qi(e,o){if(o.length!==0){console.log(s.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${s.cyan(`/${n.name}`)}${s.dim(t)} ${n.description}`)}console.log()}}a(Qi,"printCommandSection");function fu(){console.log(s.bold(`
598
598
  Available Commands:
599
- `));let e=bo(),o=new Set;for(let[t,r]of Object.entries(qd)){let i=zd(r);if(i.length!==0){for(let l of i)o.add(l.name.toLowerCase());Ki(t,i)}}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",i=n.get(r)??[];i.push(t),n.set(r,i)}for(let t of au()){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"])Ki(t,n.get(t)??[]);console.log(s.dim("Special syntax:")),console.log(` ${s.cyan("@path")} Attach image to context`),console.log(` ${s.cyan("!command")} Execute shell command`),console.log(),console.log(s.dim("Skills:")),console.log(` ${s.cyan("/skill")} List all available skills`),console.log(` ${s.cyan("/<skill-name>")} Invoke a skill when no command has that name`),console.log(` ${s.cyan("/skill:<name>")} Compatibility form (e.g., /skill:code-review)`),console.log(` ${s.cyan("/skill pending")} Review pending skill learning suggestions`),console.log(),console.log(s.dim(`Tip: ${s.cyan("/<command> help")} shows command-specific help.`)),console.log()}a(nu,"printHelp");function tu(e){let o=br({topic:e});console.log(`
599
+ `));let e=xo(),o=new Set;for(let[t,r]of Object.entries(ou)){let i=nu(r);if(i.length!==0){for(let l of i)o.add(l.name.toLowerCase());Qi(t,i)}}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",i=n.get(r)??[];i.push(t),n.set(r,i)}for(let t of hu()){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"])Qi(t,n.get(t)??[]);console.log(s.dim("Special syntax:")),console.log(` ${s.cyan("@path")} Attach image to context`),console.log(` ${s.cyan("!command")} Execute shell command`),console.log(),console.log(s.dim("Skills:")),console.log(` ${s.cyan("/skill")} List all available skills`),console.log(` ${s.cyan("/<skill-name>")} Invoke a skill when no command has that name`),console.log(` ${s.cyan("/skill:<name>")} Compatibility form (e.g., /skill:code-review)`),console.log(` ${s.cyan("/skill pending")} Review pending skill learning suggestions`),console.log(),console.log(s.dim(`Tip: ${s.cyan("/<command> help")} shows command-specific help.`)),console.log()}a(fu,"printHelp");function mu(e){let o=Er({topic:e});console.log(`
600
600
  ${s.cyan(o.title)}`),console.log(o.content),o.nextTopics.length>0&&console.log(s.dim(`
601
- Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(tu,"printManualTopic");function Xt(e){le.size===0&&wn();let o=le.get(e.toLowerCase());if(!o){let n=hn(e);if(!n){console.log(s.yellow(`
601
+ Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(mu,"printManualTopic");function Zt(e){le.size===0&&kn();let o=le.get(e.toLowerCase());if(!o){let n=vn(e);if(!n){console.log(s.yellow(`
602
602
  [Unknown command: /${e}. Type /help for available commands]`));return}console.log(s.cyan(`
603
603
  /${n.name}`)),n.aliases?.length&&console.log(s.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(s.dim(`
604
604
  ${n.description}`)),console.log(s.dim(`
605
- Usage: ${lu(n)}`)),console.log();return}o.detailedHelp?o.detailedHelp():(console.log(s.cyan(`
605
+ Usage: ${yu(n)}`)),console.log();return}o.detailedHelp?o.detailedHelp():(console.log(s.cyan(`
606
606
  /${o.name}`)),o.aliases?.length&&console.log(s.dim(`Aliases: ${o.aliases.join(", ")}`)),console.log(s.dim(`
607
607
  ${o.description}`)),o.usage&&console.log(s.dim(`
608
- Usage: ${o.usage}`)),console.log())}a(Xt,"printDetailedHelp");async function ru(e,o,n=[]){let t=n[0]?.toLowerCase(),r=e.contextTokenSnapshot?.currentTokens??Cn(e.messages),i=e.contextTokenSnapshot?.source??"estimate",l=Hr(o.provider),c=Gr(o.provider,o.model,o.reasoningMode);if(console.log(s.bold(`
608
+ Usage: ${o.usage}`)),console.log())}a(Zt,"printDetailedHelp");async function pu(e,o,n=[]){let t=n[0]?.toLowerCase(),r=e.contextTokenSnapshot?.currentTokens??_n(e.messages),i=e.contextTokenSnapshot?.source??"estimate",l=Xr(o.provider),c=Yr(o.provider,o.model,o.reasoningMode);if(console.log(s.bold(`
609
609
  Session Status:
610
- `)),console.log(s.dim(` Provider: ${s.cyan(o.provider)}${o.model?` / ${s.cyan(o.model)}`:""}`)),console.log(s.dim(` Permission: ${s.cyan(o.permissionMode)}`)),console.log(s.dim(` Reasoning: ${s.cyan(o.reasoningMode)}`)),console.log(s.dim(` Effort: ${s.cyan(Yi(o.effort))}`)),console.log(s.dim(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),l){let u=Wn(l),f=l.transport==="cli-bridge"?s.yellow(u):s.cyan(u);console.log(s.dim(` Provider Cap: ${f}`))}if(c&&c.status!=="allow"){let u=c.status==="block"?s.red:s.yellow;console.log(s.dim(` Provider Policy: ${u(c.summary)}`))}console.log(s.dim(` Session ID: ${e.sessionId}`)),console.log(s.dim(` Messages: ${e.messages.length}`)),console.log(s.dim(` Tokens: ~${r} (${i})`));let d=await _o({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:Kt(e)});console.log(s.dim(` Repo Intel: ${s.cyan(Qd(d))}`)),e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace: ${s.cyan(at(e.runtimeInfo))}`)):e.gitRoot&&console.log(s.dim(` Workspace: ${s.cyan(e.gitRoot)}`)),(t==="workspace"||t==="worktree"||t==="runtime")&&(e.runtimeInfo?.canonicalRepoRoot&&console.log(s.dim(` Canonical: ${e.runtimeInfo.canonicalRepoRoot}`)),e.runtimeInfo?.executionCwd&&console.log(s.dim(` Exec CWD: ${e.runtimeInfo.executionCwd}`)),e.runtimeInfo?.workspaceKind&&console.log(s.dim(` Kind: ${e.runtimeInfo.workspaceKind}`))),console.log(s.dim(` Created: ${e.createdAt}`)),console.log(s.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(ru,"printStatus");async function su(e,o){let n=ke(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await Vi(o.gitRoot);console.log(s.green(`
611
- Skills reloaded: ${r} skill(s)`)),console.log(s.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await We(o.gitRoot),iu(n.listUserInvocable())}a(su,"handleSkillNamespaceCommand");function iu(e){if(console.log(s.bold(`
610
+ `)),console.log(s.dim(` Provider: ${s.cyan(o.provider)}${o.model?` / ${s.cyan(o.model)}`:""}`)),console.log(s.dim(` Permission: ${s.cyan(o.permissionMode)}`)),console.log(s.dim(` Reasoning: ${s.cyan(o.reasoningMode)}`)),console.log(s.dim(` Effort: ${s.cyan(na(o.effort))}`)),console.log(s.dim(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),l){let u=Un(l),f=l.transport==="cli-bridge"?s.yellow(u):s.cyan(u);console.log(s.dim(` Provider Cap: ${f}`))}if(c&&c.status!=="allow"){let u=c.status==="block"?s.red:s.yellow;console.log(s.dim(` Provider Policy: ${u(c.summary)}`))}console.log(s.dim(` Session ID: ${e.sessionId}`)),console.log(s.dim(` Messages: ${e.messages.length}`)),console.log(s.dim(` Tokens: ~${r} (${i})`));let d=await Po({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:Jt(e)});console.log(s.dim(` Repo Intel: ${s.cyan(cu(d))}`)),e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace: ${s.cyan(ut(e.runtimeInfo))}`)):e.gitRoot&&console.log(s.dim(` Workspace: ${s.cyan(e.gitRoot)}`)),(t==="workspace"||t==="worktree"||t==="runtime")&&(e.runtimeInfo?.canonicalRepoRoot&&console.log(s.dim(` Canonical: ${e.runtimeInfo.canonicalRepoRoot}`)),e.runtimeInfo?.executionCwd&&console.log(s.dim(` Exec CWD: ${e.runtimeInfo.executionCwd}`)),e.runtimeInfo?.workspaceKind&&console.log(s.dim(` Kind: ${e.runtimeInfo.workspaceKind}`))),console.log(s.dim(` Created: ${e.createdAt}`)),console.log(s.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(pu,"printStatus");async function gu(e,o){let n=ke(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await oa(o.gitRoot);console.log(s.green(`
611
+ Skills reloaded: ${r} skill(s)`)),console.log(s.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await Ne(o.gitRoot),wu(n.listUserInvocable())}a(gu,"handleSkillNamespaceCommand");function wu(e){if(console.log(s.bold(`
612
612
  Available Skills:
613
613
  `)),e.length===0){console.log(s.dim(" No skills found.")),console.log(s.dim(`
614
- Skills can be placed in:`)),console.log(s.dim(" - .kodax/skills/")),console.log(s.dim(" - ~/.kodax/skills/")),console.log(s.dim(" - ~/.agents/skills/"));return}let o=bo(),n=e.map(r=>{let i=o.get(r.name)!==void 0||hn(r.name)!==void 0;return{skill:r,invocation:i?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:i}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:i}=r,l=r.invocation.padEnd(t),c=i.argumentHint?` ${i.argumentHint}`:"",d=i.source==="builtin"?" [builtin]":i.source==="user"?" [user]":i.source==="plugin"?" [plugin]":"",u=r.commandNameTaken?" [command name exists]":"",f=i.description.length>50?i.description.slice(0,50)+"...":i.description;console.log(` ${s.cyan(l)}${s.dim(c)}${s.dim(d)}${s.dim(u)} ${s.dim(f)}`)}console.log(),console.log(s.dim(`Total: ${e.length} skills`)),console.log(s.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(s.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(iu,"printSkillsListPiMonoStyle");var le=new Be;function wn(e){le.size>0||Hi(le,e)}a(wn,"initCommandRegistry");function bo(e){return wn(e),le}a(bo,"getCommandRegistry");function au(){return te()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(au,"getActiveExtensionCommands");function hn(e){let o=te(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(i=>i.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(hn,"getActiveExtensionCommand");function lu(e){return e.usage??`/${e.name}`}a(lu,"formatExtensionCommandUsage");function cu(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(cu,"formatExtensionDiagnosticValue");function du(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${cu(t)}`);return o.length>0?o.join(" | "):void 0}a(du,"formatExtensionDiagnosticMetadata");function Ye(e){let o=e.getDiagnostics;if(typeof o=="function")return o.call(e);let n=e.getDefaults,t=typeof n=="function"?n.call(e):void 0;return{loadedExtensions:[],capabilityProviders:e.listCapabilityProviders().map(r=>({id:r.id,kinds:[...r.kinds],source:{kind:"extension",id:`extension:${r.id}`,label:r.id,path:"(runtime)"}})),commands:e.listCommands().map(r=>({name:r.name,aliases:r.aliases,description:r.description,usage:r.usage,metadata:r.metadata,source:{kind:"extension",id:`extension-command:${r.name}`,label:r.name,path:"(runtime)"}})),tools:[],hooks:[],failures:[],defaults:{activeTools:t?.activeTools,modelSelection:t?.modelSelection??{},thinkingLevel:t?.thinkingLevel}}}a(Ye,"getExtensionRuntimeDiagnostics");function uu(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(uu,"toExtensionInvocationRequest");async function fu(e,o,n){let t=te();if(!t)return console.log(s.yellow(`
615
- [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(()=>Ye(t),"getDiagnostics"),logger:{debug:a((...l)=>console.debug(`[kodax:extension-command:${e.name}]`,...l),"debug"),info:a((...l)=>console.info(`[kodax:extension-command:${e.name}]`,...l),"info"),warn:a((...l)=>console.warn(`[kodax:extension-command:${e.name}]`,...l),"warn"),error:a((...l)=>console.error(`[kodax:extension-command:${e.name}]`,...l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let i=uu(e,r);return i?{invocation:i}:!0}a(fu,"executeExtensionCommand");function eh(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),i=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:i,skillInvocation:{name:c}}:{command:"skill",args:i}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),i=c?[c,...i]:i}return{command:r,args:i}}a(eh,"parseCommand");function Xi(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Xi,"isCommandHelpRequest");async function oh(e,o,n,t){if(le.size===0&&wn(o.gitRoot),e.skillInvocation)return await zt({command:e.skillInvocation.name,args:e.args},o);let r=le.get(e.command);if(r){if(r.userInvocable===!1)return console.log(s.yellow(`
616
- [Command /${r.name} is not user-invocable]`)),!1;if(Xi(e.args))return Xt(e.command),!0;try{let d=await r.handler(e.args,o,n,t);return d&&typeof d=="object"?d:!0}catch(d){return console.log(s.red(`
617
- [Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let i=hn(e.command);if(i){if(Xi(e.args))return Xt(e.command),!0;try{return await fu(i,e.args,o)}catch(d){return console.log(s.red(`
618
- [Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await mu(e,o);if(l)return await zt({command:l.skill.name,args:l.args},o);let c=await Zi(e.command,o);return c?await zt({command:c.name,args:e.args},o):(console.log(s.yellow(`
619
- [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(oh,"executeCommand");async function mu(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Zi(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(mu,"resolveNamespacedDirectSkillCommand");async function Zi(e,o){let n=ke(o.gitRoot);n.size===0&&await We(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(Zi,"resolveDirectSkillCommand");async function zt(e,o){let n=ke(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await We(o.gitRoot);try{let i=n.get(t);if(!i)return console.log(s.red(`
614
+ Skills can be placed in:`)),console.log(s.dim(" - .kodax/skills/")),console.log(s.dim(" - ~/.kodax/skills/")),console.log(s.dim(" - ~/.agents/skills/"));return}let o=xo(),n=e.map(r=>{let i=o.get(r.name)!==void 0||vn(r.name)!==void 0;return{skill:r,invocation:i?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:i}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:i}=r,l=r.invocation.padEnd(t),c=i.argumentHint?` ${i.argumentHint}`:"",d=i.source==="builtin"?" [builtin]":i.source==="user"?" [user]":i.source==="plugin"?" [plugin]":"",u=r.commandNameTaken?" [command name exists]":"",f=i.description.length>50?i.description.slice(0,50)+"...":i.description;console.log(` ${s.cyan(l)}${s.dim(c)}${s.dim(d)}${s.dim(u)} ${s.dim(f)}`)}console.log(),console.log(s.dim(`Total: ${e.length} skills`)),console.log(s.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(s.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(wu,"printSkillsListPiMonoStyle");var le=new Ge;function kn(e){le.size>0||Xi(le,e)}a(kn,"initCommandRegistry");function xo(e){return kn(e),le}a(xo,"getCommandRegistry");function hu(){return te()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(hu,"getActiveExtensionCommands");function vn(e){let o=te(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(i=>i.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(vn,"getActiveExtensionCommand");function yu(e){return e.usage??`/${e.name}`}a(yu,"formatExtensionCommandUsage");function ku(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(ku,"formatExtensionDiagnosticValue");function vu(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${ku(t)}`);return o.length>0?o.join(" | "):void 0}a(vu,"formatExtensionDiagnosticMetadata");function Je(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(Je,"getExtensionRuntimeDiagnostics");function $u(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($u,"toExtensionInvocationRequest");async function Su(e,o,n){let t=te();if(!t)return console.log(s.yellow(`
615
+ [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(()=>Je(t),"getDiagnostics"),logger:{debug:a((...l)=>console.debug(`[kodax:extension-command:${e.name}]`,...l),"debug"),info:a((...l)=>console.info(`[kodax:extension-command:${e.name}]`,...l),"info"),warn:a((...l)=>console.warn(`[kodax:extension-command:${e.name}]`,...l),"warn"),error:a((...l)=>console.error(`[kodax:extension-command:${e.name}]`,...l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let i=$u(e,r);return i?{invocation:i}:!0}a(Su,"executeExtensionCommand");function uh(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),i=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:i,skillInvocation:{name:c}}:{command:"skill",args:i}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),i=c?[c,...i]:i}return{command:r,args:i}}a(uh,"parseCommand");function ea(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(ea,"isCommandHelpRequest");async function fh(e,o,n,t){if(le.size===0&&kn(o.gitRoot),e.skillInvocation)return await Yt({command:e.skillInvocation.name,args:e.args},o);let r=le.get(e.command);if(r){if(r.userInvocable===!1)return console.log(s.yellow(`
616
+ [Command /${r.name} is not user-invocable]`)),!1;if(ea(e.args))return Zt(e.command),!0;try{let d=await r.handler(e.args,o,n,t);return d&&typeof d=="object"?d:!0}catch(d){return console.log(s.red(`
617
+ [Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let i=vn(e.command);if(i){if(ea(e.args))return Zt(e.command),!0;try{return await Su(i,e.args,o)}catch(d){return console.log(s.red(`
618
+ [Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await bu(e,o);if(l)return await Yt({command:l.skill.name,args:l.args},o);let c=await ra(e.command,o);return c?await Yt({command:c.name,args:e.args},o):(console.log(s.yellow(`
619
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(fh,"executeCommand");async function bu(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await ra(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(bu,"resolveNamespacedDirectSkillCommand");async function ra(e,o){let n=ke(o.gitRoot);n.size===0&&await Ne(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(ra,"resolveDirectSkillCommand");async function Yt(e,o){let n=ke(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await Ne(o.gitRoot);try{let i=n.get(t);if(!i)return console.log(s.red(`
620
620
  [Skill not found: ${t}]`)),!1;if(!i.userInvocable)return console.log(s.yellow(`
621
621
  [Skill "${t}" is not user-invocable]`)),!1;console.log(s.cyan(`
622
- [Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.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 wr(l,r,c);return console.log(s.green(`Skill activated: ${t}`)),console.log(s.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(i){return console.log(s.red(`
623
- [Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}a(zt,"executeSkillCommand");var yn=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=ke(this.gitRoot);return o.size===0&&await We(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 pu}from"node:child_process";import*as Ze from"node:path";import{promisify as gu}from"node:util";var Qi=gu(pu);function wu(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(wu,"pathFromPorcelainLine");async function ea(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([Qi("git rev-parse --show-toplevel",{cwd:e}),Qi("git status --porcelain=v1 -uall",{cwd:e})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
624
- `)){if(!c.trim())continue;let d=wu(c);if(!d)continue;let u=Ze.resolve(r,d),f=Ze.relative(e,u).split(Ze.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),i.push(f),i.length>=o))break}return i}catch{return[]}}a(ea,"getRecentWorkingSetFiles");function Qe(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(Qe,"findCommandSlashIndex");var Yt=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=ea){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let i=t.slice(r+1),l=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),u=d===-1?c:xo.join(c,i.slice(0,d)),f=d===-1?i:i.slice(d+1);try{let y=(await this.readdir(u)).filter(v=>v.toLowerCase().startsWith(f.toLowerCase()));for(let v of y){let k=xo.join(u,v),$=await this.isDirectory(k),g=d===-1?v:i.slice(0,d+1)+v;l.push({text:"@"+g+($?"/":""),display:v+($?"/":""),description:$?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),y=new Set(l.map($=>$.text)),v=f.toLowerCase(),k=[];for(let $ of m){if(f&&!xo.basename($).toLowerCase().startsWith(v))continue;let g="@"+$;y.has(g)||(y.add(g),k.push({text:g,display:$,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=>{kn.readdir(o,(i,l)=>{i?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{kn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},Jt=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of bo().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=te();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=Qe(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=Qe(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(i,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(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function gh(e){let o=new Yt(e),n=new yn,t=new Jt;return async r=>{let i=r.includes("@"),l=r.includes("/");if(!i&&!l)return[[],r];let c=[];if(l){let u=await hu(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(i&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>yu(r,u)),r]}}a(gh,"createCompleter");async function hu(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-5PWSKFKI.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(hu,"getArgumentCompletions");function yu(e,o){if(o.type!=="argument")return o.text;let n=Qe(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(yu,"formatReadlineCompletion");import{existsSync as $n,readdirSync as sa,readFileSync as ia}from"node:fs";import{join as Sn}from"node:path";var ku=[{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"}],vn=[{name:"on",description:"Map to reasoning auto",type:"enum"},{name:"off",description:"Disable reasoning",type:"enum"},{name:"auto",description:"Use semantic routing with adaptive depth",type:"enum"},{name:"quick",description:"Low-depth reasoning mode",type:"enum"},{name:"balanced",description:"Medium-depth reasoning mode",type:"enum"},{name:"deep",description:"High-depth reasoning mode",type:"enum"}],oa=vn.slice(2).concat([{name:"off",description:"Disable reasoning",type:"enum"}]);function vu(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Me(n))try{return Ue(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return Le().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(vu,"getModelArgs");var Zt=[{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"}],Qt=[{name:"all",description:"Delete ALL sessions",type:"enum"}],$u=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],Su=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],bu=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],na=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"amaw",description:"Use AMA workflow agent mode",type:"enum"},{name:"ama-workflow",description:"Alias for amaw",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],ta=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],xu=[{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"}],Au=[{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"}],Ru=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Eu=[{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"}],Tu=[{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"}],Cu=[{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"}],Iu=[{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"}],_u=[{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"}],Pu=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],Mu=[{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"}],Lu=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Wu=new Set(["show","delete","rerun","save","rename","revise"]),Nu=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Ou=[{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"}],Du=[{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"}],Uu=[".workflow.json",".ts",".mjs",".js"];function ju(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(ju,"workflowRunMatchesSubcommand");function bn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(bn,"isWorkflowRunEntryName");function Fu(e,o){let n=Sn(e,"workflow-metadata.json");if($n(n))try{let r=JSON.parse(ia(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&bn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&bn(t.trim())?t.trim():void 0}a(Fu,"readWorkflowRunDisplayName");function Hu(){let e=Ae(process.cwd()).key,o=H("workflow-runs",e);if(!$n(o))return[];let n=[];for(let t of sa(o)){if(!bn(t))continue;let r=Sn(o,t,"run.json");if($n(r))try{let i=JSON.parse(ia(r,"utf8")),l=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?",d=typeof i.endedAt=="number"?i.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=Fu(Sn(o,t),i);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(Hu,"getPersistedWorkflowRunIdArgs");function xn(e){let o=De().list().filter(r=>ju(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=Wu.has(e)?Hu():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(xn,"getWorkflowRunIdArgs");function Bu(e){for(let o of Uu)if(e.endsWith(o)){let n=e.slice(0,-o.length);return bn(n)?n:void 0}}a(Bu,"savedWorkflowNameFromFile");function Ao(e={}){let o=[{path:H("workflows"),source:"personal"},{path:Sn(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if($n(t.path))try{for(let r of sa(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=Bu(r);i&&n.set(i,{name:i,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(Ao,"getSavedWorkflowNameArgs");function Gu(){let e=new Map;for(let o of xn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Ao()){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(Gu,"getWorkflowRerunArgs");function er(e){let o=new Map;for(let n of xn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Ao({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(er,"getWorkflowRunOrSavedNameArgs");function ra(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Ao({generatedOnly:!0}):o.has("--run")?xn("delete"):er("delete")}a(ra,"getWorkflowDeleteTargetArgs");function qu(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...Mu,...Mo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Ao()];if(n==="rerun"&&t<=2)return Gu();if(n==="rename"&&t<=2)return er("rename");if(n==="delete"&&t<=2)return[...Du,...ra(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return ra(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...er("revise")];if(e[1]==="--replace"&&t<=3)return Ao()}return Lu.has(n)&&t<=2?xn(n):n==="runs"&&t<=2?Nu:n==="prune"&&t<=2?Ou:[]}a(qu,"getWorkflowArgs");function zu(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Cu:t>2?[]:n==="mode"?Iu:n==="trace"?_u:[]}a(zu,"getRepoIntelArgs");var Ku=new Map([["mode",ku],["thinking",vn],["think",vn],["t",vn],["reasoning",oa],["reason",oa],["status",Zt],["info",Zt],["ctx",Zt],["mcp",$u],["fallback",Su],["auto-engine",bu],["agent-mode",na],["am",na],["verifier-log",ta],["stall-log",ta],["memory",xu],["goal",Au],["paste",Ru],["review",Eu],["agents",Tu],["delete",Qt],["rm",Qt],["del",Qt]]),Xu=new Set(["model","m","provider"]),Vu=new Set(["repo-intel"]),Yu=new Set(["repointel","ri"]),Ju=new Set(["workflow"]);function or(e,o,n=[]){let t=e.toLowerCase();return Xu.has(t)?vu(o):Vu.has(t)?zu(n):Yu.has(t)?n.length<=1?Pu:[]:Ju.has(t)?qu(n):Ku.get(t)??[]}a(or,"getCommandArguments");var nr=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=Qe(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return or(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=Qe(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,m=(u[f]??"").toLowerCase(),y=or(c,m,u);if(!y||y.length===0)return[];let v=new Set(u.slice(0,-1).map($=>$.toLowerCase()));return y.filter($=>!v.has($.name.toLowerCase())).filter($=>!m||$.name.includes("/")?!0:$.name.toLowerCase().includes(m)).map($=>({text:$.name,display:$.name,description:$.description,type:"argument"})).sort(($,g)=>{if(!m)return 0;let R=$.display.toLowerCase().startsWith(m),I=g.display.toLowerCase().startsWith(m);return R&&!I?-1:!R&&I?1:$.display.length-g.display.length})}};function Th(){return new nr}a(Th,"createArgumentCompleter");export{et as a,G as b,cm as c,Ds as d,dm as e,Oo as f,ef as g,ua as h,of as i,so as j,ns as k,ts as l,io as m,Bn as n,Ea as o,Gn as p,zn as q,Kn as r,co as s,Pa as t,Xn as u,Fe as v,xs as w,As as x,Ga as y,Vf as z,Jn as A,Yf as B,Jf as C,Ps as D,Os as E,re as F,Fs as G,Hs as H,wm as I,il as J,kl as K,hm as L,zo as M,nt as N,ym as O,Js as P,km as Q,vm as R,$m as S,zm as T,Km as U,Xm as V,ri as W,at as X,si as Y,Ae as Z,ep as _,wo as $,mt as aa,Te as ba,Nc as ca,Oc as da,xi as ea,Rp as fa,Ep as ga,Yc as ha,bg as ia,xg as ja,Ag as ka,Bg as la,Gg as ma,qg as na,zg as oa,Kg as pa,Oi as qa,Qg as ra,ew as sa,Ui as ta,ow as ua,ji as va,eh as wa,oh as xa,yn as ya,nr as za,Th as Aa,Qe as Ba,Yt as Ca,Jt as Da,gh as Ea};
622
+ [Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.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 vr(l,r,c);return console.log(s.green(`Skill activated: ${t}`)),console.log(s.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(i){return console.log(s.red(`
623
+ [Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}a(Yt,"executeSkillCommand");var $n=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=ke(this.gitRoot);return o.size===0&&await Ne(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 xu}from"node:child_process";import*as Qe from"node:path";import{promisify as Au}from"node:util";var sa=Au(xu);function Ru(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(Ru,"pathFromPorcelainLine");async function ia(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([sa("git rev-parse --show-toplevel",{cwd:e}),sa("git status --porcelain=v1 -uall",{cwd:e})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
624
+ `)){if(!c.trim())continue;let d=Ru(c);if(!d)continue;let u=Qe.resolve(r,d),f=Qe.relative(e,u).split(Qe.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),i.push(f),i.length>=o))break}return i}catch{return[]}}a(ia,"getRecentWorkingSetFiles");function eo(e){let o=e.lastIndexOf("/");if(o===-1)return-1;for(;o>0&&!/\s/.test(e[o-1]??"");)if(o=e.lastIndexOf("/",o-1),o===-1)return-1;return o}a(eo,"findCommandSlashIndex");var er=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=ia){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let i=t.slice(r+1),l=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),u=d===-1?c:Ao.join(c,i.slice(0,d)),f=d===-1?i:i.slice(d+1);try{let y=(await this.readdir(u)).filter(v=>v.toLowerCase().startsWith(f.toLowerCase()));for(let v of y){let k=Ao.join(u,v),$=await this.isDirectory(k),g=d===-1?v:i.slice(0,d+1)+v;l.push({text:"@"+g+($?"/":""),display:v+($?"/":""),description:$?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),y=new Set(l.map($=>$.text)),v=f.toLowerCase(),k=[];for(let $ of m){if(f&&!Ao.basename($).toLowerCase().startsWith(v))continue;let g="@"+$;y.has(g)||(y.add(g),k.push({text:g,display:$,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=>{Sn.readdir(o,(i,l)=>{i?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{Sn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},or=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of xo().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=te();for(let n of o?.listCommands()??[])n.metadata?.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]})}canComplete(o,n){let t=o.slice(0,n),r=eo(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(i,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(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function Rh(e){let o=new er(e),n=new $n,t=new or;return async r=>{let i=r.includes("@"),l=r.includes("/");if(!i&&!l)return[[],r];let c=[];if(l){let u=await Eu(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(i&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>Tu(r,u)),r]}}a(Rh,"createCompleter");async function Eu(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-EN63ZVJK.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(Eu,"getArgumentCompletions");function Tu(e,o){if(o.type!=="argument")return o.text;let n=eo(e);if(n!==-1&&!/\s/.test(e.slice(n)))return`${e} ${o.text}`;let r=e.match(/\S+$/)?.[0]??"";return`${r?e.slice(0,e.length-r.length):e}${o.text}`}a(Tu,"formatReadlineCompletion");import{existsSync as xn,readdirSync as ua,readFileSync as fa}from"node:fs";import{join as An}from"node:path";var Cu=[{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"}],bn=[{name:"on",description:"Map to reasoning auto",type:"enum"},{name:"off",description:"Disable reasoning",type:"enum"},{name:"auto",description:"Use semantic routing with adaptive depth",type:"enum"},{name:"quick",description:"Low-depth reasoning mode",type:"enum"},{name:"balanced",description:"Medium-depth reasoning mode",type:"enum"},{name:"deep",description:"High-depth reasoning mode",type:"enum"}],aa=bn.slice(2).concat([{name:"off",description:"Disable reasoning",type:"enum"}]);function Iu(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Me(n))try{return je(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return Le().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Iu,"getModelArgs");var nr=[{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"}],tr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Pu=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],_u=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],Mu=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],la=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"amaw",description:"Use AMA workflow agent mode",type:"enum"},{name:"ama-workflow",description:"Alias for amaw",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],ca=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],Lu=[{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"}],Wu=[{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"}],Nu=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Ou=[{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"}],Du=[{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"}],Uu=[{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"}],ju=[{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"}],Fu=[{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"}],Hu=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],Bu=[{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"}],Gu=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),qu=new Set(["show","delete","rerun","save","rename","revise"]),zu=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Ku=[{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"}],Xu=[{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"}],Vu=[".workflow.json",".ts",".mjs",".js"];function Yu(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(Yu,"workflowRunMatchesSubcommand");function Rn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Rn,"isWorkflowRunEntryName");function Ju(e,o){let n=An(e,"workflow-metadata.json");if(xn(n))try{let r=JSON.parse(fa(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&Rn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Rn(t.trim())?t.trim():void 0}a(Ju,"readWorkflowRunDisplayName");function Zu(){let e=Ae(process.cwd()).key,o=H("workflow-runs",e);if(!xn(o))return[];let n=[];for(let t of ua(o)){if(!Rn(t))continue;let r=An(o,t,"run.json");if(xn(r))try{let i=JSON.parse(fa(r,"utf8")),l=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?",d=typeof i.endedAt=="number"?i.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=Ju(An(o,t),i);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(Zu,"getPersistedWorkflowRunIdArgs");function En(e){let o=Ue().list().filter(r=>Yu(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=qu.has(e)?Zu():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(En,"getWorkflowRunIdArgs");function Qu(e){for(let o of Vu)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Rn(n)?n:void 0}}a(Qu,"savedWorkflowNameFromFile");function Ro(e={}){let o=[{path:H("workflows"),source:"personal"},{path:An(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(xn(t.path))try{for(let r of ua(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=Qu(r);i&&n.set(i,{name:i,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(Ro,"getSavedWorkflowNameArgs");function ef(){let e=new Map;for(let o of En("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Ro()){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(ef,"getWorkflowRerunArgs");function rr(e){let o=new Map;for(let n of En(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Ro({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(rr,"getWorkflowRunOrSavedNameArgs");function da(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Ro({generatedOnly:!0}):o.has("--run")?En("delete"):rr("delete")}a(da,"getWorkflowDeleteTargetArgs");function of(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...Bu,...Mo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Ro()];if(n==="rerun"&&t<=2)return ef();if(n==="rename"&&t<=2)return rr("rename");if(n==="delete"&&t<=2)return[...Xu,...da(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return da(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...rr("revise")];if(e[1]==="--replace"&&t<=3)return Ro()}return Gu.has(n)&&t<=2?En(n):n==="runs"&&t<=2?zu:n==="prune"&&t<=2?Ku:[]}a(of,"getWorkflowArgs");function nf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Uu:t>2?[]:n==="mode"?ju:n==="trace"?Fu:[]}a(nf,"getRepoIntelArgs");var tf=new Map([["mode",Cu],["thinking",bn],["think",bn],["t",bn],["reasoning",aa],["reason",aa],["status",nr],["info",nr],["ctx",nr],["mcp",Pu],["fallback",_u],["auto-engine",Mu],["agent-mode",la],["am",la],["verifier-log",ca],["stall-log",ca],["memory",Lu],["goal",Wu],["paste",Nu],["review",Ou],["agents",Du],["delete",tr],["rm",tr],["del",tr]]),rf=new Set(["model","m","provider"]),sf=new Set(["repo-intel"]),af=new Set(["repointel","ri"]),lf=new Set(["workflow"]);function sr(e,o,n=[]){let t=e.toLowerCase();return rf.has(t)?Iu(o):sf.has(t)?nf(n):af.has(t)?n.length<=1?Hu:[]:lf.has(t)?of(n):tf.get(t)??[]}a(sr,"getCommandArguments");var ir=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return sr(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,m=(u[f]??"").toLowerCase(),y=sr(c,m,u);if(!y||y.length===0)return[];let v=new Set(u.slice(0,-1).map($=>$.toLowerCase()));return y.filter($=>!v.has($.name.toLowerCase())).filter($=>!m||$.name.includes("/")?!0:$.name.toLowerCase().includes(m)).map($=>({text:$.name,display:$.name,description:$.description,type:"argument"})).sort(($,g)=>{if(!m)return 0;let R=$.display.toLowerCase().startsWith(m),I=g.display.toLowerCase().startsWith(m);return R&&!I?-1:!R&&I?1:$.display.length-g.display.length})}};function Uh(){return new ir}a(Uh,"createArgumentCompleter");export{rt as a,G as b,km as c,Gs as d,vm as e,Do as f,uf as g,ha as h,ff as i,io as j,ls as k,cs as l,ao as m,Kn as n,Ma as o,Xn as p,Yn as q,Jn as r,uo as s,Da as t,Zn as u,He as v,Is as w,Ps as x,Ya as y,sm as z,ot as A,im as B,am as C,Ds as D,Bs as E,re as F,Ks as G,Xs as H,Rm as I,fl as J,Al as K,Em as L,Ko as M,it as N,Tm as O,ti as P,Cm as Q,Im as R,Pm as S,np as T,tp as U,rp as V,di as W,ut as X,ui as Y,Ae as Z,dp as _,ho as $,ht as aa,Te as ba,Hc as ca,Bc as da,Ii as ea,Np as fa,Op as ga,nd as ha,Mg as ia,Lg as ja,Wg as ka,Qg as la,ew as ma,ow as na,nw as oa,tw as pa,Bi as qa,cw as ra,dw as sa,qi as ta,uw as ua,zi as va,uh as wa,fh as xa,$n as ya,ir as za,Uh as Aa,eo as Ba,er as Ca,or as Da,Rh as Ea};