@kodax-ai/kodax 0.7.63 → 0.7.66

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 (80) hide show
  1. package/CHANGELOG.md +2300 -2204
  2. package/README.md +79 -7
  3. package/README_CN.md +52 -3
  4. package/dist/chunks/{agent-SL444XLN.js → agent-KER4WDNO.js} +1 -1
  5. package/dist/chunks/argument-completer-HK3MHA3K.js +2 -0
  6. package/dist/chunks/{chunk-ARUWXX25.js → chunk-35P7QL2Q.js} +1 -1
  7. package/dist/chunks/chunk-3HKBBY74.js +339 -0
  8. package/dist/chunks/chunk-AKBH2EEE.js +8 -0
  9. package/dist/chunks/{chunk-KCFVGXVK.js → chunk-ALS32RNZ.js} +1 -1
  10. package/dist/chunks/chunk-MHRN2LQV.js +328 -0
  11. package/dist/chunks/{chunk-HP4FXMEM.js → chunk-NBQW7PNZ.js} +2 -2
  12. package/dist/chunks/{chunk-S4GVQO3W.js → chunk-O7N22GJ3.js} +1 -1
  13. package/dist/chunks/chunk-ONUPGMER.js +2 -0
  14. package/dist/chunks/{chunk-ZL5CEANW.js → chunk-PZTG2C33.js} +1 -1
  15. package/dist/chunks/{chunk-4MIHVNB7.js → chunk-QAQ2HNXD.js} +112 -112
  16. package/dist/chunks/{chunk-6OZ5KWG3.js → chunk-QJJKMNZF.js} +1 -1
  17. package/dist/chunks/chunk-QJVZZSEO.js +56 -0
  18. package/dist/chunks/chunk-TLJGOKBT.js +729 -0
  19. package/dist/chunks/{chunk-7MPU7TP6.js → chunk-VS4CDDEF.js} +243 -243
  20. package/dist/chunks/chunk-WBBEJIAY.js +306 -0
  21. package/dist/chunks/{chunk-L3MF5V64.js → chunk-WMIZCY2J.js} +1 -1
  22. package/dist/chunks/{chunk-UA744TZM.js → chunk-YRBNXFHY.js} +1 -1
  23. package/dist/chunks/compaction-config-7GMUFNPB.js +2 -0
  24. package/dist/chunks/{construction-bootstrap-EFZBONTK.js → construction-bootstrap-3XDS2D5K.js} +1 -1
  25. package/dist/chunks/{devtools-4CRULTR2.js → devtools-CD6KSIHE.js} +1 -1
  26. package/dist/chunks/{devtools-YINBSZC7.js → devtools-XR5F2C6T.js} +1 -1
  27. package/dist/chunks/{dist-73L4OYPD.js → dist-4PXB7U22.js} +1 -1
  28. package/dist/chunks/dist-4YAYT2TO.js +2 -0
  29. package/dist/chunks/host-KG3456QP.js +2 -0
  30. package/dist/chunks/{paste-FDYM7SZX.js → paste-C33GZQV5.js} +1 -1
  31. package/dist/chunks/run-manager-6CAH3KTA.js +2 -0
  32. package/dist/chunks/utils-OT5ENFUL.js +2 -0
  33. package/dist/constructed-handler-worker.js +2 -0
  34. package/dist/index.d.ts +21 -10
  35. package/dist/index.js +6 -6
  36. package/dist/kodax_cli.js +1116 -1089
  37. package/dist/runtime-worker.js +2843 -0
  38. package/dist/sdk-agent.d.ts +27 -8
  39. package/dist/sdk-agent.js +1 -1
  40. package/dist/sdk-coding.d.ts +76 -1020
  41. package/dist/sdk-coding.js +1 -1
  42. package/dist/sdk-llm.js +1 -1
  43. package/dist/sdk-mcp.d.ts +2 -1
  44. package/dist/sdk-mcp.js +1 -1
  45. package/dist/sdk-media.js +1 -1
  46. package/dist/sdk-repl.d.ts +197 -183
  47. package/dist/sdk-repl.js +2 -2
  48. package/dist/sdk-runtime.d.ts +982 -0
  49. package/dist/sdk-runtime.js +2 -0
  50. package/dist/sdk-session.d.ts +3 -3
  51. package/dist/sdk-session.js +1 -1
  52. package/dist/sdk-skills.js +1 -1
  53. package/dist/semantic-worker.js +191 -10
  54. package/dist/types-chunks/{bash-prefix-extractor.d-CZW9fRoa.d.ts → bash-prefix-extractor.d-BjkITAva.d.ts} +142 -3
  55. package/dist/types-chunks/{run-manager.d-CYTnWhZY.d.ts → capsule.d-hVhPNkHd.d.ts} +5 -92
  56. package/dist/types-chunks/commands.d-C3B1TdGM.d.ts +213 -0
  57. package/dist/types-chunks/{types.d-1CnTg7Sd.d.ts → guardrail.d-C_Siraua.d.ts} +3 -128
  58. package/dist/types-chunks/{guardrail.d-MR6LwMB2.d.ts → guardrail.d-wk-s0psS.d.ts} +2 -2
  59. package/dist/types-chunks/{manager.d-DBD7SOTT.d.ts → manager.d-Zum9cGHU.d.ts} +3 -173
  60. package/dist/types-chunks/oauth-login.d-Bgb4rdLN.d.ts +174 -0
  61. package/dist/types-chunks/public-api.d-jtREVfEq.d.ts +596 -0
  62. package/dist/types-chunks/run-manager.d-CFknOfo1.d.ts +91 -0
  63. package/dist/types-chunks/{sdk-session-RBSBBKol.d.ts → sdk-session-CLqyfAmf.d.ts} +8 -306
  64. package/dist/types-chunks/types.d-BMLxKV69.d.ts +128 -0
  65. package/dist/types-chunks/types.d-CUN_bZU7.d.ts +975 -0
  66. package/dist/types-chunks/{utils.d-C14jZ9ZM.d.ts → utils.d-C1rpoeDh.d.ts} +84 -72
  67. package/package.json +7 -1
  68. package/dist/chunks/argument-completer-EN63ZVJK.js +0 -2
  69. package/dist/chunks/chunk-KHICMJIR.js +0 -310
  70. package/dist/chunks/chunk-LGR7ACBQ.js +0 -326
  71. package/dist/chunks/chunk-RR7W7UF6.js +0 -341
  72. package/dist/chunks/chunk-UGTK2JIJ.js +0 -731
  73. package/dist/chunks/chunk-V4WSBIXB.js +0 -2
  74. package/dist/chunks/chunk-VSWROENP.js +0 -52
  75. package/dist/chunks/compaction-config-4VIONMFB.js +0 -2
  76. package/dist/chunks/dist-EDF2YUF6.js +0 -2
  77. package/dist/chunks/host-J4HPDLFC.js +0 -2
  78. package/dist/chunks/run-manager-ZVSW2OWM.js +0 -2
  79. package/dist/chunks/utils-5HDLYTZJ.js +0 -2
  80. package/dist/types-chunks/storage.d-C6kkAEch.d.ts +0 -280
