@kodax-ai/kodax 0.7.74 → 0.7.75

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 (48) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +14 -0
  3. package/README_CN.md +11 -0
  4. package/dist/chunks/{agent-2ABIG5NW.js → agent-LVZJB2GQ.js} +1 -1
  5. package/dist/chunks/argument-completer-GHWEWPVQ.js +2 -0
  6. package/dist/chunks/{chunk-QH56WEHK.js → chunk-4PVSDE5L.js} +1 -1
  7. package/dist/chunks/{chunk-XM724XAA.js → chunk-5WSOB34U.js} +4 -4
  8. package/dist/chunks/chunk-6YUDR7WN.js +5 -0
  9. package/dist/chunks/{chunk-5GH3SVI3.js → chunk-6ZMKX3XF.js} +21 -21
  10. package/dist/chunks/{chunk-C7TZAT3S.js → chunk-737LI7OS.js} +8 -8
  11. package/dist/chunks/{chunk-64M5HOCA.js → chunk-BN3W2DQY.js} +1 -1
  12. package/dist/chunks/{chunk-VPURXE2F.js → chunk-DEHOFNQA.js} +119 -119
  13. package/dist/chunks/{chunk-MBAPT2R5.js → chunk-G5VW55T4.js} +1 -1
  14. package/dist/chunks/{chunk-MVCAFD6M.js → chunk-N6M2LYEP.js} +1 -1
  15. package/dist/chunks/{chunk-GAFFYJU3.js → chunk-OGL227XV.js} +11 -11
  16. package/dist/chunks/{chunk-7W6KYJU2.js → chunk-OJQQRLZJ.js} +4 -4
  17. package/dist/chunks/{chunk-XXQLPTAN.js → chunk-Q65EAOX6.js} +7 -7
  18. package/dist/chunks/{chunk-KPGVY6PF.js → chunk-QRBWNYFV.js} +4 -4
  19. package/dist/chunks/{chunk-UJS7JAO6.js → chunk-QSMXI4MH.js} +1 -1
  20. package/dist/chunks/{chunk-XMP66YWG.js → chunk-SB75RNNR.js} +4 -4
  21. package/dist/chunks/{chunk-VK5QTHS6.js → chunk-UJRRZINL.js} +3 -3
  22. package/dist/chunks/{compaction-config-QYCDOW3Q.js → compaction-config-L2YZK7Q3.js} +1 -1
  23. package/dist/chunks/{construction-bootstrap-BKNPJI7O.js → construction-bootstrap-3TQWTHSQ.js} +1 -1
  24. package/dist/chunks/{dist-EVEJAII2.js → dist-D3EPVAOZ.js} +1 -1
  25. package/dist/chunks/{dist-6EK4H7TP.js → dist-ZJFTZJ55.js} +1 -1
  26. package/dist/chunks/host-KHDXYFVG.js +2 -0
  27. package/dist/chunks/{run-manager-L7MKGQNX.js → run-manager-CD24OO4V.js} +1 -1
  28. package/dist/chunks/{utils-GTJLL4GT.js → utils-HMVP6XPH.js} +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/kodax_cli.js +825 -825
  31. package/dist/runtime-worker.js +756 -756
  32. package/dist/sdk-a2a.js +1 -1
  33. package/dist/sdk-agent.js +1 -1
  34. package/dist/sdk-coding.js +1 -1
  35. package/dist/sdk-experimental-memory.js +1 -1
  36. package/dist/sdk-llm.js +1 -1
  37. package/dist/sdk-mcp.js +1 -1
  38. package/dist/sdk-media.js +1 -1
  39. package/dist/sdk-repl.js +1 -1
  40. package/dist/sdk-runtime.d.ts +2 -1
  41. package/dist/sdk-runtime.js +1 -1
  42. package/dist/sdk-session.js +1 -1
  43. package/dist/sdk-skills.js +1 -1
  44. package/docs/SDK_EMBEDDER_GUIDE.md +144 -110
  45. package/package.json +1 -1
  46. package/dist/chunks/argument-completer-C45DEO34.js +0 -2
  47. package/dist/chunks/chunk-PP53SIIL.js +0 -5
  48. package/dist/chunks/host-KS4TJKWQ.js +0 -2
package/CHANGELOG.md CHANGED
@@ -6,6 +6,46 @@ All notable changes to this project will be documented in this file.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.75] - 2026-07-24
10
+
11
+ > Package, code, tests, and documentation are prepared for SDK/Space validation.
12
+ > The `v0.7.75` tag, GitHub Release, and npm publication are intentionally not
13
+ > created yet.
14
+
15
+ ### Changed
16
+
17
+ - **Exact audited npm candidate bytes.** The release script now packs first,
18
+ audits the generated Sidecar prompt and budget bridge, and publishes that
19
+ exact tarball so SDK validation and registry publication cannot drift.
20
+ - **Windows GUI background-process hardening.** Runtime
21
+ Worker-reachable non-interactive child processes now request hidden Windows
22
+ consoles across memory/Git metadata, provider CLI and ACP, LSP, clipboard,
23
+ worktree, review, extension-command, checkpoint, and sandbox paths. Explicit
24
+ editor, terminal, and PTY interaction remains unchanged.
25
+ - **Published Runtime Worker audit and packaged-host regression.** The bundle
26
+ build now audits statically identifiable child-process calls in the published
27
+ Runtime Worker, and the packaged Electron daemon smoke runs 20 ordinary
28
+ queries with a Win32 console-visibility probe. Packaged KodaX Space validation
29
+ on Windows 10 and Windows 11 remains a non-blocking product follow-up; it does
30
+ not gate the tag, package build, or npm publication.
31
+
32
+ ### Fixed
33
+
34
+ - **Sidecar completion and Runtime terminal semantics.** Optional work offered
35
+ after the current request is complete is accepted rather than reported as
36
+ blocked; only clarification required to finish the current request remains
37
+ blocked. Budget-approval state is emitted only for an eligible `revise`, and
38
+ structured blocked codes and reasons survive live events, persistence,
39
+ daemon round trips, and restart recovery.
40
+
41
+ ### Documentation
42
+
43
+ - Updated the release guide, current architecture/design baselines, SDK
44
+ embedder guidance, feature index, roadmap, issue tracker, English/Chinese
45
+ READMEs, and the v0.7.75 regression guide for the SDK validation candidate.
46
+ - Rescheduled FEATURE_263 from v0.7.75 to v0.7.77 and retained v0.7.75 as a
47
+ feature-free stabilization release.
48
+
9
49
  ## [0.7.74] - 2026-07-23
10
50
 
11
51
  > Git tag and GitHub Release are published by the release workflow. npm
package/README.md CHANGED
@@ -385,6 +385,20 @@ hosts that disable it must start the daemon through ordinary Node/KodaX CLI and
385
385
  connect in attach-only mode. For SDK calls, `homeDir` is the CLI-style base
386
386
  directory that owns `.kodax`, not the `.kodax` path itself.
387
387
 
388
+ **v0.7.75 Windows GUI stabilization candidate:** Runtime Worker-reachable
389
+ non-interactive subprocesses request hidden Windows consoles across memory/Git,
390
+ provider CLI/ACP, LSP, clipboard, worktree, review, extension-command,
391
+ checkpoint, and sandbox paths. Explicit editor, terminal, and PTY behavior is
392
+ unchanged. The SDK bundle includes a static child-process audit and a packaged
393
+ Electron 20-query console-visibility regression. Product-level packaged KodaX
394
+ Space verification remains useful but does not gate SDK packaging or
395
+ publication.
396
+
397
+ The same candidate distinguishes optional post-completion offers from
398
+ clarification required to finish the current request, emits budget-approval
399
+ state only for eligible Sidecar revisions, and preserves structured blocked
400
+ reasons across embedded and daemon Runtime boundaries.
401
+
388
402
  One daemon owns many sessions. Different sessions may run concurrently; starts
389
403
  within the same session are queued so that only one run is active for that
390
404
  session. Multiple `kodax` processes can attach to the same daemon and open or
package/README_CN.md CHANGED
@@ -91,6 +91,17 @@ daemon,不会再次打开 GUI。`ELECTRON_RUN_AS_NODE` 只存在于子进程
91
91
  再使用 attach-only 模式连接。SDK 的 `homeDir` 是拥有 `.kodax` 的 CLI 风格基础目录,
92
92
  不是 `.kodax` 目录本身。
93
93
 
94
+ **v0.7.75 Windows GUI 稳定性候选版**:Runtime Worker 可达的非交互后台子进程
95
+ 在 Windows 上统一请求隐藏控制台,覆盖 memory/Git、provider CLI/ACP、LSP、
96
+ clipboard、worktree、review、extension command、checkpoint 与 sandbox 路径;
97
+ 显式 editor、terminal 和 PTY 行为保持不变。SDK bundle 增加静态子进程审计,
98
+ packaged Electron 回归连续执行 20 次普通查询并检查控制台可见性。KodaX Space
99
+ 产品级验证仍然有价值,但不阻塞 SDK 打包、tag 或 npm 发布。
100
+
101
+ 同一候选版还会区分“当前请求完成后的可选后续工作”和“完成当前请求所必需的
102
+ 澄清”,只为符合资格的 Sidecar `revise` 发布预算审批状态,并在 embedded 与
103
+ daemon Runtime 边界保留结构化 blocked 原因。
104
+
94
105
  **v0.7.72–v0.7.73 Runtime 权限契约:**Auto Mode 的权限决策由 Runtime Session 持有,
95
106
  不再由 UI hook 抢先决定。Runtime 会跨 turn 复用 LLM/rules guardrail,先分类、
