@kodax-ai/kodax 0.7.48 → 0.7.49

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 (49) hide show
  1. package/CHANGELOG.md +1741 -1720
  2. package/README.md +80 -27
  3. package/README_CN.md +60 -15
  4. package/dist/builtin/code-review/SKILL.md +1 -1
  5. package/dist/chunks/argument-completer-GDG5OHN7.js +2 -0
  6. package/dist/chunks/{chunk-LNJNRREL.js → chunk-67SWUEEN.js} +412 -280
  7. package/dist/chunks/chunk-C5PKZX5Z.js +291 -0
  8. package/dist/chunks/chunk-ISGHUKRY.js +428 -0
  9. package/dist/chunks/chunk-JTHMWRXM.js +566 -0
  10. package/dist/chunks/chunk-TYZAH3YP.js +2 -0
  11. package/dist/chunks/chunk-YACQ4OST.js +31 -0
  12. package/dist/chunks/{chunk-DEODZG6Q.js → chunk-YW4RQV7U.js} +1 -1
  13. package/dist/chunks/{compaction-config-YWCHOP2U.js → compaction-config-BQBYOWX2.js} +1 -1
  14. package/dist/chunks/{construction-bootstrap-AIWATBWW.js → construction-bootstrap-5TFGMSWQ.js} +1 -1
  15. package/dist/chunks/{dist-IDNOAB4M.js → dist-BL7IBQHD.js} +1 -1
  16. package/dist/chunks/dist-D7HOETCE.js +2 -0
  17. package/dist/chunks/{utils-OG57XTPC.js → utils-XWDT3W5X.js} +1 -1
  18. package/dist/index.d.ts +11 -11
  19. package/dist/index.js +2 -2
  20. package/dist/kodax_cli.js +1325 -892
  21. package/dist/provider-capabilities.json +193 -190
  22. package/dist/sdk-agent.d.ts +205 -103
  23. package/dist/sdk-agent.js +1 -1
  24. package/dist/sdk-coding.d.ts +534 -33
  25. package/dist/sdk-coding.js +1 -1
  26. package/dist/sdk-llm.d.ts +5 -5
  27. package/dist/sdk-llm.js +1 -1
  28. package/dist/sdk-mcp.js +1 -1
  29. package/dist/sdk-repl.d.ts +11 -10
  30. package/dist/sdk-repl.js +1 -1
  31. package/dist/sdk-session.d.ts +6 -3
  32. package/dist/sdk-session.js +1 -1
  33. package/dist/sdk-skills.js +1 -1
  34. package/dist/types-chunks/{base.d-BdJKSPO2.d.ts → base.d-C4jYVjJh.d.ts} +2 -1
  35. package/dist/types-chunks/{bash-prefix-extractor.d-DNO2-ycp.d.ts → bash-prefix-extractor.d-CI_xcPhn.d.ts} +68 -7
  36. package/dist/types-chunks/{file-tracker.d-D7L_SbRm.d.ts → capsule.d-DaPuhyyK.d.ts} +170 -5
  37. package/dist/types-chunks/{resolver.d-DkgJlEzr.d.ts → resolver.d-B_wm409c.d.ts} +2 -2
  38. package/dist/types-chunks/{storage.d-B1Jk6ryM.d.ts → storage.d-J2GqOgaX.d.ts} +4 -1
  39. package/dist/types-chunks/{types.d-BCnbYG_A.d.ts → types.d-BR9oNWup.d.ts} +363 -4
  40. package/dist/types-chunks/{types.d-B_MIIApc.d.ts → types.d-BnjX2Gn4.d.ts} +6 -1
  41. package/dist/types-chunks/{types.d-Cf-GCzac.d.ts → types.d-rPRl2LSB.d.ts} +4 -0
  42. package/dist/types-chunks/{utils.d-Dgy5SVrq.d.ts → utils.d-BJ_-y8gC.d.ts} +42 -8
  43. package/package.json +1 -1
  44. package/dist/chunks/chunk-66B6ZOU7.js +0 -31
  45. package/dist/chunks/chunk-6Z75SHX3.js +0 -2
  46. package/dist/chunks/chunk-EP46H5P3.js +0 -415
  47. package/dist/chunks/chunk-UHAP234X.js +0 -567
  48. package/dist/chunks/dist-4WABQRJU.js +0 -2
  49. package/dist/types-chunks/types.d-C5mHR87z.d.ts +0 -119
