@kodax-ai/kodax 0.7.53 → 0.7.54

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 (42) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/chunks/{agent-DZ37KWZI.js → agent-5FZH3VUN.js} +1 -1
  3. package/dist/chunks/argument-completer-VURFBB37.js +2 -0
  4. package/dist/chunks/{chunk-LE6STNVN.js → chunk-7C2QUBLE.js} +1 -1
  5. package/dist/chunks/chunk-AMFPS2WC.js +584 -0
  6. package/dist/chunks/chunk-EM4GOL3S.js +551 -0
  7. package/dist/chunks/{chunk-CLIRXPAJ.js → chunk-FV6KHPWT.js} +44 -44
  8. package/dist/chunks/{chunk-OQL4ISVD.js → chunk-JEQ62ZMK.js} +198 -195
  9. package/dist/chunks/chunk-KSBSEPV5.js +314 -0
  10. package/dist/chunks/{chunk-D4MGMUDL.js → chunk-QQX333VC.js} +1 -1
  11. package/dist/chunks/{chunk-5YQDGVDB.js → chunk-UHNSW2SR.js} +1 -1
  12. package/dist/chunks/{compaction-config-OF2T45MC.js → compaction-config-HY46N24Q.js} +1 -1
  13. package/dist/chunks/{construction-bootstrap-JIE7LYNN.js → construction-bootstrap-AVTILHEH.js} +1 -1
  14. package/dist/chunks/{dist-Z6U7TWKJ.js → dist-BNKIZRCP.js} +1 -1
  15. package/dist/chunks/dist-EV5MWJQ6.js +2 -0
  16. package/dist/chunks/{utils-AB4DNRZC.js → utils-ZUC3AIL5.js} +1 -1
  17. package/dist/index.d.ts +7 -4
  18. package/dist/index.js +6 -6
  19. package/dist/kodax_cli.js +1090 -1013
  20. package/dist/provider-capabilities.json +3 -3
  21. package/dist/sdk-agent.d.ts +395 -3
  22. package/dist/sdk-agent.js +1 -1
  23. package/dist/sdk-coding.d.ts +47 -27
  24. package/dist/sdk-coding.js +1 -1
  25. package/dist/sdk-llm.js +1 -1
  26. package/dist/sdk-mcp.js +1 -1
  27. package/dist/sdk-repl.d.ts +6 -6
  28. package/dist/sdk-repl.js +1 -1
  29. package/dist/sdk-session.d.ts +3 -3
  30. package/dist/sdk-session.js +1 -1
  31. package/dist/sdk-skills.d.ts +1 -1
  32. package/dist/sdk-skills.js +1 -1
  33. package/dist/types-chunks/{bash-prefix-extractor.d-BpNoRkSD.d.ts → bash-prefix-extractor.d-CBLoD2Jk.d.ts} +43 -14
  34. package/dist/types-chunks/{sdk-session-BkaGuIC6.d.ts → sdk-session-DrPxcDuO.d.ts} +2 -2
  35. package/dist/types-chunks/{storage.d-BUIiD4gq.d.ts → storage.d-DoA3NvdD.d.ts} +1 -1
  36. package/dist/types-chunks/{utils.d-B3fwJEMd.d.ts → utils.d-DSqmMq7l.d.ts} +4 -2
  37. package/package.json +1 -1
  38. package/dist/chunks/argument-completer-OFPM36IZ.js +0 -2
  39. package/dist/chunks/chunk-67HVIUEO.js +0 -307
  40. package/dist/chunks/chunk-RFE5EC7W.js +0 -492
  41. package/dist/chunks/chunk-XFCAXDSD.js +0 -574
  42. package/dist/chunks/dist-BOHLKKR5.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{$a as as,$c as Pr,A as nr,Ab as hs,Ad as Ds,Bb as gs,Bd as $s,Cb as Xt,Cd as Ls,Da as zi,Db as _r,Dd as js,E as rr,Ea as Yi,Eb as Ar,F as or,Fa as Ji,Fb as ws,G as ir,Ga as Qi,Gb as ks,Ha as Zi,Hb as Cr,Hd as z,Id as Lr,J as qi,Jb as Mr,K as ft,La as es,Lb as Je,M as sr,Ma as ts,Mb as zt,Md as jr,N as ar,Nb as Or,Ob as ys,P as cr,Pb as vs,Q as dr,Qa as we,R as lr,Rb as Yt,S as ur,T as fr,U as Vi,Ud as Qe,V as Ki,W as mr,Wa as ns,Xa as rs,Ya as os,Yb as Jt,Yc as Es,Z as pr,Za as is,Zc as xs,_a as ss,_c as Rs,ab as Kt,ad as Nr,bd as Ss,c as Gt,cb as kr,cd as _s,d as Ui,da as Vt,db as yr,dd as Dr,e as qt,eb as vr,ed as As,fc as Ir,fd as Cs,g as Zn,ga as hr,gb as Tr,h as Fi,hb as cs,i as Bi,ib as ds,ic as Ts,id as ke,j as Wi,ja as gr,jb as br,jc as bs,jd as Ms,ka as wr,kb as Er,kd as Os,la as Xi,lb as xr,ld as $r,md as Is,nb as ls,nd as Ps,ob as Rr,od as Ns,pb as Sr,qb as us,rd as Qt,sa as mt,tb as fs,td as Zt,u as er,ud as en,x as Hi,xb as pt,xd as tn,y as tr,yb as ms,yd as nn,z as Gi,zb as ps}from"./chunk-OQL4ISVD.js";import{Da as Bn,Ea as Ut,Fa as Wn,Ga as Hn,Ia as Gn,Ja as Xe,T as dt,_ as lt,h as jt,sa as ie}from"./chunk-LE6STNVN.js";import{Ad as $i,Bd as ge,C as di,Dd as ut,Ec as xi,Ed as Li,F as li,Fd as Ht,Ga as fi,Gc as Ri,Hc as Si,Ic as _i,Jc as Ai,Jd as Jn,Kd as Le,La as mi,Ld as Qn,Na as xe,Sd as ji,Ta as Vn,Ub as zn,Va as pi,Zc as ze,_a as hi,_c as Ci,ab as gi,db as wi,eb as ki,g as Ft,gb as yi,jb as Kn,k as Ee,kb as Xn,md as Mi,na as qn,nb as Bt,nd as Oi,ob as vi,od as Ii,pd as Pi,rc as Ti,s as ci,sc as bi,ta as ui,td as Ni,va as $e,vd as Di,xc as Ei,xd as Yn,yd as Wt,zd as Ye}from"./chunk-XFCAXDSD.js";import{a as o}from"./chunk-V4WSBIXB.js";var ht=class extends Error{static{o(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}};var Ur=class extends ht{static{o(this,"KodaXToolError")}toolName;toolId;constructor(t,n,r){super(t,"TOOL_ERROR"),this.toolName=n,this.toolId=r,this.name="KodaXToolError"}};var Fr=class extends ht{static{o(this,"KodaXSessionError")}sessionId;constructor(t,n){super(t,"SESSION_ERROR"),this.sessionId=n,this.name="KodaXSessionError"}},Br=class extends ht{static{o(this,"KodaXTerminalError")}suggestions;constructor(t,n=[]){super(t,"TERMINAL_ERROR"),this.name="KodaXTerminalError",this.suggestions=n}};function Ol(){return new rn}o(Ol,"createSessionControl");function Il(e,t){let n=new AbortController,r=!1,i=o(u=>{r||(r=!0,n.abort(u))},"markAborted");e.abortSignal&&(e.abortSignal.aborted?i(e.abortSignal.reason):e.abortSignal.addEventListener("abort",()=>i(e.abortSignal.reason),{once:!0}));let s=new rn;s.seed({provider:e.provider,model:e.modelOverride??e.model,reasoning:e.reasoningMode});let c={...e,abortSignal:n.signal,sessionControl:s},a=ke(c,t);return{id:e.session?.id??Pl(),get currentProvider(){return s.getProvider()},get currentModel(){return s.getModel()},get currentReasoning(){return s.getReasoning()},get aborted(){return r},get attached(){return s.isAttached()},setProvider:o(u=>s.setProvider(u),"setProvider"),setModel:o(u=>s.setModel(u),"setModel"),setReasoning:o(u=>s.setReasoning(u),"setReasoning"),abort:o(u=>i(u),"abort"),result:a}}o(Il,"startKodaX");function Pl(){return`sess_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}o(Pl,"generateSessionId");var rn=class{static{o(this,"SessionControlImpl")}mutators=null;providerValue;modelValue;reasoningValue;hasPendingProvider=!1;hasPendingModel=!1;hasPendingReasoning=!1;seed(t){this.providerValue=t.provider,this.modelValue=t.model,this.reasoningValue=t.reasoning}setProvider(t){this.providerValue=t,this.mutators?this.mutators.setProvider(t):this.hasPendingProvider=!0}setModel(t){this.modelValue=t,this.mutators?this.mutators.setModel(t):this.hasPendingModel=!0}setReasoning(t){this.reasoningValue=t,this.mutators?this.mutators.setReasoning(t):this.hasPendingReasoning=!0}getProvider(){return this.providerValue??""}getModel(){return this.modelValue}getReasoning(){return this.reasoningValue}isAttached(){return this.mutators!==null}_attach(t){this.mutators,this.mutators=t,this.hasPendingProvider&&this.providerValue!==void 0&&t.setProvider(this.providerValue),this.hasPendingModel&&t.setModel(this.modelValue),this.hasPendingReasoning&&t.setReasoning(this.reasoningValue),this.hasPendingProvider=!1,this.hasPendingModel=!1,this.hasPendingReasoning=!1}};function Nl(e,t){return e.kind!=="revise_count"?{ok:!0}:e.count<=3?{ok:!0}:{ok:!1,severity:"warn",reason:`boundedRevise: revise_count for harness="${e.harness}" reached ${e.count}, exceeding soft threshold 3`}}o(Nl,"observe");var Wr={id:"boundedRevise",description:"Per-harness revise count must stay within the soft threshold; crossings emit a warn signal for dispatch-eval (hard cap enforced by the budget controller).",observe:Nl};function Dl(e,t){return typeof e.maxBudget!="number"?{ok:!0}:e.maxBudget<=t.systemCap.maxBudget?{ok:!0}:{ok:!1,severity:"clamp",reason:`budgetCeiling: manifest.maxBudget=${e.maxBudget} exceeds systemCap.maxBudget=${t.systemCap.maxBudget}`,patch:{clampMaxBudget:t.systemCap.maxBudget}}}o(Dl,"admit");var Hr={id:"budgetCeiling",description:"manifest.maxBudget must be \u2264 systemCap.maxBudget; over-cap declarations are clamped down to the cap.",admit:Dl};function $l(e,t){return{ok:!0}}o($l,"observe");var Us={id:"harnessSelectionTiming",description:"FEATURE_193 V2 no-op shell \u2014 predicate always admits since V1 Scout retired. Kept registered for admission-framework / audit-array compat.",observe:$l};function Ll(e,t){if(e.kind!=="mutation_recorded")return{ok:!0};let n=t.recorder;return typeof n.todoUpdateCount!="number"?{ok:!0}:n.todoUpdateCount>0?{ok:!0}:n.workerTrivialDeclaration===!0?{ok:!0}:{ok:!1,severity:"warn",reason:`planBeforeMutate: Worker mutated ${e.file} without a prior todo_update plan commit and without a trivial declaration`}}o(Ll,"observe");var Fs={id:"planBeforeMutate",description:"Worker mutations should be preceded by a todo_update plan commit (or an explicit trivial declaration). Missing plan is a warn-only signal in v0.7.36.",observe:Ll};function Gr(e){switch(e){case"read":case"glob":case"grep":case"code_search":case"semantic_lookup":case"repo_overview":case"changed_scope":case"changed_diff":case"changed_diff_bundle":case"module_context":case"symbol_context":case"process_context":case"impact_estimate":case"cyclic_dependencies":case"ask_user_question":case"exit_plan_mode":return"read";case"write":case"edit":case"multi_edit":case"insert_after_anchor":case"undo":return"edit";case"bash":return"bash:mutating";case"web_search":case"web_fetch":case"mcp_search":case"mcp_describe":case"mcp_call":case"mcp_read_resource":case"mcp_get_prompt":return"bash:network";case"dispatch_child_task":case"emit_verdict":case"scaffold_tool":case"validate_tool":case"stage_construction":case"test_tool":case"activate_tool":case"scaffold_agent":case"validate_agent":case"stage_agent_construction":case"test_agent":case"activate_agent":case"worktree_create":case"worktree_remove":return"subagent";default:return"subagent"}}o(Gr,"resolveToolCapability");function jl(e){if(typeof e=="object"&&e!==null&&"name"in e){let t=e.name;if(typeof t=="string"&&t.length>0)return t}}o(jl,"getToolName");function Ul(e,t){if(!e.tools||e.tools.length===0)return{ok:!0};let n=new Set(t.systemCap.allowedToolCapabilities),r=[];for(let c of e.tools){let a=jl(c);if(!a)continue;let l=Gr(a);n.has(l)||r.push({name:a,capability:l})}if(r.length===0)return{ok:!0};let i=r.map(c=>c.name);return{ok:!1,severity:"clamp",reason:`toolPermission: tools requiring disallowed capabilities \u2014 ${r.map(c=>`${c.name}=${c.capability}`).join(", ")}`,patch:{removeTools:i}}}o(Ul,"admit");var qr={id:"toolPermission",description:"Every tool in manifest.tools must resolve to a capability tier that systemCap.allowedToolCapabilities permits; offending tools are clamped via removeTools.",admit:Ul};var Bs=[Hr,qr,Wr,Us,Fs];function Fl(){ui();for(let e of Bs)li(e)}o(Fl,"registerCodingInvariants");var on=class{static{o(this,"KodaXClient")}options;sessionId;messages=[];contextTokenSnapshot;constructor(t){this.options=t,this.sessionId=t.session?.id??"",this.messages=t.session?.initialMessages?[...t.session.initialMessages]:[],this.contextTokenSnapshot=t.context?.contextTokenSnapshot}async send(t){let n=this.messages.length>0?this.messages:this.options.session?.initialMessages,r=await ke({...this.options,session:{...this.options.session,id:this.sessionId||void 0,initialMessages:n},context:{...this.options.context,contextTokenSnapshot:this.contextTokenSnapshot}},t);return this.sessionId=r.sessionId,this.messages=r.messages,this.contextTokenSnapshot=r.contextTokenSnapshot,r}getSessionId(){return this.sessionId}getMessages(){return[...this.messages]}clear(){this.messages=[],this.sessionId="",this.contextTokenSnapshot=void 0}};function Bl(e){let t=new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}o(Bl,"dedupeBundles");function Ws(e){return e==="evidence-scan"?"winner-cancel":"none"}o(Ws,"resolveFanoutCancellationPolicy");function Wl(e,t,n){if(!(!e.fanout.admissible||!e.fanout.class))return{profile:e.profile,fanoutClass:e.fanout.class,maxChildren:e.fanout.maxChildren,bundles:t,reductionStrategy:n.strategy}}o(Wl,"createFanoutSchedulerInput");function Hl(e){let t=Bl(e.bundles.filter(a=>a.fanoutClass===e.fanoutClass));if(t.length===0)return{enabled:!1,profile:e.profile,fanoutClass:e.fanoutClass,branches:[],scheduledBundleIds:[],deferredBundleIds:[],maxParallel:1,mergeStrategy:e.reductionStrategy,cancellationPolicy:Ws(e.fanoutClass),reason:"No child bundles matched the requested fan-out class."};let n=e.maxChildren&&e.maxChildren>0?e.maxChildren:t.length,r=t.slice(0,n),i=t.slice(r.length),s=[...r.map(a=>({bundleId:a.id,status:"scheduled"})),...i.map(a=>({bundleId:a.id,status:"deferred",reason:"Deferred by the current AMA fan-out budget."}))],c=Math.max(1,Math.min(r.length,n));return{enabled:r.length>0,profile:e.profile,fanoutClass:e.fanoutClass,branches:s,scheduledBundleIds:r.map(a=>a.id),deferredBundleIds:i.map(a=>a.id),maxParallel:c,mergeStrategy:e.reductionStrategy,cancellationPolicy:Ws(e.fanoutClass),reason:i.length>0?`Scheduled ${r.length} child bundles and deferred ${i.length} to stay within the current AMA fan-out budget.`:`Scheduled ${r.length} child bundles for ${e.fanoutClass}.`}}o(Hl,"buildFanoutSchedulerPlan");function Hs(e,t){let n=e.branches.find(r=>r.bundleId===t);if(!n)throw new Error(`Unknown fan-out bundle id: ${t}`);return n}o(Hs,"getFanoutBranch");function Gl(e){return e.branches.filter(t=>t.status==="scheduled").length}o(Gl,"countActiveFanoutBranches");function sn(e,t){let n=Hs(e,t.bundleId);return{...e,branches:e.branches.map(r=>{if(r.bundleId!==t.bundleId)return r;switch(t.type){case"assign":return{...n,workerId:t.workerId};case"complete":return{...n,status:"completed",childId:t.childId??n.childId,reason:void 0};case"cancel":return{...n,status:"cancelled",reason:t.reason};default:return t}})}}o(sn,"applyFanoutBranchTransition");function ql(e,t,n){return sn(e,{type:"assign",bundleId:t,workerId:n})}o(ql,"assignFanoutBranchWorker");function Vl(e,t,n){return sn(e,{type:"complete",bundleId:t,childId:n})}o(Vl,"markFanoutBranchCompleted");function Kl(e,t,n){return sn(e,{type:"cancel",bundleId:t,reason:n})}o(Kl,"markFanoutBranchCancelled");var Gs="kodax-review-findings",qs="kodax-investigation-shards",Vs="kodax-lookup-shards",Ks="kodax-child-result";var Xs="kodax-budget-request";function je(e,t=!1){return{globalWorkBudget:e?.totalBudget,budgetUsage:e?.spentBudget,budgetApprovalRequired:t}}o(je,"buildManagedStatusBudgetFields");function gt(e,t=1){e.spentBudget=Math.max(0,e.spentBudget+t)}o(gt,"incrementManagedBudgetUsage");function zl(e,t=200){e.totalBudget+=t}o(zl,"extendManagedWorkBudget");async function Vr(e,t,n){if(!e?.askUser)return"skipped";if(!n.force){let l=Math.ceil(t.totalBudget*.9);if(t.spentBudget<l)return"skipped"}if(t.lastApprovalBudgetTotal===t.totalBudget)return"skipped";let r=n.additionalUnits??200,i=Math.min(100,Math.round(t.spentBudget/Math.max(1,t.totalBudget)*100)),s=/[\u4e00-\u9fff]/.test(n.originalTask??n.summary),c=await e.askUser({question:s?`\u5F53\u524D AMA \u8FD0\u884C\u5DF2\u4F7F\u7528 ${t.spentBudget}/${t.totalBudget} \u5DE5\u4F5C\u5355\u5143\uFF08${i}%\uFF09\uFF0C\u9700\u8981\u66F4\u591A\u5DE5\u4F5C\u91CF\u3002\u662F\u5426\u8FFD\u52A0 ${r} \u5355\u5143\uFF1F`:`This AMA run has used ${t.spentBudget}/${t.totalBudget} work units (${i}%) and needs more work. Add ${r} more work units?`,options:[{label:s?`\u7EE7\u7EED (+${r})`:`Continue (+${r})`,value:"continue",description:s?`\u8FFD\u52A0 ${r} \u5DE5\u4F5C\u5355\u5143\uFF0C\u4ECE\u7B2C ${n.currentRound}/${n.maxRounds} \u8F6E\u7EE7\u7EED\u3002`:`Grant ${r} more work units and continue from round ${n.currentRound}/${n.maxRounds}.`},{label:s?"\u505C\u6B62":"Stop here",value:"stop",description:s?`\u4F7F\u7528\u5F53\u524D\u6700\u4F73\u7ED3\u679C\u3002\u6700\u65B0\u8FDB\u5C55\uFF1A${Sr(n.summary,80)}`:`Finish now with the current best result. Latest note: ${Sr(n.summary,80)}`}],default:"continue"}),a=t.totalBudget;return c==="continue"?(t.lastApprovalBudgetTotal=a,zl(t,r),"approved"):(t.lastApprovalBudgetTotal=a,"denied")}o(Vr,"maybeRequestAdditionalWorkBudget");import{mkdir as Yl,readdir as Jl,readFile as Js,stat as Ql,unlink as Zl,writeFile as eu}from"node:fs/promises";import{execFile as tu}from"node:child_process";import{promisify as nu}from"node:util";import Ze from"node:path";import Ys from"node:path";function Re(e){return e.context?.taskSurface??"cli"}o(Re,"getManagedTaskSurface");function Se(e,t){if(e.context?.managedTaskWorkspaceDir?.trim())return Ys.resolve(e.context.managedTaskWorkspaceDir);let n=e.context?.executionCwd??e.context?.gitRoot??process.cwd();return Ys.resolve(n,".agent","managed-tasks")}o(Se,"getManagedTaskWorkspaceRoot");var ru=nu(tu),Qs=3600*1e3,an="checkpoint.json";async function cn(e){let t=Ze.resolve(e?.trim()||process.cwd());try{let{stdout:n}=await ru("git",["rev-parse","--short","HEAD"],{cwd:t});return n.trim()||void 0}catch{return}}o(cn,"getGitHeadCommit");async function Kr(e,t){await Yl(e,{recursive:!0}),await eu(Ze.join(e,an),`${JSON.stringify(t,null,2)}
2
+ import{$a as as,A as nr,Ab as ps,Bb as hs,Cb as gs,Cd as Qt,Da as zi,Db as Xt,E as rr,Ea as Yi,Eb as _r,Ed as Zt,F as or,Fa as Ji,Fb as Ar,Fd as en,G as ir,Ga as Qi,Gb as ws,Ha as Zi,Hb as ks,Ib as Cr,Id as tn,J as qi,Jd as nn,K as ft,Kb as Mr,La as es,Ld as Ds,M as sr,Ma as ts,Mb as Je,Md as $s,N as ar,Nb as zt,Nd as Ls,Ob as Or,Od as js,P as cr,Pb as ys,Q as dr,Qa as we,Qb as vs,R as lr,S as ur,Sb as Yt,Sd as z,T as fr,Td as Lr,U as Vi,V as Ki,W as mr,Wa as ns,Xa as rs,Xd as jr,Ya as os,Z as pr,Za as is,Zb as Jt,_a as ss,ab as Kt,c as Gt,cb as kr,d as Ui,da as Vt,db as yr,de as Qe,e as qt,fb as vr,g as Zn,ga as hr,gc as Ir,h as Fi,hb as Tr,hd as Es,i as Bi,ib as cs,id as xs,j as Wi,ja as gr,jb as ds,jc as Ts,jd as Rs,ka as wr,kb as br,kc as bs,kd as Pr,la as Xi,lb as Er,ld as Nr,mb as xr,md as Ss,nd as _s,ob as ls,od as Dr,pb as Rr,pd as As,qb as Sr,qd as Cs,rb as us,sa as mt,td as ke,u as er,ub as fs,ud as Ms,vd as Os,wd as $r,x as Hi,xd as Is,y as tr,yb as pt,yd as Ps,z as Gi,zb as ms,zd as Ns}from"./chunk-JEQ62ZMK.js";import{Da as Bn,Ea as Ut,Fa as Wn,Ga as Hn,Ia as Gn,Ja as Xe,T as dt,_ as lt,h as jt,sa as ie}from"./chunk-7C2QUBLE.js";import{$c as Ri,$d as Li,C as di,F as li,Ga as fi,Hd as Mi,Id as Oi,Jd as Ii,Kd as Pi,La as mi,Mc as Ti,Na as xe,Nc as bi,Qd as Ni,Sc as Ei,Sd as Di,Ta as Vn,Ud as Yn,Va as pi,Vd as Wt,Wd as Ye,Xd as $i,Yd as ge,Zc as xi,_a as hi,_d as ut,ab as gi,ad as Si,ae as Ht,bd as _i,cd as Ai,db as wi,eb as ki,ee as Jn,fe as Le,g as Ft,gb as yi,ge as Qn,jb as Kn,k as Ee,kb as Xn,na as qn,nb as Bt,nc as zn,ne as ji,ob as vi,s as ci,sd as ze,ta as ui,td as Ci,va as $e}from"./chunk-AMFPS2WC.js";import{a as o}from"./chunk-V4WSBIXB.js";var ht=class extends Error{static{o(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}};var Ur=class extends ht{static{o(this,"KodaXToolError")}toolName;toolId;constructor(t,n,r){super(t,"TOOL_ERROR"),this.toolName=n,this.toolId=r,this.name="KodaXToolError"}};var Fr=class extends ht{static{o(this,"KodaXSessionError")}sessionId;constructor(t,n){super(t,"SESSION_ERROR"),this.sessionId=n,this.name="KodaXSessionError"}},Br=class extends ht{static{o(this,"KodaXTerminalError")}suggestions;constructor(t,n=[]){super(t,"TERMINAL_ERROR"),this.name="KodaXTerminalError",this.suggestions=n}};function Ol(){return new rn}o(Ol,"createSessionControl");function Il(e,t){let n=new AbortController,r=!1,i=o(u=>{r||(r=!0,n.abort(u))},"markAborted");e.abortSignal&&(e.abortSignal.aborted?i(e.abortSignal.reason):e.abortSignal.addEventListener("abort",()=>i(e.abortSignal.reason),{once:!0}));let s=new rn;s.seed({provider:e.provider,model:e.modelOverride??e.model,reasoning:e.reasoningMode});let c={...e,abortSignal:n.signal,sessionControl:s},a=ke(c,t);return{id:e.session?.id??Pl(),get currentProvider(){return s.getProvider()},get currentModel(){return s.getModel()},get currentReasoning(){return s.getReasoning()},get aborted(){return r},get attached(){return s.isAttached()},setProvider:o(u=>s.setProvider(u),"setProvider"),setModel:o(u=>s.setModel(u),"setModel"),setReasoning:o(u=>s.setReasoning(u),"setReasoning"),abort:o(u=>i(u),"abort"),result:a}}o(Il,"startKodaX");function Pl(){return`sess_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}o(Pl,"generateSessionId");var rn=class{static{o(this,"SessionControlImpl")}mutators=null;providerValue;modelValue;reasoningValue;hasPendingProvider=!1;hasPendingModel=!1;hasPendingReasoning=!1;seed(t){this.providerValue=t.provider,this.modelValue=t.model,this.reasoningValue=t.reasoning}setProvider(t){this.providerValue=t,this.mutators?this.mutators.setProvider(t):this.hasPendingProvider=!0}setModel(t){this.modelValue=t,this.mutators?this.mutators.setModel(t):this.hasPendingModel=!0}setReasoning(t){this.reasoningValue=t,this.mutators?this.mutators.setReasoning(t):this.hasPendingReasoning=!0}getProvider(){return this.providerValue??""}getModel(){return this.modelValue}getReasoning(){return this.reasoningValue}isAttached(){return this.mutators!==null}_attach(t){this.mutators,this.mutators=t,this.hasPendingProvider&&this.providerValue!==void 0&&t.setProvider(this.providerValue),this.hasPendingModel&&t.setModel(this.modelValue),this.hasPendingReasoning&&t.setReasoning(this.reasoningValue),this.hasPendingProvider=!1,this.hasPendingModel=!1,this.hasPendingReasoning=!1}};function Nl(e,t){return e.kind!=="revise_count"?{ok:!0}:e.count<=3?{ok:!0}:{ok:!1,severity:"warn",reason:`boundedRevise: revise_count for harness="${e.harness}" reached ${e.count}, exceeding soft threshold 3`}}o(Nl,"observe");var Wr={id:"boundedRevise",description:"Per-harness revise count must stay within the soft threshold; crossings emit a warn signal for dispatch-eval (hard cap enforced by the budget controller).",observe:Nl};function Dl(e,t){return typeof e.maxBudget!="number"?{ok:!0}:e.maxBudget<=t.systemCap.maxBudget?{ok:!0}:{ok:!1,severity:"clamp",reason:`budgetCeiling: manifest.maxBudget=${e.maxBudget} exceeds systemCap.maxBudget=${t.systemCap.maxBudget}`,patch:{clampMaxBudget:t.systemCap.maxBudget}}}o(Dl,"admit");var Hr={id:"budgetCeiling",description:"manifest.maxBudget must be \u2264 systemCap.maxBudget; over-cap declarations are clamped down to the cap.",admit:Dl};function $l(e,t){return{ok:!0}}o($l,"observe");var Us={id:"harnessSelectionTiming",description:"FEATURE_193 V2 no-op shell \u2014 predicate always admits since V1 Scout retired. Kept registered for admission-framework / audit-array compat.",observe:$l};function Ll(e,t){if(e.kind!=="mutation_recorded")return{ok:!0};let n=t.recorder;return typeof n.todoUpdateCount!="number"?{ok:!0}:n.todoUpdateCount>0?{ok:!0}:n.workerTrivialDeclaration===!0?{ok:!0}:{ok:!1,severity:"warn",reason:`planBeforeMutate: Worker mutated ${e.file} without a prior todo_update plan commit and without a trivial declaration`}}o(Ll,"observe");var Fs={id:"planBeforeMutate",description:"Worker mutations should be preceded by a todo_update plan commit (or an explicit trivial declaration). Missing plan is a warn-only signal in v0.7.36.",observe:Ll};function Gr(e){switch(e){case"read":case"glob":case"grep":case"code_search":case"semantic_lookup":case"repo_overview":case"changed_scope":case"changed_diff":case"changed_diff_bundle":case"module_context":case"symbol_context":case"process_context":case"impact_estimate":case"cyclic_dependencies":case"ask_user_question":case"exit_plan_mode":return"read";case"write":case"edit":case"multi_edit":case"insert_after_anchor":case"undo":return"edit";case"bash":return"bash:mutating";case"web_search":case"web_fetch":case"mcp_search":case"mcp_describe":case"mcp_call":case"mcp_read_resource":case"mcp_get_prompt":return"bash:network";case"dispatch_child_task":case"emit_verdict":case"scaffold_tool":case"validate_tool":case"stage_construction":case"test_tool":case"activate_tool":case"scaffold_agent":case"validate_agent":case"stage_agent_construction":case"test_agent":case"activate_agent":case"worktree_create":case"worktree_remove":return"subagent";default:return"subagent"}}o(Gr,"resolveToolCapability");function jl(e){if(typeof e=="object"&&e!==null&&"name"in e){let t=e.name;if(typeof t=="string"&&t.length>0)return t}}o(jl,"getToolName");function Ul(e,t){if(!e.tools||e.tools.length===0)return{ok:!0};let n=new Set(t.systemCap.allowedToolCapabilities),r=[];for(let c of e.tools){let a=jl(c);if(!a)continue;let l=Gr(a);n.has(l)||r.push({name:a,capability:l})}if(r.length===0)return{ok:!0};let i=r.map(c=>c.name);return{ok:!1,severity:"clamp",reason:`toolPermission: tools requiring disallowed capabilities \u2014 ${r.map(c=>`${c.name}=${c.capability}`).join(", ")}`,patch:{removeTools:i}}}o(Ul,"admit");var qr={id:"toolPermission",description:"Every tool in manifest.tools must resolve to a capability tier that systemCap.allowedToolCapabilities permits; offending tools are clamped via removeTools.",admit:Ul};var Bs=[Hr,qr,Wr,Us,Fs];function Fl(){ui();for(let e of Bs)li(e)}o(Fl,"registerCodingInvariants");var on=class{static{o(this,"KodaXClient")}options;sessionId;messages=[];contextTokenSnapshot;constructor(t){this.options=t,this.sessionId=t.session?.id??"",this.messages=t.session?.initialMessages?[...t.session.initialMessages]:[],this.contextTokenSnapshot=t.context?.contextTokenSnapshot}async send(t){let n=this.messages.length>0?this.messages:this.options.session?.initialMessages,r=await ke({...this.options,session:{...this.options.session,id:this.sessionId||void 0,initialMessages:n},context:{...this.options.context,contextTokenSnapshot:this.contextTokenSnapshot}},t);return this.sessionId=r.sessionId,this.messages=r.messages,this.contextTokenSnapshot=r.contextTokenSnapshot,r}getSessionId(){return this.sessionId}getMessages(){return[...this.messages]}clear(){this.messages=[],this.sessionId="",this.contextTokenSnapshot=void 0}};function Bl(e){let t=new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}o(Bl,"dedupeBundles");function Ws(e){return e==="evidence-scan"?"winner-cancel":"none"}o(Ws,"resolveFanoutCancellationPolicy");function Wl(e,t,n){if(!(!e.fanout.admissible||!e.fanout.class))return{profile:e.profile,fanoutClass:e.fanout.class,maxChildren:e.fanout.maxChildren,bundles:t,reductionStrategy:n.strategy}}o(Wl,"createFanoutSchedulerInput");function Hl(e){let t=Bl(e.bundles.filter(a=>a.fanoutClass===e.fanoutClass));if(t.length===0)return{enabled:!1,profile:e.profile,fanoutClass:e.fanoutClass,branches:[],scheduledBundleIds:[],deferredBundleIds:[],maxParallel:1,mergeStrategy:e.reductionStrategy,cancellationPolicy:Ws(e.fanoutClass),reason:"No child bundles matched the requested fan-out class."};let n=e.maxChildren&&e.maxChildren>0?e.maxChildren:t.length,r=t.slice(0,n),i=t.slice(r.length),s=[...r.map(a=>({bundleId:a.id,status:"scheduled"})),...i.map(a=>({bundleId:a.id,status:"deferred",reason:"Deferred by the current AMA fan-out budget."}))],c=Math.max(1,Math.min(r.length,n));return{enabled:r.length>0,profile:e.profile,fanoutClass:e.fanoutClass,branches:s,scheduledBundleIds:r.map(a=>a.id),deferredBundleIds:i.map(a=>a.id),maxParallel:c,mergeStrategy:e.reductionStrategy,cancellationPolicy:Ws(e.fanoutClass),reason:i.length>0?`Scheduled ${r.length} child bundles and deferred ${i.length} to stay within the current AMA fan-out budget.`:`Scheduled ${r.length} child bundles for ${e.fanoutClass}.`}}o(Hl,"buildFanoutSchedulerPlan");function Hs(e,t){let n=e.branches.find(r=>r.bundleId===t);if(!n)throw new Error(`Unknown fan-out bundle id: ${t}`);return n}o(Hs,"getFanoutBranch");function Gl(e){return e.branches.filter(t=>t.status==="scheduled").length}o(Gl,"countActiveFanoutBranches");function sn(e,t){let n=Hs(e,t.bundleId);return{...e,branches:e.branches.map(r=>{if(r.bundleId!==t.bundleId)return r;switch(t.type){case"assign":return{...n,workerId:t.workerId};case"complete":return{...n,status:"completed",childId:t.childId??n.childId,reason:void 0};case"cancel":return{...n,status:"cancelled",reason:t.reason};default:return t}})}}o(sn,"applyFanoutBranchTransition");function ql(e,t,n){return sn(e,{type:"assign",bundleId:t,workerId:n})}o(ql,"assignFanoutBranchWorker");function Vl(e,t,n){return sn(e,{type:"complete",bundleId:t,childId:n})}o(Vl,"markFanoutBranchCompleted");function Kl(e,t,n){return sn(e,{type:"cancel",bundleId:t,reason:n})}o(Kl,"markFanoutBranchCancelled");var Gs="kodax-review-findings",qs="kodax-investigation-shards",Vs="kodax-lookup-shards",Ks="kodax-child-result";var Xs="kodax-budget-request";function je(e,t=!1){return{globalWorkBudget:e?.totalBudget,budgetUsage:e?.spentBudget,budgetApprovalRequired:t}}o(je,"buildManagedStatusBudgetFields");function gt(e,t=1){e.spentBudget=Math.max(0,e.spentBudget+t)}o(gt,"incrementManagedBudgetUsage");function zl(e,t=200){e.totalBudget+=t}o(zl,"extendManagedWorkBudget");async function Vr(e,t,n){if(!e?.askUser)return"skipped";if(!n.force){let l=Math.ceil(t.totalBudget*.9);if(t.spentBudget<l)return"skipped"}if(t.lastApprovalBudgetTotal===t.totalBudget)return"skipped";let r=n.additionalUnits??200,i=Math.min(100,Math.round(t.spentBudget/Math.max(1,t.totalBudget)*100)),s=/[\u4e00-\u9fff]/.test(n.originalTask??n.summary),c=await e.askUser({question:s?`\u5F53\u524D AMA \u8FD0\u884C\u5DF2\u4F7F\u7528 ${t.spentBudget}/${t.totalBudget} \u5DE5\u4F5C\u5355\u5143\uFF08${i}%\uFF09\uFF0C\u9700\u8981\u66F4\u591A\u5DE5\u4F5C\u91CF\u3002\u662F\u5426\u8FFD\u52A0 ${r} \u5355\u5143\uFF1F`:`This AMA run has used ${t.spentBudget}/${t.totalBudget} work units (${i}%) and needs more work. Add ${r} more work units?`,options:[{label:s?`\u7EE7\u7EED (+${r})`:`Continue (+${r})`,value:"continue",description:s?`\u8FFD\u52A0 ${r} \u5DE5\u4F5C\u5355\u5143\uFF0C\u4ECE\u7B2C ${n.currentRound}/${n.maxRounds} \u8F6E\u7EE7\u7EED\u3002`:`Grant ${r} more work units and continue from round ${n.currentRound}/${n.maxRounds}.`},{label:s?"\u505C\u6B62":"Stop here",value:"stop",description:s?`\u4F7F\u7528\u5F53\u524D\u6700\u4F73\u7ED3\u679C\u3002\u6700\u65B0\u8FDB\u5C55\uFF1A${Sr(n.summary,80)}`:`Finish now with the current best result. Latest note: ${Sr(n.summary,80)}`}],default:"continue"}),a=t.totalBudget;return c==="continue"?(t.lastApprovalBudgetTotal=a,zl(t,r),"approved"):(t.lastApprovalBudgetTotal=a,"denied")}o(Vr,"maybeRequestAdditionalWorkBudget");import{mkdir as Yl,readdir as Jl,readFile as Js,stat as Ql,unlink as Zl,writeFile as eu}from"node:fs/promises";import{execFile as tu}from"node:child_process";import{promisify as nu}from"node:util";import Ze from"node:path";import Ys from"node:path";function Re(e){return e.context?.taskSurface??"cli"}o(Re,"getManagedTaskSurface");function Se(e,t){if(e.context?.managedTaskWorkspaceDir?.trim())return Ys.resolve(e.context.managedTaskWorkspaceDir);let n=e.context?.executionCwd??e.context?.gitRoot??process.cwd();return Ys.resolve(n,".agent","managed-tasks")}o(Se,"getManagedTaskWorkspaceRoot");var ru=nu(tu),Qs=3600*1e3,an="checkpoint.json";async function cn(e){let t=Ze.resolve(e?.trim()||process.cwd());try{let{stdout:n}=await ru("git",["rev-parse","--short","HEAD"],{cwd:t});return n.trim()||void 0}catch{return}}o(cn,"getGitHeadCommit");async function Kr(e,t){await Yl(e,{recursive:!0}),await eu(Ze.join(e,an),`${JSON.stringify(t,null,2)}
3
3
  `,"utf8")}o(Kr,"writeCheckpoint");async function Ue(e){try{await Zl(Ze.join(e,an))}catch{}}o(Ue,"deleteCheckpoint");async function Xr(e){let t=e.context?.gitRoot,n=Re(e),r=Se(e,n),i;try{i=await Jl(r)}catch{return}let s=await cn(t),c=Date.now();for(let a of i){let l=Ze.join(r,a),u=Ze.join(l,an);try{if(!(await Ql(u)).isFile())continue;let d=await Js(u,"utf8"),f=JSON.parse(d);if(!f||typeof f!="object")continue;let p=f;if(p.version!==1||typeof p.taskId!="string"||typeof p.createdAt!="string"||typeof p.gitCommit!="string"||typeof p.harnessProfile!="string")continue;let h={version:1,taskId:p.taskId,createdAt:p.createdAt,gitCommit:p.gitCommit,objective:typeof p.objective=="string"?p.objective:"",harnessProfile:p.harnessProfile,currentRound:typeof p.currentRound=="number"?p.currentRound:1,completedWorkerIds:Array.isArray(p.completedWorkerIds)?p.completedWorkerIds.filter(T=>typeof T=="string"):[],scoutCompleted:p.scoutCompleted===!0},g=new Date(h.createdAt).getTime();if(Number.isNaN(g))continue;let y=c-g;if(y>Qs||y<0){await Ue(l);continue}if(s&&h.gitCommit&&h.gitCommit!==s){await Ue(l);continue}let R=Ze.join(l,"managed-task.json"),M=await Js(R,"utf8"),w=JSON.parse(M);if(!w||typeof w!="object")continue;let v=w;if(!v.contract?.taskId||!v.evidence?.workspaceDir)continue;return{checkpoint:h,workspaceDir:l,managedTask:v}}catch{continue}}}o(Xr,"findValidCheckpoint");import{mkdir as iu,writeFile as se}from"node:fs/promises";import N from"node:path";function zr(e){let t=e?.runtime;return t?`${["# Runtime Execution Guide","","Use this guide to drive live verification against the runtime under test.","",t.cwd?`- Working directory: ${t.cwd}`:void 0,t.startupCommand?`- Startup command: ${t.startupCommand}`:void 0,t.readySignal?`- Ready signal: ${t.readySignal}`:void 0,t.baseUrl?`- Base URL: ${t.baseUrl}`:void 0,t.env&&Object.keys(t.env).length>0?`- Environment keys: ${Object.keys(t.env).join(", ")}`:void 0,"","Execution protocol:",t.startupCommand?"1. Start or confirm the runtime using the declared startup command before accepting the task.":"1. Confirm the target runtime is available before accepting the task.",t.readySignal||t.baseUrl?"2. Wait until the runtime is ready, using the ready signal or base URL when available.":"2. Confirm runtime readiness using the strongest observable signal you have.",t.uiFlows?.length?["3. Execute the declared UI flows:",...t.uiFlows.map((r,i)=>` ${i+1}. ${r}`)].join(`
4
4
  `):"3. Execute the critical user-facing flow when browser verification is required.",t.apiChecks?.length?["4. Run the declared API checks:",...t.apiChecks.map((r,i)=>` ${i+1}. ${r}`)].join(`
5
5
  `):void 0,t.dbChecks?.length?["5. Run the declared DB checks:",...t.dbChecks.map((r,i)=>` ${i+1}. ${r}`)].join(`
@@ -118,7 +118,7 @@ ${u}`:u}o(kc,"resolveRoleInstructions");function yc(e,t){if(!e)return;let n=e.cr
118
118
 
119
119
  ${k}`:k)}if(s&&c){if(Da(c,g.name)&&fn(c),Ia(c,s)){let k=Na(s);M=M.length>0?`${M}
120
120
 
121
- ${k}`:k}Pa(c)}let v=(g.tools??[]).map(k=>({name:k.name,description:k.description,input_schema:k.input_schema})),T=_r(e),D=r?.(),$=ws("sa",T,g.reasoning,D),I=$==="off"?{enabled:!1,mode:"off"}:{enabled:!0,mode:$,depth:Ar($)};m.current+=1,e.events?.onIterationStart?.(m.current,d);let A;if(t)A=await t(w,v,M);else{let k=ie(e.provider??"anthropic"),C=e.provider??k.name??"anthropic",x=kr(C),H=x.requestTimeoutMs,O=x.streamIdleTimeoutMs,U=new vr,J=typeof k.supportsNonStreamingFallback=="function"?k.supportsNonStreamingFallback():!1,Q=new Tr(U,{...x,enableNonStreamingFallback:x.enableNonStreamingFallback&&J}),X=[...w];X=Xn(X),X=Kn(X);let Z=0,G,Ve=!1,ve=0;for(;;){Z+=1,U.beginRequest(C,p??k.getModel?.()??"unknown",X,Z,!1),br(U.snapshot());let te=new AbortController,L=setTimeout(()=>{te.abort(new Error("API Hard Timeout (10 minutes)"))},H),fe=O>0,S;fe&&(S=setTimeout(()=>{te.abort(new Error(`Stream stalled or delayed response (${O}ms idle)`))},O));let me=o(()=>{fe&&(S&&clearTimeout(S),te.signal.aborted||(S=setTimeout(()=>{te.abort(new Error(`Stream stalled or delayed response (${O}ms idle)`))},O)))},"resetIdleTimer"),pe=e.abortSignal?AbortSignal.any([e.abortSignal,te.signal]):te.signal,be=ys(X,M);Yt("[resilience:request]",{provider:C,attempt:Z,fallbackActive:!1,payloadBytes:be,payloadBucket:vs(be)});let It={modelOverride:p,onTextDelta:o(j=>{U.markTextDelta(j),me();let he=j.includes("```")||yt.some(Ke=>j.includes(Ke))?oo(j):j;he.length!==0&&e.events?.onTextDelta?.(he)},"onTextDelta"),onThinkingDelta:o(j=>{U.markThinkingDelta(j),me(),e.events?.onThinkingDelta?.(j)},"onThinkingDelta"),onThinkingEnd:o(j=>{e.events?.onThinkingEnd?.(j)},"onThinkingEnd"),onToolInputDelta:e.events?.onToolInputDelta,onRateLimit:o((j,ne,he)=>{me(),e.events&&Xt(e.events,j,ne,he)},"onRateLimit"),onRetryAfter:o(j=>{me(),f=Ut(f,{provider:j.provider,waitMs:j.waitMs,reason:j.reason,source:j.source}),e.events?.onRetryAfter?.(j)},"onRetryAfter")};try{if(G=await k.stream(X,[...v],M,I,It,pe),G.stopReason==="max_tokens"&&!Ve&&!process.env.KODAX_MAX_OUTPUT_TOKENS&&k.getEffectiveMaxOutputTokens(p)<64e3){Ve=!0,k.setMaxOutputTokensOverride(64e3),e.events?.onRetry?.(`Output budget reached, escalating to ${64e3} tokens and retrying the same turn`,1,1),L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,Z-=1;continue}if(Hf(G)&&G.stopReason!=="max_tokens"&&ve<Gt&&!e.abortSignal?.aborted){ve+=1,e.events?.onRetry?.(`Provider returned an empty turn, retrying ${ve}/${Gt}`,ve,Gt),L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,Z-=1,await Kt(Ui*ve,e.abortSignal);continue}break}catch(j){let ne=j instanceof Error?j:new Error(String(j));if(ne.name==="AbortError"&&te.signal.aborted&&!e.abortSignal?.aborted){let le=te.signal.reason?.message??"Stream stalled",{KodaXNetworkError:De}=await import("./dist-Z6U7TWKJ.js");ne=new De(le,!0)}let he=U.inferFailureStage(),Ke=yr(ne,he);cs(ne,Ke);let q=Q.decideRecoveryAction(ne,Ke,Z);if(ds(q,Z),e.events?.onProviderRecovery?.({stage:q.failureStage,errorClass:q.reasonCode,attempt:Z,maxAttempts:x.maxRetries,delayMs:q.delayMs,recoveryAction:q.action,ladderStep:q.ladderStep,fallbackUsed:q.shouldUseNonStreaming,serverRetryAfterMs:q.serverRetryAfterMs}),q.reasonCode==="rate_limit"&&e.events&&Xt(e.events,Z,x.maxRetries,q.delayMs),!e.events?.onProviderRecovery&&q.action!=="manual_continue"&&e.events?.onRetry?.(`${bs(ne)} \xB7 retry ${Z}/${x.maxRetries} in ${Math.round(q.delayMs/1e3)}s`,Z,x.maxRetries),q.shouldUseNonStreaming&&typeof k.complete=="function"){let le=new AbortController,De=e.abortSignal?AbortSignal.any([e.abortSignal,le.signal]):le.signal,Nn=setTimeout(()=>{le.abort(new Error("API Hard Timeout (10 minutes)"))},H);try{S&&clearTimeout(S),L&&clearTimeout(L),L=void 0,S=void 0,U.beginRequest(C,p??k.getModel?.()??"unknown",X,Z,!0),br(U.snapshot()),G=await k.complete(X,[...v],M,I,{modelOverride:p,onTextDelta:o(oe=>{U.markTextDelta(oe),e.events?.onTextDelta?.(oe)},"onTextDelta"),onThinkingDelta:o(oe=>{U.markThinkingDelta(oe),e.events?.onThinkingDelta?.(oe)},"onThinkingDelta"),onThinkingEnd:o(oe=>{e.events?.onThinkingEnd?.(oe)},"onThinkingEnd"),signal:De},De);break}catch(oe){ne=oe instanceof Error?oe:new Error(String(oe))}finally{clearTimeout(Nn)}}if(q.action==="sanitize_thinking_and_retry"){let le=Q.executeRecovery(X,q);Er(q.action,le),X=le.messages,L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,Z-=1,await Kt(q.delayMs,e.abortSignal);continue}if(q.action==="manual_continue"||Z>=x.maxRetries)throw Object.defineProperty(ne,"__kodaxRecoveredMessages",{value:X,enumerable:!1}),ne;let Pt=Q.executeRecovery(X,q);Er(q.action,Pt),X=Pt.messages,L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,await Kt(q.delayMs,e.abortSignal);continue}finally{L&&clearTimeout(L),S&&clearTimeout(S)}}let Pe=0,Te=(G.textBlocks??[]).map(te=>te.text).join(""),Ne=G.thinkingBlocks?[...G.thinkingBlocks]:void 0;for(;G.stopReason==="max_tokens"&&(G.toolBlocks?.length??0)===0&&Te.trim().length>0&&Pe<3;){Pe+=1,e.events?.onTextDelta?.(`
121
+ ${k}`:k}Pa(c)}let v=(g.tools??[]).map(k=>({name:k.name,description:k.description,input_schema:k.input_schema})),T=_r(e),D=r?.(),$=ws("sa",T,g.reasoning,D),I=$==="off"?{enabled:!1,mode:"off"}:{enabled:!0,mode:$,depth:Ar($)};m.current+=1,e.events?.onIterationStart?.(m.current,d);let A;if(t)A=await t(w,v,M);else{let k=ie(e.provider??"anthropic"),C=e.provider??k.name??"anthropic",x=kr(C),H=x.requestTimeoutMs,O=x.streamIdleTimeoutMs,U=new vr,J=typeof k.supportsNonStreamingFallback=="function"?k.supportsNonStreamingFallback():!1,Q=new Tr(U,{...x,enableNonStreamingFallback:x.enableNonStreamingFallback&&J}),X=[...w];X=Xn(X),X=Kn(X);let Z=0,G,Ve=!1,ve=0;for(;;){Z+=1,U.beginRequest(C,p??k.getModel?.()??"unknown",X,Z,!1),br(U.snapshot());let te=new AbortController,L=setTimeout(()=>{te.abort(new Error("API Hard Timeout (10 minutes)"))},H),fe=O>0,S;fe&&(S=setTimeout(()=>{te.abort(new Error(`Stream stalled or delayed response (${O}ms idle)`))},O));let me=o(()=>{fe&&(S&&clearTimeout(S),te.signal.aborted||(S=setTimeout(()=>{te.abort(new Error(`Stream stalled or delayed response (${O}ms idle)`))},O)))},"resetIdleTimer"),pe=e.abortSignal?AbortSignal.any([e.abortSignal,te.signal]):te.signal,be=ys(X,M);Yt("[resilience:request]",{provider:C,attempt:Z,fallbackActive:!1,payloadBytes:be,payloadBucket:vs(be)});let It={modelOverride:p,onTextDelta:o(j=>{U.markTextDelta(j),me();let he=j.includes("```")||yt.some(Ke=>j.includes(Ke))?oo(j):j;he.length!==0&&e.events?.onTextDelta?.(he)},"onTextDelta"),onThinkingDelta:o(j=>{U.markThinkingDelta(j),me(),e.events?.onThinkingDelta?.(j)},"onThinkingDelta"),onThinkingEnd:o(j=>{e.events?.onThinkingEnd?.(j)},"onThinkingEnd"),onToolInputDelta:e.events?.onToolInputDelta,onRateLimit:o((j,ne,he)=>{me(),e.events&&Xt(e.events,j,ne,he)},"onRateLimit"),onRetryAfter:o(j=>{me(),f=Ut(f,{provider:j.provider,waitMs:j.waitMs,reason:j.reason,source:j.source}),e.events?.onRetryAfter?.(j)},"onRetryAfter")};try{if(G=await k.stream(X,[...v],M,I,It,pe),G.stopReason==="max_tokens"&&!Ve&&!process.env.KODAX_MAX_OUTPUT_TOKENS&&k.getEffectiveMaxOutputTokens(p)<64e3){Ve=!0,k.setMaxOutputTokensOverride(64e3),e.events?.onRetry?.(`Output budget reached, escalating to ${64e3} tokens and retrying the same turn`,1,1),L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,Z-=1;continue}if(Hf(G)&&G.stopReason!=="max_tokens"&&ve<Gt&&!e.abortSignal?.aborted){ve+=1,e.events?.onRetry?.(`Provider returned an empty turn, retrying ${ve}/${Gt}`,ve,Gt),L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,Z-=1,await Kt(Ui*ve,e.abortSignal);continue}break}catch(j){let ne=j instanceof Error?j:new Error(String(j));if(ne.name==="AbortError"&&te.signal.aborted&&!e.abortSignal?.aborted){let le=te.signal.reason?.message??"Stream stalled",{KodaXNetworkError:De}=await import("./dist-BNKIZRCP.js");ne=new De(le,!0)}let he=U.inferFailureStage(),Ke=yr(ne,he);cs(ne,Ke);let q=Q.decideRecoveryAction(ne,Ke,Z);if(ds(q,Z),e.events?.onProviderRecovery?.({stage:q.failureStage,errorClass:q.reasonCode,attempt:Z,maxAttempts:x.maxRetries,delayMs:q.delayMs,recoveryAction:q.action,ladderStep:q.ladderStep,fallbackUsed:q.shouldUseNonStreaming,serverRetryAfterMs:q.serverRetryAfterMs}),q.reasonCode==="rate_limit"&&e.events&&Xt(e.events,Z,x.maxRetries,q.delayMs),!e.events?.onProviderRecovery&&q.action!=="manual_continue"&&e.events?.onRetry?.(`${bs(ne)} \xB7 retry ${Z}/${x.maxRetries} in ${Math.round(q.delayMs/1e3)}s`,Z,x.maxRetries),q.shouldUseNonStreaming&&typeof k.complete=="function"){let le=new AbortController,De=e.abortSignal?AbortSignal.any([e.abortSignal,le.signal]):le.signal,Nn=setTimeout(()=>{le.abort(new Error("API Hard Timeout (10 minutes)"))},H);try{S&&clearTimeout(S),L&&clearTimeout(L),L=void 0,S=void 0,U.beginRequest(C,p??k.getModel?.()??"unknown",X,Z,!0),br(U.snapshot()),G=await k.complete(X,[...v],M,I,{modelOverride:p,onTextDelta:o(oe=>{U.markTextDelta(oe),e.events?.onTextDelta?.(oe)},"onTextDelta"),onThinkingDelta:o(oe=>{U.markThinkingDelta(oe),e.events?.onThinkingDelta?.(oe)},"onThinkingDelta"),onThinkingEnd:o(oe=>{e.events?.onThinkingEnd?.(oe)},"onThinkingEnd"),signal:De},De);break}catch(oe){ne=oe instanceof Error?oe:new Error(String(oe))}finally{clearTimeout(Nn)}}if(q.action==="sanitize_thinking_and_retry"){let le=Q.executeRecovery(X,q);Er(q.action,le),X=le.messages,L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,Z-=1,await Kt(q.delayMs,e.abortSignal);continue}if(q.action==="manual_continue"||Z>=x.maxRetries)throw Object.defineProperty(ne,"__kodaxRecoveredMessages",{value:X,enumerable:!1}),ne;let Pt=Q.executeRecovery(X,q);Er(q.action,Pt),X=Pt.messages,L&&clearTimeout(L),S&&clearTimeout(S),L=void 0,S=void 0,await Kt(q.delayMs,e.abortSignal);continue}finally{L&&clearTimeout(L),S&&clearTimeout(S)}}let Pe=0,Te=(G.textBlocks??[]).map(te=>te.text).join(""),Ne=G.thinkingBlocks?[...G.thinkingBlocks]:void 0;for(;G.stopReason==="max_tokens"&&(G.toolBlocks?.length??0)===0&&Te.trim().length>0&&Pe<3;){Pe+=1,e.events?.onTextDelta?.(`
122
122
 
123
123
  [max_tokens reached, continuing...]
124
124
 
@@ -145,33 +145,33 @@ URL: ${n}
145
145
  Domain: ${r}
146
146
 
147
147
  Only continue if you trust this domain. KodaX will NOT open it automatically.`,kind:"select",options:[{label:"I trust this \u2014 open it myself and continue",value:"accept"},{label:"Decline",value:"decline"}]})==="accept"?{action:"accept",content:{}}:{action:"decline"}}o(lm,"elicitUrl");async function um(e,t){try{return t.mode==="url"?await lm(e,t):await dm(e,t)}catch{return{action:"cancel"}}}o(um,"elicitViaUserInteraction");function fm(){return async e=>{let t=mi();return!t||!t.askUser&&!t.askUserInput?{action:"decline"}:um(t,e)}}o(fm,"activeElicitHandler");function $c(e){let t=uo(e),n={};return t.length>0&&(n.listRoots=()=>t),e.enableElicitation&&(n.elicit=fm(),n.elicitationModes={form:!0,url:!0}),n.listRoots||n.elicit?n:void 0}o($c,"buildMcpReverseCapabilities");import Tt from"path";var Ae="official-sandbox",jc=[{label:"git reset --hard",pattern:/\bgit\s+reset\s+--hard\b/i},{label:"rm -rf",pattern:/\brm\s+-rf\b/i},{label:"Remove-Item -Recurse",pattern:/\bremove-item\b[\s\S]*\b-recurse\b/i}];function mm(e,t){let n=Tt.resolve(t),r=Tt.resolve(e);if(n===r)return!0;let i=Tt.relative(n,r);return i!==""&&!i.startsWith("..")&&!Tt.isAbsolute(i)}o(mm,"isPathInsideWorkspace");function pm(e){let t=e.mode??"best_effort",n=Tt.resolve(e.workspaceRoot);return{mode:t,workspaceRoot:n,guardedTools:["write","edit","bash"],bashBlocklist:jc.map(r=>r.label),semantics:t==="enforced"?"Workspace-bound file mutations and a narrow destructive bash blocklist are enforced.":"Workspace-bound file mutations and a narrow destructive bash blocklist are best-effort and should not be treated as complete isolation."}}o(pm,"buildPolicySnapshot");function hm(e){return["# Official Sandbox Policy","",`Mode: ${e.mode}`,`Workspace root: ${e.workspaceRoot}`,`Guarded tools: ${e.guardedTools.join(", ")}`,`Bash blocklist: ${e.bashBlocklist.join(", ")}`,"",e.semantics].join(`
148
- `)}o(hm,"formatPolicyContent");function gm(e){return{kind:"resource",content:hm(e),structuredContent:e,metadata:{mode:e.mode,workspaceRoot:e.workspaceRoot,guardedTools:e.guardedTools,bashBlocklist:e.bashBlocklist}}}o(gm,"buildPolicyResult");function Lc(e,t){let n=jr(e);if(!n)throw new Error(`Missing builtin tool definition for "${e}".`);let r=n.handler;return{...n,handler:o(async(i,s)=>{let c=typeof i.path=="string"?i.path:"",a=Bi(c,s);return mm(a,t.workspaceRoot)?r(i,s):`[Tool Error] ${e}: Blocked by official sandbox (${t.mode}). ${a} is outside workspace root ${t.workspaceRoot}.`},"handler")}}o(Lc,"createPathGuardedTool");function Uc(e,t){let n=pm(t),r=[],i={id:Ae,kinds:["resource"],read:o(async s=>s!=="policy"?{kind:"resource",content:`Unknown official sandbox resource: ${s}`,metadata:{providerId:Ae}}:gm(n),"read"),getDiagnostics:o(()=>({mode:n.mode,workspaceRoot:n.workspaceRoot,guardedTools:n.guardedTools,bashBlocklist:n.bashBlocklist}),"getDiagnostics")};return r.push(e.registerCapabilityProvider(i)),r.push(e.registerTool(Lc("write",n),{source:{kind:"extension",id:`${Ae}:write`,label:Ae}})),r.push(e.registerTool(Lc("edit",n),{source:{kind:"extension",id:`${Ae}:edit`,label:Ae}})),r.push(e.registerHook("tool:before",s=>{if(s.name!=="bash")return;let c=typeof s.input.command=="string"?s.input.command:"",a=jc.find(l=>l.pattern.test(c));if(a)return`[Tool Error] bash: Blocked by official sandbox (${n.mode}). Command matches destructive policy: ${a.label}.`},{source:{kind:"runtime",id:`${Ae}:hook:tool-before`,label:Ae}})),()=>{for(let s of r.reverse())s()}}o(Uc,"registerOfficialSandboxExtension");import{appendFile as Wc,mkdir as Fc,writeFile as Oe}from"node:fs/promises";import{randomUUID as Em}from"node:crypto";import W from"node:path";function Bc(e){return{id:e.id,title:e.title,dependsOn:e.dependsOn??[],execution:e.execution??"serial",timeoutMs:e.timeoutMs??null,budget:e.budget??null,agent:e.agent??null,metadata:e.metadata??null}}o(Bc,"toSerializableTask");function xm(e,t){let n=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||`task-${t+1}`;return`${String(t+1).padStart(2,"0")}-${n}`}o(xm,"createTaskDirectoryName");function fo(e,t=1600){return e.length<=t?e:`${e.slice(0,Math.max(0,t-3))}...`}o(fo,"truncateText");var Rm=8e3,Sm=1200;function _m(e){return e instanceof Error?e.message:String(e)}o(_m,"createErrorMessage");function Am(e,t){let n=[];for(let r of e.dependsOn??[]){let i=t.get(r);!i||i.status==="completed"||n.push(`${r} (${i.status})`)}return n}o(Am,"summarizeFailedDependencies");function Cm(e){let t=new Set;for(let a of e){if(!a.id?.trim())throw new Error("Orchestration tasks must have a non-empty id.");if(t.has(a.id))throw new Error(`Duplicate orchestration task id: ${a.id}`);t.add(a.id)}let n=new Set(e.map(a=>a.id));for(let a of e)for(let l of a.dependsOn??[]){if(!n.has(l))throw new Error(`Task ${a.id} depends on unknown task ${l}`);if(l===a.id)throw new Error(`Task ${a.id} cannot depend on itself`)}let r=new Set,i=new Set,s=new Map(e.map(a=>[a.id,a]));function c(a){if(r.has(a))return;if(i.has(a))throw new Error(`Detected orchestration dependency cycle involving ${a}`);i.add(a);let l=s.get(a);for(let u of l?.dependsOn??[])c(u);i.delete(a),r.add(a)}o(c,"visit");for(let a of e)c(a.id)}o(Cm,"validateTasks");async function Me(e,t){await Oe(e,`${JSON.stringify(t,null,2)}
148
+ `)}o(hm,"formatPolicyContent");function gm(e){return{kind:"resource",content:hm(e),structuredContent:e,metadata:{mode:e.mode,workspaceRoot:e.workspaceRoot,guardedTools:e.guardedTools,bashBlocklist:e.bashBlocklist}}}o(gm,"buildPolicyResult");function Lc(e,t){let n=jr(e);if(!n)throw new Error(`Missing builtin tool definition for "${e}".`);let r=n.handler;return{...n,handler:o(async(i,s)=>{let c=typeof i.path=="string"?i.path:"",a=Bi(c,s);return mm(a,t.workspaceRoot)?r(i,s):`[Tool Error] ${e}: Blocked by official sandbox (${t.mode}). ${a} is outside workspace root ${t.workspaceRoot}.`},"handler")}}o(Lc,"createPathGuardedTool");function Uc(e,t){let n=pm(t),r=[],i={id:Ae,kinds:["resource"],read:o(async s=>s!=="policy"?{kind:"resource",content:`Unknown official sandbox resource: ${s}`,metadata:{providerId:Ae}}:gm(n),"read"),getDiagnostics:o(()=>({mode:n.mode,workspaceRoot:n.workspaceRoot,guardedTools:n.guardedTools,bashBlocklist:n.bashBlocklist}),"getDiagnostics")};return r.push(e.registerCapabilityProvider(i)),r.push(e.registerTool(Lc("write",n),{source:{kind:"extension",id:`${Ae}:write`,label:Ae}})),r.push(e.registerTool(Lc("edit",n),{source:{kind:"extension",id:`${Ae}:edit`,label:Ae}})),r.push(e.registerHook("tool:before",s=>{if(s.name!=="bash")return;let c=typeof s.input.command=="string"?s.input.command:"",a=jc.find(l=>l.pattern.test(c));if(a)return`[Tool Error] bash: Blocked by official sandbox (${n.mode}). Command matches destructive policy: ${a.label}.`},{source:{kind:"runtime",id:`${Ae}:hook:tool-before`,label:Ae}})),()=>{for(let s of r.reverse())s()}}o(Uc,"registerOfficialSandboxExtension");import{appendFile as Wc,mkdir as Fc,writeFile as Oe}from"node:fs/promises";import{randomUUID as Pm}from"node:crypto";import W from"node:path";function Bc(e){return{id:e.id,title:e.title,dependsOn:e.dependsOn??[],execution:e.execution??"serial",timeoutMs:e.timeoutMs??null,budget:e.budget??null,agent:e.agent??null,metadata:e.metadata??null}}o(Bc,"toSerializableTask");function Nm(e,t){let n=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||`task-${t+1}`;return`${String(t+1).padStart(2,"0")}-${n}`}o(Nm,"createTaskDirectoryName");function fo(e,t=1600){return e.length<=t?e:`${e.slice(0,Math.max(0,t-3))}...`}o(fo,"truncateText");var Dm=8e3,$m=1200;function Lm(e){return e instanceof Error?e.message:String(e)}o(Lm,"createErrorMessage");function jm(e,t){let n=[];for(let r of e.dependsOn??[]){let i=t.get(r);!i||i.status==="completed"||n.push(`${r} (${i.status})`)}return n}o(jm,"summarizeFailedDependencies");function Um(e){let t=new Set;for(let a of e){if(!a.id?.trim())throw new Error("Orchestration tasks must have a non-empty id.");if(t.has(a.id))throw new Error(`Duplicate orchestration task id: ${a.id}`);t.add(a.id)}let n=new Set(e.map(a=>a.id));for(let a of e)for(let l of a.dependsOn??[]){if(!n.has(l))throw new Error(`Task ${a.id} depends on unknown task ${l}`);if(l===a.id)throw new Error(`Task ${a.id} cannot depend on itself`)}let r=new Set,i=new Set,s=new Map(e.map(a=>[a.id,a]));function c(a){if(r.has(a))return;if(i.has(a))throw new Error(`Detected orchestration dependency cycle involving ${a}`);i.add(a);let l=s.get(a);for(let u of l?.dependsOn??[])c(u);i.delete(a),r.add(a)}o(c,"visit");for(let a of e)c(a.id)}o(Um,"validateTasks");async function Me(e,t){await Oe(e,`${JSON.stringify(t,null,2)}
149
149
  `,"utf8")}o(Me,"writeJsonFile");async function Ce(e,t){await Wc(e,`${JSON.stringify(t)}
150
- `,"utf8")}o(Ce,"appendTrace");function Mm(e,t){return{taskDir:e,generatedAt:new Date().toISOString(),dependencies:Object.values(t).map(n=>{let r=typeof n.result.output=="string"?n.result.output:void 0,i=n.result.summary??n.result.error??"No summary available.";return{id:n.id,title:n.title,status:n.status,taskDir:n.taskDir,summary:i,resultArtifact:W.join(n.taskDir,"result.json"),summaryArtifact:n.result.summary?W.join(n.taskDir,"summary.md"):void 0,artifacts:n.result.artifacts??[],outputExcerpt:r?fo(r,Rm):void 0}})}}o(Mm,"createDependencyHandoffBundle");function Om(e){return e.dependencies.length===0?`# Dependency Handoff
150
+ `,"utf8")}o(Ce,"appendTrace");function Fm(e,t){return{taskDir:e,generatedAt:new Date().toISOString(),dependencies:Object.values(t).map(n=>{let r=typeof n.result.output=="string"?n.result.output:void 0,i=n.result.summary??n.result.error??"No summary available.";return{id:n.id,title:n.title,status:n.status,taskDir:n.taskDir,summary:i,resultArtifact:W.join(n.taskDir,"result.json"),summaryArtifact:n.result.summary?W.join(n.taskDir,"summary.md"):void 0,artifacts:n.result.artifacts??[],outputExcerpt:r?fo(r,Dm):void 0}})}}o(Fm,"createDependencyHandoffBundle");function Bm(e){return e.dependencies.length===0?`# Dependency Handoff
151
151
 
152
152
  No upstream dependencies.
153
153
  `:["# Dependency Handoff","",...e.dependencies.flatMap(t=>[`## ${t.id} (${t.title})`,`- Status: ${t.status}`,`- Result artifact: ${t.resultArtifact}`,t.summaryArtifact?`- Summary artifact: ${t.summaryArtifact}`:void 0,t.artifacts.length>0?["- Additional artifacts:",...t.artifacts.map(n=>` - ${n.kind}: ${n.path}${n.description?` (${n.description})`:""}`)].join(`
154
154
  `):void 0,`- Summary: ${t.summary}`,t.outputExcerpt?["- Output excerpt:","```text",t.outputExcerpt,"```"].join(`
155
155
  `):void 0,""].filter(n=>!!n))].join(`
156
- `)}o(Om,"renderDependencyHandoffMarkdown");async function mo(e,t){let n=Mm(e,t);await Me(W.join(e,"handoff.json"),n),await Oe(W.join(e,"handoff.md"),`${Om(n).trimEnd()}
157
- `,"utf8")}o(mo,"writeDependencyHandoffArtifacts");function Hc(...e){let t=e.filter(s=>!!s);if(t.length===0)return;if(t.length===1)return t[0];if(typeof AbortSignal.any=="function")return AbortSignal.any(t);let n=new AbortController,r=[],i=o(s=>{if(!n.signal.aborted){n.abort(s.reason??new Error("Operation aborted."));for(let c of r)c.signal.removeEventListener("abort",c.listener)}},"abortWithReason");for(let s of t){if(s.aborted){i(s);break}let c=o(()=>i(s),"listener");r.push({signal:s,listener:c}),s.addEventListener("abort",c,{once:!0})}return n.signal}o(Hc,"mergeAbortSignals");function po(e){let t=e?.reason;return t instanceof Error&&t.message.trim()?`Orchestration cancelled: ${t.message}`:typeof t=="string"&&t.trim()?`Orchestration cancelled: ${t}`:"Orchestration cancelled by user."}o(po,"formatAbortMessage");function bt(e){return!!e?.aborted}o(bt,"shouldSuppressLifecycleEvents");async function Im(e,t,n){if(!t||t<=0)return e();let r,i=new Promise((s,c)=>{r=setTimeout(()=>{let a=new Error(`Task timed out after ${t}ms`);n.abort(a),c(a)},t)});try{return await Promise.race([e(),i])}finally{r&&clearTimeout(r)}}o(Im,"withTimeout");function Pm(e,t,n,r){let i=`Blocked by failed dependencies: ${t.join(", ")}`;return{id:e.task.id,title:e.task.title,task:e.task,status:"blocked",taskDir:e.taskDir,startedAt:n,completedAt:r,durationMs:Math.max(0,new Date(r).getTime()-new Date(n).getTime()),result:{success:!1,error:i,summary:i,metadata:{blockedBy:t}}}}o(Pm,"buildBlockedTaskResult");function Gc(e,t,n,r){return{id:e.task.id,title:e.task.title,task:e.task,status:"blocked",taskDir:e.taskDir,startedAt:t,completedAt:n,durationMs:Math.max(0,new Date(n).getTime()-new Date(t).getTime()),result:{success:!1,error:r,summary:r,metadata:{signal:"BLOCKED",signalReason:r,cancelled:!0}}}}o(Gc,"buildCancelledTaskResult");function Nm(e,t){return t.success?{...t,summary:t.summary??(typeof t.output=="string"?t.output:void 0)}:{...t,error:t.error??`${e.title} failed without an explicit error.`,summary:t.summary??t.error??`${e.title} failed.`}}o(Nm,"normalizeWorkerResult");async function Dm(e,t,n,r){await Fc(e,{recursive:!0});let i=W.join(e,"trace.ndjson");await Me(W.join(e,"run.json"),{runId:t,createdAt:new Date().toISOString(),maxParallel:n,tasks:r.map(s=>({...Bc(s.task),taskDir:W.relative(e,s.taskDir).replace(/\\/g,"/")}))}),await Oe(i,"","utf8");for(let s of r)await Fc(s.taskDir,{recursive:!0}),await Me(W.join(s.taskDir,"spec.json"),{...Bc(s.task),input:s.task.input??null}),await Oe(W.join(s.taskDir,"log.md"),`# ${s.task.title}
156
+ `)}o(Bm,"renderDependencyHandoffMarkdown");async function mo(e,t){let n=Fm(e,t);await Me(W.join(e,"handoff.json"),n),await Oe(W.join(e,"handoff.md"),`${Bm(n).trimEnd()}
157
+ `,"utf8")}o(mo,"writeDependencyHandoffArtifacts");function Hc(...e){let t=e.filter(s=>!!s);if(t.length===0)return;if(t.length===1)return t[0];if(typeof AbortSignal.any=="function")return AbortSignal.any(t);let n=new AbortController,r=[],i=o(s=>{if(!n.signal.aborted){n.abort(s.reason??new Error("Operation aborted."));for(let c of r)c.signal.removeEventListener("abort",c.listener)}},"abortWithReason");for(let s of t){if(s.aborted){i(s);break}let c=o(()=>i(s),"listener");r.push({signal:s,listener:c}),s.addEventListener("abort",c,{once:!0})}return n.signal}o(Hc,"mergeAbortSignals");function po(e){let t=e?.reason;return t instanceof Error&&t.message.trim()?`Orchestration cancelled: ${t.message}`:typeof t=="string"&&t.trim()?`Orchestration cancelled: ${t}`:"Orchestration cancelled by user."}o(po,"formatAbortMessage");function bt(e){return!!e?.aborted}o(bt,"shouldSuppressLifecycleEvents");async function Wm(e,t,n){if(!t||t<=0)return e();let r,i=new Promise((s,c)=>{r=setTimeout(()=>{let a=new Error(`Task timed out after ${t}ms`);n.abort(a),c(a)},t)});try{return await Promise.race([e(),i])}finally{r&&clearTimeout(r)}}o(Wm,"withTimeout");function Hm(e,t,n,r){let i=`Blocked by failed dependencies: ${t.join(", ")}`;return{id:e.task.id,title:e.task.title,task:e.task,status:"blocked",taskDir:e.taskDir,startedAt:n,completedAt:r,durationMs:Math.max(0,new Date(r).getTime()-new Date(n).getTime()),result:{success:!1,error:i,summary:i,metadata:{blockedBy:t}}}}o(Hm,"buildBlockedTaskResult");function Gc(e,t,n,r){return{id:e.task.id,title:e.task.title,task:e.task,status:"blocked",taskDir:e.taskDir,startedAt:t,completedAt:n,durationMs:Math.max(0,new Date(n).getTime()-new Date(t).getTime()),result:{success:!1,error:r,summary:r,metadata:{signal:"BLOCKED",signalReason:r,cancelled:!0}}}}o(Gc,"buildCancelledTaskResult");function Gm(e,t){return t.success?{...t,summary:t.summary??(typeof t.output=="string"?t.output:void 0)}:{...t,error:t.error??`${e.title} failed without an explicit error.`,summary:t.summary??t.error??`${e.title} failed.`}}o(Gm,"normalizeWorkerResult");async function qm(e,t,n,r){await Fc(e,{recursive:!0});let i=W.join(e,"trace.ndjson");await Me(W.join(e,"run.json"),{runId:t,createdAt:new Date().toISOString(),maxParallel:n,tasks:r.map(s=>({...Bc(s.task),taskDir:W.relative(e,s.taskDir).replace(/\\/g,"/")}))}),await Oe(i,"","utf8");for(let s of r)await Fc(s.taskDir,{recursive:!0}),await Me(W.join(s.taskDir,"spec.json"),{...Bc(s.task),input:s.task.input??null}),await Oe(W.join(s.taskDir,"log.md"),`# ${s.task.title}
158
158
 
159
159
  - Task ID: ${s.task.id}
160
160
  - Execution: ${s.task.execution??"serial"}
161
- `,"utf8");return i}o(Dm,"prepareWorkspace");async function $m(e,t,n,r,i){if(t.signal?.aborted){let h=new Date().toISOString(),g=Gc(e,h,new Date().toISOString(),po(t.signal));return await mo(e.taskDir,{}),await Me(W.join(e.taskDir,"result.json"),g),await Oe(W.join(e.taskDir,"summary.md"),`${g.result.summary}
161
+ `,"utf8");return i}o(qm,"prepareWorkspace");async function Vm(e,t,n,r,i){if(t.signal?.aborted){let h=new Date().toISOString(),g=Gc(e,h,new Date().toISOString(),po(t.signal));return await mo(e.taskDir,{}),await Me(W.join(e.taskDir,"result.json"),g),await Oe(W.join(e.taskDir,"summary.md"),`${g.result.summary}
162
162
  `,"utf8"),await Ce(r,{type:"task_blocked",timestamp:g.completedAt,runId:n,taskId:e.task.id,status:"blocked",message:g.result.summary}),g}let s=new Date().toISOString(),c=Object.fromEntries((e.task.dependsOn??[]).map(h=>{let g=i.get(h);return g?[h,g]:void 0}).filter(h=>!!h));await mo(e.taskDir,c),await Ce(r,{type:"task_started",timestamp:s,runId:n,taskId:e.task.id,metadata:{dependsOn:e.task.dependsOn??[],execution:e.task.execution??"serial"}}),bt(t.signal)||await t.events?.onTaskStart?.(e.task);let a=o(async h=>{let g=new Date().toISOString();await Wc(W.join(e.taskDir,"log.md"),`- [${g}] ${h}
163
- `,"utf8"),await Ce(r,{type:"task_message",timestamp:g,runId:n,taskId:e.task.id,message:h}),bt(t.signal)||await t.events?.onTaskMessage?.(e.task,h)},"emit"),l=new AbortController,u=Hc(t.signal,l.signal),m,d;try{m=Nm(e.task,await Im(()=>t.runner(e.task,{runId:n,workspaceDir:t.workspaceDir,taskDir:e.taskDir,dependencyResults:c,emit:a,signal:u}),e.task.timeoutMs,l)),d=m.success?"completed":"failed"}catch(h){let g=_m(h);m={success:!1,error:g,summary:g},d="failed",await a(`Worker failed: ${g}`)}let f=new Date().toISOString(),p={id:e.task.id,title:e.task.title,task:e.task,status:d,taskDir:e.taskDir,startedAt:s,completedAt:f,durationMs:Math.max(0,new Date(f).getTime()-new Date(s).getTime()),result:m};return await Me(W.join(e.taskDir,"result.json"),p),m.summary&&await Oe(W.join(e.taskDir,"summary.md"),`${m.summary}
164
- `,"utf8"),await Ce(r,{type:d==="completed"?"task_completed":"task_failed",timestamp:f,runId:n,taskId:e.task.id,status:d,message:m.summary??m.error}),bt(t.signal)||await t.events?.onTaskComplete?.(e.task,p),p}o($m,"executeTaskRecord");async function Lm(e){Cm(e.tasks);let t=e.runId??`run-${Em()}`,n=W.resolve(e.workspaceDir),r=Math.max(1,e.maxParallel??1),i=e.tasks.map((d,f)=>({task:d,index:f,taskDir:W.join(n,"tasks",xm(d.id,f))})),s=await Dm(n,t,r,i);await Ce(s,{type:"run_started",timestamp:new Date().toISOString(),runId:t,metadata:{workspaceDir:n,taskCount:i.length,maxParallel:r}}),await e.events?.onRunStart?.({runId:t,workspaceDir:n,taskCount:i.length});let c=new Set(i.map(d=>d.task.id)),a=new Map;for(;c.size>0;){if(e.signal?.aborted){let y=po(e.signal);for(let R of i){if(!c.has(R.task.id))continue;let M=new Date().toISOString(),w=Gc(R,M,new Date().toISOString(),y);await Me(W.join(R.taskDir,"result.json"),w),await Oe(W.join(R.taskDir,"summary.md"),`${w.result.summary}
165
- `,"utf8"),await Ce(s,{type:"task_blocked",timestamp:w.completedAt,runId:t,taskId:R.task.id,status:"blocked",message:w.result.summary}),bt(e.signal)||await e.events?.onTaskComplete?.(R.task,w),a.set(R.task.id,w),c.delete(R.task.id)}break}let d=!1;for(let y of i){if(!c.has(y.task.id))continue;let R=Am(y.task,a);if(R.length===0)continue;let M=new Date().toISOString(),w=Pm(y,R,M,new Date().toISOString());await mo(y.taskDir,Object.fromEntries((y.task.dependsOn??[]).map(v=>{let T=a.get(v);return T?[v,T]:void 0}).filter(v=>!!v))),await Me(W.join(y.taskDir,"result.json"),w),await Oe(W.join(y.taskDir,"summary.md"),`${w.result.summary}
166
- `,"utf8"),await Ce(s,{type:"task_blocked",timestamp:w.completedAt,runId:t,taskId:y.task.id,status:"blocked",message:w.result.summary}),bt(e.signal)||await e.events?.onTaskComplete?.(y.task,w),a.set(y.task.id,w),c.delete(y.task.id),d=!0}let f=i.filter(y=>c.has(y.task.id)?(y.task.dependsOn??[]).every(R=>a.get(R)?.status==="completed"):!1);if(f.length===0){if(d)continue;throw new Error("No runnable orchestration tasks remain. Check dependency configuration.")}let p=f.filter(y=>(y.task.execution??"serial")==="parallel"),h=p.length>0&&r>1?p.slice(0,r):[f[0]];if(e.signal?.aborted)continue;let g=await Promise.all(h.map(y=>$m(y,e,t,s,a)));for(let y of g)a.set(y.id,y),c.delete(y.id)}let l=i.map(d=>a.get(d.task.id)).filter(d=>!!d),u={total:l.length,completed:l.filter(d=>d.status==="completed").length,failed:l.filter(d=>d.status==="failed").length,blocked:l.filter(d=>d.status==="blocked").length},m={runId:t,workspaceDir:n,tasks:l,taskResults:Object.fromEntries(l.map(d=>[d.id,d])),summary:u};return await Me(W.join(n,"summary.json"),{runId:t,completedAt:new Date().toISOString(),summary:u,tasks:l.map(d=>({id:d.id,title:d.title,status:d.status,durationMs:d.durationMs,taskDir:W.relative(n,d.taskDir).replace(/\\/g,"/"),summary:d.result.summary??null}))}),await Ce(s,{type:"run_completed",timestamp:new Date().toISOString(),runId:t,metadata:u}),await e.events?.onRunComplete?.(m),m}o(Lm,"runOrchestration");function jm(e){let t=Object.values(e.dependencyResults);if(t.length!==0)return["Dependency handoff artifacts:",`- Read structured bundle first: ${W.join(e.taskDir,"handoff.json")}`,`- Read human summary next: ${W.join(e.taskDir,"handoff.md")}`,"Dependency summary preview:",...t.map(n=>{let r=n.result.summary??n.result.error??"No summary available.";return[`- ${n.id} (${n.title})`,` Status: ${n.status}`,` Summary: ${fo(r,600)}`,` Result artifact: ${W.join(n.taskDir,"result.json")}`,n.result.summary?` Summary artifact: ${W.join(n.taskDir,"summary.md")}`:void 0,n.result.artifacts?.length?` Additional artifacts: ${n.result.artifacts.map(i=>i.path).join(", ")}`:void 0,typeof n.result.output=="string"?` Output excerpt: ${fo(n.result.output,Sm)}`:void 0].filter(i=>!!i).join(`
163
+ `,"utf8"),await Ce(r,{type:"task_message",timestamp:g,runId:n,taskId:e.task.id,message:h}),bt(t.signal)||await t.events?.onTaskMessage?.(e.task,h)},"emit"),l=new AbortController,u=Hc(t.signal,l.signal),m,d;try{m=Gm(e.task,await Wm(()=>t.runner(e.task,{runId:n,workspaceDir:t.workspaceDir,taskDir:e.taskDir,dependencyResults:c,emit:a,signal:u}),e.task.timeoutMs,l)),d=m.success?"completed":"failed"}catch(h){let g=Lm(h);m={success:!1,error:g,summary:g},d="failed",await a(`Worker failed: ${g}`)}let f=new Date().toISOString(),p={id:e.task.id,title:e.task.title,task:e.task,status:d,taskDir:e.taskDir,startedAt:s,completedAt:f,durationMs:Math.max(0,new Date(f).getTime()-new Date(s).getTime()),result:m};return await Me(W.join(e.taskDir,"result.json"),p),m.summary&&await Oe(W.join(e.taskDir,"summary.md"),`${m.summary}
164
+ `,"utf8"),await Ce(r,{type:d==="completed"?"task_completed":"task_failed",timestamp:f,runId:n,taskId:e.task.id,status:d,message:m.summary??m.error}),bt(t.signal)||await t.events?.onTaskComplete?.(e.task,p),p}o(Vm,"executeTaskRecord");async function Km(e){Um(e.tasks);let t=e.runId??`run-${Pm()}`,n=W.resolve(e.workspaceDir),r=Math.max(1,e.maxParallel??1),i=e.tasks.map((d,f)=>({task:d,index:f,taskDir:W.join(n,"tasks",Nm(d.id,f))})),s=await qm(n,t,r,i);await Ce(s,{type:"run_started",timestamp:new Date().toISOString(),runId:t,metadata:{workspaceDir:n,taskCount:i.length,maxParallel:r}}),await e.events?.onRunStart?.({runId:t,workspaceDir:n,taskCount:i.length});let c=new Set(i.map(d=>d.task.id)),a=new Map;for(;c.size>0;){if(e.signal?.aborted){let y=po(e.signal);for(let R of i){if(!c.has(R.task.id))continue;let M=new Date().toISOString(),w=Gc(R,M,new Date().toISOString(),y);await Me(W.join(R.taskDir,"result.json"),w),await Oe(W.join(R.taskDir,"summary.md"),`${w.result.summary}
165
+ `,"utf8"),await Ce(s,{type:"task_blocked",timestamp:w.completedAt,runId:t,taskId:R.task.id,status:"blocked",message:w.result.summary}),bt(e.signal)||await e.events?.onTaskComplete?.(R.task,w),a.set(R.task.id,w),c.delete(R.task.id)}break}let d=!1;for(let y of i){if(!c.has(y.task.id))continue;let R=jm(y.task,a);if(R.length===0)continue;let M=new Date().toISOString(),w=Hm(y,R,M,new Date().toISOString());await mo(y.taskDir,Object.fromEntries((y.task.dependsOn??[]).map(v=>{let T=a.get(v);return T?[v,T]:void 0}).filter(v=>!!v))),await Me(W.join(y.taskDir,"result.json"),w),await Oe(W.join(y.taskDir,"summary.md"),`${w.result.summary}
166
+ `,"utf8"),await Ce(s,{type:"task_blocked",timestamp:w.completedAt,runId:t,taskId:y.task.id,status:"blocked",message:w.result.summary}),bt(e.signal)||await e.events?.onTaskComplete?.(y.task,w),a.set(y.task.id,w),c.delete(y.task.id),d=!0}let f=i.filter(y=>c.has(y.task.id)?(y.task.dependsOn??[]).every(R=>a.get(R)?.status==="completed"):!1);if(f.length===0){if(d)continue;throw new Error("No runnable orchestration tasks remain. Check dependency configuration.")}let p=f.filter(y=>(y.task.execution??"serial")==="parallel"),h=p.length>0&&r>1?p.slice(0,r):[f[0]];if(e.signal?.aborted)continue;let g=await Promise.all(h.map(y=>Vm(y,e,t,s,a)));for(let y of g)a.set(y.id,y),c.delete(y.id)}let l=i.map(d=>a.get(d.task.id)).filter(d=>!!d),u={total:l.length,completed:l.filter(d=>d.status==="completed").length,failed:l.filter(d=>d.status==="failed").length,blocked:l.filter(d=>d.status==="blocked").length},m={runId:t,workspaceDir:n,tasks:l,taskResults:Object.fromEntries(l.map(d=>[d.id,d])),summary:u};return await Me(W.join(n,"summary.json"),{runId:t,completedAt:new Date().toISOString(),summary:u,tasks:l.map(d=>({id:d.id,title:d.title,status:d.status,durationMs:d.durationMs,taskDir:W.relative(n,d.taskDir).replace(/\\/g,"/"),summary:d.result.summary??null}))}),await Ce(s,{type:"run_completed",timestamp:new Date().toISOString(),runId:t,metadata:u}),await e.events?.onRunComplete?.(m),m}o(Km,"runOrchestration");function Xm(e){let t=Object.values(e.dependencyResults);if(t.length!==0)return["Dependency handoff artifacts:",`- Read structured bundle first: ${W.join(e.taskDir,"handoff.json")}`,`- Read human summary next: ${W.join(e.taskDir,"handoff.md")}`,"Dependency summary preview:",...t.map(n=>{let r=n.result.summary??n.result.error??"No summary available.";return[`- ${n.id} (${n.title})`,` Status: ${n.status}`,` Summary: ${fo(r,600)}`,` Result artifact: ${W.join(n.taskDir,"result.json")}`,n.result.summary?` Summary artifact: ${W.join(n.taskDir,"summary.md")}`:void 0,n.result.artifacts?.length?` Additional artifacts: ${n.result.artifacts.map(i=>i.path).join(", ")}`:void 0,typeof n.result.output=="string"?` Output excerpt: ${fo(n.result.output,$m)}`:void 0].filter(i=>!!i).join(`
167
167
  `)})].join(`
168
- `)}o(jm,"formatDependencyHandoff");function Um(e,t){return[e.agent?`Preferred agent: ${e.agent}`:void 0,jm(t),e.prompt].filter(n=>!!(n&&n.trim())).join(`
168
+ `)}o(Xm,"formatDependencyHandoff");function zm(e,t){return[e.agent?`Preferred agent: ${e.agent}`:void 0,Xm(t),e.prompt].filter(n=>!!(n&&n.trim())).join(`
169
169
 
170
- `)}o(Um,"buildDefaultKodaXPrompt");function Fm(e,t){if(!(!e&&!t))return async(n,r,i)=>{if(t){let s=await t(n,r,i);if(s!==!0)return s}return e?e(n,r,i):!0}}o(Fm,"mergeBeforeToolExecute");function Bm(e){let t=e.runAgent??ke;return async(n,r)=>{let i=(e.buildPrompt??Um)(n,r),s=e.createEvents?.(n,r)??{},c=e.baseOptions.events??{};await r.emit(`Launching worker with reasoning=${n.budget?.reasoningMode??e.baseOptions.reasoningMode??"auto"} maxIter=${n.budget?.maxIter??e.baseOptions.maxIter??"default"}`);let a=Hc(e.baseOptions.abortSignal,r.signal),l={...c,...s,beforeToolExecute:Fm(c.beforeToolExecute,n.beforeToolExecute),onToolResult:o((g,y)=>{c.onToolResult?.(g,y),s.onToolResult?.(g,y)},"onToolResult")},u={...e.baseOptions,provider:n.provider??e.baseOptions.provider,model:n.model??e.baseOptions.model,maxIter:n.budget?.maxIter??e.baseOptions.maxIter,thinking:n.budget?.thinking??e.baseOptions.thinking,reasoningMode:n.budget?.reasoningMode??e.baseOptions.reasoningMode,abortSignal:a,events:l},m=e.createOptions?e.createOptions(n,r,u):u,d=o(()=>t(m,i),"execute"),f=o(()=>e.rateLimit?e.rateLimit(d):d(),"executeDefault"),p=e.runTask?await e.runTask(n,r,m,i,f):await f(),h=await e.onResult?.(n,r,p)??p;if(h.interrupted&&a?.aborted){let g=po(a);return{success:!1,output:h.lastText,summary:g,error:g,metadata:{sessionId:h.sessionId,signal:"BLOCKED",signalReason:g,interrupted:!0,limitReached:h.limitReached??!1}}}return await r.emit(h.signal?`Worker finished with signal=${h.signal}${h.signalReason?` (${h.signalReason})`:""}`:"Worker finished successfully"),{success:h.success,output:h.lastText,summary:h.lastText||h.signalReason||(h.interrupted?"Worker interrupted before producing a textual result.":"No textual output produced."),metadata:{sessionId:h.sessionId,signal:h.signal??null,signalReason:h.signalReason??null,interrupted:h.interrupted??!1,limitReached:h.limitReached??!1}}}}o(Bm,"createKodaXTaskRunner");function Wm(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.type==="parallel_dispatch"&&Array.isArray(t.subtasks)&&t.subtasks.length>=2}o(Wm,"isParallelDispatchDirective");function Hm(e){let t=[];t.push(`Parallel execution completed: ${e.tasks.length} subtasks (${(e.totalDurationMs/1e3).toFixed(1)}s total)`),t.push("");for(let n of e.tasks){let r=n.status==="completed"?"[OK]":"[FAIL]";if(t.push(`${r} ${n.description} (${(n.durationMs/1e3).toFixed(1)}s)`),n.summary){let i=n.summary.split(`
170
+ `)}o(zm,"buildDefaultKodaXPrompt");function Ym(e,t){if(!(!e&&!t))return async(n,r,i)=>{if(t){let s=await t(n,r,i);if(s!==!0)return s}return e?e(n,r,i):!0}}o(Ym,"mergeBeforeToolExecute");function Jm(e){let t=e.runAgent??ke;return async(n,r)=>{let i=(e.buildPrompt??zm)(n,r),s=e.createEvents?.(n,r)??{},c=e.baseOptions.events??{};await r.emit(`Launching worker with reasoning=${n.budget?.reasoningMode??e.baseOptions.reasoningMode??"auto"} maxIter=${n.budget?.maxIter??e.baseOptions.maxIter??"default"}`);let a=Hc(e.baseOptions.abortSignal,r.signal),l={...c,...s,beforeToolExecute:Ym(c.beforeToolExecute,n.beforeToolExecute),onToolResult:o((g,y)=>{c.onToolResult?.(g,y),s.onToolResult?.(g,y)},"onToolResult")},u={...e.baseOptions,provider:n.provider??e.baseOptions.provider,model:n.model??e.baseOptions.model,maxIter:n.budget?.maxIter??e.baseOptions.maxIter,thinking:n.budget?.thinking??e.baseOptions.thinking,reasoningMode:n.budget?.reasoningMode??e.baseOptions.reasoningMode,abortSignal:a,events:l},m=e.createOptions?e.createOptions(n,r,u):u,d=o(()=>t(m,i),"execute"),f=o(()=>e.rateLimit?e.rateLimit(d):d(),"executeDefault"),p=e.runTask?await e.runTask(n,r,m,i,f):await f(),h=await e.onResult?.(n,r,p)??p;if(h.interrupted&&a?.aborted){let g=po(a);return{success:!1,output:h.lastText,summary:g,error:g,metadata:{sessionId:h.sessionId,signal:"BLOCKED",signalReason:g,interrupted:!0,limitReached:h.limitReached??!1}}}return await r.emit(h.signal?`Worker finished with signal=${h.signal}${h.signalReason?` (${h.signalReason})`:""}`:"Worker finished successfully"),{success:h.success,output:h.lastText,summary:h.lastText||h.signalReason||(h.interrupted?"Worker interrupted before producing a textual result.":"No textual output produced."),metadata:{sessionId:h.sessionId,signal:h.signal??null,signalReason:h.signalReason??null,interrupted:h.interrupted??!1,limitReached:h.limitReached??!1}}}}o(Jm,"createKodaXTaskRunner");function Qm(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.type==="parallel_dispatch"&&Array.isArray(t.subtasks)&&t.subtasks.length>=2}o(Qm,"isParallelDispatchDirective");function Zm(e){let t=[];t.push(`Parallel execution completed: ${e.tasks.length} subtasks (${(e.totalDurationMs/1e3).toFixed(1)}s total)`),t.push("");for(let n of e.tasks){let r=n.status==="completed"?"[OK]":"[FAIL]";if(t.push(`${r} ${n.description} (${(n.durationMs/1e3).toFixed(1)}s)`),n.summary){let i=n.summary.split(`
171
171
  `).slice(0,5);for(let s of i)t.push(` ${s}`)}}return e.overallSummary&&(t.push(""),t.push(e.overallSummary)),t.join(`
172
- `)}o(Hm,"formatParallelDispatchResult");function Gm(e){if(e.length<2)return"Parallel dispatch requires at least 2 subtasks";if(e.length>10)return"Parallel dispatch limited to 10 subtasks maximum";let t=new Set;for(let n of e){if(t.has(n.id))return`Duplicate subtask ID: ${n.id}`;t.add(n.id)}return null}o(Gm,"validateSubtaskIndependence");var Et=[/^git\s+(status|log|diff|branch|show|remote|tag|stash\s+list|rev-parse|describe)\b/,/^(cat|head|tail|wc|sort|uniq|diff|file|which|type|where|grep)\b/,/^(ls|dir|pwd|echo|date|whoami|hostname|uname)\b/,/^(node|python|ruby|go|java|rustc|gcc)\s+--version\b/,/^npm\s+(list|ls|outdated|audit|test|run\s+test|run\s+lint|run\s+build|run\s+check|run\s+typecheck)\b/,/^npx\s+(tsc|vitest|jest|prettier|eslint|biome)\b/,/^(cargo|go)\s+(build|test|check|vet|version|fmt)\b/,/^(pip|pip3)\s+(list|show|freeze)\b/,/^(docker|podman)\s+(ps|images|logs|inspect)\b/,/^(kubectl|k)\s+(get|describe|logs)\b/],xt=[/\brm\s+(-[a-z]*r|-[a-z]*f|--force|--recursive)/i,/\bgit\s+(push\s+--force|push\s+-f\b|reset\s+--hard|clean\s+-[a-z]*f|checkout\s+--\s+\.|restore\s+--staged\s+\.|branch\s+-D)/,/\bsudo\b/,/\bchmod\s+[0-7]*777\b/,/\b(mkfs|fdisk|dd\s+if=|format)\b/,/\bcurl\b.*\|\s*(bash|sh|zsh)\b/,/\b(drop\s+|truncate\s+|delete\s+from)\b/i,/\brm\s+-rf\s+[\/~]/,/\b(shutdown|reboot|halt|poweroff)\b/];function qc(e){if(e.length>200||(e.match(/\(/g)??[]).length>5||/(\+|\*|\{)\)(\+|\*|\{)/.test(e)||/\([^)]*\|[^)]*\)[*+{]/.test(e)||/[*+}]\).*\([^)]*[*+{]/.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}o(qc,"isSafeRegexPattern");function qm(e=[],t=[]){let n=e.filter(qc).map(i=>new RegExp(i)),r=t.filter(qc).map(i=>new RegExp(i));return{safePatterns:[...Et,...n],dangerousPatterns:[...xt,...r]}}o(qm,"createBashClassifierConfig");function ho(e,t={safePatterns:Et,dangerousPatterns:xt}){let n=e.trim();for(let r of t.dangerousPatterns)if(r.test(n))return{level:"dangerous",reason:"Matches dangerous command pattern",matchedPattern:r.source};for(let r of t.safePatterns)if(r.test(n))return{level:"safe",reason:"Matches safe command pattern",matchedPattern:r.source};return{level:"normal",reason:"No matching pattern; follows permission mode"}}o(ho,"classifyBashCommand");function Vm(){return{records:[]}}o(Vm,"createDenialTracker");function go(e,t){if(e==="bash")return`bash:${(typeof t.command=="string"?t.command:"").trim().split(/\s+/).slice(0,3).join(" ")}`;if(e==="edit"||e==="write"||e==="read"){let i=typeof t.file_path=="string"?t.file_path:"";return`${e}:${i}`}let n=JSON.stringify(t),r=0;for(let i=0;i<n.length;i++)r=(r<<5)-r+n.charCodeAt(i)|0;return`${e}:${(r>>>0).toString(16).slice(0,8)}`}o(go,"computeInputSignature");function Km(e,t=18e5){let n=Date.now()-t,r=e.filter(i=>i.timestamp>=n);return r.length===e.length?e:r}o(Km,"evictExpired");function Xm(e,t,n,r){let i=go(t,n),s={toolName:t,inputSignature:i,timestamp:Date.now(),reason:r};return{records:[...Km(e.records),s]}}o(Xm,"recordDenial");function zm(e,t,n,r=18e5){let i=go(t,n),s=Date.now()-r;return e.records.some(c=>c.inputSignature===i&&c.timestamp>=s)}o(zm,"isDeniedRecently");function Ym(e){if(e.records.length===0)return"";let t=new Map;for(let r of e.records)t.set(r.inputSignature,r);let n=["The user has denied the following operations in this session:"];for(let[r,i]of t){let s=i.reason?` (reason: ${i.reason})`:"";n.push(`- ${r}${s}`)}return n.push("Do not retry these operations. Find an alternative approach."),n.join(`
173
- `)}o(Ym,"getDenialContext");var wo="emit_verdict";function Jm(e,t){return{isTerminal:!0}}o(Jm,"resolveHandoffTarget");function Qm(e){return{name:e.name,description:e.description,input_schema:e.inputSchema,execute:o(async t=>{let n=ss(e.role,t);if(!n)return{content:`[${e.name}] payload could not be normalized for role ${e.role}. Check that required fields are present and enum values match the schema.`,isError:!0};let{handoffTarget:r,isTerminal:i}=Jm(e.role,n),s={role:e.role,payload:n,handoffTarget:r,isTerminal:i};return{content:`${e.role} payload recorded (${Zm(e.role,n)})`,metadata:s}},"execute")}}o(Qm,"buildEmitter");function Zm(e,t){if(t.verdict){let n=t.verdict.nextHarness?`, next=${t.verdict.nextHarness}`:"";return`status=${t.verdict.status}${n}`}return"ok"}o(Zm,"summarizeNormalized");var ko=Qm({name:wo,role:"evaluator",description:"Emit the Sidecar Verifier verdict \u2014 accept / revise / blocked. Call this exactly once after verification is complete. A `revise` verdict may include `next_harness` to escalate (H1 \u2192 H2). When the task is complete, set `user_answer` to the multi-line answer the user should see.",inputSchema:{type:"object",properties:{status:{type:"string",enum:["accept","revise","blocked"],description:"Verdict outcome."},reason:{type:"string",description:"One-line reason for the verdict."},user_answer:{type:"string",description:"Multi-line final answer for the user (required when status=accept for H0/H1/H2 final)."},next_harness:{type:"string",enum:["H1_EXECUTE_EVAL","H2_PLAN_EXECUTE_EVAL"],description:"For revise: which harness tier to retry in."},followup:{type:"array",items:{type:"string"},description:"Required next steps (may be empty)."},budget_request:{type:"string",description:'Optional one-line reason when the Evaluator needs more budget to complete verification (e.g. "need another e2e pass"). Surfaces a budget-extension dialog to the user regardless of the 90% auto-threshold. Leave unset when no extra budget is needed.'}},required:["status"]}}),Vc=Object.freeze([ko]);var Kc="kodax/coding-agent";var rp=`
174
- \u2026[truncated]\u2026`,op=`You are a security reviewer for KodaX agent tool calls.
172
+ `)}o(Zm,"formatParallelDispatchResult");function ep(e){if(e.length<2)return"Parallel dispatch requires at least 2 subtasks";if(e.length>10)return"Parallel dispatch limited to 10 subtasks maximum";let t=new Set;for(let n of e){if(t.has(n.id))return`Duplicate subtask ID: ${n.id}`;t.add(n.id)}return null}o(ep,"validateSubtaskIndependence");var Et=[/^git\s+(status|log|diff|branch|show|remote|tag|stash\s+list|rev-parse|describe)\b/,/^(cat|head|tail|wc|sort|uniq|diff|file|which|type|where|grep)\b/,/^(ls|dir|pwd|echo|date|whoami|hostname|uname)\b/,/^(node|python|ruby|go|java|rustc|gcc)\s+--version\b/,/^npm\s+(list|ls|outdated|audit|test|run\s+test|run\s+lint|run\s+build|run\s+check|run\s+typecheck)\b/,/^npx\s+(tsc|vitest|jest|prettier|eslint|biome)\b/,/^(cargo|go)\s+(build|test|check|vet|version|fmt)\b/,/^(pip|pip3)\s+(list|show|freeze)\b/,/^(docker|podman)\s+(ps|images|logs|inspect)\b/,/^(kubectl|k)\s+(get|describe|logs)\b/],xt=[/\brm\s+(-[a-z]*r|-[a-z]*f|--force|--recursive)/i,/\bgit\s+(push\s+--force|push\s+-f\b|reset\s+--hard|clean\s+-[a-z]*f|checkout\s+--\s+\.|restore\s+--staged\s+\.|branch\s+-D)/,/\bsudo\b/,/\bchmod\s+[0-7]*777\b/,/\b(mkfs|fdisk|dd\s+if=|format)\b/,/\bcurl\b.*\|\s*(bash|sh|zsh)\b/,/\b(drop\s+|truncate\s+|delete\s+from)\b/i,/\brm\s+-rf\s+[\/~]/,/\b(shutdown|reboot|halt|poweroff)\b/];function qc(e){if(e.length>200||(e.match(/\(/g)??[]).length>5||/(\+|\*|\{)\)(\+|\*|\{)/.test(e)||/\([^)]*\|[^)]*\)[*+{]/.test(e)||/[*+}]\).*\([^)]*[*+{]/.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}o(qc,"isSafeRegexPattern");function tp(e=[],t=[]){let n=e.filter(qc).map(i=>new RegExp(i)),r=t.filter(qc).map(i=>new RegExp(i));return{safePatterns:[...Et,...n],dangerousPatterns:[...xt,...r]}}o(tp,"createBashClassifierConfig");function ho(e,t={safePatterns:Et,dangerousPatterns:xt}){let n=e.trim();for(let r of t.dangerousPatterns)if(r.test(n))return{level:"dangerous",reason:"Matches dangerous command pattern",matchedPattern:r.source};for(let r of t.safePatterns)if(r.test(n))return{level:"safe",reason:"Matches safe command pattern",matchedPattern:r.source};return{level:"normal",reason:"No matching pattern; follows permission mode"}}o(ho,"classifyBashCommand");function np(){return{records:[]}}o(np,"createDenialTracker");function go(e,t){if(e==="bash")return`bash:${(typeof t.command=="string"?t.command:"").trim().split(/\s+/).slice(0,3).join(" ")}`;if(e==="edit"||e==="write"||e==="read"){let i=typeof t.file_path=="string"?t.file_path:"";return`${e}:${i}`}let n=JSON.stringify(t),r=0;for(let i=0;i<n.length;i++)r=(r<<5)-r+n.charCodeAt(i)|0;return`${e}:${(r>>>0).toString(16).slice(0,8)}`}o(go,"computeInputSignature");function rp(e,t=18e5){let n=Date.now()-t,r=e.filter(i=>i.timestamp>=n);return r.length===e.length?e:r}o(rp,"evictExpired");function op(e,t,n,r){let i=go(t,n),s={toolName:t,inputSignature:i,timestamp:Date.now(),reason:r};return{records:[...rp(e.records),s]}}o(op,"recordDenial");function ip(e,t,n,r=18e5){let i=go(t,n),s=Date.now()-r;return e.records.some(c=>c.inputSignature===i&&c.timestamp>=s)}o(ip,"isDeniedRecently");function sp(e){if(e.records.length===0)return"";let t=new Map;for(let r of e.records)t.set(r.inputSignature,r);let n=["The user has denied the following operations in this session:"];for(let[r,i]of t){let s=i.reason?` (reason: ${i.reason})`:"";n.push(`- ${r}${s}`)}return n.push("Do not retry these operations. Find an alternative approach."),n.join(`
173
+ `)}o(sp,"getDenialContext");var wo="emit_verdict";function ap(e,t){return{isTerminal:!0}}o(ap,"resolveHandoffTarget");function cp(e){return{name:e.name,description:e.description,input_schema:e.inputSchema,execute:o(async t=>{let n=ss(e.role,t);if(!n)return{content:`[${e.name}] payload could not be normalized for role ${e.role}. Check that required fields are present and enum values match the schema.`,isError:!0};let{handoffTarget:r,isTerminal:i}=ap(e.role,n),s={role:e.role,payload:n,handoffTarget:r,isTerminal:i};return{content:`${e.role} payload recorded (${dp(e.role,n)})`,metadata:s}},"execute")}}o(cp,"buildEmitter");function dp(e,t){if(t.verdict){let n=t.verdict.nextHarness?`, next=${t.verdict.nextHarness}`:"";return`status=${t.verdict.status}${n}`}return"ok"}o(dp,"summarizeNormalized");var ko=cp({name:wo,role:"evaluator",description:"Emit the Sidecar Verifier verdict \u2014 accept / revise / blocked. Call this exactly once after verification is complete. A `revise` verdict may include `next_harness` to escalate (H1 \u2192 H2). When the task is complete, set `user_answer` to the multi-line answer the user should see.",inputSchema:{type:"object",properties:{status:{type:"string",enum:["accept","revise","blocked"],description:"Verdict outcome."},reason:{type:"string",description:"One-line reason for the verdict."},user_answer:{type:"string",description:"Multi-line final answer for the user (required when status=accept for H0/H1/H2 final)."},next_harness:{type:"string",enum:["H1_EXECUTE_EVAL","H2_PLAN_EXECUTE_EVAL"],description:"For revise: which harness tier to retry in."},followup:{type:"array",items:{type:"string"},description:"Required next steps (may be empty)."},budget_request:{type:"string",description:'Optional one-line reason when the Evaluator needs more budget to complete verification (e.g. "need another e2e pass"). Surfaces a budget-extension dialog to the user regardless of the 90% auto-threshold. Leave unset when no extra budget is needed.'}},required:["status"]}}),Vc=Object.freeze([ko]);var Kc="kodax/coding-agent";var mp=`
174
+ \u2026[truncated]\u2026`,pp=`You are a security reviewer for KodaX agent tool calls.
175
175
 
176
176
  Your job: given the user's intent and the project's rules, decide whether the action in <action> is safe to execute autonomously, or whether it should be blocked and the agent forced to find an alternative.
177
177
 
@@ -197,15 +197,15 @@ About <signals> (when present):
197
197
  Output EXACTLY:
198
198
  <block>yes|no</block><reason>one short sentence</reason>
199
199
 
200
- Do NOT include any preamble, thinking, or text outside those two tags.`;function yo(e){let t=ip(e),n=sp(e);return{system:t,messages:[{role:"user",content:n}]}}o(yo,"buildClassifierPrompt");function ip(e){let t=[op,""];t.push("<rules>"),t.push("<allow>");for(let n of e.rules.allow)t.push(` - ${ee(n)}`);t.push("</allow>"),t.push("<soft_deny>");for(let n of e.rules.soft_deny)t.push(` - ${ee(n)}`);t.push("</soft_deny>"),t.push("<environment>");for(let n of e.rules.environment)t.push(` - ${ee(n)}`);if(t.push("</environment>"),t.push("</rules>"),e.claudeMd&&e.claudeMd.length>0){let n=ee(e.claudeMd);n.length>4e3&&(n=n.slice(0,4e3)+rp),t.push(""),t.push("<claude_md>"),t.push(n),t.push("</claude_md>")}return t.join(`
201
- `)}o(ip,"buildSystem");function sp(e){let t=["<transcript>"];for(let n of e.transcript)t.push(cp(n));if(t.push("</transcript>"),e.signals&&e.signals.length>0){t.push("<signals>");for(let n of e.signals)t.push(` - ${ap(n)}`);t.push("</signals>")}return t.push(`<action>${ee(e.action)}</action>`),t.join(`
202
- `)}o(sp,"buildUserMessage");function ap(e){switch(e.kind){case"dangerous_pattern":return`dangerous_pattern (${e.severity}): ${ee(e.pattern)}`;case"protected_path":return`protected_path (zone=${e.zone}): ${ee(e.path)}`;case"outside_project":return`outside_project: ${ee(e.path)}`;case"shell_redirect_outside":return`shell_redirect_outside: ${ee(e.target)}`;case"package_install":return`package_install: ${e.manager}`;case"git_write":return`git_write: ${e.verb}`;case"network":return`network: ${e.tool}`;case"file_modification":return`file_modification: ${e.targets.map(ee).join(", ")}`}}o(ap,"formatSignal");function cp(e){if(typeof e.content=="string")return`[${e.role}] ${ee(e.content)}`;let t=[`[${e.role}]`];for(let n of e.content)if(n.type==="text")t.push(` text: ${ee(n.text)}`);else if(n.type==="tool_use"){let r=dp(n.input);t.push(` tool_use(${ee(n.name)}): ${ee(r)}`)}else n.type==="tool_result"&&t.push(` tool_result: ${ee(typeof n.content=="string"?n.content:n.content.filter(r=>r.type==="text").map(r=>r.type==="text"?r.text:"").join(""))}`);return t.join(`
203
- `)}o(cp,"serializeMessage");function ee(e){return e.replace(/</g,"\u2039").replace(/>/g,"\u203A")}o(ee,"neutralize");function dp(e){try{let t=JSON.stringify(e);return t===void 0?"[unserializable]":t}catch{return"[unserializable]"}}o(dp,"safeJsonStringify");var lp=/<block>\s*([^<]+?)\s*<\/block>/i,up=/<reason>\s*([\s\S]*?)\s*<\/reason>/i;function vo(e){let t=e.match(lp);if(!t)return{kind:"unparseable",raw:e};let n=t[1].toLowerCase();if(n!=="yes"&&n!=="no")return{kind:"unparseable",raw:e};let r=e.match(up),i=r?r[1].trim():"";return i.length>500&&(i=i.slice(0,499)+"\u2026"),n==="yes"?{kind:"block",reason:i}:{kind:"allow",reason:i}}o(vo,"parseClassifierOutput");var Xc=8e3,fp="auto_mode";async function To(e){let t=yo({rules:e.rules,claudeMd:e.claudeMd,transcript:e.transcript,action:e.action,signals:e.signals}),n=await Xe({provider:e.provider,model:e.model,system:t.system,messages:t.messages,reasoning:{mode:"off"},timeoutMs:e.timeoutMs??Xc,abortSignal:e.abortSignal,querySource:fp,costTracker:e.costTracker});switch(e.setCostTracker&&n.costTracker!==void 0&&n.costTracker!==e.costTracker&&e.setCostTracker(n.costTracker),n.stopReason){case"end_turn":case"max_tokens":{let r=vo(n.text);return r.kind==="unparseable"?{kind:"block",reason:"classifier output was unparseable (fail-closed)"}:r}case"timeout":return{kind:"escalate",reason:`classifier timeout (${e.timeoutMs??Xc}ms exceeded)`};case"aborted":throw new DOMException("classify aborted","AbortError");default:{let r=n.error?.message??"unknown error";return/tool_use/i.test(r)?{kind:"block",reason:"classifier returned tool_use block (contract violation)"}:{kind:"escalate",reason:`classifier error: ${r}`}}}}o(To,"classify");import{createHash as mp}from"node:crypto";import{readFile as Yc,writeFile as pp,mkdir as hp}from"node:fs/promises";import{join as Rt}from"node:path";var Jc="trusted-project-rules.json",zc="auto-rules.jsonc",gp="auto-rules.local.jsonc",wp={allow:[],soft_deny:[],environment:[]};function yn(e){return mp("sha256").update(e,"utf8").digest("hex")}o(yn,"computeRulesFingerprint");async function xo(e){let t=Rt(e,Jc),n;try{n=await Yc(t,"utf-8")}catch{return{trusted:{}}}try{let r=JSON.parse(n);if(r&&typeof r=="object"&&r.trusted&&typeof r.trusted=="object"){let i={};for(let[s,c]of Object.entries(r.trusted))typeof c=="string"&&/^[0-9a-f]{64}$/.test(c)&&(i[s]=c);return{trusted:i}}}catch{}return{trusted:{}}}o(xo,"readTrustState");async function kp(e,t,n){if(!/^[0-9a-f]{64}$/.test(t))throw new Error("trustProjectRules: invalid fingerprint format (expected 64-char hex sha256)");await hp(n.userKodaxDir,{recursive:!0});let i={trusted:{...(await xo(n.userKodaxDir)).trusted,[e]:t}},s=Rt(n.userKodaxDir,Jc);await pp(s,JSON.stringify(i,null,2)+`
204
- `,"utf-8")}o(kp,"trustProjectRules");function yp(e){let t="",n=0,r=!1,i="",s=!1;for(;n<e.length;){let c=e[n],a=e[n+1];if(r){t+=c,s?s=!1:c==="\\"?s=!0:c===i&&(r=!1),n+=1;continue}if(c==='"'||c==="'"){r=!0,i=c,t+=c,n+=1;continue}if(c==="/"&&a==="/"){for(n+=2;n<e.length&&e[n]!==`
200
+ Do NOT include any preamble, thinking, or text outside those two tags.`;function yo(e){let t=hp(e),n=gp(e);return{system:t,messages:[{role:"user",content:n}]}}o(yo,"buildClassifierPrompt");function hp(e){let t=[pp,""];t.push("<rules>"),t.push("<allow>");for(let n of e.rules.allow)t.push(` - ${ee(n)}`);t.push("</allow>"),t.push("<soft_deny>");for(let n of e.rules.soft_deny)t.push(` - ${ee(n)}`);t.push("</soft_deny>"),t.push("<environment>");for(let n of e.rules.environment)t.push(` - ${ee(n)}`);if(t.push("</environment>"),t.push("</rules>"),e.claudeMd&&e.claudeMd.length>0){let n=ee(e.claudeMd);n.length>4e3&&(n=n.slice(0,4e3)+mp),t.push(""),t.push("<claude_md>"),t.push(n),t.push("</claude_md>")}return t.join(`
201
+ `)}o(hp,"buildSystem");function gp(e){let t=["<transcript>"];for(let n of e.transcript)t.push(kp(n));if(t.push("</transcript>"),e.signals&&e.signals.length>0){t.push("<signals>");for(let n of e.signals)t.push(` - ${wp(n)}`);t.push("</signals>")}return t.push(`<action>${ee(e.action)}</action>`),t.join(`
202
+ `)}o(gp,"buildUserMessage");function wp(e){switch(e.kind){case"dangerous_pattern":return`dangerous_pattern (${e.severity}): ${ee(e.pattern)}`;case"protected_path":return`protected_path (zone=${e.zone}): ${ee(e.path)}`;case"outside_project":return`outside_project: ${ee(e.path)}`;case"shell_redirect_outside":return`shell_redirect_outside: ${ee(e.target)}`;case"package_install":return`package_install: ${e.manager}`;case"git_write":return`git_write: ${e.verb}`;case"network":return`network: ${e.tool}`;case"file_modification":return`file_modification: ${e.targets.map(ee).join(", ")}`}}o(wp,"formatSignal");function kp(e){if(typeof e.content=="string")return`[${e.role}] ${ee(e.content)}`;let t=[`[${e.role}]`];for(let n of e.content)if(n.type==="text")t.push(` text: ${ee(n.text)}`);else if(n.type==="tool_use"){let r=yp(n.input);t.push(` tool_use(${ee(n.name)}): ${ee(r)}`)}else n.type==="tool_result"&&t.push(` tool_result: ${ee(typeof n.content=="string"?n.content:n.content.filter(r=>r.type==="text").map(r=>r.type==="text"?r.text:"").join(""))}`);return t.join(`
203
+ `)}o(kp,"serializeMessage");function ee(e){return e.replace(/</g,"\u2039").replace(/>/g,"\u203A")}o(ee,"neutralize");function yp(e){try{let t=JSON.stringify(e);return t===void 0?"[unserializable]":t}catch{return"[unserializable]"}}o(yp,"safeJsonStringify");var vp=/<block>\s*([^<]+?)\s*<\/block>/i,Tp=/<reason>\s*([\s\S]*?)\s*<\/reason>/i;function vo(e){let t=e.match(vp);if(!t)return{kind:"unparseable",raw:e};let n=t[1].toLowerCase();if(n!=="yes"&&n!=="no")return{kind:"unparseable",raw:e};let r=e.match(Tp),i=r?r[1].trim():"";return i.length>500&&(i=i.slice(0,499)+"\u2026"),n==="yes"?{kind:"block",reason:i}:{kind:"allow",reason:i}}o(vo,"parseClassifierOutput");var Xc=8e3,bp="auto_mode";async function To(e){let t=yo({rules:e.rules,claudeMd:e.claudeMd,transcript:e.transcript,action:e.action,signals:e.signals}),n=await Xe({provider:e.provider,model:e.model,system:t.system,messages:t.messages,reasoning:{mode:"off"},timeoutMs:e.timeoutMs??Xc,abortSignal:e.abortSignal,querySource:bp,costTracker:e.costTracker});switch(e.setCostTracker&&n.costTracker!==void 0&&n.costTracker!==e.costTracker&&e.setCostTracker(n.costTracker),n.stopReason){case"end_turn":case"max_tokens":{let r=vo(n.text);return r.kind==="unparseable"?{kind:"block",reason:"classifier output was unparseable (fail-closed)"}:r}case"timeout":return{kind:"escalate",reason:`classifier timeout (${e.timeoutMs??Xc}ms exceeded)`};case"aborted":throw new DOMException("classify aborted","AbortError");default:{let r=n.error?.message??"unknown error";return/tool_use/i.test(r)?{kind:"block",reason:"classifier returned tool_use block (contract violation)"}:{kind:"escalate",reason:`classifier error: ${r}`}}}}o(To,"classify");import{createHash as Ep}from"node:crypto";import{readFile as Yc,writeFile as xp,mkdir as Rp}from"node:fs/promises";import{join as Rt}from"node:path";var Jc="trusted-project-rules.json",zc="auto-rules.jsonc",Sp="auto-rules.local.jsonc",_p={allow:[],soft_deny:[],environment:[]};function yn(e){return Ep("sha256").update(e,"utf8").digest("hex")}o(yn,"computeRulesFingerprint");async function xo(e){let t=Rt(e,Jc),n;try{n=await Yc(t,"utf-8")}catch{return{trusted:{}}}try{let r=JSON.parse(n);if(r&&typeof r=="object"&&r.trusted&&typeof r.trusted=="object"){let i={};for(let[s,c]of Object.entries(r.trusted))typeof c=="string"&&/^[0-9a-f]{64}$/.test(c)&&(i[s]=c);return{trusted:i}}}catch{}return{trusted:{}}}o(xo,"readTrustState");async function Ap(e,t,n){if(!/^[0-9a-f]{64}$/.test(t))throw new Error("trustProjectRules: invalid fingerprint format (expected 64-char hex sha256)");await Rp(n.userKodaxDir,{recursive:!0});let i={trusted:{...(await xo(n.userKodaxDir)).trusted,[e]:t}},s=Rt(n.userKodaxDir,Jc);await xp(s,JSON.stringify(i,null,2)+`
204
+ `,"utf-8")}o(Ap,"trustProjectRules");function Cp(e){let t="",n=0,r=!1,i="",s=!1;for(;n<e.length;){let c=e[n],a=e[n+1];if(r){t+=c,s?s=!1:c==="\\"?s=!0:c===i&&(r=!1),n+=1;continue}if(c==='"'||c==="'"){r=!0,i=c,t+=c,n+=1;continue}if(c==="/"&&a==="/"){for(n+=2;n<e.length&&e[n]!==`
205
205
  `;)n+=1;continue}if(c==="/"&&a==="*"){for(n+=2;n<e.length&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}if(c===","){let l=n+1;for(;l<e.length;){let u=e[l],m=e[l+1];if(u===" "||u===" "||u===`
206
206
  `||u==="\r"){l+=1;continue}if(u==="/"&&m==="/"){for(l+=2;l<e.length&&e[l]!==`
207
- `;)l+=1;continue}if(u==="/"&&m==="*"){for(l+=2;l<e.length&&!(e[l]==="*"&&e[l+1]==="/");)l+=1;l+=2;continue}break}if(e[l]==="]"||e[l]==="}"){n+=1;continue}}t+=c,n+=1}return t}o(yp,"stripJsonComments");function vn(e){let t;try{t=JSON.parse(yp(e))}catch(s){return{ok:!1,error:s instanceof Error?s.message:String(s)}}if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,error:"auto-rules root must be an object"};let n=t,r=["allow","soft_deny","environment"],i={allow:[],soft_deny:[],environment:[]};for(let s of r){let c=n[s];if(c!==void 0){if(!Array.isArray(c))return{ok:!1,error:`auto-rules.${s} must be an array of strings`};for(let a of c){if(typeof a!="string")return{ok:!1,error:`auto-rules.${s} entries must be strings`};i[s].push(a)}}}return{ok:!0,rules:i}}o(vn,"parseAutoRules");async function bo(e){try{return await Yc(e,"utf-8")}catch{return null}}o(bo,"tryReadRulesFile");async function vp(e){let t=[],n=[],r=[],i=[],s=Rt(e.userKodaxDir,zc),c=Rt(e.projectRoot,".kodax",zc),a=Rt(e.projectRoot,".kodax",gp),l=await bo(s);if(l!==null){let d=vn(l);d.ok?(i.push(d.rules),t.push({origin:"user",path:s,fingerprint:yn(l)})):r.push({path:s,message:d.error})}let u=await bo(c);if(u!==null){let d=yn(u),p=(await xo(e.userKodaxDir)).trusted[c];if(p===void 0)n.push({origin:"project",path:c,fingerprint:d,reason:"untrusted"});else if(p!==d)n.push({origin:"project",path:c,fingerprint:d,reason:"fingerprint-changed"});else{let h=vn(u);h.ok?(i.push(h.rules),t.push({origin:"project",path:c,fingerprint:d})):r.push({path:c,message:h.error})}}let m=await bo(a);if(m!==null){let d=vn(m);d.ok?(i.push(d.rules),t.push({origin:"local",path:a,fingerprint:yn(m)})):r.push({path:a,message:d.error})}return{merged:i.length===0?wp:Tp(i),sources:t,skipped:n,errors:r}}o(vp,"loadAutoRules");function Tp(e){return{allow:Eo(e.map(t=>t.allow)),soft_deny:Eo(e.map(t=>t.soft_deny)),environment:Eo(e.map(t=>t.environment))}}o(Tp,"mergeRules");function Eo(e){let t=[];for(let n of e){let r=new Set(n);t=t.filter(s=>!r.has(s));let i=new Set(t);for(let s of n)i.has(s)||(i.add(s),t.push(s))}return t}o(Eo,"dedupConcat");var bp=`
208
- \u2026[truncated]\u2026`;function Ep(e,t={}){let n=t.maxToolResultBytes??2048,r=t.maxTranscriptBytes??8192,i=[];for(let s of e){let c=xp(s,n);c!==null&&i.push(c)}return Sp(i,r)}o(Ep,"stripAssistantText");function xp(e,t){if(e.role==="user"||e.role==="system"){if(typeof e.content=="string")return e;let r=[];for(let i of e.content)if(i.type==="tool_result"){let s=Rp(i,t);r.push(s)}else r.push(i);return{...e,content:r}}if(typeof e.content=="string")return null;let n=[];for(let r of e.content)r.type==="tool_use"&&n.push(r);return n.length===0?null:{...e,content:n}}o(xp,"stripMessage");function Rp(e,t){if(e.content.length<=t)return e;let n=e.content.slice(0,t)+bp;return{...e,content:n}}o(Rp,"truncateToolResult");function Sp(e,t){if(e.length===0)return[];let n=e.map(u=>({msg:u,bytes:JSON.stringify(u).length}));if(n.reduce((u,m)=>u+m.bytes,0)<=t)return[...e];let i=n.findIndex(u=>u.msg.role==="user");if(i===-1)return _p(n,t);let s=n[i],c=t-s.bytes;c<0&&(c=0);let a=n.slice(i+1),l=[];for(let u=a.length-1;u>=0;u-=1){let m=a[u];if(m.bytes>c)break;l.unshift(m),c-=m.bytes}return[s.msg,...l.map(u=>u.msg)]}o(Sp,"enforceTotalBudget");function _p(e,t){let n=[],r=t;for(let i=e.length-1;i>=0;i-=1){let s=e[i];if(s.bytes>r)break;n.unshift(s.msg),r-=s.bytes}return n}o(_p,"takeTail");var Ap=3,Cp=20,Mp={consecutive:0,cumulative:0};function Ro(){return Mp}o(Ro,"createDenialTracker");function So(e){return{consecutive:e.consecutive+1,cumulative:e.cumulative+1}}o(So,"recordBlock");function _o(e){return e.consecutive===0?e:{consecutive:0,cumulative:e.cumulative}}o(_o,"recordAllow");function Tn(e){return e.consecutive>=3||e.cumulative>=20}o(Tn,"shouldFallback");var Op=5,Ip=6e5,Pp={timestamps:[]};function Ao(){return Pp}o(Ao,"createCircuitBreaker");function bn(e,t){let n=t-6e5;return{timestamps:[...e.timestamps.filter(i=>i>=n),t]}}o(bn,"recordError");function En(e,t){let n=t-6e5,r=0;for(let i of e.timestamps)i>=n&&(r+=1);return r>=5}o(En,"shouldFallback");function Qc(e){let t=e.trim();if(t.length===0)throw new Error("parseModelSpec: empty spec");let n=t.indexOf(":");if(n===-1)return{providerName:null,model:t};let r=t.slice(0,n).trim(),i=t.slice(n+1).trim();if(r.length===0)throw new Error(`parseModelSpec: provider name is empty in spec "${e}"`);if(i.length===0)throw new Error(`parseModelSpec: model name is empty in spec "${e}"`);return{providerName:r,model:i}}o(Qc,"parseModelSpec");function Co(e){let t=[{source:"cli",value:xn(e.cliFlag)},{source:"env",value:xn(e.envVar)},{source:"session-override",value:xn(e.sessionOverride)},{source:"user-settings",value:xn(e.userSettings)}];for(let n of t){if(n.value===void 0)continue;let r=Qc(n.value);return{providerName:r.providerName??e.defaultProvider,model:r.model,source:n.source}}return{providerName:e.defaultProvider,model:e.defaultModel,source:"default-main"}}o(Co,"resolveClassifierModel");function xn(e){if(e!=null)return e.trim().length===0?void 0:e}o(xn,"nonEmpty");import Rn from"node:path";var ae={denied:!1};function Np(e){let t=!1,n=!1;for(let r of e)r.startsWith("-")&&(r==="--recursive"||r==="-R"?t=!0:r==="--force"?n=!0:r.startsWith("-")&&!r.startsWith("--")&&(/r/i.test(r.slice(1))&&(t=!0),/f/.test(r.slice(1))&&(n=!0)));return t&&n}o(Np,"hasRecursiveAndForceFlags");var Zc=new Set(["/","~","~/","$HOME","${HOME}","$HOME/","${HOME}/"]);function Dp(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t==='"'&&n==='"'||t==="'"&&n==="'"?e.slice(1,-1):e}o(Dp,"unquote");function $p(e){let t=e.trim();if(!/^\s*rm\b/.test(t))return ae;let n=t.split(/\s+/).slice(1);if(!Np(n))return ae;for(let r of n){if(r.startsWith("-"))continue;let i=Dp(r),s=i.replace(/\/\*+$/,"/").replace(/\/+$/,"/");if(Zc.has(i)||Zc.has(s))return{denied:!0,patternId:"rm_rf_root",reason:`Recursive deletion of root path (\`${i}\`) is permanently denied. If you intended a subdirectory, use a full path like \`rm -rf /tmp/scratch\`.`}}return ae}o($p,"checkRmRfRoot");var Lp=/(^|[\s|;&(])(mkfs(?:\.[a-z0-9]+)?|fdisk)\s+(['"]?)(\/dev\/(sd|nvme|hd|vd)[a-z0-9]*|\\\\\.\\PhysicalDrive[0-9]+)/i,jp=/(^|[\s|;&(])format(\s+\/[A-Za-z]:?)?(\s+[A-Za-z]:)/;function Up(e){return Lp.test(e)?{denied:!0,patternId:"mkfs_or_format",reason:"Disk format / filesystem creation on a block device is permanently denied (data destruction risk)."}:jp.test(e)?{denied:!0,patternId:"mkfs_or_format",reason:"Windows `format X:` command is permanently denied (data destruction risk)."}:ae}o(Up,"checkMkfsOrFormat");var Fp=/(^|[\s|;&(])dd\s+[^\n]*\bof=(['"]?)(\/dev\/(sd|nvme|hd|vd)[a-z0-9]*|\\\\\.\\PhysicalDrive[0-9]+)/i;function Bp(e){return Fp.test(e)?{denied:!0,patternId:"dd_disk_write",reason:"Raw disk write via `dd of=/dev/sd*` is permanently denied. Use a file target (`of=path.bin`) if you intended a file write."}:ae}o(Bp,"checkDdDiskWrite");var Wp=/:\s*\(\s*\)\s*\{[^}]*:\s*\|\s*:\s*&[^}]*\}\s*;\s*:/;function Hp(e){return Wp.test(e)?{denied:!0,patternId:"fork_bomb",reason:"Fork bomb pattern detected; permanently denied (denial-of-service risk)."}:ae}o(Hp,"checkForkBomb");function Gp(e,t){let n=Rn.resolve(e),r=Rn.resolve(t);return n===r?!0:n.startsWith(r+Rn.sep)}o(Gp,"isPathUnder");function qp(e,t){if(e.name!=="write"&&e.name!=="edit")return ae;let n=typeof e.input.path=="string"?e.input.path:"";if(!n)return ae;let r;try{r=$e()}catch{return ae}let i=Rn.resolve(t,n);return Gp(i,r)?{denied:!0,patternId:"user_kodax_write",reason:`Write to credential-zone path \`${n}\` (under ~/.kodax/) is permanently denied. KodaX config edits must go through the \`kodax config\` CLI or the SDK config API, never through the file-write tool.`}:ae}o(qp,"checkUserKodaxWrite");function Mo(e,t){let n=qp(e,t);if(n.denied)return n;if(e.name!=="bash")return ae;let r=typeof e.input.command=="string"?e.input.command:"";if(!r)return ae;let i=$p(r);if(i.denied)return i;let s=Up(r);if(s.denied)return s;let c=Bp(r);if(c.denied)return c;let a=Hp(r);return a.denied?a:ae}o(Mo,"checkAbsoluteDeny");var Vp={"\\brm\\s+(-[a-z]*r|-[a-z]*f|--force|--recursive)":"medium","\\bgit\\s+(push\\s+--force|push\\s+-f\\b|reset\\s+--hard|clean\\s+-[a-z]*f|checkout\\s+--\\s+\\.|restore\\s+--staged\\s+\\.|branch\\s+-D)":"high","\\bsudo\\b":"high","\\bchmod\\s+[0-7]*777\\b":"high","\\b(mkfs|fdisk|dd\\s+if=|format)\\b":"high","\\bcurl\\b.*\\|\\s*(bash|sh|zsh)\\b":"high","\\b(drop\\s+|truncate\\s+|delete\\s+from)\\b":"high","\\brm\\s+-rf\\s+[\\/~]":"high","\\b(shutdown|reboot|halt|poweroff)\\b":"medium"};function Kp(e){return Vp[e]??"high"}o(Kp,"severityFor");var Xp=[[/(^|[\s|;&(])curl(\s|$)/,"curl"],[/(^|[\s|;&(])wget(\s|$)/,"wget"],[/(^|[\s|;&(])fetch(\s|$)/,"fetch"]],zp=[[/(^|[\s|;&(])npm\s+(install|i|add)(\s|$)/,{kind:"package_install",manager:"npm"}],[/(^|[\s|;&(])pnpm\s+(add|install|i)(\s|$)/,{kind:"package_install",manager:"pnpm"}],[/(^|[\s|;&(])yarn\s+(add|install)(\s|$)/,{kind:"package_install",manager:"yarn"}],[/(^|[\s|;&(])pip[3]?\s+install(\s|$)/,{kind:"package_install",manager:"pip"}],[/(^|[\s|;&(])cargo\s+install(\s|$)/,{kind:"package_install",manager:"cargo"}],[/(^|[\s|;&(])apt(-get)?\s+install(\s|$)/,{kind:"package_install",manager:"apt"}],[/(^|[\s|;&(])brew\s+install(\s|$)/,{kind:"package_install",manager:"brew"}]],Yp=[[/(^|[\s|;&(])git\s+commit(\s|$)/,{kind:"git_write",verb:"commit"}],[/(^|[\s|;&(])git\s+push(\s|$)/,{kind:"git_write",verb:"push"}],[/(^|[\s|;&(])git\s+reset(\s|$)/,{kind:"git_write",verb:"reset"}],[/(^|[\s|;&(])git\s+clean(\s|$)/,{kind:"git_write",verb:"clean"}],[/(^|[\s|;&(])git\s+rebase(\s|$)/,{kind:"git_write",verb:"rebase"}],[/(^|[\s|;&(])git\s+cherry-pick(\s|$)/,{kind:"git_write",verb:"cherry-pick"}],[/(^|[\s|;&(])git\s+revert(\s|$)/,{kind:"git_write",verb:"revert"}]],Jp=new Set(["bash"]),Oo={toolNames:Jp,collect(e){let t=typeof e.input.command=="string"?e.input.command:"";if(!t)return[];let n=[],r=ho(t,{safePatterns:Et,dangerousPatterns:xt});r.level==="dangerous"&&r.matchedPattern&&n.push({kind:"dangerous_pattern",pattern:r.matchedPattern,severity:Kp(r.matchedPattern)});for(let[i,s]of Xp)if(i.test(t)){n.push({kind:"network",tool:s});break}for(let[i,s]of zp)if(i.test(t)){n.push(s);break}for(let[i,s]of Yp)i.test(t)&&n.push(s);return n}};import Qp from"node:os";import We from"node:path";function Sn(e,t){let n=We.resolve(e),r=We.resolve(t);return n===r?!0:n.startsWith(r+We.sep)}o(Sn,"isPathUnder");function Zp(){let e=new Set;try{e.add(Qp.tmpdir())}catch{}for(let t of["TEMP","TMP","TMPDIR"]){let n=process.env[t];n&&n.length>0&&e.add(n)}return Array.from(e)}o(Zp,"getSystemTempDirectories");var eh=new Set(["write","edit"]),Io={toolNames:eh,collect(e,t){let n=typeof e.input.path=="string"?e.input.path:"";if(!n)return[];let r=[],i=We.resolve(t,n),s=th();s&&Sn(i,s)&&r.push({kind:"protected_path",path:n,zone:"user-kodax"});let c=We.join(We.resolve(t),".kodax");if(Sn(i,c)&&r.push({kind:"protected_path",path:n,zone:"project-kodax"}),!r.some(a=>a.kind==="protected_path")){let a=We.resolve(t);Sn(i,a)||Zp().some(d=>Sn(i,d))||r.push({kind:"outside_project",path:n})}return r.push({kind:"file_modification",targets:[n]}),r}};function th(){try{return $e()}catch{return}}o(th,"safeGetAgentConfigHome");function Po(e,t,n){let r=[];for(let i of n){if(!i.toolNames.has(e.name))continue;let s=i.collect(e,t);if(s.length!==0)for(let c of s)r.push(c)}return r}o(Po,"collectAllSignals");var nh=500,rh="KODAX_AUTO_SPECULATIVE_WINDOW_MS";function ed(){let e=process.env[rh];if(e===void 0||e==="")return;let t=Number(e);if(Number.isFinite(t))return t<0?0:Math.floor(t)}o(ed,"readWindowFromEnv");async function No(e,t){let n=t??ed()??500;if(n<=0)return{kind:"resolved",value:await e};let r,i=new Promise(c=>{r=setTimeout(()=>c({kind:"window-expired"}),n)}),s=e.then(c=>({kind:"resolved",value:c}));e.catch(()=>{});try{return await Promise.race([s,i])}finally{r&&clearTimeout(r)}}o(No,"speculativeRace");var oh=8e3;function ih(e){let t=e.sharedState??{engine:e.initialEngine??"llm",denials:Ro(),breaker:Ao()},n=e.timeoutMs??oh,r,i=o(u=>{t.engine!==u&&(t.engine=u,e.onEngineChange?.(u))},"transitionEngine"),s=[...e.signalCollectors??[Oo,Io],...e.extraCollectors??[]],c=e.projectRoot??"",a=o(async(u,m)=>{let d=Po(u,c,s),f=o(async v=>e.askUser?await e.askUser(u,v,d)==="allow"?{action:"allow"}:{action:"block",reason:v}:{action:"escalate",reason:v},"escalateOrAsk"),p=e.getToolProjection(u.name),h=p?p(u.input):"";if(h==="")return{action:"allow"};let g=Mo(u,c);if(g.denied)return e.log?.("warn",`[auto-mode] Tier 0 absolute denylist matched (${g.patternId}): ${g.reason}`),{action:"block",reason:g.reason};if(t.engine==="rules")return f("auto-mode engine is in rules mode (downgraded); user confirmation required");if(Tn(t.denials))return i("rules"),e.log?.("warn","[auto-mode] denial threshold crossed \u2014 engine downgraded to rules"),f("auto-mode engine downgraded after consecutive denials; user confirmation required");if(En(t.breaker,Date.now()))return i("rules"),e.log?.("warn","[auto-mode] circuit breaker tripped \u2014 engine downgraded to rules"),f("classifier infrastructure unstable; engine downgraded");let y=Co(sh(e)),R=r??e.resolveProvider(y.providerName);if(!R)return f(`classifier provider "${y.providerName}" is not configured`);let M=To({provider:R,model:y.model,rules:e.rules,claudeMd:e.claudeMd,transcript:m.messages??[],action:h,signals:d,timeoutMs:n,abortSignal:m.abortSignal,costTracker:e.getCostTracker?.(),setCostTracker:e.setCostTracker}),w;try{let v=await No(M,e.speculativeWindowMs);if(v.kind==="window-expired")return f("speculative classifier window expired; user confirmation required while analysis continues");w=v.value}catch(v){if(v instanceof DOMException&&v.name==="AbortError")throw v;return t.breaker=bn(t.breaker,Date.now()),f(`classifier error: ${v instanceof Error?v.message:String(v)}`)}switch(w.kind){case"allow":return t.denials=_o(t.denials),{action:"allow"};case"block":return t.denials=So(t.denials),Tn(t.denials)&&(i("rules"),e.log?.("warn","[auto-mode] denial threshold crossed \u2014 engine downgraded to rules")),{action:"block",reason:w.reason};case"escalate":return t.breaker=bn(t.breaker,Date.now()),En(t.breaker,Date.now())&&(i("rules"),e.log?.("warn","[auto-mode] circuit breaker tripped \u2014 engine downgraded to rules")),f(w.reason)}},"beforeTool"),l=o(()=>({engine:t.engine,denials:t.denials,breaker:t.breaker}),"getStats");return{kind:"tool",name:"auto-mode",beforeTool:a,getEngine:o(()=>t.engine,"getEngine"),getStats:l,setEngine:o(u=>{i(u)},"setEngine"),getEngineForTest:o(()=>t.engine,"getEngineForTest"),getStatsForTest:l,setProviderForTest:o(u=>{r=u},"setProviderForTest")}}o(ih,"createAutoModeToolGuardrail");function sh(e){return{cliFlag:e.cliFlag,envVar:e.envVar,sessionOverride:e.sessionOverride,userSettings:e.userSettings,defaultProvider:e.getDefaultProvider?.()??e.defaultProvider,defaultModel:e.getDefaultModel?.()??e.defaultModel}}o(sh,"buildResolveOptions");var td=8e3,ah="bash_prefix_extractor",ch=200,dh=new Set(["sh","bash","zsh","fish","csh","tcsh","ksh","dash","cmd","cmd.exe","powershell","powershell.exe","pwsh","pwsh.exe","bash.exe"]),nd=`<policy_spec>
207
+ `;)l+=1;continue}if(u==="/"&&m==="*"){for(l+=2;l<e.length&&!(e[l]==="*"&&e[l+1]==="/");)l+=1;l+=2;continue}break}if(e[l]==="]"||e[l]==="}"){n+=1;continue}}t+=c,n+=1}return t}o(Cp,"stripJsonComments");function vn(e){let t;try{t=JSON.parse(Cp(e))}catch(s){return{ok:!1,error:s instanceof Error?s.message:String(s)}}if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,error:"auto-rules root must be an object"};let n=t,r=["allow","soft_deny","environment"],i={allow:[],soft_deny:[],environment:[]};for(let s of r){let c=n[s];if(c!==void 0){if(!Array.isArray(c))return{ok:!1,error:`auto-rules.${s} must be an array of strings`};for(let a of c){if(typeof a!="string")return{ok:!1,error:`auto-rules.${s} entries must be strings`};i[s].push(a)}}}return{ok:!0,rules:i}}o(vn,"parseAutoRules");async function bo(e){try{return await Yc(e,"utf-8")}catch{return null}}o(bo,"tryReadRulesFile");async function Mp(e){let t=[],n=[],r=[],i=[],s=Rt(e.userKodaxDir,zc),c=Rt(e.projectRoot,".kodax",zc),a=Rt(e.projectRoot,".kodax",Sp),l=await bo(s);if(l!==null){let d=vn(l);d.ok?(i.push(d.rules),t.push({origin:"user",path:s,fingerprint:yn(l)})):r.push({path:s,message:d.error})}let u=await bo(c);if(u!==null){let d=yn(u),p=(await xo(e.userKodaxDir)).trusted[c];if(p===void 0)n.push({origin:"project",path:c,fingerprint:d,reason:"untrusted"});else if(p!==d)n.push({origin:"project",path:c,fingerprint:d,reason:"fingerprint-changed"});else{let h=vn(u);h.ok?(i.push(h.rules),t.push({origin:"project",path:c,fingerprint:d})):r.push({path:c,message:h.error})}}let m=await bo(a);if(m!==null){let d=vn(m);d.ok?(i.push(d.rules),t.push({origin:"local",path:a,fingerprint:yn(m)})):r.push({path:a,message:d.error})}return{merged:i.length===0?_p:Op(i),sources:t,skipped:n,errors:r}}o(Mp,"loadAutoRules");function Op(e){return{allow:Eo(e.map(t=>t.allow)),soft_deny:Eo(e.map(t=>t.soft_deny)),environment:Eo(e.map(t=>t.environment))}}o(Op,"mergeRules");function Eo(e){let t=[];for(let n of e){let r=new Set(n);t=t.filter(s=>!r.has(s));let i=new Set(t);for(let s of n)i.has(s)||(i.add(s),t.push(s))}return t}o(Eo,"dedupConcat");var Ip=`
208
+ \u2026[truncated]\u2026`;function Pp(e,t={}){let n=t.maxToolResultBytes??2048,r=t.maxTranscriptBytes??8192,i=[];for(let s of e){let c=Np(s,n);c!==null&&i.push(c)}return $p(i,r)}o(Pp,"stripAssistantText");function Np(e,t){if(e.role==="user"||e.role==="system"){if(typeof e.content=="string")return e;let r=[];for(let i of e.content)if(i.type==="tool_result"){let s=Dp(i,t);r.push(s)}else r.push(i);return{...e,content:r}}if(typeof e.content=="string")return null;let n=[];for(let r of e.content)r.type==="tool_use"&&n.push(r);return n.length===0?null:{...e,content:n}}o(Np,"stripMessage");function Dp(e,t){if(e.content.length<=t)return e;let n=e.content.slice(0,t)+Ip;return{...e,content:n}}o(Dp,"truncateToolResult");function $p(e,t){if(e.length===0)return[];let n=e.map(u=>({msg:u,bytes:JSON.stringify(u).length}));if(n.reduce((u,m)=>u+m.bytes,0)<=t)return[...e];let i=n.findIndex(u=>u.msg.role==="user");if(i===-1)return Lp(n,t);let s=n[i],c=t-s.bytes;c<0&&(c=0);let a=n.slice(i+1),l=[];for(let u=a.length-1;u>=0;u-=1){let m=a[u];if(m.bytes>c)break;l.unshift(m),c-=m.bytes}return[s.msg,...l.map(u=>u.msg)]}o($p,"enforceTotalBudget");function Lp(e,t){let n=[],r=t;for(let i=e.length-1;i>=0;i-=1){let s=e[i];if(s.bytes>r)break;n.unshift(s.msg),r-=s.bytes}return n}o(Lp,"takeTail");var jp=3,Up=20,Fp={consecutive:0,cumulative:0};function Ro(){return Fp}o(Ro,"createDenialTracker");function So(e){return{consecutive:e.consecutive+1,cumulative:e.cumulative+1}}o(So,"recordBlock");function _o(e){return e.consecutive===0?e:{consecutive:0,cumulative:e.cumulative}}o(_o,"recordAllow");function Tn(e){return e.consecutive>=3||e.cumulative>=20}o(Tn,"shouldFallback");var Bp=5,Wp=6e5,Hp={timestamps:[]};function Ao(){return Hp}o(Ao,"createCircuitBreaker");function bn(e,t){let n=t-6e5;return{timestamps:[...e.timestamps.filter(i=>i>=n),t]}}o(bn,"recordError");function En(e,t){let n=t-6e5,r=0;for(let i of e.timestamps)i>=n&&(r+=1);return r>=5}o(En,"shouldFallback");function Qc(e){let t=e.trim();if(t.length===0)throw new Error("parseModelSpec: empty spec");let n=t.indexOf(":");if(n===-1)return{providerName:null,model:t};let r=t.slice(0,n).trim(),i=t.slice(n+1).trim();if(r.length===0)throw new Error(`parseModelSpec: provider name is empty in spec "${e}"`);if(i.length===0)throw new Error(`parseModelSpec: model name is empty in spec "${e}"`);return{providerName:r,model:i}}o(Qc,"parseModelSpec");function Co(e){let t=[{source:"cli",value:xn(e.cliFlag)},{source:"env",value:xn(e.envVar)},{source:"session-override",value:xn(e.sessionOverride)},{source:"user-settings",value:xn(e.userSettings)}];for(let n of t){if(n.value===void 0)continue;let r=Qc(n.value);return{providerName:r.providerName??e.defaultProvider,model:r.model,source:n.source}}return{providerName:e.defaultProvider,model:e.defaultModel,source:"default-main"}}o(Co,"resolveClassifierModel");function xn(e){if(e!=null)return e.trim().length===0?void 0:e}o(xn,"nonEmpty");import Rn from"node:path";var ae={denied:!1};function Gp(e){let t=!1,n=!1;for(let r of e)r.startsWith("-")&&(r==="--recursive"||r==="-R"?t=!0:r==="--force"?n=!0:r.startsWith("-")&&!r.startsWith("--")&&(/r/i.test(r.slice(1))&&(t=!0),/f/.test(r.slice(1))&&(n=!0)));return t&&n}o(Gp,"hasRecursiveAndForceFlags");var Zc=new Set(["/","~","~/","$HOME","${HOME}","$HOME/","${HOME}/"]);function qp(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t==='"'&&n==='"'||t==="'"&&n==="'"?e.slice(1,-1):e}o(qp,"unquote");function Vp(e){let t=e.trim();if(!/^\s*rm\b/.test(t))return ae;let n=t.split(/\s+/).slice(1);if(!Gp(n))return ae;for(let r of n){if(r.startsWith("-"))continue;let i=qp(r),s=i.replace(/\/\*+$/,"/").replace(/\/+$/,"/");if(Zc.has(i)||Zc.has(s))return{denied:!0,patternId:"rm_rf_root",reason:`Recursive deletion of root path (\`${i}\`) is permanently denied. If you intended a subdirectory, use a full path like \`rm -rf /tmp/scratch\`.`}}return ae}o(Vp,"checkRmRfRoot");var Kp=/(^|[\s|;&(])(mkfs(?:\.[a-z0-9]+)?|fdisk)\s+(['"]?)(\/dev\/(sd|nvme|hd|vd)[a-z0-9]*|\\\\\.\\PhysicalDrive[0-9]+)/i,Xp=/(^|[\s|;&(])format(\s+\/[A-Za-z]:?)?(\s+[A-Za-z]:)/;function zp(e){return Kp.test(e)?{denied:!0,patternId:"mkfs_or_format",reason:"Disk format / filesystem creation on a block device is permanently denied (data destruction risk)."}:Xp.test(e)?{denied:!0,patternId:"mkfs_or_format",reason:"Windows `format X:` command is permanently denied (data destruction risk)."}:ae}o(zp,"checkMkfsOrFormat");var Yp=/(^|[\s|;&(])dd\s+[^\n]*\bof=(['"]?)(\/dev\/(sd|nvme|hd|vd)[a-z0-9]*|\\\\\.\\PhysicalDrive[0-9]+)/i;function Jp(e){return Yp.test(e)?{denied:!0,patternId:"dd_disk_write",reason:"Raw disk write via `dd of=/dev/sd*` is permanently denied. Use a file target (`of=path.bin`) if you intended a file write."}:ae}o(Jp,"checkDdDiskWrite");var Qp=/:\s*\(\s*\)\s*\{[^}]*:\s*\|\s*:\s*&[^}]*\}\s*;\s*:/;function Zp(e){return Qp.test(e)?{denied:!0,patternId:"fork_bomb",reason:"Fork bomb pattern detected; permanently denied (denial-of-service risk)."}:ae}o(Zp,"checkForkBomb");function eh(e,t){let n=Rn.resolve(e),r=Rn.resolve(t);return n===r?!0:n.startsWith(r+Rn.sep)}o(eh,"isPathUnder");function th(e,t){if(e.name!=="write"&&e.name!=="edit")return ae;let n=typeof e.input.path=="string"?e.input.path:"";if(!n)return ae;let r;try{r=$e()}catch{return ae}let i=Rn.resolve(t,n);return eh(i,r)?{denied:!0,patternId:"user_kodax_write",reason:`Write to credential-zone path \`${n}\` (under ~/.kodax/) is permanently denied. KodaX config edits must go through the \`kodax config\` CLI or the SDK config API, never through the file-write tool.`}:ae}o(th,"checkUserKodaxWrite");function Mo(e,t){let n=th(e,t);if(n.denied)return n;if(e.name!=="bash")return ae;let r=typeof e.input.command=="string"?e.input.command:"";if(!r)return ae;let i=Vp(r);if(i.denied)return i;let s=zp(r);if(s.denied)return s;let c=Jp(r);if(c.denied)return c;let a=Zp(r);return a.denied?a:ae}o(Mo,"checkAbsoluteDeny");var nh={"\\brm\\s+(-[a-z]*r|-[a-z]*f|--force|--recursive)":"medium","\\bgit\\s+(push\\s+--force|push\\s+-f\\b|reset\\s+--hard|clean\\s+-[a-z]*f|checkout\\s+--\\s+\\.|restore\\s+--staged\\s+\\.|branch\\s+-D)":"high","\\bsudo\\b":"high","\\bchmod\\s+[0-7]*777\\b":"high","\\b(mkfs|fdisk|dd\\s+if=|format)\\b":"high","\\bcurl\\b.*\\|\\s*(bash|sh|zsh)\\b":"high","\\b(drop\\s+|truncate\\s+|delete\\s+from)\\b":"high","\\brm\\s+-rf\\s+[\\/~]":"high","\\b(shutdown|reboot|halt|poweroff)\\b":"medium"};function rh(e){return nh[e]??"high"}o(rh,"severityFor");var oh=[[/(^|[\s|;&(])curl(\s|$)/,"curl"],[/(^|[\s|;&(])wget(\s|$)/,"wget"],[/(^|[\s|;&(])fetch(\s|$)/,"fetch"]],ih=[[/(^|[\s|;&(])npm\s+(install|i|add)(\s|$)/,{kind:"package_install",manager:"npm"}],[/(^|[\s|;&(])pnpm\s+(add|install|i)(\s|$)/,{kind:"package_install",manager:"pnpm"}],[/(^|[\s|;&(])yarn\s+(add|install)(\s|$)/,{kind:"package_install",manager:"yarn"}],[/(^|[\s|;&(])pip[3]?\s+install(\s|$)/,{kind:"package_install",manager:"pip"}],[/(^|[\s|;&(])cargo\s+install(\s|$)/,{kind:"package_install",manager:"cargo"}],[/(^|[\s|;&(])apt(-get)?\s+install(\s|$)/,{kind:"package_install",manager:"apt"}],[/(^|[\s|;&(])brew\s+install(\s|$)/,{kind:"package_install",manager:"brew"}]],sh=[[/(^|[\s|;&(])git\s+commit(\s|$)/,{kind:"git_write",verb:"commit"}],[/(^|[\s|;&(])git\s+push(\s|$)/,{kind:"git_write",verb:"push"}],[/(^|[\s|;&(])git\s+reset(\s|$)/,{kind:"git_write",verb:"reset"}],[/(^|[\s|;&(])git\s+clean(\s|$)/,{kind:"git_write",verb:"clean"}],[/(^|[\s|;&(])git\s+rebase(\s|$)/,{kind:"git_write",verb:"rebase"}],[/(^|[\s|;&(])git\s+cherry-pick(\s|$)/,{kind:"git_write",verb:"cherry-pick"}],[/(^|[\s|;&(])git\s+revert(\s|$)/,{kind:"git_write",verb:"revert"}]],ah=new Set(["bash"]),Oo={toolNames:ah,collect(e){let t=typeof e.input.command=="string"?e.input.command:"";if(!t)return[];let n=[],r=ho(t,{safePatterns:Et,dangerousPatterns:xt});r.level==="dangerous"&&r.matchedPattern&&n.push({kind:"dangerous_pattern",pattern:r.matchedPattern,severity:rh(r.matchedPattern)});for(let[i,s]of oh)if(i.test(t)){n.push({kind:"network",tool:s});break}for(let[i,s]of ih)if(i.test(t)){n.push(s);break}for(let[i,s]of sh)i.test(t)&&n.push(s);return n}};import ch from"node:os";import We from"node:path";function Sn(e,t){let n=We.resolve(e),r=We.resolve(t);return n===r?!0:n.startsWith(r+We.sep)}o(Sn,"isPathUnder");function dh(){let e=new Set;try{e.add(ch.tmpdir())}catch{}for(let t of["TEMP","TMP","TMPDIR"]){let n=process.env[t];n&&n.length>0&&e.add(n)}return Array.from(e)}o(dh,"getSystemTempDirectories");var lh=new Set(["write","edit"]),Io={toolNames:lh,collect(e,t){let n=typeof e.input.path=="string"?e.input.path:"";if(!n)return[];let r=[],i=We.resolve(t,n),s=uh();s&&Sn(i,s)&&r.push({kind:"protected_path",path:n,zone:"user-kodax"});let c=We.join(We.resolve(t),".kodax");if(Sn(i,c)&&r.push({kind:"protected_path",path:n,zone:"project-kodax"}),!r.some(a=>a.kind==="protected_path")){let a=We.resolve(t);Sn(i,a)||dh().some(d=>Sn(i,d))||r.push({kind:"outside_project",path:n})}return r.push({kind:"file_modification",targets:[n]}),r}};function uh(){try{return $e()}catch{return}}o(uh,"safeGetAgentConfigHome");function Po(e,t,n){let r=[];for(let i of n){if(!i.toolNames.has(e.name))continue;let s=i.collect(e,t);if(s.length!==0)for(let c of s)r.push(c)}return r}o(Po,"collectAllSignals");var fh=500,mh="KODAX_AUTO_SPECULATIVE_WINDOW_MS";function ed(){let e=process.env[mh];if(e===void 0||e==="")return;let t=Number(e);if(Number.isFinite(t))return t<0?0:Math.floor(t)}o(ed,"readWindowFromEnv");async function No(e,t){let n=t??ed()??500;if(n<=0)return{kind:"resolved",value:await e};let r,i=new Promise(c=>{r=setTimeout(()=>c({kind:"window-expired"}),n)}),s=e.then(c=>({kind:"resolved",value:c}));e.catch(()=>{});try{return await Promise.race([s,i])}finally{r&&clearTimeout(r)}}o(No,"speculativeRace");var ph=8e3;function hh(e){let t=e.sharedState??{engine:e.initialEngine??"llm",denials:Ro(),breaker:Ao()},n=e.timeoutMs??ph,r,i=o(u=>{t.engine!==u&&(t.engine=u,e.onEngineChange?.(u))},"transitionEngine"),s=[...e.signalCollectors??[Oo,Io],...e.extraCollectors??[]],c=e.projectRoot??"",a=o(async(u,m)=>{let d=Po(u,c,s),f=o(async v=>e.askUser?await e.askUser(u,v,d)==="allow"?{action:"allow"}:{action:"block",reason:v}:{action:"escalate",reason:v},"escalateOrAsk"),p=e.getToolProjection(u.name),h=p?p(u.input):"";if(h==="")return{action:"allow"};let g=Mo(u,c);if(g.denied)return e.log?.("warn",`[auto-mode] Tier 0 absolute denylist matched (${g.patternId}): ${g.reason}`),{action:"block",reason:g.reason};if(t.engine==="rules")return f("auto-mode engine is in rules mode (downgraded); user confirmation required");if(Tn(t.denials))return i("rules"),e.log?.("warn","[auto-mode] denial threshold crossed \u2014 engine downgraded to rules"),f("auto-mode engine downgraded after consecutive denials; user confirmation required");if(En(t.breaker,Date.now()))return i("rules"),e.log?.("warn","[auto-mode] circuit breaker tripped \u2014 engine downgraded to rules"),f("classifier infrastructure unstable; engine downgraded");let y=Co(gh(e)),R=r??e.resolveProvider(y.providerName);if(!R)return f(`classifier provider "${y.providerName}" is not configured`);let M=To({provider:R,model:y.model,rules:e.rules,claudeMd:e.claudeMd,transcript:m.messages??[],action:h,signals:d,timeoutMs:n,abortSignal:m.abortSignal,costTracker:e.getCostTracker?.(),setCostTracker:e.setCostTracker}),w;try{let v=await No(M,e.speculativeWindowMs);if(v.kind==="window-expired")return f("speculative classifier window expired; user confirmation required while analysis continues");w=v.value}catch(v){if(v instanceof DOMException&&v.name==="AbortError")throw v;return t.breaker=bn(t.breaker,Date.now()),f(`classifier error: ${v instanceof Error?v.message:String(v)}`)}switch(w.kind){case"allow":return t.denials=_o(t.denials),{action:"allow"};case"block":return t.denials=So(t.denials),Tn(t.denials)&&(i("rules"),e.log?.("warn","[auto-mode] denial threshold crossed \u2014 engine downgraded to rules")),{action:"block",reason:w.reason};case"escalate":return t.breaker=bn(t.breaker,Date.now()),En(t.breaker,Date.now())&&(i("rules"),e.log?.("warn","[auto-mode] circuit breaker tripped \u2014 engine downgraded to rules")),f(w.reason)}},"beforeTool"),l=o(()=>({engine:t.engine,denials:t.denials,breaker:t.breaker}),"getStats");return{kind:"tool",name:"auto-mode",beforeTool:a,getEngine:o(()=>t.engine,"getEngine"),getStats:l,setEngine:o(u=>{i(u)},"setEngine"),getEngineForTest:o(()=>t.engine,"getEngineForTest"),getStatsForTest:l,setProviderForTest:o(u=>{r=u},"setProviderForTest")}}o(hh,"createAutoModeToolGuardrail");function gh(e){return{cliFlag:e.cliFlag,envVar:e.envVar,sessionOverride:e.sessionOverride,userSettings:e.userSettings,defaultProvider:e.getDefaultProvider?.()??e.defaultProvider,defaultModel:e.getDefaultModel?.()??e.defaultModel}}o(gh,"buildResolveOptions");var td=8e3,wh="bash_prefix_extractor",kh=200,yh=new Set(["sh","bash","zsh","fish","csh","tcsh","ksh","dash","cmd","cmd.exe","powershell","powershell.exe","pwsh","pwsh.exe","bash.exe"]),nd=`<policy_spec>
209
209
  # Claude Code Code Bash command prefix detection
210
210
 
211
211
  This document defines risk levels for actions that the Claude Code agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed.
@@ -266,25 +266,25 @@ then the safety system will see that you said "command_injection_detected" and a
266
266
 
267
267
  Note that not every command has a prefix. If a command has no prefix, return "none".
268
268
 
269
- ONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting.`;async function rd(e){let t=e.command.trim();if(!t)return{kind:"no_prefix",reason:"empty command"};let n=await Xe({provider:e.provider,model:e.model,system:nd,messages:[{role:"user",content:`Command: ${t}`}],reasoning:{mode:"off"},timeoutMs:e.timeoutMs??td,abortSignal:e.abortSignal,querySource:ah,costTracker:e.costTracker});switch(e.setCostTracker&&n.costTracker!==void 0&&n.costTracker!==e.costTracker&&e.setCostTracker(n.costTracker),n.stopReason){case"end_turn":case"max_tokens":return lh(t,n.text);case"timeout":throw new Error(`extractCommandPrefix timeout (${e.timeoutMs??td}ms)`);case"aborted":throw new DOMException("extractCommandPrefix aborted","AbortError");default:throw n.error??new Error(`extractCommandPrefix failed (stopReason=${n.stopReason})`)}}o(rd,"extractCommandPrefix");function lh(e,t){let n=t.trim().split(/\r?\n/)[0]?.trim()??"";return n?n==="command_injection_detected"?{kind:"injection_detected",reason:"LLM flagged command injection"}:n==="none"?{kind:"no_prefix",reason:"LLM declared no prefix"}:n==="git"?{kind:"no_prefix",reason:"bare `git` is too broad to allow; require subcommand"}:dh.has(n.toLowerCase())?{kind:"no_prefix",reason:`dangerous shell executable as prefix: ${n}`}:e.startsWith(n)?{kind:"prefix",value:n}:{kind:"no_prefix",reason:"LLM returned a string that is not a prefix of the command"}:{kind:"no_prefix",reason:"empty response"}}o(lh,"validatePrefixResponse");function uh(e){let t=e.cacheSize??ch,n=new Map,r=o(()=>{for(;n.size>t;){let s=n.keys().next().value;if(s===void 0)break;n.delete(s)}},"evictIfOversized");return{extract:o((s,c)=>{let a=n.get(s);if(a!==void 0)return n.delete(s),n.set(s,a),a;let l=rd({provider:e.getProvider(),model:e.getModel(),command:s,timeoutMs:e.timeoutMs,abortSignal:c,costTracker:e.costTracker?.(),setCostTracker:e.setCostTracker});return l.catch(()=>{n.get(s)===l&&n.delete(s)}),n.set(s,l),r(),l},"extract"),clearCache:o(()=>n.clear(),"clearCache"),cacheSize:o(()=>n.size,"cacheSize")}}o(uh,"createBashPrefixExtractor");import fh from"node:path";var od="KODAX_TRACING",St;function mh(e={}){if(process.env[od]==="0")return;if(St)return St;let t=e.traceDir??fh.join($e(),".traces"),n=new di({traceDir:t}),r=ci(n);return St=o(()=>{r(),St=void 0},"activeDispose"),St}o(mh,"bootstrapTracing");var vh=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],Th="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.";function bh(e,t){return["Investigate the following question (READ-ONLY \u2014 do not modify any files):",e,"",`Focus your investigation on: ${t}`,"","Report concrete findings backed by evidence (cite file:line). If you find nothing relevant for this focus, say so briefly."].join(`
270
- `)}o(bh,"buildInvestigatorPrompt");function Eh(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:vh).slice(0,t).map((r,i)=>({name:`investigate-${i+1}`,prompt:bh(e.question,r)}))}o(Eh,"resolveAngles");async function xh(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0});return{angle:t.name,status:n.status==="completed"?"completed":"failed",text:n.finalText}}catch(n){let r=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${r}`}}}o(xh,"investigate");async function Rh(e,t){let n=Eh(t),r=await e.phase("investigate",()=>e.parallel(n.map(c=>()=>xh(e,c)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0)),i=r.some(c=>c.status!=="completed");return{synthesis:(await e.phase("synthesize",()=>e.synthesize({inputs:r.map(c=>`### ${c.angle} (${c.status})
271
- ${c.text}`),rubric:t.rubric??Th}))).text,findings:r,degraded:i}}o(Rh,"runParallelInvestigation");var id={meta:{name:"parallel-investigation",description:"Fan out read-only investigators over a question (split by target areas), then synthesize ranked, evidence-keeping findings.",maxAgents:8,maxConcurrency:4,readOnly:!0,phases:["investigate","synthesize"]},run:Rh};import{execFile as Sh}from"node:child_process";import _n from"node:path";import{promisify as _h}from"node:util";var Ah=_h(Sh),Ch=1e4,ud=2,sd=new Set(["write","edit","multi_edit","insert_after_anchor"]),Mh=/^\s*(?:let me|i will|i'll|i am going to)\b[\s\S]{0,120}\b(?:start|create|implement|write|build|plan)\b|^\s*(?:我将|让我|接下来)[\s\S]{0,80}(?:开始|创建|编写|实现|制定)/i;function Oh(e){if(e?.timeoutMs!==void 0){if(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)throw new Error("workflow wait timeoutMs must be a positive number");return Math.floor(e.timeoutMs)}}o(Oh,"normalizeWaitTimeoutMs");function Do(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}o(Do,"hasVerificationWork");function He(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}o(He,"normalizeWorkspacePath");function Ih(e,t){let n=t.gitRoot?_n.resolve(t.gitRoot):void 0,r=_n.isAbsolute(e)&&n?_n.relative(n,_n.resolve(e)):e;return He(r)}o(Ih,"normalizeRequiredPath");function Ph(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},r=e.verification.requiredChangedPaths;return{verification:{...n,...r!==void 0&&r.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}o(Ph,"resolveVerificationForInput");function fd(e){let t=e.trim();return t.length>0&&Mh.test(t)}o(fd,"isPreparatoryOnlyText");function Nh(e,t){let n=e.trim(),r=t?.trim();return r&&(n.length===0||fd(n))?r:e}o(Nh,"selectWorkflowFinalText");async function An(e,t){return(await Ah("git",[...e],{cwd:t,timeout:Ch,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}o(An,"runGit");async function Dh(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await An(["rev-parse","--show-toplevel"],t)).trim(),r=await Promise.all([An(["diff","--name-only","--"],n),An(["diff","--cached","--name-only","--"],n),An(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(r.flatMap(i=>i.split(/\r?\n/)).map(He).filter(i=>i.length>0))]}o(Dh,"listGitChangedFiles");async function $o(e,t){try{return{paths:(await t(e)).map(He).filter(r=>r.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}o($o,"captureChangedPaths");function $h(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[]}}o($h,"createMutationRecorder");function Lh(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return He(n)}}o(Lh,"readMutationPath");function jh(e,t){return{...e??{},onToolUseStart:o((n,r)=>{if(sd.has(n.name)){t.toolNameById.set(n.id,n.name);let i=Lh(n.input);i!==void 0&&t.toolPathById.set(n.id,i)}e?.onToolUseStart?.(n,r)},"onToolUseStart"),onToolResult:o((n,r)=>{let i=t.toolNameById.get(n.id)??n.name;if(sd.has(i)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(i);let s=t.toolPathById.get(n.id);s!==void 0&&t.succeededPaths.push(s)}e?.onToolResult?.(n,r)},"onToolResult")}}o(jh,"wrapEventsForMutationRecording");function Lo(e){return[...new Set(e.filter(t=>t.trim().length>0))]}o(Lo,"uniqueItems");function ad(e){let t=e.verification;if(!t)return;let n=[],r=new Set(e.before.paths.map(He)),i=Lo(e.after.paths.map(He)),s=i.filter(p=>!r.has(p)),c=Lo(e.mutationRecorder.succeededToolCalls),a=e.acceptToolMutationEvidence?c:[],l=e.acceptToolMutationEvidence?Lo(e.mutationRecorder.succeededPaths.map(He)):[],u=s.length>0||a.length>0,m=t.enforcement??"hard",d=(t.requiredChangedPaths??[]).map(p=>Ih(p,e.ctx));t.requiresMutation===!0&&(e.before.error!==void 0||e.after.error!==void 0?n.push(`workspace mutation verification could not read changed files: ${e.after.error??e.before.error}`):u||n.push(e.acceptToolMutationEvidence||c.length===0?"expected file mutations, but no new workspace changes or successful write tools were observed":"write tools ran in an isolated worktree, but no main workspace changes were present after cleanup")),e.term.limitReached===!0&&!u&&n.push("workflow child reached its iteration limit before satisfying the task");for(let p of d)!i.includes(p)&&!l.includes(p)&&n.push(`required changed path was not present in workspace changes: ${p}`);let f=t.minFinalTextChars;return f!==void 0&&!u&&e.term.finalText.trim().length<f&&n.push(`finalText was shorter than the required ${f} characters`),t.rejectPreparatoryFinalText===!0&&!u&&fd(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:m,reasons:n,changedPaths:i,mutationToolCalls:c,mutationEvidence:u}}o(ad,"evaluateVerification");function jo(e,t){if(t.ok)return e;let r=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(i=>`- ${i}`)].join(`
269
+ ONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting.`;async function rd(e){let t=e.command.trim();if(!t)return{kind:"no_prefix",reason:"empty command"};let n=await Xe({provider:e.provider,model:e.model,system:nd,messages:[{role:"user",content:`Command: ${t}`}],reasoning:{mode:"off"},timeoutMs:e.timeoutMs??td,abortSignal:e.abortSignal,querySource:wh,costTracker:e.costTracker});switch(e.setCostTracker&&n.costTracker!==void 0&&n.costTracker!==e.costTracker&&e.setCostTracker(n.costTracker),n.stopReason){case"end_turn":case"max_tokens":return vh(t,n.text);case"timeout":throw new Error(`extractCommandPrefix timeout (${e.timeoutMs??td}ms)`);case"aborted":throw new DOMException("extractCommandPrefix aborted","AbortError");default:throw n.error??new Error(`extractCommandPrefix failed (stopReason=${n.stopReason})`)}}o(rd,"extractCommandPrefix");function vh(e,t){let n=t.trim().split(/\r?\n/)[0]?.trim()??"";return n?n==="command_injection_detected"?{kind:"injection_detected",reason:"LLM flagged command injection"}:n==="none"?{kind:"no_prefix",reason:"LLM declared no prefix"}:n==="git"?{kind:"no_prefix",reason:"bare `git` is too broad to allow; require subcommand"}:yh.has(n.toLowerCase())?{kind:"no_prefix",reason:`dangerous shell executable as prefix: ${n}`}:e.startsWith(n)?{kind:"prefix",value:n}:{kind:"no_prefix",reason:"LLM returned a string that is not a prefix of the command"}:{kind:"no_prefix",reason:"empty response"}}o(vh,"validatePrefixResponse");function Th(e){let t=e.cacheSize??kh,n=new Map,r=o(()=>{for(;n.size>t;){let s=n.keys().next().value;if(s===void 0)break;n.delete(s)}},"evictIfOversized");return{extract:o((s,c)=>{let a=n.get(s);if(a!==void 0)return n.delete(s),n.set(s,a),a;let l=rd({provider:e.getProvider(),model:e.getModel(),command:s,timeoutMs:e.timeoutMs,abortSignal:c,costTracker:e.costTracker?.(),setCostTracker:e.setCostTracker});return l.catch(()=>{n.get(s)===l&&n.delete(s)}),n.set(s,l),r(),l},"extract"),clearCache:o(()=>n.clear(),"clearCache"),cacheSize:o(()=>n.size,"cacheSize")}}o(Th,"createBashPrefixExtractor");import bh from"node:path";var od="KODAX_TRACING",St;function Eh(e={}){if(process.env[od]==="0")return;if(St)return St;let t=e.traceDir??bh.join($e(),".traces"),n=new di({traceDir:t}),r=ci(n);return St=o(()=>{r(),St=void 0},"activeDispose"),St}o(Eh,"bootstrapTracing");var Mh=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],Oh="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.";function Ih(e,t){return["Investigate the following question (READ-ONLY \u2014 do not modify any files):",e,"",`Focus your investigation on: ${t}`,"","Report concrete findings backed by evidence (cite file:line). If you find nothing relevant for this focus, say so briefly."].join(`
270
+ `)}o(Ih,"buildInvestigatorPrompt");function Ph(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:Mh).slice(0,t).map((r,i)=>({name:`investigate-${i+1}`,prompt:Ih(e.question,r)}))}o(Ph,"resolveAngles");async function Nh(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0});return{angle:t.name,status:n.status==="completed"?"completed":"failed",text:n.finalText}}catch(n){let r=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${r}`}}}o(Nh,"investigate");async function Dh(e,t){let n=Ph(t),r=await e.phase("investigate",()=>e.parallel(n.map(c=>()=>Nh(e,c)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0)),i=r.some(c=>c.status!=="completed");return{synthesis:(await e.phase("synthesize",()=>e.synthesize({inputs:r.map(c=>`### ${c.angle} (${c.status})
271
+ ${c.text}`),rubric:t.rubric??Oh}))).text,findings:r,degraded:i}}o(Dh,"runParallelInvestigation");var id={meta:{name:"parallel-investigation",description:"Fan out read-only investigators over a question (split by target areas), then synthesize ranked, evidence-keeping findings.",maxAgents:8,maxConcurrency:4,readOnly:!0,phases:["investigate","synthesize"]},run:Dh};import{execFile as $h}from"node:child_process";import _n from"node:path";import{promisify as Lh}from"node:util";var jh=Lh($h),Uh=1e4,ud=2,sd=new Set(["write","edit","multi_edit","insert_after_anchor"]),Fh=/^\s*(?:let me|i will|i'll|i am going to)\b[\s\S]{0,120}\b(?:start|create|implement|write|build|plan)\b|^\s*(?:我将|让我|接下来)[\s\S]{0,80}(?:开始|创建|编写|实现|制定)/i;function Bh(e){if(e?.timeoutMs!==void 0){if(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)throw new Error("workflow wait timeoutMs must be a positive number");return Math.floor(e.timeoutMs)}}o(Bh,"normalizeWaitTimeoutMs");function Do(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}o(Do,"hasVerificationWork");function He(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}o(He,"normalizeWorkspacePath");function Wh(e,t){let n=t.gitRoot?_n.resolve(t.gitRoot):void 0,r=_n.isAbsolute(e)&&n?_n.relative(n,_n.resolve(e)):e;return He(r)}o(Wh,"normalizeRequiredPath");function Hh(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},r=e.verification.requiredChangedPaths;return{verification:{...n,...r!==void 0&&r.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}o(Hh,"resolveVerificationForInput");function fd(e){let t=e.trim();return t.length>0&&Fh.test(t)}o(fd,"isPreparatoryOnlyText");function Gh(e,t){let n=e.trim(),r=t?.trim();return r&&(n.length===0||fd(n))?r:e}o(Gh,"selectWorkflowFinalText");async function An(e,t){return(await jh("git",[...e],{cwd:t,timeout:Uh,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}o(An,"runGit");async function qh(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await An(["rev-parse","--show-toplevel"],t)).trim(),r=await Promise.all([An(["diff","--name-only","--"],n),An(["diff","--cached","--name-only","--"],n),An(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(r.flatMap(i=>i.split(/\r?\n/)).map(He).filter(i=>i.length>0))]}o(qh,"listGitChangedFiles");async function $o(e,t){try{return{paths:(await t(e)).map(He).filter(r=>r.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}o($o,"captureChangedPaths");function Vh(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[]}}o(Vh,"createMutationRecorder");function Kh(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return He(n)}}o(Kh,"readMutationPath");function Xh(e,t){return{...e??{},onToolUseStart:o((n,r)=>{if(sd.has(n.name)){t.toolNameById.set(n.id,n.name);let i=Kh(n.input);i!==void 0&&t.toolPathById.set(n.id,i)}e?.onToolUseStart?.(n,r)},"onToolUseStart"),onToolResult:o((n,r)=>{let i=t.toolNameById.get(n.id)??n.name;if(sd.has(i)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(i);let s=t.toolPathById.get(n.id);s!==void 0&&t.succeededPaths.push(s)}e?.onToolResult?.(n,r)},"onToolResult")}}o(Xh,"wrapEventsForMutationRecording");function Lo(e){return[...new Set(e.filter(t=>t.trim().length>0))]}o(Lo,"uniqueItems");function ad(e){let t=e.verification;if(!t)return;let n=[],r=new Set(e.before.paths.map(He)),i=Lo(e.after.paths.map(He)),s=i.filter(p=>!r.has(p)),c=Lo(e.mutationRecorder.succeededToolCalls),a=e.acceptToolMutationEvidence?c:[],l=e.acceptToolMutationEvidence?Lo(e.mutationRecorder.succeededPaths.map(He)):[],u=s.length>0||a.length>0,m=t.enforcement??"hard",d=(t.requiredChangedPaths??[]).map(p=>Wh(p,e.ctx));t.requiresMutation===!0&&(e.before.error!==void 0||e.after.error!==void 0?n.push(`workspace mutation verification could not read changed files: ${e.after.error??e.before.error}`):u||n.push(e.acceptToolMutationEvidence||c.length===0?"expected file mutations, but no new workspace changes or successful write tools were observed":"write tools ran in an isolated worktree, but no main workspace changes were present after cleanup")),e.term.limitReached===!0&&!u&&n.push("workflow child reached its iteration limit before satisfying the task");for(let p of d)!i.includes(p)&&!l.includes(p)&&n.push(`required changed path was not present in workspace changes: ${p}`);let f=t.minFinalTextChars;return f!==void 0&&!u&&e.term.finalText.trim().length<f&&n.push(`finalText was shorter than the required ${f} characters`),t.rejectPreparatoryFinalText===!0&&!u&&fd(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:m,reasons:n,changedPaths:i,mutationToolCalls:c,mutationEvidence:u}}o(ad,"evaluateVerification");function jo(e,t){if(t.ok)return e;let r=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(i=>`- ${i}`)].join(`
272
272
  `);return e.trim().length>0?`${e}
273
273
 
274
- ${r}`:r}o(jo,"appendVerificationFailure");function cd(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}o(cd,"limitReachedWarningVerification");function Uh(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<ud&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}o(Uh,"shouldRepairVerificationFailure");function Fh(e){let t=e.verification.reasons.map(r=>`- ${r}`).join(`
274
+ ${r}`:r}o(jo,"appendVerificationFailure");function cd(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}o(cd,"limitReachedWarningVerification");function zh(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<ud&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}o(zh,"shouldRepairVerificationFailure");function Yh(e){let t=e.verification.reasons.map(r=>`- ${r}`).join(`
275
275
  `),n=(e.verification.changedPaths??[]).length>0?`
276
276
  Workspace changes already present before this repair attempt:
277
277
  ${e.verification.changedPaths?.map(r=>`- ${r}`).join(`
278
278
  `)??""}`:"";return[e.originalPrompt,"","[Workflow verification repair]",`Repair attempt ${e.attempt}/${ud}.`,"The previous attempt did not satisfy the workflow postconditions.","Do not stop at analysis, planning, or a promise to begin. Complete the required file writes in the real workspace now.","Use the available file editing tools when a file change is required, then report the exact files changed.","","Verification failures:",t,n,"","Previous terminal response:",e.previousFinalText.trim()||"(empty)"].join(`
279
- `)}o(Fh,"buildVerificationRepairPrompt");async function dd(e,t,n,r,i=n){if(n===void 0)return e;let s;try{return await Promise.race([e,new Promise((c,a)=>{s=setTimeout(()=>{r.childAbortControllers?.get(t)?.abort(),a(new Error(`workflow task ${t} timed out after ${i??n}ms`))},n)})])}finally{s&&clearTimeout(s)}}o(dd,"waitForChildPromise");function ld(e,t){return{id:e,fanoutClass:"evidence-scan",objective:t.prompt,readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?[...t.evidenceRefs]:[],constraints:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{}}}o(ld,"buildBundle");function Uo(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],r=Nh(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:r,...n.digest?{digest:n.digest}:{},...n.digestFailed?{digestFailed:!0}:{},...n.digestPending?{digestPending:!0}:{},...n.limitReached?{limitReached:!0}:{},...n.provider?{provider:n.provider}:{},...n.model?{model:n.model}:{}}:{status:"failed",snapStatus:"failed",finalText:r,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{}}}o(Uo,"deriveTerminal");function md(e){let{ctx:t,childOptions:n}=e,r=e.runChild??Ms,i=e.queue??xe(),s=e.listChangedFiles??Dh,c=e.now??(()=>Date.now()),a=0,l=e.generateId??(()=>`wf-child-${a+=1}`),u=new Map,m=new Set,d=new Map,f=o(()=>e.onTaskSummary!==void 0||m.size>0,"hasTaskSummaryObservers"),p=o((w,v)=>{try{e.onTaskSummary?.(w,v)}catch{}for(let T of m)try{T(w,v)}catch{}},"notifyTaskSummary");return{spawn:o(async w=>{let v=l(),T=ld(v,w),V=Ph(w).verification,$=$h(),I=w.isolation!=="worktree",A=Do(V)?$o(t,s):Promise.resolve({paths:[]}),b=t.childProgressSnapshots,P=o(async k=>{let C=new AbortController;t.childAbortControllers?.set(v,C),b&&Os(b,{childId:v,startedAt:c(),maxIterations:n.maxIterationsPerChild,parentRole:n.parentRole,readOnly:k.readOnly,specialistName:k.specialistName});let x={...n,parentOptions:{...n.parentOptions,events:jh(n.parentOptions.events,$)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:v,itemId:`agent:${v}`}}:{},childActivityName:w.name,workflowDigestMode:f()?"async":"blocking",...f()?{onWorkflowChildDigest:o(O=>{p(O.childId,{...O.digest?{summary:O.digest}:{},summaryKind:O.digest?"digest":"digest-failed",...O.totalTokensUsed>0?{usage:{totalTokens:O.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:C.signal,snapshotUpdater:b?O=>Is(b,v,O):void 0},H;try{return await A,H=await r([k],t,x),H}finally{if(t.childAbortControllers?.delete(v),b){let O=H?Uo(H,v):{snapStatus:"failed",finalText:""};$r(b,v,{status:O.snapStatus,finalText:O.finalText,endedAt:c()})}}},"runBundle"),_=P(T);return u.set(v,{name:w.name,input:w,bundle:T,promise:_,runBundle:P,verification:V,changedPathBaseline:A,mutationRecorder:$,acceptToolMutationEvidence:I,repairAttempts:0}),Vn(d,v,_),{taskId:v,name:w.name}},"spawn"),wait:o(async(w,v)=>{let T=u.get(w);if(!T)throw new Error(`unknown workflow task: ${w}`);let D=Oh(v),V=Date.now(),$=o(async _=>{if(D===void 0)return dd(_,w,void 0,t);let k=Date.now()-V,C=D-k;if(C<=0)throw t.childAbortControllers?.get(w)?.abort(),new Error(`workflow task ${w} timed out after ${D}ms`);return dd(_,w,Math.max(1,Math.floor(C)),t,D)},"waitForAttempt"),I=await $(T.promise),A=I.totalTokensUsed,b=Uo(I,w),P=T.verification?ad({verification:T.verification,term:b,before:await T.changedPathBaseline,after:Do(T.verification)?await $o(t,s):{paths:[]},mutationRecorder:T.mutationRecorder,ctx:t,acceptToolMutationEvidence:T.acceptToolMutationEvidence}):void 0;for(b.limitReached===!0&&P===void 0&&b.status==="completed"&&(P=cd(),b={...b,status:"completed_unverified",snapStatus:"completed",finalText:jo(b.finalText,P)});Uh({entry:T,term:b,verification:P});){T.repairAttempts+=1;let _=ld(w,{...T.input,prompt:Fh({originalPrompt:T.input.prompt,previousFinalText:b.finalText,verification:P,attempt:T.repairAttempts})});T.promise=T.runBundle(_),Vn(d,w,T.promise),I=await $(T.promise),A+=I.totalTokensUsed,b=Uo(I,w),P=T.verification?ad({verification:T.verification,term:b,before:await T.changedPathBaseline,after:Do(T.verification)?await $o(t,s):{paths:[]},mutationRecorder:T.mutationRecorder,ctx:t,acceptToolMutationEvidence:T.acceptToolMutationEvidence}):void 0,b.limitReached===!0&&P===void 0&&b.status==="completed"&&(P=cd(),b={...b,status:"completed_unverified",snapStatus:"completed",finalText:jo(b.finalText,P)})}if(P!==void 0&&!P.ok&&b.status==="completed"){let _=P.enforcement==="warn";b={...b,status:_?"completed_unverified":"failed",snapStatus:_?"completed":"failed",finalText:jo(b.finalText,P)}}return $r(t.childProgressSnapshots,w,{status:b.snapStatus,finalText:b.finalText,endedAt:c()}),{taskId:w,name:T.name,status:b.status,finalText:b.finalText,...b.digest?{digest:b.digest}:{},...b.digestFailed?{digestFailed:!0}:{},...b.digestPending?{digestPending:!0}:{},...P!==void 0?{verification:P}:{},...b.limitReached?{limitReached:!0}:{},...b.provider?{provider:b.provider}:{},...b.model?{model:b.model}:{},usage:{totalTokens:A}}},"wait"),output:o(async w=>{let v=u.get(w)?.name??w,T=t.childProgressSnapshots?.get(w);if(!T)return{taskId:w,name:v,status:"running"};let D=T.status==="aborted"?"stopped":T.status;return T.finalText!==void 0?{taskId:w,name:v,status:D,lastText:T.finalText}:{taskId:w,name:v,status:D}},"output"),send:o(async(w,v)=>{gi({to:w,priority:"user",mode:"prompt",content:v,registry:d,queue:i})},"send"),stop:o(async w=>{t.childAbortControllers?.get(w)?.abort()},"stop"),subscribeTaskSummaryUpdates:o(w=>(m.add(w),()=>{m.delete(w)}),"subscribeTaskSummaryUpdates")}}o(md,"createCodingWorkflowBackend");import{mkdirSync as Bh,appendFileSync as Wh,writeFileSync as Cn}from"node:fs";import{join as ot}from"node:path";function Mn(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}o(Mn,"safeWorkflowArtifactName");function pd(e,t={}){let n=t.now??(()=>Date.now()),r=ot(e,"artifacts");Bh(r,{recursive:!0});let i=ot(e,"events.jsonl");return{runDir:e,onEvent:o(s=>{Wh(i,`${JSON.stringify({...s,ts:n()})}
279
+ `)}o(Yh,"buildVerificationRepairPrompt");async function dd(e,t,n,r,i=n){if(n===void 0)return e;let s;try{return await Promise.race([e,new Promise((c,a)=>{s=setTimeout(()=>{r.childAbortControllers?.get(t)?.abort(),a(new Error(`workflow task ${t} timed out after ${i??n}ms`))},n)})])}finally{s&&clearTimeout(s)}}o(dd,"waitForChildPromise");function ld(e,t){return{id:e,fanoutClass:"evidence-scan",objective:t.prompt,readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?[...t.evidenceRefs]:[],constraints:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{}}}o(ld,"buildBundle");function Uo(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],r=Gh(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:r,...n.digest?{digest:n.digest}:{},...n.digestFailed?{digestFailed:!0}:{},...n.digestPending?{digestPending:!0}:{},...n.limitReached?{limitReached:!0}:{},...n.provider?{provider:n.provider}:{},...n.model?{model:n.model}:{}}:{status:"failed",snapStatus:"failed",finalText:r,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{}}}o(Uo,"deriveTerminal");function md(e){let{ctx:t,childOptions:n}=e,r=e.runChild??Ms,i=e.queue??xe(),s=e.listChangedFiles??qh,c=e.now??(()=>Date.now()),a=0,l=e.generateId??(()=>`wf-child-${a+=1}`),u=new Map,m=new Set,d=new Map,f=o(()=>e.onTaskSummary!==void 0||m.size>0,"hasTaskSummaryObservers"),p=o((w,v)=>{try{e.onTaskSummary?.(w,v)}catch{}for(let T of m)try{T(w,v)}catch{}},"notifyTaskSummary");return{spawn:o(async w=>{let v=l(),T=ld(v,w),V=Hh(w).verification,$=Vh(),I=w.isolation!=="worktree",A=Do(V)?$o(t,s):Promise.resolve({paths:[]}),b=t.childProgressSnapshots,P=o(async k=>{let C=new AbortController;t.childAbortControllers?.set(v,C),b&&Os(b,{childId:v,startedAt:c(),maxIterations:n.maxIterationsPerChild,parentRole:n.parentRole,readOnly:k.readOnly,specialistName:k.specialistName});let x={...n,parentOptions:{...n.parentOptions,events:Xh(n.parentOptions.events,$)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:v,itemId:`agent:${v}`}}:{},childActivityName:w.name,workflowDigestMode:f()?"async":"blocking",...f()?{onWorkflowChildDigest:o(O=>{p(O.childId,{...O.digest?{summary:O.digest}:{},summaryKind:O.digest?"digest":"digest-failed",...O.totalTokensUsed>0?{usage:{totalTokens:O.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:C.signal,snapshotUpdater:b?O=>Is(b,v,O):void 0},H;try{return await A,H=await r([k],t,x),H}finally{if(t.childAbortControllers?.delete(v),b){let O=H?Uo(H,v):{snapStatus:"failed",finalText:""};$r(b,v,{status:O.snapStatus,finalText:O.finalText,endedAt:c()})}}},"runBundle"),_=P(T);return u.set(v,{name:w.name,input:w,bundle:T,promise:_,runBundle:P,verification:V,changedPathBaseline:A,mutationRecorder:$,acceptToolMutationEvidence:I,repairAttempts:0}),Vn(d,v,_),{taskId:v,name:w.name}},"spawn"),wait:o(async(w,v)=>{let T=u.get(w);if(!T)throw new Error(`unknown workflow task: ${w}`);let D=Bh(v),V=Date.now(),$=o(async _=>{if(D===void 0)return dd(_,w,void 0,t);let k=Date.now()-V,C=D-k;if(C<=0)throw t.childAbortControllers?.get(w)?.abort(),new Error(`workflow task ${w} timed out after ${D}ms`);return dd(_,w,Math.max(1,Math.floor(C)),t,D)},"waitForAttempt"),I=await $(T.promise),A=I.totalTokensUsed,b=Uo(I,w),P=T.verification?ad({verification:T.verification,term:b,before:await T.changedPathBaseline,after:Do(T.verification)?await $o(t,s):{paths:[]},mutationRecorder:T.mutationRecorder,ctx:t,acceptToolMutationEvidence:T.acceptToolMutationEvidence}):void 0;for(b.limitReached===!0&&P===void 0&&b.status==="completed"&&(P=cd(),b={...b,status:"completed_unverified",snapStatus:"completed",finalText:jo(b.finalText,P)});zh({entry:T,term:b,verification:P});){T.repairAttempts+=1;let _=ld(w,{...T.input,prompt:Yh({originalPrompt:T.input.prompt,previousFinalText:b.finalText,verification:P,attempt:T.repairAttempts})});T.promise=T.runBundle(_),Vn(d,w,T.promise),I=await $(T.promise),A+=I.totalTokensUsed,b=Uo(I,w),P=T.verification?ad({verification:T.verification,term:b,before:await T.changedPathBaseline,after:Do(T.verification)?await $o(t,s):{paths:[]},mutationRecorder:T.mutationRecorder,ctx:t,acceptToolMutationEvidence:T.acceptToolMutationEvidence}):void 0,b.limitReached===!0&&P===void 0&&b.status==="completed"&&(P=cd(),b={...b,status:"completed_unverified",snapStatus:"completed",finalText:jo(b.finalText,P)})}if(P!==void 0&&!P.ok&&b.status==="completed"){let _=P.enforcement==="warn";b={...b,status:_?"completed_unverified":"failed",snapStatus:_?"completed":"failed",finalText:jo(b.finalText,P)}}return $r(t.childProgressSnapshots,w,{status:b.snapStatus,finalText:b.finalText,endedAt:c()}),{taskId:w,name:T.name,status:b.status,finalText:b.finalText,...b.digest?{digest:b.digest}:{},...b.digestFailed?{digestFailed:!0}:{},...b.digestPending?{digestPending:!0}:{},...P!==void 0?{verification:P}:{},...b.limitReached?{limitReached:!0}:{},...b.provider?{provider:b.provider}:{},...b.model?{model:b.model}:{},usage:{totalTokens:A}}},"wait"),output:o(async w=>{let v=u.get(w)?.name??w,T=t.childProgressSnapshots?.get(w);if(!T)return{taskId:w,name:v,status:"running"};let D=T.status==="aborted"?"stopped":T.status;return T.finalText!==void 0?{taskId:w,name:v,status:D,lastText:T.finalText}:{taskId:w,name:v,status:D}},"output"),send:o(async(w,v)=>{gi({to:w,priority:"user",mode:"prompt",content:v,registry:d,queue:i})},"send"),stop:o(async w=>{t.childAbortControllers?.get(w)?.abort()},"stop"),subscribeTaskSummaryUpdates:o(w=>(m.add(w),()=>{m.delete(w)}),"subscribeTaskSummaryUpdates")}}o(md,"createCodingWorkflowBackend");import{mkdirSync as Jh,appendFileSync as Qh,writeFileSync as Cn}from"node:fs";import{join as ot}from"node:path";function Mn(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}o(Mn,"safeWorkflowArtifactName");function pd(e,t={}){let n=t.now??(()=>Date.now()),r=ot(e,"artifacts");Jh(r,{recursive:!0});let i=ot(e,"events.jsonl");return{runDir:e,onEvent:o(s=>{Qh(i,`${JSON.stringify({...s,ts:n()})}
280
280
  `,"utf8")},"onEvent"),writeArtifact:o((s,c)=>{let a=ot(r,`${Mn(s)}.json`);return Cn(a,JSON.stringify(c,null,2),"utf8"),{name:s,path:a}},"writeArtifact"),writeScriptSnapshot:o(s=>{let c=ot(e,"script.js");if(Cn(c,s.source,"utf8"),!s.manifest)return{scriptPath:c};let a=ot(e,"manifest.json");return Cn(a,`${JSON.stringify(s.manifest,null,2)}
281
281
  `,"utf8"),{scriptPath:c,manifestPath:a}},"writeScriptSnapshot"),writeRunJson:o(s=>{let c=Wt(s.processMetadata?.hostMetadata),a={runId:s.state.runId,workflow:s.meta.name,status:s.state.status,totalSpawned:s.state.totalSpawned,artifacts:s.state.artifacts.map(l=>l.name),eventCount:s.state.events.length,startedAt:s.startedAt,endedAt:s.endedAt,args:s.args,...s.resultSummary!==void 0?{resultSummary:s.resultSummary}:{},...s.processMetadata?.displayName!==void 0?{displayName:s.processMetadata.displayName}:{},...s.processMetadata?.goal!==void 0?{goal:s.processMetadata.goal}:{},...s.processMetadata?.source!==void 0?{source:s.processMetadata.source}:{},...s.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:s.processMetadata.savedWorkflowName}:{},...s.processMetadata?.sourceRunId!==void 0?{sourceRunId:s.processMetadata.sourceRunId}:{},...s.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:s.processMetadata.sourceWorkflowName}:{},...s.processMetadata?.revisionOf!==void 0?{revisionOf:s.processMetadata.revisionOf}:{},...c!==void 0?{hostMetadata:c}:{},...s.scriptSnapshot?{scriptSnapshotPath:s.scriptSnapshot.scriptPath,...s.scriptSnapshot.manifestPath?{manifestSnapshotPath:s.scriptSnapshot.manifestPath}:{}}:{}};Cn(ot(e,"run.json"),`${JSON.stringify(a,null,2)}
282
- `,"utf8")},"writeRunJson")}}o(pd,"createRunGraphWriter");import{dirname as Qh}from"node:path";import{execFile as Hh}from"node:child_process";import{promisify as Gh}from"node:util";import{statSync as qh}from"node:fs";import{join as Vh}from"node:path";var Kh=Gh(Hh);function Bo(e){return Vh(e,"worktrees")}o(Bo,"workflowWorktreeBaseDir");var Xh=360*60*1e3;function gd(e,t){return Kh("git",[...e],{cwd:t}).then(n=>n.stdout)}o(gd,"defaultRunGit");function zh(e){return qh(e).mtimeMs}o(zh,"defaultMtimeMs");function Yh(e){let t=[],n,r,i=o(()=>{n&&t.push(r?{path:n,branch:r}:{path:n}),n=void 0,r=void 0},"flush");for(let s of e.split(/\r?\n/))s.startsWith("worktree ")?(i(),n=s.slice(9).trim()):s.startsWith("branch ")&&(r=s.slice(7).trim().replace(/^refs\/heads\//,""));return i(),t}o(Yh,"parseWorktreeList");function hd(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}o(hd,"normalize");function wd(e,t){let n=hd(e),r=hd(t);return n===r||n.startsWith(`${r}/`)}o(wd,"isUnder");async function Jh(e,t,n){try{let i=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(a=>a.trim().length>0).length,s=await t(["rev-list","--count","HEAD","--not","--remotes"],e.path),c=Number.parseInt(s.trim(),10)||0;return i>0||c>0}catch(r){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${r instanceof Error?r.message:String(r)}`),!0}}o(Jh,"worktreeHasChanges");async function kd(e,t,n,r,i){if(await Jh(e,n,i)){i.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),r.push(e.path)}catch(s){i.push(`remove ${e.path}: ${s instanceof Error?s.message:String(s)}`);return}if(e.branch)try{await n(["branch","-D",e.branch],t)}catch{}}o(kd,"removeWorktree");async function yd(e,t,n){try{let r=await t(["worktree","list","--porcelain"],e);return Yh(r)}catch(r){n.push(`list worktrees: ${r instanceof Error?r.message:String(r)}`);return}}o(yd,"listWorktrees");async function Fo(e,t,n){try{await t(["worktree","prune"],e)}catch(r){n.push(`prune: ${r instanceof Error?r.message:String(r)}`)}}o(Fo,"prune");async function vd(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let i=t.runGit??gd,s=await yd(e.gitRoot,i,n);if(!s)return{removed:r,warnings:n};for(let c of s)wd(c.path,e.baseDir)&&await kd(c,e.gitRoot,i,r,n);return r.length>0&&await Fo(e.gitRoot,i,n),{removed:r,warnings:n}}o(vd,"sweepWorkflowRunWorktrees");async function Td(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let i=t.runGit??gd,s=t.mtimeMs??zh,c=t.now??(()=>Date.now()),a=e.maxAgeMs??Xh;await Fo(e.gitRoot,i,n);let l=await yd(e.gitRoot,i,n);if(!l)return{removed:r,warnings:n};for(let u of l){if(!wd(u.path,e.workflowRunsRoot))continue;let m;try{m=c()-s(u.path)}catch{continue}m>=a&&await kd(u,e.gitRoot,i,r,n)}return r.length>0&&await Fo(e.gitRoot,i,n),{removed:r,warnings:n}}o(Td,"pruneStaleWorkflowWorktrees");var Zh=200,Wo={maxAgents:64,maxConcurrency:16,tokenBudget:2e5};function eg(e,t){let n=e.meta,r=_t(n,t);return{name:n.name,description:n.description,phases:n.phases??[],...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},maxAgents:r.maxAgents??null,maxConcurrency:r.maxConcurrency??null,tokenBudget:r.tokenBudget??null,writesFiles:n.readOnly!==!0}}o(eg,"buildApprovalSummary");function bd(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}o(bd,"clampLimit");function Ho(e,t,n){let r=bd(e,n),i=bd(t,n);return r===void 0?i:i===void 0?r:Math.min(r,i)}o(Ho,"clampEffectiveLimit");function _t(e,t){let n=Ho(e.maxAgents,t?.maxAgents,Wo.maxAgents),r=Ho(e.maxConcurrency,t?.maxConcurrency,Wo.maxConcurrency),i=Ho(e.tokenBudget,t?.tokenBudget,Wo.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...r!==void 0?{maxConcurrency:r}:{},...i!==void 0?{tokenBudget:i}:{}}}o(_t,"clampWorkflowLimits");function Ed(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let i=t[r];if(typeof i=="string"&&i.trim().length>0)return i}}o(Ed,"workflowResultSummary");async function Go(e){let t=_t(e.module.meta,e.hostPolicy),n=eg(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let r=e.now??(()=>Date.now()),i=e.ctx?.executionCwd??e.ctx?.gitRoot;await Td({workflowRunsRoot:Qh(e.runDir),gitRoot:i},{now:r,...e.worktreeSweepDeps});let s=pd(e.runDir,{now:r}),c=e.onWorkflowProcessEvent?Ye({runId:e.runId,workflowName:e.module.meta.name,displayName:e.processMetadata?.displayName??e.module.meta.name,...e.processMetadata?.goal!==void 0?{goal:e.processMetadata.goal}:{},...e.processMetadata?.source!==void 0?{source:e.processMetadata.source}:{},...e.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:e.processMetadata.savedWorkflowName}:{},...e.processMetadata?.sourceRunId!==void 0?{sourceRunId:e.processMetadata.sourceRunId}:{},...e.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:e.processMetadata.sourceWorkflowName}:{},...e.processMetadata?.revisionOf!==void 0?{revisionOf:e.processMetadata.revisionOf}:{},...e.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...e.processMetadata.hostMetadata}}:{},...e.module.meta.phases!==void 0?{phases:e.module.meta.phases}:{},...t.maxAgents!==void 0?{maxAgents:t.maxAgents}:{},...e.module.meta.plannedAgents!==void 0?{plannedAgents:e.module.meta.plannedAgents}:{},...t.tokenBudget!==void 0?{tokenBudget:t.tokenBudget}:{},now:o(()=>new Date(r()).toISOString(),"now")}):void 0,a=e.scriptSnapshot?s.writeScriptSnapshot(e.scriptSnapshot):void 0,l=e.backend??tg(e),m={...e.beforeSpawn?ng(l,e.beforeSpawn):l,writeArtifact:o(async(h,g)=>s.writeArtifact(h,g),"writeArtifact")},d=r(),f;try{f=await ji({runId:e.runId,args:e.args,backend:m,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:Ed,onEvent:o(h=>{s.onEvent(h),c&&e.onWorkflowProcessEvent?.(c.applyEvent(h)),e.onEvent?.(h)},"onEvent")},h=>e.module.run(h,e.args))}finally{await vd({baseDir:Bo(e.runDir),gitRoot:i},{now:r,...e.worktreeSweepDeps})}let p=f.ok?Ed(f.result):void 0;return s.writeRunJson({meta:e.module.meta,args:e.args,state:f.state,startedAt:d,endedAt:r(),...a?{scriptSnapshot:a}:{},...p!==void 0?{resultSummary:p}:{},...e.processMetadata!==void 0?{processMetadata:e.processMetadata}:{}}),f.ok?{kind:"completed",result:f.result,state:f.state}:{kind:"failed",error:f.error,state:f.state}}o(Go,"runWorkflowModule");function tg(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return md({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId})}o(tg,"buildBackend");function ng(e,t){return{...e,spawn:o(async n=>(await t(),e.spawn(n)),"spawn")}}o(ng,"withBeforeSpawn");async function xd(e){let t={...Jt({options:e.options,runtime:e.options.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),workflowWorktreeBaseDir:Bo(e.runDir)},n={maxIterationsPerChild:Zh,parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:e.options.provider,model:e.options.model,reasoningMode:e.options.reasoningMode,extensionRuntime:e.options.extensionRuntime,events:e.options.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...t.planModeBlockCheck?{planModeBlockCheck:t.planModeBlockCheck}:{}},r=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?i=>{e.onWorkflowProcessEvent?.(i),e.options.events?.onWorkflowProcessEvent?.(i)}:void 0;return Go({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:t,childOptions:n,...e.approval?{approval:e.approval}:{},...e.signal?{signal:e.signal}:{},...e.onEvent?{onEvent:e.onEvent}:{},...r?{onWorkflowProcessEvent:r}:{},...e.options.workflowHostPolicy?{hostPolicy:e.options.workflowHostPolicy}:{},...e.now?{now:e.now}:{},...e.scriptSnapshot?{scriptSnapshot:e.scriptSnapshot}:{},...e.processMetadata?{processMetadata:e.processMetadata}:{},...e.beforeSpawn?{beforeSpawn:e.beforeSpawn}:{}})}o(xd,"runWorkflowFromOptions");import{mkdir as Cd,readdir as rg,readFile as At,rename as og,unlink as Ko,writeFile as Xo}from"node:fs/promises";import{basename as ig,dirname as Vo,join as Ge}from"node:path";import{pathToFileURL as sg}from"node:url";var Md=[".workflow.json",".ts",".mjs",".js"],Ct="0.7.49";function Od(){return"0.7.53"}o(Od,"currentKodaxWorkflowVersion");function ag(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}o(ag,"executionForPath");function cg(e){let t=Md.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}o(cg,"stripWorkflowSuffix");function zo(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"").slice(0,80);if(!t||t==="."||t==="..")throw new Error("workflow name must contain at least one safe filename character");return t}o(zo,"safeWorkflowName");function Yo(e){return typeof e=="object"&&e!==null}o(Yo,"isRecord");function Rd(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}o(Rd,"readRequiredString");async function Sd(e,t){if(!e)return[];let n;try{n=await rg(e)}catch{return[]}let r=new Map;for(let i of Md)for(let s of n){if(!s.endsWith(i))continue;let c=cg(s);if(!c||c.length===0||r.has(c))continue;let a=Ge(e,s);r.set(c,{name:c,path:a,source:t,execution:ag(a)})}return[...r.values()]}o(Sd,"scanDir");async function Mt(e){let t=await Sd(e.personal,"personal"),n=await Sd(e.project,"project"),r=new Map;for(let i of t)r.set(i.name,i);for(let i of n)r.set(i.name,i);return[...r.values()].sort((i,s)=>i.name.localeCompare(s.name))}o(Mt,"discoverSavedWorkflows");function dg(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}o(dg,"isWorkflowModule");function lg(e){let t=e.default;if(dg(t))return t;let n=typeof t=="function"?t:e.run,r=e.workflow??e.meta;if(typeof n=="function"&&typeof r=="object"&&r!==null&&"name"in r)return{meta:r,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}o(lg,"normalizeWorkflowModule");function ug(e){let t=JSON.parse(e);if(!Yo(t))throw new Error("generated workflow file must be an object");if(t.format!==void 0&&t.format!=="kodax.workflow")throw new Error(`unsupported workflow capsule format: ${String(t.format)}`);if(t.format==="kodax.workflow"){let i=Jn(t);return{manifest:i.manifest,source:i.source,capsule:i,legacy:!1}}let n=t.source;if(typeof n!="string"||n.trim().length===0)throw new Error("generated workflow file source must be a non-empty string");let r=ge(t.manifest);return{manifest:r,source:n,capsule:Le({minKodaxVersion:Ct,manifest:r,source:n}),legacy:!0}}o(ug,"parseGeneratedWorkflowFile");async function Jo(e){let t=ug(await At(e,"utf8"));return t.capsule??Le({minKodaxVersion:Ct,manifest:t.manifest,source:t.source})}o(Jo,"loadSavedWorkflowCapsule");async function $S(e){if(e.endsWith(".workflow.json"))return Qn(await Jo(e));let t=await import(sg(e).href);return lg(t)}o($S,"loadSavedWorkflow");function Qo(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}o(Qo,"deriveRequirements");function On(e,t){ut(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}o(On,"assertGeneratedCapsuleSource");async function fg(e){let t=zo(e.name),n=ge(e.manifest);On(n,e.source);let r=e.requires??Qo(n),i=Le({minKodaxVersion:e.minKodaxVersion??Ct,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await Cd(e.dir,{recursive:!0});let s=Ge(e.dir,`${t}.workflow.json`);return await Xo(s,`${JSON.stringify(i,null,2)}
283
- `,"utf8"),{name:t,path:s,source:"project",execution:"capability-generated"}}o(fg,"saveGeneratedWorkflow");async function _d(e,t){await Xo(e,`${JSON.stringify(t,null,2)}
284
- `,"utf8")}o(_d,"writeCapsuleFile");async function mg(e){try{return await At(e,"utf8"),!0}catch{return!1}}o(mg,"fileExists");async function Id(e){let t=(await Mt(e.dirs)).filter(a=>a.name===e.name).filter(a=>e.source===void 0||a.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let r=zo(e.newName),i=Ge(Vo(n.path),`${r}.workflow.json`);if(i!==n.path&&await mg(i))throw new Error(`saved workflow already exists: ${r}`);let s=await Jo(n.path);On(s.manifest,s.source);let c=Le({minKodaxVersion:s.minKodaxVersion,manifest:{...s.manifest,name:r},source:s.source,...s.intent!==void 0?{intent:s.intent}:{},...s.inputs!==void 0?{inputs:s.inputs}:{},...s.requires!==void 0?{requires:s.requires}:{},...s.provenance!==void 0?{provenance:s.provenance}:{}});return await Xo(i,`${JSON.stringify(c,null,2)}
285
- `,"utf8"),i!==n.path&&await Ko(n.path),{name:r,path:i,source:n.source,execution:"capability-generated"}}o(Id,"renameSavedWorkflow");async function Pd(e){let t=(await Mt(e.dirs)).filter(r=>r.name===e.name).filter(r=>e.source===void 0||r.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await Ko(n.path),n}o(Pd,"deleteSavedWorkflow");async function Nd(e){let t=zo(e.name),n=(await Mt(e.dirs)).filter(p=>p.name===t).filter(p=>e.savedSource===void 0||p.source===e.savedSource);if(n.length===0)throw new Error(`saved workflow not found: ${t}`);if(n.length>1)throw new Error(`ambiguous saved workflow name: ${t}`);let r=n[0];if(!r.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let i=ge({...e.manifest,name:t});On(i,e.source);let s=e.requires??Qo(i),c=Le({minKodaxVersion:e.minKodaxVersion??Ct,manifest:i,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...s!==void 0?{requires:s}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}}),a=await Jo(r.path),l=new Date().toISOString().replace(/[:.]/g,"-"),u=Ge(Vo(r.path),".revisions",t),m=`${l}-${process.hrtime.bigint().toString(36)}`,d=Ge(u,`${t}-${m}.workflow.json`),f=Ge(Vo(r.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Cd(u,{recursive:!0}),await _d(d,a);try{await _d(f,c),await og(f,r.path)}catch(p){try{await Ko(f)}catch{}throw p}return{name:t,path:r.path,source:r.source,execution:"capability-generated",previousPath:d}}o(Nd,"replaceSavedWorkflow");function pg(e){if(!Yo(e))return;let t=e.request;if(typeof t=="string"&&t.trim().length>0)return t;let n=e.question;if(typeof n=="string"&&n.trim().length>0)return n}o(pg,"readOptionalOriginalRequest");function Dd(e){return hg(e)}o(Dd,"buildCapsuleFromRun");async function hg(e){let t=JSON.parse(await At(Ge(e.runDir,"run.json"),"utf8"));if(!Yo(t))throw new Error("workflow run.json must be an object");let n=Rd(t,"scriptSnapshotPath"),r=Rd(t,"manifestSnapshotPath"),i=await At(n,"utf8"),s=ge(JSON.parse(await At(r,"utf8")));On(s,i);let c=typeof t.runId=="string"&&t.runId.length>0?t.runId:ig(e.runDir),a=pg(t.args),l=Qo(s),u={taskClass:s.patterns[0]??s.name,...a!==void 0?{originalRequest:a}:{},reusableFor:[s.description]},m={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return Le({minKodaxVersion:Ct,manifest:s,source:i,intent:u,inputs:m,...l!==void 0?{requires:l}:{},provenance:{fromRunId:c,createdAt:new Date().toISOString(),kodaxVersion:Od()}})}o(hg,"readCapsuleFromRun");async function LS(e){let t=await Dd(e);return{capsule:t,module:Qn(t)}}o(LS,"loadGeneratedWorkflowFromRun");async function jS(e){let t=await Dd(e);return fg({dir:e.targetDir,name:e.name,manifest:t.manifest,source:t.source,...t.intent!==void 0?{intent:t.intent}:{},...t.inputs!==void 0?{inputs:t.inputs}:{},...t.requires!==void 0?{requires:t.requires}:{},...t.provenance!==void 0?{provenance:t.provenance}:{},minKodaxVersion:t.minKodaxVersion})}o(jS,"saveGeneratedWorkflowFromRun");function Ie(e,t,n,r){e.push({severity:t,requirement:n,message:r})}o(Ie,"addRequirementIssue");function Ad(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}o(Ad,"parseSemver");function gg(e,t){for(let n=0;n<3;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}o(gg,"compareSemver");function wg(e,t,n){let r=Ad(t),i=Ad(n);if(!r){Ie(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!i){Ie(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}gg(i,r)<0&&Ie(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}o(wg,"addMinVersionIssue");function qo(e,t,n,r){if(!n)return;if(!r){for(let s of n)Ie(e,"warning",`${t}:${s}`,`workflow requires ${t}:${s}, but no ${t} inventory was provided`);return}let i=new Set(r);for(let s of n)i.has(s)||Ie(e,"error",`${t}:${s}`,`missing required workflow ${t}: ${s}`)}o(qo,"addMissingItems");function $d(e,t={}){let n=Jn(e),r=[],i=n.requires;wg(r,n.minKodaxVersion,t.kodaxVersion??Od()),i?.environment?.includes("git-repo")&&t.isGitRepo===!1&&Ie(r,"error","environment:git-repo","workflow requires a git repository"),i?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&Ie(r,"error","environment:worktree-capable","workflow may request git worktree isolation");try{ut(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(s){let c=s instanceof Error?s.message:String(s);Ie(r,"error","workflow:source",c)}return qo(r,"tools",i?.tools,t.availableTools),qo(r,"mcp",i?.mcp,t.availableMcp),qo(r,"skills",i?.skills,t.availableSkills),{ok:!r.some(s=>s.severity==="error"),issues:r}}o($d,"preflightWorkflowCapsule");function In(e){return{runId:e.runId,workflow:e.workflow,status:e.status,runDir:e.runDir,totalSpawned:e.totalSpawned,eventCount:e.eventCount,startedAt:e.startedAt,...e.endedAt!==void 0?{endedAt:e.endedAt}:{},...e.error!==void 0?{error:e.error}:{},...e.resultText!==void 0?{resultText:e.resultText}:{}}}o(In,"snapshot");function kg(e,t){return t?"stopped":e.kind==="completed"?"completed":e.kind==="denied"?"denied":"failed"}o(kg,"terminalStatus");function yg(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let i=t[r];if(typeof i=="string"&&i.trim().length>0)return i}}o(yg,"resultText");function vg(e){return e instanceof Error?e:new Error(String(e))}o(vg,"toError");function Ld(e,t){let n=vg(t),r={runId:e.runId,status:"failed",totalSpawned:e.totalSpawned,events:[],artifacts:[]};return{kind:"failed",error:n,state:r}}o(Ld,"failedOutcome");function Tg(e={}){let t=e.now??(()=>Date.now()),n=new Map,r=new Set,i=o(()=>new Date(t()).toISOString(),"isoNow"),s=o(d=>{for(let f of r)try{f(d)}catch{}},"notifyProcess"),c=o(async d=>{for(;d.status==="paused"&&!d.controller.signal.aborted;)await new Promise(f=>d.pauseWaiters.push(f));if(d.controller.signal.aborted)throw new Error("workflow stopped")},"waitIfPaused"),a=o(d=>{let f=d.pauseWaiters.splice(0);for(let p of f)p()},"releasePauseWaiters"),l=o((d,f)=>p=>{d.eventCount+=1,p.type==="agent_spawned"&&(d.totalSpawned+=1),s(d.process.applyEvent(p)),f?.(p)},"onEvent"),u=o((d,f,p)=>{let h=new AbortController;p&&p.addEventListener("abort",()=>h.abort(),{once:!0});let g={runId:d.runId,workflow:d.workflow,status:"running",runDir:f,totalSpawned:0,eventCount:0,startedAt:t(),controller:h,pauseWaiters:[],process:Ye({runId:d.runId,workflowName:d.workflow,displayName:d.processMetadata?.displayName??d.workflow,...d.processMetadata?.goal!==void 0?{goal:d.processMetadata.goal}:{},...d.processMetadata?.source!==void 0?{source:d.processMetadata.source}:{},...d.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:d.processMetadata.savedWorkflowName}:{},...d.processMetadata?.sourceRunId!==void 0?{sourceRunId:d.processMetadata.sourceRunId}:{},...d.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:d.processMetadata.sourceWorkflowName}:{},...d.processMetadata?.revisionOf!==void 0?{revisionOf:d.processMetadata.revisionOf}:{},...d.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...d.processMetadata.hostMetadata}}:{},...d.phases!==void 0?{phases:d.phases}:{},...d.maxAgents!==void 0?{maxAgents:d.maxAgents}:{},...d.plannedAgents!==void 0?{plannedAgents:d.plannedAgents}:{},...d.tokenBudget!==void 0?{tokenBudget:d.tokenBudget}:{},now:i})};return n.set(d.runId,g),g},"createRun"),m=o((d,f)=>(d.status=kg(f,d.controller.signal.aborted||d.status==="stopped"),d.endedAt=t(),f.kind==="failed"&&d.status!=="stopped"&&(d.error=f.error.message),f.kind==="completed"&&(d.resultText=yg(f.result)),f.kind==="failed"&&!Yn(d.process.getSnapshot().status)?s(d.process.setStatus("failed",f.error.message)):f.kind==="denied"?s(d.process.setStatus("cancelled","workflow denied")):d.status==="stopped"&&d.process.getSnapshot().status!=="cancelled"&&s(d.process.setStatus("cancelled","workflow stopped")),a(d),f),"settle");return{start:o(d=>{let f=_t(d.module.meta,d.hostPolicy),p=u({runId:d.runId,workflow:d.module.meta.name,...d.module.meta.phases!==void 0?{phases:d.module.meta.phases}:{},...f.maxAgents!==void 0?{maxAgents:f.maxAgents}:{},...d.module.meta.plannedAgents!==void 0?{plannedAgents:d.module.meta.plannedAgents}:{},...f.tokenBudget!==void 0?{tokenBudget:f.tokenBudget}:{},...d.processMetadata!==void 0?{processMetadata:d.processMetadata}:{}},d.runDir,d.signal),h=Go({...d,signal:p.controller.signal,beforeSpawn:o(()=>c(p),"beforeSpawn"),onEvent:l(p,d.onEvent)}).catch(g=>Ld(p,g)).then(g=>m(p,g));return{runId:p.runId,done:h,getSnapshot:o(()=>In(p),"getSnapshot"),getProcessSnapshot:o(()=>p.process.getSnapshot(),"getProcessSnapshot")}},"start"),startFromOptions:o(d=>{let f=_t(d.module.meta,d.options.workflowHostPolicy),p=u({runId:d.runId,workflow:d.module.meta.name,...d.module.meta.phases!==void 0?{phases:d.module.meta.phases}:{},...f.maxAgents!==void 0?{maxAgents:f.maxAgents}:{},...d.module.meta.plannedAgents!==void 0?{plannedAgents:d.module.meta.plannedAgents}:{},...f.tokenBudget!==void 0?{tokenBudget:f.tokenBudget}:{},...d.processMetadata!==void 0?{processMetadata:d.processMetadata}:{}},d.runDir,d.signal),h=xd({...d,signal:p.controller.signal,beforeSpawn:o(()=>c(p),"beforeSpawn"),onEvent:l(p,d.onEvent)}).catch(g=>Ld(p,g)).then(g=>m(p,g));return{runId:p.runId,done:h,getSnapshot:o(()=>In(p),"getSnapshot"),getProcessSnapshot:o(()=>p.process.getSnapshot(),"getProcessSnapshot")}},"startFromOptions"),list:o(()=>[...n.values()].map(In).sort((d,f)=>f.startedAt-d.startedAt),"list"),get:o(d=>{let f=n.get(d);return f?In(f):void 0},"get"),subscribeWorkflowProcess:o(d=>(r.add(d),()=>{r.delete(d)}),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:o(d=>n.get(d)?.process.getSnapshot(),"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:o(d=>{let f=[...n.values()].sort((p,h)=>h.startedAt-p.startedAt).map(p=>p.process.getSnapshot()).filter(p=>d?.activeOnly===!0?!Yn(p.status):!0);return d?.limit===void 0?f:f.slice(0,d.limit)},"listWorkflowProcessSnapshots"),pause:o(d=>{let f=n.get(d);return!f||f.status!=="running"?!1:(f.status="paused",s(f.process.setStatus("paused","workflow paused")),!0)},"pause"),resume:o(d=>{let f=n.get(d);return!f||f.status!=="paused"?!1:(f.status="running",s(f.process.setStatus("running","workflow resumed")),a(f),!0)},"resume"),stop:o((d,f)=>{let p=n.get(d);return!p||["completed","failed","denied","stopped"].includes(p.status)?!1:(p.status="stopped",s(p.process.setStatus("cancelled",f??"workflow stopped")),p.controller.abort(),a(p),!0)},"stop")}}o(Tg,"createWorkflowRunManager");var jd;function HS(){return jd??=Tg(),jd}o(HS,"getDefaultWorkflowRunManager");import{existsSync as ei,readFileSync as Xd,readdirSync as Og,rmSync as qd,writeFileSync as Ig}from"node:fs";import{join as it,resolve as Pn,sep as zd}from"node:path";import{existsSync as Zo,readdirSync as bg,readFileSync as Fd}from"node:fs";import{join as Bd,resolve as Ud,sep as Eg}from"node:path";function Wd(e){return e!=="."&&/^[a-zA-Z0-9._-]+$/.test(e)&&!e.includes("..")}o(Wd,"isSafeWorkflowRunId");function xg(e,t){if(!Wd(t))return;let n=Ud(e),r=Ud(n,t);return r.startsWith(`${n}${Eg}`)?r:void 0}o(xg,"safeRunDir");function Rg(e){let t=Bd(e,"run.json");if(Zo(t))try{let n=JSON.parse(Fd(t,"utf8"));return typeof n=="object"&&n!==null?n:void 0}catch{return}}o(Rg,"readRunRecord");function Sg(e){let t=Bd(e,"workflow-metadata.json");if(Zo(t))try{let n=JSON.parse(Fd(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.displayName;return typeof r=="string"&&r.trim().length>0?r:void 0}catch{return}}o(Sg,"readMetadataDisplayName");function _g(e){let t=e.displayName;return typeof t=="string"&&t.trim().length>0?t:void 0}o(_g,"readRunJsonDisplayName");function Ag(e,t){return e?.trim()===t}o(Ag,"displayNameMatches");function Hd(e,t){if(!t)return;let n=xg(t,e);if(!n)return;let r=Rg(n);if(!r)return;let i=r.workflow,s=Sg(n)??_g(r);return{kind:"run",target:e,runId:e,runDir:n,...typeof i=="string"&&i.length>0?{workflowName:i}:{},...s!==void 0?{displayName:s}:{}}}o(Hd,"resolveRun");function Cg(e,t){if(!t||!Zo(t))return[];let n=[];for(let r of bg(t)){if(!Wd(r))continue;let i=Hd(r,t);i&&Ag(i.displayName,e)&&n.push(i)}return n}o(Cg,"resolveRunsByDisplayName");async function Mg(e,t){return t?(await Mt(t)).find(r=>r.name===e):void 0}o(Mg,"resolveSaved");async function Gd(e){let t=e.target.trim();if(!t)return{kind:"missing",target:e.target};let n=Hd(t,e.runBaseDir),r=n?[]:Cg(t,e.runBaseDir),i=await Mg(t,e.savedWorkflowDirs),s=n?[n]:r;return s.length>1?{kind:"ambiguous",target:t,matches:i?["run","saved"]:["run"],...i?{savedWorkflow:i}:{}}:s.length===1&&i?{kind:"ambiguous",target:t,matches:["run","saved"],run:s[0],savedWorkflow:i}:n||(r.length===1?r[0]:i?{kind:"saved",target:t,savedWorkflow:i}:{kind:"missing",target:t})}o(Gd,"resolveWorkflowIdentity");var ti=new Set(["completed","failed","stopped","denied","cancelled"]);function Yd(e){if(ei(e))try{return JSON.parse(Xd(e,"utf8"))}catch{return}}o(Yd,"readJsonFile");function Jd(e){let t=Yd(e);return typeof t=="object"&&t!==null?t:void 0}o(Jd,"readRecord");function ce(e){return typeof e=="string"&&e.trim().length>0?e:void 0}o(ce,"readString");function Pg(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}o(Pg,"readNumber");function Ng(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}o(Ng,"readStringArray");function Dg(e){if(e==="command"||e==="amaw"||e==="review"||e==="sdk"||e==="capsule"||e==="extension"||e==="automation")return e}o(Dg,"readWorkflowProcessSource");function $g(e,t){let n=ce(e.goal),r=Dg(e.source),i=ce(e.savedWorkflowName),s=ce(e.sourceRunId),c=ce(e.sourceWorkflowName),a=ce(e.revisionOf),l=Wt(e.hostMetadata),u={...t!==void 0?{displayName:t}:{},...n!==void 0?{goal:n}:{},...r!==void 0?{source:r}:{},...i!==void 0?{savedWorkflowName:i}:{},...s!==void 0?{sourceRunId:s}:{},...c!==void 0?{sourceWorkflowName:c}:{},...a!==void 0?{revisionOf:a}:{},...l!==void 0?{hostMetadata:l}:{}};return Object.keys(u).length>0?u:void 0}o($g,"readRunProcessMetadata");function Lg(e){return e!=="."&&/^[a-zA-Z0-9._-]+$/.test(e)&&!e.includes("..")}o(Lg,"isSafeWorkflowRunId");function qe(e,t){if(!Lg(t))return;let n=Pn(e),r=Pn(n,t);return r.startsWith(`${n}${zd}`)?r:void 0}o(qe,"runDir");function jg(e){return e==="running"||e==="paused"}o(jg,"isManagedWorkflowActive");function Ug(e,t){let n=Pn(e),r=Pn(t);return r===n||r.startsWith(`${n}${zd}`)}o(Ug,"isPathWithinBase");function Ot(e,t){let n=qe(e,t);if(!n)return;let r=Jd(it(n,"run.json"));if(!r)return;let i=Fg(n)??ce(r.displayName),s=ce(r.resultSummary),c=$g(r,i);return{runId:t,workflow:ce(r.workflow)??"?",...i!==void 0?{displayName:i}:{},...s!==void 0?{resultSummary:s}:{},...c!==void 0?{processMetadata:c}:{},status:ce(r.status)??"?",endedAt:Pg(r.endedAt)??0,artifacts:Ng(r.artifacts)}}o(Ot,"readPersistedRun");function Fg(e){let t=Jd(it(e,"workflow-metadata.json"));return t?ce(t.displayName):void 0}o(Fg,"readRunDisplayName");function Vd(e){if(!ei(e))return[];let t=[];for(let n of Og(e)){let r=Ot(e,n);r&&t.push(r)}return t.sort((n,r)=>r.endedAt-n.endedAt)}o(Vd,"listPersistedRuns");function Qd(e){let t=it(e,"events.jsonl");if(!ei(t))return[];let n=[];for(let r of Xd(t,"utf8").split(/\r?\n/)){if(!r.trim())continue;let i;try{i=JSON.parse(r)}catch{continue}if(typeof i!="object"||i===null)continue;let s=i;if(typeof s.seq!="number"||typeof s.type!="string")continue;let c=s.data;n.push({seq:s.seq,type:s.type,...typeof c=="object"&&c!==null?{data:c}:{}})}return n}o(Qd,"readWorkflowEvents");function Kd(e,t){let n=qe(e,t.runId);if(!n)return;let r=Ye({runId:t.runId,workflowName:t.workflow,displayName:t.displayName??t.processMetadata?.displayName??t.workflow,...t.processMetadata?.goal!==void 0?{goal:t.processMetadata.goal}:{},...t.processMetadata?.source!==void 0?{source:t.processMetadata.source}:{},...t.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:t.processMetadata.savedWorkflowName}:{},...t.processMetadata?.sourceRunId!==void 0?{sourceRunId:t.processMetadata.sourceRunId}:{},...t.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:t.processMetadata.sourceWorkflowName}:{},...t.processMetadata?.revisionOf!==void 0?{revisionOf:t.processMetadata.revisionOf}:{},...t.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...t.processMetadata.hostMetadata}}:{},...t.resultSummary!==void 0?{resultSummary:t.resultSummary}:{},artifacts:t.artifacts.map(s=>({name:s,path:it(n,"artifacts",`${Mn(s)}.json`)}))});for(let s of Qd(n))r.applyEvent(s);let i=r.getSnapshot();return i.status!=="running"||!ti.has(t.status)?i:(t.status==="completed"?r.setStatus("completed"):t.status==="failed"?r.setStatus("failed"):r.setStatus("cancelled"),r.getSnapshot())}o(Kd,"snapshotFromPersistedRun");function Bg(e){for(let t of[...e].reverse()){if(t.type==="workflow_completed"){let i=ce(t.data?.resultSummary);if(i)return i}if(t.type!=="agent_completed"&&t.type!=="agent_unverified"&&t.type!=="agent_failed")continue;let n=ce(t.data?.summary);if(n)return n;let r=ce(t.data?.error);if(r)return r}}o(Bg,"readEventSummary");function Wg(e,t,n){let r=e.filter(a=>ti.has(a.status)).sort((a,l)=>l.endedAt-a.endedAt),i=t.keep,s=t.olderThanDays===void 0?void 0:n-t.olderThanDays*24*60*60*1e3,c=i===void 0?new Set:new Set(r.slice(0,Math.max(0,i)).map(a=>a.runId));return i===void 0&&s===void 0?[]:r.filter(a=>c.has(a.runId)?!1:s===void 0?!0:a.endedAt>0&&a.endedAt<s)}o(Wg,"pruneCandidates");function r_(e){let t=e.now??(()=>Date.now()),{runManager:n,runBaseDir:r}=e;return{subscribeWorkflowProcess:o(i=>n.subscribeWorkflowProcess(i),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:o(i=>{let s=n.getWorkflowProcessSnapshot(i);if(s)return s;let c=Ot(r,i);return c?Kd(r,c):void 0},"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:o(i=>{let s=n.listWorkflowProcessSnapshots(i);if(i?.activeOnly===!0)return s;let c=new Set(s.map(u=>u.runId)),a=Vd(r).filter(u=>!c.has(u.runId)).map(u=>Kd(r,u)).filter(u=>u!==void 0),l=[...s,...a];return i?.limit===void 0?l:l.slice(0,i.limit)},"listWorkflowProcessSnapshots"),resolveWorkflowIdentity:o(async i=>Gd({target:i,runBaseDir:r,savedWorkflowDirs:e.savedWorkflowDirs}),"resolveWorkflowIdentity"),preflightWorkflowCapsule:o(async i=>$d(i.capsule,i.env),"preflightWorkflowCapsule"),stopWorkflow:o(async(i,s)=>n.stop(i,s),"stopWorkflow"),pauseWorkflow:o(async i=>n.pause(i),"pauseWorkflow"),resumeWorkflow:o(async i=>n.resume(i),"resumeWorkflow"),renameWorkflowRun:o(async(i,s)=>{let c=s.trim();if(c.length===0)return!1;let a=qe(r,i);return!a||!Ot(r,i)?!1:(Ig(it(a,"workflow-metadata.json"),`${JSON.stringify({displayName:c},null,2)}
286
- `,"utf8"),!0)},"renameWorkflowRun"),renameSavedWorkflow:o(async(i,s)=>{if(e.savedWorkflowDirs)return Id({dirs:e.savedWorkflowDirs,name:i,newName:s})},"renameSavedWorkflow"),deleteSavedWorkflow:o(async(i,s)=>{if(e.savedWorkflowDirs)return Pd({dirs:e.savedWorkflowDirs,name:i,...s!==void 0?{source:s}:{}})},"deleteSavedWorkflow"),replaceSavedWorkflow:o(async i=>{if(e.savedWorkflowDirs)return Nd({...i,dirs:e.savedWorkflowDirs})},"replaceSavedWorkflow"),readWorkflowResult:o(async i=>{let s=n.getWorkflowProcessSnapshot(i)?.resultSummary;if(s)return s;let c=qe(r,i);if(!c)return;let a=Ot(r,i);if(a)return a.resultSummary?a.resultSummary:Bg(Qd(c))},"readWorkflowResult"),readWorkflowArtifact:o(async(i,s)=>{let c=qe(r,i);if(c)return Yd(it(c,"artifacts",`${Mn(s)}.json`))},"readWorkflowArtifact"),deleteWorkflowRun:o(async(i,s)=>{if(n.listWorkflowProcessSnapshots({activeOnly:!0}).some(u=>u.runId===i))return!1;let a=Ot(r,i);if(!a||!ti.has(a.status)&&s?.force!==!0)return!1;let l=qe(r,i);return l?(qd(l,{recursive:!0,force:!0}),!0):!1},"deleteWorkflowRun"),pruneWorkflowRuns:o(async i=>{let s=new Set(n.listWorkflowProcessSnapshots({activeOnly:!0}).map(p=>p.runId)),c=new Set(n.list().filter(p=>jg(p.status)).filter(p=>Ug(r,p.runDir)).map(p=>p.runId)),a=new Set([...s,...c]),l=Vd(r),m=new Set([...c,...l.filter(p=>s.has(p.runId)).map(p=>p.runId)]).size,d=Wg(l,i,t()).filter(p=>!a.has(p.runId));if(i.dryRun===!0)return{deleted:0,protectedRuns:m,candidates:d.map(p=>p.runId),dryRun:!0};let f=0;for(let p of d){let h=qe(r,p.runId);h&&(qd(h,{recursive:!0,force:!0}),f+=1)}return{deleted:f,protectedRuns:m,candidates:d.map(p=>p.runId),dryRun:!1}},"pruneWorkflowRuns")}}o(r_,"createWorkflowLifecycleController");var Hg=["You generate KodaX Dynamic Workflow scripts.","Return JSON only. Do not wrap the answer in prose.","For simple tasks that do not benefit from multiple agents, return:",'{"action":"decline","reason":"..."}',"For complex tasks, return:",'{"action":"generate","manifest":{...},"source":"async function run(wf, args) { ... }","approvalSummary":"..."}',"Generated source may only coordinate agents through wf and args.","Generated source must return displayable final text for the user.","Never use import, require, process, fs, child_process, network APIs, shell commands, or direct file access."].join(`
287
- `),Zd=12e4,Gg="KODAX_WORKFLOW_GENERATION_TIMEOUT_MS",qg=64,Vg=2,Kg=2e3,Xg=[{id:"import",pattern:/\bimport\s*(?:\(|['"*{]|\w+\s+from\b)/},{id:"require",pattern:/\brequire\s*\(/},{id:"process",pattern:/\bprocess\s*(?:\.|\[)/},{id:"fs",pattern:/\b(?:node:)?fs\b/},{id:"child_process",pattern:/\bchild_process\b/},{id:"shell",pattern:/\b(?:exec|spawn|execFile)\s*\(/},{id:"fetch",pattern:/\bfetch\s*\(/},{id:"Deno",pattern:/\bDeno\s*(?:\.|\[)/},{id:"Bun",pattern:/\bBun\s*(?:\.|\[)/}];function zg(e=process.env){let t=e[Gg];if(t===void 0||t.trim().length===0)return Zd;let n=Number(t);return!Number.isFinite(n)||n<=0?Zd:Math.floor(n)}o(zg,"resolveWorkflowGenerationTimeoutMs");function Yg(e,t){if(typeof e!="object"||e===null)throw new Error(`${t} must be an object`);return e}o(Yg,"readRecord");function el(e,t){let n=e[t];if(typeof n!="string"||n.trim().length===0)throw new Error(`workflow generation ${t} must be a non-empty string`);return n}o(el,"readNonEmptyString");function Jg(e){let t=e.trim(),n=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(t);if(n?.[1])return n[1].trim();let r=t.indexOf("{"),i=t.lastIndexOf("}");if(r>=0&&i>r)return t.slice(r,i+1);throw new Error("workflow generation output did not contain a JSON object")}o(Jg,"extractJsonText");function Qg(e){let t=Jg(e);return Yg(JSON.parse(t),"workflow generation output")}o(Qg,"parseGenerationJson");function Zg(e){if(typeof e=="string"){let n=e.trim();return n.length>0?n:void 0}if(typeof e!="object"||e===null)return;let t=e;for(let n of["name","id","title","phase"]){let r=t[n];if(typeof r=="string"&&r.trim().length>0)return r.trim()}}o(Zg,"normalizePhaseEntry");function ew(e){return e.split(/(?:->|\u2192|,|\n)/).map(t=>t.trim()).filter(t=>t.length>0)}o(ew,"splitPhaseString");function tw(e){if(typeof e!="object"||e===null)return e;let t=e,n=t.phases,r;if(Array.isArray(n)){let i=n.map(Zg);i.every(s=>s!==void 0)&&(r=i)}else if(typeof n=="string"){let i=ew(n);i.length>0&&(r=i)}return r?{...t,phases:r}:e}o(tw,"normalizeGeneratedManifestCandidate");function nw(e){return e.match(/\bwf\.(?:runAgent|spawnAgent|synthesize)\s*\(/g)?.length??0}o(nw,"estimateDirectAgentCalls");function rw(e,t){let n=e.maxConcurrency*Math.max(1,e.phases.length)+2,r=nw(t)+2,i=Math.min(qg,Math.max(e.maxAgents,n,r));return i>e.maxAgents?{...e,maxAgents:i}:e}o(rw,"reserveGeneratedWorkflowAgentCapacity");function st(e){let t="",n=0;for(;n<e.length;){let r=e[n],i=e[n+1];if(r==="/"&&i==="/"){for(t+=" ",n+=2;n<e.length&&e[n]!==`
282
+ `,"utf8")},"writeRunJson")}}o(pd,"createRunGraphWriter");import{dirname as cg}from"node:path";import{execFile as Zh}from"node:child_process";import{promisify as eg}from"node:util";import{statSync as tg}from"node:fs";import{join as ng}from"node:path";var rg=eg(Zh);function Bo(e){return ng(e,"worktrees")}o(Bo,"workflowWorktreeBaseDir");var og=360*60*1e3;function gd(e,t){return rg("git",[...e],{cwd:t}).then(n=>n.stdout)}o(gd,"defaultRunGit");function ig(e){return tg(e).mtimeMs}o(ig,"defaultMtimeMs");function sg(e){let t=[],n,r,i=o(()=>{n&&t.push(r?{path:n,branch:r}:{path:n}),n=void 0,r=void 0},"flush");for(let s of e.split(/\r?\n/))s.startsWith("worktree ")?(i(),n=s.slice(9).trim()):s.startsWith("branch ")&&(r=s.slice(7).trim().replace(/^refs\/heads\//,""));return i(),t}o(sg,"parseWorktreeList");function hd(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}o(hd,"normalize");function wd(e,t){let n=hd(e),r=hd(t);return n===r||n.startsWith(`${r}/`)}o(wd,"isUnder");async function ag(e,t,n){try{let i=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(a=>a.trim().length>0).length,s=await t(["rev-list","--count","HEAD","--not","--remotes"],e.path),c=Number.parseInt(s.trim(),10)||0;return i>0||c>0}catch(r){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${r instanceof Error?r.message:String(r)}`),!0}}o(ag,"worktreeHasChanges");async function kd(e,t,n,r,i){if(await ag(e,n,i)){i.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),r.push(e.path)}catch(s){i.push(`remove ${e.path}: ${s instanceof Error?s.message:String(s)}`);return}if(e.branch)try{await n(["branch","-D",e.branch],t)}catch{}}o(kd,"removeWorktree");async function yd(e,t,n){try{let r=await t(["worktree","list","--porcelain"],e);return sg(r)}catch(r){n.push(`list worktrees: ${r instanceof Error?r.message:String(r)}`);return}}o(yd,"listWorktrees");async function Fo(e,t,n){try{await t(["worktree","prune"],e)}catch(r){n.push(`prune: ${r instanceof Error?r.message:String(r)}`)}}o(Fo,"prune");async function vd(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let i=t.runGit??gd,s=await yd(e.gitRoot,i,n);if(!s)return{removed:r,warnings:n};for(let c of s)wd(c.path,e.baseDir)&&await kd(c,e.gitRoot,i,r,n);return r.length>0&&await Fo(e.gitRoot,i,n),{removed:r,warnings:n}}o(vd,"sweepWorkflowRunWorktrees");async function Td(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let i=t.runGit??gd,s=t.mtimeMs??ig,c=t.now??(()=>Date.now()),a=e.maxAgeMs??og;await Fo(e.gitRoot,i,n);let l=await yd(e.gitRoot,i,n);if(!l)return{removed:r,warnings:n};for(let u of l){if(!wd(u.path,e.workflowRunsRoot))continue;let m;try{m=c()-s(u.path)}catch{continue}m>=a&&await kd(u,e.gitRoot,i,r,n)}return r.length>0&&await Fo(e.gitRoot,i,n),{removed:r,warnings:n}}o(Td,"pruneStaleWorkflowWorktrees");var dg=200,Wo={maxAgents:64,maxConcurrency:16,tokenBudget:2e5};function lg(e,t){let n=e.meta,r=_t(n,t);return{name:n.name,description:n.description,phases:n.phases??[],...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},maxAgents:r.maxAgents??null,maxConcurrency:r.maxConcurrency??null,tokenBudget:r.tokenBudget??null,writesFiles:n.readOnly!==!0}}o(lg,"buildApprovalSummary");function bd(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}o(bd,"clampLimit");function Ho(e,t,n){let r=bd(e,n),i=bd(t,n);return r===void 0?i:i===void 0?r:Math.min(r,i)}o(Ho,"clampEffectiveLimit");function _t(e,t){let n=Ho(e.maxAgents,t?.maxAgents,Wo.maxAgents),r=Ho(e.maxConcurrency,t?.maxConcurrency,Wo.maxConcurrency),i=Ho(e.tokenBudget,t?.tokenBudget,Wo.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...r!==void 0?{maxConcurrency:r}:{},...i!==void 0?{tokenBudget:i}:{}}}o(_t,"clampWorkflowLimits");function Ed(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let i=t[r];if(typeof i=="string"&&i.trim().length>0)return i}}o(Ed,"workflowResultSummary");async function Go(e){let t=_t(e.module.meta,e.hostPolicy),n=lg(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let r=e.now??(()=>Date.now()),i=e.ctx?.executionCwd??e.ctx?.gitRoot;await Td({workflowRunsRoot:cg(e.runDir),gitRoot:i},{now:r,...e.worktreeSweepDeps});let s=pd(e.runDir,{now:r}),c=e.onWorkflowProcessEvent?Ye({runId:e.runId,workflowName:e.module.meta.name,displayName:e.processMetadata?.displayName??e.module.meta.name,...e.processMetadata?.goal!==void 0?{goal:e.processMetadata.goal}:{},...e.processMetadata?.source!==void 0?{source:e.processMetadata.source}:{},...e.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:e.processMetadata.savedWorkflowName}:{},...e.processMetadata?.sourceRunId!==void 0?{sourceRunId:e.processMetadata.sourceRunId}:{},...e.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:e.processMetadata.sourceWorkflowName}:{},...e.processMetadata?.revisionOf!==void 0?{revisionOf:e.processMetadata.revisionOf}:{},...e.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...e.processMetadata.hostMetadata}}:{},...e.module.meta.phases!==void 0?{phases:e.module.meta.phases}:{},...t.maxAgents!==void 0?{maxAgents:t.maxAgents}:{},...e.module.meta.plannedAgents!==void 0?{plannedAgents:e.module.meta.plannedAgents}:{},...t.tokenBudget!==void 0?{tokenBudget:t.tokenBudget}:{},now:o(()=>new Date(r()).toISOString(),"now")}):void 0,a=e.scriptSnapshot?s.writeScriptSnapshot(e.scriptSnapshot):void 0,l=e.backend??ug(e),m={...e.beforeSpawn?fg(l,e.beforeSpawn):l,writeArtifact:o(async(h,g)=>s.writeArtifact(h,g),"writeArtifact")},d=r(),f;try{f=await ji({runId:e.runId,args:e.args,backend:m,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:Ed,onEvent:o(h=>{s.onEvent(h),c&&e.onWorkflowProcessEvent?.(c.applyEvent(h)),e.onEvent?.(h)},"onEvent")},h=>e.module.run(h,e.args))}finally{await vd({baseDir:Bo(e.runDir),gitRoot:i},{now:r,...e.worktreeSweepDeps})}let p=f.ok?Ed(f.result):void 0;return s.writeRunJson({meta:e.module.meta,args:e.args,state:f.state,startedAt:d,endedAt:r(),...a?{scriptSnapshot:a}:{},...p!==void 0?{resultSummary:p}:{},...e.processMetadata!==void 0?{processMetadata:e.processMetadata}:{}}),f.ok?{kind:"completed",result:f.result,state:f.state}:{kind:"failed",error:f.error,state:f.state}}o(Go,"runWorkflowModule");function ug(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return md({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId})}o(ug,"buildBackend");function fg(e,t){return{...e,spawn:o(async n=>(await t(),e.spawn(n)),"spawn")}}o(fg,"withBeforeSpawn");async function xd(e){let t={...Jt({options:e.options,runtime:e.options.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),workflowWorktreeBaseDir:Bo(e.runDir)},n={maxIterationsPerChild:dg,parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:e.options.provider,model:e.options.model,reasoningMode:e.options.reasoningMode,extensionRuntime:e.options.extensionRuntime,events:e.options.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...t.planModeBlockCheck?{planModeBlockCheck:t.planModeBlockCheck}:{}},r=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?i=>{e.onWorkflowProcessEvent?.(i),e.options.events?.onWorkflowProcessEvent?.(i)}:void 0;return Go({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:t,childOptions:n,...e.approval?{approval:e.approval}:{},...e.signal?{signal:e.signal}:{},...e.onEvent?{onEvent:e.onEvent}:{},...r?{onWorkflowProcessEvent:r}:{},...e.options.workflowHostPolicy?{hostPolicy:e.options.workflowHostPolicy}:{},...e.now?{now:e.now}:{},...e.scriptSnapshot?{scriptSnapshot:e.scriptSnapshot}:{},...e.processMetadata?{processMetadata:e.processMetadata}:{},...e.beforeSpawn?{beforeSpawn:e.beforeSpawn}:{}})}o(xd,"runWorkflowFromOptions");import{mkdir as Cd,readdir as mg,readFile as At,rename as pg,unlink as Ko,writeFile as Xo}from"node:fs/promises";import{basename as hg,dirname as Vo,join as Ge}from"node:path";import{pathToFileURL as gg}from"node:url";var Md=[".workflow.json",".ts",".mjs",".js"],Ct="0.7.49";function Od(){return"0.7.54"}o(Od,"currentKodaxWorkflowVersion");function wg(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}o(wg,"executionForPath");function kg(e){let t=Md.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}o(kg,"stripWorkflowSuffix");function zo(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"").slice(0,80);if(!t||t==="."||t==="..")throw new Error("workflow name must contain at least one safe filename character");return t}o(zo,"safeWorkflowName");function Yo(e){return typeof e=="object"&&e!==null}o(Yo,"isRecord");function Rd(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}o(Rd,"readRequiredString");async function Sd(e,t){if(!e)return[];let n;try{n=await mg(e)}catch{return[]}let r=new Map;for(let i of Md)for(let s of n){if(!s.endsWith(i))continue;let c=kg(s);if(!c||c.length===0||r.has(c))continue;let a=Ge(e,s);r.set(c,{name:c,path:a,source:t,execution:wg(a)})}return[...r.values()]}o(Sd,"scanDir");async function Mt(e){let t=await Sd(e.personal,"personal"),n=await Sd(e.project,"project"),r=new Map;for(let i of t)r.set(i.name,i);for(let i of n)r.set(i.name,i);return[...r.values()].sort((i,s)=>i.name.localeCompare(s.name))}o(Mt,"discoverSavedWorkflows");function yg(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}o(yg,"isWorkflowModule");function vg(e){let t=e.default;if(yg(t))return t;let n=typeof t=="function"?t:e.run,r=e.workflow??e.meta;if(typeof n=="function"&&typeof r=="object"&&r!==null&&"name"in r)return{meta:r,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}o(vg,"normalizeWorkflowModule");function Tg(e){let t=JSON.parse(e);if(!Yo(t))throw new Error("generated workflow file must be an object");if(t.format!==void 0&&t.format!=="kodax.workflow")throw new Error(`unsupported workflow capsule format: ${String(t.format)}`);if(t.format==="kodax.workflow"){let i=Jn(t);return{manifest:i.manifest,source:i.source,capsule:i,legacy:!1}}let n=t.source;if(typeof n!="string"||n.trim().length===0)throw new Error("generated workflow file source must be a non-empty string");let r=ge(t.manifest);return{manifest:r,source:n,capsule:Le({minKodaxVersion:Ct,manifest:r,source:n}),legacy:!0}}o(Tg,"parseGeneratedWorkflowFile");async function Jo(e){let t=Tg(await At(e,"utf8"));return t.capsule??Le({minKodaxVersion:Ct,manifest:t.manifest,source:t.source})}o(Jo,"loadSavedWorkflowCapsule");async function KS(e){if(e.endsWith(".workflow.json"))return Qn(await Jo(e));let t=await import(gg(e).href);return vg(t)}o(KS,"loadSavedWorkflow");function Qo(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}o(Qo,"deriveRequirements");function On(e,t){ut(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}o(On,"assertGeneratedCapsuleSource");async function bg(e){let t=zo(e.name),n=ge(e.manifest);On(n,e.source);let r=e.requires??Qo(n),i=Le({minKodaxVersion:e.minKodaxVersion??Ct,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await Cd(e.dir,{recursive:!0});let s=Ge(e.dir,`${t}.workflow.json`);return await Xo(s,`${JSON.stringify(i,null,2)}
283
+ `,"utf8"),{name:t,path:s,source:"project",execution:"capability-generated"}}o(bg,"saveGeneratedWorkflow");async function _d(e,t){await Xo(e,`${JSON.stringify(t,null,2)}
284
+ `,"utf8")}o(_d,"writeCapsuleFile");async function Eg(e){try{return await At(e,"utf8"),!0}catch{return!1}}o(Eg,"fileExists");async function Id(e){let t=(await Mt(e.dirs)).filter(a=>a.name===e.name).filter(a=>e.source===void 0||a.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let r=zo(e.newName),i=Ge(Vo(n.path),`${r}.workflow.json`);if(i!==n.path&&await Eg(i))throw new Error(`saved workflow already exists: ${r}`);let s=await Jo(n.path);On(s.manifest,s.source);let c=Le({minKodaxVersion:s.minKodaxVersion,manifest:{...s.manifest,name:r},source:s.source,...s.intent!==void 0?{intent:s.intent}:{},...s.inputs!==void 0?{inputs:s.inputs}:{},...s.requires!==void 0?{requires:s.requires}:{},...s.provenance!==void 0?{provenance:s.provenance}:{}});return await Xo(i,`${JSON.stringify(c,null,2)}
285
+ `,"utf8"),i!==n.path&&await Ko(n.path),{name:r,path:i,source:n.source,execution:"capability-generated"}}o(Id,"renameSavedWorkflow");async function Pd(e){let t=(await Mt(e.dirs)).filter(r=>r.name===e.name).filter(r=>e.source===void 0||r.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await Ko(n.path),n}o(Pd,"deleteSavedWorkflow");async function Nd(e){let t=zo(e.name),n=(await Mt(e.dirs)).filter(p=>p.name===t).filter(p=>e.savedSource===void 0||p.source===e.savedSource);if(n.length===0)throw new Error(`saved workflow not found: ${t}`);if(n.length>1)throw new Error(`ambiguous saved workflow name: ${t}`);let r=n[0];if(!r.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let i=ge({...e.manifest,name:t});On(i,e.source);let s=e.requires??Qo(i),c=Le({minKodaxVersion:e.minKodaxVersion??Ct,manifest:i,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...s!==void 0?{requires:s}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}}),a=await Jo(r.path),l=new Date().toISOString().replace(/[:.]/g,"-"),u=Ge(Vo(r.path),".revisions",t),m=`${l}-${process.hrtime.bigint().toString(36)}`,d=Ge(u,`${t}-${m}.workflow.json`),f=Ge(Vo(r.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Cd(u,{recursive:!0}),await _d(d,a);try{await _d(f,c),await pg(f,r.path)}catch(p){try{await Ko(f)}catch{}throw p}return{name:t,path:r.path,source:r.source,execution:"capability-generated",previousPath:d}}o(Nd,"replaceSavedWorkflow");function xg(e){if(!Yo(e))return;let t=e.request;if(typeof t=="string"&&t.trim().length>0)return t;let n=e.question;if(typeof n=="string"&&n.trim().length>0)return n}o(xg,"readOptionalOriginalRequest");function Dd(e){return Rg(e)}o(Dd,"buildCapsuleFromRun");async function Rg(e){let t=JSON.parse(await At(Ge(e.runDir,"run.json"),"utf8"));if(!Yo(t))throw new Error("workflow run.json must be an object");let n=Rd(t,"scriptSnapshotPath"),r=Rd(t,"manifestSnapshotPath"),i=await At(n,"utf8"),s=ge(JSON.parse(await At(r,"utf8")));On(s,i);let c=typeof t.runId=="string"&&t.runId.length>0?t.runId:hg(e.runDir),a=xg(t.args),l=Qo(s),u={taskClass:s.patterns[0]??s.name,...a!==void 0?{originalRequest:a}:{},reusableFor:[s.description]},m={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return Le({minKodaxVersion:Ct,manifest:s,source:i,intent:u,inputs:m,...l!==void 0?{requires:l}:{},provenance:{fromRunId:c,createdAt:new Date().toISOString(),kodaxVersion:Od()}})}o(Rg,"readCapsuleFromRun");async function XS(e){let t=await Dd(e);return{capsule:t,module:Qn(t)}}o(XS,"loadGeneratedWorkflowFromRun");async function zS(e){let t=await Dd(e);return bg({dir:e.targetDir,name:e.name,manifest:t.manifest,source:t.source,...t.intent!==void 0?{intent:t.intent}:{},...t.inputs!==void 0?{inputs:t.inputs}:{},...t.requires!==void 0?{requires:t.requires}:{},...t.provenance!==void 0?{provenance:t.provenance}:{},minKodaxVersion:t.minKodaxVersion})}o(zS,"saveGeneratedWorkflowFromRun");function Ie(e,t,n,r){e.push({severity:t,requirement:n,message:r})}o(Ie,"addRequirementIssue");function Ad(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}o(Ad,"parseSemver");function Sg(e,t){for(let n=0;n<3;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}o(Sg,"compareSemver");function _g(e,t,n){let r=Ad(t),i=Ad(n);if(!r){Ie(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!i){Ie(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}Sg(i,r)<0&&Ie(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}o(_g,"addMinVersionIssue");function qo(e,t,n,r){if(!n)return;if(!r){for(let s of n)Ie(e,"warning",`${t}:${s}`,`workflow requires ${t}:${s}, but no ${t} inventory was provided`);return}let i=new Set(r);for(let s of n)i.has(s)||Ie(e,"error",`${t}:${s}`,`missing required workflow ${t}: ${s}`)}o(qo,"addMissingItems");function $d(e,t={}){let n=Jn(e),r=[],i=n.requires;_g(r,n.minKodaxVersion,t.kodaxVersion??Od()),i?.environment?.includes("git-repo")&&t.isGitRepo===!1&&Ie(r,"error","environment:git-repo","workflow requires a git repository"),i?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&Ie(r,"error","environment:worktree-capable","workflow may request git worktree isolation");try{ut(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(s){let c=s instanceof Error?s.message:String(s);Ie(r,"error","workflow:source",c)}return qo(r,"tools",i?.tools,t.availableTools),qo(r,"mcp",i?.mcp,t.availableMcp),qo(r,"skills",i?.skills,t.availableSkills),{ok:!r.some(s=>s.severity==="error"),issues:r}}o($d,"preflightWorkflowCapsule");function In(e){return{runId:e.runId,workflow:e.workflow,status:e.status,runDir:e.runDir,totalSpawned:e.totalSpawned,eventCount:e.eventCount,startedAt:e.startedAt,...e.endedAt!==void 0?{endedAt:e.endedAt}:{},...e.error!==void 0?{error:e.error}:{},...e.resultText!==void 0?{resultText:e.resultText}:{}}}o(In,"snapshot");function Ag(e,t){return t?"stopped":e.kind==="completed"?"completed":e.kind==="denied"?"denied":"failed"}o(Ag,"terminalStatus");function Cg(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let i=t[r];if(typeof i=="string"&&i.trim().length>0)return i}}o(Cg,"resultText");function Mg(e){return e instanceof Error?e:new Error(String(e))}o(Mg,"toError");function Ld(e,t){let n=Mg(t),r={runId:e.runId,status:"failed",totalSpawned:e.totalSpawned,events:[],artifacts:[]};return{kind:"failed",error:n,state:r}}o(Ld,"failedOutcome");function Og(e={}){let t=e.now??(()=>Date.now()),n=new Map,r=new Set,i=o(()=>new Date(t()).toISOString(),"isoNow"),s=o(d=>{for(let f of r)try{f(d)}catch{}},"notifyProcess"),c=o(async d=>{for(;d.status==="paused"&&!d.controller.signal.aborted;)await new Promise(f=>d.pauseWaiters.push(f));if(d.controller.signal.aborted)throw new Error("workflow stopped")},"waitIfPaused"),a=o(d=>{let f=d.pauseWaiters.splice(0);for(let p of f)p()},"releasePauseWaiters"),l=o((d,f)=>p=>{d.eventCount+=1,p.type==="agent_spawned"&&(d.totalSpawned+=1),s(d.process.applyEvent(p)),f?.(p)},"onEvent"),u=o((d,f,p)=>{let h=new AbortController;p&&p.addEventListener("abort",()=>h.abort(),{once:!0});let g={runId:d.runId,workflow:d.workflow,status:"running",runDir:f,totalSpawned:0,eventCount:0,startedAt:t(),controller:h,pauseWaiters:[],process:Ye({runId:d.runId,workflowName:d.workflow,displayName:d.processMetadata?.displayName??d.workflow,...d.processMetadata?.goal!==void 0?{goal:d.processMetadata.goal}:{},...d.processMetadata?.source!==void 0?{source:d.processMetadata.source}:{},...d.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:d.processMetadata.savedWorkflowName}:{},...d.processMetadata?.sourceRunId!==void 0?{sourceRunId:d.processMetadata.sourceRunId}:{},...d.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:d.processMetadata.sourceWorkflowName}:{},...d.processMetadata?.revisionOf!==void 0?{revisionOf:d.processMetadata.revisionOf}:{},...d.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...d.processMetadata.hostMetadata}}:{},...d.phases!==void 0?{phases:d.phases}:{},...d.maxAgents!==void 0?{maxAgents:d.maxAgents}:{},...d.plannedAgents!==void 0?{plannedAgents:d.plannedAgents}:{},...d.tokenBudget!==void 0?{tokenBudget:d.tokenBudget}:{},now:i})};return n.set(d.runId,g),g},"createRun"),m=o((d,f)=>(d.status=Ag(f,d.controller.signal.aborted||d.status==="stopped"),d.endedAt=t(),f.kind==="failed"&&d.status!=="stopped"&&(d.error=f.error.message),f.kind==="completed"&&(d.resultText=Cg(f.result)),f.kind==="failed"&&!Yn(d.process.getSnapshot().status)?s(d.process.setStatus("failed",f.error.message)):f.kind==="denied"?s(d.process.setStatus("cancelled","workflow denied")):d.status==="stopped"&&d.process.getSnapshot().status!=="cancelled"&&s(d.process.setStatus("cancelled","workflow stopped")),a(d),f),"settle");return{start:o(d=>{let f=_t(d.module.meta,d.hostPolicy),p=u({runId:d.runId,workflow:d.module.meta.name,...d.module.meta.phases!==void 0?{phases:d.module.meta.phases}:{},...f.maxAgents!==void 0?{maxAgents:f.maxAgents}:{},...d.module.meta.plannedAgents!==void 0?{plannedAgents:d.module.meta.plannedAgents}:{},...f.tokenBudget!==void 0?{tokenBudget:f.tokenBudget}:{},...d.processMetadata!==void 0?{processMetadata:d.processMetadata}:{}},d.runDir,d.signal),h=Go({...d,signal:p.controller.signal,beforeSpawn:o(()=>c(p),"beforeSpawn"),onEvent:l(p,d.onEvent)}).catch(g=>Ld(p,g)).then(g=>m(p,g));return{runId:p.runId,done:h,getSnapshot:o(()=>In(p),"getSnapshot"),getProcessSnapshot:o(()=>p.process.getSnapshot(),"getProcessSnapshot")}},"start"),startFromOptions:o(d=>{let f=_t(d.module.meta,d.options.workflowHostPolicy),p=u({runId:d.runId,workflow:d.module.meta.name,...d.module.meta.phases!==void 0?{phases:d.module.meta.phases}:{},...f.maxAgents!==void 0?{maxAgents:f.maxAgents}:{},...d.module.meta.plannedAgents!==void 0?{plannedAgents:d.module.meta.plannedAgents}:{},...f.tokenBudget!==void 0?{tokenBudget:f.tokenBudget}:{},...d.processMetadata!==void 0?{processMetadata:d.processMetadata}:{}},d.runDir,d.signal),h=xd({...d,signal:p.controller.signal,beforeSpawn:o(()=>c(p),"beforeSpawn"),onEvent:l(p,d.onEvent)}).catch(g=>Ld(p,g)).then(g=>m(p,g));return{runId:p.runId,done:h,getSnapshot:o(()=>In(p),"getSnapshot"),getProcessSnapshot:o(()=>p.process.getSnapshot(),"getProcessSnapshot")}},"startFromOptions"),list:o(()=>[...n.values()].map(In).sort((d,f)=>f.startedAt-d.startedAt),"list"),get:o(d=>{let f=n.get(d);return f?In(f):void 0},"get"),subscribeWorkflowProcess:o(d=>(r.add(d),()=>{r.delete(d)}),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:o(d=>n.get(d)?.process.getSnapshot(),"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:o(d=>{let f=[...n.values()].sort((p,h)=>h.startedAt-p.startedAt).map(p=>p.process.getSnapshot()).filter(p=>d?.activeOnly===!0?!Yn(p.status):!0);return d?.limit===void 0?f:f.slice(0,d.limit)},"listWorkflowProcessSnapshots"),pause:o(d=>{let f=n.get(d);return!f||f.status!=="running"?!1:(f.status="paused",s(f.process.setStatus("paused","workflow paused")),!0)},"pause"),resume:o(d=>{let f=n.get(d);return!f||f.status!=="paused"?!1:(f.status="running",s(f.process.setStatus("running","workflow resumed")),a(f),!0)},"resume"),stop:o((d,f)=>{let p=n.get(d);return!p||["completed","failed","denied","stopped"].includes(p.status)?!1:(p.status="stopped",s(p.process.setStatus("cancelled",f??"workflow stopped")),p.controller.abort(),a(p),!0)},"stop")}}o(Og,"createWorkflowRunManager");var jd;function e_(){return jd??=Og(),jd}o(e_,"getDefaultWorkflowRunManager");import{existsSync as ei,readFileSync as Xd,readdirSync as Bg,rmSync as qd,writeFileSync as Wg}from"node:fs";import{join as it,resolve as Pn,sep as zd}from"node:path";import{existsSync as Zo,readdirSync as Ig,readFileSync as Fd}from"node:fs";import{join as Bd,resolve as Ud,sep as Pg}from"node:path";function Wd(e){return e!=="."&&/^[a-zA-Z0-9._-]+$/.test(e)&&!e.includes("..")}o(Wd,"isSafeWorkflowRunId");function Ng(e,t){if(!Wd(t))return;let n=Ud(e),r=Ud(n,t);return r.startsWith(`${n}${Pg}`)?r:void 0}o(Ng,"safeRunDir");function Dg(e){let t=Bd(e,"run.json");if(Zo(t))try{let n=JSON.parse(Fd(t,"utf8"));return typeof n=="object"&&n!==null?n:void 0}catch{return}}o(Dg,"readRunRecord");function $g(e){let t=Bd(e,"workflow-metadata.json");if(Zo(t))try{let n=JSON.parse(Fd(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.displayName;return typeof r=="string"&&r.trim().length>0?r:void 0}catch{return}}o($g,"readMetadataDisplayName");function Lg(e){let t=e.displayName;return typeof t=="string"&&t.trim().length>0?t:void 0}o(Lg,"readRunJsonDisplayName");function jg(e,t){return e?.trim()===t}o(jg,"displayNameMatches");function Hd(e,t){if(!t)return;let n=Ng(t,e);if(!n)return;let r=Dg(n);if(!r)return;let i=r.workflow,s=$g(n)??Lg(r);return{kind:"run",target:e,runId:e,runDir:n,...typeof i=="string"&&i.length>0?{workflowName:i}:{},...s!==void 0?{displayName:s}:{}}}o(Hd,"resolveRun");function Ug(e,t){if(!t||!Zo(t))return[];let n=[];for(let r of Ig(t)){if(!Wd(r))continue;let i=Hd(r,t);i&&jg(i.displayName,e)&&n.push(i)}return n}o(Ug,"resolveRunsByDisplayName");async function Fg(e,t){return t?(await Mt(t)).find(r=>r.name===e):void 0}o(Fg,"resolveSaved");async function Gd(e){let t=e.target.trim();if(!t)return{kind:"missing",target:e.target};let n=Hd(t,e.runBaseDir),r=n?[]:Ug(t,e.runBaseDir),i=await Fg(t,e.savedWorkflowDirs),s=n?[n]:r;return s.length>1?{kind:"ambiguous",target:t,matches:i?["run","saved"]:["run"],...i?{savedWorkflow:i}:{}}:s.length===1&&i?{kind:"ambiguous",target:t,matches:["run","saved"],run:s[0],savedWorkflow:i}:n||(r.length===1?r[0]:i?{kind:"saved",target:t,savedWorkflow:i}:{kind:"missing",target:t})}o(Gd,"resolveWorkflowIdentity");var ti=new Set(["completed","failed","stopped","denied","cancelled"]);function Yd(e){if(ei(e))try{return JSON.parse(Xd(e,"utf8"))}catch{return}}o(Yd,"readJsonFile");function Jd(e){let t=Yd(e);return typeof t=="object"&&t!==null?t:void 0}o(Jd,"readRecord");function ce(e){return typeof e=="string"&&e.trim().length>0?e:void 0}o(ce,"readString");function Hg(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}o(Hg,"readNumber");function Gg(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}o(Gg,"readStringArray");function qg(e){if(e==="command"||e==="amaw"||e==="review"||e==="sdk"||e==="capsule"||e==="extension"||e==="automation")return e}o(qg,"readWorkflowProcessSource");function Vg(e,t){let n=ce(e.goal),r=qg(e.source),i=ce(e.savedWorkflowName),s=ce(e.sourceRunId),c=ce(e.sourceWorkflowName),a=ce(e.revisionOf),l=Wt(e.hostMetadata),u={...t!==void 0?{displayName:t}:{},...n!==void 0?{goal:n}:{},...r!==void 0?{source:r}:{},...i!==void 0?{savedWorkflowName:i}:{},...s!==void 0?{sourceRunId:s}:{},...c!==void 0?{sourceWorkflowName:c}:{},...a!==void 0?{revisionOf:a}:{},...l!==void 0?{hostMetadata:l}:{}};return Object.keys(u).length>0?u:void 0}o(Vg,"readRunProcessMetadata");function Kg(e){return e!=="."&&/^[a-zA-Z0-9._-]+$/.test(e)&&!e.includes("..")}o(Kg,"isSafeWorkflowRunId");function qe(e,t){if(!Kg(t))return;let n=Pn(e),r=Pn(n,t);return r.startsWith(`${n}${zd}`)?r:void 0}o(qe,"runDir");function Xg(e){return e==="running"||e==="paused"}o(Xg,"isManagedWorkflowActive");function zg(e,t){let n=Pn(e),r=Pn(t);return r===n||r.startsWith(`${n}${zd}`)}o(zg,"isPathWithinBase");function Ot(e,t){let n=qe(e,t);if(!n)return;let r=Jd(it(n,"run.json"));if(!r)return;let i=Yg(n)??ce(r.displayName),s=ce(r.resultSummary),c=Vg(r,i);return{runId:t,workflow:ce(r.workflow)??"?",...i!==void 0?{displayName:i}:{},...s!==void 0?{resultSummary:s}:{},...c!==void 0?{processMetadata:c}:{},status:ce(r.status)??"?",endedAt:Hg(r.endedAt)??0,artifacts:Gg(r.artifacts)}}o(Ot,"readPersistedRun");function Yg(e){let t=Jd(it(e,"workflow-metadata.json"));return t?ce(t.displayName):void 0}o(Yg,"readRunDisplayName");function Vd(e){if(!ei(e))return[];let t=[];for(let n of Bg(e)){let r=Ot(e,n);r&&t.push(r)}return t.sort((n,r)=>r.endedAt-n.endedAt)}o(Vd,"listPersistedRuns");function Qd(e){let t=it(e,"events.jsonl");if(!ei(t))return[];let n=[];for(let r of Xd(t,"utf8").split(/\r?\n/)){if(!r.trim())continue;let i;try{i=JSON.parse(r)}catch{continue}if(typeof i!="object"||i===null)continue;let s=i;if(typeof s.seq!="number"||typeof s.type!="string")continue;let c=s.data;n.push({seq:s.seq,type:s.type,...typeof c=="object"&&c!==null?{data:c}:{}})}return n}o(Qd,"readWorkflowEvents");function Kd(e,t){let n=qe(e,t.runId);if(!n)return;let r=Ye({runId:t.runId,workflowName:t.workflow,displayName:t.displayName??t.processMetadata?.displayName??t.workflow,...t.processMetadata?.goal!==void 0?{goal:t.processMetadata.goal}:{},...t.processMetadata?.source!==void 0?{source:t.processMetadata.source}:{},...t.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:t.processMetadata.savedWorkflowName}:{},...t.processMetadata?.sourceRunId!==void 0?{sourceRunId:t.processMetadata.sourceRunId}:{},...t.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:t.processMetadata.sourceWorkflowName}:{},...t.processMetadata?.revisionOf!==void 0?{revisionOf:t.processMetadata.revisionOf}:{},...t.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...t.processMetadata.hostMetadata}}:{},...t.resultSummary!==void 0?{resultSummary:t.resultSummary}:{},artifacts:t.artifacts.map(s=>({name:s,path:it(n,"artifacts",`${Mn(s)}.json`)}))});for(let s of Qd(n))r.applyEvent(s);let i=r.getSnapshot();return i.status!=="running"||!ti.has(t.status)?i:(t.status==="completed"?r.setStatus("completed"):t.status==="failed"?r.setStatus("failed"):r.setStatus("cancelled"),r.getSnapshot())}o(Kd,"snapshotFromPersistedRun");function Jg(e){for(let t of[...e].reverse()){if(t.type==="workflow_completed"){let i=ce(t.data?.resultSummary);if(i)return i}if(t.type!=="agent_completed"&&t.type!=="agent_unverified"&&t.type!=="agent_failed")continue;let n=ce(t.data?.summary);if(n)return n;let r=ce(t.data?.error);if(r)return r}}o(Jg,"readEventSummary");function Qg(e,t,n){let r=e.filter(a=>ti.has(a.status)).sort((a,l)=>l.endedAt-a.endedAt),i=t.keep,s=t.olderThanDays===void 0?void 0:n-t.olderThanDays*24*60*60*1e3,c=i===void 0?new Set:new Set(r.slice(0,Math.max(0,i)).map(a=>a.runId));return i===void 0&&s===void 0?[]:r.filter(a=>c.has(a.runId)?!1:s===void 0?!0:a.endedAt>0&&a.endedAt<s)}o(Qg,"pruneCandidates");function p_(e){let t=e.now??(()=>Date.now()),{runManager:n,runBaseDir:r}=e;return{subscribeWorkflowProcess:o(i=>n.subscribeWorkflowProcess(i),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:o(i=>{let s=n.getWorkflowProcessSnapshot(i);if(s)return s;let c=Ot(r,i);return c?Kd(r,c):void 0},"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:o(i=>{let s=n.listWorkflowProcessSnapshots(i);if(i?.activeOnly===!0)return s;let c=new Set(s.map(u=>u.runId)),a=Vd(r).filter(u=>!c.has(u.runId)).map(u=>Kd(r,u)).filter(u=>u!==void 0),l=[...s,...a];return i?.limit===void 0?l:l.slice(0,i.limit)},"listWorkflowProcessSnapshots"),resolveWorkflowIdentity:o(async i=>Gd({target:i,runBaseDir:r,savedWorkflowDirs:e.savedWorkflowDirs}),"resolveWorkflowIdentity"),preflightWorkflowCapsule:o(async i=>$d(i.capsule,i.env),"preflightWorkflowCapsule"),stopWorkflow:o(async(i,s)=>n.stop(i,s),"stopWorkflow"),pauseWorkflow:o(async i=>n.pause(i),"pauseWorkflow"),resumeWorkflow:o(async i=>n.resume(i),"resumeWorkflow"),renameWorkflowRun:o(async(i,s)=>{let c=s.trim();if(c.length===0)return!1;let a=qe(r,i);return!a||!Ot(r,i)?!1:(Wg(it(a,"workflow-metadata.json"),`${JSON.stringify({displayName:c},null,2)}
286
+ `,"utf8"),!0)},"renameWorkflowRun"),renameSavedWorkflow:o(async(i,s)=>{if(e.savedWorkflowDirs)return Id({dirs:e.savedWorkflowDirs,name:i,newName:s})},"renameSavedWorkflow"),deleteSavedWorkflow:o(async(i,s)=>{if(e.savedWorkflowDirs)return Pd({dirs:e.savedWorkflowDirs,name:i,...s!==void 0?{source:s}:{}})},"deleteSavedWorkflow"),replaceSavedWorkflow:o(async i=>{if(e.savedWorkflowDirs)return Nd({...i,dirs:e.savedWorkflowDirs})},"replaceSavedWorkflow"),readWorkflowResult:o(async i=>{let s=n.getWorkflowProcessSnapshot(i)?.resultSummary;if(s)return s;let c=qe(r,i);if(!c)return;let a=Ot(r,i);if(a)return a.resultSummary?a.resultSummary:Jg(Qd(c))},"readWorkflowResult"),readWorkflowArtifact:o(async(i,s)=>{let c=qe(r,i);if(c)return Yd(it(c,"artifacts",`${Mn(s)}.json`))},"readWorkflowArtifact"),deleteWorkflowRun:o(async(i,s)=>{if(n.listWorkflowProcessSnapshots({activeOnly:!0}).some(u=>u.runId===i))return!1;let a=Ot(r,i);if(!a||!ti.has(a.status)&&s?.force!==!0)return!1;let l=qe(r,i);return l?(qd(l,{recursive:!0,force:!0}),!0):!1},"deleteWorkflowRun"),pruneWorkflowRuns:o(async i=>{let s=new Set(n.listWorkflowProcessSnapshots({activeOnly:!0}).map(p=>p.runId)),c=new Set(n.list().filter(p=>Xg(p.status)).filter(p=>zg(r,p.runDir)).map(p=>p.runId)),a=new Set([...s,...c]),l=Vd(r),m=new Set([...c,...l.filter(p=>s.has(p.runId)).map(p=>p.runId)]).size,d=Qg(l,i,t()).filter(p=>!a.has(p.runId));if(i.dryRun===!0)return{deleted:0,protectedRuns:m,candidates:d.map(p=>p.runId),dryRun:!0};let f=0;for(let p of d){let h=qe(r,p.runId);h&&(qd(h,{recursive:!0,force:!0}),f+=1)}return{deleted:f,protectedRuns:m,candidates:d.map(p=>p.runId),dryRun:!1}},"pruneWorkflowRuns")}}o(p_,"createWorkflowLifecycleController");var Zg=["You generate KodaX Dynamic Workflow scripts.","Return JSON only. Do not wrap the answer in prose.","For simple tasks that do not benefit from multiple agents, return:",'{"action":"decline","reason":"..."}',"For complex tasks, return:",'{"action":"generate","manifest":{...},"source":"async function run(wf, args) { ... }","approvalSummary":"..."}',"Generated source may only coordinate agents through wf and args.","Generated source must return displayable final text for the user.","Never use import, require, process, fs, child_process, network APIs, shell commands, or direct file access."].join(`
287
+ `),Zd=12e4,ew="KODAX_WORKFLOW_GENERATION_TIMEOUT_MS",tw=64,nw=2,rw=2e3,ow=[{id:"import",pattern:/\bimport\s*(?:\(|['"*{]|\w+\s+from\b)/},{id:"require",pattern:/\brequire\s*\(/},{id:"process",pattern:/\bprocess\s*(?:\.|\[)/},{id:"fs",pattern:/\b(?:node:)?fs\b/},{id:"child_process",pattern:/\bchild_process\b/},{id:"shell",pattern:/\b(?:exec|spawn|execFile)\s*\(/},{id:"fetch",pattern:/\bfetch\s*\(/},{id:"Deno",pattern:/\bDeno\s*(?:\.|\[)/},{id:"Bun",pattern:/\bBun\s*(?:\.|\[)/}];function iw(e=process.env){let t=e[ew];if(t===void 0||t.trim().length===0)return Zd;let n=Number(t);return!Number.isFinite(n)||n<=0?Zd:Math.floor(n)}o(iw,"resolveWorkflowGenerationTimeoutMs");function sw(e,t){if(typeof e!="object"||e===null)throw new Error(`${t} must be an object`);return e}o(sw,"readRecord");function el(e,t){let n=e[t];if(typeof n!="string"||n.trim().length===0)throw new Error(`workflow generation ${t} must be a non-empty string`);return n}o(el,"readNonEmptyString");function aw(e){let t=e.trim(),n=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(t);if(n?.[1])return n[1].trim();let r=t.indexOf("{"),i=t.lastIndexOf("}");if(r>=0&&i>r)return t.slice(r,i+1);throw new Error("workflow generation output did not contain a JSON object")}o(aw,"extractJsonText");function cw(e){let t=aw(e);return sw(JSON.parse(t),"workflow generation output")}o(cw,"parseGenerationJson");function dw(e){if(typeof e=="string"){let n=e.trim();return n.length>0?n:void 0}if(typeof e!="object"||e===null)return;let t=e;for(let n of["name","id","title","phase"]){let r=t[n];if(typeof r=="string"&&r.trim().length>0)return r.trim()}}o(dw,"normalizePhaseEntry");function lw(e){return e.split(/(?:->|\u2192|,|\n)/).map(t=>t.trim()).filter(t=>t.length>0)}o(lw,"splitPhaseString");function uw(e){if(typeof e!="object"||e===null)return e;let t=e,n=t.phases,r;if(Array.isArray(n)){let i=n.map(dw);i.every(s=>s!==void 0)&&(r=i)}else if(typeof n=="string"){let i=lw(n);i.length>0&&(r=i)}return r?{...t,phases:r}:e}o(uw,"normalizeGeneratedManifestCandidate");function fw(e){return e.match(/\bwf\.(?:runAgent|spawnAgent|synthesize)\s*\(/g)?.length??0}o(fw,"estimateDirectAgentCalls");function mw(e,t){let n=e.maxConcurrency*Math.max(1,e.phases.length)+2,r=fw(t)+2,i=Math.min(tw,Math.max(e.maxAgents,n,r));return i>e.maxAgents?{...e,maxAgents:i}:e}o(mw,"reserveGeneratedWorkflowAgentCapacity");function st(e){let t="",n=0;for(;n<e.length;){let r=e[n],i=e[n+1];if(r==="/"&&i==="/"){for(t+=" ",n+=2;n<e.length&&e[n]!==`
288
288
  `;)t+=" ",n+=1;continue}if(r==="/"&&i==="*"){for(t+=" ",n+=2;n<e.length;){if(e[n]==="*"&&e[n+1]==="/"){t+=" ",n+=2;break}t+=e[n]===`
289
289
  `?`
290
290
  `:" ",n+=1}continue}if(r==='"'||r==="'"||r==="`"){let s=r;for(t+=" ",n+=1;n<e.length;){let c=e[n];if(t+=c===`
@@ -292,11 +292,11 @@ ${e.verification.changedPaths?.map(r=>`- ${r}`).join(`
292
292
  `:" ",n+=1,c==="\\"){n<e.length&&(t+=e[n]===`
293
293
  `?`
294
294
  `:" ",n+=1);continue}if(c===s)break}continue}t+=r??"",n+=1}return t}o(st,"stripGeneratedSourceLiterals");function tl(e){return e!==void 0&&/[A-Za-z0-9_$]/.test(e)}o(tl,"isIdentifierPart");function ol(e){let t=st(e),n=/\basync\s+function\s+run\s*\([^)]*\)\s*\{/.exec(t);if(!n)return;let r=t.indexOf("{",n.index);if(r<0)return;let i=0;for(let s=r;s<t.length;s+=1){let c=t[s];if(c==="{"&&(i+=1),c==="}"&&(i-=1,i===0))return{start:r+1,end:s}}}o(ol,"findRunBodyRange");function il(e,t){let n=st(e),r=1;for(let i=t.start;i<t.end;i+=1){let s=n[i];if(s==="{"){r+=1;continue}if(s==="}"){r-=1;continue}if(r===1&&n.startsWith("return",i)&&!tl(n[i-1])&&!tl(n[i+6])){let c=i+6,a=0;for(let l=c;l<t.end;l+=1){let u=n[l];if((u==="("||u==="["||u==="{")&&(a+=1),(u===")"||u==="]"||u==="}")&&(a-=1),a===0&&(u===";"||u===`
295
- `||u==="\r"))return e.slice(c,l).trim()}return e.slice(c,t.end).trim()}}}o(il,"findTopLevelReturnExpression");function sl(e){let t=ol(e);if(t)return il(e,t)}o(sl,"findOuterRunReturnExpression");function ow(e){let t=ol(e);if(!t)return[];let n=st(e),r=[],i=t.start,s=1;for(let a=t.start;a<t.end;a+=1){let l=n[a];if(l==="{"||l==="("||l==="["){s+=1;continue}if(l==="}"||l===")"||l==="]"){s-=1;continue}if(l===";"&&s===1){let u=e.slice(i,a+1).trim();u&&r.push(u),i=a+1}}let c=e.slice(i,t.end).trim();return c&&r.push(c),r}o(ow,"findOuterRunStatements");function iw(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}o(iw,"escapeRegExp");function sw(e,t){let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/.exec(t.trim())?.[0];if(!n)return!1;let r=iw(n),i=new RegExp(`^\\s*(?:const|let|var)\\s+${r}\\s*=\\s*(?:await\\s+)?wf\\s*\\.\\s*artifact\\b`),s=new RegExp(`^\\s*${r}\\s*=\\s*(?:await\\s+)?wf\\s*\\.\\s*artifact\\b`);return ow(e).some(c=>i.test(c)||s.test(c))}o(sw,"isReturnedArtifactHandle");function nl(e,t,n,r){let i=0;for(let s=t;s<e.length;s+=1){let c=e[s];if(c===n&&(i+=1),c===r&&(i-=1,i===0))return s}}o(nl,"findMatchingDelimiter");function aw(e,t,n){let r=0;for(let i=t;i<n;i+=1){let s=e[i];if(s==="("||s==="["||s==="{"){r+=1;continue}if(s===")"||s==="]"||s==="}"){r-=1;continue}if(s===","&&r===0)return i}}o(aw,"findTopLevelComma");function cw(e){let t=st(e),n=/^\s*(?:await\s+)?wf\s*\.\s*phase\s*\(/.exec(t);if(!n)return;let r=t.indexOf("(",n.index);if(r<0)return;let i=nl(t,r,"(",")");if(i===void 0)return;let s=aw(t,r+1,i);if(s===void 0)return;let c=e.slice(s+1,i).trim(),a=st(c),l=a.indexOf("=>");if(l<0)return;let u=l+2,m=a.slice(u).search(/\S/);if(m<0)return;let d=u+m;if(a[d]!=="{")return c.slice(d).trim();let f=nl(a,d,"{","}");if(f!==void 0)return il(c,{start:d+1,end:f})}o(cw,"findPhaseCallbackReturnExpression");function rl(e,t){return new RegExp(`^(?:await\\s+)?wf\\s*\\.\\s*${t}\\b`).test(e.trim())}o(rl,"isDirectWorkflowCall");function al(e,t){let n=t.trim();if(/^(?:undefined|null|void\s+0|\{\s*\}|\[\s*\]|''|""|``)$/.test(n)||rl(n,"artifact")||sw(e,n))return!1;if(rl(n,"phase")){let r=cw(n);return r!==void 0&&al(n,r)}return!0}o(al,"isDisplayableReturnExpression");function dw(e){let t=sl(e);return t?al(e,t):!1}o(dw,"hasDisplayableRunReturn");function lw(e){try{ut(e,{filename:"generated-workflow.js",requireAsyncRun:!0,checkSourcePolicy:!1})}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`workflow generation source has invalid JavaScript syntax: ${n}`)}}o(lw,"assertGeneratedWorkflowSyntax");function uw(){let e=0,t=new Map,n=o(i=>{e+=1;let s=`smoke-${e}`;return t.set(s,i),{taskId:s,name:i}},"nextHandle"),r=o((i,s)=>{let c=t.get(i)??s??i;return{taskId:i,name:c,status:"completed",finalText:`Smoke result for ${c}: completed, done, verified.`}},"resultFor");return{runId:"run-smoke",args:void 0,budget:{total:null,spent:o(()=>0,"spent"),remaining:o(()=>1/0,"remaining")},phase:o(async(i,s)=>s(),"phase"),spawnAgent:o(async i=>n(i.name),"spawnAgent"),runAgent:o(async i=>{let s=n(i.name);return r(s.taskId,i.name)},"runAgent"),wait:o(async i=>r(i),"wait"),snapshot:o(async i=>({taskId:i,name:t.get(i)??i,status:"completed",lastText:`Smoke snapshot for ${t.get(i)??i}`}),"snapshot"),output:o(async i=>({taskId:i,name:t.get(i)??i,status:"completed",lastText:`Smoke snapshot for ${t.get(i)??i}`}),"output"),send:o(async()=>{},"send"),stop:o(async()=>{},"stop"),parallel:o(async i=>Promise.all(i.map(s=>s())),"parallel"),synthesize:o(async()=>({text:"Smoke synthesis: completed, done, verified."}),"synthesize"),artifact:o(async i=>({name:i}),"artifact"),log:o(()=>{},"log")}}o(uw,"createSmokeWorkflowApi");async function fw(e){try{await Li({source:e.source,wf:uw(),args:{request:e.request},filename:"generated-workflow-smoke.js",timeoutMs:Kg})}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`workflow generation source failed safe smoke validation: ${n}`)}}o(fw,"assertGeneratedWorkflowSmoke");function mw(e){if(e.trim().length===0)throw new Error("workflow generation source must be non-empty");if(!/\basync\s+function\s+run\s*\(/.test(e))throw new Error("workflow generation source must define async function run(wf, args)");lw(e);let t=st(e);for(let n of Xg)if(n.pattern.test(t))throw new Error(`forbidden generated workflow token: ${n.id}`);if(/\.\s*output\b/.test(t))throw/\bwf\s*\.\s*output\s*\(/.test(t)?new Error("workflow generation source must use wf.snapshot(taskId) instead of legacy wf.output(taskId)"):new Error("workflow generation source must use finalText/text instead of non-existent .output");for(let n of t.split(/\r?\n/)){let r=n.search(/\bwf\.artifact\s*\(/);if(r>=0&&!/\b(?:await|return)\b/.test(n.slice(0,r)))throw new Error("workflow generation source must await wf.artifact(...)")}if(!dw(e)){let n=sl(e),r=n===void 0?"no top-level `return` was found in run() \u2014 a return inside a wf.phase(...) callback does not count":`the top-level return \`${n.slice(0,80)}\` is not displayable \u2014 do not return undefined/null/{}, a bare wf.artifact(...) write, or a wf.phase(...) without a displayable callback return`;throw new Error(`workflow generation source outer run function must return displayable final text (${r})`)}return e}o(mw,"validateGeneratedWorkflowSource");function pw(e){let t=e?.trim();return t?["","Referenced skill instructions (authoritative):",t,"","Skill handling requirements:","- Treat the referenced skill instructions above as binding requirements for this workflow generation.","- Preserve skill-specific file layout, naming, and process requirements in child-agent prompts that do the work.",'- Do not replace concrete skill requirements with vague paths such as "or similar"; choose paths from the skill or instruct the child to invoke the skill before acting.']:[]}o(pw,"buildReferencedSkillPromptSection");function cl(e,t){return["Task request:",e,...pw(t),"","Available WorkflowApi calls:","- wf.phase(name, async () => ...)","- wf.spawnAgent({ name, prompt, readOnly, modelHint, isolation, evidenceRefs, verification })","- wf.runAgent({ name, prompt, readOnly, modelHint, isolation, evidenceRefs, verification })","- wf.wait(taskId), wf.snapshot(taskId), wf.send(taskId, content), wf.stop(taskId, reason)","- wf.parallel([() => promise], { concurrency })","- wf.synthesize({ inputs, rubric }); inputs may be an array of materials, one already-formatted string, or a named object of materials","- wf.artifact(name, value), wf.log({ message, data })","- Return shapes: wf.runAgent/wf.wait return { taskId, name, status, finalText, digest?, verification?, usage }; wf.snapshot returns { taskId, name, status, lastText? }; wf.synthesize returns { text }; wf.artifact returns { name, path? }.","- Important naming trap: never use anyVariable.output in generated source. Agent results use finalText; synthesis results use text; task snapshots use lastText.","- Always await asynchronous workflow calls, especially wf.artifact(...), before returning.","- For fan-out, prefer wf.parallel with thunks that call wf.runAgent; if using wf.spawnAgent, always wait or stop each handle so maxConcurrency capacity can release.","- Keep intermediate findings in local variables and pass their finalText/text values forward; artifacts are durable outputs, not mutable args.","- File-writing/implementation requests are not report-only workflows. If the user asks to create, update, land, implement, or write project files, set manifest.readOnly=false, use readOnly:false child agents for the writing phases, give exact target paths in the prompt, and include verification:{ requiresMutation:true, requiredChangedPaths:[...], rejectPreparatoryFinalText:true } whenever target paths are knowable.","- Never put placeholder paths such as vNEXT.md or TODO.md in requiredChangedPaths. If the exact path is not knowable, omit requiredChangedPaths and keep requiresMutation:true.","- A write child must not ask the user to confirm routine filenames or version numbers already inferable from the request/context; it should choose the minimal project-consistent target paths, write them, and report what changed.",'- Prefer shared-cwd for write children. Do not set isolation:"worktree" for writing phases unless the workflow has an explicit merge-back strategy; isolated write evidence is not a delivered project change.',"- The outer run function must return displayable final text, preferably { synthesis: finalText }. Returning only inside a wf.phase callback is invalid. Artifact-only or empty returns are invalid.",'- Also await wf.artifact("final-report", { summary/report/text: finalText }) for durable inspection when a final report is produced.','- For multi-line prompts, rubrics, or report templates inside source, use JavaScript template literals (`...`) or arrays joined with "\\n"; never place raw newlines inside single-quoted or double-quoted strings.',"- Do not ask child agents to emit special transcript marker blocks. KodaX derives child-agent transcript digests after each child finishes; child prompts should focus on the actual work product and final report.","","Canonical source field-usage pattern to follow; adapt agent count, names, phases, and prompts to the task:","async function run(wf, args) {",' const first = await wf.runAgent({ name: "first-pass", prompt: String(args.request || ""), readOnly: true });',' const second = await wf.runAgent({ name: "second-pass", prompt: first.finalText, readOnly: true });',' const synthesis = await wf.synthesize({ inputs: [first.finalText, second.finalText], rubric: "Synthesize a final answer." });'," const finalText = synthesis.text;",' await wf.artifact("final-report", { report: finalText });'," return { synthesis: finalText };","}","","Canonical write-and-verify pattern for requests that must land project files:","async function run(wf, args) {",' const request = String(args.request || "Implement the requested project change.");'," const targetPaths = Array.isArray(args.targetPaths) ? args.targetPaths.map(String).filter(Boolean) : [];"," const writer = await wf.runAgent({",' name: "implementation-writer",'," prompt: [",' "Implement the requested project change in the real workspace.",',' "Use project conventions, write the files, and do not stop at a plan.",',' targetPaths.length ? "Target paths: " + targetPaths.join(", ") : "Choose the minimal project-consistent target paths.",'," request",' ].join("\\n"),'," readOnly: false,"," verification: {"," requiresMutation: true,"," ...(targetPaths.length ? { requiredChangedPaths: targetPaths } : {}),"," rejectPreparatoryFinalText: true"," }"," });"," const finalText = writer.finalText;",' await wf.artifact("final-report", { report: finalText, verification: writer.verification });'," return { synthesis: finalText, verification: writer.verification };","}","",`Supported pattern ids: ${$i.join(", ")}`,"","Manifest requirements:","- name, description, phases, readOnly, maxAgents, maxConcurrency, optional plannedAgents, optional tokenBudget",'- phases must be a JSON array of non-empty string literals, for example ["investigate","verify","synthesize"]; never return phase objects or a single string',"- maxAgents and maxConcurrency must be positive JSON integers","- plannedAgents is the best estimate of how many child agents this script will normally launch; it is for progress display and must be no larger than maxAgents","- maxAgents is a lifetime total cap for every wf.runAgent, wf.spawnAgent, and wf.synthesize call in the whole run, not the parallel lane count; reserve enough for all phases plus synthesis","- Do not set tokenBudget unless the user explicitly asks for a token/resource budget; omit it for normal complex work","- readOnly must be a JSON boolean","- optional mayUseWorktree when child prompts need isolated worktrees","- patterns must use only supported ids","- Use the same natural language as the task request for manifest description, approvalSummary, child agent prompts, synthesis rubric, and artifact text unless the user explicitly asks otherwise","","Return JSON only."].join(`
296
- `)}o(cl,"buildWorkflowGenerationUserPrompt");async function hw(e,t){let n=es(e),r=ts(e);if(n.length===0&&r.length===0)return;let i=t.context?.gitRoot??t.context?.executionCwd??process.cwd(),s=t.context?.executionCwd??i,c=Ti(i);c.size===0&&await bi(i);let a={workingDirectory:s,projectRoot:i,environment:{}},l=[...n,...r.filter(m=>!n.includes(m)&&c.has(m))];if(l.length===0)return;let u=[];for(let m of n)if(!c.has(m)){let d=c.list().map(f=>f.name).sort().join(", ");throw new Error(`workflow generation referenced unknown skill "${m}". Available skills: ${d||"(none)"}`)}for(let m of l){let d=await c.loadFull(m),f=await Ei(d,"",a);if(f.disableModelInvocation)throw new Error(`workflow generation referenced disabled skill "${m}"`);u.push(f.content)}return u.join(`
295
+ `||u==="\r"))return e.slice(c,l).trim()}return e.slice(c,t.end).trim()}}}o(il,"findTopLevelReturnExpression");function sl(e){let t=ol(e);if(t)return il(e,t)}o(sl,"findOuterRunReturnExpression");function pw(e){let t=ol(e);if(!t)return[];let n=st(e),r=[],i=t.start,s=1;for(let a=t.start;a<t.end;a+=1){let l=n[a];if(l==="{"||l==="("||l==="["){s+=1;continue}if(l==="}"||l===")"||l==="]"){s-=1;continue}if(l===";"&&s===1){let u=e.slice(i,a+1).trim();u&&r.push(u),i=a+1}}let c=e.slice(i,t.end).trim();return c&&r.push(c),r}o(pw,"findOuterRunStatements");function hw(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}o(hw,"escapeRegExp");function gw(e,t){let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/.exec(t.trim())?.[0];if(!n)return!1;let r=hw(n),i=new RegExp(`^\\s*(?:const|let|var)\\s+${r}\\s*=\\s*(?:await\\s+)?wf\\s*\\.\\s*artifact\\b`),s=new RegExp(`^\\s*${r}\\s*=\\s*(?:await\\s+)?wf\\s*\\.\\s*artifact\\b`);return pw(e).some(c=>i.test(c)||s.test(c))}o(gw,"isReturnedArtifactHandle");function nl(e,t,n,r){let i=0;for(let s=t;s<e.length;s+=1){let c=e[s];if(c===n&&(i+=1),c===r&&(i-=1,i===0))return s}}o(nl,"findMatchingDelimiter");function ww(e,t,n){let r=0;for(let i=t;i<n;i+=1){let s=e[i];if(s==="("||s==="["||s==="{"){r+=1;continue}if(s===")"||s==="]"||s==="}"){r-=1;continue}if(s===","&&r===0)return i}}o(ww,"findTopLevelComma");function kw(e){let t=st(e),n=/^\s*(?:await\s+)?wf\s*\.\s*phase\s*\(/.exec(t);if(!n)return;let r=t.indexOf("(",n.index);if(r<0)return;let i=nl(t,r,"(",")");if(i===void 0)return;let s=ww(t,r+1,i);if(s===void 0)return;let c=e.slice(s+1,i).trim(),a=st(c),l=a.indexOf("=>");if(l<0)return;let u=l+2,m=a.slice(u).search(/\S/);if(m<0)return;let d=u+m;if(a[d]!=="{")return c.slice(d).trim();let f=nl(a,d,"{","}");if(f!==void 0)return il(c,{start:d+1,end:f})}o(kw,"findPhaseCallbackReturnExpression");function rl(e,t){return new RegExp(`^(?:await\\s+)?wf\\s*\\.\\s*${t}\\b`).test(e.trim())}o(rl,"isDirectWorkflowCall");function al(e,t){let n=t.trim();if(/^(?:undefined|null|void\s+0|\{\s*\}|\[\s*\]|''|""|``)$/.test(n)||rl(n,"artifact")||gw(e,n))return!1;if(rl(n,"phase")){let r=kw(n);return r!==void 0&&al(n,r)}return!0}o(al,"isDisplayableReturnExpression");function yw(e){let t=sl(e);return t?al(e,t):!1}o(yw,"hasDisplayableRunReturn");function vw(e){try{ut(e,{filename:"generated-workflow.js",requireAsyncRun:!0,checkSourcePolicy:!1})}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`workflow generation source has invalid JavaScript syntax: ${n}`)}}o(vw,"assertGeneratedWorkflowSyntax");function Tw(){let e=0,t=new Map,n=o(i=>{e+=1;let s=`smoke-${e}`;return t.set(s,i),{taskId:s,name:i}},"nextHandle"),r=o((i,s)=>{let c=t.get(i)??s??i;return{taskId:i,name:c,status:"completed",finalText:`Smoke result for ${c}: completed, done, verified.`}},"resultFor");return{runId:"run-smoke",args:void 0,budget:{total:null,spent:o(()=>0,"spent"),remaining:o(()=>1/0,"remaining")},phase:o(async(i,s)=>s(),"phase"),spawnAgent:o(async i=>n(i.name),"spawnAgent"),runAgent:o(async i=>{let s=n(i.name);return r(s.taskId,i.name)},"runAgent"),wait:o(async i=>r(i),"wait"),snapshot:o(async i=>({taskId:i,name:t.get(i)??i,status:"completed",lastText:`Smoke snapshot for ${t.get(i)??i}`}),"snapshot"),output:o(async i=>({taskId:i,name:t.get(i)??i,status:"completed",lastText:`Smoke snapshot for ${t.get(i)??i}`}),"output"),send:o(async()=>{},"send"),stop:o(async()=>{},"stop"),parallel:o(async i=>Promise.all(i.map(s=>s())),"parallel"),synthesize:o(async()=>({text:"Smoke synthesis: completed, done, verified."}),"synthesize"),artifact:o(async i=>({name:i}),"artifact"),log:o(()=>{},"log")}}o(Tw,"createSmokeWorkflowApi");async function bw(e){try{await Li({source:e.source,wf:Tw(),args:{request:e.request},filename:"generated-workflow-smoke.js",timeoutMs:rw})}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`workflow generation source failed safe smoke validation: ${n}`)}}o(bw,"assertGeneratedWorkflowSmoke");function Ew(e){if(e.trim().length===0)throw new Error("workflow generation source must be non-empty");if(!/\basync\s+function\s+run\s*\(/.test(e))throw new Error("workflow generation source must define async function run(wf, args)");vw(e);let t=st(e);for(let n of ow)if(n.pattern.test(t))throw new Error(`forbidden generated workflow token: ${n.id}`);if(/\.\s*output\b/.test(t))throw/\bwf\s*\.\s*output\s*\(/.test(t)?new Error("workflow generation source must use wf.snapshot(taskId) instead of legacy wf.output(taskId)"):new Error("workflow generation source must use finalText/text instead of non-existent .output");for(let n of t.split(/\r?\n/)){let r=n.search(/\bwf\.artifact\s*\(/);if(r>=0&&!/\b(?:await|return)\b/.test(n.slice(0,r)))throw new Error("workflow generation source must await wf.artifact(...)")}if(!yw(e)){let n=sl(e),r=n===void 0?"no top-level `return` was found in run() \u2014 a return inside a wf.phase(...) callback does not count":`the top-level return \`${n.slice(0,80)}\` is not displayable \u2014 do not return undefined/null/{}, a bare wf.artifact(...) write, or a wf.phase(...) without a displayable callback return`;throw new Error(`workflow generation source outer run function must return displayable final text (${r})`)}return e}o(Ew,"validateGeneratedWorkflowSource");function xw(e){let t=e?.trim();return t?["","Referenced skill instructions (authoritative):",t,"","Skill handling requirements:","- Treat the referenced skill instructions above as binding requirements for this workflow generation.","- Preserve skill-specific file layout, naming, and process requirements in child-agent prompts that do the work.",'- Do not replace concrete skill requirements with vague paths such as "or similar"; choose paths from the skill or instruct the child to invoke the skill before acting.']:[]}o(xw,"buildReferencedSkillPromptSection");function cl(e,t){return["Task request:",e,...xw(t),"","Available WorkflowApi calls:","- wf.phase(name, async () => ...)","- wf.spawnAgent({ name, prompt, readOnly, modelHint, isolation, evidenceRefs, verification })","- wf.runAgent({ name, prompt, readOnly, modelHint, isolation, evidenceRefs, verification })","- wf.wait(taskId), wf.snapshot(taskId), wf.send(taskId, content), wf.stop(taskId, reason)","- wf.parallel([() => promise], { concurrency })","- wf.synthesize({ inputs, rubric }); inputs may be an array of materials, one already-formatted string, or a named object of materials","- wf.artifact(name, value), wf.log({ message, data })","- Return shapes: wf.runAgent/wf.wait return { taskId, name, status, finalText, digest?, verification?, usage }; wf.snapshot returns { taskId, name, status, lastText? }; wf.synthesize returns { text }; wf.artifact returns { name, path? }.","- Important naming trap: never use anyVariable.output in generated source. Agent results use finalText; synthesis results use text; task snapshots use lastText.","- Always await asynchronous workflow calls, especially wf.artifact(...), before returning.","- For fan-out, prefer wf.parallel with thunks that call wf.runAgent; if using wf.spawnAgent, always wait or stop each handle so maxConcurrency capacity can release.","- Keep intermediate findings in local variables and pass their finalText/text values forward; artifacts are durable outputs, not mutable args.","- File-writing/implementation requests are not report-only workflows. If the user asks to create, update, land, implement, or write project files, set manifest.readOnly=false, use readOnly:false child agents for the writing phases, give exact target paths in the prompt, and include verification:{ requiresMutation:true, requiredChangedPaths:[...], rejectPreparatoryFinalText:true } whenever target paths are knowable.","- Never put placeholder paths such as vNEXT.md or TODO.md in requiredChangedPaths. If the exact path is not knowable, omit requiredChangedPaths and keep requiresMutation:true.","- A write child must not ask the user to confirm routine filenames or version numbers already inferable from the request/context; it should choose the minimal project-consistent target paths, write them, and report what changed.",'- Prefer shared-cwd for write children. Do not set isolation:"worktree" for writing phases unless the workflow has an explicit merge-back strategy; isolated write evidence is not a delivered project change.',"- The outer run function must return displayable final text, preferably { synthesis: finalText }. Returning only inside a wf.phase callback is invalid. Artifact-only or empty returns are invalid.",'- Also await wf.artifact("final-report", { summary/report/text: finalText }) for durable inspection when a final report is produced.','- For multi-line prompts, rubrics, or report templates inside source, use JavaScript template literals (`...`) or arrays joined with "\\n"; never place raw newlines inside single-quoted or double-quoted strings.',"- Do not ask child agents to emit special transcript marker blocks. KodaX derives child-agent transcript digests after each child finishes; child prompts should focus on the actual work product and final report.","","Canonical source field-usage pattern to follow; adapt agent count, names, phases, and prompts to the task:","async function run(wf, args) {",' const first = await wf.runAgent({ name: "first-pass", prompt: String(args.request || ""), readOnly: true });',' const second = await wf.runAgent({ name: "second-pass", prompt: first.finalText, readOnly: true });',' const synthesis = await wf.synthesize({ inputs: [first.finalText, second.finalText], rubric: "Synthesize a final answer." });'," const finalText = synthesis.text;",' await wf.artifact("final-report", { report: finalText });'," return { synthesis: finalText };","}","","Canonical write-and-verify pattern for requests that must land project files:","async function run(wf, args) {",' const request = String(args.request || "Implement the requested project change.");'," const targetPaths = Array.isArray(args.targetPaths) ? args.targetPaths.map(String).filter(Boolean) : [];"," const writer = await wf.runAgent({",' name: "implementation-writer",'," prompt: [",' "Implement the requested project change in the real workspace.",',' "Use project conventions, write the files, and do not stop at a plan.",',' targetPaths.length ? "Target paths: " + targetPaths.join(", ") : "Choose the minimal project-consistent target paths.",'," request",' ].join("\\n"),'," readOnly: false,"," verification: {"," requiresMutation: true,"," ...(targetPaths.length ? { requiredChangedPaths: targetPaths } : {}),"," rejectPreparatoryFinalText: true"," }"," });"," const finalText = writer.finalText;",' await wf.artifact("final-report", { report: finalText, verification: writer.verification });'," return { synthesis: finalText, verification: writer.verification };","}","",`Supported pattern ids: ${$i.join(", ")}`,"","Manifest requirements:","- name, description, phases, readOnly, maxAgents, maxConcurrency, optional plannedAgents, optional tokenBudget",'- phases must be a JSON array of non-empty string literals, for example ["investigate","verify","synthesize"]; never return phase objects or a single string',"- maxAgents and maxConcurrency must be positive JSON integers","- plannedAgents is the best estimate of how many child agents this script will normally launch; it is for progress display and must be no larger than maxAgents","- maxAgents is a lifetime total cap for every wf.runAgent, wf.spawnAgent, and wf.synthesize call in the whole run, not the parallel lane count; reserve enough for all phases plus synthesis","- Do not set tokenBudget unless the user explicitly asks for a token/resource budget; omit it for normal complex work","- readOnly must be a JSON boolean","- optional mayUseWorktree when child prompts need isolated worktrees","- patterns must use only supported ids","- Use the same natural language as the task request for manifest description, approvalSummary, child agent prompts, synthesis rubric, and artifact text unless the user explicitly asks otherwise","","Return JSON only."].join(`
296
+ `)}o(cl,"buildWorkflowGenerationUserPrompt");async function Rw(e,t){let n=es(e),r=ts(e);if(n.length===0&&r.length===0)return;let i=t.context?.gitRoot??t.context?.executionCwd??process.cwd(),s=t.context?.executionCwd??i,c=Ti(i);c.size===0&&await bi(i);let a={workingDirectory:s,projectRoot:i,environment:{}},l=[...n,...r.filter(m=>!n.includes(m)&&c.has(m))];if(l.length===0)return;let u=[];for(let m of n)if(!c.has(m)){let d=c.list().map(f=>f.name).sort().join(", ");throw new Error(`workflow generation referenced unknown skill "${m}". Available skills: ${d||"(none)"}`)}for(let m of l){let d=await c.loadFull(m),f=await Ei(d,"",a);if(f.disableModelInvocation)throw new Error(`workflow generation referenced disabled skill "${m}"`);u.push(f.content)}return u.join(`
297
297
 
298
- `)}o(hw,"buildWorkflowGenerationSkillContext");function gw(e){let t=["- Replace result.output from wf.runAgent(...) or wf.wait(...) with result.finalText.","- Replace result.output from wf.synthesize(...) with result.text.","- Keep the outer run() return displayable, such as { synthesis: finalText }.",'- Fix generated JavaScript harness errors, including ReferenceError, wrong wf.* argument shapes, and multi-line prompts/rubrics that need template literals or "\\n".'];return(/\bwf\s*\.\s*output\s*\(/.test(e.previousOutput)||e.error.includes("wf.snapshot(taskId)"))&&t.splice(2,0,"- Replace wf.output(taskId) with wf.snapshot(taskId) for in-flight task snapshots."),[cl(e.request,e.skillContext),"","Your previous output failed KodaX workflow validation.",`Repair attempt: ${e.attempt} of ${e.maxAttempts}.`,`Validation error: ${e.error}`,"","Common contract fixes:",...t,"","Previous output:",e.previousOutput,"","Return corrected JSON only. Keep the same task intent, but make the manifest and source valid."].join(`
299
- `)}o(gw,"buildWorkflowGenerationRepairPrompt");function ww(e){return/(?:token\s*(?:budget|limit|cap)|budget\s*(?:for|of)?\s*tokens?|\b\d+(?:\.\d+)?\s*(?:k|m)?\s*tokens?\b|\d+(?:\.\d+)?\s*(?:k|m)?\s*令牌|(?:tokens?|令牌).{0,12}(?:预算|上限|限制)|(?:预算|上限|限制).{0,12}(?:tokens?|令牌))/i.test(e)}o(ww,"requestExplicitlyMentionsTokenBudget");function kw(e,t){if(e.tokenBudget===void 0||t===void 0||ww(t))return e;let{tokenBudget:n,...r}=e;return r}o(kw,"stripImplicitTokenBudget");function yw(e,t={}){let n=Qg(e),r=n.action;if(r==="decline")return{kind:"declined",reason:el(n,"reason"),rawText:e};if(r!=="generate")throw new Error('workflow generation action must be "generate" or "decline"');let i=mw(el(n,"source")),s=kw(rw(ge(tw(n.manifest)),i),t.request),c=typeof n.approvalSummary=="string"&&n.approvalSummary.trim().length>0?n.approvalSummary:s.description;return{kind:"generated",manifest:s,source:i,module:Ht({manifest:s,source:i}),scriptSnapshot:{manifest:s,source:i},approvalSummary:c,rawText:e}}o(yw,"parseWorkflowGeneration");async function vw(e){let t=e.request.trim();if(!t)return{kind:"declined",reason:"Workflow request is empty.",rawText:""};let n=Vg+1,r=cl(t,e.skillContext),i="";for(let s=1;s<=n;s+=1){let c=await e.generateText({system:Hg,prompt:r,...e.signal?{signal:e.signal}:{}});try{let a=yw(c,{request:t});return a.kind==="generated"&&await fw({source:a.source,request:t}),a}catch(a){if(i=a instanceof Error?a.message:String(a),s>=n)break;r=gw({request:t,...e.skillContext?{skillContext:e.skillContext}:{},previousOutput:c,error:i,attempt:s+1,maxAttempts:n})}}throw new Error(`workflow generation did not produce a valid workflow after ${n} attempts. Last validation error: ${i}`)}o(vw,"generateWorkflow");async function d_(e){let t=ie(e.options.provider),n=e.options.modelOverride??e.options.model??t.getModel(),r=e.timeoutMs??zg(),i=e.skillContext??await hw(e.request,e.options);return vw({request:e.request,...i?{skillContext:i}:{},...e.signal?{signal:e.signal}:{},generateText:o(async s=>{let c=[{role:"user",content:s.prompt}],a=await Xe({provider:t,model:n,system:s.system,messages:c,querySource:"workflow-generation",timeoutMs:r,...s.signal?{abortSignal:s.signal}:{}});if(!a.text.trim()){let l=a.error?`: ${a.error.message}`:"",u=a.stopReason==="timeout"?` after ${r}ms`:"";throw new Error(`workflow generation failed (${a.stopReason}${u})${l}`)}return a.text},"generateText")})}o(d_,"generateWorkflowFromOptions");var Tw=`
298
+ `)}o(Rw,"buildWorkflowGenerationSkillContext");function Sw(e){let t=["- Replace result.output from wf.runAgent(...) or wf.wait(...) with result.finalText.","- Replace result.output from wf.synthesize(...) with result.text.","- Keep the outer run() return displayable, such as { synthesis: finalText }.",'- Fix generated JavaScript harness errors, including ReferenceError, wrong wf.* argument shapes, and multi-line prompts/rubrics that need template literals or "\\n".'];return(/\bwf\s*\.\s*output\s*\(/.test(e.previousOutput)||e.error.includes("wf.snapshot(taskId)"))&&t.splice(2,0,"- Replace wf.output(taskId) with wf.snapshot(taskId) for in-flight task snapshots."),[cl(e.request,e.skillContext),"","Your previous output failed KodaX workflow validation.",`Repair attempt: ${e.attempt} of ${e.maxAttempts}.`,`Validation error: ${e.error}`,"","Common contract fixes:",...t,"","Previous output:",e.previousOutput,"","Return corrected JSON only. Keep the same task intent, but make the manifest and source valid."].join(`
299
+ `)}o(Sw,"buildWorkflowGenerationRepairPrompt");function _w(e){return/(?:token\s*(?:budget|limit|cap)|budget\s*(?:for|of)?\s*tokens?|\b\d+(?:\.\d+)?\s*(?:k|m)?\s*tokens?\b|\d+(?:\.\d+)?\s*(?:k|m)?\s*令牌|(?:tokens?|令牌).{0,12}(?:预算|上限|限制)|(?:预算|上限|限制).{0,12}(?:tokens?|令牌))/i.test(e)}o(_w,"requestExplicitlyMentionsTokenBudget");function Aw(e,t){if(e.tokenBudget===void 0||t===void 0||_w(t))return e;let{tokenBudget:n,...r}=e;return r}o(Aw,"stripImplicitTokenBudget");function Cw(e,t={}){let n=cw(e),r=n.action;if(r==="decline")return{kind:"declined",reason:el(n,"reason"),rawText:e};if(r!=="generate")throw new Error('workflow generation action must be "generate" or "decline"');let i=Ew(el(n,"source")),s=Aw(mw(ge(uw(n.manifest)),i),t.request),c=typeof n.approvalSummary=="string"&&n.approvalSummary.trim().length>0?n.approvalSummary:s.description;return{kind:"generated",manifest:s,source:i,module:Ht({manifest:s,source:i}),scriptSnapshot:{manifest:s,source:i},approvalSummary:c,rawText:e}}o(Cw,"parseWorkflowGeneration");async function Mw(e){let t=e.request.trim();if(!t)return{kind:"declined",reason:"Workflow request is empty.",rawText:""};let n=nw+1,r=cl(t,e.skillContext),i="";for(let s=1;s<=n;s+=1){let c=await e.generateText({system:Zg,prompt:r,...e.signal?{signal:e.signal}:{}});try{let a=Cw(c,{request:t});return a.kind==="generated"&&await bw({source:a.source,request:t}),a}catch(a){if(i=a instanceof Error?a.message:String(a),s>=n)break;r=Sw({request:t,...e.skillContext?{skillContext:e.skillContext}:{},previousOutput:c,error:i,attempt:s+1,maxAttempts:n})}}throw new Error(`workflow generation did not produce a valid workflow after ${n} attempts. Last validation error: ${i}`)}o(Mw,"generateWorkflow");async function v_(e){let t=ie(e.options.provider),n=e.options.modelOverride??e.options.model??t.getModel(),r=e.timeoutMs??iw(),i=e.skillContext??await Rw(e.request,e.options);return Mw({request:e.request,...i?{skillContext:i}:{},...e.signal?{signal:e.signal}:{},generateText:o(async s=>{let c=[{role:"user",content:s.prompt}],a=await Xe({provider:t,model:n,system:s.system,messages:c,querySource:"workflow-generation",timeoutMs:r,...s.signal?{abortSignal:s.signal}:{}});if(!a.text.trim()){let l=a.error?`: ${a.error.message}`:"",u=a.stopReason==="timeout"?` after ${r}ms`:"";throw new Error(`workflow generation failed (${a.stopReason}${u})${l}`)}return a.text},"generateText")})}o(v_,"generateWorkflowFromOptions");var Ow=`
300
300
  async function run(wf, args) {
301
301
  const request = args.request ?? args.question ?? "Split the task and synthesize the results.";
302
302
  const angles = ["scope", "evidence", "risks", "recommendation"];
@@ -314,7 +314,7 @@ async function run(wf, args) {
314
314
  rubric: "Merge the independent findings into one deduplicated answer with clear conclusions."
315
315
  });
316
316
  }
317
- `.trim(),bw=`
317
+ `.trim(),Iw=`
318
318
  async function run(wf, args) {
319
319
  const request = args.request ?? args.question ?? "Review the target work.";
320
320
  return await wf.phase("adversarial-verification", async () => {
@@ -337,7 +337,7 @@ async function run(wf, args) {
337
337
  });
338
338
  });
339
339
  }
340
- `.trim(),Ew=`
340
+ `.trim(),Pw=`
341
341
  async function run(wf, args) {
342
342
  const request = args.request ?? args.question ?? "Find the best option.";
343
343
  const approaches = ["conservative", "creative", "risk-focused"];
@@ -355,7 +355,7 @@ async function run(wf, args) {
355
355
  rubric: "Judge pairwise, explain tradeoffs, and pick the top result."
356
356
  });
357
357
  }
358
- `.trim(),xw=`
358
+ `.trim(),Nw=`
359
359
  async function run(wf, args) {
360
360
  const request = args.request ?? args.question ?? "Investigate until no new findings remain.";
361
361
  const findings = [];
@@ -374,7 +374,7 @@ async function run(wf, args) {
374
374
  rubric: "Deduplicate findings and clearly state whether more work remains."
375
375
  });
376
376
  }
377
- `.trim(),Rw=`
377
+ `.trim(),Dw=`
378
378
  async function run(wf, args) {
379
379
  const request = args.request ?? args.question ?? "Generate options and filter them.";
380
380
  const generated = await wf.parallel(
@@ -397,7 +397,7 @@ async function run(wf, args) {
397
397
  rubric: "Return only the strongest candidates with reasons."
398
398
  });
399
399
  }
400
- `.trim(),Sw=`
400
+ `.trim(),$w=`
401
401
  async function run(wf, args) {
402
402
  const request = args.request ?? args.question ?? "Classify and route this task.";
403
403
  const classification = await wf.runAgent({
@@ -422,4 +422,4 @@ async function run(wf, args) {
422
422
  rubric: "Explain the route and final result."
423
423
  });
424
424
  }
425
- `.trim();function at(e,t,n,r,i,s){return ge({name:e,description:t,phases:r,readOnly:s,maxAgents:i,maxConcurrency:Math.min(4,i),tokenBudget:2e4,mayUseWorktree:!s,patterns:n})}o(at,"manifest");var dl=[{name:"fan-out-and-synthesize",pattern:"fan-out-and-synthesize",description:"Run independent read-only workers in parallel, then synthesize their findings.",manifest:at("fan-out-and-synthesize-template","Parallel workers followed by a synthesis barrier.",["fan-out-and-synthesize"],["fan-out","synthesize"],5,!0),source:Tw},{name:"adversarial-verification",pattern:"adversarial-verification",description:"Generate a candidate answer, then attack it with an independent verifier.",manifest:at("adversarial-verification-template","Candidate worker plus adversarial verifier.",["adversarial-verification"],["adversarial-verification","synthesize"],3,!0),source:bw},{name:"tournament",pattern:"tournament",description:"Run competing approaches and pick the best result.",manifest:at("tournament-template","Competing agents judged by synthesis.",["tournament"],["contest","judge"],4,!0),source:Ew},{name:"loop-until-done",pattern:"loop-until-done",description:"Repeat bounded investigation rounds until no new findings remain.",manifest:at("loop-until-done-template","Bounded investigation loop with a stop phrase.",["loop-until-done"],["iterate","synthesize"],4,!0),source:xw},{name:"generate-and-filter",pattern:"generate-and-filter",description:"Generate several candidates, then dedupe and rank them.",manifest:at("generate-and-filter-template","Parallel generators with a filter pass.",["generate-and-filter","fan-out-and-synthesize"],["generate","filter","synthesize"],6,!0),source:Rw},{name:"classify-and-act",pattern:"classify-and-act",description:"Classify the task, then route to the appropriate worker behavior.",manifest:at("classify-and-act-template","Classifier-routed worker workflow.",["classify-and-act"],["classify","act","synthesize"],3,!0),source:Sw}];function m_(){return dl}o(m_,"listWorkflowPatternTemplates");function _w(e){return dl.find(t=>t.name===e)}o(_w,"getWorkflowPatternTemplate");function p_(e){let t=_w(e);if(!t)throw new Error(`unknown workflow pattern template: ${e}`);return Ht({manifest:t.manifest,source:t.source})}o(p_,"createWorkflowPatternTemplateModule");var Aw=[/\b(?:do not|don't|dont|without|avoid|skip|no)\s+(?:using\s+|use\s+)?(?:a\s+|an\s+|the\s+)?(?:workflow|workflows|multi[- ]?agent|multi agent)\b/iu,/(?:不要|别|不用|不要使用|不使用|禁止|避免|跳过)\s*(?:使用|用)?\s*(?:workflow|工作流|多\s*agent|多智能体)/iu],Cw=[/\b(?:use|run|start|create|build|generate|make|launch|set\s+up|setup)\s+(?:a\s+|an\s+|the\s+)?(?:dynamic\s+|multi[- ]?agent\s+)?workflow\b/iu,/\bworkflow\s+(?:for|to)\b/iu,/(?:用|使用|建立|创建|新建|生成|启动|运行|跑|建)\s*(?:一个|这个|该)?\s*(?:workflow|工作流)/iu,/(?:workflow|工作流)\s*(?:来|去|用于|帮我|执行|运行)/iu],Mw=[/\b(?:fan[- ]?out|multi[- ]?agent|parallel agents?|competing hypotheses|independent hypotheses)\b/iu,/(?:互相独立|竞争假设|竞品假设|并行|多\s*agent|多智能体)/iu],Ow=[/\b(?:batch|many|multiple|several|three|3)\b/iu,/\b(?:compare|competing|independent|hypotheses|hypothesis)\b/iu,/\b(?:verify|verification|audit|review|rank|sort|dedupe|filter)\b/iu,/\b(?:loop until done|deep research|triage|root cause)\b/iu,/(?:批量|大量|多个|多份|几十|上百|三个|多角度|多视角)/iu,/(?:验证|审计|评审|排序|筛选|去重|循环|直到完成|深度研究|根因|排查)/iu];function ni(e,t){return t.some(n=>n.test(e))}o(ni,"matchesAny");function Iw(e){return ni(e,Mw)?2:Ow.reduce((t,n)=>t+(n.test(e)?1:0),0)}o(Iw,"workflowComplexityScore");function ye(e,t,n){return{action:e,trigger:t,reason:n}}o(ye,"decision");function w_(e){let t=e.input.trim();if(!t)return ye("none","none","empty input");if(ni(t,Aw))return ye("none","negated","user explicitly rejected workflow or multi-agent execution");let n=e.source==="command"||ni(t,Cw),r=Iw(t)>=2;if(!n&&!r)return ye("none","none","no workflow trigger detected");if(e.agentMode==="amaw"){if(e.source==="natural-language"){if(e.hostPolicy?.autoStart==="off")return ye("none",n?"explicit":"complexity","host policy disabled natural-language workflow auto-start");if(e.hostPolicy?.autoStart==="confirm")return ye("suggest",n?"explicit":"complexity","host policy requires confirmation before workflow auto-start")}return ye("auto-start",n?"explicit":"complexity","AMAW starts capability-generated workflows automatically")}return e.source==="command"?ye("suggest","explicit","command requested workflow execution"):e.agentMode==="ama"?ye("none",n?"explicit":"complexity","AMA only starts workflows from explicit /workflow commands"):ye("none",n?"explicit":"complexity","SA does not route natural-language prompts into workflow")}o(w_,"decideWorkflowInvocation");function k_(e){return e.outcome==="started"||e.outcome==="cancelled"}o(k_,"workflowStartOutcomeConsumesTurn");function Pw(e){return{meta:e.meta,run:o((t,n)=>e.run(t,n),"run")}}o(Pw,"erase");var ll=[Pw(id)];function b_(e){return ll.find(t=>t.meta.name===e)}o(b_,"getBuiltinWorkflow");function E_(){return ll.map(e=>e.meta)}o(E_,"listBuiltinWorkflows");export{Ur as a,Fr as b,Br as c,Ol as d,Il as e,Wr as f,Hr as g,Gr as h,qr as i,Bs as j,Fl as k,on as l,Wl as m,Hl as n,Hs as o,Gl as p,sn as q,ql as r,Vl as s,Kl as t,nc as u,so as v,mn as w,ic as x,Be as y,pn as z,hn as A,gn as B,sc as C,rm as D,Pc as E,uo as F,$c as G,Uc as H,Lm as I,Bm as J,Wm as K,Hm as L,Gm as M,Et as N,xt as O,qm as P,ho as Q,Vm as R,go as S,Xm as T,zm as U,Ym as V,wo as W,ko as X,Vc as Y,Kc as Z,yo as _,vo as $,To as aa,yn as ba,xo as ca,kp as da,vn as ea,vp as fa,Ep as ga,Ap as ha,Cp as ia,Ro as ja,So as ka,_o as la,Tn as ma,Op as na,Ip as oa,Ao as pa,bn as qa,En as ra,Qc as sa,Co as ta,Mo as ua,Oo as va,Io as wa,Po as xa,nh as ya,ed as za,No as Aa,ih as Ba,nd as Ca,rd as Da,uh as Ea,od as Fa,mh as Ga,id as Ha,md as Ia,Mn as Ja,pd as Ka,Wo as La,eg as Ma,_t as Na,Go as Oa,xd as Pa,Mt as Qa,lg as Ra,Jo as Sa,$S as Ta,fg as Ua,Id as Va,Pd as Wa,Nd as Xa,LS as Ya,jS as Za,$d as _a,Tg as $a,HS as ab,Gd as bb,r_ as cb,Hg as db,Zd as eb,zg as fb,mw as gb,cl as hb,hw as ib,yw as jb,vw as kb,d_ as lb,m_ as mb,_w as nb,p_ as ob,w_ as pb,k_ as qb,ll as rb,b_ as sb,E_ as tb};
425
+ `.trim();function at(e,t,n,r,i,s){return ge({name:e,description:t,phases:r,readOnly:s,maxAgents:i,maxConcurrency:Math.min(4,i),tokenBudget:2e4,mayUseWorktree:!s,patterns:n})}o(at,"manifest");var dl=[{name:"fan-out-and-synthesize",pattern:"fan-out-and-synthesize",description:"Run independent read-only workers in parallel, then synthesize their findings.",manifest:at("fan-out-and-synthesize-template","Parallel workers followed by a synthesis barrier.",["fan-out-and-synthesize"],["fan-out","synthesize"],5,!0),source:Ow},{name:"adversarial-verification",pattern:"adversarial-verification",description:"Generate a candidate answer, then attack it with an independent verifier.",manifest:at("adversarial-verification-template","Candidate worker plus adversarial verifier.",["adversarial-verification"],["adversarial-verification","synthesize"],3,!0),source:Iw},{name:"tournament",pattern:"tournament",description:"Run competing approaches and pick the best result.",manifest:at("tournament-template","Competing agents judged by synthesis.",["tournament"],["contest","judge"],4,!0),source:Pw},{name:"loop-until-done",pattern:"loop-until-done",description:"Repeat bounded investigation rounds until no new findings remain.",manifest:at("loop-until-done-template","Bounded investigation loop with a stop phrase.",["loop-until-done"],["iterate","synthesize"],4,!0),source:Nw},{name:"generate-and-filter",pattern:"generate-and-filter",description:"Generate several candidates, then dedupe and rank them.",manifest:at("generate-and-filter-template","Parallel generators with a filter pass.",["generate-and-filter","fan-out-and-synthesize"],["generate","filter","synthesize"],6,!0),source:Dw},{name:"classify-and-act",pattern:"classify-and-act",description:"Classify the task, then route to the appropriate worker behavior.",manifest:at("classify-and-act-template","Classifier-routed worker workflow.",["classify-and-act"],["classify","act","synthesize"],3,!0),source:$w}];function x_(){return dl}o(x_,"listWorkflowPatternTemplates");function Lw(e){return dl.find(t=>t.name===e)}o(Lw,"getWorkflowPatternTemplate");function R_(e){let t=Lw(e);if(!t)throw new Error(`unknown workflow pattern template: ${e}`);return Ht({manifest:t.manifest,source:t.source})}o(R_,"createWorkflowPatternTemplateModule");var jw=[/\b(?:do not|don't|dont|without|avoid|skip|no)\s+(?:using\s+|use\s+)?(?:a\s+|an\s+|the\s+)?(?:workflow|workflows|multi[- ]?agent|multi agent)\b/iu,/(?:不要|别|不用|不要使用|不使用|禁止|避免|跳过)\s*(?:使用|用)?\s*(?:workflow|工作流|多\s*agent|多智能体)/iu],Uw=[/\b(?:use|run|start|create|build|generate|make|launch|set\s+up|setup)\s+(?:a\s+|an\s+|the\s+)?(?:dynamic\s+|multi[- ]?agent\s+)?workflow\b/iu,/\bworkflow\s+(?:for|to)\b/iu,/(?:用|使用|建立|创建|新建|生成|启动|运行|跑|建)\s*(?:一个|这个|该)?\s*(?:workflow|工作流)/iu,/(?:workflow|工作流)\s*(?:来|去|用于|帮我|执行|运行)/iu],Fw=[/\b(?:fan[- ]?out|multi[- ]?agent|parallel agents?|competing hypotheses|independent hypotheses)\b/iu,/(?:互相独立|竞争假设|竞品假设|并行|多\s*agent|多智能体)/iu],Bw=[/\b(?:batch|many|multiple|several|three|3)\b/iu,/\b(?:compare|competing|independent|hypotheses|hypothesis)\b/iu,/\b(?:verify|verification|audit|review|rank|sort|dedupe|filter)\b/iu,/\b(?:loop until done|deep research|triage|root cause)\b/iu,/(?:批量|大量|多个|多份|几十|上百|三个|多角度|多视角)/iu,/(?:验证|审计|评审|排序|筛选|去重|循环|直到完成|深度研究|根因|排查)/iu];function ni(e,t){return t.some(n=>n.test(e))}o(ni,"matchesAny");function Ww(e){return ni(e,Fw)?2:Bw.reduce((t,n)=>t+(n.test(e)?1:0),0)}o(Ww,"workflowComplexityScore");function ye(e,t,n){return{action:e,trigger:t,reason:n}}o(ye,"decision");function A_(e){let t=e.input.trim();if(!t)return ye("none","none","empty input");if(ni(t,jw))return ye("none","negated","user explicitly rejected workflow or multi-agent execution");let n=e.source==="command"||ni(t,Uw),r=Ww(t)>=2;if(!n&&!r)return ye("none","none","no workflow trigger detected");if(e.agentMode==="amaw"){if(e.source==="natural-language"){if(e.hostPolicy?.autoStart==="off")return ye("none",n?"explicit":"complexity","host policy disabled natural-language workflow auto-start");if(e.hostPolicy?.autoStart==="confirm")return ye("suggest",n?"explicit":"complexity","host policy requires confirmation before workflow auto-start")}return ye("auto-start",n?"explicit":"complexity","AMAW starts capability-generated workflows automatically")}return e.source==="command"?ye("suggest","explicit","command requested workflow execution"):e.agentMode==="ama"?ye("none",n?"explicit":"complexity","AMA only starts workflows from explicit /workflow commands"):ye("none",n?"explicit":"complexity","SA does not route natural-language prompts into workflow")}o(A_,"decideWorkflowInvocation");function C_(e){return e.outcome==="started"||e.outcome==="cancelled"}o(C_,"workflowStartOutcomeConsumesTurn");function Hw(e){return{meta:e.meta,run:o((t,n)=>e.run(t,n),"run")}}o(Hw,"erase");var ll=[Hw(id)];function P_(e){return ll.find(t=>t.meta.name===e)}o(P_,"getBuiltinWorkflow");function N_(){return ll.map(e=>e.meta)}o(N_,"listBuiltinWorkflows");export{Ur as a,Fr as b,Br as c,Ol as d,Il as e,Wr as f,Hr as g,Gr as h,qr as i,Bs as j,Fl as k,on as l,Wl as m,Hl as n,Hs as o,Gl as p,sn as q,ql as r,Vl as s,Kl as t,nc as u,so as v,mn as w,ic as x,Be as y,pn as z,hn as A,gn as B,sc as C,rm as D,Pc as E,uo as F,$c as G,Uc as H,Km as I,Jm as J,Qm as K,Zm as L,ep as M,Et as N,xt as O,tp as P,ho as Q,np as R,go as S,op as T,ip as U,sp as V,wo as W,ko as X,Vc as Y,Kc as Z,yo as _,vo as $,To as aa,yn as ba,xo as ca,Ap as da,vn as ea,Mp as fa,Pp as ga,jp as ha,Up as ia,Ro as ja,So as ka,_o as la,Tn as ma,Bp as na,Wp as oa,Ao as pa,bn as qa,En as ra,Qc as sa,Co as ta,Mo as ua,Oo as va,Io as wa,Po as xa,fh as ya,ed as za,No as Aa,hh as Ba,nd as Ca,rd as Da,Th as Ea,od as Fa,Eh as Ga,id as Ha,md as Ia,Mn as Ja,pd as Ka,Wo as La,lg as Ma,_t as Na,Go as Oa,xd as Pa,Mt as Qa,vg as Ra,Jo as Sa,KS as Ta,bg as Ua,Id as Va,Pd as Wa,Nd as Xa,XS as Ya,zS as Za,$d as _a,Og as $a,e_ as ab,Gd as bb,p_ as cb,Zg as db,Zd as eb,iw as fb,Ew as gb,cl as hb,Rw as ib,Cw as jb,Mw as kb,v_ as lb,x_ as mb,Lw as nb,R_ as ob,A_ as pb,C_ as qb,ll as rb,P_ as sb,N_ as tb};