96
107
  仅在 `escalate` 时创建共享 permission 请求,并把自动降级到 rules 的结果持久化到
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Ea as i,Ka as j,da as d,ea as e,fa as f,j as c,ua as g,wa as h}from"./chunk-XM724XAA.js";import"./chunk-64M5HOCA.js";import"./chunk-MBAPT2R5.js";import"./chunk-C7TZAT3S.js";import"./chunk-XXQLPTAN.js";import{sb as a,tb as b}from"./chunk-UJS7JAO6.js";import"./chunk-GAFFYJU3.js";import"./chunk-PP53SIIL.js";import"./chunk-F7AIEHSS.js";import"./chunk-ONUPGMER.js";export{e as bucketProviderPayloadSize,g as buildAutoRepoIntelligenceContext,f as checkPromiseSignal,b as cleanupIncompleteToolCalls,h as describeTransientProviderRetry,c as emitResilienceDebug,d as estimateProviderPayloadBytes,j as runKodaX,i as saveSessionSnapshot,a as validateAndFixToolHistory};
2
+ import{Ea as i,Ka as j,da as d,ea as e,fa as f,j as c,ua as g,wa as h}from"./chunk-5WSOB34U.js";import"./chunk-BN3W2DQY.js";import"./chunk-G5VW55T4.js";import"./chunk-737LI7OS.js";import"./chunk-Q65EAOX6.js";import{sb as a,tb as b}from"./chunk-QSMXI4MH.js";import"./chunk-OGL227XV.js";import"./chunk-6YUDR7WN.js";import"./chunk-F7AIEHSS.js";import"./chunk-ONUPGMER.js";export{e as bucketProviderPayloadSize,g as buildAutoRepoIntelligenceContext,f as checkPromiseSignal,b as cleanupIncompleteToolCalls,h as describeTransientProviderRetry,c as emitResilienceDebug,d as estimateProviderPayloadBytes,j as runKodaX,i as saveSessionSnapshot,a as validateAndFixToolHistory};
@@ -0,0 +1,2 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{Ja as a,Ka as b}from"./chunk-OJQQRLZJ.js";import"./chunk-SB75RNNR.js";import"./chunk-4PVSDE5L.js";import"./chunk-DEHOFNQA.js";import"./chunk-N6M2LYEP.js";import"./chunk-UJRRZINL.js";import"./chunk-5WSOB34U.js";import"./chunk-BN3W2DQY.js";import"./chunk-G5VW55T4.js";import"./chunk-737LI7OS.js";import"./chunk-Q65EAOX6.js";import"./chunk-QSMXI4MH.js";import"./chunk-OGL227XV.js";import"./chunk-6YUDR7WN.js";import"./chunk-F7AIEHSS.js";import"./chunk-ONUPGMER.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Uc as o}from"./chunk-UJS7JAO6.js";import{f as c}from"./chunk-GAFFYJU3.js";import{a as n}from"./chunk-ONUPGMER.js";import{readFile as a}from"fs/promises";var i={enabled:!0,triggerPercent:75};async function s(r){let t=c("config.json");try{let e=await f(t);if(e?.compaction)return o({...i,...e.compaction})}catch{}return o(i)}n(s,"loadCompactionConfig");async function f(r){try{let t=await a(r,"utf-8");return JSON.parse(t)}catch{return null}}n(f,"readConfigFile");export{s as a};
2
+ import{Uc as o}from"./chunk-QSMXI4MH.js";import{f as c}from"./chunk-OGL227XV.js";import{a as n}from"./chunk-ONUPGMER.js";import{readFile as a}from"fs/promises";var i={enabled:!0,triggerPercent:75};async function s(r){let t=c("config.json");try{let e=await f(t);if(e?.compaction)return o({...i,...e.compaction})}catch{}return o(i)}n(s,"loadCompactionConfig");async function f(r){try{let t=await a(r,"utf-8");return JSON.parse(t)}catch{return null}}n(f,"readConfigFile");export{s as a};
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as ri}from"./chunk-64M5HOCA.js";import{a as li}from"./chunk-MBAPT2R5.js";import{A as Cr,Ac as Co,Bc as jr,C as _r,Ca as Lr,Cc as Gr,D as Ar,Dc as R,Ec as Pe,Fa as Fr,Ga as Ur,Ha as Br,K as Mr,Kc as Xr,Kd as ii,Ld as si,Md as ai,Nd as ci,Od as di,S as Mt,T as Ir,Vc as zr,Wc as Nt,Yc as _o,_c as Ao,aa as Pr,cb as $r,d as Rr,e as oe,ed as Yr,hb as Ot,hd as Vr,i as Z,id as Qr,j as wr,jd as Zr,kd as Jr,la as Or,pd as ei,qd as Mo,ra as Dr,sd as ti,tb as Dt,td as oi,ua as Nr,ub as Ie,ud as ni,vb as Hr,wb as qr,wc as Wr,x as Sr,xb as Eo,y as Er,ya as It,yb as Kr,z as So,za as Pt}from"./chunk-C7TZAT3S.js";import{$a as jn,Aa as $n,D as _e,E as Nn,I as Ln,Ja as Hn,Ma as ot,R as Fn,T as Un,Ua as ho,W as $e,Ya as qn,Za as Kn,_a as Wn,bb as Gn,e as Je,f as et,g as tt,h as Dn,sa as Bn}from"./chunk-XXQLPTAN.js";import{$c as mr,Bc as lr,Bd as br,Cc as dr,Ec as bo,Fa as nr,Fc as vo,Ga as rr,Ic as ko,Md as vr,Nd as kr,Pd as At,Qc as Ro,Uc as ur,cd as fr,dd as pr,ed as gr,f as ye,g as Et,gd as hr,hd as yr,ia as Jn,id as Tr,j as Qn,jd as xr,k as C,kd as it,l as Zn,la as er,ld as wo,ma as tr,o as nt,q as Ae,s as Ct,sb as rt,tb as xo,va as or,wa as To}from"./chunk-UJS7JAO6.js";import{b as P,f as _t,ga as Me,ia as sr,ka as ar,ma as cr,p as ir}from"./chunk-GAFFYJU3.js";import{a as yo,u as Xn,w as zn,y as Yn,z as Vn}from"./chunk-PP53SIIL.js";import{a as i}from"./chunk-ONUPGMER.js";import{readFile as ac}from"fs/promises";function cc(e){return 75}i(cc,"adaptiveTriggerPercent");var lc={enabled:!0};async function ui(e,t){let o=_t("config.json"),n;try{let a=await dc(o);a?.compaction&&(n=a.compaction)}catch{}let r={...lc,...n,triggerPercent:75};t?.enabled!==void 0&&(r.enabled=t.enabled),t?.contextWindow!==void 0&&(r.contextWindow=t.contextWindow);let s=r.contextWindow??e;return r.triggerPercent=typeof t?.triggerPercent=="number"?t.triggerPercent:typeof n?.triggerPercent=="number"?n.triggerPercent:cc(s),t?.triggerTokens!==void 0&&(r.triggerTokens=t.triggerTokens),ur(r)}i(ui,"loadCompactionConfig");async function dc(e){try{let t=await ac(e,"utf-8");return JSON.parse(t)}catch{return null}}i(dc,"readConfigFile");var ne;(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"})(ne||(ne={}));var uc=[/\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 mi(e){return uc.some(t=>t.test(e))}i(mi,"matchesTransientMessage");function mc(e){if(e.name==="StreamIncompleteError"||e.message.includes("Stream incomplete"))return{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:2e3,shouldCleanup:!0};if(e.name==="AbortError")return{category:ne.USER_ABORT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0};if(e instanceof Dn||e.message.includes("tool_call_id")||e.message.includes("tool result"))return{category:ne.TOOL_CALL_ID,retryable:!0,maxRetries:1,retryDelay:1e3,shouldCleanup:!0};if(e instanceof et)return{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:e.retryAfter??6e4,shouldCleanup:!0};if(e instanceof tt)return{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:e.isTimeout?5e3:2e3,shouldCleanup:!0};if(e instanceof Je){let o=e.message.toLowerCase();return mi(o)?{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:2e3,shouldCleanup:!0}:{category:ne.PERMANENT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0}}let t=e.message.toLowerCase();return mi(t)?{category:ne.TRANSIENT,retryable:!0,maxRetries:2,retryDelay:2e3,shouldCleanup:!0}:{category:ne.PERMANENT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0}}i(mc,"classifyError");function Io(e,t){return new Promise((o,n)=>{if(t?.aborted){n(t.reason instanceof Error?t.reason:new DOMException("Request aborted","AbortError"));return}let r,s=t;if(!s){r=setTimeout(()=>{o()},e);return}let a=i(()=>{clearTimeout(r),s.removeEventListener("abort",a),n(s.reason instanceof Error?s.reason:new DOMException("Request aborted","AbortError"))},"onAbort");r=setTimeout(()=>{s.removeEventListener("abort",a),o()},e),s.addEventListener("abort",a,{once:!0})})}i(Io,"waitForRetryDelay");var pi={requestTimeoutMs:6e5,streamIdleTimeoutMs:Number(process.env.KODAX_STREAM_IDLE_TIMEOUT_MS)||0,chunkTimeoutMs:3e4,maxRetries:4,maxRetryDelayMs:6e4,enableNonStreamingFallback:!0};function Po(e,t,o){let n={...pi};if(t&&fi(n,t),o&&o.length>0){let r=o.find(s=>s.provider===e);if(r){let{provider:s,...a}=r;fi(n,a)}}return n}i(Po,"resolveResilienceConfig");function fi(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(fi,"mergePartialConfig");var fc=[/\brate.?limit\b/i,/\btoo many requests\b/i,/\b429\b/,/\bquota exceeded\b/i,/\bapi credits?\b/i,/请求过多/,/频率限制/,/限流/,/配额/],gi=[/\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,/服务繁忙/,/服务不可用/,/服务器错误/,/服务器内部错误/,/过载/,/容量不足/],Oo=[/\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,/网络错误/,/网络异常/,/连接错误/,/连接失败/,/连接被拒绝/,/连接被重置/,/连接被终止/,/连接已终止/,/连接中断/],Do=[/\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,/连接超时/,/请求超时/,/响应超时/],hi=[/\bstream incomplete\b/i,/\bstream interrupted\b/i],pc=[/\bstream stalled or delayed\b/i,/\b60s idle\b/i,/\bidle timeout\b/i],gc=[/\bhard timeout\b/i,/\b10 minutes?\b/i,/\bapi hard timeout\b/i],hc=[/reasoning_content/i,/thinking.{0,40}signature/i,/signature.{0,40}thinking/i],yc=[/\bcontext too long\b/i,/\bmaximum context\b/i,/\bcontext length\b/i,/\bcontext window\b/i,/\btoo many tokens\b/i],Tc=[/\b(401|403)\b/,/\b(auth|unauthorized|forbidden|api key|not configured|permission denied)\b/i];function Lt(e,t){let o=yi(e);if(e.name==="AbortError")return{errorClass:"user_abort",failureStage:t??"before_first_delta",retryable:!1,maxRetries:0,baseRetryDelay:0};if(e instanceof et||J(o,fc)){let n=e instanceof et?e.retryAfter:void 0;return{errorClass:"rate_limit",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:n??6e4}}return e instanceof Je&&J(o,gi)?{errorClass:"provider_overloaded",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:e.name==="StreamIncompleteError"||J(o,hi)?{errorClass:"incomplete_stream",failureStage:bc(o,t),retryable:!0,maxRetries:3,baseRetryDelay:2e3}:J(o,pc)?{errorClass:"stream_idle_timeout",failureStage:t??"mid_stream_text",retryable:!0,maxRetries:3,baseRetryDelay:3e3}:J(o,gc)?{errorClass:"request_timeout",failureStage:t??"before_first_delta",retryable:!0,maxRetries:2,baseRetryDelay:5e3}:e instanceof tt&&e.isTimeout||J(o,Do)?{errorClass:"request_timeout",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:e instanceof tt||J(o,Oo)?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:2e3}:e instanceof Je?J(o,[...Oo,...Do])?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:2e3}:J(o,hc)?{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}:J(o,gi)?{errorClass:"provider_overloaded",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:J(o,[...Oo,...Do,...hi])?{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(Lt,"classifyResilienceError");function xc(e,t){if(t<=0)return!1;let o=yi(e);if(J(o,Tc))return!1;let n=Lt(e);return n.errorClass==="provider_overloaded"||n.errorClass==="reasoning_content_required"||J(o,yc)}i(xc,"isSessionRecoveryCandidateError");function J(e,t){return t.some(o=>o.test(e))}i(J,"matchesAny");function yi(e){let t=[],o=new Set,n=e,r=0,s=5;for(;n!=null&&r<s&&!o.has(n);){if(o.add(n),n instanceof Error){n.message&&t.push(n.message);let a=n.code;typeof a=="string"&&a.length>0&&t.push(a),n=n.cause}else if(typeof n=="string")t.push(n),n=void 0;else if(typeof n=="object"){let a=n.message;typeof a=="string"&&t.push(a);let c=n.code;typeof c=="string"&&t.push(c),n=n.cause}else break;r+=1}return t.join(" | ").toLowerCase()}i(yi,"collectErrorText");function bc(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(bc,"inferStageForStreamError");var vc=0;function Ti(){return`req_${Date.now()}_${++vc}`}i(Ti,"nextRequestId");var st=class{static{i(this,"StableBoundaryTracker")}state;hasReceivedFirstDelta=!1;currentToolInputId;constructor(){this.state=this.createInitialState()}beginRequest(t,o,n,r=1,s=!1){this.state={requestId:Ti(),provider:t,model:o,attempt:r,lastStableMessageIndex:n.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),n=t.slice(0,o),r=[...this.state.pendingToolCallIds],s=[...this.state.executedToolCallIds];return{messages:n,droppedToolCallIds:r,executedToolCallIds:s}}reset(){this.state=this.createInitialState(),this.hasReceivedFirstDelta=!1,this.currentToolInputId=void 0}createInitialState(){return{requestId:Ti(),provider:"",model:"",attempt:1,lastStableMessageIndex:0,executedToolCallIds:[],pendingToolCallIds:[],visibleLiveTextLength:0,visibleThinkingLength:0,fallbackUsed:!1,startedAt:Date.now()}}};function Ft(e,t,o){if(e.length===0)return[];let n=kc(e,o),r=Rc(n),s=t.filter(a=>!r.includes(a));return s.length>0?wc(n,s):n}i(Ft,"reconstructMessagesWithToolGuard");function kc(e,t){if(t.length===0)return[...e];let o=new Set(t);return e.map(n=>{if(typeof n.content=="string")return n;let r=n.content.filter(s=>s.type==="tool_use"?!o.has(s.id):s.type==="tool_result"?!o.has(s.tool_use_id):!0);return r.length===0?{...n,content:[{type:"text",text:""}]}:{...n,content:r}})}i(kc,"filterIncompleteToolCalls");function Rc(e){let t=[];for(let o of e)if(typeof o.content!="string")for(let n of o.content)n.type==="tool_result"&&t.push(n.tool_use_id);return t}i(Rc,"collectToolResultIds");function wc(e,t){let o=[...e],n=t.map(r=>({type:"tool_result",tool_use_id:r,content:"[Result preserved from previous attempt - tool already executed]"}));return n.length>0&&o.push({role:"user",content:n}),o}i(wc,"appendMissingToolResults");var Sc=["before_request_accepted","before_first_delta"],Ec=["stream_idle_timeout","chunk_timeout","incomplete_stream","connection_failure"],at=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,n){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(n>=this.config.maxRetries)return{action:"manual_continue",ladderStep:4,delayMs:0,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:!1,reasonCode:o.errorClass,failureStage:o.failureStage};let r=_c(o.baseRetryDelay,n,this.config.maxRetryDelayMs),s=Ac(t),a=s!==void 0?Math.min(s,this.config.maxRetryDelayMs):r,{action:c,ladderStep:u,shouldUseNonStreaming:l}=this.selectRecoveryStrategy(o,n);return{action:c,ladderStep:u,delayMs:a,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:l,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 n=t.failureStage,r=t.errorClass;return Ec.includes(r)&&this.config.enableNonStreamingFallback&&!this.nonStreamingFallbackUsed&&o>=2?(this.nonStreamingFallbackUsed=!0,{action:"non_streaming_fallback",ladderStep:3,shouldUseNonStreaming:!0}):Sc.includes(n)?{action:"fresh_connection_retry",ladderStep:1,shouldUseNonStreaming:!1}:{action:"stable_boundary_retry",ladderStep:2,shouldUseNonStreaming:!1}}executeFreshConnectionRetry(t,o){let n=this.boundaryTracker.snapshot();return{messages:[...t],droppedToolCallIds:[],executedToolCallIds:[...n.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}executeStableBoundaryRetry(t,o){let n=this.boundaryTracker.recoverToStableBoundary(t);return{messages:Ft(n.messages,n.executedToolCallIds,n.droppedToolCallIds),droppedToolCallIds:n.droppedToolCallIds,executedToolCallIds:n.executedToolCallIds,fallbackUsed:this.nonStreamingFallbackUsed}}executeNonStreamingFallback(t,o){let n=this.boundaryTracker.recoverToStableBoundary(t);return{messages:Ft(n.messages,n.executedToolCallIds,n.droppedToolCallIds),droppedToolCallIds:n.droppedToolCallIds,executedToolCallIds:n.executedToolCallIds,fallbackUsed:!0}}executeManualContinue(t,o){let n=this.boundaryTracker.snapshot();return{messages:[...t],droppedToolCallIds:[...n.pendingToolCallIds],executedToolCallIds:[...n.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}executeSanitizeThinking(t,o){let n=this.boundaryTracker.snapshot();return{messages:Cc(t),droppedToolCallIds:[],executedToolCallIds:[...n.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}reset(){this.nonStreamingFallbackUsed=!1,this.thinkingSanitizationUsed=!1}};function Cc(e){return e.map(t=>{if(t.role!=="assistant"||typeof t.content=="string"||!Array.isArray(t.content))return t;let o=t.content.filter(n=>n.type!=="thinking"&&n.type!=="redacted_thinking");return o.length===0?{...t,content:[{type:"text",text:""}]}:{...t,content:o}})}i(Cc,"sanitizeThinkingBlocks");function _c(e,t,o){let n=e*Math.pow(2,t-1),r=Math.random()*1e3;return Math.min(n+r,o)}i(_c,"calculateRetryDelay");function Ac(e){if("retryAfter"in e&&typeof e.retryAfter=="number")return e.retryAfter*1e3}i(Ac,"extractServerRetryAfter");var Ut=process.env.KODAX_DEBUG_STREAM==="1"||process.env.KODAX_DEBUG_RESILIENCE==="1";function No(e,t){Ut&&P({source:"coding:resilience",level:"debug",message:"classify",detail:{rawError:e.message,errorClass:t.errorClass,failureStage:t.failureStage,retryable:t.retryable,maxRetries:t.maxRetries}})}i(No,"telemetryClassify");function Lo(e,t){Ut&&P({source:"coding:resilience",level:"debug",message:"decision",detail:{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(Lo,"telemetryDecision");function Fo(e){Ut&&P({source:"coding:resilience",level:"debug",message:"boundary",detail:{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(Fo,"telemetryBoundary");function Bt(e,t){Ut&&P({source:"coding:resilience",level:"debug",message:"recovery",detail:{action:e,droppedToolCallIds:t.droppedToolCallIds,executedToolCallIds:t.executedToolCallIds,fallbackUsed:t.fallbackUsed}})}i(Bt,"telemetryRecovery");function ct(e,t){if(!t||t.length===0)return e;let o=[{type:"text",text:e}];for(let n of t){if(n.kind!=="image")throw new yo("MODEL_INPUT_UNSUPPORTED",`${n.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:n.path,mediaType:n.mediaType})}return o}i(ct,"buildPromptMessageContent");function Uo(e){return e._truncated===!0||e._salvaged===!0&&zr(e.name)}i(Uo,"isUntrustedSalvage");function bi(e){let t=[];for(let o of e){if(Uo(o)){t.push(`${o.name}: incomplete input (salvaged from malformed/truncated JSON)`);continue}let n=Nt(o.name),r=o.input??{};for(let s of n)(r[s]===void 0||r[s]===null||r[s]==="")&&t.push(`${o.name}: missing '${s}'`)}return t}i(bi,"checkIncompleteToolCalls");function Te(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(Te,"isFiniteNonNegative");function vi(e){return!(!e||!Te(e.inputTokens)||!Te(e.outputTokens)||!Te(e.totalTokens)||e.totalTokens<e.inputTokens||e.totalTokens<e.outputTokens||e.cachedReadTokens!==void 0&&!Te(e.cachedReadTokens)||e.cachedWriteTokens!==void 0&&!Te(e.cachedWriteTokens)||e.thoughtTokens!==void 0&&!Te(e.thoughtTokens))}i(vi,"hasValidTokenUsage");function Ht(e){let t=C(e);return{currentTokens:t,baselineEstimatedTokens:t,source:"estimate"}}i(Ht,"createEstimatedContextTokenSnapshot");function Mc(e,t){let o=C(e);return{currentTokens:t.inputTokens,baselineEstimatedTokens:o,source:"api",usage:t}}i(Mc,"createApiContextTokenSnapshot");function ki(e,t){return vi(t)?{currentTokens:t.totalTokens,baselineEstimatedTokens:C(e),source:"api",usage:t}:Ht(e)}i(ki,"createCompletedTurnTokenSnapshot");function Bo(e,t){return vi(t)?Mc(e,t):Ht(e)}i(Bo,"createContextTokenSnapshot");function lt(e,t){let o=C(e);if(!t||!Te(t.currentTokens)||!Te(t.baselineEstimatedTokens))return o;let n=t.currentTokens+(o-t.baselineEstimatedTokens);return!Number.isFinite(n)||n<0?o:Math.round(n)}i(lt,"resolveContextTokenCount");function M(e,t){return{currentTokens:lt(e,t),baselineEstimatedTokens:C(e),source:t?.source??"estimate",usage:t?.usage}}i(M,"rebaseContextTokenSnapshot");function Ri(e,t){let o=C(e);return{currentTokens:o,baselineEstimatedTokens:o,source:t?.source??"estimate"}}i(Ri,"recomputeContextTokenSnapshot");function kf(e,t=400){return e.length<=t?e:`${e.slice(0,Math.max(0,t-3))}...`}i(kf,"truncateText");function wi(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(wi,"extractMessageText");function Ic(e){return e==="running"||e==="planned"}i(Ic,"isUnconvergedVerdict");function Pc(e){let t=e.trim();return t===""||t==="..."}i(Pc,"isPlaceholderOnlyAssistantText");function Oc(e){let t=wi(e);return Pc(t)?"":t}i(Oc,"extractFinalAssistantText");function Si(e){return e?e._source==="compaction-checkpoint"?!0:e.role==="system"&&typeof e.content=="string"&&e.content.startsWith(mr):!1}i(Si,"isCompactionCheckpointMessage");function Mf(e,t,o){if(!e.messages)return e;let n=Oc(e);if(Ic(e.managedTask?.verdict?.status)||e.interrupted&&!n)return e;let r=t.context?.inputArtifacts,s=e.artifactLedger??ko(e.messages),a=Dc(e.messages,o,n,r),c=e.contextTokenSnapshot?Ri(a,e.contextTokenSnapshot):void 0;return{...e,messages:a,artifactLedger:s,contextTokenSnapshot:c}}i(Mf,"reshapeToUserConversation");function Dc(e,t,o,n){let r=e,s=r[0];s?.role==="system"&&!Si(s)&&(r=r.slice(1)),r=$o(r);let c=!r.some(l=>l.role==="user"&&$t(l)===t);if(c){let l=r.some(f=>f.role==="user");r.some(f=>Si(f)&&(f.role==="user"||l))&&(c=!1)}c&&(r=[...r,{role:"user",content:ct(t,n)}]);let u=r[r.length-1];return u?.role==="assistant"&&typeof u.content=="string"&&u.content===o||(u?.role==="assistant"?r=[...r.slice(0,-1),{role:"assistant",content:o}]:r=[...r,{role:"assistant",content:o}]),[...r]}i(Dc,"preserveTranscriptForRoundExit");function $o(e){let t=e.length;for(;t>=2;){let o=e[t-2],n=e[t-1];if(o.role==="user"&&n.role==="assistant"&&Lc(o)){t-=2;continue}break}return e.slice(0,t)}i($o,"normalizeLoadedSessionMessages");var Nc=/^\s*You are the (Scout|Planner|Generator|Evaluator) role\b/;function Lc(e){if(e.role!=="user")return!1;let t=typeof e.content=="string"?e.content:Fc(e.content);return Nc.test(t)}i(Lc,"isRolePromptShapedUser");function Fc(e){let t=e[0];return t?.type==="text"&&typeof t.text=="string"?t.text:""}i(Fc,"extractLeadingTextBlock");function xi(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
2
+ import{a as ri}from"./chunk-BN3W2DQY.js";import{a as li}from"./chunk-G5VW55T4.js";import{A as Cr,Ac as Co,Bc as jr,C as _r,Ca as Lr,Cc as Gr,D as Ar,Dc as R,Ec as Pe,Fa as Fr,Ga as Ur,Ha as Br,K as Mr,Kc as Xr,Kd as ii,Ld as si,Md as ai,Nd as ci,Od as di,S as Mt,T as Ir,Vc as zr,Wc as Nt,Yc as _o,_c as Ao,aa as Pr,cb as $r,d as Rr,e as oe,ed as Yr,hb as Ot,hd as Vr,i as Z,id as Qr,j as wr,jd as Zr,kd as Jr,la as Or,pd as ei,qd as Mo,ra as Dr,sd as ti,tb as Dt,td as oi,ua as Nr,ub as Ie,ud as ni,vb as Hr,wb as qr,wc as Wr,x as Sr,xb as Eo,y as Er,ya as It,yb as Kr,z as So,za as Pt}from"./chunk-737LI7OS.js";import{$a as jn,Aa as $n,D as _e,E as Nn,I as Ln,Ja as Hn,Ma as ot,R as Fn,T as Un,Ua as ho,W as $e,Ya as qn,Za as Kn,_a as Wn,bb as Gn,e as Je,f as et,g as tt,h as Dn,sa as Bn}from"./chunk-Q65EAOX6.js";import{$c as mr,Bc as lr,Bd as br,Cc as dr,Ec as bo,Fa as nr,Fc as vo,Ga as rr,Ic as ko,Md as vr,Nd as kr,Pd as At,Qc as Ro,Uc as ur,cd as fr,dd as pr,ed as gr,f as ye,g as Et,gd as hr,hd as yr,ia as Jn,id as Tr,j as Qn,jd as xr,k as C,kd as it,l as Zn,la as er,ld as wo,ma as tr,o as nt,q as Ae,s as Ct,sb as rt,tb as xo,va as or,wa as To}from"./chunk-QSMXI4MH.js";import{b as P,f as _t,ga as Me,ia as sr,ka as ar,ma as cr,p as ir}from"./chunk-OGL227XV.js";import{a as yo,u as Xn,w as zn,y as Yn,z as Vn}from"./chunk-6YUDR7WN.js";import{a as i}from"./chunk-ONUPGMER.js";import{readFile as ac}from"fs/promises";function cc(e){return 75}i(cc,"adaptiveTriggerPercent");var lc={enabled:!0};async function ui(e,t){let o=_t("config.json"),n;try{let a=await dc(o);a?.compaction&&(n=a.compaction)}catch{}let r={...lc,...n,triggerPercent:75};t?.enabled!==void 0&&(r.enabled=t.enabled),t?.contextWindow!==void 0&&(r.contextWindow=t.contextWindow);let s=r.contextWindow??e;return r.triggerPercent=typeof t?.triggerPercent=="number"?t.triggerPercent:typeof n?.triggerPercent=="number"?n.triggerPercent:cc(s),t?.triggerTokens!==void 0&&(r.triggerTokens=t.triggerTokens),ur(r)}i(ui,"loadCompactionConfig");async function dc(e){try{let t=await ac(e,"utf-8");return JSON.parse(t)}catch{return null}}i(dc,"readConfigFile");var ne;(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"})(ne||(ne={}));var uc=[/\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 mi(e){return uc.some(t=>t.test(e))}i(mi,"matchesTransientMessage");function mc(e){if(e.name==="StreamIncompleteError"||e.message.includes("Stream incomplete"))return{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:2e3,shouldCleanup:!0};if(e.name==="AbortError")return{category:ne.USER_ABORT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0};if(e instanceof Dn||e.message.includes("tool_call_id")||e.message.includes("tool result"))return{category:ne.TOOL_CALL_ID,retryable:!0,maxRetries:1,retryDelay:1e3,shouldCleanup:!0};if(e instanceof et)return{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:e.retryAfter??6e4,shouldCleanup:!0};if(e instanceof tt)return{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:e.isTimeout?5e3:2e3,shouldCleanup:!0};if(e instanceof Je){let o=e.message.toLowerCase();return mi(o)?{category:ne.TRANSIENT,retryable:!0,maxRetries:3,retryDelay:2e3,shouldCleanup:!0}:{category:ne.PERMANENT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0}}let t=e.message.toLowerCase();return mi(t)?{category:ne.TRANSIENT,retryable:!0,maxRetries:2,retryDelay:2e3,shouldCleanup:!0}:{category:ne.PERMANENT,retryable:!1,maxRetries:0,retryDelay:0,shouldCleanup:!0}}i(mc,"classifyError");function Io(e,t){return new Promise((o,n)=>{if(t?.aborted){n(t.reason instanceof Error?t.reason:new DOMException("Request aborted","AbortError"));return}let r,s=t;if(!s){r=setTimeout(()=>{o()},e);return}let a=i(()=>{clearTimeout(r),s.removeEventListener("abort",a),n(s.reason instanceof Error?s.reason:new DOMException("Request aborted","AbortError"))},"onAbort");r=setTimeout(()=>{s.removeEventListener("abort",a),o()},e),s.addEventListener("abort",a,{once:!0})})}i(Io,"waitForRetryDelay");var pi={requestTimeoutMs:6e5,streamIdleTimeoutMs:Number(process.env.KODAX_STREAM_IDLE_TIMEOUT_MS)||0,chunkTimeoutMs:3e4,maxRetries:4,maxRetryDelayMs:6e4,enableNonStreamingFallback:!0};function Po(e,t,o){let n={...pi};if(t&&fi(n,t),o&&o.length>0){let r=o.find(s=>s.provider===e);if(r){let{provider:s,...a}=r;fi(n,a)}}return n}i(Po,"resolveResilienceConfig");function fi(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(fi,"mergePartialConfig");var fc=[/\brate.?limit\b/i,/\btoo many requests\b/i,/\b429\b/,/\bquota exceeded\b/i,/\bapi credits?\b/i,/请求过多/,/频率限制/,/限流/,/配额/],gi=[/\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,/服务繁忙/,/服务不可用/,/服务器错误/,/服务器内部错误/,/过载/,/容量不足/],Oo=[/\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,/网络错误/,/网络异常/,/连接错误/,/连接失败/,/连接被拒绝/,/连接被重置/,/连接被终止/,/连接已终止/,/连接中断/],Do=[/\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,/连接超时/,/请求超时/,/响应超时/],hi=[/\bstream incomplete\b/i,/\bstream interrupted\b/i],pc=[/\bstream stalled or delayed\b/i,/\b60s idle\b/i,/\bidle timeout\b/i],gc=[/\bhard timeout\b/i,/\b10 minutes?\b/i,/\bapi hard timeout\b/i],hc=[/reasoning_content/i,/thinking.{0,40}signature/i,/signature.{0,40}thinking/i],yc=[/\bcontext too long\b/i,/\bmaximum context\b/i,/\bcontext length\b/i,/\bcontext window\b/i,/\btoo many tokens\b/i],Tc=[/\b(401|403)\b/,/\b(auth|unauthorized|forbidden|api key|not configured|permission denied)\b/i];function Lt(e,t){let o=yi(e);if(e.name==="AbortError")return{errorClass:"user_abort",failureStage:t??"before_first_delta",retryable:!1,maxRetries:0,baseRetryDelay:0};if(e instanceof et||J(o,fc)){let n=e instanceof et?e.retryAfter:void 0;return{errorClass:"rate_limit",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:n??6e4}}return e instanceof Je&&J(o,gi)?{errorClass:"provider_overloaded",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:e.name==="StreamIncompleteError"||J(o,hi)?{errorClass:"incomplete_stream",failureStage:bc(o,t),retryable:!0,maxRetries:3,baseRetryDelay:2e3}:J(o,pc)?{errorClass:"stream_idle_timeout",failureStage:t??"mid_stream_text",retryable:!0,maxRetries:3,baseRetryDelay:3e3}:J(o,gc)?{errorClass:"request_timeout",failureStage:t??"before_first_delta",retryable:!0,maxRetries:2,baseRetryDelay:5e3}:e instanceof tt&&e.isTimeout||J(o,Do)?{errorClass:"request_timeout",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:e instanceof tt||J(o,Oo)?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:2e3}:e instanceof Je?J(o,[...Oo,...Do])?{errorClass:"connection_failure",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:2e3}:J(o,hc)?{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}:J(o,gi)?{errorClass:"provider_overloaded",failureStage:t??"before_first_delta",retryable:!0,maxRetries:3,baseRetryDelay:5e3}:J(o,[...Oo,...Do,...hi])?{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(Lt,"classifyResilienceError");function xc(e,t){if(t<=0)return!1;let o=yi(e);if(J(o,Tc))return!1;let n=Lt(e);return n.errorClass==="provider_overloaded"||n.errorClass==="reasoning_content_required"||J(o,yc)}i(xc,"isSessionRecoveryCandidateError");function J(e,t){return t.some(o=>o.test(e))}i(J,"matchesAny");function yi(e){let t=[],o=new Set,n=e,r=0,s=5;for(;n!=null&&r<s&&!o.has(n);){if(o.add(n),n instanceof Error){n.message&&t.push(n.message);let a=n.code;typeof a=="string"&&a.length>0&&t.push(a),n=n.cause}else if(typeof n=="string")t.push(n),n=void 0;else if(typeof n=="object"){let a=n.message;typeof a=="string"&&t.push(a);let c=n.code;typeof c=="string"&&t.push(c),n=n.cause}else break;r+=1}return t.join(" | ").toLowerCase()}i(yi,"collectErrorText");function bc(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(bc,"inferStageForStreamError");var vc=0;function Ti(){return`req_${Date.now()}_${++vc}`}i(Ti,"nextRequestId");var st=class{static{i(this,"StableBoundaryTracker")}state;hasReceivedFirstDelta=!1;currentToolInputId;constructor(){this.state=this.createInitialState()}beginRequest(t,o,n,r=1,s=!1){this.state={requestId:Ti(),provider:t,model:o,attempt:r,lastStableMessageIndex:n.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),n=t.slice(0,o),r=[...this.state.pendingToolCallIds],s=[...this.state.executedToolCallIds];return{messages:n,droppedToolCallIds:r,executedToolCallIds:s}}reset(){this.state=this.createInitialState(),this.hasReceivedFirstDelta=!1,this.currentToolInputId=void 0}createInitialState(){return{requestId:Ti(),provider:"",model:"",attempt:1,lastStableMessageIndex:0,executedToolCallIds:[],pendingToolCallIds:[],visibleLiveTextLength:0,visibleThinkingLength:0,fallbackUsed:!1,startedAt:Date.now()}}};function Ft(e,t,o){if(e.length===0)return[];let n=kc(e,o),r=Rc(n),s=t.filter(a=>!r.includes(a));return s.length>0?wc(n,s):n}i(Ft,"reconstructMessagesWithToolGuard");function kc(e,t){if(t.length===0)return[...e];let o=new Set(t);return e.map(n=>{if(typeof n.content=="string")return n;let r=n.content.filter(s=>s.type==="tool_use"?!o.has(s.id):s.type==="tool_result"?!o.has(s.tool_use_id):!0);return r.length===0?{...n,content:[{type:"text",text:""}]}:{...n,content:r}})}i(kc,"filterIncompleteToolCalls");function Rc(e){let t=[];for(let o of e)if(typeof o.content!="string")for(let n of o.content)n.type==="tool_result"&&t.push(n.tool_use_id);return t}i(Rc,"collectToolResultIds");function wc(e,t){let o=[...e],n=t.map(r=>({type:"tool_result",tool_use_id:r,content:"[Result preserved from previous attempt - tool already executed]"}));return n.length>0&&o.push({role:"user",content:n}),o}i(wc,"appendMissingToolResults");var Sc=["before_request_accepted","before_first_delta"],Ec=["stream_idle_timeout","chunk_timeout","incomplete_stream","connection_failure"],at=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,n){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(n>=this.config.maxRetries)return{action:"manual_continue",ladderStep:4,delayMs:0,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:!1,reasonCode:o.errorClass,failureStage:o.failureStage};let r=_c(o.baseRetryDelay,n,this.config.maxRetryDelayMs),s=Ac(t),a=s!==void 0?Math.min(s,this.config.maxRetryDelayMs):r,{action:c,ladderStep:u,shouldUseNonStreaming:l}=this.selectRecoveryStrategy(o,n);return{action:c,ladderStep:u,delayMs:a,maxDelayMs:this.config.maxRetryDelayMs,shouldUseNonStreaming:l,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 n=t.failureStage,r=t.errorClass;return Ec.includes(r)&&this.config.enableNonStreamingFallback&&!this.nonStreamingFallbackUsed&&o>=2?(this.nonStreamingFallbackUsed=!0,{action:"non_streaming_fallback",ladderStep:3,shouldUseNonStreaming:!0}):Sc.includes(n)?{action:"fresh_connection_retry",ladderStep:1,shouldUseNonStreaming:!1}:{action:"stable_boundary_retry",ladderStep:2,shouldUseNonStreaming:!1}}executeFreshConnectionRetry(t,o){let n=this.boundaryTracker.snapshot();return{messages:[...t],droppedToolCallIds:[],executedToolCallIds:[...n.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}executeStableBoundaryRetry(t,o){let n=this.boundaryTracker.recoverToStableBoundary(t);return{messages:Ft(n.messages,n.executedToolCallIds,n.droppedToolCallIds),droppedToolCallIds:n.droppedToolCallIds,executedToolCallIds:n.executedToolCallIds,fallbackUsed:this.nonStreamingFallbackUsed}}executeNonStreamingFallback(t,o){let n=this.boundaryTracker.recoverToStableBoundary(t);return{messages:Ft(n.messages,n.executedToolCallIds,n.droppedToolCallIds),droppedToolCallIds:n.droppedToolCallIds,executedToolCallIds:n.executedToolCallIds,fallbackUsed:!0}}executeManualContinue(t,o){let n=this.boundaryTracker.snapshot();return{messages:[...t],droppedToolCallIds:[...n.pendingToolCallIds],executedToolCallIds:[...n.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}executeSanitizeThinking(t,o){let n=this.boundaryTracker.snapshot();return{messages:Cc(t),droppedToolCallIds:[],executedToolCallIds:[...n.executedToolCallIds],fallbackUsed:this.nonStreamingFallbackUsed}}reset(){this.nonStreamingFallbackUsed=!1,this.thinkingSanitizationUsed=!1}};function Cc(e){return e.map(t=>{if(t.role!=="assistant"||typeof t.content=="string"||!Array.isArray(t.content))return t;let o=t.content.filter(n=>n.type!=="thinking"&&n.type!=="redacted_thinking");return o.length===0?{...t,content:[{type:"text",text:""}]}:{...t,content:o}})}i(Cc,"sanitizeThinkingBlocks");function _c(e,t,o){let n=e*Math.pow(2,t-1),r=Math.random()*1e3;return Math.min(n+r,o)}i(_c,"calculateRetryDelay");function Ac(e){if("retryAfter"in e&&typeof e.retryAfter=="number")return e.retryAfter*1e3}i(Ac,"extractServerRetryAfter");var Ut=process.env.KODAX_DEBUG_STREAM==="1"||process.env.KODAX_DEBUG_RESILIENCE==="1";function No(e,t){Ut&&P({source:"coding:resilience",level:"debug",message:"classify",detail:{rawError:e.message,errorClass:t.errorClass,failureStage:t.failureStage,retryable:t.retryable,maxRetries:t.maxRetries}})}i(No,"telemetryClassify");function Lo(e,t){Ut&&P({source:"coding:resilience",level:"debug",message:"decision",detail:{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(Lo,"telemetryDecision");function Fo(e){Ut&&P({source:"coding:resilience",level:"debug",message:"boundary",detail:{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(Fo,"telemetryBoundary");function Bt(e,t){Ut&&P({source:"coding:resilience",level:"debug",message:"recovery",detail:{action:e,droppedToolCallIds:t.droppedToolCallIds,executedToolCallIds:t.executedToolCallIds,fallbackUsed:t.fallbackUsed}})}i(Bt,"telemetryRecovery");function ct(e,t){if(!t||t.length===0)return e;let o=[{type:"text",text:e}];for(let n of t){if(n.kind!=="image")throw new yo("MODEL_INPUT_UNSUPPORTED",`${n.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:n.path,mediaType:n.mediaType})}return o}i(ct,"buildPromptMessageContent");function Uo(e){return e._truncated===!0||e._salvaged===!0&&zr(e.name)}i(Uo,"isUntrustedSalvage");function bi(e){let t=[];for(let o of e){if(Uo(o)){t.push(`${o.name}: incomplete input (salvaged from malformed/truncated JSON)`);continue}let n=Nt(o.name),r=o.input??{};for(let s of n)(r[s]===void 0||r[s]===null||r[s]==="")&&t.push(`${o.name}: missing '${s}'`)}return t}i(bi,"checkIncompleteToolCalls");function Te(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(Te,"isFiniteNonNegative");function vi(e){return!(!e||!Te(e.inputTokens)||!Te(e.outputTokens)||!Te(e.totalTokens)||e.totalTokens<e.inputTokens||e.totalTokens<e.outputTokens||e.cachedReadTokens!==void 0&&!Te(e.cachedReadTokens)||e.cachedWriteTokens!==void 0&&!Te(e.cachedWriteTokens)||e.thoughtTokens!==void 0&&!Te(e.thoughtTokens))}i(vi,"hasValidTokenUsage");function Ht(e){let t=C(e);return{currentTokens:t,baselineEstimatedTokens:t,source:"estimate"}}i(Ht,"createEstimatedContextTokenSnapshot");function Mc(e,t){let o=C(e);return{currentTokens:t.inputTokens,baselineEstimatedTokens:o,source:"api",usage:t}}i(Mc,"createApiContextTokenSnapshot");function ki(e,t){return vi(t)?{currentTokens:t.totalTokens,baselineEstimatedTokens:C(e),source:"api",usage:t}:Ht(e)}i(ki,"createCompletedTurnTokenSnapshot");function Bo(e,t){return vi(t)?Mc(e,t):Ht(e)}i(Bo,"createContextTokenSnapshot");function lt(e,t){let o=C(e);if(!t||!Te(t.currentTokens)||!Te(t.baselineEstimatedTokens))return o;let n=t.currentTokens+(o-t.baselineEstimatedTokens);return!Number.isFinite(n)||n<0?o:Math.round(n)}i(lt,"resolveContextTokenCount");function M(e,t){return{currentTokens:lt(e,t),baselineEstimatedTokens:C(e),source:t?.source??"estimate",usage:t?.usage}}i(M,"rebaseContextTokenSnapshot");function Ri(e,t){let o=C(e);return{currentTokens:o,baselineEstimatedTokens:o,source:t?.source??"estimate"}}i(Ri,"recomputeContextTokenSnapshot");function kf(e,t=400){return e.length<=t?e:`${e.slice(0,Math.max(0,t-3))}...`}i(kf,"truncateText");function wi(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(wi,"extractMessageText");function Ic(e){return e==="running"||e==="planned"}i(Ic,"isUnconvergedVerdict");function Pc(e){let t=e.trim();return t===""||t==="..."}i(Pc,"isPlaceholderOnlyAssistantText");function Oc(e){let t=wi(e);return Pc(t)?"":t}i(Oc,"extractFinalAssistantText");function Si(e){return e?e._source==="compaction-checkpoint"?!0:e.role==="system"&&typeof e.content=="string"&&e.content.startsWith(mr):!1}i(Si,"isCompactionCheckpointMessage");function Mf(e,t,o){if(!e.messages)return e;let n=Oc(e);if(Ic(e.managedTask?.verdict?.status)||e.interrupted&&!n)return e;let r=t.context?.inputArtifacts,s=e.artifactLedger??ko(e.messages),a=Dc(e.messages,o,n,r),c=e.contextTokenSnapshot?Ri(a,e.contextTokenSnapshot):void 0;return{...e,messages:a,artifactLedger:s,contextTokenSnapshot:c}}i(Mf,"reshapeToUserConversation");function Dc(e,t,o,n){let r=e,s=r[0];s?.role==="system"&&!Si(s)&&(r=r.slice(1)),r=$o(r);let c=!r.some(l=>l.role==="user"&&$t(l)===t);if(c){let l=r.some(f=>f.role==="user");r.some(f=>Si(f)&&(f.role==="user"||l))&&(c=!1)}c&&(r=[...r,{role:"user",content:ct(t,n)}]);let u=r[r.length-1];return u?.role==="assistant"&&typeof u.content=="string"&&u.content===o||(u?.role==="assistant"?r=[...r.slice(0,-1),{role:"assistant",content:o}]:r=[...r,{role:"assistant",content:o}]),[...r]}i(Dc,"preserveTranscriptForRoundExit");function $o(e){let t=e.length;for(;t>=2;){let o=e[t-2],n=e[t-1];if(o.role==="user"&&n.role==="assistant"&&Lc(o)){t-=2;continue}break}return e.slice(0,t)}i($o,"normalizeLoadedSessionMessages");var Nc=/^\s*You are the (Scout|Planner|Generator|Evaluator) role\b/;function Lc(e){if(e.role!=="user")return!1;let t=typeof e.content=="string"?e.content:Fc(e.content);return Nc.test(t)}i(Lc,"isRolePromptShapedUser");function Fc(e){let t=e[0];return t?.type==="text"&&typeof t.text=="string"?t.text:""}i(Fc,"extractLeadingTextBlock");function xi(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
3
3
  `)}i(xi,"extractPromptComparableText");function $t(e){if(!(!e||e.role!=="user"))return xi(e.content)}i($t,"extractComparableUserMessageText");async function Ei(e,t){if(e.session?.initialMessages&&e.session.initialMessages.length>0){let o=[...e.session.initialMessages],r=!(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:vo(o),errorMetadata:r?.errorMetadata,loadedExtensionState:e.session.initialExtensionState??r?.extensionState,loadedExtensionRecords:e.session.initialExtensionRecords??r?.extensionRecords}}if(e.session?.storage&&t){let o=await e.session.storage.load(t);if(o)return{messages:$o(o.messages),title:o.title,errorMetadata:o.errorMetadata,loadedExtensionState:o.extensionState,loadedExtensionRecords:o.extensionRecords}}return{messages:[],title:""}}i(Ei,"resolveInitialMessages");function Ci(e,t,o,n){let r=e[e.length-1];return $t(r)===t?n!==void 0&&r!==void 0&&r.turnId===void 0?[...e.slice(0,-1),{...r,turnId:n}]:e:[...e,{role:"user",content:ct(t,o),...n!==void 0?{turnId:n}:{},timestamp:new Date().toISOString()}]}i(Ci,"appendPromptIfNotDuplicate");async function _i(e){let t=e.session?.id;if(t)return t;if(!(e.session?.autoResume||e.session?.resume))return;let n=e.session?.storage;return n?.list?(await n.list(e.context?.gitRoot??void 0,{limit:1e3})).find(s=>s.msgCount>0)?.id:void 0}i(_i,"discoverAutoResumeSessionId");function Uc(e){return Bn(e)?"builtin":Hn(e)?"runtime":$n(e)?"custom":"unknown"}i(Uc,"detectProviderSourceKind");function Bc(e,t){return e?e.getCapabilityProfile():t??{transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none"}}i(Bc,"resolveCapabilityProfile");function $c(e,t,o){return e?e.getReasoningCapability(t):o??"unknown"}i($c,"resolveReasoningCapability");function Hc(e){let t=Un(Bc(e.provider,e.capabilityProfile));return{provider:e.providerName,model:e.model,sourceKind:Uc(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:$c(e.provider,e.model,e.reasoningCapability)}}i(Hc,"buildProviderCapabilitySnapshot");function qc(e){return!!e?.inputArtifacts?.some(t=>t.kind==="image")}i(qc,"detectMultimodalContext");function Kc(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(Kc,"inferPromptPolicyHints");function He(...e){return e.find(t=>t!==void 0)}i(He,"pickBoolean");function Wc(e){let t=e.context??e.options?.context,o=Kc(e.prompt);return{longRunning:He(e.hints?.longRunning,t?.providerPolicyHints?.longRunning,o.longRunning),harnessProfile:e.hints?.harnessProfile??t?.providerPolicyHints?.harnessProfile,evidenceHeavy:He(e.hints?.evidenceHeavy,t?.providerPolicyHints?.evidenceHeavy,o.evidenceHeavy),multimodal:He(e.hints?.multimodal,t?.providerPolicyHints?.multimodal,qc(t),o.multimodal),capabilityRuntime:He(e.hints?.capabilityRuntime,t?.providerPolicyHints?.capabilityRuntime,o.capabilityRuntime),mcpRequired:He(e.hints?.mcpRequired,t?.providerPolicyHints?.mcpRequired,o.mcpRequired),brainstorm:He(e.hints?.brainstorm,t?.providerPolicyHints?.brainstorm,o.brainstorm),workIntent:e.hints?.workIntent??t?.providerPolicyHints?.workIntent??o.workIntent}}i(Wc,"resolveProviderPolicyHints");function xe(e,t){e.some(o=>o.code===t.code)||e.push(t)}i(xe,"pushIssue");function jc(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 n of t)o.add(n.detail);return Array.from(o)}i(jc,"buildRoutingNotes");function Gc(e){return e.length===0?"No provider-policy constraints detected.":e.map(t=>`${t.severity.toUpperCase()}: ${t.summary}`).join(" | ")}i(Gc,"summarizeIssues");function Ai(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(Ai,"buildProviderPolicyPromptNotes");function qt(e){let t=Hc({providerName:e.providerName,model:e.model,provider:e.provider,capabilityProfile:e.capabilityProfile,reasoningCapability:e.reasoningCapability}),o=Wc(e),n=[];return o.multimodal&&t.multimodalSupport==="none"&&xe(n,{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"?xe(n,{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"&&xe(n,{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"?xe(n,{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")&&xe(n,{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"&&xe(n,{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"&&xe(n,{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")&&xe(n,{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:n.some(a=>a.severity==="block")?"block":n.length>0?"warn":"allow",snapshot:t,issues:n,routingNotes:jc(t,n),summary:Gc(n)}}i(qt,"evaluateProviderPolicy");var Xc="off",zc=.4,Yc=.42,Vc=.45,Mi=.5,Qc=.06,Zc=.04,Jc=.86,el=.75,tl=.49,ol=.5;var nl=["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"],rl=["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"],il=["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"],Ho={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"]},sl=2,al=4,cl=6,ll=10,qo=1200;var dl=30,$i=4e3;function Hi(e){return e.reasoningMode?e.reasoningMode:e.thinking===!0?"auto":e.thinking===!1?"off":Xc}i(Hi,"resolveReasoningMode");function ul(e){return Ln(e)}i(ul,"reasoningModeToDepth");var Ii={none:0,minimal:0,auto:1,low:2,medium:3,high:4,xhigh:5,max:6};function Pi(e){return Ii[e]??Ii.medium}i(Pi,"effortRank");function ml(e,t){let o=Pi(e),n=Pi(t);return o<n?-1:o>n?1:0}i(ml,"compareEfforts");function Oi(e,t){return ml(e,t)>0?t:e}i(Oi,"clampEffort");function jf(e,t){if(e==="none")return"none";if(!t)return e;let o=t.default?_e(t.default):e,n=t.max?Oi(o,_e(t.max)):o;return Oi(n,e)}i(jf,"resolveRoleEffort");var fl=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"]),pl=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 gl(e,t){if(!e)return{category:null,matched:null};let o=e.toLowerCase();if(t)for(let n of fl){let r=n.toLowerCase();if(o.includes(r)||e.includes(n))return{category:"doubt",matched:n}}for(let n of pl){let r=n.toLowerCase();if(o.includes(r)||e.includes(n))return{category:"deepen",matched:n}}return{category:null,matched:null}}i(gl,"detectFollowupSignal");function hl(e){switch(e){case"auto":return"low";case"low":return"medium";case"medium":return"high";default:return e}}i(hl,"escalateEffort");function yl(e,t,o){let n=gl(t,o);if(n.category===null)return{effective:e,escalated:!1,signal:n};let r=hl(e);return r===e?{effective:e,escalated:!1,signal:n}:{effective:r,escalated:!0,signal:n}}i(yl,"applyFollowupEscalation");function qi(e,t){let o=e.effort??_e(Hi(e)),r=(e.session?.initialMessages??[]).some(a=>a?.role==="assistant"),s=yl(o,t,r);return s.escalated?{options:{...e,effort:s.effective},escalation:s}:{options:e,escalation:s}}i(qi,"applyFollowupEscalationToOptions");var Tl={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 xl(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}i(xl,"escapeRegExp");function bl(e){return/^[a-z0-9][a-z0-9 _-]*$/i.test(e)}i(bl,"hasAsciiWordBoundaries");function F(e,t){if(!t)return!1;let o=t.trim();return o?bl(o)?new RegExp(`(^|[^a-z0-9])${xl(o)}([^a-z0-9]|$)`,"i").test(e):e.includes(t):!1}i(F,"textHasKeyword");function vl(e,t){let o=0;for(let n of t)n&&F(e,n)&&(o+=n.length>=6||/[^\u0000-\u007f]/.test(n)?2:1);return o}i(vl,"scoreTaskTypeKeywords");var kl=/^(?:\s|[!,.?,。!?])*?(?:hi|hello|hey|yo|你好|嗨|哈喽|早上好|下午好|晚上好)(?:\s|[!,.?,。!?])*$/i,Rl=/\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 wl=/\b(review|code review|audit|pr|pull request|merge blocker|look at the changes|changed files)\b/i;var Sl=/\b(plan|design|architecture|proposal|strategy|roadmap)\b/i;var El=/\b(debug|investigate|root cause|why is|why does|failing|failure|runtime error|stack trace|traceback)\b/i;var Cl=/\b(implement|add|change|modify|update|create|write|fix|refactor|rewrite|replace)\b/i;var _l=/\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 Al=/\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,Ml=/(?: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,Il=/\b(?:implementation|source code|code comments?|function|class|component|bug|script|tests?|ui)\b/i,Pl=/\u4ee3\u7801\u6ce8\u91ca|\u5b9e\u73b0|\u51fd\u6570|\u7c7b|\u7ec4\u4ef6|bug|\u811a\u672c|\u6d4b\u8bd5|\u754c\u9762/u,Ol=/\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,Dl=/\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,Nl=/\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 Ll=/\b(code|implementation|function|class|component|module|endpoint|service|repo|repository|file|files|test|bug|feature|script|api|ui|backend|frontend)\b/i;var Fl=/\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 Ul=/^(?:\s|[!,.?,。!]*)?(?:你好|哈喽|早上好|下午好|晚上好)(?:\s|[!,.?,。!]*)*$/u,Bl=/在哪个文件|哪个文件|在哪定义|定义在|哪个函数|哪个组件|文件位置|在哪里/u,$l=/审查|评审|review一下|看下改动|代码改动|审阅/u,Hl=/计划|设计|架构|方案|策略|路线图/u,ql=/排查|定位问题|根因|为什么|报错|错误|异常|失败/u,Kl=/实现|新增|修改|创建|写一个|修复|重构|改一下|替换/u,Wl=/文档|说明文档|设计文档|需求文档|PRD|ADR|HLD|DD|CHANGELOG|README|功能清单|已知问题/u,jl=/再检查|再审查|双重检查|第二遍|第二轮|二次审查|交叉检查|独立验证|独立审查|更强审查/u,Di=/代码|实现|函数|类|组件|模块|接口|服务|仓库|文件|测试|bug|功能|脚本|API|界面|后端|前端/u,Gl=/部署|重启|重启服务|迁移数据库|运行迁移|初始化数据库|安装依赖|升级依赖|杀进程|启动服务|停止服务|应用terraform/u,Xl=/代码|实现|函数|类|组件|模块|接口|bug|功能|前端|后端|脚本/u,Ni=/实现|新增|修改|更新|创建|编写|修复|重构|补丁|重写|替换|编辑|重命名/u;function zl(e){return kl.test(e)||Ul.test(e)}i(zl,"isGreetingOnlyPrompt");function Ko(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(zl(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=Rl.test(t)||Bl.test(t),n=wl.test(t)||$l.test(t),r=Sl.test(t)||Hl.test(t),s=El.test(t)||ql.test(t),a=Cl.test(t)||Kl.test(t);return n?{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."}:r?{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(Ko,"inferIntentGate");function Kt(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(Kt,"inferTaskFamilyFromPrimaryTask");function Ki(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(Ki,"defaultExecutionPatternForFamily");function Yl(e,t){let o=Ko(e),n=t.taskFamily??Kt(t.primaryTask),r=t.actionability??(n==="conversation"?"non_actionable":n==="ambiguous"?o.actionability:"actionable"),s=t.executionPattern??Ki(n);return{taskFamily:n,actionability:r,executionPattern:s}}i(Yl,"deriveIntentFields");function Wi(e,t){let o=` ${e.toLowerCase()} `,n=/[\u3400-\u9fff]/u.test(e),r=_l.test(e)||n&&Wl.test(e),s=Al.test(e)||n&&Ml.test(e),a=Il.test(e)||n&&Pl.test(e),c=Ol.test(e)||n&&Dl.test(e),u=Fl.test(e)||n&&Gl.test(e),l=Ll.test(o)||n&&Di.test(e),m=/\b(code|implementation|function|class|component|module|endpoint|service|bug|script|api|ui|backend|frontend)\b/i.test(o)||n&&Di.test(e),f=/\b(implement|add|modify|update|create|write|fix|refactor|rewrite|replace|edit|patch|rename)\b/i.test(o)||n&&Ni.test(e),y=n&&Xl.test(e),E=n&&Ni.test(e),T=/\b(monorepo|repo|repository|package|packages|architecture|migration)\b/i.test(o),d=/\b(refactor|rewrite|reorganize|migrate|split|merge|consolidate|rename)\b/i.test(o),w=/\b(code|implementation|function|class|component|module|endpoint|service|bug|script|api|ui|backend|frontend)\b/i.test(o)||y,ee=/\b(implement|add|modify|update|create|write|fix|refactor|rewrite|replace|edit|patch|rename)\b/i.test(o)||E,B=w&&!s||a,ue=T&&!s,g=r&&!u&&c;if(t.primaryTask==="review"&&!ee&&!u)return r&&(g||!B)?"docs-only":"read-only";let V=t.primaryTask==="edit"||t.primaryTask==="refactor"||t.taskFamily==="implementation"||t.primaryTask==="bugfix"&&ee||ee&&B||d&&ue;return g&&t.primaryTask!=="refactor"||r&&!u&&!B&&t.primaryTask!=="refactor"?"docs-only":u?"system":V?"code":"read-only"}i(Wi,"deriveMutationSurface");function Vl(e,t){let o=/[\u3400-\u9fff]/u.test(e);return Nl.test(e)||o&&jl.test(e)||t.recommendedMode==="strict-audit"?"explicit-check":"default"}i(Vl,"deriveAssuranceIntent");function ji(e){let t=` ${e.toLowerCase()} `,n=[...Object.entries(Tl).map(([c,u])=>({task:c,score:vl(t,u)}))].sort((c,u)=>u.score-c.score),r=n[0],s=n[1];if(!r||r.score===0)return{task:"unknown",confidence:zc,reason:"Fallback task inference did not find enough strong signals, so it kept the task as unknown."};if(s&&r.score===s.score){let c=Ql(e,r.task,s.task);return c?{task:c,confidence:Mi,reason:`Fallback task inference preferred "${c}" because the request used an explicit directive even though multiple task signals were present.`}:{task:"unknown",confidence:Yc,reason:`Fallback task inference saw competing signals for "${r.task}" and "${s.task}", so it kept the task as unknown.`}}if(r.task==="qa"&&r.score<4)return{task:"unknown",confidence:Vc,reason:"Fallback task inference saw a weak explanation-style signal, but not enough evidence to disable reasoning."};let a=Math.min(Jc,Mi+r.score*Qc+Math.max(0,(r.score-(s?.score??0))*Zc));return{task:r.task,confidence:a,reason:`Fallback task inference selected "${r.task}" from textual signals in the request.`}}i(ji,"inferTaskSignal");function Ql(e,t,o){let n=` ${e.toLowerCase()} `,r=F(n,"review")||F(n,"code review")||F(n,"merge blocker")||F(n,"\u5BA1\u67E5")||F(n,"\u8BC4\u5BA1"),s=F(n,"fix")||F(n,"bug")||F(n,"\u4FEE\u590D")||F(n,"\u62A5\u9519"),a=F(n,"plan")||F(n,"design")||F(n,"\u65B9\u6848")||F(n,"\u8BA1\u5212");return(t==="review"||o==="review")&&r&&!s?"review":(t==="bugfix"||o==="bugfix")&&s&&!r?"bugfix":(t==="plan"||o==="plan")&&a?"plan":null}i(Ql,"resolveTiedTask");function Gf(e){return ji(e).task}i(Gf,"inferTaskType");function Wt(e){switch(e){case"simple":return 0;case"moderate":return 1;case"complex":return 2;case"systemic":return 3;default:return 0}}i(Wt,"complexityRank");function Zl(e,t){return t&&Wt(t)>Wt(e)?t:e}i(Zl,"maxComplexity");function Jl(e,t,o){let n=Ko(e);if(!n.requiresRoutingHeuristics){let a=n.primaryTask;return Bi(e,{primaryTask:a,confidence:n.actionability==="non_actionable"?.98:.9,riskLevel:"low",recommendedMode:Fi(a),recommendedThinkingDepth:Li(a),complexity:"simple",workIntent:"new",requiresBrainstorm:!1,harnessProfile:"H0_DIRECT",taskFamily:n.taskFamily,actionability:n.actionability,executionPattern:n.executionPattern,routingSource:"fallback",routingAttempts:1,reason:n.reason},t,o)}let r=ji(e),s=r.task;return Bi(e,{primaryTask:s,taskFamily:Kt(s),actionability:s==="unknown"?"ambiguous":"actionable",executionPattern:Ki(Kt(s)),confidence:r.confidence,riskLevel:Yi(e,s),recommendedMode:Fi(s),recommendedThinkingDepth:Li(s),complexity:"moderate",workIntent:"new",requiresBrainstorm:!1,harnessProfile:"H0_DIRECT",routingSource:"fallback",routingAttempts:1,reason:r.reason},t,o)}i(Jl,"buildFallbackRoutingDecision");function Gi(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(Gi,"buildProviderPolicyHintsForDecision");async function Xi(e,t,o,n){let r=Hi(e),s=Ko(t),a=qt({providerName:o.name,model:e.modelOverride??e.model,provider:o,prompt:t,options:e,reasoningMode:r}),c=Jl(t,a,n),u=e.effort??_e(r),l=r==="off"?"off":r==="auto"?c.recommendedThinkingDepth:ul(r),m={...c,recommendedThinkingDepth:l,routingNotes:[...c.routingNotes??[],s.reason,"Heuristic routing only \u2014 LLM router skipped (FEATURE_061 Phase 1; FEATURE_193 retired post-routing calibration)."]};return{effort:u,promptOverlay:"",decision:m,providerPolicy:a}}i(Xi,"createReasoningPlan");function zi(e,t=.5){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):t}i(zi,"clampUnitInterval");function ed(e,t){let o=` ${e.toLowerCase()} `;return il.some(n=>F(o,n))?"overwrite":rl.some(n=>F(o,n))?"append":t}i(ed,"inferWorkIntent");function td(e,t){let o=` ${e.toLowerCase()} `,n=0;for(let r of Ho.moderate)F(o,r)&&(n+=1);for(let r of Ho.complex)F(o,r)&&(n+=2);for(let r of Ho.systemic)F(o,r)&&(n+=3);return(t.primaryTask==="refactor"||t.primaryTask==="plan")&&(n+=2),t.riskLevel==="high"&&(n+=2),t.workIntent==="overwrite"&&(n+=1),n>=cl?"systemic":n>=al?"complex":n>=sl?"moderate":"simple"}i(td,"inferComplexity");function od(e,t,o){let n=` ${e.toLowerCase()} `;return!!(nl.some(r=>F(n,r))||t.primaryTask==="plan"||t.primaryTask==="unknown"&&t.confidence<.7||o==="systemic"||t.workIntent==="overwrite"&&(t.primaryTask==="refactor"||t.riskLevel==="high"))}i(od,"inferRequiresBrainstorm");function nd(e,t){let o=t.taskFamily??Kt(t.primaryTask),n=Wi(e,{primaryTask:t.primaryTask,taskFamily:o}),r=[];return(t.complexity==="complex"||t.complexity==="systemic")&&r.push(`Complexity hint: ${t.complexity}. Assess whether the recommended harness fits the task scope.`),t.needsIndependentQA&&r.push("Independent QA was inferred from prompt signals. Verify whether explicit verification artifacts are needed before declaring the task done."),t.requiresBrainstorm&&r.push("Brainstorm/planning signal detected. Judge whether to plan-first via todo_update before executing."),n==="system"&&(t.riskLevel==="high"||t.workIntent==="overwrite")&&r.push("High-risk system mutation detected. Proceed with caution; consider checkpointing intermediate state."),{harnessProfile:"H0_DIRECT",upgradeCeiling:"H0_DIRECT",notes:r}}i(nd,"selectHarnessProfile");function Li(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(Li,"getDefaultDepthForTask");function Fi(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(Fi,"getExecutionModeForTask");function Yi(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(Yi,"getRiskLevel");function rd(e,t,o){let n=.9,r=` ${e.toLowerCase()} `;return t.primaryTask==="review"?(n-=.12,t.reviewScale==="large"?n-=.16:t.reviewScale==="massive"&&(n-=.28)):t.primaryTask==="bugfix"?n-=.08:t.primaryTask==="plan"&&(n-=.24),t.riskLevel==="medium"?n-=.12:t.riskLevel==="high"&&(n-=.26),t.complexity==="moderate"?n-=.12:t.complexity==="complex"?n-=.28:t.complexity==="systemic"&&(n-=.42),t.requiresBrainstorm&&(n-=.18),t.workIntent==="overwrite"&&(n-=.08),/\b(strict review|must[- ]fix|independently verify|browser test|playwright|e2e|frontend verify)\b/.test(r)&&(n-=.2),o&&(o.changedFileCount>=3&&(n-=.12),o.changedLineCount>=qo&&(n-=.14),o.changedLineCount>=$i&&(n-=.14),o.touchedModuleCount>=2&&(n-=.16),(o.impactedModuleCount??0)>=2&&(n-=.14),o.crossModule&&(n-=.2),o.lowConfidence&&(n-=.08)),zi(n,.5)}i(rd,"computeSoloBoundaryConfidence");function id(e,t,o){let n=` ${e.toLowerCase()} `;return!!(/\b(must[- ]fix|strict review|audit|independently verify|browser test|playwright|e2e|console errors?|api check|db check)\b/.test(n)||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>=qo))}i(id,"computeNeedsIndependentQA");function sd(e,t,o,n){let r=e.recommendedMode,s=e.recommendedThinkingDepth,a=[];return n?(n.suggestedComplexity&&Wt(n.suggestedComplexity)>Wt(t)&&a.push(`Repository intelligence elevated task complexity to ${n.suggestedComplexity} (changedFiles=${n.changedFileCount}, touchedModules=${n.touchedModuleCount}, impactedModules=${n.impactedModuleCount??0}).`),n.crossModule&&a.push("Repository intelligence indicates cross-module impact; keep evidence and merge boundaries explicit."),n.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."),n.investigationBias&&(e.primaryTask==="review"||e.primaryTask==="bugfix")&&r!=="investigation"?(r="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.")):n.plannerBias&&e.primaryTask!=="review"&&e.primaryTask!=="bugfix"&&r==="implementation"&&(o==="complex"||o==="systemic")&&(r="planning",(s==="off"||s==="low")&&(s="medium"),a.push("Repository intelligence shifted execution toward planning because the task spans multiple modules or dependencies.")),{recommendedMode:r,recommendedThinkingDepth:s,repoNotes:a}):{recommendedMode:r,recommendedThinkingDepth:s,repoNotes:a}}i(sd,"applyRepoSignalsToDecision");function Ui(e,t){let o=t.exec(e);if(!o?.[1])return;let n=o[1].replace(/,/g,"").toLowerCase(),r=n.endsWith("k")?1e3:1,s=n.endsWith("k")?n.slice(0,-1):n,a=Number.parseFloat(s);if(!(!Number.isFinite(a)||a<=0))return Math.round(a*r)}i(Ui,"parsePromptInteger");function ad(e){let t=Ui(e,/(?:^|[\s(,])(\d[\d,]*(?:\.\d+)?k?)\s*(?:changed\s+)?files?\b/i),o=Ui(e,/(?:^|[\s(,])(\d[\d,]*(?:\.\d+)?k?)\s*(?:changed\s+)?lines?\b/i),n;return(t??0)>=dl||(o??0)>=$i?n="massive":((t??0)>=ll||(o??0)>=qo)&&(n="large"),{changedFileCount:t,changedLineCount:o,reviewScale:n}}i(ad,"inferPromptReviewScale");function cd(e,t){return e?.reviewScale?e.reviewScale:ad(t??"").reviewScale}i(cd,"deriveReviewScaleFromSignals");function Bi(e,t,o,n){let r=t,s=Yl(e,t),a=s.actionability==="actionable"&&s.taskFamily!=="conversation"&&s.taskFamily!=="lookup";t.primaryTask==="unknown"&&s.taskFamily==="ambiguous"&&(r={...t,recommendedMode:"implementation",recommendedThinkingDepth:"medium",reason:`${t.reason} Conservative fallback keeps balanced reasoning for ambiguous tasks.`}),r.primaryTask==="qa"&&r.confidence<el&&(r={...r,primaryTask:"unknown",confidence:Math.min(r.confidence,tl),riskLevel:Yi(e,"unknown"),recommendedMode:"implementation",recommendedThinkingDepth:"medium",reason:`${r.reason} Low-confidence QA routing was downgraded to unknown so reasoning stays available.`}),r.confidence<ol&&r.recommendedThinkingDepth==="off"&&(r={...r,primaryTask:"unknown",recommendedMode:"implementation",recommendedThinkingDepth:"medium",reason:`${r.reason} Low-confidence off-mode routing was upgraded to balanced reasoning for safety.`});let c=ed(e,r.workIntent),u=a?n?.repoSignals:void 0,l=td(e,{...r,workIntent:c}),m=a?Zl(l,u?.suggestedComplexity):l,f=t.reviewScale??cd(u,e),y=Wi(e,{primaryTask:r.primaryTask,taskFamily:s.taskFamily}),E=Vl(e,r),T="H0_DIRECT",d=od(e,{...r,workIntent:c,complexity:m,reviewScale:f,mutationSurface:y,assuranceIntent:E,topologyCeiling:T},m)||!!(u?.plannerBias&&(m==="complex"||m==="systemic")),w=zi(t.soloBoundaryConfidence??rd(e,{primaryTask:r.primaryTask,complexity:m,riskLevel:r.riskLevel,requiresBrainstorm:d,workIntent:c,reviewScale:f},u),.5),ee=t.needsIndependentQA??id(e,{primaryTask:r.primaryTask,complexity:m,riskLevel:r.riskLevel,requiresBrainstorm:d,reviewScale:f},u),B=y==="read-only"||y==="docs-only"?E==="explicit-check":ee,ue=nd(e,{...r,workIntent:c,complexity:m,requiresBrainstorm:d,reviewScale:f,soloBoundaryConfidence:w,needsIndependentQA:B,mutationSurface:y,assuranceIntent:E,topologyCeiling:T}),{recommendedMode:g,recommendedThinkingDepth:V,repoNotes:ie}=sd({...r,taskFamily:s.taskFamily,actionability:s.actionability,executionPattern:s.executionPattern},l,m,u),Q=g,_=V,N="direct";return s.taskFamily==="conversation"?(Q="conversation",_="off"):s.taskFamily==="lookup"&&(Q="lookup",_=V==="high"?"medium":V),{...r,taskFamily:s.taskFamily,actionability:s.actionability,executionPattern:N,mutationSurface:y,assuranceIntent:E,recommendedMode:Q,recommendedThinkingDepth:_,workIntent:c,complexity:m,requiresBrainstorm:d,topologyCeiling:T,reviewScale:f,soloBoundaryConfidence:w,needsIndependentQA:B,harnessProfile:ue.harnessProfile,upgradeCeiling:ue.upgradeCeiling,routingSource:r.routingSource??"fallback",routingAttempts:r.routingAttempts??1,routingNotes:[...r.routingNotes??[],...ue.notes,...ie,...a?[]:["Intent gate ignored repository scaling signals for this request."]]}}i(Bi,"stabilizeRoutingDecision");function jt(e,t){return Buffer.byteLength(JSON.stringify({systemPrompt:t,messages:e}),"utf8")}i(jt,"estimateProviderPayloadBytes");function Gt(e){return e<16*1024?"small":e<64*1024?"medium":e<192*1024?"large":"xlarge"}i(Gt,"bucketProviderPayloadSize");function dt(e){let t=Qn.exec(e);return t?[t[1].toUpperCase(),t[2]??""]:["",""]}i(dt,"checkPromiseSignal");function ld(){return process.env.KODAX_DEBUG_STREAM==="1"||process.env.KODAX_DEBUG_RESILIENCE==="1"}i(ld,"shouldDebugResilience");function O(e,t){ld()&&P({source:"coding:resilience",level:"debug",message:e,detail:t})}i(O,"emitResilienceDebug");import{randomUUID as Vi}from"node:crypto";var es=Symbol("KodaXLiveTurnAttributed"),Qi=Symbol("KodaXLiveTurnBaseEvents"),Zi=16,Ji=new Map,Oe=new Map;function ts(e){let t=e.turnId??`turn_${Vi().replace(/-/g,"").slice(0,Zi)}`,o=e.deliveryId??`delivery_${Vi().replace(/-/g,"").slice(0,Zi)}`,n=e.contextId??e.sessionId,r=e.contextKind??"root";return Oe.has(n)||Oe.set(n,0),{sessionId:e.sessionId,turnId:t,contextId:n,contextKind:r,parentContextId:e.parentContextId,agentId:e.agentId,deliveryId:o,deliveryKind:e.deliveryKind??"initial",promptId:e.promptId,nextMeta(){let s=(Ji.get(e.sessionId)??0)+1;return Ji.set(e.sessionId,s),{sessionId:e.sessionId,seq:s,turnId:t,deliveryId:o,contextId:n,contextKind:r,...e.parentContextId!==void 0?{parentContextId:e.parentContextId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},contextRevision:Oe.get(n)??0,timestamp:new Date().toISOString()}},advanceContextRevision(){let s=(Oe.get(n)??0)+1;return Oe.set(n,s),s}}}i(ts,"createLiveTurnScope");function dd(e){return e[es]===!0}i(dd,"isAttributedEvents");function Wo(e){return"current"in e?e.current:e}i(Wo,"resolveLiveTurnScope");function I(e,t){let o=t?.contextId===void 0||t.contextKind===void 0||t.contextRevision===void 0?{}:{contextId:t.contextId,contextKind:t.contextKind,parentContextId:t.parentContextId,agentId:t.agentId,contextRevision:t.contextRevision};return{...t??{},...Wo(e).nextMeta(),...o}}i(I,"withActivityMeta");function j(e,t){let o=t,n=o.contextId===void 0||o.contextKind===void 0||o.contextRevision===void 0?{}:{contextId:o.contextId,contextKind:o.contextKind,parentContextId:o.parentContextId,agentId:o.agentId,contextRevision:o.contextRevision};return{...t,...Wo(e).nextMeta(),...n}}i(j,"withLiveMeta");function os(e,t){let o=dd(e)?e[Qi]:e,n={...o,onSessionStart:i(r=>{o.onSessionStart?.(j(t,r))},"onSessionStart"),onTextDelta:i((r,s)=>{o.onTextDelta?.(r,I(t,s))},"onTextDelta"),onThinkingDelta:i((r,s)=>{o.onThinkingDelta?.(r,I(t,s))},"onThinkingDelta"),onThinkingEnd:i((r,s)=>{o.onThinkingEnd?.(r,I(t,s))},"onThinkingEnd"),onToolUseStart:i((r,s)=>{o.onToolUseStart?.(r,I(t,s))},"onToolUseStart"),onToolInputDelta:i((r,s,a)=>{o.onToolInputDelta?.(r,s,I(t,a))},"onToolInputDelta"),onToolProgress:i((r,s)=>{o.onToolProgress?.(r,I(t,s))},"onToolProgress"),onToolResult:i((r,s)=>{o.onToolResult?.(r,I(t,s))},"onToolResult"),onChildActivityEnd:i(r=>{o.onChildActivityEnd?.(I(t,r))},"onChildActivityEnd"),onStreamEnd:i(r=>{o.onStreamEnd?.(I(t,r))},"onStreamEnd"),onIterationStart:i((r,s,a)=>{o.onIterationStart?.(r,s,I(t,a))},"onIterationStart"),onIterationEnd:i(r=>{o.onIterationEnd?.(j(t,r))},"onIterationEnd"),onCompactStart:i(r=>{o.onCompactStart?.(I(t,r))},"onCompactStart"),onCompact:i((r,s)=>{o.onCompact?.(r,I(t,s))},"onCompact"),onCompactStats:i(r=>{o.onCompactStats?.(j(t,r))},"onCompactStats"),onCompactedMessages:i(async(r,s,a)=>{let c=Wo(t),u=c.advanceContextRevision();try{await o.onCompactedMessages?.(r,s,I(t,a))}catch(l){throw Oe.get(c.contextId)===u&&Oe.set(c.contextId,u-1),l}},"onCompactedMessages"),onContextCompactionFinished:i(r=>{o.onContextCompactionFinished?.(j(t,r))},"onContextCompactionFinished"),onCompactEnd:i(r=>{o.onCompactEnd?.(I(t,r))},"onCompactEnd"),onMidTurnUserMessages:i((r,s)=>{o.onMidTurnUserMessages?.(r,I(t,s))},"onMidTurnUserMessages"),onRetry:i((r,s,a,c)=>{o.onRetry?.(r,s,a,I(t,c))},"onRetry"),onProviderRateLimit:i((r,s,a,c)=>{o.onProviderRateLimit?.(r,s,a,I(t,c))},"onProviderRateLimit"),onRetryAfter:i((r,s)=>{o.onRetryAfter?.(r,I(t,s))},"onRetryAfter"),onProviderRecovery:i((r,s)=>{o.onProviderRecovery?.(r,I(t,s))},"onProviderRecovery"),onReasoningEffortRejected:i(r=>{o.onReasoningEffortRejected?.(j(t,r))},"onReasoningEffortRejected"),onRepoIntelligenceTrace:i(r=>{o.onRepoIntelligenceTrace?.(j(t,r))},"onRepoIntelligenceTrace"),onContextBudgetSnapshot:i(r=>{o.onContextBudgetSnapshot?.(j(t,r))},"onContextBudgetSnapshot"),onToolExposurePlanned:i(r=>{o.onToolExposurePlanned?.(j(t,r))},"onToolExposurePlanned"),onContextCompactionSkipped:i(r=>{o.onContextCompactionSkipped?.(j(t,r))},"onContextCompactionSkipped"),onSidecarMessage:i(r=>{o.onSidecarMessage?.(j(t,r))},"onSidecarMessage"),onTodoUpdate:i((r,s)=>{o.onTodoUpdate?.(r,I(t,s))},"onTodoUpdate"),onTodoDriftWarning:i(r=>{o.onTodoDriftWarning?.(j(t,r))},"onTodoDriftWarning"),onManagedTaskStatus:i(r=>{o.onManagedTaskStatus?.(j(t,r))},"onManagedTaskStatus"),onEffectiveConfig:i(r=>{o.onEffectiveConfig?.(j(t,r))},"onEffectiveConfig"),onWorkflowProcessEvent:i(r=>{o.onWorkflowProcessEvent?.(j(t,r))},"onWorkflowProcessEvent"),onWorkflowAgentDigest:i(r=>{o.onWorkflowAgentDigest?.(j(t,r))},"onWorkflowAgentDigest"),onScoutSuspiciousCompletion:i(r=>{o.onScoutSuspiciousCompletion?.(j(t,r))},"onScoutSuspiciousCompletion"),onComplete:i(r=>{o.onComplete?.(I(t,r))},"onComplete"),onError:i((r,s)=>{o.onError?.(r,I(t,s))},"onError")};return Object.defineProperty(n,es,{value:!0,enumerable:!1}),Object.defineProperty(n,Qi,{value:o,enumerable:!1}),n}i(os,"withLiveTurnAttribution");function ns(e,t){let o={...t.nextMeta(),deliveryKind:t.deliveryKind,...t.promptId!==void 0?{promptId:t.promptId}:{}};e.onTurnStarted?.(o)}i(ns,"emitTurnStarted");function rs(e,t,o){e.onTurnCompleted?.({...t.nextMeta(),status:o})}i(rs,"emitTurnCompleted");function is(e,t,o){let n={...t.nextMeta(),error:{name:o.name,message:o.message,...o.stack!==void 0?{stack:o.stack}:{}}};e.onTurnFailed?.(n)}i(is,"emitTurnFailed");var ud=new Set(["todo_update","todo_list","todo_create","todo_get"]);function re(e){return!ei(e)&&!ud.has(e)}i(re,"isVisibleToolName");function qe(e,t){return e.hasPendingInputs?.()===!0?!0:zn().has({agentId:t,maxPriority:"user",mode:"prompt"})}i(qe,"hasQueuedFollowUp");function ss(e,t){e.onSessionStart?.(t)}i(ss,"emitSessionStart");function Ke(e){e.onStreamEnd?.()}i(Ke,"emitStreamEnd");function Xt(e){e.onComplete?.()}i(Xt,"emitComplete");function as(e,t){e.onError?.(t)}i(as,"emitError");function cs(e,t,o,n,r){if(r!==void 0){e.onProviderRateLimit?.(t,o,n,r);return}e.onProviderRateLimit?.(t,o,n)}i(cs,"emitProviderRateLimit");function ls(e,t,o){e.onIterationStart?.(t+1,o)}i(ls,"emitIterationStart");function ds(e,t){let o=M(t.messages,t.snapshotOverride??t.currentSnapshot);return e.onIterationEnd?.({iter:t.iter,maxIter:t.maxIter,tokenCount:o.currentTokens,tokenSource:o.source,usage:o.usage,contextTokenSnapshot:o}),o}i(ds,"emitIterationEnd");function us(e,t,o){let n=e.modelSelection.provider??t.provider,r=e.modelSelection.model??t.modelOverride??t.model,s=e.thinkingLevel,a=ot(n);if(!a.isConfigured())throw new Error(`Provider "${n}" not configured. Set ${a.getApiKeyEnv()}`);let c=At(o,a,r);return{providerName:n,modelOverride:r,thinkingLevel:s,provider:a,contextWindow:c}}i(us,"resolvePerTurnProvider");import{createHash as md}from"node:crypto";import fd from"node:path";var pd=/\b(forget|do not remember|don't remember|remove (?:this )?from memory|delete .{0,40}memory)\b/i,gd=/(?:\u522b\u8bb0|\u4e0d\u8981\u8bb0\u4f4f|\u5fd8\u8bb0|\u5220\u9664.{0,12}\u8bb0\u5fc6|\u4e0d\u8981\u518d\u8bb0)/u,hd=/\b(remember this|please remember|save this to memory|add this to memory)\b/i,yd=/(?:\u8bb0\u4f4f|\u4fdd\u5b58.{0,12}\u8bb0\u5fc6|\u52a0\u5165\u8bb0\u5fc6)/u,Td=/\b(memory|remembered|remember|stored|previously saved|memo(?:ry)? note)\b/i,xd=/\b(wrong|incorrect|outdated|actually|correction|correcting|not .{1,80} but|instead|should be)\b/i,bd=/(?:\u8bb0\u5fc6|\u8bb0\u4f4f\u7684|\u4e4b\u524d\u8bb0\u7684)/u,vd=/(?:\u4e0d\u662f.{0,24}\u800c\u662f|\u7ea0\u6b63|\u66f4\u6b63|\u5176\u5b9e|\u5e94\u8be5\u662f|\u4e0d\u5bf9)/u;async function Tp(e){if(zo(e))return;let t=Z(e.context);try{let o=await Me({cwd:t,...e.context?.memoryIdentity!==void 0?{identity:e.context.memoryIdentity}:{},projectDocs:[],discoverSkills:!1}).maybeRunAutoCurator();(o.ran||o.skippedReason!=="not_due")&&O("[memory:maintenance]",{cwd:t,ran:o.ran,skippedReason:o.skippedReason??null,reportPath:o.reportPath??null,nextEligibleAt:o.nextEligibleAt??null})}catch(o){O("[memory:maintenance:error]",{cwd:t,error:o instanceof Error?o.message:String(o)})}}i(Tp,"maybeRunMemoryMaintenanceWindow");async function xp(e,t){if(zo(e))return;let o=e.memoryReviewer;if(o===void 0)return;let n=jo(t);if(n===void 0)return;let r=Z(e.context),s=e.context?.rawUserInput?.trim();try{let a=await Me({cwd:r,...e.context?.memoryIdentity!==void 0?{identity:e.context.memoryIdentity}:{},projectDocs:[],discoverSkills:!1,memoryReviewer:o}).reviewMemoryFeedback({trigger:n,userFeedback:t,...s!==void 0&&s.length>0?{task:s}:{}});e.events?.onMemoryReview?.(a),O("[memory:review]",{cwd:r,trigger:n,actions:a.actions.length,candidates:a.candidateRefs.map(c=>c.ref.id)})}catch(a){O("[memory:review:error]",{cwd:r,error:a instanceof Error?a.message:String(a)})}}i(xp,"maybeReviewMemoryFeedbackFromPrompt");function jo(e){let t=e.trim();if(t.length!==0){if(pd.test(t)||gd.test(t))return"explicit_forget";if(hd.test(t)||yd.test(t))return"explicit_remember";if(Ed(t))return"user_correction"}}i(jo,"detectMemoryReviewTrigger");function fs(e,t,o){let n=fd.resolve(t).toLowerCase(),r=ir(t)?.trim(),s=r===void 0?`local:${n}`:kd(r),a=e.context?.repoRoutingSignals?.workspaceRoot??e.context?.gitRoot??n;return{tenantId:`local:${_t()}`,workspaceId:a,agentId:e.context?.agentProfile?.id??"kodax-coding",projectId:s,sessionId:o}}i(fs,"deriveCodingMemoryIdentity");function kd(e){let t=e.trim();if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t))try{let n=new URL(t);if(n.hostname.length>0&&n.pathname.length>1)return ms(`${n.hostname.toLowerCase()}${n.port.length>0?`:${n.port}`:""}`,n.pathname)}catch{}let o=t.match(/^(?:[^@/:]+@)?([^:/]+):(.+)$/);return o!==null?ms(o[1],o[2]):`remote-hash:${md("sha256").update(t,"utf8").digest("hex")}`}i(kd,"canonicalMemoryProjectId");function ms(e,t){let o=t.replace(/^\/+|\/+$/g,"").replace(/\.git$/i,"");return`remote:${e.toLowerCase()}/${o}`}i(ms,"canonicalRemoteIdentity");async function Go(e,t,o,n={}){if(n.emitEvent!==!1&&e.events?.onMemoryOutcomeDigest?.(o),e.session?.persistedByHost===!0||e.session?.storage===void 0)return;let r=await e.session.storage.load(t);if(r===null)return;let s=r.lineage??it(r.messages);await e.session.storage.save(t,{...r,lineage:lr(s,o)})}i(Go,"persistMemoryOutcomeToSession");async function Xo(e,t,o){if(e.events?.onMemoryReviewReceipt?.(o),e.session?.persistedByHost===!0||e.session?.storage===void 0)return;let n=await e.session.storage.load(t);if(n===null)return;let r=n.lineage??it(n.messages);await e.session.storage.save(t,{...n,lineage:dr(r,o)})}i(Xo,"persistMemoryReviewReceiptToSession");async function Rd(e,t){if(e===void 0)return"defer";let o=await e.load(t.ownerSessionRef);if(o===null)return"discard";let n=o.lineage??it(o.messages),r=n.entries.find(a=>a.type==="memory_outcome_digest"&&a.digest.reviewKey===t.reviewKey);if(r!==void 0){let a=new Set(wo(n).map(c=>c.id));return r.parentId===null||a.has(r.parentId)?"eligible":"discard"}return n.entries.some(a=>a.type==="rewind_marker"&&a.timestamp.localeCompare(t.digest.createdAt)>=0)?"discard":"eligible"}i(Rd,"revalidatePendingEpisodeReview");async function ps(e,t,o,n){if(zo(e)||e.memoryReviewer===void 0||e.session?.storage===void 0)return;let r=await cr(t,{maxEntries:2,revalidate:i(async s=>s.ownerSessionRef===n?"defer":Rd(e.session?.storage,s),"revalidate"),review:i(async s=>wd(e,o,s),"review")});return(r.reviewed>0||r.discarded>0||r.failed>0)&&O("[memory:review-inbox:drain]",{...r}),r}i(ps,"drainCodingMemoryReviewInbox");async function wd(e,t,o){await Go(e,o.ownerSessionRef,o.digest,{emitEvent:!1});let n=await Sd(t,o.digest),r=new Date().toISOString();return await Xo(e,o.ownerSessionRef,{reviewKey:o.reviewKey,proposalIds:n.proposalIds,completedAt:r}),n.appliedProposalIds.length>0&&e.events?.onMemoryNotice?.({episodeId:o.digest.id,summaries:n.plan.actions.map(s=>s.summary).slice(0,3),proposalIds:n.appliedProposalIds}),n.proposalIds}i(wd,"reviewPendingEpisode");async function Sd(e,t){let o=new AbortController,n;try{return await Promise.race([e.reviewEpisode(t,o.signal),new Promise((r,s)=>{n=setTimeout(()=>{o.abort(),s(new Error("delayed memory review timed out after 30000ms"))},3e4)})])}finally{n!==void 0&&clearTimeout(n)}}i(Sd,"reviewEpisodeWithTimeout");function Ed(e){return Td.test(e)&&xd.test(e)||bd.test(e)&&vd.test(e)}i(Ed,"isMemoryCorrection");function zo(e){return e.context?.currentAgentId!==void 0||e.context?.parentAgentId!==void 0}i(zo,"isInternalAgentRun");import{createHash as Cd}from"node:crypto";var _d=6e3;function gs(e){let t=[`Objective: ${de(e.objective)}`,`Decision intent: ${de(e.decisionIntent)}`];e.actionSignature!==void 0&&t.push(`Action: ${de(e.actionSignature)}`),e.goal!==void 0&&t.push(`Goal (${de(e.goal.status)}): ${de(e.goal.objective)}`);for(let n of e.todoStore?.getAll()??[])n.status==="completed"||n.status==="skipped"||t.push(`Todo ${n.id} (${n.status}): ${de(n.subject)}`);for(let n of(e.artifacts??[]).slice(-12))t.push(`Artifact ${n.kind}: ${de(n.summary??n.displayTarget??n.target)}`);for(let n of(e.childSummaries??[]).slice(-6))t.push(`Child: ${de(n)}`);e.verifierOutcome!==void 0&&t.push(`Verifier: ${de(e.verifierOutcome)}`);for(let n of(e.recentOutcomeDigests??[]).slice(-6))t.push(`Outcome ${n.outcome}: ${de(n.summary)}`);let o=Ad(t);return{revision:Cd("sha256").update(o).digest("hex"),text:o,decisionIntent:e.decisionIntent,...e.actionSignature!==void 0?{actionSignature:e.actionSignature}:{},throughSequence:e.observationSequence}}i(gs,"buildCodingMemoryContext");function Ad(e){let t="";for(let o of e){let n=t.length===0?o:`${t}
4
4
  ${o}`;if(n.length>_d)break;t=n}return t}i(Ad,"boundedLines");function de(e){return Md(e).replace(/\s+/g," ").trim().slice(0,480)}i(de,"compact");function Md(e){return e.replace(/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----[\s\S]*?(?:-----END (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|$)/gi,"[restricted]").replace(/authorization:\s*bearer\s+\S+/gi,"authorization: [restricted]").replace(/\b(?:api[_-]?key|password|secret|token)\s*[:=]\s*\S+/gi,"[restricted]")}i(Md,"redactRestricted");import{AsyncLocalStorage as Id}from"node:async_hooks";var hs=new Id;function ys(e,t){return hs.run(e,t)}i(ys,"withMemoryDecisionTrace");function Ts(e){let t=hs.getStore();t!==void 0&&t.push(Pd(e))}i(Ts,"recordMemoryDecisionReceipt");function Pd(e){return Object.freeze({...e,candidateRefs:Object.freeze([...e.candidateRefs]),selectedRefs:Object.freeze([...e.selectedRefs]),injectedRefs:Object.freeze([...e.injectedRefs]),selectionModes:Object.freeze([...e.selectionModes])})}i(Pd,"freezeReceipt");function vs(e){let t=new Map(e.toolResults.map(r=>[r.tool_use_id,r])),o=[],n=e.startSequence;for(let r of e.toolBlocks){if(r.name==="memory_recall")continue;let s=t.get(r.id);if(s===void 0)continue;let a=Nd(s),c=s.is_error===!0||/^\s*\[Tool Error\]/i.test(a),u=!c&&Od(r);!c&&!u||Ld(a)||(n+=1,o.push({id:`tool-outcome:${r.id}`,sequence:n,kind:"outcome",summary:c?`${r.name} failed under the current inputs and environment: ${bs(a)}`:`Verification command succeeded: ${bs(a)}`,evidence:[{ref:`tool-result:${r.id}`,requestedGrade:"observed",source:"tool",observedAt:e.observedAt}],visibility:"prompt_safe",actionSignature:u?`${r.name}:verify`:r.name,occurredAt:e.observedAt,metadata:{toolName:r.name,failed:c}}))}return o}i(vs,"buildToolMemoryObservations");var ks=i(e=>e.source==="user"||e.source==="host"?e.requestedGrade:e.source==="environment"?xs(e,"verified"):e.source==="tool"?xs(e,"observed"):"inferred","codingMemorySourcePolicy");function xs(e,t){let o=["inferred","observed","corroborated","verified","authoritative"];return o[Math.min(o.indexOf(e.requestedGrade),o.indexOf(t))]??"inferred"}i(xs,"capGrade");function Od(e){if(e.name!=="bash")return!1;let t=Dd(e.input,"command");return t!==void 0&&/(?:^|\s)(?:test|build|lint|check|typecheck|tsc|vitest|pytest|cargo\s+test|go\s+test)(?:\s|$|:)/i.test(t)}i(Od,"isVerificationToolCall");function Dd(e,t){if(typeof e!="object"||e===null||Array.isArray(e))return;let o=e[t];return typeof o=="string"?o:void 0}i(Dd,"readStringField");function Nd(e){return typeof e.content=="string"?e.content:Array.isArray(e.content)?e.content.map(t=>typeof t!="object"||t===null||!("text"in t)?"":typeof t.text=="string"?t.text:"").filter(t=>t.length>0).join(`
5
5
  `):""}i(Nd,"toolResultText");function bs(e){return(e.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g,"").replace(/[<>]/g,"").replace(/\s+/g," ").trim()||"no textual result").slice(0,480)}i(bs,"boundedSummary");function Ld(e){return/(?:-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|authorization:\s*bearer\s+\S+|(?:api[_-]?key|password|secret|token)\s*[:=]\s*\S+)/i.test(e)}i(Ld,"isRestrictedMemoryContent");function Yo(e,t){if(!e.isConfigured())throw new Error(`Provider "${t}" not configured. Set ${e.getApiKeyEnv()}`)}i(Yo,"assertProviderConfigured");var Vo=`You are KodaX, a helpful multi-provider coding agent. You can read, write, and edit files, and execute shell commands.
@@ -121,7 +121,7 @@ Always explain what you're doing before taking action.
121
121
  `),"",'Start one with spawn_agent(agent_id="<name>"); list_dispatchable_agents returns the equivalent canonical id.'].join(`
122
122
  `)}i(Wd,"buildSpecialistAgentsBlock");function jd(e){if(!e.includes(on))return{prefix:e.trim(),suffix:""};let[t,...o]=e.split(on);return{prefix:t.trim(),suffix:o.join(on).trim()}}i(jd,"splitSystemPromptTemplate");function Gd(){let e=process.platform,t=e==="win32";return`Platform: ${t?"Windows":e==="darwin"?"macOS":"Linux"}
123
123
  ${t?"Use: dir, move, copy, del":"Use: ls, mv, cp, rm"}
124
- Node: ${process.version}`}i(Gd,"getEnvContext");function Xd(e){let t=e.provider?.trim(),o=(e.modelOverride??e.model)?.trim();if(!t&&!o)return null;let n=[];return t&&n.push(`provider=${t}`),o&&n.push(`model=${o}`),`[Runtime] ${n.join("; ")}.`}i(Xd,"getRuntimeFact");async function zd(e){try{let{stdout:t}=await tn("git rev-parse --is-inside-work-tree",{cwd:e});if(!t.trim())return"";let o=[];try{let{stdout:n}=await tn("git branch --show-current",{cwd:e});n.trim()&&o.push(`Git Branch: ${n.trim()}`)}catch{}try{let{stdout:n}=await tn("git status --short",{cwd:e});if(n.trim()){let r=n.trim().split(`
124
+ Node: ${process.version}`}i(Gd,"getEnvContext");function Xd(e){let t=e.provider?.trim(),o=(e.modelOverride??e.model)?.trim();if(!t&&!o)return null;let n=[];return t&&n.push(`provider=${t}`),o&&n.push(`model=${o}`),`[Runtime] ${n.join("; ")}.`}i(Xd,"getRuntimeFact");async function zd(e){try{let{stdout:t}=await tn("git rev-parse --is-inside-work-tree",{cwd:e,windowsHide:!0});if(!t.trim())return"";let o=[];try{let{stdout:n}=await tn("git branch --show-current",{cwd:e,windowsHide:!0});n.trim()&&o.push(`Git Branch: ${n.trim()}`)}catch{}try{let{stdout:n}=await tn("git status --short",{cwd:e,windowsHide:!0});if(n.trim()){let r=n.trim().split(`
125
125
  `).slice(0,10);o.push(`Git Status:
126
126
  ${r.map(a=>` ${a}`).join(`
127
127
  `)}`),n.trim().split(`
@@ -137,7 +137,7 @@ ${r.map(a=>` ${a}`).join(`
137
137
  `)}};return{effectiveOptions:r,systemPrompt:e.context?.systemPromptOverride??await rn(r,o),providerReasoning:{enabled:t.effort!=="none",effort:t.effort,taskType:t.decision.primaryTask,executionMode:t.decision.recommendedMode}}}i(Vt,"buildReasoningExecutionState");function nu(e,t){return t?{...e,effort:t}:e}i(nu,"buildEffectiveReasoningPlan");async function Os(e){let t=nu(e.reasoningPlan,e.thinkingLevel),o=await Vt({...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(Os,"resolvePerTurnReasoning");function Ds(e){let t=new AbortController,o=setTimeout(()=>{t.abort(new Error("API Hard Timeout (10 minutes)"))},e.hardTimeoutMs),n;e.streamMaxDurationMs>0&&(n=setTimeout(()=>{t.abort(new Error(`Stream max duration exceeded (${e.streamMaxDurationMs}ms; provider has known server-side kill window)`))},e.streamMaxDurationMs));let r=e.idleTimeoutMs>0,s;r&&(s=setTimeout(()=>{t.abort(new Error(`Stream stalled or delayed response (${e.idleTimeoutMs}ms idle)`))},e.idleTimeoutMs));let a=i(()=>{r&&(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(()=>{r&&(clearTimeout(s),s=void 0)},"clearIdleTimer"),u=e.callerAbortSignal?AbortSignal.any([e.callerAbortSignal,t.signal]):t.signal;return{retryTimeoutController:t,retrySignal:u,resetIdleTimer:a,clearIdleTimer:c,clearAll:i(()=>{clearTimeout(o),clearTimeout(n),clearTimeout(s),o=void 0,n=void 0,s=void 0},"clearAll")}}i(Ds,"buildStreamTimers");function Ns(e){let t=qt({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,Ai(t).join(`
138
138
  `)].join(`
139
139
 
140
- `):e.baseSystemPrompt,decision:t}}i(Ns,"applyProviderPolicyGate");function Ls(e){let{events:t,boundaryTracker:o,streamTimers:n,emitActiveExtensionEvent:r,providerName:s}=e;return{onTextDelta:i(a=>{n.resetIdleTimer(),o.markTextDelta(a),r("text:delta",{text:a}),t.onTextDelta?.(a)},"onTextDelta"),onThinkingDelta:i(a=>{n.resetIdleTimer(),o.markThinkingDelta(a),r("thinking:delta",{text:a}),t.onThinkingDelta?.(a)},"onThinkingDelta"),onThinkingEnd:i(a=>{n.resetIdleTimer(),r("thinking:end",{thinking:a}),t.onThinkingEnd?.(a)},"onThinkingEnd"),onToolInputDelta:i((a,c,u)=>{n.resetIdleTimer(),o.markToolInputStart(u?.toolId??`pending:${a}`),t.onToolInputDelta?.(a,c,u)},"onToolInputDelta"),onRateLimit:i((a,c,u)=>{n.resetIdleTimer(),r("provider:rate-limit",{provider:s,attempt:a,maxRetries:c,delayMs:u}),cs(t,a,c,u)},"onRateLimit"),onRetryAfter:i(a=>{n.resetIdleTimer(),t.onRetryAfter?.(a)},"onRetryAfter"),onReasoningEffortRejected:i(a=>{rr(a.provider,a.model,a.effort,"observed",new Date().toISOString()),t.onReasoningEffortRejected?.(a)},"onReasoningEffortRejected"),onHeartbeat:i(a=>{a?n.clearIdleTimer():n.resetIdleTimer()},"onHeartbeat")}}i(Ls,"buildStreamHandlers");var Qt=class{static{i(this,"BoundaryTrackerSession")}tracker;constructor(){this.tracker=new st}beginAttempt(t,o,n,r,s){this.tracker.beginRequest(t,o,n,r,s),Fo(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 Fs(e){let t=e.storage,o=e.currentAgentId!==void 0&&e.sessionScope==="managed-task-worker";if(!t||e.persistedByHost||e.currentAgentId!==void 0&&!o)return e.events;let n=e.events.onCompactedMessages;return{...e.events,async onCompactedMessages(r,s,a){if(a?.contextKind==="child"&&!o){await n?.(r,s,a);return}if(!s?.preCompactionMessages)throw new Error("Committed compaction is missing its exact pre-compaction snapshot.");await br({storage:t,sessionId:e.sessionId,compactedMessages:r,update:s,initialSessionData:e.initialSessionData}),await n?.(r,s,a)}}}i(Fs,"withDurableCompactionPersistence");function Us(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(Us,"describeTransientProviderRetry");function Bs(e,t,o,n){let r=Po(e,li(n)),s=new at(o,{...r,enableNonStreamingFallback:r.enableNonStreamingFallback&&t.supportsNonStreamingFallback()});return{resilienceCfg:r,recoveryCoordinator:s}}i(Bs,"buildResilienceSession");async function $s(e,t,o){if(e.name==="AbortError"&&t.signal.aborted&&!o?.aborted){let n=t.signal.reason?.message??"Stream stalled",{KodaXNetworkError:r}=await import("./dist-EVEJAII2.js");return new r(n,!0)}return e}i($s,"translateAbortError");function Hs(e){let t=Lt(e.error,e.failureStage);No(e.error,t);let o=e.recoveryCoordinator.decideRecoveryAction(e.error,t,e.attempt);return Lo(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?.(`${Us(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(Hs,"runRecoveryPipeline");async function qs(e){let t=new AbortController,o=e.callerAbortSignal?AbortSignal.any([e.callerAbortSignal,t.signal]):t.signal,n=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,ephemeralSuffix:e.ephemeralSuffix,signal:o},o)}}catch(r){return{ok:!1,error:r instanceof Error?r:new Error(String(r))}}finally{clearTimeout(n)}}i(qs,"executeNonStreamingFallback");var ru={type:"text",text:""};function an(e){return e.length===0?[ru]:e}i(an,"guardEmptyAssistantContent");async function cn(e,t,o,n,r,s){if(e.beforeToolExecute){let c=await e.beforeToolExecute(t,o,{toolId:n});if(c===!1)return oe;if(typeof c=="string")return c}let a=await Pe("tool:before",{name:t,input:o,toolId:n,executionCwd:r,gitRoot:s});return a===!1?oe:typeof a=="string"?a:void 0}i(cn,"getToolExecutionOverride");import iu from"fs";function Zt(e,t){let o=e.input?.path;if(!(typeof o!="string"||o.trim().length===0))return wr(o,t)}i(Zt,"resolveToolTargetPath");function ln(e,t){t&&(e.editRecoveryAttempts.delete(t),e.blockedEditWrites.delete(t))}i(ln,"clearEditRecoveryStateForPath");function dn(e,t,o){if(e.name!=="write")return;let n=Zt(e,t);if(!(!n||!o.blockedEditWrites.has(n))){if(!iu.existsSync(n)){o.blockedEditWrites.delete(n);return}return`[Tool Error] write: BLOCKED_AFTER_EDIT_FAILURE: Refusing to rewrite existing file ${n} while edit anchor recovery is in progress. Retry with edit using a smaller unique anchor or use insert_after_anchor.`}}i(dn,"maybeBlockExistingFileWrite");async function Ks(e,t,o,n){let r=Mt(t);if(!r)return;let s=typeof e.input?.path=="string"?e.input.path:void 0,a=Zt(e,n);if(!s||!a)return;o.blockedEditWrites.add(a);let c=(o.editRecoveryAttempts.get(a)??0)+1;if(o.editRecoveryAttempts.set(a,c),o.lastToolErrorCode=r,r==="EDIT_TOO_LARGE")return O("[edit:recovery]",{code:r,path:a,attempt:c,action:"split-edit"}),[`The previous edit for ${a} failed with ${r}.`,"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(`
140
+ `):e.baseSystemPrompt,decision:t}}i(Ns,"applyProviderPolicyGate");function Ls(e){let{events:t,boundaryTracker:o,streamTimers:n,emitActiveExtensionEvent:r,providerName:s}=e;return{onTextDelta:i(a=>{n.resetIdleTimer(),o.markTextDelta(a),r("text:delta",{text:a}),t.onTextDelta?.(a)},"onTextDelta"),onThinkingDelta:i(a=>{n.resetIdleTimer(),o.markThinkingDelta(a),r("thinking:delta",{text:a}),t.onThinkingDelta?.(a)},"onThinkingDelta"),onThinkingEnd:i(a=>{n.resetIdleTimer(),r("thinking:end",{thinking:a}),t.onThinkingEnd?.(a)},"onThinkingEnd"),onToolInputDelta:i((a,c,u)=>{n.resetIdleTimer(),o.markToolInputStart(u?.toolId??`pending:${a}`),t.onToolInputDelta?.(a,c,u)},"onToolInputDelta"),onRateLimit:i((a,c,u)=>{n.resetIdleTimer(),r("provider:rate-limit",{provider:s,attempt:a,maxRetries:c,delayMs:u}),cs(t,a,c,u)},"onRateLimit"),onRetryAfter:i(a=>{n.resetIdleTimer(),t.onRetryAfter?.(a)},"onRetryAfter"),onReasoningEffortRejected:i(a=>{rr(a.provider,a.model,a.effort,"observed",new Date().toISOString()),t.onReasoningEffortRejected?.(a)},"onReasoningEffortRejected"),onHeartbeat:i(a=>{a?n.clearIdleTimer():n.resetIdleTimer()},"onHeartbeat")}}i(Ls,"buildStreamHandlers");var Qt=class{static{i(this,"BoundaryTrackerSession")}tracker;constructor(){this.tracker=new st}beginAttempt(t,o,n,r,s){this.tracker.beginRequest(t,o,n,r,s),Fo(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 Fs(e){let t=e.storage,o=e.currentAgentId!==void 0&&e.sessionScope==="managed-task-worker";if(!t||e.persistedByHost||e.currentAgentId!==void 0&&!o)return e.events;let n=e.events.onCompactedMessages;return{...e.events,async onCompactedMessages(r,s,a){if(a?.contextKind==="child"&&!o){await n?.(r,s,a);return}if(!s?.preCompactionMessages)throw new Error("Committed compaction is missing its exact pre-compaction snapshot.");await br({storage:t,sessionId:e.sessionId,compactedMessages:r,update:s,initialSessionData:e.initialSessionData}),await n?.(r,s,a)}}}i(Fs,"withDurableCompactionPersistence");function Us(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(Us,"describeTransientProviderRetry");function Bs(e,t,o,n){let r=Po(e,li(n)),s=new at(o,{...r,enableNonStreamingFallback:r.enableNonStreamingFallback&&t.supportsNonStreamingFallback()});return{resilienceCfg:r,recoveryCoordinator:s}}i(Bs,"buildResilienceSession");async function $s(e,t,o){if(e.name==="AbortError"&&t.signal.aborted&&!o?.aborted){let n=t.signal.reason?.message??"Stream stalled",{KodaXNetworkError:r}=await import("./dist-D3EPVAOZ.js");return new r(n,!0)}return e}i($s,"translateAbortError");function Hs(e){let t=Lt(e.error,e.failureStage);No(e.error,t);let o=e.recoveryCoordinator.decideRecoveryAction(e.error,t,e.attempt);return Lo(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?.(`${Us(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(Hs,"runRecoveryPipeline");async function qs(e){let t=new AbortController,o=e.callerAbortSignal?AbortSignal.any([e.callerAbortSignal,t.signal]):t.signal,n=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,ephemeralSuffix:e.ephemeralSuffix,signal:o},o)}}catch(r){return{ok:!1,error:r instanceof Error?r:new Error(String(r))}}finally{clearTimeout(n)}}i(qs,"executeNonStreamingFallback");var ru={type:"text",text:""};function an(e){return e.length===0?[ru]:e}i(an,"guardEmptyAssistantContent");async function cn(e,t,o,n,r,s){if(e.beforeToolExecute){let c=await e.beforeToolExecute(t,o,{toolId:n});if(c===!1)return oe;if(typeof c=="string")return c}let a=await Pe("tool:before",{name:t,input:o,toolId:n,executionCwd:r,gitRoot:s});return a===!1?oe:typeof a=="string"?a:void 0}i(cn,"getToolExecutionOverride");import iu from"fs";function Zt(e,t){let o=e.input?.path;if(!(typeof o!="string"||o.trim().length===0))return wr(o,t)}i(Zt,"resolveToolTargetPath");function ln(e,t){t&&(e.editRecoveryAttempts.delete(t),e.blockedEditWrites.delete(t))}i(ln,"clearEditRecoveryStateForPath");function dn(e,t,o){if(e.name!=="write")return;let n=Zt(e,t);if(!(!n||!o.blockedEditWrites.has(n))){if(!iu.existsSync(n)){o.blockedEditWrites.delete(n);return}return`[Tool Error] write: BLOCKED_AFTER_EDIT_FAILURE: Refusing to rewrite existing file ${n} while edit anchor recovery is in progress. Retry with edit using a smaller unique anchor or use insert_after_anchor.`}}i(dn,"maybeBlockExistingFileWrite");async function Ks(e,t,o,n){let r=Mt(t);if(!r)return;let s=typeof e.input?.path=="string"?e.input.path:void 0,a=Zt(e,n);if(!s||!a)return;o.blockedEditWrites.add(a);let c=(o.editRecoveryAttempts.get(a)??0)+1;if(o.editRecoveryAttempts.set(a,c),o.lastToolErrorCode=r,r==="EDIT_TOO_LARGE")return O("[edit:recovery]",{code:r,path:a,attempt:c,action:"split-edit"}),[`The previous edit for ${a} failed with ${r}.`,"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(`
141
141
  `);if(c>2)return O("[edit:recovery]",{code:r,path:a,attempt:c,action:"stop-auto-recovery"}),[`The previous edit for ${a} failed with ${r}, 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(`
142
142
  `);let u=c===1?120:400,l=await Ir(s,String(e.input?.old_string??""),n,u),m=l.candidates[0],f=l.candidates.slice(1,3);O("[edit:recovery]",{code:r,path:a,attempt:c,windowLines:u,candidateCount:l.candidates.length});let y=[`The previous edit for ${a} failed with ${r}.`,"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&&(y.push(""),y.push(`Best nearby anchor window (${m.startLine}-${m.endLine}):`),y.push("```text"),y.push(m.excerpt),y.push("```")),f.length>0){y.push(""),y.push("Other nearby candidate anchors:");for(let E of f)y.push(`- lines ${E.startLine}-${E.endLine}: ${E.preview}`)}return y.join(`
143
143
  `)}i(Ks,"buildEditRecoveryUserMessage");function ve(e){return/^\[(?:Tool Error|Cancelled|Blocked|Error)\]/.test(e)}i(ve,"isToolResultErrorContent");function Ws(e){return e.startsWith(Rr)}i(Ws,"isCancelledToolResultContent");function js(e){return/^\[Tool Error\]\s+[^:]+:\s+([A-Z_]+):/.exec(e.trim())?.[1]}i(js,"extractStructuredToolErrorCode");var su=new Set(["edit","write","multi_edit","apply_patch","delete","remove","rename"]),au=3,cu=100;function Gs(e){return su.has(e.toLowerCase())}i(Gs,"isMutationTool");function Xs(e){return e.files.size>=au?!0:[...e.files.values()].reduce((o,n)=>o+n,0)>=cu}i(Xs,"isMutationScopeSignificant");function lu(e){let t=[...e.files.values()].reduce((n,r)=>n+r,0),o=[...e.files.entries()].map(([n,r])=>` - ${n} (~${r} lines)`).join(`
@@ -320,7 +320,7 @@ Keep every section concise.`;async function xa(e){let t=e.tokensBefore-e.tokensA
320
320
 
321
321
  [output token limit hit, continuing\u2026]
322
322
 
323
- `),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=M(o,r);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(wa,"maybeContinueAfterMaxTokens");function Sa(e){let{result:t,lastText:o,messages:n,continueAttempted:r,options:s,emittedManagedProtocolPayload:a,completedTurnTokenSnapshot:c}=e,u=s.context?.managedProtocolEmission;if(r||$e(t.stopReason)!=="end"||t.toolBlocks.length!==0||!o||!u?.enabled||u.optional)return{outcome:"no_op",nextContinueAttempted:r};let l=u.role,m=ti(l);return!m||oi(a,l)||ni(o,m)?{outcome:"no_op",nextContinueAttempted:r}:(n.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 "${Jr}" tool now, or append a \`\`\`${m}\`\`\` fenced block. No other output.`}],_synthetic:!0}),{outcome:"continue",nextContinueAttempted:!0,nextContextTokenSnapshot:M(n,c)})}i(Sa,"maybeAutoContinueManagedProtocol");import{exec as Lu}from"child_process";import Fu from"path";import{promisify as Uu}from"util";function Du(e){let t=new Map;if(!e)return t;for(let[o,n]of Object.entries(e))t.set(o,new Map(Object.entries(n)));return t}i(Du,"createRuntimeExtensionState");function Nu(e){let t={};for(let[o,n]of e.entries())n.size!==0&&(t[o]=Object.fromEntries(n.entries()));return Object.keys(t).length>0?t:void 0}i(Nu,"snapshotRuntimeExtensionState");function eo(e,t={}){let o=t.includeUnchanged??!0,n=Nu(e.extensionState),r=o||e.extensionStateDirty?n??(e.extensionStateDirty?{}:void 0):void 0,a=o&&e.extensionRecords.length>0||e.extensionRecordsDirty?e.extensionRecords.map(c=>({...c})):void 0;if(!(!r&&!a))return{...r?{extensionState:r}:{},...a?{extensionRecords:a}:{}}}i(eo,"snapshotRuntimeSessionState");function Ea(e,t){let o=e.get(t);if(o)return o;let n=new Map;return e.set(t,n),n}i(Ea,"getExtensionStateBucket");function Ca(e){return{queuedMessages:[],extensionState:Du(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(Ca,"buildRuntimeSessionState");function fn(e){return typeof e=="string"?{role:"user",content:e}:e}i(fn,"normalizeQueuedRuntimeMessage");function pn(e){let t={};return e.provider?.trim()&&(t.provider=e.provider.trim()),e.model?.trim()&&(t.model=e.model.trim()),t}i(pn,"normalizeRuntimeModelSelection");function _a(){return`extrec_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}i(_a,"createSessionRecordId");var Bu=Uu(Lu);async function $u(e){try{let{stdout:t}=await Bu("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}i($u,"getGitRoot");function Hu(e){if(!(!e||!e.trim()))return Fu.resolve(e).replace(/\\/g,"/")}i(Hu,"normalizeSnapshotPath");function qu(e,t){return{...e?{canonicalRepoRoot:e,workspaceRoot:e}:{},executionCwd:t,workspaceKind:"detected"}}i(qu,"buildSnapshotRuntimeInfo");var Aa=new Set;function Wy(e){return Object.defineProperty(e,"__startKodaXGeneratedId",{value:!0,enumerable:!1}),e}i(Wy,"markStartKodaXGeneratedSessionId");function Ku(e){return e?.__startKodaXGeneratedId===!0}i(Ku,"hasStartKodaXGeneratedSessionId");function Ma(e){return Array.isArray(e.content)?e.content:[]}i(Ma,"contentBlocks");function Wu(e){return Ma(e).filter(t=>t.type==="tool_use").map(t=>t.id)}i(Wu,"collectToolUseIds");function ju(e){return Ma(e).filter(t=>t.type==="tool_result").map(t=>t.tool_use_id)}i(ju,"collectToolResultIds");function Gu(e){let t=e.find(n=>n.role!=="system");if(!t||t.role!=="user")return!1;let o=new Set;for(let n of e){if(n.role==="assistant"){for(let r of Wu(n))o.add(r);continue}if(n.role==="user"){for(let r of ju(n))if(!o.delete(r))return!1}}return o.size===0}i(Gu,"isSafeAuthoritativeTranscript");async function Ne(e,t,o){if(e.session?.persistedByHost&&!o.errorMetadata)return;if(!e.session?.storage){e.session?.id&&!Ku(e.session)&&!Aa.has(e.session.id)&&(Aa.add(e.session.id),P({source:"coding:session-snapshot",level:"warn",message:`[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 n=o.messages,r,s,a,c=!0;if(o.errorMetadata&&!Gu(o.messages)){c=!1;try{let y=await e.session.storage.load(t);y?(n=y.messages,r=y.lineage,s=y.extensionState?structuredClone(y.extensionState):void 0,a=y.extensionRecords?.map(E=>({...E}))):(n=[],r=void 0,s=void 0,a=void 0)}catch{n=[],r=void 0,s=void 0,a=void 0}}let u=Hu(e.context?.executionCwd??e.context?.gitRoot??process.cwd())??process.cwd().replace(/\\/g,"/"),l=o.gitRoot??e.context?.gitRoot??await $u(u)??"",m=qu(l,u),f=o.runtimeSessionState?eo(o.runtimeSessionState):void 0;c&&(s=f?.extensionState,a=f?.extensionRecords);try{await e.session.storage.save(t,{messages:n,title:o.title,gitRoot:l,runtimeInfo:m,tag:e.session.tag,scope:e.session.scope??"user",errorMetadata:o.errorMetadata,...r!==void 0?{lineage:r}:{},extensionState:s,extensionRecords:a})}catch(y){P({source:"coding:session-snapshot",level:"error",message:"storage.save failed; continuing without snapshot persistence.",detail:y})}}i(Ne,"saveSessionSnapshot");async function to(e){await Ne(e.options,e.sessionId,{messages:e.messages,title:e.title,gitRoot:e.options.context?.gitRoot??void 0,runtimeSessionState:e.runtimeSessionState});let[t,o]=dt(e.lastText);return{finalSignal:t,finalReason:o}}i(to,"applyIterationLimitTerminal");async function Ia(e){let t=xo(e.messages);t=rt(t);let o={lastError:e.error.message,lastErrorTime:Date.now(),consecutiveErrors:(e.errorMetadata?.consecutiveErrors??0)+1};await Ne(e.options,e.sessionId,{messages:t,title:e.title,gitRoot:e.options.context?.gitRoot??void 0,errorMetadata:o,runtimeSessionState:e.runtimeSessionState});let n=Ht(t);return{cleanedMessages:t,updatedErrorMetadata:o,contextTokenSnapshot:n}}i(Ia,"runCatchCleanup");async function Pa(e){Ke(e.events),await e.emitActiveExtensionEvent("stream:end",void 0)}i(Pa,"applyAbortErrorTerminal");async function Oa(e){await e.emitActiveExtensionEvent("error",{error:e.error}),as(e.events,e.error)}i(Oa,"applyGenericErrorTerminal");async function Da(e){let t={...e};return await Pe("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(Da,"applyProviderPrepareHook");function Na(e){return e.toLowerCase().replace(/[\s_-]+/g,"")}i(Na,"normalizeToolNameKey");function Xu(e,t){if(t.includes(e))return null;let o=Na(e);if(!o)return null;let n=t.filter(r=>Na(r)===o);return n.length===1?n[0]:null}i(Xu,"resolveToolNameAlias");function La(e,t){return e.map(o=>{let n=Xu(o.name,t);return n?(process.env.KODAX_DEBUG_TOOL_STREAM&&P({source:"coding:tool-name-repair",level:"debug",message:"Tool name repaired.",detail:{from:o.name,to:n}}),{...o,name:n}):o})}i(La,"repairToolBlockNames");function gt(e,t){return t.queuedMessages.length===0?!1:(e.push(...t.queuedMessages.splice(0)),!0)}i(gt,"appendQueuedRuntimeMessages");async function ht(e,t,o,n){await Pe("turn:settle",{sessionId:e,lastText:t,hadToolCalls:n.hadToolCalls,success:n.success,signal:n.signal,queueUserMessage:i(r=>{o.queuedMessages.push(fn(r))},"queueUserMessage"),setModelSelection:i(r=>{o.modelSelection=pn(r)},"setModelSelection"),setThinkingLevel:i(r=>{o.thinkingLevel=r},"setThinkingLevel")})}i(ht,"settleExtensionTurn");function mT(e){return async t=>{let o=e();return o?await Pe("turn:complete",{sessionId:o,lastAssistantText:t.lastAssistantText,signal:t.signal,reanimateCount:t.reanimateCount,reanimateBudget:t.reanimateBudget})??void 0:void 0}}i(mT,"createExtensionTurnCompleteStopHook");function Fa(e){return{queueUserMessage:i(t=>{e.queuedMessages.push(fn(t))},"queueUserMessage"),getSessionState:i((t,o)=>e.extensionState.get(t)?.get(o),"getSessionState"),setSessionState:i((t,o,n)=>{let r=Ea(e.extensionState,t);if(e.extensionStateDirty=!0,n===void 0){r.delete(o),r.size===0&&e.extensionState.delete(t);return}r.set(o,n)},"setSessionState"),getSessionStateSnapshot:i(t=>Object.fromEntries((e.extensionState.get(t)??new Map).entries()),"getSessionStateSnapshot"),appendSessionRecord:i((t,o,n,r)=>{let s=o.trim(),a=r?.dedupeKey?.trim()||void 0,c={id:_a(),extensionId:t,type:s,ts:Date.now(),...n===void 0?{}:{data:n},...a?{dedupeKey:a}:{}};if(a){let u=e.extensionRecords.findIndex(l=>l.extensionId===t&&l.type===s&&l.dedupeKey===a);if(u>=0)return e.extensionRecords.splice(u,1,c),e.extensionRecordsDirty=!0,c}return e.extensionRecords.push(c),e.extensionRecordsDirty=!0,c},"appendSessionRecord"),listSessionRecords:i((t,o)=>e.extensionRecords.filter(n=>n.extensionId===t&&(o===void 0||n.type===o)).map(n=>({...n})),"listSessionRecords"),clearSessionRecords:i((t,o)=>{let n=e.extensionRecords.length;e.extensionRecords=e.extensionRecords.filter(s=>s.extensionId!==t||o!==void 0&&s.type!==o);let r=n-e.extensionRecords.length;return r>0&&(e.extensionRecordsDirty=!0),r},"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=pn(t)},"setModelSelection"),getThinkingLevel:i(()=>e.thinkingLevel,"getThinkingLevel"),setThinkingLevel:i(t=>{e.thinkingLevel=t},"setThinkingLevel")}}i(Fa,"createExtensionRuntimeSessionController");async function Ua(e){e.messages.push({role:"user",content:[...e.toolResults]}),e.editRecoveryMessages.length>0&&e.messages.push({role:"user",content:e.editRecoveryMessages.join(`
323
+ `),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=M(o,r);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(wa,"maybeContinueAfterMaxTokens");function Sa(e){let{result:t,lastText:o,messages:n,continueAttempted:r,options:s,emittedManagedProtocolPayload:a,completedTurnTokenSnapshot:c}=e,u=s.context?.managedProtocolEmission;if(r||$e(t.stopReason)!=="end"||t.toolBlocks.length!==0||!o||!u?.enabled||u.optional)return{outcome:"no_op",nextContinueAttempted:r};let l=u.role,m=ti(l);return!m||oi(a,l)||ni(o,m)?{outcome:"no_op",nextContinueAttempted:r}:(n.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 "${Jr}" tool now, or append a \`\`\`${m}\`\`\` fenced block. No other output.`}],_synthetic:!0}),{outcome:"continue",nextContinueAttempted:!0,nextContextTokenSnapshot:M(n,c)})}i(Sa,"maybeAutoContinueManagedProtocol");import{exec as Lu}from"child_process";import Fu from"path";import{promisify as Uu}from"util";function Du(e){let t=new Map;if(!e)return t;for(let[o,n]of Object.entries(e))t.set(o,new Map(Object.entries(n)));return t}i(Du,"createRuntimeExtensionState");function Nu(e){let t={};for(let[o,n]of e.entries())n.size!==0&&(t[o]=Object.fromEntries(n.entries()));return Object.keys(t).length>0?t:void 0}i(Nu,"snapshotRuntimeExtensionState");function eo(e,t={}){let o=t.includeUnchanged??!0,n=Nu(e.extensionState),r=o||e.extensionStateDirty?n??(e.extensionStateDirty?{}:void 0):void 0,a=o&&e.extensionRecords.length>0||e.extensionRecordsDirty?e.extensionRecords.map(c=>({...c})):void 0;if(!(!r&&!a))return{...r?{extensionState:r}:{},...a?{extensionRecords:a}:{}}}i(eo,"snapshotRuntimeSessionState");function Ea(e,t){let o=e.get(t);if(o)return o;let n=new Map;return e.set(t,n),n}i(Ea,"getExtensionStateBucket");function Ca(e){return{queuedMessages:[],extensionState:Du(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(Ca,"buildRuntimeSessionState");function fn(e){return typeof e=="string"?{role:"user",content:e}:e}i(fn,"normalizeQueuedRuntimeMessage");function pn(e){let t={};return e.provider?.trim()&&(t.provider=e.provider.trim()),e.model?.trim()&&(t.model=e.model.trim()),t}i(pn,"normalizeRuntimeModelSelection");function _a(){return`extrec_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}i(_a,"createSessionRecordId");var Bu=Uu(Lu);async function $u(e){try{let{stdout:t}=await Bu("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0});return t.trim()}catch{return null}}i($u,"getGitRoot");function Hu(e){if(!(!e||!e.trim()))return Fu.resolve(e).replace(/\\/g,"/")}i(Hu,"normalizeSnapshotPath");function qu(e,t){return{...e?{canonicalRepoRoot:e,workspaceRoot:e}:{},executionCwd:t,workspaceKind:"detected"}}i(qu,"buildSnapshotRuntimeInfo");var Aa=new Set;function Wy(e){return Object.defineProperty(e,"__startKodaXGeneratedId",{value:!0,enumerable:!1}),e}i(Wy,"markStartKodaXGeneratedSessionId");function Ku(e){return e?.__startKodaXGeneratedId===!0}i(Ku,"hasStartKodaXGeneratedSessionId");function Ma(e){return Array.isArray(e.content)?e.content:[]}i(Ma,"contentBlocks");function Wu(e){return Ma(e).filter(t=>t.type==="tool_use").map(t=>t.id)}i(Wu,"collectToolUseIds");function ju(e){return Ma(e).filter(t=>t.type==="tool_result").map(t=>t.tool_use_id)}i(ju,"collectToolResultIds");function Gu(e){let t=e.find(n=>n.role!=="system");if(!t||t.role!=="user")return!1;let o=new Set;for(let n of e){if(n.role==="assistant"){for(let r of Wu(n))o.add(r);continue}if(n.role==="user"){for(let r of ju(n))if(!o.delete(r))return!1}}return o.size===0}i(Gu,"isSafeAuthoritativeTranscript");async function Ne(e,t,o){if(e.session?.persistedByHost&&!o.errorMetadata)return;if(!e.session?.storage){e.session?.id&&!Ku(e.session)&&!Aa.has(e.session.id)&&(Aa.add(e.session.id),P({source:"coding:session-snapshot",level:"warn",message:`[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 n=o.messages,r,s,a,c=!0;if(o.errorMetadata&&!Gu(o.messages)){c=!1;try{let y=await e.session.storage.load(t);y?(n=y.messages,r=y.lineage,s=y.extensionState?structuredClone(y.extensionState):void 0,a=y.extensionRecords?.map(E=>({...E}))):(n=[],r=void 0,s=void 0,a=void 0)}catch{n=[],r=void 0,s=void 0,a=void 0}}let u=Hu(e.context?.executionCwd??e.context?.gitRoot??process.cwd())??process.cwd().replace(/\\/g,"/"),l=o.gitRoot??e.context?.gitRoot??await $u(u)??"",m=qu(l,u),f=o.runtimeSessionState?eo(o.runtimeSessionState):void 0;c&&(s=f?.extensionState,a=f?.extensionRecords);try{await e.session.storage.save(t,{messages:n,title:o.title,gitRoot:l,runtimeInfo:m,tag:e.session.tag,scope:e.session.scope??"user",errorMetadata:o.errorMetadata,...r!==void 0?{lineage:r}:{},extensionState:s,extensionRecords:a})}catch(y){P({source:"coding:session-snapshot",level:"error",message:"storage.save failed; continuing without snapshot persistence.",detail:y})}}i(Ne,"saveSessionSnapshot");async function to(e){await Ne(e.options,e.sessionId,{messages:e.messages,title:e.title,gitRoot:e.options.context?.gitRoot??void 0,runtimeSessionState:e.runtimeSessionState});let[t,o]=dt(e.lastText);return{finalSignal:t,finalReason:o}}i(to,"applyIterationLimitTerminal");async function Ia(e){let t=xo(e.messages);t=rt(t);let o={lastError:e.error.message,lastErrorTime:Date.now(),consecutiveErrors:(e.errorMetadata?.consecutiveErrors??0)+1};await Ne(e.options,e.sessionId,{messages:t,title:e.title,gitRoot:e.options.context?.gitRoot??void 0,errorMetadata:o,runtimeSessionState:e.runtimeSessionState});let n=Ht(t);return{cleanedMessages:t,updatedErrorMetadata:o,contextTokenSnapshot:n}}i(Ia,"runCatchCleanup");async function Pa(e){Ke(e.events),await e.emitActiveExtensionEvent("stream:end",void 0)}i(Pa,"applyAbortErrorTerminal");async function Oa(e){await e.emitActiveExtensionEvent("error",{error:e.error}),as(e.events,e.error)}i(Oa,"applyGenericErrorTerminal");async function Da(e){let t={...e};return await Pe("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(Da,"applyProviderPrepareHook");function Na(e){return e.toLowerCase().replace(/[\s_-]+/g,"")}i(Na,"normalizeToolNameKey");function Xu(e,t){if(t.includes(e))return null;let o=Na(e);if(!o)return null;let n=t.filter(r=>Na(r)===o);return n.length===1?n[0]:null}i(Xu,"resolveToolNameAlias");function La(e,t){return e.map(o=>{let n=Xu(o.name,t);return n?(process.env.KODAX_DEBUG_TOOL_STREAM&&P({source:"coding:tool-name-repair",level:"debug",message:"Tool name repaired.",detail:{from:o.name,to:n}}),{...o,name:n}):o})}i(La,"repairToolBlockNames");function gt(e,t){return t.queuedMessages.length===0?!1:(e.push(...t.queuedMessages.splice(0)),!0)}i(gt,"appendQueuedRuntimeMessages");async function ht(e,t,o,n){await Pe("turn:settle",{sessionId:e,lastText:t,hadToolCalls:n.hadToolCalls,success:n.success,signal:n.signal,queueUserMessage:i(r=>{o.queuedMessages.push(fn(r))},"queueUserMessage"),setModelSelection:i(r=>{o.modelSelection=pn(r)},"setModelSelection"),setThinkingLevel:i(r=>{o.thinkingLevel=r},"setThinkingLevel")})}i(ht,"settleExtensionTurn");function mT(e){return async t=>{let o=e();return o?await Pe("turn:complete",{sessionId:o,lastAssistantText:t.lastAssistantText,signal:t.signal,reanimateCount:t.reanimateCount,reanimateBudget:t.reanimateBudget})??void 0:void 0}}i(mT,"createExtensionTurnCompleteStopHook");function Fa(e){return{queueUserMessage:i(t=>{e.queuedMessages.push(fn(t))},"queueUserMessage"),getSessionState:i((t,o)=>e.extensionState.get(t)?.get(o),"getSessionState"),setSessionState:i((t,o,n)=>{let r=Ea(e.extensionState,t);if(e.extensionStateDirty=!0,n===void 0){r.delete(o),r.size===0&&e.extensionState.delete(t);return}r.set(o,n)},"setSessionState"),getSessionStateSnapshot:i(t=>Object.fromEntries((e.extensionState.get(t)??new Map).entries()),"getSessionStateSnapshot"),appendSessionRecord:i((t,o,n,r)=>{let s=o.trim(),a=r?.dedupeKey?.trim()||void 0,c={id:_a(),extensionId:t,type:s,ts:Date.now(),...n===void 0?{}:{data:n},...a?{dedupeKey:a}:{}};if(a){let u=e.extensionRecords.findIndex(l=>l.extensionId===t&&l.type===s&&l.dedupeKey===a);if(u>=0)return e.extensionRecords.splice(u,1,c),e.extensionRecordsDirty=!0,c}return e.extensionRecords.push(c),e.extensionRecordsDirty=!0,c},"appendSessionRecord"),listSessionRecords:i((t,o)=>e.extensionRecords.filter(n=>n.extensionId===t&&(o===void 0||n.type===o)).map(n=>({...n})),"listSessionRecords"),clearSessionRecords:i((t,o)=>{let n=e.extensionRecords.length;e.extensionRecords=e.extensionRecords.filter(s=>s.extensionId!==t||o!==void 0&&s.type!==o);let r=n-e.extensionRecords.length;return r>0&&(e.extensionRecordsDirty=!0),r},"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=pn(t)},"setModelSelection"),getThinkingLevel:i(()=>e.thinkingLevel,"getThinkingLevel"),setThinkingLevel:i(t=>{e.thinkingLevel=t},"setThinkingLevel")}}i(Fa,"createExtensionRuntimeSessionController");async function Ua(e){e.messages.push({role:"user",content:[...e.toolResults]}),e.editRecoveryMessages.length>0&&e.messages.push({role:"user",content:e.editRecoveryMessages.join(`
324
324
 
325
325
  `),_synthetic:!0});let t=M(e.messages,e.completedTurnTokenSnapshot);await ht(e.sessionId,e.lastText,e.runtimeSessionState,{hadToolCalls:!0,success:!0});let o=gt(e.messages,e.runtimeSessionState);return o&&(t=M(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(Ua,"pushToolResultsAndSettle");function zu(e){return e?_e(e)??e:void 0}i(zu,"legacyReasoningModeToRuntimeEffort");function Yu(e,t,o){if(/(?:\b(?:must|must not|do not|don't|never|always|forbid)\b|必须|不要|不能|禁止|始终)/iu.test(e))return{id:`user-constraint:${o}`,sequence:o,kind:"constraint",summary:e.replace(/\s+/g," ").trim().slice(0,1600),evidence:[{ref:`user:prompt:${o}`,requestedGrade:"authoritative",source:"user",observedAt:new Date().toISOString()}],visibility:"prompt_safe",actionSignature:t,occurredAt:new Date().toISOString()}}i(Yu,"buildUserConstraintObservation");function Vu(e){return{content:Sr(e)??""}}i(Vu,"renderMemoryReminderSuffix");function Qu(e,t){let o=e.length-1,n=e[o];if(!n||n.role!=="assistant")return;let r=t.toolBlocks.filter(s=>re(s.name));e[o]={...n,content:an([...t.thinkingBlocks,...t.textBlocks,...r])}}i(Qu,"replaceLatestAssistantToolBlocks");async function gn(e,t,o){let n=jr(),r=e.extensionRuntime??n,s=e.extensionRuntime instanceof Wr?e.extensionRuntime:void 0,a=!!s&&s!==n;a&&s&&Co(s);let c=Gr(r),u,l;try{let m=e.maxIter??200,f=e.events??{},y=Jn(e.guardrails).tool,E=y.length>0?o??Ct({name:"KodaX Coding Agent",instructions:"Execute the coding substrate with the declared run guardrails."}):void 0,T=r?.getDefaults?.(),d={preAnswerJudgeConsumed:!1,postToolJudgeConsumed:!1,maxTokensRetryCount:0,costTracker:qn(),managedProtocolContinueAttempted:!1,compactConsecutiveFailures:0,compactAntiThrash:De(),lastText:"",currentProviderName:T?.modelSelection.provider??e.provider,currentModelOverride:T?.modelSelection.model??e.modelOverride??e.model,runtimeThinkingLevel:T?.thinkingLevel},w=ot(d.currentProviderName);Yo(w,d.currentProviderName);let ee=w.getEffectiveContextWindow?.(d.currentModelOverride)??w.getContextWindow(),B=await ui(ee,e.compaction),g=await _i(e)??await bo(),V=e.context?.liveTurn,ie=e.context?.currentAgentId,Q=e.context?.parentAgentId,_=ts({sessionId:g,deliveryKind:V?.deliveryKind??"initial",turnId:V?.turnId,deliveryId:V?.deliveryId,promptId:V?.promptId,...ie!==void 0?{contextId:`${g}/agent/${encodeURIComponent(ie)}`,contextKind:"child",parentContextId:Q===void 0?g:`${g}/agent/${encodeURIComponent(Q)}`,agentId:ie}:{}});f=Fs({events:f,storage:e.session?.storage,sessionId:g,persistedByHost:e.session?.persistedByHost,currentAgentId:ie,sessionScope:e.session?.scope,initialSessionData:{title:t.slice(0,80),gitRoot:e.context?.gitRoot??"",...e.session?.scope!==void 0?{scope:e.session.scope}:{},...e.session?.tag!==void 0?{tag:e.session.tag}:{}}}),f=os(f,_);let N=e.context?.memoryIdentity??fs(e,Z(e.context),g),q,Re;if(e.context?.currentAgentId===void 0)try{q=Me({cwd:Z(e.context),identity:N,projectDocs:[],discoverSkills:!1,...e.memoryReviewer!==void 0?{memoryReviewer:e.memoryReviewer}:{}}),Re=await q.buildMemoryPack({task:t,identity:N,maxCandidates:12,maxHints:5,includeSnippets:!1}),await q.maybeRunAutoCurator();let p=e.memoryReviewer===void 0?void 0:jo(t);if(p!==void 0){let x=await q.reviewMemoryFeedback({trigger:p,userFeedback:t,task:t});f.onMemoryReview?.(x)}}catch(p){O("[memory:session-start:error]",{error:p instanceof Error?p.message:String(p)})}e={...e,events:f,context:{...e.context,memoryIdentity:N,...Re!==void 0?{memoryPack:Re}:{}}};let we=await Ei(e,g),h=Ci(we.messages,t,e.context?.inputArtifacts,_.turnId),te=we.title||t.slice(0,50)+(t.length>50?"...":""),hn=we.errorMetadata,Wa=we.loadedExtensionState,ja=we.loadedExtensionRecords,Ga=Z(e.context),oo={current:e.context?.managedProtocolEmission?.enabled?Mo(void 0,void 0):void 0},L=di({options:e,sessionId:g,runtime:r??void 0,managedProtocolPayloadRef:oo});await Ot(L,h);let Le=L.actorControl?Yn(g,L.actorControl.callerPath):void 0;Le!==void 0&&L.actorControl?.callerPath==="/root"&&(l=Vn(Le));let k=M(h,e.context?.contextTokenSnapshot),Xa=e.context?.skillScriptRunner?T?.activeTools??_o().map(p=>p.name):(T?.activeTools??_o().map(p=>p.name)).filter(p=>p!=="run_skill_script"),no=si(ii(Xa,e.context?.excludeTools),e.context?.toolVisibilityPolicy),za=no.includes(Er),Ya=e.session?.storage,Va=Ar({activeTools:no,sessionId:g,currentAgentId:ie,sessionScope:e.session?.scope,storage:Ya}),S=Ca({loadedExtensionState:Wa,loadedExtensionRecords:ja,activeTools:_r(So(no,!1),Va),modelSelection:{provider:d.currentProviderName,model:d.currentModelOverride},thinkingLevel:d.runtimeThinkingLevel}),yt=!1,Tt=i(p=>{yt||(yt=!0,rs(f,_,p))},"emitLiveTurnCompletedOnce"),yn=i(p=>{yt||(yt=!0,is(f,_,p))},"emitLiveTurnFailedOnce"),se,Fe,ae=i(async p=>{p.success?Tt(p.interrupted?"interrupted":"completed"):yn(new Error(p.errorMetadata?.lastError??"KodaX run failed"));let x=Mo(p.managedProtocolPayload,oo.current),z=eo(S,{includeUnchanged:!1}),A=x||z?{...p,...x?{managedProtocolPayload:x}:{},...z?{runtimeSessionSnapshot:z}:{}}:p;if(se!==void 0){let G=A.artifactLedger?.filter($=>$.kind==="check_result")??[];try{await se.complete(G.length===0?{status:"cancelled",summary:A.lastText,evidence:[]}:{status:A.success?"succeeded":"failed",summary:A.lastText,evidence:G.map($=>({ref:`artifact:${$.id}`,requestedGrade:"verified",source:"environment",observedAt:$.timestamp}))}),await se.close()}catch($){O("[memory:episode-finalize:error]",{error:$ instanceof Error?$.message:String($)})}}if(q!==void 0)try{await ps(e,N,q,g)}catch(G){O("[memory:review-inbox:drain-error]",{error:G instanceof Error?G.message:String(G)})}return A},"finalizeManagedProtocolResult");e.sessionControl?._attach({setProvider:i(p=>{S.modelSelection.provider=p},"setProvider"),setModel:i(p=>{S.modelSelection.model=p},"setModel"),setReasoning:i(p=>{S.thinkingLevel=zu(p)},"setReasoning")});let Tn=r?.bindController?.(Fa(S));u=typeof Tn=="function"?Tn:void 0;let Qa=It(e.context?.repoIntelligenceMode),Za=Pt(e.context?.repoIntelligenceMode),Ja=e.context?.repoRoutingSignals?Promise.resolve(e.context.repoRoutingSignals):Qa!=="off"&&(e.context?.executionCwd||e.context?.gitRoot)?Ur({executionCwd:Ga,gitRoot:e.context?.gitRoot??void 0},{mode:Za}).catch(()=>null):Promise.resolve(null),[,xt]=await Promise.all([r?.hydrateSession?.(g),Ja]);ut(f,e,"routing",xt,xt?.activeModuleId?`active_module=${xt.activeModuleId}`:void 0);let Se=await Xi({...e,provider:d.currentProviderName,modelOverride:d.currentModelOverride},t,w,{recentMessages:h.slice(0,-1),sessionErrorMetadata:hn,repoSignals:xt??void 0}),je=await Vt({...e,provider:d.currentProviderName,modelOverride:d.currentModelOverride,effort:d.runtimeThinkingLevel??e.effort},d.runtimeThinkingLevel?{...Se,effort:d.runtimeThinkingLevel}:Se,h.length===1),Ge=0;if(q!==void 0&&Re!==void 0){se=await ri({controlPlane:q,initialMemoryPack:Re,sourcePolicy:ks,persistOutcomeDigest:i(async x=>{await sr(N,x),await Go(e,g,x)},"persistOutcomeDigest"),reviewEpisode:i(async(x,z)=>{if(q===void 0)return;let A=await q.reviewEpisode(x,z);if(z.aborted)return;let G=new Date().toISOString();await ar(N,x.reviewKey,A.proposalIds),await Xo(e,g,{reviewKey:x.reviewKey,proposalIds:A.proposalIds,completedAt:G}),A.appliedProposalIds.length>0&&f.onMemoryNotice?.({episodeId:x.id,summaries:A.plan.actions.filter($=>A.appliedProposalIds.some(Ue=>Ue.includes("memory-review-"))).map($=>$.summary).slice(0,3),proposalIds:A.appliedProposalIds})},"reviewEpisode"),onTrace:i(x=>{if(x.type==="memory.decision"){Ts(x.receipt),O("[memory:decision]",{receiptId:x.receipt.id,policyVersion:x.receipt.policyVersion,candidateRefs:x.receipt.candidateRefs,selectedRefs:x.receipt.selectedRefs,injectedRefs:x.receipt.injectedRefs});return}O(`[memory:${x.type}]`,{key:x.key,detail:x.detail??null})},"onTrace")}).startSession({identity:N,objective:t}),za&&(S.activeTools=So(S.activeTools,!0),L.memoryRecall=Cr(se,()=>Fe===void 0?void 0:{decisionRevision:Fe.revision,...Fe.actionSignature!==void 0?{actionSignature:Fe.actionSignature}:{},throughSequence:Fe.throughSequence}));let p=Yu(t,`task:${Se.decision.primaryTask}`,++Ge);p!==void 0&&se.observe(p)}let xn=0,pe=i((p,x)=>(k=ds(f,{iter:p,maxIter:m,messages:h,currentSnapshot:k,snapshotOverride:x}),k),"emitIterationEnd"),ce=i(()=>Se.decision,"currentRoutingDecision");ss(f,{provider:w.name,sessionId:g}),await R("session:start",{provider:w.name,sessionId:g}),ns(f,_),f.getCostReport&&(f.getCostReport.current=()=>Gn(jn(d.costTracker)));for(let p=0;p<m;p++)try{let x=us(S,e,B);d.currentProviderName=x.providerName,d.currentModelOverride=x.modelOverride,d.runtimeThinkingLevel=x.thinkingLevel;let z=x.provider,A=x.contextWindow,G;if(se!==void 0){let v=gs({objective:t,decisionIntent:Se.decision.primaryTask,actionSignature:`task:${Se.decision.primaryTask}`,todoStore:L.todoStore,observationSequence:Ge});if(Fe=v,p>0){let X=se.recall({decisionRevision:v.revision,objective:t,decisionContext:v.text,decisionIntent:v.decisionIntent,actionSignature:v.actionSignature,throughSequence:v.throughSequence});X!==void 0&&(G=Vu(X.content))}}let $=await Os({options:e,providerName:d.currentProviderName,modelOverride:d.currentModelOverride,thinkingLevel:d.runtimeThinkingLevel,reasoningPlan:Se,messages:h}),Ue=$.effectiveReasoningPlan;je=$.currentExecution,await R("turn:start",{sessionId:g,iteration:p+1,maxIter:m}),ls(f,p,m);let Be=await Da({provider:d.currentProviderName,model:d.currentModelOverride,reasoningMode:Ue.effort,systemPrompt:je.systemPrompt});if(Be.blockedReason)throw new Error(Be.blockedReason);d.currentProviderName=Be.provider,d.currentModelOverride=Be.model,S.modelSelection.provider=d.currentProviderName,S.modelSelection.model=d.currentModelOverride,d.runtimeThinkingLevel=Be.reasoningMode,S.thinkingLevel=d.runtimeThinkingLevel;let K=ot(d.currentProviderName);A=At(B,K,d.currentModelOverride);let Ee=d.runtimeThinkingLevel??Ue.effort,ro=d.currentModelOverride??K.getModel(),io=nr(d.currentProviderName,ro);if(Ee!==void 0&&io.length>0){let v=ho({provider:d.currentProviderName,model:ro,desiredEffort:Ee}).effort;v!==void 0&&io.includes(v)&&(Ee=ho({provider:d.currentProviderName,model:ro,desiredEffort:Ee,rejectedEfforts:io}).effort??"none")}let so={...je.providerReasoning,enabled:Ee!=="none",effort:Ee},{effectiveSystemPrompt:ge}=Ns({providerName:d.currentProviderName,model:d.currentModelOverride,provider:K,prompt:t,effectiveOptions:je.effectiveOptions,reasoningMode:Nn(Ee)??"auto",taskType:Ue.decision.primaryTask,executionMode:Ue.decision.recommendedMode,baseSystemPrompt:Be.systemPrompt});Xn(je.effectiveOptions.context?.inputArtifacts??[],{provider:d.currentProviderName,model:d.currentModelOverride}),Yo(K,d.currentProviderName),await R("provider:selected",{provider:d.currentProviderName,model:d.currentModelOverride});let bt=new Qt,vn=bt.tracker,{resilienceCfg:vt,recoveryCoordinator:ao}=Bs(d.currentProviderName,K,vn,e.timeouts),kn=vt.requestTimeoutMs,ec=vt.streamIdleTimeoutMs,U=h,b,he=0,Rn=Kr(L),kt=ci(S.activeTools,e.context?.repoIntelligenceMode,e.context?.managedProtocolEmission?.enabled===!0,r?.hasCapabilityProvider?.("mcp")??!!r,e.context?.toolConstructionMode,Rn,e.selfManual?.productName,e.context?.agentExecutorPlane!==void 0),wn=Jt({sessionId:g,turnId:_.turnId,provider:d.currentProviderName,model:d.currentModelOverride??K.getModel(),profile:"report_only",contextWindow:A,systemPrompt:ge,toolDefinitions:kt,messages:U}),Xe=fa(wn),tc={...wn,profile:Xe},Sn=ha({tools:kt,budget:tc,profile:Xe,bridgeAvailable:pa(kt),nativeDeferredAvailable:!1,unlockedDeferredTools:Rn}),ze=ga(kt,Sn),co=K.getEffectiveMaxOutputTokens(d.currentModelOverride),oc=Jt({sessionId:g,turnId:_.turnId,provider:d.currentProviderName,model:d.currentModelOverride??K.getModel(),profile:Xe,contextWindow:A,systemPrompt:ge,toolDefinitions:ze,messages:U}),En=Math.max(lt(h,k),oc.usedTokens),nc=vr({messages:h,compactionConfig:B,contextWindow:A,currentTokens:En,reservedResponseTokens:co}),Ye=await Ra({messages:h,needsCompact:nc,compactConsecutiveFailures:d.compactConsecutiveFailures,compactionConfig:B,provider:K,model:d.currentModelOverride,contextWindow:A,systemPrompt:ge,toolDefinitions:ze,reasoning:so,currentTokens:En,reservedResponseTokens:co,events:f,compactionAntiThrash:d.compactAntiThrash,emitCompactionDiagnostics:e.context?.contextDiagnostics===!0});h=Ye.messages,U=h,d.compactConsecutiveFailures=Ye.nextCompactConsecutiveFailures,d.compactAntiThrash=Ye.nextCompactionAntiThrash,Ye.contextTokenSnapshot!==void 0&&(k=Ye.contextTokenSnapshot);let lo={...Jt({sessionId:g,turnId:_.turnId,provider:d.currentProviderName,model:d.currentModelOverride??K.getModel(),profile:Xe,contextWindow:A,systemPrompt:ge,toolDefinitions:ze,messages:U,reservedResponseTokens:co}),profile:Xe},uo={...Bo(U),currentTokens:Math.max(lt(U,k),lo.usedTokens-lo.tokenBreakdown.reservedResponse)};for(e.context?.contextDiagnostics===!0&&(f.onContextBudgetSnapshot!==void 0||f.onToolExposurePlanned!==void 0)&&(f.onContextBudgetSnapshot?.(lo),f.onToolExposurePlanned?.(Sn));;){he+=1,uo=M(U,uo),bt.beginAttempt(d.currentProviderName,d.currentModelOverride??K.getModel(),U,he,!1);let v=Ds({hardTimeoutMs:kn,idleTimeoutMs:ec,streamMaxDurationMs:K.getStreamMaxDurationMs?.(d.currentModelOverride)??0,callerAbortSignal:e.abortSignal}),X=v.retryTimeoutController,Qe=v.retrySignal,wt=v.resetIdleTimer,Ze=jt(U,ge);O("[resilience:request]",{provider:d.currentProviderName,attempt:he,fallbackActive:!1,payloadBytes:Ze,payloadBucket:Gt(Ze),lastToolErrorCode:S.lastToolErrorCode,lastToolResultBytes:S.lastToolResultBytes});try{let me=Ls({events:f,boundaryTracker:vn,streamTimers:v,emitActiveExtensionEvent:R,providerName:d.currentProviderName}),le=i(W=>{d.costTracker=Kn(d.costTracker,{provider:W.provider,waitMs:W.waitMs,reason:W.reason,source:W.source}),me.onRetryAfter?.(W)},"wrappedRetryAfter");b=await K.stream(U,ze,ge,so,{...me,onRetryAfter:le,modelOverride:d.currentModelOverride,ephemeralSuffix:G,signal:Qe},Qe),h=U;break}catch(me){let le=me instanceof Error?me:new Error(String(me));le=await $s(le,X,e.abortSignal);let W=bt.inferFailureStage(),{decision:H}=Hs({error:le,failureStage:W,attempt:he,events:f,resilienceCfg:vt,recoveryCoordinator:ao});if(H.shouldUseNonStreaming){let fe=jt(U,ge);O("[resilience:fallback]",{provider:d.currentProviderName,attempt:he,payloadBytes:fe,payloadBucket:Gt(fe)});let go=await qs({events:f,streamProvider:K,providerMessages:U,activeToolDefinitions:ze,effectiveSystemPrompt:ge,effectiveProviderReasoning:so,callerAbortSignal:e.abortSignal,modelOverride:d.currentModelOverride,ephemeralSuffix:G,hardTimeoutMs:kn,boundarySession:bt,emitActiveExtensionEvent:R,providerName:d.currentProviderName,attempt:he,clearStreamTimers:v.clearAll});if(go.ok){b=go.result,h=U;break}le=go.error}if(H.action==="sanitize_thinking_and_retry"){let fe=ao.executeRecovery(U,H);Bt(H.action,fe),U=fe.messages,v.clearAll(),he-=1,await Io(H.delayMs,e.abortSignal);continue}if(H.action==="manual_continue"||he>=vt.maxRetries)throw h=U,le;let St=ao.executeRecovery(U,H);Bt(H.action,St),U=St.messages,v.clearAll(),await Io(H.delayMs,e.abortSignal);continue}finally{v.clearAll()}}Ke(f),await R("stream:end",void 0),b.usage&&(d.costTracker=Wn(d.costTracker,{provider:d.currentProviderName,model:d.currentModelOverride??"unknown",inputTokens:b.usage.inputTokens,outputTokens:b.usage.outputTokens,cacheReadTokens:b.usage.cachedReadTokens,cacheWriteTokens:b.usage.cachedWriteTokens})),d.lastText=b.textBlocks.map(v=>v.text).join(" ");let Cn=Bo(h,b.usage),Ve=Cn.source==="api"?Cn:M(h,uo),_n=ai(S.activeTools,e.context?.repoIntelligenceMode,r?.hasCapabilityProvider?.("mcp")??!!r,e.context?.toolConstructionMode,e.context?.agentExecutorPlane!==void 0);b={...b,toolBlocks:La(b.toolBlocks,_n)};let rc=b.toolBlocks.filter(v=>re(v.name)),[Rt,sm]=dt(d.lastText);if(Rt){if(await ht(g,d.lastText,S,{hadToolCalls:!1,success:!0,signal:Rt}),gt(h,S)){k=M(h,Ve),await R("turn:end",{sessionId:g,iteration:p+1,lastText:d.lastText,hadToolCalls:!1,signal:Rt});continue}if(Rt==="COMPLETE")return pe(p+1,Ve),await R("turn:end",{sessionId:g,iteration:p+1,lastText:d.lastText,hadToolCalls:!1,signal:"COMPLETE"}),Tt("completed"),Xt(f),await R("complete",{success:!0,signal:"COMPLETE"}),ae({success:!0,lastText:d.lastText,signal:"COMPLETE",messages:h,sessionId:g,routingDecision:ce(),contextTokenSnapshot:k,limitReached:!1})}let ic=an([...b.thinkingBlocks,...b.textBlocks,...rc]);h.push({role:"assistant",content:ic,turnId:_.turnId,timestamp:new Date().toISOString()});let An=ki(h,b.usage),Y=An.source==="api"?An:M(h,Ve);k=Y;let mo=wa({result:b,messages:h,maxTokensRetryCount:d.maxTokensRetryCount,completedTurnTokenSnapshot:Y,events:f});if(d.maxTokensRetryCount=mo.nextMaxTokensRetryCount,mo.outcome==="continue"){k=mo.nextContextTokenSnapshot;continue}let fo=Sa({result:b,lastText:d.lastText,messages:h,continueAttempted:d.managedProtocolContinueAttempted,options:e,emittedManagedProtocolPayload:oo.current,completedTurnTokenSnapshot:Y});if(d.managedProtocolContinueAttempted=fo.nextContinueAttempted,fo.outcome==="continue"){k=fo.nextContextTokenSnapshot;continue}let Mn=$e(b.stopReason);if(Mn==="refused"?f.onTextDelta?.(`
326
326