@@ -0,0 +1,428 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{A as tt,B as st,C as rt,l as re,m as vo,n as Qn,o as et,p as ot,q as bo,s as So,t as $o,u as nt,w as Ne,y as Y}from"./chunk-TYZAH3YP.js";import{a as it}from"./chunk-YW4RQV7U.js";import{Ab as H,Ae as Vn,Be as De,De as ye,Ec as Kn,Fc as Gn,Ia as jn,Ka as Fn,Kb as Bn,La as Hn,Le as Yn,Mb as zn,Me as Jn,Oa as wo,R as Wn,Re as Zn,Se as ke,U as he,V as Un,ne as qn,qe as we,t as Nn,ue as Oe,we as yo,xe as ko,ze as Xn}from"./chunk-67SWUEEN.js";import{j as fo,sa as Cn,ta as ne,ua as te}from"./chunk-YACQ4OST.js";import{Zc as se,_c as On,cc as Pn,dc as Mn,ec as _n,k as go,nd as Dn,rc as po,sb as En,sc as ho,tb as Tn,va as Le,wa as L,xb as In,xc as Ln}from"./chunk-JTHMWRXM.js";import{a as l,b as mo,c as er}from"./chunk-V4WSBIXB.js";var gt=mo((nc,ft)=>{"use strict";ft.exports=l(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 bt=mo((sc,vt)=>{"use strict";var kt="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",pt=new RegExp("^"+kt+"$"),ht="|&;()<> \\t",tr='"((\\\\"|[^"])*?)"',sr="'((\\\\'|[^'])*?)'",rr=/^#$/,wt="'",yt='"',xo="$",J="",ir=4294967296;for(Ao=0;Ao<4;Ao++)J+=(ir*Math.random()).toString(16);var Ao,lr=new RegExp("^"+J);function ar(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}l(ar,"matchAll");function cr(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+J+JSON.stringify(t)+J:o+t}l(cr,"getVar");function dr(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+ht+`]|[^\\s'"`+ht+"])+",i=new RegExp(["("+kt+")","("+r+"|"+tr+"|"+sr+")+"].join("|"),"g"),a=ar(e,i);if(a.length===0)return[];o||(o={});var c=!1;return a.map(function(d){var u=d[0];if(!u||c)return;if(pt.test(u))return{op:u};var g=!1,f=!1,y="",b=!1,k;function w(){k+=1;var A,M,W=u.charAt(k);if(W==="{"){if(k+=1,u.charAt(k)==="}")throw new Error("Bad substitution: "+u.slice(k-2,k+1));if(A=u.indexOf("}",k),A<0)throw new Error("Bad substitution: "+u.slice(k));M=u.slice(k,A),k=A}else if(/[*@#?$!_-]/.test(W))M=W,k+=1;else{var p=u.slice(k);A=p.match(/[^\w\d_]/),A?(M=p.slice(0,A.index),k+=A.index-1):(M=p,k=u.length)}return cr(o,"",M)}for(l(w,"parseEnvVar"),k=0;k<u.length;k++){var h=u.charAt(k);if(b=b||!g&&(h==="*"||h==="?"),f)y+=h,f=!1;else if(g)h===g?g=!1:g==wt?y+=h:h===t?(k+=1,h=u.charAt(k),h===yt||h===t||h===xo?y+=h:y+=t+h):h===xo?y+=w():y+=h;else if(h===yt||h===wt)g=h;else{if(pt.test(h))return{op:u};if(rr.test(h)){c=!0;var x={comment:e.slice(d.index+k+1)};return y.length?[y,x]:[x]}else h===t?f=!0:h===xo?y+=w():y+=h}}return b?{op:"glob",pattern:y}:y}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}l(dr,"parseInternal");vt.exports=l(function(o,n,t){var r=dr(o,n,t);return typeof n!="function"?r:r.reduce(function(i,a){if(typeof a=="object")return i.concat(a);var c=a.split(RegExp("("+J+".*?"+J+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return lr.test(d)?JSON.parse(d.split(J)[1]):d}))},[])},"parse")});var St=mo(Ro=>{"use strict";Ro.quote=gt();Ro.parse=bt()});import*as ro from"fs";import*as _e from"path";import s from"chalk";var We=["plan","accept-edits","auto","auto-in-project"];function Za(e){return e==="auto"||e==="auto-in-project"}l(Za,"isAutoMode");function or(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}l(or,"permissionModeDisplayName");var nr='[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 Qa(e=console.warn){let o=!1;return()=>{o||(o=!0,e(nr))}}l(Qa,"createAutoInProjectDeprecationEmitter");var lt=Bn(),ve=new Set(lt.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),at=new Set(lt.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),ct=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"]),dt=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 ut(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}}l(ut,"computeConfirmTools");function mt(e){return e!==void 0&&We.includes(e)}l(mt,"isPermissionMode");function be(e,o){return mt(e)?e:o}l(be,"normalizePermissionMode");import ze from"fs";import Dt from"path";import Ue from"fs";import T from"path";import $e from"os";var At=er(St(),1);var $t=new Set(["/dev/null","nul","NUL"]);function Co(e){return $t.has(e)||$t.has(e.toLowerCase())}l(Co,"isNullDevice");function Se(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`"))return{statements:[],unparseable:!0};let n;try{n=(0,At.parse)(o)}catch{return{statements:[],unparseable:!0}}let t=[],r=[],i=[],a=[],c=null,d=!1,u=l(()=>{(i.length>0||a.length>0)&&(r.push({argv:i,redirections:a}),i=[],a=[])},"flushStage"),g=l(f=>{u(),r.length>0&&(t.push({precedingOp:c,stages:r}),r=[]),c=f},"flushStatement");for(let f=0;f<n.length;f+=1){let y=n[f];if(typeof y=="string"){i.push(y);continue}if("op"in y){let b=y.op;if(b==="&&"||b==="||"||b===";"){g(b);continue}if(b==="|"){u();continue}if(b==="&"){let k=n[f+1];if(k!==void 0&&typeof k!="string"&&"op"in k&&(k.op===">"||k.op===">>")){let w=n[f+2];if(typeof w!="string"){d=!0,f+=1;continue}a.push(xt(`&${k.op}`,w)),f+=2;continue}d=!0;continue}if(mr(b)){let k=null,w=i[i.length-1];w!==void 0&&/^[0-9]+$/.test(w)&&(k=w,i.pop());let h=n[f+1];if(typeof h!="string"){d=!0;continue}a.push(xt(k?`${k}${b}`:b,h)),f+=1;continue}if(b==="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 g(null),{statements:t,unparseable:d}}l(Se,"parseBashCommand");var ur=new Set([">",">>","<","<<","<<<","&>","&>>"]),Rt=/^([0-9]+|&)(>>?|<<?)$/;function mr(e){return ur.has(e)||Rt.test(e)}l(mr,"isRedirectionOp");function xt(e,o){let n=null,t=e,r=Rt.exec(e);return r&&(n=r[1],t=r[2]),{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o}}l(xt,"parseRedirection");var fr=T.join(".agent","plan_mode_doc.md"),je=new Map,Fe=null;function gr(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of dt)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}l(gr,"isSingleBashReadCommand");var pr=/^[a-zA-Z0-9]+$/;function hr(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(!pr.test(t))return!1;return n}l(hr,"isHelpCommand");function To(e){if(!e||!e.trim())return!1;if(hr(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=Se(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||!Co(c.target))return!1;let a=i.argv.join(" ");if(a&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!gr(a))return!1}}return!0}l(To,"isBashReadCommand");function wr(e){let o=e.trim();return o?To(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]"}l(wr,"getDirectShellBypassBlockReason");var Et=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]);function Io(e){if(!e||!e.trim())return!1;let o=Se(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],a=r.length>=2?`${r[0]} ${r[1]}`:null;for(let c of ct)if(c===i||a!==null&&c===a)return!0}for(let i of r)if(Et.has(i))return!0;for(let i of t.redirections)if(!i.input&&!Co(i.target))return!0}return!1}l(Io,"isBashWriteCommand");function Po(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}}l(Po,"parseAllowedToolPattern");function yr(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}l(yr,"matchesBashPatternLegacy");function kr(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}l(kr,"matchesBashPatternByExtractedPrefix");async function Mo(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",a=[];for(let c of n){let d=Po(c);if(d.tool==="bash"){if(d.pattern===null)return!0;a.push({pattern:d.pattern})}}if(a.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 a)if(d&&kr(c.value,d))return!0;return!1}for(let{pattern:c}of a)if(c&&yr(i,c))return!0;return!1}l(Mo,"isToolCallAllowed");function _o(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})`}l(_o,"generateSavePattern");function xe(e,o){try{let n=T.resolve(e),t=T.resolve(o),r=Le(),i=T.join(t,".kodax");return ie(n,i)||ie(n,r)?!0:!(ie(n,t)||Pt().some(c=>ie(n,c)))}catch{return!1}}l(xe,"isAlwaysConfirmPath");function Ct(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"&&vr.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e))}l(Ct,"looksLikePath");var vr=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/;function br(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}l(br,"legacyRegexPathScan");function Be(e){let o=new Set,n=Se(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){for(let i of r.argv)Ct(i)&&o.add(i);for(let i of r.redirections)Ct(i.target)&&o.add(i.target)}for(let t of br(e))o.add(t);return Array.from(o)}l(Be,"extractPathsFromCommand");function Sr(e,o){let n=Be(e);for(let t of n)if(xe(t,o))return!0;return!1}l(Sr,"isCommandOnProtectedPath");function He(e){let o=T.normalize(e);return process.platform==="win32"?o.toLowerCase():o}l(He,"normalizePathForComparison");function $r(e,o){return He(e)===He(o)}l($r,"pathsEqual");function ie(e,o){let n=He(e),t=He(o);return n===t||n.startsWith(t+T.sep)}l(ie,"isPathInsideDirectory");function Lo(e,o){try{let n=T.resolve(o),t=T.resolve(n,It(Tt(e)));return ie(t,n)}catch{return!1}}l(Lo,"isPathInsideProject");function xr(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}l(xr,"collectAbsolutePathCandidates");function Oo(e){let o=T.resolve(e),n=je.get(o);if(n)return n;if(Ue.existsSync(o)){let c=Ue.realpathSync.native(o);return je.set(o,c),c}let t=[],r=o;for(;!Ue.existsSync(r);){let c=T.dirname(r);if(c===r)return je.set(o,o),o;t.unshift(T.basename(r)),r=c}let i=Ue.realpathSync.native(r),a=T.join(i,...t);return je.set(o,a),a}l(Oo,"resolveExistingPathPrefix");function Tt(e){return e==="~"?$e.homedir():e.startsWith(`~${T.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?T.join($e.homedir(),e.slice(2)):e}l(Tt,"expandHomeDirectory");function It(e){let o=$e.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}l(It,"expandSystemTempAlias");function Ar(e,o){let n=T.resolve(o??process.cwd()),t=It(Tt(e)),r=T.isAbsolute(t)?T.resolve(t):T.resolve(n,t);return Oo(r)}l(Ar,"resolvePermissionPath");function Pt(){if(Fe)return Fe;let e=new Set,o=[$e.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(Oo(n))}catch{}return Fe=Array.from(e),Fe}l(Pt,"getSystemTempDirectories");function Do(e){let o=Oo(e??process.cwd());return{projectPlanDoc:T.join(o,fr),systemTempDirs:Pt()}}l(Do,"getPlanModeAllowedWritablePaths");function Eo(e,o){let n=Ar(e,o),{projectPlanDoc:t,systemTempDirs:r}=Do(o);return $r(n,t)?!0:r.some(i=>ie(n,i))}l(Eo,"isPlanModeAllowedPath");function Rr(e){let{projectPlanDoc:o,systemTempDirs:n}=Do(e),t=n[0]??$e.tmpdir();return`${o} or the system temp directory (${t})`}l(Rr,"formatPlanModeAllowedLocations");var Cr=new Set(["-a","--append","-i","--ignore-interrupts"]);function Er(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];Cr.has(t)||t.startsWith("-")||o.push(t)}return o}l(Er,"collectTeeTargets");function Tr(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 a=e.argv[n+1];if(a!==void 0&&!a.startsWith("-")){o.push(a),n+=2;continue}}!r.startsWith("-")&&!t&&(o.push(r),t=!0),n+=1}return o}l(Tr,"collectPowerShellWriteTargets");function le(e){let o=new Set,n=l(r=>{let i=r?.trim();i&&o.add(i)},"pushTarget");for(let r of Be(e))n(r);let t=Se(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 a=i.argv[0]?.toLowerCase();if(a){if(a==="tee")for(let c of Er(i))n(c);else if(Et.has(a))for(let c of Tr(i))n(c)}}return Array.from(o)}l(le,"collectBashWriteTargets");function Mt(e,o){if(!Io(e))return{dangerous:!1};let n=new Set([...le(e),...xr(e)]);for(let t of n)if(!Lo(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}l(Mt,"getBashOutsideProjectWriteRisk");function _t(e,o,n){let t=Rr(n);if(zn(e))return null;if(ve.has(e)){let r=typeof o.path=="string"?o.path:"";return r?Eo(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(!Io(r))return null;let i=le(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 a=i.find(c=>!Eo(c,n));return a?`[Blocked] Plan mode only allows bash write operations in ${t}. Blocked target: ${a}`: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}.`}l(_t,"getPlanModeBlockReason");import G from"node:path";import Ir from"node:os";function ae(e,o){try{let n=G.resolve(e),t=G.resolve(o);return n===t?!0:n.startsWith(t+G.sep)}catch{return!1}}l(ae,"isPathUnder");function Pr(){try{return Le()}catch{return}}l(Pr,"safeGetAgentConfigHome");function Lt(e,o){let n=Pr();if(n&&ae(e,n))return"user-kodax";let t=G.join(G.resolve(o),".kodax");if(ae(e,t))return"project-kodax"}l(Lt,"resolveProtectedZone");function Mr(){let e=new Set;try{e.add(Ir.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)}l(Mr,"getSystemTempDirs");var _r=new Set(["bash"]),Lr={toolNames:_r,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,a=Mr(),c=G.resolve(o);for(let d of Be(n)){let u;try{u=G.resolve(o,d)}catch{continue}let g=Lt(u,o);if(g){r.has(u)||(r.add(u),t.push({kind:"protected_path",path:d,zone:g}));continue}if(xe(d,o)){let f=a.some(b=>ae(u,b)),y=ae(u,c);!f&&!y&&!i.has(u)&&(i.add(u),t.push({kind:"outside_project",path:d}))}}for(let d of le(n)){let u;try{u=G.resolve(o,d)}catch{continue}Lt(u,o)||ae(u,c)||a.some(y=>ae(u,y))||t.push({kind:"shell_redirect_outside",target:d})}return t}};var Ke=L("config.json");function Nt(){return Dt.join(process.cwd(),".kodax","config.local.json")}l(Nt,"getProjectConfigFile");function Bc(e=process.env){let n=Ae(Ke).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,a=r??i??"llm",c=Ot(n.classifierModel),d=Ot(e.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=e.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),g=u!==void 0?Number(u):NaN,f=Number.isFinite(g)&&g>0?Math.floor(g):void 0,y=typeof n.timeoutMs=="number"&&n.timeoutMs>0?Math.floor(n.timeoutMs):void 0;return{engine:a,classifierModel:c,classifierModelEnv:d,timeoutMs:f??y}}l(Bc,"loadAutoModeSettings");function Ot(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}l(Ot,"nonEmptyString");function Ae(e){try{if(ze.existsSync(e))return JSON.parse(ze.readFileSync(e,"utf-8"))}catch{}return{}}l(Ae,"readJsonFile");function Wt(e,o){ze.mkdirSync(Dt.dirname(e),{recursive:!0}),ze.writeFileSync(e,JSON.stringify(o,null,2))}l(Wt,"writeJsonFile");function No(e){let o=Ae(Ke);Wt(Ke,{...o,permissionMode:e})}l(No,"savePermissionModeUser");function zc(){let e=Ae(Ke),o=Ae(Nt()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}l(zc,"loadAlwaysAllowTools");function Kc(e,o,n=!1){let t=_o(e,o,n);if(!t)return;let r=Nt(),i=Ae(r),a=i.alwaysAllowTools??[];a.includes(t)||Wt(r,{...i,alwaysAllowTools:[...a,t]})}l(Kc,"saveAlwaysAllowToolPattern");var Wo=["ama","amaw","sa"];function Ut(e){let o=Wo.indexOf(e);return Wo[(o+1)%Wo.length]??"ama"}l(Ut,"nextAgentMode");var ce=class{static{l(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 a=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${a}"`)}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}},Or=new ce;import D from"chalk";import{Buffer as Bt}from"node:buffer";import{spawn as Dr}from"node:child_process";import jt from"node:process";var Z="\x1B",Nr="\x07",Uo=`${Z}\\`;function Ft(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}l(Ft,"shouldPreferNativeClipboard");function Wr(e,o){let n=Bt.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?Uo:Nr,r=`${Z}]52;c;${n}${t}`;return o.TMUX?`${Z}Ptmux;${r.replaceAll(Z,`${Z}${Z}`)}${Uo}`:o.STY?`${Z}P${r}${Uo}`:r}l(Wr,"buildOscSequence");async function Ge(e,o,n){return new Promise((t,r)=>{let i=Dr(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),a="";i.on("error",r),i.stderr?.on("data",c=>{a+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(a.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}l(Ge,"execClipboardCommand");function Ur(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=Bt.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}l(Ur,"buildWindowsClipboardCandidates");async function Ht(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Ur(e);for(let[r,i,a]of t)try{if(await Ge(r,i,a))return!0}catch{}return!1}case"darwin":return Ge("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await Ge(r,i,e))return!0}catch{}return!1}default:return!1}}l(Ht,"tryNativeClipboard");async function jr(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await Ge("tmux",n,e)}catch{return!1}}l(jr,"tryTmuxClipboard");async function zt(e,o={}){let n=o.env??jt.env,t=o.platform??jt.platform,r=e.trimEnd(),i=Wr(r,n);if(!r)throw new Error("Nothing to copy.");if(Ft(n,t))try{if(await Ht(r,n,t))return{path:"native"}}catch{}if(await jr(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!Ft(n,t))try{if(await Ht(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}l(zt,"copyTextToClipboard");function td(e){return e.type==="tool_summary"?{type:"event",text:e.text,icon:"tool"}:e}l(td,"seedToHistoryItem");var Fr="[Thinking]",Hr="[/Thinking]",Br="Untitled Session",Kt=50,zr=60,qt="...",Xt=["[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:"],Vt=[/(?:^|\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:/],Kr=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g;function Gr(e){let o=-1;for(let n of Xt){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of Vt){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}l(Gr,"findControlPlaneCutIndex");function qr(e){return Xt.some(o=>e.includes(o))||Vt.some(o=>o.test(e))}l(qr,"hasControlPlaneSignal");function Yt(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}l(Yt,"collectTextBlocks");function Xr(e){return typeof e=="string"?e:Array.isArray(e)?Yt(e).join(`
3
+ `):""}l(Xr,"extractAssistantTextOnly");function Ce(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}l(Ce,"pushSeed");function Gt(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}l(Gt,"stripLegacyTagBoundaryNewlines");function Vr(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?Re(String(n.command??"")):o==="read"||o==="write"||o==="edit"?Re(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?Re(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?Re(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}l(Vr,"formatToolUseSummary");function Re(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}l(Re,"truncateToolHint");function Yr(e){if(!e.includes(Fr)||!e.includes(Hr))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(Kr)){let r=t.index??-1,i=t[1]??"",a=t[2]??"";if(r<0)continue;let c=r+i.length;Ce(o,"assistant",Gt(e.slice(n,c))),Ce(o,"thinking",a),n=r+t[0].length}return Ce(o,"assistant",Gt(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}l(Yr,"parseLegacyAssistantContent");function Jr(e){if(typeof e=="string")return Yr(e);if(!Array.isArray(e))return[];let o=[],n=[],t=l(()=>{n.length!==0&&(Ce(o,"assistant",n.join(`
4
+ `)),n.length=0)},"flushAssistantBuffer");for(let r of e)if(!(!r||typeof r!="object"||!("type"in r)))switch(r.type){case"text":"text"in r&&n.push(String(r.text));break;case"thinking":t(),"thinking"in r&&Ce(o,"thinking",String(r.thinking));break;case"tool_use":if(t(),"name"in r){let i=Vr(r);i&&o.push({type:"tool_summary",text:i})}break;case"tool_result":case"redacted_thinking":break;default:break}return t(),o}l(Jr,"extractAssistantHistorySeeds");var Zr=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],Qr=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function ei(e){return Zr.some(o=>e.includes(o))}l(ei,"isManagedWorkerPrompt");function oi(e){return e.replace(Qr,"").trim()}l(oi,"stripManagedProtocolBlocks");function sd(e){switch(e.role){case"assistant":return Jr(e.content).map(n=>({...n,text:oi(n.text)})).filter(n=>n.text.length>0);case"user":{if(e._synthetic)return[];let o=Jt(e.content);return o.trim().length===0||ei(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}l(sd,"extractHistorySeedsFromMessage");function Jt(e){return typeof e=="string"?e:Array.isArray(e)?Yt(e).join(`
5
+ `):""}l(Jt,"extractTextContent");function ni(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>Kt?`${o.slice(0,Kt)}${qt}`:o:Br}l(ni,"formatSessionTitle");function jo(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n?.role!=="assistant")continue;let t=Xr(n.content);if(t)return t}return""}l(jo,"extractLastAssistantText");function rd(e,o,n,t){let r=[jo(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let a=Zt(i);if(a)return a}return""}l(rd,"resolveCompletedAssistantText");function Zt(e){let o=e.trim();if(!o)return"";let n=Gr(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}l(Zt,"sanitizeUserFacingAssistantText");function id(e){let o=e.trim();return o.length>0&&Zt(o).length===0&&qr(o)}l(id,"isControlPlaneOnlyAssistantText");function ld(e){let o=e.find(t=>t.role==="user"),n=o?Jt(o.content):"";return ni(n)}l(ld,"extractTitle");function ad(e,o=zr){let n=e.replace(/\n/g," "),t=n.length>o?qt:"";return n.slice(0,o)+t}l(ad,"formatMessagePreview");var Fo={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:l(async(e,o)=>{let n=jo(o.messages);if(!n){console.log(D.yellow(`
6
+ No assistant message found to copy.`)),console.log(D.dim("The assistant needs to respond first before you can copy its message."));return}try{await zt(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(D.green(`
7
+ Copied to clipboard!`)),console.log(D.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(D.red(`
8
+ Failed to copy to clipboard: ${r}`)),console.log(D.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:l(()=>{console.log(D.bold(`
9
+ /copy - Copy Last Assistant Message
10
+ `)),console.log("Usage:"),console.log(D.cyan(" /copy")+` - Copy the last assistant message to clipboard
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
+ `),console.log("Examples:"),console.log(D.dim(" User: Explain how async/await works")),console.log(D.dim(" AI: [responds with explanation]")),console.log(D.cyan(" /copy")+D.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*as U from"node:fs";import*as qe from"node:path";import v from"chalk";function ti(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}l(ti,"resolveCwd");function es(e){let o;try{o=U.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=qe.join(e,t.name),i="",a=0;try{i=U.readFileSync(r,"utf-8"),a=U.statSync(r).mtimeMs}catch(f){console.error(`[memory] failed to read ${r}:`,f);continue}let d=In(i).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,g=qe.basename(t.name,".md");n.push({filename:t.name,absPath:r,mtimeMs:a,title:d.name?.trim()||g,description:d.description?.trim()||g,type:d.type,parseOk:u})}return n}l(es,"readTopicFiles");function si(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}l(si,"buildIndexLines");async function ri(e,o){console.log(v.cyan(`
14
+ [memory] per-project memory directory`)),console.log(v.dim(` ${e}`));let n=es(e),t=n.filter(a=>!a.parseOk);console.log(v.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,i="";try{i=U.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(v.yellow(`
15
+ MEMORY.md does not exist yet.`)),n.length>0?console.log(v.dim(" Run `/memory rebuild` to seed it from existing topic files.")):console.log(v.dim(" The LLM will create it on first save \u2014 no action needed.")),console.log();return}console.log(v.cyan(`
16
+ --- MEMORY.md ---`)),i.trim().length===0?console.log(v.dim(" (empty)")):console.log(i.trimEnd()),console.log(v.cyan(`--- end ---
17
+ `))}l(ri,"listMemory");async function ii(e,o){let n=!1;try{n=U.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(v.yellow(`
18
+ [memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log(v.dim(` ${e}`)),console.log(v.dim(` The LLM will create both the directory and MEMORY.md on first save.
19
+ `));return}let t=es(e);if(t.length===0){console.log(v.yellow(`
20
+ [memory] no topic files found \u2014 nothing to rebuild.`)),console.log(v.dim(` ${e}
21
+ `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),a=si(r).join(`
22
+ `)+`
23
+ `;U.writeFileSync(o,a,"utf-8"),console.log(v.green(`
24
+ [memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log(v.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log(v.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log(v.dim(` - ${d.filename}`));console.log(v.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}l(ii,"rebuildMemory");function li(e,o){console.log(v.cyan(`
25
+ [memory] open these paths in your editor:`)),console.log(v.dim(" index :"),o),console.log(v.dim(" dir :"),e),console.log(v.dim(`
26
+ (No in-REPL editor is provided \u2014 open the file in your usual editor.
27
+ Use \`/memory rebuild\` after manual edits if you renamed any topic file.)
28
+ `))}l(li,"openMemory");function Qt(){console.log(v.cyan(`
29
+ /memory - Inspect or rebuild per-project memory`)),console.log(v.dim(" /memory List MEMORY.md + memory directory")),console.log(v.dim(" /memory list Same as `/memory`")),console.log(v.dim(" /memory rebuild Regenerate MEMORY.md from topic frontmatter")),console.log(v.dim(" /memory open Print paths so you can open them in your editor")),console.log(v.dim(" /memory help Show this help")),console.log()}l(Qt,"printHelp");function ai(){console.log(v.bold(`
30
+ /memory - Inspect or rebuild project memory
31
+ `)),console.log("Usage:"),console.log(v.cyan(" /memory ")+v.dim("Show MEMORY.md + topic file count")),console.log(v.cyan(" /memory list ")+v.dim("Alias for `/memory`")),console.log(v.cyan(" /memory rebuild ")+v.dim("Regenerate MEMORY.md (newest first by mtime)")),console.log(v.cyan(" /memory open ")+v.dim("Print the index + dir paths for editor use")),console.log(v.cyan(" /memory help ")+v.dim(`Show this help
32
+ `)),console.log("Description:"),console.log(v.dim(` Each project gets its own memory directory under your KodaX agent
33
+ home \u2014 \`<agentConfigHome>/projects/<project-key>/memory/\`. The LLM
34
+ owns reads/writes; this command is your escape hatch when the
35
+ MEMORY.md index drifts from the topic files on disk.
36
+ `)),console.log("Notes:"),console.log(v.dim(" \u2022 Rebuild ONLY rewrites MEMORY.md. Topic files are never touched.")),console.log(v.dim(" \u2022 Rebuild sorts entries by file mtime descending \u2014 the same")),console.log(v.dim(" natural-LRU order the LLM produces by prepending new entries.")),console.log(v.dim(" \u2022 Files missing or with malformed frontmatter still appear in")),console.log(v.dim(" the rebuilt index using their filename as fallback; the command")),console.log(v.dim(` prints a warning so you can fix the frontmatter.
37
+ `))}l(ai,"printDetailedHelp");var Ho={name:"memory",description:"Inspect or rebuild per-project memory (FEATURE_124)",usage:"/memory [list|rebuild|open|help]",argumentHint:"list | rebuild | open | help",handler:l(async(e,o)=>{let n=ti(o),t=En(n),r=Tn(n),i=(e[0]??"list").toLowerCase();if(i==="help"||i==="--help"||i==="-h"){Qt();return}if(i==="list"){await ri(t,r);return}if(i==="rebuild"){await ii(t,r);return}if(i==="open"){li(t,r);return}console.log(v.yellow(`
38
+ [memory] unknown subcommand: ${i}`)),Qt()},"handler"),detailedHelp:ai};import $ from"chalk";function os(){console.log(`
39
+ ${$.bold("/goal")} \u2014 persistent session goal
40
+
41
+ ${$.bold("Subcommands:")}
42
+ ${$.cyan("/goal <objective> [--tokens N]")} Create a new persistent goal.
43
+ ${$.cyan("/goal status")} Show current goal (default).
44
+ ${$.cyan("/goal pause")} Pause an active goal.
45
+ ${$.cyan("/goal resume")} Resume a paused goal.
46
+ ${$.cyan("/goal clear")} Clear the current goal.
47
+ ${$.cyan("/goal help")} Show this help.
48
+
49
+ ${$.bold("Notes:")}
50
+ - The agent auto-continues toward an active goal on every Worker turn end.
51
+ - Token budget is optional; set it only when you want a hard ceiling.
52
+ - update_goal({complete}) is verifier-gated; the agent cannot
53
+ self-declare done without runtime confirmation.
54
+ `.trim())}l(os,"printHelp");function ci(e){let o=null,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i==="--tokens"){let a=e[r+1];if(!a)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(a);if(!wo(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(i.startsWith("--tokens=")){let a=i.slice(9),c=Number(a);if(!wo(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"}}l(ci,"parseCreateArgs");function di(e){if(!e)return $.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${$.bold("Goal:")} ${e.objective}`,`${$.bold("Status:")} ${e.status}`,`${$.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${$.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${$.bold("Token budget:")} ${$.dim("none")}`);return o.push(`${$.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${$.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
55
+ `)}l(di,"renderStatus");async function Ee(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=On(e.lineage,n,t),await o.saveSession()}l(Ee,"persist");async function ui(e,o,n){if(!o.lineage){console.log($.red("[/goal] no active session lineage"));return}let t=se(o.lineage);if(t&&t.status!=="complete"){console.log($.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=ci(e);if("error"in r){console.log($.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await Ee(o,n,null,"cleared");let i=jn(r.objective,r.tokenBudget);await Ee(o,n,i,"created"),console.log($.green(`[/goal] created: "${i.objective}"`)),i.tokenBudget!==null&&console.log($.dim(` budget: ${i.tokenBudget} tokens`))}catch(i){let a=i instanceof Error?i.message:String(i);console.log($.red(`[/goal] ${a}`))}}l(ui,"doCreate");async function mi(e){if(!e.lineage){console.log($.red("[/goal] no active session lineage"));return}let o=se(e.lineage);console.log(di(o))}l(mi,"doStatus");async function fi(e,o){if(!e.lineage){console.log($.red("[/goal] no active session lineage"));return}let n=se(e.lineage);if(!n){console.log($.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log($.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=Fn(n);await Ee(e,o,t,"paused"),console.log($.green("[/goal] paused"))}l(fi,"doPause");async function gi(e,o){if(!e.lineage){console.log($.red("[/goal] no active session lineage"));return}let n=se(e.lineage);if(!n){console.log($.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log($.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=Hn(n);await Ee(e,o,t,"resumed"),console.log($.green("[/goal] resumed"))}l(gi,"doResume");async function pi(e,o){if(!e.lineage){console.log($.red("[/goal] no active session lineage"));return}if(!se(e.lineage)){console.log($.yellow("[/goal] no goal to clear"));return}await Ee(e,o,null,"cleared"),console.log($.green("[/goal] cleared"))}l(pi,"doClear");var ns={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:l(async(e,o,n)=>{let t=(e[0]??"status").toLowerCase();if(t==="help"||t==="--help"||t==="-h"){os();return}if(t==="status"){await mi(o);return}if(t==="pause"){await fi(o,n);return}if(t==="resume"){await gi(o,n);return}if(t==="clear"){await pi(o,n);return}await ui(e,o,n)},"handler"),detailedHelp:os};import{existsSync as N,readdirSync as Ai,readFileSync as Pe,rmSync as ls}from"node:fs";import{dirname as Ri,join as C}from"node:path";import m from"chalk";import Ko from"path";import{createHash as bi}from"crypto";import{execFile as hi}from"child_process";import wi from"fs";import Bo from"path";import{promisify as yi}from"util";var ki=yi(hi);function q(e){if(!(!e||!e.trim()))return Bo.resolve(e).replace(/\\/g,"/")}l(q,"normalizePath");async function Te(e,o){try{let{stdout:n}=await ki("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}l(Te,"gitStdout");function vi(e){let o=q(e);if(o)return Bo.posix.basename(o)===".git"?Bo.posix.dirname(o):o}l(vi,"deriveCanonicalRepoRoot");async function Td(e={}){let o=q(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=q(await Te(o,["rev-parse","--show-toplevel"])),t=await Te(n??o,["rev-parse","--path-format=absolute","--git-common-dir"])??await Te(n??o,["rev-parse","--git-common-dir"]),r=await Te(n??o,["branch","--show-current"])??await Te(n??o,["rev-parse","--abbrev-ref","HEAD"]);return{canonicalRepoRoot:vi(t)??n,workspaceRoot:n,executionCwd:o,branch:r&&r!=="HEAD"?r:void 0,workspaceKind:e.workspaceKind??"detected"}}l(Td,"inspectWorkspaceRuntime");function Id(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:q(e.canonicalRepoRoot)===q(o.canonicalRepoRoot)}l(Id,"isSameCanonicalRepo");function Pd(e){return!!(e?.workspaceRoot&&wi.existsSync(e.workspaceRoot))}l(Pd,"workspaceExists");function ts(e){let o=q(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=q(e.runtimeInfo?.executionCwd??o),t=q(e.runtimeInfo?.canonicalRepoRoot??o);if(!(!o&&!n&&!t))return{canonicalRepoRoot:t,workspaceRoot:o,executionCwd:n,branch:e.runtimeInfo?.branch,workspaceKind:e.runtimeInfo?.workspaceKind??"detected"}}l(ts,"resolveSessionRuntimeInfo");function zo(e){if(!e?.workspaceRoot)return"No git workspace detected";let o=e.branch?` @ ${e.branch}`:"",n=e.workspaceKind??"detected";return`${e.workspaceRoot}${o} [${n}]`}l(zo,"formatWorkspaceTruth");var ss="_unknown",rs=80;function Si(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}l(Si,"caseFold");function $i(e){return Si(Ko.resolve(e).replace(/\\/g,"/"))}l($i,"normalizeRoot");function is(e){return bi("sha256").update(e).digest("hex").slice(0,10)}l(is,"shortHash");function xi(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>rs?o.slice(o.length-rs):o}l(xi,"slugify");function de(e){if(!e||!e.trim())return{key:ss,canonicalRoot:null,displayName:ss};let o=$i(e),n=xi(o),t=n?`${n}-${is(o)}`:is(o),r=Ko.basename(Ko.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}l(de,"deriveProjectKeyFromRoot");function Nd(e){let o=ts({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return de(n)}l(Nd,"deriveProjectKeyFromData");var Ci=20,Ei=50,Ti=200,Ii=new Set(["completed","failed","stopped","denied"]),as=4,cs=180;function Pi(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}}return o==="pause"?{kind:"pause",runId:e[1]??""}:o==="resume"?{kind:"resume",runId:e[1]??""}:o==="stop"?{kind:"stop",runId:e[1]??""}:o==="delete"?{kind:"delete",runId:e[1]??""}:o==="prune"?{kind:"prune",rawArgs:e.slice(1)}:o==="save"?{kind:"save",runId:e[1]??"",name:e[2]??""}: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()}}l(Pi,"parseWorkflowInvocation");function Go(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}l(Go,"parseWorkflowArgs");function ys(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}l(ys,"parseNonNegativeInteger");function Mi(e){let o=!1,n=Ci;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let i=ys(e[t+1]);if(i===void 0||i<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(i,Ti),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}l(Mi,"parseWorkflowRunsOptions");function _i(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}l(_i,"parseOlderThanMs");function Li(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 a=ys(e[r+1]);if(a===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=a,r+=1;continue}if(i==="--older-than"){let a=_i(e[r+1]);if(a===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=a,r+=1;continue}return{dryRun:o,error:`unknown option: ${i??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:Ei}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}l(Li,"parseWorkflowPruneOptions");function ds(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${m.cyan(o.name)} \u2014 ${o.description}`).join(`
56
+ `)}l(ds,"formatWorkflowList");var Oi=6,Di=900;function Ni(e){let o=e.replace(/\r\n/g,`
57
+ `).replace(/\r/g,`
58
+ `).split(`
59
+ `),n=[],t=0,r=!1;for(let a of o){if(n.length>=Oi)break;let c=` ${a}`,d=Di-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 a=i>0?`${i} more line(s)`:"source truncated";n.push(` ... (${a}; full source omitted from prompt)`)}return n}l(Ni,"renderApprovalScriptPreview");function Ie(e,o){let n=l(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 ${m.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?m.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:",...Ni(o.rawScript)]:[]]:[]].join(`
60
+ `)}l(Ie,"renderApprovalPrompt");function qo(e){if(!N(e))return[];let o=[];for(let n of Ai(e)){let t=C(e,n,"run.json");if(N(t))try{let r=JSON.parse(Pe(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)}l(qo,"readWorkflowRuns");function Wi(e){let o=C(e,"events.jsonl");if(!N(o))return[];let n=Pe(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 a=i;if(typeof a.seq!="number"||typeof a.type!="string")continue;let c=a.data;t.push({seq:a.seq,type:a.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}l(Wi,"readWorkflowEvents");function Ui(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}l(Ui,"readStringArray");function Je(e){return typeof e=="string"&&e.trim().length>0?e:void 0}l(Je,"readNonEmptyString");function us(e,o){let n=o?Je(o.scriptSnapshotPath):C(e,"script.js"),t=o?Je(o.manifestSnapshotPath):C(e,"manifest.json");return!n||!t?!1:N(n)&&N(t)}l(us,"hasGeneratedWorkflowSnapshot");function ks(e,o){if(o)return us(e,o);let n=C(e,"run.json");if(!N(n))return!1;try{let t=JSON.parse(Pe(n,"utf8"));return typeof t=="object"&&t!==null?us(e,t):!1}catch{return!1}}l(ks,"hasRerunnableGeneratedWorkflowRun");function ji(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}}l(ji,"readWorkflowFailure");function Xo(e,o){let n=C(e,o),t=C(n,"run.json"),r=Wi(n),i=ji(r);if(!(!N(t)&&r.length===0)){if(!N(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(a=>a.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let a=JSON.parse(Pe(t,"utf8")),c=Je(a.scriptSnapshotPath),d=Je(a.manifestSnapshotPath);return{runId:o,workflow:typeof a.workflow=="string"?a.workflow:"?",status:typeof a.status=="string"?a.status:"?",totalSpawned:typeof a.totalSpawned=="number"?a.totalSpawned:0,eventCount:typeof a.eventCount=="number"?a.eventCount:r.length,runDir:n,canRerun:ks(n,a),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof a.startedAt=="number"?{startedAt:a.startedAt}:{},...typeof a.endedAt=="number"?{endedAt:a.endedAt}:{},...i?{error:i}:{},artifacts:Ui(a.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(a=>a.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}l(Xo,"readWorkflowRunDetail");function en(e){return e==="completed"?m.green("ok"):e==="failed"?m.red("x"):e==="running"?m.cyan("run"):e==="paused"?m.yellow("pause"):e==="stopped"?m.dim("stop"):e==="denied"?m.dim("deny"):m.dim("-")}l(en,"statusIcon");function Fi(e){return Ii.has(e)}l(Fi,"isTerminalWorkflowStatus");function Hi(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),r=t.map(i=>` ${en(i.status)} ${m.cyan(i.workflow)} ${m.dim(i.runId)} \u2014 ${i.status} (${i.totalSpawned} agents)`);return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&r.push(m.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),r.join(`
61
+ `)}l(Hi,"formatRunsList");function Bi(e){return e.length===0?" (no active workflow runs)":e.map(o=>` ${en(o.status)} ${m.cyan(o.workflow)} ${m.dim(o.runId)} - ${o.status} (${o.totalSpawned} agents, ${o.eventCount} events)`).join(`
62
+ `)}l(Bi,"formatManagedRunsList");function ue(e){return e.status==="running"||e.status==="paused"}l(ue,"isActiveManagedWorkflowRun");function zi(e,o,n=Date.now()){let t=e.filter(d=>Fi(d.status)).sort((d,u)=>u.endedAt-d.endedAt),r=o.keep===void 0?new Set:new Set(t.slice(0,o.keep).map(d=>d.runId)),i=o.keep!==void 0,a=o.olderThanMs!==void 0,c=o.olderThanMs===void 0?void 0:n-o.olderThanMs;return!i&&!a?[]:t.filter(d=>{let u=i?!r.has(d.runId):!0,g=c===void 0?!0:d.endedAt>0&&d.endedAt<c;return u&&g}).map(d=>({runId:d.runId,workflow:d.workflow,status:d.status,endedAt:d.endedAt}))}l(zi,"selectWorkflowPruneCandidates");function Ki(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${en(o.status)} ${m.cyan(o.workflow)} ${m.dim(o.runId)} - ${o.status}`).join(`
63
+ `)}l(Ki,"formatWorkflowPruneCandidates");function Gi(e,o){return e.filter(ue)[0]?.runId??e[0]?.runId??o[0]?.runId}l(Gi,"selectDefaultWorkflowRunId");function qi(e){return e.find(ue)?.runId}l(qi,"selectDefaultActiveWorkflowRunId");function ms(e){return e===void 0?void 0:new Date(e).toLocaleString()}l(ms,"formatTime");function Xi(e,o=10){let n=e.map(on).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}l(Xi,"formatRecentWorkflowEvents");function vs(e,o){return o?.canRerun??(e?.runDir?ks(e.runDir):!1)}l(vs,"canRerunWorkflowRun");function Vi(e){return e?e.artifacts.map(o=>({name:o,path:C(e.runDir,"artifacts",`${qn(o)}.json`)})):[]}l(Vi,"workflowArtifactRefs");function bs(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}l(bs,"formatWorkflowNextActions");function fs(e,o){return o?`Use /workflow show ${e} for events, or /workflow rerun ${e} after adjusting the request.`:`Use /workflow show ${e} for events.`}l(fs,"formatWorkflowFailureAction");function Yi(e,o,n={}){if(!e&&!o)return" (unknown workflow run)";let t=e?.workflow??o?.workflow??"?",r=e?.runId??o?.runId??"?",i=e?.status??o?.status??"?",a=e?.totalSpawned??o?.totalSpawned??0,c=e?.eventCount??o?.eventCount??0,d=e?.runDir??o?.runDir??"",u=ms(e?.startedAt??o?.startedAt),g=ms(e?.endedAt??o?.endedAt),f=e?.error??o?.error,y=o?.artifacts??[],b=Vi(o),k=e?.resultText,w=n.full===!0||k===void 0?xs(b,Ze(t),{full:n.full===!0}):void 0,h=n.full===!0?w??k:k!==void 0?tn(k):w,x=h?$s(h,r,Ze(h)):void 0,A=n.full===!0||!h||!rl(h)?"result:":"result preview:",M=o?Xi(o.events):[],W=vs(e,o);return[` ${m.cyan(t)} ${m.dim(r)}`,` status: ${i}`,` agents: ${a}`,` events: ${c}`,...u?[` started: ${u}`]:[],...g?[` ended: ${g}`]:[],...d?[` run dir: ${d}`]:[],...y.length>0?[` artifacts: ${y.join(", ")}`]:[],...f?[` error: ${f}`]:[],...x?["",` ${A}`,...x.split(`
64
+ `).map(p=>` ${p}`)]:[],...M.length>0?[""," recent events:",...M.map(p=>` ${p.trimEnd()}`)]:[],"",` next: ${bs(r,W)}`].join(`
65
+ `)}l(Yi,"formatWorkflowRunSnapshot");function Ji(e){return{project:C(e,".kodax","workflows"),personal:L("workflows")}}l(Ji,"savedWorkflowDirs");function Zi(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${m.cyan(o.name)} ${m.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
66
+ `)}l(Zi,"formatSavedList");function Qi(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}l(Qi,"isSafeWorkflowRunId");function el(){return[`${m.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${m.bold("Subcommands:")}`,` ${m.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${m.cyan("/workflow create <request>")} Generate a restricted workflow from a complex request.`,` ${m.cyan("/workflow <name> [args]")} Run a built-in or saved workflow. Args may be JSON or bare text.`,` ${m.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${m.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${m.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${m.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${m.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${m.cyan("/workflow delete <runId>")} Delete one persisted run record.`,` ${m.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${m.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${m.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${m.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${m.bold("Examples:")}`,` ${m.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${m.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${m.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${m.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${m.dim("/workflow prune --dry-run")}`,` ${m.dim("/workflow save run-lx3 generated-audit")}`,"",`${m.bold("Safety:")}`," - Generated and workflow capsule (.workflow.json) workflows run in the capability WorkflowApi runner."," - For rerun, a run id reruns its saved snapshot; a saved name runs the current saved capsule version."," - 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(`
67
+ `)}l(el,"renderWorkflowHelp");function gs(){console.log(`
68
+ ${el()}
69
+ `)}l(gs,"printWorkflowHelp");function Yo(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())))})}l(Yo,"resolveConfirm");function ol(e){console.log(m.red(`
70
+ [workflow] invalid run id: ${e||"<empty>"}
71
+ `))}l(ol,"printInvalidRunId");function Q(e){return Qi(e)?!0:(ol(e),!1)}l(Q,"ensureSafeRunId");function Jo(){let e=nl(process.cwd());return{isGitRepo:e,worktreeCapable:e}}l(Jo,"currentWorkflowPreflightEnv");function nl(e){let o=e;for(;;){if(N(C(o,".git")))return!0;let n=Ri(o);if(n===o)return!1;o=n}}l(nl,"hasGitMarker");function Zo(e){console.log(m.red(`
72
+ [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(m.red(` - ${o.requirement}: ${o.message}`));console.log()}l(Zo,"printPreflightFailure");function Qo(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(m.yellow(`
73
+ [workflow] capsule preflight warnings:`));for(let n of o)console.log(m.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}l(Qo,"printPreflightWarnings");async function tl(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
74
+ ${e.path}`)){console.log(m.dim(`Workflow cancelled.
75
+ `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t;if(e.execution==="capability-generated"){let i=await yo(e.path),a=De(i,Jo());if(!a.ok){Zo(a);return}Qo(a),n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:i.manifest.mayUseWorktree===!0,rawScriptPath:e.path,rawScript:i.source},t={manifest:i.manifest,source:i.source}}let r=await ko(e.path);return t?{module:r,approvalContext:n,scriptSnapshot:t}:{module:r,approvalContext:n}}catch(n){let t=n instanceof Error?n.message:String(n);console.log(m.red(`
76
+ [workflow] failed to load ${e.path}: ${t}
77
+ `));return}}l(tl,"prepareSavedWorkflow");function Ss(e){let o=e.data?.status;return typeof o=="string"?o:void 0}l(Ss,"workflowEventStatus");function on(e){let o=e.data?.name??e.data?.taskId??"",n=Ss(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}`:` done ${o}`;case"agent_stopped":return` stopped ${o}`;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}}l(on,"formatWorkflowEvent");function sl(e){let o=on(e);o&&console.log(m.dim(o))}l(sl,"renderWorkflowEvent");var ps=6e3,hs=360,nn="[truncated]";function Ze(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}l(Ze,"detectWorkflowLocale");function Vo(...e){return Ze(e.filter(o=>typeof o=="string").join(`
78
+ `))}l(Vo,"inferWorkflowLocaleFromParts");function ee(e,o={}){let n=e.trim();return o.full===!0||n.length<=ps?n:`${n.slice(0,ps).trimEnd()}
79
+
80
+ ${nn}`}l(ee,"trimResultPreview");function rl(e){return e.includes(nn)}l(rl,"isWorkflowResultPreviewTruncated");function il(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.]`}l(il,"formatWorkflowResultTruncationHint");function $s(e,o,n){let t=e.lastIndexOf(nn);return t<0?e:`${e.slice(0,t).trimEnd()}
81
+
82
+ ${il(o,n)}`}l($s,"replaceWorkflowResultTruncationMarker");function ll(e){let o=e.replace(/\s+/g," ").trim();return o.length<=hs?o:`${o.slice(0,hs).trimEnd()}...`}l(ll,"trimWorkflowLaunchSummary");function tn(e,o={}){if(typeof e=="string"&&e.trim().length>0)return ee(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return ee(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return ee(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 ee(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 ee(n,o)}}catch{}}l(tn,"formatResult");function al(e,o={}){let n=[...e].reverse().filter(a=>a.type==="agent_completed"&&V(a,"status")==="completed"),r=n.find(a=>V(a,"name")==="synthesize")??n[0],i=r?V(r,"summary"):void 0;return i?ee(i,o):void 0}l(al,"formatFinalEventSummary");function cl(e,o={}){if(!(!e.path||!N(e.path)))try{let n=JSON.parse(Pe(e.path,"utf8")),t=tn(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?ee(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}l(cl,"formatArtifactPreview");function xs(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let i=e[r];if(!i)continue;let a=cl(i,n);if(a)return o==="zh"?`\u4EA7\u7269 ${i.name}:
83
+ ${a}`:`Artifact ${i.name}:
84
+ ${a}`}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}`}l(xs,"formatArtifactResult");function dl(e){let o=e.resultText?$s(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}
85
+
86
+ ${r}
87
+
88
+ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u751F\u6210\u811A\u672C\u8FDD\u53CD\u7ED3\u679C\u5951\u7EA6\uFF1A\u6CA1\u6709\u8FD4\u56DE\u53EF\u76F4\u63A5\u5C55\u793A\u7684\u6700\u7EC8\u7ED3\u679C\u6216\u53EF\u9884\u89C8\u4EA7\u7269\u3002\u8FD9\u4E0D\u662F\u6B63\u5E38\u5B8C\u6210\u72B6\u6001\uFF0C\u9700\u8981\u4FEE\u590D\u751F\u6210\u811A\u672C\u540E\u91CD\u65B0\u8FD0\u884C\u3002"].join(`
89
+ `)}let n=e.resultText&&e.isFallbackPreview!==!0?`Workflow completed (${e.totalSpawned} agents, run ${e.runId}).`:`Workflow ended with a result contract failure (${e.totalSpawned} agents, run ${e.runId}).`;if(o){let t=e.isFallbackPreview===!0?"Result contract violation: the workflow ended without returning a complete final result. Last synthesis output:":"Final result:";return`${n}
90
+
91
+ ${t}
92
+
93
+ ${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(`
94
+ `)}l(dl,"formatWorkflowCompletionAnswer");function ul(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=ll(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(`
95
+ `)}let a=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. ${a}`,"Progress will update below, and I will summarize the result when it finishes."].join(`
96
+ `)}l(ul,"formatWorkflowLaunchAnswer");function V(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}l(V,"readEventString");function ml(e,o="en",n){if(e.type!=="agent_completed"||V(e,"status")!=="completed")return;let t=V(e,"summary");if(!t)return;let r=V(e,"summaryKind"),i=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",a=V(e,"name")??V(e,"taskId")??"agent";return kl(a,t,o,n,i)}l(ml,"formatWorkflowAgentDigest");function fl(e){let o=e.replace(/\s+/g," ").trim();return o.length<=cs?o:`${o.slice(0,cs).trimEnd()}...`}l(fl,"trimWorkflowAgentDigestExcerpt");function gl(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)}l(gl,"isHighSignalWorkflowAgentDigestLine");function pl(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)}l(pl,"isLowInformationWorkflowAgentDigestLine");function hl(e){return e.replace(/\s+/g," ").trim()}l(hl,"compactWorkflowAgentDigestLine");function wl(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=hl(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!pl(t))return o.truncateLines===!1?t:fl(t)}l(wl,"normalizeWorkflowAgentDigestLine");function yl(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let i=wl(r,o);if(!i)continue;let a=gl(i)?n:t;n.includes(i)||t.includes(i)||a.push(i)}return n.length>0?n.slice(0,as):t.length>0?t.slice(0,as):[]}l(yl,"extractWorkflowAgentDigestExcerpts");function kl(e,o,n,t,r="excerpt"){let i=r==="digest",c=yl(o,{truncateLines:!i}).map(g=>`- ${g}`),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(`
97
+ `):[u,...c,d].join(`
98
+ `)}l(kl,"formatWorkflowAgentLongDigest");function vl(e){return(o,n="en")=>ml(o,n,e)}l(vl,"createWorkflowAgentDigestLimiter");function ws(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,a=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof i=="number"&&Number.isFinite(i)&&i>0?i:0;return a+c}l(ws,"readWorkflowEventUsageTokens");function _(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(m.red(`
99
+ ${o.text}
100
+ `));return}if(o.type==="success"){console.log(m.green(`
101
+ ${o.text}
102
+ `));return}if(o.type==="event"){console.log(m.dim(o.text));return}if(o.type==="assistant"){console.log(`
103
+ ${o.text}
104
+ `);return}console.log(m.dim(`
105
+ ${o.text}
106
+ `))}l(_,"emitWorkflowRunMessage");function Xe(e,o,n={}){let t=n.presentation==="agentic"?vl(n.runId??"current"):void 0;return r=>{o?.onEvent(r);let i=on(r);if(i){if(e.onWorkflowRunMessage){if(_(e,{type:"event",text:i}),t){let a=t(r,n.locale??"en");a&&_(e,{type:"assistant",text:a,final:!1})}return}sl(r)}}}l(Xe,"workflowEventSink");function Ve(e,o,n,t="en"){let r=Date.now(),i=new Map,a,c=0,d=0,u=0,g=0,f=0,y=!1,b=n.phases??[],k=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,w=l((h,x)=>{let A=a===void 0?-1:b.indexOf(a),M=A>=0?A+1:void 0,W=b.length>0?b.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:h,...a!==void 0?{phase:a}:{},...M!==void 0?{phaseIndex:M}:{},...W!==void 0?{phaseTotal:W}:{},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:f,...k!==void 0?{tokenBudgetTotal:k}:{},completedAgents:d,failedAgents:u,stoppedAgents:g,...x!==void 0?{message:x}:{},locale:t})},"emit");return{running:l(h=>{y||w("running",h)},"running"),onEvent:l(h=>{if(!y)switch(h.type){case"phase_started":{let x=h.data?.name;a=typeof x=="string"?x:a,w("running");break}case"agent_spawned":{let x=typeof h.data?.taskId=="string"?h.data.taskId:`task-${c+1}`,A=typeof h.data?.name=="string"?h.data.name:x;i.set(x,A),c+=1,w("running");break}case"agent_completed":{let x=typeof h.data?.taskId=="string"?h.data.taskId:void 0;x&&i.delete(x),f+=ws(h.data),Ss(h)==="failed"?u+=1:d+=1,w("running");break}case"agent_stopped":{let x=typeof h.data?.taskId=="string"?h.data.taskId:void 0;x&&i.delete(x),f+=ws(h.data),g+=1,w("running");break}case"synthesis_completed":{w("running","synthesis complete");break}default:break}},"onEvent"),complete:l((h,x)=>{y||(y=!0,w(h,x))},"complete")}}l(Ve,"createWorkflowLiveUpdateEmitter");function Ye(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}t?.complete("failed",i.error.message),_(o,{type:"error",text:[`Workflow failed (${n}): ${i.error.message}`,fs(n,r.canRerun===!0)].join(`
107
+ `)});return}if(i.kind==="completed"){let a=r.locale??"en",c={full:r.presentation==="agentic"},d=tn(i.result,c)??xs(i.state.artifacts,a,c),u=d===void 0?al(i.state.events,c):void 0,g=d??u;if(t?.complete("completed",g?"completed with result":"completed"),r.presentation==="agentic"){_(o,{type:"assistant",text:dl({runId:n,totalSpawned:i.state.totalSpawned,...g!==void 0?{resultText:g}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:a}),final:!0});return}_(o,{type:"success",text:[`Workflow completed (${i.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
108
+ `)}),g&&_(o,{type:"info",text:`Workflow result:
109
+ ${g}`})}}).catch(i=>{let a=i instanceof Error?i.message:String(i);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",a),_(o,{type:"error",text:[`Workflow failed (${n}): ${a}`,fs(n,r.canRerun===!0)].join(`
110
+ `)})})}l(Ye,"observeManagedWorkflowDone");function X(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){_(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(m.dim(`
111
+ [workflow] ${o.message}
112
+ `))}l(X,"emitWorkflowBuilderEvent");async function bl(e){let o=e.approval==="required"?Yo(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(m.red(`
113
+ [workflow] refusing to generate a workflow without an interactive approval channel.
114
+ `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(m.red(`
115
+ [workflow] cannot generate - REPL options unavailable in this context.
116
+ `)),"failed";let t=Ze(e.request),r,i;try{X(e,{stage:"started",message:"Workflow builder started"}),X(e,{stage:"generating",message:"Workflow - generating harness"}),r=n(),i=await(e.generateWorkflow??Yn)({request:e.request,options:r}),X(e,{stage:"validating",message:"Workflow - validating harness"})}catch(w){let h=w instanceof Error?w.message:String(w);return X(e,{stage:"failed",message:h}),"failed"}if(i.kind==="declined")return X(e,{stage:"declined",message:i.reason}),console.log(m.dim(`
117
+ Workflow not created: ${i.reason}
118
+ `)),"declined";X(e,{stage:"ready",message:"Workflow - harness ready"});let a=e.presentation??"command",c=we(i.module);a!=="agentic"&&_(e.callbacks,{type:"info",text:`Generated workflow: ${i.approvalSummary}`});let d=de(process.cwd()).key,u=e.runBaseDir??L("workflow-runs",d),g=e.runManager??ye(),f=`run-${Date.now().toString(36)}`,y=C(u,f);if(o){if(!await o(Ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0,rawScript:i.scriptSnapshot.source})))return X(e,{stage:"cancelled",message:"Workflow cancelled"}),_(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else a!=="agentic"&&(_(e.callbacks,{type:"info",text:Ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0})}),_(e.callbacks,{type:"info",text:"AMAW auto-start: capability-isolated generated workflow; normal permission gates still apply."}));a==="agentic"?_(e.callbacks,{type:"assistant",text:ul({runId:f,summary:c,approvalSummary:i.approvalSummary,locale:t}),final:!1}):_(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${f}). Use /workflow show ${f} for status.`});let b=Ve(e.callbacks,f,i.module.meta,t);b.running(`Use /workflow show ${f} for status or /workflow stop ${f} to stop.`);let k=g.startFromOptions({module:i.module,args:{request:e.request},options:r,runId:f,runDir:y,scriptSnapshot:i.scriptSnapshot,onEvent:Xe(e.callbacks,b,{presentation:e.presentation??"command",locale:t,runId:f})});return X(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),Ye(k,e.callbacks,f,b,{canRerun:!0,presentation:a,locale:t}),"started"}l(bl,"startGeneratedWorkflowFromRequest");var As={name:"workflow",description:"Run a dynamic multi-agent workflow (FEATURE_217)",usage:"/workflow [help | list | runs | show | pause | resume | stop | delete | prune | rerun | save | create | <name> [args]]",argumentHint:"help | list | runs [--all|--limit N] | show [runId] | pause <runId> | resume <runId> | stop [runId] | delete <runId> | prune --dry-run|--keep N|--older-than Nd | rerun <runId|savedName> [args] | save <runId> <name> | create <request> | <name> [args]",detailedHelp:gs,handler:l(async(e,o,n,t)=>{let r=Pi(e),i=de(process.cwd()).key,a=L("workflow-runs",i),c=ye(),d=Ji(process.cwd());if(r.kind==="help"){gs();return}if(r.kind==="list"){console.log(m.bold(`
119
+ Built-in workflows:`)),console.log(ds(ke())),console.log(m.bold(`
120
+ Pattern templates:`));for(let S of Jn())console.log(` ${m.cyan(S.name)} ${m.dim(`(${S.pattern})`)} - ${S.description}`);let p=await Oe(d);p.length>0&&(console.log(m.bold(`
121
+ Saved workflows:`)),console.log(Zi(p))),console.log(m.dim(`
122
+ Run one with: /workflow <name> <question or JSON args>`)),console.log(m.dim(` Show usage with: /workflow help
123
+ `));return}if(r.kind==="runs"){let p=Mi(r.rawArgs);if(p.error){console.log(m.yellow(`
124
+ Usage: /workflow runs [--all] [--limit N]
125
+ ${p.error}
126
+ `));return}let S=c.list().filter(ue);S.length>0&&(console.log(m.bold(`
127
+ Active workflow runs:`)),console.log(Bi(S))),console.log(m.bold(`
128
+ Workflow runs:`)),console.log(Hi(qo(a),{limit:p.all?void 0:p.limit,showLimitHint:!p.all})),console.log();return}if(r.kind==="show"){let p=qo(a),S=r.runId||Gi(c.list(),p);if(!S){console.log(m.yellow(`
129
+ No workflow runs yet. Start one with /workflow create <request>.
130
+ `));return}if(!Q(S))return;let R=c.get(S),O=Xo(a,S);console.log(m.bold(`
131
+ Workflow run:`)),console.log(Yi(R,O,{full:r.full===!0})),console.log();return}if(r.kind==="pause"){if(!Q(r.runId))return;let p=c.pause(r.runId);console.log(p?m.dim(`Paused workflow ${r.runId}.
132
+ `):m.yellow(`No running workflow ${r.runId}.
133
+ `));return}if(r.kind==="resume"){if(!Q(r.runId))return;let p=c.resume(r.runId);console.log(p?m.dim(`Resumed workflow ${r.runId}.
134
+ `):m.yellow(`No paused workflow ${r.runId}.
135
+ `));return}if(r.kind==="stop"){let p=r.runId||qi(c.list());if(!p){console.log(m.yellow(`
136
+ No active workflow to stop.
137
+ `));return}if(!Q(p))return;let S=c.stop(p,"stopped by user"),R=c.get(p),O=R?Xo(a,p):void 0,I=bs(p,vs(R,O));console.log(S?m.dim(`Stopped workflow ${p}.
138
+ `):R&&!ue(R)?m.yellow(`Workflow ${p} is already ${R.status}. Next: ${I}.
139
+ `):m.yellow(`No active workflow ${p}.
140
+ `));return}if(r.kind==="delete"){if(!Q(r.runId))return;let p=c.get(r.runId);if(p&&ue(p)){console.log(m.yellow(`
141
+ Workflow ${r.runId} is ${p.status}. Stop it before deleting the run record.
142
+ `));return}let S=C(a,r.runId);if(!N(S)){console.log(m.yellow(`
143
+ No persisted workflow run ${r.runId}.
144
+ `));return}ls(S,{recursive:!0,force:!0}),console.log(m.dim(`
145
+ Deleted workflow run ${r.runId}.
146
+ `));return}if(r.kind==="prune"){let p=Li(r.rawArgs);if(p.error){console.log(m.yellow(`
147
+ Usage: /workflow prune --dry-run | --keep N | --older-than Nd
148
+ ${p.error}
149
+ `));return}if(!p.dryRun&&p.keep===void 0&&p.olderThanMs===void 0){console.log(m.yellow(`
150
+ Usage: /workflow prune --dry-run | --keep N | --older-than Nd
151
+ No cleanup rule was provided.
152
+ `));return}let S=new Set(c.list().filter(ue).map(O=>O.runId)),R=zi(qo(a),p).filter(O=>!S.has(O.runId));if(console.log(m.bold(p.dryRun?`
153
+ Workflow prune preview:`:`
154
+ Workflow prune:`)),console.log(Ki(R)),p.dryRun)console.log(m.dim(`
155
+ Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
156
+ `));else{for(let O of R)ls(C(a,O.runId),{recursive:!0,force:!0});console.log(m.dim(`
157
+ Deleted ${R.length} workflow run${R.length===1?"":"s"}.
158
+ `))}return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(m.yellow(`
159
+ Usage: /workflow save <runId> <name>
160
+ `));return}if(!Q(r.runId))return;try{let p=await Vn({runDir:C(a,r.runId),targetDir:d.project??C(process.cwd(),".kodax","workflows"),name:r.name});console.log(m.green(`
161
+ Saved workflow ${p.name} to ${p.path}
162
+ `))}catch(p){let S=p instanceof Error?p.message:String(p);console.log(m.red(`
163
+ [workflow] save failed: ${S}
164
+ `))}return}if(r.kind==="rerun"){if(!r.runId){console.log(m.yellow(`
165
+ Usage: /workflow rerun <runId|savedName> [args]
166
+ `));return}if(!Q(r.runId))return;let p=Yo(n);if(!p){console.log(m.red(`
167
+ [workflow] refusing to rerun a workflow without an interactive approval channel.
168
+ `));return}let S=n.createKodaXOptions;if(!S){console.log(m.red(`
169
+ [workflow] cannot start \u2014 REPL options unavailable in this context.
170
+ `));return}let R=(await Oe(d)).find(E=>E.name===r.runId),O=c.list().some(E=>E.runId===r.runId)||N(C(a,r.runId,"run.json"));if(R&&O){console.log(m.red(`
171
+ [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
172
+ `)),console.log(m.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
173
+ `));return}if(R&&!O){let E=await tl(R,p);if(!E)return;let pe=Vo(r.rawArgs,E.module.meta.name,E.module.meta.description,E.scriptSnapshot?.source),Rn="agentic";if(!await p(Ie(we(E.module),E.approvalContext))){console.log(m.dim(`Workflow cancelled.
174
+ `));return}let F=`run-${Date.now().toString(36)}`,Zs=C(a,F);console.log(m.dim(`
175
+ Started workflow ${E.module.meta.name} (${F}). Use /workflow show ${F} for status.
176
+ `));let uo=Ve(n,F,E.module.meta,pe);uo.running(`Use /workflow show ${F} for status or /workflow stop ${F} to stop.`);let Qs=c.startFromOptions({module:E.module,args:Go(r.rawArgs),options:S(),runId:F,runDir:Zs,...E.scriptSnapshot?{scriptSnapshot:E.scriptSnapshot}:{},onEvent:Xe(n,uo,{presentation:Rn,locale:pe,runId:F})});Ye(Qs,n,F,uo,{canRerun:E.scriptSnapshot!==void 0,presentation:Rn,locale:pe});return}let I;try{I=await Xn({runDir:C(a,r.runId)})}catch(E){let pe=E instanceof Error?E.message:String(E);console.log(m.red(`
177
+ [workflow] rerun failed: ${pe}
178
+ `));return}let Vs=Xo(a,r.runId)?.scriptSnapshotPath??C(a,r.runId,"script.js"),lo=Vo(r.rawArgs,I.capsule.manifest.name,I.capsule.manifest.description,I.capsule.source),An="agentic",ao=De(I.capsule,Jo());if(!ao.ok){Zo(ao);return}if(Qo(ao),!await p(Ie(we(I.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:I.capsule.manifest.mayUseWorktree===!0,rawScriptPath:Vs,rawScript:I.capsule.source}))){console.log(m.dim(`Workflow cancelled.
179
+ `));return}let j=`run-${Date.now().toString(36)}`,Ys=C(a,j);console.log(m.dim(`
180
+ Started workflow ${I.module.meta.name} (${j}). Use /workflow show ${j} for status.
181
+ `));let co=Ve(n,j,I.module.meta,lo);co.running(`Use /workflow show ${j} for status or /workflow stop ${j} to stop.`);let Js=c.startFromOptions({module:I.module,args:Go(r.rawArgs),options:S(),runId:j,runDir:Ys,scriptSnapshot:{manifest:I.capsule.manifest,source:I.capsule.source},onEvent:Xe(n,co,{presentation:An,locale:lo,runId:j})});Ye(Js,n,j,co,{canRerun:!0,presentation:An,locale:lo});return}if(r.kind==="create"){if(!r.request){console.log(m.yellow(`
182
+ Usage: /workflow create <request>
183
+ `));return}await bl({request:r.request,callbacks:n,approval:t.permissionMode==="plan"?"required":"silent",presentation:"agentic",sourceLabel:"generated",onBuilderEvent:n.onWorkflowBuilderEvent});return}let u=Yo(n);if(!u){console.log(m.red(`
184
+ [workflow] refusing to start a workflow without an interactive approval channel.
185
+ `));return}let g={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},f,y=Zn(r.name);if(!y){let p=(await Oe(d)).find(S=>S.name===r.name);if(!p){console.log(m.yellow(`
186
+ Unknown workflow: ${r.name}`)),console.log(ds(ke())),console.log();return}if(p.execution==="trusted-local"&&!await u(`Run local workflow file? This EXECUTES local code:
187
+ ${p.path}`)){console.log(m.dim(`Workflow cancelled.
188
+ `));return}try{if(p.execution==="capability-generated"){let S=await yo(p.path),R=De(S,Jo());if(!R.ok){Zo(R);return}Qo(R),g={source:`saved:${p.source}`,sandbox:p.execution,mayUseWorktree:S.manifest.mayUseWorktree===!0,rawScriptPath:p.path,rawScript:S.source},f={manifest:S.manifest,source:S.source}}y=await ko(p.path),p.execution==="trusted-local"&&(g={source:`saved:${p.source}`,sandbox:p.execution,mayUseWorktree:!1})}catch(S){let R=S instanceof Error?S.message:String(S);console.log(m.red(`
189
+ [workflow] failed to load ${p.path}: ${R}
190
+ `));return}}let b=n.createKodaXOptions;if(!b){console.log(m.red(`
191
+ [workflow] cannot start \u2014 REPL options unavailable in this context.
192
+ `));return}if(!await u(Ie(we(y),g))){console.log(m.dim(`Workflow cancelled.
193
+ `));return}let w=`run-${Date.now().toString(36)}`,h=C(a,w);console.log(m.dim(`
194
+ Started workflow ${y.meta.name} (${w}). Use /workflow show ${w} for status.
195
+ `));let x=Vo(r.rawArgs,y.meta.name,y.meta.description,f?.source),A=Ve(n,w,y.meta,x);A.running(`Use /workflow show ${w} for status or /workflow stop ${w} to stop.`);let M="agentic",W=c.startFromOptions({module:y,args:Go(r.rawArgs),options:b(),runId:w,runDir:h,...f?{scriptSnapshot:f}:{},onEvent:Xe(n,A,{presentation:M,locale:x,runId:w})});Ye(W,n,w,A,{canRerun:f!==void 0,presentation:M,locale:x})},"handler")};import P from"chalk";var sn={name:"new",description:"Start a new conversation session",usage:"/new",handler:l(async(e,o,n)=>{if(o.messages.length===0){console.log(P.yellow(`
196
+ Current session is already empty.`)),console.log(P.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(P.dim(`
197
+ Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(P.dim(`
198
+ [Previous session saved]`))}catch{console.log(P.yellow(`
199
+ [Warning: Failed to save previous session]`))}n.startNewSession?.(),o.messages=[],n.clearHistory(),console.log(P.green(`
200
+ \u2713 Started new session`)),console.log(P.dim("Conversation history cleared. Ready for a fresh start!"))},"handler"),detailedHelp:l(()=>{console.log(P.bold(`
201
+ /new - Start New Session
202
+ `)),console.log("Usage:"),console.log(P.cyan(" /new")+` - Clear current session and start fresh
203
+ `),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.
204
+ `),console.log("Examples:"),console.log(P.dim(" User: Help me refactor the authentication module")),console.log(P.dim(" AI: [provides refactoring help]")),console.log(P.cyan(" /new")),console.log(P.dim(" \u2713 Started new session")),console.log(P.dim(" User: Now I need help with database optimization")),console.log(P.dim(` AI: [provides database help]
205
+ `)),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{execFile as Sl}from"node:child_process";import{promisify as $l}from"node:util";var xl=$l(Sl),rn=1e5;async function Qe(e,o){let{stdout:n}=await xl("git",e,{cwd:o,maxBuffer:67108864});return n}l(Qe,"git");async function Al(e){for(let o of["main","master","develop"])try{return await Qe(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}l(Al,"detectBaseBranch");async function Rl(e,o){let n=e[0];if(n==="base"){let t=await Al(o);return{diff:await Qe(["diff",`${t}...HEAD`],o),label:`changes against ${t}`}}return n==="sha"&&e[1]?{diff:await Qe(["show",e[1]],o),label:`commit ${e[1]}`}:{diff:await Qe(["diff","HEAD"],o),label:"uncommitted changes"}}l(Rl,"getDiff");function Cl(e){return{workflow:e.some(o=>o==="--workflow"||o==="workflow"),diffArgs:e.filter(o=>o!=="--workflow"&&o!=="workflow")}}l(Cl,"parseReviewInvocation");function El(e){return[`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."].join(`
206
+ `)}l(El,"buildReviewWorkflowRequest");var Rs={name:"review",description:"Review code changes (git diff) for bugs, security, performance, and design",usage:"/review [--workflow] [base | sha <hash>] (default: uncommitted changes)",handler:l(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=Cl(e),r,i;try{({diff:r,label:i}=await Rl(t.diffArgs,n))}catch(d){return{success:!1,message:`/review: git failed \u2014 ${d instanceof Error?d.message:String(d)}`}}if(!r.trim())return{success:!0,message:"No changes to review."};if(t.workflow)return{success:!0,workflow:{request:El(i),source:"command",displayName:"/review --workflow"}};let a=r;return a.length>rn&&(a=`${a.slice(0,rn)}
207
+
208
+ [diff truncated to ${rn} chars \u2014 review the rest with a narrower scope]`),{success:!0,invocation:{prompt:[`Review the following ${i} 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.","","```diff",a,"```"].join(`
209
+ `),source:"prompt",displayName:"/review"}}},"handler")};function oo(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}l(oo,"getPastedTextRefNumLines");function Tl(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}l(Tl,"formatPastedTextRef");function Il(e,o){return`[...Truncated text #${e} +${o} lines...]`}l(Il,"formatTruncatedTextRef");var Pl=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function Ml(e){let o=[],n=new RegExp(Pl.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}l(Ml,"parseReferences");function _l(e,o){let n=Ml(e);if(n.length===0)return e;let t=l(i=>o instanceof Map?o.get(i):o[i],"getContent"),r=e;for(let i=n.length-1;i>=0;i--){let a=n[i];if(a.kind==="Image")continue;let c=t(a.id);!c||c.type!=="text"||(r=r.slice(0,a.index)+c.content+r.slice(a.index+a.match.length))}return r}l(_l,"expandPastedTextRefs");var Ll=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,Ol=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function Dl(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}l(Dl,"isAtWordBoundaryAfter");function Nl(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}l(Nl,"isAtWordBoundaryBefore");function ou(e,o){if(o<=0||!Dl(e,o))return null;let t=e.slice(0,o).match(Ll);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]}}l(ou,"findPlaceholderBeforeCursor");function nu(e,o){if(o>=e.length||!Nl(e,o))return null;let t=e.slice(o).match(Ol);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]}}l(nu,"findPlaceholderAfterCursor");function tu(e){return e.length>800||oo(e)>2}l(tu,"shouldReplacePasteWithPlaceholder");function su(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),a=e.slice(n,-t),c=oo(a),d=Il(o,c);return{truncatedText:r+d+i,placeholderContent:a}}l(su,"maybeTruncateLongInput");var ln=class{static{l(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=oo(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:Tl(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=oo(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 _l(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())}},eo=null;function ru(){return eo===null&&(eo=new ln),eo}l(ru,"getOrCreateModulePasteStore");function Cs(){return eo??void 0}l(Cs,"getActivePasteStore");import{createHash as Wl}from"node:crypto";import{mkdir as Ul,readdir as jl,readFile as Fl,stat as Hl,unlink as Bl,writeFile as zl}from"node:fs/promises";import*as an from"node:path";var Kl="paste-cache",Gl=720*60*60*1e3;function cn(){return L(Kl)}l(cn,"getPasteCacheDir");function Es(e){return an.join(cn(),`${e}.txt`)}l(Es,"getPastePath");function uu(e){return Wl("sha256").update(e).digest("hex").slice(0,16)}l(uu,"hashPastedText");async function mu(e,o){try{let n=cn();return await Ul(n,{recursive:!0}),await zl(Es(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}l(mu,"storePastedText");async function Ts(e){try{return await Fl(Es(e),{encoding:"utf8"})}catch{return null}}l(Ts,"retrievePastedText");async function fu(e=Gl){let o=cn(),n=Date.now()-e,t=0,r=0,i;try{i=await jl(o)}catch{return{scanned:t,removed:r}}for(let a of i){if(!a.endsWith(".txt"))continue;t+=1;let c=an.join(o,a);try{(await Hl(c)).mtimeMs<n&&(await Bl(c),r+=1)}catch{}}return{scanned:t,removed:r}}l(fu,"cleanupOldPastes");import*as gn from"path";import*as Ps from"os";function ql(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}l(ql,"escapeRegExp");function Xl(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${ql(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}l(Xl,"deriveArgumentHintFromUsage");function dn(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??Xl(e.usage,e.name)}}l(dn,"toCommandDefinition");function un(e){for(let o of Is)try{let n=dn(o,"builtin");e.register(n)}catch(n){console.error(`Failed to register command "${o.name}":`,n)}}l(un,"registerBuiltinCommands");import*as B from"fs";import*as oe from"path";function Vl(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)}l(Vl,"normalizeAliases");function Yl(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}l(Yl,"normalizePriority");function Jl(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Mn(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:_n(e.hooks),frontmatter:e}}l(Jl,"buildExecutionMetadata");function Zl(e,o){try{let n=B.readFileSync(e,"utf-8"),[t,r]=Pn(n),i=t??{},a=oe.basename(e,".md"),c=typeof i.name=="string"&&i.name.trim()?i.name.trim():a;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:Vl(i.aliases),priority:Yl(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Jl(i)}}catch(n){console.error(`Error parsing command file ${e}:`,n);return}}l(Zl,"parseCommandFile");function mn(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,a=typeof r=="string"?t===0?"user":"project":r.location;if(!B.existsSync(i))continue;let c=oe.resolve(i);try{c=B.realpathSync.native?.(i)??B.realpathSync(i)}catch{c=oe.resolve(i)}if(!n.has(c)){n.add(c);try{let d=B.readdirSync(i);for(let u of d){if(!u.endsWith(".md"))continue;let g=oe.join(i,u),f=Zl(g,a);f&&o.push(f)}}catch(d){console.error(`Error scanning directory ${i}:`,d)}}}return o}l(mn,"discoverCommands");function fn(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:l(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)}}l(fn,"registerDiscoveredCommands");function Ms(e,o){un(e);try{let n=Ps.homedir(),t=o??process.cwd(),r=mn([{path:gn.join(t,".kodax","commands"),location:"project"},{path:L("commands"),location:"user"},{path:gn.join(n,".agents","commands"),location:"user"}]);fn(r,e)}catch(n){console.error("Failed to discover commands:",n)}}l(Ms,"registerAllCommands");function Ql(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}}l(Ql,"summarizeAgentsFiles");function ea(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)}}l(ea,"createManualCompactionConfig");function pn(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${zo(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}l(pn,"printWorkspaceUnchangedNote");var Is=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:l(async e=>{if(e.length>0){let o=e[0];K.size===0&&to(),K.has(o.toLowerCase())||!!wn(o)?hn(o):ua(o)}else da()},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
210
+ /help - Show Command Help
211
+ `)),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:l(async(e,o,n)=>{await n.saveSession(),console.log(s.green(`
212
+ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
213
+ /exit - Exit Interactive Mode
214
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /exit ")+"Save session and exit"),console.log(s.dim(" /quit, /q, /bye ")+"Aliases for /exit"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Saves the current conversation session and exits interactive mode.")),console.log(s.dim(" Sessions can be resumed later with /load or CLI -c option.")),console.log(s.dim(" Exiting never removes or mutates the current workspace.")),console.log()},"detailedHelp")},{name:"clear",description:"Clear conversation history",handler:l(async(e,o,n)=>{o.messages=[],o.contextTokenSnapshot=void 0,n.clearHistory(),console.log(s.yellow(`
215
+ [Conversation cleared]`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
216
+ /clear - Clear Conversation History
217
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /clear ")+"Clear all messages in current session"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Removes all messages from the current conversation context.")),console.log(s.dim(" Useful for starting fresh while keeping the session.")),console.log(),console.log(s.yellow(" Warning: This action cannot be undone!")),console.log()},"detailedHelp")},{name:"cost",description:"Show session cost report",usage:"/cost",handler:l(async(e,o,n)=>{let t=n.getCostReport?.();if(!t){console.log(s.dim(`
218
+ [No cost data available yet]`));return}console.log(s.cyan(`
219
+ `+t))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
220
+ /cost - Session Cost Report
221
+ `)),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:l(async e=>{let o=e[0]?.toLowerCase();if(!o||o==="help"){console.log(s.cyan(`
222
+ /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=Cs();if(!n){console.log(s.yellow(`
223
+ [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(`
224
+ [No pasted content in this session yet]`));return}console.log(s.bold(`
225
+ Pasted content in this session:
226
+ `));for(let r of t){let i=r.content?.length??0,a=r.contentHash?` (hash ${r.contentHash.slice(0,8)})`:"";console.log(` ${s.cyan(`#${r.id}`)} ${r.type} ${i} chars${a}`)}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(`
227
+ Usage: /paste show <id>`));return}let i=n.get(r);if(!i){console.log(s.dim(`
228
+ [No paste registered with id #${r}]`));return}let a=i.content??"";if(!a&&i.contentHash){let c=await Ts(i.contentHash);c&&(a=c)}if(!a){console.log(s.yellow(`
229
+ [Paste #${r} has no stored content (hash ${i.contentHash??"n/a"})]`));return}console.log(s.bold(`
230
+ Pasted text #${r} (${a.length} chars):
231
+ `)),console.log(a),console.log();return}console.log(s.yellow(`
232
+ [Unknown /paste subcommand: ${o}]`)),console.log(s.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
233
+ /paste - Inspect stored paste contents
234
+ `)),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:l(async(e,o,n,t)=>{try{let r=await it(o.gitRoot),i=t.provider,a=Cn(i);if(!a){console.log(s.red(`
235
+ [Provider not found: ${i}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??a.getEffectiveContextWindow?.(t.model)??a.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??go(o.messages),g=ea(r,u,d);console.log(s.dim(`
236
+ [Compacting conversation...]`)),n.startCompacting?.();try{let f=await Dn(o.messages,g,a,d,c,void 0,u,Kn,Gn);if(!f.compacted){console.log(s.green(`
237
+ [No compaction needed]`)),console.log(s.dim(`Current token usage: ${f.tokensBefore.toLocaleString()}
238
+ `));return}o.messages=f.messages,o.contextTokenSnapshot={currentTokens:f.tokensAfter,baselineEstimatedTokens:f.tokensAfter,source:"estimate"},n.onCompactStats?.({tokensBefore:f.tokensBefore,tokensAfter:f.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(s.green(`
239
+ [Compaction complete: ${Math.round(f.tokensBefore/1e3)}k -> ${Math.round(f.tokensAfter/1e3)}k tokens, ${Math.round((1-f.tokensAfter/f.tokensBefore)*100)}% reduced]`)),console.log()}finally{n.stopCompacting?.()}}catch(r){let i=r instanceof Error?r.message:String(r);console.log(s.red(`
240
+ [Compaction failed: ${i}]
241
+ `))}},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
242
+ /compact - Manual Context Compaction
243
+ `)),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 and active extensions",handler:l(async(e,o,n,t)=>{console.log(s.cyan(`
244
+ Reloading project rule files and runtime extensions...
245
+ `));try{let r=await n.reloadAgentsFiles?.()??[],i=Ql(r),a=H(),c=a?me(a).loadedExtensions.length:0,d=a?me(a).failures.length:0,u=0,g=0;if(a){await a.reloadExtensions({continueOnError:!0});let f=me(a);u=c||f.loadedExtensions.length,g=Math.max(0,f.failures.length-d)}if(r.length===0&&u===0){console.log(s.yellow(`No project rule files or active extensions found.
246
+ `)),console.log(s.dim(" Create AGENTS.md or CLAUDE.md in your project, or load extensions with --extension.")),console.log();return}console.log(s.green(`Rules reloaded successfully:
247
+ `)),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)`)),u>0&&console.log(s.dim(` - Extensions: ${u} module(s)`)),g>0&&console.log(s.yellow(` - Failures: ${g} recorded (run /extensions for details)`)),console.log(s.dim(" Updated rules will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(s.red(`Failed to reload rules.
248
+ `)),console.log(s.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
249
+ /reload - Reload Project Rules
250
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /reload ")+"Reload project rule files 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(" 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:l(async()=>{let e=H();if(!e){console.log(s.yellow(`
251
+ [No active extension runtime]
252
+ `));return}let o=me(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(s.bold(`
253
+ Extension Runtime:
254
+ `)),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=wa(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:l(async(e,o,n,t)=>{await ma(o,t,e)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
255
+ /status - Show Session Status
256
+ `)),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:l(async e=>{let o=H();if(!o){console.log(s.yellow(`
257
+ [No extension runtime active \u2014 MCP is not available]`));return}let t=me(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(s.dim(`
258
+ 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(`
259
+ MCP Status
260
+ `)),!t){console.log(s.yellow(" No MCP provider registered.")),console.log(s.dim(` Add mcpServers to ~/.kodax/config.json to enable MCP.
261
+ `));return}let a=t.metadata?.servers??[];console.log(s.dim(` Servers: ${a.length}`)),console.log();for(let c of a){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:l(()=>{console.log(s.cyan(`
262
+ /mcp - MCP Server Management
263
+ `)),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:"repointel",aliases:["ri"],description:"Inspect or control the repo-intelligence premium runtime",usage:"/repointel [status|mode|trace|warm|endpoint|bin]",handler:l(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(r==="status"){let i=await he({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probePremium:!0});Ws(i);return}if(r==="warm"){let i=await Un({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace});ca(i);return}if(r==="mode"){if(e.length===1){console.log(s.dim(`
264
+ Current repo-intelligence mode: ${s.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(s.dim(`Usage: /repointel mode [auto|off|oss|premium-shared|premium-native]
265
+ `));return}let i=ra(e[1]);if(!i){console.log(s.red(`
266
+ [Invalid repo-intelligence mode: ${e[1]}]`)),console.log(s.dim(`Usage: /repointel mode [auto|off|oss|premium-shared|premium-native]
267
+ `));return}let a=no({mode:i},{repoIntelligenceMode:i},n,t);z(`Repo intelligence mode: ${i}`,a);return}if(r==="trace"){let i=e[1]?.toLowerCase();if(!i){console.log(s.dim(`
268
+ Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(s.dim(`Usage: /repointel trace [on|off|toggle]
269
+ `));return}let a=ia(i,t.repoIntelligenceTrace??!1);if(a===null){console.log(s.red(`
270
+ [Invalid trace value: ${e[1]}]`)),console.log(s.dim(`Usage: /repointel trace [on|off|toggle]
271
+ `));return}let c=no({trace:a},{repoIntelligenceTrace:a},n,t);z(`Repo intelligence trace: ${a?"on":"off"}`,c);return}if(r==="endpoint"){if(e.length===1){let c=await he({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace});console.log(s.dim(`
272
+ Current repointel endpoint: ${s.cyan(c.endpoint)}`)),console.log(s.dim(`Usage: /repointel endpoint [http://host:port|default]
273
+ `));return}let i=_s(e[1]),a=no({endpoint:i},{repointelEndpoint:i??void 0},n,t);z(`Repointel endpoint: ${i??"default"}`,a);return}if(r==="bin"){if(e.length===1){let c=await he({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace});console.log(s.dim(`
274
+ Current repointel bin: ${s.cyan(c.bin)}`)),console.log(s.dim(`Usage: /repointel bin [<path-or-command>|default]
275
+ `));return}let i=_s(e.slice(1).join(" ")),a=no({bin:i},{repointelBin:i??void 0},n,t);z(`Repointel bin: ${i??"default"}`,a);return}console.log(s.red(`
276
+ [Unknown /repointel subcommand: ${e[0]}]`)),console.log(s.dim(`Usage: /repointel [status|mode|trace|warm|endpoint|bin]
277
+ `))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
278
+ /repointel - Repo-Intelligence Runtime Control
279
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /repointel ")+"Show current repo-intelligence and premium runtime status"),console.log(s.dim(" /repointel status ")+"Probe the local premium frontdoor and print detailed status"),console.log(s.dim(" /repointel mode auto ")+"Prefer premium-native when available, otherwise fall back to OSS"),console.log(s.dim(" /repointel mode off ")+"Strictly disable repo-intelligence working tools and auto lane for this session"),console.log(s.dim(" /repointel mode oss ")+"Force the OSS baseline only"),console.log(s.dim(" /repointel mode premium-shared ")+"Use premium without KodaX native auto lane"),console.log(s.dim(" /repointel mode premium-native ")+"Use the KodaX flagship premium path"),console.log(s.dim(" /repointel trace on|off|toggle ")+"Toggle repo-intelligence trace output"),console.log(s.dim(" /repointel endpoint http://127.0.0.1:47891")+"Override the local premium daemon endpoint"),console.log(s.dim(" /repointel endpoint default ")+"Clear the endpoint override and use the default"),console.log(s.dim(" /repointel bin repointel ")+"Use a PATH-visible repointel command"),console.log(s.dim(" /repointel bin <path> ")+"Use an explicit repointel launcher path"),console.log(s.dim(" /repointel bin default ")+"Clear the bin override and use the default command"),console.log(s.dim(" /repointel warm ")+"Try to start or warm the local premium daemon"),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - /status now includes a compact repo-intelligence summary.")),console.log(s.dim(" - /repointel warm is operational: it can warm the premium runtime even when your current mode is oss/off.")),console.log(s.dim(" - If the local service cannot be started, KodaX will continue with the OSS baseline and this command will explain why.")),console.log()},"detailedHelp")},{name:"fallback",description:"Configure the cross-provider fallback chain for child tasks",usage:"/fallback [status | <p1,p2,...> | off]",handler:l(async(e,o,n,t)=>{let r=(process.env.KODAX_FALLBACK_PROVIDERS??"").split(",").map(c=>c.trim()).filter(Boolean),i=e[0]?.toLowerCase();if(!i||i==="status"){r.length===0?console.log(s.dim(`
280
+ Child-task provider fallback: `)+s.yellow("off")+s.dim(" (no chain configured)")):(console.log(s.dim(`
281
+ Child-task provider fallback: `)+s.green("on")),console.log(s.dim(" Order: ")+s.cyan(r.join(" \u2192 ")))),console.log(s.dim(`
282
+ When a child's primary provider is exhausted/down, KodaX re-runs it`)),console.log(s.dim(` on the next provider in this list. Set: /fallback ark-coding,kimi-code
283
+ `));return}if(i==="off"||i==="clear"||i==="none"){Y({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(s.green(`
284
+ \u2713 `)+s.dim(`Child-task provider fallback disabled.
285
+ `));return}let a=e.join(",").split(",").map(c=>c.trim()).filter(Boolean);if(a.length===0){console.log(s.red(`
286
+ [/fallback: no provider ids given]`)),console.log(s.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
287
+ `));return}Y({fallbackProviders:a}),process.env.KODAX_FALLBACK_PROVIDERS=a.join(","),console.log(s.green(`
288
+ \u2713 `)+s.dim("Child-task fallback order: ")+s.cyan(a.join(" \u2192 "))),console.log(s.dim(` Provider ids must match your configured providers (see /status or kodax doctor).
289
+ `))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto)",usage:"/mode [plan|accept-edits|auto]",handler:l(async(e,o,n,t)=>{if(e.length===0){let i=be(t.permissionMode,"accept-edits")??"accept-edits";console.log(s.dim(`
290
+ Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];We.includes(r)?(t.permissionMode=r,n.setPermissionMode?.(r),No(r),console.log(s.cyan(`
291
+ [Switched to ${r} mode] (saved)`))):console.log(s.red(`
292
+ [Unknown mode: ${e[0]}. Use: plan | accept-edits | auto]`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
293
+ /mode - Switch Permission Mode
294
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /mode ")+"Show current permission mode"),console.log(s.dim(" /mode plan ")+"Read-only: blocks all modifications"),console.log(s.dim(" /mode accept-edits ")+"File edits auto, bash requires confirmation"),console.log(s.dim(" /mode auto ")+"LLM classifier reviews each tool call (FEATURE_092)"),console.log(s.dim(" /mode auto-in-project ")+s.gray("(deprecated alias for auto; will be removed in v0.7.38)")),console.log(),console.log(s.bold("Permission Levels:")),console.log(s.yellow(" plan ")+s.dim("- Read-only planning, no file/command modifications")),console.log(s.green(" accept-edits ")+s.dim("- File edits auto-approved, bash still requires confirmation")),console.log(s.green(" auto ")+s.dim("- LLM classifier (engine=llm, default) or rules engine reviews each call")),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - .kodax/ directory and project-external paths always require confirmation")),console.log(s.dim(" - Mode is saved to ~/.kodax/config.json (user-level)")),console.log()},"detailedHelp")},{name:"auto-engine",description:"Show or set auto-mode classifier engine (llm | rules)",usage:"/auto-engine [llm|rules]",handler:l(async(e,o,n)=>{let t=n.getAutoModeStats?.();if(!t){console.log(s.yellow(`
295
+ [auto-engine] not in auto mode \u2014 switch via /mode auto first`));return}if(e.length===0){console.log(s.dim(`
296
+ Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denials: ${t.denials.consecutive}`)),console.log(s.dim(` cumulative denials: ${t.denials.cumulative}`)),console.log(s.dim(` breaker errors: ${t.breaker.timestamps.filter(i=>i>=Date.now()-600*1e3).length}`)),console.log(s.dim("Usage: /auto-engine [llm|rules]"));return}let r=e[0];if(r!=="llm"&&r!=="rules"){console.log(s.red(`
297
+ [auto-engine] unknown engine "${e[0]}" \u2014 use llm or rules`));return}n.setAutoModeEngine?.(r),console.log(s.cyan(`
298
+ [auto-engine] switched to ${r}`)),console.log(r==="rules"?s.dim(" every non-Tier-1 tool call now escalates to user confirmation"):s.dim(" classifier consultation resumed; threshold downgrades still apply"))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
299
+ /auto-engine - Auto-Mode Classifier Engine Toggle
300
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto-engine ")+"Show current engine + denial/breaker counts"),console.log(s.dim(" /auto-engine llm ")+"Resume classifier consultation (default)"),console.log(s.dim(" /auto-engine rules ")+"Skip classifier; every non-Tier-1 call asks user"),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - Only meaningful in auto mode (/mode auto).")),console.log(s.dim(" - The classifier may auto-downgrade to rules after 3 consecutive blocks,")),console.log(s.dim(" 20 cumulative blocks, or 5 errors in a 10-minute window. /auto-engine llm")),console.log(s.dim(" manually flips back to llm.")),console.log(s.dim(" - Override via env: KODAX_AUTO_MODE_ENGINE=rules.")),console.log()},"detailedHelp")},{name:"auto-denials",description:"Show auto-mode classifier denial tracker + circuit breaker stats",usage:"/auto-denials",handler:l(async(e,o,n)=>{let t=n.getAutoModeStats?.();if(!t){console.log(s.yellow(`
301
+ [auto-denials] not in auto mode \u2014 switch via /mode auto first`));return}console.log(s.cyan(`
302
+ [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:l(()=>{console.log(s.cyan(`
303
+ /auto-denials - Auto-Mode Classifier Diagnostic Dump
304
+ `)),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:l(async(e,o,n)=>{await n.saveSession(),console.log(s.green(`
305
+ [Session saved]`)),pn(o)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
306
+ /save - Save Current Session
307
+ `)),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:l(async(e,o,n)=>{if(e.length===0){console.log(s.red(`
308
+ [Usage: /load <session-id>]`)),await n.listSessions();return}await n.loadSession(e[0])==="missing"&&console.log(s.red(`
309
+ [Session not found: ${e[0]}]`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
310
+ /load - Load a Saved Session
311
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /load ")+"List available sessions"),console.log(s.dim(" /load <session-id> ")+"Load a specific session"),console.log(s.dim(" /resume <id> ")+"Alias for /load"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /load ")+"# See all sessions"),console.log(s.dim(" /load 20260219_143052")+"# Load session by ID"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" /load can resume sessions from sibling workspaces in the same canonical repo.")),console.log(s.dim(" If a saved workspace is unavailable, KodaX explains the fallback before loading.")),console.log(),console.log(s.dim(" See also: /help sessions, /help save")),console.log()},"detailedHelp")},{name:"tree",description:"Inspect or switch the current session tree",usage:"/tree [entry-id|label] | /tree label <entry-id|label> <name> | /tree unlabel <entry-id|label>",handler:l(async(e,o,n)=>{if(e.length===0){await n.printSessionTree?.();return}let t=e[0]?.trim().toLowerCase();if(t==="label"){if(e.length<3){console.log(s.red(`
312
+ [Usage: /tree label <entry-id|label> <name>]`));return}await n.labelSessionBranch?.(e[1],e.slice(2).join(" "))||console.log(s.red(`
313
+ [Tree entry not found: ${e[1]}]`));return}if(t==="unlabel"){if(e.length<2){console.log(s.red(`
314
+ [Usage: /tree unlabel <entry-id|label>]`));return}await n.labelSessionBranch?.(e[1],void 0)||console.log(s.red(`
315
+ [Tree entry not found: ${e[1]}]`));return}await n.switchSessionBranch?.(e[0])==="missing"&&console.log(s.red(`
316
+ [Tree entry not found: ${e[0]}]`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
317
+ /tree - Inspect Session Lineage
318
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /tree ")+"Show the current session tree"),console.log(s.dim(" /tree <entry-id|label> ")+"Jump to a previous branch point"),console.log(s.dim(" /tree label <entry-id|label> <name>")+"Attach a lightweight checkpoint label"),console.log(s.dim(" /tree unlabel <entry-id|label> ")+"Clear an existing checkpoint label"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Session history is stored as a branchable tree. Use /tree to")),console.log(s.dim(" inspect the lineage, revisit an earlier branch safely, and add")),console.log(s.dim(" bookmark-style checkpoint labels without changing git state.")),console.log()},"detailedHelp")},{name:"fork",description:"Fork the current branch into a new session",usage:"/fork [entry-id|label]",handler:l(async(e,o,n)=>{await n.forkSession?.(e[0])==="failed"&&console.log(s.red(`
319
+ [Unable to fork session${e[0]?` from ${e[0]}`:""}]`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
320
+ /fork - Export a Branch to a New Session
321
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /fork ")+"Fork from the active branch"),console.log(s.dim(" /fork <entry-id|label>")+"Fork from a selected tree node"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Creates a new session file from the selected branch so you can")),console.log(s.dim(" continue there without mutating the current session lineage.")),console.log()},"detailedHelp")},{name:"rewind",description:"Rewind the current session to a previous point",usage:"/rewind [entry-id|label]",handler:l(async(e,o,n)=>{await n.rewindSession?.(e[0])==="failed"&&console.log(s.red(`
322
+ [Unable to rewind${e[0]?` to ${e[0]}`:" \u2014 no previous turn found"}]`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
323
+ /rewind - Rewind Session to a Previous Point
324
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /rewind ")+"Rewind to the previous user input"),console.log(s.dim(" /rewind <entry-id|label>")+"Rewind to a specific tree node"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Truncates the session after the target entry. Unlike /fork,")),console.log(s.dim(" this modifies the current session in place. The rewind event")),console.log(s.dim(" is recorded in the lineage for auditability.")),console.log(),console.log(s.yellow(" \u26A0 This is irreversible. Use /fork first to preserve a copy.")),console.log()},"detailedHelp")},{name:"sessions",aliases:["ls","list"],description:"List recent sessions",handler:l(async(e,o,n)=>{await n.listSessions()},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
325
+ /sessions - List Saved Sessions
326
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /sessions ")+"List all saved sessions"),console.log(s.dim(" /ls, /list ")+"Aliases for /sessions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows recent conversation sessions with their IDs,")),console.log(s.dim(" message counts, titles, and workspace truth. Use /load <id> to resume.")),console.log(s.dim(" This keeps sibling worktree sessions inspectable without a persistent cockpit.")),console.log(),console.log(s.dim(" See also: /help load, /help delete")),console.log()},"detailedHelp")},{name:"history",aliases:["hist"],description:"Show conversation history",handler:l(async(e,o,n)=>{n.printHistory()},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
327
+ /history - Show Conversation History
328
+ `)),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:l(async(e,o,n)=>{if(e.length===0){console.log(s.red(`
329
+ [Usage: /delete <session-id> or /delete all]`)),await n.listSessions?.();return}e[0]==="all"?(await n.deleteAllSessions?.(),console.log(s.green(`
330
+ [All sessions deleted]`)),pn(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
331
+ [Session deleted: ${e[0]}]`)),pn(o))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
332
+ /delete - Delete Saved Sessions
333
+ `)),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:l(async(e,o,n,t)=>{let r=Ne().providerModels;if(e.length===0){console.log(s.bold(`
334
+ Available Providers:
335
+ `));let c=nt(r);for(let d of c){let u=d.configured?s.green("[configured]"):s.red("[not configured]"),g=d.custom?s.yellow(" [custom]"):"",f=d.name===t.provider,y=f?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${y} ${u}${g}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${bo(d.capabilityProfile)}`));let b=re(d.name,r),k=f?t.model:null;for(let w of b){let x=f&&(k===w||!k&&w===d.model)?s.cyan(">"):" ";console.log(` ${x} ${w}`)}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
336
+ `));return}let i=(e[0]??"").trim();if(!i)return;if(i.startsWith("/")){let c=i.slice(1);if(!c){console.log(s.red(`
337
+ [Missing model name after /]`));return}let d=re(t.provider,r);if(!d.includes(c)){console.log(s.red(`
338
+ [Unknown model: ${c}]`)),console.log(s.dim(`Available models for ${t.provider}: ${d.join(", ")}
339
+ `));return}Y({model:c}),n.switchProvider?.(t.provider,c),console.log(s.cyan(`
340
+ [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(`
341
+ [Invalid format. Use: /model <provider>/<model>]`));return}if(!ne(d)){console.log(s.red(`
342
+ [Unknown provider: ${d}]`)),console.log(s.dim(`Available: ${te().join(", ")}
343
+ `));return}let g=re(d,r);if(!g.includes(u)){console.log(s.red(`
344
+ [Unknown model: ${u}]`)),console.log(s.dim(`Available models for ${d}: ${g.join(", ")}
345
+ `));return}Y({provider:d,model:u}),n.switchProvider?.(d,u),console.log(s.cyan(`
346
+ [Switched to ${d}/${u}] (saved)`));return}let a=i;ne(a)?(Y({provider:a,model:void 0}),n.switchProvider?.(a),console.log(s.cyan(`
347
+ [Switched to ${a}] (saved)`))):(console.log(s.red(`
348
+ [Unknown provider: ${a}]`)),console.log(s.dim(`Available: ${te().join(", ")}
349
+ `)))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
350
+ /model - Switch LLM Provider/Model
351
+ `)),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:l(async(e,o,n,t)=>{let r=(e[0]??"").trim(),i=t.provider,a=t.model;if(r)if(r.includes("/")){let u=r.indexOf("/");i=r.slice(0,u).trim(),a=r.slice(u+1).trim()||void 0}else i=r,a=void 0;if(!ne(i)){console.log(s.red(`
352
+ [Unknown provider: ${i}]`)),console.log(s.dim(`Available: ${te().join(", ")}
353
+ `));return}let c=et(i,a);if(!c){console.log(s.red(`
354
+ [Provider details unavailable: ${i}]`)),console.log();return}let d=rt(i,a,t.reasoningMode);console.log(s.bold(`
355
+ Provider Details:
356
+ `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${tt(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let u of st(c))console.log(s.dim(` - ${u}`));if(console.log(),d.length>0){console.log(s.bold("Common Scenarios:"));for(let u of d){let g=u.decision.status==="block"?s.red:u.decision.status==="warn"?s.yellow:s.green;console.log(g(` - ${u.label}: ${u.decision.status.toUpperCase()}`)),console.log(s.dim(` ${u.decision.summary}`))}console.log()}},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
357
+ /provider - Inspect Provider Semantics
358
+ `)),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(),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:l(async(e,o,n,t)=>{if(e.length===0){let i=vo(t.provider,t.model),a=t.thinking?s.green("ON"):s.dim("OFF");console.log(s.dim(`
359
+ Thinking: ${a}`)),console.log(s.dim(`Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Effective control: ${s.cyan(So(i))}`)),console.log(s.dim(`Actual execution: ${$o(t.reasoningMode,i)}`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
360
+ `));return}let r=e[0].toLowerCase();if(r==="on"||r==="off"||fo.includes(r)){let i=r==="on"?"auto":r==="off"?"off":r,a=Ls(i,n,t);z(`Reasoning mode: ${i}`,a);return}console.log(s.red(`
361
+ [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
362
+ `))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
363
+ /thinking - Legacy Alias for Reasoning Mode
364
+ `)),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:l(async(e,o,n,t)=>{if(e.length===0){let a=vo(t.provider,t.model);console.log(s.dim(`
365
+ 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(So(a))}`)),console.log(s.dim(`Actual execution: ${$o(t.reasoningMode,a)}`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
366
+ `));return}let r=e[0].toLowerCase();if(!fo.includes(r)){console.log(s.red(`
367
+ [Invalid reasoning mode: ${e[0]}]`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
368
+ `));return}let i=Ls(r,n,t);z(`Reasoning mode: ${r}`,i)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
369
+ /reasoning - Set Reasoning Mode
370
+ `)),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:"agent-mode",aliases:["am"],description:"Show or set agent mode",usage:"/agent-mode [ama|amaw|ama-workflow|sa|toggle]",handler:l(async(e,o,n,t)=>{if(e.length===0){console.log(s.dim(`
371
+ Agent mode: ${s.cyan(t.agentMode.toUpperCase())}`)),console.log(s.dim(`Usage: /agent-mode [ama|amaw|ama-workflow|sa|toggle]
372
+ `));return}let r=e[0]?.toLowerCase(),i=r==="toggle"?Ut(t.agentMode):r==="ama"||r==="sa"||r==="amaw"?r:r==="ama-workflow"?"amaw":void 0;if(!i){console.log(s.red(`
373
+ [Invalid agent mode: ${e[0]}]`)),console.log(s.dim(`Usage: /agent-mode [ama|amaw|ama-workflow|sa|toggle]
374
+ `));return}let a=la(i,n,t);z(`Agent mode: ${i.toUpperCase()}`,a)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
375
+ /agent-mode - Adaptive Multi-Agent Mode Control
376
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /agent-mode ")+"Show current agent mode"),console.log(s.dim(" /agent-mode ama ")+"Enable adaptive multi-agent mode"),console.log(s.dim(" /agent-mode amaw ")+"Enable AMA Workflow mode; generated workflows may start automatically"),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 keeps adaptive multi-agent harness selection enabled and supports explicit /workflow.")),console.log(s.dim(" AMAW keeps AMA behavior and may silently start restricted generated workflows.")),console.log(s.dim(" SA keeps routing and task artifacts, but forces single-agent execution to save tokens.")),console.log()},"detailedHelp")},{name:"auto",aliases:["a"],description:"Quick switch to auto mode",handler:l(async(e,o,n,t)=>{t.permissionMode="auto",n.setPermissionMode?.("auto"),No("auto"),console.log(s.cyan(`
377
+ [Switched to auto mode] (saved)`))},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
378
+ /auto - Quick Switch to Auto Mode
379
+ `)),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:"skills",description:"(Deprecated) Use /skill instead",usage:"/skill",handler:l(async(e,o)=>{console.log(s.dim(`
380
+ [/skills is deprecated. Use /skill instead]`)),await Ds(e,o)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
381
+ /skills - Deprecated
382
+ `)),console.log(s.yellow("This command is deprecated. Use /skill instead.")),console.log(),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /skill:<name> ")+"Invoke a skill"),console.log()},"detailedHelp")},{name:"skill",description:"Skill namespace - invoke skills with /skill:name",usage:"/skill[:name] [args]",handler:l(async(e,o,n,t)=>{await Ds(e,o)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
383
+ /skill - Skill Namespace
384
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill by name"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" This is the pi-mono style skill invocation format.")),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:code-review src/ ")+"# Invoke code-review skill"),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:l(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let i=Ne().verifierLog===!0,a=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
385
+ Sidecar Verifier log: ${s.cyan(a)}${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]
386
+ `));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(`
387
+ [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /verifier-log [on|off]
388
+ `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Me({verifierLog:t});z(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
389
+ /verifier-log - Sidecar Verifier Log Toggle
390
+ `)),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:l(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_STALL_LOG==="1";if(!o){let i=Ne().stallLog===!0,a=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
391
+ Stall Sidecar log: ${s.cyan(a)}${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]
392
+ `));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(`
393
+ [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /stall-log [on|off]
394
+ `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Me({stallLog:t});z(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:l(()=>{console.log(s.cyan(`
395
+ /stall-log - Stall Sidecar Log Toggle
396
+ `)),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")},Fo,Ho,ns,As,sn,Rs],oa={General:["help","copy","exit","clear","compact","reload","extensions","status"],Permission:["mode","auto"],Session:["new","save","load","sessions","history","delete"],Settings:["model","provider","thinking","reasoning","agent-mode","plan","repointel"],Skills:["skill"]};function na(e){let o=so();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}l(na,"getCommandsForCategory");function ta(e){return e!=="off"}l(ta,"reasoningModeToLegacyThinking");var sa=["auto","off","oss","premium-shared","premium-native"];function ra(e){return e&&sa.includes(e)?e:null}l(ra,"normalizeRepoIntelligenceMode");function _s(e){let o=e?.trim();return!o||o==="default"||o==="reset"||o==="clear"?null:o}l(_s,"normalizeRuntimeOverride");function ia(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}l(ia,"resolveToggleFlag");function Me(e){try{return Y(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}l(Me,"persistUserConfig");function z(e,o){if(o.saved){console.log(s.cyan(`
397
+ [${e}] (saved)`));return}console.log(s.yellow(`
398
+ [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}l(z,"printPersistedCommandStatus");function Ls(e,o,n){let t=ta(e),r=Me({reasoningMode:e,thinking:t});return o.setReasoningMode?o.setReasoningMode(e):(n.reasoningMode=e,n.thinking=t),r}l(Ls,"applyReasoningMode");function la(e,o,n){let t=Me({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}l(la,"applyAgentMode");function no(e,o,n,t){let r=Me(o);return n.setRepoIntelligenceRuntime?n.setRepoIntelligenceRuntime(e):(e.mode!==void 0&&(t.repoIntelligenceMode=e.mode),e.endpoint!==void 0&&(t.repointelEndpoint=e.endpoint??void 0),e.bin!==void 0&&(t.repointelBin=e.bin??void 0),e.trace!==void 0&&(t.repoIntelligenceTrace=e.trace)),r}l(no,"applyRepoIntelligenceRuntimeConfig");function aa(e){let o=e.configuredMode===e.requestedMode?e.configuredMode:`${e.configuredMode} -> ${e.requestedMode}`,n=`${e.effectiveEngine}/${e.effectiveBridge}`,t=e.transport?`, ${e.transport}`:"",r=e.fallbackToOss?", fallback=oss":"";return`${o} => ${n} (${e.status}${t}${r})`}l(aa,"formatRepoIntelligenceSummary");function Ws(e){console.log(s.bold(`
399
+ Repo Intelligence:
400
+ `)),console.log(s.dim(` Configured: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Requested: ${s.cyan(e.requestedMode)}`)),console.log(s.dim(` Active: ${s.cyan(`${e.effectiveEngine}/${e.effectiveBridge}`)}`)),console.log(s.dim(` Status: ${s.cyan(e.status)}${e.transport?s.dim(` (${e.transport})`):""}`)),console.log(s.dim(` Trace: ${s.cyan(e.traceEnabled?"on":"off")}`)),console.log(s.dim(` Endpoint: ${e.endpoint}`)),console.log(s.dim(` Bin: ${e.bin}`)),e.clientBuildId&&console.log(s.dim(` Client ID: ${e.clientBuildId}`)),e.daemonBuildId&&console.log(s.dim(` Daemon ID: ${e.daemonBuildId}`)),e.daemonPid!==void 0&&console.log(s.dim(` Daemon PID: ${e.daemonPid}`)),e.daemonStartedAt&&console.log(s.dim(` Daemon Up: ${e.daemonStartedAt}`)),e.fallbackToOss&&console.log(s.yellow(" Fallback: OSS baseline 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()}l(Ws,"printRepoIntelligenceInspection");function ca(e){e.warmed?console.log(s.green(`
401
+ [repointel warmed successfully]`)):console.log(s.yellow(`
402
+ [repointel warm did not reach a ready daemon state]`)),e.warmLatencyMs!==void 0&&console.log(s.dim(` Warm latency: ${e.warmLatencyMs} ms`)),Ws(e)}l(ca,"printRepoIntelligenceWarmResult");function Os(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()}}l(Os,"printCommandSection");function da(){console.log(s.bold(`
403
+ Available Commands:
404
+ `));let e=so(),o=new Set;for(let[t,r]of Object.entries(oa)){let i=na(r);if(i.length!==0){for(let a of i)o.add(a.name.toLowerCase());Os(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 ga()){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"])Os(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 (e.g., /skill:code-review)`),console.log(),console.log(s.dim(`Tip: ${s.cyan("/<command> help")} shows command-specific help.`)),console.log()}l(da,"printHelp");function ua(e){let o=Nn({topic:e});console.log(`
405
+ ${s.cyan(o.title)}`),console.log(o.content),o.nextTopics.length>0&&console.log(s.dim(`
406
+ Related topics: ${o.nextTopics.join(", ")}`)),console.log()}l(ua,"printManualTopic");function hn(e){K.size===0&&to();let o=K.get(e.toLowerCase());if(!o){let n=wn(e);if(!n){console.log(s.yellow(`
407
+ [Unknown command: /${e}. Type /help for available commands]`));return}console.log(s.cyan(`
408
+ /${n.name}`)),n.aliases?.length&&console.log(s.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(s.dim(`
409
+ ${n.description}`)),console.log(s.dim(`
410
+ Usage: ${pa(n)}`)),console.log();return}o.detailedHelp?o.detailedHelp():(console.log(s.cyan(`
411
+ /${o.name}`)),o.aliases?.length&&console.log(s.dim(`Aliases: ${o.aliases.join(", ")}`)),console.log(s.dim(`
412
+ ${o.description}`)),o.usage&&console.log(s.dim(`
413
+ Usage: ${o.usage}`)),console.log())}l(hn,"printDetailedHelp");async function ma(e,o,n=[]){let t=n[0]?.toLowerCase(),r=e.contextTokenSnapshot?.currentTokens??go(e.messages),i=e.contextTokenSnapshot?.source??"estimate",a=Qn(o.provider),c=ot(o.provider,o.model,o.reasoningMode);if(console.log(s.bold(`
414
+ Session Status:
415
+ `)),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(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),a){let u=bo(a),g=a.transport==="cli-bridge"?s.yellow(u):s.cyan(u);console.log(s.dim(` Provider Cap: ${g}`))}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 he({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace});console.log(s.dim(` Repo Intel: ${s.cyan(aa(d))}`)),e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace: ${s.cyan(zo(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()}l(ma,"printStatus");async function Ds(e,o){let n=po(o.gitRoot);n.size===0&&await ho(o.gitRoot),fa(n.listUserInvocable())}l(Ds,"handleSkillNamespaceCommand");function fa(e){if(console.log(s.bold(`
416
+ Available Skills:
417
+ `)),e.length===0){console.log(s.dim(" No skills found.")),console.log(s.dim(`
418
+ Skills can be placed in:`)),console.log(s.dim(" - .kodax/skills/")),console.log(s.dim(" - ~/.kodax/skills/"));return}let o=Math.max(...e.map(n=>n.name.length));for(let n of e){let t=n.name.padEnd(o),r=n.argumentHint?` ${n.argumentHint}`:"",i=n.source==="builtin"?" [builtin]":n.source==="user"?" [user]":n.source==="plugin"?" [plugin]":"",a=n.description.length>50?n.description.slice(0,50)+"...":n.description;console.log(` ${s.cyan(`/skill:${t}`)}${s.dim(r)}${s.dim(i)} ${s.dim(a)}`)}console.log(),console.log(s.dim(`Total: ${e.length} skills`)),console.log(s.dim("Usage: /skill:<name> [args] or ask naturally")),console.log()}l(fa,"printSkillsListPiMonoStyle");var K=new ce;function to(e){K.size>0||Ms(K,e)}l(to,"initCommandRegistry");function so(e){return to(e),K}l(so,"getCommandRegistry");function ga(){return H()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}l(ga,"getActiveExtensionCommands");function wn(e){let o=H(),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}l(wn,"getActiveExtensionCommand");function pa(e){return e.usage??`/${e.name}`}l(pa,"formatExtensionCommandUsage");function ha(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}l(ha,"formatExtensionDiagnosticValue");function wa(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${ha(t)}`);return o.length>0?o.join(" | "):void 0}l(wa,"formatExtensionDiagnosticMetadata");function me(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}}}l(me,"getExtensionRuntimeDiagnostics");function ya(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}}l(ya,"toExtensionInvocationRequest");async function ka(e,o,n){let t=H();if(!t)return console.log(s.yellow(`
419
+ [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:l(()=>t.reloadExtensions(),"reloadExtensions"),getDiagnostics:l(()=>me(t),"getDiagnostics"),logger:{debug:l((...a)=>console.debug(`[kodax:extension-command:${e.name}]`,...a),"debug"),info:l((...a)=>console.info(`[kodax:extension-command:${e.name}]`,...a),"info"),warn:l((...a)=>console.warn(`[kodax:extension-command:${e.name}]`,...a),"warn"),error:l((...a)=>console.error(`[kodax:extension-command:${e.name}]`,...a),"error")}});if(!r)return!0;r.message&&console.log(r.message);let i=ya(e,r);return i?{invocation:i}:!0}l(ka,"executeExtensionCommand");function sm(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 a=r.indexOf(":");if(a>0){let c=r.slice(a+1).trim();r=r.slice(0,a),i=c?[c,...i]:i}return{command:r,args:i}}l(sm,"parseCommand");function Ns(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}l(Ns,"isCommandHelpRequest");async function rm(e,o,n,t){if(K.size===0&&to(o.gitRoot),e.skillInvocation)return await va({command:e.skillInvocation.name,args:e.args},o);let r=K.get(e.command);if(r){if(r.userInvocable===!1)return console.log(s.yellow(`
420
+ [Command /${r.name} is not user-invocable]`)),!1;if(Ns(e.args))return hn(e.command),!0;try{let a=await r.handler(e.args,o,n,t);return a&&typeof a=="object"?a:!0}catch(a){return console.log(s.red(`
421
+ [Command failed: ${a instanceof Error?a.message:String(a)}]`)),!1}}let i=wn(e.command);if(i){if(Ns(e.args))return hn(e.command),!0;try{return await ka(i,e.args,o)}catch(a){return console.log(s.red(`
422
+ [Extension command failed: ${a instanceof Error?a.message:String(a)}]`)),!1}}return console.log(s.yellow(`
423
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1}l(rm,"executeCommand");async function va(e,o){let n=po(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await ho(o.gitRoot);try{let i=n.get(t);if(!i)return console.log(s.red(`
424
+ [Skill not found: ${t}]`)),!1;if(!i.userInvocable)return console.log(s.yellow(`
425
+ [Skill "${t}" is not user-invocable]`)),!1;console.log(s.cyan(`
426
+ [Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.dim(`Arguments: ${r||"(none)"}`)),console.log();let a=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{}},d=await Ln(a,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:a.skillFilePath,disableModelInvocation:d.disableModelInvocation,userInvocable:a.userInvocable,allowedTools:a.allowedTools,context:a.context,agent:a.agent,argumentHint:a.argumentHint,model:a.model,hooks:a.hooks,skillInvocation:{name:t,path:a.skillFilePath,description:a.description,arguments:r||void 0,allowedTools:a.allowedTools,context:a.context,agent:a.agent,argumentHint:a.argumentHint,model:a.model,hookEvents:a.hooks?Object.entries(a.hooks).filter(([,u])=>Array.isArray(u)&&u.length>0).map(([u])=>u):void 0,expandedContent:d.content}}}}catch(i){return console.log(s.red(`
427
+ [Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}l(va,"executeSkillCommand");import{exec as ba}from"node:child_process";import*as fe from"node:path";import{promisify as Sa}from"node:util";var Us=Sa(ba);function $a(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}l($a,"pathFromPorcelainLine");async function js(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([Us("git rev-parse --show-toplevel",{cwd:e}),Us("git status --porcelain=v1 -uall",{cwd:e})]),r=n.trim(),i=[],a=new Set;for(let c of t.split(`
428
+ `)){if(!c.trim())continue;let d=$a(c);if(!d)continue;let u=fe.resolve(r,d),g=fe.relative(e,u).split(fe.sep).join("/");if(!(!g||g.startsWith("..")||a.has(g))&&(a.add(g),i.push(g),i.length>=o))break}return i}catch{return[]}}l(js,"getRecentWorkingSetFiles");function ge(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}l(ge,"findCommandSlashIndex");var yn=class{static{l(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=js){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),a=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),u=d===-1?c:_e.join(c,i.slice(0,d)),g=d===-1?i:i.slice(d+1);try{let y=(await this.readdir(u)).filter(b=>b.toLowerCase().startsWith(g.toLowerCase()));for(let b of y){let k=_e.join(u,b),w=await this.isDirectory(k),h=d===-1?b:i.slice(0,d+1)+b;a.push({text:"@"+h+(w?"/":""),display:b+(w?"/":""),description:w?"directory":"file",type:"file"})}}catch{}if(d===-1){let f=await this.getRecentFiles(c),y=new Set(a.map(w=>w.text)),b=g.toLowerCase(),k=[];for(let w of f){if(g&&!_e.basename(w).toLowerCase().startsWith(b))continue;let h="@"+w;y.has(h)||(y.add(h),k.push({text:h,display:w,description:"recent",type:"file"}))}a.unshift(...k)}return a}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=>{ro.readdir(o,(i,a)=>{i?r([]):(this.cache.set(o,{entries:a,expiresAt:Date.now()+this.cacheTimeout}),r(a))})}))}async isDirectory(o){return new Promise(n=>{ro.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},kn=class{static{l(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of so().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=H();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=ge(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=ge(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let i=t.slice(r+1).toLowerCase(),a=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&a.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(i,u)&&a.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return a}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),i=0;for(let a=0;a<r.length&&i<t.length;a++)r[a]===t[i]&&i++;return i===t.length}};function pm(e){let o=new yn(e),n=new kn;return async t=>{let r=t.includes("@"),i=t.includes("/");if(!r&&!i)return[[],t];let a=[];if(i){let d=await xa(t,t.length);a.push(...d)}if(i&&n.canComplete(t,t.length)){let d=await n.getCompletions(t,t.length);a.push(...d)}if(r&&o.canComplete(t,t.length)){let d=await o.getCompletions(t,t.length);a.push(...d)}return[a.map(d=>Aa(t,d)),t]}}l(pm,"createCompleter");async function xa(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-GDG5OHN7.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}l(xa,"getArgumentCompletions");function Aa(e,o){if(o.type!=="argument")return o.display;let n=ge(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}`}l(Aa,"formatReadlineCompletion");import{existsSync as Sn,readdirSync as zs,readFileSync as Ra}from"node:fs";import{join as Ks}from"node:path";var Ca=[{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-in-project",description:"All tools auto within project directory",type:"enum"}],io=[{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"}],Fs=io.slice(2).concat([{name:"off",description:"Disable reasoning",type:"enum"}]);function Ea(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(ne(n))try{return re(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return te().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}l(Ea,"getModelArgs");var Hs=[{name:"on",description:"Enable plan mode for all requests",type:"enum"},{name:"off",description:"Disable plan mode",type:"enum"},{name:"once",description:"Run plan mode for a single request (followed by task)",type:"enum"},{name:"list",description:"List all saved plans",type:"enum"},{name:"resume",description:"Resume a saved plan (followed by plan ID)",type:"enum"},{name:"clear",description:"Clear completed plans",type:"enum"}],vn=[{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"}],bn=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Ta=[{name:"status",description:"Inspect the current repo-intelligence runtime state",type:"enum"},{name:"warm",description:"Warm or start the local premium runtime if available",type:"enum"},{name:"mode",description:"Switch repo-intelligence runtime mode",type:"enum"},{name:"trace",description:"Toggle repo-intelligence trace output",type:"enum"},{name:"endpoint",description:"Inspect or override the local repointel daemon endpoint",type:"enum"},{name:"bin",description:"Inspect or override the local repointel command or path",type:"enum"}],Ia=[{name:"auto",description:"Resolve to premium-native when available, otherwise fall back to oss",type:"enum"},{name:"off",description:"Disable repo-intelligence injection",type:"enum"},{name:"oss",description:"Use only the public OSS repo-intelligence baseline",type:"enum"},{name:"premium-shared",description:"Use premium without the native KodaX auto lane",type:"enum"},{name:"premium-native",description:"Use premium through the native KodaX bridge",type:"enum"}],Pa=[{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"}],Bs=[{name:"default",description:"Clear the override and use the default value again",type:"enum"}],Ma=[{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",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:"help",description:"Show workflow help",type:"enum"}],_a=new Set(["show","pause","resume","stop","delete","rerun","save"]),La=new Set(["show","delete","rerun","save"]),Oa=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Da=[{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"}],Na=[".workflow.json",".ts",".mjs",".js"];function Wa(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}}l(Wa,"workflowRunMatchesSubcommand");function Gs(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}l(Gs,"isWorkflowRunEntryName");function Ua(){let e=de(process.cwd()).key,o=L("workflow-runs",e);if(!Sn(o))return[];let n=[];for(let t of zs(o)){if(!Gs(t))continue;let r=Ks(o,t,"run.json");if(Sn(r))try{let i=JSON.parse(Ra(r,"utf8")),a=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?";n.push({arg:{name:t,description:`${a} - ${c}`,type:"string"},endedAt:typeof i.endedAt=="number"?i.endedAt:0})}catch{}}return n.sort((t,r)=>r.endedAt-t.endedAt).map(t=>t.arg)}l(Ua,"getPersistedWorkflowRunIdArgs");function qs(e){let o=ye().list().filter(r=>Wa(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=La.has(e)?Ua():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}l(qs,"getWorkflowRunIdArgs");function ja(e){for(let o of Na)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Gs(n)?n:void 0}}l(ja,"savedWorkflowNameFromFile");function Xs(){let e=[{path:L("workflows"),source:"personal"},{path:Ks(process.cwd(),".kodax","workflows"),source:"project"}],o=new Map;for(let n of e)if(Sn(n.path))try{for(let t of zs(n.path)){let r=ja(t);r&&o.set(r,{name:r,description:`${n.source} saved workflow`,type:"enum"})}}catch{}return[...o.values()].sort((n,t)=>n.name.localeCompare(t.name))}l(Xs,"getSavedWorkflowNameArgs");function Fa(){let e=new Map;for(let o of qs("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Xs()){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()]}l(Fa,"getWorkflowRerunArgs");function Ha(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?[...Ma,...ke().map(r=>({name:r.name,description:r.description,type:"enum"})),...Xs()]:n==="rerun"&&t<=2?Fa():_a.has(n)&&t<=2?qs(n):n==="runs"&&t<=2?Oa:n==="prune"&&t<=2?Da:[]}l(Ha,"getWorkflowArgs");function Ba(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Ta:t>2?[]:n==="mode"?Ia:n==="trace"?Pa:n==="endpoint"?[...Bs,{name:Wn,description:"Default local repointel daemon endpoint",type:"string"}]:n==="bin"?Bs:[]}l(Ba,"getRepointelArgs");var za=new Map([["mode",Ca],["thinking",io],["think",io],["t",io],["reasoning",Fs],["reason",Fs],["plan",Hs],["p",Hs],["status",vn],["info",vn],["ctx",vn],["delete",bn],["rm",bn],["del",bn]]),Ka=new Set(["model","m"]),Ga=new Set(["repointel","ri"]),qa=new Set(["workflow"]);function $n(e,o,n=[]){let t=e.toLowerCase();return Ka.has(t)?Ea(o):Ga.has(t)?Ba(n):qa.has(t)?Ha(n):za.get(t)??[]}l($n,"getCommandArguments");var xn=class{static{l(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=ge(t);if(r===-1)return!1;let i=t.slice(r),a=i.split(/\s+/);if(a.length>=2&&a[0]!=="")return!0;let c=i.slice(1).toLowerCase();return $n(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=ge(t);if(r===-1)return[];let i=t.slice(r),a=i.indexOf(" "),c=(a===-1?i.slice(1):i.slice(1,a)).toLowerCase(),d=a===-1?"":i.slice(a+1),u=d?d.split(/\s+/):[""],g=u.length-1,f=(u[g]??"").toLowerCase(),y=$n(c,f,u);if(!y||y.length===0)return[];let b=new Set(u.slice(0,-1).map(w=>w.toLowerCase()));return y.filter(w=>!b.has(w.name.toLowerCase())).filter(w=>!f||w.name.includes("/")?!0:w.name.toLowerCase().includes(f)).map(w=>({text:w.name,display:w.name,description:w.description,type:"argument"})).sort((w,h)=>{let x=w.display.toLowerCase().startsWith(f),A=h.display.toLowerCase().startsWith(f);return x&&!A?-1:!x&&A?1:w.display.length-h.display.length})}};function Em(){return new xn}l(Em,"createArgumentCompleter");export{We as a,Za as b,or as c,Qa as d,ve as e,ut as f,mt as g,be as h,To as i,wr as j,Io as k,Mo as l,_o as m,xe as n,Sr as o,Lo as p,le as q,Mt as r,_t as s,Lr as t,Bc as u,No as v,zc as w,Kc as x,Ut as y,zt as z,td as A,sd as B,Jt as C,jo as D,rd as E,Zt as F,id as G,ld as H,ad as I,Td as J,Id as K,Pd as L,ts as M,zo as N,ss as O,de as P,Nd as Q,Yo as R,bl as S,ou as T,nu as U,tu as V,su as W,ru as X,Cs as Y,uu as Z,mu as _,Ts as $,fu as aa,Is as ba,sm as ca,rm as da,xn as ea,Em as fa,ge as ga,yn as ha,kn as ia,pm as ja};