@@ -1,326 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as Yr}from"./chunk-UA744TZM.js";import{$ as xe,$a as et,$c as on,Ba as Rr,C as Ze,Ca as Sr,Cc as Gt,D as yr,Db as zr,Dc as Qr,Ec as Zr,Fc as T,Gc as de,Hc as Jr,Ic as en,Jc as tn,Na as Cr,O as br,Qa as _r,U as Tr,Va as Mr,Wa as qt,X as xr,Ya as Pr,Za as Ar,_a as Ir,aa as Je,ab as Or,ad as rn,bb as Nr,cb as Dr,d as pr,da as vr,db as C,e as X,eb as Lr,f as $,fb as Fr,g as hr,ga as kr,gb as Ur,gd as nn,ha as wr,hb as Br,ia as Er,ib as Hr,jb as $r,kb as Q,lb as ve,mb as jr,nb as ke,ob as tt,pa as jt,pb as qr,qb as Gr,qd as sn,rb as Wr,rd as ot,sb as Kr,tb as Xr,td as rt,ud as an,wd as cn,xd as ln,y as gr,yc as Vr}from"./chunk-RR7W7UF6.js";import{A as le,B as Bo,F as Ho,Ga as Ot,Ja as Te,O as $o,Q as jo,Ra as Nt,T as be,Va as qo,Wa as Go,Xa as Wo,Ya as Ko,_a as Xo,b as Me,c as Pe,d as Ae,e as Uo,pa as At,xa as It}from"./chunk-S4GVQO3W.js";import{Ba as Jo,Ca as er,Cb as or,Fd as Ht,Nd as $t,Qd as cr,Rd as lr,Sd as ur,Xd as dr,Yd as mr,_d as fr,dd as Ut,ed as Bt,f as ee,fd as rr,g as Ve,hd as nr,id as ir,j as zo,jd as sr,k as ue,kd as ar,m as Vo,mc as Oe,na as Qo,oa as Lt,ob as Ie,pb as Ft,wa as Zo,xb as Qe,yb as tr}from"./chunk-UGTK2JIJ.js";import{a as Dt,z as Yo}from"./chunk-ZL5CEANW.js";import{a as i}from"./chunk-V4WSBIXB.js";import{readFile as bs}from"fs/promises";var un=75;function Ts(e){return typeof e!="number"||e<=0?un:e<=2e5?60:e<=256e3?65:e<=5e5?70:75}i(Ts,"adaptiveTriggerPercent");var xs={enabled:!0};async function dn(e,t){let o=Zo("config.json"),r;try{let a=await vs(o);a?.compaction&&(r=a.compaction)}catch{}let n={...xs,...r,triggerPercent:un};t?.enabled!==void 0&&(n.enabled=t.enabled),t?.contextWindow!==void 0&&(n.contextWindow=t.contextWindow);let s=n.contextWindow??e;return n.triggerPercent=typeof t?.triggerPercent=="number"?t.triggerPercent:typeof r?.triggerPercent=="number"?r.triggerPercent:Ts(s),n}i(dn,"loadCompactionConfig");async function vs(e){try{let t=await bs(e,"utf-8");return JSON.parse(t)}catch{return null}}i(vs,"readConfigFile");var j;(function(e){e[e.TRANSIENT=0]="TRANSIENT",e[e.PERMANENT=1]="PERMANENT",e[e.TOOL_CALL_ID=2]="TOOL_CALL_ID",e[e.USER_ABORT=3]="USER_ABORT"})(j||(j={}));var ks=[/\bstream incomplete\b/i,/\bstream interrupted\b/i,/\bstream stalled\b/i,/\bdelayed response\b/i,/\btimed out\b/i,/\btimeout\b/i,/\bnetwork\b/i,/\bconnection error\b/i,/\bconnection reset\b/i,/\bconnection closed\b/i,/\bsocket hang up\b/i,/\bfetch failed\b/i,/\beconnrefused\b/i,/\beconnreset\b/i,/\betimedout\b/i,/\benotfound\b/i,/\beai_again\b/i,/\bother side closed\b/i,/\baborted\b/i,/网络错误/,/网络异常/,/连接超时/,/连接错误/,/连接失败/,/连接被拒绝/,/请求超时/,/服务繁忙/,/服务不可用/,/服务器错误/,/服务器内部错误/,/请求过多/,/频率限制/,/限流/,/过载/,/容量不足/];function mn(e){return ks.some(t=>t.test(e))}i(mn,"matchesTransientMessage");function ws(e){if(e.name==="StreamIncompleteError"||e.message.includes("Stream incomplete"))return{category:j.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:2e3,shouldCleanup:!0};if(e.name==="AbortError")return{category:j.USER_ABORT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0};if(e instanceof Uo||e.message.includes("tool_call_id")||e.message.includes("tool result"))return{category:j.TOOL_CALL_ID,retryable:!0,maxRetries:1,retryDelay:1e3,shouldCleanup:!0};if(e instanceof Pe)return{category:j.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:e.retryAfter??6e4,shouldCleanup:!0};if(e instanceof Ae)return{category:j.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:e.isTimeout?5e3:2e3,shouldCleanup:!0};if(e instanceof Me){let o=e.message.toLowerCase();return mn(o)?{category:j.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:2e3,shouldCleanup:!0}:{category:j.PERMANENT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0}}let t=e.message.toLowerCase();return mn(t)?{category:j.TRANSIENT,retryable:!0,maxRetries:2,retryDelay:2e3,shouldCleanup:!0}:{category:j.PERMANENT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0}}i(ws,"classifyError");function Wt(e,t){return new Promise((o,r)=>{if(t?.aborted){r(t.reason instanceof Error?t.reason:new DOMException("Request aborted","AbortError"));return}let n,s=t;if(!s){n=setTimeout(()=>{o()},e);return}let a=i(()=>{clearTimeout(n),s.removeEventListener("abort",a),r(s.reason instanceof Error?s.reason:new DOMException("Request aborted","AbortError"))},"onAbort");n=setTimeout(()=>{s.removeEventListener("abort",a),o()},e),s.addEventListener("abort",a,{once:!0})})}i(Wt,"waitForRetryDelay");var pn={requestTimeoutMs:6e5,streamIdleTimeoutMs:Number(process.env.KODAX_STREAM_IDLE_TIMEOUT_MS)||0,chunkTimeoutMs:3e4,maxRetries:4,maxRetryDelayMs:6e4,enableNonStreamingFallback:!0};function Kt(e,t,o){let r={...pn};if(t&&fn(r,t),o&&o.length>0){let n=o.find(s=>s.provider===e);if(n){let{provider:s,...a}=n;fn(r,a)}}return r}i(Kt,"resolveResilienceConfig");function fn(e,t){t.requestTimeoutMs!==void 0&&(e.requestTimeoutMs=t.requestTimeoutMs),t.streamIdleTimeoutMs!==void 0&&(e.streamIdleTimeoutMs=t.streamIdleTimeoutMs),t.chunkTimeoutMs!==void 0&&(e.chunkTimeoutMs=t.chunkTimeoutMs),t.maxRetries!==void 0&&(e.maxRetries=t.maxRetries),t.maxRetryDelayMs!==void 0&&(e.maxRetryDelayMs=t.maxRetryDelayMs),t.enableNonStreamingFallback!==void 0&&(e.enableNonStreamingFallback=t.enableNonStreamingFallback)}i(fn,"mergePartialConfig");var Es=[/\brate.?limit\b/i,/\btoo many requests\b/i,/\b429\b/,/\bquota exceeded\b/i,/\bapi credits?\b/i,/请求过多/,/频率限制/,/限流/,/配额/],hn=[/\boverloaded\b/i,/\bcapacity\b/i,/\bserver (error|busy)\b/i,/\bprovider service error\b/i,/\btry (again )?(a )?moment later\b/i,/\b(api|http|provider|status( code)?)\b[^\n]{0,40}\b5(00|02|03|29)\b/i,/\b5(00|02|03|29)\b[^\n]{0,40}\b(api|http|provider|server|status( code)?)\b/i,/\b503\b/,/\b502\b/,/\binternal server error\b/i,/\bservice unavailable\b/i,/服务繁忙/,/服务不可用/,/服务器错误/,/服务器内部错误/,/过载/,/容量不足/],Xt=[/\bconnection (error|reset|closed|refused|terminated)\b/i,/\bsocket hang up\b/i,/\bsocket closed\b/i,/\bfetch failed\b/i,/\beconnrefused\b/i,/\beconnreset\b/i,/\bepipe\b/i,/\benotfound\b/i,/\beai_again\b/i,/\bother side closed\b/i,/\bnetwork\b/i,/\baborted\b/i,/\bterminated\b/i,/\bpremature close\b/i,/\bund_err_socket\b/i,/\bund_err_closed\b/i,/\bund_err_aborted\b/i,/\bund_err_destroyed\b/i,/网络错误/,/网络异常/,/连接错误/,/连接失败/,/连接被拒绝/,/连接被重置/,/连接被终止/,/连接已终止/,/连接中断/],Yt=[/\btimed? ?out\b/i,/\betimedout\b/i,/\bheaders timeout\b/i,/\bbody timeout\b/i,/\bund_err_headers_timeout\b/i,/\bund_err_body_timeout\b/i,/\bund_err_connect_timeout\b/i,/连接超时/,/请求超时/,/响应超时/],gn=[/\bstream incomplete\b/i,/\bstream interrupted\b/i],Rs=[/\bstream stalled or delayed\b/i,/\b60s idle\b/i,/\bidle timeout\b/i],Ss=[/\bhard timeout\b/i,/\b10 minutes?\b/i,/\bapi hard timeout\b/i],Cs=[/reasoning_content/i,/thinking.{0,40}signature/i,/signature.{0,40}thinking/i],_s=[/\bcontext too long\b/i,/\bmaximum context\b/i,/\bcontext length\b/i,/\bcontext window\b/i,/\btoo many tokens\b/i],Ms=[/\b(401|403)\b/,/\b(auth|unauthorized|forbidden|api key|not configured|permission denied)\b/i];function nt(e,t){let o=yn(e);if(e.name==="AbortError")return{errorClass:"user_abort",failureStage:t??"before_first_delta",retryable:!1,maxRetries:0,baseRetryDelay:0};if(e instanceof Pe||D(o,Es)){let r=e instanceof Pe?e.retryAfter:void 0;return{errorClass:"rate_limit",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:r??6e4}}return e instanceof Me&&D(o,hn)?{errorClass:"provider_overloaded",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:e.name==="StreamIncompleteError"||D(o,gn)?{errorClass:"incomplete_stream",failureStage:As(o,t),retryable:!0,maxRetries:3,baseRetryDelay:2e3}:D(o,Rs)?{errorClass:"stream_idle_timeout",failureStage:t??"mid_stream_text",retryable:!0,maxRetries:3,baseRetryDelay:3e3}:D(o,Ss)?{errorClass:"request_timeout",failureStage:t??"before_first_delta",retryable:!0,maxRetries:2,baseRetryDelay:5e3}:e instanceof Ae&&e.isTimeout||D(o,Yt)?{errorClass:"request_timeout",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:e instanceof Ae||D(o,Xt)?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:2e3}:e instanceof Me?D(o,[...Xt,...Yt])?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:2e3}:D(o,Cs)?{errorClass:"reasoning_content_required",failureStage:t??"before_first_delta",retryable:!0,maxRetries:1,baseRetryDelay:0}:{errorClass:"non_retryable_provider_error",failureStage:t??"before_first_delta",retryable:!1,maxRetries:0,baseRetryDelay:0}:D(o,hn)?{errorClass:"provider_overloaded",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:D(o,[...Xt,...Yt,...gn])?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:2,baseRetryDelay:2e3}:{errorClass:"non_retryable_provider_error",failureStage:t??"before_first_delta",retryable:!1,maxRetries:0,baseRetryDelay:0}}i(nt,"classifyResilienceError");function Ps(e,t){if(t<=0)return!1;let o=yn(e);if(D(o,Ms))return!1;let r=nt(e);return r.errorClass==="provider_overloaded"||r.errorClass==="reasoning_content_required"||D(o,_s)}i(Ps,"isSessionRecoveryCandidateError");function D(e,t){return t.some(o=>o.test(e))}i(D,"matchesAny");function yn(e){let t=[],o=new Set,r=e,n=0,s=5;for(;r!=null&&n<s&&!o.has(r);){if(o.add(r),r instanceof Error){r.message&&t.push(r.message);let a=r.code;typeof a=="string"&&a.length>0&&t.push(a),r=r.cause}else if(typeof r=="string")t.push(r),r=void 0;else if(typeof r=="object"){let a=r.message;typeof a=="string"&&t.push(a);let c=r.code;typeof c=="string"&&t.push(c),r=r.cause}else break;n+=1}return t.join(" | ").toLowerCase()}i(yn,"collectErrorText");function As(e,t){return t||(/\btool.?input\b/i.test(e)||/\btool.?call\b/i.test(e)?"mid_stream_tool_input":/\bthinking\b/i.test(e)?"mid_stream_thinking":"mid_stream_text")}i(As,"inferStageForStreamError");var Is=0;function bn(){return`req_${Date.now()}_${++Is}`}i(bn,"nextRequestId");var Ne=class{static{i(this,"StableBoundaryTracker")}state;hasReceivedFirstDelta=!1;currentToolInputId;constructor(){this.state=this.createInitialState()}beginRequest(t,o,r,n=1,s=!1){this.state={requestId:bn(),provider:t,model:o,attempt:n,lastStableMessageIndex:r.length,executedToolCallIds:[...this.state.executedToolCallIds],pendingToolCallIds:[],visibleLiveTextLength:0,visibleThinkingLength:0,fallbackUsed:s,startedAt:Date.now()},this.hasReceivedFirstDelta=!1,this.currentToolInputId=void 0}markFirstDelta(){this.hasReceivedFirstDelta=!0}markTextDelta(t){this.hasReceivedFirstDelta||this.markFirstDelta(),this.state.visibleLiveTextLength+=t.length}markThinkingDelta(t){this.hasReceivedFirstDelta||this.markFirstDelta(),this.state.visibleThinkingLength+=t.length}markToolInputStart(t){this.hasReceivedFirstDelta||this.markFirstDelta(),this.currentToolInputId=t,this.state.pendingToolCallIds.includes(t)||this.state.pendingToolCallIds.push(t)}markToolExecuted(t){this.state.pendingToolCallIds=this.state.pendingToolCallIds.filter(o=>o!==t),this.state.executedToolCallIds.includes(t)||this.state.executedToolCallIds.push(t),this.currentToolInputId===t&&(this.currentToolInputId=void 0)}markAssistantComplete(t){this.state.lastStableMessageIndex=t.length,this.state.visibleLiveTextLength=0,this.state.visibleThinkingLength=0,this.state.pendingToolCallIds=[],this.hasReceivedFirstDelta=!1}inferFailureStage(){return this.hasReceivedFirstDelta?this.currentToolInputId?"mid_stream_tool_input":this.state.visibleThinkingLength>0&&this.state.visibleLiveTextLength===0?"mid_stream_thinking":this.state.executedToolCallIds.length>0?"post_tool_execution_pre_assistant_close":"mid_stream_text":"before_first_delta"}snapshot(){return{...this.state}}get hasReceivedDelta(){return this.hasReceivedFirstDelta}recoverToStableBoundary(t){let o=Math.min(this.state.lastStableMessageIndex,t.length),r=t.slice(0,o),n=[...this.state.pendingToolCallIds],s=[...this.state.executedToolCallIds];return{messages:r,droppedToolCallIds:n,executedToolCallIds:s}}reset(){this.state=this.createInitialState(),this.hasReceivedFirstDelta=!1,this.currentToolInputId=void 0}createInitialState(){return{requestId:bn(),provider:"",model:"",attempt:1,lastStableMessageIndex:0,executedToolCallIds:[],pendingToolCallIds:[],visibleLiveTextLength:0,visibleThinkingLength:0,fallbackUsed:!1,startedAt:Date.now()}}};function it(e,t,o){if(e.length===0)return[];let r=Os(e,o),n=Ns(r),s=t.filter(a=>!n.includes(a));return s.length>0?Ds(r,s):r}i(it,"reconstructMessagesWithToolGuard");function Os(e,t){if(t.length===0)return[...e];let o=new Set(t);return e.map(r=>{if(typeof r.content=="string")return r;let n=r.content.filter(s=>s.type==="tool_use"?!o.has(s.id):s.type==="tool_result"?!o.has(s.tool_use_id):!0);return n.length===0?{...r,content:[{type:"text",text:""}]}:{...r,content:n}})}i(Os,"filterIncompleteToolCalls");function Ns(e){let t=[];for(let o of e)if(typeof o.content!="string")for(let r of o.content)r.type==="tool_result"&&t.push(r.tool_use_id);return t}i(Ns,"collectToolResultIds");function Ds(e,t){let o=[...e],r=t.map(n=>({type:"tool_result",tool_use_id:n,content:"[Result preserved from previous attempt - tool already executed]"}));return r.length>0&&o.push({role:"user",content:r}),o}i(Ds,"appendMissingToolResults");var Ls=["before_request_accepted","before_first_delta"],Fs=["stream_idle_timeout","chunk_timeout","incomplete_stream","connection_failure"],De=class{static{i(this,"ProviderRecoveryCoordinator")}boundaryTracker;config;nonStreamingFallbackUsed=!1;thinkingSanitizationUsed=!1;constructor(t,o){this.boundaryTracker=t,this.config={requestTimeoutMs:o.requestTimeoutMs??6e5,streamIdleTimeoutMs:o.streamIdleTimeoutMs??6e4,chunkTimeoutMs:o.chunkTimeoutMs??3e4,maxRetries:o.maxRetries??4,maxRetryDelayMs:o.maxRetryDelayMs??6e4,enableNonStreamingFallback:o.enableNonStreamingFallback??!0}}decideRecoveryAction(t,o,r){if(!o.retryable)return{action:"manual_continue",ladderStep:4,delayMs:0,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:!1,reasonCode:o.errorClass,failureStage:o.failureStage};if(o.errorClass==="reasoning_content_required"&&!this.thinkingSanitizationUsed)return this.thinkingSanitizationUsed=!0,{action:"sanitize_thinking_and_retry",ladderStep:2,delayMs:0,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:!1,reasonCode:o.errorClass,failureStage:o.failureStage};if(r>=this.config.maxRetries)return{action:"manual_continue",ladderStep:4,delayMs:0,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:!1,reasonCode:o.errorClass,failureStage:o.failureStage};let n=Bs(o.baseRetryDelay,r,this.config.maxRetryDelayMs),s=Hs(t),a=s!==void 0?Math.min(s,this.config.maxRetryDelayMs):n,{action:c,ladderStep:d,shouldUseNonStreaming:u}=this.selectRecoveryStrategy(o,r);return{action:c,ladderStep:d,delayMs:a,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:u,reasonCode:o.errorClass,failureStage:o.failureStage,serverRetryAfterMs:s}}executeRecovery(t,o){switch(o.action){case"fresh_connection_retry":return this.executeFreshConnectionRetry(t,o);case"stable_boundary_retry":return this.executeStableBoundaryRetry(t,o);case"non_streaming_fallback":return this.executeNonStreamingFallback(t,o);case"manual_continue":return this.executeManualContinue(t,o);case"sanitize_thinking_and_retry":return this.executeSanitizeThinking(t,o)}}selectRecoveryStrategy(t,o){let r=t.failureStage,n=t.errorClass;return Fs.includes(n)&&this.config.enableNonStreamingFallback&&!this.nonStreamingFallbackUsed&&o>=2?(this.nonStreamingFallbackUsed=!0,{action:"non_streaming_fallback",ladderStep:3,shouldUseNonStreaming:!0}):Ls.includes(r)?{action:"fresh_connection_retry",ladderStep:1,shouldUseNonStreaming:!1}:{action:"stable_boundary_retry",ladderStep:2,shouldUseNonStreaming:!1}}executeFreshConnectionRetry(t,o){let r=this.boundaryTracker.snapshot();return{messages:[...t],droppedToolCallIds:[],executedToolCallIds:[...r.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}executeStableBoundaryRetry(t,o){let r=this.boundaryTracker.recoverToStableBoundary(t);return{messages:it(r.messages,r.executedToolCallIds,r.droppedToolCallIds),droppedToolCallIds:r.droppedToolCallIds,executedToolCallIds:r.executedToolCallIds,fallbackUsed:this.nonStreamingFallbackUsed}}executeNonStreamingFallback(t,o){let r=this.boundaryTracker.recoverToStableBoundary(t);return{messages:it(r.messages,r.executedToolCallIds,r.droppedToolCallIds),droppedToolCallIds:r.droppedToolCallIds,executedToolCallIds:r.executedToolCallIds,fallbackUsed:!0}}executeManualContinue(t,o){let r=this.boundaryTracker.snapshot();return{messages:[...t],droppedToolCallIds:[...r.pendingToolCallIds],executedToolCallIds:[...r.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}executeSanitizeThinking(t,o){let r=this.boundaryTracker.snapshot();return{messages:Us(t),droppedToolCallIds:[],executedToolCallIds:[...r.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}reset(){this.nonStreamingFallbackUsed=!1,this.thinkingSanitizationUsed=!1}};function Us(e){return e.map(t=>{if(t.role!=="assistant"||typeof t.content=="string"||!Array.isArray(t.content))return t;let o=t.content.filter(r=>r.type!=="thinking"&&r.type!=="redacted_thinking");return o.length===0?{...t,content:[{type:"text",text:""}]}:{...t,content:o}})}i(Us,"sanitizeThinkingBlocks");function Bs(e,t,o){let r=e*Math.pow(2,t-1),n=Math.random()*1e3;return Math.min(r+n,o)}i(Bs,"calculateRetryDelay");function Hs(e){if("retryAfter"in e&&typeof e.retryAfter=="number")return e.retryAfter*1e3}i(Hs,"extractServerRetryAfter");var st=process.env.KODAX_DEBUG_STREAM==="1"||process.env.KODAX_DEBUG_RESILIENCE==="1";function zt(e,t){st&&console.error("[resilience:classify]",{rawError:e.message,errorClass:t.errorClass,failureStage:t.failureStage,retryable:t.retryable,maxRetries:t.maxRetries})}i(zt,"telemetryClassify");function Vt(e,t){st&&console.error("[resilience:decision]",{action:e.action,ladderStep:e.ladderStep,attempt:t,delayMs:e.delayMs,maxDelayMs:e.maxDelayMs,reasonCode:e.reasonCode,failureStage:e.failureStage,shouldUseNonStreaming:e.shouldUseNonStreaming,serverRetryAfterMs:e.serverRetryAfterMs})}i(Vt,"telemetryDecision");function Qt(e){st&&console.error("[resilience:boundary]",{requestId:e.requestId,provider:e.provider,attempt:e.attempt,lastStableMessageIndex:e.lastStableMessageIndex,executedToolCallIds:e.executedToolCallIds,pendingToolCallIds:e.pendingToolCallIds,visibleLiveTextLength:e.visibleLiveTextLength,visibleThinkingLength:e.visibleThinkingLength,fallbackUsed:e.fallbackUsed,failureStage:e.failureStage})}i(Qt,"telemetryBoundary");function at(e,t){st&&console.error("[resilience:recovery]",{action:e,droppedToolCallIds:t.droppedToolCallIds,executedToolCallIds:t.executedToolCallIds,fallbackUsed:t.fallbackUsed})}i(at,"telemetryRecovery");function Le(e,t){if(!t||t.length===0)return e;let o=[{type:"text",text:e}];for(let r of t){if(r.kind!=="image")throw new Dt("MODEL_INPUT_UNSUPPORTED",`${r.kind} artifacts cannot be attached to the provider prompt yet.`,{detail:"Only image artifacts are currently lowered into provider prompt content."});o.push({type:"image",path:r.path,mediaType:r.mediaType})}return o}i(Le,"buildPromptMessageContent");function Zt(e){return e._truncated===!0||e._salvaged===!0&&sn(e.name)}i(Zt,"isUntrustedSalvage");function xn(e){let t=[];for(let o of e){if(Zt(o)){t.push(`${o.name}: incomplete input (salvaged from malformed/truncated JSON)`);continue}let r=ot(o.name),n=o.input??{};for(let s of r)(n[s]===void 0||n[s]===null||n[s]==="")&&t.push(`${o.name}: missing '${s}'`)}return t}i(xn,"checkIncompleteToolCalls");function qd(e,t=400){return e.length<=t?e:`${e.slice(0,Math.max(0,t-3))}...`}i(qd,"truncateText");function vn(e){if(!e)return"";if(typeof e.lastText=="string"&&e.lastText.trim())return e.lastText;let t=e.messages?.[e.messages.length-1];return!t||t.role!=="assistant"?"":typeof t.content=="string"?t.content:t.content.map(o=>("text"in o?o.text:"")||"").join("")}i(vn,"extractMessageText");function $s(e){return e==="running"||e==="planned"}i($s,"isUnconvergedVerdict");function js(e){let t=e.trim();return t===""||t==="..."}i(js,"isPlaceholderOnlyAssistantText");function qs(e){let t=vn(e);return js(t)?"":t}i(qs,"extractFinalAssistantText");function Qd(e,t,o){if(!e.messages)return e;let r=qs(e);if($s(e.managedTask?.verdict?.status)||e.interrupted&&!r)return e;let n=t.context?.inputArtifacts,s=e.artifactLedger??Ht(e.messages),a=Gs(e.messages,o,r,n),c=e.contextTokenSnapshot?Lr(a,e.contextTokenSnapshot):void 0;return{...e,messages:a,artifactLedger:s,contextTokenSnapshot:c}}i(Qd,"reshapeToUserConversation");function Gs(e,t,o,r){let n=e,s=n[0];s?.role==="system"&&typeof s.content=="string"&&!s.content.startsWith($t)&&(n=n.slice(1)),n=Jt(n);let c=!n.some(u=>u.role==="user"&&ct(u)===t);c&&n[0]?.role==="system"&&typeof n[0].content=="string"&&n[0].content.startsWith($t)&&n.some(l=>l.role==="user")&&(c=!1),c&&(n=[...n,{role:"user",content:Le(t,r)}]);let d=n[n.length-1];return d?.role==="assistant"&&typeof d.content=="string"&&d.content===o||(d?.role==="assistant"?n=[...n.slice(0,-1),{role:"assistant",content:o}]:n=[...n,{role:"assistant",content:o}]),[...n]}i(Gs,"preserveTranscriptForRoundExit");function Jt(e){let t=e.length;for(;t>=2;){let o=e[t-2],r=e[t-1];if(o.role==="user"&&r.role==="assistant"&&Ks(o)){t-=2;continue}break}return e.slice(0,t)}i(Jt,"normalizeLoadedSessionMessages");var Ws=/^\s*You are the (Scout|Planner|Generator|Evaluator) role\b/;function Ks(e){if(e.role!=="user")return!1;let t=typeof e.content=="string"?e.content:Xs(e.content);return Ws.test(t)}i(Ks,"isRolePromptShapedUser");function Xs(e){let t=e[0];return t?.type==="text"&&typeof t.text=="string"?t.text:""}i(Xs,"extractLeadingTextBlock");function Tn(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
3
- `)}i(Tn,"extractPromptComparableText");function ct(e){if(!(!e||e.role!=="user"))return Tn(e.content)}i(ct,"extractComparableUserMessageText");async function kn(e,t){if(e.session?.initialMessages&&e.session.initialMessages.length>0){let o=[...e.session.initialMessages],n=!(e.session.initialExtensionState!==void 0||e.session.initialExtensionRecords!==void 0)&&e.session.storage&&t?await e.session.storage.load(t).catch(()=>null):null;return{messages:o,title:Bt(o),errorMetadata:n?.errorMetadata,loadedExtensionState:e.session.initialExtensionState??n?.extensionState,loadedExtensionRecords:e.session.initialExtensionRecords??n?.extensionRecords}}if(e.session?.storage&&t){let o=await e.session.storage.load(t);if(o)return{messages:Jt(o.messages),title:o.title,errorMetadata:o.errorMetadata,loadedExtensionState:o.extensionState,loadedExtensionRecords:o.extensionRecords}}return{messages:[],title:""}}i(kn,"resolveInitialMessages");function wn(e,t,o,r){let n=e[e.length-1];return ct(n)===t?r!==void 0&&n!==void 0&&n.turnId===void 0?[...e.slice(0,-1),{...n,turnId:r}]:e:[...e,{role:"user",content:Le(t,o),...r!==void 0?{turnId:r}:{},timestamp:new Date().toISOString()}]}i(wn,"appendPromptIfNotDuplicate");async function En(e){let t=e.session?.id;if(t)return t;if(!(e.session?.autoResume||e.session?.resume))return;let r=e.session?.storage;if(!r?.list)return;let n=await r.list(e.context?.gitRoot??void 0);return n.length>0?n[0].id:void 0}i(En,"discoverAutoResumeSessionId");function Ys(e){return At(e)?"builtin":Ot(e)?"runtime":It(e)?"custom":"unknown"}i(Ys,"detectProviderSourceKind");function zs(e,t){return e?e.getCapabilityProfile():t??{transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none"}}i(zs,"resolveCapabilityProfile");function Vs(e,t,o){return e?e.getReasoningCapability(t):o??"unknown"}i(Vs,"resolveReasoningCapability");function Qs(e){let t=jo(zs(e.provider,e.capabilityProfile));return{provider:e.providerName,model:e.model,sourceKind:Ys(e.providerName),transport:t.transport,conversationSemantics:t.conversationSemantics,mcpSupport:t.mcpSupport,contextFidelity:t.contextFidelity,toolCallingFidelity:t.toolCallingFidelity,sessionSupport:t.sessionSupport,longRunningSupport:t.longRunningSupport,multimodalSupport:t.multimodalSupport,evidenceSupport:t.evidenceSupport,reasoningCapability:Vs(e.provider,e.model,e.reasoningCapability)}}i(Qs,"buildProviderCapabilitySnapshot");function Zs(e){return!!e?.inputArtifacts?.some(t=>t.kind==="image")}i(Zs,"detectMultimodalContext");function Js(e){if(!e)return{};let t=e.toLowerCase();return{evidenceHeavy:/merge blocker|review|strict audit|runtime error|stack trace|stderr|failing test|evidence/.test(t)?!0:void 0}}i(Js,"inferPromptPolicyHints");function we(...e){return e.find(t=>t!==void 0)}i(we,"pickBoolean");function ea(e){let t=e.context??e.options?.context,o=Js(e.prompt);return{longRunning:we(e.hints?.longRunning,t?.providerPolicyHints?.longRunning,o.longRunning),harnessProfile:e.hints?.harnessProfile??t?.providerPolicyHints?.harnessProfile,evidenceHeavy:we(e.hints?.evidenceHeavy,t?.providerPolicyHints?.evidenceHeavy,o.evidenceHeavy),multimodal:we(e.hints?.multimodal,t?.providerPolicyHints?.multimodal,Zs(t),o.multimodal),capabilityRuntime:we(e.hints?.capabilityRuntime,t?.providerPolicyHints?.capabilityRuntime,o.capabilityRuntime),mcpRequired:we(e.hints?.mcpRequired,t?.providerPolicyHints?.mcpRequired,o.mcpRequired),brainstorm:we(e.hints?.brainstorm,t?.providerPolicyHints?.brainstorm,o.brainstorm),workIntent:e.hints?.workIntent??t?.providerPolicyHints?.workIntent??o.workIntent}}i(ea,"resolveProviderPolicyHints");function te(e,t){e.some(o=>o.code===t.code)||e.push(t)}i(te,"pushIssue");function ta(e,t){let o=new Set;e.transport==="cli-bridge"&&o.add("Provider uses a CLI bridge rather than a native API, so semantic parity should not be assumed."),e.conversationSemantics==="last-user-message"&&o.add("Provider forwards only the latest user message instead of preserving full-history semantics.");for(let r of t)o.add(r.detail);return Array.from(o)}i(ta,"buildRoutingNotes");function oa(e){return e.length===0?"No provider-policy constraints detected.":e.map(t=>`${t.severity.toUpperCase()}: ${t.summary}`).join(" | ")}i(oa,"summarizeIssues");function Rn(e){return[...[`[Provider Policy] provider=${e.snapshot.provider}${e.snapshot.model?` model=${e.snapshot.model}`:""}; status=${e.status}.`,`[Provider Semantics] transport=${e.snapshot.transport}; context=${e.snapshot.contextFidelity}; toolCalling=${e.snapshot.toolCallingFidelity}; session=${e.snapshot.sessionSupport}; longRunning=${e.snapshot.longRunningSupport}; multimodal=${e.snapshot.multimodalSupport}; evidence=${e.snapshot.evidenceSupport}; mcp=${e.snapshot.mcpSupport}; reasoning=${e.snapshot.reasoningCapability}.`],...e.issues.map(o=>`[Provider Constraint] ${o.severity.toUpperCase()}: ${o.detail}`)]}i(Rn,"buildProviderPolicyPromptNotes");function lt(e){let t=Qs({providerName:e.providerName,model:e.model,provider:e.provider,capabilityProfile:e.capabilityProfile,reasoningCapability:e.reasoningCapability}),o=ea(e),r=[];return o.multimodal&&t.multimodalSupport==="none"&&te(r,{code:"multimodal-unsupported",severity:"block",summary:"multimodal requests are unsupported on this provider",detail:"This flow requests multimodal or image semantics, but the selected provider only exposes text-only behavior."}),o.mcpRequired&&t.mcpSupport==="none"?te(r,{code:"mcp-required",severity:"block",summary:"native MCP semantics are unavailable on this provider",detail:"This flow explicitly requires MCP-native behavior, but the selected provider reports no native MCP support."}):o.capabilityRuntime&&t.mcpSupport==="none"&&te(r,{code:"capability-runtime-limited",severity:"warn",summary:"capability-oriented flows are constrained by provider semantics",detail:"Capability or MCP-oriented workflows may lose parity because the provider does not expose native MCP semantics."}),o.longRunning&&(t.longRunningSupport==="none"||t.sessionSupport==="stateless"||t.contextFidelity==="lossy"?te(r,{code:"long-running-blocked",severity:"block",summary:"long-running execution is unsafe on this provider",detail:"Long-running flows require durable session semantics and reliable context fidelity, but this provider reports lossy or stateless behavior."}):(t.longRunningSupport==="limited"||t.sessionSupport==="limited")&&te(r,{code:"long-running-limited",severity:"warn",summary:"long-running execution is degraded on this provider",detail:"Long-running flows may behave inconsistently because this provider only offers limited session or long-running support."})),(o.evidenceHeavy===!0||e.taskType==="review"||e.taskType==="bugfix"||e.executionMode==="pr-review"||e.executionMode==="strict-audit"||e.executionMode==="investigation")&&(t.contextFidelity==="lossy"&&te(r,{code:"evidence-context-loss",severity:"warn",summary:"evidence-heavy work is constrained by lossy context semantics",detail:"Evidence-heavy routing remains available, but this provider can lose prior-turn context and should not be treated as equivalent to full-history providers."}),t.evidenceSupport==="limited"&&te(r,{code:"evidence-support-limited",severity:"warn",summary:"evidence-heavy work may lose fidelity on this provider",detail:"This provider only reports limited evidence support, so review and investigation flows may need extra caution."})),e.reasoningMode!=="off"&&(t.reasoningCapability==="prompt-only"||t.reasoningCapability==="none")&&te(r,{code:"reasoning-control-limited",severity:"warn",summary:"native reasoning control is unavailable on this provider",detail:"Reasoning remains usable, but the provider cannot enforce native reasoning controls beyond prompt-level guidance."}),{status:r.some(a=>a.severity==="block")?"block":r.length>0?"warn":"allow",snapshot:t,issues:r,routingNotes:ta(t,r),summary:oa(r)}}i(lt,"evaluateProviderPolicy");var ra="off",na=.4,ia=.42,sa=.45,Sn=.5,aa=.06,ca=.04,la=.86,ua=.75,da=.49,ma=.5;var fa=["brainstorm","explore","explore options","option framing","tradeoff","trade-off","safest way","figure out","design first","\u65B9\u6848","\u601D\u8DEF","\u5148\u60F3","\u5148\u8BBE\u8BA1","\u5148\u5206\u6790","\u5148\u8BA8\u8BBA"],pa=["continue","extend","build on","follow up","append","add to","based on the existing","\u63A5\u7740","\u7EE7\u7EED","\u8865\u5145","\u8FFD\u52A0","\u5EF6\u7EED","\u6269\u5C55\u73B0\u6709"],ha=["rewrite","replace","overwrite","from scratch","start over","regenerate","redo","\u91CD\u5199","\u66FF\u6362","\u8986\u76D6","\u63A8\u5012\u91CD\u6765","\u5168\u90E8\u6539\u6389","\u91CD\u65B0\u505A"],eo={simple:[],moderate:["screen","component","endpoint","service","feature","\u6A21\u5757","\u529F\u80FD","\u9875\u9762"],complex:["migration","architecture","cross-package","multi-step","pipeline","state machine","refactor","monorepo","across packages","integration","\u8FC1\u79FB","\u67B6\u6784","\u8DE8\u5305","\u91CD\u6784","\u6D41\u7A0B"],systemic:["system-wide","orchestrate","multi-agent","control plane","runtime substrate","whole repo","entire repo","across the monorepo","\u5168\u4ED3","\u5168\u5C40","\u6574\u4F53\u67B6\u6784","\u63A7\u5236\u9762","\u591A\u667A\u80FD\u4F53"]},ga=2,ya=4,ba=6,Ta=10,to=1200;var xa=30,Ln=4e3;function Fn(e){return e.reasoningMode?e.reasoningMode:e.thinking===!0?"auto":e.thinking===!1?"off":ra}i(Fn,"resolveReasoningMode");function va(e){return Ho(e)}i(va,"reasoningModeToDepth");var Cn={none:0,minimal:0,auto:1,low:2,medium:3,high:4,xhigh:5,max:6};function _n(e){return Cn[e]??Cn.medium}i(_n,"effortRank");function ka(e,t){let o=_n(e),r=_n(t);return o<r?-1:o>r?1:0}i(ka,"compareEfforts");function Mn(e,t){return ka(e,t)>0?t:e}i(Mn,"clampEffort");function mm(e,t){if(e==="none")return"none";if(!t)return e;let o=t.default?le(t.default):e,r=t.max?Mn(o,le(t.max)):o;return Mn(r,e)}i(mm,"resolveRoleEffort");var wa=Object.freeze(["\u4E0D\u5BF9","\u9519\u4E86","\u6709\u95EE\u9898","\u771F\u7684\u5417","\u4F60\u786E\u5B9A","\u4E0D\u662F\u8FD9\u6837","\u5F04\u9519\u4E86","\u641E\u9519\u4E86","\u641E\u53CD\u4E86","\u8FD9\u4E0D\u5BF9","\u4E0D\u6B63\u786E","\u7B54\u9519","\u56DE\u7B54\u9519","that's wrong","that is wrong","that's not right","that is not right","are you sure","not really","this is wrong","this is incorrect","that's incorrect","that is incorrect","you're wrong","you are wrong"]),Ea=Object.freeze(["\u4ED4\u7EC6","\u6DF1\u5165","\u8BA4\u771F","\u518D\u770B\u770B","\u518D\u60F3\u60F3","\u60F3\u6E05\u695A","\u7528\u5FC3","\u6DF1\u5EA6\u5206\u6790","\u4ED4\u7EC6\u5206\u6790","\u8BA4\u771F\u5206\u6790","\u5F7B\u5E95","think harder","think more carefully","look more carefully","dig deeper","be thorough","more careful","more carefully","reconsider","reexamine","re-examine"]);function Ra(e,t){if(!e)return{category:null,matched:null};let o=e.toLowerCase();if(t)for(let r of wa){let n=r.toLowerCase();if(o.includes(n)||e.includes(r))return{category:"doubt",matched:r}}for(let r of Ea){let n=r.toLowerCase();if(o.includes(n)||e.includes(r))return{category:"deepen",matched:r}}return{category:null,matched:null}}i(Ra,"detectFollowupSignal");function Sa(e){switch(e){case"auto":return"low";case"low":return"medium";case"medium":return"high";default:return e}}i(Sa,"escalateEffort");function Ca(e,t,o){let r=Ra(t,o);if(r.category===null)return{effective:e,escalated:!1,signal:r};let n=Sa(e);return n===e?{effective:e,escalated:!1,signal:r}:{effective:n,escalated:!0,signal:r}}i(Ca,"applyFollowupEscalation");function Un(e,t){let o=e.effort??le(Fn(e)),n=(e.session?.initialMessages??[]).some(a=>a?.role==="assistant"),s=Ca(o,t,n);return s.escalated?{options:{...e,effort:s.effective},escalation:s}:{options:e,escalation:s}}i(Un,"applyFollowupEscalationToOptions");var _a={conversation:["hello","hi","hey","\u4F60\u597D","\u55E8","\u65E9\u4E0A\u597D","\u4E0B\u5348\u597D","\u665A\u4E0A\u597D"],lookup:["where is","which file","what file","where does","where do","located","defined","\u5728\u54EA\u4E2A\u6587\u4EF6","\u5728\u54EA","\u5728\u54EA\u91CC","\u54EA\u4E2A\u6587\u4EF6","\u54EA\u4E2A\u51FD\u6570","\u54EA\u91CC\u5B9A\u4E49","\u6587\u4EF6\u4F4D\u7F6E","\u5728\u54EA\u7BA1\u7406"],review:["review","code review","pull request","merge blocker","diff","changed files","\u5BA1\u67E5","\u4EE3\u7801\u5BA1\u67E5","review \u4E00\u4E0B","\u770B\u4E0B\u6539\u52A8","\u8BC4\u5BA1","pr"],bugfix:["bug","error","exception","failing","fix","failure","traceback","stack trace","runtime error","\u62A5\u9519","\u9519\u8BEF","\u5F02\u5E38","\u4FEE\u590D","\u5931\u8D25","\u6392\u67E5"],edit:["implement","add ","change ","modify ","update ","create ","write ","\u5B9E\u73B0","\u65B0\u589E","\u4FEE\u6539","\u6539\u4E00\u4E0B","\u521B\u5EFA","\u5199\u4E00\u4E2A"],refactor:["refactor","cleanup","restructure","simplify","decouple","rename","\u91CD\u6784","\u6E05\u7406","\u4F18\u5316","\u7B80\u5316","\u89E3\u8026","\u6574\u7406"],plan:["plan","design","architecture","migration","strategy","roadmap","\u8BA1\u5212","\u8BBE\u8BA1","\u67B6\u6784","\u65B9\u6848","\u7B56\u7565","\u8DEF\u7EBF\u56FE"],qa:["explain","what is","how does","help me understand","\u89E3\u91CA","\u4E3A\u4EC0\u4E48","\u662F\u4EC0\u4E48","\u600E\u4E48\u7406\u89E3","\u4EC0\u4E48\u610F\u601D","\u8BF4\u660E"]};function Ma(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}i(Ma,"escapeRegExp");function Pa(e){return/^[a-z0-9][a-z0-9 _-]*$/i.test(e)}i(Pa,"hasAsciiWordBoundaries");function E(e,t){if(!t)return!1;let o=t.trim();return o?Pa(o)?new RegExp(`(^|[^a-z0-9])${Ma(o)}([^a-z0-9]|$)`,"i").test(e):e.includes(t):!1}i(E,"textHasKeyword");function Aa(e,t){let o=0;for(let r of t)r&&E(e,r)&&(o+=r.length>=6||/[^\u0000-\u007f]/.test(r)?2:1);return o}i(Aa,"scoreTaskTypeKeywords");var Ia=/^(?:\s|[!,.?,。!?])*?(?:hi|hello|hey|yo|你好|嗨|哈喽|早上好|下午好|晚上好)(?:\s|[!,.?,。!?])*$/i,Oa=/\b(where is|which file|what file|where does|where do|defined in|located in|file manages|manages this|which component|which function)\b/i;var Na=/\b(review|code review|audit|pr|pull request|merge blocker|look at the changes|changed files)\b/i;var Da=/\b(plan|design|architecture|proposal|strategy|roadmap)\b/i;var La=/\b(debug|investigate|root cause|why is|why does|failing|failure|runtime error|stack trace|traceback)\b/i;var Fa=/\b(implement|add|change|modify|update|create|write|fix|refactor|rewrite|replace)\b/i;var Ua=/\b(docs?|documentation|readme|changelog|release notes?|spec|proposal|design doc|requirements?|prd|adr|hld|dd|guide|runbook|playbook|feature list|known issues?)\b/i;var Ba=/\b(?:api|backend|frontend|service|module|endpoint|component|architecture|package|migration|schema|database|auth|sdk|cli)\s+(?:docs?|documentation|guide|readme|changelog|spec|proposal|design doc|requirements?|prd|adr|hld|dd|runbook|playbook)\b|\b(?:docs?|documentation|guide|readme|changelog|spec|proposal|design doc|requirements?|prd|adr|hld|dd|runbook|playbook)\s+(?:for|about|on)\s+(?:the\s+)?(?:api|backend|frontend|service|module|endpoint|component|architecture|package|migration|schema|database|auth|sdk|cli)\b/i,Ha=/(?:API|\u540e\u7aef|\u524d\u7aef|\u670d\u52a1|\u6a21\u5757|\u63a5\u53e3|\u7ec4\u4ef6|\u67b6\u6784|\u5305|\u8fc1\u79fb|\u6570\u636e\u5e93|\u8ba4\u8bc1)(?:[\u4e00-\u9fffA-Za-z0-9_\-\/\\.\s]{0,8})(?:\u6587\u6863|\u8bf4\u660e\u6587\u6863|README|CHANGELOG|PRD|ADR|HLD|DD|\u6307\u5357)/u,$a=/\b(?:implementation|source code|code comments?|function|class|component|bug|script|tests?|ui)\b/i,ja=/\u4ee3\u7801\u6ce8\u91ca|\u5b9e\u73b0|\u51fd\u6570|\u7c7b|\u7ec4\u4ef6|bug|\u811a\u672c|\u6d4b\u8bd5|\u754c\u9762/u,qa=/\b(?:do not|don't|dont|without|no)\b[\s\S]{0,12}\b(?:change|modify|edit|touch|rewrite|update|mutate)\b[\s\S]{0,8}\bcode\b|\bno code changes?\b/i,Ga=/\u4e0d\u6539\u4ee3\u7801|\u4e0d\u8981\u6539\u4ee3\u7801|\u4e0d\u4fee\u6539\u4ee3\u7801|\u4e0d\u8981\u4fee\u6539\u4ee3\u7801|\u53ea\u6539\u6587\u6863|\u53ea\u66f4\u65b0\u6587\u6863|\u4ec5\u6539\u6587\u6863|\u4ec5\u66f4\u65b0\u6587\u6863/u,Wa=/\b(double[- ]check|re-check|recheck|second pass|second opinion|cross-check|cross check|independently verify|independent review|independent audit|strict audit|extra scrutiny|verify twice)\b/i;var Ka=/\b(code|implementation|function|class|component|module|endpoint|service|repo|repository|file|files|test|bug|feature|script|api|ui|backend|frontend)\b/i;var Xa=/\b(deploy|deployment|restart|reboot|migrate database|run migration|seed database|provision|install dependency|install package|upgrade dependency|kill process|start server|stop server|apply terraform)\b/i;var Ya=/^(?:\s|[!,.?,。!]*)?(?:你好|哈喽|早上好|下午好|晚上好)(?:\s|[!,.?,。!]*)*$/u,za=/在哪个文件|哪个文件|在哪定义|定义在|哪个函数|哪个组件|文件位置|在哪里/u,Va=/审查|评审|review一下|看下改动|代码改动|审阅/u,Qa=/计划|设计|架构|方案|策略|路线图/u,Za=/排查|定位问题|根因|为什么|报错|错误|异常|失败/u,Ja=/实现|新增|修改|创建|写一个|修复|重构|改一下|替换/u,ec=/文档|说明文档|设计文档|需求文档|PRD|ADR|HLD|DD|CHANGELOG|README|功能清单|已知问题/u,tc=/再检查|再审查|双重检查|第二遍|第二轮|二次审查|交叉检查|独立验证|独立审查|更强审查/u,Pn=/代码|实现|函数|类|组件|模块|接口|服务|仓库|文件|测试|bug|功能|脚本|API|界面|后端|前端/u,oc=/部署|重启|重启服务|迁移数据库|运行迁移|初始化数据库|安装依赖|升级依赖|杀进程|启动服务|停止服务|应用terraform/u,rc=/代码|实现|函数|类|组件|模块|接口|bug|功能|前端|后端|脚本/u,An=/实现|新增|修改|更新|创建|编写|修复|重构|补丁|重写|替换|编辑|重命名/u;function nc(e){return Ia.test(e)||Ya.test(e)}i(nc,"isGreetingOnlyPrompt");function oo(e){let t=e.trim();if(!t)return{primaryTask:"conversation",taskFamily:"conversation",actionability:"non_actionable",executionPattern:"direct",shouldUseRepoSignals:!1,requiresRoutingHeuristics:!1,reason:"Empty input is treated as non-actionable conversation."};if(nc(t))return{primaryTask:"conversation",taskFamily:"conversation",actionability:"non_actionable",executionPattern:"direct",shouldUseRepoSignals:!1,requiresRoutingHeuristics:!1,reason:"Pure greeting input should stay conversational and must not be escalated by repository state."};let o=Oa.test(t)||za.test(t),r=Na.test(t)||Va.test(t),n=Da.test(t)||Qa.test(t),s=La.test(t)||Za.test(t),a=Fa.test(t)||Ja.test(t);return r?{primaryTask:"review",taskFamily:"review",actionability:"actionable",executionPattern:"checked-direct",shouldUseRepoSignals:!0,requiresRoutingHeuristics:!0,reason:"Review work is actionable and benefits from harness assessment for accurate scoping."}:n?{primaryTask:"plan",taskFamily:"planning",actionability:"actionable",executionPattern:"coordinated",shouldUseRepoSignals:!0,requiresRoutingHeuristics:!0,reason:"Planning and design requests may benefit from coordinated execution."}:s?{primaryTask:"bugfix",taskFamily:"investigation",actionability:"actionable",executionPattern:"checked-direct",shouldUseRepoSignals:!0,requiresRoutingHeuristics:!0,reason:"Debugging and root-cause work starts as investigation."}:a?{primaryTask:"edit",taskFamily:"implementation",actionability:"actionable",executionPattern:"checked-direct",shouldUseRepoSignals:!0,requiresRoutingHeuristics:!0,reason:"Implementation and editing work is actionable and may later escalate if the evidence warrants it."}:o?{primaryTask:"lookup",taskFamily:"lookup",actionability:"actionable",executionPattern:"direct",shouldUseRepoSignals:!1,requiresRoutingHeuristics:!0,reason:"Lookup queries are actionable but lightweight \u2014 direct execution unless deeper analysis is requested."}:{primaryTask:"unknown",taskFamily:"ambiguous",actionability:"ambiguous",executionPattern:"direct",shouldUseRepoSignals:!1,requiresRoutingHeuristics:!0,reason:"Ambiguous requests need classification before the work approach is locked in."}}i(oo,"inferIntentGate");function ut(e){switch(e){case"conversation":return"conversation";case"lookup":case"qa":return"lookup";case"review":return"review";case"bugfix":return"investigation";case"plan":return"planning";case"edit":case"refactor":return"implementation";default:return"ambiguous"}}i(ut,"inferTaskFamilyFromPrimaryTask");function Bn(e){switch(e){case"conversation":case"lookup":return"direct";case"review":case"investigation":return"checked-direct";case"planning":case"implementation":return"coordinated";default:return"direct"}}i(Bn,"defaultExecutionPatternForFamily");function ic(e,t){let o=oo(e),r=t.taskFamily??ut(t.primaryTask),n=t.actionability??(r==="conversation"?"non_actionable":r==="ambiguous"?o.actionability:"actionable"),s=t.executionPattern??Bn(r);return{taskFamily:r,actionability:n,executionPattern:s}}i(ic,"deriveIntentFields");function Hn(e,t){let o=` ${e.toLowerCase()} `,r=/[\u3400-\u9fff]/u.test(e),n=Ua.test(e)||r&&ec.test(e),s=Ba.test(e)||r&&Ha.test(e),a=$a.test(e)||r&&ja.test(e),c=qa.test(e)||r&&Ga.test(e),d=Xa.test(e)||r&&oc.test(e),u=Ka.test(o)||r&&Pn.test(e),m=/\b(code|implementation|function|class|component|module|endpoint|service|bug|script|api|ui|backend|frontend)\b/i.test(o)||r&&Pn.test(e),l=/\b(implement|add|modify|update|create|write|fix|refactor|rewrite|replace|edit|patch|rename)\b/i.test(o)||r&&An.test(e),g=r&&rc.test(e),R=r&&An.test(e),_=/\b(monorepo|repo|repository|package|packages|architecture|migration)\b/i.test(o),S=/\b(refactor|rewrite|reorganize|migrate|split|merge|consolidate|rename)\b/i.test(o),f=/\b(code|implementation|function|class|component|module|endpoint|service|bug|script|api|ui|backend|frontend)\b/i.test(o)||g,L=/\b(implement|add|modify|update|create|write|fix|refactor|rewrite|replace|edit|patch|rename)\b/i.test(o)||R,w=f&&!s||a,I=_&&!s,p=n&&!d&&c;if(t.primaryTask==="review"&&!L&&!d)return n&&(p||!w)?"docs-only":"read-only";let O=t.primaryTask==="edit"||t.primaryTask==="refactor"||t.taskFamily==="implementation"||t.primaryTask==="bugfix"&&L||L&&w||S&&I;return p&&t.primaryTask!=="refactor"||n&&!d&&!w&&t.primaryTask!=="refactor"?"docs-only":d?"system":O?"code":"read-only"}i(Hn,"deriveMutationSurface");function sc(e,t){let o=/[\u3400-\u9fff]/u.test(e);return Wa.test(e)||o&&tc.test(e)||t.recommendedMode==="strict-audit"?"explicit-check":"default"}i(sc,"deriveAssuranceIntent");function $n(e){let t=` ${e.toLowerCase()} `,r=[...Object.entries(_a).map(([c,d])=>({task:c,score:Aa(t,d)}))].sort((c,d)=>d.score-c.score),n=r[0],s=r[1];if(!n||n.score===0)return{task:"unknown",confidence:na,reason:"Fallback task inference did not find enough strong signals, so it kept the task as unknown."};if(s&&n.score===s.score){let c=ac(e,n.task,s.task);return c?{task:c,confidence:Sn,reason:`Fallback task inference preferred "${c}" because the request used an explicit directive even though multiple task signals were present.`}:{task:"unknown",confidence:ia,reason:`Fallback task inference saw competing signals for "${n.task}" and "${s.task}", so it kept the task as unknown.`}}if(n.task==="qa"&&n.score<4)return{task:"unknown",confidence:sa,reason:"Fallback task inference saw a weak explanation-style signal, but not enough evidence to disable reasoning."};let a=Math.min(la,Sn+n.score*aa+Math.max(0,(n.score-(s?.score??0))*ca));return{task:n.task,confidence:a,reason:`Fallback task inference selected "${n.task}" from textual signals in the request.`}}i($n,"inferTaskSignal");function ac(e,t,o){let r=` ${e.toLowerCase()} `,n=E(r,"review")||E(r,"code review")||E(r,"merge blocker")||E(r,"\u5BA1\u67E5")||E(r,"\u8BC4\u5BA1"),s=E(r,"fix")||E(r,"bug")||E(r,"\u4FEE\u590D")||E(r,"\u62A5\u9519"),a=E(r,"plan")||E(r,"design")||E(r,"\u65B9\u6848")||E(r,"\u8BA1\u5212");return(t==="review"||o==="review")&&n&&!s?"review":(t==="bugfix"||o==="bugfix")&&s&&!n?"bugfix":(t==="plan"||o==="plan")&&a?"plan":null}i(ac,"resolveTiedTask");function fm(e){return $n(e).task}i(fm,"inferTaskType");function dt(e){switch(e){case"simple":return 0;case"moderate":return 1;case"complex":return 2;case"systemic":return 3;default:return 0}}i(dt,"complexityRank");function cc(e,t){return t&&dt(t)>dt(e)?t:e}i(cc,"maxComplexity");function lc(e,t,o){let r=oo(e);if(!r.requiresRoutingHeuristics){let a=r.primaryTask;return Dn(e,{primaryTask:a,confidence:r.actionability==="non_actionable"?.98:.9,riskLevel:"low",recommendedMode:On(a),recommendedThinkingDepth:In(a),complexity:"simple",workIntent:"new",requiresBrainstorm:!1,harnessProfile:"H0_DIRECT",taskFamily:r.taskFamily,actionability:r.actionability,executionPattern:r.executionPattern,routingSource:"fallback",routingAttempts:1,reason:r.reason},t,o)}let n=$n(e),s=n.task;return Dn(e,{primaryTask:s,taskFamily:ut(s),actionability:s==="unknown"?"ambiguous":"actionable",executionPattern:Bn(ut(s)),confidence:n.confidence,riskLevel:Wn(e,s),recommendedMode:On(s),recommendedThinkingDepth:In(s),complexity:"moderate",workIntent:"new",requiresBrainstorm:!1,harnessProfile:"H0_DIRECT",routingSource:"fallback",routingAttempts:1,reason:n.reason},t,o)}i(lc,"buildFallbackRoutingDecision");function jn(e){let t=e.primaryTask==="review"||e.primaryTask==="bugfix"||e.recommendedMode==="pr-review"||e.recommendedMode==="strict-audit"||e.recommendedMode==="investigation";return{harnessProfile:e.harnessProfile,evidenceHeavy:t,brainstorm:e.requiresBrainstorm,workIntent:e.workIntent}}i(jn,"buildProviderPolicyHintsForDecision");async function qn(e,t,o,r){let n=Fn(e),s=oo(t),a=lt({providerName:o.name,model:e.modelOverride??e.model,provider:o,prompt:t,options:e,reasoningMode:n}),c=lc(t,a,r),d=e.effort??le(n),u=n==="off"?"off":n==="auto"?c.recommendedThinkingDepth:va(n),m={...c,recommendedThinkingDepth:u,routingNotes:[...c.routingNotes??[],s.reason,"Heuristic routing only \u2014 LLM router skipped (FEATURE_061 Phase 1; FEATURE_193 retired post-routing calibration)."]};return{effort:d,promptOverlay:"",decision:m,providerPolicy:a}}i(qn,"createReasoningPlan");function Gn(e,t=.5){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):t}i(Gn,"clampUnitInterval");function uc(e,t){let o=` ${e.toLowerCase()} `;return ha.some(r=>E(o,r))?"overwrite":pa.some(r=>E(o,r))?"append":t}i(uc,"inferWorkIntent");function dc(e,t){let o=` ${e.toLowerCase()} `,r=0;for(let n of eo.moderate)E(o,n)&&(r+=1);for(let n of eo.complex)E(o,n)&&(r+=2);for(let n of eo.systemic)E(o,n)&&(r+=3);return(t.primaryTask==="refactor"||t.primaryTask==="plan")&&(r+=2),t.riskLevel==="high"&&(r+=2),t.workIntent==="overwrite"&&(r+=1),r>=ba?"systemic":r>=ya?"complex":r>=ga?"moderate":"simple"}i(dc,"inferComplexity");function mc(e,t,o){let r=` ${e.toLowerCase()} `;return!!(fa.some(n=>E(r,n))||t.primaryTask==="plan"||t.primaryTask==="unknown"&&t.confidence<.7||o==="systemic"||t.workIntent==="overwrite"&&(t.primaryTask==="refactor"||t.riskLevel==="high"))}i(mc,"inferRequiresBrainstorm");function fc(e,t){let o=t.taskFamily??ut(t.primaryTask),r=Hn(e,{primaryTask:t.primaryTask,taskFamily:o}),n=[];return(t.complexity==="complex"||t.complexity==="systemic")&&n.push(`Complexity hint: ${t.complexity}. Assess whether the recommended harness fits the task scope.`),t.needsIndependentQA&&n.push("Independent QA was inferred from prompt signals. Verify whether explicit verification artifacts are needed before declaring the task done."),t.requiresBrainstorm&&n.push("Brainstorm/planning signal detected. Judge whether to plan-first via todo_update before executing."),r==="system"&&(t.riskLevel==="high"||t.workIntent==="overwrite")&&n.push("High-risk system mutation detected. Proceed with caution; consider checkpointing intermediate state."),{harnessProfile:"H0_DIRECT",upgradeCeiling:"H0_DIRECT",notes:n}}i(fc,"selectHarnessProfile");function In(e){switch(e){case"conversation":return"off";case"lookup":return"low";case"review":return"low";case"bugfix":case"edit":return"medium";case"refactor":case"plan":return"high";case"qa":return"off";default:return"medium"}}i(In,"getDefaultDepthForTask");function On(e){switch(e){case"conversation":return"conversation";case"lookup":return"lookup";case"review":return"pr-review";case"bugfix":return"investigation";case"plan":return"planning";default:return"implementation"}}i(On,"getExecutionModeForTask");function Wn(e,t){let o=e.toLowerCase();return t==="conversation"||t==="lookup"?"low":o.includes("security")||o.includes("auth")||o.includes("migration")||o.includes("database")||o.includes("schema")||o.includes("production")||o.includes("\u5B89\u5168")||o.includes("\u9274\u6743")||o.includes("\u6743\u9650")||o.includes("\u8FC1\u79FB")||o.includes("\u6570\u636E\u5E93")||o.includes("\u751F\u4EA7")?"high":t==="review"||t==="bugfix"||t==="plan"?"medium":"low"}i(Wn,"getRiskLevel");function pc(e,t,o){let r=.9,n=` ${e.toLowerCase()} `;return t.primaryTask==="review"?(r-=.12,t.reviewScale==="large"?r-=.16:t.reviewScale==="massive"&&(r-=.28)):t.primaryTask==="bugfix"?r-=.08:t.primaryTask==="plan"&&(r-=.24),t.riskLevel==="medium"?r-=.12:t.riskLevel==="high"&&(r-=.26),t.complexity==="moderate"?r-=.12:t.complexity==="complex"?r-=.28:t.complexity==="systemic"&&(r-=.42),t.requiresBrainstorm&&(r-=.18),t.workIntent==="overwrite"&&(r-=.08),/\b(strict review|must[- ]fix|independently verify|browser test|playwright|e2e|frontend verify)\b/.test(n)&&(r-=.2),o&&(o.changedFileCount>=3&&(r-=.12),o.changedLineCount>=to&&(r-=.14),o.changedLineCount>=Ln&&(r-=.14),o.touchedModuleCount>=2&&(r-=.16),(o.impactedModuleCount??0)>=2&&(r-=.14),o.crossModule&&(r-=.2),o.lowConfidence&&(r-=.08)),Gn(r,.5)}i(pc,"computeSoloBoundaryConfidence");function hc(e,t,o){let r=` ${e.toLowerCase()} `;return!!(/\b(must[- ]fix|strict review|audit|independently verify|browser test|playwright|e2e|console errors?|api check|db check)\b/.test(r)||t.primaryTask==="plan"||t.primaryTask==="qa"||t.riskLevel==="high"||t.complexity==="complex"||t.complexity==="systemic"||t.requiresBrainstorm||o&&(o.crossModule||o.lowConfidence||(o.impactedModuleCount??0)>=2||o.touchedModuleCount>=2||o.changedLineCount>=to))}i(hc,"computeNeedsIndependentQA");function gc(e,t,o,r){let n=e.recommendedMode,s=e.recommendedThinkingDepth,a=[];return r?(r.suggestedComplexity&&dt(r.suggestedComplexity)>dt(t)&&a.push(`Repository intelligence elevated task complexity to ${r.suggestedComplexity} (changedFiles=${r.changedFileCount}, touchedModules=${r.touchedModuleCount}, impactedModules=${r.impactedModuleCount??0}).`),r.crossModule&&a.push("Repository intelligence indicates cross-module impact; keep evidence and merge boundaries explicit."),r.lowConfidence&&a.push("Repository intelligence for the active area is low-confidence; re-query `module_context` / `symbol_context` (or `impact_estimate` for blast-radius questions) for a refined capsule before falling back to raw `read`/`grep`. Use direct file evidence only when a specific load-bearing claim needs byte-level verification."),r.investigationBias&&(e.primaryTask==="review"||e.primaryTask==="bugfix")&&n!=="investigation"?(n="investigation",(s==="off"||s==="low")&&(s="medium"),a.push("Repository intelligence shifted execution toward investigation because the active area is low-confidence or high-blast-radius.")):r.plannerBias&&e.primaryTask!=="review"&&e.primaryTask!=="bugfix"&&n==="implementation"&&(o==="complex"||o==="systemic")&&(n="planning",(s==="off"||s==="low")&&(s="medium"),a.push("Repository intelligence shifted execution toward planning because the task spans multiple modules or dependencies.")),{recommendedMode:n,recommendedThinkingDepth:s,repoNotes:a}):{recommendedMode:n,recommendedThinkingDepth:s,repoNotes:a}}i(gc,"applyRepoSignalsToDecision");function Nn(e,t){let o=t.exec(e);if(!o?.[1])return;let r=o[1].replace(/,/g,"").toLowerCase(),n=r.endsWith("k")?1e3:1,s=r.endsWith("k")?r.slice(0,-1):r,a=Number.parseFloat(s);if(!(!Number.isFinite(a)||a<=0))return Math.round(a*n)}i(Nn,"parsePromptInteger");function yc(e){let t=Nn(e,/(?:^|[\s(,])(\d[\d,]*(?:\.\d+)?k?)\s*(?:changed\s+)?files?\b/i),o=Nn(e,/(?:^|[\s(,])(\d[\d,]*(?:\.\d+)?k?)\s*(?:changed\s+)?lines?\b/i),r;return(t??0)>=xa||(o??0)>=Ln?r="massive":((t??0)>=Ta||(o??0)>=to)&&(r="large"),{changedFileCount:t,changedLineCount:o,reviewScale:r}}i(yc,"inferPromptReviewScale");function bc(e,t){return e?.reviewScale?e.reviewScale:yc(t??"").reviewScale}i(bc,"deriveReviewScaleFromSignals");function Dn(e,t,o,r){let n=t,s=ic(e,t),a=s.actionability==="actionable"&&s.taskFamily!=="conversation"&&s.taskFamily!=="lookup";t.primaryTask==="unknown"&&s.taskFamily==="ambiguous"&&(n={...t,recommendedMode:"implementation",recommendedThinkingDepth:"medium",reason:`${t.reason} Conservative fallback keeps balanced reasoning for ambiguous tasks.`}),n.primaryTask==="qa"&&n.confidence<ua&&(n={...n,primaryTask:"unknown",confidence:Math.min(n.confidence,da),riskLevel:Wn(e,"unknown"),recommendedMode:"implementation",recommendedThinkingDepth:"medium",reason:`${n.reason} Low-confidence QA routing was downgraded to unknown so reasoning stays available.`}),n.confidence<ma&&n.recommendedThinkingDepth==="off"&&(n={...n,primaryTask:"unknown",recommendedMode:"implementation",recommendedThinkingDepth:"medium",reason:`${n.reason} Low-confidence off-mode routing was upgraded to balanced reasoning for safety.`});let c=uc(e,n.workIntent),d=a?r?.repoSignals:void 0,u=dc(e,{...n,workIntent:c}),m=a?cc(u,d?.suggestedComplexity):u,l=t.reviewScale??bc(d,e),g=Hn(e,{primaryTask:n.primaryTask,taskFamily:s.taskFamily}),R=sc(e,n),_="H0_DIRECT",S=mc(e,{...n,workIntent:c,complexity:m,reviewScale:l,mutationSurface:g,assuranceIntent:R,topologyCeiling:_},m)||!!(d?.plannerBias&&(m==="complex"||m==="systemic")),f=Gn(t.soloBoundaryConfidence??pc(e,{primaryTask:n.primaryTask,complexity:m,riskLevel:n.riskLevel,requiresBrainstorm:S,workIntent:c,reviewScale:l},d),.5),L=t.needsIndependentQA??hc(e,{primaryTask:n.primaryTask,complexity:m,riskLevel:n.riskLevel,requiresBrainstorm:S,reviewScale:l},d),w=g==="read-only"||g==="docs-only"?R==="explicit-check":L,I=fc(e,{...n,workIntent:c,complexity:m,requiresBrainstorm:S,reviewScale:l,soloBoundaryConfidence:f,needsIndependentQA:w,mutationSurface:g,assuranceIntent:R,topologyCeiling:_}),{recommendedMode:p,recommendedThinkingDepth:O,repoNotes:ne}=gc({...n,taskFamily:s.taskFamily,actionability:s.actionability,executionPattern:s.executionPattern},u,m,d),F=p,M=O,N="direct";return s.taskFamily==="conversation"?(F="conversation",M="off"):s.taskFamily==="lookup"&&(F="lookup",M=O==="high"?"medium":O),{...n,taskFamily:s.taskFamily,actionability:s.actionability,executionPattern:N,mutationSurface:g,assuranceIntent:R,recommendedMode:F,recommendedThinkingDepth:M,workIntent:c,complexity:m,requiresBrainstorm:S,topologyCeiling:_,reviewScale:l,soloBoundaryConfidence:f,needsIndependentQA:w,harnessProfile:I.harnessProfile,upgradeCeiling:I.upgradeCeiling,routingSource:n.routingSource??"fallback",routingAttempts:n.routingAttempts??1,routingNotes:[...n.routingNotes??[],...I.notes,...ne,...a?[]:["Intent gate ignored repository scaling signals for this request."]]}}i(Dn,"stabilizeRoutingDecision");function mt(e,t){return Buffer.byteLength(JSON.stringify({systemPrompt:t,messages:e}),"utf8")}i(mt,"estimateProviderPayloadBytes");function ft(e){return e<16*1024?"small":e<64*1024?"medium":e<192*1024?"large":"xlarge"}i(ft,"bucketProviderPayloadSize");function Fe(e){let t=zo.exec(e);return t?[t[1].toUpperCase(),t[2]??""]:["",""]}i(Fe,"checkPromiseSignal");function Tc(){return process.env.KODAX_DEBUG_STREAM==="1"||process.env.KODAX_DEBUG_RESILIENCE==="1"}i(Tc,"shouldDebugResilience");function A(e,t){Tc()&&console.error(e,t)}i(A,"emitResilienceDebug");function Kn(e,t,o){let r=e.modelSelection.provider??t.provider,n=e.modelSelection.model??t.modelOverride??t.model,s=e.thinkingLevel,a=Te(r);if(!a.isConfigured())throw new Error(`Provider "${r}" not configured. Set ${a.getApiKeyEnv()}`);let c=fr(o,a,n);return{providerName:r,modelOverride:n,thinkingLevel:s,provider:a,contextWindow:c}}i(Kn,"resolvePerTurnProvider");function ro(e,t){if(!e.isConfigured())throw new Error(`Provider "${t}" not configured. Set ${e.getApiKeyEnv()}`)}i(ro,"assertProviderConfigured");var no=`You are KodaX, a helpful multi-provider coding agent. You can read, write, and edit files, and execute shell commands.
4
-
5
- ## Error Handling
6
-
7
- When a tool call returns an error:
8
- 1. STOP and READ the error message carefully
9
- 2. DO NOT repeat the same tool call with the same parameters \u2014 a re-issue with identical params almost always lands in a retry loop that wastes tokens without producing new information. Vary the params or switch to a different tool
10
- 3. Identify what's wrong (missing parameter? wrong type? wrong path?)
11
- 4. Fix the issue BEFORE making another tool call
12
- 5. Common errors:
13
- - "Missing required parameter 'X'" -> Add the missing parameter to your JSON
14
- - "File not found" -> Check the path with read or glob first
15
- - "String not found" -> Read the file again to see exact content
16
-
17
- When a shell command fails, prefer this recovery order:
18
- 1. Check whether a specialized tool can solve the task directly
19
- 2. Fix the command itself (quoting, workdir, platform-specific command, smaller scope)
20
- 3. Split the task into smaller read/edit/write steps
21
- 4. Only create a helper script when repeated inline commands are clearly less safe or less maintainable
22
-
23
- ## Editing Files
24
-
25
- - Always read the file first to understand its current content
26
- - Make precise, targeted edits rather than rewriting entire files
27
- - Preserve the existing code style and formatting
28
- - Do not create new files unless the user asks for one or the task genuinely needs one. Prefer editing an existing file to creating a new one, as this prevents file bloat and keeps each tool call small
29
- - When a modification is scoped to an existing file, ALWAYS prefer \`edit\` over \`write\`. Only fall back to \`write\` when no file exists yet or the user explicitly requested a complete rewrite
30
-
31
- ## Tool Usage
32
-
33
- Prefer specialized tools over shell for file operations:
34
- - Use read to view files instead of cat, head, or tail
35
- - Use edit to modify existing files instead of sed or awk when possible
36
- - Use write to create new files instead of echo redirection or heredocs
37
- - Use glob or grep for file discovery and content search before falling back to shell
38
- - When multiple read-only tool calls are independent, emit them in the same response so parallel mode can run them together
39
- - Only serialize tool calls when a later call depends on an earlier result
40
- - Keep parallel batches focused: prefer a few narrow grep/read/diff calls over many tiny sequential probes
41
-
42
- Read is intentionally bounded:
43
- - A single read call only returns a limited slice of a file
44
- - For large files, continue with offset/limit instead of retrying a whole-file read
45
- - Prefer grep first, then read the specific section you need
46
-
47
- Tool outputs are also bounded:
48
- - Large bash output may be truncated to the tail
49
- - Large grep results and diffs may be summarized
50
- - When you see a truncation hint, narrow the next tool call instead of repeating the same broad request
51
- - If edit fails to find a stable anchor, do not rewrite the entire existing file with write; retry with a smaller unique edit anchor or use insert_after_anchor for section appends
52
-
53
- If you truly need a script:
54
- - Do NOT create temporary scripts or scratch files in the project root \u2014 they leak into \`git status\` and file listings, confusing the user about what was actually changed
55
- - Do NOT place them at \`.agent/\` top level \u2014 that directory is reserved for system-managed artifacts (managed-tasks/, project/, repo-intelligence/, etc.)
56
- - Write them to the Session Scratch Directory when one is shown in the environment
57
- - If no Session Scratch Directory is shown, write them under a unique session-scoped subdirectory of \`.agent/tmp/sessions/\` (relative to the git root), not directly in the shared \`.agent/tmp/\` root
58
- - Alternatively, use the system temp directory if the script does not need to be inspectable from the project
59
- - Treat helper scripts as a last resort, not the default recovery path
60
-
61
- ## Shell Commands
62
-
63
- - Be careful with destructive operations
64
- - Reserve shell commands for terminal operations such as git, package managers, builds, tests, and system commands
65
- - Prefer read-only operations when possible
66
- - For file edits, prefer read/edit/write over shell transforms unless shell scripting is genuinely more efficient
67
-
68
- ### Cross-Platform Notes
69
-
70
- Different platforms have different commands:
71
- - Move: \`move\` (Windows) vs \`mv\` (Unix/Mac)
72
- - List: \`dir\` (Windows) vs \`ls\` (Unix/Mac)
73
- - Delete: \`del\` (Windows) vs \`rm\` (Unix/Mac)
74
-
75
- **IMPORTANT: Directories are created automatically by the \`write\` tool.**
76
- - NEVER use \`mkdir\` before writing files - the write tool handles directory creation
77
- - If you truly need an empty directory: \`mkdir dir\` (Windows) or \`mkdir -p dir\` (Unix)
78
-
79
- If you see "not recognized", "\u4E0D\u662F\u5185\u90E8\u6216\u5916\u90E8\u547D\u4EE4", or a similar shell lookup error, the command does not exist on this platform. Try the platform equivalent.
80
-
81
- ## Multi-step Tasks
82
-
83
- - Track your progress by listing what you've done and what's next
84
- - Break complex tasks into smaller steps
85
- - Summarize progress periodically
86
-
87
- ## Plan Before Action
88
-
89
- For any non-trivial task (creating files, editing code, running complex commands):
90
- 1. First explain your understanding of the task
91
- 2. Outline your approach (what files, what changes, what order)
92
- 3. Consider potential issues (edge cases, dependencies, conflicts)
93
- 4. Then execute step by step
94
-
95
- For simple read-only tasks (reading a file, listing directory), just do it directly.
96
-
97
- If the environment is currently in a read-only planning mode:
98
- - Do not try to write files or run mutating shell commands during planning
99
- - Finish the plan first
100
- - After the plan is complete, use \`ask_user_question\` to ask whether the user wants to proceed with implementation
101
- - If the user confirms, call \`set_permission_mode\` with \`mode: "accept-edits"\` to switch to implementation mode
102
- - If the user declines, stay in plan mode \u2014 do NOT call \`set_permission_mode\`
103
-
104
- ## Asking User Questions
105
-
106
- When you need the user to make decisions, use \`ask_user_question\`.
107
- - For **multiple independent questions**, use the \`questions\` array (the schema accepts up to 4 items per call \u2014 if you need more, ask the additional ones in a follow-up turn). Each question has its own \`question\`, \`header\`, \`options\`, and optional \`multi_select\`. The user answers each question separately. Do NOT combine multiple questions into a single question string with pre-combined option combinations, because that forces the user to mentally disambiguate combinations and breaks the option-button UI.
108
- - For a **single question**, use the \`question\` + \`options\` fields as before.
109
- - For **free-text input**, use \`kind: "input"\`.
110
-
111
- Always explain what you're doing before taking action.
112
-
113
- {context}`;import Yc from"path";import{createHash as xc}from"crypto";var Xn={base:100,"runtime-context":200,"session-context":300,"capability-truth":400,"base-suffix":450,"mode-overlay":500,"project-rules":600,"skill-addendum":700,specialist:800},Yn={"base-system":{id:"base-system",title:"Base System Prompt",owner:"prompts",feature:"FEATURE_048",slot:"base",order:100,stability:"stable"},"base-system-suffix":{id:"base-system-suffix",title:"Base System Prompt Suffix",owner:"prompts",feature:"FEATURE_048",slot:"base-suffix",order:200,stability:"stable"},"environment-context":{id:"environment-context",title:"Environment Context",owner:"prompts",feature:"FEATURE_048",slot:"runtime-context",order:100,stability:"dynamic"},"runtime-fact":{id:"runtime-fact",title:"Runtime Fact",owner:"prompts",feature:"FEATURE_048",slot:"runtime-context",order:150,stability:"dynamic"},"working-directory":{id:"working-directory",title:"Working Directory",owner:"prompts",feature:"FEATURE_048",slot:"runtime-context",order:200,stability:"dynamic"},"session-scratch-directory":{id:"session-scratch-directory",title:"Session Scratch Directory",owner:"prompts",feature:"FEATURE_071",slot:"runtime-context",order:250,stability:"dynamic"},"git-context":{id:"git-context",title:"Git Context",owner:"prompts",feature:"FEATURE_048",slot:"session-context",order:100,stability:"dynamic"},"project-snapshot":{id:"project-snapshot",title:"Project Snapshot",owner:"prompts",feature:"FEATURE_048",slot:"session-context",order:200,stability:"dynamic"},"long-running-context":{id:"long-running-context",title:"Long-Running Context",owner:"prompts",feature:"FEATURE_048",slot:"session-context",order:300,stability:"dynamic"},"repo-intelligence-context":{id:"repo-intelligence-context",title:"Repository Intelligence Context",owner:"reasoning",feature:"FEATURE_048",slot:"capability-truth",order:100,stability:"dynamic"},"mcp-capability-context":{id:"mcp-capability-context",title:"MCP Capability Context",owner:"reasoning",feature:"FEATURE_035",slot:"capability-truth",order:200,stability:"dynamic"},"specialist-agents":{id:"specialist-agents",title:"Specialist Agents",owner:"agent",feature:"FEATURE_191",slot:"capability-truth",order:300,stability:"dynamic"},"self-knowledge-routing":{id:"self-knowledge-routing",title:"KodaX Self-Knowledge",owner:"prompts",feature:"FEATURE_218",slot:"capability-truth",order:350,stability:"stable"},"execution-guidance":{id:"execution-guidance",title:"Execution Guidance",owner:"prompts",feature:"FEATURE_048",slot:"capability-truth",order:360,stability:"stable"},"long-running-overlay":{id:"long-running-overlay",title:"Long-Running Overlay",owner:"prompts",feature:"FEATURE_048",slot:"mode-overlay",order:100,stability:"dynamic"},"prompt-overlay":{id:"prompt-overlay",title:"Prompt Overlay",owner:"reasoning",feature:"FEATURE_048",slot:"mode-overlay",order:200,stability:"dynamic"},"project-agents":{id:"project-agents",title:"Project Rules",owner:"project",feature:"FEATURE_048",slot:"project-rules",order:100,stability:"project"},"memory-rules":{id:"memory-rules",title:"Memory Rules",owner:"project",feature:"FEATURE_124",slot:"project-rules",order:150,stability:"project"},"project-memory":{id:"project-memory",title:"Persistent Memory Index",owner:"project",feature:"FEATURE_124",slot:"project-rules",order:200,stability:"project"},"skills-addendum":{id:"skills-addendum",title:"Skills Addendum",owner:"skills",feature:"FEATURE_048",slot:"skill-addendum",order:100,stability:"dynamic"},"tool-construction":{id:"tool-construction",title:"Tool Construction Mode",owner:"agent",feature:"FEATURE_087",slot:"specialist",order:100,stability:"specialist"}};function k(e,t,o){let r=Yn[e];if(!r)throw new Error(`Unknown prompt section: ${e}`);return{...r,inclusionReason:o,content:t.trim()}}i(k,"createPromptSection");function io(e){return[...e].sort((t,o)=>{let r=Xn[t.slot]-Xn[o.slot];return r!==0?r:t.order-o.order})}i(io,"orderPromptSections");function zn(e){return io(e).map(t=>t.content.trim()).filter(Boolean).join(`
114
-
115
- `).trim()}i(zn,"renderPromptSections");function so(e,t){let o=io(e),r=zn(o),n=xc("sha256").update(JSON.stringify({kind:"system",metadata:t,sections:o.map(s=>({id:s.id,title:s.title,slot:s.slot,order:s.order,owner:s.owner,feature:s.feature,stability:s.stability,inclusionReason:s.inclusionReason,content:s.content}))})).digest("hex");return{kind:"system",sections:o,rendered:r,hash:n,metadata:t}}i(so,"buildPromptSnapshot");import gt from"node:path";import{exec as Fc}from"node:child_process";import{promisify as Uc}from"node:util";import*as Vn from"node:path";function Qn(e){let t=Qe(e);return vc(t).join(`
116
- `)}i(Qn,"buildMemoryRulesSection");function vc(e){return["# Memory (per-project)","",`You have a persistent, file-based memory system at \`${e.split(Vn.sep).join("/")}\`. The directory is created on first write \u2014 you may write to it directly with the Write tool (do not run mkdir or check for its existence first).`,"","You should build up this memory system over time so that future conversations can have a complete picture of who the user is, how they would like to collaborate with you, what behaviors to avoid or repeat, and the context behind the work the user gives you.","","If the user explicitly asks you to remember something, save it immediately as whichever type fits best. If they ask you to forget something, find and remove the relevant entry.","",...kc,"",...wc,"",...Ec,"",...Rc,"",...Sc,"",...Cc]}i(vc,"MEMORY_RULES_LINES");var kc=["## Types of memory","","There are several discrete types of memory that you can store in your memory system:","","<types>","<type>"," <name>user</name>"," <description>Contain information about the user's role, goals, responsibilities, and knowledge. Great user memories help you tailor your future behavior to the user's preferences and perspective. Your goal in reading and writing these memories is to build up an understanding of who the user is and how you can be most helpful to them specifically. For example, you should collaborate with a senior software engineer differently than a student who is coding for the very first time. Keep in mind, that the aim here is to be helpful to the user. Avoid writing memories about the user that could be viewed as a negative judgement or that are not relevant to the work you're trying to accomplish together.</description>"," <when_to_save>When you learn any details about the user's role, preferences, responsibilities, or knowledge</when_to_save>"," <how_to_use>When your work should be informed by the user's profile or perspective. For example, if the user is asking you to explain a part of the code, you should answer that question in a way that is tailored to the specific details that they will find most valuable or that helps them build their mental model in relation to domain knowledge they already have.</how_to_use>"," <examples>"," user: I'm a data scientist investigating what logging we have in place"," assistant: [saves user memory: user is a data scientist, currently focused on observability/logging]",""," user: I've been writing Go for ten years but this is my first time touching the React side of this repo"," assistant: [saves user memory: deep Go expertise, new to React and this project's frontend \u2014 frame frontend explanations in terms of backend analogues]"," </examples>","</type>","<type>"," <name>feedback</name>"," <description>Guidance the user has given you about how to approach work \u2014 both what to avoid and what to keep doing. These are a very important type of memory to read and write as they allow you to remain coherent and responsive to the way you should approach work in the project. Record from failure AND success: if you only save corrections, you will avoid past mistakes but drift away from approaches the user has already validated, and may grow overly cautious.</description>",` <when_to_save>Any time the user corrects your approach ("no not that", "don't", "stop doing X") OR confirms a non-obvious approach worked ("yes exactly", "perfect, keep doing that", accepting an unusual choice without pushback). Corrections are easy to notice; confirmations are quieter \u2014 watch for them. In both cases, save what is applicable to future conversations, especially if surprising or not obvious from the code. Include *why* so you can judge edge cases later.</when_to_save>`," <how_to_use>Let these memories guide your behavior so that the user does not need to offer the same guidance twice.</how_to_use>"," <body_structure>Lead with the rule itself, then a **Why:** line (the reason the user gave \u2014 often a past incident or strong preference) and a **How to apply:** line (when/where this guidance kicks in). Knowing *why* lets you judge edge cases instead of blindly following the rule.</body_structure>"," <examples>"," user: don't mock the database in these tests \u2014 we got burned last quarter when mocked tests passed but the prod migration failed"," assistant: [saves feedback memory: integration tests must hit a real database, not mocks. Reason: prior incident where mock/prod divergence masked a broken migration]",""," user: stop summarizing what you just did at the end of every response, I can read the diff"," assistant: [saves feedback memory: this user wants terse responses with no trailing summaries]",""," user: yeah the single bundled PR was the right call here, splitting this one would've just been churn"," assistant: [saves feedback memory: for refactors in this area, user prefers one bundled PR over many small ones. Confirmed after I chose this approach \u2014 a validated judgment call, not a correction]"," </examples>","</type>","<type>"," <name>project</name>"," <description>Information that you learn about ongoing work, goals, initiatives, bugs, or incidents within the project that is not otherwise derivable from the code or git history. Project memories help you understand the broader context and motivation behind the work the user is doing within this working directory.</description>",' <when_to_save>When you learn who is doing what, why, or by when. These states change relatively quickly so try to keep your understanding of this up to date. Always convert relative dates in user messages to absolute dates when saving (e.g., "Thursday" \u2192 "2026-03-05"), so the memory remains interpretable after time passes.</when_to_save>'," <how_to_use>Use these memories to more fully understand the details and nuance behind the user's request and make better informed suggestions.</how_to_use>"," <body_structure>Lead with the fact or decision, then a **Why:** line (the motivation \u2014 often a constraint, deadline, or stakeholder ask) and a **How to apply:** line (how this should shape your suggestions). Project memories decay fast, so the why helps future-you judge whether the memory is still load-bearing.</body_structure>"," <examples>"," user: we're freezing all non-critical merges after Thursday \u2014 mobile team is cutting a release branch"," assistant: [saves project memory: merge freeze begins 2026-03-05 for mobile release cut. Flag any non-critical PR work scheduled after that date]",""," user: the reason we're ripping out the old auth middleware is that legal flagged it for storing session tokens in a way that doesn't meet the new compliance requirements"," assistant: [saves project memory: auth middleware rewrite is driven by legal/compliance requirements around session token storage, not tech-debt cleanup \u2014 scope decisions should favor compliance over ergonomics]"," </examples>","</type>","<type>"," <name>reference</name>"," <description>Stores pointers to where information can be found in external systems. These memories allow you to remember where to look to find up-to-date information outside of the project directory.</description>"," <when_to_save>When you learn about resources in external systems and their purpose. For example, that bugs are tracked in a specific project in Linear or that feedback can be found in a specific Slack channel.</when_to_save>"," <how_to_use>When the user references an external system or information that may be in an external system.</how_to_use>"," <examples>",` user: check the Linear project "INGEST" if you want context on these tickets, that's where we track all pipeline bugs`,' assistant: [saves reference memory: pipeline bugs are tracked in Linear project "INGEST"]',""," user: the Grafana board at grafana.internal/d/api-latency is what oncall watches \u2014 if you're touching request handling, that's the thing that'll page someone"," assistant: [saves reference memory: grafana.internal/d/api-latency is the oncall latency dashboard \u2014 check it when editing request-path code]"," </examples>","</type>","</types>"],wc=["## What NOT to save in memory","","- Code patterns, conventions, architecture, file paths, or project structure \u2014 these can be derived by reading the current project state.","- Git history, recent changes, or who-changed-what \u2014 `git log` / `git blame` are authoritative.","- Debugging solutions or fix recipes \u2014 the fix is in the code; the commit message has the context.","- Anything already documented in `AGENTS.md` or `CLAUDE.md` files in the repo.","- Ephemeral task details: in-progress work, temporary state, current conversation context.","","These exclusions apply even when the user explicitly asks you to save. If they ask you to save a PR list or activity summary, ask what was *surprising* or *non-obvious* about it \u2014 that is the part worth keeping."],Ec=["## How to save memories","","Saving a memory is a two-step process:","","**Step 1** \u2014 write the memory to its own file (e.g., `user_role.md`, `feedback_no_mock_db.md`, `project_q2.md`, `reference_grafana.md`) using this frontmatter format:","","```markdown","---","name: {{short title shown in the MEMORY.md index}}","description: {{one-line description \u2014 used to decide relevance in future conversations, so be specific}}","type: {{user, feedback, project, reference}}","---","","{{memory content \u2014 for feedback/project types, structure as: rule/fact, then **Why:** and **How to apply:** lines}}","```","","**Step 2** \u2014 Edit `MEMORY.md` to prepend a one-line entry AT THE TOP of the file:","","`- [<title>](<filename>.md) \u2014 <one-line hook under ~150 chars>`","","`MEMORY.md` is an index, not a memory file. Each entry must be one line. Never write the memory body directly into `MEMORY.md`. The full body lives in the topic file; the index entry is what is loaded into your conversation context.","","Prepending to the top creates a natural-LRU index ordering: recent memories stay visible while older entries sink. The index is capped at 200 lines / 25 KB \u2014 entries below the cap are silently truncated from the context that future sessions see, so keep the index concise.","","## GC responsibilities","","Memory does not auto-expire. You are responsible for keeping it tidy:","","- **Before writing**, check whether an existing memory already covers the topic. If yes, `Edit` it instead of creating a duplicate. Use `Grep` over the memory directory to find existing entries by keyword.","- **Update or remove memories that turn out to be wrong or outdated**:"," - To update: `Edit <file>` and rewrite the body. Update the MEMORY.md index line if the description changed."," - To remove: `Bash rm <file>` then `Edit MEMORY.md` to delete the index line.","- **Stale memory encountered during use** \u2192 do not work around it. Update or delete it on the spot.","","- Keep the `name`, `description`, and `type` fields up to date with the body.","- Organize memory semantically by topic, not chronologically. Two memories about the same topic should be merged into one file."],Rc=["## When to access memories","- When memories seem relevant, or the user references prior-conversation work.","- You MUST access memory when the user explicitly asks you to check, recall, or remember.","- If the user says to *ignore* or *not use* memory: proceed as if MEMORY.md were empty. Do not apply remembered facts, cite, compare against, or mention memory content.","- Memory records can become stale over time. Use memory as context for what was true at a given point in time. Before answering the user or building assumptions based solely on information in memory records, verify that the memory is still correct and up-to-date by reading the current state of the files or resources. If a recalled memory conflicts with current information, trust what you observe now \u2014 and update or remove the stale memory rather than acting on it."],Sc=["## Before recommending from memory","","A memory that names a specific function, file, or flag is a claim that it existed *when the memory was written*. It may have been renamed, removed, or never merged. Before recommending it:","","- If the memory names a file path: check the file exists.","- If the memory names a function or flag: grep for it.","- If the user is about to act on your recommendation (not just asking about history), verify first.","",'"The memory says X exists" is not the same as "X exists now."',"","A memory that summarizes repo state (activity logs, architecture snapshots) is frozen in time. If the user asks about *recent* or *current* state, prefer `git log` or reading the code over recalling the snapshot."],Cc=["## Memory and other forms of persistence","","Memory is one of several persistence mechanisms available to you. The distinction is that memory can be recalled in future conversations, so it should not be used for persisting information that is only useful within the scope of the current conversation.","","- **Plans / todos** instead of memory: when breaking down work into discrete steps for the CURRENT task, use `todo_create` / `todo_update`. Tasks completed in this conversation are not memory-worthy unless they revealed something surprising.","- **AGENTS.md / CLAUDE.md** instead of memory: code conventions, architecture decisions, project-permanent rules go to `<repo>/AGENTS.md` (user-maintained). If the user states a permanent project rule, suggest they add it to `AGENTS.md` instead of saving to memory.","- **Git commits** instead of memory: who changed what, when, and why is in `git log` / `git blame` / commit messages. Memory should not duplicate that record."];import*as oe from"node:fs";import*as ht from"node:path";var ao=60,co=8e3,pt=new Map;function _c(e){let t;try{t=oe.statSync(e).mtimeMs}catch{pt.delete(e);return}let o=pt.get(e);if(o&&o.mtimeMs===t)return o.content;try{let r=oe.readFileSync(e,"utf-8");return pt.set(e,{mtimeMs:t,content:r}),r}catch{pt.delete(e);return}}i(_c,"readEntrypointWithCache");function Jn(e){let t=Qe(e),o=tr(e),r=_c(o),n=r!==void 0;return{content:n?Mc(t,r):Ic(t),memoryDir:t,entrypointExists:n}}i(Jn,"buildMemorySection");function Mc(e,t){let o=Pc(t),r=Oc(e);return["=== Persistent memory (cross-session) ===",`Memory directory: ${e}`,"",o.content,...o.warning===void 0?[]:["",o.warning],...r,"","[Bounded index only - read individual files via the read tool when you need details. See memory rules section above.]"].join(`
117
- `)}i(Mc,"buildBodyWithEntrypoint");function Pc(e){let t=e.trimEnd(),o=t.length===0?[]:t.split(/\r?\n/),r=o.length,n=Buffer.byteLength(t,"utf8"),s=t,a=!1;return r>ao&&(s=o.slice(0,ao).join(`
118
- `),a=!0),Buffer.byteLength(s,"utf8")>co&&(s=Ac(s,co),a=!0),a?{content:s,warning:[`> NOTE: MEMORY.md has ${r} lines / ${Zn(n)}.`,`Only a bounded ${ao}-line / ${Zn(co)} index preview is loaded here.`,"Read relevant topic files on demand instead of relying on the prompt to carry every memory."].join(" ")}:{content:s}}i(Pc,"truncatePromptMemoryIndex");function Ac(e,t){let o=0,r=[];for(let a of e){let c=Buffer.byteLength(a,"utf8");if(o+c>t)break;r.push(a),o+=c}let n=r.join(""),s=n.lastIndexOf(`
119
- `);return(s>0?n.slice(0,s):n).trimEnd()}i(Ac,"sliceUtf8ToByteCap");function Zn(e){return e<1024?`${e}B`:`${(e/1024).toFixed(1)}KB`}i(Zn,"formatBytes");function Ic(e){return["=== Persistent memory (cross-session) ===",`Memory directory: ${e}`,"","Your MEMORY.md is currently empty. When you save new memories, they will appear here."].join(`
120
- `)}i(Ic,"buildEmptyFallback");function Oc(e){let t=[...Nc(e)].sort((o,r)=>r.mtimeMs-o.mtimeMs).slice(0,8);return t.length===0?[]:["","Governed memory hints (deterministic):",...t.map(o=>`- ${o.title}: ${o.hook} (${o.filename})`)]}i(Oc,"buildMemoryHintLines");function Nc(e){let t;try{t=oe.readdirSync(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let r of t){if(!r.isFile()||r.name==="MEMORY.md"||!r.name.endsWith(".md"))continue;let n=Dc(ht.join(e,r.name),r.name);n!==void 0&&o.push(n)}return o}i(Nc,"readMemoryHintEntries");function Dc(e,t){let o,r;try{o=oe.readFileSync(e,"utf-8"),r=oe.statSync(e).mtimeMs}catch{return}let n=or(o),s=n.frontmatter.name??ht.basename(t,".md"),a=n.frontmatter.description??Lc(n.body)??s;return{filename:t,title:s,hook:a,mtimeMs:r}}i(Dc,"readMemoryHintEntry");function Lc(e){let t=e.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0);return t===void 0?void 0:t.slice(0,160)}i(Lc,"firstBodyLine");function lo(e="KodaX"){let t=e==="KodaX"?[`Claude Code and Codex CLI knowledge that does not match ${e} \u2014 ${e} uses`,"~/.kodax/config.json and KODAX_* env vars, not .claude/settings.json or","config.toml. Only bring up Claude Code or Codex when the user explicitly asks"]:[`Claude Code and Codex CLI knowledge that does not match ${e}.`,"Only bring up Claude Code or Codex when the user explicitly asks"];return[`${e} self-knowledge: when the user asks how to use, install, configure,`,`troubleshoot, or extend ${e} itself \u2014 providers, custom providers, config,`,"permissions, slash commands, tools, custom agents, skills, extensions, MCP, repo","intelligence, sessions, the doctor command, or the SDK \u2014 call the","kodax_manual tool first and answer from it.","",`Treat kodax_manual as the version-bound source of truth for ${e} product`,"behavior. Do not answer these from pretraining, because pretraining mixes in",...t,"to compare. Project AGENTS.md still governs work in the current repo; the",`manual governs questions about ${e} as a product.`].join(`
121
- `)}i(lo,"buildSelfKnowledgeRoutingRule");var Bm=lo();var ei=["EXECUTION GUIDANCE (match your approach to the kind of work \u2014 judge which fits):","- Respond in the primary natural language of the user's request for your user-visible explanations, progress notes, and final answer \u2014 if the user wrote in Chinese, reply in Chinese. Code, identifiers, file paths, tool output, and quoted evidence stay in their source language.","- After you make a change, check the result against what was actually asked before you finalize. Confirm the change does what the request wanted, backed by evidence (a test run, a re-read of the edited region) rather than confidence alone \u2014 because a change that looks right but was never verified is how silent regressions ship.","- When you are reviewing code or a pull request: report only high-confidence issues that materially affect correctness, reliability, security, or merge-readiness. Do not list naming, formatting, or style preferences as findings \u2014 padding a review with nits buries the issues that matter. Lead with the must-fix items, then optional improvements, and for each issue state the concrete consequence it causes.","- When you are doing a broad audit: cover correctness, security, performance, and maintainability together, and keep issues you have confirmed separate from lower-confidence risks so the reader can tell which is which.","- When you are investigating a bug or an unknown: isolate the root cause and validate your assumptions with concrete evidence \u2014 a reproduction, a targeted check \u2014 before making broad changes, because a fix applied before the cause is understood usually treats a symptom.","- When the task is design or planning work: reason through architecture, constraints, sequencing, and risks before writing code.","- When the request is genuinely ambiguous: frame the options briefly and make the path you chose explicit before any irreversible edit, so the user can redirect before the cost is sunk."].join(`
122
- `);var ti="[Tool Construction Mode]\nYou may build a new tool at runtime when an existing builtin or extension does not solve the user's task and a thin reusable handler would. Walk the five-step staircase in order \u2014 DO NOT skip steps:\n\n 1. scaffold_tool \u2014 emit a fillable artifact JSON skeleton for {name, version, description}.\n 2. (edit the JSON) \u2014 fill in inputSchema, capabilities.tools (whitelist of builtins the handler may call via ctx.tools.<name>), and the handler.code body.\n 3. validate_tool \u2014 dry-run shape + AST + provider-schema checks on the candidate JSON. Fix any errors before staging.\n 4. stage_construction \u2014 persist to .kodax/constructed/tools/<name>/<version>.json (status=staged).\n 5. test_tool \u2014 run the full check pipeline against the staged artifact (shape + AST + schema + handler materialize).\n 6. activate_tool \u2014 register the handler into the live tool registry. The tool is then callable as <name> in subsequent turns.\n\nHard rules the AST stage enforces (failing any of these aborts the staircase):\n - No `eval`, no `new Function(...)`. Constructed handlers are not allowed to evaluate dynamic source.\n - The handler MUST export an `async function handler(input, ctx)` (function decl, arrow, or function expression with at least 2 parameters).\n\nCapability rule: the handler can ONLY invoke tools listed in `capabilities.tools` through `ctx.tools.<name>(...)`. Calls to undeclared tools throw at runtime. Direct `require`, `import()`, `process.env`, network access, and filesystem APIs are not provided \u2014 route all I/O through declared builtin tools (`read` / `write` / `bash` / `grep` / etc.).\n\nVersioning: re-staging an active version is rejected. Bump the semver string when iterating; revoke first if the user wants to replace an in-use handler at the same version. The on-disk artifact is the source of truth \u2014 there is no in-memory cache.";function oi(e){return!!e}i(oi,"shouldIncludeToolConstructionSection");var uo=Uc(Fc),mo="{context}";async function fo(e,t,o){let r=o??$(e.context),n=[],{prefix:s,suffix:a}=qc(no);n.push(k("base-system",s,"Always include the stable base identity and safety baseline.")),a&&n.push(k("base-system-suffix",a,"Preserve any trailing stable base prompt instructions that follow the context placeholder.")),n.push(k("environment-context",Gc(),"Always disclose runtime platform details so shell guidance stays accurate."));let c=Wc(e);c&&n.push(k("runtime-fact",c,"Always disclose the active provider and model so identity questions can be answered truthfully instead of guessed from pretraining.")),n.push(k("working-directory",`Working Directory: ${r}`,"Always disclose the resolved execution directory for deterministic file operations."));let d=Xr(e);if(d&&n.push(k("session-scratch-directory",`Session Scratch Directory: ${d}`,"Disclose the per-session scratch directory so temporary helper files never collide across same-directory sessions.")),t){let S=await Kc(r);S&&n.push(k("git-context",S,"Include repository state when the session starts so the agent can orient itself quickly."));let f=await Xc(r);f&&n.push(k("project-snapshot",f,"Include a lightweight project snapshot at the start of a session."))}e.context?.repoIntelligenceContext?.trim()&&n.push(k("repo-intelligence-context",e.context.repoIntelligenceContext,"Include repository-intelligence capability truth only when it is active for this runtime."));let u=await e.extensionRuntime?.getCapabilityPromptContext("mcp");u?.trim()&&n.push(k("mcp-capability-context",u,"Include runtime-owned MCP capability truth only when active MCP servers are configured."));let m=jc(e.context?.agentScope);m&&n.push(k("specialist-agents",m,"List registered specialist agents the Worker can dispatch via dispatch_child_task(subagent_type) so curated prompts and tool whitelists get reused instead of duplicated.")),n.push(k("self-knowledge-routing",lo(e.selfManual?.productName),"Route product usage/config/troubleshooting questions to the kodax_manual tool as the version-bound product source of truth.")),n.push(k("execution-guidance",ei,"Match your approach to the kind of work (review / audit / investigation / planning / ambiguity) by self-judgment, not router assignment.")),e.context?.promptOverlay?.trim()&&n.push(k("prompt-overlay",e.context.promptOverlay,"Task-shaping rule for this request plus any caller-supplied context."));let l=Rr({cwd:r,projectRoot:e.context?.gitRoot??void 0}),g=Sr(l);g&&n.push(k("project-agents",g,"Append project-scoped AI rules after runtime truth so local constraints keep higher precedence than skills.")),n.push(k("memory-rules",Qn(r),"Teach the agent the 4-type memory taxonomy, save procedure, and recall etiquette so writes are consistent across sessions and providers."));let R=Jn(r),_=await Bc(r,e.context?.rawUserInput);return n.push(k("project-memory",Hc(R.content,_),"Inject the per-project MEMORY.md index so the agent has cross-session recall without re-asking the user for previously-given context.")),e.context?.skillsPrompt?.trim()&&n.push(k("skills-addendum",e.context.skillsPrompt,"Append skill-specific guidance after project rules as a bounded dynamic addendum.")),oi(e.context?.toolConstructionMode)&&n.push(k("tool-construction",ti,"Append the tool-construction staircase guidance only when self-construction is authorized for this session.")),n}i(fo,"buildCapabilityContextSections");async function Bc(e,t){let o=t?.trim();if(!(o===void 0||o.length===0))try{return await Oe({cwd:e,projectDocs:[],discoverSkills:!1}).buildMemoryPack({task:o,maxHints:5,includeSnippets:!1})}catch(r){A("[memory:pack:error]",{cwd:e,error:r instanceof Error?r.message:String(r)});return}}i(Bc,"buildTaskMemoryPack");function Hc(e,t){return t===void 0?e:t.traceMetadata.suppressed?[e,"","Task-relevant memory hints: suppressed by user request."].join(`
123
- `):t.hints.length===0?e:[e,"","Task-relevant memory hints (bounded):",...t.hints.map($c),"","Use these as pointers, not authority. If a hint matters, read the referenced memory file before relying on details. Current repository files override memory."].join(`
124
- `)}i(Hc,"appendTaskMemoryPack");function $c(e){return`- ${ri(e.hook)} [${e.ref.id}]: ${ri(e.reason)}`}i($c,"formatTaskMemoryHint");function ri(e){return e.replace(/\s+/g," ").trim().slice(0,180)}i(ri,"compactPromptLine");function jc(e){let t=Cr(e);return t.length===0?null:["=== Available specialist agents ===",t.map(r=>`- ${r.name}: ${r.description?.trim()||"(no description)"}`).join(`
125
- `),"",'Dispatch via dispatch_child_task(subagent_type="<name>").'].join(`
126
- `)}i(jc,"buildSpecialistAgentsBlock");function qc(e){if(!e.includes(mo))return{prefix:e.trim(),suffix:""};let[t,...o]=e.split(mo);return{prefix:t.trim(),suffix:o.join(mo).trim()}}i(qc,"splitSystemPromptTemplate");function Gc(){let e=process.platform,t=e==="win32";return`Platform: ${t?"Windows":e==="darwin"?"macOS":"Linux"}
127
- ${t?"Use: dir, move, copy, del":"Use: ls, mv, cp, rm"}
128
- Node: ${process.version}`}i(Gc,"getEnvContext");function Wc(e){let t=e.provider?.trim(),o=(e.modelOverride??e.model)?.trim();if(!t&&!o)return null;let r=[];return t&&r.push(`provider=${t}`),o&&r.push(`model=${o}`),`[Runtime] ${r.join("; ")}.`}i(Wc,"getRuntimeFact");async function Kc(e){try{let{stdout:t}=await uo("git rev-parse --is-inside-work-tree",{cwd:e});if(!t.trim())return"";let o=[];try{let{stdout:r}=await uo("git branch --show-current",{cwd:e});r.trim()&&o.push(`Git Branch: ${r.trim()}`)}catch{}try{let{stdout:r}=await uo("git status --short",{cwd:e});if(r.trim()){let n=r.trim().split(`
129
- `).slice(0,10);o.push(`Git Status:
130
- ${n.map(a=>` ${a}`).join(`
131
- `)}`),r.trim().split(`
132
- `).length>10&&o.push(" ... (more changes)")}}catch{}return o.join(`
133
- `)}catch{return""}}i(Kc,"getGitContext");async function Xc(e,t=2,o=50){let r=await import("fs/promises"),n=new Set([".git","__pycache__","node_modules",".venv","venv","dist","build",".idea",".vscode"]),s=new Set([".pyc",".pyo",".so",".dll",".exe",".bin"]),a=[`Project: ${gt.basename(e)}`],c=0;async function d(u,m){if(!(m>t||c>=o))try{let l=await r.readdir(u,{withFileTypes:!0}),g=[],R=[];for(let f of l)f.isDirectory()&&!n.has(f.name)&&!f.name.startsWith(".")?g.push(f.name):f.isFile()&&!s.has(gt.extname(f.name))&&R.push(f.name);let _=" ".repeat(m),S=gt.relative(e,u);S&&S!=="."&&a.push(`${_}${S}/`);for(let f of R.sort().slice(0,20))if(a.push(`${_} ${f}`),c+=1,c>=o){a.push(" ... (more files)");return}for(let f of g.sort())await d(gt.join(u,f),m+1)}catch{}}return i(d,"walk"),await d(e,0),a.join(`
134
- `)}i(Xc,"getProjectSnapshot");async function ni(e,t){let o=$(e.context),r=e.context?.gitRoot?Yc.resolve(e.context.gitRoot):o,n=await fo(e,t,o);return so(n,{isNewSession:t,executionCwd:o,projectRoot:r,longRunning:!1})}i(ni,"buildSystemPromptSnapshot");async function po(e,t){return(await ni(e,t)).rendered}i(po,"buildSystemPrompt");function ii(e,t,o){if(!t.capability&&!t.trace)return null;let r=[`stage=${e}`,t.capability?`mode=${t.capability.mode}/${t.capability.engine}/${t.capability.status}`:void 0,t.trace?.cacheHit!==void 0?`cache_hit=${t.trace.cacheHit?"yes":"no"}`:void 0,t.trace?.capsuleEstimatedTokens!==void 0?`capsule_tokens=${t.trace.capsuleEstimatedTokens}`:void 0,o].filter(n=>!!n);return{stage:e,summary:r.join(" | "),capability:t.capability,trace:t.trace}}i(ii,"createRepoIntelligenceTraceEvent");var zc=2e3,Vc=6e4,si=64,re=new Map;async function yt(e){let t,o=new Promise(r=>{t=setTimeout(()=>{r({value:null,timedOut:!0})},zc),typeof t=="object"&&typeof t.unref=="function"&&t.unref()});try{return await Promise.race([e.then(r=>({value:r,timedOut:!1})),o])}finally{t&&clearTimeout(t)}}i(yt,"settleWithinAutoContextBudget");function ai(e=Date.now()){for(let[o,r]of re.entries())r.settled&&r.expiresAt<=e&&re.delete(o);if(re.size<=si)return;let t=Array.from(re.keys());for(let o of t.slice(0,re.size-si))re.delete(o)}i(ai,"pruneAutoContextPreturnStates");function Qc(e,t,o){return JSON.stringify({executionCwd:e.executionCwd??"",gitRoot:e.gitRoot??"",mode:t,targetPath:o??""})}i(Qc,"autoContextPreturnKey");function Zc(e,t){let o=Date.now();ai(o);let r=re.get(e);if(r&&(!r.settled||r.expiresAt>o))return r;let n;return n={promise:t().catch(()=>null).finally(()=>{n.settled=!0,n.expiresAt=Date.now()+Vc}),budgetMissed:!1,settled:!1,expiresAt:Number.POSITIVE_INFINITY},re.set(e,n),ai(o),n}i(Zc,"getAutoContextPreturnState");async function Jc(e){if(e.budgetMissed&&!e.settled)return{value:null,timedOut:!0};let t=await yt(e.promise);return t.timedOut&&(e.budgetMissed=!0),t}i(Jc,"settleAutoContextPreturn");function el(e){return e.context?.repoIntelligenceTrace===!0||process.env.KODAX_REPO_INTELLIGENCE_TRACE==="1"}i(el,"shouldEmitRepoIntelligenceTrace");function Ue(e,t,o,r,n){if(!e?.onRepoIntelligenceTrace||!el(t)||!r)return;let s=ii(o,r,n);s&&e.onRepoIntelligenceTrace(s)}i(Ue,"emitRepoIntelligenceTrace");async function ho(e,t,o,r){if(xe(e.context?.repoIntelligenceMode)==="off")return e.context?.repoIntelligenceContext;let s=Je(e.context?.repoIntelligenceMode),a=t.decision,c=o||a.primaryTask==="plan"||a.complexity!=="simple",d=a.primaryTask==="review"||a.primaryTask==="bugfix"||a.primaryTask==="edit"||a.primaryTask==="refactor";if(!c&&!d)return e.context?.repoIntelligenceContext;try{let u=e.context?.executionCwd?".":void 0,m={executionCwd:e.context?.executionCwd,gitRoot:e.context?.gitRoot??void 0},l=a.primaryTask==="review"||a.primaryTask==="bugfix"||a.primaryTask==="edit"||a.primaryTask==="refactor",R=l&&s==="full"?Jc(Zc(Qc(m,s,u),()=>Er(m,{targetPath:u,refresh:!1,mode:s}))):Promise.resolve({value:null,timedOut:!1}),_=yt(br({executionCwd:e.context?.executionCwd,gitRoot:e.context?.gitRoot??void 0},{includeRepoOverview:c,includeChangedScope:d,refreshOverview:!1,changedScope:"all"}).catch(()=>null)),[S,f]=await Promise.all([_,R]),L=S.value??"",w=f.value,I="",p="",O="",ne="",F=S.timedOut||f.timedOut,M=null,N=null;if(w&&(Ue(r,e,"preturn",w,w.summary),M=w.moduleContext??null,N=w.impactEstimate??null,ne=w.repoContext??""),l){let Y=!F,[Se,y]=await Promise.all([Y&&!M?yt(vr(m,{targetPath:u,refresh:!1,mode:s}).catch(()=>null)).then(q=>(F=F||q.timedOut,q.value)):Promise.resolve(null),Y&&!N?yt(kr(m,{targetPath:u,refresh:!1,mode:s}).catch(()=>null)).then(q=>(F=F||q.timedOut,q.value)):Promise.resolve(null)]);M=M??Se,N=N??y,M&&(Ue(r,e,"module",M,`module=${M.module.moduleId}`),I=["## Active Module Intelligence",Tr(M)].join(`
135
- `)),N&&(Ue(r,e,"impact",N,`target=${N.target.label}`),p=["## Active Impact Intelligence",xr(N)].join(`
136
- `));let b=(M?.confidence??1)<.72||(N?.confidence??1)<.72;!F&&(b||!M&&!N)&&(O=["## Repo Intelligence Guidance","- Current repository intelligence is low-confidence for this area.","- Validate critical edits with `module_context`, `symbol_context`, `grep`, and `read` before committing to a change."].join(`
137
- `))}return[e.context?.repoIntelligenceContext,ne,L,I,p,O].filter(Y=>typeof Y=="string"&&Y.trim().length>0).join(`
138
-
139
- `)}catch{return e.context?.repoIntelligenceContext}}i(ho,"buildAutoRepoIntelligenceContext");async function bt(e,t,o){let r=await ho(e,t,o,e.events),n={...e,effort:t.effort,context:{...e.context,executionCwd:$(e.context),repoIntelligenceContext:r,providerPolicyHints:{...e.context?.providerPolicyHints,...jn(t.decision)},promptOverlay:[e.context?.promptOverlay,t.promptOverlay].filter(Boolean).join(`
140
-
141
- `)}};return{effectiveOptions:n,systemPrompt:e.context?.systemPromptOverride??await po(n,o),providerReasoning:{enabled:t.effort!=="none",effort:t.effort,taskType:t.decision.primaryTask,executionMode:t.decision.recommendedMode}}}i(bt,"buildReasoningExecutionState");function tl(e,t){return t?{...e,effort:t}:e}i(tl,"buildEffectiveReasoningPlan");async function ci(e){let t=tl(e.reasoningPlan,e.thinkingLevel),o=await bt({...e.options,provider:e.providerName,modelOverride:e.modelOverride,effort:e.thinkingLevel??e.options.effort},t,e.messages.length===1);return{effectiveReasoningPlan:t,currentExecution:o}}i(ci,"resolvePerTurnReasoning");function li(e){let t=new AbortController,o=setTimeout(()=>{t.abort(new Error("API Hard Timeout (10 minutes)"))},e.hardTimeoutMs),r;e.streamMaxDurationMs>0&&(r=setTimeout(()=>{t.abort(new Error(`Stream max duration exceeded (${e.streamMaxDurationMs}ms; provider has known server-side kill window)`))},e.streamMaxDurationMs));let n=e.idleTimeoutMs>0,s;n&&(s=setTimeout(()=>{t.abort(new Error(`Stream stalled or delayed response (${e.idleTimeoutMs}ms idle)`))},e.idleTimeoutMs));let a=i(()=>{n&&(clearTimeout(s),t.signal.aborted||(s=setTimeout(()=>{t.abort(new Error(`Stream stalled or delayed response (${e.idleTimeoutMs}ms idle)`))},e.idleTimeoutMs)))},"resetIdleTimer"),c=i(()=>{n&&(clearTimeout(s),s=void 0)},"clearIdleTimer"),d=e.callerAbortSignal?AbortSignal.any([e.callerAbortSignal,t.signal]):t.signal;return{retryTimeoutController:t,retrySignal:d,resetIdleTimer:a,clearIdleTimer:c,clearAll:i(()=>{clearTimeout(o),clearTimeout(r),clearTimeout(s),o=void 0,r=void 0,s=void 0},"clearAll")}}i(li,"buildStreamTimers");function ui(e){let t=lt({providerName:e.providerName,model:e.model,provider:e.provider,prompt:e.prompt,options:e.effectiveOptions,context:e.effectiveOptions.context,reasoningMode:e.reasoningMode,taskType:e.taskType,executionMode:e.executionMode});if(t.status==="block")throw new Error(`[Provider Policy] ${t.summary}`);return{effectiveSystemPrompt:t.issues.length>0?[e.baseSystemPrompt,Rn(t).join(`
142
- `)].join(`
143
-
144
- `):e.baseSystemPrompt,decision:t}}i(ui,"applyProviderPolicyGate");function di(e){let{events:t,boundaryTracker:o,streamTimers:r,emitActiveExtensionEvent:n,providerName:s}=e;return{onTextDelta:i(a=>{r.resetIdleTimer(),o.markTextDelta(a),n("text:delta",{text:a}),t.onTextDelta?.(a)},"onTextDelta"),onThinkingDelta:i(a=>{r.resetIdleTimer(),o.markThinkingDelta(a),n("thinking:delta",{text:a}),t.onThinkingDelta?.(a)},"onThinkingDelta"),onThinkingEnd:i(a=>{r.resetIdleTimer(),n("thinking:end",{thinking:a}),t.onThinkingEnd?.(a)},"onThinkingEnd"),onToolInputDelta:i((a,c,d)=>{r.resetIdleTimer(),o.markToolInputStart(d?.toolId??`pending:${a}`),t.onToolInputDelta?.(a,c,d)},"onToolInputDelta"),onRateLimit:i((a,c,d)=>{r.resetIdleTimer(),n("provider:rate-limit",{provider:s,attempt:a,maxRetries:c,delayMs:d}),Gr(t,a,c,d)},"onRateLimit"),onRetryAfter:i(a=>{r.resetIdleTimer(),t.onRetryAfter?.(a)},"onRetryAfter"),onReasoningEffortRejected:i(a=>{er(a.provider,a.model,a.effort,"observed",new Date().toISOString()),t.onReasoningEffortRejected?.(a)},"onReasoningEffortRejected"),onHeartbeat:i(a=>{a?r.clearIdleTimer():r.resetIdleTimer()},"onHeartbeat")}}i(di,"buildStreamHandlers");var Tt=class{static{i(this,"BoundaryTrackerSession")}tracker;constructor(){this.tracker=new Ne}beginAttempt(t,o,r,n,s){this.tracker.beginRequest(t,o,r,n,s),Qt(this.tracker.snapshot())}markTextDelta(t){this.tracker.markTextDelta(t)}markThinkingDelta(t){this.tracker.markThinkingDelta(t)}markToolInputStart(t){this.tracker.markToolInputStart(t)}inferFailureStage(){return this.tracker.inferFailureStage()}snapshot(){return this.tracker.snapshot()}};function mi(e){let t=e.message.toLowerCase();return e.name==="StreamIncompleteError"||t.includes("stream incomplete")?"Stream interrupted before completion":t.includes("stream stalled")||t.includes("delayed response")||t.includes("60s idle")?"Stream stalled":t.includes("hard timeout")||t.includes("10 minutes")?"Provider response timed out":t.includes("socket hang up")||t.includes("connection error")||t.includes("econnrefused")||t.includes("enotfound")||t.includes("fetch failed")||t.includes("network")?"Provider connection error":t.includes("timed out")||t.includes("timeout")||t.includes("etimedout")?"Provider request timed out":t.includes("aborted")?"Provider stream aborted":"Transient provider error"}i(mi,"describeTransientProviderRetry");function fi(e,t,o,r){let n=Kt(e,Yr(r)),s=new De(o,{...n,enableNonStreamingFallback:n.enableNonStreamingFallback&&t.supportsNonStreamingFallback()});return{resilienceCfg:n,recoveryCoordinator:s}}i(fi,"buildResilienceSession");async function pi(e,t,o){if(e.name==="AbortError"&&t.signal.aborted&&!o?.aborted){let r=t.signal.reason?.message??"Stream stalled",{KodaXNetworkError:n}=await import("./dist-73L4OYPD.js");return new n(r,!0)}return e}i(pi,"translateAbortError");function hi(e){let t=nt(e.error,e.failureStage);zt(e.error,t);let o=e.recoveryCoordinator.decideRecoveryAction(e.error,t,e.attempt);return Vt(o,e.attempt),e.events.onProviderRecovery?.({stage:o.failureStage,errorClass:o.reasonCode,attempt:e.attempt,maxAttempts:e.resilienceCfg.maxRetries,delayMs:o.delayMs,recoveryAction:o.action,ladderStep:o.ladderStep,fallbackUsed:o.shouldUseNonStreaming,serverRetryAfterMs:o.serverRetryAfterMs}),!e.events.onProviderRecovery&&o.action!=="manual_continue"&&e.events.onRetry?.(`${mi(e.error)} \xB7 retry ${e.attempt}/${e.resilienceCfg.maxRetries} in ${Math.round(o.delayMs/1e3)}s`,e.attempt,e.resilienceCfg.maxRetries),{classified:t,decision:o}}i(hi,"runRecoveryPipeline");async function gi(e){let t=new AbortController,o=e.callerAbortSignal?AbortSignal.any([e.callerAbortSignal,t.signal]):t.signal,r=setTimeout(()=>{t.abort(new Error("API Hard Timeout (10 minutes)"))},e.hardTimeoutMs);try{return e.clearStreamTimers(),e.boundarySession.beginAttempt(e.providerName,e.modelOverride??e.streamProvider.getModel(),e.providerMessages,e.attempt,!0),{ok:!0,result:await e.streamProvider.complete(e.providerMessages,e.activeToolDefinitions,e.effectiveSystemPrompt,e.effectiveProviderReasoning,{onTextDelta:i(s=>{e.boundarySession.markTextDelta(s),e.emitActiveExtensionEvent("text:delta",{text:s}),e.events.onTextDelta?.(s)},"onTextDelta"),onThinkingDelta:i(s=>{e.boundarySession.markThinkingDelta(s),e.emitActiveExtensionEvent("thinking:delta",{text:s}),e.events.onThinkingDelta?.(s)},"onThinkingDelta"),onThinkingEnd:i(s=>{e.emitActiveExtensionEvent("thinking:end",{thinking:s}),e.events.onThinkingEnd?.(s)},"onThinkingEnd"),modelOverride:e.modelOverride,signal:o},o)}}catch(n){return{ok:!1,error:n instanceof Error?n:new Error(String(n))}}finally{clearTimeout(r)}}i(gi,"executeNonStreamingFallback");var ol={type:"text",text:""};function yi(e){return e.length===0?[ol]:e}i(yi,"guardEmptyAssistantContent");async function bi(e,t,o,r,n,s){if(e.beforeToolExecute){let c=await e.beforeToolExecute(t,o,{toolId:r});if(c===!1)return X;if(typeof c=="string")return c}let a=await de("tool:before",{name:t,input:o,toolId:r,executionCwd:n,gitRoot:s});return a===!1?X:typeof a=="string"?a:void 0}i(bi,"getToolExecutionOverride");import rl from"fs";function xt(e,t){let o=e.input?.path;if(!(typeof o!="string"||o.trim().length===0))return hr(o,t)}i(xt,"resolveToolTargetPath");function go(e,t){t&&(e.editRecoveryAttempts.delete(t),e.blockedEditWrites.delete(t))}i(go,"clearEditRecoveryStateForPath");function Ti(e,t,o){if(e.name!=="write")return;let r=xt(e,t);if(!(!r||!o.blockedEditWrites.has(r))){if(!rl.existsSync(r)){o.blockedEditWrites.delete(r);return}return`[Tool Error] write: BLOCKED_AFTER_EDIT_FAILURE: Refusing to rewrite existing file ${r} while edit anchor recovery is in progress. Retry with edit using a smaller unique anchor or use insert_after_anchor.`}}i(Ti,"maybeBlockExistingFileWrite");async function xi(e,t,o,r){let n=Ze(t);if(!n)return;let s=typeof e.input?.path=="string"?e.input.path:void 0,a=xt(e,r);if(!s||!a)return;o.blockedEditWrites.add(a);let c=(o.editRecoveryAttempts.get(a)??0)+1;if(o.editRecoveryAttempts.set(a,c),o.lastToolErrorCode=n,n==="EDIT_TOO_LARGE")return A("[edit:recovery]",{code:n,path:a,attempt:c,action:"split-edit"}),[`The previous edit for ${a} failed with ${n}.`,"Do not use write to replace the existing file.","Split the change into smaller edit calls, or use insert_after_anchor when you are appending a new section after a unique heading."].join(`
145
- `);if(c>2)return A("[edit:recovery]",{code:n,path:a,attempt:c,action:"stop-auto-recovery"}),[`The previous edit for ${a} failed with ${n}, and automatic anchor recovery is exhausted.`,"Do not escalate to a whole-file write.","Choose a smaller unique anchor manually, or switch to insert_after_anchor if this is a section append."].join(`
146
- `);let d=c===1?120:400,u=await yr(s,String(e.input?.old_string??""),r,d),m=u.candidates[0],l=u.candidates.slice(1,3);A("[edit:recovery]",{code:n,path:a,attempt:c,windowLines:d,candidateCount:u.candidates.length});let g=[`The previous edit for ${a} failed with ${n}.`,"Do not use write to rewrite the existing file.","Retry with edit using a smaller unique old_string.","When appending a new section after a unique heading, use insert_after_anchor instead."];if(m&&(g.push(""),g.push(`Best nearby anchor window (${m.startLine}-${m.endLine}):`),g.push("```text"),g.push(m.excerpt),g.push("```")),l.length>0){g.push(""),g.push("Other nearby candidate anchors:");for(let R of l)g.push(`- lines ${R.startLine}-${R.endLine}: ${R.preview}`)}return g.join(`
147
- `)}i(xi,"buildEditRecoveryUserMessage");function Ee(e){return/^\[(?:Tool Error|Cancelled|Blocked|Error)\]/.test(e)}i(Ee,"isToolResultErrorContent");function vi(e){return e.startsWith(pr)}i(vi,"isCancelledToolResultContent");function ki(e){return/^\[Tool Error\]\s+[^:]+:\s+([A-Z_]+):/.exec(e.trim())?.[1]}i(ki,"extractStructuredToolErrorCode");var nl=new Set(["edit","write","multi_edit","apply_patch","delete","remove","rename"]),il=3,sl=100;function wi(e){return nl.has(e.toLowerCase())}i(wi,"isMutationTool");function Ei(e){return e.files.size>=il?!0:[...e.files.values()].reduce((o,r)=>o+r,0)>=sl}i(Ei,"isMutationScopeSignificant");function al(e){let t=[...e.files.values()].reduce((r,n)=>r+n,0),o=[...e.files.entries()].map(([r,n])=>` - ${r} (~${n} lines)`).join(`
148
- `);return["",`[Scope: ${e.files.size} files modified, ~${t} lines]`,o].join(`
149
- `)}i(al,"buildMutationScopeReflectionHeader");function Ri(e){return[al(e),"A senior engineer would pause here. SA mode has no Evaluator \u2014 you own the review:","\u2192 Re-read the diff: did each edit land on the intended file/region, and does the change as a whole match the user's intent?","\u2192 Run the project's typecheck/tests if available \u2014 uncaught regressions are your responsibility in SA mode.","\u2192 If this turned into a multi-stage task (plan \u2192 generate \u2192 verify), tell the user it would benefit from a re-run under AMA mode for an independent Evaluator pass."].join(`
150
- `)}i(Ri,"buildMutationScopeReflection");function Si(e,t,o,r){let n=xt(e,r);if(o.lastToolResultBytes=Buffer.byteLength(t,"utf8"),o.lastToolErrorCode=ki(t),e.name==="edit"){Ze(t)||go(o,n);return}e.name==="insert_after_anchor"&&!Ee(t)&&go(o,n)}i(Si,"updateToolOutcomeTracking");function Be(e,t){return{type:"tool_result",tool_use_id:e,content:t,...Ee(t)?{is_error:!0}:{}}}i(Be,"createToolResultBlock");async function Ci(e,t,o,r,n,s){if(s?.aborted)return X;let a=Q(t.name),c=Re(e,t.id);a&&(await T("tool:start",{name:t.name,id:t.id,input:t.input}),e.onToolUseStart?.({name:t.name,id:t.id,input:t.input},c));let d=await bi(e,t.name,t.input??{},t.id,o.executionCwd,o.gitRoot);if(d!==void 0)return d;if(n&&!n.includes(t.name))return`[Tool Error] ${t.name}: Tool is not active in the current runtime.`;let u=Ti(t,o,r);if(u)return u;let m=e.onToolProgress||e.askUser||e.askUserMulti||e.askUserInput?{...o,toolCallId:t.id,...e.onToolProgress?{reportToolProgress:i(g=>{e.onToolProgress?.({id:t.id,message:g},c)},"reportToolProgress")}:{},...e.askUser?{askUser:i(g=>e.askUser(g,c),"askUser")}:{},...e.askUserMulti?{askUserMulti:i(g=>e.askUserMulti(g,c),"askUserMulti")}:{},...e.askUserInput?{askUserInput:i(g=>e.askUserInput(g,c),"askUserInput")}:{}}:{...o,toolCallId:t.id},l=await ln(t.name,t.input??{},m);if(l.startsWith("[Tool Error]")&&o.extensionRuntime){let g=await ll(t.name,t.input??{},o);if(g!==void 0)return g}return l}i(Ci,"executeToolCall");function Re(e,t){return{toolId:t,...e.workflowCorrelation!==void 0?{workflowCorrelation:e.workflowCorrelation}:{}}}i(Re,"createToolEventMeta");var cl=new Set(["web_search","web_fetch","glob","grep","read","code_search","semantic_lookup"]);async function ll(e,t,o){if(cl.has(e))try{let r=await o.extensionRuntime.searchCapabilities("mcp",e,{kind:"tool",limit:1});if(r.length===0)return;let n=r[0];if(!n?.id||n.name!==e&&!n.id.endsWith(`:${e}`))return;let s=await o.extensionRuntime.executeCapability("mcp",n.id,t),a=typeof s.content=="string"?s.content:JSON.stringify(s.structuredContent??s,null,2);return`[MCP Fallback via ${n.id}]
151
- ${a}`}catch(r){process.env.KODAX_DEBUG_TOOL_HISTORY&&console.debug(`[tryMcpFallback] ${e} failed:`,r instanceof Error?r.message:r);return}}i(ll,"tryMcpFallback");async function _i(e){let t=e.toolBlocks.filter(n=>n.name==="bash"),o=e.toolBlocks.filter(n=>n.name!=="bash"),r=new Map;if(o.length>0){let n=o.map(async a=>({id:a.id,content:(await jt(a.name,await Ci(e.events,{id:a.id,name:a.name,input:a.input},e.ctx,e.runtimeSessionState,e.activeToolNames,e.abortSignal),e.ctx)).content})),s=await Promise.all(n);for(let a of s)r.set(a.id,a.content)}for(let n of t){if(e.abortSignal?.aborted){r.set(n.id,X);continue}let s=(await jt(n.name,await Ci(e.events,{id:n.id,name:n.name,input:n.input},e.ctx,e.runtimeSessionState,e.activeToolNames,e.abortSignal),e.ctx)).content;r.set(n.id,s)}return r}i(_i,"runToolDispatch");async function Mi(e){let t=[],o=[];for(let r of e.toolBlocks){let n=e.resultMap.get(r.id)??"[Error] No result";if(e.ctx.mutationTracker&&!e.ctx.mutationTracker.reflectionInjected&&!Ee(n)&&wi(r.name)&&Ei(e.ctx.mutationTracker)&&(n+=Ri(e.ctx.mutationTracker),e.ctx.mutationTracker.reflectionInjected=!0),Si(r,n,e.runtimeSessionState,e.ctx),r.name==="edit"&&Ee(n)){let s=await xi(r,n,e.runtimeSessionState,e.ctx);s&&o.push(s)}Q(r.name)&&(await e.emitActiveExtensionEvent("tool:result",{id:r.id,name:r.name,content:n}),e.events.onToolResult?.({id:r.id,name:r.name,content:n},Re(e.events,r.id)),t.push(Be(r.id,n)))}return{toolResults:t,editRecoveryMessages:o}}i(Mi,"applyPostToolProcessing");function ul(e,t){return t===1?`Your previous response was truncated. Missing required parameters:
152
- ${e.map(o=>`- ${o}`).join(`
153
- `)}
154
-
155
- Please provide the complete tool calls with ALL required parameters.
156
- For large content, keep it concise (under 50 lines for write operations).`:`\u26A0\uFE0F CRITICAL: Your response was TRUNCATED again. This is retry ${t}/${2}.
157
-
158
- MISSING PARAMETERS:
159
- ${e.map(o=>`- ${o}`).join(`
160
- `)}
161
-
162
- YOU MUST:
163
- 1. For 'write' tool: Keep content under 50 lines - write structure first, fill in later with 'edit'
164
- 2. For 'edit' tool: Keep new_string under 30 lines - make smaller, focused changes
165
- 3. Provide ALL required parameters in your tool call
166
-
167
- If your response is truncated again, the task will FAIL.
168
- PROVIDE SHORT, COMPLETE PARAMETERS NOW.`}i(ul,"buildRetryPrompt");function dl(e,t){return typeof e=="string"?e.trim().length>0?`${e}
169
-
170
- ${t}`:t:[...e,{type:"text",text:t}]}i(dl,"appendTextToUserContent");function ml(e){return typeof e=="string"?e.trim().length>0:e.some(t=>t.type==="text"&&(t.text??"").trim().length>0)}i(ml,"userTurnHasText");async function Pi(e){let t=xn(e.toolBlocks);if(t.length===0)return{outcome:"no_incomplete",nextIncompleteRetryCount:0,nextContextTokenSnapshot:e.completedTurnTokenSnapshot};let o=e.incompleteRetryCount+1;if(o<=2){e.events.onRetry?.(`Incomplete tool calls: ${t.join(", ")}`,o,2),e.messages.pop();let c=ul(t,o),d=e.messages.length-1,u=d>=0?e.messages[d]:void 0;if(u&&u.role==="user"){let l=!ml(u.content);e.messages[d]={...u,content:dl(u.content,c),...l?{_synthetic:!0}:{}}}else e.messages.push({role:"user",content:c,_synthetic:!0});let m=C(e.messages,e.preAssistantTokenSnapshot);return{outcome:"retry",nextIncompleteRetryCount:o,nextContextTokenSnapshot:m}}e.events.onRetry?.(`Max retries exceeded for incomplete tool calls. Skipping: ${t.join(", ")}`,o,2);let r=new Set,n=new Set;for(let c of e.toolBlocks){if(Zt(c)){r.add(c.id),n.add(c.id);continue}let d=ot(c.name),u=c.input??{};for(let m of d)if(u[m]===void 0||u[m]===null||u[m]===""){r.add(c.id);break}}let s=[];for(let c of e.toolBlocks){if(!Q(c.name))continue;let d=r.has(c.id)?n.has(c.id)?`[Tool Error] ${c.name}: Skipped \u2014 input was truncated or could not be parsed as valid JSON after ${2} retries. Re-send a shorter, complete tool call with valid arguments (e.g. write structure first, fill in with smaller edits).`:`[Tool Error] ${c.name}: Skipped due to missing required parameters after ${2} retries`:`[Tool Error] ${c.name}: Skipped \u2014 a sibling tool call in the same turn was incomplete/truncated, so this turn was abandoned. Re-issue this call if it is still needed.`;await e.emitActiveExtensionEvent("tool:result",{id:c.id,name:c.name,content:d}),e.events.onToolResult?.({id:c.id,name:c.name,content:d},Re(e.events,c.id)),s.push(Be(c.id,d))}return s.length===0?e.messages.push({role:"user",content:`Your previous tool call was incomplete or truncated and was skipped after ${2} retries. Continue without it, or re-issue it with complete, valid arguments.`,_synthetic:!0}):e.messages.push({role:"user",content:s}),{outcome:"maxed_out",nextIncompleteRetryCount:0,nextContextTokenSnapshot:C(e.messages,e.completedTurnTokenSnapshot)}}i(Pi,"checkAndRetryIncompleteTools");var yo="Operation cancelled by user";async function Ai(e){if(e.abortSignal?.aborted!==!0)return null;let t=[];for(let o of e.toolBlocks)Q(o.name)&&(await e.emitActiveExtensionEvent("tool:result",{id:o.id,name:o.name,content:X}),e.events.onToolResult?.({id:o.id,name:o.name,content:X},Re(e.events,o.id)),t.push(Be(o.id,X)));return t}i(Ai,"checkPreToolAbort");function Ii(e){return e.some(t=>typeof t.content=="string"&&vi(t.content))}i(Ii,"hasCancelledToolResult");async function Oi(e){let t=ve(e.events);e.messages.push({role:"user",content:e.toolResults});let o=C(e.messages,e.completedTurnTokenSnapshot);return t&&(o=e.emitIterationEnd(e.iter+1,o)),await e.emitActiveExtensionEvent("turn:end",{sessionId:e.sessionId,iteration:e.iter+1,lastText:yo,hadToolCalls:!0,signal:void 0}),ke(e.events),await e.emitActiveExtensionEvent("stream:end",void 0),{contextTokenSnapshot:o,shouldYieldToQueuedFollowUp:t}}i(Oi,"applyCancellationTerminal");function Ni(e,t){if(!t||t.length===0)return e;let o=new Set(t);return e.filter(r=>!o.has(r))}i(Ni,"filterExcludedTools");function Di(e,t){return t?e.filter(o=>{let r=nn(o);return r?t({name:r.name,sideEffect:r.sideEffect,planModeAllowed:r.planModeAllowed===!0}):!1}):e}i(Di,"applyToolVisibilityPolicy");function bo(e,t,o=!1,r){let n=xe(t)==="off"?an(e):e;return o||(n=cn(n)),n=on(n,r),n=rn(n,r),n}i(bo,"getRuntimeActiveToolNames");function Li(e,t,o=!1,r=!1,n,s,a){let c=rt();if(e.length===0)return[];let d=new Set(bo(e,t,r,n));return c.filter(u=>d.has(u.name)&&(o||!Mr(u.name))).map(u=>{let m=gr(u,a);if(!en(m.name)||s&&s.has(m.name))return m;let l=Jr[m.name];return l?{...m,description:l}:m})}i(Li,"getActiveToolDefinitions");var Fi=`Create a structured summary for the conversation below.
171
-
172
- This summary will be handed to another coding agent so it can continue the same task with minimal context.
173
- Keep only information that is still useful for continuing the work.
174
-
175
- You may drop:
176
- - completed low-value micro-steps
177
- - repetitive thinking
178
- - stale intermediate plans
179
- - verbose tool output details
180
-
181
- You must keep:
182
- - the current goal
183
- - user constraints and preferences
184
- - current progress and unfinished work
185
- - blockers or unresolved questions
186
- - the most important next steps
187
- - EXACT file paths, function names, and line numbers referenced
188
- - EXACT error messages, HTTP status codes, and exception types
189
- - API endpoints, database tables, env vars, and config values mentioned
190
- - key decisions WITH reasoning (not just the choice)
191
-
192
- CRITICAL: Every user REQUEST and DECISION must be preserved verbatim or near-verbatim.
193
- Never reduce "user asked to fix the 401 error on /api/auth/login by switching to JWT"
194
- to "user asked to fix an error".
195
-
196
- Keep the summary concise and high-signal. Do not mechanically preserve every historical detail.
197
-
198
- First, wrap your analysis in <analysis> tags:
199
- - Walk through messages chronologically
200
- - Note exact file paths, function names, error codes, config values
201
- - Identify user's explicit requests vs inferred intent
202
- - Flag technical details that MUST survive compression
203
-
204
- Then output the structured summary in <summary> tags.
205
-
206
- Output format (strict markdown, inside <summary> tags):
207
-
208
- ## Goal
209
- [1-2 sentences describing the active goal]
210
-
211
- ## Constraints & Preferences
212
- - [One item per line]
213
- - [Write "None" if there are no explicit constraints]
214
-
215
- ## Progress
216
- ### Completed
217
- - [x] [Completed work that still matters for context]
218
-
219
- ### In Progress
220
- - [ ] [Current work that is actively underway]
221
-
222
- ### Blockers
223
- - [Current blockers, or "None"]
224
-
225
- ## Key Decisions
226
- - **[Decision]**: [Short reason]
227
-
228
- ## Next Steps
229
- 1. [Highest-priority next action]
230
-
231
- ## Key Context
232
- - [Critical context needed to continue]
233
-
234
- ## Files & Changes
235
- - **[exact path]**: [what was done and why]
236
-
237
- ---
238
-
239
- <read-files>
240
- [One path per line, leave empty if none]
241
- </read-files>
242
-
243
- <modified-files>
244
- [One path per line, leave empty if none]
245
- </modified-files>
246
-
247
- Conversation:
248
- `,Ui=`Merge the new conversation content above into <previous-summary>.
249
-
250
- Update the structured summary so another coding agent can continue the task immediately.
251
- Keep only the information needed to continue the work.
252
-
253
- You may remove:
254
- - repetitive or superseded plans
255
- - completed low-value steps
256
- - outdated blockers
257
- - noisy tool output details
258
-
259
- You must preserve or update:
260
- - the current goal
261
- - user constraints and preferences
262
- - current progress and unfinished work
263
- - blockers that still matter
264
- - next steps based on the latest state
265
- - EXACT file paths, function names, and line numbers
266
- - EXACT error messages, HTTP status codes, and exception types
267
- - API endpoints, database tables, env vars, and config values
268
- - key decisions WITH reasoning
269
-
270
- CRITICAL: Every user REQUEST and DECISION must be preserved verbatim or near-verbatim.
271
-
272
- Do not accumulate every past detail. Compress aggressively while keeping continuation-critical context.
273
-
274
- First, wrap your analysis in <analysis> tags, then output the summary in <summary> tags.
275
-
276
- Output format (strict markdown, inside <summary> tags):
277
-
278
- ## Goal
279
- [Updated goal]
280
-
281
- ## Constraints & Preferences
282
- - [Relevant constraints only]
283
-
284
- ## Progress
285
- ### Completed
286
- - [x] [Completed work that still matters]
287
-
288
- ### In Progress
289
- - [ ] [Active work in the latest state]
290
-
291
- ### Blockers
292
- - [Current blockers, or "None"]
293
-
294
- ## Key Decisions
295
- - **[Decision]**: [Short reason]
296
-
297
- ## Next Steps
298
- 1. [Most relevant next action]
299
-
300
- ## Key Context
301
- - [Critical context needed to continue]
302
-
303
- ## Files & Changes
304
- - **[exact path]**: [what was done and why]
305
-
306
- ---
307
-
308
- <read-files>
309
- [One path per line, leave empty if none]
310
- </read-files>
311
-
312
- <modified-files>
313
- [One path per line, leave empty if none]
314
- </modified-files>
315
-
316
- Keep every section concise.`;async function Bi(e){let t=e.tokensBefore-e.tokensAfter,o=ir(e.artifactLedger,t),r=Math.min(Math.floor(t*nr.budgetRatio),rr),n=Math.max(0,r-o.totalTokens),s=n>0?await ar(e.artifactLedger,n):[],a={...o,fileMessages:s,totalTokens:o.totalTokens+ue(s)};if(a.totalTokens<=0)return{compacted:e.compacted,postCompactAttachmentsForLineage:[]};let c=sr(e.compacted,a),d=[...a.ledgerMessage?[a.ledgerMessage]:[],...a.fileMessages];return{compacted:c,postCompactAttachmentsForLineage:d}}i(Bi,"applyPostCompactAttachments");var fl=3;async function pl(e){let t=e.circuitBreakerLimit??fl,o=e.compactConsecutiveFailures>=t;if(!e.needsCompact||o)return{compacted:e.messages,compactionUpdate:void 0,didCompactMessages:!1,nextCompactConsecutiveFailures:e.compactConsecutiveFailures};let r=e.messages,n,s=!1,a=e.compactConsecutiveFailures;e.events.onCompactStart?.();try{let c=await cr(e.messages,e.compactionConfig,e.provider,e.contextWindow,void 0,e.systemPrompt,e.currentTokens,Fi,Ui,e.model);if(c.compacted){r=c.messages;let d=[];if(c.artifactLedger&&c.artifactLedger.length>0){let l=await Bi({compacted:r,artifactLedger:c.artifactLedger,tokensBefore:c.tokensBefore,tokensAfter:c.tokensAfter});r=l.compacted,d=l.postCompactAttachmentsForLineage}s=!0;let u=e.contextWindow*(e.compactionConfig.triggerPercent/100),m=ue(r);process.env.KODAX_DEBUG_COMPACTION&&console.error(`[Compaction] triggered ${JSON.stringify({contextWindow:e.contextWindow,triggerPercent:e.compactionConfig.triggerPercent,triggerTokens:Math.floor(u),tokensBefore:c.tokensBefore,tokensAfter:m,reduction:c.tokensBefore-m})}`),m<u?a=0:(a=e.compactConsecutiveFailures+1,process.env.KODAX_DEBUG_COMPACTION&&console.warn(`[Compaction] Partial success: still above trigger (${m} > ${Math.floor(u)}) \u2014 attempt ${a}/${t}`)),n={anchor:c.anchor,artifactLedger:c.artifactLedger,memorySeed:c.memorySeed,postCompactAttachments:d.length>0?d:void 0},e.events.onCompactStats?.({tokensBefore:c.tokensBefore,tokensAfter:m}),e.events.onCompact?.(c.tokensBefore)}else r=c.messages}catch(c){a=e.compactConsecutiveFailures+1,process.env.KODAX_DEBUG_COMPACTION&&console.error(`[Compaction Error] LLM summary failed (attempt ${a}/${t}):`,c),r=e.messages}finally{e.events.onCompactEnd?.()}return{compacted:r,compactionUpdate:n,didCompactMessages:s,nextCompactConsecutiveFailures:a}}i(pl,"tryIntelligentCompact");function hl(e){if(!e.needsCompact)return{compacted:e.compacted,didCompactMessages:!1};let t=e.contextWindow*(e.compactionConfig.triggerPercent/100),o=e.compactionConfig.pruningGapRatio??.8;if(!(ue(e.compacted)>t*o))return{compacted:e.compacted,didCompactMessages:!1};let n=mr(e.compacted,e.contextWindow,e.compactionConfig);return n===e.compacted?{compacted:e.compacted,didCompactMessages:!1}:(e.events.onCompactStats?.({tokensBefore:e.currentTokens,tokensAfter:ue(n)}),e.events.onCompact?.(ue(n)),{compacted:n,didCompactMessages:!0})}i(hl,"applyGracefulDegradationGate");function gl(e){let t=Ie(e.compacted);if(!e.didCompactMessages)return{messages:t,contextTokenSnapshot:void 0};let o=et(t);return e.events.onCompactedMessages?.(t,e.compactionUpdate),{messages:t,contextTokenSnapshot:o}}i(gl,"commitCompactedHistory");async function Hi(e){let t=await pl({messages:e.messages,needsCompact:e.needsCompact,compactConsecutiveFailures:e.compactConsecutiveFailures,compactionConfig:e.compactionConfig,provider:e.provider,model:e.model,contextWindow:e.contextWindow,systemPrompt:e.systemPrompt,currentTokens:e.currentTokens,events:e.events,circuitBreakerLimit:e.circuitBreakerLimit}),o=hl({compacted:t.compacted,needsCompact:e.needsCompact,contextWindow:e.contextWindow,compactionConfig:e.compactionConfig,currentTokens:e.currentTokens,events:e.events}),r=t.didCompactMessages||o.didCompactMessages,n=gl({compacted:o.compacted,didCompactMessages:r,compactionUpdate:t.compactionUpdate,events:e.events});return{messages:n.messages,compactionUpdate:t.compactionUpdate,didCompactMessages:r,nextCompactConsecutiveFailures:t.nextCompactConsecutiveFailures,contextTokenSnapshot:n.contextTokenSnapshot}}i(Hi,"runCompactionLifecycle");function $i(e){let{result:t,messages:o,maxTokensRetryCount:r,completedTurnTokenSnapshot:n,events:s}=e;if(be(t.stopReason)!=="truncated"||t.toolBlocks.length!==0)return{outcome:"no_op",nextMaxTokensRetryCount:r};let a=r+1;if(a<=3){s.onTextDelta?.(`
317
-
318
- [output token limit hit, continuing\u2026]
319
-
320
- `),o.push({role:"user",content:[{type:"text",text:"Output token limit hit. Resume directly \u2014 no apology, no recap of what you were doing. Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces."}],_synthetic:!0});let c=C(o,n);return{outcome:"continue",nextMaxTokensRetryCount:a,nextContextTokenSnapshot:c}}return s.onRetry?.(`max_tokens truncation limit reached (${a-1}/${3})`,a-1,3),{outcome:"exhausted",nextMaxTokensRetryCount:a}}i($i,"maybeContinueAfterMaxTokens");function ji(e){let{result:t,lastText:o,messages:r,continueAttempted:n,options:s,emittedManagedProtocolPayload:a,completedTurnTokenSnapshot:c}=e,d=s.context?.managedProtocolEmission;if(n||be(t.stopReason)!=="end"||t.toolBlocks.length!==0||!o||!d?.enabled||d.optional)return{outcome:"no_op",nextContinueAttempted:n};let u=d.role,m=Pr(u);return!m||Ar(a,u)||Ir(o,m)?{outcome:"no_op",nextContinueAttempted:n}:(r.push({role:"user",content:[{type:"text",text:`Your response is complete but the required protocol was not emitted. Do NOT output any text \u2014 ONLY call the "${_r}" tool now, or append a \`\`\`${m}\`\`\` fenced block. No other output.`}],_synthetic:!0}),{outcome:"continue",nextContinueAttempted:!0,nextContextTokenSnapshot:C(r,c)})}i(ji,"maybeAutoContinueManagedProtocol");import{exec as Tl}from"child_process";import{promisify as xl}from"util";function yl(e){let t=new Map;if(!e)return t;for(let[o,r]of Object.entries(e))t.set(o,new Map(Object.entries(r)));return t}i(yl,"createRuntimeExtensionState");function bl(e){let t={};for(let[o,r]of e.entries())r.size!==0&&(t[o]=Object.fromEntries(r.entries()));return Object.keys(t).length>0?t:void 0}i(bl,"snapshotRuntimeExtensionState");function vt(e,t={}){let o=t.includeUnchanged??!0,r=bl(e.extensionState),n=o||e.extensionStateDirty?r??(e.extensionStateDirty?{}:void 0):void 0,a=o&&e.extensionRecords.length>0||e.extensionRecordsDirty?e.extensionRecords.map(c=>({...c})):void 0;if(!(!n&&!a))return{...n?{extensionState:n}:{},...a?{extensionRecords:a}:{}}}i(vt,"snapshotRuntimeSessionState");function qi(e,t){let o=e.get(t);if(o)return o;let r=new Map;return e.set(t,r),r}i(qi,"getExtensionStateBucket");function Gi(e){return{queuedMessages:[],extensionState:yl(e.loadedExtensionState),extensionStateDirty:!1,extensionRecords:e.loadedExtensionRecords?.map(t=>({...t}))??[],extensionRecordsDirty:!1,activeTools:e.activeTools,editRecoveryAttempts:new Map,blockedEditWrites:new Set,modelSelection:e.modelSelection,thinkingLevel:e.thinkingLevel}}i(Gi,"buildRuntimeSessionState");function To(e){return typeof e=="string"?{role:"user",content:e}:e}i(To,"normalizeQueuedRuntimeMessage");function xo(e){let t={};return e.provider?.trim()&&(t.provider=e.provider.trim()),e.model?.trim()&&(t.model=e.model.trim()),t}i(xo,"normalizeRuntimeModelSelection");function Wi(){return`extrec_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}i(Wi,"createSessionRecordId");var vl=xl(Tl);async function kl(e){try{let{stdout:t}=await vl("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}i(kl,"getGitRoot");var Ki=new Set;function Dh(e){return Object.defineProperty(e,"__startKodaXGeneratedId",{value:!0,enumerable:!1}),e}i(Dh,"markStartKodaXGeneratedSessionId");function wl(e){return e?.__startKodaXGeneratedId===!0}i(wl,"hasStartKodaXGeneratedSessionId");function Xi(e){return Array.isArray(e.content)?e.content:[]}i(Xi,"contentBlocks");function El(e){return Xi(e).filter(t=>t.type==="tool_use").map(t=>t.id)}i(El,"collectToolUseIds");function Rl(e){return Xi(e).filter(t=>t.type==="tool_result").map(t=>t.tool_use_id)}i(Rl,"collectToolResultIds");function Sl(e){let t=e.find(r=>r.role!=="system");if(!t)return e.length===0;if(t.role!=="user")return!1;let o=new Set;for(let r of e){if(r.role==="assistant"){for(let n of El(r))o.add(n);continue}if(r.role==="user"){for(let n of Rl(r))if(!o.delete(n))return!1}}return o.size===0}i(Sl,"isSafeAuthoritativeTranscript");async function me(e,t,o){if(e.session?.persistedByHost&&!o.errorMetadata)return;if(!e.session?.storage){e.session?.id&&!wl(e.session)&&!Ki.has(e.session.id)&&(Ki.add(e.session.id),console.warn(`[KodaX SDK] session.id="${e.session.id}" was provided but session.storage is undefined \u2014 session snapshots will NOT be persisted. To persist, pass a storage instance: import { createSessionManager } from '@kodax-ai/kodax/session'; const { storage } = createSessionManager(); runKodaX({ session: { id, storage, ... }, ... }, prompt); See docs/SDK_EMBEDDER_GUIDE.md \xA76.`));return}let r=o.messages,n,s,a,c=!0;if(o.errorMetadata&&!Sl(o.messages)){c=!1;try{let m=await e.session.storage.load(t);m?(r=m.messages,n=m.lineage,s=m.extensionState?structuredClone(m.extensionState):void 0,a=m.extensionRecords?.map(l=>({...l}))):(r=[],n=void 0,s=void 0,a=void 0)}catch{r=[],n=void 0,s=void 0,a=void 0}}let d=o.gitRoot??e.context?.gitRoot??await kl(e.context?.executionCwd)??"",u=o.runtimeSessionState?vt(o.runtimeSessionState):void 0;c&&(s=u?.extensionState,a=u?.extensionRecords);try{await e.session.storage.save(t,{messages:r,title:o.title,gitRoot:d,tag:e.session.tag,scope:e.session.scope??"user",errorMetadata:o.errorMetadata,...n!==void 0?{lineage:n}:{},extensionState:s,extensionRecords:a})}catch(m){console.error("[SessionSnapshot] storage.save failed; continuing without snapshot persistence:",m)}}i(me,"saveSessionSnapshot");async function kt(e){await me(e.options,e.sessionId,{messages:e.messages,title:e.title,gitRoot:e.options.context?.gitRoot??void 0,runtimeSessionState:e.runtimeSessionState});let[t,o]=Fe(e.lastText);return{finalSignal:t,finalReason:o}}i(kt,"applyIterationLimitTerminal");async function Yi(e){let t=Ft(e.messages);t=Ie(t);let o={lastError:e.error.message,lastErrorTime:Date.now(),consecutiveErrors:(e.errorMetadata?.consecutiveErrors??0)+1};await me(e.options,e.sessionId,{messages:t,title:e.title,gitRoot:e.options.context?.gitRoot??void 0,errorMetadata:o,runtimeSessionState:e.runtimeSessionState});let r=et(t);return{cleanedMessages:t,updatedErrorMetadata:o,contextTokenSnapshot:r}}i(Yi,"runCatchCleanup");async function zi(e){ke(e.events),await e.emitActiveExtensionEvent("stream:end",void 0)}i(zi,"applyAbortErrorTerminal");async function Vi(e){await e.emitActiveExtensionEvent("error",{error:e.error}),qr(e.events,e.error)}i(Vi,"applyGenericErrorTerminal");async function Qi(e){let t={...e};return await de("provider:before",{provider:t.provider,model:t.model,reasoningMode:t.reasoningMode,systemPrompt:t.systemPrompt,block:i(o=>{t.blockedReason=o},"block"),replaceProvider:i(o=>{t.provider=o},"replaceProvider"),replaceModel:i(o=>{t.model=o},"replaceModel"),replaceSystemPrompt:i(o=>{t.systemPrompt=o},"replaceSystemPrompt"),setThinkingLevel:i(o=>{t.reasoningMode=o},"setThinkingLevel")}),t}i(Qi,"applyProviderPrepareHook");function Zi(e){return e.toLowerCase().replace(/[\s_-]+/g,"")}i(Zi,"normalizeToolNameKey");function Cl(e,t){if(t.includes(e))return null;let o=Zi(e);if(!o)return null;let r=t.filter(n=>Zi(n)===o);return r.length===1?r[0]:null}i(Cl,"resolveToolNameAlias");function Ji(e,t){return e.map(o=>{let r=Cl(o.name,t);return r?(process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Name Repaired]",JSON.stringify(o.name),"\u2192",JSON.stringify(r)),{...o,name:r}):o})}i(Ji,"repairToolBlockNames");function He(e,t){return t.queuedMessages.length===0?!1:(e.push(...t.queuedMessages.splice(0)),!0)}i(He,"appendQueuedRuntimeMessages");async function $e(e,t,o,r){await de("turn:settle",{sessionId:e,lastText:t,hadToolCalls:r.hadToolCalls,success:r.success,signal:r.signal,queueUserMessage:i(n=>{o.queuedMessages.push(To(n))},"queueUserMessage"),setModelSelection:i(n=>{o.modelSelection=xo(n)},"setModelSelection"),setThinkingLevel:i(n=>{o.thinkingLevel=n},"setThinkingLevel")})}i($e,"settleExtensionTurn");function og(e){return async t=>{let o=e();return o?await de("turn:complete",{sessionId:o,lastAssistantText:t.lastAssistantText,signal:t.signal,reanimateCount:t.reanimateCount,reanimateBudget:t.reanimateBudget})??void 0:void 0}}i(og,"createExtensionTurnCompleteStopHook");function es(e){return{queueUserMessage:i(t=>{e.queuedMessages.push(To(t))},"queueUserMessage"),getSessionState:i((t,o)=>e.extensionState.get(t)?.get(o),"getSessionState"),setSessionState:i((t,o,r)=>{let n=qi(e.extensionState,t);if(e.extensionStateDirty=!0,r===void 0){n.delete(o),n.size===0&&e.extensionState.delete(t);return}n.set(o,r)},"setSessionState"),getSessionStateSnapshot:i(t=>Object.fromEntries((e.extensionState.get(t)??new Map).entries()),"getSessionStateSnapshot"),appendSessionRecord:i((t,o,r,n)=>{let s=o.trim(),a=n?.dedupeKey?.trim()||void 0,c={id:Wi(),extensionId:t,type:s,ts:Date.now(),...r===void 0?{}:{data:r},...a?{dedupeKey:a}:{}};if(a){let d=e.extensionRecords.findIndex(u=>u.extensionId===t&&u.type===s&&u.dedupeKey===a);if(d>=0)return e.extensionRecords.splice(d,1,c),e.extensionRecordsDirty=!0,c}return e.extensionRecords.push(c),e.extensionRecordsDirty=!0,c},"appendSessionRecord"),listSessionRecords:i((t,o)=>e.extensionRecords.filter(r=>r.extensionId===t&&(o===void 0||r.type===o)).map(r=>({...r})),"listSessionRecords"),clearSessionRecords:i((t,o)=>{let r=e.extensionRecords.length;e.extensionRecords=e.extensionRecords.filter(s=>s.extensionId!==t||o!==void 0&&s.type!==o);let n=r-e.extensionRecords.length;return n>0&&(e.extensionRecordsDirty=!0),n},"clearSessionRecords"),getActiveTools:i(()=>[...e.activeTools],"getActiveTools"),setActiveTools:i(t=>{e.activeTools=Array.from(new Set(t.map(o=>o.trim()).filter(Boolean)))},"setActiveTools"),getModelSelection:i(()=>({...e.modelSelection}),"getModelSelection"),setModelSelection:i(t=>{e.modelSelection=xo(t)},"setModelSelection"),getThinkingLevel:i(()=>e.thinkingLevel,"getThinkingLevel"),setThinkingLevel:i(t=>{e.thinkingLevel=t},"setThinkingLevel")}}i(es,"createExtensionRuntimeSessionController");async function ts(e){e.messages.push({role:"user",content:[...e.toolResults]}),e.editRecoveryMessages.length>0&&e.messages.push({role:"user",content:e.editRecoveryMessages.join(`
321
-
322
- `),_synthetic:!0});let t=C(e.messages,e.completedTurnTokenSnapshot);await $e(e.sessionId,e.lastText,e.runtimeSessionState,{hadToolCalls:!0,success:!0});let o=He(e.messages,e.runtimeSessionState);return o&&(t=C(e.messages,t),await e.emitActiveExtensionEvent("turn:end",{sessionId:e.sessionId,iteration:e.iter+1,lastText:e.lastText,hadToolCalls:!0,signal:void 0})),{contextTokenSnapshot:t,drainedQueuedMessages:o}}i(ts,"pushToolResultsAndSettle");function _l(e){return e?le(e)??e:void 0}i(_l,"legacyReasoningModeToRuntimeEffort");async function os(e,t){let o=Qr(),r=e.extensionRuntime??o,n=e.extensionRuntime instanceof Vr?e.extensionRuntime:void 0,s=!!n&&n!==o;s&&n&&Gt(n);let a=Zr(r),c;try{let d=e.maxIter??200,u=e.events??{},m=r?.getDefaults?.(),l={preAnswerJudgeConsumed:!1,postToolJudgeConsumed:!1,maxTokensRetryCount:0,costTracker:qo(),managedProtocolContinueAttempted:!1,compactConsecutiveFailures:0,lastText:"",currentProviderName:m?.modelSelection.provider??e.provider,currentModelOverride:m?.modelSelection.model??e.modelOverride??e.model,runtimeThinkingLevel:m?.thinkingLevel},g=Te(l.currentProviderName);ro(g,l.currentProviderName);let R=g.getEffectiveContextWindow?.(l.currentModelOverride)??g.getContextWindow(),_=await dn(R,e.compaction),f=await En(e)??await Ut(),L=e.context?.liveTurn,w=Fr({sessionId:f,deliveryKind:L?.deliveryKind??"initial",turnId:L?.turnId,deliveryId:L?.deliveryId,promptId:L?.promptId});u=Ur(u,w),e={...e,events:u};let I=await kn(e,f),p=wn(I.messages,t,e.context?.inputArtifacts,w.turnId),O=I.title||t.slice(0,50)+(t.length>50?"...":""),ne=I.errorMetadata,F=I.loadedExtensionState,M=I.loadedExtensionRecords,N=$(e.context),Y={current:e.context?.managedProtocolEmission?.enabled?qt(void 0,void 0):void 0},Se=zr({options:e,sessionId:f,runtime:r??void 0,managedProtocolPayloadRef:Y}),y=C(p,e.context?.contextTokenSnapshot),b=Gi({loadedExtensionState:F,loadedExtensionRecords:M,activeTools:Di(Ni(m?.activeTools??rt().map(h=>h.name),e.context?.excludeTools),e.context?.toolVisibilityPolicy),modelSelection:{provider:l.currentProviderName,model:l.currentModelOverride},thinkingLevel:l.runtimeThinkingLevel}),q=!1,je=i(h=>{q||(q=!0,Hr(u,w,h))},"emitLiveTurnCompletedOnce"),vo=i(h=>{q||(q=!0,$r(u,w,h))},"emitLiveTurnFailedOnce"),G=i(h=>{h.success?je(h.interrupted?"interrupted":"completed"):vo(new Error(h.errorMetadata?.lastError??"KodaX run failed"));let P=qt(h.managedProtocolPayload,Y.current),K=vt(b,{includeUnchanged:!1});return P||K?{...h,...P?{managedProtocolPayload:P}:{},...K?{runtimeSessionSnapshot:K}:{}}:h},"finalizeManagedProtocolResult");e.sessionControl?._attach({setProvider:i(h=>{b.modelSelection.provider=h},"setProvider"),setModel:i(h=>{b.modelSelection.model=h},"setModel"),setReasoning:i(h=>{b.thinkingLevel=_l(h)},"setReasoning")});let ko=r?.bindController?.(es(b));c=typeof ko=="function"?ko:void 0;let us=xe(e.context?.repoIntelligenceMode),ds=Je(e.context?.repoIntelligenceMode),ms=e.context?.repoRoutingSignals?Promise.resolve(e.context.repoRoutingSignals):us!=="off"&&(e.context?.executionCwd||e.context?.gitRoot)?wr({executionCwd:N,gitRoot:e.context?.gitRoot??void 0},{mode:ds}).catch(()=>null):Promise.resolve(null),[,qe]=await Promise.all([r?.hydrateSession?.(f),ms]);Ue(u,e,"routing",qe,qe?.activeModuleId?`active_module=${qe.activeModuleId}`:void 0);let Ge=await qn({...e,provider:l.currentProviderName,modelOverride:l.currentModelOverride},t,g,{recentMessages:p.slice(0,-1),sessionErrorMetadata:ne,repoSignals:qe??void 0}),fe=await bt({...e,provider:l.currentProviderName,modelOverride:l.currentModelOverride,effort:l.runtimeThinkingLevel??e.effort},l.runtimeThinkingLevel?{...Ge,effort:l.runtimeThinkingLevel}:Ge,p.length===1),wo=0,Z=i((h,P)=>(y=Kr(u,{iter:h,maxIter:d,messages:p,currentSnapshot:y,snapshotOverride:P}),y),"emitIterationEnd"),W=i(()=>Ge.decision,"currentRoutingDecision");jr(u,{provider:g.name,sessionId:f}),await T("session:start",{provider:g.name,sessionId:f}),Br(u,w),u.getCostReport&&(u.getCostReport.current=()=>Xo(Ko(l.costTracker)));for(let h=0;h<d;h++)try{let P=Kn(b,e,_);l.currentProviderName=P.providerName,l.currentModelOverride=P.modelOverride,l.runtimeThinkingLevel=P.thinkingLevel;let K=P.provider,pe=P.contextWindow,Ce=await ci({options:e,providerName:l.currentProviderName,modelOverride:l.currentModelOverride,thinkingLevel:l.runtimeThinkingLevel,reasoningPlan:Ge,messages:p}),ie=Ce.effectiveReasoningPlan;fe=Ce.currentExecution,await T("turn:start",{sessionId:f,iteration:h+1,maxIter:d}),Wr(u,h,d),p=ur(p,lr);let Ro=Dr(p,y),fs=dr({messages:p,compactionConfig:_,contextWindow:pe,currentTokens:Ro}),We=await Hi({messages:p,needsCompact:fs,compactConsecutiveFailures:l.compactConsecutiveFailures,compactionConfig:_,provider:K,model:l.currentModelOverride,contextWindow:pe,systemPrompt:fe.systemPrompt,currentTokens:Ro,events:u});p=We.messages,l.compactConsecutiveFailures=We.nextCompactConsecutiveFailures,We.contextTokenSnapshot!==void 0&&(y=We.contextTokenSnapshot);let he=await Qi({provider:l.currentProviderName,model:l.currentModelOverride,reasoningMode:ie.effort,systemPrompt:fe.systemPrompt});if(he.blockedReason)throw new Error(he.blockedReason);l.currentProviderName=he.provider,l.currentModelOverride=he.model,b.modelSelection.provider=l.currentProviderName,b.modelSelection.model=l.currentModelOverride,l.runtimeThinkingLevel=he.reasoningMode,b.thinkingLevel=l.runtimeThinkingLevel;let z=Te(l.currentProviderName),se=l.runtimeThinkingLevel??ie.effort,wt=l.currentModelOverride??z.getModel(),Et=Jo(l.currentProviderName,wt);if(se!==void 0&&Et.length>0){let v=Nt({provider:l.currentProviderName,model:wt,desiredEffort:se}).effort;v!==void 0&&Et.includes(v)&&(se=Nt({provider:l.currentProviderName,model:wt,desiredEffort:se,rejectedEfforts:Et}).effort??"none")}let So={...fe.providerReasoning,enabled:se!=="none",effort:se},{effectiveSystemPrompt:Ke}=ui({providerName:l.currentProviderName,model:l.currentModelOverride,provider:z,prompt:t,effectiveOptions:fe.effectiveOptions,reasoningMode:Bo(se)??"auto",taskType:ie.decision.primaryTask,executionMode:ie.decision.recommendedMode,baseSystemPrompt:he.systemPrompt});Yo(fe.effectiveOptions.context?.inputArtifacts??[],{provider:l.currentProviderName,model:l.currentModelOverride}),ro(z,l.currentProviderName),await T("provider:selected",{provider:l.currentProviderName,model:l.currentModelOverride});let Xe=new Tt,Co=Xe.tracker,{resilienceCfg:Ye,recoveryCoordinator:Rt}=fi(l.currentProviderName,z,Co,e.timeouts),_o=Ye.requestTimeoutMs,ps=Ye.streamIdleTimeoutMs,U=p,x,J=0,Mo=Li(b.activeTools,e.context?.repoIntelligenceMode,e.context?.managedProtocolEmission?.enabled===!0,!!r,e.context?.toolConstructionMode,tn(Se),e.selfManual?.productName);for(;;){J+=1,Xe.beginAttempt(l.currentProviderName,l.currentModelOverride??z.getModel(),U,J,!1);let v=li({hardTimeoutMs:_o,idleTimeoutMs:ps,streamMaxDurationMs:z.getStreamMaxDurationMs?.(l.currentModelOverride)??0,callerAbortSignal:e.abortSignal}),H=v.retryTimeoutController,Do=v.retrySignal,Yl=v.resetIdleTimer,Lo=mt(U,Ke);A("[resilience:request]",{provider:l.currentProviderName,attempt:J,fallbackActive:!1,payloadBytes:Lo,payloadBucket:ft(Lo),lastToolErrorCode:b.lastToolErrorCode,lastToolResultBytes:b.lastToolResultBytes});try{let ye=di({events:u,boundaryTracker:Co,streamTimers:v,emitActiveExtensionEvent:T,providerName:l.currentProviderName}),ae=i(ce=>{l.costTracker=Go(l.costTracker,{provider:ce.provider,waitMs:ce.waitMs,reason:ce.reason,source:ce.source}),ye.onRetryAfter?.(ce)},"wrappedRetryAfter");x=await z.stream(U,Mo,Ke,So,{...ye,onRetryAfter:ae,modelOverride:l.currentModelOverride,signal:Do},Do),p=U;break}catch(ye){let ae=ye instanceof Error?ye:new Error(String(ye));ae=await pi(ae,H,e.abortSignal);let ce=Xe.inferFailureStage(),{decision:V}=hi({error:ae,failureStage:ce,attempt:J,events:u,resilienceCfg:Ye,recoveryCoordinator:Rt});if(V.shouldUseNonStreaming){let _e=mt(U,Ke);A("[resilience:fallback]",{provider:l.currentProviderName,attempt:J,payloadBytes:_e,payloadBucket:ft(_e)});let Pt=await gi({events:u,streamProvider:z,providerMessages:U,activeToolDefinitions:Mo,effectiveSystemPrompt:Ke,effectiveProviderReasoning:So,callerAbortSignal:e.abortSignal,modelOverride:l.currentModelOverride,hardTimeoutMs:_o,boundarySession:Xe,emitActiveExtensionEvent:T,providerName:l.currentProviderName,attempt:J,clearStreamTimers:v.clearAll});if(Pt.ok){x=Pt.result,p=U;break}ae=Pt.error}if(V.action==="sanitize_thinking_and_retry"){let _e=Rt.executeRecovery(U,V);at(V.action,_e),U=_e.messages,v.clearAll(),J-=1,await Wt(V.delayMs,e.abortSignal);continue}if(V.action==="manual_continue"||J>=Ye.maxRetries)throw p=U,ae;let Fo=Rt.executeRecovery(U,V);at(V.action,Fo),U=Fo.messages,v.clearAll(),await Wt(V.delayMs,e.abortSignal);continue}finally{v.clearAll()}}ke(u),await T("stream:end",void 0),x.usage&&(l.costTracker=Wo(l.costTracker,{provider:l.currentProviderName,model:l.currentModelOverride??"unknown",inputTokens:x.usage.inputTokens,outputTokens:x.usage.outputTokens,cacheReadTokens:x.usage.cachedReadTokens,cacheWriteTokens:x.usage.cachedWriteTokens})),l.lastText=x.textBlocks.map(v=>v.text).join(" ");let St=Nr(p,x.usage),Po=bo(b.activeTools,e.context?.repoIntelligenceMode,!!r,e.context?.toolConstructionMode);x={...x,toolBlocks:Ji(x.toolBlocks,Po)};let hs=x.toolBlocks.filter(v=>Q(v.name)),[ze,Kl]=Fe(l.lastText);if(ze){if(await $e(f,l.lastText,b,{hadToolCalls:!1,success:!0,signal:ze}),He(p,b)){y=C(p,St),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:ze});continue}if(ze==="COMPLETE")return Z(h+1,St),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:"COMPLETE"}),je("completed"),tt(u),await T("complete",{success:!0,signal:"COMPLETE"}),G({success:!0,lastText:l.lastText,signal:"COMPLETE",messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!1})}let gs=yi([...x.thinkingBlocks,...x.textBlocks,...hs]);p.push({role:"assistant",content:gs,turnId:w.turnId,timestamp:new Date().toISOString()});let B=Or(p,x.usage);y=B;let Ct=$i({result:x,messages:p,maxTokensRetryCount:l.maxTokensRetryCount,completedTurnTokenSnapshot:B,events:u});if(l.maxTokensRetryCount=Ct.nextMaxTokensRetryCount,Ct.outcome==="continue"){y=Ct.nextContextTokenSnapshot;continue}let _t=ji({result:x,lastText:l.lastText,messages:p,continueAttempted:l.managedProtocolContinueAttempted,options:e,emittedManagedProtocolPayload:Y.current,completedTurnTokenSnapshot:B});if(l.managedProtocolContinueAttempted=_t.nextContinueAttempted,_t.outcome==="continue"){y=_t.nextContextTokenSnapshot;continue}let Ao=be(x.stopReason);if(Ao==="refused"?u.onTextDelta?.(`
323
-
324
- [model declined to answer]
325
-
326
- `):Ao==="unknown"&&typeof x.stopReason=="string"&&console.warn("[kodax:stop-reason]",{rawStopReason:x.stopReason,provider:l.currentProviderName,model:l.currentModelOverride??z.getModel(),hasToolBlocks:x.toolBlocks.length>0,hasTextBlocks:x.textBlocks.length>0}),x.toolBlocks.length===0){if(await $e(f,l.lastText,b,{hadToolCalls:!1,success:!0}),He(p,b)){y=C(p,B),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:void 0});continue}if(ve(u))return Z(h+1,B),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:void 0}),G({success:!0,lastText:l.lastText,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!1});Z(h+1,B),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:void 0}),je("completed"),tt(u),await T("complete",{success:!0,signal:void 0});{let H=await kt({options:e,sessionId:f,messages:p,title:O,runtimeSessionState:b,lastText:l.lastText});return G({success:!0,lastText:l.lastText,signal:H.finalSignal,signalReason:H.finalReason,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!1})}}let Mt=await Pi({toolBlocks:x.toolBlocks,events:u,emitActiveExtensionEvent:T,messages:p,incompleteRetryCount:wo,preAssistantTokenSnapshot:St,completedTurnTokenSnapshot:B});if(wo=Mt.nextIncompleteRetryCount,y=Mt.nextContextTokenSnapshot,Mt.outcome!=="no_incomplete")continue;let ge=[],Io=[],Oo=await Ai({toolBlocks:x.toolBlocks,abortSignal:e.abortSignal,events:u,emitActiveExtensionEvent:T});if(Oo!==null)ge.push(...Oo);else{let v=await _i({toolBlocks:x.toolBlocks,events:u,ctx:Se,runtimeSessionState:b,activeToolNames:Po,abortSignal:e.abortSignal}),H=await Mi({toolBlocks:x.toolBlocks,resultMap:v,events:u,emitActiveExtensionEvent:T,ctx:Se,runtimeSessionState:b});ge=H.toolResults,Io=H.editRecoveryMessages}let ys=Ii(ge);if(ge.length===0){if(await $e(f,l.lastText,b,{hadToolCalls:!1,success:!0}),He(p,b)){y=C(p,B),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:void 0});continue}if(ve(u))return Z(h+1,B),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:void 0}),G({success:!0,lastText:l.lastText,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!1});Z(h+1,B),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!1,signal:void 0}),je("completed"),tt(u),await T("complete",{success:!0,signal:void 0});{let H=await kt({options:e,sessionId:f,messages:p,title:O,runtimeSessionState:b,lastText:l.lastText});return G({success:!0,lastText:l.lastText,signal:H.finalSignal,signalReason:H.finalReason,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!1})}}if(ys){let v=await Oi({events:u,emitActiveExtensionEvent:T,messages:p,toolResults:ge,completedTurnTokenSnapshot:B,sessionId:f,iter:h,emitIterationEnd:Z});return y=v.contextTokenSnapshot,G({success:!0,lastText:yo,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,interrupted:!v.shouldYieldToQueuedFollowUp})}let No=await ts({messages:p,toolResults:ge,editRecoveryMessages:Io,completedTurnTokenSnapshot:B,runtimeSessionState:b,emitActiveExtensionEvent:T,sessionId:f,lastText:l.lastText,iter:h});if(y=No.contextTokenSnapshot,No.drainedQueuedMessages)continue;if(ve(u))return Z(h+1,y),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!0,signal:void 0}),G({success:!0,lastText:l.lastText,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!1});await me(e,f,{messages:p,title:O,gitRoot:e.context?.gitRoot??void 0,runtimeSessionState:b}),Z(h+1,y),await T("turn:end",{sessionId:f,iteration:h+1,lastText:l.lastText,hadToolCalls:!0,signal:void 0})}catch(P){let K=P instanceof Error?P:new Error(String(P)),pe=await Yi({error:K,messages:p,errorMetadata:ne,options:e,sessionId:f,title:O,runtimeSessionState:b}),Ce=pe.cleanedMessages,ie=pe.updatedErrorMetadata;return y=pe.contextTokenSnapshot,K.name==="AbortError"?(await zi({events:u,emitActiveExtensionEvent:T}),G({success:!0,lastText:l.lastText,messages:Ce,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,interrupted:!0,errorMetadata:ie})):(vo(K),await Vi({error:K,events:u,emitActiveExtensionEvent:T}),G({success:!1,lastText:l.lastText,messages:Ce,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,errorMetadata:ie}))}let Eo=await kt({options:e,sessionId:f,messages:p,title:O,runtimeSessionState:b,lastText:l.lastText});return G({success:!0,lastText:l.lastText,signal:Eo.finalSignal,signalReason:Eo.finalReason,messages:p,sessionId:f,routingDecision:W(),contextTokenSnapshot:y,limitReached:!0})}finally{c?.(),a(),s&&Gt(o)}}i(os,"runSubstrate");var ns="kodax/coding/default",Ml="KodaX default coding agent.\n\nThis agent is a thin declaration that routes through the built-in `runKodaX`\npipeline. Tools, extensions, reasoning, provider selection, session\npersistence, compaction and harness routing are all driven by the\n`KodaXOptions` forwarded via `Runner.run` `opts.presetOptions`.\n";function Pl(e){if(typeof e=="string")return e;for(let t=e.length-1;t>=0;t--){let o=e[t];if(o?.role==="user")return Lt(o)||""}return""}i(Pl,"extractPrompt");function rs(e){let t=e.trim();return t===""||t==="..."}i(rs,"isPlaceholderOnlyAssistantText");function Al(e){if(e.role!=="user")return!1;let t=e.content;return!Array.isArray(t)||t.length===0?!1:t.every(o=>!!o&&typeof o=="object"&&"type"in o&&o.type==="tool_result")}i(Al,"isPureToolResultUserMessage");function Il(e){if(e.lastText&&!rs(e.lastText))return e.lastText;for(let t=e.messages.length-1;t>=0;t--){let o=e.messages[t];if(o){if(o.role==="assistant"){let r=Lt(o);return r&&!rs(r)?r:""}if(!Al(o))return""}}return""}i(Il,"extractFinalAssistantText");var Ol=i(async(e,t,o,r)=>{let n=o?.presetOptions??{},s=o?.abortSignal?{...n,abortSignal:o.abortSignal}:n,a=Pl(t),c=r?r.agentSpan.addChild("coding:runSubstrate",{kind:"generation",agentName:ns,provider:s.provider??"unknown",model:s.model??"unknown"}):null,d;try{d=await os(s,a)}catch(l){throw c&&(c.setError(l instanceof Error?l:new Error(String(l))),c.end()),l}return c&&c.end(),{output:Il(d),messages:d.messages,sessionId:d.sessionId,data:d}},"codingSubstrate"),Nl=Object.freeze([Object.freeze({name:"autoReroute",enabled:!0}),Object.freeze({name:"mutationReflection",enabled:!0}),Object.freeze({name:"preAnswerJudge",enabled:!0}),Object.freeze({name:"postToolJudge",enabled:!0})]),Dl=Object.freeze({default:"balanced",max:"deep",escalateOnRevise:!0});function is(e={}){return Vo({name:ns,instructions:Ml,substrateExecutor:Ol,middleware:Nl,reasoning:Dl,...e})}i(is,"createDefaultCodingAgent");var Ll=/\b(forget|do not remember|don't remember|remove (?:this )?from memory|delete .{0,40}memory)\b/i,Fl=/(?:\u522b\u8bb0|\u4e0d\u8981\u8bb0\u4f4f|\u5fd8\u8bb0|\u5220\u9664.{0,12}\u8bb0\u5fc6|\u4e0d\u8981\u518d\u8bb0)/u,Ul=/\b(remember this|please remember|save this to memory|add this to memory)\b/i,Bl=/(?:\u8bb0\u4f4f|\u4fdd\u5b58.{0,12}\u8bb0\u5fc6|\u52a0\u5165\u8bb0\u5fc6)/u,Hl=/\b(memory|remembered|remember|stored|previously saved|memo(?:ry)? note)\b/i,$l=/\b(wrong|incorrect|outdated|actually|correction|correcting|not .{1,80} but|instead|should be)\b/i,jl=/(?:\u8bb0\u5fc6|\u8bb0\u4f4f\u7684|\u4e4b\u524d\u8bb0\u7684)/u,ql=/(?:\u4e0d\u662f.{0,24}\u800c\u662f|\u7ea0\u6b63|\u66f4\u6b63|\u5176\u5b9e|\u5e94\u8be5\u662f|\u4e0d\u5bf9)/u;async function ss(e){if(cs(e))return;let t=$(e.context);try{let o=await Oe({cwd:t,projectDocs:[],discoverSkills:!1}).maybeRunAutoCurator();(o.ran||o.skippedReason!=="not_due")&&A("[memory:maintenance]",{cwd:t,ran:o.ran,skippedReason:o.skippedReason??null,reportPath:o.reportPath??null,nextEligibleAt:o.nextEligibleAt??null})}catch(o){A("[memory:maintenance:error]",{cwd:t,error:o instanceof Error?o.message:String(o)})}}i(ss,"maybeRunMemoryMaintenanceWindow");async function as(e,t){if(cs(e))return;let o=e.memoryReviewer;if(o===void 0)return;let r=Gl(t);if(r===void 0)return;let n=$(e.context),s=e.context?.rawUserInput?.trim();try{let a=await Oe({cwd:n,projectDocs:[],discoverSkills:!1,memoryReviewer:o}).reviewMemoryFeedback({trigger:r,userFeedback:t,...s!==void 0&&s.length>0?{task:s}:{}});e.events?.onMemoryReview?.(a),A("[memory:review]",{cwd:n,trigger:r,actions:a.actions.length,candidates:a.candidateRefs.map(c=>c.ref.id)})}catch(a){A("[memory:review:error]",{cwd:n,error:a instanceof Error?a.message:String(a)})}}i(as,"maybeReviewMemoryFeedbackFromPrompt");function Gl(e){let t=e.trim();if(t.length!==0){if(Ll.test(t)||Fl.test(t))return"explicit_forget";if(Ul.test(t)||Bl.test(t))return"explicit_remember";if(Wl(t))return"user_correction"}}i(Gl,"detectMemoryReviewTrigger");function Wl(e){return Hl.test(e)&&$l.test(e)||jl.test(e)&&ql.test(e)}i(Wl,"isMemoryCorrection");function cs(e){return e.context?.currentAgentId!==void 0||e.context?.parentAgentId!==void 0}i(cs,"isInternalAgentRun");function ls(e){return{...e.modelTiers!==void 0?{modelTiers:e.modelTiers}:{},...e.maxOutputTokens!==void 0?{maxOutputTokens:e.maxOutputTokens}:{},...e.disablePromptCache!==void 0?{disablePromptCache:e.disablePromptCache}:{},...e.lsp!==void 0?{lsp:e.lsp}:{},...e.workflow!==void 0?{workflow:e.workflow}:{}}}i(ls,"deriveRunScopedConfig");async function vy(e,t){let{options:o}=Un(e,t),r=o.context?.agentProfile?.instructions,n=r!==void 0&&o.context?.systemPromptOverride===void 0?{...o,context:{...o.context,systemPromptOverride:r}}:o;return $o(ls(n),async()=>{await ss(n),await as(n,t);let s=await Qo.run(is(),t,{presetOptions:n,abortSignal:n.abortSignal,guardrails:n.guardrails});if(!s.data)throw new Error("runKodaX: substrate executor did not lift KodaXResult onto RunResult.data \u2014 verify createDefaultCodingAgent().substrateExecutor in coding-preset.ts");return s.data})}i(vy,"runKodaX");export{j as a,ws as b,dn as c,Wt as d,pn as e,Kt as f,nt as g,Ps as h,Ne as i,it as j,De as k,zt as l,Vt as m,Qt as n,at as o,Le as p,xn as q,qd as r,Qd as s,Tn as t,ct as u,kn as v,Qs as w,Rn as x,lt as y,Fn as z,va as A,mm as B,Un as C,oo as D,fm as E,lc as F,jn as G,qn as H,mt as I,ft as J,Fe as K,A as L,no as M,Yn as N,k as O,io as P,zn as Q,so as R,lo as S,Bm as T,ei as U,fo as V,ni as W,po as X,ii as Y,ho as Z,mi as _,bi as $,Ee as aa,Ni as ba,Di as ca,bo as da,Fi as ea,Ui as fa,vt as ga,Gi as ha,Dh as ia,me as ja,og as ka,es as la,ns as ma,is as na,ss as oa,as as pa,ls as qa,vy as ra};