@kodax-ai/kodax 0.7.57 → 0.7.58
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.
- package/CHANGELOG.md +2004 -1920
- package/README.md +31 -25
- package/README_CN.md +22 -15
- package/dist/chunks/agent-YJNC2755.js +2 -0
- package/dist/chunks/argument-completer-QGBNXTYJ.js +2 -0
- package/dist/chunks/chunk-526OILYL.js +2 -0
- package/dist/chunks/{chunk-LZKGOR2C.js → chunk-6AU6EPO6.js} +1 -1
- package/dist/chunks/chunk-73Z7BK5H.js +15 -0
- package/dist/chunks/chunk-7QB55SYG.js +326 -0
- package/dist/chunks/chunk-CQ6EQG7E.js +322 -0
- package/dist/chunks/{chunk-4SHP3M67.js → chunk-CV6JHPEO.js} +1 -1
- package/dist/chunks/chunk-D6QVXQNI.js +1 -0
- package/dist/chunks/chunk-HS2K74I4.js +31 -0
- package/dist/chunks/chunk-NKHXRN7G.js +403 -0
- package/dist/chunks/chunk-OBPB5BQ6.js +310 -0
- package/dist/chunks/chunk-P4VF3JEP.js +7 -0
- package/dist/chunks/chunk-PIQWODWN.js +18 -0
- package/dist/chunks/{chunk-YSVPF6SN.js → chunk-QHWXPJEG.js} +268 -264
- package/dist/chunks/chunk-XXEIFNBE.js +52 -0
- package/dist/chunks/chunk-ZZDC75H4.js +681 -0
- package/dist/chunks/compaction-config-OPMRZSAK.js +2 -0
- package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-CIXFH5SE.js} +1 -1
- package/dist/chunks/dist-JSE7NICF.js +2 -0
- package/dist/chunks/dist-SDNQOW52.js +2 -0
- package/dist/chunks/host-H7FQMMRC.js +2 -0
- package/dist/chunks/paste-Y4DVUWSM.js +2 -0
- package/dist/chunks/run-manager-4H5HWMVW.js +2 -0
- package/dist/chunks/utils-FLVVQHM7.js +2 -0
- package/dist/index.d.ts +14 -14
- package/dist/index.js +2 -2
- package/dist/kodax_cli.js +1206 -1036
- package/dist/sdk-agent.d.ts +153 -12
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +186 -186
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.d.ts +66 -43
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +18 -2
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +20 -22
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-session.d.ts +7 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
- package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-D3cddmyV.d.ts} +490 -69
- package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
- package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
- package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-iK7FwMdW.d.ts} +4 -4
- package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-DHow2y2G.d.ts} +169 -14
- package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DDOfVYDr.d.ts} +31 -2
- package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-ByDcJc5g.d.ts} +113 -5
- package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-21Tt3N_x.d.ts} +72 -9
- package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-BsZrBPYu.d.ts} +2 -2
- package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
- package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-D4ZA8LJV.d.ts} +125 -3
- package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-BURxOxFd.d.ts} +83 -6
- package/package.json +2 -2
- package/dist/chunks/agent-EHWQZA4C.js +0 -2
- package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
- package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
- package/dist/chunks/chunk-KN6IJMTB.js +0 -636
- package/dist/chunks/chunk-MJFPFRGK.js +0 -423
- package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
- package/dist/chunks/chunk-PCPFLPS4.js +0 -5
- package/dist/chunks/chunk-TCLSPUTR.js +0 -31
- package/dist/chunks/chunk-VACH6QWN.js +0 -315
- package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
- package/dist/chunks/dist-IE4HVWP7.js +0 -2
- package/dist/chunks/dist-IKOK2MJQ.js +0 -2
- package/dist/chunks/paste-WTL2XN7P.js +0 -2
- package/dist/chunks/utils-EJ2VCRTC.js +0 -2
- package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
|
@@ -1,80 +1,80 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{A as Ln,B as Wn,C as Ur,E as Mo,G as ve,I as jr,K as Fr,L as Hr,M as Br,b as Pr,c as Mr,d as _n,m as Lr,o as Oe,p as Pn,q as Wr,r as Nr,s as Or,t as Mn,w as Po,y as Dr}from"./chunk-3WWPJGPQ.js";import{a as Gr}from"./chunk-LZKGOR2C.js";import{Ba as xr,Ea as ke,Ia as We,Ka as Qe,La as Io,Ma as Ar,Na as Rr,Pa as Er,Qa as In,Ra as Tr,Sa as eo,Ua as Ne,Wa as Cr,db as _o,eb as Ir,kb as _r,lb as oo}from"./chunk-MJFPFRGK.js";import{Bd as kr,Dd as vr,Ed as Sr,Hd as Cn,Td as $r,Vd as br,Wa as wr,Y as Co,dd as te,hd as hr,id as yr,w as gr}from"./chunk-KN6IJMTB.js";import{j as An,q as tr,ta as Rn,ua as Ie,va as _e}from"./chunk-TCLSPUTR.js";import{Ac as dr,Bc as ur,Jb as Ro,Kd as pr,Lb as Eo,Mb as ar,Nd as Tn,Ob as lr,Oc as Pe,Pc as Me,Uc as fr,Wd as To,k as En,tb as rr,ub as sr,ud as Le,va as Ao,vd as mr,wa as j,yb as ir,zc as cr}from"./chunk-N2N2W3AQ.js";import{a,b as xn,c as na}from"./chunk-V4WSBIXB.js";var Qr=xn((Hu,Zr)=>{"use strict";Zr.exports=a(function(o){return o.map(function(n){return n===""?"''":n&&typeof n=="object"?n.op.replace(/(.)/g,"\\$1"):/["\s\\]/.test(n)&&!/'/.test(n)?"'"+n.replace(/(['])/g,"\\$1")+"'":/["'\s]/.test(n)?'"'+n.replace(/(["\\$`!])/g,"\\$1")+'"':String(n).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")}).join(" ")},"quote")});var is=xn((Gu,ss)=>{"use strict";var rs="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",es=new RegExp("^"+rs+"$"),os="|&;()<> \\t",sa='"((\\\\"|[^"])*?)"',ia="'((\\\\'|[^'])*?)'",aa=/^#$/,ns="'",ts='"',Nn="$",Se="",la=4294967296;for(On=0;On<4;On++)Se+=(la*Math.random()).toString(16);var On,ca=new RegExp("^"+Se);function da(e,o){for(var n=o.lastIndex,t=[],r;r=o.exec(e);)t.push(r),o.lastIndex===r.index&&(o.lastIndex+=1);return o.lastIndex=n,t}a(da,"matchAll");function ua(e,o,n){var t=typeof e=="function"?e(n):e[n];return typeof t>"u"&&n!=""?t="":typeof t>"u"&&(t="$"),typeof t=="object"?o+Se+JSON.stringify(t)+Se:o+t}a(ua,"getVar");function fa(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+os+`]|[^\\s'"`+os+"])+",i=new RegExp(["("+rs+")","("+r+"|"+sa+"|"+ia+")+"].join("|"),"g"),l=da(e,i);if(l.length===0)return[];o||(o={});var c=!1;return l.map(function(d){var u=d[0];if(!u||c)return;if(es.test(u))return{op:u};var f=!1,m=!1,h="",y=!1,k;function v(){k+=1;var E,G,z=u.charAt(k);if(z==="{"){if(k+=1,u.charAt(k)==="}")throw new Error("Bad substitution: "+u.slice(k-2,k+1));if(E=u.indexOf("}",k),E<0)throw new Error("Bad substitution: "+u.slice(k));G=u.slice(k,E),k=E}else if(/[*@#?$!_-]/.test(z))G=z,k+=1;else{var Y=u.slice(k);E=Y.match(/[^\w\d_]/),E?(G=Y.slice(0,E.index),k+=E.index-1):(G=Y,k=u.length)}return ua(o,"",G)}for(a(v,"parseEnvVar"),k=0;k<u.length;k++){var p=u.charAt(k);if(y=y||!f&&(p==="*"||p==="?"),m)h+=p,m=!1;else if(f)p===f?f=!1:f==ns?h+=p:p===t?(k+=1,p=u.charAt(k),p===ts||p===t||p===Nn?h+=p:h+=t+p):p===Nn?h+=v():h+=p;else if(p===ts||p===ns)f=p;else{if(es.test(p))return{op:u};if(aa.test(p)){c=!0;var R={comment:e.slice(d.index+k+1)};return h.length?[h,R]:[R]}else p===t?m=!0:p===Nn?h+=v():h+=p}}return y?{op:"glob",pattern:h}:h}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(fa,"parseInternal");ss.exports=a(function(o,n,t){var r=fa(o,n,t);return typeof n!="function"?r:r.reduce(function(i,l){if(typeof l=="object")return i.concat(l);var c=l.split(RegExp("("+Se+".*?"+Se+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return ca.test(d)?JSON.parse(d.split(Se)[1]):d}))},[])},"parse")});var as=xn(Dn=>{"use strict";Dn.quote=Qr();Dn.parse=is()});import*as hn from"fs";import*as So from"path";import s from"chalk";var Lo=["plan","accept-edits","auto","auto-in-project"];function Wu(e){return e==="auto"||e==="auto-in-project"}a(Wu,"isAutoMode");function ta(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ta,"permissionModeDisplayName");var ra='[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 Nu(e=console.warn){let o=!1;return()=>{o||(o=!0,e(ra))}}a(Nu,"createAutoInProjectDeprecationEmitter");var zr=$r(),no=new Set(zr.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),qr=new Set(zr.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),Kr=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"]),Xr=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 Vr(e){switch(e){case"plan":return new Set(["bash","write","edit","undo"]);case"accept-edits":return new Set(["bash"]);case"auto":case"auto-in-project":return new Set}}a(Vr,"computeConfirmTools");function Yr(e){return e!==void 0&&Lo.includes(e)}a(Yr,"isPermissionMode");function to(e,o){return Yr(e)?e:o}a(to,"normalizePermissionMode");async function Jr(e){let o=e.resolve(e.provider),n=[];for(let t of e.efforts){if(e.signal?.aborted)break;let r=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:t},{modelOverride:e.model,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{r=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(i){n.push({effort:t,status:"error",error:i instanceof Error?i.message:String(i)});continue}r?(Mr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(Jr,"probeProviderReasoningEfforts");import jo from"fs";import $s from"path";import Wo from"fs";import L from"path";import so from"os";var ds=na(as(),1);var ls=new Set(["/dev/null","nul","NUL"]);function Un(e){return ls.has(e)||ls.has(e.toLowerCase())}a(Un,"isNullDevice");function ro(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`"))return{statements:[],unparseable:!0};let n;try{n=(0,ds.parse)(o)}catch{return{statements:[],unparseable:!0}}let t=[],r=[],i=[],l=[],c=null,d=!1,u=a(()=>{(i.length>0||l.length>0)&&(r.push({argv:i,redirections:l}),i=[],l=[])},"flushStage"),f=a(m=>{u(),r.length>0&&(t.push({precedingOp:c,stages:r}),r=[]),c=m},"flushStatement");for(let m=0;m<n.length;m+=1){let h=n[m];if(typeof h=="string"){i.push(h);continue}if("op"in h){let y=h.op;if(y==="&&"||y==="||"||y===";"){f(y);continue}if(y==="|"){u();continue}if(y==="&"){let k=n[m+1];if(k!==void 0&&typeof k!="string"&&"op"in k&&(k.op===">"||k.op===">>")){let v=n[m+2];if(typeof v!="string"){d=!0,m+=1;continue}l.push(cs(`&${k.op}`,v)),m+=2;continue}d=!0;continue}if(pa(y)){let k=null,v=i[i.length-1];v!==void 0&&/^[0-9]+$/.test(v)&&(k=v,i.pop());let p=n[m+1];if(typeof p!="string"){d=!0;continue}l.push(cs(k?`${k}${y}`:y,p)),m+=1;continue}if(y==="glob"){let k=h.pattern;typeof k=="string"?i.push(k):d=!0;continue}d=!0;continue}if("comment"in h)break;d=!0}return f(null),{statements:t,unparseable:d}}a(ro,"parseBashCommand");var ma=new Set([">",">>","<","<<","<<<","&>","&>>"]),us=/^([0-9]+|&)(>>?|<<?)$/;function pa(e){return ma.has(e)||us.test(e)}a(pa,"isRedirectionOp");function cs(e,o){let n=null,t=e,r=us.exec(e);return r&&(n=r[1],t=r[2]),{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o}}a(cs,"parseRedirection");var ga=L.join(".agent","plan_mode_doc.md"),No=new Map,Oo=null;function wa(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Xr)if(o===n||o.startsWith(n+" ")){if(n==="sed"&&o.split(/\s+/).some(i=>i.startsWith("-i")||i==="--in-place"))return!1;if(n==="awk"){let r=o.split(/\s+/);if(r.includes("-f")||r.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc","ruby","perl"].includes(n)){let r=o.split(/\s+/).slice(1);if(r.length>0&&!r.every(i=>/^(-v|--version|-h|--help)$/.test(i)))return!1}return!0}return!1}a(wa,"isSingleBashReadCommand");var ha=/^[a-zA-Z0-9]+$/;function ya(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(!ha.test(t))return!1;return n}a(ya,"isHelpCommand");function Fn(e){if(!e||!e.trim())return!1;if(ya(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=ro(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||!Un(c.target))return!1;let l=i.argv.join(" ");if(l&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!wa(l))return!1}}return!0}a(Fn,"isBashReadCommand");function ka(e){let o=e.trim();return o?Fn(o)?null:"[Blocked] Direct !command execution only supports safe read-only commands. Use the bash tool for commands that write files, invoke shells, or require confirmation.":"[Shell: No command provided]"}a(ka,"getDirectShellBypassBlockReason");var ms=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]);function Hn(e){if(!e||!e.trim())return!1;let o=ro(e);if(o.unparseable)return!1;for(let n of o.statements)for(let t of n.stages){let r=t.argv.map(i=>i.toLowerCase());if(r.length>0){let i=r[0],l=r.length>=2?`${r[0]} ${r[1]}`:null;for(let c of Kr)if(c===i||l!==null&&c===l)return!0}for(let i of r)if(ms.has(i))return!0;for(let i of t.redirections)if(!i.input&&!Un(i.target))return!0}return!1}a(Hn,"isBashWriteCommand");function Bn(e){let o=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\((.+)\)$/);return o?{tool:o[1].toLowerCase(),pattern:o[2]}:{tool:e.toLowerCase(),pattern:null}}a(Bn,"parseAllowedToolPattern");function va(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(va,"matchesBashPatternLegacy");function Sa(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a(Sa,"matchesBashPatternByExtractedPrefix");async function Gn(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",l=[];for(let c of n){let d=Bn(c);if(d.tool==="bash"){if(d.pattern===null)return!0;l.push({pattern:d.pattern})}}if(l.length===0)return!1;if(t){let c;try{c=await t.extract(i,r)}catch{return!1}if(c.kind!=="prefix")return!1;for(let{pattern:d}of l)if(d&&Sa(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&va(i,c))return!0;return!1}a(Gn,"isToolCallAllowed");function zn(e,o,n){if(e.toLowerCase()!=="bash")return"";let t=o.command??"",r=t.split(" ");return r.length>1?`Bash(${r.slice(0,2).join(" ")}:*)`:`Bash(${t})`}a(zn,"generateSavePattern");function io(e,o){try{let n=L.resolve(e),t=L.resolve(o),r=Ao(),i=L.join(t,".kodax");return De(n,i)||De(n,r)?!0:!(De(n,t)||ws().some(c=>De(n,c)))}catch{return!1}}a(io,"isAlwaysConfirmPath");function fs(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"&&$a.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e))}a(fs,"looksLikePath");var $a=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/;function ba(e){let o=[],n=/["']([^"']+)["']/g,t;for(;(t=n.exec(e))!==null;)o.push(t[1]);let r=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|[a-zA-Z]:\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(t=r.exec(e))!==null;)o.push(t[1]);return o}a(ba,"legacyRegexPathScan");function Uo(e){let o=new Set,n=ro(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){for(let i of r.argv)fs(i)&&o.add(i);for(let i of r.redirections)fs(i.target)&&o.add(i.target)}for(let t of ba(e))o.add(t);return Array.from(o)}a(Uo,"extractPathsFromCommand");function xa(e,o){let n=Uo(e);for(let t of n)if(io(t,o))return!0;return!1}a(xa,"isCommandOnProtectedPath");function Do(e){let o=L.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(Do,"normalizePathForComparison");function Aa(e,o){return Do(e)===Do(o)}a(Aa,"pathsEqual");function De(e,o){let n=Do(e),t=Do(o);return n===t||n.startsWith(t+L.sep)}a(De,"isPathInsideDirectory");function qn(e,o){try{let n=L.resolve(o),t=L.resolve(n,gs(ps(e)));return De(t,n)}catch{return!1}}a(qn,"isPathInsideProject");function Ra(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(Ra,"collectAbsolutePathCandidates");function Kn(e){let o=L.resolve(e),n=No.get(o);if(n)return n;if(Wo.existsSync(o)){let c=Wo.realpathSync.native(o);return No.set(o,c),c}let t=[],r=o;for(;!Wo.existsSync(r);){let c=L.dirname(r);if(c===r)return No.set(o,o),o;t.unshift(L.basename(r)),r=c}let i=Wo.realpathSync.native(r),l=L.join(i,...t);return No.set(o,l),l}a(Kn,"resolveExistingPathPrefix");function ps(e){return e==="~"?so.homedir():e.startsWith(`~${L.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?L.join(so.homedir(),e.slice(2)):e}a(ps,"expandHomeDirectory");function gs(e){let o=so.tmpdir(),n=[[/^%temp%/i,o],[/^%tmp%/i,o],[/^\$env:temp\b/i,o],[/^\$env:tmp\b/i,o],[/^\$tmpdir\b/i,o],[/^\$temp\b/i,o],[/^\$tmp\b/i,o]];for(let[t,r]of n)if(t.test(e))return e.replace(t,r);return e}a(gs,"expandSystemTempAlias");function Ea(e,o){let n=L.resolve(o??process.cwd()),t=gs(ps(e)),r=L.isAbsolute(t)?L.resolve(t):L.resolve(n,t);return Kn(r)}a(Ea,"resolvePermissionPath");function ws(){if(Oo)return Oo;let e=new Set,o=[so.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(Kn(n))}catch{}return Oo=Array.from(e),Oo}a(ws,"getSystemTempDirectories");function Xn(e){let o=Kn(e??process.cwd());return{projectPlanDoc:L.join(o,ga),systemTempDirs:ws()}}a(Xn,"getPlanModeAllowedWritablePaths");function jn(e,o){let n=Ea(e,o),{projectPlanDoc:t,systemTempDirs:r}=Xn(o);return Aa(n,t)?!0:r.some(i=>De(n,i))}a(jn,"isPlanModeAllowedPath");function Ta(e){let{projectPlanDoc:o,systemTempDirs:n}=Xn(e),t=n[0]??so.tmpdir();return`${o} or the system temp directory (${t})`}a(Ta,"formatPlanModeAllowedLocations");var Ca=new Set(["-a","--append","-i","--ignore-interrupts"]);function Ia(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];Ca.has(t)||t.startsWith("-")||o.push(t)}return o}a(Ia,"collectTeeTargets");function _a(e){let o=[],n=1,t=!1;for(;n<e.argv.length;){let r=e.argv[n],i=r.toLowerCase();if(i==="-path"||i==="-literalpath"||i==="-destination"){let l=e.argv[n+1];if(l!==void 0&&!l.startsWith("-")){o.push(l),n+=2;continue}}!r.startsWith("-")&&!t&&(o.push(r),t=!0),n+=1}return o}a(_a,"collectPowerShellWriteTargets");function Ue(e){let o=new Set,n=a(r=>{let i=r?.trim();i&&o.add(i)},"pushTarget");for(let r of Uo(e))n(r);let t=ro(e);if(t.unparseable)return Array.from(o);for(let r of t.statements)for(let i of r.stages){for(let c of i.redirections)c.input||n(c.target);let l=i.argv[0]?.toLowerCase();if(l){if(l==="tee")for(let c of Ia(i))n(c);else if(ms.has(l))for(let c of _a(i))n(c)}}return Array.from(o)}a(Ue,"collectBashWriteTargets");function hs(e,o){if(!Hn(e))return{dangerous:!1};let n=new Set([...Ue(e),...Ra(e)]);for(let t of n)if(!qn(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(hs,"getBashOutsideProjectWriteRisk");function ys(e,o,n){let t=Ta(n);if(br(e))return null;if(no.has(e)){let r=typeof o.path=="string"?o.path:"";return r?jn(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(!Hn(r))return null;let i=Ue(r);if(i.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${t}. Could not determine a safe target from: ${r.slice(0,80)}${r.length>80?"...":""}`;let l=i.find(c=>!jn(c,n));return l?`[Blocked] Plan mode only allows bash write operations in ${t}. Blocked target: ${l}`:null}return`[Blocked] Tool '${e}' has side effects and is not permitted in plan mode. Switch to accept-edits or auto mode to use it, or work within ${t}.`}a(ys,"getPlanModeBlockReason");import ue from"node:path";import Pa from"node:os";function je(e,o){try{let n=ue.resolve(e),t=ue.resolve(o);return n===t?!0:n.startsWith(t+ue.sep)}catch{return!1}}a(je,"isPathUnder");function Ma(){try{return Ao()}catch{return}}a(Ma,"safeGetAgentConfigHome");function ks(e,o){let n=Ma();if(n&&je(e,n))return"user-kodax";let t=ue.join(ue.resolve(o),".kodax");if(je(e,t))return"project-kodax"}a(ks,"resolveProtectedZone");function La(){let e=new Set;try{e.add(Pa.tmpdir())}catch{}for(let o of["TEMP","TMP","TMPDIR"]){let n=process.env[o];n&&n.length>0&&e.add(n)}return Array.from(e)}a(La,"getSystemTempDirs");var Wa=new Set(["bash"]),Na={toolNames:Wa,collect(e,o){let n=typeof e.input.command=="string"?e.input.command:"";if(!n||!o)return[];let t=[],r=new Set,i=new Set,l=La(),c=ue.resolve(o);for(let d of Uo(n)){let u;try{u=ue.resolve(o,d)}catch{continue}let f=ks(u,o);if(f){r.has(u)||(r.add(u),t.push({kind:"protected_path",path:d,zone:f}));continue}if(io(d,o)){let m=l.some(y=>je(u,y)),h=je(u,c);!m&&!h&&!i.has(u)&&(i.add(u),t.push({kind:"outside_project",path:d}))}}for(let d of Ue(n)){let u;try{u=ue.resolve(o,d)}catch{continue}ks(u,o)||je(u,c)||l.some(h=>je(u,h))||t.push({kind:"shell_redirect_outside",target:d})}return t}};var Fo=j("config.json");function bs(){return $s.join(process.cwd(),".kodax","config.local.json")}a(bs,"getProjectConfigFile");function If(e=process.env){let n=ao(Fo).autoMode??{},t=e.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,i=n.engine==="llm"||n.engine==="rules"?n.engine:void 0,l=r??i??"llm",c=Ss(n.classifierModel),d=Ss(e.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=e.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,m=Number.isFinite(f)&&f>0?Math.floor(f):void 0,h=typeof n.timeoutMs=="number"&&n.timeoutMs>0?Math.floor(n.timeoutMs):void 0,y=vs(e.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),k=typeof n.speculativeWindowMs=="number"?vs(String(n.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??h,speculativeWindowMs:y??k}}a(If,"loadAutoModeSettings");function vs(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(vs,"parseSpeculativeWindow");function Ss(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(Ss,"nonEmptyString");function ao(e){try{if(jo.existsSync(e))return JSON.parse(jo.readFileSync(e,"utf-8"))}catch{}return{}}a(ao,"readJsonFile");function xs(e,o){jo.mkdirSync($s.dirname(e),{recursive:!0}),jo.writeFileSync(e,JSON.stringify(o,null,2))}a(xs,"writeJsonFile");function Vn(e){let o=ao(Fo);xs(Fo,{...o,permissionMode:e})}a(Vn,"savePermissionModeUser");function _f(){let e=ao(Fo),o=ao(bs()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(_f,"loadAlwaysAllowTools");function Pf(e,o,n=!1){let t=zn(e,o,n);if(!t)return;let r=bs(),i=ao(r),l=i.alwaysAllowTools??[];l.includes(t)||xs(r,{...i,alwaysAllowTools:[...l,t]})}a(Pf,"saveAlwaysAllowToolPattern");var Yn=["ama","amaw","sa"];function As(e){let o=Yn.indexOf(e);return Yn[(o+1)%Yn.length]??"ama"}a(As,"nextAgentMode");var Fe=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let i of r.aliases)this.aliases.delete(i.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Oa=new Fe;import K from"chalk";import{Buffer as Cs}from"node:buffer";import{spawn as Da}from"node:child_process";import Rs from"node:process";var $e="\x1B",Ua="\x07",Jn=`${$e}\\`;function Es(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(Es,"shouldPreferNativeClipboard");function ja(e,o){let n=Cs.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?Jn:Ua,r=`${$e}]52;c;${n}${t}`;return o.TMUX?`${$e}Ptmux;${r.replaceAll($e,`${$e}${$e}`)}${Jn}`:o.STY?`${$e}P${r}${Jn}`:r}a(ja,"buildOscSequence");async function Ho(e,o,n){return new Promise((t,r)=>{let i=Da(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";i.on("error",r),i.stderr?.on("data",c=>{l+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}a(Ho,"execClipboardCommand");function Fa(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=Cs.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Fa,"buildWindowsClipboardCandidates");async function Ts(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Fa(e);for(let[r,i,l]of t)try{if(await Ho(r,i,l))return!0}catch{}return!1}case"darwin":return Ho("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await Ho(r,i,e))return!0}catch{}return!1}default:return!1}}a(Ts,"tryNativeClipboard");async function Ha(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await Ho("tmux",n,e)}catch{return!1}}a(Ha,"tryTmuxClipboard");async function Is(e,o={}){let n=o.env??Rs.env,t=o.platform??Rs.platform,r=e.trimEnd(),i=ja(r,n);if(!r)throw new Error("Nothing to copy.");if(Es(n,t))try{if(await Ts(r,n,t))return{path:"native"}}catch{}if(await Ha(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!Es(n,t))try{if(await Ts(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(Is,"copyTextToClipboard");var Zn;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(Zn||(Zn={}));var B;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(B||(B={}));var Gf={[B.Scheduled]:"\u25CB",[B.Validating]:"\u25CC",[B.AwaitingApproval]:"?",[B.Executing]:"\u25CB",[B.Success]:"\u2713",[B.Error]:"\u2717",[B.Cancelled]:"-"},_s;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(_s||(_s={}));var zf={streamingState:Zn.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Ba="[redacted]",Ps="[truncated]";function re(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(re,"truncateToolReplayText");function Ga(e){let o=e.toLowerCase().replace(/[\s_-]/g,"");return o.includes("token")||o.includes("password")||o.includes("secret")||o.includes("apikey")||o.includes("accesstoken")||o==="authorization"||o==="cookie"||o==="setcookie"}a(Ga,"isSensitiveToolInputKey");function Ms(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Ms,"isRecord");function Qn(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return re(e);if(o>=6)return Ps;if(typeof e=="object"&&e!==null){if(n.has(e))return Ps;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>Qn(r,o+1,n));if(!Ms(e))return re(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=Ga(r)?Ba:Qn(i,o+1,n);return t}return re(String(e))}a(Qn,"sanitizeToolJsonValue");function Ls(e){if(!e)return;let o=Qn(e);return Ms(o)?o:void 0}a(Ls,"sanitizeToolInput");function Ws(e){if(e!==void 0){if(typeof e=="string")return re(e);try{return re(JSON.stringify(e))}catch{return re(String(e))}}}a(Ws,"stringifyToolReplayValue");function Jf(e){return e.type==="tool_summary"?{type:"event",text:e.text,icon:"tool"}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Za)}:e}a(Jf,"seedToHistoryItem");var za="[Thinking]",qa="[/Thinking]",Ka="Untitled Session",Ns=50,Xa=60,Ds="...",Us=["[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:"],js=[/(?:^|\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:/],Va=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,Ya="Session ended before the tool completed.";function Ja(e){switch(e){case"success":return B.Success;case"error":return B.Error;case"cancelled":return B.Cancelled;case"awaiting_approval":return B.AwaitingApproval;default:return e}}a(Ja,"toolCallSeedToHistoryToolStatus");function Za(e){return{id:e.id,name:e.name,status:Ja(e.status),...e.input!==void 0?{input:e.input}:{},...e.preview!==void 0?{preview:e.preview}:{},...e.output!==void 0?{output:e.output}:{},...e.error!==void 0?{error:e.error}:{},startTime:e.startTime??Date.now(),...e.endTime!==void 0?{endTime:e.endTime}:{}}}a(Za,"toolCallSeedToHistoryToolCall");function Qa(e){let o=-1;for(let n of Us){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of js){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Qa,"findControlPlaneCutIndex");function el(e){return Us.some(o=>e.includes(o))||js.some(o=>o.test(e))}a(el,"hasControlPlaneSignal");function Fs(e){let o=[];for(let n of e)n&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&o.push(String(n.text));return o}a(Fs,"collectTextBlocks");function Bo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Bo,"isRecord");function ol(e){if(typeof e=="string")return re(e);if(e===void 0)return"";try{return Ws(e)??""}catch{return re(String(e))}}a(ol,"toolResultContentToString");function nl(e){let o=ol(e.content),n=o.trimStart(),t=e.is_error===!0||n.startsWith("[Tool Error]")||n.startsWith("[Error]"),r=n.startsWith("[Cancelled]")||n.startsWith("[Blocked]");return t?{status:"error",error:o}:r?{status:"cancelled",error:o}:{status:"success",output:o}}a(nl,"inferToolResultSeed");function tl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!Bo(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,nl(n));return o}a(tl,"collectToolResultSeeds");function rl(e,o){if(e.type!=="tool_use"||typeof e.id!="string"||typeof e.name!="string")return;let n=o.get(e.id)??{status:"cancelled",error:Ya};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:Ls(Bo(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(rl,"buildToolCallSeed");function sl(e){return typeof e=="string"?e:Array.isArray(e)?Fs(e).join(`
|
|
3
|
-
`):""}a(
|
|
4
|
-
`)),t.length=0)},"flushAssistantBuffer"),l=a(()=>{r.length!==0&&(n.push({type:"tool_group",tools:[...r]}),r.length=0)},"flushToolBuffer");for(let c of e)if(!(!
|
|
5
|
-
`):""}a(
|
|
6
|
-
No assistant message found to copy.`)),console.log(
|
|
7
|
-
Copied to clipboard!`)),console.log(
|
|
8
|
-
Failed to copy to clipboard: ${r}`)),console.log(
|
|
2
|
+
import{a as zr}from"./chunk-6AU6EPO6.js";import{B as Wo,F as ve,H as Fr,J as Hr,K as Br,L as Gr,j as Wr,l as Oe,m as In,n as Nr,o as Or,p as Dr,q as _n,t as Lo,v as Ur,x as Mn,y as Pn,z as jr}from"./chunk-XXEIFNBE.js";import{Aa as Pr,Ba as Lr}from"./chunk-NKHXRN7G.js";import{i as _o}from"./chunk-73Z7BK5H.js";import{d as vr,e as Mo,f as We,h as no,i as Po,j as Sr,k as $r,m as br,n as Tn,o as xr,p as to,q as Ar,t as ke,z as Ne}from"./chunk-PIQWODWN.js";import{ea as Rr,fa as Er,h as kr}from"./chunk-CQ6EQG7E.js";import{Mc as Tr,Oc as Cr,Pc as Ir,Sc as Cn,_ as Io,fd as _r,hd as Mr,w as yr,xc as te}from"./chunk-7QB55SYG.js";import{Ja as xn,Ka as Ie,La as _e,s as bn,z as tr}from"./chunk-HS2K74I4.js";import{Ab as lr,Ba as rr,Bc as ur,Ca as sr,Cc as fr,Da as Rn,Dc as mr,Lb as Eo,Md as wr,Nb as To,Ob as cr,Pd as En,Qb as dr,Qc as Me,Rc as Pe,Wc as pr,Yd as Co,k as An,le as hr,va as Ro,vb as ir,wa as H,wb as ar,wd as Le,xd as gr}from"./chunk-ZZDC75H4.js";import{a,b as $n,c as ta}from"./chunk-V4WSBIXB.js";var es=$n((zu,Qr)=>{"use strict";Qr.exports=a(function(o){return o.map(function(n){return n===""?"''":n&&typeof n=="object"?n.op.replace(/(.)/g,"\\$1"):/["\s\\]/.test(n)&&!/'/.test(n)?"'"+n.replace(/(['])/g,"\\$1")+"'":/["'\s]/.test(n)?'"'+n.replace(/(["\\$`!])/g,"\\$1")+'"':String(n).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")}).join(" ")},"quote")});var as=$n((Ku,is)=>{"use strict";var ss="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",os=new RegExp("^"+ss+"$"),ns="|&;()<> \\t",ia='"((\\\\"|[^"])*?)"',aa="'((\\\\'|[^'])*?)'",la=/^#$/,ts="'",rs='"',Ln="$",Se="",ca=4294967296;for(Wn=0;Wn<4;Wn++)Se+=(ca*Math.random()).toString(16);var Wn,da=new RegExp("^"+Se);function ua(e,o){for(var n=o.lastIndex,t=[],r;r=o.exec(e);)t.push(r),o.lastIndex===r.index&&(o.lastIndex+=1);return o.lastIndex=n,t}a(ua,"matchAll");function fa(e,o,n){var t=typeof e=="function"?e(n):e[n];return typeof t>"u"&&n!=""?t="":typeof t>"u"&&(t="$"),typeof t=="object"?o+Se+JSON.stringify(t)+Se:o+t}a(fa,"getVar");function ma(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+ns+`]|[^\\s'"`+ns+"])+",i=new RegExp(["("+ss+")","("+r+"|"+ia+"|"+aa+")+"].join("|"),"g"),l=ua(e,i);if(l.length===0)return[];o||(o={});var c=!1;return l.map(function(d){var u=d[0];if(!u||c)return;if(os.test(u))return{op:u};var f=!1,m=!1,h="",k=!1,y;function v(){y+=1;var I,P,X=u.charAt(y);if(X==="{"){if(y+=1,u.charAt(y)==="}")throw new Error("Bad substitution: "+u.slice(y-2,y+1));if(I=u.indexOf("}",y),I<0)throw new Error("Bad substitution: "+u.slice(y));P=u.slice(y,I),y=I}else if(/[*@#?$!_-]/.test(X))P=X,y+=1;else{var V=u.slice(y);I=V.match(/[^\w\d_]/),I?(P=V.slice(0,I.index),y+=I.index-1):(P=V,y=u.length)}return fa(o,"",P)}for(a(v,"parseEnvVar"),y=0;y<u.length;y++){var p=u.charAt(y);if(k=k||!f&&(p==="*"||p==="?"),m)h+=p,m=!1;else if(f)p===f?f=!1:f==ts?h+=p:p===t?(y+=1,p=u.charAt(y),p===rs||p===t||p===Ln?h+=p:h+=t+p):p===Ln?h+=v():h+=p;else if(p===rs||p===ts)f=p;else{if(os.test(p))return{op:u};if(la.test(p)){c=!0;var R={comment:e.slice(d.index+y+1)};return h.length?[h,R]:[R]}else p===t?m=!0:p===Ln?h+=v():h+=p}}return k?{op:"glob",pattern:h}:h}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(ma,"parseInternal");is.exports=a(function(o,n,t){var r=ma(o,n,t);return typeof n!="function"?r:r.reduce(function(i,l){if(typeof l=="object")return i.concat(l);var c=l.split(RegExp("("+Se+".*?"+Se+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return da.test(d)?JSON.parse(d.split(Se)[1]):d}))},[])},"parse")});var ls=$n(Nn=>{"use strict";Nn.quote=es();Nn.parse=as()});import*as gn from"fs";import*as bo from"path";import s from"chalk";var No=["plan","accept-edits","auto","auto-in-project"];function Du(e){return e==="auto"||e==="auto-in-project"}a(Du,"isAutoMode");function ra(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ra,"permissionModeDisplayName");var sa='[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 Uu(e=console.warn){let o=!1;return()=>{o||(o=!0,e(sa))}}a(Uu,"createAutoInProjectDeprecationEmitter");var qr=_r(),ro=new Set(qr.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),Kr=new Set(qr.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),Xr=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"]),Vr=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 Yr(e){switch(e){case"plan":return new Set(["bash","write","edit","undo"]);case"accept-edits":return new Set(["bash"]);case"auto":case"auto-in-project":return new Set}}a(Yr,"computeConfirmTools");function Jr(e){return e!==void 0&&No.includes(e)}a(Jr,"isPermissionMode");function so(e,o){return Jr(e)?e:o}a(so,"normalizePermissionMode");async function Zr(e){let o=e.resolve(e.provider),n=[];for(let t of e.efforts){if(e.signal?.aborted)break;let r=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:t},{modelOverride:e.model,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{r=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(i){n.push({effort:t,status:"error",error:i instanceof Error?i.message:String(i)});continue}r?(sr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(Zr,"probeProviderReasoningEfforts");import Ho from"fs";import bs from"path";import Oo from"fs";import W from"path";import ao from"os";var us=ta(ls(),1);var cs=new Set(["/dev/null","nul","NUL"]);function On(e){return cs.has(e)||cs.has(e.toLowerCase())}a(On,"isNullDevice");function io(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`"))return{statements:[],unparseable:!0};let n;try{n=(0,us.parse)(o)}catch{return{statements:[],unparseable:!0}}let t=[],r=[],i=[],l=[],c=null,d=!1,u=a(()=>{(i.length>0||l.length>0)&&(r.push({argv:i,redirections:l}),i=[],l=[])},"flushStage"),f=a(m=>{u(),r.length>0&&(t.push({precedingOp:c,stages:r}),r=[]),c=m},"flushStatement");for(let m=0;m<n.length;m+=1){let h=n[m];if(typeof h=="string"){i.push(h);continue}if("op"in h){let k=h.op;if(k==="&&"||k==="||"||k===";"){f(k);continue}if(k==="|"){u();continue}if(k==="&"){let y=n[m+1];if(y!==void 0&&typeof y!="string"&&"op"in y&&(y.op===">"||y.op===">>")){let v=n[m+2];if(typeof v!="string"){d=!0,m+=1;continue}l.push(ds(`&${y.op}`,v)),m+=2;continue}d=!0;continue}if(ga(k)){let y=null,v=i[i.length-1];v!==void 0&&/^[0-9]+$/.test(v)&&(y=v,i.pop());let p=n[m+1];if(typeof p!="string"){d=!0;continue}l.push(ds(y?`${y}${k}`:k,p)),m+=1;continue}if(k==="glob"){let y=h.pattern;typeof y=="string"?i.push(y):d=!0;continue}d=!0;continue}if("comment"in h)break;d=!0}return f(null),{statements:t,unparseable:d}}a(io,"parseBashCommand");var pa=new Set([">",">>","<","<<","<<<","&>","&>>"]),fs=/^([0-9]+|&)(>>?|<<?)$/;function ga(e){return pa.has(e)||fs.test(e)}a(ga,"isRedirectionOp");function ds(e,o){let n=null,t=e,r=fs.exec(e);return r&&(n=r[1],t=r[2]),{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o}}a(ds,"parseRedirection");var wa=W.join(".agent","plan_mode_doc.md"),Do=new Map,Uo=null;function ha(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Vr)if(o===n||o.startsWith(n+" ")){if(n==="sed"&&o.split(/\s+/).some(i=>i.startsWith("-i")||i==="--in-place"))return!1;if(n==="awk"){let r=o.split(/\s+/);if(r.includes("-f")||r.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc","ruby","perl"].includes(n)){let r=o.split(/\s+/).slice(1);if(r.length>0&&!r.every(i=>/^(-v|--version|-h|--help)$/.test(i)))return!1}return!0}return!1}a(ha,"isSingleBashReadCommand");var ya=/^[a-zA-Z0-9]+$/;function ka(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(!ya.test(t))return!1;return n}a(ka,"isHelpCommand");function Un(e){if(!e||!e.trim())return!1;if(ka(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=io(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||!On(c.target))return!1;let l=i.argv.join(" ");if(l&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!ha(l))return!1}}return!0}a(Un,"isBashReadCommand");function va(e){let o=e.trim();return o?Un(o)?null:"[Blocked] Direct !command execution only supports safe read-only commands. Use the bash tool for commands that write files, invoke shells, or require confirmation.":"[Shell: No command provided]"}a(va,"getDirectShellBypassBlockReason");var ps=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]);function jn(e){if(!e||!e.trim())return!1;let o=io(e);if(o.unparseable)return!1;for(let n of o.statements)for(let t of n.stages){let r=t.argv.map(i=>i.toLowerCase());if(r.length>0){let i=r[0],l=r.length>=2?`${r[0]} ${r[1]}`:null;for(let c of Xr)if(c===i||l!==null&&c===l)return!0}for(let i of r)if(ps.has(i))return!0;for(let i of t.redirections)if(!i.input&&!On(i.target))return!0}return!1}a(jn,"isBashWriteCommand");function Fn(e){let o=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\((.+)\)$/);return o?{tool:o[1].toLowerCase(),pattern:o[2]}:{tool:e.toLowerCase(),pattern:null}}a(Fn,"parseAllowedToolPattern");function Sa(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(Sa,"matchesBashPatternLegacy");function $a(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a($a,"matchesBashPatternByExtractedPrefix");async function Hn(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",l=[];for(let c of n){let d=Fn(c);if(d.tool==="bash"){if(d.pattern===null)return!0;l.push({pattern:d.pattern})}}if(l.length===0)return!1;if(t){let c;try{c=await t.extract(i,r)}catch{return!1}if(c.kind!=="prefix")return!1;for(let{pattern:d}of l)if(d&&$a(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&Sa(i,c))return!0;return!1}a(Hn,"isToolCallAllowed");function Bn(e,o,n){if(e.toLowerCase()!=="bash")return"";let t=o.command??"",r=t.split(" ");return r.length>1?`Bash(${r.slice(0,2).join(" ")}:*)`:`Bash(${t})`}a(Bn,"generateSavePattern");function lo(e,o){try{let n=W.resolve(e),t=W.resolve(o),r=Ro(),i=W.join(t,".kodax");return De(n,i)||De(n,r)?!0:!(De(n,t)||hs().some(c=>De(n,c)))}catch{return!1}}a(lo,"isAlwaysConfirmPath");function ms(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"&&ba.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e))}a(ms,"looksLikePath");var ba=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/;function xa(e){let o=[],n=/["']([^"']+)["']/g,t;for(;(t=n.exec(e))!==null;)o.push(t[1]);let r=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|[a-zA-Z]:\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(t=r.exec(e))!==null;)o.push(t[1]);return o}a(xa,"legacyRegexPathScan");function Fo(e){let o=new Set,n=io(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){for(let i of r.argv)ms(i)&&o.add(i);for(let i of r.redirections)ms(i.target)&&o.add(i.target)}for(let t of xa(e))o.add(t);return Array.from(o)}a(Fo,"extractPathsFromCommand");function Aa(e,o){let n=Fo(e);for(let t of n)if(lo(t,o))return!0;return!1}a(Aa,"isCommandOnProtectedPath");function jo(e){let o=W.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(jo,"normalizePathForComparison");function Ra(e,o){return jo(e)===jo(o)}a(Ra,"pathsEqual");function De(e,o){let n=jo(e),t=jo(o);return n===t||n.startsWith(t+W.sep)}a(De,"isPathInsideDirectory");function Gn(e,o){try{let n=W.resolve(o),t=W.resolve(n,ws(gs(e)));return De(t,n)}catch{return!1}}a(Gn,"isPathInsideProject");function Ea(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(Ea,"collectAbsolutePathCandidates");function zn(e){let o=W.resolve(e),n=Do.get(o);if(n)return n;if(Oo.existsSync(o)){let c=Oo.realpathSync.native(o);return Do.set(o,c),c}let t=[],r=o;for(;!Oo.existsSync(r);){let c=W.dirname(r);if(c===r)return Do.set(o,o),o;t.unshift(W.basename(r)),r=c}let i=Oo.realpathSync.native(r),l=W.join(i,...t);return Do.set(o,l),l}a(zn,"resolveExistingPathPrefix");function gs(e){return e==="~"?ao.homedir():e.startsWith(`~${W.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?W.join(ao.homedir(),e.slice(2)):e}a(gs,"expandHomeDirectory");function ws(e){let o=ao.tmpdir(),n=[[/^%temp%/i,o],[/^%tmp%/i,o],[/^\$env:temp\b/i,o],[/^\$env:tmp\b/i,o],[/^\$tmpdir\b/i,o],[/^\$temp\b/i,o],[/^\$tmp\b/i,o]];for(let[t,r]of n)if(t.test(e))return e.replace(t,r);return e}a(ws,"expandSystemTempAlias");function Ta(e,o){let n=W.resolve(o??process.cwd()),t=ws(gs(e)),r=W.isAbsolute(t)?W.resolve(t):W.resolve(n,t);return zn(r)}a(Ta,"resolvePermissionPath");function hs(){if(Uo)return Uo;let e=new Set,o=[ao.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(zn(n))}catch{}return Uo=Array.from(e),Uo}a(hs,"getSystemTempDirectories");function qn(e){let o=zn(e??process.cwd());return{projectPlanDoc:W.join(o,wa),systemTempDirs:hs()}}a(qn,"getPlanModeAllowedWritablePaths");function Dn(e,o){let n=Ta(e,o),{projectPlanDoc:t,systemTempDirs:r}=qn(o);return Ra(n,t)?!0:r.some(i=>De(n,i))}a(Dn,"isPlanModeAllowedPath");function Ca(e){let{projectPlanDoc:o,systemTempDirs:n}=qn(e),t=n[0]??ao.tmpdir();return`${o} or the system temp directory (${t})`}a(Ca,"formatPlanModeAllowedLocations");var Ia=new Set(["-a","--append","-i","--ignore-interrupts"]);function _a(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];Ia.has(t)||t.startsWith("-")||o.push(t)}return o}a(_a,"collectTeeTargets");function Ma(e){let o=[],n=1,t=!1;for(;n<e.argv.length;){let r=e.argv[n],i=r.toLowerCase();if(i==="-path"||i==="-literalpath"||i==="-destination"){let l=e.argv[n+1];if(l!==void 0&&!l.startsWith("-")){o.push(l),n+=2;continue}}!r.startsWith("-")&&!t&&(o.push(r),t=!0),n+=1}return o}a(Ma,"collectPowerShellWriteTargets");function Ue(e){let o=new Set,n=a(r=>{let i=r?.trim();i&&o.add(i)},"pushTarget");for(let r of Fo(e))n(r);let t=io(e);if(t.unparseable)return Array.from(o);for(let r of t.statements)for(let i of r.stages){for(let c of i.redirections)c.input||n(c.target);let l=i.argv[0]?.toLowerCase();if(l){if(l==="tee")for(let c of _a(i))n(c);else if(ps.has(l))for(let c of Ma(i))n(c)}}return Array.from(o)}a(Ue,"collectBashWriteTargets");function ys(e,o){if(!jn(e))return{dangerous:!1};let n=new Set([...Ue(e),...Ea(e)]);for(let t of n)if(!Gn(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(ys,"getBashOutsideProjectWriteRisk");function ks(e,o,n){let t=Ca(n);if(Mr(e))return null;if(ro.has(e)){let r=typeof o.path=="string"?o.path:"";return r?Dn(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(!jn(r))return null;let i=Ue(r);if(i.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${t}. Could not determine a safe target from: ${r.slice(0,80)}${r.length>80?"...":""}`;let l=i.find(c=>!Dn(c,n));return l?`[Blocked] Plan mode only allows bash write operations in ${t}. Blocked target: ${l}`:null}return`[Blocked] Tool '${e}' has side effects and is not permitted in plan mode. Switch to accept-edits or auto mode to use it, or work within ${t}.`}a(ks,"getPlanModeBlockReason");import fe from"node:path";import Pa from"node:os";function je(e,o){try{let n=fe.resolve(e),t=fe.resolve(o);return n===t?!0:n.startsWith(t+fe.sep)}catch{return!1}}a(je,"isPathUnder");function La(){try{return Ro()}catch{return}}a(La,"safeGetAgentConfigHome");function vs(e,o){let n=La();if(n&&je(e,n))return"user-kodax";let t=fe.join(fe.resolve(o),".kodax");if(je(e,t))return"project-kodax"}a(vs,"resolveProtectedZone");function Wa(){let e=new Set;try{e.add(Pa.tmpdir())}catch{}for(let o of["TEMP","TMP","TMPDIR"]){let n=process.env[o];n&&n.length>0&&e.add(n)}return Array.from(e)}a(Wa,"getSystemTempDirs");var Na=new Set(["bash"]),Oa={toolNames:Na,collect(e,o){let n=typeof e.input.command=="string"?e.input.command:"";if(!n||!o)return[];let t=[],r=new Set,i=new Set,l=Wa(),c=fe.resolve(o);for(let d of Fo(n)){let u;try{u=fe.resolve(o,d)}catch{continue}let f=vs(u,o);if(f){r.has(u)||(r.add(u),t.push({kind:"protected_path",path:d,zone:f}));continue}if(lo(d,o)){let m=l.some(k=>je(u,k)),h=je(u,c);!m&&!h&&!i.has(u)&&(i.add(u),t.push({kind:"outside_project",path:d}))}}for(let d of Ue(n)){let u;try{u=fe.resolve(o,d)}catch{continue}vs(u,o)||je(u,c)||l.some(h=>je(u,h))||t.push({kind:"shell_redirect_outside",target:d})}return t}};var Bo=H("config.json");function xs(){return bs.join(process.cwd(),".kodax","config.local.json")}a(xs,"getProjectConfigFile");function Pf(e=process.env){let n=co(Bo).autoMode??{},t=e.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,i=n.engine==="llm"||n.engine==="rules"?n.engine:void 0,l=r??i??"llm",c=$s(n.classifierModel),d=$s(e.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=e.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,m=Number.isFinite(f)&&f>0?Math.floor(f):void 0,h=typeof n.timeoutMs=="number"&&n.timeoutMs>0?Math.floor(n.timeoutMs):void 0,k=Ss(e.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),y=typeof n.speculativeWindowMs=="number"?Ss(String(n.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??h,speculativeWindowMs:k??y}}a(Pf,"loadAutoModeSettings");function Ss(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(Ss,"parseSpeculativeWindow");function $s(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a($s,"nonEmptyString");function co(e){try{if(Ho.existsSync(e))return JSON.parse(Ho.readFileSync(e,"utf-8"))}catch{}return{}}a(co,"readJsonFile");function As(e,o){Ho.mkdirSync(bs.dirname(e),{recursive:!0}),Ho.writeFileSync(e,JSON.stringify(o,null,2))}a(As,"writeJsonFile");function Kn(e){let o=co(Bo);As(Bo,{...o,permissionMode:e})}a(Kn,"savePermissionModeUser");function Lf(){let e=co(Bo),o=co(xs()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Lf,"loadAlwaysAllowTools");function Wf(e,o,n=!1){let t=Bn(e,o,n);if(!t)return;let r=xs(),i=co(r),l=i.alwaysAllowTools??[];l.includes(t)||As(r,{...i,alwaysAllowTools:[...l,t]})}a(Wf,"saveAlwaysAllowToolPattern");var Xn=["ama","amaw","sa"];function Rs(e){let o=Xn.indexOf(e);return Xn[(o+1)%Xn.length]??"ama"}a(Rs,"nextAgentMode");var Fe=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let i of r.aliases)this.aliases.delete(i.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Da=new Fe;import z from"chalk";import{Buffer as Is}from"node:buffer";import{spawn as Ua}from"node:child_process";import Es from"node:process";var $e="\x1B",ja="\x07",Vn=`${$e}\\`;function Ts(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(Ts,"shouldPreferNativeClipboard");function Fa(e,o){let n=Is.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?Vn:ja,r=`${$e}]52;c;${n}${t}`;return o.TMUX?`${$e}Ptmux;${r.replaceAll($e,`${$e}${$e}`)}${Vn}`:o.STY?`${$e}P${r}${Vn}`:r}a(Fa,"buildOscSequence");async function Go(e,o,n){return new Promise((t,r)=>{let i=Ua(e,o,{stdio:["pipe","ignore","pipe"],windowsHide:!0}),l="";i.on("error",r),i.stderr?.on("data",c=>{l+=c.toString()}),i.on("close",c=>{if(c===0){t(!0);return}r(new Error(l.trim()||`${e} exited with code ${c??"unknown"}`))}),i.stdin?.write(n),i.stdin?.end()})}a(Go,"execClipboardCommand");function Ha(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=Is.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Ha,"buildWindowsClipboardCandidates");async function Cs(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Ha(e);for(let[r,i,l]of t)try{if(await Go(r,i,l))return!0}catch{}return!1}case"darwin":return Go("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await Go(r,i,e))return!0}catch{}return!1}default:return!1}}a(Cs,"tryNativeClipboard");async function Ba(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await Go("tmux",n,e)}catch{return!1}}a(Ba,"tryTmuxClipboard");async function _s(e,o={}){let n=o.env??Es.env,t=o.platform??Es.platform,r=e.trimEnd(),i=Fa(r,n);if(!r)throw new Error("Nothing to copy.");if(Ts(n,t))try{if(await Cs(r,n,t))return{path:"native"}}catch{}if(await Ba(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!Ts(n,t))try{if(await Cs(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(_s,"copyTextToClipboard");var Yn;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(Yn||(Yn={}));var G;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(G||(G={}));var Kf={[G.Scheduled]:"\u25CB",[G.Validating]:"\u25CC",[G.AwaitingApproval]:"?",[G.Executing]:"\u25CB",[G.Success]:"\u2713",[G.Error]:"\u2717",[G.Cancelled]:"-"},Ms;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(Ms||(Ms={}));var Xf={streamingState:Yn.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Ga="[redacted]",Ps="[truncated]";function re(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(re,"truncateToolReplayText");function za(e){let o=e.toLowerCase().replace(/[\s_-]/g,"");return o.includes("token")||o.includes("password")||o.includes("secret")||o.includes("apikey")||o.includes("accesstoken")||o==="authorization"||o==="cookie"||o==="setcookie"}a(za,"isSensitiveToolInputKey");function Ls(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(Ls,"isRecord");function Jn(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return re(e);if(o>=6)return Ps;if(typeof e=="object"&&e!==null){if(n.has(e))return Ps;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>Jn(r,o+1,n));if(!Ls(e))return re(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=za(r)?Ga:Jn(i,o+1,n);return t}return re(String(e))}a(Jn,"sanitizeToolJsonValue");function Ws(e){if(!e)return;let o=Jn(e);return Ls(o)?o:void 0}a(Ws,"sanitizeToolInput");function Ns(e){if(e!==void 0){if(typeof e=="string")return re(e);try{return re(JSON.stringify(e))}catch{return re(String(e))}}}a(Ns,"stringifyToolReplayValue");function em(e){return e.type==="tool_summary"?{type:"event",text:e.text,icon:"tool"}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Qa)}:e}a(em,"seedToHistoryItem");var qa="[Thinking]",Ka="[/Thinking]",Xa="Untitled Session",Os=50,Va=60,Us="...",js=["[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:"],Fs=[/(?:^|\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:/],Ya=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,Ja="Session ended before the tool completed.";function Za(e){switch(e){case"success":return G.Success;case"error":return G.Error;case"cancelled":return G.Cancelled;case"awaiting_approval":return G.AwaitingApproval;default:return e}}a(Za,"toolCallSeedToHistoryToolStatus");function Qa(e){return{id:e.id,name:e.name,status:Za(e.status),...e.input!==void 0?{input:e.input}:{},...e.preview!==void 0?{preview:e.preview}:{},...e.output!==void 0?{output:e.output}:{},...e.error!==void 0?{error:e.error}:{},startTime:e.startTime??Date.now(),...e.endTime!==void 0?{endTime:e.endTime}:{}}}a(Qa,"toolCallSeedToHistoryToolCall");function el(e){let o=-1;for(let n of js){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of Fs){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(el,"findControlPlaneCutIndex");function ol(e){return js.some(o=>e.includes(o))||Fs.some(o=>o.test(e))}a(ol,"hasControlPlaneSignal");function Hs(e){let o=[];for(let n of e)n&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&o.push(String(n.text));return o}a(Hs,"collectTextBlocks");function zo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(zo,"isRecord");function nl(e){if(typeof e=="string")return re(e);if(e===void 0)return"";try{return Ns(e)??""}catch{return re(String(e))}}a(nl,"toolResultContentToString");function tl(e){let o=nl(e.content),n=o.trimStart(),t=e.is_error===!0||n.startsWith("[Tool Error]")||n.startsWith("[Error]"),r=n.startsWith("[Cancelled]")||n.startsWith("[Blocked]");return t?{status:"error",error:o}:r?{status:"cancelled",error:o}:{status:"success",output:o}}a(tl,"inferToolResultSeed");function rl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!zo(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,tl(n));return o}a(rl,"collectToolResultSeeds");function sl(e,o){if(e.type!=="tool_use"||typeof e.id!="string"||typeof e.name!="string")return;let n=o.get(e.id)??{status:"cancelled",error:Ja};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:Ws(zo(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(sl,"buildToolCallSeed");function il(e){return typeof e=="string"?e:Array.isArray(e)?Hs(e).join(`
|
|
3
|
+
`):""}a(il,"extractAssistantTextOnly");function fo(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(fo,"pushSeed");function Ds(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(Ds,"stripLegacyTagBoundaryNewlines");function al(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?uo(String(n.command??"")):o==="read"||o==="write"||o==="edit"?uo(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?uo(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?uo(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(al,"formatToolUseSummary");function uo(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(uo,"truncateToolHint");function ll(e){if(!e.includes(qa)||!e.includes(Ka))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(Ya)){let r=t.index??-1,i=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+i.length;fo(o,"assistant",Ds(e.slice(n,c))),fo(o,"thinking",l),n=r+t[0].length}return fo(o,"assistant",Ds(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(ll,"parseLegacyAssistantContent");function Bs(e,o){if(typeof e=="string")return ll(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],i=a(()=>{t.length!==0&&(fo(n,"assistant",t.join(`
|
|
4
|
+
`)),t.length=0)},"flushAssistantBuffer"),l=a(()=>{r.length!==0&&(n.push({type:"tool_group",tools:[...r]}),r.length=0)},"flushToolBuffer");for(let c of e)if(!(!zo(c)||typeof c.type!="string"))switch(c.type){case"text":l(),"text"in c&&t.push(String(c.text));break;case"thinking":i(),l(),"thinking"in c&&fo(n,"thinking",String(c.thinking));break;case"tool_use":if(i(),o){let d=sl(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=al({name:c.name,...zo(c.input)?{input:c.input}:{}});d&&n.push({type:"tool_summary",text:d})}break;case"tool_result":case"redacted_thinking":break;default:break}return l(),i(),n}a(Bs,"extractAssistantHistorySeeds");var cl=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],dl=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function ul(e){return cl.some(o=>e.includes(o))}a(ul,"isManagedWorkerPrompt");function Gs(e){return e.replace(dl,"").trim()}a(Gs,"stripManagedProtocolBlocks");function fl(e){switch(e.role){case"assistant":return Bs(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=Gs(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._synthetic)return[];let o=zs(e.content);return o.trim().length===0||ul(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(fl,"extractHistorySeedsFromMessage");function om(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=rl(e[n+1]),i=Bs(t.content,r);o.push(...i.map(l=>l.type==="assistant"?{...l,text:Gs(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...fl(t))}}return o}a(om,"extractHistorySeedsFromMessages");function zs(e){return typeof e=="string"?e:Array.isArray(e)?Hs(e).join(`
|
|
5
|
+
`):""}a(zs,"extractTextContent");function ml(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>Os?`${o.slice(0,Os)}${Us}`:o:Xa}a(ml,"formatSessionTitle");function pl(e){if(e.role!=="user")return!1;let o=e.content;return!Array.isArray(o)||o.length===0?!1:o.every(n=>!!n&&typeof n=="object"&&"type"in n&&n.type==="tool_result")}a(pl,"isPureToolResultUserMessage");function Zn(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=il(n.content);return t&&t.trim()!=="..."?t:""}if(!pl(n))return""}}return""}a(Zn,"extractLastAssistantText");function nm(e,o,n,t){let r=[Zn(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=qs(i);if(l)return l}return""}a(nm,"resolveCompletedAssistantText");function qs(e){let o=e.trim();if(!o||o==="...")return"";let n=el(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(qs,"sanitizeUserFacingAssistantText");function tm(e){let o=e.trim();return o.length>0&&qs(o).length===0&&ol(o)}a(tm,"isControlPlaneOnlyAssistantText");function rm(e){let o=e.find(t=>t.role==="user"),n=o?zs(o.content):"";return ml(n)}a(rm,"extractTitle");function sm(e,o=Va){let n=e.replace(/\n/g," "),t=n.length>o?Us:"";return n.slice(0,o)+t}a(sm,"formatMessagePreview");var Qn={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=Zn(o.messages);if(!n){console.log(z.yellow(`
|
|
6
|
+
No assistant message found to copy.`)),console.log(z.dim("The assistant needs to respond first before you can copy its message."));return}try{await _s(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(z.green(`
|
|
7
|
+
Copied to clipboard!`)),console.log(z.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(z.red(`
|
|
8
|
+
Failed to copy to clipboard: ${r}`)),console.log(z.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:a(()=>{console.log(z.bold(`
|
|
9
9
|
/copy - Copy Last Assistant Message
|
|
10
|
-
`)),console.log("Usage:"),console.log(
|
|
10
|
+
`)),console.log("Usage:"),console.log(z.cyan(" /copy")+` - Copy the last assistant message to clipboard
|
|
11
11
|
`),console.log("Description:"),console.log(" This command copies the most recent assistant response to your system clipboard."),console.log(` Useful for quickly sharing or saving AI responses.
|
|
12
|
-
`),console.log("Examples:"),console.log(
|
|
13
|
-
`)),console.log("Notes:"),console.log(" - Only copies assistant messages, not user messages"),console.log(" - Works with both plain text and formatted responses"),console.log(" - Requires clipboard permissions on some systems")},"detailedHelp")};import A from"chalk";function
|
|
14
|
-
`)}a(
|
|
15
|
-
Consumer impact:`)),
|
|
16
|
-
[learn] pending learning suggestions`)),
|
|
17
|
-
`));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";
|
|
12
|
+
`),console.log("Examples:"),console.log(z.dim(" User: Explain how async/await works")),console.log(z.dim(" AI: [responds with explanation]")),console.log(z.cyan(" /copy")+z.dim(` - Copies the explanation to clipboard
|
|
13
|
+
`)),console.log("Notes:"),console.log(" - Only copies assistant messages, not user messages"),console.log(" - Works with both plain text and formatted responses"),console.log(" - Requires clipboard permissions on some systems")},"detailedHelp")};import A from"chalk";function gl(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(gl,"resolveCwd");function wl(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.userLabel} ${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.userLabel} ${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.userLabel} ${o.memoryKind}`;case"reasoning_handoff":return`${o.userLabel} ${o.title}`}}a(wl,"proposalLabel");function x(e=""){process.stdout.write(`${e}
|
|
14
|
+
`)}a(x,"writeOutput");function hl(e){for(let o of e)x(A.yellow(`[learn] ${o}`))}a(hl,"printWarnings");function Ks(e){x(A.yellow(`
|
|
15
|
+
Consumer impact:`)),x(A.dim(` action: ${e.action}`));let o=[["workflow capsules",e.workflowCapsules],["saved workflows",e.savedWorkflows],["constructed agents",e.constructedAgents],["prompt references",e.promptReferences]];for(let[n,t]of o)if(t.length!==0){x(A.dim(` ${n}:`));for(let r of t)x(A.dim(` - ${r}`))}}a(Ks,"printConsumerImpact");async function yl(e){let o=To(e),n=await Eo(o);return hl(n.warnings),{storePath:o,store:n}}a(yl,"readStore");function kl(e,o){return e.find(n=>n.proposalId===o)}a(kl,"findProposal");function vl(e,o){let n=e.filter(t=>t.status==="pending");if(x(A.cyan(`
|
|
16
|
+
[learn] pending learning suggestions`)),x(A.dim(` ${o}`)),n.length===0){x(A.dim(` (none)
|
|
17
|
+
`));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";x(` ${A.cyan(t.proposalId)} ${A.dim(`[${r}]`)} ${wl(t)}`)}x(A.dim(`
|
|
18
18
|
Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
|
|
19
|
-
`))}a(
|
|
20
|
-
[learn] ${e.proposalId}`)),
|
|
21
|
-
Proposal:`),
|
|
19
|
+
`))}a(vl,"printPending");function Sl(e){if(x(A.cyan(`
|
|
20
|
+
[learn] ${e.proposalId}`)),x(A.dim(` status: ${e.status}`)),x(A.dim(` kind : ${e.proposal.destination}`)),x(`
|
|
21
|
+
Proposal:`),x(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Ks(e.proposal.consumerImpact),!e.applyPlan){x(A.dim(`
|
|
22
22
|
No F224 apply plan is attached. Approval records the handoff only.
|
|
23
|
-
`));return}
|
|
24
|
-
Apply plan:`),
|
|
25
|
-
[learn] approved ${o.proposalId}; files already match the apply plan.`)),
|
|
26
|
-
`));return;case"blocked_snapshot_conflict":
|
|
27
|
-
[learn] refusing to reapply ${o.proposalId}; ${t.relativePath} changed after the last snapshot.`)),
|
|
28
|
-
`));return;case"approved_applied":
|
|
29
|
-
[learn] approved and applied ${o.proposalId}.`)),
|
|
30
|
-
`));return;case"blocked_missing_apply_plan":
|
|
23
|
+
`));return}x(`
|
|
24
|
+
Apply plan:`),x(A.dim(` kind : ${e.applyPlan.kind}`)),x(A.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)x(A.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&x(o.content);x()}a(Sl,"printDiff");async function $l(e,o,n={}){let t=await dr(e,o,n);switch(t.status){case"approved_already_applied":x(A.green(`
|
|
25
|
+
[learn] approved ${o.proposalId}; files already match the apply plan.`)),x(A.dim(` recovered a pending proposal without applying it again.
|
|
26
|
+
`));return;case"blocked_snapshot_conflict":x(A.red(`
|
|
27
|
+
[learn] refusing to reapply ${o.proposalId}; ${t.relativePath} changed after the last snapshot.`)),x(A.dim(` snapshot: ${t.snapshotPath}`)),x(A.dim(` Review the file manually, then reject or recreate the learning proposal.
|
|
28
|
+
`));return;case"approved_applied":x(A.green(`
|
|
29
|
+
[learn] approved and applied ${o.proposalId}.`)),x(A.dim(` changed: ${t.changedPaths.join(", ")||"(none)"}
|
|
30
|
+
`));return;case"blocked_missing_apply_plan":x(A.red(`
|
|
31
31
|
[learn] ${o.proposalId} has no skill apply plan; nothing was applied.
|
|
32
|
-
`));return;case"blocked_consumer_impact":
|
|
33
|
-
[learn] ${o.proposalId} requires manual consumer-impact review before approval.`)),
|
|
34
|
-
`)),
|
|
35
|
-
[learn] approved ${o.proposalId} as a downstream handoff.`)),
|
|
36
|
-
`));return;case"blocked_not_pending":
|
|
32
|
+
`));return;case"blocked_consumer_impact":x(A.yellow(`
|
|
33
|
+
[learn] ${o.proposalId} requires manual consumer-impact review before approval.`)),x(A.dim(` Run /learn diff ${o.proposalId}, then /learn approve ${o.proposalId} --ack-impact after review.
|
|
34
|
+
`)),Ks(t.impact),x();return;case"approved_handoff":x(A.green(`
|
|
35
|
+
[learn] approved ${o.proposalId} as a downstream handoff.`)),x(A.dim(` F224 does not mutate workflow, memory, or reasoning carriers directly.
|
|
36
|
+
`));return;case"blocked_not_pending":x(A.dim(`
|
|
37
37
|
[learn] ${o.proposalId} is already ${t.reviewStatus}.
|
|
38
|
-
`));return}}a(
|
|
39
|
-
/learn - Review procedural learning suggestions`)),
|
|
40
|
-
`))}a(
|
|
38
|
+
`));return}}a($l,"approveProposal");function qo(){x(A.cyan(`
|
|
39
|
+
/learn - Review procedural learning suggestions`)),x(A.dim(" /learn pending List pending suggestions")),x(A.dim(" /learn diff <proposalId> Preview proposal and apply plan")),x(A.dim(" /learn approve <proposalId> [--ack-impact]")),x(A.dim(" /learn reject <proposalId> [reason]")),x(A.dim(` /learn help
|
|
40
|
+
`))}a(qo,"printHelp");var et={name:"learn",description:"Review procedural learning suggestions (FEATURE_224)",usage:"/learn [pending|diff|approve|reject|help] [proposalId]",argumentHint:"pending | diff <id> | approve <id> | reject <id> [reason] | help",handler:a(async(e,o)=>{let n=gl(o),t=(e[0]??"pending").toLowerCase();if(t==="help"||t==="-h"||t==="--help"){qo();return}let{storePath:r,store:i}=await yl(n);if(t==="pending"||t==="list"){vl(i.proposals,r);return}let l=e[1];if(!l){x(A.yellow(`
|
|
41
41
|
[learn] missing proposal id for ${t}.
|
|
42
|
-
`)),
|
|
42
|
+
`)),qo();return}let c=kl(i.proposals,l);if(!c){x(A.yellow(`
|
|
43
43
|
[learn] proposal not found: ${l}
|
|
44
|
-
`));return}if(t==="diff"){
|
|
44
|
+
`));return}if(t==="diff"){Sl(c);return}if(t==="approve"){if(i.warnings.length>0){x(A.red(`
|
|
45
45
|
[learn] refusing to mutate a corrupt learning store.
|
|
46
|
-
`));return}if(c.status!=="pending"){
|
|
46
|
+
`));return}if(c.status!=="pending"){x(A.dim(`
|
|
47
47
|
[learn] ${c.proposalId} is already ${c.status}.
|
|
48
|
-
`));return}let d=new Set(e.slice(2));await
|
|
48
|
+
`));return}let d=new Set(e.slice(2));await $l(r,c,{acknowledgeImpact:d.has("--ack-impact")});return}if(t==="reject"){if(i.warnings.length>0){x(A.red(`
|
|
49
49
|
[learn] refusing to mutate a corrupt learning store.
|
|
50
|
-
`));return}if(c.status!=="pending"){
|
|
50
|
+
`));return}if(c.status!=="pending"){x(A.dim(`
|
|
51
51
|
[learn] ${c.proposalId} is already ${c.status}.
|
|
52
|
-
`));return}let d=e.slice(2).join(" ").trim();await
|
|
52
|
+
`));return}let d=e.slice(2).join(" ").trim();await cr(r,l,"rejected",d.length>0?{rejectedReason:d}:{}),x(A.dim(`
|
|
53
53
|
[learn] rejected ${l}.
|
|
54
|
-
`));return}
|
|
54
|
+
`));return}x(A.yellow(`
|
|
55
55
|
[learn] unknown subcommand: ${t}
|
|
56
|
-
`)),
|
|
57
|
-
`)}a(He,"writeOutput");function
|
|
58
|
-
[learn] ${
|
|
59
|
-
`));return}for(let i of r)He(` ${be.cyan(i.proposalId)} ${be.dim(`[${i.proposal.destination}]`)} ${
|
|
56
|
+
`)),qo()},"handler"),detailedHelp:qo};import*as Z from"node:fs";import*as Xo from"node:path";import $ from"chalk";import be from"chalk";function Ko(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Ko,"resolveLearningCommandCwd");function He(e=""){process.stdout.write(`${e}
|
|
57
|
+
`)}a(He,"writeOutput");function bl(e,o){return o==="skill"?e.proposal.destination==="skill_patch"||e.proposal.destination==="skill_create":o==="workflow"?e.proposal.destination==="workflow_handoff":e.proposal.destination==="memdir_handoff"}a(bl,"matchesFilter");function xl(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending context notes"}a(xl,"headingForFilter");function Al(e){let o=e.proposal;switch(o.destination){case"skill_patch":case"skill_create":return`${o.destination} ${o.skillName}`;case"workflow_handoff":return`${o.suggestedAction} ${o.evidenceRunIds.join(",")}`;case"memdir_handoff":return`${o.memoryKind}`;case"reasoning_handoff":return o.title}}a(Al,"proposalLabel");async function Be(e,o){let n=To(e),t=await Eo(n);for(let i of t.warnings)He(be.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>bl(i,o));if(He(be.cyan(`
|
|
58
|
+
[learn] ${xl(o)}`)),He(be.dim(` ${n}`)),r.length===0){He(be.dim(` (none)
|
|
59
|
+
`));return}for(let i of r)He(` ${be.cyan(i.proposalId)} ${be.dim(`[${i.proposal.destination}]`)} ${Al(i)}`);He(be.dim(`
|
|
60
60
|
Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
|
|
61
|
-
`))}a(Be,"printLearningPendingForFilter");function
|
|
62
|
-
[memory] per-project memory directory`)),console.log($.dim(` ${e}`));let n=
|
|
61
|
+
`))}a(Be,"printLearningPendingForFilter");function Rl(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(Rl,"resolveCwd");function Vs(e){let o;try{o=Z.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.error(`[memory] failed to read memory directory ${e}:`,t),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=Xo.join(e,t.name),i="",l=0;try{i=Z.readFileSync(r,"utf-8"),l=Z.statSync(r).mtimeMs}catch(m){console.error(`[memory] failed to read ${r}:`,m);continue}let d=lr(i).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=Xo.basename(t.name,".md");n.push({filename:t.name,absPath:r,mtimeMs:l,title:d.name?.trim()||f,description:d.description?.trim()||f,type:d.type,parseOk:u})}return n}a(Vs,"readTopicFiles");function El(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(El,"buildIndexLines");async function Tl(e,o){console.log($.cyan(`
|
|
62
|
+
[memory] per-project memory directory`)),console.log($.dim(` ${e}`));let n=Vs(e),t=n.filter(l=>!l.parseOk);console.log($.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,i="";try{i=Z.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log($.yellow(`
|
|
63
63
|
MEMORY.md does not exist yet.`)),n.length>0?console.log($.dim(" Run `/memory rebuild` to seed it from existing topic files.")):console.log($.dim(" The LLM will create it on first save \u2014 no action needed.")),console.log();return}console.log($.cyan(`
|
|
64
64
|
--- MEMORY.md ---`)),i.trim().length===0?console.log($.dim(" (empty)")):console.log(i.trimEnd()),console.log($.cyan(`--- end ---
|
|
65
|
-
`))}a(
|
|
65
|
+
`))}a(Tl,"listMemory");async function Cl(e,o){let n=!1;try{n=Z.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log($.yellow(`
|
|
66
66
|
[memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log($.dim(` ${e}`)),console.log($.dim(` The LLM will create both the directory and MEMORY.md on first save.
|
|
67
|
-
`));return}let t=
|
|
67
|
+
`));return}let t=Vs(e);if(t.length===0){console.log($.yellow(`
|
|
68
68
|
[memory] no topic files found \u2014 nothing to rebuild.`)),console.log($.dim(` ${e}
|
|
69
|
-
`));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=
|
|
69
|
+
`));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=El(r).join(`
|
|
70
70
|
`)+`
|
|
71
71
|
`;Z.writeFileSync(o,l,"utf-8"),console.log($.green(`
|
|
72
|
-
[memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log($.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log($.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log($.dim(` - ${d.filename}`));console.log($.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(
|
|
72
|
+
[memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log($.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log($.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log($.dim(` - ${d.filename}`));console.log($.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(Cl,"rebuildMemory");function Il(e,o){console.log($.cyan(`
|
|
73
73
|
[memory] open these paths in your editor:`)),console.log($.dim(" index :"),o),console.log($.dim(" dir :"),e),console.log($.dim(`
|
|
74
74
|
(No in-REPL editor is provided \u2014 open the file in your usual editor.
|
|
75
75
|
Use \`/memory rebuild\` after manual edits if you renamed any topic file.)
|
|
76
|
-
`))}a(
|
|
77
|
-
/memory - Inspect or rebuild per-project memory`)),console.log($.dim(" /memory List MEMORY.md + memory directory")),console.log($.dim(" /memory list Same as `/memory`")),console.log($.dim(" /memory pending List pending context-note learning suggestions")),console.log($.dim(" /memory rebuild Regenerate MEMORY.md from topic frontmatter")),console.log($.dim(" /memory open Print paths so you can open them in your editor")),console.log($.dim(" /memory help Show this help")),console.log()}a(
|
|
76
|
+
`))}a(Il,"openMemory");function Xs(){console.log($.cyan(`
|
|
77
|
+
/memory - Inspect or rebuild per-project memory`)),console.log($.dim(" /memory List MEMORY.md + memory directory")),console.log($.dim(" /memory list Same as `/memory`")),console.log($.dim(" /memory pending List pending context-note learning suggestions")),console.log($.dim(" /memory rebuild Regenerate MEMORY.md from topic frontmatter")),console.log($.dim(" /memory open Print paths so you can open them in your editor")),console.log($.dim(" /memory help Show this help")),console.log()}a(Xs,"printHelp");function _l(){console.log($.bold(`
|
|
78
78
|
/memory - Inspect or rebuild project memory
|
|
79
79
|
`)),console.log("Usage:"),console.log($.cyan(" /memory ")+$.dim("Show MEMORY.md + topic file count")),console.log($.cyan(" /memory list ")+$.dim("Alias for `/memory`")),console.log($.cyan(" /memory pending ")+$.dim("List pending context-note learning suggestions")),console.log($.cyan(" /memory rebuild ")+$.dim("Regenerate MEMORY.md (newest first by mtime)")),console.log($.cyan(" /memory open ")+$.dim("Print the index + dir paths for editor use")),console.log($.cyan(" /memory help ")+$.dim(`Show this help
|
|
80
80
|
`)),console.log("Description:"),console.log($.dim(` Each project gets its own memory directory under your KodaX agent
|
|
@@ -82,32 +82,32 @@ Apply plan:`),b(A.dim(` kind : ${e.applyPlan.kind}`)),b(A.dim(` skillRoot:
|
|
|
82
82
|
owns reads/writes; this command is your escape hatch when the
|
|
83
83
|
MEMORY.md index drifts from the topic files on disk.
|
|
84
84
|
`)),console.log("Notes:"),console.log($.dim(" \u2022 Rebuild ONLY rewrites MEMORY.md. Topic files are never touched.")),console.log($.dim(" \u2022 Rebuild sorts entries by file mtime descending \u2014 the same")),console.log($.dim(" natural-LRU order the LLM produces by prepending new entries.")),console.log($.dim(" \u2022 Files missing or with malformed frontmatter still appear in")),console.log($.dim(" the rebuilt index using their filename as fallback; the command")),console.log($.dim(` prints a warning so you can fix the frontmatter.
|
|
85
|
-
`))}a(
|
|
86
|
-
[memory] unknown subcommand: ${i}`)),
|
|
87
|
-
${
|
|
85
|
+
`))}a(_l,"printDetailedHelp");var ot={name:"memory",description:"Inspect or rebuild per-project memory (FEATURE_124)",usage:"/memory [list|pending|rebuild|open|help]",argumentHint:"list | pending | rebuild | open | help",handler:a(async(e,o)=>{let n=Rl(o),t=ir(n),r=ar(n),i=(e[0]??"list").toLowerCase();if(i==="help"||i==="--help"||i==="-h"){Xs();return}if(i==="list"){await Tl(t,r);return}if(i==="pending"){await Be(n,"memory");return}if(i==="rebuild"){await Cl(t,r);return}if(i==="open"){Il(t,r);return}console.log($.yellow(`
|
|
86
|
+
[memory] unknown subcommand: ${i}`)),Xs()},"handler"),detailedHelp:_l};import T from"chalk";function Ys(){console.log(`
|
|
87
|
+
${T.bold("/goal")} \u2014 persistent session goal
|
|
88
88
|
|
|
89
|
-
${
|
|
90
|
-
${
|
|
91
|
-
${
|
|
92
|
-
${
|
|
93
|
-
${
|
|
94
|
-
${
|
|
95
|
-
${
|
|
89
|
+
${T.bold("Subcommands:")}
|
|
90
|
+
${T.cyan("/goal <objective> [--tokens N]")} Create a new persistent goal.
|
|
91
|
+
${T.cyan("/goal status")} Show current goal (default).
|
|
92
|
+
${T.cyan("/goal pause")} Pause an active goal.
|
|
93
|
+
${T.cyan("/goal resume")} Resume a paused goal.
|
|
94
|
+
${T.cyan("/goal clear")} Clear the current goal.
|
|
95
|
+
${T.cyan("/goal help")} Show this help.
|
|
96
96
|
|
|
97
|
-
${
|
|
97
|
+
${T.bold("Notes:")}
|
|
98
98
|
- The agent auto-continues toward an active goal on every Worker turn end.
|
|
99
99
|
- Token budget is optional; set it only when you want a hard ceiling.
|
|
100
100
|
- update_goal({complete}) is verifier-gated; the agent cannot
|
|
101
101
|
self-declare done without runtime confirmation.
|
|
102
|
-
`.trim())}a(
|
|
103
|
-
`)}a(Pl,"renderStatus");async function
|
|
104
|
-
`))}a(
|
|
102
|
+
`.trim())}a(Ys,"printHelp");function Ml(e){let o=null,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i==="--tokens"){let l=e[r+1];if(!l)return{error:"--tokens requires a value (e.g. `--tokens 50000`)"};let c=Number(l);if(!Cn(c))return{error:"--tokens value must be a positive integer"};o=c,r++;continue}if(i.startsWith("--tokens=")){let l=i.slice(9),c=Number(l);if(!Cn(c))return{error:"--tokens value must be a positive integer"};o=c;continue}if(i.startsWith("--"))return{error:`unknown flag: ${i}`};n.push(i)}let t=n.join(" ").trim();return t?{objective:t,tokenBudget:o}:{error:"objective is required"}}a(Ml,"parseCreateArgs");function Pl(e){if(!e)return T.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${T.bold("Goal:")} ${e.objective}`,`${T.bold("Status:")} ${e.status}`,`${T.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${T.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${T.bold("Token budget:")} ${T.dim("none")}`);return o.push(`${T.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${T.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
|
|
103
|
+
`)}a(Pl,"renderStatus");async function mo(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=gr(e.lineage,n,t),await o.saveSession()}a(mo,"persist");async function Ll(e,o,n){if(!o.lineage){console.log(T.red("[/goal] no active session lineage"));return}let t=Le(o.lineage);if(t&&t.status!=="complete"){console.log(T.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=Ml(e);if("error"in r){console.log(T.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await mo(o,n,null,"cleared");let i=Tr(r.objective,r.tokenBudget);await mo(o,n,i,"created"),console.log(T.green(`[/goal] created: "${i.objective}"`)),i.tokenBudget!==null&&console.log(T.dim(` budget: ${i.tokenBudget} tokens`))}catch(i){let l=i instanceof Error?i.message:String(i);console.log(T.red(`[/goal] ${l}`))}}a(Ll,"doCreate");async function Wl(e){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let o=Le(e.lineage);console.log(Pl(o))}a(Wl,"doStatus");async function Nl(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let n=Le(e.lineage);if(!n){console.log(T.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(T.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=Cr(n);await mo(e,o,t,"paused"),console.log(T.green("[/goal] paused"))}a(Nl,"doPause");async function Ol(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}let n=Le(e.lineage);if(!n){console.log(T.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(T.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=Ir(n);await mo(e,o,t,"resumed"),console.log(T.green("[/goal] resumed"))}a(Ol,"doResume");async function Dl(e,o){if(!e.lineage){console.log(T.red("[/goal] no active session lineage"));return}if(!Le(e.lineage)){console.log(T.yellow("[/goal] no goal to clear"));return}await mo(e,o,null,"cleared"),console.log(T.green("[/goal] cleared"))}a(Dl,"doClear");var Js={name:"goal",description:"Manage a persistent session goal (FEATURE_192)",usage:"/goal [<objective> [--tokens N] | status | pause | resume | clear | help]",argumentHint:"<objective> | status | pause | resume | clear | help",handler:a(async(e,o,n)=>{let t=(e[0]??"status").toLowerCase();if(t==="help"||t==="--help"||t==="-h"){Ys();return}if(t==="status"){await Wl(o);return}if(t==="pause"){await Nl(o,n);return}if(t==="resume"){await Ol(o,n);return}if(t==="clear"){await Dl(o,n);return}await Ll(e,o,n)},"handler"),detailedHelp:Ys};import{existsSync as Si}from"node:fs";import{join as ee}from"node:path";import g from"chalk";import rt from"path";import{createHash as Gl}from"crypto";import{execFile as Ul}from"child_process";import jl from"fs";import nt from"path";import{promisify as Fl}from"util";var Hl=Fl(Ul);function me(e){if(!(!e||!e.trim()))return nt.resolve(e).replace(/\\/g,"/")}a(me,"normalizePath");async function po(e,o){try{let{stdout:n}=await Hl("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}a(po,"gitStdout");function Bl(e){let o=me(e);if(o)return nt.posix.basename(o)===".git"?nt.posix.dirname(o):o}a(Bl,"deriveCanonicalRepoRoot");async function Wm(e={}){let o=me(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=me(await po(o,["rev-parse","--show-toplevel"])),t=await po(n??o,["rev-parse","--path-format=absolute","--git-common-dir"])??await po(n??o,["rev-parse","--git-common-dir"]),r=await po(n??o,["branch","--show-current"])??await po(n??o,["rev-parse","--abbrev-ref","HEAD"]);return{canonicalRepoRoot:Bl(t)??n,workspaceRoot:n,executionCwd:o,branch:r&&r!=="HEAD"?r:void 0,workspaceKind:e.workspaceKind??"detected"}}a(Wm,"inspectWorkspaceRuntime");function Nm(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:me(e.canonicalRepoRoot)===me(o.canonicalRepoRoot)}a(Nm,"isSameCanonicalRepo");function Om(e){return!!(e?.workspaceRoot&&jl.existsSync(e.workspaceRoot))}a(Om,"workspaceExists");function Zs(e){let o=me(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=me(e.runtimeInfo?.executionCwd??o),t=me(e.runtimeInfo?.canonicalRepoRoot??o);if(!(!o&&!n&&!t))return{canonicalRepoRoot:t,workspaceRoot:o,executionCwd:n,branch:e.runtimeInfo?.branch,workspaceKind:e.runtimeInfo?.workspaceKind??"detected"}}a(Zs,"resolveSessionRuntimeInfo");function tt(e){if(!e?.workspaceRoot)return"No git workspace detected";let o=e.branch?` @ ${e.branch}`:"",n=e.workspaceKind??"detected";return`${e.workspaceRoot}${o} [${n}]`}a(tt,"formatWorkspaceTruth");var Qs="_unknown",ei=80;function zl(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(zl,"caseFold");function ql(e){return zl(rt.resolve(e).replace(/\\/g,"/"))}a(ql,"normalizeRoot");function oi(e){return Gl("sha256").update(e).digest("hex").slice(0,10)}a(oi,"shortHash");function Kl(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>ei?o.slice(o.length-ei):o}a(Kl,"slugify");function xe(e){if(!e||!e.trim())return{key:Qs,canonicalRoot:null,displayName:Qs};let o=ql(e),n=Kl(o),t=n?`${n}-${oi(o)}`:oi(o),r=rt.basename(rt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(xe,"deriveProjectKeyFromRoot");function Bm(e){let o=Zs({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return xe(n)}a(Bm,"deriveProjectKeyFromData");import{join as Pc}from"node:path";import an from"chalk";import{existsSync as se,readdirSync as ic,readFileSync as Zo,writeFileSync as Qm}from"node:fs";import{dirname as ac,join as Q}from"node:path";import E from"chalk";import{existsSync as Xl,readFileSync as Vl}from"node:fs";var ni=4,ti=180,ri=6e3,si=360,st="[truncated]";function Ae(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ae,"detectWorkflowLocale");function go(...e){return Ae(e.filter(o=>typeof o=="string").join(`
|
|
104
|
+
`))}a(go,"inferWorkflowLocaleFromParts");function pe(e,o={}){let n=e.trim();return o.full===!0||n.length<=ri?n:`${n.slice(0,ri).trimEnd()}
|
|
105
105
|
|
|
106
|
-
${
|
|
106
|
+
${st}`}a(pe,"trimResultPreview");function it(e){return e.includes(st)}a(it,"isWorkflowResultPreviewTruncated");function Yl(e,o){return o==="zh"?`[\u7ED3\u679C\u9884\u89C8\u5DF2\u622A\u65AD\u3002\u5B8C\u6574\u7ED3\u679C\u8BF7\u7528 /workflow show --full ${e} \u67E5\u770B\uFF1Bartifact \u6587\u4EF6\u4E5F\u4FDD\u5B58\u5728\u672C\u6B21 run \u76EE\u5F55\u3002]`:`[Result preview truncated. Use /workflow show --full ${e} for the complete result; artifacts are also saved in the run directory.]`}a(Yl,"formatWorkflowResultTruncationHint");function Ge(e,o,n){let t=e.lastIndexOf(st);return t<0?e:`${e.slice(0,t).trimEnd()}
|
|
107
107
|
|
|
108
|
-
${
|
|
108
|
+
${Yl(o,n)}`}a(Ge,"replaceWorkflowResultTruncationMarker");function Jl(e){let o=e.replace(/\s+/g," ").trim();return o.length<=si?o:`${o.slice(0,si).trimEnd()}...`}a(Jl,"trimWorkflowLaunchSummary");function ge(e,o={}){if(typeof e=="string"&&e.trim().length>0)return pe(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return pe(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return pe(t,o)}}if(e&&typeof e=="object")for(let n of["summary","report","text","result"]){let t=e[n];if(typeof t=="string"&&t.trim().length>0)return pe(t,o)}if(e!=null)try{let n=JSON.stringify(e,null,2);if(typeof n=="string"){let t=n.trim();if(t.length>0&&t!=="{}"&&t!=="[]"&&t!=='""')return pe(n,o)}}catch{}}a(ge,"formatResult");function wo(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&K(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>K(d,"name")==="synthesize")??n[0],i=r?K(r,"summary"):void 0;if(i)return pe(i,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?K(l,"summary")??K(l,"error"):void 0;return c?pe(c,o):void 0}a(wo,"formatFinalEventSummary");function Zl(e,o={}){if(!(!e.path||!Xl(e.path)))try{let n=JSON.parse(Vl(e.path,"utf8")),t=ge(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?pe(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(Zl,"formatArtifactPreview");function ze(e,o,n={}){for(let r=e.length-1;r>=0;r-=1){let i=e[r];if(!i)continue;let l=Zl(i,n);if(l)return o==="zh"?`\u4EA7\u7269 ${i.name}:
|
|
109
109
|
${l}`:`Artifact ${i.name}:
|
|
110
|
-
${l}`}if(e.length===0)return;let t=e.map(r=>r.name).join(", ");return o==="zh"?`\u5DF2\u751F\u6210\u4EA7\u7269: ${t}`:`Artifacts created: ${t}`}a(
|
|
110
|
+
${l}`}if(e.length===0)return;let t=e.map(r=>r.name).join(", ");return o==="zh"?`\u5DF2\u751F\u6210\u4EA7\u7269: ${t}`:`Artifacts created: ${t}`}a(ze,"formatArtifactResult");function at(e){let o=e.resultText?Ge(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}
|
|
111
111
|
|
|
112
112
|
${r}
|
|
113
113
|
|
|
@@ -117,122 +117,127 @@ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7
|
|
|
117
117
|
${t}
|
|
118
118
|
|
|
119
119
|
${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(`
|
|
120
|
-
`)}a(
|
|
120
|
+
`)}a(at,"formatWorkflowCompletionAnswer");function lt(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=Jl(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(`
|
|
121
121
|
`)}let l=e.summary.writesFiles?"File-writing work still goes through normal permission gates.":"This is read-only and will not modify files.";return[`I will use a workflow for this task: ${e.summary.name} (${e.runId}).`,`Plan: ${i}`,`Phases: ${o}; scale: ${t}, ${r} concurrent. ${l}`,"Progress will update below, and I will summarize the result when it finishes."].join(`
|
|
122
|
-
`)}a(
|
|
122
|
+
`)}a(lt,"formatWorkflowLaunchAnswer");function K(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(K,"readEventString");function ct(e,o="en",n){if(e.type!=="agent_completed"&&e.type!=="agent_unverified"&&e.type!=="agent_failed"&&e.type!=="agent_summary_updated"||e.type==="agent_completed"&&K(e,"status")!=="completed")return;let t=K(e,"summary")??K(e,"error");if(!t)return;let r=K(e,"summaryKind");if(r==="pending")return;let i=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=K(e,"name")??K(e,"taskId")??"agent";return sc(l,t,o,n,i)}a(ct,"formatWorkflowAgentDigest");function Ql(e){let o=e.replace(/\s+/g," ").trim();return o.length<=ti?o:`${o.slice(0,ti).trimEnd()}...`}a(Ql,"trimWorkflowAgentDigestExcerpt");function ec(e){return/^(?:conclusion|finding|confirmed issue|issue|evidence|risk|next|unresolved|decision|result|summary|结论|发现|问题|证据|风险|下一步|未决|判断|决定|结果|摘要)[::]/i.test(e)||/^(?:[A-Z]{1,3}-?\d+|[HMSLP]\d+)[.)::\s-]/i.test(e)?!0:/(?:critical|high|medium|low)\s+severity|(?:严重|高危|中危|低危)/i.test(e)}a(ec,"isHighSignalWorkflowAgentDigestLine");function oc(e){let o=e.toLowerCase();return!!(/\[\/?workflow handoff\]/i.test(e)||/^\|.*\|$/.test(e)||/^\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?$/.test(e)||/^(?:i now have|i have|i now understand|here is|let me|i will|this report|the report)\b/.test(o)||/^(?:scope|review scope|范围|审查范围)[::]/i.test(e)||/^feature[_\s-]*\d+.*(?:report|review|audit|map|审查|报告|地图|变更地图)/i.test(e)||/^feature[_\s-]*\d+.*改动分布.*feature/i.test(e)||/(?:review report|audit|审查报告|综合报告|分析报告|变更地图)$/i.test(e)&&e.length<140)}a(oc,"isLowInformationWorkflowAgentDigestLine");function nc(e){return e.replace(/\s+/g," ").trim()}a(nc,"compactWorkflowAgentDigestLine");function tc(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=nc(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!oc(t))return o.truncateLines===!1?t:Ql(t)}a(tc,"normalizeWorkflowAgentDigestLine");function rc(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let i=tc(r,o);if(!i)continue;let l=ec(i)?n:t;n.includes(i)||t.includes(i)||l.push(i)}return n.length>0?n.slice(0,ni):t.length>0?t.slice(0,ni):[]}a(rc,"extractWorkflowAgentDigestExcerpts");function sc(e,o,n,t,r="excerpt"){let i=r==="digest",c=rc(o,{truncateLines:!i}).map(f=>`- ${f}`),d=t?n==="zh"?`\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show ${t} \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002`:`This is a child-agent digest; use /workflow show ${t} for the event timeline.`:n==="zh"?"\u8FD9\u662F\u5B50 Agent \u7684\u6709\u754C\u6458\u8981\uFF1B/workflow show \u53EF\u67E5\u770B\u8FD0\u884C\u4E8B\u4EF6\u65F6\u95F4\u7EBF\u3002":"This is a child-agent digest; use /workflow show for the event timeline.",u=n==="zh"?i?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u8981\uFF1A`:r==="digest-failed"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF08\u667A\u80FD\u6458\u8981\u4E0D\u53EF\u7528\uFF0C\u4EE5\u4E0B\u4E3A\u672C\u5730\u6458\u5F55\uFF09\uFF1A`:`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\u3002\u6458\u5F55\u6458\u8981\uFF1A`:i?`Agent ${e} completed. Summary:`:r==="digest-failed"?`Agent ${e} completed (smart summary unavailable; local excerpt):`:`Agent ${e} completed. Extracted summary:`;return c.length===0?[n==="zh"?`\u5B50 Agent ${e} \u5DF2\u5B8C\u6210\uFF0C\u4F46\u672A\u80FD\u63D0\u53D6\u5230\u6709\u6548\u6458\u8981\u3002`:`Agent ${e} completed. No useful summary could be extracted.`,d].join(`
|
|
123
123
|
`):[u,...c,d].join(`
|
|
124
|
-
`)}a(
|
|
125
|
-
`)}a(
|
|
126
|
-
${
|
|
127
|
-
`)}a(Yo,"printWorkflowHelp");var
|
|
128
|
-
`)}a(
|
|
124
|
+
`)}a(sc,"formatWorkflowAgentLongDigest");function Vo(e){return(o,n="en")=>ct(o,n,e)}a(Vo,"createWorkflowAgentDigestLimiter");import _ from"chalk";function dt(){return[`${_.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${_.bold("Subcommands:")}`,` ${_.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${_.cyan("/workflow create <request>")} Build & run a workflow for a request. The Worker investigates first, then authors it (scout-then-author). Requires AMA or AMAW \u2014 Solo (SA) mode runs no workflows.`,` ${_.cyan("/workflow <request>")} Shorthand for create when the first word isn't a known workflow name or subcommand.`,` ${_.cyan("/workflow <name> [args]")} Run a built-in or saved workflow by name. Args may be JSON or bare text.`,` ${_.cyan("/workflow runs [--all|--limit N]")} List active and recent workflow runs for this project.`,` ${_.cyan("/workflow show [--full] [runId]")} Show the latest run; use --full for complete result artifacts.`,` ${_.cyan("/workflow pause <runId>")} Pause future child launches for an active run.`,` ${_.cyan("/workflow resume <runId>")} Resume a paused run.`,` ${_.cyan("/workflow stop [runId]")} Stop an active run through abort propagation. Defaults to the active run.`,` ${_.cyan("/workflow delete [--force] [--run|--saved] <runId|savedName>")} Delete one persisted run record or generated saved capsule; --force removes stale non-terminal run records.`,` ${_.cyan("/workflow prune --dry-run|--keep N|--older-than Nd")}`," Preview or delete old terminal run records.",` ${_.cyan("/workflow rerun <runId|savedName> [args]")} Rerun a historical generated run, or run the current saved workflow by name.`,` ${_.cyan("/workflow save <runId> <name>")} Save a generated run as a workflow capsule.`,` ${_.cyan("/workflow rename <runId|alias|savedName> <newName>")} Rename a run display name or generated saved capsule.`,` ${_.cyan("/workflow revise [--replace] <runId|alias|savedName> <change>")} Generate and save a capsule revision.`,` ${_.cyan("/workflow help")} Show this help. Also available as /help workflow.`,"",`${_.bold("Examples:")}`,` ${_.dim("/workflow create Compare three flaky-test hypotheses and verify each one")}`,` ${_.dim('/workflow parallel-investigation {"question":"\u8BF7\u68C0\u67E5\u8FD9\u4E2A\u7ADE\u6001\u5728\u54EA\u91CC","targets":["packages/agent"]}')}`,` ${_.dim('/workflow rerun run-lx3 {"request":"\u8BF7\u7528\u540C\u6837\u6D41\u7A0B\u590D\u67E5 packages/repl"}')}`,` ${_.dim('/workflow rerun generated-audit {"request":"reuse the saved workflow for packages/repl"}')}`,` ${_.dim("/workflow prune --dry-run")}`,` ${_.dim("/workflow save run-lx3 generated-audit")}`,"",`${_.bold("Safety:")}`," - Generated and workflow capsule (.workflow.json) workflows run in the capability WorkflowApi runner."," - For rerun, a run id reruns its saved snapshot; a saved name runs the current saved capsule version."," - For revise --replace, only a saved generated capsule name can move; the previous capsule is archived."," - Local .ts/.mjs/.js workflows are trusted-local and require explicit confirmation."," - File, shell, MCP, and web effects still go through child agents and existing permission gates."].join(`
|
|
125
|
+
`)}a(dt,"renderWorkflowHelp");function Yo(){console.log(`
|
|
126
|
+
${dt()}
|
|
127
|
+
`)}a(Yo,"printWorkflowHelp");var lc=new Set(["completed","failed","stopped","denied","cancelled"]);function ut(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${E.cyan(o.name)} \u2014 ${o.description}`).join(`
|
|
128
|
+
`)}a(ut,"formatWorkflowList");var cc=6,dc=900;function uc(e){let o=e.replace(/\r\n/g,`
|
|
129
129
|
`).replace(/\r/g,`
|
|
130
130
|
`).split(`
|
|
131
|
-
`),n=[],t=0,r=!1;for(let l of o){if(n.length>=
|
|
132
|
-
`)}a(ie,"renderApprovalPrompt");function
|
|
133
|
-
`)}let r=t.map(i=>` ${
|
|
134
|
-
`)}a(
|
|
135
|
-
`):e.map(n=>` ${
|
|
136
|
-
`)}a(
|
|
137
|
-
`)}a(
|
|
138
|
-
`).map(
|
|
139
|
-
`)}a(
|
|
140
|
-
`)}a(
|
|
131
|
+
`),n=[],t=0,r=!1;for(let l of o){if(n.length>=cc)break;let c=` ${l}`,d=dc-t;if(d<=0){r=!0;break}if(c.length>d){d>16&&n.push(`${c.slice(0,d-4)} ...`),r=!0;break}n.push(c),t+=c.length+1}let i=Math.max(0,o.length-n.length);if(i>0||r){let l=i>0?`${i} more line(s)`:"source truncated";n.push(` ... (${l}; full source omitted from prompt)`)}return n}a(uc,"renderApprovalScriptPreview");function ie(e,o){let n=a(i=>i===null?"\u221E":String(i),"cap"),t=e.plannedAgents===void 0?void 0:String(e.plannedAgents),r=t===void 0?`agent total cap: ${n(e.maxAgents)}`:`planned agents: ${t} \xB7 agent safety cap: ${n(e.maxAgents)}`;return[`Run workflow ${E.cyan(e.name)}?`,` ${e.description}`,` phases: ${e.phases.length>0?e.phases.join(" \u2192 "):"(dynamic)"}`,` ${r} \xB7 max concurrency: ${n(e.maxConcurrency)} \xB7 token budget: ${n(e.tokenBudget)}`,` writes files: ${e.writesFiles?E.yellow("yes"):"no (read-only)"}`,...o?[` source: ${o.source}`,` sandbox/trust: ${o.sandbox}`,` worktree isolation: ${o.mayUseWorktree?"may request worktree":"shared cwd / per-child default"}`,...o.rawScriptPath?[` raw script: ${o.rawScriptPath}`]:o.rawScript?[" raw script: preview below"]:[],...o.rawScript&&!o.rawScriptPath?[" raw script preview:",...uc(o.rawScript)]:[]]:[]].join(`
|
|
132
|
+
`)}a(ie,"renderApprovalPrompt");function yo(e){if(!se(e))return[];let o=[];for(let n of ic(e)){let t=Q(e,n,"run.json");if(se(t))try{let r=JSON.parse(Zo(t,"utf8"));o.push({runId:n,workflow:typeof r.workflow=="string"?r.workflow:"?",status:typeof r.status=="string"?r.status:"?",totalSpawned:typeof r.totalSpawned=="number"?r.totalSpawned:0,endedAt:typeof r.endedAt=="number"?r.endedAt:0})}catch{}}return o.sort((n,t)=>t.endedAt-n.endedAt)}a(yo,"readWorkflowRuns");function fc(e){let o=Q(e,"events.jsonl");if(!se(o))return[];let n=Zo(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let i=JSON.parse(r);if(typeof i!="object"||i===null)continue;let l=i;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(fc,"readWorkflowEvents");function mc(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(mc,"readStringArray");function Jo(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(Jo,"readNonEmptyString");function ii(e,o){let n=o?Jo(o.scriptSnapshotPath):Q(e,"script.js"),t=o?Jo(o.manifestSnapshotPath):Q(e,"manifest.json");return!n||!t?!1:se(n)&&se(t)}a(ii,"hasGeneratedWorkflowSnapshot");function li(e,o){if(o)return ii(e,o);let n=Q(e,"run.json");if(!se(n))return!1;try{let t=JSON.parse(Zo(n,"utf8"));return typeof t=="object"&&t!==null?ii(e,t):!1}catch{return!1}}a(li,"hasRerunnableGeneratedWorkflowRun");function pc(e){for(let o of[...e].reverse()){if(o.type!=="workflow_failed")continue;let n=o.data?.error;if(typeof n=="string"&&n.trim().length>0)return n}}a(pc,"readWorkflowFailure");function ko(e,o){let n=Q(e,o),t=Q(n,"run.json"),r=fc(n),i=pc(r);if(!(!se(t)&&r.length===0)){if(!se(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let l=JSON.parse(Zo(t,"utf8")),c=Jo(l.scriptSnapshotPath),d=Jo(l.manifestSnapshotPath);return{runId:o,workflow:typeof l.workflow=="string"?l.workflow:"?",status:typeof l.status=="string"?l.status:"?",totalSpawned:typeof l.totalSpawned=="number"?l.totalSpawned:0,eventCount:r.length,runDir:n,canRerun:li(n,l),...c?{scriptSnapshotPath:c}:{},...d?{manifestSnapshotPath:d}:{},...typeof l.startedAt=="number"?{startedAt:l.startedAt}:{},...typeof l.endedAt=="number"?{endedAt:l.endedAt}:{},...i?{error:i}:{},artifacts:mc(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a(ko,"readWorkflowRunDetail");function ho(e){return e==="completed"?E.green("ok"):e==="failed"?E.red("x"):e==="running"?E.cyan("run"):e==="paused"?E.yellow("pause"):e==="stopped"?E.dim("stop"):e==="denied"?E.dim("deny"):e==="cancelled"?E.dim("cancel"):E.dim("-")}a(ho,"statusIcon");function ft(e){return lc.has(e)}a(ft,"isTerminalWorkflowStatus");function ci(e){if(!e)return;let o=[];return e.displayName&&e.displayName!==e.workflowName&&o.push(`display: ${e.displayName}`),e.source&&o.push(`source: ${e.source}`),e.savedWorkflowName&&o.push(`saved: ${e.savedWorkflowName}`),e.revisionOf&&o.push(`revision of: ${e.revisionOf}`),o.length>0?o.join(", "):void 0}a(ci,"formatProcessListMeta");function mt(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let i=t.map(l=>{let c=ci(o.processSnapshots?.get(l.runId));return` ${ho(l.status)} ${E.cyan(l.workflow)} ${E.dim(l.runId)} - ${l.status} (${l.totalSpawned} agents)${c?E.dim(` [${c}]`):""}`});return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&i.push(E.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),i.join(`
|
|
133
|
+
`)}let r=t.map(i=>` ${ho(i.status)} ${E.cyan(i.workflow)} ${E.dim(i.runId)} \u2014 ${i.status} (${i.totalSpawned} agents)`);return o.showLimitHint===!0&&n!==void 0&&e.length>t.length&&r.push(E.dim(` Showing ${t.length} of ${e.length} persisted runs. Use /workflow runs --all to show all.`)),r.join(`
|
|
134
|
+
`)}a(mt,"formatRunsList");function pt(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=ci(o.processSnapshots?.get(n.runId));return` ${ho(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?E.dim(` [${t}]`):""}`}).join(`
|
|
135
|
+
`):e.map(n=>` ${ho(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
|
|
136
|
+
`)}a(pt,"formatManagedRunsList");function qe(e){return e.status==="running"||e.status==="paused"}a(qe,"isActiveManagedWorkflowRun");function gt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${ho(o.status)} ${E.cyan(o.workflow)} ${E.dim(o.runId)} - ${o.status}`).join(`
|
|
137
|
+
`)}a(gt,"formatWorkflowPruneCandidates");function wt(e,o){return e.filter(qe)[0]?.runId??e[0]?.runId??o[0]?.runId}a(wt,"selectDefaultWorkflowRunId");function ht(e){return e.find(qe)?.runId}a(ht,"selectDefaultActiveWorkflowRunId");function ai(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(ai,"formatTime");function gc(e,o=10){let n=e.map(nn).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(gc,"formatRecentWorkflowEvents");function yt(e,o){return o?.canRerun??(e?.runDir?li(e.runDir):!1)}a(yt,"canRerunWorkflowRun");function wc(e){return e?e.artifacts.map(o=>({name:o,path:Q(e.runDir,"artifacts",`${Ar(o)}.json`)})):[]}a(wc,"workflowArtifactRefs");function kt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(kt,"formatWorkflowNextActions");function di(e,o){return o?`Use /workflow show ${e} for events. /workflow revise ${e} <change> can repair the saved script; /workflow rerun ${e} repeats it unchanged.`:`Use /workflow show ${e} for events.`}a(di,"formatWorkflowFailureAction");function vt(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",i=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=ai(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,h=ai(e?.endedAt??o?.endedAt??m),k=t?.error??e?.error??o?.error,y=o?.artifacts??t?.artifacts?.map(ce=>ce.name)??[],v=wc(o),p=e?.resultText,R=n.full===!0||p===void 0?ze(v,Ae(r),{full:n.full===!0}):void 0,I=n.full===!0?R??p??t?.resultSummary:p!==void 0?ge(p):t?.resultSummary!==void 0?ge(t.resultSummary):R,P=I?Ge(I,i,Ae(I)):void 0,X=n.full===!0||!I||!it(I)?"result:":"result preview:",V=o?gc(o.events):[],Qe=yt(e,o);return[` ${E.cyan(r)} ${E.dim(i)}`,...t?.displayName&&t.displayName!==r?[` display name: ${t.displayName}`]:[],` status: ${l}`,...t?.source?[` source: ${t.source}`]:[],...t?.savedWorkflowName?[` saved workflow: ${t.savedWorkflowName}`]:[],...t?.sourceRunId?[` source run: ${t.sourceRunId}`]:[],...t?.sourceWorkflowName?[` source workflow: ${t.sourceWorkflowName}`]:[],...t?.revisionOf?[` revision of: ${t.revisionOf}`]:[],` agents: ${c}`,` events: ${d}`,...f?[` started: ${f}`]:[],...h?[` ended: ${h}`]:[],...u?[` run dir: ${u}`]:[],...y.length>0?[` artifacts: ${y.join(", ")}`]:[],...k?[` error: ${k}`]:[],...P?["",` ${X}`,...P.split(`
|
|
138
|
+
`).map(ce=>` ${ce}`)]:[],...V.length>0?[""," recent events:",...V.map(ce=>` ${ce.trimEnd()}`)]:[],"",` next: ${kt(i,Qe)}`].join(`
|
|
139
|
+
`)}a(vt,"formatWorkflowRunSnapshot");function St(e){return{project:Q(e,".kodax","workflows"),personal:H("workflows")}}a(St,"savedWorkflowDirs");async function ui(e,o){return new Set((await We(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(ui,"nextRevisionWorkflowName");function fi(e){let o=e.resolution.kind==="run"?e.resolution.runId:e.capsule.provenance?.fromRunId,n=e.resolution.kind==="saved"?e.resolution.savedWorkflow.name:e.capsule.provenance?.fromWorkflowName,t=e.resolution.kind==="run"?e.resolution.runId:e.resolution.kind==="saved"?e.resolution.savedWorkflow.name:void 0;return{...o!==void 0?{fromRunId:o}:{},...n!==void 0?{fromWorkflowName:n}:{},...t!==void 0?{revisionOf:t}:{},...e.replacesWorkflowName!==void 0?{replacesWorkflowName:e.replacesWorkflowName}:{},createdAt:new Date().toISOString(),kodaxVersion:Wr}}a(fi,"buildWorkflowRevisionProvenance");function $t(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${E.cyan(o.name)} ${E.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
|
|
140
|
+
`)}a($t,"formatSavedList");function mi(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(mi,"isSafeWorkflowRunId");function Re(e){if(e.confirm)return e.confirm;let o=e.readline;if(o)return n=>new Promise(t=>{o.question(`${n} (y/N) `,r=>t(/^y(es)?$/i.test(r.trim())))})}a(Re,"resolveConfirm");function hc(e){console.log(E.red(`
|
|
141
141
|
[workflow] invalid run id: ${e||"<empty>"}
|
|
142
|
-
`))}a(
|
|
143
|
-
[workflow] capsule preflight failed:`));for(let o of e.issues)console.log(
|
|
144
|
-
[workflow] capsule preflight warnings:`));for(let n of o)console.log(
|
|
145
|
-
${e.path}`)){console.log(
|
|
146
|
-
`));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await
|
|
142
|
+
`))}a(hc,"printInvalidRunId");function we(e){return mi(e)?!0:(hc(e),!1)}a(we,"ensureSafeRunId");function Qo(){let e=yc(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(Qo,"currentWorkflowPreflightEnv");function yc(e){let o=e;for(;;){if(se(Q(o,".git")))return!0;let n=ac(o);if(n===o)return!1;o=n}}a(yc,"hasGitMarker");function en(e){console.log(E.red(`
|
|
143
|
+
[workflow] capsule preflight failed:`));for(let o of e.issues)console.log(E.red(` - ${o.requirement}: ${o.message}`));console.log()}a(en,"printPreflightFailure");function on(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(E.yellow(`
|
|
144
|
+
[workflow] capsule preflight warnings:`));for(let n of o)console.log(E.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(on,"printPreflightWarnings");async function pi(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
|
|
145
|
+
${e.path}`)){console.log(E.dim(`Workflow cancelled.
|
|
146
|
+
`));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await no(e.path),c=to(l,Qo());if(!c.ok){en(c);return}on(c),n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:l.manifest.mayUseWorktree===!0,rawScriptPath:e.path,rawScript:l.source},t={manifest:l.manifest,source:l.source},r=l.provenance}return{module:await Po(e.path),approvalContext:n,...t!==void 0?{scriptSnapshot:t}:{},...r!==void 0?{provenance:r}:{}}}catch(n){let t=n instanceof Error?n.message:String(n);console.log(E.red(`
|
|
147
147
|
[workflow] failed to load ${e.path}: ${t}
|
|
148
|
-
`));return}}a(
|
|
149
|
-
`):[`Workflow failed (${e.runId}): ${e.error.message}
|
|
150
|
-
`)}a(
|
|
148
|
+
`));return}}a(pi,"prepareSavedWorkflow");function bt(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(bt,"workflowEventStatus");function nn(e){let o=e.data?.name??e.data?.taskId??"",n=bt(e);switch(e.type){case"phase_started":return` > phase: ${e.data?.name??""}`;case"phase_finished":return` done phase: ${e.data?.name??""}`;case"agent_spawned":return` + ${o}`;case"agent_completed":return n==="failed"?` failed ${o}`:n==="completed_unverified"?` unverified ${o}`:` done ${o}`;case"agent_unverified":return` unverified ${o}`;case"agent_failed":return` failed ${o}`;case"agent_stopped":return` stopped ${o}`;case"workflow_log":return` log ${e.data?.message??""}`;case"artifact_written":return` artifact ${e.data?.name??""}`;case"synthesis_completed":return" synthesis complete";case"workflow_completed":return" workflow completed";case"workflow_stopped":return" workflow stopped";case"workflow_failed":return` workflow failed: ${e.data?.error??"unknown error"}`;default:return}}a(nn,"formatWorkflowEvent");function gi(e){let o=nn(e);o&&console.log(E.dim(o))}a(gi,"renderWorkflowEvent");import rn from"chalk";import kc from"string-width";var vc=9;function Sc(e,o=vc){let n=kc(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Sc,"padWorkflowLiveSymbol");function yi(e,o={}){let n=e.items.filter(m=>m.kind==="agent"),t=n.filter(m=>m.status==="running").map(m=>m.title),r=n.filter(m=>m.status==="completed").length,i=n.filter(m=>m.status==="failed").length,l=n.filter(m=>m.status==="cancelled").length,c=e.status==="completed"?"completed":e.status==="failed"?"failed":e.status==="cancelled"?"stopped":"running",d=e.activePhaseId===void 0?void 0:e.items.find(m=>m.id===e.activePhaseId)?.title,u=Date.parse(e.startedAt),f=o.message??e.latestMessage;return{runId:e.runId,workflow:e.displayName??e.workflowName,status:c,...d!==void 0?{phase:d}:{},...e.activePhaseIndex!==void 0?{phaseIndex:e.activePhaseIndex}:{},...e.phaseCount!==void 0?{phaseTotal:e.phaseCount}:{},...Number.isFinite(u)?{startedAt:u}:{},elapsedMs:e.elapsedMs,activeAgents:t,totalSpawned:e.progress.spawnedAgents,...e.progress.plannedItems!==void 0?{plannedAgents:e.progress.plannedItems}:{},...e.progress.agentCap!==void 0?{agentCap:e.progress.agentCap}:{},...e.tokens!==void 0?{tokenBudgetSpent:e.tokens.spent}:{},...e.tokens?.total!==void 0?{tokenBudgetTotal:e.tokens.total}:{},completedAgents:r,failedAgents:i,stoppedAgents:l,...f!==void 0?{message:f}:{},...o.locale!==void 0?{locale:o.locale}:{}}}a(yi,"workflowLiveSnapshotFromProcess");function up(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Sc(o.symbol)}${o.text}`)}a(up,"formatWorkflowLiveViewModelForTranscript");var $c=6,wi={en:{workflow:"workflow",phase:"phase",agent:"agent",more:"more",progress:"progress",waiting:"waiting",hint:"hint",finished:"finished",failed:"failed",stopped:"stopped",started:"started",cap:"cap",budget:"budget",spent:"spent",waitingForFirstAgent:"waiting for first agent",showStopHint:a(e=>`show: /workflow show ${e} | stop: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} active agent${e===1?"":"s"}`,"activeAgents")},zh:{workflow:"\u5DE5\u4F5C\u6D41",phase:"\u9636\u6BB5",agent:"\u667A\u80FD\u4F53",more:"\u66F4\u591A",progress:"\u8FDB\u5EA6",waiting:"\u7B49\u5F85",hint:"\u63D0\u793A",finished:"\u5B8C\u6210",failed:"\u5931\u8D25",stopped:"\u505C\u6B62",started:"\u5DF2\u542F\u52A8",cap:"\u4E0A\u9650",budget:"\u9884\u7B97",spent:"\u5DF2\u7528",waitingForFirstAgent:"\u7B49\u5F85\u7B2C\u4E00\u4E2A\u667A\u80FD\u4F53\u542F\u52A8",showStopHint:a(e=>`\u67E5\u770B: /workflow show ${e} | \u505C\u6B62: /workflow stop ${e}`,"showStopHint"),activeAgents:a(e=>`${e} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`,"activeAgents")}},bc={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function xc(e){return e.length>14?`${e.slice(0,14)}...`:e}a(xc,"shortRunId");function tn(e){return e==="zh"?wi.zh:wi.en}a(tn,"workflowLiveLabels");function Ac(e,o){let n=Math.max(0,Math.floor(e)),t=Math.floor(n/1e3),r=t%60,i=Math.floor(t/60),l=i%60,c=Math.floor(i/60);return o==="zh"?c>0?`${c}\u5C0F\u65F6${String(l).padStart(2,"0")}\u5206`:l>0?`${l}\u5206${String(r).padStart(2,"0")}\u79D2`:`${r}\u79D2`:c>0?`${c}h${l}m${r}s`:l>0?`${l}m${r}s`:`${r}s`}a(Ac,"formatElapsedMs");function hi(e){let o=Math.max(0,Math.floor(e));return o>=1e6?`${(o/1e6).toFixed(1).replace(/\.0$/,"")}M`:o>=1e3?`${(o/1e3).toFixed(1).replace(/\.0$/,"")}k`:String(o)}a(hi,"formatTokenCount");function Rc(e){if(e.tokenBudgetSpent===void 0)return;let o=tn(e.locale),n=hi(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=hi(e.tokenBudgetTotal);return e.tokenBudgetSpent<=0?`${o.budget} ${t} tokens`:`${o.spent} ${n}/${t} tokens`}if(!(e.tokenBudgetSpent<=0))return`${o.spent} ${n} tokens`}a(Rc,"formatWorkflowTokenUsage");function Ec(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Ac(t,e.locale));let r=Rc(e);return r!==void 0&&n.push(r),n}a(Ec,"formatWorkflowHeaderMetrics");function Tc(e){let o=tn(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=ki(e,n),r=[];e.activeAgents.length>0&&r.push(o.activeAgents(e.activeAgents.length)),e.plannedAgents!==void 0&&r.push(`${o.started} ${e.totalSpawned}`),e.failedAgents>0&&r.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&r.push(`${e.stoppedAgents} ${o.stopped}`),e.agentCap!==void 0&&r.push(`${o.cap} ${e.agentCap}`);let i=r.length===0?"":e.locale==="zh"?`\uFF08${r.join("\uFF0C")}\uFF09`:` (${r.join(", ")})`;return`${n}/${t} ${o.finished}${i}`}a(Tc,"formatWorkflowProgress");function Cc(e){let o=tn(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=ki(e),r=e.locale==="zh"?`${n}/${t} \u4E2A\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D`:`${n}/${t} active agent${n===1?"":"s"}`,i=[];return e.failedAgents>0&&i.push(`${e.failedAgents} ${o.failed}`),e.stoppedAgents>0&&i.push(`${e.stoppedAgents} ${o.stopped}`),i.length===0?r:e.locale==="zh"?`${r}\uFF0C${i.join("\uFF0C")}`:`${r}, ${i.join(", ")}`}a(Cc,"formatWorkflowCounter");function ki(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(ki,"workflowProgressDenominator");function Ic(e){if(e.phase)return e.phaseIndex!==void 0&&e.phaseTotal!==void 0&&e.phaseIndex>0&&e.phaseTotal>0?`${e.phaseIndex}/${e.phaseTotal} ${e.phase}`:e.phase}a(Ic,"formatWorkflowPhase");function fp(e,o=Date.now()){if(!e||e.status!=="running")return bc;let n=[],t=tn(e.locale),r=Ec(e,o),i=r.length===0?"":` \xB7 ${r.join(" \xB7 ")}`;n.push({kind:"header",id:"header",symbol:t.workflow,symbolColor:e.failedAgents>0?"red":"cyan",text:`${e.workflow} (${xc(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${i}`,isActive:!0});let l=Ic(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=Tc(e);c&&n.push({kind:"summary",id:"progress",symbol:t.progress,symbolColor:e.failedAgents>0?"red":"green",text:c,isActive:!1}),e.totalSpawned===0&&e.activeAgents.length===0&&n.push({kind:"summary",id:"waiting",symbol:t.waiting,symbolColor:"dim",text:t.waitingForFirstAgent,isActive:!1}),n.push({kind:"hint",id:"controls",symbol:t.hint,symbolColor:"dim",text:e.message??t.showStopHint(e.runId),isActive:!1});let d=n.slice(0,$c);return{shouldRender:!0,workflow:e.workflow,runId:e.runId,...e.phase!==void 0?{phase:e.phase}:{},...e.phaseIndex!==void 0?{phaseIndex:e.phaseIndex}:{},...e.phaseTotal!==void 0?{phaseTotal:e.phaseTotal}:{},activeCount:e.activeAgents.length,totalSpawned:e.totalSpawned,...e.plannedAgents!==void 0?{plannedAgents:e.plannedAgents}:{},completedAgents:e.completedAgents,failedAgents:e.failedAgents,stoppedAgents:e.stoppedAgents,counterText:Cc(e),rows:d}}a(fp,"buildWorkflowLiveViewModel");function _c(e,o){return o!==0?!1:e.name==="WorkflowScriptExecutionError"||/restricted workflow script|workflow generation source|workflow command .* must|unsupported workflow command/i.test(e.message)}a(_c,"isWorkflowHarnessFailure");function xt(e){let o=di(e.runId,e.canRerun),n=e.partialResultText?Ge(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return _c(e.error,e.totalSpawned)?[`Workflow harness failed before launching child agents (${e.runId}): ${e.error.message}`,"This points to an invalid generated workflow script or saved capsule, not a failed child-agent task.",...t,o].join(`
|
|
149
|
+
`):[`Workflow failed (${e.runId}): ${e.error.message}`,...t,o].join(`
|
|
150
|
+
`)}a(xt,"formatWorkflowFailedMessage");function Mc(e,o,n){return ze(e.artifacts,o,n)??wo(e.events,n)}a(Mc,"formatWorkflowFailurePartialResult");function sn(e){let o=e?.usage;if(typeof o!="object"||o===null)return 0;let n=o,t=n.totalTokens;if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;let r=n.inputTokens,i=n.outputTokens,l=typeof r=="number"&&Number.isFinite(r)&&r>0?r:0,c=typeof i=="number"&&Number.isFinite(i)&&i>0?i:0;return l+c}a(sn,"readWorkflowEventUsageTokens");function D(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(rn.red(`
|
|
151
151
|
${o.text}
|
|
152
|
-
`));return}if(o.type==="success"){console.log(
|
|
152
|
+
`));return}if(o.type==="success"){console.log(rn.green(`
|
|
153
153
|
${o.text}
|
|
154
|
-
`));return}if(o.type==="event"){console.log(
|
|
154
|
+
`));return}if(o.type==="event"){console.log(rn.dim(o.text));return}if(o.type==="assistant"){console.log(`
|
|
155
155
|
${o.text}
|
|
156
|
-
`);return}console.log(
|
|
156
|
+
`);return}console.log(rn.dim(`
|
|
157
157
|
${o.text}
|
|
158
|
-
`))}a(
|
|
159
|
-
`)}),f&&
|
|
160
|
-
${f}`})}}).catch(i=>{let l=i instanceof Error?i.message:String(i);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),
|
|
158
|
+
`))}a(D,"emitWorkflowRunMessage");function Ke(e,o,n={}){let t=n.presentation==="agentic"?Vo(n.runId??"current"):void 0,r=!1;return i=>{if(r&&(i.type==="agent_completed"||i.type==="agent_unverified"||i.type==="agent_failed"||i.type==="agent_summary_updated"))return;o?.onEvent(i);let l=nn(i);if(e.onWorkflowRunMessage){if(l&&D(e,{type:"event",text:l}),t){let c=t(i,n.locale??"en");c&&D(e,{type:"assistant",text:c,final:!1})}(i.type==="workflow_completed"||i.type==="workflow_failed"||i.type==="workflow_stopped")&&(r=!0);return}(i.type==="workflow_completed"||i.type==="workflow_failed"||i.type==="workflow_stopped")&&(r=!0),l&&gi(i)}}a(Ke,"workflowEventSink");function Xe(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(Xe,"subscribeWorkflowLiveProcess");function Ee(e,o,n,t="en"){let r=Date.now(),i=new Map,l,c=0,d=0,u=0,f=0,m=0,h=!1,k=n.phases??[],y=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,v=a((p,R)=>{let I=l===void 0?-1:k.indexOf(l),P=I>=0?I+1:void 0,X=k.length>0?k.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:p,...l!==void 0?{phase:l}:{},...P!==void 0?{phaseIndex:P}:{},...X!==void 0?{phaseTotal:X}:{},startedAt:r,elapsedMs:Math.max(0,Date.now()-r),activeAgents:[...i.values()],totalSpawned:c,...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},...n.maxAgents!==void 0?{agentCap:n.maxAgents}:{},tokenBudgetSpent:m,...y!==void 0?{tokenBudgetTotal:y}:{},completedAgents:d,failedAgents:u,stoppedAgents:f,...R!==void 0?{message:R}:{},locale:t})},"emit");return{running:a(p=>{h||v("running",p)},"running"),onProcessEvent:a(p=>{if(h&&p.type!=="workflow_finished")return;let R=p.snapshot.status;(p.type==="workflow_finished"||R==="completed"||R==="failed"||R==="cancelled")&&(h=!0);let I=p.type==="workflow_updated"?p.message:void 0;e.onWorkflowRunUpdate?.(yi(p.snapshot,I===void 0?{locale:t}:{locale:t,message:I}))},"onProcessEvent"),onEvent:a(p=>{if(!h)switch(p.type){case"phase_started":{let R=p.data?.name;l=typeof R=="string"?R:l,v("running");break}case"agent_spawned":{let R=typeof p.data?.taskId=="string"?p.data.taskId:`task-${c+1}`,I=typeof p.data?.name=="string"?p.data.name:R;i.set(R,I),c+=1,v("running");break}case"agent_completed":{let R=typeof p.data?.taskId=="string"?p.data.taskId:void 0;R&&i.delete(R),m+=sn(p.data),bt(p)==="failed"?u+=1:d+=1,v("running");break}case"agent_unverified":{let R=typeof p.data?.taskId=="string"?p.data.taskId:void 0;R&&i.delete(R),m+=sn(p.data),d+=1,v("running");break}case"agent_failed":{let R=typeof p.data?.taskId=="string"?p.data.taskId:void 0;R&&i.delete(R),m+=sn(p.data),u+=1,v("running");break}case"agent_stopped":{let R=typeof p.data?.taskId=="string"?p.data.taskId:void 0;R&&i.delete(R),m+=sn(p.data),f+=1,v("running");break}case"synthesis_completed":{v("running","synthesis complete");break}default:break}},"onEvent"),complete:a((p,R)=>{h||(h=!0,v(p,R))},"complete")}}a(Ee,"createWorkflowLiveUpdateEmitter");function Te(e,o,n,t,r={}){e.done.then(i=>{if(i.kind==="failed"){if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}let l=r.locale??"en",c={full:r.presentation==="agentic"},d=Mc(i.state,l,c),u=xt({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,...d!==void 0?{partialResultText:d}:{},locale:l});t?.complete("failed",i.error.message),D(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?xt({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&D(o,{type:"assistant",text:u,final:!0});return}if(i.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=ge(i.result,c)??ze(i.state.artifacts,l,c),u=d===void 0?wo(i.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){D(o,{type:"assistant",text:at({runId:n,totalSpawned:i.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}D(o,{type:"success",text:[`Workflow completed (${i.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
|
|
159
|
+
`)}),f&&D(o,{type:"info",text:`Workflow result:
|
|
160
|
+
${f}`})}}).catch(i=>{let l=i instanceof Error?i.message:String(i);if(e.getSnapshot?.()?.status==="stopped"){t?.complete("stopped","Workflow stopped by user.");return}t?.complete("failed",l),D(o,{type:"error",text:xt({runId:n,error:i instanceof Error?i:new Error(l),canRerun:r.canRerun===!0})})})}a(Te,"observeManagedWorkflowDone");function he(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){D(e.callbacks,{type:"error",text:`Workflow builder failed: ${o.message}`});return}!e.onBuilderEvent&&(o.stage==="started"||o.stage==="generating"||o.stage==="validating"||o.stage==="ready")&&console.log(an.dim(`
|
|
161
161
|
[workflow] ${o.message}
|
|
162
|
-
`))}a(
|
|
162
|
+
`))}a(he,"emitWorkflowBuilderEvent");function vo(e){return{source:e.source,displayName:e.displayName,...e.goal!==void 0?{goal:e.goal}:{},...e.savedWorkflowName!==void 0?{savedWorkflowName:e.savedWorkflowName}:{},...e.sourceRunId!==void 0?{sourceRunId:e.sourceRunId}:{},...e.sourceWorkflowName!==void 0?{sourceWorkflowName:e.sourceWorkflowName}:{},...e.revisionOf!==void 0?{revisionOf:e.revisionOf}:{},...e.hostMetadata!==void 0?{hostMetadata:{...e.hostMetadata}}:{}}}a(vo,"buildWorkflowProcessMetadata");async function Lc(e){let o=e.approval==="required"?Re(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(an.red(`
|
|
163
163
|
[workflow] refusing to generate a workflow without an interactive approval channel.
|
|
164
|
-
`)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(
|
|
164
|
+
`)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(an.red(`
|
|
165
165
|
[workflow] cannot generate - REPL options unavailable in this context.
|
|
166
|
-
`)),"failed";let t=Ae(e.request),r,i;try{
|
|
166
|
+
`)),"failed";let t=Ae(e.request),r,i;try{he(e,{stage:"started",message:"Workflow builder started"}),he(e,{stage:"generating",message:"Workflow - generating harness"}),r=n(),i=await(e.generateWorkflow??_o)({request:e.request,options:r}),he(e,{stage:"validating",message:"Workflow - validating harness"})}catch(p){let R=p instanceof Error?p.message:String(p);return he(e,{stage:"failed",message:R}),"failed"}if(i.kind==="declined")return he(e,{stage:"declined",message:i.reason}),console.log(an.dim(`
|
|
167
167
|
Workflow not created: ${i.reason}
|
|
168
|
-
`)),"declined";
|
|
169
|
-
`)}a(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
`)),"declined";he(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=ke(i.module);l!=="agentic"&&D(e.callbacks,{type:"info",text:`Generated workflow: ${i.approvalSummary}`});let d=xe(process.cwd()).key,u=e.runBaseDir??H("workflow-runs",d),f=e.runManager??Ne(),m=`run-${Date.now().toString(36)}`,h=Pc(u,m);if(o){if(!await o(ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0,rawScript:i.scriptSnapshot.source})))return he(e,{stage:"cancelled",message:"Workflow cancelled"}),D(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(D(e.callbacks,{type:"info",text:ie(c,{source:e.sourceLabel??"generated",sandbox:"capability-generated",mayUseWorktree:i.manifest.mayUseWorktree===!0})}),D(e.callbacks,{type:"info",text:"Auto-started generated workflow (capability-isolated); normal permission gates still apply."}));l==="agentic"?D(e.callbacks,{type:"assistant",text:lt({runId:m,summary:c,approvalSummary:i.approvalSummary,locale:t}),final:!1}):D(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let k=Ee(e.callbacks,m,i.module.meta,t);k.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`);let y=Xe(f,k,m),v=f.startFromOptions({module:i.module,args:{request:e.request},options:r,runId:m,runDir:h,scriptSnapshot:i.scriptSnapshot,processMetadata:vo({source:e.processSource??"command",displayName:i.module.meta.name,goal:e.request}),onEvent:Ke(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:m})});return v.done.finally(y),he(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),Te(v,e.callbacks,m,k,{canRerun:!0,presentation:l,locale:t}),"started"}a(Lc,"startGeneratedWorkflowFromRequest");function At(e){let o=e[0]?.toLowerCase();if(o==="help"||o==="--help"||o==="-h")return{kind:"help"};if(!o||o==="list")return{kind:"list"};if(o==="runs")return{kind:"runs",rawArgs:e.slice(1)};if(o==="show"){let n=e.slice(1),t=n.includes("--full"),r=n.find(i=>i!=="--full")??"";return t?{kind:"show",runId:r,full:!0}:{kind:"show",runId:r}}if(o==="pause")return{kind:"pause",runId:e[1]??""};if(o==="resume")return{kind:"resume",runId:e[1]??""};if(o==="stop")return{kind:"stop",runId:e[1]??""};if(o==="delete"){let n=e.slice(1),t=n.includes("--force"),r=n.includes("--saved"),i=n.includes("--run"),l=n.find(d=>d!=="--force"&&d!=="--saved"&&d!=="--run")??"",c=r&&i?"conflict":r?"saved":i?"run":void 0;return{kind:"delete",target:l,...t?{force:!0}:{},...c?{scope:c}:{}}}if(o==="prune")return{kind:"prune",rawArgs:e.slice(1)};if(o==="save")return{kind:"save",runId:e[1]??"",name:e[2]??""};if(o==="rename")return{kind:"rename",target:e[1]??"",newName:e.slice(2).join(" ").trim()};if(o==="revise"){let n=e.slice(1),t=n.includes("--replace"),r=n.filter(i=>i!=="--replace");return{kind:"revise",target:r[0]??"",request:r.slice(1).join(" ").trim(),...t?{replace:!0}:{}}}return o==="rerun"?{kind:"rerun",runId:e[1]??"",rawArgs:e.slice(2).join(" ").trim()}:o==="create"?{kind:"create",request:e.slice(1).join(" ").trim()}:{kind:"start",name:e[0],rawArgs:e.slice(1).join(" ").trim()}}a(At,"parseWorkflowInvocation");function So(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(So,"parseWorkflowArgs");function Rt(e){return["Revise this existing KodaX dynamic workflow capsule.","Return a complete revised workflow, not a patch.","Preserve the reusable workflow intent, safety requirements, and compatible args shape unless the requested change explicitly requires otherwise.","",`Target: ${e.target}`,"","Original manifest:",JSON.stringify(e.capsule.manifest,null,2),"","Original source:","```js",e.capsule.source,"```","",`Change request: ${e.changeRequest}`].join(`
|
|
169
|
+
`)}a(Rt,"buildWorkflowRevisionRequest");function vi(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(vi,"parseNonNegativeInteger");function Et(e){let o=!1,n=20;for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--all"){o=!0;continue}if(r==="--limit"){let i=vi(e[t+1]);if(i===void 0||i<1)return{all:o,limit:n,error:"--limit expects a positive integer"};n=Math.min(i,200),t+=1;continue}return{all:o,limit:n,error:`unknown option: ${r??""}`}}return{all:o,limit:n}}a(Et,"parseWorkflowRunsOptions");function Wc(e){if(!e)return;let o=/^(\d+)([dh]?)$/i.exec(e.trim());if(!o)return;let n=Number(o[1]);return!Number.isInteger(n)||n<=0?void 0:(o[2]?.toLowerCase()||"d")==="h"?n*60*60*1e3:n*24*60*60*1e3}a(Wc,"parseOlderThanMs");function Tt(e){let o=!1,n,t;for(let r=0;r<e.length;r+=1){let i=e[r];if(i==="--dry-run"){o=!0;continue}if(i==="--keep"){let l=vi(e[r+1]);if(l===void 0)return{dryRun:o,error:"--keep expects a non-negative integer"};n=l,r+=1;continue}if(i==="--older-than"){let l=Wc(e[r+1]);if(l===void 0)return{dryRun:o,error:"--older-than expects a value like 7d or 24h"};t=l,r+=1;continue}return{dryRun:o,error:`unknown option: ${i??""}`}}return o&&n===void 0&&t===void 0?{dryRun:o,keep:50}:{dryRun:o,...n!==void 0?{keep:n}:{},...t!==void 0?{olderThanMs:t}:{}}}a(Tt,"parseWorkflowPruneOptions");var Nc=1440*60*1e3;function Oc(e){return new Map(e.map(o=>[o.runId,o]))}a(Oc,"processSnapshotsByRunId");function Dc(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/Nc}:{}}}a(Dc,"workflowPruneRetentionOptions");function Uc(e,o){let n=new Map(e.map(t=>[t.runId,t]));return o.map(t=>{let r=n.get(t);return{runId:t,workflow:r?.workflow??"?",status:r?.status??"?",endedAt:r?.endedAt??0}})}a(Uc,"workflowPruneCandidateSummaries");function $i(e){return vo({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a($i,"buildSavedWorkflowProcessMetadata");var bi={name:"workflow",description:"Run a dynamic multi-agent workflow (FEATURE_217)",usage:"/workflow [help | list | pending | runs | show | pause | resume | stop | delete | prune | rerun | save | rename | revise | create | <name> [args] | <request>]",argumentHint:"help | list | pending | runs [--all|--limit N] | show [runId] | pause <runId> | resume <runId> | stop [runId] | delete [--force] [--run|--saved] <runId|savedName> | prune --dry-run|--keep N|--older-than Nd | rerun <runId|savedName> [args] | save <runId> <name> | rename <runId|alias|savedName> <newName> | revise [--replace] <runId|alias|savedName> <change> | create <request> | <name> [args]",detailedHelp:Yo,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await Be(Ko(o),"workflow");return}let r=At(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(g.yellow(`
|
|
170
|
+
[workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
|
|
171
|
+
Switch with /agent-mode ama to author and run one via /workflow, or /agent-mode amaw to
|
|
172
|
+
also let the agent start one from natural language.
|
|
173
|
+
`));return}let i=xe(process.cwd()).key,l=H("workflow-runs",i),c=Ne(),d=St(process.cwd()),u=Pr({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async w=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,...t.agentMode==="ama"?{agentModeOverride:"amaw"}:{},prompt:["Set up and run a multi-agent workflow for this task.","First investigate the relevant files and sub-problems with your own tools, then author and run it with run_workflow \u2014 bake the concrete findings (exact paths, the specific dimensions to compare, a real outputSchema) into the child prompts rather than re-delegating the scouting.","",w].join(`
|
|
174
|
+
`)}}),"createWorkflowFromText");if(r.kind==="help"){Yo();return}if(r.kind==="list"){console.log(g.bold(`
|
|
175
|
+
Built-in workflows:`)),console.log(ut(Mo())),console.log(g.bold(`
|
|
176
|
+
Pattern templates:`));for(let b of Lr())console.log(` ${g.cyan(b.name)} ${g.dim(`(${b.pattern})`)} - ${b.description}`);let w=await We(d);w.length>0&&(console.log(g.bold(`
|
|
177
|
+
Saved workflows:`)),console.log($t(w))),console.log(g.dim(`
|
|
173
178
|
Run one with: /workflow <name> <question or JSON args>`)),console.log(g.dim(` Show usage with: /workflow help
|
|
174
|
-
`));return}if(r.kind==="runs"){let w=
|
|
179
|
+
`));return}if(r.kind==="runs"){let w=Et(r.rawArgs);if(w.error){console.log(g.yellow(`
|
|
175
180
|
Usage: /workflow runs [--all] [--limit N]
|
|
176
181
|
${w.error}
|
|
177
|
-
`));return}let
|
|
178
|
-
Active workflow runs:`)),console.log(
|
|
179
|
-
Workflow runs:`)),console.log(
|
|
182
|
+
`));return}let b=Oc(u.listWorkflowProcessSnapshots({activeOnly:!1})),S=c.list().filter(qe);S.length>0&&(console.log(g.bold(`
|
|
183
|
+
Active workflow runs:`)),console.log(pt(S,{processSnapshots:b}))),console.log(g.bold(`
|
|
184
|
+
Workflow runs:`)),console.log(mt(yo(l),{limit:w.all?void 0:w.limit,showLimitHint:!w.all,processSnapshots:b})),console.log();return}if(r.kind==="show"){let w=yo(l),b=r.runId||wt(c.list(),w);if(!b){console.log(g.yellow(`
|
|
180
185
|
No workflow runs yet. Start one with /workflow create <request>.
|
|
181
|
-
`));return}if(!
|
|
182
|
-
Workflow run:`)),console.log(
|
|
186
|
+
`));return}if(!we(b))return;let S=c.get(b),M=ko(l,b),C=u.getWorkflowProcessSnapshot(b);console.log(g.bold(`
|
|
187
|
+
Workflow run:`)),console.log(vt(S,M,{full:r.full===!0,...C?{processSnapshot:C}:{}})),console.log();return}if(r.kind==="pause"){if(!we(r.runId))return;let w=c.pause(r.runId);console.log(w?g.dim(`Paused workflow ${r.runId}.
|
|
183
188
|
`):g.yellow(`No running workflow ${r.runId}.
|
|
184
|
-
`));return}if(r.kind==="resume"){if(!
|
|
189
|
+
`));return}if(r.kind==="resume"){if(!we(r.runId))return;let w=c.resume(r.runId);console.log(w?g.dim(`Resumed workflow ${r.runId}.
|
|
185
190
|
`):g.yellow(`No paused workflow ${r.runId}.
|
|
186
|
-
`));return}if(r.kind==="stop"){let w=r.runId||
|
|
191
|
+
`));return}if(r.kind==="stop"){let w=r.runId||ht(c.list());if(!w){console.log(g.yellow(`
|
|
187
192
|
No active workflow to stop.
|
|
188
|
-
`));return}if(!
|
|
189
|
-
`):
|
|
193
|
+
`));return}if(!we(w))return;let b=await u.stopWorkflow(w,"stopped by user"),S=c.get(w),M=ko(l,w),C=u.getWorkflowProcessSnapshot(w),U=S?.status??M?.status??C?.status,q=S?!qe(S):M?ft(M.status):C!==void 0&&Co(C.status),O=kt(w,yt(S,M));console.log(b?g.dim(`Stopped workflow ${w}.
|
|
194
|
+
`):U&&q?g.yellow(`Workflow ${w} is already ${U}. Next: ${O}.
|
|
190
195
|
`):g.yellow(`No active workflow ${w}.
|
|
191
196
|
`));return}if(r.kind==="delete"){if(!r.target){console.log(g.yellow(`
|
|
192
197
|
Usage: /workflow delete [--force] [--run|--saved] <runId|savedName>
|
|
193
198
|
`));return}if(r.scope==="conflict"){console.log(g.red(`
|
|
194
199
|
[workflow] choose only one delete scope: --run or --saved.
|
|
195
|
-
`));return}let w=a(async(
|
|
200
|
+
`));return}let w=a(async(de,Y)=>{try{let ue=await u.deleteSavedWorkflow(de,Y);if(!ue){console.log(g.red(`
|
|
196
201
|
[workflow] saved workflow deletion is unavailable in this context.
|
|
197
202
|
`));return}console.log(g.dim(`
|
|
198
|
-
Deleted saved workflow ${
|
|
199
|
-
`))}catch(
|
|
200
|
-
[workflow] delete failed: ${
|
|
201
|
-
`))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await w(r.target);return}let
|
|
203
|
+
Deleted saved workflow ${ue.name}.
|
|
204
|
+
`))}catch(ue){let j=ue instanceof Error?ue.message:String(ue);console.log(g.red(`
|
|
205
|
+
[workflow] delete failed: ${j}
|
|
206
|
+
`))}},"deleteSavedWorkflowTarget");if(r.scope==="saved"){await w(r.target);return}let b=c.getWorkflowProcessSnapshot(r.target),S=b?void 0:await u.resolveWorkflowIdentity(r.target),M;if(S?.kind==="ambiguous")if(S.run)M=S.run.runId;else{console.log(g.red(`
|
|
202
207
|
[workflow] ambiguous delete target: ${r.target} matches multiple workflow run/display names${S.matches.includes("saved")?" and a saved workflow name":""}. Use the concrete run id, or --saved when deleting a generated saved capsule.
|
|
203
208
|
`));return}if(S?.kind==="saved"){if(r.scope==="run"){console.log(g.yellow(`
|
|
204
209
|
No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
|
|
205
210
|
`));return}await w(S.savedWorkflow.name,S.savedWorkflow.source);return}if(S?.kind==="missing"){console.log(g.yellow(`
|
|
206
211
|
No persisted workflow run or generated saved workflow ${r.target}.
|
|
207
|
-
`));return}let
|
|
208
|
-
Deleted workflow run ${
|
|
209
|
-
`));return}let
|
|
212
|
+
`));return}let C=S?.kind==="run"?S.runId:M??r.target;if(!we(C))return;if(await u.deleteWorkflowRun(C,{force:r.force})){console.log(g.dim(`
|
|
213
|
+
Deleted workflow run ${C}${r.force?" with --force":""}.
|
|
214
|
+
`));return}let q=b??c.getWorkflowProcessSnapshot(C),O=u.getWorkflowProcessSnapshot(C);if(!O&&!Si(ee(l,C,"run.json"))){console.log(g.yellow(`
|
|
210
215
|
No persisted workflow run or generated saved workflow ${r.target}.
|
|
211
|
-
`));return}if(
|
|
212
|
-
Workflow ${
|
|
213
|
-
`));return}if(
|
|
214
|
-
Workflow ${
|
|
216
|
+
`));return}if(q&&!Co(q.status)){console.log(g.yellow(`
|
|
217
|
+
Workflow ${C} is ${q.status}. Stop it before deleting the run record.
|
|
218
|
+
`));return}if(O&&!Co(O.status)){console.log(g.yellow(`
|
|
219
|
+
Workflow ${C} is a non-terminal persisted ${O.status} record. If it is stale, run /workflow delete --force ${C}.
|
|
215
220
|
`));return}console.log(g.yellow(`
|
|
216
|
-
Workflow ${
|
|
217
|
-
`));return}if(r.kind==="prune"){let w=
|
|
221
|
+
Workflow ${C} is not a deletable terminal run.
|
|
222
|
+
`));return}if(r.kind==="prune"){let w=Tt(r.rawArgs);if(w.error){console.log(g.yellow(`
|
|
218
223
|
Usage: /workflow prune --dry-run | --keep N | --older-than Nd
|
|
219
224
|
${w.error}
|
|
220
225
|
`));return}if(!w.dryRun&&w.keep===void 0&&w.olderThanMs===void 0){console.log(g.yellow(`
|
|
221
226
|
Usage: /workflow prune --dry-run | --keep N | --older-than Nd
|
|
222
227
|
No cleanup rule was provided.
|
|
223
|
-
`));return}let
|
|
228
|
+
`));return}let b=yo(l),S=await u.pruneWorkflowRuns(Dc(w)),M=Uc(b,S.candidates);console.log(g.bold(w.dryRun?`
|
|
224
229
|
Workflow prune preview:`:`
|
|
225
|
-
Workflow prune:`)),console.log(
|
|
230
|
+
Workflow prune:`)),console.log(gt(M)),S.protectedRuns>0&&console.log(g.dim(`
|
|
226
231
|
Protected ${S.protectedRuns} active workflow run${S.protectedRuns===1?"":"s"} from pruning.`)),w.dryRun?console.log(g.dim(`
|
|
227
232
|
Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
|
|
228
233
|
`)):console.log(g.dim(`
|
|
229
234
|
Deleted ${S.deleted} workflow run${S.deleted===1?"":"s"}.
|
|
230
235
|
`));return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(g.yellow(`
|
|
231
236
|
Usage: /workflow save <runId> <name>
|
|
232
|
-
`));return}if(!
|
|
237
|
+
`));return}if(!we(r.runId))return;try{let w=await xr({runDir:ee(l,r.runId),targetDir:d.project??ee(process.cwd(),".kodax","workflows"),name:r.name});console.log(g.green(`
|
|
233
238
|
Saved workflow ${w.name} to ${w.path}
|
|
234
|
-
`))}catch(w){let
|
|
235
|
-
[workflow] save failed: ${
|
|
239
|
+
`))}catch(w){let b=w instanceof Error?w.message:String(w);console.log(g.red(`
|
|
240
|
+
[workflow] save failed: ${b}
|
|
236
241
|
`))}return}if(r.kind==="rename"){if(!r.target||!r.newName){console.log(g.yellow(`
|
|
237
242
|
Usage: /workflow rename <runId|alias|savedName> <newName>
|
|
238
243
|
`));return}let w=await u.resolveWorkflowIdentity(r.target);if(w.kind==="ambiguous"){console.log(g.red(`
|
|
@@ -243,15 +248,15 @@ Usage: /workflow rename <runId|alias|savedName> <newName>
|
|
|
243
248
|
[workflow] rename failed: ${w.runId}
|
|
244
249
|
`));return}console.log(g.green(`
|
|
245
250
|
Renamed workflow run ${w.runId} to ${r.newName.trim()}.
|
|
246
|
-
`));return}try{let
|
|
247
|
-
Renamed saved workflow ${r.target} to ${
|
|
248
|
-
`))}catch(
|
|
251
|
+
`));return}try{let b=await $r({dirs:d,name:w.savedWorkflow.name,newName:r.newName,source:w.savedWorkflow.source});console.log(g.green(`
|
|
252
|
+
Renamed saved workflow ${r.target} to ${b.name}.
|
|
253
|
+
`))}catch(b){let S=b instanceof Error?b.message:String(b);console.log(g.red(`
|
|
249
254
|
[workflow] rename failed: ${S}
|
|
250
255
|
`))}return}if(r.kind==="revise"){if(!r.target||!r.request){console.log(g.yellow(`
|
|
251
256
|
Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
|
|
252
257
|
`));return}let w=Re(n);if(!w){console.log(g.red(`
|
|
253
258
|
[workflow] refusing to revise a workflow without an interactive approval channel.
|
|
254
|
-
`));return}let
|
|
259
|
+
`));return}let b=n.createKodaXOptions;if(!b){console.log(g.red(`
|
|
255
260
|
[workflow] cannot revise - REPL options unavailable in this context.
|
|
256
261
|
`));return}let S=await u.resolveWorkflowIdentity(r.target);if(S.kind==="ambiguous"){console.log(g.red(`
|
|
257
262
|
[workflow] ambiguous revise target: ${r.target} matches both a workflow run id and a saved workflow name.
|
|
@@ -259,82 +264,81 @@ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
|
|
|
259
264
|
[workflow] revise target not found: ${r.target}
|
|
260
265
|
`));return}if(r.replace===!0&&S.kind!=="saved"){console.log(g.red(`
|
|
261
266
|
[workflow] revise --replace requires a saved workflow name target.
|
|
262
|
-
`));return}let
|
|
267
|
+
`));return}let M;try{if(S.kind==="run")M=(await Tn({runDir:S.runDir})).capsule;else{if(S.savedWorkflow.execution!=="capability-generated"){console.log(g.red(`
|
|
263
268
|
[workflow] only generated workflow capsules can be revised.
|
|
264
|
-
`));return}
|
|
265
|
-
[workflow] revise failed: ${
|
|
266
|
-
`));return}let
|
|
267
|
-
[workflow] revise generation failed: ${
|
|
268
|
-
`));return}if(
|
|
269
|
-
Workflow revision not created: ${
|
|
270
|
-
`));return}let
|
|
271
|
-
`));return}let
|
|
272
|
-
Replaced saved workflow ${
|
|
273
|
-
`)),console.log(g.dim(`Previous capsule archived at ${
|
|
274
|
-
`));return}let
|
|
275
|
-
Saved workflow revision ${
|
|
269
|
+
`));return}M=await no(S.savedWorkflow.path)}}catch(F){let eo=F instanceof Error?F.message:String(F);console.log(g.red(`
|
|
270
|
+
[workflow] revise failed: ${eo}
|
|
271
|
+
`));return}let C=Rt({target:r.target,capsule:M,changeRequest:r.request}),U;try{U=await _o({request:C,options:b()})}catch(F){let eo=F instanceof Error?F.message:String(F);console.log(g.red(`
|
|
272
|
+
[workflow] revise generation failed: ${eo}
|
|
273
|
+
`));return}if(U.kind==="declined"){console.log(g.dim(`
|
|
274
|
+
Workflow revision not created: ${U.reason}
|
|
275
|
+
`));return}let q=r.replace===!0&&S.kind==="saved"?S:void 0,O=q?.savedWorkflow.name,de=O??await ui(d,U.manifest.name),Y=de===U.manifest.name?U.manifest:{...U.manifest,name:de};if(!await w(ie(ke({meta:Y,run:U.module.run}),{source:O?`revision-replace:${O}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Y.mayUseWorktree===!0,rawScript:U.source}))){console.log(g.dim(`Workflow revision cancelled.
|
|
276
|
+
`));return}let j={name:de,manifest:Y,source:U.source,intent:hr(Y,{originalRequest:r.request}),...M.inputs!==void 0?{inputs:M.inputs}:{},...M.requires!==void 0?{requires:M.requires}:{},provenance:fi({capsule:M,resolution:S,...O!==void 0?{replacesWorkflowName:O}:{}})};if(q){let F=await br({...j,dirs:d,savedSource:q.savedWorkflow.source});console.log(g.green(`
|
|
277
|
+
Replaced saved workflow ${F.name} with revised capsule at ${F.path}
|
|
278
|
+
`)),console.log(g.dim(`Previous capsule archived at ${F.previousPath}
|
|
279
|
+
`));return}let Ao=await Sr({...j,dir:d.project??ee(process.cwd(),".kodax","workflows")});console.log(g.green(`
|
|
280
|
+
Saved workflow revision ${Ao.name} to ${Ao.path}
|
|
276
281
|
`));return}if(r.kind==="rerun"){if(!r.runId){console.log(g.yellow(`
|
|
277
282
|
Usage: /workflow rerun <runId|savedName> [args]
|
|
278
|
-
`));return}if(!
|
|
283
|
+
`));return}if(!we(r.runId))return;let w=Re(n);if(!w){console.log(g.red(`
|
|
279
284
|
[workflow] refusing to rerun a workflow without an interactive approval channel.
|
|
280
|
-
`));return}let
|
|
285
|
+
`));return}let b=n.createKodaXOptions;if(!b){console.log(g.red(`
|
|
281
286
|
[workflow] cannot start \u2014 REPL options unavailable in this context.
|
|
282
|
-
`));return}let S=(await We(d)).find(
|
|
287
|
+
`));return}let S=(await We(d)).find(L=>L.name===r.runId),M=c.list().some(L=>L.runId===r.runId)||Si(ee(l,r.runId,"run.json"));if(S&&M){console.log(g.red(`
|
|
283
288
|
[workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
|
|
284
289
|
`)),console.log(g.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
|
|
285
|
-
`));return}if(S&&!
|
|
286
|
-
`));return}let J=`run-${Date.now().toString(36)}`,
|
|
287
|
-
Started workflow ${
|
|
288
|
-
`));let
|
|
289
|
-
[workflow] rerun failed: ${
|
|
290
|
-
`));return}let
|
|
291
|
-
`));return}let
|
|
292
|
-
Started workflow ${
|
|
293
|
-
`));let
|
|
290
|
+
`));return}if(S&&!M){let L=await pi(S,w);if(!L)return;let oo=go(r.rawArgs,L.module.meta.name,L.module.meta.description,L.scriptSnapshot?.source),or="agentic";if(!await w(ie(ke(L.module),L.approvalContext))){console.log(g.dim(`Workflow cancelled.
|
|
291
|
+
`));return}let J=`run-${Date.now().toString(36)}`,oa=ee(l,J);console.log(g.dim(`
|
|
292
|
+
Started workflow ${L.module.meta.name} (${J}). Use /workflow show ${J} for status.
|
|
293
|
+
`));let Sn=Ee(n,J,L.module.meta,oo);Sn.running(`Use /workflow show ${J} for status or /workflow stop ${J} to stop.`);let na=Xe(c,Sn,J),nr=c.startFromOptions({module:L.module,args:So(r.rawArgs),options:b(),runId:J,runDir:oa,...L.scriptSnapshot?{scriptSnapshot:L.scriptSnapshot}:{},processMetadata:$i({displayName:L.module.meta.name,savedWorkflowName:S.name,provenance:L.provenance}),onEvent:Ke(n,void 0,{presentation:or,locale:oo,runId:J})});nr.done.finally(na),Te(nr,n,J,Sn,{canRerun:L.scriptSnapshot!==void 0,presentation:or,locale:oo});return}let C;try{C=await Tn({runDir:ee(l,r.runId)})}catch(L){let oo=L instanceof Error?L.message:String(L);console.log(g.red(`
|
|
294
|
+
[workflow] rerun failed: ${oo}
|
|
295
|
+
`));return}let q=ko(l,r.runId)?.scriptSnapshotPath??ee(l,r.runId,"script.js"),O=go(r.rawArgs,C.capsule.manifest.name,C.capsule.manifest.description,C.capsule.source),de="agentic",Y=to(C.capsule,Qo());if(!Y.ok){en(Y);return}if(on(Y),!await w(ie(ke(C.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:C.capsule.manifest.mayUseWorktree===!0,rawScriptPath:q,rawScript:C.capsule.source}))){console.log(g.dim(`Workflow cancelled.
|
|
296
|
+
`));return}let j=`run-${Date.now().toString(36)}`,Ao=ee(l,j);console.log(g.dim(`
|
|
297
|
+
Started workflow ${C.module.meta.name} (${j}). Use /workflow show ${j} for status.
|
|
298
|
+
`));let F=Ee(n,j,C.module.meta,O);F.running(`Use /workflow show ${j} for status or /workflow stop ${j} to stop.`);let eo=Xe(c,F,j),er=c.startFromOptions({module:C.module,args:So(r.rawArgs),options:b(),runId:j,runDir:Ao,scriptSnapshot:{manifest:C.capsule.manifest,source:C.capsule.source},processMetadata:vo({source:"command",displayName:C.module.meta.name,sourceRunId:r.runId}),onEvent:Ke(n,void 0,{presentation:de,locale:O,runId:j})});er.done.finally(eo),Te(er,n,j,F,{canRerun:!0,presentation:de,locale:O});return}if(r.kind==="create"){if(!r.request){console.log(g.yellow(`
|
|
294
299
|
Usage: /workflow create <request>
|
|
295
|
-
`));return}await
|
|
300
|
+
`));return}return await f(r.request)}let m=Re(n);if(!m){console.log(g.red(`
|
|
296
301
|
[workflow] refusing to start a workflow without an interactive approval channel.
|
|
297
|
-
`));return}let
|
|
298
|
-
Unknown workflow: ${r.name}`)),console.log(Qo(oo())),console.log();return}if(k=w,w.execution==="trusted-local"&&!await f(`Run local workflow file? This EXECUTES local code:
|
|
302
|
+
`));return}let h={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},k,y=vr(r.name),v,p;if(!y){let w=(await We(d)).find(b=>b.name===r.name);if(!w){let b=[r.name,r.rawArgs].filter(S=>S&&S.length>0).join(" ").trim();return await f(b)}if(v=w,w.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
|
|
299
303
|
${w.path}`)){console.log(g.dim(`Workflow cancelled.
|
|
300
|
-
`));return}try{if(w.execution==="capability-generated"){let
|
|
304
|
+
`));return}try{if(w.execution==="capability-generated"){let b=await no(w.path),S=to(b,Qo());if(!S.ok){en(S);return}on(S),h={source:`saved:${w.source}`,sandbox:w.execution,mayUseWorktree:b.manifest.mayUseWorktree===!0,rawScriptPath:w.path,rawScript:b.source},k={manifest:b.manifest,source:b.source},p=b.provenance}y=await Po(w.path),w.execution==="trusted-local"&&(h={source:`saved:${w.source}`,sandbox:w.execution,mayUseWorktree:!1})}catch(b){let S=b instanceof Error?b.message:String(b);console.log(g.red(`
|
|
301
305
|
[workflow] failed to load ${w.path}: ${S}
|
|
302
|
-
`));return}}let
|
|
306
|
+
`));return}}let R=n.createKodaXOptions;if(!R){console.log(g.red(`
|
|
303
307
|
[workflow] cannot start \u2014 REPL options unavailable in this context.
|
|
304
|
-
`));return}if(!await
|
|
305
|
-
`));return}let
|
|
306
|
-
Started workflow ${y.meta.name} (${
|
|
307
|
-
`));let
|
|
308
|
-
Current session is already empty.`)),console.log(
|
|
309
|
-
Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(
|
|
310
|
-
[Previous session saved]`))}catch{console.log(
|
|
311
|
-
[Warning: Failed to save previous session]`))}n.startNewSession?.(),o.messages=[],n.clearHistory(),console.log(
|
|
312
|
-
\u2713 Started new session`)),console.log(
|
|
308
|
+
`));return}if(!await m(ie(ke(y),h))){console.log(g.dim(`Workflow cancelled.
|
|
309
|
+
`));return}let P=`run-${Date.now().toString(36)}`,X=ee(l,P);console.log(g.dim(`
|
|
310
|
+
Started workflow ${y.meta.name} (${P}). Use /workflow show ${P} for status.
|
|
311
|
+
`));let V=go(r.rawArgs,y.meta.name,y.meta.description,k?.source),Qe=Ee(n,P,y.meta,V);Qe.running(`Use /workflow show ${P} for status or /workflow stop ${P} to stop.`);let ce="agentic",ea=Xe(c,Qe,P),Qt=c.startFromOptions({module:y,args:So(r.rawArgs),options:R(),runId:P,runDir:X,...k?{scriptSnapshot:k}:{},processMetadata:v?$i({displayName:y.meta.name,savedWorkflowName:v.name,provenance:p}):vo({source:"command",displayName:y.meta.name}),onEvent:Ke(n,void 0,{presentation:ce,locale:V,runId:P})});Qt.done.finally(ea),Te(Qt,n,P,Qe,{canRerun:k!==void 0,presentation:ce,locale:V})},"handler")};import B from"chalk";var Ct={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(B.yellow(`
|
|
312
|
+
Current session is already empty.`)),console.log(B.dim("You can start a new conversation directly."));return}if(n.confirm&&!await n.confirm("Start a new session? This will clear the current conversation history.")){console.log(B.dim(`
|
|
313
|
+
Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(B.dim(`
|
|
314
|
+
[Previous session saved]`))}catch{console.log(B.yellow(`
|
|
315
|
+
[Warning: Failed to save previous session]`))}n.startNewSession?.(),o.messages=[],n.clearHistory(),console.log(B.green(`
|
|
316
|
+
\u2713 Started new session`)),console.log(B.dim("Conversation history cleared. Ready for a fresh start!"))},"handler"),detailedHelp:a(()=>{console.log(B.bold(`
|
|
313
317
|
/new - Start New Session
|
|
314
|
-
`)),console.log("Usage:"),console.log(
|
|
318
|
+
`)),console.log("Usage:"),console.log(B.cyan(" /new")+` - Clear current session and start fresh
|
|
315
319
|
`),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.
|
|
316
|
-
`),console.log("Examples:"),console.log(
|
|
317
|
-
`)),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
|
|
318
|
-
Current session is empty. Start a normal message instead.`));return}if(!n.recoverSession){console.log(
|
|
320
|
+
`),console.log("Examples:"),console.log(B.dim(" User: Help me refactor the authentication module")),console.log(B.dim(" AI: [provides refactoring help]")),console.log(B.cyan(" /new")),console.log(B.dim(" \u2713 Started new session")),console.log(B.dim(" User: Now I need help with database optimization")),console.log(B.dim(` AI: [provides database help]
|
|
321
|
+
`)),console.log("Notes:"),console.log(" \u2022 Automatically saves previous session before clearing"),console.log(" \u2022 Prompts for confirmation if there are messages in the current session"),console.log(" \u2022 Use /load to resume a previous session"),console.log(" \u2022 Use /sessions to see all saved sessions")},"detailedHelp")};import N from"chalk";var tg="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",rg="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function sg(e){return kr(e.error,e.messageCount)}a(sg,"shouldOfferSessionRecovery");var It={name:"recover",aliases:["handoff"],description:"Create a fresh session from safe memory and continue",usage:"/recover [prompt]",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(N.yellow(`
|
|
322
|
+
Current session is empty. Start a normal message instead.`));return}if(!n.recoverSession){console.log(N.red(`
|
|
319
323
|
[Recover is not available in this host]
|
|
320
|
-
`));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(
|
|
321
|
-
Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(
|
|
324
|
+
`));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(N.dim(`
|
|
325
|
+
Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(En(e.join(" ")))}catch(r){let i=r instanceof Error?r.message:String(r);console.log(N.red(`
|
|
322
326
|
[Recover failed] ${i}
|
|
323
|
-
`));return}t==="blocked"?console.log(
|
|
327
|
+
`));return}t==="blocked"?console.log(N.yellow(`
|
|
324
328
|
[Recover blocked by the current session transition guard]
|
|
325
|
-
`)):t==="failed"?console.log(
|
|
329
|
+
`)):t==="failed"?console.log(N.red(`
|
|
326
330
|
[Recover failed]
|
|
327
|
-
`)):t==="empty"&&console.log(
|
|
331
|
+
`)):t==="empty"&&console.log(N.yellow(`
|
|
328
332
|
[Nothing to recover from this session]
|
|
329
|
-
`))},"handler"),detailedHelp:a(()=>{console.log(
|
|
333
|
+
`))},"handler"),detailedHelp:a(()=>{console.log(N.cyan(`
|
|
330
334
|
/recover - Continue in a Fresh Session
|
|
331
|
-
`)),console.log(
|
|
332
|
-
`)}a(
|
|
335
|
+
`)),console.log(N.bold("Usage:")),console.log(N.dim(" /recover ")+"Continue with a safe memory summary"),console.log(N.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(N.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(N.bold("Description:")),console.log(N.dim(" Saves the current session, creates a new local session,")),console.log(N.dim(" carries over only a compact memory summary, and runs the")),console.log(N.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(N.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as jc}from"node:child_process";import{promisify as Fc}from"node:util";import oe from"chalk";var Hc=Fc(jc),_t=1e5;async function ln(e,o){let{stdout:n}=await Hc("git",e,{cwd:o,maxBuffer:67108864});return n}a(ln,"git");async function Bc(e){for(let o of["main","master","develop"])try{return await ln(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(Bc,"detectBaseBranch");async function Gc(e,o){let n=e[0];if(n==="base"){let t=await Bc(o);return{diff:await ln(["diff",`${t}...HEAD`],o),label:`changes against ${t}`}}if(n==="sha"&&e[1])return{diff:await ln(["show",e[1]],o),label:`commit ${e[1]}`};if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await ln(["diff","HEAD"],o),label:"uncommitted changes"}}a(Gc,"getDiff");function zc(e){let o=!1,n=!1,t=!1,r=!1,i=[],l=[],c=a(f=>f==="--workflow"||f==="workflow"?(o=!0,!0):f==="--lean"||f==="lean"?(n=!0,!0):!1,"applyModeArg");for(let f=0;f<e.length;f+=1){let m=e[f];if(m!==void 0){if(r){l.push(m);continue}if(m==="--"){r=!0;continue}if(!c(m)){if(!t&&m==="base"){i.push("base"),t=!0;continue}if(!t&&m==="sha"){for(i.push("sha"),t=!0;f+1<e.length;){let h=e[f+1];if(h===void 0)break;if(h==="--"){r=!0,f+=1;break}if(c(h)){f+=1;continue}i.push(h),f+=1;break}continue}l.push(m)}}}let d=l.join(" ").trim(),u=i[0]==="sha"&&!i[1]?"missing commit hash for sha scope; use /review sha <hash>":void 0;return{workflow:o,lean:n,diffArgs:i,prompt:d.length>0?d:void 0,...u?{error:u}:{}}}a(zc,"parseReviewInvocation");function qc(e,o={}){let n=[`Review ${e} with a dynamic workflow.`,"Create independent reviewers for correctness, security, performance, and design.","Have each reviewer inspect the relevant git diff evidence independently, then synthesize findings.","Final output must lead with verified findings, cite files or diff hunks, and state when no issues are found."];return o.lean===!0&&n.splice(2,0,"Add one lean/minimal-diff reviewer: find code that can be deleted or replaced by existing repo code, stdlib/native platform features, or already-installed dependencies.","Lean review must not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior."),o.customPrompt&&n.push(`User review focus: ${o.customPrompt}`),n.join(`
|
|
336
|
+
`)}a(qc,"buildReviewWorkflowRequest");function Kc(e){return e.length<=_t?e:`${e.slice(0,_t)}
|
|
333
337
|
|
|
334
|
-
[diff truncated to ${
|
|
335
|
-
`)}a(
|
|
338
|
+
[diff truncated to ${_t} chars - review the rest with a narrower scope]`}a(Kc,"truncateDiff");function Xc(e){let o=Kc(e.diff),n=[`Review the following ${e.label} as a third-party reviewer (not the author).`,"Look for bugs (logic errors, null/undefined handling, off-by-one, races),","security (injection, secret exposure, auth bypass), performance hotpaths,","and design (over-engineering vs missing abstraction).","Cite specific diff lines. For each finding, note whether it is verifiable by","tsc / lint / test / build. If the diff is small or risk-free, say so briefly."];return e.lean===!0&&n.push("","Lean pass:","- After correctness/security findings, look for unnecessary code introduced by the diff.","- Prefer deletion or replacement with existing repo code, stdlib/native platform features, or already-installed dependencies when that is verifiably simpler.","- Do not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior.","- For each lean suggestion, say what was skipped or can be removed, and when it should be added back."),e.customPrompt&&n.push("",`User review focus: ${e.customPrompt}`),n.push("","```diff",o,"```"),n.join(`
|
|
339
|
+
`)}a(Xc,"buildReviewPrompt");function xi(e){let o=[e.workflow?"--workflow":void 0,e.lean?"--lean":void 0].filter(n=>n!==void 0);return o.length>0?`/review ${o.join(" ")}`:"/review"}a(xi,"buildDisplayName");function Vc(){console.log(oe.bold(`
|
|
336
340
|
/review - Review Git Changes
|
|
337
|
-
`)),console.log("Usage:"),console.log(oe.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(oe.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(oe.dim(" base ")+"Review changes against the detected base branch"),console.log(oe.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(oe.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(oe.dim(" --workflow ")+"Generate a dynamic multi-reviewer workflow"),console.log(),console.log("Examples:"),console.log(oe.dim(" /review --lean")),console.log(oe.dim(" /review base focus on auth and data loss")),console.log(oe.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(
|
|
341
|
+
`)),console.log("Usage:"),console.log(oe.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(oe.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(oe.dim(" base ")+"Review changes against the detected base branch"),console.log(oe.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(oe.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(oe.dim(" --workflow ")+"Generate a dynamic multi-reviewer workflow"),console.log(),console.log("Examples:"),console.log(oe.dim(" /review --lean")),console.log(oe.dim(" /review base focus on auth and data loss")),console.log(oe.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(Vc,"printReviewHelp");var Ai={name:"review",description:"Review git changes for bugs, security, performance, design, and optional lean diffs",usage:"/review [--lean] [--workflow] [base | sha <hash>] [prompt...]",argumentHint:"[--lean] [--workflow] [base | sha <hash>] [prompt...]",detailedHelp:Vc,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=zc(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r,i;try{({diff:r,label:i}=await Gc(t.diffArgs,n))}catch(l){return{success:!1,message:`/review: git failed - ${l instanceof Error?l.message:String(l)}`}}return r.trim()?t.workflow?{success:!0,workflow:{request:qc(i,{lean:t.lean,customPrompt:t.prompt}),source:"command",displayName:xi(t),processSource:"review"}}:{success:!0,invocation:{prompt:Xc({label:i,diff:r,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:xi(t)}}:{success:!0,message:"No changes to review."}},"handler")};import{constants as Yc}from"node:fs";import{access as Jc,readFile as Zc,writeFile as Qc}from"node:fs/promises";import{join as ed}from"node:path";import ne from"chalk";var Ci=`# KodaX Lean Mode
|
|
338
342
|
|
|
339
343
|
Before writing code:
|
|
340
344
|
1. Do we need to build this at all?
|
|
@@ -354,10 +358,10 @@ Never cut:
|
|
|
354
358
|
After coding:
|
|
355
359
|
- explain what was skipped
|
|
356
360
|
- say when to add it back
|
|
357
|
-
`;function
|
|
358
|
-
`)}a(
|
|
361
|
+
`;function od(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(od,"resolveTargetRoot");async function Ii(e){try{return await Jc(e,Yc.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(Ii,"pathExists");function Ri(e){return console.log(ne.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(Ri,"existingAgentsResult");function cn(e){return e instanceof Error?e.message:String(e)}a(cn,"errorMessage");async function Ei(e,o){let n;try{n=await Ii(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${cn(t)}`}}if(n)return Ri(e);try{await Qc(e,Ci,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?Ri(e):{success:!1,message:`/agents init: failed to write ${e}: ${cn(t)}`}}if(o.reloadAgentsFiles)try{await o.reloadAgentsFiles()}catch(t){return{success:!1,message:`/agents init: created ${e} but failed to reload AGENTS.md files: ${cn(t)}`}}return console.log(ne.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(Ei,"initializeAgentsFile");function nd(e,o){return[`Review and update the target project's AGENTS.md at ${e}.`,"","Goal: ensure the project instructions include KodaX Lean Mode guidance, without duplicating equivalent existing guidance.","","Required behavior:","- First inspect the existing AGENTS.md content and decide whether lean/minimal-diff constraints are already present.","- If equivalent guidance already exists, leave the file unchanged and explain that no change was needed.","- If guidance is missing or partial, edit AGENTS.md with the smallest clear diff that merges the Lean Mode ideas into the existing structure.","- Do not add duplicate headings or repeat bullets that already exist with equivalent meaning.","- Preserve existing project-specific instructions and ordering unless a small local insertion is clearly better.","- Never weaken trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior.","","Lean Mode guidance to merge when missing:","","```markdown",Ci.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
|
|
362
|
+
`)}a(nd,"buildLeanReviewPrompt");function Ti(){console.log(ne.bold(`
|
|
359
363
|
/agents - Manage Target Project Instructions
|
|
360
|
-
`)),console.log("Usage:"),console.log(ne.cyan(" /agents init")),console.log(ne.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ne.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ne.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ne.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ne.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ne.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(Ti,"printAgentsHelp");var Mt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:Ti,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return Ti(),!0;let r=
|
|
364
|
+
`)),console.log("Usage:"),console.log(ne.cyan(" /agents init")),console.log(ne.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(ne.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(ne.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(ne.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(ne.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(ne.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(Ti,"printAgentsHelp");var Mt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:Ti,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return Ti(),!0;let r=od(o),i=ed(r,"AGENTS.md");if(t==="init")return await Ei(i,n);let l;try{l=await Ii(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${cn(d)}`}}if(!l)return await Ei(i,n);let c;try{c=await Zc(i,"utf8")}catch(d){let u=d instanceof Error?d.message:String(d);return{success:!1,message:`/agents lean: failed to read ${i}: ${u}`}}return{success:!0,invocation:{prompt:nd(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function un(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(un,"getPastedTextRefNumLines");function td(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(td,"formatPastedTextRef");function rd(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(rd,"formatTruncatedTextRef");var sd=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function id(e){let o=[],n=new RegExp(sd.source,"g");for(let t of e.matchAll(n)){let r=Number.parseInt(t[2]??"0",10);!Number.isFinite(r)||r<=0||o.push({id:r,kind:t[1],match:t[0],index:t.index??0})}return o}a(id,"parseReferences");function ad(e,o){let n=id(e);if(n.length===0)return e;let t=a(i=>o instanceof Map?o.get(i):o[i],"getContent"),r=e;for(let i=n.length-1;i>=0;i--){let l=n[i];if(l.kind==="Image")continue;let c=t(l.id);!c||c.type!=="text"||(r=r.slice(0,l.index)+c.content+r.slice(l.index+l.match.length))}return r}a(ad,"expandPastedTextRefs");var ld=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,cd=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function dd(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(dd,"isAtWordBoundaryAfter");function ud(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(ud,"isAtWordBoundaryBefore");function bg(e,o){if(o<=0||!dd(e,o))return null;let t=e.slice(0,o).match(ld);if(!t)return null;let r=o-t[0].length,i=Number.parseInt(t[2]??"0",10);return!Number.isFinite(i)||i<=0?null:{start:r,end:o,id:i,kind:t[1]}}a(bg,"findPlaceholderBeforeCursor");function xg(e,o){if(o>=e.length||!ud(e,o))return null;let t=e.slice(o).match(cd);if(!t)return null;let r=Number.parseInt(t[2]??"0",10);return!Number.isFinite(r)||r<=0?null:{start:o,end:o+t[0].length,id:r,kind:t[1]}}a(xg,"findPlaceholderAfterCursor");function Ag(e){return e.length>800||un(e)>2}a(Ag,"shouldReplacePasteWithPlaceholder");function Rg(e,o){if(e.length<=1e4)return{truncatedText:e,placeholderContent:""};let n=Math.floor(1e3/2),t=Math.floor(1e3/2),r=e.slice(0,n),i=e.slice(-t),l=e.slice(n,-t),c=un(l),d=rd(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(Rg,"maybeTruncateLongInput");var Pt=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=un(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:td(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=un(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 ad(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())}},dn=null;function Eg(){return dn===null&&(dn=new Pt),dn}a(Eg,"getOrCreateModulePasteStore");function _i(){return dn??void 0}a(_i,"getActivePasteStore");import{createHash as fd}from"node:crypto";import{mkdir as md,readdir as pd,readFile as gd,stat as wd,unlink as hd,writeFile as yd}from"node:fs/promises";import*as Lt from"node:path";var kd="paste-cache",vd=720*60*60*1e3;function Wt(){return H(kd)}a(Wt,"getPasteCacheDir");function Mi(e){return Lt.join(Wt(),`${e}.txt`)}a(Mi,"getPastePath");function Pg(e){return fd("sha256").update(e).digest("hex").slice(0,16)}a(Pg,"hashPastedText");async function Lg(e,o){try{let n=Wt();return await md(n,{recursive:!0}),await yd(Mi(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(Lg,"storePastedText");async function Pi(e){try{return await gd(Mi(e),{encoding:"utf8"})}catch{return null}}a(Pi,"retrievePastedText");async function Wg(e=vd){let o=Wt(),n=Date.now()-e,t=0,r=0,i;try{i=await pd(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=Lt.join(o,l);try{(await wd(c)).mtimeMs<n&&(await hd(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(Wg,"cleanupOldPastes");import*as jt from"path";import*as Wi from"os";function Sd(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Sd,"escapeRegExp");function $d(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Sd(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a($d,"deriveArgumentHintFromUsage");function Nt(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??$d(e.usage,e.name)}}a(Nt,"toCommandDefinition");function Ot(e){for(let o of Li)try{let n=Nt(o,"builtin");e.register(n)}catch(n){console.error(`Failed to register command "${o.name}":`,n)}}a(Ot,"registerBuiltinCommands");import*as ae from"fs";import*as Ce from"path";function bd(e){if(Array.isArray(e))return e.map(o=>String(o).trim()).filter(o=>o.length>0);if(typeof e=="string")return e.split(",").map(o=>o.trim()).filter(o=>o.length>0)}a(bd,"normalizeAliases");function xd(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(xd,"normalizePriority");function Ad(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:fr(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:mr(e.hooks),frontmatter:e}}a(Ad,"buildExecutionMetadata");function Rd(e,o){try{let n=ae.readFileSync(e,"utf-8"),[t,r]=ur(n),i=t??{},l=Ce.basename(e,".md"),c=typeof i.name=="string"&&i.name.trim()?i.name.trim():l;if(!c||r.trim().length===0)return;let d=typeof i.description=="string"&&i.description.trim()?i.description.trim():`Custom command from ${o} level`;return{name:c,description:d,aliases:bd(i.aliases),priority:xd(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Ad(i)}}catch(n){console.error(`Error parsing command file ${e}:`,n);return}}a(Rd,"parseCommandFile");function Dt(e){let o=[],n=new Set;for(let t=0;t<e.length;t++){let r=e[t],i=typeof r=="string"?r:r.path,l=typeof r=="string"?t===0?"user":"project":r.location;if(!ae.existsSync(i))continue;let c=Ce.resolve(i);try{c=ae.realpathSync.native?.(i)??ae.realpathSync(i)}catch{c=Ce.resolve(i)}if(!n.has(c)){n.add(c);try{let d=ae.readdirSync(i);for(let u of d){if(!u.endsWith(".md"))continue;let f=Ce.join(i,u),m=Rd(f,l);m&&o.push(m)}}catch(d){console.error(`Error scanning directory ${i}:`,d)}}}return o}a(Dt,"discoverCommands");function Ut(e,o){for(let n of e)try{o.register({name:n.name,aliases:n.aliases,description:n.description,source:"extension",priority:n.priority,location:n.location,path:n.path,userInvocable:n.execution.userInvocable,disableModelInvocation:n.execution.disableModelInvocation,allowedTools:n.execution.allowedTools,context:n.execution.context,agent:n.execution.agent,argumentHint:n.execution.argumentHint,model:n.execution.model,hooks:n.execution.hooks,frontmatter:n.frontmatter,handler:a(async()=>({success:!0,invocation:{...n.execution,prompt:n.content,source:"prompt",displayName:n.name,path:n.path}}),"handler")})}catch(t){console.error(`Error registering command ${n.name}:`,t)}}a(Ut,"registerDiscoveredCommands");function Ni(e,o){Ot(e);try{let n=Wi.homedir(),t=o??process.cwd(),r=Dt([{path:jt.join(t,".kodax","commands"),location:"project"},{path:H("commands"),location:"user"},{path:jt.join(n,".agents","commands"),location:"user"}]);Ut(r,e)}catch(n){console.error("Failed to discover commands:",n)}}a(Ni,"registerAllCommands");function Ed(e){return{global:e.filter(o=>o.scope==="global").length,directory:e.filter(o=>o.scope==="directory").length,project:e.filter(o=>o.scope==="project").length}}a(Ed,"summarizeAgentsFiles");function Td(e,o,n){if(!Number.isFinite(o)||o<=0||n<=0)return{...e,enabled:!0};let t=o/n*100,r=Math.max(1,Math.ceil(t)-1);return{...e,enabled:!0,triggerPercent:Math.min(e.triggerPercent,r)}}a(Td,"createManualCompactionConfig");function Ft(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${tt(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(Ft,"printWorkspaceUnchangedNote");var Li=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];le.size===0&&fn(),le.has(o.toLowerCase())||!!mn(o)?Gt(o):Fd(o)}else jd()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
361
365
|
/help - Show Command Help
|
|
362
366
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /help ")+"Show all available commands"),console.log(s.dim(" /help <command> ")+"Show detailed help for a specific command"),console.log(s.dim(" /<command> help ")+"Shortcut for command-specific help"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /help ")+"# List all commands"),console.log(s.dim(" /help mode ")+"# Detailed help for /mode"),console.log(s.dim(" /mode help ")+"# Same detailed help shortcut"),console.log()},"detailedHelp")},{name:"exit",aliases:["quit","q","bye"],description:"Exit interactive mode",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(s.green(`
|
|
363
367
|
Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
@@ -376,15 +380,15 @@ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{consol
|
|
|
376
380
|
Pasted content in this session:
|
|
377
381
|
`));for(let r of t){let i=r.content?.length??0,l=r.contentHash?` (hash ${r.contentHash.slice(0,8)})`:"";console.log(` ${s.cyan(`#${r.id}`)} ${r.type} ${i} chars${l}`)}console.log();return}if(o==="show"){let t=e[1],r=t?Number.parseInt(t,10):NaN;if(!Number.isFinite(r)||r<=0){console.log(s.yellow(`
|
|
378
382
|
Usage: /paste show <id>`));return}let i=n.get(r);if(!i){console.log(s.dim(`
|
|
379
|
-
[No paste registered with id #${r}]`));return}let l=i.content??"";if(!l&&i.contentHash){let c=await
|
|
383
|
+
[No paste registered with id #${r}]`));return}let l=i.content??"";if(!l&&i.contentHash){let c=await Pi(i.contentHash);c&&(l=c)}if(!l){console.log(s.yellow(`
|
|
380
384
|
[Paste #${r} has no stored content (hash ${i.contentHash??"n/a"})]`));return}console.log(s.bold(`
|
|
381
385
|
Pasted text #${r} (${l.length} chars):
|
|
382
386
|
`)),console.log(l),console.log();return}console.log(s.yellow(`
|
|
383
387
|
[Unknown /paste subcommand: ${o}]`)),console.log(s.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
384
388
|
/paste - Inspect stored paste contents
|
|
385
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(s.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(s.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(s.dim(" to the LLM on submit. Use this command to see what was captured.")),console.log()},"detailedHelp")},{name:"compact",description:"Manually trigger context compaction",usage:"/compact [instructions]",handler:a(async(e,o,n,t)=>{try{let r=await
|
|
386
|
-
[Provider not found: ${i}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??
|
|
387
|
-
[Compacting conversation...]`)),n.startCompacting?.();try{let m=await
|
|
389
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" When you paste more than ~800 chars into the input bar, KodaX")),console.log(s.dim(" replaces the pasted text with a `[Pasted text #N +K lines]` anchor")),console.log(s.dim(" to keep the UI responsive. The full content is preserved and sent")),console.log(s.dim(" to the LLM on submit. Use this command to see what was captured.")),console.log()},"detailedHelp")},{name:"compact",description:"Manually trigger context compaction",usage:"/compact [instructions]",handler:a(async(e,o,n,t)=>{try{let r=await zr(o.gitRoot),i=t.provider,l=xn(i);if(!l){console.log(s.red(`
|
|
390
|
+
[Provider not found: ${i}]`));return}let c=e.length>0?e.join(" "):void 0,d=r.contextWindow??l.getEffectiveContextWindow?.(t.model)??l.getContextWindow?.()??2e5,u=o.contextTokenSnapshot?.currentTokens??An(o.messages),f=Td(r,u,d);console.log(s.dim(`
|
|
391
|
+
[Compacting conversation...]`)),n.startCompacting?.();try{let m=await wr(o.messages,f,l,d,c,void 0,u,Rr,Er,t.model);if(!m.compacted){console.log(s.green(`
|
|
388
392
|
[No compaction needed]`)),console.log(s.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
|
|
389
393
|
`));return}o.messages=m.messages,o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:m.tokensAfter,source:"estimate"},n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(s.green(`
|
|
390
394
|
[Compaction complete: ${Math.round(m.tokensBefore/1e3)}k -> ${Math.round(m.tokensAfter/1e3)}k tokens, ${Math.round((1-m.tokensAfter/m.tokensBefore)*100)}% reduced]`)),console.log()}finally{n.stopCompacting?.()}}catch(r){let i=r instanceof Error?r.message:String(r);console.log(s.red(`
|
|
@@ -393,33 +397,33 @@ Pasted text #${r} (${l.length} chars):
|
|
|
393
397
|
/compact - Manual Context Compaction
|
|
394
398
|
`)),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:a(async(e,o,n,t)=>{console.log(s.cyan(`
|
|
395
399
|
Reloading project rule files and runtime extensions...
|
|
396
|
-
`));try{let r=await n.reloadAgentsFiles?.()??[],i=
|
|
400
|
+
`));try{let r=await n.reloadAgentsFiles?.()??[],i=Ed(r),l=te(),c=l?Ve(l).loadedExtensions.length:0,d=l?Ve(l).failures.length:0,u=0,f=0;if(l){await l.reloadExtensions({continueOnError:!0});let m=Ve(l);u=c||m.loadedExtensions.length,f=Math.max(0,m.failures.length-d)}if(r.length===0&&u===0){console.log(s.yellow(`No project rule files or active extensions found.
|
|
397
401
|
`)),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:
|
|
398
402
|
`)),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)`)),f>0&&console.log(s.yellow(` - Failures: ${f} 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.
|
|
399
403
|
`)),console.log(s.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
400
404
|
/reload - Reload Project Rules
|
|
401
405
|
`)),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:a(async()=>{let e=te();if(!e){console.log(s.yellow(`
|
|
402
406
|
[No active extension runtime]
|
|
403
|
-
`));return}let o=
|
|
407
|
+
`));return}let o=Ve(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(s.bold(`
|
|
404
408
|
Extension Runtime:
|
|
405
|
-
`)),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=
|
|
409
|
+
`)),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=Xd(t.metadata);console.log(s.dim(` - ${t.id} [${t.kinds.join(", ")}]${r?` ${r}`:""}`))}console.log()}if(n.length>0){console.log(s.bold("Extension Tools:"));for(let t of n){let r=t.shadowedSources.length>0?` overrides: ${t.shadowedSources.map(i=>i.label??i.id??i.kind).join(", ")}`:"";console.log(s.dim(` - ${t.name}${r}`))}console.log()}if(o.hooks.length>0){console.log(s.bold("Hook Participation:"));for(let t of o.hooks)console.log(s.dim(` - ${t.hook} [#${t.order}] ${t.source.label}`));console.log()}if(o.failures.length>0){console.log(s.bold("Recent Failures:"));for(let t of o.failures.slice(-10))console.log(s.dim(` - [${t.stage}] ${t.source.label}: ${t.target} -> ${t.message}`));console.log()}},"handler")},{name:"status",aliases:["info","ctx"],description:"Show current session status",handler:a(async(e,o,n,t)=>{await Hd(o,t,e)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
406
410
|
/status - Show Session Status
|
|
407
411
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /status ")+"Display current session information"),console.log(s.dim(" /status workspace ")+"Show deeper workspace/runtime details"),console.log(s.dim(" /info, /ctx ")+"Aliases for /status"),console.log(),console.log(s.bold("Displays:")),console.log(s.dim(" - Current mode (code/ask)")),console.log(s.dim(" - Session ID")),console.log(s.dim(" - Message count")),console.log(s.dim(" - Estimated token usage")),console.log(s.dim(" - Current workspace truth")),console.log(s.dim(" - Session timestamps")),console.log(s.dim(" - Repo-intelligence mode and active runtime summary")),console.log()},"detailedHelp")},{name:"mcp",description:"Show MCP server status or refresh catalogs",usage:"/mcp [status|refresh]",handler:a(async e=>{let o=te();if(!o){console.log(s.yellow(`
|
|
408
|
-
[No extension runtime active \u2014 MCP is not available]`));return}let t=
|
|
412
|
+
[No extension runtime active \u2014 MCP is not available]`));return}let t=Ve(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(s.dim(`
|
|
409
413
|
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(`
|
|
410
414
|
MCP Status
|
|
411
415
|
`)),!t){console.log(s.yellow(" No MCP provider registered.")),console.log(s.dim(` Add mcpServers to ~/.kodax/config.json to enable MCP.
|
|
412
416
|
`));return}let l=t.metadata?.servers??[];console.log(s.dim(` Servers: ${l.length}`)),console.log();for(let c of l){let d=c.status==="ready"?s.green:c.status==="error"?s.red:s.yellow;console.log(` ${s.bold(c.serverId)} ${d(c.status)} connect=${s.dim(c.connect)}`),c.cachedAt&&console.log(s.dim(` tools=${c.tools} resources=${c.resources} prompts=${c.prompts}`)),c.lastError&&console.log(s.red(` error: ${c.lastError}`))}console.log()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
413
417
|
/mcp - MCP Server Management
|
|
414
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /mcp ")+"Show MCP server status"),console.log(s.dim(" /mcp status ")+"Same as /mcp"),console.log(s.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),console.log()},"detailedHelp")},{name:"repo-intel",description:"Inspect built-in repo intelligence",usage:"/repo-intel [status|mode|trace]",handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(r==="status"){let i=await
|
|
418
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /mcp ")+"Show MCP server status"),console.log(s.dim(" /mcp status ")+"Same as /mcp"),console.log(s.dim(" /mcp refresh ")+"Force-refresh all MCP server catalogs"),console.log()},"detailedHelp")},{name:"repo-intel",description:"Inspect built-in repo intelligence",usage:"/repo-intel [status|mode|trace]",handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(r==="status"){let i=await Io({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:Bt(o)});ji(i);return}if(r==="mode"){if(e.length===1){console.log(s.dim(`
|
|
415
419
|
Current repo-intelligence mode: ${s.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(s.dim(`Usage: /repo-intel mode [auto|full|light|off]
|
|
416
|
-
`));return}let i=
|
|
420
|
+
`));return}let i=Md(e[1]);if(!i){console.log(s.red(`
|
|
417
421
|
[Invalid repo-intelligence mode: ${e[1]}]`)),console.log(s.dim(`Usage: /repo-intel mode [auto|full|light|off]
|
|
418
|
-
`));return}let l=Ui({mode:i},{repoIntelligenceMode:i},n,t);
|
|
422
|
+
`));return}let l=Ui({mode:i},{repoIntelligenceMode:i},n,t);ye(`Repo intelligence mode: ${i}`,l);return}if(r==="trace"){let i=e[1]?.toLowerCase();if(!i){console.log(s.dim(`
|
|
419
423
|
Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(s.dim(`Usage: /repo-intel trace [on|off|toggle]
|
|
420
|
-
`));return}let l=
|
|
424
|
+
`));return}let l=Pd(i,t.repoIntelligenceTrace??!1);if(l===null){console.log(s.red(`
|
|
421
425
|
[Invalid trace value: ${e[1]}]`)),console.log(s.dim(`Usage: /repo-intel trace [on|off|toggle]
|
|
422
|
-
`));return}let c=Ui({trace:l},{repoIntelligenceTrace:l},n,t);
|
|
426
|
+
`));return}let c=Ui({trace:l},{repoIntelligenceTrace:l},n,t);ye(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(s.yellow(`
|
|
423
427
|
[Repo intelligence refresh is automatic in this build]`)),console.log(s.dim(`Use /repo-intel status to inspect the current engine state.
|
|
424
428
|
`));return}console.log(s.red(`
|
|
425
429
|
[Unknown /repo-intel subcommand: ${e[0]}]`)),console.log(s.dim(`Usage: /repo-intel [status|mode|trace]
|
|
@@ -427,7 +431,7 @@ Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)
|
|
|
427
431
|
/repo-intel - Built-in Repo Intelligence
|
|
428
432
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /repo-intel ")+"Show built-in repo-intelligence status"),console.log(s.dim(" /repo-intel status ")+"Show built-in engine status without probing an external daemon"),console.log(s.dim(" /repo-intel mode auto ")+"Let KodaX pick the best repo-intelligence engine"),console.log(s.dim(" /repo-intel mode full ")+"Prefer the full repo-intelligence engine"),console.log(s.dim(" /repo-intel mode light ")+"Use the light repo-intelligence engine"),console.log(s.dim(" /repo-intel mode off ")+"Disable repo-intelligence injection"),console.log(s.dim(" /repo-intel trace on|off|toggle ")+"Toggle repo-intelligence trace output"),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - /status now includes a compact repo-intelligence summary.")),console.log(s.dim(" - External repointel endpoint/bin controls are deprecated for built-in KodaX.")),console.log()},"detailedHelp")},{name:"repointel",aliases:["ri"],description:"Deprecated alias for /repo-intel status",usage:"/repointel [status]",userInvocable:!1,handler:a(async(e,o,n,t)=>{let r=e[0]?.toLowerCase()??"status";if(console.log(s.yellow(`
|
|
429
433
|
[/repointel is deprecated; use /repo-intel status]
|
|
430
|
-
`)),r==="status"){let i=await
|
|
434
|
+
`)),r==="status"){let i=await Io({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:Bt(o)});ji(i);return}if(r==="mode"){console.log(s.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
|
|
431
435
|
`));return}if(r==="trace"){console.log(s.dim(`Use /repo-intel trace [on|off|toggle] to change repo-intelligence trace output.
|
|
432
436
|
`));return}if(r==="warm"||r==="endpoint"||r==="bin"){console.log(s.dim("Repo intelligence is built into KodaX; external daemon/bin controls are no longer a normal REPL command surface.")),console.log(s.dim(`Use /repo-intel status to inspect the active engine.
|
|
433
437
|
`));return}console.log(s.dim(`Usage: /repointel [status]
|
|
@@ -443,8 +447,8 @@ Child-task provider fallback: `)+s.green("on")),console.log(s.dim(" Order: ")+s
|
|
|
443
447
|
[/fallback: no provider ids given]`)),console.log(s.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
|
|
444
448
|
`));return}ve({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(s.green(`
|
|
445
449
|
\u2713 `)+s.dim("Child-task fallback order: ")+s.cyan(l.join(" \u2192 "))),console.log(s.dim(` Provider ids must match your configured providers (see /status or kodax doctor).
|
|
446
|
-
`))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto)",usage:"/mode [plan|accept-edits|auto]",handler:a(async(e,o,n,t)=>{if(e.length===0){let i=
|
|
447
|
-
Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];
|
|
450
|
+
`))},"handler")},{name:"mode",description:"Show or switch permission mode (plan/accept-edits/auto)",usage:"/mode [plan|accept-edits|auto]",handler:a(async(e,o,n,t)=>{if(e.length===0){let i=so(t.permissionMode,"accept-edits")??"accept-edits";console.log(s.dim(`
|
|
451
|
+
Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];No.includes(r)?(t.permissionMode=r,n.setPermissionMode?.(r),Kn(r),console.log(s.cyan(`
|
|
448
452
|
[Switched to ${r} mode] (saved)`))):console.log(s.red(`
|
|
449
453
|
[Unknown mode: ${e[0]}. Use: plan | accept-edits | auto]`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
450
454
|
/mode - Switch Permission Mode
|
|
@@ -459,7 +463,7 @@ Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denia
|
|
|
459
463
|
[auto-mode classifier stats]`)),console.log(s.dim(` engine: ${s.cyan(t.engine)}`)),console.log(s.dim(" Denial tracker:")),console.log(s.dim(` consecutive blocks: ${t.denials.consecutive} / 3`)),console.log(s.dim(` cumulative blocks: ${t.denials.cumulative} / 20`)),console.log(s.dim(" Circuit breaker:")),console.log(s.dim(` errors in window: ${t.breaker.timestamps.filter(r=>r>=Date.now()-600*1e3).length} / 5 (10 min)`)),console.log(),t.engine==="rules"&&console.log(s.yellow(" \u21AA engine has downgraded to rules. /auto-engine llm to flip back.")),console.log()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
460
464
|
/auto-denials - Auto-Mode Classifier Diagnostic Dump
|
|
461
465
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto-denials ")+"Print engine + tracker + breaker counters"),console.log(),console.log(s.bold("Thresholds (FEATURE_092):")),console.log(s.dim(" - 3 consecutive blocks \u2192 engine downgrade to rules")),console.log(s.dim(" - 20 cumulative blocks \u2192 engine downgrade to rules")),console.log(s.dim(" - 5 errors in 10-min \u2192 circuit breaker trips \u2192 engine downgrade")),console.log()},"detailedHelp")},{name:"save",description:"Save current session",handler:a(async(e,o,n)=>{await n.saveSession(),console.log(s.green(`
|
|
462
|
-
[Session saved]`)),
|
|
466
|
+
[Session saved]`)),Ft(o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
463
467
|
/save - Save Current Session
|
|
464
468
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /save ")+"Save current conversation to session storage"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Manually saves the current conversation session.")),console.log(s.dim(" Sessions are auto-saved after each message, but you can")),console.log(s.dim(" use this to ensure the session is persisted.")),console.log(s.dim(" Saving updates session storage only; the current workspace stays untouched.")),console.log(),console.log(s.dim(" See also: /help load, /help sessions")),console.log()},"detailedHelp")},{name:"load",aliases:["resume"],description:"Load a session",usage:"/load <session-id>",handler:a(async(e,o,n)=>{if(e.length===0){console.log(s.red(`
|
|
465
469
|
[Usage: /load <session-id>]`)),await n.listSessions();return}await n.loadSession(e[0])==="missing"&&console.log(s.red(`
|
|
@@ -484,12 +488,12 @@ Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denia
|
|
|
484
488
|
/history - Show Conversation History
|
|
485
489
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /history ")+"Display recent messages in current session"),console.log(s.dim(" /hist ")+"Alias for /history"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the last 20 messages in the current conversation.")),console.log(s.dim(" Useful for reviewing what has been discussed.")),console.log()},"detailedHelp")},{name:"delete",aliases:["rm","del"],description:"Delete a session",usage:"/delete <session-id> or /delete all",handler:a(async(e,o,n)=>{if(e.length===0){console.log(s.red(`
|
|
486
490
|
[Usage: /delete <session-id> or /delete all]`)),await n.listSessions?.();return}e[0]==="all"?(await n.deleteAllSessions?.(),console.log(s.green(`
|
|
487
|
-
[All sessions deleted]`)),
|
|
488
|
-
[Session deleted: ${e[0]}]`)),
|
|
491
|
+
[All sessions deleted]`)),Ft(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
|
|
492
|
+
[Session deleted: ${e[0]}]`)),Ft(o))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
489
493
|
/delete - Delete Saved Sessions
|
|
490
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /delete ")+"Show usage (lists sessions)"),console.log(s.dim(" /delete <id> ")+"Delete a specific session"),console.log(s.dim(" /delete all ")+"Delete ALL sessions"),console.log(s.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(s.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" Deletes saved session records only.")),console.log(s.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(s.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=
|
|
494
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /delete ")+"Show usage (lists sessions)"),console.log(s.dim(" /delete <id> ")+"Delete a specific session"),console.log(s.dim(" /delete all ")+"Delete ALL sessions"),console.log(s.dim(" /rm, /del ")+"Aliases for /delete"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /delete 20260219_143052")+" # Delete specific session"),console.log(s.dim(" /delete all ")+"# Delete all sessions"),console.log(),console.log(s.bold("Workspace behavior:")),console.log(s.dim(" Deletes saved session records only.")),console.log(s.dim(" Current workspaces and checkouts remain untouched.")),console.log(),console.log(s.yellow(" Warning: /delete all cannot be undone!")),console.log()},"detailedHelp")},{name:"model",aliases:["m"],description:"Show or switch provider/model",usage:"/model [<provider>[/<model>] | /<model>]",handler:a(async(e,o,n,t)=>{let r=Wo().providerModels;if(e.length===0){console.log(s.bold(`
|
|
491
495
|
Available Providers:
|
|
492
|
-
`));let c=
|
|
496
|
+
`));let c=jr(r);for(let d of c){let u=d.configured?s.green("[configured]"):s.red("[not configured]"),f=d.custom?s.yellow(" [custom]"):"",m=d.name===t.provider,h=m?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${h} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${_n(d.capabilityProfile)}`));let k=Oe(d.name,r),y=m?t.model:null;for(let v of k){let R=m&&(y===v||!y&&v===d.model)?s.cyan(">"):" ";console.log(` ${R} ${v}`)}console.log()}console.log(s.dim(`Current: provider=${t.provider}${t.model?`, model=${t.model}`:""}`)),console.log(s.dim("Usage:")),console.log(s.dim(" /model <provider> Switch provider")),console.log(s.dim(" /model <provider>/<model> Switch to specific model")),console.log(s.dim(` /model /<model> Switch model within current provider
|
|
493
497
|
`));return}let i=(e[0]??"").trim();if(!i)return;if(i.startsWith("/")){let c=i.slice(1);if(!c){console.log(s.red(`
|
|
494
498
|
[Missing model name after /]`));return}let d=Oe(t.provider,r);if(!d.includes(c)){console.log(s.red(`
|
|
495
499
|
[Unknown model: ${c}]`)),console.log(s.dim(`Available models for ${t.provider}: ${d.join(", ")}
|
|
@@ -505,93 +509,93 @@ Available Providers:
|
|
|
505
509
|
[Unknown provider: ${l}]`)),console.log(s.dim(`Available: ${_e().join(", ")}
|
|
506
510
|
`)))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
507
511
|
/model - Switch LLM Provider/Model
|
|
508
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /model ")+"List all providers with models"),console.log(s.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(s.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(s.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /model ")+"# See available providers & models"),console.log(s.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(s.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(s.dim(" /model /claude-opus-4-6 ")+"# Switch to Opus within current provider"),console.log()},"detailedHelp")},{name:"provider",description:"Inspect provider semantics and policy constraints",usage:"/provider [<provider>[/<model>]]",handler:a(async(e,o,n,t)=>{let r=(e[0]??"").trim();if(r==="forget-capability"){let f=(e[1]??"").trim();if(!f){
|
|
512
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /model ")+"List all providers with models"),console.log(s.dim(" /model <provider> ")+"Switch to a provider (default model)"),console.log(s.dim(" /model <provider>/<model> ")+"Switch to a specific model"),console.log(s.dim(" /model /<model> ")+"Switch model within current provider"),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /model ")+"# See available providers & models"),console.log(s.dim(" /model anthropic ")+"# Switch to Anthropic (default model)"),console.log(s.dim(" /model openai/gpt-5.4 ")+"# Switch to OpenAI GPT-5.4"),console.log(s.dim(" /model /claude-opus-4-6 ")+"# Switch to Opus within current provider"),console.log()},"detailedHelp")},{name:"provider",description:"Inspect provider semantics and policy constraints",usage:"/provider [<provider>[/<model>]]",handler:a(async(e,o,n,t)=>{let r=(e[0]??"").trim();if(r==="forget-capability"){let f=(e[1]??"").trim();if(!f){Rn(),console.log(s.dim(`
|
|
509
513
|
[Cleared all learned capability overrides]
|
|
510
|
-
`));return}let m=f.indexOf("/"),h=m===-1?f:f.slice(0,m),
|
|
511
|
-
[Cleared learned capability overrides for ${h}${
|
|
512
|
-
`));return}if(r==="probe"){let f=
|
|
513
|
-
[Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let h=await
|
|
514
|
-
`))}catch(h){let
|
|
515
|
-
[Probe failed: ${
|
|
514
|
+
`));return}let m=f.indexOf("/"),h=m===-1?f:f.slice(0,m),k=m===-1?void 0:f.slice(m+1)||void 0;Rn(h,k),console.log(s.dim(`
|
|
515
|
+
[Cleared learned capability overrides for ${h}${k?`/${k}`:""}]
|
|
516
|
+
`));return}if(r==="probe"){let f=Lo(t.provider,t.model).filter(h=>h!=="auto"&&h!=="off"),m=`${t.provider}/${t.model??"(default)"}`;console.log(s.dim(`
|
|
517
|
+
[Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let h=await Zr({provider:t.provider,model:t.model,efforts:f,resolve:xn,now:a(()=>new Date().toISOString(),"now")});for(let k of h){let y=k.status==="accepted"?s.green("\u2713"):k.status==="rejected"?s.red("\u2717"):s.yellow("!");console.log(s.dim(` ${y} ${k.effort}${k.error?` \u2014 ${k.error}`:""}`))}console.log(s.dim(` (rejections recorded; undo with /provider forget-capability)
|
|
518
|
+
`))}catch(h){let k=h instanceof Error?h.message:String(h);console.log(s.red(`
|
|
519
|
+
[Probe failed: ${k}]
|
|
516
520
|
`))}return}let i=t.provider,l=t.model;if(r)if(r.includes("/")){let f=r.indexOf("/");i=r.slice(0,f).trim(),l=r.slice(f+1).trim()||void 0}else i=r,l=void 0;if(!Ie(i)){console.log(s.red(`
|
|
517
521
|
[Unknown provider: ${i}]`)),console.log(s.dim(`Available: ${_e().join(", ")}
|
|
518
|
-
`));return}let c=
|
|
519
|
-
[Provider details unavailable: ${i}]`)),console.log();return}let d=
|
|
522
|
+
`));return}let c=Or(i,l);if(!c){console.log(s.red(`
|
|
523
|
+
[Provider details unavailable: ${i}]`)),console.log();return}let d=Gr(i,l,t.reasoningMode);console.log(s.bold(`
|
|
520
524
|
Provider Details:
|
|
521
|
-
`)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${
|
|
525
|
+
`)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${Hr(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let f of Br(c))console.log(s.dim(` - ${f}`));console.log(s.dim(` - Session effort: ${Bi(t.effort)}`));let u=rr(i,l);if(u.length>0&&console.log(s.dim(` - Learned unsupported: ${u.join(", ")} (clear with /provider forget-capability)`)),console.log(),d.length>0){console.log(s.bold("Common Scenarios:"));for(let f of d){let m=f.decision.status==="block"?s.red:f.decision.status==="warn"?s.yellow:s.green;console.log(m(` - ${f.label}: ${f.decision.status.toUpperCase()}`)),console.log(s.dim(` ${f.decision.summary}`))}console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
522
526
|
/provider - Inspect Provider Semantics
|
|
523
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /provider ")+"Inspect the current provider/model"),console.log(s.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(s.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(s.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(s.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(s.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(s.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or change reasoning mode (compat alias)",usage:"/thinking [on|off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let i=
|
|
524
|
-
Thinking: ${l}`)),console.log(s.dim(`Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Effective control: ${s.cyan(
|
|
525
|
-
`));return}let r=e[0].toLowerCase();if(r==="on"||r==="off"||
|
|
527
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /provider ")+"Inspect the current provider/model"),console.log(s.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(s.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(s.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(s.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(s.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(s.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or change reasoning mode (compat alias)",usage:"/thinking [on|off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let i=In(t.provider,t.model),l=t.thinking?s.green("ON"):s.dim("OFF");console.log(s.dim(`
|
|
528
|
+
Thinking: ${l}`)),console.log(s.dim(`Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Effective control: ${s.cyan(Mn(i))}`)),console.log(s.dim(`Actual execution: ${Pn(t.reasoningMode,i)}`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
|
|
529
|
+
`));return}let r=e[0].toLowerCase();if(r==="on"||r==="off"||bn.includes(r)){let i=r==="on"?"auto":r==="off"?"off":r,l=Di(i,n,t);ye(`Reasoning mode: ${i}`,l);return}console.log(s.red(`
|
|
526
530
|
[Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
|
|
527
531
|
`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
528
532
|
/thinking - Legacy Alias for Reasoning Mode
|
|
529
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /thinking ")+"Show current reasoning status"),console.log(s.dim(" /thinking on ")+"Map to /reasoning auto"),console.log(s.dim(" /thinking off ")+"Map to /reasoning off"),console.log(s.dim(" /thinking auto ")+"Set reasoning mode to auto"),console.log(s.dim(" /thinking quick ")+"Set reasoning mode to quick"),console.log(s.dim(" /thinking balanced ")+"Set reasoning mode to balanced"),console.log(s.dim(" /thinking deep ")+"Set reasoning mode to deep"),console.log(s.dim(" /t ")+"Alias for /thinking"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Compatibility command for the new unified reasoning modes.")),console.log(s.dim(" Use /reasoning for the primary interface.")),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set reasoning mode",usage:"/reasoning [off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let l=
|
|
530
|
-
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(
|
|
531
|
-
`));return}let r=e[0].toLowerCase();if(!
|
|
533
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /thinking ")+"Show current reasoning status"),console.log(s.dim(" /thinking on ")+"Map to /reasoning auto"),console.log(s.dim(" /thinking off ")+"Map to /reasoning off"),console.log(s.dim(" /thinking auto ")+"Set reasoning mode to auto"),console.log(s.dim(" /thinking quick ")+"Set reasoning mode to quick"),console.log(s.dim(" /thinking balanced ")+"Set reasoning mode to balanced"),console.log(s.dim(" /thinking deep ")+"Set reasoning mode to deep"),console.log(s.dim(" /t ")+"Alias for /thinking"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Compatibility command for the new unified reasoning modes.")),console.log(s.dim(" Use /reasoning for the primary interface.")),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set reasoning mode",usage:"/reasoning [off|auto|quick|balanced|deep]",handler:a(async(e,o,n,t)=>{if(e.length===0){let l=In(t.provider,t.model);console.log(s.dim(`
|
|
534
|
+
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(Mn(l))}`)),console.log(s.dim(`Actual execution: ${Pn(t.reasoningMode,l)}`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
|
|
535
|
+
`));return}let r=e[0].toLowerCase();if(!bn.includes(r)){console.log(s.red(`
|
|
532
536
|
[Invalid reasoning mode: ${e[0]}]`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
|
|
533
|
-
`));return}let i=Di(r,n,t);
|
|
537
|
+
`));return}let i=Di(r,n,t);ye(`Reasoning mode: ${r}`,i)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
534
538
|
/reasoning - Set Reasoning Mode
|
|
535
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /reasoning ")+"Show current reasoning mode"),console.log(s.dim(" /reasoning off ")+"Disable reasoning"),console.log(s.dim(" /reasoning auto ")+"Use semantic routing + adaptive depth"),console.log(s.dim(" /reasoning quick ")+"Low-depth reasoning"),console.log(s.dim(" /reasoning balanced ")+"Medium-depth reasoning"),console.log(s.dim(" /reasoning deep ")+"High-depth reasoning"),console.log(s.dim(" /reasoning:auto ")+"Inline form, equivalent to /reasoning auto"),console.log(s.dim(" /reason ")+"Alias for /reasoning"),console.log()},"detailedHelp")},{name:"effort",description:"Show or set native reasoning effort",usage:"/effort [level]",handler:a(async(e,o,n,t)=>{let r=
|
|
536
|
-
Reasoning effort: ${s.cyan(f)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Available: ${
|
|
539
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /reasoning ")+"Show current reasoning mode"),console.log(s.dim(" /reasoning off ")+"Disable reasoning"),console.log(s.dim(" /reasoning auto ")+"Use semantic routing + adaptive depth"),console.log(s.dim(" /reasoning quick ")+"Low-depth reasoning"),console.log(s.dim(" /reasoning balanced ")+"Medium-depth reasoning"),console.log(s.dim(" /reasoning deep ")+"High-depth reasoning"),console.log(s.dim(" /reasoning:auto ")+"Inline form, equivalent to /reasoning auto"),console.log(s.dim(" /reason ")+"Alias for /reasoning"),console.log()},"detailedHelp")},{name:"effort",description:"Show or set native reasoning effort",usage:"/effort [level]",handler:a(async(e,o,n,t)=>{let r=_d(t);if(e.length===0){let f=Oi(t);console.log(s.dim(`
|
|
540
|
+
Reasoning effort: ${s.cyan(f)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Available: ${Lo(t.provider,t.model).join(", ")}`)),console.log(s.dim(`${r}
|
|
537
541
|
`));return}if(e.length>1){console.log(s.red(`
|
|
538
542
|
[Reasoning effort accepts exactly one value]`)),console.log(s.dim(`${r}
|
|
539
543
|
`));return}let i=e[0],l;try{l=tr(i)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(s.red(`
|
|
540
544
|
[Invalid reasoning effort: ${m}]`)),console.log(s.dim(`${r}
|
|
541
|
-
`));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l,d=
|
|
545
|
+
`));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l,d=Ld(c,t),u=Wd(c,n,t);ye(`Reasoning effort: ${Oi(d)}`,u)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
542
546
|
/effort - Set Native Reasoning Effort
|
|
543
547
|
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /effort ")+"Show current native reasoning effort"),console.log(s.dim(" /effort auto ")+"Clear the explicit effort override"),console.log(s.dim(" /effort off ")+"Disable reasoning effort"),console.log(s.dim(" /effort low ")+"Use low native reasoning effort"),console.log(s.dim(" /effort medium ")+"Use medium native reasoning effort"),console.log(s.dim(" /effort high ")+"Use high native reasoning effort"),console.log(s.dim(" /effort xhigh ")+"Use extra-high effort when the model supports it"),console.log(s.dim(" /effort max ")+"Use max effort when the model supports it"),console.log(s.dim(" /effort none ")+"Legacy alias for /effort off"),console.log(s.dim(`
|
|
544
548
|
Run /effort to see the active model's supported values.`)),console.log()},"detailedHelp")},{name:"agent-mode",aliases:["am"],description:"Show or set agent mode",usage:"/agent-mode [ama|amaw|ama-workflow|sa|toggle]",handler:a(async(e,o,n,t)=>{if(e.length===0){console.log(s.dim(`
|
|
545
549
|
Agent mode: ${s.cyan(t.agentMode.toUpperCase())}`)),console.log(s.dim(`Usage: /agent-mode [ama|amaw|ama-workflow|sa|toggle]
|
|
546
|
-
`));return}let r=e[0]?.toLowerCase(),i=r==="toggle"?
|
|
550
|
+
`));return}let r=e[0]?.toLowerCase(),i=r==="toggle"?Rs(t.agentMode):r==="ama"||r==="sa"||r==="amaw"?r:r==="ama-workflow"?"amaw":void 0;if(!i){console.log(s.red(`
|
|
547
551
|
[Invalid agent mode: ${e[0]}]`)),console.log(s.dim(`Usage: /agent-mode [ama|amaw|ama-workflow|sa|toggle]
|
|
548
|
-
`));return}let l=
|
|
552
|
+
`));return}let l=Nd(i,n,t);ye(`Agent mode: ${i.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
549
553
|
/agent-mode - Adaptive Multi-Agent Mode Control
|
|
550
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /agent-mode ")+"Show current agent mode"),console.log(s.dim(" /agent-mode ama ")+"
|
|
554
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /agent-mode ")+"Show current agent mode"),console.log(s.dim(" /agent-mode ama ")+"Adaptive multi-agent mode; workflows run only via the /workflow command"),console.log(s.dim(" /agent-mode amaw ")+"AMA + the agent may start a workflow itself from natural language"),console.log(s.dim(" /agent-mode ama-workflow")+"Alias for /agent-mode amaw"),console.log(s.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(s.dim(" /agent-mode toggle ")+"Cycle AMA -> AMAW -> SA"),console.log(s.dim(" /am ")+"Alias for /agent-mode"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" AMA runs the adaptive multi-agent harness. Workflows are command-gated: the /workflow")),console.log(s.dim(" command runs as a full scout-then-author Worker turn, but the agent never starts")),console.log(s.dim(" one on its own from natural language.")),console.log(s.dim(" AMAW is AMA plus self-activation: the agent may decide from natural language to author")),console.log(s.dim(" and run a workflow (run_workflow). /workflow behaves identically to AMA.")),console.log(s.dim(" SA forces a single solo agent \u2014 no sub-agents and no workflows \u2014 to save tokens.")),console.log()},"detailedHelp")},{name:"auto",aliases:["a"],description:"Quick switch to auto mode",handler:a(async(e,o,n,t)=>{t.permissionMode="auto",n.setPermissionMode?.("auto"),Kn("auto"),console.log(s.cyan(`
|
|
551
555
|
[Switched to auto mode] (saved)`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
552
556
|
/auto - Quick Switch to Auto Mode
|
|
553
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto ")+"Switch to auto mode"),console.log(s.dim(" /a ")+"Alias for /auto"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Equivalent to /mode auto.")),console.log(s.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(s.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(s.dim(" See also: /help mode, /auto-engine, /auto-denials")),console.log()},"detailedHelp")},{name:"skill",description:"Skill namespace - list, invoke, or review skill learning",usage:"/skill[:name] [pending|args]",handler:a(async(e,o)=>{if((e[0]??"").toLowerCase()==="pending"){await Be(
|
|
557
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto ")+"Switch to auto mode"),console.log(s.dim(" /a ")+"Alias for /auto"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Equivalent to /mode auto.")),console.log(s.dim(" Auto-mode classifier evaluates each non-Tier-1 tool call;")),console.log(s.dim(" benign actions auto-approve, risky ones escalate to user confirm.")),console.log(),console.log(s.dim(" See also: /help mode, /auto-engine, /auto-denials")),console.log()},"detailedHelp")},{name:"skill",description:"Skill namespace - list, invoke, or review skill learning",usage:"/skill[:name] [pending|args]",handler:a(async(e,o)=>{if((e[0]??"").toLowerCase()==="pending"){await Be(Ko(o),"skill");return}await Bd(e,o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
554
558
|
/skill - Skill Namespace
|
|
555
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(s.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(s.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(s.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(s.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /skill ")+"# List all skills"),console.log(s.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(s.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(s.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let i=
|
|
559
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(s.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(s.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(s.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(s.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /skill ")+"# List all skills"),console.log(s.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(s.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(s.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let i=Wo().verifierLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
|
|
556
560
|
Sidecar Verifier log: ${s.cyan(l)}${c}`)),console.log(s.dim(" When on, a one-line summary persists per verifier call:\n `[Sidecar Verifier] {verdict} \xB7 {provider}/{model} \xB7 {ms}ms \xB7 {trace}`")),console.log(s.dim(`Usage: /verifier-log [on|off]
|
|
557
561
|
`));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(`
|
|
558
562
|
[Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /verifier-log [on|off]
|
|
559
|
-
`));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=
|
|
563
|
+
`));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Ye({verifierLog:t});ye(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
560
564
|
/verifier-log - Sidecar Verifier Log Toggle
|
|
561
|
-
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /verifier-log ")+"Show current state"),console.log(s.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(s.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(s.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(s.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(s.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.dim(" KODAX_VERIFIER_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},{name:"stall-log",description:"Toggle Stall Sidecar log line (off by default)",usage:"/stall-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_STALL_LOG==="1";if(!o){let i=
|
|
565
|
+
`)),console.log(s.bold("Usage:")),console.log(s.dim(" /verifier-log ")+"Show current state"),console.log(s.dim(" /verifier-log on ")+"Enable + persist to config"),console.log(s.dim(" /verifier-log off ")+"Disable + persist to config"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" The Sidecar Verifier is the second-pass LLM judgment that fires")),console.log(s.dim(" after a Worker terminates text-only. Off by default (silent happy")),console.log(s.dim(" path). When on, every verifier call emits a one-line summary:")),console.log(s.dim(" [Sidecar Verifier] accept \xB7 anthropic/claude-sonnet-4-6 \xB7 3214ms \xB7 verifier_ok")),console.log(),console.log(s.bold("Equivalent env var:")),console.log(s.dim(" KODAX_VERIFIER_LOG=1 ")+"Same effect, env wins over config"),console.log()},"detailedHelp")},{name:"stall-log",description:"Toggle Stall Sidecar log line (off by default)",usage:"/stall-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_STALL_LOG==="1";if(!o){let i=Wo().stallLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
|
|
562
566
|
Stall Sidecar log: ${s.cyan(l)}${c}`)),console.log(s.dim(" When on, a one-line summary persists per L2 stall verdict:\n `[Stall Sidecar] isStuck={true|false} \xB7 {provider}/{model} \xB7 {ms}ms \xB7 {trace}`")),console.log(s.dim(`Usage: /stall-log [on|off]
|
|
563
567
|
`));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(`
|
|
564
568
|
[Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /stall-log [on|off]
|
|
565
|
-
`));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=
|
|
569
|
+
`));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Ye({stallLog:t});ye(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
|
|
566
570
|
/stall-log - Stall Sidecar Log Toggle
|
|
567
|
-
`)),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")},
|
|
571
|
+
`)),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")},Qn,et,ot,Js,bi,Ct,It,Ai,Mt],Cd={General:["help","copy","exit","clear","compact","reload","extensions","status","agents"],Permission:["mode","auto"],Session:["new","recover","save","load","sessions","history","delete"],Settings:["model","provider","thinking","reasoning","effort","agent-mode","plan","repo-intel"],Skills:["skill","learn"]};function Id(e){let o=$o();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(Id,"getCommandsForCategory");function zt(e){return e!=="off"}a(zt,"reasoningModeToLegacyThinking");function Bi(e){return e==="none"?"off":e??"auto"}a(Bi,"formatReasoningEffortDisplay");function _d(e){return`Usage: /effort ${Lo(e.provider,e.model).join("|")}|<provider-value>`}a(_d,"formatReasoningEffortUsage");function Oi(e){let o=Fr(e);return Ur({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Oi,"formatCurrentReasoningEffortStatus");function Md(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(Md,"normalizeRepoIntelPublicMode");function Pd(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(Pd,"resolveToggleFlag");function Ye(e){try{return ve(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Ye,"persistUserConfig");function ye(e,o){if(o.saved){console.log(s.cyan(`
|
|
568
572
|
[${e}] (saved)`));return}console.log(s.yellow(`
|
|
569
|
-
[${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(
|
|
573
|
+
[${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(ye,"printPersistedCommandStatus");function Di(e,o,n){let t=zt(e),r=e!=="off"&&n.effort==="none",i=Ye({reasoningMode:e,thinking:t,...r?{effort:void 0}:{}});return o.setReasoningMode?o.setReasoningMode(e):(n.reasoningMode=e,n.thinking=t),r&&(o.setEffort?o.setEffort(void 0):(n.effort=void 0,n.effortOverride=!1)),i}a(Di,"applyReasoningMode");function Gi(e){return e==="none"?"off":"auto"}a(Gi,"resolveReasoningModeAfterEffort");function Ld(e,o){let n=Gi(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:zt(n)}}a(Ld,"resolveConfigAfterReasoningEffort");function Wd(e,o,n){let t=Gi(e),r=zt(t),i=Ye({effort:e,reasoningMode:t,thinking:r});return o.setEffort?o.setEffort(e):(n.effort=e,n.effortOverride=e!==void 0),o.setReasoningMode?o.setReasoningMode(t):(n.reasoningMode=t,n.thinking=r),i}a(Wd,"applyReasoningEffort");function Nd(e,o,n){let t=Ye({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(Nd,"applyAgentMode");function Ui(e,o,n,t){let r=Ye(o);return n.setRepoIntelligenceRuntime?n.setRepoIntelligenceRuntime(e):(e.mode!==void 0&&(t.repoIntelligenceMode=e.mode),e.trace!==void 0&&(t.repoIntelligenceTrace=e.trace)),r}a(Ui,"applyRepoIntelligenceRuntimeConfig");function Od(e){let o=e.configuredMode===e.requestedMode?e.configuredMode:`${e.configuredMode} -> ${e.requestedMode}`,n=e.fallbackToLight?", fallback=light":"";return`${o} => ${e.effectiveEngine} (${e.status}${n})`}a(Od,"formatRepoIntelligenceSummary");function Bt(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(Bt,"getRepoIntelInspectionWorkspaceRoot");function Dd(e){return e.status}a(Dd,"formatRepoIntelStatusLabel");function Ud(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(Ud,"formatRepoIntelActiveEngine");function ji(e){console.log(s.bold(`
|
|
570
574
|
Repo Intelligence:
|
|
571
|
-
`)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(
|
|
575
|
+
`)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(Ud(e))}`)),console.log(s.dim(` Status: ${s.cyan(Dd(e))}`)),console.log(s.dim(` Trace: ${s.cyan(e.traceEnabled?"on":"off")}`)),e.workerPath&&console.log(s.dim(` Worker: ${e.workerPath}`)),e.storageRoot&&console.log(s.dim(` Cache: ${e.storageRoot}`)),e.fallbackToLight&&console.log(s.yellow(" Fallback: light engine is currently active")),e.error&&console.log(s.red(` Error: ${e.error}`));for(let o of e.warnings)console.log(s.yellow(` Warning: ${o}`));console.log()}a(ji,"printRepoIntelStatus");function Fi(e,o){if(o.length!==0){console.log(s.dim(`${e}:`));for(let n of o){let t=n.aliases?.length?` (${n.aliases.join(", ")})`:"";console.log(` ${s.cyan(`/${n.name}`)}${s.dim(t)} ${n.description}`)}console.log()}}a(Fi,"printCommandSection");function jd(){console.log(s.bold(`
|
|
572
576
|
Available Commands:
|
|
573
|
-
`));let e
|
|
577
|
+
`));let e=$o(),o=new Set;for(let[t,r]of Object.entries(Cd)){let i=Id(r);if(i.length!==0){for(let l of i)o.add(l.name.toLowerCase());Fi(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 zd()){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"])Fi(t,n.get(t)??[]);console.log(s.dim("Special syntax:")),console.log(` ${s.cyan("@path")} Attach image to context`),console.log(` ${s.cyan("!command")} Execute shell command`),console.log(),console.log(s.dim("Skills:")),console.log(` ${s.cyan("/skill")} List all available skills`),console.log(` ${s.cyan("/<skill-name>")} Invoke a skill when no command has that name`),console.log(` ${s.cyan("/skill:<name>")} Compatibility form (e.g., /skill:code-review)`),console.log(` ${s.cyan("/skill pending")} Review pending skill learning suggestions`),console.log(),console.log(s.dim(`Tip: ${s.cyan("/<command> help")} shows command-specific help.`)),console.log()}a(jd,"printHelp");function Fd(e){let o=yr({topic:e});console.log(`
|
|
574
578
|
${s.cyan(o.title)}`),console.log(o.content),o.nextTopics.length>0&&console.log(s.dim(`
|
|
575
|
-
Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(
|
|
579
|
+
Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(Fd,"printManualTopic");function Gt(e){le.size===0&&fn();let o=le.get(e.toLowerCase());if(!o){let n=mn(e);if(!n){console.log(s.yellow(`
|
|
576
580
|
[Unknown command: /${e}. Type /help for available commands]`));return}console.log(s.cyan(`
|
|
577
581
|
/${n.name}`)),n.aliases?.length&&console.log(s.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(s.dim(`
|
|
578
582
|
${n.description}`)),console.log(s.dim(`
|
|
579
|
-
Usage: ${
|
|
583
|
+
Usage: ${qd(n)}`)),console.log();return}o.detailedHelp?o.detailedHelp():(console.log(s.cyan(`
|
|
580
584
|
/${o.name}`)),o.aliases?.length&&console.log(s.dim(`Aliases: ${o.aliases.join(", ")}`)),console.log(s.dim(`
|
|
581
585
|
${o.description}`)),o.usage&&console.log(s.dim(`
|
|
582
|
-
Usage: ${o.usage}`)),console.log())}a(
|
|
586
|
+
Usage: ${o.usage}`)),console.log())}a(Gt,"printDetailedHelp");async function Hd(e,o,n=[]){let t=n[0]?.toLowerCase(),r=e.contextTokenSnapshot?.currentTokens??An(e.messages),i=e.contextTokenSnapshot?.source??"estimate",l=Nr(o.provider),c=Dr(o.provider,o.model,o.reasoningMode);if(console.log(s.bold(`
|
|
583
587
|
Session Status:
|
|
584
|
-
`)),console.log(s.dim(` Provider: ${s.cyan(o.provider)}${o.model?` / ${s.cyan(o.model)}`:""}`)),console.log(s.dim(` Permission: ${s.cyan(o.permissionMode)}`)),console.log(s.dim(` Reasoning: ${s.cyan(o.reasoningMode)}`)),console.log(s.dim(` Effort: ${s.cyan(Bi(o.effort))}`)),console.log(s.dim(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),l){let u=
|
|
588
|
+
`)),console.log(s.dim(` Provider: ${s.cyan(o.provider)}${o.model?` / ${s.cyan(o.model)}`:""}`)),console.log(s.dim(` Permission: ${s.cyan(o.permissionMode)}`)),console.log(s.dim(` Reasoning: ${s.cyan(o.reasoningMode)}`)),console.log(s.dim(` Effort: ${s.cyan(Bi(o.effort))}`)),console.log(s.dim(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),l){let u=_n(l),f=l.transport==="cli-bridge"?s.yellow(u):s.cyan(u);console.log(s.dim(` Provider Cap: ${f}`))}if(c&&c.status!=="allow"){let u=c.status==="block"?s.red:s.yellow;console.log(s.dim(` Provider Policy: ${u(c.summary)}`))}console.log(s.dim(` Session ID: ${e.sessionId}`)),console.log(s.dim(` Messages: ${e.messages.length}`)),console.log(s.dim(` Tokens: ~${r} (${i})`));let d=await Io({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:Bt(e)});console.log(s.dim(` Repo Intel: ${s.cyan(Od(d))}`)),e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace: ${s.cyan(tt(e.runtimeInfo))}`)):e.gitRoot&&console.log(s.dim(` Workspace: ${s.cyan(e.gitRoot)}`)),(t==="workspace"||t==="worktree"||t==="runtime")&&(e.runtimeInfo?.canonicalRepoRoot&&console.log(s.dim(` Canonical: ${e.runtimeInfo.canonicalRepoRoot}`)),e.runtimeInfo?.executionCwd&&console.log(s.dim(` Exec CWD: ${e.runtimeInfo.executionCwd}`)),e.runtimeInfo?.workspaceKind&&console.log(s.dim(` Kind: ${e.runtimeInfo.workspaceKind}`))),console.log(s.dim(` Created: ${e.createdAt}`)),console.log(s.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(Hd,"printStatus");async function Bd(e,o){let n=Me(o.gitRoot);n.size===0&&await Pe(o.gitRoot),Gd(n.listUserInvocable())}a(Bd,"handleSkillNamespaceCommand");function Gd(e){if(console.log(s.bold(`
|
|
585
589
|
Available Skills:
|
|
586
590
|
`)),e.length===0){console.log(s.dim(" No skills found.")),console.log(s.dim(`
|
|
587
|
-
Skills can be placed in:`)),console.log(s.dim(" - .kodax/skills/")),console.log(s.dim(" - ~/.kodax/skills/")),console.log(s.dim(" - ~/.agents/skills/"));return}let o
|
|
588
|
-
[Extension runtime is not active for /${e.name}]`)),!1;let r=await e.handler(o,{sessionId:n.sessionId,gitRoot:n.gitRoot,workingDirectory:n.runtimeInfo?.executionCwd??n.gitRoot??process.cwd(),reloadExtensions:a(()=>t.reloadExtensions(),"reloadExtensions"),getDiagnostics:a(()=>
|
|
589
|
-
[Command /${r.name} is not user-invocable]`)),!1;if(Hi(e.args))return
|
|
590
|
-
[Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let i=
|
|
591
|
-
[Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await
|
|
592
|
-
[Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(
|
|
591
|
+
Skills can be placed in:`)),console.log(s.dim(" - .kodax/skills/")),console.log(s.dim(" - ~/.kodax/skills/")),console.log(s.dim(" - ~/.agents/skills/"));return}let o=$o(),n=e.map(r=>{let i=o.get(r.name)!==void 0||mn(r.name)!==void 0;return{skill:r,invocation:i?`/skill:${r.name}`:`/${r.name}`,commandNameTaken:i}}),t=Math.max(...n.map(r=>r.invocation.length));for(let r of n){let{skill:i}=r,l=r.invocation.padEnd(t),c=i.argumentHint?` ${i.argumentHint}`:"",d=i.source==="builtin"?" [builtin]":i.source==="user"?" [user]":i.source==="plugin"?" [plugin]":"",u=r.commandNameTaken?" [command name exists]":"",f=i.description.length>50?i.description.slice(0,50)+"...":i.description;console.log(` ${s.cyan(l)}${s.dim(c)}${s.dim(d)}${s.dim(u)} ${s.dim(f)}`)}console.log(),console.log(s.dim(`Total: ${e.length} skills`)),console.log(s.dim("Usage: /<skill-name> [args], legacy /skill:<name> [args], or ask naturally")),console.log(s.dim("Review pending skill learning suggestions with /skill pending")),console.log()}a(Gd,"printSkillsListPiMonoStyle");var le=new Fe;function fn(e){le.size>0||Ni(le,e)}a(fn,"initCommandRegistry");function $o(e){return fn(e),le}a($o,"getCommandRegistry");function zd(){return te()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(zd,"getActiveExtensionCommands");function mn(e){let o=te(),n=e.trim().toLowerCase();if(!n)return;let t=o?.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(i=>i.trim().toLowerCase()===n));if(t)return t.metadata?.userInvocable===!1?void 0:t}a(mn,"getActiveExtensionCommand");function qd(e){return e.usage??`/${e.name}`}a(qd,"formatExtensionCommandUsage");function Kd(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(Kd,"formatExtensionDiagnosticValue");function Xd(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${Kd(t)}`);return o.length>0?o.join(" | "):void 0}a(Xd,"formatExtensionDiagnosticMetadata");function Ve(e){let o=e.getDiagnostics;if(typeof o=="function")return o.call(e);let n=e.getDefaults,t=typeof n=="function"?n.call(e):void 0;return{loadedExtensions:[],capabilityProviders:e.listCapabilityProviders().map(r=>({id:r.id,kinds:[...r.kinds],source:{kind:"extension",id:`extension:${r.id}`,label:r.id,path:"(runtime)"}})),commands:e.listCommands().map(r=>({name:r.name,aliases:r.aliases,description:r.description,usage:r.usage,metadata:r.metadata,source:{kind:"extension",id:`extension-command:${r.name}`,label:r.name,path:"(runtime)"}})),tools:[],hooks:[],failures:[],defaults:{activeTools:t?.activeTools,modelSelection:t?.modelSelection??{},thinkingLevel:t?.thinkingLevel}}}a(Ve,"getExtensionRuntimeDiagnostics");function Vd(e,o){if(o.invocation)return{prompt:o.invocation.prompt,source:"extension",displayName:o.invocation.displayName??`/${e.name}`,disableModelInvocation:o.invocation.disableModelInvocation,allowedTools:o.invocation.allowedTools,context:o.invocation.context,model:o.invocation.model}}a(Vd,"toExtensionInvocationRequest");async function Yd(e,o,n){let t=te();if(!t)return console.log(s.yellow(`
|
|
592
|
+
[Extension runtime is not active for /${e.name}]`)),!1;let r=await e.handler(o,{sessionId:n.sessionId,gitRoot:n.gitRoot,workingDirectory:n.runtimeInfo?.executionCwd??n.gitRoot??process.cwd(),reloadExtensions:a(()=>t.reloadExtensions(),"reloadExtensions"),getDiagnostics:a(()=>Ve(t),"getDiagnostics"),logger:{debug:a((...l)=>console.debug(`[kodax:extension-command:${e.name}]`,...l),"debug"),info:a((...l)=>console.info(`[kodax:extension-command:${e.name}]`,...l),"info"),warn:a((...l)=>console.warn(`[kodax:extension-command:${e.name}]`,...l),"warn"),error:a((...l)=>console.error(`[kodax:extension-command:${e.name}]`,...l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let i=Vd(e,r);return i?{invocation:i}:!0}a(Yd,"executeExtensionCommand");function Lw(e){let o=e.trim();if(!o.startsWith("/"))return null;let n=o.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),i=n.slice(1).filter(Boolean);if(!r)return null;if(r.startsWith("skill:")){let c=r.slice(6);return c?{command:"skill",args:i,skillInvocation:{name:c}}:{command:"skill",args:i}}let l=r.indexOf(":");if(l>0){let c=r.slice(l+1).trim();r=r.slice(0,l),i=c?[c,...i]:i}return{command:r,args:i}}a(Lw,"parseCommand");function Hi(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Hi,"isCommandHelpRequest");async function Ww(e,o,n,t){if(le.size===0&&fn(o.gitRoot),e.skillInvocation)return await Ht({command:e.skillInvocation.name,args:e.args},o);let r=le.get(e.command);if(r){if(r.userInvocable===!1)return console.log(s.yellow(`
|
|
593
|
+
[Command /${r.name} is not user-invocable]`)),!1;if(Hi(e.args))return Gt(e.command),!0;try{let d=await r.handler(e.args,o,n,t);return d&&typeof d=="object"?d:!0}catch(d){return console.log(s.red(`
|
|
594
|
+
[Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let i=mn(e.command);if(i){if(Hi(e.args))return Gt(e.command),!0;try{return await Yd(i,e.args,o)}catch(d){return console.log(s.red(`
|
|
595
|
+
[Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await Jd(e,o);if(l)return await Ht({command:l.skill.name,args:l.args},o);let c=await zi(e.command,o);return c?await Ht({command:c.name,args:e.args},o):(console.log(s.yellow(`
|
|
596
|
+
[Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(Ww,"executeCommand");async function Jd(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await zi(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(Jd,"resolveNamespacedDirectSkillCommand");async function zi(e,o){let n=Me(o.gitRoot);n.size===0&&await Pe(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(zi,"resolveDirectSkillCommand");async function Ht(e,o){let n=Me(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await Pe(o.gitRoot);try{let i=n.get(t);if(!i)return console.log(s.red(`
|
|
593
597
|
[Skill not found: ${t}]`)),!1;if(!i.userInvocable)return console.log(s.yellow(`
|
|
594
598
|
[Skill "${t}" is not user-invocable]`)),!1;console.log(s.cyan(`
|
|
595
|
-
[Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{}},d=await
|
|
596
|
-
[Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}a(
|
|
597
|
-
`)){if(!c.trim())continue;let d=Jd(c);if(!d)continue;let u=Ve.resolve(r,d),f=Ve.relative(e,u).split(Ve.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),i.push(f),i.length>=o))break}return i}catch{return[]}}a(Ki,"getRecentWorkingSetFiles");function Ye(e){let o=e.lastIndexOf("/");if(o===-1)return-1;for(;o>0&&!/\s/.test(e[o-1]??"");)if(o=e.lastIndexOf("/",o-1),o===-1)return-1;return o}a(Ye,"findCommandSlashIndex");var qt=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Ki){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let i=t.slice(r+1),l=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),u=d===-1?c:So.join(c,i.slice(0,d)),f=d===-1?i:i.slice(d+1);try{let h=(await this.readdir(u)).filter(y=>y.toLowerCase().startsWith(f.toLowerCase()));for(let y of h){let k=So.join(u,y),v=await this.isDirectory(k),p=d===-1?y:i.slice(0,d+1)+y;l.push({text:"@"+p+(v?"/":""),display:y+(v?"/":""),description:v?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),h=new Set(l.map(v=>v.text)),y=f.toLowerCase(),k=[];for(let v of m){if(f&&!So.basename(v).toLowerCase().startsWith(y))continue;let p="@"+v;h.has(p)||(h.add(p),k.push({text:p,display:v,description:"recent",type:"file"}))}l.unshift(...k)}return l}async getRecentFiles(o){let n=Date.now(),t=this.recentCache.get(o);if(t&&t.expiresAt>n)return t.files;let r=await this.recentFilesProvider(o);return this.recentCache.set(o,{files:r,expiresAt:Date.now()+this.cacheTimeout}),r}resolveCwd(){return typeof this.cwdSource=="function"?this.cwdSource():this.cwdSource??process.cwd()}async readdir(o){let n=Date.now(),t=this.cache.get(o);return t&&t.expiresAt>n?t.entries:(t&&this.cache.delete(o),new Promise(r=>{hn.readdir(o,(i,l)=>{i?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{hn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},Kt=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of vo().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=te();for(let n of o?.listCommands()??[])n.metadata?.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]})}canComplete(o,n){let t=o.slice(0,n),r=Ye(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=Ye(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(i,u)&&l.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function Kw(e){let o=new qt(e),n=new wn,t=new Kt;return async r=>{let i=r.includes("@"),l=r.includes("/");if(!i&&!l)return[[],r];let c=[];if(l){let u=await Zd(r,r.length);c.push(...u)}if(l&&n.canComplete(r,r.length)){let u=await n.getCompletions(r,r.length);c.push(...u)}if(l&&t.canComplete(r,r.length)){let u=await t.getCompletions(r,r.length);c.push(...u)}if(i&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>Qd(r,u)),r]}}a(Kw,"createCompleter");async function Zd(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-AYDAYGKL.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(Zd,"getArgumentCompletions");function Qd(e,o){if(o.type!=="argument")return o.text;let n=Ye(e);if(n!==-1&&!/\s/.test(e.slice(n)))return`${e} ${o.text}`;let r=e.match(/\S+$/)?.[0]??"";return`${r?e.slice(0,e.length-r.length):e}${o.text}`}a(Qd,"formatReadlineCompletion");import{existsSync as kn,readdirSync as Zi,readFileSync as Qi}from"node:fs";import{join as vn}from"node:path";var eu=[{name:"plan",description:"Read-only planning mode - blocks all modifications",type:"enum"},{name:"accept-edits",description:"File edits auto-approved, bash requires confirmation",type:"enum"},{name:"auto",description:"Use auto-mode classifier for tool permissions",type:"enum"}],yn=[{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"}],Xi=yn.slice(2).concat([{name:"off",description:"Disable reasoning",type:"enum"}]);function ou(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Ie(n))try{return Oe(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return _e().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(ou,"getModelArgs");var Xt=[{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"}],Vt=[{name:"all",description:"Delete ALL sessions",type:"enum"}],nu=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],tu=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],ru=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],Vi=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"amaw",description:"Use AMA workflow agent mode",type:"enum"},{name:"ama-workflow",description:"Alias for amaw",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],Yi=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],su=[{name:"list",description:"List project memory files",type:"enum"},{name:"rebuild",description:"Rebuild MEMORY.md index",type:"enum"},{name:"open",description:"Print the memory entrypoint path",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],iu=[{name:"status",description:"Show current persistent goal",type:"enum"},{name:"pause",description:"Pause the active goal",type:"enum"},{name:"resume",description:"Resume a paused goal",type:"enum"},{name:"clear",description:"Clear the current goal",type:"enum"},{name:"help",description:"Show goal help",type:"enum"},{name:"--tokens",description:"Set an optional goal token budget",type:"enum"}],au=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],lu=[{name:"--lean",description:"Add a minimal-diff/YAGNI review pass",type:"enum"},{name:"--workflow",description:"Review through a dynamic workflow",type:"enum"},{name:"base",description:"Review changes against the detected base branch",type:"enum"},{name:"sha",description:"Review a specific commit",type:"enum"},{name:"help",description:"Show review help",type:"enum"}],cu=[{name:"init",description:"Create AGENTS.md in the target project if absent",type:"enum"},{name:"lean",description:"Initialize or LLM-review AGENTS.md for Lean Mode guidance",type:"enum"},{name:"help",description:"Show agents help",type:"enum"}],du=[{name:"status",description:"Inspect the current repo-intelligence runtime state",type:"enum"},{name:"mode",description:"Switch repo-intelligence runtime mode",type:"enum"},{name:"trace",description:"Toggle repo-intelligence trace output",type:"enum"}],uu=[{name:"auto",description:"Let KodaX pick the best repo-intelligence engine",type:"enum"},{name:"full",description:"Prefer the full repo-intelligence engine",type:"enum"},{name:"light",description:"Use the light repo-intelligence engine",type:"enum"},{name:"off",description:"Disable repo-intelligence injection",type:"enum"}],fu=[{name:"on",description:"Enable repo-intelligence trace output",type:"enum"},{name:"off",description:"Disable repo-intelligence trace output",type:"enum"},{name:"toggle",description:"Toggle repo-intelligence trace output",type:"enum"}],mu=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],pu=[{name:"list",description:"List built-in and saved workflows",type:"enum"},{name:"create",description:"Generate and run a workflow from a request",type:"enum"},{name:"runs",description:"List active and recent workflow runs",type:"enum"},{name:"show",description:"Show latest run or a specific workflow run",type:"enum"},{name:"pause",description:"Pause future child launches for a run",type:"enum"},{name:"resume",description:"Resume a paused run",type:"enum"},{name:"stop",description:"Stop an active workflow run",type:"enum"},{name:"delete",description:"Delete one persisted workflow run or generated saved capsule",type:"enum"},{name:"prune",description:"Preview or delete old terminal workflow runs",type:"enum"},{name:"rerun",description:"Rerun a run id or saved workflow name",type:"enum"},{name:"save",description:"Save a generated run as a workflow capsule",type:"enum"},{name:"rename",description:"Rename a run display name or saved workflow capsule",type:"enum"},{name:"revise",description:"Generate a revised workflow capsule",type:"enum"},{name:"help",description:"Show workflow help",type:"enum"}],gu=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),wu=new Set(["show","delete","rerun","save","rename","revise"]),hu=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],yu=[{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"}],ku=[{name:"--force",description:"Delete stale non-terminal run records",type:"enum"},{name:"--run",description:"Treat the target as a workflow run record",type:"enum"},{name:"--saved",description:"Treat the target as a generated saved workflow capsule",type:"enum"}],vu=[".workflow.json",".ts",".mjs",".js"];function Su(e,o){switch(e){case"pause":return o==="running";case"resume":return o==="paused";case"stop":return o==="running"||o==="paused";case"delete":return o!=="running"&&o!=="paused";default:return!0}}a(Su,"workflowRunMatchesSubcommand");function Sn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Sn,"isWorkflowRunEntryName");function $u(e,o){let n=vn(e,"workflow-metadata.json");if(kn(n))try{let r=JSON.parse(Qi(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&Sn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Sn(t.trim())?t.trim():void 0}a($u,"readWorkflowRunDisplayName");function bu(){let e=xe(process.cwd()).key,o=j("workflow-runs",e);if(!kn(o))return[];let n=[];for(let t of Zi(o)){if(!Sn(t))continue;let r=vn(o,t,"run.json");if(kn(r))try{let i=JSON.parse(Qi(r,"utf8")),l=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?",d=typeof i.endedAt=="number"?i.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=$u(vn(o,t),i);u&&u!==t&&n.push({arg:{name:u,description:`${l} alias for ${t} - ${c}`,type:"string"},endedAt:d})}catch{}}return n.sort((t,r)=>r.endedAt-t.endedAt).map(t=>t.arg)}a(bu,"getPersistedWorkflowRunIdArgs");function $n(e){let o=Ne().list().filter(r=>Su(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=wu.has(e)?bu():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a($n,"getWorkflowRunIdArgs");function xu(e){for(let o of vu)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Sn(n)?n:void 0}}a(xu,"savedWorkflowNameFromFile");function $o(e={}){let o=[{path:j("workflows"),source:"personal"},{path:vn(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(kn(t.path))try{for(let r of Zi(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=xu(r);i&&n.set(i,{name:i,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a($o,"getSavedWorkflowNameArgs");function Au(){let e=new Map;for(let o of $n("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of $o()){let n=e.get(o.name);if(n){e.set(o.name,{...n,description:`${n.description}; also ${o.description}`});continue}e.set(o.name,{...o,description:o.description,type:"string"})}return[...e.values()]}a(Au,"getWorkflowRerunArgs");function Yt(e){let o=new Map;for(let n of $n(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of $o({generatedOnly:e==="delete"})){let t=o.get(n.name);if(t){o.set(n.name,{...t,description:`${t.description}; also ${n.description}`});continue}o.set(n.name,{...n,description:n.description,type:"string"})}return[...o.values()]}a(Yt,"getWorkflowRunOrSavedNameArgs");function Ji(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?$o({generatedOnly:!0}):o.has("--run")?$n("delete"):Yt("delete")}a(Ji,"getWorkflowDeleteTargetArgs");function Ru(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...pu,...oo().map(r=>({name:r.name,description:r.description,type:"enum"})),...$o()];if(n==="rerun"&&t<=2)return Au();if(n==="rename"&&t<=2)return Yt("rename");if(n==="delete"&&t<=2)return[...ku,...Ji(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Ji(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...Yt("revise")];if(e[1]==="--replace"&&t<=3)return $o()}return gu.has(n)&&t<=2?$n(n):n==="runs"&&t<=2?hu:n==="prune"&&t<=2?yu:[]}a(Ru,"getWorkflowArgs");function Eu(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?du:t>2?[]:n==="mode"?uu:n==="trace"?fu:[]}a(Eu,"getRepoIntelArgs");var Tu=new Map([["mode",eu],["thinking",yn],["think",yn],["t",yn],["reasoning",Xi],["reason",Xi],["status",Xt],["info",Xt],["ctx",Xt],["mcp",nu],["fallback",tu],["auto-engine",ru],["agent-mode",Vi],["am",Vi],["verifier-log",Yi],["stall-log",Yi],["memory",su],["goal",iu],["paste",au],["review",lu],["agents",cu],["delete",Vt],["rm",Vt],["del",Vt]]),Cu=new Set(["model","m","provider"]),Iu=new Set(["repo-intel"]),_u=new Set(["repointel","ri"]),Pu=new Set(["workflow"]);function Jt(e,o,n=[]){let t=e.toLowerCase();return Cu.has(t)?ou(o):Iu.has(t)?Eu(n):_u.has(t)?n.length<=1?mu:[]:Pu.has(t)?Ru(n):Tu.get(t)??[]}a(Jt,"getCommandArguments");var Zt=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=Ye(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return Jt(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=Ye(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,m=(u[f]??"").toLowerCase(),h=Jt(c,m,u);if(!h||h.length===0)return[];let y=new Set(u.slice(0,-1).map(v=>v.toLowerCase()));return h.filter(v=>!y.has(v.name.toLowerCase())).filter(v=>!m||v.name.includes("/")?!0:v.name.toLowerCase().includes(m)).map(v=>({text:v.name,display:v.name,description:v.description,type:"argument"})).sort((v,p)=>{if(!m)return 0;let R=v.display.toLowerCase().startsWith(m),E=p.display.toLowerCase().startsWith(m);return R&&!E?-1:!R&&E?1:v.display.length-p.display.length})}};function ih(){return new Zt}a(ih,"createArgumentCompleter");export{Zn as a,B as b,Gf as c,_s as d,zf as e,Lo as f,Wu as g,ta as h,Nu as i,no as j,Vr as k,Yr as l,to as m,Fn as n,ka as o,Hn as p,Gn as q,zn as r,io as s,xa as t,qn as u,Ue as v,hs as w,ys as x,Na as y,If as z,Vn as A,_f as B,Pf as C,As as D,Is as E,re as F,Ls as G,Ws as H,Jf as I,Za as J,ul as K,Zf as L,Gs as M,et as N,Qf as O,zs as P,em as Q,om as R,nm as S,Pm as T,Mm as U,Lm as V,Js as W,st as X,Zs as Y,xe as Z,jm as _,Re as $,kc as aa,vc as ba,lp as ca,cp as da,At as ea,eg as fa,og as ga,ng as ha,vg as ia,Sg as ja,$g as ka,bg as la,xg as ma,_i as na,Ig as oa,_g as pa,Mi as qa,Pg as ra,Li as sa,Pw as ta,Mw as ua,wn as va,Zt as wa,ih as xa,Ye as ya,qt as za,Kt as Aa,Kw as Ba};
|
|
599
|
+
[Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{}},d=await pr(l,r,c);return console.log(s.green(`Skill activated: ${t}`)),console.log(s.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:{prompt:d.content,source:"skill",displayName:t,path:l.skillFilePath,disableModelInvocation:d.disableModelInvocation,userInvocable:l.userInvocable,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hooks:l.hooks,skillInvocation:{name:t,path:l.skillFilePath,description:l.description,arguments:r||void 0,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hookEvents:l.hooks?Object.entries(l.hooks).filter(([,u])=>Array.isArray(u)&&u.length>0).map(([u])=>u):void 0,expandedContent:d.content}}}}catch(i){return console.log(s.red(`
|
|
600
|
+
[Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}a(Ht,"executeSkillCommand");var pn=class{static{a(this,"SkillCompleter")}gitRoot;skillsCache=null;cacheTimestamp=0;cacheTtlMs=5e3;constructor(o){this.gitRoot=o}canComplete(o,n){return this.parseTrigger(o.slice(0,n))!==void 0}async getCompletions(o,n){let t=this.parseTrigger(o.slice(0,n));if(!t)return[];let r=t.partial.toLowerCase();return(await this.getSkills()).filter(l=>{let c=l.name.toLowerCase();return c.includes(r)||this.fuzzyIncludes(r,c)}).map(l=>({text:`${t.invocationPrefix}${l.name}`,display:l.name,description:this.truncateDescription(l.description),type:"skill"})).sort((l,c)=>{let d=l.display.toLowerCase().startsWith(r),u=c.display.toLowerCase().startsWith(r);return d&&!u?-1:!d&&u?1:l.display.length-c.display.length})}setGitRoot(o){this.gitRoot!==o&&(this.gitRoot=o,this.skillsCache=null)}parseTrigger(o){let n=o.match(/(^|\s)\/skill:([^\s]*)$/);if(n)return{partial:n[2]??"",invocationPrefix:"/skill:"};let t=o.match(/(^|\s)\/([^\s]*)$/);if(t)return{partial:t[2]??"",invocationPrefix:"/"}}async getSkills(){let o=Date.now();if(this.skillsCache&&o-this.cacheTimestamp<this.cacheTtlMs)return this.skillsCache;try{let n=Me(this.gitRoot);return n.size===0&&await Pe(this.gitRoot),this.skillsCache=n.listUserInvocable(),this.cacheTimestamp=o,this.skillsCache}catch{return[]}}fuzzyIncludes(o,n){let t=0;for(let r=0;r<n.length&&t<o.length;r+=1)n[r]===o[t]&&(t+=1);return t===o.length}truncateDescription(o,n=50){return o.length<=n?o:o.slice(0,n-3)+"..."}};import{exec as Zd}from"node:child_process";import*as Je from"node:path";import{promisify as Qd}from"node:util";var qi=Qd(Zd);function eu(e){let o=e.slice(3);if(!o)return;let n=o.indexOf(" -> ");return(n===-1?o:o.slice(n+4)).replace(/^"(.*)"$/,"$1").trim()||void 0}a(eu,"pathFromPorcelainLine");async function Ki(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([qi("git rev-parse --show-toplevel",{cwd:e}),qi("git status --porcelain=v1 -uall",{cwd:e})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
|
|
601
|
+
`)){if(!c.trim())continue;let d=eu(c);if(!d)continue;let u=Je.resolve(r,d),f=Je.relative(e,u).split(Je.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),i.push(f),i.length>=o))break}return i}catch{return[]}}a(Ki,"getRecentWorkingSetFiles");function Ze(e){let o=e.lastIndexOf("/");if(o===-1)return-1;for(;o>0&&!/\s/.test(e[o-1]??"");)if(o=e.lastIndexOf("/",o-1),o===-1)return-1;return o}a(Ze,"findCommandSlashIndex");var qt=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Ki){this.cwdSource=o,this.recentFilesProvider=n}canComplete(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");return!(r===-1||r>0&&!/\s/.test(t[r-1]??"")||t.slice(r+1).includes(" "))}async getCompletions(o,n){let t=o.slice(0,n),r=t.lastIndexOf("@");if(r===-1)return[];let i=t.slice(r+1),l=[],c=this.resolveCwd(),d=i.lastIndexOf("/"),u=d===-1?c:bo.join(c,i.slice(0,d)),f=d===-1?i:i.slice(d+1);try{let h=(await this.readdir(u)).filter(k=>k.toLowerCase().startsWith(f.toLowerCase()));for(let k of h){let y=bo.join(u,k),v=await this.isDirectory(y),p=d===-1?k:i.slice(0,d+1)+k;l.push({text:"@"+p+(v?"/":""),display:k+(v?"/":""),description:v?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),h=new Set(l.map(v=>v.text)),k=f.toLowerCase(),y=[];for(let v of m){if(f&&!bo.basename(v).toLowerCase().startsWith(k))continue;let p="@"+v;h.has(p)||(h.add(p),y.push({text:p,display:v,description:"recent",type:"file"}))}l.unshift(...y)}return l}async getRecentFiles(o){let n=Date.now(),t=this.recentCache.get(o);if(t&&t.expiresAt>n)return t.files;let r=await this.recentFilesProvider(o);return this.recentCache.set(o,{files:r,expiresAt:Date.now()+this.cacheTimeout}),r}resolveCwd(){return typeof this.cwdSource=="function"?this.cwdSource():this.cwdSource??process.cwd()}async readdir(o){let n=Date.now(),t=this.cache.get(o);return t&&t.expiresAt>n?t.entries:(t&&this.cache.delete(o),new Promise(r=>{gn.readdir(o,(i,l)=>{i?r([]):(this.cache.set(o,{entries:l,expiresAt:Date.now()+this.cacheTimeout}),r(l))})}))}async isDirectory(o){return new Promise(n=>{gn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},Kt=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of $o().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=te();for(let n of o?.listCommands()??[])n.metadata?.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]})}canComplete(o,n){let t=o.slice(0,n),r=Ze(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=Ze(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(i,u)&&l.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function Vw(e){let o=new qt(e),n=new pn,t=new Kt;return async r=>{let i=r.includes("@"),l=r.includes("/");if(!i&&!l)return[[],r];let c=[];if(l){let u=await ou(r,r.length);c.push(...u)}if(l&&n.canComplete(r,r.length)){let u=await n.getCompletions(r,r.length);c.push(...u)}if(l&&t.canComplete(r,r.length)){let u=await t.getCompletions(r,r.length);c.push(...u)}if(i&&o.canComplete(r,r.length)){let u=await o.getCompletions(r,r.length);c.push(...u)}return[c.map(u=>nu(r,u)),r]}}a(Vw,"createCompleter");async function ou(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-QGBNXTYJ.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(ou,"getArgumentCompletions");function nu(e,o){if(o.type!=="argument")return o.text;let n=Ze(e);if(n!==-1&&!/\s/.test(e.slice(n)))return`${e} ${o.text}`;let r=e.match(/\S+$/)?.[0]??"";return`${r?e.slice(0,e.length-r.length):e}${o.text}`}a(nu,"formatReadlineCompletion");import{existsSync as hn,readdirSync as Zi,readFileSync as Qi}from"node:fs";import{join as yn}from"node:path";var tu=[{name:"plan",description:"Read-only planning mode - blocks all modifications",type:"enum"},{name:"accept-edits",description:"File edits auto-approved, bash requires confirmation",type:"enum"},{name:"auto",description:"Use auto-mode classifier for tool permissions",type:"enum"}],wn=[{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"}],Xi=wn.slice(2).concat([{name:"off",description:"Disable reasoning",type:"enum"}]);function ru(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Ie(n))try{return Oe(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return _e().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(ru,"getModelArgs");var Xt=[{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"}],Vt=[{name:"all",description:"Delete ALL sessions",type:"enum"}],su=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],iu=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],au=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],Vi=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"amaw",description:"Use AMA workflow agent mode",type:"enum"},{name:"ama-workflow",description:"Alias for amaw",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],Yi=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],lu=[{name:"list",description:"List project memory files",type:"enum"},{name:"rebuild",description:"Rebuild MEMORY.md index",type:"enum"},{name:"open",description:"Print the memory entrypoint path",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],cu=[{name:"status",description:"Show current persistent goal",type:"enum"},{name:"pause",description:"Pause the active goal",type:"enum"},{name:"resume",description:"Resume a paused goal",type:"enum"},{name:"clear",description:"Clear the current goal",type:"enum"},{name:"help",description:"Show goal help",type:"enum"},{name:"--tokens",description:"Set an optional goal token budget",type:"enum"}],du=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],uu=[{name:"--lean",description:"Add a minimal-diff/YAGNI review pass",type:"enum"},{name:"--workflow",description:"Review through a dynamic workflow",type:"enum"},{name:"base",description:"Review changes against the detected base branch",type:"enum"},{name:"sha",description:"Review a specific commit",type:"enum"},{name:"help",description:"Show review help",type:"enum"}],fu=[{name:"init",description:"Create AGENTS.md in the target project if absent",type:"enum"},{name:"lean",description:"Initialize or LLM-review AGENTS.md for Lean Mode guidance",type:"enum"},{name:"help",description:"Show agents help",type:"enum"}],mu=[{name:"status",description:"Inspect the current repo-intelligence runtime state",type:"enum"},{name:"mode",description:"Switch repo-intelligence runtime mode",type:"enum"},{name:"trace",description:"Toggle repo-intelligence trace output",type:"enum"}],pu=[{name:"auto",description:"Let KodaX pick the best repo-intelligence engine",type:"enum"},{name:"full",description:"Prefer the full repo-intelligence engine",type:"enum"},{name:"light",description:"Use the light repo-intelligence engine",type:"enum"},{name:"off",description:"Disable repo-intelligence injection",type:"enum"}],gu=[{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"}],wu=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],hu=[{name:"list",description:"List built-in and saved workflows",type:"enum"},{name:"create",description:"Generate and run a workflow from a request",type:"enum"},{name:"runs",description:"List active and recent workflow runs",type:"enum"},{name:"show",description:"Show latest run or a specific workflow run",type:"enum"},{name:"pause",description:"Pause future child launches for a run",type:"enum"},{name:"resume",description:"Resume a paused run",type:"enum"},{name:"stop",description:"Stop an active workflow run",type:"enum"},{name:"delete",description:"Delete one persisted workflow run or generated saved capsule",type:"enum"},{name:"prune",description:"Preview or delete old terminal workflow runs",type:"enum"},{name:"rerun",description:"Rerun a run id or saved workflow name",type:"enum"},{name:"save",description:"Save a generated run as a workflow capsule",type:"enum"},{name:"rename",description:"Rename a run display name or saved workflow capsule",type:"enum"},{name:"revise",description:"Generate a revised workflow capsule",type:"enum"},{name:"help",description:"Show workflow help",type:"enum"}],yu=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),ku=new Set(["show","delete","rerun","save","rename","revise"]),vu=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Su=[{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"}],$u=[{name:"--force",description:"Delete stale non-terminal run records",type:"enum"},{name:"--run",description:"Treat the target as a workflow run record",type:"enum"},{name:"--saved",description:"Treat the target as a generated saved workflow capsule",type:"enum"}],bu=[".workflow.json",".ts",".mjs",".js"];function xu(e,o){switch(e){case"pause":return o==="running";case"resume":return o==="paused";case"stop":return o==="running"||o==="paused";case"delete":return o!=="running"&&o!=="paused";default:return!0}}a(xu,"workflowRunMatchesSubcommand");function kn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(kn,"isWorkflowRunEntryName");function Au(e,o){let n=yn(e,"workflow-metadata.json");if(hn(n))try{let r=JSON.parse(Qi(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&kn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&kn(t.trim())?t.trim():void 0}a(Au,"readWorkflowRunDisplayName");function Ru(){let e=xe(process.cwd()).key,o=H("workflow-runs",e);if(!hn(o))return[];let n=[];for(let t of Zi(o)){if(!kn(t))continue;let r=yn(o,t,"run.json");if(hn(r))try{let i=JSON.parse(Qi(r,"utf8")),l=typeof i.workflow=="string"?i.workflow:"?",c=typeof i.status=="string"?i.status:"?",d=typeof i.endedAt=="number"?i.endedAt:0;n.push({arg:{name:t,description:`${l} - ${c}`,type:"string"},endedAt:d});let u=Au(yn(o,t),i);u&&u!==t&&n.push({arg:{name:u,description:`${l} alias for ${t} - ${c}`,type:"string"},endedAt:d})}catch{}}return n.sort((t,r)=>r.endedAt-t.endedAt).map(t=>t.arg)}a(Ru,"getPersistedWorkflowRunIdArgs");function vn(e){let o=Ne().list().filter(r=>xu(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=ku.has(e)?Ru():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(vn,"getWorkflowRunIdArgs");function Eu(e){for(let o of bu)if(e.endsWith(o)){let n=e.slice(0,-o.length);return kn(n)?n:void 0}}a(Eu,"savedWorkflowNameFromFile");function xo(e={}){let o=[{path:H("workflows"),source:"personal"},{path:yn(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(hn(t.path))try{for(let r of Zi(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=Eu(r);i&&n.set(i,{name:i,description:`${t.source} saved workflow`,type:"enum"})}}catch{}return[...n.values()].sort((t,r)=>t.name.localeCompare(r.name))}a(xo,"getSavedWorkflowNameArgs");function Tu(){let e=new Map;for(let o of vn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of xo()){let n=e.get(o.name);if(n){e.set(o.name,{...n,description:`${n.description}; also ${o.description}`});continue}e.set(o.name,{...o,description:o.description,type:"string"})}return[...e.values()]}a(Tu,"getWorkflowRerunArgs");function Yt(e){let o=new Map;for(let n of vn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of xo({generatedOnly:e==="delete"})){let t=o.get(n.name);if(t){o.set(n.name,{...t,description:`${t.description}; also ${n.description}`});continue}o.set(n.name,{...n,description:n.description,type:"string"})}return[...o.values()]}a(Yt,"getWorkflowRunOrSavedNameArgs");function Ji(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?xo({generatedOnly:!0}):o.has("--run")?vn("delete"):Yt("delete")}a(Ji,"getWorkflowDeleteTargetArgs");function Cu(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...hu,...Mo().map(r=>({name:r.name,description:r.description,type:"enum"})),...xo()];if(n==="rerun"&&t<=2)return Tu();if(n==="rename"&&t<=2)return Yt("rename");if(n==="delete"&&t<=2)return[...$u,...Ji(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Ji(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...Yt("revise")];if(e[1]==="--replace"&&t<=3)return xo()}return yu.has(n)&&t<=2?vn(n):n==="runs"&&t<=2?vu:n==="prune"&&t<=2?Su:[]}a(Cu,"getWorkflowArgs");function Iu(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?mu:t>2?[]:n==="mode"?pu:n==="trace"?gu:[]}a(Iu,"getRepoIntelArgs");var _u=new Map([["mode",tu],["thinking",wn],["think",wn],["t",wn],["reasoning",Xi],["reason",Xi],["status",Xt],["info",Xt],["ctx",Xt],["mcp",su],["fallback",iu],["auto-engine",au],["agent-mode",Vi],["am",Vi],["verifier-log",Yi],["stall-log",Yi],["memory",lu],["goal",cu],["paste",du],["review",uu],["agents",fu],["delete",Vt],["rm",Vt],["del",Vt]]),Mu=new Set(["model","m","provider"]),Pu=new Set(["repo-intel"]),Lu=new Set(["repointel","ri"]),Wu=new Set(["workflow"]);function Jt(e,o,n=[]){let t=e.toLowerCase();return Mu.has(t)?ru(o):Pu.has(t)?Iu(n):Lu.has(t)?n.length<=1?wu:[]:Wu.has(t)?Cu(n):_u.get(t)??[]}a(Jt,"getCommandArguments");var Zt=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=Ze(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return Jt(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=Ze(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,m=(u[f]??"").toLowerCase(),h=Jt(c,m,u);if(!h||h.length===0)return[];let k=new Set(u.slice(0,-1).map(v=>v.toLowerCase()));return h.filter(v=>!k.has(v.name.toLowerCase())).filter(v=>!m||v.name.includes("/")?!0:v.name.toLowerCase().includes(m)).map(v=>({text:v.name,display:v.name,description:v.description,type:"argument"})).sort((v,p)=>{if(!m)return 0;let R=v.display.toLowerCase().startsWith(m),I=p.display.toLowerCase().startsWith(m);return R&&!I?-1:!R&&I?1:v.display.length-p.display.length})}};function lh(){return new Zt}a(lh,"createArgumentCompleter");export{Yn as a,G as b,Kf as c,Ms as d,Xf as e,No as f,Du as g,ra as h,Uu as i,ro as j,Yr as k,Jr as l,so as m,Un as n,va as o,jn as p,Hn as q,Bn as r,lo as s,Aa as t,Gn as u,Ue as v,ys as w,ks as x,Oa as y,Pf as z,Kn as A,Lf as B,Wf as C,Rs as D,_s as E,re as F,Ws as G,Ns as H,em as I,Qa as J,fl as K,om as L,zs as M,Zn as N,nm as O,qs as P,tm as Q,rm as R,sm as S,Wm as T,Nm as U,Om as V,Zs as W,tt as X,Qs as Y,xe as Z,Bm as _,go as $,ct as aa,Re as ba,vc as ca,Sc as da,yi as ea,up as fa,fp as ga,Lc as ha,tg as ia,rg as ja,sg as ka,bg as la,xg as ma,Ag as na,Rg as oa,Eg as pa,_i as qa,Pg as ra,Lg as sa,Pi as ta,Wg as ua,Li as va,Lw as wa,Ww as xa,pn as ya,Zt as za,lh as Aa,Ze as Ba,qt as Ca,Kt as Da,Vw as Ea};
|