@kodax-ai/kodax 0.7.72 → 0.7.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/README.md +48 -14
  3. package/README_CN.md +33 -10
  4. package/dist/chunks/{agent-YKGU4USA.js → agent-T6PGT6AU.js} +1 -1
  5. package/dist/chunks/argument-completer-QGMWA2C3.js +2 -0
  6. package/dist/chunks/{chunk-SQODXBLX.js → chunk-64M5HOCA.js} +1 -1
  7. package/dist/chunks/{chunk-PKQOEDHJ.js → chunk-6JTWXGVU.js} +217 -223
  8. package/dist/chunks/{chunk-IR5KIK7E.js → chunk-6RI2RBTF.js} +1 -1
  9. package/dist/chunks/chunk-AGDDM5AW.js +329 -0
  10. package/dist/chunks/chunk-BUPJGG3C.js +5 -0
  11. package/dist/chunks/chunk-EAD4SF3Z.js +413 -0
  12. package/dist/chunks/chunk-F7AIEHSS.js +46 -0
  13. package/dist/chunks/{chunk-E27LHEIP.js → chunk-GAFFYJU3.js} +1 -1
  14. package/dist/chunks/chunk-HVCNAZ52.js +365 -0
  15. package/dist/chunks/{chunk-MVARIMQV.js → chunk-M7FXNPWV.js} +2 -2
  16. package/dist/chunks/{chunk-44QXPEEE.js → chunk-MBAPT2R5.js} +1 -1
  17. package/dist/chunks/{chunk-WIBLZK4G.js → chunk-MLEAQTCD.js} +2 -2
  18. package/dist/chunks/{chunk-JSDLBXME.js → chunk-OG6DRNKV.js} +63 -63
  19. package/dist/chunks/{chunk-2RI252RN.js → chunk-PFH53O4M.js} +1 -1
  20. package/dist/chunks/chunk-V4F6IYNK.js +73 -0
  21. package/dist/chunks/chunk-WQ6PWGK5.js +320 -0
  22. package/dist/chunks/chunk-XXQLPTAN.js +78 -0
  23. package/dist/chunks/compaction-config-IHJBP4GO.js +2 -0
  24. package/dist/chunks/{construction-bootstrap-ZJPXUPXQ.js → construction-bootstrap-EGRUHKLP.js} +1 -1
  25. package/dist/chunks/dist-5N3I2RTW.js +2 -0
  26. package/dist/chunks/{dist-GOUP4YVE.js → dist-EVEJAII2.js} +1 -1
  27. package/dist/chunks/host-MECITNE3.js +2 -0
  28. package/dist/chunks/run-manager-AY7RQOWM.js +2 -0
  29. package/dist/chunks/{utils-OTT5CG5J.js → utils-2GAE4XIM.js} +1 -1
  30. package/dist/index.d.ts +16 -16
  31. package/dist/index.js +5 -5
  32. package/dist/kodax_cli.js +1341 -1320
  33. package/dist/provider-capabilities.json +184 -5
  34. package/dist/runtime-worker.js +1227 -1216
  35. package/dist/sdk-a2a.d.ts +10 -10
  36. package/dist/sdk-a2a.js +1 -1
  37. package/dist/sdk-agent.d.ts +13 -13
  38. package/dist/sdk-agent.js +1 -1
  39. package/dist/sdk-coding.d.ts +96 -30
  40. package/dist/sdk-coding.js +1 -1
  41. package/dist/sdk-experimental-memory.d.ts +1 -1
  42. package/dist/sdk-experimental-memory.js +1 -1
  43. package/dist/sdk-llm.d.ts +8 -49
  44. package/dist/sdk-llm.js +1 -1
  45. package/dist/sdk-mcp.js +1 -1
  46. package/dist/sdk-media.d.ts +1 -1
  47. package/dist/sdk-media.js +1 -1
  48. package/dist/sdk-repl.d.ts +138 -16
  49. package/dist/sdk-repl.js +2 -2
  50. package/dist/sdk-runtime.d.ts +99 -17
  51. package/dist/sdk-runtime.js +1 -1
  52. package/dist/sdk-session.d.ts +6 -6
  53. package/dist/sdk-session.js +1 -1
  54. package/dist/sdk-skills.js +1 -1
  55. package/dist/semantic-worker.js +10 -10
  56. package/dist/types-chunks/{base.d-Cz_rwpOi.d.ts → base.d-ChvpaKjZ.d.ts} +1 -1
  57. package/dist/types-chunks/{bash-prefix-extractor.d-CHJO5y94.d.ts → bash-prefix-extractor.d-bApf5nGw.d.ts} +3 -3
  58. package/dist/types-chunks/{capability-learning.d-_lR0J4iR.d.ts → capability-learning.d-DPrYxRjF.d.ts} +1 -1
  59. package/dist/types-chunks/{capsule.d-DxtdE-GD.d.ts → capsule.d-CGWltwno.d.ts} +2 -2
  60. package/dist/types-chunks/{commands.d-DZxHzH5-.d.ts → commands.d-CEHGwRok.d.ts} +62 -6
  61. package/dist/types-chunks/{guardrail.d-DlpMnd-Y.d.ts → guardrail.d-CC4vAQl7.d.ts} +2 -1
  62. package/dist/types-chunks/{guardrail.d-auV61_h5.d.ts → guardrail.d-CXIPlWP3.d.ts} +10 -10
  63. package/dist/types-chunks/{public-api.d--IDNJsu1.d.ts → public-api.d-FBmX0kxo.d.ts} +4 -3
  64. package/dist/types-chunks/{run-manager.d-Bh50OdVl.d.ts → run-manager.d-DUNnJcpE.d.ts} +1 -1
  65. package/dist/types-chunks/{sdk-session-Cfw6NFu-.d.ts → sdk-session-XqacVOs8.d.ts} +3 -3
  66. package/dist/types-chunks/{resolver.d-ssgNSlrh.d.ts → side-query.d-DWTMsndP.d.ts} +68 -5
  67. package/dist/types-chunks/{types.d-DH1mvdcl.d.ts → types.d-BnPhGmar.d.ts} +3 -1
  68. package/dist/types-chunks/{types.d-Cqaw71Ax.d.ts → types.d-CSmF0t0n.d.ts} +6 -5
  69. package/dist/types-chunks/{types.d-EqQmHztg.d.ts → types.d-DKr6TCXL.d.ts} +16 -9
  70. package/dist/types-chunks/{types.d-CNZgY52F.d.ts → types.d-DgciGHoG.d.ts} +2 -2
  71. package/dist/types-chunks/{utils.d-gmn3c5U4.d.ts → utils.d-BPYX7-KN.d.ts} +94 -10
  72. package/docs/SDK_EMBEDDER_GUIDE.md +128 -21
  73. package/package.json +2 -2
  74. package/dist/chunks/argument-completer-QZETLNAB.js +0 -2
  75. package/dist/chunks/chunk-23X6REO4.js +0 -46
  76. package/dist/chunks/chunk-CLFP6UGU.js +0 -71
  77. package/dist/chunks/chunk-EDZ5KJFT.js +0 -5
  78. package/dist/chunks/chunk-GIK4SGAT.js +0 -364
  79. package/dist/chunks/chunk-GVWPHE23.js +0 -310
  80. package/dist/chunks/chunk-VDGCGOQH.js +0 -328
  81. package/dist/chunks/chunk-VVE3UM4F.js +0 -410
  82. package/dist/chunks/chunk-ZJIMT5I3.js +0 -78
  83. package/dist/chunks/compaction-config-TWCDFLX6.js +0 -2
  84. package/dist/chunks/dist-JT4ATXVM.js +0 -2
  85. package/dist/chunks/host-SVEDZUC5.js +0 -2
  86. package/dist/chunks/run-manager-RX42UNEM.js +0 -2
@@ -1,27 +1,27 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{$ as gs,A as us,B as Kn,E as Ho,G as fs,I as zn,J as Xn,K as ms,M as Bo,U as be,Z as ps,aa as ws,ba as hs,u as ls,w as He,x as qn,y as cs,z as ds}from"./chunk-WIBLZK4G.js";import{a as ys}from"./chunk-2RI252RN.js";import{Ea as rs,Fa as ss,Ja as is,La as as}from"./chunk-VVE3UM4F.js";import{i as Do}from"./chunk-IR5KIK7E.js";import{A as os,D as $e,J as Fe,m as Uo,n as jo,o as je,q as so,r as Fo,s as Jr,t as Zr,v as Qr,w as Gn,x as es,y as io}from"./chunk-MVARIMQV.js";import{Ba as ns,Ca as ts,L as Yr}from"./chunk-VDGCGOQH.js";import{Ab as Bn,B as Hr,Bb as No,Eb as Kr,Lc as Xr,Nc as Vr,fb as Br,hb as Gr,ib as qr,lb as Hn,ra as Oo,sc as zr,uc as se}from"./chunk-GIK4SGAT.js";import{C as Rr,Ma as Un,Na as We,Oa as Oe,v as Dn}from"./chunk-ZJIMT5I3.js";import{$c as Ue,Cd as Wo,Fa as Er,Fb as Dr,Ga as Cr,Ha as jn,Td as Fr,ad as Ur,k as _o,pd as jr,sd as Fn}from"./chunk-JSDLBXME.js";import{H as Pr,I as Lr,J as Mr,W as Se,X as De,aa as Wr,b as K,ca as Lo,e as Ne,ea as Mo,f as B,fa as Or,g as D,ga as Nr,h as Po,q as Ir,r as Tr,w as _r}from"./chunk-E27LHEIP.js";import{a,b as Nn,d as Ha}from"./chunk-ONUPGMER.js";var Es=Nn((cm,Rs)=>{"use strict";Rs.exports=a(function(o){return o.map(function(n){return n===""?"''":n&&typeof n=="object"?n.op.replace(/(.)/g,"\\$1"):/["\s\\]/.test(n)&&!/'/.test(n)?"'"+n.replace(/(['])/g,"\\$1")+"'":/["'\s]/.test(n)?'"'+n.replace(/(["\\$`!])/g,"\\$1")+'"':String(n).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")}).join(" ")},"quote")});var Ms=Nn((um,Ls)=>{"use strict";var Ps="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",Cs=new RegExp("^"+Ps+"$"),Is="|&;()<> \\t",qa='"((\\\\"|[^"])*?)"',Ka="'((\\\\'|[^'])*?)'",za=/^#$/,Ts="'",_s='"',Vn="$",xe="",Xa=4294967296;for(Yn=0;Yn<4;Yn++)xe+=(Xa*Math.random()).toString(16);var Yn,Va=new RegExp("^"+xe);function Ya(e,o){for(var n=o.lastIndex,t=[],r;r=o.exec(e);)t.push(r),o.lastIndex===r.index&&(o.lastIndex+=1);return o.lastIndex=n,t}a(Ya,"matchAll");function Ja(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+xe+JSON.stringify(t)+xe:o+t}a(Ja,"getVar");function Za(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+Is+`]|[^\\s'"`+Is+"])+",i=new RegExp(["("+Ps+")","("+r+"|"+qa+"|"+Ka+")+"].join("|"),"g"),l=Ya(e,i);if(l.length===0)return[];o||(o={});var c=!1;return l.map(function(d){var u=d[0];if(!u||c)return;if(Cs.test(u))return{op:u};var f=!1,m=!1,k="",v=!1,y;function $(){y+=1;var T,L,Y=u.charAt(y);if(Y==="{"){if(y+=1,u.charAt(y)==="}")throw new Error("Bad substitution: "+u.slice(y-2,y+1));if(T=u.indexOf("}",y),T<0)throw new Error("Bad substitution: "+u.slice(y));L=u.slice(y,T),y=T}else if(/[*@#?$!_-]/.test(Y))L=Y,y+=1;else{var J=u.slice(y);T=J.match(/[^\w\d_]/),T?(L=J.slice(0,T.index),y+=T.index-1):(L=J,y=u.length)}return Ja(o,"",L)}for(a($,"parseEnvVar"),y=0;y<u.length;y++){var g=u.charAt(y);if(v=v||!f&&(g==="*"||g==="?"),m)k+=g,m=!1;else if(f)g===f?f=!1:f==Ts?k+=g:g===t?(y+=1,g=u.charAt(y),g===_s||g===t||g===Vn?k+=g:k+=t+g):g===Vn?k+=$():k+=g;else if(g===_s||g===Ts)f=g;else{if(Cs.test(g))return{op:u};if(za.test(g)){c=!0;var x={comment:e.slice(d.index+y+1)};return k.length?[k,x]:[x]}else g===t?m=!0:g===Vn?k+=$():k+=g}}return v?{op:"glob",pattern:k}:k}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(Za,"parseInternal");Ls.exports=a(function(o,n,t){var r=Za(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("("+xe+".*?"+xe+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return Va.test(d)?JSON.parse(d.split(xe)[1]):d}))},[])},"parse")});var Ws=Nn(Jn=>{"use strict";Jn.quote=Es();Jn.parse=Ms()});import*as Tn from"fs";import*as Co from"path";import*as Rn from"fs";import An from"path";import s from"chalk";var Go=["plan","accept-edits","auto","auto-in-project"];function nm(e){return e==="auto"||e==="auto-in-project"}a(nm,"isAutoMode");function Ba(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(Ba,"permissionModeDisplayName");var Ga='[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 tm(e=o=>{K({source:"repl:permission",level:"warn",message:o})}){let o=!1;return()=>{o||(o=!0,e(Ga))}}a(tm,"createAutoInProjectDeprecationEmitter");var ks=Xr(),ao=new Set(ks.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),vs=new Set(ks.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),Ss=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"]),$s=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 bs(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(bs,"computeConfirmTools");function xs(e){return e!==void 0&&Go.includes(e)}a(xs,"isPermissionMode");function lo(e,o){return xs(e)?e:o}a(lo,"normalizePermissionMode");async function As(e){let o=e.resolve(e.provider),n=[];for(let t of e.efforts){if(e.signal?.aborted)break;let r=!1;try{await o.stream([{role:"user",content:"ping"}],[],"",{effort:t},{modelOverride:e.model,maxOutputTokensOverride:1,onReasoningEffortRejected:a(()=>{r=!0},"onReasoningEffortRejected"),onTextDelta:a(()=>{},"onTextDelta")},e.signal)}catch(i){n.push({effort:t,status:"error",error:i instanceof Error?i.message:String(i)});continue}r?(Cr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(As,"probeProviderReasoningEfforts");import Zo from"fs";import ii from"path";import qo from"fs";import W from"path";import uo from"os";var Ds=Ha(Ws(),1);var Os=new Set(["/dev/null","nul","NUL"]);function Zn(e){return Os.has(e)||Os.has(e.toLowerCase())}a(Zn,"isNullDevice");function co(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,m=>`$${m}`)}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 k=n[m];if(typeof k=="string"){i.push(k);continue}if("op"in k){let v=k.op;if(v==="&&"||v==="||"||v===";"){f(v);continue}if(v==="|"){u();continue}if(v==="&"){let y=n[m+1];if(y!==void 0&&typeof y!="string"&&"op"in y&&(y.op===">"||y.op===">>")){let $=n[m+2];if(typeof $!="string"){d=!0,m+=1;continue}l.push(Ns(`&${y.op}`,$)),m+=2;continue}d=!0;continue}if(el(v)){let y=null,$=i[i.length-1];$!==void 0&&/^[0-9]+$/.test($)&&(y=$,i.pop());let g=n[m+1];if(typeof g!="string"){d=!0;continue}l.push(Ns(y?`${y}${v}`:v,g)),m+=1;continue}if(v==="glob"){let y=k.pattern;typeof y=="string"?i.push(y):d=!0;continue}d=!0;continue}if("comment"in k)break;d=!0}return f(null),{statements:t,unparseable:d}}a(co,"parseBashCommand");var Qa=new Set([">",">>","<","<<","<<<","&>","&>>"]),Us=/^([0-9]+|&)(>>?|<<?)$/;function el(e){return Qa.has(e)||Us.test(e)}a(el,"isRedirectionOp");function Ns(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(Ns,"parseRedirection");var ol=W.join(".agent","plan_mode_doc.md"),Ko=new Map,zo=null;function nl(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of $s)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(nl,"isSingleBashReadCommand");var tl=/^[a-zA-Z0-9]+$/;function rl(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(!tl.test(t))return!1;return n}a(rl,"isHelpCommand");function tt(e){if(!e||!e.trim())return!1;if(rl(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=co(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||!Zn(c.target))return!1;let l=i.argv.join(" ");if(l&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!nl(l))return!1}}return!0}a(tt,"isBashReadCommand");function sl(e){let o=e.trim();return o?tt(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(sl,"getDirectShellBypassBlockReason");var qs=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]),il={bash:new Set(["-c"]),dash:new Set(["-c"]),sh:new Set(["-c"]),zsh:new Set(["-c"]),cmd:new Set(["/c"]),powershell:new Set(["-command","-c"]),pwsh:new Set(["-command","-c"])};function et(e){let o=e[0]?.replace(/\\/g,"/"),n=o?.slice(o.lastIndexOf("/")+1).replace(/\.exe$/i,"").toLowerCase();if(!n)return;let t=il[n];if(!t)return;let r=e.findIndex((i,l)=>l>0&&t.has(i.toLowerCase()));return r>=0?e[r+1]:void 0}a(et,"getNestedShellCommand");function rt(e){return Ks(e,0)}a(rt,"isBashWriteCommand");function Ks(e,o){if(!e||!e.trim())return!1;let n=co(e);if(n.unparseable)return!1;for(let t of n.statements)for(let r of t.stages){let i=r.argv.map(c=>c.toLowerCase());if(i.length>0){let c=i[0],d=i.length>=2?`${i[0]} ${i[1]}`:null;for(let u of Ss)if(u===c||d!==null&&u===d)return!0}for(let c of i)if(qs.has(c))return!0;for(let c of r.redirections)if(!c.input&&!Zn(c.target))return!0;let l=o<3?et(r.argv):void 0;if(l!==void 0&&Ks(l,o+1))return!0}return!1}a(Ks,"isBashWriteCommandAtDepth");function st(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(st,"parseAllowedToolPattern");function al(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(al,"matchesBashPatternLegacy");function ll(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a(ll,"matchesBashPatternByExtractedPrefix");async function it(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",l=[];for(let c of n){let d=st(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&&ll(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&al(i,c))return!0;return!1}a(it,"isToolCallAllowed");function at(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(at,"generateSavePattern");function fo(e,o){try{let n=W.resolve(e),t=W.resolve(o),r=Ne(),i=W.join(t,".kodax");return D(n,i)||D(n,r)?!0:!(D(n,t)||Zs().some(c=>D(n,c)))}catch{return!1}}a(fo,"isAlwaysConfirmPath");function js(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"&&ot.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e)||e.split(/[/\\]+/).includes(".."))}a(js,"looksLikePath");var ot=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/,Fs={python:new Set(["-c"]),py:new Set(["-c"]),node:new Set(["-e","--eval","-p","--print"]),ruby:new Set(["-e"]),perl:new Set(["-e"])},cl=new Set(["rg","ripgrep","grep","egrep","fgrep","findstr","select-string","sed","awk"]),dl=new Set(["-e","--regexp","--regex","-pattern"]),ul=new Set(["-f","--file"]),Hs=new Set(["-g","--glob","--iglob","-r","--replace"]),Qn=new Set(["--include","--exclude","--exclude-dir"]),fl={rg:Hs,ripgrep:Hs,grep:Qn,egrep:Qn,fgrep:Qn,awk:new Set(["-v","--assign"]),"select-string":new Set(["-inputobject"])},ml={rg:new Set(["--ignore-file"]),ripgrep:new Set(["--ignore-file"]),grep:new Set(["--exclude-from"]),egrep:new Set(["--exclude-from"]),fgrep:new Set(["--exclude-from"]),"select-string":new Set(["-path","-literalpath"])};function lt(e){let o=e.replace(/\\/g,"/");return(o.split("/").pop()??o).toLowerCase().replace(/\.exe$/,"")}a(lt,"commandBasename");function pl(){return{sourceIndexes:new Set,pathIndexes:new Set,pathValues:new Set}}a(pl,"createCommandArgumentRoles");function Be(e,o,n,t){let r=e[o];r!==void 0&&(n.add(o),t?.add(r))}a(Be,"addIndexedValue");function Xo(e,o){let n=e.toLowerCase();if(o.startsWith("--")){let t=`${o}=`;return n.startsWith(t)?e.slice(t.length):void 0}return n.startsWith(o)&&e.length>o.length?e.slice(o.length):void 0}a(Xo,"attachedOptionValue");function gl(e,o,n){for(let t=1;t<e.length;t+=1){let r=e[t]??"",i=r.toLowerCase();for(let l of o){if(i===l){Be(e,t+1,n.sourceIndexes);break}if(Xo(r,l)!==void 0){n.sourceIndexes.add(t);break}}}}a(gl,"collectScriptSourceRoles");function Bs(e,o,n,t){if(o)for(let r=1;r<e.length;r+=1){let i=e[r]??"";if(i==="--")break;let l=i.toLowerCase();for(let c of o){if(l===c){Be(e,r+1,n,t);break}let d=Xo(i,c);if(d!==void 0){n.add(r),t?.add(d);break}}}}a(Bs,"collectFlagValueRoles");function wl(e,o){let n=lt(e[0]??"");Bs(e,fl[n],o.sourceIndexes),Bs(e,ml[n],o.pathIndexes,o.pathValues);let t=!1;for(let i=1;i<e.length;i+=1){let l=e[i]??"";if(l==="--")break;let c=l.toLowerCase();if(n==="findstr"&&c.startsWith("/c:")){o.sourceIndexes.add(i),t=!0;continue}if(n==="findstr"&&c.startsWith("/g:")){o.pathIndexes.add(i),o.pathValues.add(l.slice(3)),t=!0;continue}for(let d of dl){if(c===d){Be(e,i+1,o.sourceIndexes),t=!0;break}if(Xo(l,d)!==void 0){o.sourceIndexes.add(i),t=!0;break}}for(let d of ul){if(c===d){Be(e,i+1,o.pathIndexes,o.pathValues),t=!0;break}let u=Xo(l,d);if(u!==void 0){o.pathValues.add(u),t=!0;break}}}if(!t){let i=!1;for(let l=1;l<e.length;l+=1){let c=e[l]??"";if(c==="--"){i=!0;continue}if(!(o.sourceIndexes.has(l)||o.pathIndexes.has(l))&&!(!i&&c.startsWith("-"))&&!(n==="findstr"&&ot.test(c))){Be(e,l,o.sourceIndexes);break}}}let r=!1;for(let i=1;i<e.length;i+=1){let l=e[i]??"";if(l==="--"){r=!0;continue}!r&&l.startsWith("-")||o.sourceIndexes.has(i)||o.pathIndexes.has(i)||n==="findstr"&&ot.test(l)||Be(e,i,o.pathIndexes,o.pathValues)}}a(wl,"collectRegexArgumentRoles");function zs(e){let o=pl(),n=lt(e[0]??""),t=/^python(?:\d+(?:\.\d+)*)?$/.test(n)?Fs.python:Fs[n];return t&&gl(e,t,o),cl.has(n)&&wl(e,o),o}a(zs,"collectCommandArgumentRoles");function Xs(e){let o=[],n=[],t="",r=-1,i,l=a(d=>{r<0||(n.push({value:t,start:r,end:d}),t="",r=-1)},"finishWord"),c=a(()=>{n.length>0&&o.push(n),n=[]},"finishStage");for(let d=0;d<e.length;d+=1){let u=e[d];if(i){u===i?i=void 0:i==='"'&&u==="\\"&&e[d+1]==='"'?(t+=`${u}${e[d+1]}`,d+=1):t+=u;continue}u==='"'||u==="'"?(r<0&&(r=d),i=u):/\s/.test(u)?l(d):u==="|"||u==="&"||u===";"?(l(d),c()):(r<0&&(r=d),t+=u)}return i?[]:(l(e.length),c(),o)}a(Xs,"tokenizeRawCommandStages");function Vs(e){let o=e.split("");for(let n of Xs(e)){let t=zs(n.map(r=>r.value));for(let r of t.sourceIndexes){let i=n[r];if(i)for(let l=i.start;l<i.end;l+=1)o[l]=" "}}return o.join("")}a(Vs,"maskRawInlineSources");function hl(e){let o=[],n;for(let i of[/"([A-Za-z]:\\[^"\r\n]+)"/g,/'([A-Za-z]:\\[^'\r\n]+)'/g])for(;(n=i.exec(e))!==null;)o.push(n[1]);let t=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(n=t.exec(e))!==null;)o.push(n[1]);let r=/(?:^|[\s:=<>])([a-zA-Z]:\\[^\s"'|;&<>]+)/g;for(;(n=r.exec(e))!==null;)o.push(n[1]);return o}a(hl,"legacyRegexPathScan");function Yo(e){let o=new Set,n=co(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){let i=zs(r.argv);for(let l of i.pathValues)o.add(l);for(let l=0;l<r.argv.length;l+=1){let c=r.argv[l];i.sourceIndexes.has(l)||i.pathIndexes.has(l)||js(c)&&o.add(c)}for(let l of r.redirections)js(l.target)&&o.add(l.target)}for(let t of hl(Vs(e)))o.add(t);return Array.from(o)}a(Yo,"extractPathsFromCommand");function yl(e,o,n=o){let t=Yo(e);for(let r of t){let i=Po(r,n);if(fo(i,o))return!0}return!1}a(yl,"isCommandOnProtectedPath");function Gs(e){let o=W.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(Gs,"normalizePathForComparison");function kl(e,o){return Gs(e)===Gs(o)}a(kl,"pathsEqual");function ct(e,o){try{let n=W.resolve(o),t=W.resolve(n,Js(Ys(e)));return D(t,n)}catch{return!1}}a(ct,"isPathInsideProject");function vl(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(vl,"collectAbsolutePathCandidates");function dt(e){let o=W.resolve(e),n=Ko.get(o);if(n)return n;if(qo.existsSync(o)){let c=qo.realpathSync.native(o);return Ko.set(o,c),c}let t=[],r=o;for(;!qo.existsSync(r);){let c=W.dirname(r);if(c===r)return Ko.set(o,o),o;t.unshift(W.basename(r)),r=c}let i=qo.realpathSync.native(r),l=W.join(i,...t);return Ko.set(o,l),l}a(dt,"resolveExistingPathPrefix");function Ys(e){return e==="~"?uo.homedir():e.startsWith(`~${W.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?W.join(uo.homedir(),e.slice(2)):e}a(Ys,"expandHomeDirectory");function Js(e){let o=uo.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(Js,"expandSystemTempAlias");function Sl(e,o,n=o){let t=W.resolve(n??o??process.cwd()),r=Js(Ys(e)),i=W.isAbsolute(r)?W.resolve(r):W.resolve(t,r);return dt(i)}a(Sl,"resolvePermissionPath");function Zs(){if(zo)return zo;let e=new Set,o=[uo.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(dt(n))}catch{}return zo=Array.from(e),zo}a(Zs,"getSystemTempDirectories");function ut(e){let o=dt(e??process.cwd());return{projectPlanDoc:W.join(o,ol),systemTempDirs:Zs()}}a(ut,"getPlanModeAllowedWritablePaths");function nt(e,o,n=o){let t=Sl(e,o,n),{projectPlanDoc:r,systemTempDirs:i}=ut(o);return kl(t,r)?!0:i.some(l=>D(t,l))}a(nt,"isPlanModeAllowedPath");function $l(e){let{projectPlanDoc:o,systemTempDirs:n}=ut(e),t=n[0]??uo.tmpdir();return`${o} or the system temp directory (${t})`}a($l,"formatPlanModeAllowedLocations");var bl=new Set(["-a","--append","-i","--ignore-interrupts"]);function xl(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];bl.has(t)||t.startsWith("-")||o.push(t)}return o}a(xl,"collectTeeTargets");function Al(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(Al,"collectPowerShellWriteTargets");function Ge(e){return Vo(e,0,!0)}a(Ge,"collectBashWriteTargets");function Qs(e){return Vo(e,0,!1)}a(Qs,"collectDeterministicBashWriteTargets");var Rl=new Set(["rm","rmdir","mkdir","touch","mv","move","ren","del","erase","rd"]),El=new Set(["cp","copy"]);function Cl(e,o=1){let n=[],t=!1;for(let r=o;r<e.length;r+=1){let i=e[r];i==="--"?t=!0:(t||!i.startsWith("-"))&&n.push(i)}return n}a(Cl,"collectPositionalArgs");function Il(e){let o=lt(e.argv[0]??""),n=Cl(e.argv);if(Rl.has(o))return n;if(El.has(o)){let t=e.argv.findIndex(i=>i==="-t"||i==="--target-directory");if(t>=0){let i=e.argv[t+1];return i?[i]:[]}let r=e.argv.find(i=>i.startsWith("--target-directory="));return r?[r.slice(19)]:n.slice(-1)}if(o==="chmod"||o==="chown")return n.slice(1);if(o==="dd"){let t=e.argv.find(r=>r.startsWith("of="));return t?[t.slice(3)]:[]}return[]}a(Il,"collectDirectCommandWriteTargets");function Tl(e){let o=[],n=Vs(e),t;for(let r=0;r<n.length;r+=1){let i=n[r];if(t!==void 0){i===t?t=void 0:i==="\\"&&t==='"'&&(r+=1);continue}if(i==='"'||i==="'"){t=i;continue}if(i==="\\"){r+=1;continue}if(i!==">")continue;for(n[r+1]===">"&&(r+=1);/\s/.test(n[r+1]??"");)r+=1;let l=n[r+1],c=r+(l==='"'||l==="'"?2:1),d=c;for(;d<n.length;){let u=n[d];if(l==='"'||l==="'"){if(u===l)break}else if(/\s|[|;&<>]/.test(u))break;d+=1}d>c&&o.push(n.slice(c,d)),r=d}return o}a(Tl,"collectRawOutputRedirectionTargets");function Vo(e,o,n){let t=new Set,r=a(l=>{let c=l?.trim();c&&t.add(c)},"pushTarget");if(n)for(let l of Yo(e))r(l);else for(let l of Tl(e))r(l);let i=co(e);if(i.unparseable){if(o<3)for(let l of Xs(e)){let c=et(l.map(d=>d.value));if(c!==void 0)for(let d of Vo(c,o+1,n))r(d)}return Array.from(t)}for(let l of i.statements)for(let c of l.stages){for(let f of c.redirections)f.input||r(f.target);let d=c.argv[0]?.toLowerCase();if(!d)continue;if(d==="tee")for(let f of xl(c))r(f);else if(qs.has(d))for(let f of Al(c))r(f);if(!n)for(let f of Il(c))r(f);let u=o<3?et(c.argv):void 0;if(u!==void 0)for(let f of Vo(u,o+1,n))r(f)}return Array.from(t)}a(Vo,"collectBashWriteTargetsAtDepth");function ei(e,o){if(!rt(e))return{dangerous:!1};let n=new Set([...Ge(e),...vl(e)]);for(let t of n)if(!ct(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(ei,"getBashOutsideProjectWriteRisk");function oi(e,o,n,t=n){let r=$l(n);if(Vr(e))return null;if(ao.has(e)){let i=typeof o.path=="string"?o.path:"";return i?nt(i,n,t)?null:`[Blocked] Plan mode only allows file modifications in ${r}. Requested path: ${i}`:`[Blocked] Tool '${e}' is not allowed in plan mode unless it targets ${r}.`}if(e==="bash"){let i=o.command??"";if(!rt(i))return null;let l=Ge(i);if(l.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${r}. Could not determine a safe target from: ${i.slice(0,80)}${i.length>80?"...":""}`;let c=l.find(d=>!nt(d,n,t));return c?`[Blocked] Plan mode only allows bash write operations in ${r}. Blocked target: ${c}`:null}return`[Blocked] Tool '${e}' has side effects and is not permitted in plan mode. Switch to accept-edits or auto mode to use it, or work within ${r}.`}a(oi,"getPlanModeBlockReason");import Jo from"node:path";import mt from"node:os";function ti(){try{return Ne()}catch{return}}a(ti,"safeGetAgentConfigHome");function ft(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return Po(e.replace(n,mt.homedir()),o)}a(ft,"resolveShellWriteTarget");function ni(e,o){let n=ti();if(n&&D(e,n))return"user-kodax";let t=Jo.join(Jo.resolve(o),".kodax");if(D(e,t))return"project-kodax"}a(ni,"resolveProtectedZone");function _l(){let e=new Set;try{e.add(mt.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(_l,"getSystemTempDirs");var Pl=new Set(["bash"]),Ll={toolNames:Pl,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],i=new Set,l=new Set,c=_l(),d=Jo.resolve(o);for(let u of Yo(t)){let f;try{f=ft(u,n)}catch{continue}let m=ni(f,o);if(m){i.has(f)||(i.add(f),r.push({kind:"protected_path",path:u,zone:m}));continue}if(fo(f,o)){let k=c.some(y=>D(f,y)),v=D(f,d);!k&&!v&&!l.has(f)&&(l.add(f),r.push({kind:"outside_project",path:u}))}}for(let u of Ge(t)){let f;try{f=ft(u,n)}catch{continue}ni(f,o)||D(f,d)||c.some(v=>D(f,v))||r.push({kind:"shell_redirect_outside",target:u})}return r}},Nm=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([Jo.join(mt.homedir(),".kodax")]),i=ti();i&&r.add(i);for(let l of Qs(t)){let c=ft(l,n);if([...r].some(d=>D(c,d)))return{denied:!0,patternId:"user_kodax_write",reason:`Shell write to credential-zone path \`${l}\` (under ~/.kodax/) is permanently denied. KodaX config edits must use the \`kodax config\` CLI or SDK config API.`}}return{denied:!1}},"replBashUserKodaxWriteDeny");var Qo=B("config.json");function ai(){return ii.join(process.cwd(),".kodax","config.local.json")}a(ai,"getProjectConfigFile");function Zm(e=process.env){let n=mo(Qo).autoMode??{},t=e.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,i=n.engine==="llm"||n.engine==="rules"?n.engine:void 0,l=r??i??"llm",c=si(n.classifierModel),d=si(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,k=typeof n.timeoutMs=="number"&&n.timeoutMs>0?Math.floor(n.timeoutMs):void 0,v=ri(e.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),y=typeof n.speculativeWindowMs=="number"?ri(String(n.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??k,speculativeWindowMs:v??y}}a(Zm,"loadAutoModeSettings");function ri(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(ri,"parseSpeculativeWindow");function si(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(si,"nonEmptyString");function mo(e){try{if(Zo.existsSync(e))return JSON.parse(Zo.readFileSync(e,"utf-8"))}catch{}return{}}a(mo,"readJsonFile");function li(e,o){Zo.mkdirSync(ii.dirname(e),{recursive:!0}),Zo.writeFileSync(e,JSON.stringify(o,null,2))}a(li,"writeJsonFile");function pt(e){let o=mo(Qo);li(Qo,{...o,permissionMode:e})}a(pt,"savePermissionModeUser");function Qm(){let e=mo(Qo),o=mo(ai()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Qm,"loadAlwaysAllowTools");function ep(e,o,n=!1){let t=at(e,o,n);if(!t)return;let r=ai(),i=mo(r),l=i.alwaysAllowTools??[];l.includes(t)||li(r,{...i,alwaysAllowTools:[...l,t]})}a(ep,"saveAlwaysAllowToolPattern");var gt=["ama","sa"];function ci(e){let o=gt.indexOf(e);return gt[(o+1)%gt.length]??"ama"}a(ci,"nextAgentMode");var pe=class{static{a(this,"CommandRegistry")}commands=new Map;aliases=new Map;register(o){let n=o.name.toLowerCase();if(this.commands.has(n))throw new Error(`Command "${o.name}" is already registered`);if(this.aliases.has(n)){let r=this.aliases.get(n);throw new Error(`Command "${o.name}" conflicts with existing alias for "${r}"`)}let t=new Set;for(let r of o.aliases??[]){let i=r.toLowerCase();if(i!==n){if(t.has(i))throw new Error(`Alias "${r}" is duplicated within command "${o.name}"`);if(this.commands.has(i))throw new Error(`Alias "${r}" conflicts with existing command "${i}"`);if(this.aliases.has(i)){let l=this.aliases.get(i);throw new Error(`Alias "${r}" is already registered for "${l}"`)}t.add(i)}}if(this.commands.set(n,{...o,source:o.source??"builtin"}),o.aliases)for(let r of o.aliases){let i=r.toLowerCase();i!==n&&this.aliases.set(i,n)}}unregister(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;if(!this.commands.has(t))return!1;let r=this.commands.get(t);if(r?.aliases)for(let i of r.aliases)this.aliases.delete(i.toLowerCase());return this.commands.delete(t),!0}get(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.get(t)}has(o){let n=o.toLowerCase(),t=this.aliases.get(n)??n;return this.commands.has(t)}getAll(o){let n=new Map;for(let[t,r]of this.commands)o&&r.source!==o||n.has(t)||n.set(t,{name:r.name,aliases:r.aliases,description:r.description,source:r.source??"builtin",usage:r.usage,priority:r.priority,location:r.location,path:r.path,userInvocable:r.userInvocable,disableModelInvocation:r.disableModelInvocation,allowedTools:r.allowedTools,context:r.context,agent:r.agent,argumentHint:r.argumentHint,model:r.model});return Array.from(n.values()).sort((t,r)=>t.name.localeCompare(r.name))}getBySource(o){return this.getAll(o)}getNames(){return Array.from(this.commands.keys()).sort()}clear(){this.commands.clear(),this.aliases.clear()}get size(){return this.commands.size}get aliasCount(){return this.aliases.size}},Ml=new pe;function wt(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(wt,"formatLearningStatus");function ap(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${wt(e)} [/learn]`}a(ap,"formatLearningRecoverySummary");import z from"chalk";import{Buffer as mi}from"node:buffer";import{spawn as Wl}from"node:child_process";import di from"node:process";var Ae="\x1B",Ol="\x07",ht=`${Ae}\\`;function ui(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(ui,"shouldPreferNativeClipboard");function Nl(e,o){let n=mi.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?ht:Ol,r=`${Ae}]52;c;${n}${t}`;return o.TMUX?`${Ae}Ptmux;${r.replaceAll(Ae,`${Ae}${Ae}`)}${ht}`:o.STY?`${Ae}P${r}${ht}`:r}a(Nl,"buildOscSequence");async function en(e,o,n){return new Promise((t,r)=>{let i=Wl(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(en,"execClipboardCommand");function Dl(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=mi.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Dl,"buildWindowsClipboardCandidates");async function fi(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Dl(e);for(let[r,i,l]of t)try{if(await en(r,i,l))return!0}catch{}return!1}case"darwin":return en("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await en(r,i,e))return!0}catch{}return!1}default:return!1}}a(fi,"tryNativeClipboard");async function Ul(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await en("tmux",n,e)}catch{return!1}}a(Ul,"tryTmuxClipboard");async function pi(e,o={}){let n=o.env??di.env,t=o.platform??di.platform,r=e.trimEnd(),i=Nl(r,n);if(!r)throw new Error("Nothing to copy.");if(ui(n,t))try{if(await fi(r,n,t))return{path:"native"}}catch{}if(await Ul(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!ui(n,t))try{if(await fi(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(pi,"copyTextToClipboard");var yt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(yt||(yt={}));var q;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(q||(q={}));var gp={[q.Scheduled]:"\u25CB",[q.Validating]:"\u25CC",[q.AwaitingApproval]:"?",[q.Executing]:"\u25CB",[q.Success]:"\u2713",[q.Error]:"\u2717",[q.Cancelled]:"-"},gi;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(gi||(gi={}));var wp={streamingState:yt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var jl="[redacted]",wi="[truncated]";function ie(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(ie,"truncateToolReplayText");function Fl(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(Fl,"isSensitiveToolInputKey");function hi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(hi,"isRecord");function kt(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return ie(e);if(o>=6)return wi;if(typeof e=="object"&&e!==null){if(n.has(e))return wi;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>kt(r,o+1,n));if(!hi(e))return ie(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=Fl(r)?jl:kt(i,o+1,n);return t}return ie(String(e))}a(kt,"sanitizeToolJsonValue");function yi(e){if(!e)return;let o=kt(e);return hi(o)?o:void 0}a(yi,"sanitizeToolInput");function ki(e){if(e!==void 0){if(typeof e=="string")return ie(e);try{return ie(JSON.stringify(e))}catch{return ie(String(e))}}}a(ki,"stringifyToolReplayValue");function $p(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool",...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Vl),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a($p,"seedToHistoryItem");var Hl="[Thinking]",Bl="[/Thinking]",Gl="Untitled Session",vi=50,ql=60,$i="...",bi=["[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:"],xi=[/(?:^|\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:/],Kl=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,zl="Session ended before the tool completed.";function Xl(e){switch(e){case"success":return q.Success;case"error":return q.Error;case"cancelled":return q.Cancelled;case"awaiting_approval":return q.AwaitingApproval;default:return e}}a(Xl,"toolCallSeedToHistoryToolStatus");function Vl(e){return{id:e.id,name:e.name,status:Xl(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(Vl,"toolCallSeedToHistoryToolCall");function Yl(e){let o=-1;for(let n of bi){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of xi){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Yl,"findControlPlaneCutIndex");function Jl(e){return bi.some(o=>e.includes(o))||xi.some(o=>o.test(e))}a(Jl,"hasControlPlaneSignal");function Ai(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(Ai,"collectTextBlocks");function nn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(nn,"isRecord");function Zl(e){if(typeof e=="string")return ie(e);if(e===void 0)return"";try{return ki(e)??""}catch{return ie(String(e))}}a(Zl,"toolResultContentToString");function Ql(e){let o=Zl(e.content),n=o.trimStart(),t=e.is_error===!0||n.startsWith("[Tool Error]")||n.startsWith("[Error]"),r=n.startsWith("[Cancelled]")||n.startsWith("[Blocked]");return t?{status:"error",error:o}:r?{status:"cancelled",error:o}:{status:"success",output:o}}a(Ql,"inferToolResultSeed");function ec(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!nn(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,Ql(n));return o}a(ec,"collectToolResultSeeds");function oc(e,o){if(e.type!=="tool_use"||typeof e.id!="string"||typeof e.name!="string")return;let n=o.get(e.id)??{status:"cancelled",error:zl};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:yi(nn(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(oc,"buildToolCallSeed");function nc(e){return typeof e=="string"?e:Array.isArray(e)?Ai(e).join(`
3
- `):""}a(nc,"extractAssistantTextOnly");function go(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(go,"pushSeed");function Si(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(Si,"stripLegacyTagBoundaryNewlines");function tc(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?po(String(n.command??"")):o==="read"||o==="write"||o==="edit"?po(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?po(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?po(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(tc,"formatToolUseSummary");function po(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(po,"truncateToolHint");function rc(e){if(!e.includes(Hl)||!e.includes(Bl))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(Kl)){let r=t.index??-1,i=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+i.length;go(o,"assistant",Si(e.slice(n,c))),go(o,"thinking",l),n=r+t[0].length}return go(o,"assistant",Si(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(rc,"parseLegacyAssistantContent");function Ri(e,o){if(typeof e=="string")return rc(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],i=a(()=>{t.length!==0&&(go(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(!(!nn(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&&go(n,"thinking",String(c.thinking));break;case"tool_use":if(i(),o){let d=oc(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=tc({name:c.name,...nn(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(Ri,"extractAssistantHistorySeeds");var sc=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],ic=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function ac(e){return sc.some(o=>e.includes(o))}a(ac,"isManagedWorkerPrompt");function Ei(e){return e.replace(ic,"").trim()}a(Ei,"stripManagedProtocolBlocks");function lc(e){switch(e.role){case"assistant":return Ri(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=Ei(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=on(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=on(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=on(e.content);return o.trim().length===0||ac(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(lc,"extractHistorySeedsFromMessageWithoutTimestamp");function Ci(e,o){if(o===void 0)return[...e];let n=Date.parse(o);return!Number.isFinite(n)||n<0?[...e]:e.map(t=>({...t,timestamp:n}))}a(Ci,"withMessageTimestamp");function cc(e){return Ci(lc(e),e.timestamp)}a(cc,"extractHistorySeedsFromMessage");function bp(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=ec(e[n+1]),i=Ci(Ri(t.content,r),t.timestamp);o.push(...i.map(l=>l.type==="assistant"?{...l,text:Ei(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...cc(t))}}return o}a(bp,"extractHistorySeedsFromMessages");function on(e){return typeof e=="string"?e:Array.isArray(e)?Ai(e).join(`
5
- `):""}a(on,"extractTextContent");function dc(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>vi?`${o.slice(0,vi)}${$i}`:o:Gl}a(dc,"formatSessionTitle");function uc(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(uc,"isPureToolResultUserMessage");function vt(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=nc(n.content);return t&&t.trim()!=="..."?t:""}if(!uc(n))return""}}return""}a(vt,"extractLastAssistantText");function xp(e,o,n,t){let r=[vt(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=Ii(i);if(l)return l}return""}a(xp,"resolveCompletedAssistantText");function Ii(e){let o=e.trim();if(!o||o==="...")return"";let n=Yl(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Ii,"sanitizeUserFacingAssistantText");function Ap(e){let o=e.trim();return o.length>0&&Ii(o).length===0&&Jl(o)}a(Ap,"isControlPlaneOnlyAssistantText");function Rp(e){let o=e.find(t=>t.role==="user"),n=o?on(o.content):"";return dc(n)}a(Rp,"extractTitle");function Ep(e,o=ql){let n=e.replace(/\n/g," "),t=n.length>o?$i:"";return n.slice(0,o)+t}a(Ep,"formatMessagePreview");var St={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=vt(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 pi(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(`
2
+ import{$ as us,A as as,B as Gn,E as Bo,G as ls,K as cs,M as Go,U as $e,Z as ds,aa as fs,ba as ms,u as rs,w as Fe,y as ss,z as is}from"./chunk-MLEAQTCD.js";import{a as ps}from"./chunk-PFH53O4M.js";import{Fa as es,Ga as os,Ka as ns,Ma as ts}from"./chunk-EAD4SF3Z.js";import{i as Uo}from"./chunk-6RI2RBTF.js";import{A as Jr,D as Se,J as je,m as jo,n as Fo,o as Ue,q as so,r as Ho,s as Kr,t as Xr,v as Vr,w as Bn,x as Yr,y as io}from"./chunk-M7FXNPWV.js";import{Ba as Zr,Ca as Qr,L as zr}from"./chunk-AGDDM5AW.js";import{Db as Hn,E as Dr,Eb as Do,Hb as Hr,Oc as Gr,Qc as qr,ib as Ur,kb as jr,lb as Fr,ob as Fn,ua as No,vc as Br,xc as se}from"./chunk-HVCNAZ52.js";import{C as $r,Ma as Dn,Na as Me,Oa as We}from"./chunk-XXQLPTAN.js";import{$c as De,Cd as Oo,Fa as br,Fb as Mr,Ga as xr,Ha as Un,Td as Nr,ad as Wr,k as Po,pd as Or,sd as jn}from"./chunk-OG6DRNKV.js";import{H as Cr,I as Ir,J as Tr,W as ve,X as Ne,aa as _r,b as z,ca as Mo,e as Oe,ea as Wo,f as B,fa as Pr,g as D,ga as Lr,h as Lo,q as Ar,r as Rr,w as Er}from"./chunk-GAFFYJU3.js";import{a,b as Nn,d as Ua}from"./chunk-ONUPGMER.js";var bs=Nn((lm,$s)=>{"use strict";$s.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 Ts=Nn((dm,Is)=>{"use strict";var Cs="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",xs=new RegExp("^"+Cs+"$"),As="|&;()<> \\t",Ha='"((\\\\"|[^"])*?)"',Ba="'((\\\\'|[^'])*?)'",Ga=/^#$/,Rs="'",Es='"',qn="$",be="",qa=4294967296;for(zn=0;zn<4;zn++)be+=(qa*Math.random()).toString(16);var zn,za=new RegExp("^"+be);function Ka(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(Ka,"matchAll");function Xa(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+be+JSON.stringify(t)+be:o+t}a(Xa,"getVar");function Va(e,o,n){n||(n={});var t=n.escape||"\\",r="(\\"+t+`['"`+As+`]|[^\\s'"`+As+"])+",i=new RegExp(["("+Cs+")","("+r+"|"+Ha+"|"+Ba+")+"].join("|"),"g"),l=Ka(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(xs.test(u))return{op:u};var f=!1,m=!1,k="",v=!1,y;function $(){y+=1;var T,L,Y=u.charAt(y);if(Y==="{"){if(y+=1,u.charAt(y)==="}")throw new Error("Bad substitution: "+u.slice(y-2,y+1));if(T=u.indexOf("}",y),T<0)throw new Error("Bad substitution: "+u.slice(y));L=u.slice(y,T),y=T}else if(/[*@#?$!_-]/.test(Y))L=Y,y+=1;else{var J=u.slice(y);T=J.match(/[^\w\d_]/),T?(L=J.slice(0,T.index),y+=T.index-1):(L=J,y=u.length)}return Xa(o,"",L)}for(a($,"parseEnvVar"),y=0;y<u.length;y++){var g=u.charAt(y);if(v=v||!f&&(g==="*"||g==="?"),m)k+=g,m=!1;else if(f)g===f?f=!1:f==Rs?k+=g:g===t?(y+=1,g=u.charAt(y),g===Es||g===t||g===qn?k+=g:k+=t+g):g===qn?k+=$():k+=g;else if(g===Es||g===Rs)f=g;else{if(xs.test(g))return{op:u};if(Ga.test(g)){c=!0;var x={comment:e.slice(d.index+y+1)};return k.length?[k,x]:[x]}else g===t?m=!0:g===qn?k+=$():k+=g}}return v?{op:"glob",pattern:k}:k}).reduce(function(d,u){return typeof u>"u"?d:d.concat(u)},[])}a(Va,"parseInternal");Is.exports=a(function(o,n,t){var r=Va(o,n,t);return typeof n!="function"?r:r.reduce(function(i,l){if(typeof l=="object")return i.concat(l);var c=l.split(RegExp("("+be+".*?"+be+")","g"));return c.length===1?i.concat(c[0]):i.concat(c.filter(Boolean).map(function(d){return za.test(d)?JSON.parse(d.split(be)[1]):d}))},[])},"parse")});var _s=Nn(Kn=>{"use strict";Kn.quote=bs();Kn.parse=Ts()});import*as _n from"fs";import*as Io from"path";import*as En from"fs";import Rn from"path";import s from"chalk";var qo=["plan","accept-edits","auto","auto-in-project"];function om(e){return e==="auto"||e==="auto-in-project"}a(om,"isAutoMode");function ja(e){switch(e){case"plan":return"Plan";case"accept-edits":return"Edits";case"auto":case"auto-in-project":return"Auto"}}a(ja,"permissionModeDisplayName");var Fa='[deprecated] permissionMode "auto-in-project" is now an alias for "auto" (FEATURE_092, v0.7.33). The alias will be removed in v0.7.38 \u2014 please update ~/.kodax/config.json to use "auto".';function nm(e=o=>{z({source:"repl:permission",level:"warn",message:o})}){let o=!1;return()=>{o||(o=!0,e(Fa))}}a(nm,"createAutoInProjectDeprecationEmitter");var gs=Gr(),ao=new Set(gs.filter(e=>e.sideEffect==="mutates-fs"&&e.requiredParams.includes("path")).map(e=>e.name)),ws=new Set(gs.filter(e=>e.sideEffect!=="readonly").map(e=>e.name)),hs=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"]),ys=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 ks(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(ks,"computeConfirmTools");function vs(e){return e!==void 0&&qo.includes(e)}a(vs,"isPermissionMode");function lo(e,o){return vs(e)?e:o}a(lo,"normalizePermissionMode");async function Ss(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?(xr(e.provider,e.model,t,"probed",e.now()),n.push({effort:t,status:"rejected"})):n.push({effort:t,status:"accepted"})}return n}a(Ss,"probeProviderReasoningEfforts");import Qo from"fs";import ni from"path";import zo from"fs";import W from"path";import uo from"os";var Ms=Ua(_s(),1);var Ps=new Set(["/dev/null","nul","NUL"]);function Xn(e){return Ps.has(e)||Ps.has(e.toLowerCase())}a(Xn,"isNullDevice");function co(e){let o=e.trim();if(!o)return{statements:[],unparseable:!1};if(o.includes("`"))return{statements:[],unparseable:!0};let n;try{n=(0,Ms.parse)(o,m=>`$${m}`)}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 k=n[m];if(typeof k=="string"){i.push(k);continue}if("op"in k){let v=k.op;if(v==="&&"||v==="||"||v===";"){f(v);continue}if(v==="|"){u();continue}if(v==="&"){let y=n[m+1];if(y!==void 0&&typeof y!="string"&&"op"in y&&(y.op===">"||y.op===">>")){let $=n[m+2];if(typeof $!="string"){d=!0,m+=1;continue}l.push(Ls(`&${y.op}`,$)),m+=2;continue}d=!0;continue}if(Ja(v)){let y=null,$=i[i.length-1];$!==void 0&&/^[0-9]+$/.test($)&&(y=$,i.pop());let g=n[m+1];if(typeof g!="string"){d=!0;continue}l.push(Ls(y?`${y}${v}`:v,g)),m+=1;continue}if(v==="glob"){let y=k.pattern;typeof y=="string"?i.push(y):d=!0;continue}d=!0;continue}if("comment"in k)break;d=!0}return f(null),{statements:t,unparseable:d}}a(co,"parseBashCommand");var Ya=new Set([">",">>","<","<<","<<<","&>","&>>"]),Ws=/^([0-9]+|&)(>>?|<<?)$/;function Ja(e){return Ya.has(e)||Ws.test(e)}a(Ja,"isRedirectionOp");function Ls(e,o){let n=null,t=e,r=Ws.exec(e);return r&&(n=r[1],t=r[2]),{op:e,fd:n,append:t===">>"||e==="&>>",input:t==="<"||t==="<<"||e==="<<<",target:o}}a(Ls,"parseRedirection");var Za=W.join(".agent","plan_mode_doc.md"),Ko=new Map,Xo=null;function Qa(e){if(!e||!e.trim())return!1;let o=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of ys)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(Qa,"isSingleBashReadCommand");var el=/^[a-zA-Z0-9]+$/;function ol(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(!el.test(t))return!1;return n}a(ol,"isHelpCommand");function Qn(e){if(!e||!e.trim())return!1;if(ol(e))return!0;let o=e.trim().replace(/\\\r?\n/g," "),n=co(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||!Xn(c.target))return!1;let l=i.argv.join(" ");if(l&&!(t&&i.argv[0]?.toLowerCase()==="cd"&&i.argv.length>=2)&&!Qa(l))return!1}}return!0}a(Qn,"isBashReadCommand");function nl(e){let o=e.trim();return o?Qn(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(nl,"getDirectShellBypassBlockReason");var Fs=new Set(["remove-item","set-content","add-content","out-file","new-item","copy-item","move-item","rename-item","ni"]),tl={bash:new Set(["-c"]),dash:new Set(["-c"]),sh:new Set(["-c"]),zsh:new Set(["-c"]),cmd:new Set(["/c"]),powershell:new Set(["-command","-c"]),pwsh:new Set(["-command","-c"])};function Yn(e){let o=e[0]?.replace(/\\/g,"/"),n=o?.slice(o.lastIndexOf("/")+1).replace(/\.exe$/i,"").toLowerCase();if(!n)return;let t=tl[n];if(!t)return;let r=e.findIndex((i,l)=>l>0&&t.has(i.toLowerCase()));return r>=0?e[r+1]:void 0}a(Yn,"getNestedShellCommand");function et(e){return Hs(e,0)}a(et,"isBashWriteCommand");function Hs(e,o){if(!e||!e.trim())return!1;let n=co(e);if(n.unparseable)return!1;for(let t of n.statements)for(let r of t.stages){let i=r.argv.map(c=>c.toLowerCase());if(i.length>0){let c=i[0],d=i.length>=2?`${i[0]} ${i[1]}`:null;for(let u of hs)if(u===c||d!==null&&u===d)return!0}for(let c of i)if(Fs.has(c))return!0;for(let c of r.redirections)if(!c.input&&!Xn(c.target))return!0;let l=o<3?Yn(r.argv):void 0;if(l!==void 0&&Hs(l,o+1))return!0}return!1}a(Hs,"isBashWriteCommandAtDepth");function ot(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(ot,"parseAllowedToolPattern");function rl(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e.startsWith(n)}return e===o}a(rl,"matchesBashPatternLegacy");function sl(e,o){if(o==="*")return!1;if(o.endsWith(":*")){let n=o.slice(0,-2);return e===n}return e===o}a(sl,"matchesBashPatternByExtractedPrefix");async function nt(e,o,n,t,r){if(e.toLowerCase()!=="bash")return!1;let i=o.command??"",l=[];for(let c of n){let d=ot(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&&sl(c.value,d))return!0;return!1}for(let{pattern:c}of l)if(c&&rl(i,c))return!0;return!1}a(nt,"isToolCallAllowed");function tt(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(tt,"generateSavePattern");function fo(e,o){try{let n=W.resolve(e),t=W.resolve(o),r=Oe(),i=W.join(t,".kodax");return D(n,i)||D(n,r)?!0:!(D(n,t)||Xs().some(c=>D(n,c)))}catch{return!1}}a(fo,"isAlwaysConfirmPath");function Os(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"&&Jn.test(e)):!!(e.startsWith(".")&&/[/\\]/.test(e)||e.split(/[/\\]+/).includes(".."))}a(Os,"looksLikePath");var Jn=/^\/[A-Za-z][A-Za-z0-9]*(?::[A-Za-z0-9]+)?$/,Ns={python:new Set(["-c"]),py:new Set(["-c"]),node:new Set(["-e","--eval","-p","--print"]),ruby:new Set(["-e"]),perl:new Set(["-e"])},il=new Set(["rg","ripgrep","grep","egrep","fgrep","findstr","select-string","sed","awk"]),al=new Set(["-e","--regexp","--regex","-pattern"]),ll=new Set(["-f","--file"]),Ds=new Set(["-g","--glob","--iglob","-r","--replace"]),Vn=new Set(["--include","--exclude","--exclude-dir"]),cl={rg:Ds,ripgrep:Ds,grep:Vn,egrep:Vn,fgrep:Vn,awk:new Set(["-v","--assign"]),"select-string":new Set(["-inputobject"])},dl={rg:new Set(["--ignore-file"]),ripgrep:new Set(["--ignore-file"]),grep:new Set(["--exclude-from"]),egrep:new Set(["--exclude-from"]),fgrep:new Set(["--exclude-from"]),"select-string":new Set(["-path","-literalpath"])};function rt(e){let o=e.replace(/\\/g,"/");return(o.split("/").pop()??o).toLowerCase().replace(/\.exe$/,"")}a(rt,"commandBasename");function ul(){return{sourceIndexes:new Set,pathIndexes:new Set,pathValues:new Set}}a(ul,"createCommandArgumentRoles");function He(e,o,n,t){let r=e[o];r!==void 0&&(n.add(o),t?.add(r))}a(He,"addIndexedValue");function Vo(e,o){let n=e.toLowerCase();if(o.startsWith("--")){let t=`${o}=`;return n.startsWith(t)?e.slice(t.length):void 0}return n.startsWith(o)&&e.length>o.length?e.slice(o.length):void 0}a(Vo,"attachedOptionValue");function fl(e,o,n){for(let t=1;t<e.length;t+=1){let r=e[t]??"",i=r.toLowerCase();for(let l of o){if(i===l){He(e,t+1,n.sourceIndexes);break}if(Vo(r,l)!==void 0){n.sourceIndexes.add(t);break}}}}a(fl,"collectScriptSourceRoles");function Us(e,o,n,t){if(o)for(let r=1;r<e.length;r+=1){let i=e[r]??"";if(i==="--")break;let l=i.toLowerCase();for(let c of o){if(l===c){He(e,r+1,n,t);break}let d=Vo(i,c);if(d!==void 0){n.add(r),t?.add(d);break}}}}a(Us,"collectFlagValueRoles");function ml(e,o){let n=rt(e[0]??"");Us(e,cl[n],o.sourceIndexes),Us(e,dl[n],o.pathIndexes,o.pathValues);let t=!1;for(let i=1;i<e.length;i+=1){let l=e[i]??"";if(l==="--")break;let c=l.toLowerCase();if(n==="findstr"&&c.startsWith("/c:")){o.sourceIndexes.add(i),t=!0;continue}if(n==="findstr"&&c.startsWith("/g:")){o.pathIndexes.add(i),o.pathValues.add(l.slice(3)),t=!0;continue}for(let d of al){if(c===d){He(e,i+1,o.sourceIndexes),t=!0;break}if(Vo(l,d)!==void 0){o.sourceIndexes.add(i),t=!0;break}}for(let d of ll){if(c===d){He(e,i+1,o.pathIndexes,o.pathValues),t=!0;break}let u=Vo(l,d);if(u!==void 0){o.pathValues.add(u),t=!0;break}}}if(!t){let i=!1;for(let l=1;l<e.length;l+=1){let c=e[l]??"";if(c==="--"){i=!0;continue}if(!(o.sourceIndexes.has(l)||o.pathIndexes.has(l))&&!(!i&&c.startsWith("-"))&&!(n==="findstr"&&Jn.test(c))){He(e,l,o.sourceIndexes);break}}}let r=!1;for(let i=1;i<e.length;i+=1){let l=e[i]??"";if(l==="--"){r=!0;continue}!r&&l.startsWith("-")||o.sourceIndexes.has(i)||o.pathIndexes.has(i)||n==="findstr"&&Jn.test(l)||He(e,i,o.pathIndexes,o.pathValues)}}a(ml,"collectRegexArgumentRoles");function Bs(e){let o=ul(),n=rt(e[0]??""),t=/^python(?:\d+(?:\.\d+)*)?$/.test(n)?Ns.python:Ns[n];return t&&fl(e,t,o),il.has(n)&&ml(e,o),o}a(Bs,"collectCommandArgumentRoles");function Gs(e){let o=[],n=[],t="",r=-1,i,l=a(d=>{r<0||(n.push({value:t,start:r,end:d}),t="",r=-1)},"finishWord"),c=a(()=>{n.length>0&&o.push(n),n=[]},"finishStage");for(let d=0;d<e.length;d+=1){let u=e[d];if(i){u===i?i=void 0:i==='"'&&u==="\\"&&e[d+1]==='"'?(t+=`${u}${e[d+1]}`,d+=1):t+=u;continue}u==='"'||u==="'"?(r<0&&(r=d),i=u):/\s/.test(u)?l(d):u==="|"||u==="&"||u===";"?(l(d),c()):(r<0&&(r=d),t+=u)}return i?[]:(l(e.length),c(),o)}a(Gs,"tokenizeRawCommandStages");function qs(e){let o=e.split("");for(let n of Gs(e)){let t=Bs(n.map(r=>r.value));for(let r of t.sourceIndexes){let i=n[r];if(i)for(let l=i.start;l<i.end;l+=1)o[l]=" "}}return o.join("")}a(qs,"maskRawInlineSources");function pl(e){let o=[],n;for(let i of[/"([A-Za-z]:\\[^"\r\n]+)"/g,/'([A-Za-z]:\\[^'\r\n]+)'/g])for(;(n=i.exec(e))!==null;)o.push(n[1]);let t=/(?:^|\s)(\.\.?\/[^\s]+|\.\.?\\[^\s]+|~\/[^\s]+|\.[^\s]*[/\\][^\s]*)/g;for(;(n=t.exec(e))!==null;)o.push(n[1]);let r=/(?:^|[\s:=<>])([a-zA-Z]:\\[^\s"'|;&<>]+)/g;for(;(n=r.exec(e))!==null;)o.push(n[1]);return o}a(pl,"legacyRegexPathScan");function Jo(e){let o=new Set,n=co(e);if(!n.unparseable)for(let t of n.statements)for(let r of t.stages){let i=Bs(r.argv);for(let l of i.pathValues)o.add(l);for(let l=0;l<r.argv.length;l+=1){let c=r.argv[l];i.sourceIndexes.has(l)||i.pathIndexes.has(l)||Os(c)&&o.add(c)}for(let l of r.redirections)Os(l.target)&&o.add(l.target)}for(let t of pl(qs(e)))o.add(t);return Array.from(o)}a(Jo,"extractPathsFromCommand");function gl(e,o,n=o){let t=Jo(e);for(let r of t){let i=Lo(r,n);if(fo(i,o))return!0}return!1}a(gl,"isCommandOnProtectedPath");function js(e){let o=W.normalize(e);return process.platform==="win32"?o.toLowerCase():o}a(js,"normalizePathForComparison");function wl(e,o){return js(e)===js(o)}a(wl,"pathsEqual");function st(e,o){try{let n=W.resolve(o),t=W.resolve(n,Ks(zs(e)));return D(t,n)}catch{return!1}}a(st,"isPathInsideProject");function hl(e){let o=e.match(/[A-Za-z]:[\\/][^\s;|&<>(){}'"]+|\/[^\s;|&<>(){}'"]+/g);return o?o.filter(n=>!/^(?:\/dev\/|\/proc\/)/i.test(n)):[]}a(hl,"collectAbsolutePathCandidates");function it(e){let o=W.resolve(e),n=Ko.get(o);if(n)return n;if(zo.existsSync(o)){let c=zo.realpathSync.native(o);return Ko.set(o,c),c}let t=[],r=o;for(;!zo.existsSync(r);){let c=W.dirname(r);if(c===r)return Ko.set(o,o),o;t.unshift(W.basename(r)),r=c}let i=zo.realpathSync.native(r),l=W.join(i,...t);return Ko.set(o,l),l}a(it,"resolveExistingPathPrefix");function zs(e){return e==="~"?uo.homedir():e.startsWith(`~${W.sep}`)||e.startsWith("~/")||e.startsWith("~\\")?W.join(uo.homedir(),e.slice(2)):e}a(zs,"expandHomeDirectory");function Ks(e){let o=uo.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(Ks,"expandSystemTempAlias");function yl(e,o,n=o){let t=W.resolve(n??o??process.cwd()),r=Ks(zs(e)),i=W.isAbsolute(r)?W.resolve(r):W.resolve(t,r);return it(i)}a(yl,"resolvePermissionPath");function Xs(){if(Xo)return Xo;let e=new Set,o=[uo.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(it(n))}catch{}return Xo=Array.from(e),Xo}a(Xs,"getSystemTempDirectories");function at(e){let o=it(e??process.cwd());return{projectPlanDoc:W.join(o,Za),systemTempDirs:Xs()}}a(at,"getPlanModeAllowedWritablePaths");function Zn(e,o,n=o){let t=yl(e,o,n),{projectPlanDoc:r,systemTempDirs:i}=at(o);return wl(t,r)?!0:i.some(l=>D(t,l))}a(Zn,"isPlanModeAllowedPath");function kl(e){let{projectPlanDoc:o,systemTempDirs:n}=at(e),t=n[0]??uo.tmpdir();return`${o} or the system temp directory (${t})`}a(kl,"formatPlanModeAllowedLocations");var vl=new Set(["-a","--append","-i","--ignore-interrupts"]);function Sl(e){let o=[];for(let n=1;n<e.argv.length;n+=1){let t=e.argv[n];vl.has(t)||t.startsWith("-")||o.push(t)}return o}a(Sl,"collectTeeTargets");function $l(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($l,"collectPowerShellWriteTargets");function Be(e){return Yo(e,0,!0)}a(Be,"collectBashWriteTargets");function Vs(e){return Yo(e,0,!1)}a(Vs,"collectDeterministicBashWriteTargets");var bl=new Set(["rm","rmdir","mkdir","touch","mv","move","ren","del","erase","rd"]),xl=new Set(["cp","copy"]);function Al(e,o=1){let n=[],t=!1;for(let r=o;r<e.length;r+=1){let i=e[r];i==="--"?t=!0:(t||!i.startsWith("-"))&&n.push(i)}return n}a(Al,"collectPositionalArgs");function Rl(e){let o=rt(e.argv[0]??""),n=Al(e.argv);if(bl.has(o))return n;if(xl.has(o)){let t=e.argv.findIndex(i=>i==="-t"||i==="--target-directory");if(t>=0){let i=e.argv[t+1];return i?[i]:[]}let r=e.argv.find(i=>i.startsWith("--target-directory="));return r?[r.slice(19)]:n.slice(-1)}if(o==="chmod"||o==="chown")return n.slice(1);if(o==="dd"){let t=e.argv.find(r=>r.startsWith("of="));return t?[t.slice(3)]:[]}return[]}a(Rl,"collectDirectCommandWriteTargets");function El(e){let o=[],n=qs(e),t;for(let r=0;r<n.length;r+=1){let i=n[r];if(t!==void 0){i===t?t=void 0:i==="\\"&&t==='"'&&(r+=1);continue}if(i==='"'||i==="'"){t=i;continue}if(i==="\\"){r+=1;continue}if(i!==">")continue;for(n[r+1]===">"&&(r+=1);/\s/.test(n[r+1]??"");)r+=1;let l=n[r+1],c=r+(l==='"'||l==="'"?2:1),d=c;for(;d<n.length;){let u=n[d];if(l==='"'||l==="'"){if(u===l)break}else if(/\s|[|;&<>]/.test(u))break;d+=1}d>c&&o.push(n.slice(c,d)),r=d}return o}a(El,"collectRawOutputRedirectionTargets");function Yo(e,o,n){let t=new Set,r=a(l=>{let c=l?.trim();c&&t.add(c)},"pushTarget");if(n)for(let l of Jo(e))r(l);else for(let l of El(e))r(l);let i=co(e);if(i.unparseable){if(o<3)for(let l of Gs(e)){let c=Yn(l.map(d=>d.value));if(c!==void 0)for(let d of Yo(c,o+1,n))r(d)}return Array.from(t)}for(let l of i.statements)for(let c of l.stages){for(let f of c.redirections)f.input||r(f.target);let d=c.argv[0]?.toLowerCase();if(!d)continue;if(d==="tee")for(let f of Sl(c))r(f);else if(Fs.has(d))for(let f of $l(c))r(f);if(!n)for(let f of Rl(c))r(f);let u=o<3?Yn(c.argv):void 0;if(u!==void 0)for(let f of Yo(u,o+1,n))r(f)}return Array.from(t)}a(Yo,"collectBashWriteTargetsAtDepth");function Ys(e,o){if(!et(e))return{dangerous:!1};let n=new Set([...Be(e),...hl(e)]);for(let t of n)if(!st(t,o))return{dangerous:!0,reason:`Command may modify file outside project: ${t}`};return{dangerous:!1}}a(Ys,"getBashOutsideProjectWriteRisk");function Js(e,o,n,t=n){let r=kl(n);if(qr(e))return null;if(ao.has(e)){let i=typeof o.path=="string"?o.path:"";return i?Zn(i,n,t)?null:`[Blocked] Plan mode only allows file modifications in ${r}. Requested path: ${i}`:`[Blocked] Tool '${e}' is not allowed in plan mode unless it targets ${r}.`}if(e==="bash"){let i=o.command??"";if(!et(i))return null;let l=Be(i);if(l.length===0)return`[Blocked] Plan mode only allows bash write operations when every target is either ${r}. Could not determine a safe target from: ${i.slice(0,80)}${i.length>80?"...":""}`;let c=l.find(d=>!Zn(d,n,t));return c?`[Blocked] Plan mode only allows bash write operations in ${r}. Blocked target: ${c}`:null}return`[Blocked] Tool '${e}' has side effects and is not permitted in plan mode. Switch to accept-edits or auto mode to use it, or work within ${r}.`}a(Js,"getPlanModeBlockReason");import Zo from"node:path";import ct from"node:os";function Qs(){try{return Oe()}catch{return}}a(Qs,"safeGetAgentConfigHome");function lt(e,o){let n=process.platform==="win32"?/^(?:\$\{home\}|\$home|\$env:(?:home|userprofile)|%userprofile%)(?=$|[\\/])/i:/^(?:\$\{HOME\}|\$HOME)(?=$|[\\/])/;return Lo(e.replace(n,ct.homedir()),o)}a(lt,"resolveShellWriteTarget");function Zs(e,o){let n=Qs();if(n&&D(e,n))return"user-kodax";let t=Zo.join(Zo.resolve(o),".kodax");if(D(e,t))return"project-kodax"}a(Zs,"resolveProtectedZone");function Cl(){let e=new Set;try{e.add(ct.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(Cl,"getSystemTempDirs");var Il=new Set(["bash"]),Tl={toolNames:Il,collect(e,o,n=o){let t=typeof e.input.command=="string"?e.input.command:"";if(!t||!o)return[];let r=[],i=new Set,l=new Set,c=Cl(),d=Zo.resolve(o);for(let u of Jo(t)){let f;try{f=lt(u,n)}catch{continue}let m=Zs(f,o);if(m){i.has(f)||(i.add(f),r.push({kind:"protected_path",path:u,zone:m}));continue}if(fo(f,o)){let k=c.some(y=>D(f,y)),v=D(f,d);!k&&!v&&!l.has(f)&&(l.add(f),r.push({kind:"outside_project",path:u}))}}for(let u of Be(t)){let f;try{f=lt(u,n)}catch{continue}Zs(f,o)||D(f,d)||c.some(v=>D(f,v))||r.push({kind:"shell_redirect_outside",target:u})}return r}},Om=a((e,o,n)=>{if(e.name!=="bash")return{denied:!1};let t=typeof e.input.command=="string"?e.input.command:"",r=new Set([Zo.join(ct.homedir(),".kodax")]),i=Qs();i&&r.add(i);for(let l of Vs(t)){let c=lt(l,n);if([...r].some(d=>D(c,d)))return{denied:!0,patternId:"user_kodax_write",reason:`Shell write to credential-zone path \`${l}\` (under ~/.kodax/) is permanently denied. KodaX config edits must use the \`kodax config\` CLI or SDK config API.`}}return{denied:!1}},"replBashUserKodaxWriteDeny");var en=B("config.json");function ti(){return ni.join(process.cwd(),".kodax","config.local.json")}a(ti,"getProjectConfigFile");function Jm(e=process.env){let o=mo(en);return _l({settings:o.autoMode,env:e})}a(Jm,"loadAutoModeSettings");function _l(e={}){let o=e.settings??{},n=e.env??{},t=n.KODAX_AUTO_MODE_ENGINE?.trim(),r=t==="llm"||t==="rules"?t:void 0,i=o.engine==="llm"||o.engine==="rules"?o.engine:void 0,l=r??i??"llm",c=oi(o.classifierModel),d=oi(n.KODAX_AUTO_MODE_CLASSIFIER_MODEL),u=n.KODAX_AUTO_MODE_TIMEOUT_MS?.trim(),f=u!==void 0?Number(u):NaN,m=Number.isFinite(f)&&f>0?Math.floor(f):void 0,k=typeof o.timeoutMs=="number"&&o.timeoutMs>0?Math.floor(o.timeoutMs):void 0,v=ei(n.KODAX_AUTO_SPECULATIVE_WINDOW_MS?.trim()),y=typeof o.speculativeWindowMs=="number"?ei(String(o.speculativeWindowMs)):void 0;return{engine:l,classifierModel:c,classifierModelEnv:d,timeoutMs:m??k,speculativeWindowMs:v??y}}a(_l,"resolveAutoModeSettings");function ei(e){if(e===void 0||e==="")return;let o=Number(e);if(Number.isFinite(o))return o<0?0:Math.floor(o)}a(ei,"parseSpeculativeWindow");function oi(e){if(typeof e!="string")return;let o=e.trim();return o.length===0?void 0:o}a(oi,"nonEmptyString");function mo(e){try{if(Qo.existsSync(e))return JSON.parse(Qo.readFileSync(e,"utf-8"))}catch{}return{}}a(mo,"readJsonFile");function ri(e,o){Qo.mkdirSync(ni.dirname(e),{recursive:!0}),Qo.writeFileSync(e,JSON.stringify(o,null,2))}a(ri,"writeJsonFile");function dt(e){let o=mo(en);ri(en,{...o,permissionMode:e})}a(dt,"savePermissionModeUser");function Zm(){let e=mo(en),o=mo(ti()),n=e.alwaysAllowTools??[],t=o.alwaysAllowTools??[];return[...new Set([...n,...t])]}a(Zm,"loadAlwaysAllowTools");function Qm(e,o,n=!1){let t=tt(e,o,n);if(!t)return;let r=ti(),i=mo(r),l=i.alwaysAllowTools??[];l.includes(t)||ri(r,{...i,alwaysAllowTools:[...l,t]})}a(Qm,"saveAlwaysAllowToolPattern");var ut=["ama","sa"];function si(e){let o=ut.indexOf(e);return ut[(o+1)%ut.length]??"ama"}a(si,"nextAgentMode");var pe=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}},Pl=new pe;function ft(e){return[`ready=${e.ready}`,`new=${e.newlyActive}`,`attention=${e.attention}`,`active=${e.active}`].join(" ")}a(ft,"formatLearningStatus");function ip(e){if(e.ready+e.newlyActive+e.attention!==0)return`Learning recovery: ${ft(e)} [/learn]`}a(ip,"formatLearningRecoverySummary");import K from"chalk";import{Buffer as ci}from"node:buffer";import{spawn as Ll}from"node:child_process";import ii from"node:process";var xe="\x1B",Ml="\x07",mt=`${xe}\\`;function ai(e,o){return e.SSH_CONNECTION?!1:o==="win32"||o==="darwin"||o==="linux"}a(ai,"shouldPreferNativeClipboard");function Wl(e,o){let n=ci.from(e,"utf8").toString("base64"),t=o.TERM==="xterm-kitty"?mt:Ml,r=`${xe}]52;c;${n}${t}`;return o.TMUX?`${xe}Ptmux;${r.replaceAll(xe,`${xe}${xe}`)}${mt}`:o.STY?`${xe}P${r}${mt}`:r}a(Wl,"buildOscSequence");async function on(e,o,n){return new Promise((t,r)=>{let i=Ll(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(on,"execClipboardCommand");function Ol(e){let o="$stream = [Console]::OpenStandardInput(); $buffer = New-Object byte[] 8192; $memory = New-Object System.IO.MemoryStream; while (($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) { $memory.Write($buffer, 0, $read) }; $text = [System.Text.Encoding]::UTF8.GetString($memory.ToArray()); Set-Clipboard -Value $text",n=ci.from(e,"utf8");return[["powershell",["-NoProfile","-NonInteractive","-Command",o],n],["pwsh",["-NoProfile","-NonInteractive","-Command",o],n],["cmd",["/c","chcp 65001 >nul & clip"],n]]}a(Ol,"buildWindowsClipboardCandidates");async function li(e,o,n){if(o.SSH_CONNECTION)return!1;switch(n){case"win32":{let t=Ol(e);for(let[r,i,l]of t)try{if(await on(r,i,l))return!0}catch{}return!1}case"darwin":return on("pbcopy",[],e);case"linux":{let t=[["wl-copy",[]],["xclip",["-selection","clipboard"]],["xsel",["--clipboard","--input"]]];for(let[r,i]of t)try{if(await on(r,i,e))return!0}catch{}return!1}default:return!1}}a(li,"tryNativeClipboard");async function Nl(e,o){if(!o.TMUX)return!1;let n=o.LC_TERMINAL==="iTerm2"?["load-buffer","-"]:["load-buffer","-w","-"];try{return await on("tmux",n,e)}catch{return!1}}a(Nl,"tryTmuxClipboard");async function di(e,o={}){let n=o.env??ii.env,t=o.platform??ii.platform,r=e.trimEnd(),i=Wl(r,n);if(!r)throw new Error("Nothing to copy.");if(ai(n,t))try{if(await li(r,n,t))return{path:"native"}}catch{}if(await Nl(r,n))return{path:"tmux-buffer"};if(o.terminalWrite?.(i))return{path:"osc52"};if(!ai(n,t))try{if(await li(r,n,t))return{path:"native"}}catch{}throw new Error("Unable to access any clipboard path.")}a(di,"copyTextToClipboard");var pt;(function(e){e.Idle="idle",e.Responding="responding",e.WaitingForConfirmation="waiting_for_confirmation"})(pt||(pt={}));var q;(function(e){e.Scheduled="scheduled",e.Validating="validating",e.AwaitingApproval="awaiting_approval",e.Executing="executing",e.Success="success",e.Error="error",e.Cancelled="cancelled"})(q||(q={}));var pp={[q.Scheduled]:"\u25CB",[q.Validating]:"\u25CC",[q.AwaitingApproval]:"?",[q.Executing]:"\u25CB",[q.Success]:"\u2713",[q.Error]:"\u2717",[q.Cancelled]:"-"},ui;(function(e){e[e.Low=-100]="Low",e[e.Normal=0]="Normal",e[e.High=100]="High",e[e.Critical=200]="Critical"})(ui||(ui={}));var gp={streamingState:pt.Idle,currentResponse:"",history:[],pendingToolCalls:[],sessionId:"",provider:"",model:"",isLoading:!1};var Dl="[redacted]",fi="[truncated]";function ie(e,o=2e3){return e.length>o?`${e.slice(0,o-3)}...`:e}a(ie,"truncateToolReplayText");function Ul(e){let o=e.toLowerCase().replace(/[\s_-]/g,"");return o.includes("token")||o.includes("password")||o.includes("secret")||o.includes("apikey")||o.includes("accesstoken")||o==="authorization"||o==="cookie"||o==="setcookie"}a(Ul,"isSensitiveToolInputKey");function mi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(mi,"isRecord");function gt(e,o=0,n=new WeakSet){if(e===null||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="string")return ie(e);if(o>=6)return fi;if(typeof e=="object"&&e!==null){if(n.has(e))return fi;if(n.add(e),Array.isArray(e))return e.slice(0,50).map(r=>gt(r,o+1,n));if(!mi(e))return ie(String(e));let t={};for(let[r,i]of Object.entries(e).slice(0,50))t[r]=Ul(r)?Dl:gt(i,o+1,n);return t}return ie(String(e))}a(gt,"sanitizeToolJsonValue");function pi(e){if(!e)return;let o=gt(e);return mi(o)?o:void 0}a(pi,"sanitizeToolInput");function gi(e){if(e!==void 0){if(typeof e=="string")return ie(e);try{return ie(JSON.stringify(e))}catch{return ie(String(e))}}}a(gi,"stringifyToolReplayValue");function Sp(e){return e.type==="tool_summary"||e.type==="task_completed"?{type:"event",text:e.text,icon:"tool",...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e.type==="tool_group"?{type:"tool_group",tools:e.tools.map(Kl),...e.timestamp===void 0?{}:{timestamp:e.timestamp}}:e}a(Sp,"seedToHistoryItem");var jl="[Thinking]",Fl="[/Thinking]",Hl="Untitled Session",wi=50,Bl=60,yi="...",ki=["[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:"],vi=[/(?:^|\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:/],Gl=/(^|\r?\n)\[Thinking\]\r?\n([\s\S]*?)\r?\n\[\/Thinking\](?=\r?\n|$)/g,ql="Session ended before the tool completed.";function zl(e){switch(e){case"success":return q.Success;case"error":return q.Error;case"cancelled":return q.Cancelled;case"awaiting_approval":return q.AwaitingApproval;default:return e}}a(zl,"toolCallSeedToHistoryToolStatus");function Kl(e){return{id:e.id,name:e.name,status:zl(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(Kl,"toolCallSeedToHistoryToolCall");function Xl(e){let o=-1;for(let n of ki){let t=e.indexOf(n);t>=0&&(o===-1||t<o)&&(o=t)}for(let n of vi){let t=n.exec(e);t&&t.index>=0&&(o===-1||t.index<o)&&(o=t.index)}return o}a(Xl,"findControlPlaneCutIndex");function Vl(e){return ki.some(o=>e.includes(o))||vi.some(o=>o.test(e))}a(Vl,"hasControlPlaneSignal");function Si(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(Si,"collectTextBlocks");function tn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(tn,"isRecord");function Yl(e){if(typeof e=="string")return ie(e);if(e===void 0)return"";try{return gi(e)??""}catch{return ie(String(e))}}a(Yl,"toolResultContentToString");function Jl(e){let o=Yl(e.content),n=o.trimStart(),t=e.is_error===!0||n.startsWith("[Tool Error]")||n.startsWith("[Error]"),r=n.startsWith("[Cancelled]")||n.startsWith("[Blocked]");return t?{status:"error",error:o}:r?{status:"cancelled",error:o}:{status:"success",output:o}}a(Jl,"inferToolResultSeed");function Zl(e){let o=new Map;if(!e||e.role!=="user"||!Array.isArray(e.content))return o;for(let n of e.content)!tn(n)||n.type!=="tool_result"||typeof n.tool_use_id!="string"||o.set(n.tool_use_id,Jl(n));return o}a(Zl,"collectToolResultSeeds");function Ql(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:ql};return{id:e.id,name:e.name,status:n.status,...e.input!==void 0?{input:pi(tn(e.input)?e.input:{})??{}}:{},...n.output!==void 0?{output:n.output}:{},...n.error!==void 0?{error:n.error}:{}}}a(Ql,"buildToolCallSeed");function ec(e){return typeof e=="string"?e:Array.isArray(e)?Si(e).join(`
3
+ `):""}a(ec,"extractAssistantTextOnly");function go(e,o,n){n.trim().length!==0&&e.push({type:o,text:n})}a(go,"pushSeed");function hi(e){return e.replace(/^\n+/,"").replace(/\n+$/,"")}a(hi,"stripLegacyTagBoundaryNewlines");function oc(e){let o=e.name,n=e.input;if(!n)return`\u26A1 ${o}`;let t=o==="bash"?po(String(n.command??"")):o==="read"||o==="write"||o==="edit"?po(String(n.file_path??n.path??"")):o==="grep"||o==="glob"?po(String(n.pattern??"")):o==="web_search"||o==="web_fetch"?po(String(n.query??n.url??"")):void 0;return t?`\u26A1 ${o}(${t})`:`\u26A1 ${o}`}a(oc,"formatToolUseSummary");function po(e,o=60){let n=e.replace(/\s+/g," ").trim();return n.length>o?`${n.slice(0,o)}...`:n}a(po,"truncateToolHint");function nc(e){if(!e.includes(jl)||!e.includes(Fl))return e.trim().length>0?[{type:"assistant",text:e}]:[];let o=[],n=0;for(let t of e.matchAll(Gl)){let r=t.index??-1,i=t[1]??"",l=t[2]??"";if(r<0)continue;let c=r+i.length;go(o,"assistant",hi(e.slice(n,c))),go(o,"thinking",l),n=r+t[0].length}return go(o,"assistant",hi(e.slice(n))),o.length===0?e.trim().length>0?[{type:"assistant",text:e}]:[]:o}a(nc,"parseLegacyAssistantContent");function $i(e,o){if(typeof e=="string")return nc(e);if(!Array.isArray(e))return[];let n=[],t=[],r=[],i=a(()=>{t.length!==0&&(go(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(!(!tn(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&&go(n,"thinking",String(c.thinking));break;case"tool_use":if(i(),o){let d=Ql(c,o);d&&r.push(d)}else if(typeof c.name=="string"){let d=oc({name:c.name,...tn(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($i,"extractAssistantHistorySeeds");var tc=["You are the Scout role","You are the Generator role","You are the Planner role","You are the Evaluator role"],rc=/\r?\n?\`\`\`kodax[\w-]*[\s\S]*?\`\`\`\s*/g;function sc(e){return tc.some(o=>e.includes(o))}a(sc,"isManagedWorkerPrompt");function bi(e){return e.replace(rc,"").trim()}a(bi,"stripManagedProtocolBlocks");function ic(e){switch(e.role){case"assistant":return $i(e.content).flatMap(n=>{if(n.type!=="assistant")return[n];let t=bi(n.text);return t.length>0&&t.trim()!=="..."?[{...n,text:t}]:[]});case"user":{if(e._source==="sidecar-verifier"){let n=nn(e.content).trim();return n?[{type:"sidecar",text:n,verdict:"revise"}]:[]}if(e._source==="agent-completed"||e._source==="task-completed"){let n=nn(e.content).trim();return n?[{type:"task_completed",text:n}]:[]}if(e._synthetic)return[];let o=nn(e.content);return o.trim().length===0||sc(o)?[]:[{type:"user",text:o}]}case"system":return[];default:return[]}}a(ic,"extractHistorySeedsFromMessageWithoutTimestamp");function xi(e,o){if(o===void 0)return[...e];let n=Date.parse(o);return!Number.isFinite(n)||n<0?[...e]:e.map(t=>({...t,timestamp:n}))}a(xi,"withMessageTimestamp");function ac(e){return xi(ic(e),e.timestamp)}a(ac,"extractHistorySeedsFromMessage");function $p(e){let o=[];for(let n=0;n<e.length;n+=1){let t=e[n];if(t){if(t.role==="assistant"){let r=Zl(e[n+1]),i=xi($i(t.content,r),t.timestamp);o.push(...i.map(l=>l.type==="assistant"?{...l,text:bi(l.text)}:l).filter(l=>l.type!=="assistant"||l.text.length>0&&l.text.trim()!=="..."));continue}o.push(...ac(t))}}return o}a($p,"extractHistorySeedsFromMessages");function nn(e){return typeof e=="string"?e:Array.isArray(e)?Si(e).join(`
5
+ `):""}a(nn,"extractTextContent");function lc(e){let o=e.replace(/\s+/g," ").trim();return o?o.length>wi?`${o.slice(0,wi)}${yi}`:o:Hl}a(lc,"formatSessionTitle");function cc(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(cc,"isPureToolResultUserMessage");function wt(e){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n){if(n.role==="assistant"){let t=ec(n.content);return t&&t.trim()!=="..."?t:""}if(!cc(n))return""}}return""}a(wt,"extractLastAssistantText");function bp(e,o,n,t){let r=[wt(e),o.trim(),n?.trim()??"",t?.trim()??""];for(let i of r){let l=Ai(i);if(l)return l}return""}a(bp,"resolveCompletedAssistantText");function Ai(e){let o=e.trim();if(!o||o==="...")return"";let n=Xl(o);return n===0?"":(n>0?o.slice(0,n):o).trim()}a(Ai,"sanitizeUserFacingAssistantText");function xp(e){let o=e.trim();return o.length>0&&Ai(o).length===0&&Vl(o)}a(xp,"isControlPlaneOnlyAssistantText");function Ap(e){let o=e.find(t=>t.role==="user"),n=o?nn(o.content):"";return lc(n)}a(Ap,"extractTitle");function Rp(e,o=Bl){let n=e.replace(/\n/g," "),t=n.length>o?yi:"";return n.slice(0,o)+t}a(Rp,"formatMessagePreview");var ht={name:"copy",description:"Copy last assistant message to clipboard",usage:"/copy",handler:a(async(e,o)=>{let n=wt(o.messages);if(!n){console.log(K.yellow(`
6
+ No assistant message found to copy.`)),console.log(K.dim("The assistant needs to respond first before you can copy its message."));return}try{await di(n);let t=n.length>50?n.slice(0,50)+"...":n;console.log(K.green(`
7
+ Copied to clipboard!`)),console.log(K.dim(`Preview: ${t}`))}catch(t){let r=t instanceof Error?t.message:String(t);console.log(K.red(`
8
+ Failed to copy to clipboard: ${r}`)),console.log(K.dim("You may need to check clipboard permissions or manually copy the message."))}},"handler"),detailedHelp:a(()=>{console.log(K.bold(`
9
9
  /copy - Copy Last Assistant Message
10
- `)),console.log("Usage:"),console.log(z.cyan(" /copy")+` - Copy the last assistant message to clipboard
10
+ `)),console.log("Usage:"),console.log(K.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(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 fc(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(fc,"resolveCwd");function mc(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(mc,"proposalLabel");function S(e=""){process.stdout.write(`${e}
14
- `)}a(S,"writeOutput");function pc(e){for(let o of e)S(A.yellow(`[learn] ${o}`))}a(pc,"printWarnings");function Ti(e){S(A.yellow(`
15
- Consumer impact:`)),S(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){S(A.dim(` ${n}:`));for(let r of t)S(A.dim(` - ${r}`))}}a(Ti,"printConsumerImpact");async function gc(e){let o=Mo(e),n=await Lo(o);return pc(n.warnings),{storePath:o,store:n}}a(gc,"readStore");function wc(e,o){return e.find(n=>n.proposalId===o)}a(wc,"findProposal");function hc(e,o){let n=e.filter(t=>t.status==="pending");if(S(A.cyan(`
12
+ `),console.log("Examples:"),console.log(K.dim(" User: Explain how async/await works")),console.log(K.dim(" AI: [responds with explanation]")),console.log(K.cyan(" /copy")+K.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 dc(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(dc,"resolveCwd");function uc(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(uc,"proposalLabel");function S(e=""){process.stdout.write(`${e}
14
+ `)}a(S,"writeOutput");function fc(e){for(let o of e)S(A.yellow(`[learn] ${o}`))}a(fc,"printWarnings");function Ri(e){S(A.yellow(`
15
+ Consumer impact:`)),S(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){S(A.dim(` ${n}:`));for(let r of t)S(A.dim(` - ${r}`))}}a(Ri,"printConsumerImpact");async function mc(e){let o=Wo(e),n=await Mo(o);return fc(n.warnings),{storePath:o,store:n}}a(mc,"readStore");function pc(e,o){return e.find(n=>n.proposalId===o)}a(pc,"findProposal");function gc(e,o){let n=e.filter(t=>t.status==="pending");if(S(A.cyan(`
16
16
  [learn] pending learning suggestions`)),S(A.dim(` ${o}`)),n.length===0){S(A.dim(` (none)
17
- `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";S(` ${A.cyan(t.proposalId)} ${A.dim(`[${r}]`)} ${mc(t)}`)}S(A.dim(`
17
+ `));return}for(let t of n){let r=t.applyPlan?"apply-plan":"handoff";S(` ${A.cyan(t.proposalId)} ${A.dim(`[${r}]`)} ${uc(t)}`)}S(A.dim(`
18
18
  Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
19
- `))}a(hc,"printPending");function yc(e){if(S(A.cyan(`
19
+ `))}a(gc,"printPending");function wc(e){if(S(A.cyan(`
20
20
  [learn] ${e.proposalId}`)),S(A.dim(` status: ${e.status}`)),S(A.dim(` kind : ${e.proposal.destination}`)),S(`
21
- Proposal:`),S(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Ti(e.proposal.consumerImpact),!e.applyPlan){S(A.dim(`
21
+ Proposal:`),S(JSON.stringify(e.proposal,null,2)),e.proposal.destination==="workflow_handoff"&&Ri(e.proposal.consumerImpact),!e.applyPlan){S(A.dim(`
22
22
  No F224 apply plan is attached. Approval records the handoff only.
23
23
  `));return}S(`
24
- Apply plan:`),S(A.dim(` kind : ${e.applyPlan.kind}`)),S(A.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)S(A.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&S(o.content);S()}a(yc,"printDiff");async function kc(e,o,n={}){let t=await Dr(e,o,n);switch(t.status){case"approved_already_applied":S(A.green(`
24
+ Apply plan:`),S(A.dim(` kind : ${e.applyPlan.kind}`)),S(A.dim(` skillRoot: ${e.applyPlan.skillRoot}`));for(let o of e.applyPlan.changes)S(A.dim(` - ${o.kind} ${o.relativePath}`)),o.kind==="write"&&S(o.content);S()}a(wc,"printDiff");async function hc(e,o,n={}){let t=await Mr(e,o,n);switch(t.status){case"approved_already_applied":S(A.green(`
25
25
  [learn] approved ${o.proposalId}; files already match the apply plan.`)),S(A.dim(` recovered a pending proposal without applying it again.
26
26
  `));return;case"blocked_snapshot_conflict":S(A.red(`
27
27
  [learn] refusing to reapply ${o.proposalId}; ${t.relativePath} changed after the last snapshot.`)),S(A.dim(` snapshot: ${t.snapshotPath}`)),S(A.dim(` Review the file manually, then reject or recreate the learning proposal.
@@ -31,62 +31,62 @@ Apply plan:`),S(A.dim(` kind : ${e.applyPlan.kind}`)),S(A.dim(` skillRoot:
31
31
  [learn] ${o.proposalId} has no skill apply plan; nothing was applied.
32
32
  `));return;case"blocked_consumer_impact":S(A.yellow(`
33
33
  [learn] ${o.proposalId} requires manual consumer-impact review before approval.`)),S(A.dim(` Run /learn diff ${o.proposalId}, then /learn approve ${o.proposalId} --ack-impact after review.
34
- `)),Ti(t.impact),S();return;case"approved_handoff":S(A.green(`
34
+ `)),Ri(t.impact),S();return;case"approved_handoff":S(A.green(`
35
35
  [learn] approved ${o.proposalId} as a downstream handoff.`)),S(A.dim(` F224 does not mutate workflow, memory, or reasoning carriers directly.
36
36
  `));return;case"blocked_not_pending":S(A.dim(`
37
37
  [learn] ${o.proposalId} is already ${t.reviewStatus}.
38
- `));return}}a(kc,"approveProposal");function tn(){S(A.cyan(`
38
+ `));return}}a(hc,"approveProposal");function rn(){S(A.cyan(`
39
39
  /learn - Inspect and control learned capabilities`)),S(A.dim(" /learn Open the Learning Center")),S(A.dim(" /learn list [search] List learned capabilities")),S(A.dim(" /learn show <name|slug> Inspect a capability")),S(A.dim(" /learn trust|reject|disable|rollback|promote <name|slug>")),S(A.dim(" Compatibility: pending, diff, approve and reject remain accepted.")),S(A.dim(` /learn help
40
- `))}a(tn,"printHelp");async function vc(e,o){let n=o.learning;if(!n)return!1;let t=(e[0]??"").toLowerCase();if(t===""&&o.openLearningCenter)return await o.openLearningCenter(),!0;if(t===""||t==="list"||t==="pending"){let l=await n.list({search:e.slice(1).join(" ").trim()||void 0,...t==="pending"?{lifecycle:"ready"}:{},limit:200});S(A.cyan(`
41
- [learn] Learning Center`)),l.items.length===0&&S(A.dim(" (none)"));for(let c of l.items)S(` ${A.cyan(c.slug)} ${A.dim(`[${c.carrier}/${c.lifecycle}]`)} ${c.displayName}`);return S(),!0}let r=e[1],i=r?await Sc(n,r):void 0;if((t==="show"||t==="diff")&&i)return o.openLearningCenter?await o.openLearningCenter(i):S(`${JSON.stringify(await n.get(i),null,2)}
40
+ `))}a(rn,"printHelp");async function yc(e,o){let n=o.learning;if(!n)return!1;let t=(e[0]??"").toLowerCase();if(t===""&&o.openLearningCenter)return await o.openLearningCenter(),!0;if(t===""||t==="list"||t==="pending"){let l=await n.list({search:e.slice(1).join(" ").trim()||void 0,...t==="pending"?{lifecycle:"ready"}:{},limit:200});S(A.cyan(`
41
+ [learn] Learning Center`)),l.items.length===0&&S(A.dim(" (none)"));for(let c of l.items)S(` ${A.cyan(c.slug)} ${A.dim(`[${c.carrier}/${c.lifecycle}]`)} ${c.displayName}`);return S(),!0}let r=e[1],i=r?await kc(n,r):void 0;if((t==="show"||t==="diff")&&i)return o.openLearningCenter?await o.openLearningCenter(i):S(`${JSON.stringify(await n.get(i),null,2)}
42
42
  `),!0;if(!i)return!1;if(t==="trust"||t==="approve")await n.trust(i);else if(t==="reject")await n.reject(i);else if(t==="disable")await n.disable(i);else if(t==="rollback")await n.rollback(i);else if(t==="promote")await n.promote(i,"user");else if(t==="review")await n.review(i);else return!1;return S(A.dim(`
43
43
  [learn] ${t} accepted for ${i}.
44
- `)),!0}a(vc,"runLearningCenterCommand");async function Sc(e,o){try{return(await e.get(o)).slug}catch(n){let r=(await e.list({limit:200})).items.find(i=>i.source.kind==="f224_proposal"&&i.source.proposalId===o);if(r)return r.slug;throw n}}a(Sc,"resolveLearningCapabilityName");var $t={name:"learn",description:"Inspect and control the Learning Center",usage:"/learn [list|show|review|trust|reject|disable|rollback|promote|help] [name|slug]",argumentHint:"list | show <slug> | trust <slug> | disable <slug> | help",handler:a(async(e,o,n)=>{let t=fc(o),r=(e[0]??"pending").toLowerCase();if(r==="help"||r==="-h"||r==="--help"){tn();return}if(await vc(e,n))return;let{storePath:i,store:l}=await gc(t);if(r==="pending"||r==="list"){hc(l.proposals,i);return}let c=e[1];if(!c){S(A.yellow(`
44
+ `)),!0}a(yc,"runLearningCenterCommand");async function kc(e,o){try{return(await e.get(o)).slug}catch(n){let r=(await e.list({limit:200})).items.find(i=>i.source.kind==="f224_proposal"&&i.source.proposalId===o);if(r)return r.slug;throw n}}a(kc,"resolveLearningCapabilityName");var yt={name:"learn",description:"Inspect and control the Learning Center",usage:"/learn [list|show|review|trust|reject|disable|rollback|promote|help] [name|slug]",argumentHint:"list | show <slug> | trust <slug> | disable <slug> | help",handler:a(async(e,o,n)=>{let t=dc(o),r=(e[0]??"pending").toLowerCase();if(r==="help"||r==="-h"||r==="--help"){rn();return}if(await yc(e,n))return;let{storePath:i,store:l}=await mc(t);if(r==="pending"||r==="list"){gc(l.proposals,i);return}let c=e[1];if(!c){S(A.yellow(`
45
45
  [learn] missing proposal id for ${r}.
46
- `)),tn();return}let d=wc(l.proposals,c);if(!d){S(A.yellow(`
46
+ `)),rn();return}let d=pc(l.proposals,c);if(!d){S(A.yellow(`
47
47
  [learn] proposal not found: ${c}
48
- `));return}if(r==="diff"){yc(d);return}if(r==="approve"){if(l.warnings.length>0){S(A.red(`
48
+ `));return}if(r==="diff"){wc(d);return}if(r==="approve"){if(l.warnings.length>0){S(A.red(`
49
49
  [learn] refusing to mutate a corrupt learning store.
50
50
  `));return}if(d.status!=="pending"){S(A.dim(`
51
51
  [learn] ${d.proposalId} is already ${d.status}.
52
- `));return}let u=new Set(e.slice(2));await kc(i,d,{acknowledgeImpact:u.has("--ack-impact")});return}if(r==="reject"){if(l.warnings.length>0){S(A.red(`
52
+ `));return}let u=new Set(e.slice(2));await hc(i,d,{acknowledgeImpact:u.has("--ack-impact")});return}if(r==="reject"){if(l.warnings.length>0){S(A.red(`
53
53
  [learn] refusing to mutate a corrupt learning store.
54
54
  `));return}if(d.status!=="pending"){S(A.dim(`
55
55
  [learn] ${d.proposalId} is already ${d.status}.
56
- `));return}let u=e.slice(2).join(" ").trim();await Or(i,c,"rejected",u.length>0?{rejectedReason:u}:{}),S(A.dim(`
56
+ `));return}let u=e.slice(2).join(" ").trim();await Pr(i,c,"rejected",u.length>0?{rejectedReason:u}:{}),S(A.dim(`
57
57
  [learn] rejected ${c}.
58
58
  `));return}S(A.yellow(`
59
59
  [learn] unknown subcommand: ${r}
60
- `)),tn()},"handler"),detailedHelp:tn};import*as ee from"node:fs";import*as sn from"node:path";import p from"chalk";var Li=900*1e3,Re=new Map;function _i(e){return e instanceof Error?e.message:String(e)}a(_i,"formatMemoryError");function $c(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a($c,"resolveCwd");function Mi(e){let o;try{o=ee.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.log(p.red(`[memory] failed to read memory directory ${e}: ${_i(t)}`)),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=sn.join(e,t.name),i="",l=0;try{i=ee.readFileSync(r,"utf-8"),l=ee.statSync(r).mtimeMs}catch(m){console.log(p.red(`[memory] failed to read ${r}: ${_i(m)}`));continue}let d=_r(i).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=sn.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(Mi,"readTopicFiles");function bc(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(bc,"buildIndexLines");async function xc(e,o){console.log(p.cyan(`
61
- [memory] per-project memory directory`)),console.log(p.dim(` ${e}`));let n=Mi(e),t=n.filter(l=>!l.parseOk);console.log(p.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,i="";try{i=ee.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(p.yellow(`
60
+ `)),rn()},"handler"),detailedHelp:rn};import*as ee from"node:fs";import*as an from"node:path";import p from"chalk";var Ii=900*1e3,Ae=new Map;function Ei(e){return e instanceof Error?e.message:String(e)}a(Ei,"formatMemoryError");function vc(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(vc,"resolveCwd");function Ti(e){let o;try{o=ee.readdirSync(e,{withFileTypes:!0})}catch(t){return t.code!=="ENOENT"&&console.log(p.red(`[memory] failed to read memory directory ${e}: ${Ei(t)}`)),[]}let n=[];for(let t of o){if(!t.isFile()||!t.name.endsWith(".md")||t.name==="MEMORY.md")continue;let r=an.join(e,t.name),i="",l=0;try{i=ee.readFileSync(r,"utf-8"),l=ee.statSync(r).mtimeMs}catch(m){console.log(p.red(`[memory] failed to read ${r}: ${Ei(m)}`));continue}let d=Er(i).frontmatter,u=d.name!==void 0||d.description!==void 0||d.type!==void 0,f=an.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(Ti,"readTopicFiles");function Sc(e){return e.map(o=>`- [${o.title}](${o.filename}) \u2014 ${o.description}`)}a(Sc,"buildIndexLines");async function $c(e,o){console.log(p.cyan(`
61
+ [memory] per-project memory directory`)),console.log(p.dim(` ${e}`));let n=Ti(e),t=n.filter(l=>!l.parseOk);console.log(p.dim(` ${n.length} topic file${n.length===1?"":"s"}`+(t.length>0?`, ${t.length} without parsable frontmatter`:"")));let r=!1,i="";try{i=ee.readFileSync(o,"utf-8"),r=!0}catch{r=!1}if(!r){console.log(p.yellow(`
62
62
  MEMORY.md does not exist yet.`)),n.length>0?console.log(p.dim(" Run `/memory rebuild` to seed it from existing topic files.")):console.log(p.dim(" The LLM will create it on first save \u2014 no action needed.")),console.log();return}console.log(p.cyan(`
63
63
  --- MEMORY.md ---`)),i.trim().length===0?console.log(p.dim(" (empty)")):console.log(i.trimEnd()),console.log(p.cyan(`--- end ---
64
- `))}a(xc,"listMemory");async function Ac(e,o){let n=!1;try{n=ee.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(p.yellow(`
64
+ `))}a($c,"listMemory");async function bc(e,o){let n=!1;try{n=ee.statSync(e).isDirectory()}catch{n=!1}if(!n){console.log(p.yellow(`
65
65
  [memory] memory directory does not exist yet \u2014 nothing to rebuild.`)),console.log(p.dim(` ${e}`)),console.log(p.dim(` The LLM will create both the directory and MEMORY.md on first save.
66
- `));return}let t=Mi(e);if(t.length===0){console.log(p.yellow(`
66
+ `));return}let t=Ti(e);if(t.length===0){console.log(p.yellow(`
67
67
  [memory] no topic files found \u2014 nothing to rebuild.`)),console.log(p.dim(` ${e}
68
- `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=bc(r).join(`
68
+ `));return}let r=[...t].sort((d,u)=>u.mtimeMs-d.mtimeMs),l=Sc(r).join(`
69
69
  `)+`
70
70
  `;ee.writeFileSync(o,l,"utf-8"),console.log(p.green(`
71
- [memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log(p.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log(p.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log(p.dim(` - ${d.filename}`));console.log(p.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(Ac,"rebuildMemory");function Rc(e,o){console.log(p.cyan(`
71
+ [memory] rebuilt MEMORY.md with ${r.length} entries (newest first).`)),console.log(p.dim(` ${o}`));let c=r.filter(d=>!d.parseOk);if(c.length>0){console.log(p.yellow(` ${c.length} file(s) had no parsable frontmatter \u2014 used filename as fallback:`));for(let d of c)console.log(p.dim(` - ${d.filename}`));console.log(p.dim(" Tip: add `---\\nname: ...\\ndescription: ...\\ntype: ...\\n---` at the top of those files."))}console.log()}a(bc,"rebuildMemory");function xc(e,o){console.log(p.cyan(`
72
72
  [memory] open these paths in your editor:`)),console.log(p.dim(" index :"),o),console.log(p.dim(" dir :"),e),console.log(p.dim(`
73
73
  (No in-REPL editor is provided \u2014 open the file in your usual editor.
74
74
  Use \`/memory rebuild\` after manual edits if you renamed any topic file.)
75
- `))}a(Rc,"openMemory");function Ec(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(Ec,"proposalLabel");function Cc(e){if(console.log(p.cyan(`
75
+ `))}a(xc,"openMemory");function Ac(e){let o=e.targetRefs.map(n=>n.title??n.id).join(", ");return`${e.action} ${o||"(report only)"}`}a(Ac,"proposalLabel");function Rc(e){if(console.log(p.cyan(`
76
76
  [memory] pending memory proposals`)),e.length===0){console.log(p.dim(` (none)
77
- `));return}for(let o of e)console.log(` ${p.cyan(o.id)} ${p.dim(`[${o.action}]`)} ${Ec(o)}`);console.log(p.dim(`
77
+ `));return}for(let o of e)console.log(` ${p.cyan(o.id)} ${p.dim(`[${o.action}]`)} ${Ac(o)}`);console.log(p.dim(`
78
78
  Use /memory show <id>, /memory approve <id>, or /memory reject <id>.
79
- `))}a(Cc,"printMemoryInbox");function Ic(e){if(console.log(p.cyan(`
79
+ `))}a(Rc,"printMemoryInbox");function Ec(e){if(console.log(p.cyan(`
80
80
  [memory] ${e.id}`)),console.log(p.dim(` action : ${e.action}`)),console.log(p.dim(` risk : ${e.risk}`)),console.log(p.dim(` reason : ${e.rationale}`)),console.log(p.dim(` summary: ${e.preview.summary}`)),e.preview.changedPaths.length>0){console.log(p.dim(" changed paths:"));for(let o of e.preview.changedPaths)console.log(p.dim(` - ${o}`))}if(e.preview.warnings.length>0){console.log(p.yellow(" warnings:"));for(let o of e.preview.warnings)console.log(p.yellow(` - ${o}`))}e.preview.diff!==void 0&&e.preview.diff.trim().length>0&&(console.log(p.cyan(`
81
- --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Ic,"printMemoryProposal");function Tc(e){if(!e.applied){console.log(p.yellow(`
81
+ --- preview ---`)),console.log(e.preview.diff.trimEnd()),console.log(p.cyan("--- end ---"))),console.log()}a(Ec,"printMemoryProposal");function Cc(e){if(!e.applied){console.log(p.yellow(`
82
82
  [memory] ${e.proposalId} was not applied.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
83
83
  `));return}console.log(p.green(`
84
- [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Tc,"printApplyResult");function _c(e){if(!e.rejected){console.log(p.yellow(`
84
+ [memory] approved and applied ${e.proposalId}.`)),e.changedPaths.length>0&&console.log(p.dim(` changed: ${e.changedPaths.join(", ")}`)),console.log()}a(Cc,"printApplyResult");function Ic(e){if(!e.rejected){console.log(p.yellow(`
85
85
  [memory] ${e.proposalId} was not rejected.`)),console.log(p.dim(` ${e.skippedReason??"no reason provided"}
86
86
  `));return}console.log(p.dim(`
87
- [memory] rejected ${e.proposalId}.`)),e.review!==void 0&&console.log(p.dim(` review actions: ${e.review.actions.length}`));for(let o of e.warnings)console.log(p.dim(` review warning: ${o}`));console.log()}a(_c,"printRejectResult");function Pc(e){console.log(p.cyan(`
88
- [memory] governance report ${e.reportId}`));for(let o of e.warnings)console.log(p.yellow(` warning: ${o}`));for(let o of e.findings)console.log(` ${p.dim(`[${o.severity}]`)} ${o.kind}: ${o.summary}`),o.refIds.length>0&&console.log(p.dim(` refs: ${o.refIds.join(", ")}`));console.log()}a(Pc,"printGovernanceReport");function Pi(){console.log(p.cyan(`
89
- /memory - Inspect or rebuild per-project memory`)),console.log(p.dim(" /memory List MEMORY.md + memory directory")),console.log(p.dim(" /memory list Same as `/memory`")),console.log(p.dim(" /memory pending List pending memory learning proposals")),console.log(p.dim(" /memory show <id> Preview a memory proposal")),console.log(p.dim(" /memory approve <id> Approve and apply a memory proposal")),console.log(p.dim(" /memory reject <id> Reject a memory proposal")),console.log(p.dim(" /memory curate Report duplicate/stale/quarantined refs")),console.log(p.dim(" /memory rebuild Regenerate MEMORY.md from topic frontmatter")),console.log(p.dim(" /memory open Print paths so you can open them in your editor")),console.log(p.dim(" /memory help Show this help")),console.log()}a(Pi,"printHelp");function Lc(){console.log(p.bold(`
87
+ [memory] rejected ${e.proposalId}.`)),e.review!==void 0&&console.log(p.dim(` review actions: ${e.review.actions.length}`));for(let o of e.warnings)console.log(p.dim(` review warning: ${o}`));console.log()}a(Ic,"printRejectResult");function Tc(e){console.log(p.cyan(`
88
+ [memory] governance report ${e.reportId}`));for(let o of e.warnings)console.log(p.yellow(` warning: ${o}`));for(let o of e.findings)console.log(` ${p.dim(`[${o.severity}]`)} ${o.kind}: ${o.summary}`),o.refIds.length>0&&console.log(p.dim(` refs: ${o.refIds.join(", ")}`));console.log()}a(Tc,"printGovernanceReport");function Ci(){console.log(p.cyan(`
89
+ /memory - Inspect or rebuild per-project memory`)),console.log(p.dim(" /memory List MEMORY.md + memory directory")),console.log(p.dim(" /memory list Same as `/memory`")),console.log(p.dim(" /memory pending List pending memory learning proposals")),console.log(p.dim(" /memory show <id> Preview a memory proposal")),console.log(p.dim(" /memory approve <id> Approve and apply a memory proposal")),console.log(p.dim(" /memory reject <id> Reject a memory proposal")),console.log(p.dim(" /memory curate Report duplicate/stale/quarantined refs")),console.log(p.dim(" /memory rebuild Regenerate MEMORY.md from topic frontmatter")),console.log(p.dim(" /memory open Print paths so you can open them in your editor")),console.log(p.dim(" /memory help Show this help")),console.log()}a(Ci,"printHelp");function _c(){console.log(p.bold(`
90
90
  /memory - Inspect or rebuild project memory
91
91
  `)),console.log("Usage:"),console.log(p.cyan(" /memory ")+p.dim("Show MEMORY.md + topic file count")),console.log(p.cyan(" /memory list ")+p.dim("Alias for `/memory`")),console.log(p.cyan(" /memory pending ")+p.dim("List pending memory learning proposals")),console.log(p.cyan(" /memory show <id> ")+p.dim("Preview a memory proposal")),console.log(p.cyan(" /memory approve <id> ")+p.dim("Approve and apply a memory proposal")),console.log(p.cyan(" /memory reject <id> ")+p.dim("Reject a memory proposal")),console.log(p.cyan(" /memory curate ")+p.dim("Report duplicate/stale/quarantined refs")),console.log(p.cyan(" /memory rebuild ")+p.dim("Regenerate MEMORY.md (newest first by mtime)")),console.log(p.cyan(" /memory open ")+p.dim("Print the index + dir paths for editor use")),console.log(p.cyan(" /memory help ")+p.dim(`Show this help
92
92
  `)),console.log("Description:"),console.log(p.dim(` Each project gets its own memory directory under your KodaX agent
@@ -94,18 +94,18 @@ Apply plan:`),S(A.dim(` kind : ${e.applyPlan.kind}`)),S(A.dim(` skillRoot:
94
94
  owns reads/writes; this command is your escape hatch when the
95
95
  MEMORY.md index drifts from the topic files on disk.
96
96
  `)),console.log("Notes:"),console.log(p.dim(" \u2022 Rebuild ONLY rewrites MEMORY.md. Topic files are never touched.")),console.log(p.dim(" \u2022 Rebuild sorts entries by file mtime descending \u2014 the same")),console.log(p.dim(" natural-LRU order the LLM produces by prepending new entries.")),console.log(p.dim(" \u2022 Files missing or with malformed frontmatter still appear in")),console.log(p.dim(" the rebuilt index using their filename as fallback; the command")),console.log(p.dim(` prints a warning so you can fix the frontmatter.
97
- `))}a(Lc,"printDetailedHelp");var bt={name:"memory",description:"Inspect, govern, or rebuild per-project memory",usage:"/memory [list|pending|show|approve|reject|curate|rebuild|open|help]",argumentHint:"list | pending | show <id> | approve <id> | reject <id> [reason] | curate | rebuild | open | help",handler:a(async(e,o,n)=>{let t=$c(o),r=Ir(t),i=Tr(t),l=(e[0]??"list").toLowerCase(),c=n.createKodaXOptions?.().memoryReviewer,d=Nr({cwd:t,...c!==void 0?{memoryReviewer:c}:{}});if(l==="help"||l==="--help"||l==="-h"){Pi();return}if(l==="list"){await xc(r,i);return}if(l==="pending"||l==="inbox"){Cc(await d.listInbox());return}if(l==="show"){let u=e[1];if(u===void 0){console.log(p.yellow(`
97
+ `))}a(_c,"printDetailedHelp");var kt={name:"memory",description:"Inspect, govern, or rebuild per-project memory",usage:"/memory [list|pending|show|approve|reject|curate|rebuild|open|help]",argumentHint:"list | pending | show <id> | approve <id> | reject <id> [reason] | curate | rebuild | open | help",handler:a(async(e,o,n)=>{let t=vc(o),r=Ar(t),i=Rr(t),l=(e[0]??"list").toLowerCase(),c=n.createKodaXOptions?.().memoryReviewer,d=Lr({cwd:t,...c!==void 0?{memoryReviewer:c}:{}});if(l==="help"||l==="--help"||l==="-h"){Ci();return}if(l==="list"){await $c(r,i);return}if(l==="pending"||l==="inbox"){Rc(await d.listInbox());return}if(l==="show"){let u=e[1];if(u===void 0){console.log(p.yellow(`
98
98
  [memory] missing proposal id for show.
99
99
  `));return}let f=await d.showProposal(u);if(f===void 0){console.log(p.yellow(`
100
100
  [memory] proposal not found: ${u}
101
- `));return}Ic(f),Mc(t,f.id,f.expectedFingerprints);return}if(l==="approve"){let u=e[1];if(u===void 0){console.log(p.yellow(`
101
+ `));return}Ec(f),Pc(t,f.id,f.expectedFingerprints);return}if(l==="approve"){let u=e[1];if(u===void 0){console.log(p.yellow(`
102
102
  [memory] missing proposal id for approve.
103
- `));return}let f=Wc(t,u);if(f===void 0){console.log(p.yellow(`
103
+ `));return}let f=Lc(t,u);if(f===void 0){console.log(p.yellow(`
104
104
  [memory] preview required before approve: /memory show ${u}
105
- `));return}let m=await d.approveProposal(u,f);Re.delete(rn(t,u)),Tc(m);return}if(l==="reject"){let u=e[1];if(u===void 0){console.log(p.yellow(`
105
+ `));return}let m=await d.approveProposal(u,f);Ae.delete(sn(t,u)),Cc(m);return}if(l==="reject"){let u=e[1];if(u===void 0){console.log(p.yellow(`
106
106
  [memory] missing proposal id for reject.
107
- `));return}let f=await d.rejectProposal(u,e.slice(2).join(" ").trim());Re.delete(rn(t,u)),_c(f);return}if(l==="curate"){Pc(await d.runCurator());return}if(l==="rebuild"){await Ac(r,i);return}if(l==="open"){Rc(r,i);return}console.log(p.yellow(`
108
- [memory] unknown subcommand: ${l}`)),Pi()},"handler"),detailedHelp:Lc};function rn(e,o){return`${e}\0${o}`}a(rn,"previewCacheKey");function Mc(e,o,n){Oc(Date.now()),Re.set(rn(e,o),{fingerprints:n,createdAtMs:Date.now()})}a(Mc,"cachePreviewFingerprints");function Wc(e,o){let n=rn(e,o),t=Re.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>Li){Re.delete(n);return}return t.fingerprints}}a(Wc,"readCachedPreviewFingerprints");function Oc(e){for(let[o,n]of Re)e-n.createdAtMs>Li&&Re.delete(o)}a(Oc,"pruneExpiredPreviewFingerprints");import C from"chalk";function Wi(){console.log(`
107
+ `));return}let f=await d.rejectProposal(u,e.slice(2).join(" ").trim());Ae.delete(sn(t,u)),Ic(f);return}if(l==="curate"){Tc(await d.runCurator());return}if(l==="rebuild"){await bc(r,i);return}if(l==="open"){xc(r,i);return}console.log(p.yellow(`
108
+ [memory] unknown subcommand: ${l}`)),Ci()},"handler"),detailedHelp:_c};function sn(e,o){return`${e}\0${o}`}a(sn,"previewCacheKey");function Pc(e,o,n){Mc(Date.now()),Ae.set(sn(e,o),{fingerprints:n,createdAtMs:Date.now()})}a(Pc,"cachePreviewFingerprints");function Lc(e,o){let n=sn(e,o),t=Ae.get(n);if(t!==void 0){if(Date.now()-t.createdAtMs>Ii){Ae.delete(n);return}return t.fingerprints}}a(Lc,"readCachedPreviewFingerprints");function Mc(e){for(let[o,n]of Ae)e-n.createdAtMs>Ii&&Ae.delete(o)}a(Mc,"pruneExpiredPreviewFingerprints");import C from"chalk";function _i(){console.log(`
109
109
  ${C.bold("/goal")} \u2014 persistent session goal
110
110
 
111
111
  ${C.bold("Subcommands:")}
@@ -121,20 +121,20 @@ ${C.bold("Notes:")}
121
121
  - Token budget is optional; set it only when you want a hard ceiling.
122
122
  - update_goal({complete}) is verifier-gated; the agent cannot
123
123
  self-declare done without runtime confirmation.
124
- `.trim())}a(Wi,"printHelp");function Nc(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(!Hn(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(!Hn(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(Nc,"parseCreateArgs");function Dc(e){if(!e)return C.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${C.bold("Goal:")} ${e.objective}`,`${C.bold("Status:")} ${e.status}`,`${C.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${C.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${C.bold("Token budget:")} ${C.dim("none")}`);return o.push(`${C.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${C.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
125
- `)}a(Dc,"renderStatus");async function wo(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=Ur(e.lineage,n,t),await o.saveSession()}a(wo,"persist");async function Uc(e,o,n){if(!o.lineage){console.log(C.red("[/goal] no active session lineage"));return}let t=Ue(o.lineage);if(t&&t.status!=="complete"){console.log(C.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=Nc(e);if("error"in r){console.log(C.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await wo(o,n,null,"cleared");let i=Br(r.objective,r.tokenBudget);await wo(o,n,i,"created"),console.log(C.green(`[/goal] created: "${i.objective}"`)),i.tokenBudget!==null&&console.log(C.dim(` budget: ${i.tokenBudget} tokens`))}catch(i){let l=i instanceof Error?i.message:String(i);console.log(C.red(`[/goal] ${l}`))}}a(Uc,"doCreate");async function jc(e){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let o=Ue(e.lineage);console.log(Dc(o))}a(jc,"doStatus");async function Fc(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=Ue(e.lineage);if(!n){console.log(C.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(C.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=Gr(n);await wo(e,o,t,"paused"),console.log(C.green("[/goal] paused"))}a(Fc,"doPause");async function Hc(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=Ue(e.lineage);if(!n){console.log(C.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(C.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=qr(n);await wo(e,o,t,"resumed"),console.log(C.green("[/goal] resumed"))}a(Hc,"doResume");async function Bc(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}if(!Ue(e.lineage)){console.log(C.yellow("[/goal] no goal to clear"));return}await wo(e,o,null,"cleared"),console.log(C.green("[/goal] cleared"))}a(Bc,"doClear");var Oi={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"){Wi();return}if(t==="status"){await jc(o);return}if(t==="pause"){await Fc(o,n);return}if(t==="resume"){await Hc(o,n);return}if(t==="clear"){await Bc(o,n);return}await Uc(e,o,n)},"handler"),detailedHelp:Wi};import{existsSync as ia}from"node:fs";import{join as ne}from"node:path";import w from"chalk";import Rt from"path";import{createHash as Vc}from"crypto";import{execFile as Gc}from"child_process";import qc from"fs";import xt from"path";import{promisify as Kc}from"util";var zc=Kc(Gc);function ge(e){if(!(!e||!e.trim()))return xt.resolve(e).replace(/\\/g,"/")}a(ge,"normalizePath");async function ho(e,o){try{let{stdout:n}=await zc("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}a(ho,"gitStdout");function Xc(e){let o=ge(e);if(o)return xt.posix.basename(o)===".git"?xt.posix.dirname(o):o}a(Xc,"deriveCanonicalRepoRoot");async function Zp(e={}){let o=ge(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=ge(await ho(o,["rev-parse","--show-toplevel"])),t=await ho(n??o,["rev-parse","--path-format=absolute","--git-common-dir"])??await ho(n??o,["rev-parse","--git-common-dir"]),r=await ho(n??o,["branch","--show-current"])??await ho(n??o,["rev-parse","--abbrev-ref","HEAD"]);return{canonicalRepoRoot:Xc(t)??n,workspaceRoot:n,executionCwd:o,branch:r&&r!=="HEAD"?r:void 0,workspaceKind:e.workspaceKind??"detected"}}a(Zp,"inspectWorkspaceRuntime");function Qp(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:ge(e.canonicalRepoRoot)===ge(o.canonicalRepoRoot)}a(Qp,"isSameCanonicalRepo");function eg(e){return!!(e?.workspaceRoot&&qc.existsSync(e.workspaceRoot))}a(eg,"workspaceExists");function Ni(e){let o=ge(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=ge(e.runtimeInfo?.executionCwd??o),t=ge(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(Ni,"resolveSessionRuntimeInfo");function At(e){if(!e?.workspaceRoot)return"No git workspace detected";let o=e.branch?` @ ${e.branch}`:"",n=e.workspaceKind??"detected";return`${e.workspaceRoot}${o} [${n}]`}a(At,"formatWorkspaceTruth");var Di="_unknown",Ui=80;function Yc(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(Yc,"caseFold");function Jc(e){return Yc(Rt.resolve(e).replace(/\\/g,"/"))}a(Jc,"normalizeRoot");function ji(e){return Vc("sha256").update(e).digest("hex").slice(0,10)}a(ji,"shortHash");function Zc(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Ui?o.slice(o.length-Ui):o}a(Zc,"slugify");function Ee(e){if(!e||!e.trim())return{key:Di,canonicalRoot:null,displayName:Di};let o=Jc(e),n=Zc(o),t=n?`${n}-${ji(o)}`:ji(o),r=Rt.basename(Rt.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Ee,"deriveProjectKeyFromRoot");function ig(e){let o=Ni({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Ee(n)}a(ig,"deriveProjectKeyFromData");import Ce from"chalk";function an(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(an,"resolveLearningCommandCwd");function qe(e=""){process.stdout.write(`${e}
126
- `)}a(qe,"writeOutput");function Qc(e,o){return o==="skill"?e.proposal.destination==="skill_patch"||e.proposal.destination==="skill_create":o==="workflow"?e.proposal.destination==="workflow_handoff":e.proposal.destination==="memdir_handoff"||e.proposal.destination==="reasoning_handoff"}a(Qc,"matchesFilter");function ed(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(ed,"headingForFilter");function od(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(od,"proposalLabel");async function ln(e,o){let n=Mo(e),t=await Lo(n);for(let i of t.warnings)qe(Ce.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>Qc(i,o));if(qe(Ce.cyan(`
127
- [learn] ${ed(o)}`)),qe(Ce.dim(` ${n}`)),r.length===0){qe(Ce.dim(` (none)
128
- `));return}for(let i of r)qe(` ${Ce.cyan(i.proposalId)} ${Ce.dim(`[${i.proposal.destination}]`)} ${od(i)}`);qe(Ce.dim(`
124
+ `.trim())}a(_i,"printHelp");function Wc(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(!Fn(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(!Fn(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(Wc,"parseCreateArgs");function Oc(e){if(!e)return C.dim("No goal set. Use `/goal <objective>` to create one.");let o=[`${C.bold("Goal:")} ${e.objective}`,`${C.bold("Status:")} ${e.status}`,`${C.bold("Tokens used:")} ${e.tokensUsed}`];if(e.tokenBudget!==null){let n=Math.max(0,e.tokenBudget-e.tokensUsed);o.push(`${C.bold("Token budget:")} ${e.tokenBudget} (remaining ${n})`)}else o.push(`${C.bold("Token budget:")} ${C.dim("none")}`);return o.push(`${C.bold("Elapsed:")} ${e.timeUsedSeconds}s`),e.status==="blocked"&&e.lastBlockerKind&&o.push(`${C.bold("Blocker:")} ${e.lastBlockerKind}`),o.join(`
125
+ `)}a(Oc,"renderStatus");async function wo(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=Wr(e.lineage,n,t),await o.saveSession()}a(wo,"persist");async function Nc(e,o,n){if(!o.lineage){console.log(C.red("[/goal] no active session lineage"));return}let t=De(o.lineage);if(t&&t.status!=="complete"){console.log(C.yellow(`[/goal] a goal is already active (status: ${t.status}). Clear it first with \`/goal clear\` before creating a new one.`));return}let r=Wc(e);if("error"in r){console.log(C.red(`[/goal] ${r.error}`));return}try{t&&t.status==="complete"&&await wo(o,n,null,"cleared");let i=Ur(r.objective,r.tokenBudget);await wo(o,n,i,"created"),console.log(C.green(`[/goal] created: "${i.objective}"`)),i.tokenBudget!==null&&console.log(C.dim(` budget: ${i.tokenBudget} tokens`))}catch(i){let l=i instanceof Error?i.message:String(i);console.log(C.red(`[/goal] ${l}`))}}a(Nc,"doCreate");async function Dc(e){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let o=De(e.lineage);console.log(Oc(o))}a(Dc,"doStatus");async function Uc(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=De(e.lineage);if(!n){console.log(C.yellow("[/goal] no goal to pause"));return}if(n.status!=="active"){console.log(C.yellow(`[/goal] cannot pause from status '${n.status}' (only 'active' is pausable)`));return}let t=jr(n);await wo(e,o,t,"paused"),console.log(C.green("[/goal] paused"))}a(Uc,"doPause");async function jc(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}let n=De(e.lineage);if(!n){console.log(C.yellow("[/goal] no goal to resume"));return}if(n.status!=="paused"){console.log(C.yellow(`[/goal] cannot resume from status '${n.status}' (only 'paused' is resumable)`));return}let t=Fr(n);await wo(e,o,t,"resumed"),console.log(C.green("[/goal] resumed"))}a(jc,"doResume");async function Fc(e,o){if(!e.lineage){console.log(C.red("[/goal] no active session lineage"));return}if(!De(e.lineage)){console.log(C.yellow("[/goal] no goal to clear"));return}await wo(e,o,null,"cleared"),console.log(C.green("[/goal] cleared"))}a(Fc,"doClear");var Pi={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"){_i();return}if(t==="status"){await Dc(o);return}if(t==="pause"){await Uc(o,n);return}if(t==="resume"){await jc(o,n);return}if(t==="clear"){await Fc(o,n);return}await Nc(e,o,n)},"handler"),detailedHelp:_i};import{existsSync as na}from"node:fs";import{join as ne}from"node:path";import w from"chalk";import $t from"path";import{createHash as Kc}from"crypto";import{execFile as Hc}from"child_process";import Bc from"fs";import vt from"path";import{promisify as Gc}from"util";var qc=Gc(Hc);function ge(e){if(!(!e||!e.trim()))return vt.resolve(e).replace(/\\/g,"/")}a(ge,"normalizePath");async function ho(e,o){try{let{stdout:n}=await qc("git",o,{cwd:e,windowsHide:!0,maxBuffer:1048576}),t=n.trim();return t||void 0}catch{return}}a(ho,"gitStdout");function zc(e){let o=ge(e);if(o)return vt.posix.basename(o)===".git"?vt.posix.dirname(o):o}a(zc,"deriveCanonicalRepoRoot");async function Jp(e={}){let o=ge(e.cwd??process.cwd())??process.cwd().replace(/\\/g,"/"),n=ge(await ho(o,["rev-parse","--show-toplevel"])),t=await ho(n??o,["rev-parse","--path-format=absolute","--git-common-dir"])??await ho(n??o,["rev-parse","--git-common-dir"]),r=await ho(n??o,["branch","--show-current"])??await ho(n??o,["rev-parse","--abbrev-ref","HEAD"]);return{canonicalRepoRoot:zc(t)??n,workspaceRoot:n,executionCwd:o,branch:r&&r!=="HEAD"?r:void 0,workspaceKind:e.workspaceKind??"detected"}}a(Jp,"inspectWorkspaceRuntime");function Zp(e,o){return!e?.canonicalRepoRoot||!o?.canonicalRepoRoot?!1:ge(e.canonicalRepoRoot)===ge(o.canonicalRepoRoot)}a(Zp,"isSameCanonicalRepo");function Qp(e){return!!(e?.workspaceRoot&&Bc.existsSync(e.workspaceRoot))}a(Qp,"workspaceExists");function Li(e){let o=ge(e.runtimeInfo?.workspaceRoot??e.gitRoot),n=ge(e.runtimeInfo?.executionCwd??o),t=ge(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(Li,"resolveSessionRuntimeInfo");function St(e){if(!e?.workspaceRoot)return"No git workspace detected";let o=e.branch?` @ ${e.branch}`:"",n=e.workspaceKind??"detected";return`${e.workspaceRoot}${o} [${n}]`}a(St,"formatWorkspaceTruth");var Mi="_unknown",Wi=80;function Xc(e){return process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e}a(Xc,"caseFold");function Vc(e){return Xc($t.resolve(e).replace(/\\/g,"/"))}a(Vc,"normalizeRoot");function Oi(e){return Kc("sha256").update(e).digest("hex").slice(0,10)}a(Oi,"shortHash");function Yc(e){let o=e.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"");return o.length>Wi?o.slice(o.length-Wi):o}a(Yc,"slugify");function Re(e){if(!e||!e.trim())return{key:Mi,canonicalRoot:null,displayName:Mi};let o=Vc(e),n=Yc(o),t=n?`${n}-${Oi(o)}`:Oi(o),r=$t.basename($t.resolve(e).replace(/\\/g,"/"))||e;return{key:t,canonicalRoot:o,displayName:r}}a(Re,"deriveProjectKeyFromRoot");function sg(e){let o=Li({gitRoot:e.gitRoot??"",runtimeInfo:e.runtimeInfo}),n=o?.canonicalRepoRoot??o?.executionCwd??(e.gitRoot&&e.gitRoot.trim()?e.gitRoot:void 0);return Re(n)}a(sg,"deriveProjectKeyFromData");import Ee from"chalk";function ln(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??process.cwd()}a(ln,"resolveLearningCommandCwd");function Ge(e=""){process.stdout.write(`${e}
126
+ `)}a(Ge,"writeOutput");function Jc(e,o){return o==="skill"?e.proposal.destination==="skill_patch"||e.proposal.destination==="skill_create":o==="workflow"?e.proposal.destination==="workflow_handoff":e.proposal.destination==="memdir_handoff"||e.proposal.destination==="reasoning_handoff"}a(Jc,"matchesFilter");function Zc(e){return e==="skill"?"pending method guides":e==="workflow"?"pending runnable workflows":"pending memory handoffs"}a(Zc,"headingForFilter");function Qc(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(Qc,"proposalLabel");async function cn(e,o){let n=Wo(e),t=await Mo(n);for(let i of t.warnings)Ge(Ee.yellow(`[learn] ${i}`));let r=t.proposals.filter(i=>i.status==="pending").filter(i=>Jc(i,o));if(Ge(Ee.cyan(`
127
+ [learn] ${Zc(o)}`)),Ge(Ee.dim(` ${n}`)),r.length===0){Ge(Ee.dim(` (none)
128
+ `));return}for(let i of r)Ge(` ${Ee.cyan(i.proposalId)} ${Ee.dim(`[${i.proposal.destination}]`)} ${Qc(i)}`);Ge(Ee.dim(`
129
129
  Use /learn diff <id>, /learn approve <id>, or /learn reject <id>.
130
- `))}a(ln,"printLearningPendingForFilter");import{join as Fd}from"node:path";import vn from"chalk";import{existsSync as ae,readdirSync as pd,readFileSync as fn,writeFileSync as vg}from"node:fs";import{dirname as gd,join as oe}from"node:path";import E from"chalk";import{existsSync as nd,readFileSync as td}from"node:fs";var Fi=4,Hi=180,Bi=6e3,Gi=360,Et="[truncated]";function Ie(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ie,"detectWorkflowLocale");function yo(...e){return Ie(e.filter(o=>typeof o=="string").join(`
131
- `))}a(yo,"inferWorkflowLocaleFromParts");function we(e,o={}){let n=e.trim();return o.full===!0||n.length<=Bi?n:`${n.slice(0,Bi).trimEnd()}
130
+ `))}a(cn,"printLearningPendingForFilter");import{join as Ud}from"node:path";import Sn from"chalk";import{existsSync as ae,readdirSync as fd,readFileSync as mn,writeFileSync as kg}from"node:fs";import{dirname as md,join as oe}from"node:path";import E from"chalk";import{existsSync as ed,readFileSync as od}from"node:fs";var Ni=4,Di=180,Ui=6e3,ji=360,bt="[truncated]";function Ce(e){return/[\u3400-\u9fff]/u.test(e)?"zh":"en"}a(Ce,"detectWorkflowLocale");function yo(...e){return Ce(e.filter(o=>typeof o=="string").join(`
131
+ `))}a(yo,"inferWorkflowLocaleFromParts");function we(e,o={}){let n=e.trim();return o.full===!0||n.length<=Ui?n:`${n.slice(0,Ui).trimEnd()}
132
132
 
133
- ${Et}`}a(we,"trimResultPreview");function Ct(e){return e.includes(Et)}a(Ct,"isWorkflowResultPreviewTruncated");function rd(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(rd,"formatWorkflowResultTruncationHint");function Ke(e,o,n){let t=e.lastIndexOf(Et);return t<0?e:`${e.slice(0,t).trimEnd()}
133
+ ${bt}`}a(we,"trimResultPreview");function xt(e){return e.includes(bt)}a(xt,"isWorkflowResultPreviewTruncated");function nd(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(nd,"formatWorkflowResultTruncationHint");function qe(e,o,n){let t=e.lastIndexOf(bt);return t<0?e:`${e.slice(0,t).trimEnd()}
134
134
 
135
- ${rd(o,n)}`}a(Ke,"replaceWorkflowResultTruncationMarker");function sd(e){let o=e.replace(/\s+/g," ").trim();return o.length<=Gi?o:`${o.slice(0,Gi).trimEnd()}...`}a(sd,"trimWorkflowLaunchSummary");function he(e,o={}){if(typeof e=="string"&&e.trim().length>0)return we(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return we(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return we(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 we(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 we(n,o)}}catch{}}a(he,"formatResult");function ko(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&V(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>V(d,"name")==="synthesize")??n[0],i=r?V(r,"summary"):void 0;if(i)return we(i,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?V(l,"summary")??V(l,"error"):void 0;return c?we(c,o):void 0}a(ko,"formatFinalEventSummary");function id(e,o={}){if(!(!e.path||!nd(e.path)))try{let n=JSON.parse(td(e.path,"utf8")),t=he(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?we(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(id,"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=id(i,n);if(l)return o==="zh"?`\u4EA7\u7269 ${i.name}:
135
+ ${nd(o,n)}`}a(qe,"replaceWorkflowResultTruncationMarker");function td(e){let o=e.replace(/\s+/g," ").trim();return o.length<=ji?o:`${o.slice(0,ji).trimEnd()}...`}a(td,"trimWorkflowLaunchSummary");function he(e,o={}){if(typeof e=="string"&&e.trim().length>0)return we(e,o);if(e&&typeof e=="object"&&"synthesis"in e){let n=e.synthesis;if(typeof n=="string"&&n.trim().length>0)return we(n,o);if(n&&typeof n=="object"&&"text"in n){let t=n.text;if(typeof t=="string"&&t.trim().length>0)return we(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 we(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 we(n,o)}}catch{}}a(he,"formatResult");function ko(e,o={}){let n=[...e].reverse().filter(d=>d.type==="agent_completed"&&V(d,"status")==="completed"||d.type==="agent_unverified"),r=n.find(d=>V(d,"name")==="synthesize")??n[0],i=r?V(r,"summary"):void 0;if(i)return we(i,o);let l=[...e].reverse().find(d=>d.type==="agent_failed"),c=l?V(l,"summary")??V(l,"error"):void 0;return c?we(c,o):void 0}a(ko,"formatFinalEventSummary");function rd(e,o={}){if(!(!e.path||!ed(e.path)))try{let n=JSON.parse(od(e.path,"utf8")),t=he(n,o);if(t)return t;let r=JSON.stringify(n,null,2);return typeof r=="string"&&r.trim().length>0?we(r,o):void 0}catch(n){return`artifact preview unavailable: ${n instanceof Error?n.message:String(n)}`}}a(rd,"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=rd(i,n);if(l)return o==="zh"?`\u4EA7\u7269 ${i.name}:
136
136
  ${l}`:`Artifact ${i.name}:
137
- ${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 It(e){let o=e.resultText?Ke(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}
137
+ ${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?qe(e.resultText,e.runId,e.locale):void 0;if(e.locale==="zh"){let t=e.resultText&&e.isFallbackPreview!==!0?`Workflow \u5DF2\u5B8C\u6210\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`:`Workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7ED3\u679C\u5951\u7EA6\u5931\u8D25\uFF08${e.totalSpawned} \u4E2A\u667A\u80FD\u4F53\uFF0Crun ${e.runId}\uFF09\u3002`;if(o){let r=e.isFallbackPreview===!0?"\u7ED3\u679C\u5951\u7EA6\u5F02\u5E38\uFF1Aworkflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u6CA1\u6709\u8FD4\u56DE\u5B8C\u6574\u6700\u7EC8\u7ED3\u679C\u3002\u4EE5\u4E0B\u662F\u6700\u540E\u7EFC\u5408\u8F93\u51FA\uFF1A":"\u6700\u7EC8\u7ED3\u679C\uFF1A";return`${t}
138
138
 
139
139
  ${r}
140
140
 
@@ -144,78 +144,78 @@ ${o}`}return[t,"","\u8FD9\u6B21 workflow \u8FD0\u884C\u7ED3\u675F\uFF0C\u4F46\u7
144
144
  ${t}
145
145
 
146
146
  ${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(`
147
- `)}a(It,"formatWorkflowCompletionAnswer");function Tt(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=sd(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(`
147
+ `)}a(At,"formatWorkflowCompletionAnswer");function Rt(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=td(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(`
148
148
  `)}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(`
149
- `)}a(Tt,"formatWorkflowLaunchAnswer");function V(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(V,"readEventString");function _t(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"&&V(e,"status")!=="completed")return;let t=V(e,"summary")??V(e,"error");if(!t)return;let r=V(e,"summaryKind");if(r==="pending")return;let i=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=V(e,"name")??V(e,"taskId")??"agent";return md(l,t,o,n,i)}a(_t,"formatWorkflowAgentDigest");function ad(e){let o=e.replace(/\s+/g," ").trim();return o.length<=Hi?o:`${o.slice(0,Hi).trimEnd()}...`}a(ad,"trimWorkflowAgentDigestExcerpt");function ld(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(ld,"isHighSignalWorkflowAgentDigestLine");function cd(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(cd,"isLowInformationWorkflowAgentDigestLine");function dd(e){return e.replace(/\s+/g," ").trim()}a(dd,"compactWorkflowAgentDigestLine");function ud(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=dd(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!cd(t))return o.truncateLines===!1?t:ad(t)}a(ud,"normalizeWorkflowAgentDigestLine");function fd(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let i=ud(r,o);if(!i)continue;let l=ld(i)?n:t;n.includes(i)||t.includes(i)||l.push(i)}return n.length>0?n.slice(0,Fi):t.length>0?t.slice(0,Fi):[]}a(fd,"extractWorkflowAgentDigestExcerpts");function md(e,o,n,t,r="excerpt"){let i=r==="digest",c=fd(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(`
149
+ `)}a(Rt,"formatWorkflowLaunchAnswer");function V(e,o){let n=e.data?.[o];return typeof n=="string"&&n.trim().length>0?n.trim():void 0}a(V,"readEventString");function Et(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"&&V(e,"status")!=="completed")return;let t=V(e,"summary")??V(e,"error");if(!t)return;let r=V(e,"summaryKind");if(r==="pending")return;let i=r==="digest"?"digest":r==="digest-failed"?"digest-failed":"excerpt",l=V(e,"name")??V(e,"taskId")??"agent";return ud(l,t,o,n,i)}a(Et,"formatWorkflowAgentDigest");function sd(e){let o=e.replace(/\s+/g," ").trim();return o.length<=Di?o:`${o.slice(0,Di).trimEnd()}...`}a(sd,"trimWorkflowAgentDigestExcerpt");function id(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(id,"isHighSignalWorkflowAgentDigestLine");function ad(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(ad,"isLowInformationWorkflowAgentDigestLine");function ld(e){return e.replace(/\s+/g," ").trim()}a(ld,"compactWorkflowAgentDigestLine");function cd(e,o={}){let n=e.replace(/^#{1,6}\s+/,"").replace(/^[-*]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`{3,}.*$/,"").replace(/^[`"'“”‘’)\]},,、。;;::.\s]+/,"").trim(),t=ld(n);if(!(t.length<12)&&!/^[-*_`#\s]+$/.test(t)&&!ad(t))return o.truncateLines===!1?t:sd(t)}a(cd,"normalizeWorkflowAgentDigestLine");function dd(e,o={}){let n=[],t=[];for(let r of e.split(/\r?\n+/)){let i=cd(r,o);if(!i)continue;let l=id(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(dd,"extractWorkflowAgentDigestExcerpts");function ud(e,o,n,t,r="excerpt"){let i=r==="digest",c=dd(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(`
150
150
  `):[u,...c,d].join(`
151
- `)}a(md,"formatWorkflowAgentLongDigest");function cn(e){return(o,n="en")=>_t(o,n,e)}a(cn,"createWorkflowAgentDigestLimiter");import _ from"chalk";function Pt(){return[`${_.bold("/workflow")} - dynamic multi-agent workflow harness`,"",`${_.bold("Subcommands:")}`,` ${_.cyan("/workflow list")} List built-in, pattern, and saved workflows. Alias: /workflow`,` ${_.cyan("/workflow create <request>")} Build & run a workflow for a request. The Worker investigates first, then authors it (scout-then-author). Requires AMA \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(`
152
- `)}a(Pt,"renderWorkflowHelp");function dn(){console.log(`
153
- ${Pt()}
154
- `)}a(dn,"printWorkflowHelp");var wd=new Set(["completed","failed","stopped","denied","cancelled"]);function Lt(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${E.cyan(o.name)} \u2014 ${o.description}`).join(`
155
- `)}a(Lt,"formatWorkflowList");var hd=6,yd=900;function kd(e){let o=e.replace(/\r\n/g,`
151
+ `)}a(ud,"formatWorkflowAgentLongDigest");function dn(e){return(o,n="en")=>Et(o,n,e)}a(dn,"createWorkflowAgentDigestLimiter");import _ from"chalk";function Ct(){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 \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(`
152
+ `)}a(Ct,"renderWorkflowHelp");function un(){console.log(`
153
+ ${Ct()}
154
+ `)}a(un,"printWorkflowHelp");var pd=new Set(["completed","failed","stopped","denied","cancelled"]);function It(e){return e.length===0?" (no built-in workflows)":e.map(o=>` ${E.cyan(o.name)} \u2014 ${o.description}`).join(`
155
+ `)}a(It,"formatWorkflowList");var gd=6,wd=900;function hd(e){let o=e.replace(/\r\n/g,`
156
156
  `).replace(/\r/g,`
157
157
  `).split(`
158
- `),n=[],t=0,r=!1;for(let l of o){if(n.length>=hd)break;let c=` ${l}`,d=yd-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(kd,"renderApprovalScriptPreview");function le(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:",...kd(o.rawScript)]:[]]:[]].join(`
159
- `)}a(le,"renderApprovalPrompt");function So(e){if(!ae(e))return[];let o=[];for(let n of pd(e)){let t=oe(e,n,"run.json");if(ae(t))try{let r=JSON.parse(fn(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(So,"readWorkflowRuns");function vd(e){let o=oe(e,"events.jsonl");if(!ae(o))return[];let n=fn(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(vd,"readWorkflowEvents");function Sd(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(Sd,"readStringArray");function un(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(un,"readNonEmptyString");function qi(e,o){let n=o?un(o.scriptSnapshotPath):oe(e,"script.js"),t=o?un(o.manifestSnapshotPath):oe(e,"manifest.json");return!n||!t?!1:ae(n)&&ae(t)}a(qi,"hasGeneratedWorkflowSnapshot");function zi(e,o){if(o)return qi(e,o);let n=oe(e,"run.json");if(!ae(n))return!1;try{let t=JSON.parse(fn(n,"utf8"));return typeof t=="object"&&t!==null?qi(e,t):!1}catch{return!1}}a(zi,"hasRerunnableGeneratedWorkflowRun");function $d(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($d,"readWorkflowFailure");function $o(e,o){let n=oe(e,o),t=oe(n,"run.json"),r=vd(n),i=$d(r);if(!(!ae(t)&&r.length===0)){if(!ae(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(fn(t,"utf8")),c=un(l.scriptSnapshotPath),d=un(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:zi(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:Sd(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a($o,"readWorkflowRunDetail");function vo(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(vo,"statusIcon");function Mt(e){return wd.has(e)}a(Mt,"isTerminalWorkflowStatus");function Xi(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(Xi,"formatProcessListMeta");function Wt(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=Xi(o.processSnapshots?.get(l.runId));return` ${vo(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(`
158
+ `),n=[],t=0,r=!1;for(let l of o){if(n.length>=gd)break;let c=` ${l}`,d=wd-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(hd,"renderApprovalScriptPreview");function le(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:",...hd(o.rawScript)]:[]]:[]].join(`
159
+ `)}a(le,"renderApprovalPrompt");function So(e){if(!ae(e))return[];let o=[];for(let n of fd(e)){let t=oe(e,n,"run.json");if(ae(t))try{let r=JSON.parse(mn(t,"utf8"));o.push({runId:n,workflow:typeof r.workflow=="string"?r.workflow:"?",status:typeof r.status=="string"?r.status:"?",totalSpawned:typeof r.totalSpawned=="number"?r.totalSpawned:0,endedAt:typeof r.endedAt=="number"?r.endedAt:0})}catch{}}return o.sort((n,t)=>t.endedAt-n.endedAt)}a(So,"readWorkflowRuns");function yd(e){let o=oe(e,"events.jsonl");if(!ae(o))return[];let n=mn(o,"utf8").split(/\r?\n/).filter(r=>r.trim().length>0),t=[];for(let r of n)try{let i=JSON.parse(r);if(typeof i!="object"||i===null)continue;let l=i;if(typeof l.seq!="number"||typeof l.type!="string")continue;let c=l.data;t.push({seq:l.seq,type:l.type,...typeof c=="object"&&c!==null?{data:c}:{}})}catch{}return t}a(yd,"readWorkflowEvents");function kd(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}a(kd,"readStringArray");function fn(e){return typeof e=="string"&&e.trim().length>0?e:void 0}a(fn,"readNonEmptyString");function Fi(e,o){let n=o?fn(o.scriptSnapshotPath):oe(e,"script.js"),t=o?fn(o.manifestSnapshotPath):oe(e,"manifest.json");return!n||!t?!1:ae(n)&&ae(t)}a(Fi,"hasGeneratedWorkflowSnapshot");function Bi(e,o){if(o)return Fi(e,o);let n=oe(e,"run.json");if(!ae(n))return!1;try{let t=JSON.parse(mn(n,"utf8"));return typeof t=="object"&&t!==null?Fi(e,t):!1}catch{return!1}}a(Bi,"hasRerunnableGeneratedWorkflowRun");function vd(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(vd,"readWorkflowFailure");function $o(e,o){let n=oe(e,o),t=oe(n,"run.json"),r=yd(n),i=vd(r);if(!(!ae(t)&&r.length===0)){if(!ae(t))return{runId:o,workflow:"?",status:i?"failed":"running",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}};try{let l=JSON.parse(mn(t,"utf8")),c=fn(l.scriptSnapshotPath),d=fn(l.manifestSnapshotPath);return{runId:o,workflow:typeof l.workflow=="string"?l.workflow:"?",status:typeof l.status=="string"?l.status:"?",totalSpawned:typeof l.totalSpawned=="number"?l.totalSpawned:0,eventCount:r.length,runDir:n,canRerun:Bi(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:kd(l.artifacts),events:r}}catch{return{runId:o,workflow:"?",status:i?"failed":"unknown",totalSpawned:r.filter(l=>l.type==="agent_spawned").length,eventCount:r.length,runDir:n,canRerun:!1,artifacts:[],events:r,...i?{error:i}:{}}}}}a($o,"readWorkflowRunDetail");function vo(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(vo,"statusIcon");function Tt(e){return pd.has(e)}a(Tt,"isTerminalWorkflowStatus");function Gi(e){if(!e)return;let o=[];return e.displayName&&e.displayName!==e.workflowName&&o.push(`display: ${e.displayName}`),e.source&&o.push(`source: ${e.source}`),e.savedWorkflowName&&o.push(`saved: ${e.savedWorkflowName}`),e.revisionOf&&o.push(`revision of: ${e.revisionOf}`),o.length>0?o.join(", "):void 0}a(Gi,"formatProcessListMeta");function _t(e,o={}){if(e.length===0)return" (no workflow runs yet)";let n=o.limit===void 0?void 0:Math.max(1,Math.floor(o.limit)),t=n===void 0?e:e.slice(0,n);if(o.processSnapshots){let i=t.map(l=>{let c=Gi(o.processSnapshots?.get(l.runId));return` ${vo(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(`
160
160
  `)}let r=t.map(i=>` ${vo(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(`
161
- `)}a(Wt,"formatRunsList");function Ot(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=Xi(o.processSnapshots?.get(n.runId));return` ${vo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?E.dim(` [${t}]`):""}`}).join(`
161
+ `)}a(_t,"formatRunsList");function Pt(e,o={}){return e.length===0?" (no active workflow runs)":o.processSnapshots?e.map(n=>{let t=Gi(o.processSnapshots?.get(n.runId));return` ${vo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)${t?E.dim(` [${t}]`):""}`}).join(`
162
162
  `):e.map(n=>` ${vo(n.status)} ${E.cyan(n.workflow)} ${E.dim(n.runId)} - ${n.status} (${n.totalSpawned} agents, ${n.eventCount} events)`).join(`
163
- `)}a(Ot,"formatManagedRunsList");function Xe(e){return e.status==="running"||e.status==="paused"}a(Xe,"isActiveManagedWorkflowRun");function Nt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${vo(o.status)} ${E.cyan(o.workflow)} ${E.dim(o.runId)} - ${o.status}`).join(`
164
- `)}a(Nt,"formatWorkflowPruneCandidates");function Dt(e,o){return e.filter(Xe)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Dt,"selectDefaultWorkflowRunId");function Ut(e){return e.find(Xe)?.runId}a(Ut,"selectDefaultActiveWorkflowRunId");function Ki(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(Ki,"formatTime");function bd(e,o=10){let n=e.map(wn).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(bd,"formatRecentWorkflowEvents");function jt(e,o){return o?.canRerun??(e?.runDir?zi(e.runDir):!1)}a(jt,"canRerunWorkflowRun");function xd(e){return e?e.artifacts.map(o=>({name:o,path:oe(e.runDir,"artifacts",`${os(o)}.json`)})):[]}a(xd,"workflowArtifactRefs");function Ft(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Ft,"formatWorkflowNextActions");function Vi(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(Vi,"formatWorkflowFailureAction");function Ht(e,o,n={}){let t=n.processSnapshot;if(!e&&!o&&!t)return" (unknown workflow run)";let r=t?.workflowName??e?.workflow??o?.workflow??"?",i=t?.runId??e?.runId??o?.runId??"?",l=t?.status??e?.status??o?.status??"?",c=t?.progress.spawnedAgents??e?.totalSpawned??o?.totalSpawned??0,d=e?.eventCount??o?.eventCount??0,u=e?.runDir??o?.runDir??"",f=Ki(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,k=Ki(e?.endedAt??o?.endedAt??m),v=t?.error??e?.error??o?.error,y=o?.artifacts??t?.artifacts?.map(ue=>ue.name)??[],$=xd(o),g=e?.resultText,x=n.full===!0||g===void 0?ze($,Ie(r),{full:n.full===!0}):void 0,T=n.full===!0?x??g??t?.resultSummary:g!==void 0?he(g):t?.resultSummary!==void 0?he(t.resultSummary):x,L=T?Ke(T,i,Ie(T)):void 0,Y=n.full===!0||!T||!Ct(T)?"result:":"result preview:",J=o?bd(o.events):[],no=jt(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}`]:[],...k?[` ended: ${k}`]:[],...u?[` run dir: ${u}`]:[],...y.length>0?[` artifacts: ${y.join(", ")}`]:[],...v?[` error: ${v}`]:[],...L?["",` ${Y}`,...L.split(`
165
- `).map(ue=>` ${ue}`)]:[],...J.length>0?[""," recent events:",...J.map(ue=>` ${ue.trimEnd()}`)]:[],"",` next: ${Ft(i,no)}`].join(`
166
- `)}a(Ht,"formatWorkflowRunSnapshot");function Bt(e){return{project:oe(e,".kodax","workflows"),personal:B("workflows")}}a(Bt,"savedWorkflowDirs");async function Yi(e,o){return new Set((await je(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(Yi,"nextRevisionWorkflowName");function Ji(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:ls}}a(Ji,"buildWorkflowRevisionProvenance");function Gt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${E.cyan(o.name)} ${E.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
167
- `)}a(Gt,"formatSavedList");function Zi(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Zi,"isSafeWorkflowRunId");function Te(e){if(e.confirm)return e.confirm;let o=e.readline;if(o)return n=>new Promise(t=>{o.question(`${n} (y/N) `,r=>t(/^y(es)?$/i.test(r.trim())))})}a(Te,"resolveConfirm");function Ad(e){console.log(E.red(`
163
+ `)}a(Pt,"formatManagedRunsList");function Ke(e){return e.status==="running"||e.status==="paused"}a(Ke,"isActiveManagedWorkflowRun");function Lt(e){return e.length===0?" (no workflow runs match the cleanup rule)":e.map(o=>` ${vo(o.status)} ${E.cyan(o.workflow)} ${E.dim(o.runId)} - ${o.status}`).join(`
164
+ `)}a(Lt,"formatWorkflowPruneCandidates");function Mt(e,o){return e.filter(Ke)[0]?.runId??e[0]?.runId??o[0]?.runId}a(Mt,"selectDefaultWorkflowRunId");function Wt(e){return e.find(Ke)?.runId}a(Wt,"selectDefaultActiveWorkflowRunId");function Hi(e){if(e!==void 0)return typeof e=="number"?new Date(e).toLocaleString():e}a(Hi,"formatTime");function Sd(e,o=10){let n=e.map(hn).filter(t=>t!==void 0);return n.slice(Math.max(0,n.length-o))}a(Sd,"formatRecentWorkflowEvents");function Ot(e,o){return o?.canRerun??(e?.runDir?Bi(e.runDir):!1)}a(Ot,"canRerunWorkflowRun");function $d(e){return e?e.artifacts.map(o=>({name:o,path:oe(e.runDir,"artifacts",`${Jr(o)}.json`)})):[]}a($d,"workflowArtifactRefs");function Nt(e,o){return o?`/workflow show ${e} | /workflow rerun ${e}`:`/workflow show ${e}`}a(Nt,"formatWorkflowNextActions");function qi(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(qi,"formatWorkflowFailureAction");function Dt(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=Hi(e?.startedAt??o?.startedAt??t?.startedAt),m=t&&t.status!=="running"&&t.status!=="paused"?t.updatedAt:void 0,k=Hi(e?.endedAt??o?.endedAt??m),v=t?.error??e?.error??o?.error,y=o?.artifacts??t?.artifacts?.map(ue=>ue.name)??[],$=$d(o),g=e?.resultText,x=n.full===!0||g===void 0?ze($,Ce(r),{full:n.full===!0}):void 0,T=n.full===!0?x??g??t?.resultSummary:g!==void 0?he(g):t?.resultSummary!==void 0?he(t.resultSummary):x,L=T?qe(T,i,Ce(T)):void 0,Y=n.full===!0||!T||!xt(T)?"result:":"result preview:",J=o?Sd(o.events):[],no=Ot(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}`]:[],...k?[` ended: ${k}`]:[],...u?[` run dir: ${u}`]:[],...y.length>0?[` artifacts: ${y.join(", ")}`]:[],...v?[` error: ${v}`]:[],...L?["",` ${Y}`,...L.split(`
165
+ `).map(ue=>` ${ue}`)]:[],...J.length>0?[""," recent events:",...J.map(ue=>` ${ue.trimEnd()}`)]:[],"",` next: ${Nt(i,no)}`].join(`
166
+ `)}a(Dt,"formatWorkflowRunSnapshot");function Ut(e){return{project:oe(e,".kodax","workflows"),personal:B("workflows")}}a(Ut,"savedWorkflowDirs");async function zi(e,o){return new Set((await Ue(e)).map(t=>t.name)).has(o)?`${o}-revision-${Date.now().toString(36)}`:o}a(zi,"nextRevisionWorkflowName");function Ki(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:rs}}a(Ki,"buildWorkflowRevisionProvenance");function jt(e){return e.length===0?" (no saved workflows)":e.map(o=>` ${E.cyan(o.name)} ${E.dim(`(${o.source}, ${o.execution}: ${o.path})`)}`).join(`
167
+ `)}a(jt,"formatSavedList");function Xi(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Xi,"isSafeWorkflowRunId");function Ie(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(Ie,"resolveConfirm");function bd(e){console.log(E.red(`
168
168
  [workflow] invalid run id: ${e||"<empty>"}
169
- `))}a(Ad,"printInvalidRunId");function ye(e){return Zi(e)?!0:(Ad(e),!1)}a(ye,"ensureSafeRunId");function mn(){let e=Rd(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(mn,"currentWorkflowPreflightEnv");function Rd(e){let o=e;for(;;){if(ae(oe(o,".git")))return!0;let n=gd(o);if(n===o)return!1;o=n}}a(Rd,"hasGitMarker");function pn(e){console.log(E.red(`
170
- [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(E.red(` - ${o.requirement}: ${o.message}`));console.log()}a(pn,"printPreflightFailure");function gn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(E.yellow(`
171
- [workflow] capsule preflight warnings:`));for(let n of o)console.log(E.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(gn,"printPreflightWarnings");async function Qi(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
169
+ `))}a(bd,"printInvalidRunId");function ye(e){return Xi(e)?!0:(bd(e),!1)}a(ye,"ensureSafeRunId");function pn(){let e=xd(process.cwd());return{isGitRepo:e,worktreeCapable:e}}a(pn,"currentWorkflowPreflightEnv");function xd(e){let o=e;for(;;){if(ae(oe(o,".git")))return!0;let n=md(o);if(n===o)return!1;o=n}}a(xd,"hasGitMarker");function gn(e){console.log(E.red(`
170
+ [workflow] capsule preflight failed:`));for(let o of e.issues)console.log(E.red(` - ${o.requirement}: ${o.message}`));console.log()}a(gn,"printPreflightFailure");function wn(e){let o=e.issues.filter(n=>n.severity==="warning");if(o.length!==0){console.log(E.yellow(`
171
+ [workflow] capsule preflight warnings:`));for(let n of o)console.log(E.yellow(` - ${n.requirement}: ${n.message}`));console.log()}}a(wn,"printPreflightWarnings");async function Vi(e,o){if(e.execution==="trusted-local"&&!await o(`Run local workflow file? This EXECUTES local code:
172
172
  ${e.path}`)){console.log(E.dim(`Workflow cancelled.
173
- `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await so(e.path),c=io(l,mn());if(!c.ok){pn(c);return}gn(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 Fo(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(`
173
+ `));return}try{let n={source:`saved:${e.source}`,sandbox:e.execution,mayUseWorktree:!1},t,r;if(e.execution==="capability-generated"){let l=await so(e.path),c=io(l,pn());if(!c.ok){gn(c);return}wn(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 Ho(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(`
174
174
  [workflow] failed to load ${e.path}: ${t}
175
- `));return}}a(Qi,"prepareSavedWorkflow");function qt(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(qt,"workflowEventStatus");function wn(e){let o=e.data?.name??e.data?.taskId??"",n=qt(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(wn,"formatWorkflowEvent");function ea(e){let o=wn(e);o&&console.log(E.dim(o))}a(ea,"renderWorkflowEvent");import yn from"chalk";import Ed from"string-width";var Cd=9;function Id(e,o=Cd){let n=Ed(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Id,"padWorkflowLiveSymbol");function ta(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(ta,"workflowLiveSnapshotFromProcess");function Pg(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Id(o.symbol)}${o.text}`)}a(Pg,"formatWorkflowLiveViewModelForTranscript");var Td=6,oa={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")}},_d={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function Pd(e){return e.length>14?`${e.slice(0,14)}...`:e}a(Pd,"shortRunId");function hn(e){return e==="zh"?oa.zh:oa.en}a(hn,"workflowLiveLabels");function Ld(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(Ld,"formatElapsedMs");function na(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(na,"formatTokenCount");function Md(e){if(e.tokenBudgetSpent===void 0)return;let o=hn(e.locale),n=na(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=na(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(Md,"formatWorkflowTokenUsage");function Wd(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(Ld(t,e.locale));let r=Md(e);return r!==void 0&&n.push(r),n}a(Wd,"formatWorkflowHeaderMetrics");function Od(e){let o=hn(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=ra(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(Od,"formatWorkflowProgress");function Nd(e){let o=hn(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=ra(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(Nd,"formatWorkflowCounter");function ra(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(ra,"workflowProgressDenominator");function Dd(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(Dd,"formatWorkflowPhase");function Lg(e,o=Date.now()){if(!e||e.status!=="running")return _d;let n=[],t=hn(e.locale),r=Wd(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} (${Pd(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${i}`,isActive:!0});let l=Dd(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=Od(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,Td);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:Nd(e),rows:d}}a(Lg,"buildWorkflowLiveViewModel");function Ud(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(Ud,"isWorkflowHarnessFailure");function Kt(e){let o=Vi(e.runId,e.canRerun),n=e.partialResultText?Ke(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return Ud(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(`
175
+ `));return}}a(Vi,"prepareSavedWorkflow");function Ft(e){let o=e.data?.status;return typeof o=="string"?o:void 0}a(Ft,"workflowEventStatus");function hn(e){let o=e.data?.name??e.data?.taskId??"",n=Ft(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(hn,"formatWorkflowEvent");function Yi(e){let o=hn(e);o&&console.log(E.dim(o))}a(Yi,"renderWorkflowEvent");import kn from"chalk";import Ad from"string-width";var Rd=9;function Ed(e,o=Rd){let n=Ad(e);return n>=o?e:`${e}${" ".repeat(o-n)}`}a(Ed,"padWorkflowLiveSymbol");function Qi(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(Qi,"workflowLiveSnapshotFromProcess");function _g(e){return!e.shouldRender||e.rows.length===0?[]:e.rows.map(o=>`${Ed(o.symbol)}${o.text}`)}a(_g,"formatWorkflowLiveViewModelForTranscript");var Cd=6,Ji={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")}},Id={shouldRender:!1,workflow:"",runId:"",activeCount:0,totalSpawned:0,completedAgents:0,failedAgents:0,stoppedAgents:0,rows:[]};function Td(e){return e.length>14?`${e.slice(0,14)}...`:e}a(Td,"shortRunId");function yn(e){return e==="zh"?Ji.zh:Ji.en}a(yn,"workflowLiveLabels");function _d(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(_d,"formatElapsedMs");function Zi(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(Zi,"formatTokenCount");function Pd(e){if(e.tokenBudgetSpent===void 0)return;let o=yn(e.locale),n=Zi(e.tokenBudgetSpent);if(e.tokenBudgetTotal!==void 0&&Number.isFinite(e.tokenBudgetTotal)){let t=Zi(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(Pd,"formatWorkflowTokenUsage");function Ld(e,o){let n=[],t=e.startedAt===void 0?e.elapsedMs:o-e.startedAt;t!==void 0&&n.push(_d(t,e.locale));let r=Pd(e);return r!==void 0&&n.push(r),n}a(Ld,"formatWorkflowHeaderMetrics");function Md(e){let o=yn(e.locale),n=e.completedAgents+e.failedAgents+e.stoppedAgents;if(e.totalSpawned===0&&n===0)return;let t=ea(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(Md,"formatWorkflowProgress");function Wd(e){let o=yn(e.locale);if(e.totalSpawned===0)return o.waiting;let n=e.activeAgents.length,t=ea(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(Wd,"formatWorkflowCounter");function ea(e,o){let n=o??e.completedAgents+e.failedAgents+e.stoppedAgents;return Math.max(e.plannedAgents??0,e.totalSpawned,n)}a(ea,"workflowProgressDenominator");function Od(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(Od,"formatWorkflowPhase");function Pg(e,o=Date.now()){if(!e||e.status!=="running")return Id;let n=[],t=yn(e.locale),r=Ld(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} (${Td(e.runId)}) - ${t.activeAgents(e.activeAgents.length)}${i}`,isActive:!0});let l=Od(e);l&&n.push({kind:"phase",id:"phase",symbol:t.phase,symbolColor:"cyan",text:l,isActive:!0});let c=Md(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,Cd);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:Wd(e),rows:d}}a(Pg,"buildWorkflowLiveViewModel");function Nd(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(Nd,"isWorkflowHarnessFailure");function Ht(e){let o=qi(e.runId,e.canRerun),n=e.partialResultText?qe(e.partialResultText,e.runId,e.locale??"en"):void 0,t=n?["","Partial results before failure:",n]:[];return Nd(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(`
176
176
  `):[`Workflow failed (${e.runId}): ${e.error.message}`,...t,o].join(`
177
- `)}a(Kt,"formatWorkflowFailedMessage");function jd(e,o,n){return ze(e.artifacts,o,n)??ko(e.events,n)}a(jd,"formatWorkflowFailurePartialResult");function kn(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(kn,"readWorkflowEventUsageTokens");function U(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(yn.red(`
177
+ `)}a(Ht,"formatWorkflowFailedMessage");function Dd(e,o,n){return ze(e.artifacts,o,n)??ko(e.events,n)}a(Dd,"formatWorkflowFailurePartialResult");function vn(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(vn,"readWorkflowEventUsageTokens");function U(e,o){if(e.onWorkflowRunMessage){e.onWorkflowRunMessage(o);return}if(o.type==="error"){console.log(kn.red(`
178
178
  ${o.text}
179
- `));return}if(o.type==="success"){console.log(yn.green(`
179
+ `));return}if(o.type==="success"){console.log(kn.green(`
180
180
  ${o.text}
181
- `));return}if(o.type==="event"){console.log(yn.dim(o.text));return}if(o.type==="assistant"){console.log(`
181
+ `));return}if(o.type==="event"){console.log(kn.dim(o.text));return}if(o.type==="assistant"){console.log(`
182
182
  ${o.text}
183
- `);return}console.log(yn.dim(`
183
+ `);return}console.log(kn.dim(`
184
184
  ${o.text}
185
- `))}a(U,"emitWorkflowRunMessage");function Ve(e,o,n={}){let t=n.presentation==="agentic"?cn(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=wn(i);if(e.onWorkflowRunMessage){if(l&&U(e,{type:"event",text:l}),t){let c=t(i,n.locale??"en");c&&U(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&&ea(i)}}a(Ve,"workflowEventSink");function Ye(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(Ye,"subscribeWorkflowLiveProcess");function _e(e,o,n,t="en"){let r=Date.now(),i=new Map,l,c=0,d=0,u=0,f=0,m=0,k=!1,v=n.phases??[],y=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,$=a((g,x)=>{let T=l===void 0?-1:v.indexOf(l),L=T>=0?T+1:void 0,Y=v.length>0?v.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:g,...l!==void 0?{phase:l}:{},...L!==void 0?{phaseIndex:L}:{},...Y!==void 0?{phaseTotal:Y}:{},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,...x!==void 0?{message:x}:{},locale:t})},"emit");return{running:a(g=>{k||$("running",g)},"running"),onProcessEvent:a(g=>{if(k&&g.type!=="workflow_finished")return;let x=g.snapshot.status;(g.type==="workflow_finished"||x==="completed"||x==="failed"||x==="cancelled")&&(k=!0);let T=g.type==="workflow_updated"?g.message:void 0;e.onWorkflowRunUpdate?.(ta(g.snapshot,T===void 0?{locale:t}:{locale:t,message:T}))},"onProcessEvent"),onEvent:a(g=>{if(!k)switch(g.type){case"phase_started":{let x=g.data?.name;l=typeof x=="string"?x:l,$("running");break}case"agent_spawned":{let x=typeof g.data?.taskId=="string"?g.data.taskId:`task-${c+1}`,T=typeof g.data?.name=="string"?g.data.name:x;i.set(x,T),c+=1,$("running");break}case"agent_completed":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=kn(g.data),qt(g)==="failed"?u+=1:d+=1,$("running");break}case"agent_unverified":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=kn(g.data),d+=1,$("running");break}case"agent_failed":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=kn(g.data),u+=1,$("running");break}case"agent_stopped":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=kn(g.data),f+=1,$("running");break}case"synthesis_completed":{$("running","synthesis complete");break}default:break}},"onEvent"),complete:a((g,x)=>{k||(k=!0,$(g,x))},"complete")}}a(_e,"createWorkflowLiveUpdateEmitter");function Pe(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=jd(i.state,l,c),u=Kt({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),U(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?Kt({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&U(o,{type:"assistant",text:u,final:!0});return}if(i.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=he(i.result,c)??ze(i.state.artifacts,l,c),u=d===void 0?ko(i.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){U(o,{type:"assistant",text:It({runId:n,totalSpawned:i.state.totalSpawned,...f!==void 0?{resultText:f}:{},...d===void 0&&u!==void 0?{isFallbackPreview:!0}:{},locale:l}),final:!0});return}U(o,{type:"success",text:[`Workflow completed (${i.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
185
+ `))}a(U,"emitWorkflowRunMessage");function Xe(e,o,n={}){let t=n.presentation==="agentic"?dn(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=hn(i);if(e.onWorkflowRunMessage){if(l&&U(e,{type:"event",text:l}),t){let c=t(i,n.locale??"en");c&&U(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&&Yi(i)}}a(Xe,"workflowEventSink");function Ve(e,o,n){return e.subscribeWorkflowProcess(t=>{t.snapshot.runId===n&&o.onProcessEvent(t)})}a(Ve,"subscribeWorkflowLiveProcess");function Te(e,o,n,t="en"){let r=Date.now(),i=new Map,l,c=0,d=0,u=0,f=0,m=0,k=!1,v=n.phases??[],y=n.tokenBudget!==void 0&&Number.isFinite(n.tokenBudget)?n.tokenBudget:void 0,$=a((g,x)=>{let T=l===void 0?-1:v.indexOf(l),L=T>=0?T+1:void 0,Y=v.length>0?v.length:void 0;e.onWorkflowRunUpdate?.({runId:o,workflow:n.name,status:g,...l!==void 0?{phase:l}:{},...L!==void 0?{phaseIndex:L}:{},...Y!==void 0?{phaseTotal:Y}:{},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,...x!==void 0?{message:x}:{},locale:t})},"emit");return{running:a(g=>{k||$("running",g)},"running"),onProcessEvent:a(g=>{if(k&&g.type!=="workflow_finished")return;let x=g.snapshot.status;(g.type==="workflow_finished"||x==="completed"||x==="failed"||x==="cancelled")&&(k=!0);let T=g.type==="workflow_updated"?g.message:void 0;e.onWorkflowRunUpdate?.(Qi(g.snapshot,T===void 0?{locale:t}:{locale:t,message:T}))},"onProcessEvent"),onEvent:a(g=>{if(!k)switch(g.type){case"phase_started":{let x=g.data?.name;l=typeof x=="string"?x:l,$("running");break}case"agent_spawned":{let x=typeof g.data?.taskId=="string"?g.data.taskId:`task-${c+1}`,T=typeof g.data?.name=="string"?g.data.name:x;i.set(x,T),c+=1,$("running");break}case"agent_completed":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=vn(g.data),Ft(g)==="failed"?u+=1:d+=1,$("running");break}case"agent_unverified":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=vn(g.data),d+=1,$("running");break}case"agent_failed":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=vn(g.data),u+=1,$("running");break}case"agent_stopped":{let x=typeof g.data?.taskId=="string"?g.data.taskId:void 0;x&&i.delete(x),m+=vn(g.data),f+=1,$("running");break}case"synthesis_completed":{$("running","synthesis complete");break}default:break}},"onEvent"),complete:a((g,x)=>{k||(k=!0,$(g,x))},"complete")}}a(Te,"createWorkflowLiveUpdateEmitter");function _e(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=Dd(i.state,l,c),u=Ht({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),U(o,{type:"error",text:r.presentation==="agentic"&&d!==void 0?Ht({runId:n,error:i.error,canRerun:r.canRerun===!0,totalSpawned:i.state.totalSpawned,locale:l}):u}),r.presentation==="agentic"&&d!==void 0&&U(o,{type:"assistant",text:u,final:!0});return}if(i.kind==="completed"){let l=r.locale??"en",c={full:r.presentation==="agentic"},d=he(i.result,c)??ze(i.state.artifacts,l,c),u=d===void 0?ko(i.state.events,c):void 0,f=d??u;if(t?.complete("completed",f?"completed with result":"completed"),r.presentation==="agentic"){U(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}U(o,{type:"success",text:[`Workflow completed (${i.state.totalSpawned} agents, run ${n}).`,`Use /workflow show ${n} for the event timeline.`].join(`
186
186
  `)}),f&&U(o,{type:"info",text:`Workflow result:
187
- ${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),U(o,{type:"error",text:Kt({runId:n,error:i instanceof Error?i:new Error(l),canRerun:r.canRerun===!0})})})}a(Pe,"observeManagedWorkflowDone");function Le(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(Le,"unsubscribeWorkflowLiveProcessOnDone");function ke(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){U(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(vn.dim(`
187
+ ${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),U(o,{type:"error",text:Ht({runId:n,error:i instanceof Error?i:new Error(l),canRerun:r.canRerun===!0})})})}a(_e,"observeManagedWorkflowDone");function Pe(e,o){e.done.finally(()=>{try{o()}catch{}}).catch(()=>{})}a(Pe,"unsubscribeWorkflowLiveProcessOnDone");function ke(e,o){if(e.onBuilderEvent?.(o),o.stage==="failed"){U(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(Sn.dim(`
188
188
  [workflow] ${o.message}
189
- `))}a(ke,"emitWorkflowBuilderEvent");function bo(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(bo,"buildWorkflowProcessMetadata");async function Hd(e){let o=e.approval==="required"?Te(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(vn.red(`
189
+ `))}a(ke,"emitWorkflowBuilderEvent");function bo(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(bo,"buildWorkflowProcessMetadata");async function jd(e){let o=e.approval==="required"?Ie(e.callbacks):void 0;if(e.approval==="required"&&!o)return console.log(Sn.red(`
190
190
  [workflow] refusing to start a workflow without an interactive approval channel.
191
- `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(vn.red(`
191
+ `)),"failed";let n=e.callbacks.createKodaXOptions;if(!n)return console.log(Sn.red(`
192
192
  [workflow] cannot start - REPL options unavailable in this context.
193
- `)),"failed";let t=Ie(e.request),r,i;try{if(ke(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let g=Uo(e.builtin.name);if(!g)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);i={module:g,args:e.builtin.args,approvalDescription:g.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{ke(e,{stage:"generating",message:"Workflow - generating harness"});let x=await(e.generateWorkflow??Do)({request:e.request,options:r});if(x.kind==="declined")return ke(e,{stage:"declined",message:x.reason}),console.log(vn.dim(`
193
+ `)),"failed";let t=Ce(e.request),r,i;try{if(ke(e,{stage:"started",message:"Workflow builder started"}),r=n(),e.builtin){let g=jo(e.builtin.name);if(!g)throw new Error(`unknown built-in workflow: ${e.builtin.name}`);i={module:g,args:e.builtin.args,approvalDescription:g.meta.description,mayUseWorktree:!1,sandbox:"built-in"}}else{ke(e,{stage:"generating",message:"Workflow - generating harness"});let x=await(e.generateWorkflow??Uo)({request:e.request,options:r});if(x.kind==="declined")return ke(e,{stage:"declined",message:x.reason}),console.log(Sn.dim(`
194
194
  Workflow not created: ${x.reason}
195
- `)),"declined";i={module:x.module,args:{request:e.request},approvalDescription:x.approvalSummary,mayUseWorktree:x.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:x.scriptSnapshot,rawScript:x.scriptSnapshot.source}}ke(e,{stage:"validating",message:"Workflow - validating harness"})}catch(g){let x=g instanceof Error?g.message:String(g);return ke(e,{stage:"failed",message:x}),"failed"}ke(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=$e(i.module);l!=="agentic"&&U(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${i.approvalDescription}`});let d=Ee(process.cwd()).key,u=e.runBaseDir??B("workflow-runs",d),f=e.runManager??Fe(),m=`run-${Date.now().toString(36)}`,k=Fd(u,m);if(o){if(!await o(le(c,{source:e.sourceLabel??"generated",sandbox:i.sandbox,mayUseWorktree:i.mayUseWorktree,...i.rawScript!==void 0?{rawScript:i.rawScript}:{}})))return ke(e,{stage:"cancelled",message:"Workflow cancelled"}),U(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(U(e.callbacks,{type:"info",text:le(c,{source:e.sourceLabel??"generated",sandbox:i.sandbox,mayUseWorktree:i.mayUseWorktree})}),U(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${i.sandbox}); normal permission gates still apply.`}));l==="agentic"?U(e.callbacks,{type:"assistant",text:Tt({runId:m,summary:c,approvalSummary:i.approvalDescription,locale:t}),final:!1}):U(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let v=_e(e.callbacks,m,i.module.meta,t);v.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`);let y=Ye(f,v,m),$=f.startFromOptions({module:i.module,args:i.args,options:r,runId:m,runDir:k,...i.scriptSnapshot!==void 0?{scriptSnapshot:i.scriptSnapshot}:{},processMetadata:bo({source:e.processSource??"command",displayName:i.module.meta.name,goal:e.request,hostMetadata:{workflowAuthorship:"kodax-generated"}}),onEvent:Ve(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:m})});return Le($,y),ke(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),Pe($,e.callbacks,m,v,{canRerun:!0,presentation:l,locale:t}),"started"}a(Hd,"startGeneratedWorkflowFromRequest");function zt(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(zt,"parseWorkflowInvocation");function xo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(xo,"parseWorkflowArgs");function Xt(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(`
196
- `)}a(Xt,"buildWorkflowRevisionRequest");function sa(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(sa,"parseNonNegativeInteger");function Vt(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=sa(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(Vt,"parseWorkflowRunsOptions");function Bd(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(Bd,"parseOlderThanMs");function Yt(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=sa(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=Bd(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(Yt,"parseWorkflowPruneOptions");var Gd=1440*60*1e3;function qd(e){return new Map(e.map(o=>[o.runId,o]))}a(qd,"processSnapshotsByRunId");function Kd(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/Gd}:{}}}a(Kd,"workflowPruneRetentionOptions");function zd(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(zd,"workflowPruneCandidateSummaries");function aa(e){return bo({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(aa,"buildSavedWorkflowProcessMetadata");var la={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:dn,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await ln(an(o),"workflow");return}let r=zt(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(w.yellow(`
195
+ `)),"declined";i={module:x.module,args:{request:e.request},approvalDescription:x.approvalSummary,mayUseWorktree:x.manifest.mayUseWorktree===!0,sandbox:"capability-generated",scriptSnapshot:x.scriptSnapshot,rawScript:x.scriptSnapshot.source}}ke(e,{stage:"validating",message:"Workflow - validating harness"})}catch(g){let x=g instanceof Error?g.message:String(g);return ke(e,{stage:"failed",message:x}),"failed"}ke(e,{stage:"ready",message:"Workflow - harness ready"});let l=e.presentation??"command",c=Se(i.module);l!=="agentic"&&U(e.callbacks,{type:"info",text:`${e.builtin?"Built-in":"Generated"} workflow: ${i.approvalDescription}`});let d=Re(process.cwd()).key,u=e.runBaseDir??B("workflow-runs",d),f=e.runManager??je(),m=`run-${Date.now().toString(36)}`,k=Ud(u,m);if(o){if(!await o(le(c,{source:e.sourceLabel??"generated",sandbox:i.sandbox,mayUseWorktree:i.mayUseWorktree,...i.rawScript!==void 0?{rawScript:i.rawScript}:{}})))return ke(e,{stage:"cancelled",message:"Workflow cancelled"}),U(e.callbacks,{type:"info",text:"Workflow cancelled."}),"cancelled"}else l!=="agentic"&&(U(e.callbacks,{type:"info",text:le(c,{source:e.sourceLabel??"generated",sandbox:i.sandbox,mayUseWorktree:i.mayUseWorktree})}),U(e.callbacks,{type:"info",text:`Auto-started ${e.builtin?"built-in":"generated"} workflow (${i.sandbox}); normal permission gates still apply.`}));l==="agentic"?U(e.callbacks,{type:"assistant",text:Rt({runId:m,summary:c,approvalSummary:i.approvalDescription,locale:t}),final:!1}):U(e.callbacks,{type:"info",text:`Started workflow ${i.module.meta.name} (${m}). Use /workflow show ${m} for status.`});let v=Te(e.callbacks,m,i.module.meta,t);v.running(`Use /workflow show ${m} for status or /workflow stop ${m} to stop.`);let y=Ve(f,v,m),$=f.startFromOptions({module:i.module,args:i.args,options:r,runId:m,runDir:k,...i.scriptSnapshot!==void 0?{scriptSnapshot:i.scriptSnapshot}:{},processMetadata:bo({source:e.processSource??"command",displayName:i.module.meta.name,goal:e.request,hostMetadata:{workflowAuthorship:"kodax-generated"}}),onEvent:Xe(e.callbacks,void 0,{presentation:e.presentation??"command",locale:t,runId:m})});return Pe($,y),ke(e,{stage:"launched",message:`Workflow ${i.module.meta.name} started`}),_e($,e.callbacks,m,v,{canRerun:!0,presentation:l,locale:t}),"started"}a(jd,"startGeneratedWorkflowFromRequest");function Bt(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(Bt,"parseWorkflowInvocation");function xo(e){let o=e.trim();if(!o)return{};if(o.startsWith("{"))try{return JSON.parse(o)}catch{return{question:o}}return{question:o}}a(xo,"parseWorkflowArgs");function Gt(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(`
196
+ `)}a(Gt,"buildWorkflowRevisionRequest");function oa(e){if(!e)return;let o=Number(e);return Number.isInteger(o)&&o>=0?o:void 0}a(oa,"parseNonNegativeInteger");function qt(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=oa(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(qt,"parseWorkflowRunsOptions");function Fd(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(Fd,"parseOlderThanMs");function zt(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=oa(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=Fd(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(zt,"parseWorkflowPruneOptions");var Hd=1440*60*1e3;function Bd(e){return new Map(e.map(o=>[o.runId,o]))}a(Bd,"processSnapshotsByRunId");function Gd(e){return{dryRun:e.dryRun,...e.keep!==void 0?{keep:e.keep}:{},...e.olderThanMs!==void 0?{olderThanDays:e.olderThanMs/Hd}:{}}}a(Gd,"workflowPruneRetentionOptions");function qd(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(qd,"workflowPruneCandidateSummaries");function ta(e){return bo({source:"capsule",displayName:e.displayName,savedWorkflowName:e.savedWorkflowName,sourceRunId:e.provenance?.fromRunId,sourceWorkflowName:e.provenance?.fromWorkflowName??e.savedWorkflowName,revisionOf:e.provenance?.revisionOf})}a(ta,"buildSavedWorkflowProcessMetadata");var ra={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:un,handler:a(async(e,o,n,t)=>{if((e[0]??"").toLowerCase()==="pending"){await cn(ln(o),"workflow");return}let r=Bt(e);if(t.agentMode==="sa"&&(r.kind==="create"||r.kind==="rerun"||r.kind==="start")){console.log(w.yellow(`
197
197
  [workflow] Workflows run multiple agents, which Solo (SA) mode does not support.
198
198
  Switch with /agent-mode ama, then request it explicitly via /workflow.
199
- `));return}let i=Ee(process.cwd()).key,l=B("workflow-runs",i),c=Fe(),d=Bt(process.cwd()),u=rs({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async h=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:is(h)}}),"createWorkflowFromText");if(r.kind==="help"){dn();return}if(r.kind==="list"){console.log(w.bold(`
200
- Built-in workflows:`)),console.log(Lt(jo())),console.log(w.bold(`
201
- Pattern templates:`));for(let R of ss())console.log(` ${w.cyan(R.name)} ${w.dim(`(${R.pattern})`)} - ${R.description}`);let h=await je(d);h.length>0&&(console.log(w.bold(`
202
- Saved workflows:`)),console.log(Gt(h))),console.log(w.dim(`
199
+ `));return}let i=Re(process.cwd()).key,l=B("workflow-runs",i),c=je(),d=Ut(process.cwd()),u=es({runManager:c,runBaseDir:l,savedWorkflowDirs:d}),f=a(async h=>({invocation:{source:"prompt",displayName:"workflow create",disableModelInvocation:!1,workflowIntent:"explicit",prompt:ns(h)}}),"createWorkflowFromText");if(r.kind==="help"){un();return}if(r.kind==="list"){console.log(w.bold(`
200
+ Built-in workflows:`)),console.log(It(Fo())),console.log(w.bold(`
201
+ Pattern templates:`));for(let R of os())console.log(` ${w.cyan(R.name)} ${w.dim(`(${R.pattern})`)} - ${R.description}`);let h=await Ue(d);h.length>0&&(console.log(w.bold(`
202
+ Saved workflows:`)),console.log(jt(h))),console.log(w.dim(`
203
203
  Run one with: /workflow <name> <question or JSON args>`)),console.log(w.dim(` Show usage with: /workflow help
204
- `));return}if(r.kind==="runs"){let h=Vt(r.rawArgs);if(h.error){console.log(w.yellow(`
204
+ `));return}if(r.kind==="runs"){let h=qt(r.rawArgs);if(h.error){console.log(w.yellow(`
205
205
  Usage: /workflow runs [--all] [--limit N]
206
206
  ${h.error}
207
- `));return}let R=qd(u.listWorkflowProcessSnapshots({activeOnly:!1})),b=c.list().filter(Xe);b.length>0&&(console.log(w.bold(`
208
- Active workflow runs:`)),console.log(Ot(b,{processSnapshots:R}))),console.log(w.bold(`
209
- Workflow runs:`)),console.log(Wt(So(l),{limit:h.all?void 0:h.limit,showLimitHint:!h.all,processSnapshots:R})),console.log();return}if(r.kind==="show"){let h=So(l),R=r.runId||Dt(c.list(),h);if(!R){console.log(w.yellow(`
207
+ `));return}let R=Bd(u.listWorkflowProcessSnapshots({activeOnly:!1})),b=c.list().filter(Ke);b.length>0&&(console.log(w.bold(`
208
+ Active workflow runs:`)),console.log(Pt(b,{processSnapshots:R}))),console.log(w.bold(`
209
+ Workflow runs:`)),console.log(_t(So(l),{limit:h.all?void 0:h.limit,showLimitHint:!h.all,processSnapshots:R})),console.log();return}if(r.kind==="show"){let h=So(l),R=r.runId||Mt(c.list(),h);if(!R){console.log(w.yellow(`
210
210
  No workflow runs yet. Start one with /workflow create <request>.
211
211
  `));return}if(!ye(R))return;let b=c.get(R),P=$o(l,R),I=u.getWorkflowProcessSnapshot(R);console.log(w.bold(`
212
- Workflow run:`)),console.log(Ht(b,P,{full:r.full===!0,...I?{processSnapshot:I}:{}})),console.log();return}if(r.kind==="pause"){if(!ye(r.runId))return;let h=c.pause(r.runId);console.log(h?w.dim(`Paused workflow ${r.runId}.
212
+ Workflow run:`)),console.log(Dt(b,P,{full:r.full===!0,...I?{processSnapshot:I}:{}})),console.log();return}if(r.kind==="pause"){if(!ye(r.runId))return;let h=c.pause(r.runId);console.log(h?w.dim(`Paused workflow ${r.runId}.
213
213
  `):w.yellow(`No running workflow ${r.runId}.
214
214
  `));return}if(r.kind==="resume"){if(!ye(r.runId))return;let h=c.resume(r.runId);console.log(h?w.dim(`Resumed workflow ${r.runId}.
215
215
  `):w.yellow(`No paused workflow ${r.runId}.
216
- `));return}if(r.kind==="stop"){let h=r.runId||Ut(c.list());if(!h){console.log(w.yellow(`
216
+ `));return}if(r.kind==="stop"){let h=r.runId||Wt(c.list());if(!h){console.log(w.yellow(`
217
217
  No active workflow to stop.
218
- `));return}if(!ye(h))return;let R=await u.stopWorkflow(h,"stopped by user"),b=c.get(h),P=$o(l,h),I=u.getWorkflowProcessSnapshot(h),j=b?.status??P?.status??I?.status,X=b?!Xe(b):P?Mt(P.status):I!==void 0&&Wo(I.status),N=Ft(h,jt(b,P));console.log(R?w.dim(`Stopped workflow ${h}.
218
+ `));return}if(!ye(h))return;let R=await u.stopWorkflow(h,"stopped by user"),b=c.get(h),P=$o(l,h),I=u.getWorkflowProcessSnapshot(h),j=b?.status??P?.status??I?.status,X=b?!Ke(b):P?Tt(P.status):I!==void 0&&Oo(I.status),N=Nt(h,Ot(b,P));console.log(R?w.dim(`Stopped workflow ${h}.
219
219
  `):j&&X?w.yellow(`Workflow ${h} is already ${j}. Next: ${N}.
220
220
  `):w.yellow(`No active workflow ${h}.
221
221
  `));return}if(r.kind==="delete"){if(!r.target){console.log(w.yellow(`
@@ -236,30 +236,30 @@ No persisted workflow run ${r.target}. Use --saved to delete the saved workflow.
236
236
  No persisted workflow run or generated saved workflow ${r.target}.
237
237
  `));return}let I=b?.kind==="run"?b.runId:P??r.target;if(!ye(I))return;if(await u.deleteWorkflowRun(I,{force:r.force})){console.log(w.dim(`
238
238
  Deleted workflow run ${I}${r.force?" with --force":""}.
239
- `));return}let X=R??c.getWorkflowProcessSnapshot(I),N=u.getWorkflowProcessSnapshot(I);if(!N&&!ia(ne(l,I,"run.json"))){console.log(w.yellow(`
239
+ `));return}let X=R??c.getWorkflowProcessSnapshot(I),N=u.getWorkflowProcessSnapshot(I);if(!N&&!na(ne(l,I,"run.json"))){console.log(w.yellow(`
240
240
  No persisted workflow run or generated saved workflow ${r.target}.
241
- `));return}if(X&&!Wo(X.status)){console.log(w.yellow(`
241
+ `));return}if(X&&!Oo(X.status)){console.log(w.yellow(`
242
242
  Workflow ${I} is ${X.status}. Stop it before deleting the run record.
243
- `));return}if(N&&!Wo(N.status)){console.log(w.yellow(`
243
+ `));return}if(N&&!Oo(N.status)){console.log(w.yellow(`
244
244
  Workflow ${I} is a non-terminal persisted ${N.status} record. If it is stale, run /workflow delete --force ${I}.
245
245
  `));return}console.log(w.yellow(`
246
246
  Workflow ${I} is not a deletable terminal run.
247
- `));return}if(r.kind==="prune"){let h=Yt(r.rawArgs);if(h.error){console.log(w.yellow(`
247
+ `));return}if(r.kind==="prune"){let h=zt(r.rawArgs);if(h.error){console.log(w.yellow(`
248
248
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
249
249
  ${h.error}
250
250
  `));return}if(!h.dryRun&&h.keep===void 0&&h.olderThanMs===void 0){console.log(w.yellow(`
251
251
  Usage: /workflow prune --dry-run | --keep N | --older-than Nd
252
252
  No cleanup rule was provided.
253
- `));return}let R=So(l),b=await u.pruneWorkflowRuns(Kd(h)),P=zd(R,b.candidates);console.log(w.bold(h.dryRun?`
253
+ `));return}let R=So(l),b=await u.pruneWorkflowRuns(Gd(h)),P=qd(R,b.candidates);console.log(w.bold(h.dryRun?`
254
254
  Workflow prune preview:`:`
255
- Workflow prune:`)),console.log(Nt(P)),b.protectedRuns>0&&console.log(w.dim(`
255
+ Workflow prune:`)),console.log(Lt(P)),b.protectedRuns>0&&console.log(w.dim(`
256
256
  Protected ${b.protectedRuns} active workflow run${b.protectedRuns===1?"":"s"} from pruning.`)),h.dryRun?console.log(w.dim(`
257
257
  Dry run only. Add --keep N or --older-than Nd without --dry-run to delete.
258
258
  `)):console.log(w.dim(`
259
259
  Deleted ${b.deleted} workflow run${b.deleted===1?"":"s"}.
260
260
  `));return}if(r.kind==="save"){if(!r.runId||!r.name){console.log(w.yellow(`
261
261
  Usage: /workflow save <runId> <name>
262
- `));return}if(!ye(r.runId))return;try{let h=await es({runDir:ne(l,r.runId),targetDir:d.project??ne(process.cwd(),".kodax","workflows"),name:r.name});console.log(w.green(`
262
+ `));return}if(!ye(r.runId))return;try{let h=await Yr({runDir:ne(l,r.runId),targetDir:d.project??ne(process.cwd(),".kodax","workflows"),name:r.name});console.log(w.green(`
263
263
  Saved workflow ${h.name} to ${h.path}
264
264
  `))}catch(h){let R=h instanceof Error?h.message:String(h);console.log(w.red(`
265
265
  [workflow] save failed: ${R}
@@ -273,13 +273,13 @@ Usage: /workflow rename <runId|alias|savedName> <newName>
273
273
  [workflow] rename failed: ${h.runId}
274
274
  `));return}console.log(w.green(`
275
275
  Renamed workflow run ${h.runId} to ${r.newName.trim()}.
276
- `));return}try{let R=await Zr({dirs:d,name:h.savedWorkflow.name,newName:r.newName,source:h.savedWorkflow.source});console.log(w.green(`
276
+ `));return}try{let R=await Xr({dirs:d,name:h.savedWorkflow.name,newName:r.newName,source:h.savedWorkflow.source});console.log(w.green(`
277
277
  Renamed saved workflow ${r.target} to ${R.name}.
278
278
  `))}catch(R){let b=R instanceof Error?R.message:String(R);console.log(w.red(`
279
279
  [workflow] rename failed: ${b}
280
280
  `))}return}if(r.kind==="revise"){if(!r.target||!r.request){console.log(w.yellow(`
281
281
  Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
282
- `));return}let h=Te(n);if(!h){console.log(w.red(`
282
+ `));return}let h=Ie(n);if(!h){console.log(w.red(`
283
283
  [workflow] refusing to revise a workflow without an interactive approval channel.
284
284
  `));return}let R=n.createKodaXOptions;if(!R){console.log(w.red(`
285
285
  [workflow] cannot revise - REPL options unavailable in this context.
@@ -289,51 +289,51 @@ Usage: /workflow revise [--replace] <runId|alias|savedName> <change request>
289
289
  [workflow] revise target not found: ${r.target}
290
290
  `));return}if(r.replace===!0&&b.kind!=="saved"){console.log(w.red(`
291
291
  [workflow] revise --replace requires a saved workflow name target.
292
- `));return}let P;try{if(b.kind==="run")P=(await Gn({runDir:b.runDir})).capsule;else{if(b.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
292
+ `));return}let P;try{if(b.kind==="run")P=(await Bn({runDir:b.runDir})).capsule;else{if(b.savedWorkflow.execution!=="capability-generated"){console.log(w.red(`
293
293
  [workflow] only generated workflow capsules can be revised.
294
294
  `));return}P=await so(b.savedWorkflow.path)}}catch(H){let to=H instanceof Error?H.message:String(H);console.log(w.red(`
295
295
  [workflow] revise failed: ${to}
296
- `));return}let I=Xt({target:r.target,capsule:P,changeRequest:r.request}),j;try{j=await Do({request:I,options:R()})}catch(H){let to=H instanceof Error?H.message:String(H);console.log(w.red(`
296
+ `));return}let I=Gt({target:r.target,capsule:P,changeRequest:r.request}),j;try{j=await Uo({request:I,options:R()})}catch(H){let to=H instanceof Error?H.message:String(H);console.log(w.red(`
297
297
  [workflow] revise generation failed: ${to}
298
298
  `));return}if(j.kind==="declined"){console.log(w.dim(`
299
299
  Workflow revision not created: ${j.reason}
300
- `));return}let X=r.replace===!0&&b.kind==="saved"?b:void 0,N=X?.savedWorkflow.name,fe=N??await Yi(d,j.manifest.name),Z=fe===j.manifest.name?j.manifest:{...j.manifest,name:fe};if(!await h(le($e({meta:Z,run:j.module.run}),{source:N?`revision-replace:${N}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Z.mayUseWorktree===!0,rawScript:j.source}))){console.log(w.dim(`Workflow revision cancelled.
301
- `));return}let F={name:fe,manifest:Z,source:j.source,intent:Fr(Z,{originalRequest:r.request}),...P.inputs!==void 0?{inputs:P.inputs}:{},...P.requires!==void 0?{requires:P.requires}:{},provenance:Ji({capsule:P,resolution:b,...N!==void 0?{replacesWorkflowName:N}:{}})};if(X){let H=await Qr({...F,dirs:d,savedSource:X.savedWorkflow.source});console.log(w.green(`
300
+ `));return}let X=r.replace===!0&&b.kind==="saved"?b:void 0,N=X?.savedWorkflow.name,fe=N??await zi(d,j.manifest.name),Z=fe===j.manifest.name?j.manifest:{...j.manifest,name:fe};if(!await h(le(Se({meta:Z,run:j.module.run}),{source:N?`revision-replace:${N}`:`revision:${r.target}`,sandbox:"capability-generated",mayUseWorktree:Z.mayUseWorktree===!0,rawScript:j.source}))){console.log(w.dim(`Workflow revision cancelled.
301
+ `));return}let F={name:fe,manifest:Z,source:j.source,intent:Nr(Z,{originalRequest:r.request}),...P.inputs!==void 0?{inputs:P.inputs}:{},...P.requires!==void 0?{requires:P.requires}:{},provenance:Ki({capsule:P,resolution:b,...N!==void 0?{replacesWorkflowName:N}:{}})};if(X){let H=await Vr({...F,dirs:d,savedSource:X.savedWorkflow.source});console.log(w.green(`
302
302
  Replaced saved workflow ${H.name} with revised capsule at ${H.path}
303
303
  `)),console.log(w.dim(`Previous capsule archived at ${H.previousPath}
304
- `));return}let To=await Jr({...F,dir:d.project??ne(process.cwd(),".kodax","workflows")});console.log(w.green(`
305
- Saved workflow revision ${To.name} to ${To.path}
304
+ `));return}let _o=await Kr({...F,dir:d.project??ne(process.cwd(),".kodax","workflows")});console.log(w.green(`
305
+ Saved workflow revision ${_o.name} to ${_o.path}
306
306
  `));return}if(r.kind==="rerun"){if(!r.runId){console.log(w.yellow(`
307
307
  Usage: /workflow rerun <runId|savedName> [args]
308
- `));return}if(!ye(r.runId))return;let h=Te(n);if(!h){console.log(w.red(`
308
+ `));return}if(!ye(r.runId))return;let h=Ie(n);if(!h){console.log(w.red(`
309
309
  [workflow] refusing to rerun a workflow without an interactive approval channel.
310
310
  `));return}let R=n.createKodaXOptions;if(!R){console.log(w.red(`
311
311
  [workflow] cannot start \u2014 REPL options unavailable in this context.
312
- `));return}let b=(await je(d)).find(M=>M.name===r.runId),P=c.list().some(M=>M.runId===r.runId)||ia(ne(l,r.runId,"run.json"));if(b&&P){console.log(w.red(`
312
+ `));return}let b=(await Ue(d)).find(M=>M.name===r.runId),P=c.list().some(M=>M.runId===r.runId)||na(ne(l,r.runId,"run.json"));if(b&&P){console.log(w.red(`
313
313
  [workflow] ambiguous rerun target: ${r.runId} matches both a workflow run id and a saved workflow name.
314
314
  `)),console.log(w.yellow(`Use /workflow ${r.runId} to run the saved workflow, or rerun a unique run id/name.
315
- `));return}if(b&&!P){let M=await Qi(b,h);if(!M)return;let ro=yo(r.rawArgs,M.module.meta.name,M.module.meta.description,M.scriptSnapshot?.source),xr="agentic";if(!await h(le($e(M.module),M.approvalContext))){console.log(w.dim(`Workflow cancelled.
316
- `));return}let Q=`run-${Date.now().toString(36)}`,ja=ne(l,Q);console.log(w.dim(`
315
+ `));return}if(b&&!P){let M=await Vi(b,h);if(!M)return;let ro=yo(r.rawArgs,M.module.meta.name,M.module.meta.description,M.scriptSnapshot?.source),vr="agentic";if(!await h(le(Se(M.module),M.approvalContext))){console.log(w.dim(`Workflow cancelled.
316
+ `));return}let Q=`run-${Date.now().toString(36)}`,Na=ne(l,Q);console.log(w.dim(`
317
317
  Started workflow ${M.module.meta.name} (${Q}). Use /workflow show ${Q} for status.
318
- `));let On=_e(n,Q,M.module.meta,ro);On.running(`Use /workflow show ${Q} for status or /workflow stop ${Q} to stop.`);let Fa=Ye(c,On,Q),Ar=c.startFromOptions({module:M.module,args:xo(r.rawArgs),options:R(),runId:Q,runDir:ja,...M.scriptSnapshot?{scriptSnapshot:M.scriptSnapshot}:{},processMetadata:aa({displayName:M.module.meta.name,savedWorkflowName:b.name,provenance:M.provenance}),onEvent:Ve(n,void 0,{presentation:xr,locale:ro,runId:Q})});Le(Ar,Fa),Pe(Ar,n,Q,On,{canRerun:M.scriptSnapshot!==void 0,presentation:xr,locale:ro});return}let I;try{I=await Gn({runDir:ne(l,r.runId)})}catch(M){let ro=M instanceof Error?M.message:String(M);console.log(w.red(`
318
+ `));let On=Te(n,Q,M.module.meta,ro);On.running(`Use /workflow show ${Q} for status or /workflow stop ${Q} to stop.`);let Da=Ve(c,On,Q),Sr=c.startFromOptions({module:M.module,args:xo(r.rawArgs),options:R(),runId:Q,runDir:Na,...M.scriptSnapshot?{scriptSnapshot:M.scriptSnapshot}:{},processMetadata:ta({displayName:M.module.meta.name,savedWorkflowName:b.name,provenance:M.provenance}),onEvent:Xe(n,void 0,{presentation:vr,locale:ro,runId:Q})});Pe(Sr,Da),_e(Sr,n,Q,On,{canRerun:M.scriptSnapshot!==void 0,presentation:vr,locale:ro});return}let I;try{I=await Bn({runDir:ne(l,r.runId)})}catch(M){let ro=M instanceof Error?M.message:String(M);console.log(w.red(`
319
319
  [workflow] rerun failed: ${ro}
320
- `));return}let X=$o(l,r.runId)?.scriptSnapshotPath??ne(l,r.runId,"script.js"),N=yo(r.rawArgs,I.capsule.manifest.name,I.capsule.manifest.description,I.capsule.source),fe="agentic",Z=io(I.capsule,mn());if(!Z.ok){pn(Z);return}if(gn(Z),!await h(le($e(I.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:I.capsule.manifest.mayUseWorktree===!0,rawScriptPath:X,rawScript:I.capsule.source}))){console.log(w.dim(`Workflow cancelled.
321
- `));return}let F=`run-${Date.now().toString(36)}`,To=ne(l,F);console.log(w.dim(`
320
+ `));return}let X=$o(l,r.runId)?.scriptSnapshotPath??ne(l,r.runId,"script.js"),N=yo(r.rawArgs,I.capsule.manifest.name,I.capsule.manifest.description,I.capsule.source),fe="agentic",Z=io(I.capsule,pn());if(!Z.ok){gn(Z);return}if(wn(Z),!await h(le(Se(I.module),{source:`run:${r.runId}`,sandbox:"capability-generated",mayUseWorktree:I.capsule.manifest.mayUseWorktree===!0,rawScriptPath:X,rawScript:I.capsule.source}))){console.log(w.dim(`Workflow cancelled.
321
+ `));return}let F=`run-${Date.now().toString(36)}`,_o=ne(l,F);console.log(w.dim(`
322
322
  Started workflow ${I.module.meta.name} (${F}). Use /workflow show ${F} for status.
323
- `));let H=_e(n,F,I.module.meta,N);H.running(`Use /workflow show ${F} for status or /workflow stop ${F} to stop.`);let to=Ye(c,H,F),br=c.startFromOptions({module:I.module,args:xo(r.rawArgs),options:R(),runId:F,runDir:To,scriptSnapshot:{manifest:I.capsule.manifest,source:I.capsule.source},processMetadata:bo({source:"command",displayName:I.module.meta.name,sourceRunId:r.runId}),onEvent:Ve(n,void 0,{presentation:fe,locale:N,runId:F})});Le(br,to),Pe(br,n,F,H,{canRerun:!0,presentation:fe,locale:N});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
323
+ `));let H=Te(n,F,I.module.meta,N);H.running(`Use /workflow show ${F} for status or /workflow stop ${F} to stop.`);let to=Ve(c,H,F),kr=c.startFromOptions({module:I.module,args:xo(r.rawArgs),options:R(),runId:F,runDir:_o,scriptSnapshot:{manifest:I.capsule.manifest,source:I.capsule.source},processMetadata:bo({source:"command",displayName:I.module.meta.name,sourceRunId:r.runId}),onEvent:Xe(n,void 0,{presentation:fe,locale:N,runId:F})});Pe(kr,to),_e(kr,n,F,H,{canRerun:!0,presentation:fe,locale:N});return}if(r.kind==="create"){if(!r.request){console.log(w.yellow(`
324
324
  Usage: /workflow create <request>
325
- `));return}return await f(r.request)}let m=Te(n);if(!m){console.log(w.red(`
325
+ `));return}return await f(r.request)}let m=Ie(n);if(!m){console.log(w.red(`
326
326
  [workflow] refusing to start a workflow without an interactive approval channel.
327
- `));return}let k={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},v,y=Uo(r.name),$,g;if(!y){let h=(await je(d)).find(R=>R.name===r.name);if(!h){let R=[r.name,r.rawArgs].filter(b=>b&&b.length>0).join(" ").trim();return await f(R)}if($=h,h.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
327
+ `));return}let k={source:"built-in",sandbox:"trusted package",mayUseWorktree:!1},v,y=jo(r.name),$,g;if(!y){let h=(await Ue(d)).find(R=>R.name===r.name);if(!h){let R=[r.name,r.rawArgs].filter(b=>b&&b.length>0).join(" ").trim();return await f(R)}if($=h,h.execution==="trusted-local"&&!await m(`Run local workflow file? This EXECUTES local code:
328
328
  ${h.path}`)){console.log(w.dim(`Workflow cancelled.
329
- `));return}try{if(h.execution==="capability-generated"){let R=await so(h.path),b=io(R,mn());if(!b.ok){pn(b);return}gn(b),k={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:R.manifest.mayUseWorktree===!0,rawScriptPath:h.path,rawScript:R.source},v={manifest:R.manifest,source:R.source},g=R.provenance}y=await Fo(h.path),h.execution==="trusted-local"&&(k={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:!1})}catch(R){let b=R instanceof Error?R.message:String(R);console.log(w.red(`
329
+ `));return}try{if(h.execution==="capability-generated"){let R=await so(h.path),b=io(R,pn());if(!b.ok){gn(b);return}wn(b),k={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:R.manifest.mayUseWorktree===!0,rawScriptPath:h.path,rawScript:R.source},v={manifest:R.manifest,source:R.source},g=R.provenance}y=await Ho(h.path),h.execution==="trusted-local"&&(k={source:`saved:${h.source}`,sandbox:h.execution,mayUseWorktree:!1})}catch(R){let b=R instanceof Error?R.message:String(R);console.log(w.red(`
330
330
  [workflow] failed to load ${h.path}: ${b}
331
331
  `));return}}let x=n.createKodaXOptions;if(!x){console.log(w.red(`
332
332
  [workflow] cannot start \u2014 REPL options unavailable in this context.
333
- `));return}if(!await m(le($e(y),k))){console.log(w.dim(`Workflow cancelled.
333
+ `));return}if(!await m(le(Se(y),k))){console.log(w.dim(`Workflow cancelled.
334
334
  `));return}let L=`run-${Date.now().toString(36)}`,Y=ne(l,L);console.log(w.dim(`
335
335
  Started workflow ${y.meta.name} (${L}). Use /workflow show ${L} for status.
336
- `));let J=yo(r.rawArgs,y.meta.name,y.meta.description,v?.source),no=_e(n,L,y.meta,J);no.running(`Use /workflow show ${L} for status or /workflow stop ${L} to stop.`);let ue="agentic",Ua=Ye(c,no,L),$r=c.startFromOptions({module:y,args:xo(r.rawArgs),options:x(),runId:L,runDir:Y,...v?{scriptSnapshot:v}:{},processMetadata:$?aa({displayName:y.meta.name,savedWorkflowName:$.name,provenance:g}):bo({source:"command",displayName:y.meta.name}),onEvent:Ve(n,void 0,{presentation:ue,locale:J,runId:L})});Le($r,Ua),Pe($r,n,L,no,{canRerun:v!==void 0,presentation:ue,locale:J})},"handler")};import G from"chalk";var Jt={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(G.yellow(`
336
+ `));let J=yo(r.rawArgs,y.meta.name,y.meta.description,v?.source),no=Te(n,L,y.meta,J);no.running(`Use /workflow show ${L} for status or /workflow stop ${L} to stop.`);let ue="agentic",Oa=Ve(c,no,L),yr=c.startFromOptions({module:y,args:xo(r.rawArgs),options:x(),runId:L,runDir:Y,...v?{scriptSnapshot:v}:{},processMetadata:$?ta({displayName:y.meta.name,savedWorkflowName:$.name,provenance:g}):bo({source:"command",displayName:y.meta.name}),onEvent:Xe(n,void 0,{presentation:ue,locale:J,runId:L})});Pe(yr,Oa),_e(yr,n,L,no,{canRerun:v!==void 0,presentation:ue,locale:J})},"handler")};import G from"chalk";var Kt={name:"new",description:"Start a new conversation session",usage:"/new",handler:a(async(e,o,n)=>{if(o.messages.length===0){console.log(G.yellow(`
337
337
  Current session is already empty.`)),console.log(G.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(G.dim(`
338
338
  Cancelled. Current session preserved.`));return}try{await n.saveSession(),console.log(G.dim(`
339
339
  [Previous session saved]`))}catch{console.log(G.yellow(`
@@ -343,11 +343,11 @@ Cancelled. Current session preserved.`));return}try{await n.saveSession(),consol
343
343
  `)),console.log("Usage:"),console.log(G.cyan(" /new")+` - Clear current session and start fresh
344
344
  `),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.
345
345
  `),console.log("Examples:"),console.log(G.dim(" User: Help me refactor the authentication module")),console.log(G.dim(" AI: [provides refactoring help]")),console.log(G.cyan(" /new")),console.log(G.dim(" \u2713 Started new session")),console.log(G.dim(" User: Now I need help with database optimization")),console.log(G.dim(` AI: [provides database help]
346
- `)),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 O from"chalk";var Iw="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Tw="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function _w(e){return Yr(e.error,e.messageCount)}a(_w,"shouldOfferSessionRecovery");var Zt={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(O.yellow(`
346
+ `)),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 O from"chalk";var Cw="The provider may be rejecting the current session history. Create a new session from a safe summary and continue there?",Iw="The current LLM API may be rejecting this session history. Run /recover [prompt] to continue in a fresh session from safe memory.";function Tw(e){return zr(e.error,e.messageCount)}a(Tw,"shouldOfferSessionRecovery");var Xt={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(O.yellow(`
347
347
  Current session is empty. Start a normal message instead.`));return}if(!n.recoverSession){console.log(O.red(`
348
348
  [Recover is not available in this host]
349
349
  `));return}if(n.confirm&&!await n.confirm("Create a new session from a safe summary of this one and continue there?")){console.log(O.dim(`
350
- Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(Fn(e.join(" ")))}catch(r){let i=r instanceof Error?r.message:String(r);console.log(O.red(`
350
+ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSession(jn(e.join(" ")))}catch(r){let i=r instanceof Error?r.message:String(r);console.log(O.red(`
351
351
  [Recover failed] ${i}
352
352
  `));return}t==="blocked"?console.log(O.yellow(`
353
353
  [Recover blocked by the current session transition guard]
@@ -357,13 +357,13 @@ Cancelled. Current session preserved.`));return}let t;try{t=await n.recoverSessi
357
357
  [Nothing to recover from this session]
358
358
  `))},"handler"),detailedHelp:a(()=>{console.log(O.cyan(`
359
359
  /recover - Continue in a Fresh Session
360
- `)),console.log(O.bold("Usage:")),console.log(O.dim(" /recover ")+"Continue with a safe memory summary"),console.log(O.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(O.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(O.bold("Description:")),console.log(O.dim(" Saves the current session, creates a new local session,")),console.log(O.dim(" carries over only a compact memory summary, and runs the")),console.log(O.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(O.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as Xd}from"node:child_process";import{promisify as Vd}from"node:util";import te from"chalk";var Yd=Vd(Xd),Qt=1e5;async function Ro(e,o){let{stdout:n}=await Yd("git",e,{cwd:o,maxBuffer:67108864});return n}a(Ro,"git");async function Jd(e){for(let o of["main","master","develop"])try{return await Ro(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(Jd,"detectBaseBranch");async function Ao(e,o){return(await Ro(["rev-parse",e],o)).trim()}a(Ao,"resolveRef");async function Zd(e,o){try{return await Ao(e,o)}catch{return}}a(Zd,"tryResolveRef");async function Qd(e,o){let n=e[0];if(n==="base"){let t=await Jd(o);return{diff:await Ro(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Ao(t,o),headRef:await Ao("HEAD",o)}}if(n==="sha"&&e[1]){let t=await Zd(`${e[1]}^`,o);return{diff:await Ro(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Ao(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Ro(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Ao("HEAD",o)}}a(Qd,"getDiff");function eu(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 k=e[f+1];if(k===void 0)break;if(k==="--"){r=!0,f+=1;break}if(c(k)){f+=1;continue}i.push(k),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(eu,"parseReviewInvocation");function ou(e,o={}){let n=[`Review ${e} with KodaX's built-in scoped-review workflow.`,"Use the captured immutable review packets as the sole review input.","The built-in gives each ordinary packet one primary with both specVerdict and qualityVerdict, adds a second primary only for routing-high, sends only candidate findings to a fresh independent verifier, and performs capable final synthesis.","Final output must lead with verified findings, cite files or diff hunks, and state when no issues are found."];return o.lean===!0&&n.splice(2,0,"Add one lean/minimal-diff reviewer: find code that can be deleted or replaced by existing repo code, stdlib/native platform features, or already-installed dependencies.","Lean review must not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior."),o.customPrompt&&n.push(`User review focus: ${o.customPrompt}`),o.packets&&o.packets.length>0&&n.push(`Captured packets: ${o.packets.length}.`,"Do not call changed_scope or recapture Git: these packets are the sole immutable review input."),n.join(`
361
- `)}a(ou,"buildReviewWorkflowRequest");function nu(e){return e.length<=Qt?e:`${e.slice(0,Qt)}
360
+ `)),console.log(O.bold("Usage:")),console.log(O.dim(" /recover ")+"Continue with a safe memory summary"),console.log(O.dim(" /recover <prompt> ")+"Continue with a custom first prompt"),console.log(O.dim(" /handoff <prompt> ")+"Alias for /recover"),console.log(),console.log(O.bold("Description:")),console.log(O.dim(" Saves the current session, creates a new local session,")),console.log(O.dim(" carries over only a compact memory summary, and runs the")),console.log(O.dim(" first continuation prompt there. Raw tool calls and provider")),console.log(O.dim(" history are not replayed to the model.")),console.log()},"detailedHelp")};import{execFile as zd}from"node:child_process";import{promisify as Kd}from"node:util";import te from"chalk";var Xd=Kd(zd),Vt=1e5;async function Ro(e,o){let{stdout:n}=await Xd("git",e,{cwd:o,maxBuffer:67108864});return n}a(Ro,"git");async function Vd(e){for(let o of["main","master","develop"])try{return await Ro(["rev-parse","--verify",o],e),o}catch{}return"HEAD"}a(Vd,"detectBaseBranch");async function Ao(e,o){return(await Ro(["rev-parse",e],o)).trim()}a(Ao,"resolveRef");async function Yd(e,o){try{return await Ao(e,o)}catch{return}}a(Yd,"tryResolveRef");async function Jd(e,o){let n=e[0];if(n==="base"){let t=await Vd(o);return{diff:await Ro(["diff",`${t}...HEAD`],o),label:`changes against ${t}`,scope:"compare",baseRef:await Ao(t,o),headRef:await Ao("HEAD",o)}}if(n==="sha"&&e[1]){let t=await Yd(`${e[1]}^`,o);return{diff:await Ro(["show",e[1]],o),label:`commit ${e[1]}`,scope:"commit",...t?{baseRef:t}:{},headRef:await Ao(e[1],o)}}if(n==="sha")throw new Error("missing commit hash for sha scope; use /review sha <hash>");return{diff:await Ro(["diff","HEAD"],o),label:"uncommitted changes",scope:"all",headRef:await Ao("HEAD",o)}}a(Jd,"getDiff");function Zd(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 k=e[f+1];if(k===void 0)break;if(k==="--"){r=!0,f+=1;break}if(c(k)){f+=1;continue}i.push(k),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(Zd,"parseReviewInvocation");function Qd(e,o={}){let n=[`Review ${e} with KodaX's built-in scoped-review workflow.`,"Use the captured immutable review packets as the sole review input.","The built-in gives each ordinary packet one primary with both specVerdict and qualityVerdict, adds a second primary only for routing-high, sends only candidate findings to a fresh independent verifier, and performs capable final synthesis.","Final output must lead with verified findings, cite files or diff hunks, and state when no issues are found."];return o.lean===!0&&n.splice(2,0,"Add one lean/minimal-diff reviewer: find code that can be deleted or replaced by existing repo code, stdlib/native platform features, or already-installed dependencies.","Lean review must not recommend cutting trust-boundary validation, security checks, data-loss protection, accessibility basics, or explicitly requested behavior."),o.customPrompt&&n.push(`User review focus: ${o.customPrompt}`),o.packets&&o.packets.length>0&&n.push(`Captured packets: ${o.packets.length}.`,"Do not call changed_scope or recapture Git: these packets are the sole immutable review input."),n.join(`
361
+ `)}a(Qd,"buildReviewWorkflowRequest");function eu(e){return e.length<=Vt?e:`${e.slice(0,Vt)}
362
362
 
363
- [diff truncated to ${Qt} chars - review the rest with a narrower scope]`}a(nu,"truncateDiff");function tu(e){let o=nu(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(`
364
- `)}a(tu,"buildReviewPrompt");function ca(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(ca,"buildDisplayName");function ru(){console.log(te.bold(`
363
+ [diff truncated to ${Vt} chars - review the rest with a narrower scope]`}a(eu,"truncateDiff");function ou(e){let o=eu(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(`
364
+ `)}a(ou,"buildReviewPrompt");function sa(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(sa,"buildDisplayName");function nu(){console.log(te.bold(`
365
365
  /review - Review Git Changes
366
- `)),console.log("Usage:"),console.log(te.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(te.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(te.dim(" base ")+"Review changes against the detected base branch"),console.log(te.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(te.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(te.dim(" --workflow ")+"Run the deterministic scoped-review workflow"),console.log(),console.log("Examples:"),console.log(te.dim(" /review --lean")),console.log(te.dim(" /review base focus on auth and data loss")),console.log(te.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(ru,"printReviewHelp");var da={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:ru,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=eu(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r;try{r=await Qd(t.diffArgs,n)}catch(i){return{success:!1,message:`/review: git failed - ${i instanceof Error?i.message:String(i)}`}}if(!r.diff.trim())return{success:!0,message:"No changes to review."};if(t.workflow){let i;try{i=await as({cwd:n,sessionId:o.sessionId,label:r.label,diff:r.diff,scope:r.scope,...r.baseRef?{baseRef:r.baseRef}:{},...r.headRef?{headRef:r.headRef}:{},customPrompt:t.prompt})}catch(l){return{success:!1,message:`/review: could not create review packet - ${l instanceof Error?l.message:String(l)}`}}return{success:!0,workflow:{request:ou(r.label,{lean:t.lean,customPrompt:t.prompt,packets:i}),source:"command",displayName:ca(t),processSource:"review",builtin:{name:"scoped-review",args:{packets:i,...t.lean?{lean:!0}:{},...t.prompt?{reviewFocus:t.prompt}:{}}}}}}return{success:!0,invocation:{prompt:tu({label:r.label,diff:r.diff,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:ca(t)}}},"handler")};import{constants as su}from"node:fs";import{access as iu,readFile as au,writeFile as lu}from"node:fs/promises";import{join as cu}from"node:path";import re from"chalk";var pa=`# KodaX Lean Mode
366
+ `)),console.log("Usage:"),console.log(te.cyan(" /review [--lean] [--workflow] [base | sha <hash>] [prompt...]")),console.log(),console.log("Scopes:"),console.log(te.dim(" default ")+"Review uncommitted changes against HEAD"),console.log(te.dim(" base ")+"Review changes against the detected base branch"),console.log(te.dim(" sha <hash> ")+"Review a specific commit"),console.log(),console.log("Options:"),console.log(te.dim(" --lean ")+"Add a minimal-diff/YAGNI review pass"),console.log(te.dim(" --workflow ")+"Run the deterministic scoped-review workflow"),console.log(),console.log("Examples:"),console.log(te.dim(" /review --lean")),console.log(te.dim(" /review base focus on auth and data loss")),console.log(te.dim(" /review sha abc123 --lean -- check for native platform replacements"))}a(nu,"printReviewHelp");var ia={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:nu,handler:a(async(e,o)=>{let n=o.gitRoot??process.cwd(),t=Zd(e);if(t.error)return{success:!1,message:`/review: ${t.error}`};let r;try{r=await Jd(t.diffArgs,n)}catch(i){return{success:!1,message:`/review: git failed - ${i instanceof Error?i.message:String(i)}`}}if(!r.diff.trim())return{success:!0,message:"No changes to review."};if(t.workflow){let i;try{i=await ts({cwd:n,sessionId:o.sessionId,label:r.label,diff:r.diff,scope:r.scope,...r.baseRef?{baseRef:r.baseRef}:{},...r.headRef?{headRef:r.headRef}:{},customPrompt:t.prompt})}catch(l){return{success:!1,message:`/review: could not create review packet - ${l instanceof Error?l.message:String(l)}`}}return{success:!0,workflow:{request:Qd(r.label,{lean:t.lean,customPrompt:t.prompt,packets:i}),source:"command",displayName:sa(t),processSource:"review",builtin:{name:"scoped-review",args:{packets:i,...t.lean?{lean:!0}:{},...t.prompt?{reviewFocus:t.prompt}:{}}}}}}return{success:!0,invocation:{prompt:ou({label:r.label,diff:r.diff,lean:t.lean,customPrompt:t.prompt}),source:"prompt",displayName:sa(t)}}},"handler")};import{constants as tu}from"node:fs";import{access as ru,readFile as su,writeFile as iu}from"node:fs/promises";import{join as au}from"node:path";import re from"chalk";var da=`# KodaX Lean Mode
367
367
 
368
368
  Before writing code:
369
369
  1. Do we need to build this at all?
@@ -383,10 +383,10 @@ Never cut:
383
383
  After coding:
384
384
  - explain what was skipped
385
385
  - say when to add it back
386
- `;function du(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(du,"resolveTargetRoot");async function ga(e){try{return await iu(e,su.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(ga,"pathExists");function ua(e){return console.log(re.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(ua,"existingAgentsResult");function Sn(e){return e instanceof Error?e.message:String(e)}a(Sn,"errorMessage");async function fa(e,o){let n;try{n=await ga(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${Sn(t)}`}}if(n)return ua(e);try{await lu(e,pa,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?ua(e):{success:!1,message:`/agents init: failed to write ${e}: ${Sn(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: ${Sn(t)}`}}return console.log(re.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(fa,"initializeAgentsFile");function uu(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",pa.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
387
- `)}a(uu,"buildLeanReviewPrompt");function ma(){console.log(re.bold(`
386
+ `;function lu(e){return e.runtimeInfo?.workspaceRoot??e.runtimeInfo?.executionCwd??e.gitRoot??process.cwd()}a(lu,"resolveTargetRoot");async function ua(e){try{return await ru(e,tu.F_OK),!0}catch(o){if(o.code==="ENOENT")return!1;throw o}}a(ua,"pathExists");function aa(e){return console.log(re.dim(`AGENTS.md already exists at ${e}; left unchanged.`)),{success:!0,message:`AGENTS.md already exists and was left unchanged: ${e}`}}a(aa,"existingAgentsResult");function $n(e){return e instanceof Error?e.message:String(e)}a($n,"errorMessage");async function la(e,o){let n;try{n=await ua(e)}catch(t){return{success:!1,message:`/agents init: failed to inspect ${e}: ${$n(t)}`}}if(n)return aa(e);try{await iu(e,da,{encoding:"utf8",flag:"wx"})}catch(t){return t.code==="EEXIST"?aa(e):{success:!1,message:`/agents init: failed to write ${e}: ${$n(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: ${$n(t)}`}}return console.log(re.green(`Created ${e}`)),{success:!0,message:`Created ${e}`}}a(la,"initializeAgentsFile");function cu(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",da.trimEnd(),"```","","Current AGENTS.md content:","","```markdown",o,"```"].join(`
387
+ `)}a(cu,"buildLeanReviewPrompt");function ca(){console.log(re.bold(`
388
388
  /agents - Manage Target Project Instructions
389
- `)),console.log("Usage:"),console.log(re.cyan(" /agents init")),console.log(re.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(re.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(re.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(re.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(re.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(re.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(ma,"printAgentsHelp");var er={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:ma,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return ma(),!0;let r=du(o),i=cu(r,"AGENTS.md");if(t==="init")return await fa(i,n);let l;try{l=await ga(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${Sn(d)}`}}if(!l)return await fa(i,n);let c;try{c=await au(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:uu(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function bn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(bn,"getPastedTextRefNumLines");function fu(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(fu,"formatPastedTextRef");function mu(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(mu,"formatTruncatedTextRef");var pu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function gu(e){let o=[],n=new RegExp(pu.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(gu,"parseReferences");function wu(e,o){let n=gu(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(wu,"expandPastedTextRefs");var hu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,yu=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function ku(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(ku,"isAtWordBoundaryAfter");function vu(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(vu,"isAtWordBoundaryBefore");function Yw(e,o){if(o<=0||!ku(e,o))return null;let t=e.slice(0,o).match(hu);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(Yw,"findPlaceholderBeforeCursor");function Jw(e,o){if(o>=e.length||!vu(e,o))return null;let t=e.slice(o).match(yu);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(Jw,"findPlaceholderAfterCursor");function Zw(e){return e.length>800||bn(e)>2}a(Zw,"shouldReplacePasteWithPlaceholder");function Qw(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=bn(l),d=mu(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(Qw,"maybeTruncateLongInput");var or=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=bn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:fu(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=bn(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 wu(o,this.contents)}snapshot(){return new Map(this.contents)}restore(o){this.contents.clear();for(let[n,t]of o)this.contents.set(n,t);for(let n of o.keys())n>=this.nextId&&(this.nextId=n+1)}reset(){this.contents.clear(),this.nextId=1}size(){return this.contents.size}export(){return Array.from(this.contents.values())}},$n=null;function eh(){return $n===null&&($n=new or),$n}a(eh,"getOrCreateModulePasteStore");function wa(){return $n??void 0}a(wa,"getActivePasteStore");import{createHash as Su}from"node:crypto";import{mkdir as $u,readdir as bu,readFile as xu,stat as Au,unlink as Ru,writeFile as Eu}from"node:fs/promises";import*as nr from"node:path";var Cu="paste-cache",Iu=720*60*60*1e3;function tr(){return B(Cu)}a(tr,"getPasteCacheDir");function ha(e){return nr.join(tr(),`${e}.txt`)}a(ha,"getPastePath");function ih(e){return Su("sha256").update(e).digest("hex").slice(0,16)}a(ih,"hashPastedText");async function ah(e,o){try{let n=tr();return await $u(n,{recursive:!0}),await Eu(ha(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(ah,"storePastedText");async function ya(e){try{return await xu(ha(e),{encoding:"utf8"})}catch{return null}}a(ya,"retrievePastedText");async function lh(e=Iu){let o=tr(),n=Date.now()-e,t=0,r=0,i;try{i=await bu(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=nr.join(o,l);try{(await Au(c)).mtimeMs<n&&(await Ru(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(lh,"cleanupOldPastes");import*as lr from"path";import*as va from"os";function Tu(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Tu,"escapeRegExp");function _u(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Tu(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(_u,"deriveArgumentHintFromUsage");function rr(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??_u(e.usage,e.name)}}a(rr,"toCommandDefinition");function sr(e){for(let o of ka)try{let n=rr(o,"builtin");e.register(n)}catch(n){K({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(sr,"registerBuiltinCommands");import*as ce from"fs";import*as Me from"path";function Pu(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(Pu,"normalizeAliases");function Lu(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(Lu,"normalizePriority");function Mu(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Lr(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(Mu,"buildExecutionMetadata");function Wu(e,o){try{let n=ce.readFileSync(e,"utf-8"),[t,r]=Pr(n),i=t??{},l=Me.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:Pu(i.aliases),priority:Lu(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Mu(i)}}catch(n){K({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(Wu,"parseCommandFile");function ir(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(!ce.existsSync(i))continue;let c=Me.resolve(i);try{c=ce.realpathSync.native?.(i)??ce.realpathSync(i)}catch{c=Me.resolve(i)}if(!n.has(c)){n.add(c);try{let d=ce.readdirSync(i);for(let u of d){if(!u.endsWith(".md"))continue;let f=Me.join(i,u),m=Wu(f,l);m&&o.push(m)}}catch(d){K({source:"repl:commands",level:"error",message:`Error scanning directory ${i}.`,detail:d})}}}return o}a(ir,"discoverCommands");function ar(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){K({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(ar,"registerDiscoveredCommands");function cr(e,o){sr(e);try{let n=va.homedir(),t=o??process.cwd(),r=ir([{path:lr.join(t,".kodax","commands"),location:"project"},{path:B("commands"),location:"user"},{path:lr.join(n,".agents","commands"),location:"user"}]);ar(r,e)}catch(n){K({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(cr,"registerAllCommands");function Eh(e){let o=new pe;return cr(o,e),o.getAll()}a(Eh,"listRegisteredCommands");function Ou(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(Ou,"summarizeAgentsFiles");async function Ea(e){let o=Se(e);return await o.reload(),o.size}a(Ea,"reloadSkillRegistry");function Nu(e,o){if(!Array.isArray(o))return[];let n=[];for(let t of o){if(typeof t!="string")continue;let r=t.trim();r&&n.push(An.isAbsolute(r)?r:An.resolve(An.dirname(e),r))}return n}a(Nu,"normalizeConfiguredExtensionPaths");function Du(){let e=An.join(Ne(),"config.json");try{if(!Rn.existsSync(e))return{};let o=JSON.parse(Rn.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Nu(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(s.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(Du,"loadExtensionReloadConfig");async function Uu(){try{return await Kr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(s.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Uu,"discoverDefaultExtensionsForReload");async function ju(){let e=Du(),o=await Bn(e.extensions??[]),n=await Bn(await Uu()),t=await No(n,o),r=[...t,...o],i=se();if(!i&&r.length>0&&(i=zr({config:e}).activate()),!i)return{reloaded:0,loaded:0,failures:0};let l=Ze(i),c=l.failures.length;await i.reloadExtensions({continueOnError:!0});let d=Ze(i),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(y=>y.path),m=await No(t,f),k=await No(o,[...f,...m]);await i.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await i.loadExtensions(k,{continueOnError:!0,loadSource:"config",stage:"reload"});let v=Ze(i);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,v.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,v.failures.length-c)}}a(ju,"reloadExtensionRuntimeFromDisk");function Fu(e){return{...e,enabled:!0}}a(Fu,"createManualCompactionConfig");function dr(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${At(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(dr,"printWorkspaceUnchangedNote");var ka=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];de.size===0&&En(),de.has(o.toLowerCase())||!!Cn(o)?mr(o):ef(o)}else Qu()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
389
+ `)),console.log("Usage:"),console.log(re.cyan(" /agents init")),console.log(re.cyan(" /agents lean")),console.log(),console.log("Commands:"),console.log(re.dim(" init ")+"Create AGENTS.md in the target project if it is absent"),console.log(re.dim(" lean ")+"Initialize or LLM-review AGENTS.md for Lean Mode guidance"),console.log(),console.log("Notes:"),console.log(re.dim(" - Existing AGENTS.md files are never overwritten.")),console.log(re.dim(" - /agents lean asks the LLM to merge missing lean guidance without duplicates.")),console.log(re.dim(" - The generated file belongs to the target project, not KodaX itself."))}a(ca,"printAgentsHelp");var Yt={name:"agents",description:"Initialize target-project AGENTS.md instructions",usage:"/agents init | lean",argumentHint:"init | lean",detailedHelp:ca,handler:a(async(e,o,n)=>{let t=e[0]?.toLowerCase()??"help";if(t!=="init"&&t!=="lean")return ca(),!0;let r=lu(o),i=au(r,"AGENTS.md");if(t==="init")return await la(i,n);let l;try{l=await ua(i)}catch(d){return{success:!1,message:`/agents lean: failed to inspect ${i}: ${$n(d)}`}}if(!l)return await la(i,n);let c;try{c=await su(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:cu(i,c),source:"prompt",displayName:"/agents lean"}}},"handler")};function xn(e){let o=e.match(/\r\n|\r|\n/g);return o?o.length:0}a(xn,"getPastedTextRefNumLines");function du(e,o){return o===0?`[Pasted text #${e}]`:`[Pasted text #${e} +${o} lines]`}a(du,"formatPastedTextRef");function uu(e,o){return`[...Truncated text #${e} +${o} lines...]`}a(uu,"formatTruncatedTextRef");var fu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/g;function mu(e){let o=[],n=new RegExp(fu.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(mu,"parseReferences");function pu(e,o){let n=mu(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(pu,"expandPastedTextRefs");var gu=/\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]$/,wu=/^\[(Pasted text|Image|\.\.\.Truncated text) #(\d+)(?: \+\d+ lines)?(\.*)\]/;function hu(e,o){if(o>=e.length)return!0;let n=e[o];return!n||/\s/.test(n)}a(hu,"isAtWordBoundaryAfter");function yu(e,o){if(o===0)return!0;let n=e[o-1];return!n||/\s/.test(n)}a(yu,"isAtWordBoundaryBefore");function Vw(e,o){if(o<=0||!hu(e,o))return null;let t=e.slice(0,o).match(gu);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(Vw,"findPlaceholderBeforeCursor");function Yw(e,o){if(o>=e.length||!yu(e,o))return null;let t=e.slice(o).match(wu);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(Yw,"findPlaceholderAfterCursor");function Jw(e){return e.length>800||xn(e)>2}a(Jw,"shouldReplacePasteWithPlaceholder");function Zw(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=xn(l),d=uu(o,c);return{truncatedText:r+d+i,placeholderContent:l}}a(Zw,"maybeTruncateLongInput");var Jt=class{static{a(this,"PasteStore")}contents=new Map;nextId=1;registerText(o){let n=this.nextId++,t=xn(o);return this.contents.set(n,{id:n,type:"text",content:o}),{id:n,placeholder:du(n,t),numLines:t}}registerTruncatedText(o){let n=this.nextId++,t=xn(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 pu(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())}},bn=null;function Qw(){return bn===null&&(bn=new Jt),bn}a(Qw,"getOrCreateModulePasteStore");function fa(){return bn??void 0}a(fa,"getActivePasteStore");import{createHash as ku}from"node:crypto";import{mkdir as vu,readdir as Su,readFile as $u,stat as bu,unlink as xu,writeFile as Au}from"node:fs/promises";import*as Zt from"node:path";var Ru="paste-cache",Eu=720*60*60*1e3;function Qt(){return B(Ru)}a(Qt,"getPasteCacheDir");function ma(e){return Zt.join(Qt(),`${e}.txt`)}a(ma,"getPastePath");function sh(e){return ku("sha256").update(e).digest("hex").slice(0,16)}a(sh,"hashPastedText");async function ih(e,o){try{let n=Qt();return await vu(n,{recursive:!0}),await Au(ma(e),o,{encoding:"utf8",mode:384}),!0}catch{return!1}}a(ih,"storePastedText");async function pa(e){try{return await $u(ma(e),{encoding:"utf8"})}catch{return null}}a(pa,"retrievePastedText");async function ah(e=Eu){let o=Qt(),n=Date.now()-e,t=0,r=0,i;try{i=await Su(o)}catch{return{scanned:t,removed:r}}for(let l of i){if(!l.endsWith(".txt"))continue;t+=1;let c=Zt.join(o,l);try{(await bu(c)).mtimeMs<n&&(await xu(c),r+=1)}catch{}}return{scanned:t,removed:r}}a(ah,"cleanupOldPastes");import*as rr from"path";import*as wa from"os";function Cu(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}a(Cu,"escapeRegExp");function Iu(e,o){if(!e)return;let n=e.trim();if(!n.startsWith("/"))return;let t=new RegExp(`^/${Cu(o)}(?:\\s+)?`,"i"),r=n.replace(t,"").trim();return r.length>0?r:void 0}a(Iu,"deriveArgumentHintFromUsage");function er(e,o="builtin"){return{...e,source:e.source??o,userInvocable:e.userInvocable??!0,disableModelInvocation:e.disableModelInvocation??!1,argumentHint:e.argumentHint??Iu(e.usage,e.name)}}a(er,"toCommandDefinition");function or(e){for(let o of ga)try{let n=er(o,"builtin");e.register(n)}catch(n){z({source:"repl:commands",level:"error",message:`Failed to register command "${o.name}".`,detail:n})}}a(or,"registerBuiltinCommands");import*as ce from"fs";import*as Le from"path";function Tu(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(Tu,"normalizeAliases");function _u(e){if(e==="critical"||e==="high"||e==="medium"||e==="low")return e}a(_u,"normalizePriority");function Pu(e){return{disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:Ir(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:Tr(e.hooks),frontmatter:e}}a(Pu,"buildExecutionMetadata");function Lu(e,o){try{let n=ce.readFileSync(e,"utf-8"),[t,r]=Cr(n),i=t??{},l=Le.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:Tu(i.aliases),priority:_u(i.priority),content:r.trim(),location:o,path:e,frontmatter:i,execution:Pu(i)}}catch(n){z({source:"repl:commands",level:"error",message:`Error parsing command file ${e}.`,detail:n});return}}a(Lu,"parseCommandFile");function nr(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(!ce.existsSync(i))continue;let c=Le.resolve(i);try{c=ce.realpathSync.native?.(i)??ce.realpathSync(i)}catch{c=Le.resolve(i)}if(!n.has(c)){n.add(c);try{let d=ce.readdirSync(i);for(let u of d){if(!u.endsWith(".md"))continue;let f=Le.join(i,u),m=Lu(f,l);m&&o.push(m)}}catch(d){z({source:"repl:commands",level:"error",message:`Error scanning directory ${i}.`,detail:d})}}}return o}a(nr,"discoverCommands");function tr(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){z({source:"repl:commands",level:"error",message:`Error registering command ${n.name}.`,detail:t})}}a(tr,"registerDiscoveredCommands");function sr(e,o){or(e);try{let n=wa.homedir(),t=o??process.cwd(),r=nr([{path:rr.join(t,".kodax","commands"),location:"project"},{path:B("commands"),location:"user"},{path:rr.join(n,".agents","commands"),location:"user"}]);tr(r,e)}catch(n){z({source:"repl:commands",level:"error",message:"Failed to discover commands.",detail:n})}}a(sr,"registerAllCommands");function Rh(e){let o=new pe;return sr(o,e),o.getAll()}a(Rh,"listRegisteredCommands");function Mu(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(Mu,"summarizeAgentsFiles");async function ba(e){let o=ve(e);return await o.reload(),o.size}a(ba,"reloadSkillRegistry");function Wu(e,o){if(!Array.isArray(o))return[];let n=[];for(let t of o){if(typeof t!="string")continue;let r=t.trim();r&&n.push(Rn.isAbsolute(r)?r:Rn.resolve(Rn.dirname(e),r))}return n}a(Wu,"normalizeConfiguredExtensionPaths");function Ou(){let e=Rn.join(Oe(),"config.json");try{if(!En.existsSync(e))return{};let o=JSON.parse(En.readFileSync(e,"utf-8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let n=o;return{...n,extensions:Wu(e,n.extensions)}}catch(o){let n=o instanceof Error?o.message:String(o);return console.log(s.yellow(`[extensions] Failed to read configured extensions: ${n}`)),{}}}a(Ou,"loadExtensionReloadConfig");async function Nu(){try{return await Hr()}catch(e){let o=e instanceof Error?e.message:String(e);return console.log(s.yellow(`[extensions] Failed to discover default extensions: ${o}`)),[]}}a(Nu,"discoverDefaultExtensionsForReload");async function Du(){let e=Ou(),o=await Hn(e.extensions??[]),n=await Hn(await Nu()),t=await Do(n,o),r=[...t,...o],i=se();if(!i&&r.length>0&&(i=Br({config:e}).activate()),!i)return{reloaded:0,loaded:0,failures:0};let l=Ze(i),c=l.failures.length;await i.reloadExtensions({continueOnError:!0});let d=Ze(i),u=Math.max(0,d.failures.length-c),f=d.loadedExtensions.map(y=>y.path),m=await Do(t,f),k=await Do(o,[...f,...m]);await i.loadExtensions(m,{continueOnError:!0,loadSource:"discovery",stage:"reload"}),await i.loadExtensions(k,{continueOnError:!0,loadSource:"config",stage:"reload"});let v=Ze(i);return{reloaded:Math.max(0,l.loadedExtensions.length-u),loaded:Math.max(0,v.loadedExtensions.length-d.loadedExtensions.length),failures:Math.max(0,v.failures.length-c)}}a(Du,"reloadExtensionRuntimeFromDisk");function Uu(e){return{...e,enabled:!0}}a(Uu,"createManualCompactionConfig");function ir(e){e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace unchanged: ${St(e.runtimeInfo)}`)):console.log(s.dim(" Workspace unchanged."))}a(ir,"printWorkspaceUnchangedNote");var ga=[{name:"help",aliases:["h","?"],description:"Show all available commands",usage:"/help [command]",handler:a(async e=>{if(e.length>0){let o=e[0];de.size===0&&Cn(),de.has(o.toLowerCase())||!!In(o)?dr(o):Qu(o)}else Zu()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
390
390
  /help - Show Command Help
391
391
  `)),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(`
392
392
  Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
@@ -399,30 +399,30 @@ Session saved. Goodbye!`)),await n.exit()},"handler"),detailedHelp:a(()=>{consol
399
399
  `+t))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
400
400
  /cost - Session Cost Report
401
401
  `)),console.log(s.bold("Description:")),console.log(s.dim(" Shows token usage and estimated cost for the current session,")),console.log(s.dim(" broken down by provider and AMA role.")),console.log()},"detailedHelp")},{name:"paste",description:"Inspect pasted text stored in the input buffer",usage:"/paste show <id> | /paste list",argumentHint:"show <id> | list",handler:a(async e=>{let o=e[0]?.toLowerCase();if(!o||o==="help"){console.log(s.cyan(`
402
- /paste - Inspect stored paste contents`)),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=wa();if(!n){console.log(s.yellow(`
402
+ /paste - Inspect stored paste contents`)),console.log(s.dim(" /paste list - Show all pasted text ids in this session")),console.log(s.dim(" /paste show <id> - Print the full content of paste #<id>")),console.log();return}let n=fa();if(!n){console.log(s.yellow(`
403
403
  [No paste registry active]`)),console.log(s.dim(" The REPL composer is not mounted, or no paste has been captured yet."));return}if(o==="list"){let t=n.export();if(t.length===0){console.log(s.dim(`
404
404
  [No pasted content in this session yet]`));return}console.log(s.bold(`
405
405
  Pasted content in this session:
406
406
  `));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(`
407
407
  Usage: /paste show <id>`));return}let i=n.get(r);if(!i){console.log(s.dim(`
408
- [No paste registered with id #${r}]`));return}let l=i.content??"";if(!l&&i.contentHash){let c=await ya(i.contentHash);c&&(l=c)}if(!l){console.log(s.yellow(`
408
+ [No paste registered with id #${r}]`));return}let l=i.content??"";if(!l&&i.contentHash){let c=await pa(i.contentHash);c&&(l=c)}if(!l){console.log(s.yellow(`
409
409
  [Paste #${r} has no stored content (hash ${i.contentHash??"n/a"})]`));return}console.log(s.bold(`
410
410
  Pasted text #${r} (${l.length} chars):
411
411
  `)),console.log(l),console.log();return}console.log(s.yellow(`
412
412
  [Unknown /paste subcommand: ${o}]`)),console.log(s.dim(" Try /paste show <id> or /paste list"))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
413
413
  /paste - Inspect stored paste contents
414
- `)),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 ys(o.gitRoot),i=t.provider,l=Un(i);if(!l){console.log(s.red(`
415
- [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??_o(o.messages),f=Fu(r);console.log(s.dim(`
416
- [Compacting conversation...]`)),n.startCompacting?.();try{let m=await jr(o.messages,f,l,d,c,void 0,u,ns,ts,t.model,!0,l.getEffectiveMaxOutputTokens(t.model));if(!m.compacted){console.log(s.green(`
414
+ `)),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 ps(o.gitRoot),i=t.provider,l=Dn(i);if(!l){console.log(s.red(`
415
+ [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??Po(o.messages),f=Uu(r);console.log(s.dim(`
416
+ [Compacting conversation...]`)),n.startCompacting?.();try{let m=await Or(o.messages,f,l,d,c,void 0,u,Zr,Qr,t.model,!0,l.getEffectiveMaxOutputTokens(t.model));if(!m.compacted){console.log(s.green(`
417
417
  [No compaction needed]`)),console.log(s.dim(`Current token usage: ${m.tokensBefore.toLocaleString()}
418
- `));return}o.messages=m.messages,o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:_o(m.messages),source:o.contextTokenSnapshot?.source??"estimate"},n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(s.green(`
418
+ `));return}o.messages=m.messages,o.contextTokenSnapshot={currentTokens:m.tokensAfter,baselineEstimatedTokens:Po(m.messages),source:o.contextTokenSnapshot?.source??"estimate"},n.onCompactStats?.({tokensBefore:m.tokensBefore,tokensAfter:m.tokensAfter}),n.clearHistory?.(),await n.saveSession(),console.log(s.green(`
419
419
  [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(`
420
420
  [Compaction failed: ${i}]
421
421
  `))}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
422
422
  /compact - Manual Context Compaction
423
423
  `)),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: Optional early trigger below 100; 100 uses physical capacity")),console.log(s.dim(" - compaction.enabled: Controls auto-compaction only; /compact always remains available")),console.log(s.dim(" - compaction.contextWindow: Optional token-window override")),console.log(s.dim(" - compaction.protectionPercent / rollingSummaryPercent / pruningThresholdTokens: Advanced tuning")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /compact ")+"# Compact with default instructions"),console.log(s.dim(" /compact focus on auth logic ")+"# Emphasize authentication in summary"),console.log(),console.log(s.dim(" See also: /help status (shows token usage)")),console.log()},"detailedHelp")},{name:"reload",description:"Reload project rules, skills, and active extensions",handler:a(async(e,o,n,t)=>{console.log(s.cyan(`
424
424
  Reloading project rule files, skills, and runtime extensions...
425
- `));try{let r=await n.reloadAgentsFiles?.()??[],i=Ou(r),l=await Ea(o.gitRoot),c=await ju(),d=c.reloaded+c.loaded,u=c.failures;if(r.length===0&&l===0&&d===0&&u===0){console.log(s.yellow(`No project rule files, skills, or active extensions found.
425
+ `));try{let r=await n.reloadAgentsFiles?.()??[],i=Mu(r),l=await ba(o.gitRoot),c=await Du(),d=c.reloaded+c.loaded,u=c.failures;if(r.length===0&&l===0&&d===0&&u===0){console.log(s.yellow(`No project rule files, skills, or active extensions found.
426
426
  `)),console.log(s.dim(" Create AGENTS.md or CLAUDE.md in your project, add skills, or load extensions with --extension.")),console.log();return}console.log(s.green(`Reloaded successfully:
427
427
  `)),i.global>0&&console.log(s.dim(` - Global: ${i.global} file(s)`)),i.directory>0&&console.log(s.dim(` - Directory: ${i.directory} file(s)`)),i.project>0&&console.log(s.dim(` - Project: ${i.project} file(s)`)),c.reloaded>0&&console.log(s.dim(` - Extensions reloaded: ${c.reloaded} module(s)`)),c.loaded>0&&console.log(s.dim(` - Extensions loaded: ${c.loaded} module(s)`)),l>0&&console.log(s.dim(` - Skills: ${l} skill(s)`)),u>0&&console.log(s.yellow(` - Failures: ${u} recorded (run /extensions for details)`)),console.log(s.dim(" Updated rules, skills, and extensions will apply to subsequent requests in this session.")),console.log();return}catch(r){console.log(s.red(`Failed to reload.
428
428
  `)),console.log(s.dim(` Error: ${r instanceof Error?r.message:String(r)}`)),console.log()}},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
@@ -431,7 +431,7 @@ Reloading project rule files, skills, and runtime extensions...
431
431
  [No active extension runtime]
432
432
  `));return}let o=Ze(e),n=o.tools.filter(t=>t.source.kind==="extension");if(console.log(s.bold(`
433
433
  Extension Runtime:
434
- `)),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=df(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 of(o,t,e,n)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
434
+ `)),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=cf(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 ef(o,t,e,n)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
435
435
  /status - Show Session Status
436
436
  `)),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(" /status runtime ")+"Show SDK runtime mode, identity, and queue counters"),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=se();if(!o){console.log(s.yellow(`
437
437
  [No extension runtime active \u2014 MCP is not available]`));return}let t=Ze(o).capabilityProviders.find(c=>c.id==="mcp");if((e[0]?.toLowerCase()??"status")==="refresh"){console.log(s.dim(`
@@ -440,15 +440,15 @@ MCP Status
440
440
  `)),!t){console.log(s.yellow(" No MCP provider registered.")),console.log(s.dim(` Add mcpServers to ~/.kodax/config.json to enable MCP.
441
441
  `));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(`
442
442
  /mcp - MCP Server Management
443
- `)),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 Oo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:fr(o)});xa(i);return}if(r==="mode"){if(e.length===1){console.log(s.dim(`
443
+ `)),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 No({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:cr(o)});va(i);return}if(r==="mode"){if(e.length===1){console.log(s.dim(`
444
444
  Current repo-intelligence mode: ${s.cyan(t.repoIntelligenceMode??"auto")}`)),console.log(s.dim(`Usage: /repo-intel mode [auto|full|light|off]
445
- `));return}let i=qu(e[1]);if(!i){console.log(s.red(`
445
+ `));return}let i=Bu(e[1]);if(!i){console.log(s.red(`
446
446
  [Invalid repo-intelligence mode: ${e[1]}]`)),console.log(s.dim(`Usage: /repo-intel mode [auto|full|light|off]
447
- `));return}let l=ba({mode:i},{repoIntelligenceMode:i},n,t);ve(`Repo intelligence mode: ${i}`,l);return}if(r==="trace"){let i=e[1]?.toLowerCase();if(!i){console.log(s.dim(`
447
+ `));return}let l=ka({mode:i},{repoIntelligenceMode:i},n,t);Je(`Repo intelligence mode: ${i}`,l);return}if(r==="trace"){let i=e[1]?.toLowerCase();if(!i){console.log(s.dim(`
448
448
  Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)),console.log(s.dim(`Usage: /repo-intel trace [on|off|toggle]
449
- `));return}let l=Ku(i,t.repoIntelligenceTrace??!1);if(l===null){console.log(s.red(`
449
+ `));return}let l=Gu(i,t.repoIntelligenceTrace??!1);if(l===null){console.log(s.red(`
450
450
  [Invalid trace value: ${e[1]}]`)),console.log(s.dim(`Usage: /repo-intel trace [on|off|toggle]
451
- `));return}let c=ba({trace:l},{repoIntelligenceTrace:l},n,t);ve(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(s.yellow(`
451
+ `));return}let c=ka({trace:l},{repoIntelligenceTrace:l},n,t);Je(`Repo intelligence trace: ${l?"on":"off"}`,c);return}if(r==="refresh"){console.log(s.yellow(`
452
452
  [Repo intelligence refresh is automatic in this build]`)),console.log(s.dim(`Use /repo-intel status to inspect the current engine state.
453
453
  `));return}console.log(s.red(`
454
454
  [Unknown /repo-intel subcommand: ${e[0]}]`)),console.log(s.dim(`Usage: /repo-intel [status|mode|trace]
@@ -456,7 +456,7 @@ Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)
456
456
  /repo-intel - Built-in Repo Intelligence
457
457
  `)),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(`
458
458
  [/repointel is deprecated; use /repo-intel status]
459
- `)),r==="status"){let i=await Oo({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:fr(o)});xa(i);return}if(r==="mode"){console.log(s.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
459
+ `)),r==="status"){let i=await No({mode:t.repoIntelligenceMode,trace:t.repoIntelligenceTrace,probe:!0,workspaceRoot:cr(o)});va(i);return}if(r==="mode"){console.log(s.dim(`Use /repo-intel mode [auto|full|light|off] to change repo-intelligence mode.
460
460
  `));return}if(r==="trace"){console.log(s.dim(`Use /repo-intel trace [on|off|toggle] to change repo-intelligence trace output.
461
461
  `));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.
462
462
  `));return}console.log(s.dim(`Usage: /repointel [status]
@@ -466,29 +466,29 @@ Current repo-intelligence trace: ${s.cyan(t.repoIntelligenceTrace?"on":"off")}`)
466
466
  Child-task provider fallback: `)+s.yellow("off")+s.dim(" (no chain configured)")):(console.log(s.dim(`
467
467
  Child-task provider fallback: `)+s.green("on")),console.log(s.dim(" Order: ")+s.cyan(r.join(" \u2192 ")))),console.log(s.dim(`
468
468
  When a child's primary provider is exhausted/down, KodaX re-runs it`)),console.log(s.dim(` on the next provider in this list. Set: /fallback ark-coding,kimi-code
469
- `));return}if(i==="off"||i==="clear"||i==="none"){be({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(s.green(`
469
+ `));return}if(i==="off"||i==="clear"||i==="none"){$e({fallbackProviders:void 0}),delete process.env.KODAX_FALLBACK_PROVIDERS,console.log(s.green(`
470
470
  \u2713 `)+s.dim(`Child-task provider fallback disabled.
471
471
  `));return}let l=e.join(",").split(",").map(c=>c.trim()).filter(Boolean);if(l.length===0){console.log(s.red(`
472
472
  [/fallback: no provider ids given]`)),console.log(s.dim(`Usage: /fallback ark-coding,kimi-code (or /fallback off)
473
- `));return}be({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(s.green(`
473
+ `));return}$e({fallbackProviders:l}),process.env.KODAX_FALLBACK_PROVIDERS=l.join(","),console.log(s.green(`
474
474
  \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).
475
475
  `))},"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=lo(t.permissionMode,"accept-edits")??"accept-edits";console.log(s.dim(`
476
- Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];Go.includes(r)?(t.permissionMode=r,n.setPermissionMode?.(r),pt(r),console.log(s.cyan(`
476
+ Current mode: ${s.cyan(i)}`)),console.log(s.dim("Usage: /mode [plan|accept-edits|auto]"));return}let r=e[0];qo.includes(r)?(n.setPermissionMode?await n.setPermissionMode(r):t.permissionMode=r,dt(r),console.log(s.cyan(`
477
477
  [Switched to ${r} mode] (saved)`))):console.log(s.red(`
478
478
  [Unknown mode: ${e[0]}. Use: plan | accept-edits | auto]`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
479
479
  /mode - Switch Permission Mode
480
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /mode ")+"Show current permission mode"),console.log(s.dim(" /mode plan ")+"Read-only: blocks all modifications"),console.log(s.dim(" /mode accept-edits ")+"File edits auto, bash requires confirmation"),console.log(s.dim(" /mode auto ")+"LLM classifier reviews each tool call (FEATURE_092)"),console.log(s.dim(" /mode auto-in-project ")+s.gray("(deprecated alias for auto; will be removed in v0.7.38)")),console.log(),console.log(s.bold("Permission Levels:")),console.log(s.yellow(" plan ")+s.dim("- Read-only planning, no file/command modifications")),console.log(s.green(" accept-edits ")+s.dim("- File edits auto-approved, bash still requires confirmation")),console.log(s.green(" auto ")+s.dim("- LLM classifier (engine=llm, default) or rules engine reviews each call")),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - .kodax/ directory and project-external paths always require confirmation")),console.log(s.dim(" - Mode is saved to ~/.kodax/config.json (user-level)")),console.log()},"detailedHelp")},{name:"auto-engine",description:"Show or set auto-mode classifier engine (llm | rules)",usage:"/auto-engine [llm|rules]",handler:a(async(e,o,n)=>{let t=n.getAutoModeStats?.();if(!t){console.log(s.yellow(`
480
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /mode ")+"Show current permission mode"),console.log(s.dim(" /mode plan ")+"Read-only: blocks all modifications"),console.log(s.dim(" /mode accept-edits ")+"File edits auto, bash requires confirmation"),console.log(s.dim(" /mode auto ")+"LLM classifier reviews each tool call (FEATURE_092)"),console.log(s.dim(" /mode auto-in-project ")+s.gray("(deprecated alias for auto; will be removed in v0.7.38)")),console.log(),console.log(s.bold("Permission Levels:")),console.log(s.yellow(" plan ")+s.dim("- Read-only planning, no file/command modifications")),console.log(s.green(" accept-edits ")+s.dim("- File edits auto-approved, bash still requires confirmation")),console.log(s.green(" auto ")+s.dim("- LLM classifier (engine=llm, default) or rules engine reviews each call")),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - .kodax/ directory and project-external paths always require confirmation")),console.log(s.dim(" - Mode is saved to ~/.kodax/config.json (user-level)")),console.log()},"detailedHelp")},{name:"auto-engine",description:"Show or set auto-mode classifier engine (llm | rules)",usage:"/auto-engine [llm|rules]",handler:a(async(e,o,n)=>{let t=await n.getAutoModeStats?.();if(!t){console.log(s.yellow(`
481
481
  [auto-engine] not in auto mode \u2014 switch via /mode auto first`));return}if(e.length===0){console.log(s.dim(`
482
- Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denials: ${t.denials.consecutive}`)),console.log(s.dim(` cumulative denials: ${t.denials.cumulative}`)),console.log(s.dim(` breaker errors: ${t.breaker.timestamps.filter(i=>i>=Date.now()-600*1e3).length}`)),console.log(s.dim("Usage: /auto-engine [llm|rules]"));return}let r=e[0];if(r!=="llm"&&r!=="rules"){console.log(s.red(`
483
- [auto-engine] unknown engine "${e[0]}" \u2014 use llm or rules`));return}n.setAutoModeEngine?.(r),console.log(s.cyan(`
482
+ Classifier engine: ${s.cyan(t.engine)}`)),t.classifierModel&&console.log(s.dim(` classifier model: ${t.classifierModel}`)),console.log(s.dim(` consecutive denials: ${t.denials.consecutive}`)),console.log(s.dim(` cumulative denials: ${t.denials.cumulative}`)),console.log(s.dim(` breaker errors: ${t.breaker.timestamps.filter(i=>i>=Date.now()-600*1e3).length}`)),console.log(s.dim("Usage: /auto-engine [llm|rules]"));return}let r=e[0];if(r!=="llm"&&r!=="rules"){console.log(s.red(`
483
+ [auto-engine] unknown engine "${e[0]}" \u2014 use llm or rules`));return}await n.setAutoModeEngine?.(r),console.log(s.cyan(`
484
484
  [auto-engine] switched to ${r}`)),console.log(r==="rules"?s.dim(" every non-Tier-1 tool call now escalates to user confirmation"):s.dim(" classifier consultation resumed; threshold downgrades still apply"))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
485
485
  /auto-engine - Auto-Mode Classifier Engine Toggle
486
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto-engine ")+"Show current engine + denial/breaker counts"),console.log(s.dim(" /auto-engine llm ")+"Resume classifier consultation (default)"),console.log(s.dim(" /auto-engine rules ")+"Skip classifier; every non-Tier-1 call asks user"),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - Only meaningful in auto mode (/mode auto).")),console.log(s.dim(" - The classifier may auto-downgrade to rules after 3 consecutive blocks,")),console.log(s.dim(" 20 cumulative blocks, or 5 errors in a 10-minute window. /auto-engine llm")),console.log(s.dim(" manually flips back to llm.")),console.log(s.dim(" - Override via env: KODAX_AUTO_MODE_ENGINE=rules.")),console.log()},"detailedHelp")},{name:"auto-denials",description:"Show auto-mode classifier denial tracker + circuit breaker stats",usage:"/auto-denials",handler:a(async(e,o,n)=>{let t=n.getAutoModeStats?.();if(!t){console.log(s.yellow(`
486
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /auto-engine ")+"Show current engine + denial/breaker counts"),console.log(s.dim(" /auto-engine llm ")+"Resume classifier consultation (default)"),console.log(s.dim(" /auto-engine rules ")+"Skip classifier; every non-Tier-1 call asks user"),console.log(),console.log(s.bold("Notes:")),console.log(s.dim(" - Only meaningful in auto mode (/mode auto).")),console.log(s.dim(" - The classifier may auto-downgrade to rules after 3 consecutive blocks,")),console.log(s.dim(" 20 cumulative blocks, or 5 errors in a 10-minute window. /auto-engine llm")),console.log(s.dim(" manually flips back to llm.")),console.log(s.dim(" - Override via env: KODAX_AUTO_MODE_ENGINE=rules.")),console.log()},"detailedHelp")},{name:"auto-denials",description:"Show auto-mode classifier denial tracker + circuit breaker stats",usage:"/auto-denials",handler:a(async(e,o,n)=>{let t=await n.getAutoModeStats?.();if(!t){console.log(s.yellow(`
487
487
  [auto-denials] not in auto mode \u2014 switch via /mode auto first`));return}console.log(s.cyan(`
488
488
  [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(`
489
489
  /auto-denials - Auto-Mode Classifier Diagnostic Dump
490
490
  `)),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(`
491
- [Session saved]`)),dr(o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
491
+ [Session saved]`)),ir(o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
492
492
  /save - Save Current Session
493
493
  `)),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(`
494
494
  [Usage: /load <session-id>]`)),await n.listSessions();return}await n.loadSession(e[0])==="missing"&&console.log(s.red(`
@@ -513,116 +513,110 @@ Classifier engine: ${s.cyan(t.engine)}`)),console.log(s.dim(` consecutive denia
513
513
  /history - Show Conversation History
514
514
  `)),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(`
515
515
  [Usage: /delete <session-id> or /delete all]`)),await n.listSessions?.();return}e[0]==="all"?(await n.deleteAllSessions?.(),console.log(s.green(`
516
- [All sessions deleted]`)),dr(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
517
- [Session deleted: ${e[0]}]`)),dr(o))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
516
+ [All sessions deleted]`)),ir(o)):(await n.deleteSession?.(e[0]),console.log(s.green(`
517
+ [Session deleted: ${e[0]}]`)),ir(o))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
518
518
  /delete - Delete Saved Sessions
519
- `)),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=Bo().providerModels;if(e.length===0){console.log(s.bold(`
519
+ `)),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=Go().providerModels;if(e.length===0){console.log(s.bold(`
520
520
  Available Providers:
521
- `));let c=ms(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,k=m?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${k} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${Kn(d.capabilityProfile)}`));let v=He(d.name,r),y=m?t.model:null;for(let $ of v){let x=m&&(y===$||!y&&$===d.model)?s.cyan(">"):" ";console.log(` ${x} ${$}`)}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
521
+ `));let c=cs(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,k=m?s.cyan(" *"):"";console.log(` ${s.bold(d.name)}${k} ${u}${f}`),d.capabilityProfile.transport==="cli-bridge"&&console.log(s.yellow(` ! ${Gn(d.capabilityProfile)}`));let v=Fe(d.name,r),y=m?t.model:null;for(let $ of v){let x=m&&(y===$||!y&&$===d.model)?s.cyan(">"):" ";console.log(` ${x} ${$}`)}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
522
522
  `));return}let i=(e[0]??"").trim();if(!i)return;if(i.startsWith("/")){let c=i.slice(1);if(!c){console.log(s.red(`
523
- [Missing model name after /]`));return}let d=He(t.provider,r);if(!d.includes(c)){console.log(s.red(`
523
+ [Missing model name after /]`));return}let d=Fe(t.provider,r);if(!d.includes(c)){console.log(s.red(`
524
524
  [Unknown model: ${c}]`)),console.log(s.dim(`Available models for ${t.provider}: ${d.join(", ")}
525
- `));return}be({model:c}),n.switchProvider?.(t.provider,c),console.log(s.cyan(`
525
+ `));return}$e({model:c}),n.switchProvider?.(t.provider,c),console.log(s.cyan(`
526
526
  [Switched to ${c}] (saved)`));return}if(i.includes("/")){let c=i.indexOf("/"),d=i.slice(0,c),u=i.slice(c+1);if(!u||!d){console.log(s.red(`
527
- [Invalid format. Use: /model <provider>/<model>]`));return}if(!We(d)){console.log(s.red(`
528
- [Unknown provider: ${d}]`)),console.log(s.dim(`Available: ${Oe().join(", ")}
529
- `));return}let f=He(d,r);if(!f.includes(u)){console.log(s.red(`
527
+ [Invalid format. Use: /model <provider>/<model>]`));return}if(!Me(d)){console.log(s.red(`
528
+ [Unknown provider: ${d}]`)),console.log(s.dim(`Available: ${We().join(", ")}
529
+ `));return}let f=Fe(d,r);if(!f.includes(u)){console.log(s.red(`
530
530
  [Unknown model: ${u}]`)),console.log(s.dim(`Available models for ${d}: ${f.join(", ")}
531
- `));return}be({provider:d,model:u}),n.switchProvider?.(d,u),console.log(s.cyan(`
532
- [Switched to ${d}/${u}] (saved)`));return}let l=i;We(l)?(be({provider:l,model:void 0}),n.switchProvider?.(l),console.log(s.cyan(`
531
+ `));return}$e({provider:d,model:u}),n.switchProvider?.(d,u),console.log(s.cyan(`
532
+ [Switched to ${d}/${u}] (saved)`));return}let l=i;Me(l)?($e({provider:l,model:void 0}),n.switchProvider?.(l),console.log(s.cyan(`
533
533
  [Switched to ${l}] (saved)`))):(console.log(s.red(`
534
- [Unknown provider: ${l}]`)),console.log(s.dim(`Available: ${Oe().join(", ")}
534
+ [Unknown provider: ${l}]`)),console.log(s.dim(`Available: ${We().join(", ")}
535
535
  `)))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
536
536
  /model - Switch LLM Provider/Model
537
- `)),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){jn(),console.log(s.dim(`
537
+ `)),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){Un(),console.log(s.dim(`
538
538
  [Cleared all learned capability overrides]
539
- `));return}let m=f.indexOf("/"),k=m===-1?f:f.slice(0,m),v=m===-1?void 0:f.slice(m+1)||void 0;jn(k,v),console.log(s.dim(`
539
+ `));return}let m=f.indexOf("/"),k=m===-1?f:f.slice(0,m),v=m===-1?void 0:f.slice(m+1)||void 0;Un(k,v),console.log(s.dim(`
540
540
  [Cleared learned capability overrides for ${k}${v?`/${v}`:""}]
541
- `));return}if(r==="probe"){let f=Ho(t.provider,t.model).filter(k=>k!=="auto"&&k!=="off"),m=`${t.provider}/${t.model??"(default)"}`;console.log(s.dim(`
542
- [Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let k=await As({provider:t.provider,model:t.model,efforts:f,resolve:Un,now:a(()=>new Date().toISOString(),"now")});for(let v of k){let y=v.status==="accepted"?s.green("\u2713"):v.status==="rejected"?s.red("\u2717"):s.yellow("!");console.log(s.dim(` ${y} ${v.effort}${v.error?` \u2014 ${v.error}`:""}`))}console.log(s.dim(` (rejections recorded; undo with /provider forget-capability)
541
+ `));return}if(r==="probe"){let f=Bo(t.provider,t.model).filter(k=>k!=="auto"&&k!=="off"),m=`${t.provider}/${t.model??"(default)"}`;console.log(s.dim(`
542
+ [Probing ${m} \u2014 ${f.length} efforts, minimal requests\u2026]`));try{let k=await Ss({provider:t.provider,model:t.model,efforts:f,resolve:Dn,now:a(()=>new Date().toISOString(),"now")});for(let v of k){let y=v.status==="accepted"?s.green("\u2713"):v.status==="rejected"?s.red("\u2717"):s.yellow("!");console.log(s.dim(` ${y} ${v.effort}${v.error?` \u2014 ${v.error}`:""}`))}console.log(s.dim(` (rejections recorded; undo with /provider forget-capability)
543
543
  `))}catch(k){let v=k instanceof Error?k.message:String(k);console.log(s.red(`
544
544
  [Probe failed: ${v}]
545
- `))}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(!We(i)){console.log(s.red(`
546
- [Unknown provider: ${i}]`)),console.log(s.dim(`Available: ${Oe().join(", ")}
547
- `));return}let c=ds(i,l);if(!c){console.log(s.red(`
548
- [Provider details unavailable: ${i}]`)),console.log();return}let d=hs(i,l,t.reasoningMode);console.log(s.bold(`
545
+ `))}return}let i=t.provider,l=t.model;if(r)if(r.includes("/")){let f=r.indexOf("/");i=r.slice(0,f).trim(),l=r.slice(f+1).trim()||void 0}else i=r,l=void 0;if(!Me(i)){console.log(s.red(`
546
+ [Unknown provider: ${i}]`)),console.log(s.dim(`Available: ${We().join(", ")}
547
+ `));return}let c=is(i,l);if(!c){console.log(s.red(`
548
+ [Provider details unavailable: ${i}]`)),console.log();return}let d=ms(i,l,t.reasoningMode);console.log(s.bold(`
549
549
  Provider Details:
550
- `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${gs(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let f of ws(c))console.log(s.dim(` - ${f}`));console.log(s.dim(` - Session effort: ${Ca(t.effort)}`));let u=Er(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(`
550
+ `)),console.log(s.dim(` Provider: ${s.cyan(c.provider)}${c.model?` / ${s.cyan(c.model)}`:""}`)),console.log(s.dim(` Source: ${us(c.sourceKind)}`)),console.log(),console.log(s.bold("Capability Matrix:"));for(let f of fs(c))console.log(s.dim(` - ${f}`));console.log(s.dim(` - Session effort: ${Aa(t.effort)}`));let u=br(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(`
551
551
  /provider - Inspect Provider Semantics
552
- `)),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=qn(t.provider,t.model),l=t.thinking?s.green("ON"):s.dim("OFF");console.log(s.dim(`
553
- Thinking: ${l}`)),console.log(s.dim(`Reasoning mode: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Effective control: ${s.cyan(zn(i))}`)),console.log(s.dim(`Actual execution: ${Xn(t.reasoningMode,i)}`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
554
- `));return}let r=e[0].toLowerCase();if(r==="on"||r==="off"||Dn.includes(r)){let i=r==="on"?"auto":r==="off"?"off":r,l=$a(i,n,t);ve(`Reasoning mode: ${i}`,l);return}console.log(s.red(`
555
- [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /thinking on|off|auto|quick|balanced|deep
556
- `))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
557
- /thinking - Legacy Alias for Reasoning Mode
558
- `)),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=qn(t.provider,t.model);console.log(s.dim(`
559
- 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(zn(l))}`)),console.log(s.dim(`Actual execution: ${Xn(t.reasoningMode,l)}`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
560
- `));return}let r=e[0].toLowerCase();if(!Dn.includes(r)){console.log(s.red(`
561
- [Invalid reasoning mode: ${e[0]}]`)),console.log(s.dim(`Usage: /reasoning off|auto|quick|balanced|deep
562
- `));return}let i=$a(r,n,t);ve(`Reasoning mode: ${r}`,i)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
563
- /reasoning - Set Reasoning Mode
564
- `)),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=Gu(t);if(e.length===0){let f=Sa(t);console.log(s.dim(`
565
- Reasoning effort: ${s.cyan(f)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Available: ${Ho(t.provider,t.model).join(", ")}`)),console.log(s.dim(`${r}
566
- `));return}if(e.length>1){console.log(s.red(`
567
- [Reasoning effort accepts exactly one value]`)),console.log(s.dim(`${r}
568
- `));return}let i=e[0],l;try{l=Rr(i)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(s.red(`
569
- [Invalid reasoning effort: ${m}]`)),console.log(s.dim(`${r}
570
- `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l,d=zu(c,t),u=Xu(c,n,t);ve(`Reasoning effort: ${Sa(d)}`,u)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
552
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /provider ")+"Inspect the current provider/model"),console.log(s.dim(" /provider <provider> ")+"Inspect a provider using its default model"),console.log(s.dim(" /provider <provider>/<model> ")+"Inspect a specific provider/model pair"),console.log(s.dim(" /provider probe ")+"Send minimal requests to learn which efforts the model rejects"),console.log(s.dim(" /provider forget-capability [<provider>[/<model>]]")),console.log(s.dim(" ")+"Clear learned (observed/probed) effort rejections; re-offer those rungs"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Shows the provider capability matrix and common 029 policy outcomes.")),console.log(s.dim(" Use this to understand why long-running, harness, or evidence-heavy flows may warn or block.")),console.log()},"detailedHelp")},{name:"thinking",aliases:["think","t"],description:"Show or set native reasoning effort",usage:"/thinking [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await ar("thinking",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
553
+ /thinking - Set Native Reasoning Effort
554
+ `)),console.log(s.bold("Usage:")),ya("thinking"),console.log(s.dim(" /t ")+"Alias for /thinking"),console.log()},"detailedHelp")},{name:"reasoning",aliases:["reason"],description:"Show or set native reasoning effort",usage:"/reasoning [none|auto|low|medium|high|xhigh|max]",handler:a(async(e,o,n,t)=>{await ar("reasoning",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
555
+ /reasoning - Set Native Reasoning Effort
556
+ `)),console.log(s.bold("Usage:")),ya("reasoning"),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)=>{await ar("effort",e,n,t)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
571
557
  /effort - Set Native Reasoning Effort
572
558
  `)),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(`
573
559
  Run /effort to see the active model's supported values.`)),console.log()},"detailedHelp")},{name:"agent-mode",aliases:["am"],description:"Show or set agent mode",usage:"/agent-mode [ama|sa|toggle]",handler:a(async(e,o,n,t)=>{if(e.length===0){console.log(s.dim(`
574
560
  Agent mode: ${s.cyan(t.agentMode.toUpperCase())}`)),console.log(s.dim(`Usage: /agent-mode [ama|sa|toggle]
575
561
  `));return}let r=e[0]?.toLowerCase();if(r==="amaw"||r==="ama-workflow"){console.log(s.yellow(`
576
- [AMAW was retired in v0.7.72. Use AMA; Workflow execution now requires an explicit /workflow request.]`));return}let i=r==="toggle"?ci(t.agentMode):r==="ama"||r==="sa"?r:void 0;if(!i){console.log(s.red(`
562
+ [AMAW was retired in v0.7.72. Use AMA; Workflow execution now requires an explicit /workflow request.]`));return}let i=r==="toggle"?si(t.agentMode):r==="ama"||r==="sa"?r:void 0;if(!i){console.log(s.red(`
577
563
  [Invalid agent mode: ${e[0]}]`)),console.log(s.dim(`Usage: /agent-mode [ama|sa|toggle]
578
- `));return}let l=Vu(i,n,t);ve(`Agent mode: ${i.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
564
+ `));return}let l=Xu(i,n,t);Je(`Agent mode: ${i.toUpperCase()}`,l)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
579
565
  /agent-mode - Adaptive Multi-Agent Mode Control
580
- `)),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 require an explicit /workflow request"),console.log(s.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(s.dim(" /agent-mode toggle ")+"Cycle AMA -> 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. Sub-agents are available when parallel")),console.log(s.dim(" work materially improves speed or quality. Workflows only run when explicitly")),console.log(s.dim(" requested with /workflow or by naming a Workflow.")),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"),pt("auto"),console.log(s.cyan(`
566
+ `)),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 require an explicit /workflow request"),console.log(s.dim(" /agent-mode sa ")+"Force single-agent execution"),console.log(s.dim(" /agent-mode toggle ")+"Cycle AMA -> 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. Sub-agents are available when parallel")),console.log(s.dim(" work materially improves speed or quality. Workflows only run when explicitly")),console.log(s.dim(" requested with /workflow or by naming a Workflow.")),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"),dt("auto"),console.log(s.cyan(`
581
567
  [Switched to auto mode] (saved)`))},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
582
568
  /auto - Quick Switch to Auto Mode
583
- `)),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 ln(an(o),"skill");return}await rf(e,o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
569
+ `)),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 cn(ln(o),"skill");return}await tf(e,o)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
584
570
  /skill - Skill Namespace
585
- `)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(s.dim(" /skill reload ")+"Reload skills from disk"),console.log(s.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(s.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(s.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(s.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /skill ")+"# List all skills"),console.log(s.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(s.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(s.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(s.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let i=Bo().verifierLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
571
+ `)),console.log(s.bold("Usage:")),console.log(s.dim(" /skill ")+"List all available skills"),console.log(s.dim(" /<skill-name> [args] ")+"Invoke a skill when no command uses that name"),console.log(s.dim(" /skill:<name> [args] ")+"Invoke a skill with the compatibility form"),console.log(s.dim(" /skill reload ")+"Reload skills from disk"),console.log(s.dim(" /skill pending ")+"List pending method-guide learning suggestions"),console.log(),console.log(s.bold("Description:")),console.log(s.dim(" Direct slash skill invocation follows the Claude Code style.")),console.log(s.dim(" Built-in and extension commands keep priority when names overlap.")),console.log(s.dim(" The /skill:<name> form remains supported for compatibility.")),console.log(s.dim(" Skills can also be triggered by natural language - just ask!")),console.log(),console.log(s.bold("Examples:")),console.log(s.dim(" /skill ")+"# List all skills"),console.log(s.dim(" /skill reload ")+"# Reload skills after editing ~/.kodax/skills"),console.log(s.dim(" /code-review src/ ")+"# Invoke code-review skill"),console.log(s.dim(" /skill:code-review src/ ")+"# Compatibility form"),console.log(s.dim(" /skill:tdd auth ")+"# Invoke TDD skill"),console.log()},"detailedHelp")},{name:"verifier-log",description:"Toggle Sidecar Verifier log line (off by default)",usage:"/verifier-log [on|off]",argumentHint:"on | off",handler:a(async e=>{let o=e[0]?.toLowerCase(),n=process.env.KODAX_VERIFIER_LOG==="1";if(!o){let i=Go().verifierLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
586
572
  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]
587
573
  `));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(`
588
574
  [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /verifier-log [on|off]
589
- `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Qe({verifierLog:t});ve(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
575
+ `));return}t?process.env.KODAX_VERIFIER_LOG="1":delete process.env.KODAX_VERIFIER_LOG;let r=Eo({verifierLog:t});Je(`Sidecar Verifier log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
590
576
  /verifier-log - Sidecar Verifier Log Toggle
591
- `)),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=Bo().stallLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
577
+ `)),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=Go().stallLog===!0,l=n?"on":"off",c=i===n?"":` (env=${n?"on":"off"}, config=${i?"on":"off"})`;console.log(s.dim(`
592
578
  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]
593
579
  `));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(`
594
580
  [Invalid value: ${e[0]}]`)),console.log(s.dim(`Usage: /stall-log [on|off]
595
- `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Qe({stallLog:t});ve(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
581
+ `));return}t?process.env.KODAX_STALL_LOG="1":delete process.env.KODAX_STALL_LOG;let r=Eo({stallLog:t});Je(`Stall Sidecar log: ${t?"on":"off"}`,r)},"handler"),detailedHelp:a(()=>{console.log(s.cyan(`
596
582
  /stall-log - Stall Sidecar Log Toggle
597
- `)),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")},St,$t,bt,Oi,la,Jt,Zt,da,er],Hu={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 Bu(e){let o=Eo();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(Bu,"getCommandsForCategory");function pr(e){return e!=="off"}a(pr,"reasoningModeToLegacyThinking");function Ca(e){return e==="none"?"off":e??"auto"}a(Ca,"formatReasoningEffortDisplay");function Gu(e){return`Usage: /effort ${Ho(e.provider,e.model).join("|")}|<provider-value>`}a(Gu,"formatReasoningEffortUsage");function Sa(e){let o=ps(e);return fs({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(Sa,"formatCurrentReasoningEffortStatus");function qu(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(qu,"normalizeRepoIntelPublicMode");function Ku(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(Ku,"resolveToggleFlag");function Qe(e){try{return be(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Qe,"persistUserConfig");function ve(e,o){if(o.saved){console.log(s.cyan(`
583
+ `)),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")},ht,yt,kt,Pi,ra,Kt,Xt,ia,Yt],ju={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 Fu(e){let o=Co();return e.map(n=>o.get(n)).filter(n=>n!==void 0).filter(n=>n.userInvocable!==!1)}a(Fu,"getCommandsForCategory");function xa(e){return e!=="off"}a(xa,"reasoningModeToLegacyThinking");function Aa(e){return e==="none"?"off":e??"auto"}a(Aa,"formatReasoningEffortDisplay");function Ra(e){return Bo(e.provider,e.model).map(o=>o==="off"?"none":o)}a(Ra,"getCanonicalReasoningEffortOptions");function Hu(e,o){return`Usage: /${e} ${Ra(o).join("|")}|<provider-value>`}a(Hu,"formatReasoningEffortUsage");function ha(e){let o=ds(e);return ls({provider:e.provider,model:e.model,effort:o,effortOverride:e.effortOverride,thinking:e.thinking,reasoningMode:e.reasoningMode})}a(ha,"formatCurrentReasoningEffortStatus");function Bu(e){let o=e?.trim().toLowerCase();return o==="auto"?"auto":o==="full"?"full":o==="light"?"light":o==="off"?"off":null}a(Bu,"normalizeRepoIntelPublicMode");function Gu(e,o){return e?e==="toggle"?!o:e==="on"||e==="true"||e==="1"?!0:e==="off"||e==="false"||e==="0"?!1:null:null}a(Gu,"resolveToggleFlag");function Eo(e){try{return $e(e),{saved:!0}}catch(o){return{saved:!1,error:o instanceof Error?o:new Error(String(o))}}}a(Eo,"persistUserConfig");function Je(e,o){if(o.saved){console.log(s.cyan(`
598
584
  [${e}] (saved)`));return}console.log(s.yellow(`
599
- [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(ve,"printPersistedCommandStatus");function $a(e,o,n){let t=pr(e),r=e!=="off"&&n.effort==="none",i=Qe({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($a,"applyReasoningMode");function Ia(e){return e==="none"?"off":"auto"}a(Ia,"resolveReasoningModeAfterEffort");function zu(e,o){let n=Ia(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:pr(n)}}a(zu,"resolveConfigAfterReasoningEffort");function Xu(e,o,n){let t=Ia(e),r=pr(t),i=Qe({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(Xu,"applyReasoningEffort");function Vu(e,o,n){let t=Qe({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(Vu,"applyAgentMode");function ba(e,o,n,t){let r=Qe(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(ba,"applyRepoIntelligenceRuntimeConfig");function Yu(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(Yu,"formatRepoIntelligenceSummary");function fr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(fr,"getRepoIntelInspectionWorkspaceRoot");function Ju(e){return e.status}a(Ju,"formatRepoIntelStatusLabel");function Zu(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(Zu,"formatRepoIntelActiveEngine");function xa(e){console.log(s.bold(`
585
+ [${e}]`)),console.log(s.red(`[Config save failed: ${o.error.message}]`))}a(Je,"printPersistedCommandStatus");var qu={on:"auto",off:"none",quick:"low",balanced:"medium",deep:"high",med:"medium"};async function ar(e,o,n,t){let r=Hu(e,t);if(o.length===0){let f=ha(t);console.log(s.dim(`
586
+ Reasoning effort: ${s.cyan(f)}`)),console.log(s.dim(`Compatibility: ${s.cyan(t.reasoningMode)}`)),console.log(s.dim(`Available: ${Ra(t).join(", ")}`)),console.log(s.dim(`${r}
587
+ `));return}if(o.length>1){console.log(s.red(`
588
+ [Reasoning effort accepts exactly one value]`)),console.log(s.dim(`${r}
589
+ `));return}let i=o[0].toLowerCase(),l;try{l=$r(qu[i]??i)}catch(f){let m=f instanceof Error?f.message:String(f);console.log(s.red(`
590
+ [Invalid reasoning effort: ${m}]`)),console.log(s.dim(`${r}
591
+ `));return}let c=l==="auto"||l==="unset"||l==="clear"||l==="reset"?void 0:l;if(c==="none"&&!Bo(t.provider,t.model).includes("off")){let f=t.model?`${t.provider}/${t.model}`:t.provider;console.log(s.red(`
592
+ [${f} does not support disabling reasoning]`)),console.log(s.dim(`${r}
593
+ `));return}let d=zu(c,t),u=Ku(c,n,t);Je(`Reasoning effort: ${ha(d)}`,u)}a(ar,"handleReasoningEffortCommand");function ya(e){console.log(s.dim(` /${e} `)+"Show current native reasoning effort"),console.log(s.dim(` /${e} none `)+"Disable reasoning when supported"),console.log(s.dim(` /${e} auto `)+"Clear the explicit effort override"),console.log(s.dim(` /${e} low `)+"Use low native reasoning effort"),console.log(s.dim(` /${e} medium `)+"Use medium native reasoning effort"),console.log(s.dim(` /${e} high `)+"Use high native reasoning effort"),console.log(s.dim(` /${e} xhigh `)+"Use extra-high native reasoning effort"),console.log(s.dim(` /${e} max `)+"Use maximum native reasoning effort")}a(ya,"printReasoningEffortHelp");function Ea(e){return e==="none"?"off":"auto"}a(Ea,"resolveReasoningModeAfterEffort");function zu(e,o){let n=Ea(e);return{...o,effort:e,effortOverride:e!==void 0,reasoningMode:n,thinking:xa(n)}}a(zu,"resolveConfigAfterReasoningEffort");function Ku(e,o,n){let t=Ea(e),r=xa(t),i=Eo({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(Ku,"applyReasoningEffort");function Xu(e,o,n){let t=Eo({agentMode:e});return o.setAgentMode?o.setAgentMode(e):n.agentMode=e,t}a(Xu,"applyAgentMode");function ka(e,o,n,t){let r=Eo(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(ka,"applyRepoIntelligenceRuntimeConfig");function Vu(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(Vu,"formatRepoIntelligenceSummary");function cr(e){return e.runtimeInfo?.workspaceRoot??e.gitRoot??e.runtimeInfo?.executionCwd}a(cr,"getRepoIntelInspectionWorkspaceRoot");function Yu(e){return e.status}a(Yu,"formatRepoIntelStatusLabel");function Ju(e){return e.effectiveEngine==="off"?"off":e.effectiveEngine}a(Ju,"formatRepoIntelActiveEngine");function va(e){console.log(s.bold(`
600
594
  Repo Intelligence:
601
- `)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(Zu(e))}`)),console.log(s.dim(` Status: ${s.cyan(Ju(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(xa,"printRepoIntelStatus");function Aa(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(Aa,"printCommandSection");function Qu(){console.log(s.bold(`
595
+ `)),console.log(s.dim(` Mode: ${s.cyan(e.configuredMode)}`)),console.log(s.dim(` Engine: ${s.cyan(Ju(e))}`)),console.log(s.dim(` Status: ${s.cyan(Yu(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(va,"printRepoIntelStatus");function Sa(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(Sa,"printCommandSection");function Zu(){console.log(s.bold(`
602
596
  Available Commands:
603
- `));let e=Eo(),o=new Set;for(let[t,r]of Object.entries(Hu)){let i=Bu(r);if(i.length!==0){for(let l of i)o.add(l.name.toLowerCase());Aa(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 af()){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"])Aa(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(Qu,"printHelp");function ef(e){let o=Hr({topic:e});if(console.log(`
597
+ `));let e=Co(),o=new Set;for(let[t,r]of Object.entries(ju)){let i=Fu(r);if(i.length!==0){for(let l of i)o.add(l.name.toLowerCase());Sa(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 sf()){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"])Sa(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(Zu,"printHelp");function Qu(e){let o=Dr({topic:e});if(console.log(`
604
598
  ${s.cyan(o.title)}`),console.log(o.content),o.topics.length>0){console.log();for(let n of o.topics)console.log(`- ${n.id}: ${n.summary}`)}o.topics.length===0&&o.nextTopics.length>0&&console.log(s.dim(`
605
- Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(ef,"printManualTopic");function mr(e){de.size===0&&En();let o=de.get(e.toLowerCase());if(!o){let n=Cn(e);if(!n){console.log(s.yellow(`
599
+ Related topics: ${o.nextTopics.join(", ")}`)),console.log()}a(Qu,"printManualTopic");function dr(e){de.size===0&&Cn();let o=de.get(e.toLowerCase());if(!o){let n=In(e);if(!n){console.log(s.yellow(`
606
600
  [Unknown command: /${e}. Type /help for available commands]`));return}console.log(s.cyan(`
607
601
  /${n.name}`)),n.aliases?.length&&console.log(s.dim(`Aliases: ${n.aliases.join(", ")}`)),console.log(s.dim(`
608
602
  ${n.description}`)),console.log(s.dim(`
609
- Usage: ${lf(n)}`)),console.log();return}o.detailedHelp?o.detailedHelp():(console.log(s.cyan(`
603
+ Usage: ${af(n)}`)),console.log();return}o.detailedHelp?o.detailedHelp():(console.log(s.cyan(`
610
604
  /${o.name}`)),o.aliases?.length&&console.log(s.dim(`Aliases: ${o.aliases.join(", ")}`)),console.log(s.dim(`
611
605
  ${o.description}`)),o.usage&&console.log(s.dim(`
612
- Usage: ${o.usage}`)),console.log())}a(mr,"printDetailedHelp");async function of(e,o,n=[],t){let r=n[0]?.toLowerCase(),i=e.contextTokenSnapshot?.currentTokens??_o(e.messages),l=e.contextTokenSnapshot?.source??"estimate",c=cs(o.provider),d=us(o.provider,o.model,o.reasoningMode);if(console.log(s.bold(`
606
+ Usage: ${o.usage}`)),console.log())}a(dr,"printDetailedHelp");async function ef(e,o,n=[],t){let r=n[0]?.toLowerCase(),i=e.contextTokenSnapshot?.currentTokens??Po(e.messages),l=e.contextTokenSnapshot?.source??"estimate",c=ss(o.provider),d=as(o.provider,o.model,o.reasoningMode);if(console.log(s.bold(`
613
607
  Session Status:
614
- `)),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(Ca(o.effort))}`)),console.log(s.dim(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),c){let f=Kn(c),m=c.transport==="cli-bridge"?s.yellow(f):s.cyan(f);console.log(s.dim(` Provider Cap: ${m}`))}if(d&&d.status!=="allow"){let f=d.status==="block"?s.red:s.yellow;console.log(s.dim(` Provider Policy: ${f(d.summary)}`))}console.log(s.dim(` Session ID: ${e.sessionId}`)),console.log(s.dim(` Messages: ${e.messages.length}`)),console.log(s.dim(` Tokens: ~${i} (${l})`));let u=await Oo({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:fr(e)});console.log(s.dim(` Repo Intel: ${s.cyan(Yu(u))}`)),e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace: ${s.cyan(At(e.runtimeInfo))}`)):e.gitRoot&&console.log(s.dim(` Workspace: ${s.cyan(e.gitRoot)}`)),(r==="workspace"||r==="worktree"||r==="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}`))),r==="runtime"&&await tf(t),await nf(t),console.log(s.dim(` Created: ${e.createdAt}`)),console.log(s.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(of,"printStatus");async function nf(e){if(e?.getLearningSummary)try{console.log(s.dim(` Learning: ${wt(await e.getLearningSummary())}`))}catch(o){console.log(s.dim(` Learning: unavailable (${o instanceof Error?o.message:String(o)})`))}}a(nf,"printLearningSurfaceStatus");async function tf(e){if(!e?.getRuntimeStatus){console.log(s.dim(" SDK Runtime: unavailable (host did not provide runtime status)"));return}let o;try{o=await e.getRuntimeStatus()}catch(t){console.log(s.dim(` SDK Runtime: unavailable (${t instanceof Error?t.message:String(t)})`));return}if(!o){console.log(s.dim(" SDK Runtime: unavailable"));return}console.log(s.dim(` SDK Runtime: ${s.cyan(o.mode)} profile=${s.cyan(o.profile)}`)),console.log(s.dim(` Runtime ID: ${o.runtimeId}`)),o.health&&console.log(s.dim(` Health: ${o.health}`)),o.endpoint&&console.log(s.dim(` Endpoint: ${o.endpoint}`)),o.startedAt&&console.log(s.dim(` Runtime Up: ${o.startedAt}`));let n=[Je("sessions",o.sessions),Je("runs",o.runs),Je("active",o.activeRuns),Je("queued",o.queuedRuns),Je("pending permissions",o.pendingPermissions),Je("workflows",o.workflows)].filter(t=>t!==void 0);n.length>0&&console.log(s.dim(` Runtime Ctrs: ${n.join(" ")}`))}a(tf,"printRuntimeSurfaceStatus");function Je(e,o){return o===void 0?void 0:`${e}=${o}`}a(Je,"formatRuntimeCount");async function rf(e,o){let n=Se(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await Ea(o.gitRoot);console.log(s.green(`
615
- Skills reloaded: ${r} skill(s)`)),console.log(s.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await De(o.gitRoot),sf(n.listUserInvocable())}a(rf,"handleSkillNamespaceCommand");function sf(e){if(console.log(s.bold(`
608
+ `)),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(Aa(o.effort))}`)),console.log(s.dim(` Agent Mode: ${s.cyan(o.agentMode.toUpperCase())}`)),c){let f=Gn(c),m=c.transport==="cli-bridge"?s.yellow(f):s.cyan(f);console.log(s.dim(` Provider Cap: ${m}`))}if(d&&d.status!=="allow"){let f=d.status==="block"?s.red:s.yellow;console.log(s.dim(` Provider Policy: ${f(d.summary)}`))}console.log(s.dim(` Session ID: ${e.sessionId}`)),console.log(s.dim(` Messages: ${e.messages.length}`)),console.log(s.dim(` Tokens: ~${i} (${l})`));let u=await No({mode:o.repoIntelligenceMode,trace:o.repoIntelligenceTrace,probe:!0,workspaceRoot:cr(e)});console.log(s.dim(` Repo Intel: ${s.cyan(Vu(u))}`)),e.runtimeInfo?.workspaceRoot?console.log(s.dim(` Workspace: ${s.cyan(St(e.runtimeInfo))}`)):e.gitRoot&&console.log(s.dim(` Workspace: ${s.cyan(e.gitRoot)}`)),(r==="workspace"||r==="worktree"||r==="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}`))),r==="runtime"&&await nf(t),await of(t),console.log(s.dim(` Created: ${e.createdAt}`)),console.log(s.dim(` Last Active: ${e.lastAccessed}`)),console.log()}a(ef,"printStatus");async function of(e){if(e?.getLearningSummary)try{console.log(s.dim(` Learning: ${ft(await e.getLearningSummary())}`))}catch(o){console.log(s.dim(` Learning: unavailable (${o instanceof Error?o.message:String(o)})`))}}a(of,"printLearningSurfaceStatus");async function nf(e){if(!e?.getRuntimeStatus){console.log(s.dim(" SDK Runtime: unavailable (host did not provide runtime status)"));return}let o;try{o=await e.getRuntimeStatus()}catch(t){console.log(s.dim(` SDK Runtime: unavailable (${t instanceof Error?t.message:String(t)})`));return}if(!o){console.log(s.dim(" SDK Runtime: unavailable"));return}console.log(s.dim(` SDK Runtime: ${s.cyan(o.mode)} profile=${s.cyan(o.profile)}`)),console.log(s.dim(` Runtime ID: ${o.runtimeId}`)),o.health&&console.log(s.dim(` Health: ${o.health}`)),o.endpoint&&console.log(s.dim(` Endpoint: ${o.endpoint}`)),o.startedAt&&console.log(s.dim(` Runtime Up: ${o.startedAt}`));let n=[Ye("sessions",o.sessions),Ye("runs",o.runs),Ye("active",o.activeRuns),Ye("queued",o.queuedRuns),Ye("pending permissions",o.pendingPermissions),Ye("workflows",o.workflows)].filter(t=>t!==void 0);n.length>0&&console.log(s.dim(` Runtime Ctrs: ${n.join(" ")}`))}a(nf,"printRuntimeSurfaceStatus");function Ye(e,o){return o===void 0?void 0:`${e}=${o}`}a(Ye,"formatRuntimeCount");async function tf(e,o){let n=ve(o.gitRoot);if(e[0]?.toLowerCase()==="reload"){let r=await ba(o.gitRoot);console.log(s.green(`
609
+ Skills reloaded: ${r} skill(s)`)),console.log(s.dim("Updated skills will apply to subsequent requests in this session.")),console.log();return}n.size===0&&await Ne(o.gitRoot),rf(n.listUserInvocable())}a(tf,"handleSkillNamespaceCommand");function rf(e){if(console.log(s.bold(`
616
610
  Available Skills:
617
611
  `)),e.length===0){console.log(s.dim(" No skills found.")),console.log(s.dim(`
618
- 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=Eo(),n=e.map(r=>{let i=o.get(r.name)!==void 0||Cn(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(sf,"printSkillsListPiMonoStyle");var de=new pe;function En(e){de.size>0||cr(de,e)}a(En,"initCommandRegistry");function Eo(e){return En(e),de}a(Eo,"getCommandRegistry");function af(){return se()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(af,"getActiveExtensionCommands");function Cn(e){let o=se(),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(Cn,"getActiveExtensionCommand");function lf(e){return e.usage??`/${e.name}`}a(lf,"formatExtensionCommandUsage");function cf(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(cf,"formatExtensionDiagnosticValue");function df(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${cf(t)}`);return o.length>0?o.join(" | "):void 0}a(df,"formatExtensionDiagnosticMetadata");function Ze(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(Ze,"getExtensionRuntimeDiagnostics");function uf(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(uf,"toExtensionInvocationRequest");function ff(e){return e.map(o=>{if(typeof o=="string")return o;if(o instanceof Error)return o.stack??o.message;try{return JSON.stringify(o)}catch{return String(o)}}).join(" ")}a(ff,"formatDiagnosticParts");function xn(e,o,n){K({source:e,level:o,message:ff(n)})}a(xn,"emitCommandDiagnostic");async function mf(e,o,n){let t=se();if(!t)return console.log(s.yellow(`
619
- [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(()=>Ze(t),"getDiagnostics"),logger:{debug:a((...l)=>xn(`repl:extension-command:${e.name}`,"debug",l),"debug"),info:a((...l)=>xn(`repl:extension-command:${e.name}`,"info",l),"info"),warn:a((...l)=>xn(`repl:extension-command:${e.name}`,"warn",l),"warn"),error:a((...l)=>xn(`repl:extension-command:${e.name}`,"error",l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let i=uf(e,r);return i?{invocation:i}:!0}a(mf,"executeExtensionCommand");function my(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(my,"parseCommand");function Ra(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a(Ra,"isCommandHelpRequest");async function py(e,o,n,t){if(de.size===0&&En(o.gitRoot),e.skillInvocation)return await ur({command:e.skillInvocation.name,args:e.args},o);let r=de.get(e.command);if(r){if(r.userInvocable===!1)return console.log(s.yellow(`
620
- [Command /${r.name} is not user-invocable]`)),!1;if(Ra(e.args))return mr(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(`
621
- [Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let i=Cn(e.command);if(i){if(Ra(e.args))return mr(e.command),!0;try{return await mf(i,e.args,o)}catch(d){return console.log(s.red(`
622
- [Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await pf(e,o);if(l)return await ur({command:l.skill.name,args:l.args},o);let c=await Ta(e.command,o);return c?await ur({command:c.name,args:e.args},o):(console.log(s.yellow(`
623
- [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(py,"executeCommand");async function pf(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Ta(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(pf,"resolveNamespacedDirectSkillCommand");async function Ta(e,o){let n=Se(o.gitRoot);n.size===0&&await De(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(Ta,"resolveDirectSkillCommand");async function ur(e,o){let n=Se(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await De(o.gitRoot);try{let i=n.get(t);if(!i)return console.log(s.red(`
612
+ 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=Co(),n=e.map(r=>{let i=o.get(r.name)!==void 0||In(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(rf,"printSkillsListPiMonoStyle");var de=new pe;function Cn(e){de.size>0||sr(de,e)}a(Cn,"initCommandRegistry");function Co(e){return Cn(e),de}a(Co,"getCommandRegistry");function sf(){return se()?.listCommands().filter(o=>o.metadata?.userInvocable!==!1)??[]}a(sf,"getActiveExtensionCommands");function In(e){let o=se(),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(In,"getActiveExtensionCommand");function af(e){return e.usage??`/${e.name}`}a(af,"formatExtensionCommandUsage");function lf(e){return Array.isArray(e)?e.map(o=>String(o)).join(", "):e&&typeof e=="object"?JSON.stringify(e):String(e)}a(lf,"formatExtensionDiagnosticValue");function cf(e){if(!e)return;let o=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>`${n}=${lf(t)}`);return o.length>0?o.join(" | "):void 0}a(cf,"formatExtensionDiagnosticMetadata");function Ze(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(Ze,"getExtensionRuntimeDiagnostics");function df(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(df,"toExtensionInvocationRequest");function uf(e){return e.map(o=>{if(typeof o=="string")return o;if(o instanceof Error)return o.stack??o.message;try{return JSON.stringify(o)}catch{return String(o)}}).join(" ")}a(uf,"formatDiagnosticParts");function An(e,o,n){z({source:e,level:o,message:uf(n)})}a(An,"emitCommandDiagnostic");async function ff(e,o,n){let t=se();if(!t)return console.log(s.yellow(`
613
+ [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(()=>Ze(t),"getDiagnostics"),logger:{debug:a((...l)=>An(`repl:extension-command:${e.name}`,"debug",l),"debug"),info:a((...l)=>An(`repl:extension-command:${e.name}`,"info",l),"info"),warn:a((...l)=>An(`repl:extension-command:${e.name}`,"warn",l),"warn"),error:a((...l)=>An(`repl:extension-command:${e.name}`,"error",l),"error")}});if(!r)return!0;r.message&&console.log(r.message);let i=df(e,r);return i?{invocation:i}:!0}a(ff,"executeExtensionCommand");function fy(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(fy,"parseCommand");function $a(e){let o=e[0]?.trim().toLowerCase();return o==="help"||o==="--help"||o==="-h"}a($a,"isCommandHelpRequest");async function my(e,o,n,t){if(de.size===0&&Cn(o.gitRoot),e.skillInvocation)return await lr({command:e.skillInvocation.name,args:e.args},o);let r=de.get(e.command);if(r){if(r.userInvocable===!1)return console.log(s.yellow(`
614
+ [Command /${r.name} is not user-invocable]`)),!1;if($a(e.args))return dr(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(`
615
+ [Command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let i=In(e.command);if(i){if($a(e.args))return dr(e.command),!0;try{return await ff(i,e.args,o)}catch(d){return console.log(s.red(`
616
+ [Extension command failed: ${d instanceof Error?d.message:String(d)}]`)),!1}}let l=await mf(e,o);if(l)return await lr({command:l.skill.name,args:l.args},o);let c=await Ca(e.command,o);return c?await lr({command:c.name,args:e.args},o):(console.log(s.yellow(`
617
+ [Unknown command: /${e.command}. Type /help for available commands]`)),!1)}a(my,"executeCommand");async function mf(e,o){let n=e.args[0];if(!n)return;let t=`${e.command}:${n}`,r=await Ca(t,o);if(r)return{skill:r,args:e.args.slice(1)}}a(mf,"resolveNamespacedDirectSkillCommand");async function Ca(e,o){let n=ve(o.gitRoot);n.size===0&&await Ne(o.gitRoot);let t=n.get(e);return t?.userInvocable?t:void 0}a(Ca,"resolveDirectSkillCommand");async function lr(e,o){let n=ve(o.gitRoot),t=e.command,r=e.args.join(" ");n.size===0&&await Ne(o.gitRoot);try{let i=n.get(t);if(!i)return console.log(s.red(`
624
618
  [Skill not found: ${t}]`)),!1;if(!i.userInvocable)return console.log(s.yellow(`
625
619
  [Skill "${t}" is not user-invocable]`)),!1;console.log(s.cyan(`
626
- [Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{},executeDynamicContext:o.skillDynamicContext?.execute,disableDynamicContext:o.skillDynamicContext?.disable},d=await Wr(l,r,c);return console.log(s.green(`Skill activated: ${t}`)),console.log(s.dim("The skill context has been prepared for the AI.")),console.log(),{invocation:{prompt:d.content,source:"skill",displayName:t,path:l.skillFilePath,disableModelInvocation:d.disableModelInvocation,userInvocable:l.userInvocable,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hooks:l.hooks,skillInvocation:{name:t,path:l.skillFilePath,description:l.description,arguments:r||void 0,allowedTools:l.allowedTools,context:l.context,agent:l.agent,argumentHint:l.argumentHint,model:l.model,hookEvents:l.hooks?Object.entries(l.hooks).filter(([,u])=>Array.isArray(u)&&u.length>0).map(([u])=>u):void 0,expandedContent:d.content}}}}catch(i){return console.log(s.red(`
627
- [Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}a(ur,"executeSkillCommand");var In=class{static{a(this,"SkillCompleter")}gitRoot;constructor(o){this.gitRoot=o}canComplete(o,n){return this.parseTrigger(o.slice(0,n))!==void 0}async getCompletions(o,n){let t=this.parseTrigger(o.slice(0,n));if(!t)return[];let r=t.partial.toLowerCase();return(await this.getSkills()).filter(l=>{let c=l.name.toLowerCase();return c.includes(r)||this.fuzzyIncludes(r,c)}).map(l=>({text:`${t.invocationPrefix}${l.name}`,display:l.name,description:this.truncateDescription(l.description),type:"skill"})).sort((l,c)=>{let d=l.display.toLowerCase().startsWith(r),u=c.display.toLowerCase().startsWith(r);return d&&!u?-1:!d&&u?1:l.display.length-c.display.length})}setGitRoot(o){this.gitRoot!==o&&(this.gitRoot=o)}parseTrigger(o){let n=o.match(/(^|\s)\/skill:([^\s]*)$/);if(n)return{partial:n[2]??"",invocationPrefix:"/skill:"};let t=o.match(/(^|\s)\/([^\s]*)$/);if(t)return{partial:t[2]??"",invocationPrefix:"/"}}async getSkills(){try{let o=Se(this.gitRoot);return o.size===0&&await De(this.gitRoot),o.listUserInvocable()}catch{return[]}}fuzzyIncludes(o,n){let t=0;for(let r=0;r<n.length&&t<o.length;r+=1)n[r]===o[t]&&(t+=1);return t===o.length}truncateDescription(o,n=50){return o.length<=n?o:o.slice(0,n-3)+"..."}};import{exec as gf}from"node:child_process";import*as eo from"node:path";import{promisify as wf}from"node:util";var _a=wf(gf);function hf(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(hf,"pathFromPorcelainLine");async function Pa(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([_a("git rev-parse --show-toplevel",{cwd:e}),_a("git status --porcelain=v1 -uall",{cwd:e})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
628
- `)){if(!c.trim())continue;let d=hf(c);if(!d)continue;let u=eo.resolve(r,d),f=eo.relative(e,u).split(eo.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),i.push(f),i.length>=o))break}return i}catch{return[]}}a(Pa,"getRecentWorkingSetFiles");function oo(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(oo,"findCommandSlashIndex");var gr=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Pa){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:Co.join(c,i.slice(0,d)),f=d===-1?i:i.slice(d+1);try{let k=(await this.readdir(u)).filter(v=>v.toLowerCase().startsWith(f.toLowerCase()));for(let v of k){let y=Co.join(u,v),$=await this.isDirectory(y),g=d===-1?v:i.slice(0,d+1)+v;l.push({text:"@"+g+($?"/":""),display:v+($?"/":""),description:$?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),k=new Set(l.map($=>$.text)),v=f.toLowerCase(),y=[];for(let $ of m){if(f&&!Co.basename($).toLowerCase().startsWith(v))continue;let g="@"+$;k.has(g)||(k.add(g),y.push({text:g,display:$,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=>{Tn.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=>{Tn.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},wr=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of Eo().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=se();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=oo(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=oo(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 Cy(e){let o=new gr(e),n=new In,t=new wr;return async r=>{let i=r.includes("@"),l=r.includes("/");if(!i&&!l)return[[],r];let c=[];if(l){let u=await yf(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=>kf(r,u)),r]}}a(Cy,"createCompleter");async function yf(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-QZETLNAB.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(yf,"getArgumentCompletions");function kf(e,o){if(o.type!=="argument")return o.text;let n=oo(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(kf,"formatReadlineCompletion");import{existsSync as Pn,readdirSync as Na,readFileSync as Da}from"node:fs";import{join as Ln}from"node:path";var vf=[{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"}],_n=[{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"}],La=_n.slice(2).concat([{name:"off",description:"Disable reasoning",type:"enum"}]);function Sf(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(We(n))try{return He(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return Oe().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(Sf,"getModelArgs");var hr=[{name:"workspace",description:"Inspect current workspace/runtime truth in more detail",type:"enum"},{name:"runtime",description:"Alias for workspace runtime inspection",type:"enum"},{name:"worktree",description:"Alias for workspace runtime inspection",type:"enum"}],yr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],$f=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],bf=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],xf=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],Ma=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],Wa=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],Af=[{name:"list",description:"List project memory files",type:"enum"},{name:"pending",description:"List pending memory proposals",type:"enum"},{name:"show",description:"Preview a memory proposal",type:"enum"},{name:"approve",description:"Approve a memory proposal",type:"enum"},{name:"reject",description:"Reject a memory proposal",type:"enum"},{name:"curate",description:"Report memory governance findings",type:"enum"},{name:"rebuild",description:"Rebuild MEMORY.md index",type:"enum"},{name:"open",description:"Print the memory entrypoint path",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],Rf=[{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"}],Ef=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Cf=[{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"}],If=[{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"}],Tf=[{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"}],_f=[{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"}],Pf=[{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"}],Lf=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],Mf=[{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"}],Wf=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Of=new Set(["show","delete","rerun","save","rename","revise"]),Nf=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Df=[{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"}],Uf=[{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"}],jf=[".workflow.json",".ts",".mjs",".js"];function Ff(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(Ff,"workflowRunMatchesSubcommand");function Mn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Mn,"isWorkflowRunEntryName");function Hf(e,o){let n=Ln(e,"workflow-metadata.json");if(Pn(n))try{let r=JSON.parse(Da(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&Mn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Mn(t.trim())?t.trim():void 0}a(Hf,"readWorkflowRunDisplayName");function Bf(){let e=Ee(process.cwd()).key,o=B("workflow-runs",e);if(!Pn(o))return[];let n=[];for(let t of Na(o)){if(!Mn(t))continue;let r=Ln(o,t,"run.json");if(Pn(r))try{let i=JSON.parse(Da(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=Hf(Ln(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(Bf,"getPersistedWorkflowRunIdArgs");function Wn(e){let o=Fe().list().filter(r=>Ff(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=Of.has(e)?Bf():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(Wn,"getWorkflowRunIdArgs");function Gf(e){for(let o of jf)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Mn(n)?n:void 0}}a(Gf,"savedWorkflowNameFromFile");function Io(e={}){let o=[{path:B("workflows"),source:"personal"},{path:Ln(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(Pn(t.path))try{for(let r of Na(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=Gf(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(Io,"getSavedWorkflowNameArgs");function qf(){let e=new Map;for(let o of Wn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of Io()){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(qf,"getWorkflowRerunArgs");function kr(e){let o=new Map;for(let n of Wn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of Io({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(kr,"getWorkflowRunOrSavedNameArgs");function Oa(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?Io({generatedOnly:!0}):o.has("--run")?Wn("delete"):kr("delete")}a(Oa,"getWorkflowDeleteTargetArgs");function Kf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...Mf,...jo().map(r=>({name:r.name,description:r.description,type:"enum"})),...Io()];if(n==="rerun"&&t<=2)return qf();if(n==="rename"&&t<=2)return kr("rename");if(n==="delete"&&t<=2)return[...Uf,...Oa(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return Oa(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...kr("revise")];if(e[1]==="--replace"&&t<=3)return Io()}return Wf.has(n)&&t<=2?Wn(n):n==="runs"&&t<=2?Nf:n==="prune"&&t<=2?Df:[]}a(Kf,"getWorkflowArgs");function zf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?Tf:t>2?[]:n==="mode"?_f:n==="trace"?Pf:[]}a(zf,"getRepoIntelArgs");var Xf=new Map([["mode",vf],["thinking",_n],["think",_n],["t",_n],["reasoning",La],["reason",La],["status",hr],["info",hr],["ctx",hr],["mcp",$f],["fallback",bf],["auto-engine",xf],["agent-mode",Ma],["am",Ma],["verifier-log",Wa],["stall-log",Wa],["memory",Af],["goal",Rf],["paste",Ef],["review",Cf],["agents",If],["delete",yr],["rm",yr],["del",yr]]),Vf=new Set(["model","m","provider"]),Yf=new Set(["repo-intel"]),Jf=new Set(["repointel","ri"]),Zf=new Set(["workflow"]);function vr(e,o,n=[]){let t=e.toLowerCase();return Vf.has(t)?Sf(o):Yf.has(t)?zf(n):Jf.has(t)?n.length<=1?Lf:[]:Zf.has(t)?Kf(n):Xf.get(t)??[]}a(vr,"getCommandArguments");var Sr=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=oo(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 vr(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=oo(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(),k=vr(c,m,u);if(!k||k.length===0)return[];let v=new Set(u.slice(0,-1).map($=>$.toLowerCase()));return k.filter($=>!v.has($.name.toLowerCase())).filter($=>!m||$.name.includes("/")?!0:$.name.toLowerCase().includes(m)).map($=>({text:$.name,display:$.name,description:$.description,type:"argument"})).sort(($,g)=>{if(!m)return 0;let x=$.display.toLowerCase().startsWith(m),T=g.display.toLowerCase().startsWith(m);return x&&!T?-1:!x&&T?1:$.display.length-g.display.length})}};function Fy(){return new Sr}a(Fy,"createArgumentCompleter");export{yt as a,q as b,gp as c,gi as d,wp as e,Go as f,nm as g,Ba as h,tm as i,ao as j,bs as k,xs as l,lo as m,tt as n,sl as o,rt as p,it as q,at as r,fo as s,yl as t,ct as u,Ge as v,ei as w,oi as x,Ll as y,Nm as z,Zm as A,pt as B,Qm as C,ep as D,ci as E,ap as F,pi as G,ie as H,yi as I,ki as J,$p as K,Vl as L,cc as M,bp as N,on as O,vt as P,xp as Q,Ii as R,Ap as S,Rp as T,Ep as U,Zp as V,Qp as W,eg as X,Ni as Y,At as Z,Di as _,Ee as $,ig as aa,yo as ba,_t as ca,Te as da,Cd as ea,Id as fa,ta as ga,Pg as ha,Lg as ia,Hd as ja,Iw as ka,Tw as la,_w as ma,Yw as na,Jw as oa,Zw as pa,Qw as qa,eh as ra,wa as sa,ih as ta,ah as ua,ya as va,lh as wa,Eh as xa,ka as ya,Eo as za,my as Aa,py as Ba,In as Ca,Sr as Da,Fy as Ea,oo as Fa,gr as Ga,wr as Ha,Cy as Ia};
620
+ [Invoking skill: ${t}]`)),i.argumentHint&&console.log(s.dim(`Arguments: ${r||"(none)"}`)),console.log();let l=await n.loadFull(t),c={workingDirectory:process.cwd(),projectRoot:o.gitRoot??void 0,sessionId:o.sessionId,environment:{},executeDynamicContext:o.skillDynamicContext?.execute,disableDynamicContext:o.skillDynamicContext?.disable},d=await _r(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(`
621
+ [Error invoking skill: ${i instanceof Error?i.message:String(i)}]`)),!1}}a(lr,"executeSkillCommand");var Tn=class{static{a(this,"SkillCompleter")}gitRoot;constructor(o){this.gitRoot=o}canComplete(o,n){return this.parseTrigger(o.slice(0,n))!==void 0}async getCompletions(o,n){let t=this.parseTrigger(o.slice(0,n));if(!t)return[];let r=t.partial.toLowerCase();return(await this.getSkills()).filter(l=>{let c=l.name.toLowerCase();return c.includes(r)||this.fuzzyIncludes(r,c)}).map(l=>({text:`${t.invocationPrefix}${l.name}`,display:l.name,description:this.truncateDescription(l.description),type:"skill"})).sort((l,c)=>{let d=l.display.toLowerCase().startsWith(r),u=c.display.toLowerCase().startsWith(r);return d&&!u?-1:!d&&u?1:l.display.length-c.display.length})}setGitRoot(o){this.gitRoot!==o&&(this.gitRoot=o)}parseTrigger(o){let n=o.match(/(^|\s)\/skill:([^\s]*)$/);if(n)return{partial:n[2]??"",invocationPrefix:"/skill:"};let t=o.match(/(^|\s)\/([^\s]*)$/);if(t)return{partial:t[2]??"",invocationPrefix:"/"}}async getSkills(){try{let o=ve(this.gitRoot);return o.size===0&&await Ne(this.gitRoot),o.listUserInvocable()}catch{return[]}}fuzzyIncludes(o,n){let t=0;for(let r=0;r<n.length&&t<o.length;r+=1)n[r]===o[t]&&(t+=1);return t===o.length}truncateDescription(o,n=50){return o.length<=n?o:o.slice(0,n-3)+"..."}};import{exec as pf}from"node:child_process";import*as Qe from"node:path";import{promisify as gf}from"node:util";var Ia=gf(pf);function wf(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(wf,"pathFromPorcelainLine");async function Ta(e,o=10){try{let[{stdout:n},{stdout:t}]=await Promise.all([Ia("git rev-parse --show-toplevel",{cwd:e}),Ia("git status --porcelain=v1 -uall",{cwd:e})]),r=n.trim(),i=[],l=new Set;for(let c of t.split(`
622
+ `)){if(!c.trim())continue;let d=wf(c);if(!d)continue;let u=Qe.resolve(r,d),f=Qe.relative(e,u).split(Qe.sep).join("/");if(!(!f||f.startsWith("..")||l.has(f))&&(l.add(f),i.push(f),i.length>=o))break}return i}catch{return[]}}a(Ta,"getRecentWorkingSetFiles");function eo(e){let o=e.lastIndexOf("/");if(o===-1)return-1;for(;o>0&&!/\s/.test(e[o-1]??"");)if(o=e.lastIndexOf("/",o-1),o===-1)return-1;return o}a(eo,"findCommandSlashIndex");var ur=class{static{a(this,"FileCompleter")}cwdSource;cache=new Map;cacheTimeout=5e3;recentCache=new Map;recentFilesProvider;constructor(o,n=Ta){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:Io.join(c,i.slice(0,d)),f=d===-1?i:i.slice(d+1);try{let k=(await this.readdir(u)).filter(v=>v.toLowerCase().startsWith(f.toLowerCase()));for(let v of k){let y=Io.join(u,v),$=await this.isDirectory(y),g=d===-1?v:i.slice(0,d+1)+v;l.push({text:"@"+g+($?"/":""),display:v+($?"/":""),description:$?"directory":"file",type:"file"})}}catch{}if(d===-1){let m=await this.getRecentFiles(c),k=new Set(l.map($=>$.text)),v=f.toLowerCase(),y=[];for(let $ of m){if(f&&!Io.basename($).toLowerCase().startsWith(v))continue;let g="@"+$;k.has(g)||(k.add(g),y.push({text:g,display:$,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=>{_n.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=>{_n.stat(o,(t,r)=>{n(!t&&r.isDirectory())})})}},fr=class{static{a(this,"CommandCompleter")}commands;constructor(){this.commands=new Map,this.loadCommands()}loadCommands(){for(let n of Co().getAll())n.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]});let o=se();for(let n of o?.listCommands()??[])n.metadata?.userInvocable!==!1&&this.commands.set(n.name,{description:n.description,aliases:n.aliases??[]})}canComplete(o,n){let t=o.slice(0,n),r=eo(t);return r===-1?!1:!t.slice(r).includes(" ")}async getCompletions(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return[];this.commands.clear(),this.loadCommands();let i=t.slice(r+1).toLowerCase(),l=[];for(let[c,d]of this.commands){this.fuzzyMatch(i,c)&&l.push({text:"/"+c,display:"/"+c,description:d.description,type:"command"});for(let u of d.aliases)u!==c&&this.fuzzyMatch(i,u)&&l.push({text:"/"+u,display:"/"+u,description:`Alias for /${c}: ${d.description}`,type:"command"})}return l}fuzzyMatch(o,n){if(!o)return!0;let t=o.toLowerCase(),r=n.toLowerCase(),i=0;for(let l=0;l<r.length&&i<t.length;l++)r[l]===t[i]&&i++;return i===t.length}};function Ey(e){let o=new ur(e),n=new Tn,t=new fr;return async r=>{let i=r.includes("@"),l=r.includes("/");if(!i&&!l)return[[],r];let c=[];if(l){let u=await hf(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=>yf(r,u)),r]}}a(Ey,"createCompleter");async function hf(e,o){let{ArgumentCompleter:n}=await import("./argument-completer-QGMWA2C3.js"),t=new n;return t.canComplete(e,o)?t.getCompletions(e,o):[]}a(hf,"getArgumentCompletions");function yf(e,o){if(o.type!=="argument")return o.text;let n=eo(e);if(n!==-1&&!/\s/.test(e.slice(n)))return`${e} ${o.text}`;let r=e.match(/\S+$/)?.[0]??"";return`${r?e.slice(0,e.length-r.length):e}${o.text}`}a(yf,"formatReadlineCompletion");import{existsSync as Pn,readdirSync as Ma,readFileSync as Wa}from"node:fs";import{join as Ln}from"node:path";var kf=[{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"}],oo=[{name:"none",description:"Disable reasoning when the model supports it",type:"enum"},{name:"auto",description:"Clear the explicit effort override",type:"enum"},{name:"low",description:"Use low reasoning effort",type:"enum"},{name:"medium",description:"Use medium reasoning effort",type:"enum"},{name:"high",description:"Use high reasoning effort",type:"enum"},{name:"xhigh",description:"Use extra-high reasoning effort",type:"enum"},{name:"max",description:"Use maximum reasoning effort",type:"enum"}];function vf(e){if(e&&e.includes("/")){let o=e.indexOf("/"),n=e.slice(0,o),t=e.slice(o+1);if(Me(n))try{return Fe(n).filter(i=>!t||i.toLowerCase().includes(t.toLowerCase())).map(i=>({name:`${n}/${i}`,description:i,type:"enum"}))}catch{}return[]}return We().map(o=>({name:o,description:`Switch to ${o} provider`,type:"enum"}))}a(vf,"getModelArgs");var mr=[{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"}],pr=[{name:"all",description:"Delete ALL sessions",type:"enum"}],Sf=[{name:"status",description:"Show MCP server status",type:"enum"},{name:"refresh",description:"Refresh MCP server catalogs",type:"enum"}],$f=[{name:"status",description:"Show child-task fallback order",type:"enum"},{name:"off",description:"Disable child-task fallback providers",type:"enum"}],bf=[{name:"llm",description:"Use LLM classifier for auto mode",type:"enum"},{name:"rules",description:"Use rules-only auto mode",type:"enum"}],_a=[{name:"ama",description:"Use AMA agent mode",type:"enum"},{name:"sa",description:"Use single-agent mode",type:"enum"},{name:"toggle",description:"Cycle to the next agent mode",type:"enum"}],Pa=[{name:"on",description:"Enable logging",type:"enum"},{name:"off",description:"Disable logging",type:"enum"}],xf=[{name:"list",description:"List project memory files",type:"enum"},{name:"pending",description:"List pending memory proposals",type:"enum"},{name:"show",description:"Preview a memory proposal",type:"enum"},{name:"approve",description:"Approve a memory proposal",type:"enum"},{name:"reject",description:"Reject a memory proposal",type:"enum"},{name:"curate",description:"Report memory governance findings",type:"enum"},{name:"rebuild",description:"Rebuild MEMORY.md index",type:"enum"},{name:"open",description:"Print the memory entrypoint path",type:"enum"},{name:"help",description:"Show memory help",type:"enum"}],Af=[{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"}],Rf=[{name:"show",description:"Show a captured paste by id",type:"enum"},{name:"list",description:"List captured pastes",type:"enum"}],Ef=[{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"}],Cf=[{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"}],If=[{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"}],Tf=[{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"}],_f=[{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"}],Pf=[{name:"status",description:"Deprecated alias for /repo-intel status",type:"enum"}],Lf=[{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"}],Mf=new Set(["show","pause","resume","stop","delete","rerun","save","rename","revise"]),Wf=new Set(["show","delete","rerun","save","rename","revise"]),Of=[{name:"--all",description:"Show all persisted workflow runs",type:"enum"},{name:"--limit",description:"Show at most N persisted workflow runs",type:"enum"}],Nf=[{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"}],Df=[{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"}],Uf=[".workflow.json",".ts",".mjs",".js"];function jf(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(jf,"workflowRunMatchesSubcommand");function Mn(e){return/^[a-zA-Z0-9._-]{1,120}$/.test(e)&&!e.startsWith(".")&&!e.includes("..")}a(Mn,"isWorkflowRunEntryName");function Ff(e,o){let n=Ln(e,"workflow-metadata.json");if(Pn(n))try{let r=JSON.parse(Wa(n,"utf8"));if(typeof r=="object"&&r!==null){let i=r.displayName;if(typeof i=="string"&&Mn(i.trim()))return i.trim()}}catch{}let t=o.displayName;return typeof t=="string"&&Mn(t.trim())?t.trim():void 0}a(Ff,"readWorkflowRunDisplayName");function Hf(){let e=Re(process.cwd()).key,o=B("workflow-runs",e);if(!Pn(o))return[];let n=[];for(let t of Ma(o)){if(!Mn(t))continue;let r=Ln(o,t,"run.json");if(Pn(r))try{let i=JSON.parse(Wa(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=Ff(Ln(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(Hf,"getPersistedWorkflowRunIdArgs");function Wn(e){let o=je().list().filter(r=>jf(e,r.status)).map(r=>({name:r.runId,description:`${r.workflow} - ${r.status}`,type:"string"})),n=Wf.has(e)?Hf():[],t=new Set;return[...o,...n].filter(r=>t.has(r.name)?!1:(t.add(r.name),!0))}a(Wn,"getWorkflowRunIdArgs");function Bf(e){for(let o of Uf)if(e.endsWith(o)){let n=e.slice(0,-o.length);return Mn(n)?n:void 0}}a(Bf,"savedWorkflowNameFromFile");function To(e={}){let o=[{path:B("workflows"),source:"personal"},{path:Ln(process.cwd(),".kodax","workflows"),source:"project"}],n=new Map;for(let t of o)if(Pn(t.path))try{for(let r of Ma(t.path)){if(e.generatedOnly===!0&&!r.endsWith(".workflow.json"))continue;let i=Bf(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(To,"getSavedWorkflowNameArgs");function Gf(){let e=new Map;for(let o of Wn("rerun"))e.set(o.name,{...o,description:`recent run: ${o.description}`,type:"string"});for(let o of To()){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(Gf,"getWorkflowRerunArgs");function gr(e){let o=new Map;for(let n of Wn(e))o.set(n.name,{...n,description:`workflow run: ${n.description}`,type:"string"});for(let n of To({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(gr,"getWorkflowRunOrSavedNameArgs");function La(e){let o=new Set(e.slice(1).filter(n=>n.startsWith("--")));return o.has("--saved")?To({generatedOnly:!0}):o.has("--run")?Wn("delete"):gr("delete")}a(La,"getWorkflowDeleteTargetArgs");function qf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;if(t<=1)return[...Lf,...Fo().map(r=>({name:r.name,description:r.description,type:"enum"})),...To()];if(n==="rerun"&&t<=2)return Gf();if(n==="rename"&&t<=2)return gr("rename");if(n==="delete"&&t<=2)return[...Df,...La(e)];if(n==="delete"&&t<=3&&e.slice(1).some(r=>r.startsWith("--")))return La(e);if(n==="revise"){if(t<=2)return[{name:"--replace",description:"Replace a saved workflow after confirmation",type:"enum"},...gr("revise")];if(e[1]==="--replace"&&t<=3)return To()}return Mf.has(n)&&t<=2?Wn(n):n==="runs"&&t<=2?Of:n==="prune"&&t<=2?Nf:[]}a(qf,"getWorkflowArgs");function zf(e){let[o=""]=e,n=o.toLowerCase(),t=e.length===1&&e[0]===""?0:e.length;return t<=1?If:t>2?[]:n==="mode"?Tf:n==="trace"?_f:[]}a(zf,"getRepoIntelArgs");var Kf=new Map([["mode",kf],["thinking",oo],["think",oo],["t",oo],["reasoning",oo],["reason",oo],["effort",oo],["status",mr],["info",mr],["ctx",mr],["mcp",Sf],["fallback",$f],["auto-engine",bf],["agent-mode",_a],["am",_a],["verifier-log",Pa],["stall-log",Pa],["memory",xf],["goal",Af],["paste",Rf],["review",Ef],["agents",Cf],["delete",pr],["rm",pr],["del",pr]]),Xf=new Set(["model","m","provider"]),Vf=new Set(["repo-intel"]),Yf=new Set(["repointel","ri"]),Jf=new Set(["workflow"]);function wr(e,o,n=[]){let t=e.toLowerCase();return Xf.has(t)?vf(o):Vf.has(t)?zf(n):Yf.has(t)?n.length<=1?Pf:[]:Jf.has(t)?qf(n):Kf.get(t)??[]}a(wr,"getCommandArguments");var hr=class{static{a(this,"ArgumentCompleter")}canComplete(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return!1;let i=t.slice(r),l=i.split(/\s+/);if(l.length>=2&&l[0]!=="")return!0;let c=i.slice(1).toLowerCase();return wr(c).length>0}async getCompletions(o,n){let t=o.slice(0,n),r=eo(t);if(r===-1)return[];let i=t.slice(r),l=i.indexOf(" "),c=(l===-1?i.slice(1):i.slice(1,l)).toLowerCase(),d=l===-1?"":i.slice(l+1),u=d?d.split(/\s+/):[""],f=u.length-1,m=(u[f]??"").toLowerCase(),k=wr(c,m,u);if(!k||k.length===0)return[];let v=new Set(u.slice(0,-1).map($=>$.toLowerCase()));return k.filter($=>!v.has($.name.toLowerCase())).filter($=>!m||$.name.includes("/")?!0:$.name.toLowerCase().includes(m)).map($=>({text:$.name,display:$.name,description:$.description,type:"argument"})).sort(($,g)=>{if(!m)return 0;let x=$.display.toLowerCase().startsWith(m),T=g.display.toLowerCase().startsWith(m);return x&&!T?-1:!x&&T?1:$.display.length-g.display.length})}};function jy(){return new hr}a(jy,"createArgumentCompleter");export{pt as a,q as b,pp as c,ui as d,gp as e,qo as f,om as g,ja as h,nm as i,ao as j,ks as k,vs as l,lo as m,Qn as n,nl as o,et as p,nt as q,tt as r,fo as s,gl as t,st as u,Be as v,Ys as w,Js as x,Tl as y,Om as z,Jm as A,_l as B,dt as C,Zm as D,Qm as E,si as F,ip as G,di as H,ie as I,pi as J,gi as K,Sp as L,Kl as M,ac as N,$p as O,nn as P,wt as Q,bp as R,Ai as S,xp as T,Ap as U,Rp as V,Jp as W,Zp as X,Qp as Y,Li as Z,St as _,Mi as $,Re as aa,sg as ba,yo as ca,Et as da,Ie as ea,Rd as fa,Ed as ga,Qi as ha,_g as ia,Pg as ja,jd as ka,Cw as la,Iw as ma,Tw as na,Vw as oa,Yw as pa,Jw as qa,Zw as ra,Qw as sa,fa as ta,sh as ua,ih as va,pa as wa,ah as xa,Rh as ya,ga as za,Co as Aa,fy as Ba,my as Ca,Tn as Da,hr as Ea,jy as Fa,eo as Ga,ur as Ha,fr as Ia,Ey as Ja};