@kodax-ai/kodax 0.7.97-alpha.5 → 0.7.97-alpha.6

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 (96) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +15 -2
  3. package/README_CN.md +11 -0
  4. package/dist/chunks/{agent-LWDHPWKV.js → agent-Z2YSHTJ5.js} +1 -1
  5. package/dist/chunks/argument-completer-MHCQY5C7.js +2 -0
  6. package/dist/chunks/{chunk-XPH33F3A.js → chunk-A3YY6JUN.js} +2 -2
  7. package/dist/chunks/{chunk-WTX6GRSV.js → chunk-DTG3ZF5R.js} +2 -2
  8. package/dist/chunks/{chunk-U34QKQNI.js → chunk-MRZ223W7.js} +1 -1
  9. package/dist/chunks/{chunk-CF4B36EZ.js → chunk-MWIDZ2GQ.js} +2 -2
  10. package/dist/chunks/{chunk-QDNDPIDD.js → chunk-NOJ3W5PC.js} +1 -1
  11. package/dist/chunks/{chunk-KDQREOAJ.js → chunk-PRQEFTX5.js} +1 -1
  12. package/dist/chunks/{chunk-F7TCQL2L.js → chunk-QFIMF7II.js} +2 -2
  13. package/dist/chunks/{chunk-IUTBOGEK.js → chunk-R7YXI7AB.js} +137 -137
  14. package/dist/chunks/chunk-RLINWRJJ.js +351 -0
  15. package/dist/chunks/{chunk-WZWVU5LK.js → chunk-RRCIJ234.js} +2 -2
  16. package/dist/chunks/{chunk-STB66YFC.js → chunk-SQONUELA.js} +1 -1
  17. package/dist/chunks/{chunk-7RLU6XIU.js → chunk-SR67IEBP.js} +1 -1
  18. package/dist/chunks/{chunk-3XIY3OYT.js → chunk-UGNSAKIT.js} +1 -1
  19. package/dist/chunks/{chunk-62V3CQH4.js → chunk-UHC66D7T.js} +142 -142
  20. package/dist/chunks/{chunk-2E3TJ7KO.js → chunk-VT6MCIE5.js} +1 -1
  21. package/dist/chunks/{chunk-ICCDQVLL.js → chunk-WILX5FJH.js} +15 -15
  22. package/dist/chunks/{chunk-6ERRCDWZ.js → chunk-WJL25O6B.js} +1 -1
  23. package/dist/chunks/{chunk-5W2ZCXOG.js → chunk-WNSCGMP4.js} +1 -1
  24. package/dist/chunks/{chunk-TZ2NQZE2.js → chunk-XEBZJLCW.js} +1 -1
  25. package/dist/chunks/{chunk-SYDTD36A.js → chunk-XL2N3RDM.js} +1 -1
  26. package/dist/chunks/{chunk-A5KR5LCP.js → chunk-XPEKJKPG.js} +1 -1
  27. package/dist/chunks/chunk-YXRXHHFQ.js +497 -0
  28. package/dist/chunks/{client-YND6BJUV.js → client-76JHO3LB.js} +1 -1
  29. package/dist/chunks/{compaction-config-6VJ7HZOV.js → compaction-config-HTYGVGD7.js} +1 -1
  30. package/dist/chunks/{construction-bootstrap-UCWFQ5OM.js → construction-bootstrap-SW7V7RX6.js} +1 -1
  31. package/dist/chunks/{dist-THC5GMJ2.js → dist-C627SSXJ.js} +1 -1
  32. package/dist/chunks/host-LIWMO7QQ.js +2 -0
  33. package/dist/chunks/readline-helpers-WQAT4CAF.js +2 -0
  34. package/dist/chunks/{run-manager-FPX6KT6U.js → run-manager-5O53IGLW.js} +1 -1
  35. package/dist/chunks/{tool-dispatch-PB5MOVLY.js → tool-dispatch-FH6TSX64.js} +1 -1
  36. package/dist/chunks/{utils-Z6ZXMX6X.js → utils-RNKK4N7M.js} +1 -1
  37. package/dist/index.d.ts +18 -18
  38. package/dist/index.js +1 -1
  39. package/dist/kodax_bootstrap.js +1 -1
  40. package/dist/kodax_cli.js +1401 -1401
  41. package/dist/kodax_resume.js +31 -31
  42. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  43. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  44. package/dist/native/win32-x64/manifest.json +2 -2
  45. package/dist/sandbox-network-broker.js +85 -85
  46. package/dist/sdk-a2a.d.ts +13 -13
  47. package/dist/sdk-a2a.js +1 -1
  48. package/dist/sdk-agent.d.ts +16 -14
  49. package/dist/sdk-agent.js +1 -1
  50. package/dist/sdk-client.d.ts +6 -6
  51. package/dist/sdk-client.js +1 -1
  52. package/dist/sdk-coding.d.ts +20 -20
  53. package/dist/sdk-coding.js +1 -1
  54. package/dist/sdk-experimental-memory.d.ts +2 -2
  55. package/dist/sdk-experimental-memory.js +1 -1
  56. package/dist/sdk-mcp.d.ts +2 -2
  57. package/dist/sdk-mcp.js +1 -1
  58. package/dist/sdk-repl.d.ts +17 -17
  59. package/dist/sdk-repl.js +1 -1
  60. package/dist/sdk-runtime.d.ts +16 -14
  61. package/dist/sdk-runtime.js +1 -1
  62. package/dist/sdk-sandbox.js +1 -1
  63. package/dist/sdk-session.d.ts +7 -7
  64. package/dist/sdk-session.js +1 -1
  65. package/dist/sdk-skills.js +1 -1
  66. package/dist/semantic-worker.js +63 -63
  67. package/dist/types-chunks/{bash-prefix-extractor.d-CEy7z-Zn.d.ts → bash-prefix-extractor.d-DFH463j2.d.ts} +5 -3
  68. package/dist/types-chunks/{capsule.d-CuGifYAb.d.ts → capsule.d-CwpmHGFB.d.ts} +4 -4
  69. package/dist/types-chunks/{client-contract-C6EMeiD-.d.ts → client-contract-CRm9ZpL2.d.ts} +6 -2
  70. package/dist/types-chunks/{controller.d-35RtCNle.d.ts → controller.d-B4GyqWri.d.ts} +1 -1
  71. package/dist/types-chunks/{controller.d-0iRe3htV.d.ts → controller.d-P3H97ddz.d.ts} +12 -4
  72. package/dist/types-chunks/{history-retrieval.d-DSM17KRG.d.ts → history-retrieval.d-BzKWDjzG.d.ts} +1 -1
  73. package/dist/types-chunks/{manager.d-nZ57Ps91.d.ts → manager.d-C8OlTe2J.d.ts} +4 -1
  74. package/dist/types-chunks/{manifest.d-OTRwPHVt.d.ts → manifest.d-COreAnXG.d.ts} +1 -1
  75. package/dist/types-chunks/{oauth-login.d-6i-vidxv.d.ts → oauth-login.d-DsvsksTD.d.ts} +2 -0
  76. package/dist/types-chunks/{public-api.d-BIbLLBhl.d.ts → public-api.d-BLmqDi73.d.ts} +22 -4
  77. package/dist/types-chunks/{review-inbox.d-CyVNw-vt.d.ts → review-inbox.d-BTLDdpG2.d.ts} +4 -0
  78. package/dist/types-chunks/{review-packet.d-Cili3QF2.d.ts → review-packet.d-Crra1Q7t.d.ts} +1 -1
  79. package/dist/types-chunks/{run-manager.d-MHxLmLqw.d.ts → run-manager.d-DmS1edk4.d.ts} +5 -5
  80. package/dist/types-chunks/{runtime-client-info-DkjsCCbS.d.ts → runtime-client-info-BBBxdU8V.d.ts} +2 -2
  81. package/dist/types-chunks/{sdk-session-CPHF0o9h.d.ts → sdk-session-DipY_CCd.d.ts} +2 -2
  82. package/dist/types-chunks/{trusted-repl-entry-w_5uQSZq.d.ts → trusted-repl-entry-B1cb7lAn.d.ts} +7 -7
  83. package/dist/types-chunks/{types.d--WO3A2u5.d.ts → types.d-Jxj49rqO.d.ts} +2 -2
  84. package/dist/types-chunks/{types.d-gmpRHyNp.d.ts → types.d-NyCB6ztO.d.ts} +1 -1
  85. package/dist/types-chunks/{utils.d-gX4cGt04.d.ts → utils.d-Bt6USYa5.d.ts} +6 -6
  86. package/docs/CLIENT_CONTRACT.md +8 -2
  87. package/docs/SDK_MIGRATION.md +7 -1
  88. package/docs/SPACE_SDK_SEAMS.md +7 -1
  89. package/package.json +1 -1
  90. package/public_docs/README.md +3 -3
  91. package/public_docs/sdk/embedder-guide.md +48 -4
  92. package/dist/chunks/argument-completer-LMS266JQ.js +0 -2
  93. package/dist/chunks/chunk-FHWRUQE3.js +0 -351
  94. package/dist/chunks/chunk-PTESSP67.js +0 -497
  95. package/dist/chunks/host-BN6ZVWFJ.js +0 -2
  96. package/dist/chunks/readline-helpers-OR6WAS7M.js +0 -2
package/CHANGELOG.md CHANGED
@@ -8,6 +8,31 @@ All notable changes to this project will be documented in this file.
8
8
 
9
9
  ---
10
10
 
11
+ ## [0.7.97-alpha.6] - 2026-10-15
12
+
13
+ Sixth alpha of the v0.7.97 line: shared-Host startup runs historical child
14
+ recovery once under the owner fences and projects canonical Actor metadata
15
+ during preflight, and `kodax -r`/Host/SDK Session lists order by genuine
16
+ recent message activity with an optional `lastMessageAt`. New REPL Sessions
17
+ stay Host-local drafts until their first accepted input is saved (Issue 368),
18
+ restored views preserve user image attachments, and concurrent resume
19
+ launchers recover from transient inspection conflicts while refreshing an
20
+ older Host (Issue 369). Every v0.7.96 stable and v0.7.97-alpha.1 through
21
+ alpha.5 contract is retained. npm publication remains a manual maintainer
22
+ action.
23
+
24
+ ### Fixed
25
+
26
+ - Retry transient initialization and read-only inspection failures during concurrent CLI/SDK Host refresh after releasing temporary clients. Account for slow preflight duration in contention backoff, retain the original deadline, and never replay shutdown or business requests (Issue 369).
27
+ - Avoid repeated historical process sweeps during shared-Host startup and exit. Recover under the Host/storage owner fences, retain exact local-child final cleanup, batch Windows identity observations, and read canonical Actor metadata for preflight without materializing Session transcripts.
28
+ - Order `kodax -r`, Host and SDK Session lists by genuine recent message activity. Preserve creation time, compaction/fork provenance and metadata-only writes; expose optional `lastMessageAt`, retain creation-based `before`, and continue new cursors after anchor deletion or activity changes.
29
+ - Keep new REPL Sessions as Host-local drafts until the first accepted user input is saved. Preserve draft settings and Actor CAS in memory, avoid empty history records after exit or rejected input, and persist settings on admission. CLI requires `sessionDrafts:1`; explicit durable SDK creation keeps its existing semantics.
30
+ - Save initial draft inputs and settings before low-level Runs dispatch, preserve settings after restart, and reuse canonical inputs when retrying failed promotion instead of duplicating them.
31
+ - Declare `relationship_scan.depth` as an integer range from 1 to 3 for cross-protocol tool schema compatibility, preserving numeric inputs and stream completion checks.
32
+ - Preserve user image references when restoring canonical accepted inputs into the public Session view. Resolve attachments by the original inputId, retaining item identity, order and text, including repeated identical prompts with different images.
33
+
34
+ ---
35
+
11
36
  ## [0.7.97-alpha.5] - 2026-10-13
12
37
 
13
38
  Fifth alpha of the v0.7.97 line: FEATURE_301's unified Artifact SDK and
package/README.md CHANGED
@@ -789,6 +789,19 @@ starts, upgrades, or waits. See
789
789
  Every v0.7.96 stable and v0.7.97-alpha.1/alpha.2/alpha.3 contract is
790
790
  retained.
791
791
 
792
+ **v0.7.97-alpha.6 release:** Streamlines shared-Host startup — historical
793
+ child recovery runs once under the owner fences and preflight projects
794
+ canonical Actor metadata without loading transcripts — and orders `kodax -r`,
795
+ Host, and SDK Session lists by genuine recent message activity with an
796
+ optional `lastMessageAt`. New REPL Sessions stay Host-local drafts until the
797
+ first accepted input is saved (Issue 368, the CLI requires `sessionDrafts:1`),
798
+ restored views preserve user image attachments, and concurrent resume
799
+ launchers recover from transient inspection conflicts while refreshing an
800
+ older Host without replaying shutdown or business requests (Issue 369). See
801
+ the [v0.7.97-alpha.6 release notes](docs/release.md#v0797-alpha6-release-preparation).
802
+ Every v0.7.96 stable and v0.7.97-alpha.1 through alpha.5 contract is
803
+ retained.
804
+
792
805
  **v0.7.97-alpha.5 release:** Ships FEATURE_301's unified Artifact SDK and
793
806
  format backends — nine SDK operations (`prepare`, `readEvidence`,
794
807
  capabilities/diagnostics), native PDF, exact PNG/JPEG/WebP/SVG, candidate
@@ -1798,7 +1811,7 @@ kodax --session my-project "Summarize it"
1798
1811
  kodax --session my-project "How should I fix the first issue?"
1799
1812
 
1800
1813
  # Session management
1801
- kodax -r # Search, page, and select a non-empty session
1814
+ kodax -r # Search and page sessions, most recent conversation first
1802
1815
  kodax -r <session-id> # Resume a known session directly
1803
1816
  kodax -r "Review runtime" # Resume a unique exact title; duplicates open the picker
1804
1817
  kodax --session list # List up to 50 non-empty sessions
@@ -2061,7 +2074,7 @@ This development tree exposes 13 SDK subpaths plus the root. Shared product
2061
2074
  applications use `@kodax-ai/kodax/client`; independent libraries and trusted Host
2062
2075
  APIs remain available through the other subpaths. See the [Client contract](docs/CLIENT_CONTRACT.md)
2063
2076
  and [SDK migration guide](docs/SDK_MIGRATION.md). This documentation was checked
2064
- against package version `0.7.97-alpha.5`; npm publication is separate from
2077
+ against package version `0.7.97-alpha.6`; npm publication is separate from
2065
2078
  the current development-tree contract.
2066
2079
 
2067
2080
  ```bash
package/README_CN.md CHANGED
@@ -314,6 +314,15 @@ SDK 系统代码契约更新,但没有放宽 shell/sandbox 的 fail-closed 边
314
314
  [v0.7.97-alpha.4 发布清单](docs/release.md#v0797-alpha4-release-preparation)。
315
315
  所有 v0.7.96 稳定与 v0.7.97-alpha.1/alpha.2/alpha.3 契约全部保留。
316
316
 
317
+ **v0.7.97-alpha.6 发布**:精简共享 Host 启动——历史子进程恢复在 owner fence
318
+ 下只运行一次,预检投影规范 Actor 元数据而不加载 transcript;`kodax -r`、Host
319
+ 与 SDK 的 Session 列表按真实最近消息活动排序并暴露可选 `lastMessageAt`。
320
+ 新 REPL Session 在首个被接受输入保存前保持 Host 本地草稿(Issue 368,CLI 要求
321
+ `sessionDrafts:1`);恢复视图保留用户图片附件;并发 resume 启动器在刷新旧 Host
322
+ 时从瞬时检查冲突中恢复,不重放停机或业务请求(Issue 369)。
323
+ 详见 [v0.7.97-alpha.6 发布清单](docs/release.md#v0797-alpha6-release-preparation)。
324
+ 所有 v0.7.96 稳定与 v0.7.97-alpha.1 至 alpha.5 契约全部保留。
325
+
317
326
  **v0.7.97-alpha.5 发布**:交付 FEATURE_301 统一 Artifact SDK 与格式后端——
318
327
  九项 SDK 操作(`prepare`、`readEvidence`、能力/诊断)、原生 PDF、精确
319
328
  PNG/JPEG/WebP/SVG、DOCX 候选分页及本地 HTML/SMIL 捕获,独立 Node 与共享
@@ -1404,6 +1413,8 @@ stdin 并立即回到原 shell。历史回放保留每条持久 event 的原始
1404
1413
  使用 session-root Actor queue scope,避免一个 session/child 的待处理输入被另一个
1405
1414
  REPL 显示、唤醒或消费。
1406
1415
 
1416
+ 当前源码中,`kodax -r` 按最近真实对话消息排序并显示对应时间,旧记录缺少可靠消息时间时回退创建时间。SDK 的 `lastMessageAt`、Host 列表与选择器共用规则;标题、设置、Actor 保存和压缩不刷新对话时间。共享 Host 在取得所有权后统一恢复历史进程,连接客户端不重复清扫;加载提示继续使用统一启动进度契约。
1417
+
1407
1418
  **外部 Agent SDK plane(FEATURE_258,v0.7.67)**:`/agent` 导出协议中立的 executor、registration、policy、credential broker、artifact policy、catalog 和 durable task 契约;`/runtime` 通过 `admin.agentRegistrations`、`agents`、`agentTasks` 向 embedded 与 daemon client 提供同一组 DTO API。Executor factory 是宿主函数,只能装入 inline owner,或在创建新的 in-process daemon owner 时装入;不能通过既有 daemon 连接或 Runtime Worker 边界注入。Plane 关闭后是终态:未完成的 wait 和后续所有服务调用都会拒绝;受限 Workflow 脚本会完整校验并传递 `phase` 与外部 `target`。完整所有权、注册、preflight、启动/等待/继续/取消/对账和安全边界见 [SDK Embedder Guide §18](public_docs/sdk/embedder-guide.md#18-external-agent-executor-plane-feature_258-v0767)。
1408
1419
 
1409
1420
  **成本受控 Workflow SDK(FEATURE_259,v0.7.67)**:SDK 调用方用 run-scoped `modelTiers` 与 `workflow.maxConcurrency` 配置路由和并发,workflow 作者只表达 `fast` / `balanced` / `deep` 语义意图。terminal workflow event 回显 tier/source/fallback/usage/duration,持久化 `run.json.efficiencyReport` 给出 token coverage、role/tier 启动数、packet-read 拓扑、review wave 和 quality gate 结果。完整配置与遥测读取方式见 [SDK Embedder Guide §20](public_docs/sdk/embedder-guide.md#20-cost-disciplined-workflow-routing-and-telemetry-feature_259-v0767)。
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Aa as e,Ba as f,Ra as g,Ta as h,mb as i,nb as j,wb as k,za as d}from"./chunk-XPH33F3A.js";import{a as c}from"./chunk-STB66YFC.js";import"./chunk-V26LAWJY.js";import"./chunk-ICCDQVLL.js";import"./chunk-IUTBOGEK.js";import"./chunk-6ERRCDWZ.js";import"./chunk-3XIY3OYT.js";import{Rb as a,Sb as b}from"./chunk-62V3CQH4.js";import"./chunk-YVBBU6K5.js";import"./chunk-2AM3FRQ7.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,k as runKodaX,j as saveRequiredSessionSnapshot,i as saveSessionSnapshot,a as validateAndFixToolHistory};
2
+ import{Aa as e,Ba as f,Ra as g,Ta as h,mb as i,nb as j,wb as k,za as d}from"./chunk-A3YY6JUN.js";import{a as c}from"./chunk-SQONUELA.js";import"./chunk-V26LAWJY.js";import"./chunk-WILX5FJH.js";import"./chunk-R7YXI7AB.js";import"./chunk-WJL25O6B.js";import"./chunk-UGNSAKIT.js";import{Tb as a,Ub as b}from"./chunk-UHC66D7T.js";import"./chunk-YVBBU6K5.js";import"./chunk-2AM3FRQ7.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,k as runKodaX,j as saveRequiredSessionSnapshot,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{$a as a,ab as b}from"./chunk-QFIMF7II.js";import"./chunk-ZQYWDI4O.js";import"./chunk-MWIDZ2GQ.js";import"./chunk-VT6MCIE5.js";import"./chunk-RRCIJ234.js";import"./chunk-A3YY6JUN.js";import"./chunk-SQONUELA.js";import"./chunk-NOJ3W5PC.js";import"./chunk-V26LAWJY.js";import"./chunk-DTG3ZF5R.js";import"./chunk-WILX5FJH.js";import"./chunk-R7YXI7AB.js";import"./chunk-WJL25O6B.js";import"./chunk-UGNSAKIT.js";import"./chunk-UHC66D7T.js";import"./chunk-YVBBU6K5.js";import"./chunk-2AM3FRQ7.js";import"./chunk-ONUPGMER.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{A as Hn,D as Bn,G as Wa,H as za,a as G,b as Ma,c as Oa,d as Na,e as tr,f as Ct,g as K,h as Da,i as nr,j as La,k as or,l as rr,m as $a,n as et,o as tt,p as Fa,q as It,r as ir,s as Ua,t as ja,u as Ha,v as Ba,x as Ka}from"./chunk-STB66YFC.js";import{a as qa}from"./chunk-V26LAWJY.js";import{e as Ea,k as _a,m as Aa,n as Pa,q as Ga,r as Xa,s as Va,t as Ya,z as Qa}from"./chunk-ICCDQVLL.js";import{Ad as Ta,Ca as ta,Ea as na,Ha as Ln,Ja as oa,Nb as ua,T as Xs,Ta as ra,Td as ba,U as Vo,Ud as jn,V as Vs,W as Ys,Wd as wa,X as Yo,Xb as Un,Y as Qs,Z as Js,Za as ia,_b as ma,a as ne,ab as sa,ba as Zs,bc as fa,ca as ea,eb as $n,ee as ka,fb as Fn,ge as Ra,ib as aa,ja as Dn,kc as pa,lb as ca,lc as ga,mb as da,me as er,nb as la,ne as Sa,oe as Ca,pc as ha,pe as Ia,q as Nn,qc as Qo,rc as ya,rd as xa,u as Bs,vd as Jo,w as qs,wd as Zo,x as Ks,xd as va,yd as U,zd as en}from"./chunk-IUTBOGEK.js";import{f as Ws,g as zs,h as Gs}from"./chunk-6ERRCDWZ.js";import{$f as $s,Ad as gs,Ae as Rs,Af as Es,Bd as hs,Bf as _s,Ca as os,Cd as ys,Cf as As,Da as Uo,Dd as xs,Ed as qo,Ef as Ps,Ff as Ms,Gd as vs,Gf as Os,Hf as Ns,Kf as Ds,La as wt,Lf as Zt,Mf as Mn,Pd as kt,Rb as Ze,Sa as Yt,Sb as Qt,Ta as In,Vb as cs,Wa as En,_f as Ls,bc as ds,bd as ls,be as Pn,bg as Fs,ce as Rt,dg as Go,ee as St,ef as Wo,eg as Xo,f as $e,fd as Jt,g as zt,ge as Ts,he as bs,j as Zi,jg as Us,k as D,l as Gt,md as _n,mf as zo,na as es,nd as An,o as _e,q as ge,qf as Ss,r as Xt,s as Vt,sc as Bo,sd as us,t as Je,td as ms,ud as fs,ug as js,v as _,va as ts,vg as Hs,wa as ns,wf as Cs,x as Cn,xd as ps,xe as Ko,xf as Is,xg as On,ye as ws,ze as ks}from"./chunk-62V3CQH4.js";import{F as Ho,b as rs,d as is,e as ss,j as as,l as jo}from"./chunk-YVBBU6K5.js";import{$a as Xi,Aa as bt,Ab as Qi,B as Oo,Ba as No,Bb as $o,Ca as zi,Cb as Fo,Da as Do,Eb as Ji,Sa as Gi,U as Le,V as ji,Z as Hi,f as Fi,ga as Bi,ia as Sn,ib as Vi,ja as qi,m as vt,ma as Tt,mb as Wt,s as Qe,t as Rn,u as Bt,v as qt,va as Ki,vb as Lo,x as Ui,ya as Kt,za as Wi,zb as Yi}from"./chunk-2AM3FRQ7.js";import{a as i}from"./chunk-ONUPGMER.js";import{randomUUID as jl}from"node:crypto";var vu={plan:"Read-only planning. Do not perform ordinary file mutations.","accept-edits":"Text edits use host write roots. External operations require explicit host authorization.",auto:"Auto[LLM] reviews operations requiring host authorization. An allow applies only to that exact operation and target; it is not a directory-wide grant.","full-access":"Ordinary local text targets may be outside the workspace. Shell runs on the host without sandbox or approval prompts."};function qn(e,t){let n=t?.resolveShellPermissionMode?.();return n===void 0?e:`${e}
2
+ import{A as Hn,D as Bn,G as Wa,H as za,a as G,b as Ma,c as Oa,d as Na,e as tr,f as Ct,g as K,h as Da,i as nr,j as La,k as or,l as rr,m as $a,n as et,o as tt,p as Fa,q as It,r as ir,s as Ua,t as ja,u as Ha,v as Ba,x as Ka}from"./chunk-SQONUELA.js";import{a as qa}from"./chunk-V26LAWJY.js";import{e as Ea,k as _a,m as Aa,n as Pa,q as Ga,r as Xa,s as Va,t as Ya,z as Qa}from"./chunk-WILX5FJH.js";import{Ad as Ta,Ca as ta,Ea as na,Ha as Ln,Ja as oa,Nb as ua,T as Xs,Ta as ra,Td as ba,U as Vo,Ud as jn,V as Vs,W as Ys,Wd as wa,X as Yo,Xb as Un,Y as Qs,Z as Js,Za as ia,_b as ma,a as ne,ab as sa,ba as Zs,bc as fa,ca as ea,eb as $n,ee as ka,fb as Fn,ge as Ra,ib as aa,ja as Dn,kc as pa,lb as ca,lc as ga,mb as da,me as er,nb as la,ne as Sa,oe as Ca,pc as ha,pe as Ia,q as Nn,qc as Qo,rc as ya,rd as xa,u as Bs,vd as Jo,w as qs,wd as Zo,x as Ks,xd as va,yd as U,zd as en}from"./chunk-R7YXI7AB.js";import{f as Ws,g as zs,h as Gs}from"./chunk-WJL25O6B.js";import{Ae as ws,Be as ks,Ca as os,Cd as gs,Ce as Rs,Cf as Es,Da as Uo,Dd as hs,Df as _s,Ed as ys,Ef as As,Fd as xs,Gd as qo,Gf as Ps,Hf as Ms,Id as vs,If as Os,Jf as Ns,La as wt,Mf as Ds,Nf as Zt,Of as Mn,Rd as kt,Sa as Yt,Ta as In,Tb as Ze,Ub as Qt,Wa as En,Xb as cs,ag as Ls,bg as $s,dc as ds,dd as ls,de as Pn,dg as Fs,ee as Rt,f as $e,fg as Go,g as zt,ge as St,gf as Wo,gg as Xo,hd as Jt,ie as Ts,j as Zi,je as bs,k as D,l as Gt,lg as Us,na as es,o as _e,od as _n,of as zo,pd as An,q as ge,r as Xt,s as Vt,sf as Ss,t as Je,uc as Bo,ud as us,v as _,va as ts,vd as ms,wa as ns,wd as fs,wg as js,x as Cn,xg as Hs,yf as Cs,zd as ps,ze as Ko,zf as Is,zg as On}from"./chunk-UHC66D7T.js";import{F as Ho,b as rs,d as is,e as ss,j as as,l as jo}from"./chunk-YVBBU6K5.js";import{$a as Xi,Aa as bt,Ab as Qi,B as Oo,Ba as No,Bb as $o,Ca as zi,Cb as Fo,Da as Do,Eb as Ji,Sa as Gi,U as Le,V as ji,Z as Hi,f as Fi,ga as Bi,ia as Sn,ib as Vi,ja as qi,m as vt,ma as Tt,mb as Wt,s as Qe,t as Rn,u as Bt,v as qt,va as Ki,vb as Lo,x as Ui,ya as Kt,za as Wi,zb as Yi}from"./chunk-2AM3FRQ7.js";import{a as i}from"./chunk-ONUPGMER.js";import{randomUUID as jl}from"node:crypto";var vu={plan:"Read-only planning. Do not perform ordinary file mutations.","accept-edits":"Text edits use host write roots. External operations require explicit host authorization.",auto:"Auto[LLM] reviews operations requiring host authorization. An allow applies only to that exact operation and target; it is not a directory-wide grant.","full-access":"Ordinary local text targets may be outside the workspace. Shell runs on the host without sandbox or approval prompts."};function qn(e,t){let n=t?.resolveShellPermissionMode?.();return n===void 0?e:`${e}
3
3
 
4
4
  ## Effective permissions (host authority)
5
5
  Current permission mode: ${n}
@@ -384,7 +384,7 @@ Keep every section concise.`;async function yl(e){let t=e.tokensBefore-e.tokensA
384
384
  `):void 0,lt=Dt.title||bo.slice(0,50)+(bo.length>50?"...":""),si=Dt.errorMetadata,Jl=Dt.loadedExtensionState,Zl=Dt.loadedExtensionRecords,eu=ne(e.context),wo={current:e.context?.managedProtocolEmission?.enabled?er(void 0,void 0):void 0},A=Qa({options:e,sessionId:w,runtime:a??void 0,managedProtocolPayloadRef:wo}),ai=new Map;A.writtenFiles=ai,A.actorControl!==void 0&&(A.actorTurnRef={actorPath:A.actorControl.callerPath,turnId:Z.current.turnId}),await Un(A,b);let Te=A.actorControl?A.actorQueueAgentId??is(A.contextIdentitySessionId??w,A.actorControl.callerPath):void 0;Te!==void 0&&A.actorControl?.callerPath==="/root"&&(u=ss(Te));let ci=i(async g=>{let R=g.map(H=>{let pe=Ac(H.inputArtifacts);return Ho(pe??[],{provider:f.currentProviderName,model:f.currentModelOverride}),{queued:H,inputArtifacts:pe}}),C=cu(g[0]?.id);ti.current={text:g.map(H=>H.content).join(`
385
385
  `),turnId:C},A.actorControl!==void 0&&(A.actorTurnRef={actorPath:A.actorControl.callerPath,turnId:C});let X=new Date().toISOString(),S=R.map(({queued:H,inputArtifacts:pe})=>({role:"user",content:ot(H.content,pe),...H.inputId!==void 0?{inputId:H.inputId}:{},turnId:C,timestamp:X})),N=b.length;b.push(...S);try{let H=bt(S);H&&await H,e.session?.persistedByHost===!1&&await Yr(e,w,{messages:b,title:lt,gitRoot:e.context?.gitRoot??void 0,runtimeSessionState:L})}catch(H){throw b.splice(N,S.length),H}return S},"appendInterruptPrompts"),Ke=i(async g=>{let R=e.context?.interruptInput;if(!R)return!1;let C=rs(),X={agentId:Te,maxPriority:"user",mode:"prompt",predicate:as(C.getSnapshot(),Te)},S=R.consumePendingInputs&&Te===void 0?[]:C.peek(X),N=i((re,F)=>{if(re.length===0)return;let $t={};re.forEach((le,We)=>{let mt=Ds(F[We]);mt!==void 0&&($t[le.id]=mt)}),h.onMidTurnUserMessages?.(re.map(le=>le.content),{queuedMessageIds:re.map(le=>le.id),queuedMessageEntryIds:$t})},"notify");if(S.length>0){let re=await ci(S);C.dequeue(X),N(S,re)}let H=[],pe=!g||A.actorControl&&A.actorControl.callerPath!=="/root"?[]:await R.consumePendingInputs?.(async re=>{H=await ci(re)})??[];return N(pe,H),S.length>0||pe.length>0},"consumeRuntimeInterruptInput"),O=K(b,e.context?.contextTokenSnapshot),ko=pa(a),tu=ga(ko),di=[...I?.activeTools??wa().map(g=>g.name),...ko.map(g=>g.name)],nu=e.context?.skillScriptRunner?di:di.filter(g=>g!=="run_skill_script"),fn=Xa(Ga(nu,e.context?.excludeTools),e.context?.toolVisibilityPolicy,tu),ou=fn.includes(Xs),ru=fn.includes(Ys),iu=e.session?.storage,su=ea({activeTools:fn,sessionId:w,currentAgentId:de,sessionScope:e.session?.scope,storage:iu}),L=Sl({loadedExtensionState:Jl,loadedExtensionRecords:Zl,activeTools:Zs(Yo(Vo(fn,!1),!1),su),modelSelection:{provider:f.currentProviderName,model:f.currentModelOverride},thinkingLevel:f.runtimeThinkingLevel}),pn=new Set,li=i(g=>{let R=Z.current;pn.has(R.turnId)||(pn.add(R.turnId),rr(h,R,g))},"emitLiveTurnCompletedOnce"),au=i(g=>{let R=Z.current;pn.has(R.turnId)||(pn.add(R.turnId),$a(h,R,g))},"emitLiveTurnFailedOnce"),cu=i(g=>(li("completed"),Z.current=nr({sessionId:w,deliveryKind:"queued",promptId:g,contextId:qe.contextId,contextKind:qe.contextKind,parentContextId:qe.parentContextId,agentId:qe.agentId,ownsContextRevision:qe.ownsContextRevision}),or(h,Z.current),Z.current.turnId),"startQueuedLiveTurn"),fe,Pe,ui=[],mi=i(async g=>{let R=er(g.managedProtocolPayload,wo.current),C=go(L,{includeUnchanged:!1}),X=Fo(f.costTracker),S={...g,...f.usageComplete&&X.callCount>0?{usage:{inputTokens:X.totalInputTokens,outputTokens:X.totalOutputTokens,totalTokens:X.totalInputTokens+X.totalOutputTokens,...X.totalCacheReadTokens>0?{cachedReadTokens:X.totalCacheReadTokens}:{},...X.totalCacheWriteTokens>0?{cachedWriteTokens:X.totalCacheWriteTokens}:{}}}:{},writtenFiles:[...ai.values()],...R?{managedProtocolPayload:R}:{},...C?{runtimeSessionSnapshot:C}:{}};if(await an(e,async()=>{if(fe!==void 0&&await gh(fe,S,w,ui),e.context?.completeLearnedSkillOutcomes!==void 0){let N=Er(S.artifactLedger??[]);try{await e.context.completeLearnedSkillOutcomes({sessionId:w,outcome:wd(S.success,N),evidenceRefs:N.length>0?N.map(H=>H.ref):[`host:run-terminal:${w}`]})}catch(H){G("[learning:skill-outcome:error]",{error:H instanceof Error?H.message:String(H)})}}try{await mn?.release()}catch(N){G("[learning:skill-binding-release:error]",{error:N instanceof Error?N.message:String(N)})}}),ye!==void 0){let N=ye;To=To.then(()=>Cr(e,Re,N,"",Date.now()+15e3,ni).then(()=>{})).catch(H=>{G("[memory:review-inbox:drain-error]",{error:H instanceof Error?H.message:String(H)})})}return S},"finalizeManagedProtocolResult"),Se=i(async g=>{let R=await mi(g);try{ir(h)}catch{_({source:"coding:completion-observer",level:"warn",message:"Completion observer failed after result finalization."})}return li(R.interrupted?"interrupted":"completed"),R},"finalizeCompletedProtocolResult");e.sessionControl?._attach({setProvider:i(g=>{L.modelSelection.provider=g},"setProvider"),setModel:i(g=>{L.modelSelection.model=g,e.model=g,e.modelOverride=g},"setModel"),setReasoning:i((g,R)=>{L.thinkingLevel=R===void 0?oh(g):R.effort??Le(Zn({...e,...R,reasoningMode:g}))},"setReasoning")});let fi=a?.bindController?.(Ll(L));l=typeof fi=="function"?fi:void 0;let du=$n(e.context?.repoIntelligenceMode),lu=Fn(e.context?.repoIntelligenceMode),uu=e.context?.repoRoutingSignals?Promise.resolve(e.context.repoRoutingSignals):du!=="off"&&(e.context?.executionCwd||e.context?.gitRoot)?da({executionCwd:eu,gitRoot:e.context?.gitRoot??void 0},{mode:lu}).catch(()=>null):Promise.resolve(null),[,gn]=await Promise.all([a?.hydrateSession?.(w),uu]);cn(h,e,"routing",gn,gn?.activeModuleId?`active_module=${gn.activeModuleId}`:void 0);let ut=await Xc({...e,provider:f.currentProviderName,modelOverride:f.currentModelOverride},t,W,{recentMessages:b.slice(0,-1),sessionErrorMetadata:si,repoSignals:gn??void 0}),Lt=await lo({...e,provider:f.currentProviderName,modelOverride:f.currentModelOverride,effort:f.runtimeThinkingLevel??e.effort},f.runtimeThinkingLevel?{...ut,effort:f.runtimeThinkingLevel}:ut,b.length===1),hn=0,yn=[];if(ye!==void 0&&Nt!==void 0){let g=ye,R=Nt;fe=await an(e,()=>Gs({controlPlane:g,initialMemoryPack:R,sourcePolicy:Ed,...e.memoryRecallRunner!==void 0?{recallRunner:e.memoryRecallRunner}:{},persistOutcomeDigest:i(async C=>{if(C.visibility==="prompt_safe"&&e.session?.storage!==void 0&&vo!==void 0){ni=(await bs(Re,C,{expectedBranchEpoch:vo,persistOwner:i(async S=>so(e,w,C,{jobId:S.jobId}),"persistOwner")})).entry.jobId;return}await so(e,w,C)},"persistOutcomeDigest"),...e.session?.storage===void 0&&e.memoryReviewer!==void 0?{reviewEpisode:i(async(C,X)=>{if(ye===void 0)return;let S=await ye.reviewEpisode(C,X);X.aborted||(h.onMemoryReviewReceipt?.({sessionId:w,reviewKey:C.reviewKey,proposalIds:S.proposalIds,completedAt:new Date().toISOString()}),S.appliedProposalIds.length>0&&h.onMemoryNotice?.({sessionId:w,episodeId:C.id,summaries:S.decisions.filter(N=>N.proposalId!==void 0&&S.appliedProposalIds.includes(N.proposalId)).map(N=>S.plan.actions[N.actionIndex]?.summary).filter(N=>N!==void 0).slice(0,3),proposalIds:S.appliedProposalIds}))},"reviewEpisode")}:{},onTrace:i(C=>{if(C.type==="memory.decision"){Sd(C.receipt),G("[memory:decision]",{receiptId:C.receipt.id,policyVersion:C.receipt.policyVersion,candidateRefs:C.receipt.candidateRefs,selectedRefs:C.receipt.selectedRefs,injectedRefs:C.receipt.injectedRefs});return}G(`[memory:${C.type}]`,{key:C.key,detail:C.detail??null})},"onTrace")}).startSession({identity:Re,objective:t,episodeId:e.context?.learnedSkillBindingId??Z.current.turnId})),ou&&fe!==void 0&&(L.activeTools=Vo(L.activeTools,!0),A.memoryRecall=Vs(fe,()=>Pe===void 0?void 0:{decisionRevision:Pe.revision,...Pe.actionSignature!==void 0?{actionSignature:Pe.actionSignature}:{},throughSequence:Pe.throughSequence})),ru&&fe!==void 0&&(L.activeTools=Yo(L.activeTools,!0),A.memoryManagementIntent=Js({getCurrentUserTurn:i(()=>ti.current,"getCurrentUserTurn"),controlPlane:ye,getPresentedTargets:i(()=>Qs(b),"getPresentedTargets"),onHandledOperation:i(C=>ui.push(C),"onHandledOperation")}))}let pi=0,be=e.context?.goalRuntime,gi=i(async g=>{if(!be||g+1>=v||e.abortSignal?.aborted)return!1;await be.refresh?.();let R=be.lifecycleCtx.getGoal();return!R||R.status!=="active"||be.lifecycleCtx.hasPendingUserInput?.()?!1:(b.push({role:"user",content:be.lifecycleCtx.buildContinuationPrompt(R),_synthetic:!0,timestamp:new Date().toISOString()}),$(g)&&e.context?.interruptInput?.reopenInputWindow(),!0)},"appendGoalContinuation"),Ce,Me=i((g,R)=>(O=Ba(h,{iter:g,maxIter:v,messages:b,currentSnapshot:O,snapshotOverride:R}),O),"emitIterationEnd"),we=i(()=>ut.decision,"currentRoutingDecision"),hi=i(async g=>{e.context?.interruptInput?.closeInputWindow();let R=g instanceof Error?g:new Error(String(g)),C=ns(R);C&&(b=[...C]);let X=await Al({error:R,...Ce===void 0?{}:{safeErrorMessage:Ce.message},messages:b,errorMetadata:si,options:e,sessionId:w,title:lt,runtimeSessionState:L}),S=X.cleanedMessages,N=X.updatedErrorMetadata;if(O=X.contextTokenSnapshot,R instanceof _e||R instanceof Rn)throw R;return R.name==="AbortError"?(await Qr({events:h,emitActiveExtensionEvent:U}),Se({success:!0,lastText:f.lastText,messages:S,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,interrupted:!0,errorMetadata:N})):(Ce??=_a(R),Object.isExtensible(R)&&Object.defineProperty(R,"executionFailure",{value:Ce,enumerable:!1}),au(ph(R,Ce)),await Pl({error:R,events:h,emitActiveExtensionEvent:U}),mi({success:!1,lastText:f.lastText,messages:S,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,errorMetadata:N,...Ce===void 0?{}:{failure:Ce}}))},"finalizeCaughtError");Fa(h,{provider:W.name,sessionId:w}),await U("session:start",{provider:W.name,sessionId:w}),or(h,Z.current),h.getCostReport&&(h.getCostReport.current=()=>Ji(Fo(f.costTracker)));for(let g=0;g<v;g++){let R=Date.now();try{e.context?.interruptInput&&g+1>=y&&e.context.interruptInput.closeInputWindow();let C=Zc(L,e,te);f.currentProviderName=C.providerName,f.currentModelOverride=C.modelOverride,f.runtimeThinkingLevel=C.thinkingLevel;let X=C.provider,S=C.contextWindow,N,H=await jd({options:e,providerName:f.currentProviderName,modelOverride:f.currentModelOverride,thinkingLevel:f.runtimeThinkingLevel,reasoningPlan:ut,messages:b}),pe=H.effectiveReasoningPlan;Lt=H.currentExecution,await U("turn:start",{sessionId:w,iteration:g+1,maxIter:v}),Ha(h,g,v);let re=await Ml({provider:f.currentProviderName,model:f.currentModelOverride,reasoningMode:pe.effort,systemPrompt:Lt.systemPrompt});if(re.blockedReason)throw new Error(re.blockedReason);f.currentProviderName=re.provider,f.currentModelOverride=re.model,L.modelSelection.provider=f.currentProviderName,L.modelSelection.model=f.currentModelOverride,f.runtimeThinkingLevel=re.reasoningMode,L.thinkingLevel=f.runtimeThinkingLevel;let F=Wt(f.currentProviderName);o(F.getCapabilityProfile().transport==="native-api");let $t=bt(b);$t&&await $t,S=On(te,F,f.currentModelOverride);let le=f.runtimeThinkingLevel??pe.effort,We=f.currentModelOverride??F.getModel(),mt=Yt(f.currentProviderName,We,e.context?.configHome),yi=F.getReasoningProfile(We)?.effortStrategy;if(!(yi==="openai-chat-effort"||yi==="openai-responses-effort")&&le!==void 0&&mt.length>0){let k=Lo({provider:f.currentProviderName,model:We,desiredEffort:le}).effort;k!==void 0&&mt.includes(k)&&(le=Lo({provider:f.currentProviderName,model:We,desiredEffort:le,rejectedEfforts:mt}).effort??"none")}let ft={...Lt.providerReasoning,enabled:le!=="none",effort:le},{effectiveSystemPrompt:So}=Bd({providerName:f.currentProviderName,model:f.currentModelOverride,provider:F,prompt:t,effectiveOptions:Lt.effectiveOptions,reasoningMode:ji(le)??"auto",taskType:pe.decision.primaryTask,executionMode:pe.decision.recommendedMode,baseSystemPrompt:re.systemPrompt}),ae=qn(So,e.context);Ho(Lt.effectiveOptions.context?.inputArtifacts??[],{provider:f.currentProviderName,model:f.currentModelOverride}),Ar(F,f.currentProviderName),await U("provider:selected",{provider:f.currentProviderName,model:f.currentModelOverride});let pt=new uo,xi=pt.tracker,{resilienceCfg:gt,recoveryCoordinator:Co}=Gd(f.currentProviderName,F,xi,e.timeouts),Io=gt.requestTimeoutMs,mu=gt.streamIdleTimeoutMs,z=b,P,ue=0,vi=ya(A),Ti=Ya(L.activeTools,e.context?.repoIntelligenceMode,e.context?.managedProtocolEmission?.enabled===!0,a?.hasCapabilityProvider?.("mcp")??!!a,e.context?.toolConstructionMode,vi,e.selfManual?.productName,e.context?.agentExecutorPlane!==void 0,ko),xn=A.workflowHost?Ti:Ti.filter(k=>k.name!=="run_workflow"),ht=Z.current,Oe={contextId:ht.contextId,contextKind:ht.contextKind,...ht.parentContextId!==void 0?{parentContextId:ht.parentContextId}:{},...ht.agentId!==void 0?{agentId:ht.agentId}:{}},ze=Sn(e.disablePromptCache)?void 0:dl({logicalSessionId:ct,...de!==void 0?{agentId:de}:{}}),bi=ln({sessionId:w,turnId:Z.current.turnId,...Oe,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),profile:"report_only",contextWindow:S,systemPrompt:ae,toolDefinitions:xn,messages:z}),Ge=ul(bi),fu={...bi,profile:Ge},wi=pl({tools:xn,budget:fu,profile:Ge,bridgeAvailable:ml(xn),nativeDeferredAvailable:!1,unlockedDeferredTools:vi}),Ne=fl(xn,wi),Ft=F.getEffectiveMaxOutputTokens(f.currentModelOverride),Eo=Ft+(fe===void 0?0:Ws),pu=ln({sessionId:w,turnId:Z.current.turnId,...Oe,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),profile:Ge,contextWindow:S,systemPrompt:ae,toolDefinitions:Ne,messages:z}),ki=Math.max(Ct(b,O),pu.usedTokens),Ri,gu=js({messages:b,compactionConfig:te,contextWindow:S,currentTokens:ki,reservedResponseTokens:Eo,onPolicy:i(k=>{Ri={triggerPercent:k.config.triggerPercent,absoluteTriggerTokens:k.absoluteTriggerTokens,triggerTokens:k.triggerTokens,physicalCapacityTokens:k.physicalCapacityTokens,reservedResponseTokens:Ft,reservedMemoryTokens:Eo-Ft}},"onPolicy")}),Si={executionContext:A,messages:b,needsCompact:gu,compactConsecutiveFailures:f.compactConsecutiveFailures,compactionConfig:te,provider:F,model:f.currentModelOverride,...Oe,contextWindow:S,systemPrompt:ae,toolDefinitions:Ne,reasoning:ft,currentTokens:ki,reservedResponseTokens:Eo,events:h,compactionAntiThrash:f.compactAntiThrash,emitCompactionDiagnostics:e.context?.contextDiagnostics===!0,disablePromptCache:e.disablePromptCache,promptCacheKey:ze},yt=await Gr(Si);if(b=yt.messages,z=b,f.compactConsecutiveFailures=yt.nextCompactConsecutiveFailures,f.compactAntiThrash=yt.nextCompactionAntiThrash,yt.contextTokenSnapshot!==void 0&&(O=yt.contextTokenSnapshot),fe!==void 0){let k=bd({objective:t,decisionIntent:ut.decision.primaryTask,actionSignature:`task:${ut.decision.primaryTask}`,todoStore:A.todoStore,observationSequence:hn});Pe=k;let M=[...yn,...yt.didCompactMessages?["context_compacted"]:[]].filter((Q,ie,jt)=>jt.indexOf(Q)===ie);yn=[];try{let Q=M.length>0?await fe.intervene({decisionRevision:k.revision,objective:t,decisionContext:k.text,decisionIntent:k.decisionIntent,actionSignature:k.actionSignature,throughSequence:k.throughSequence,triggers:M,currentCandidates:k.currentCandidates,...e.abortSignal===void 0?{}:{signal:e.abortSignal}}):g>0?fe.recall({decisionRevision:k.revision,objective:t,decisionContext:k.text,decisionIntent:k.decisionIntent,actionSignature:k.actionSignature,throughSequence:k.throughSequence}):void 0;Q!==void 0&&(N=rh(Q))}catch(Q){G("[memory:intervention:error]",{error:Q instanceof Error?Q.message:String(Q)})}}ih(e.abortSignal);let Ci={...ln({sessionId:w,turnId:Z.current.turnId,...Oe,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),profile:Ge,contextWindow:S,systemPrompt:ae,toolDefinitions:Ne,messages:z,...N?.content?{pendingInput:N.content}:{},reservedResponseTokens:Ft}),profile:Ge},Ut={...tr(z),currentTokens:Math.max(Ct(z,O),Ci.usedTokens-Ci.tokenBreakdown.reservedResponse)};e.context?.contextDiagnostics===!0&&(h.onContextBudgetSnapshot!==void 0||h.onToolExposurePlanned!==void 0)&&h.onToolExposurePlanned?.({...wi,...Oe});let Ii=i((k,M=Ft)=>{if(h.onContextBudgetSnapshot!==void 0)try{h.onContextBudgetSnapshot({compactionBudget:Ri,...ln({sessionId:w,turnId:Z.current.turnId,...Oe,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),profile:Ge,contextWindow:S,systemPrompt:ae,toolDefinitions:Ne,messages:k,...N?.content?{pendingInput:N.content}:{},reservedResponseTokens:M}),profile:Ge})}catch(Q){G("[context-diagnostics:budget-callback-error]",{error:Q instanceof Error?Q.message:String(Q)})}},"emitContextBudgetSnapshot"),Ei=Z.current.turnId,_o=`output_${jl()}`,_i="append",Ie,Y=await rt(z,A,S,p),Xe=br(F,{...f.currentModelOverride!==void 0?{model:f.currentModelOverride}:{},contextWindow:S,currentTokens:Ct(Y,O)}),Ai=!1,Ao=!1;for(;;){Y=sr(Y,r),(ri!==void 0||ii)&&(Y=pc(Y,fc([ri,ii].filter(xe=>!!xe).join(`
386
386
 
387
- `),{turnId:Z.current.turnId}))),ae=qn(So,e.context),ue+=1,Ut=K(Y,Ut);let k=pt.beginAttempt(f.currentProviderName,f.currentModelOverride??F.getModel(),Y,ue,!1);Ie=k,h.onOutputSegmentStart?.({responseId:Ei,outputId:_o,providerRequestId:k,mode:_i}),_i="replace";let M=Hd({hardTimeoutMs:Io,idleTimeoutMs:mu,streamMaxDurationMs:F.getStreamMaxDurationMs?.(f.currentModelOverride)??0,callerAbortSignal:e.abortSignal}),Q=M.retryTimeoutController,ie=M.retrySignal,jt=M.resetIdleTimer,Ht=oo(Y,ae);G("[resilience:request]",{provider:f.currentProviderName,attempt:ue,fallbackActive:!1,payloadBytes:Ht,payloadBucket:ro(Ht),lastToolErrorCode:L.lastToolErrorCode,lastToolResultBytes:L.lastToolResultBytes});try{let xe=qd({configHome:e.context?.configHome,events:Ul(h,k),boundaryTracker:xi,streamTimers:M,emitActiveExtensionEvent:U,providerName:f.currentProviderName}),j=i(B=>{f.costTracker=Qi(f.costTracker,{provider:B.provider,waitMs:B.waitMs,reason:B.reason,source:B.source}),xe.onRetryAfter?.(B)},"wrappedRetryAfter");Ii(Y,Xe);let ce=fo({events:h,enabled:e.context?.contextDiagnostics===!0,provider:F,providerName:f.currentProviderName,...Oe,model:f.currentModelOverride??F.getModel(),reasoning:ft,disablePromptCache:e.disablePromptCache,system:ae,tools:Ne,messages:Y,...N!==void 0?{ephemeralSuffix:N}:{},...ze!==void 0?{promptCacheKey:ze}:{},attempt:ue});P=await vt(F.name,"primary",ie,B=>F.stream(Y,Ne,ae,ft,{...xe,rejectedReasoningEfforts:Yt(f.currentProviderName,We,e.context?.configHome),...Ao?{singleAttempt:!0}:{},promptCacheKey:ze,onRetryAfter:j,modelOverride:f.currentModelOverride,maxOutputTokensOverride:Xe,ephemeralSuffix:N,signal:B},B),Ie),po(h,ce,P.usage),b=z;break}catch(xe){let j=xe instanceof Error?xe:new Error(String(xe));if(Ao){let se=Et(j);throw Ce=Fl({error:j,errorClass:se.errorClass,requestPhase:se.failureStage,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),startedAt:pt.snapshot().startedAt}),j}if(j instanceof Rn&&!Ai&&!e.abortSignal?.aborted){Ai=!0,j.requestInputReliefTokens=Math.max(0,D(z)-D(Y));let se=Ma(z,j,S,O);S=se.capacityWindow;let Ee=await Gr({...Si,messages:z,currentTokens:se.currentTokens,contextWindow:S,needsCompact:!0}),De=D(z);if(z=Ee.messages,b=z,D(Ee.messages)>=De)throw j;O=Ee.contextTokenSnapshot??K(z,se),Ut=Ee.contextTokenSnapshot??se,f.compactConsecutiveFailures=Ee.nextCompactConsecutiveFailures,f.compactAntiThrash=Ee.nextCompactionAntiThrash,Y=await rt(z,A,S,p),Xe=br(F,{model:f.currentModelOverride,maxOutputTokens:Xe,contextWindow:S,currentTokens:Ct(Y,Ut)});continue}if(j instanceof Rn||(j=await Xd(j,Q,e.abortSignal),j.name==="AbortError"&&e.abortSignal?.aborted))throw j;let ce=pt.inferFailureStage(),{decision:B}=Vd({error:j,failureStage:ce,attempt:ue,events:h,resilienceCfg:gt,recoveryCoordinator:Co});if(B.shouldUseNonStreaming){let se=oo(Y,ae);G("[resilience:fallback]",{provider:f.currentProviderName,attempt:ue,payloadBytes:se,payloadBucket:ro(se)}),Ii(Y,Xe),ae=qn(So,e.context);let Ee=fo({events:h,enabled:e.context?.contextDiagnostics===!0,provider:F,providerName:f.currentProviderName,...Oe,model:f.currentModelOverride??F.getModel(),reasoning:ft,disablePromptCache:e.disablePromptCache,system:ae,tools:Ne,messages:Y,...N!==void 0?{ephemeralSuffix:N}:{},...ze!==void 0?{promptCacheKey:ze}:{},attempt:ue,transport:"complete"}),De=await Yd({events:h,streamProvider:F,providerMessages:Y,activeToolDefinitions:Ne,effectiveSystemPrompt:ae,effectiveProviderReasoning:ft,callerAbortSignal:e.abortSignal,promptCacheKey:ze,modelOverride:f.currentModelOverride,maxOutputTokensOverride:Xe,ephemeralSuffix:N,hardTimeoutMs:Io,boundarySession:pt,emitActiveExtensionEvent:U,providerName:f.currentProviderName,attempt:ue,responseId:Ei,outputId:_o,clearStreamTimers:M.clearAll,configHome:e.context?.configHome});if(De.ok){P=De.result,Ie=De.providerRequestId,po(h,Ee,P.usage),b=z;break}j=De.error}if(B.action==="sanitize_thinking_and_retry"){let se=Co.executeRecovery(z,B);Xn(B.action,se),z=se.messages,Y=await rt(z,A,S,p),M.clearAll(),ue-=1,await dr(B.delayMs,e.abortSignal);continue}if(B.action==="manual_continue"||ue>=gt.maxRetries){M.clearAll();let se=f.usageComplete;if(await tc({state:r,error:j,messages:Y,provider:F,system:ae,model:f.currentModelOverride,reasoning:ft,maxOutputTokens:Xe,attempt:ue,maxAttempts:gt.maxRetries,timeoutMs:Io,signal:e.abortSignal,hasPendingInputs:i(()=>e.context?.interruptInput?.hasPendingInputs?.()===!0||tt(h,Te),"hasPendingInputs"),onStart:i(()=>{f.usageComplete=!1,h.onProviderRecovery?.({stage:B.failureStage,errorClass:B.reasonCode,attempt:ue,maxAttempts:gt.maxRetries,delayMs:0,recoveryAction:"text_diagnosis",ladderStep:4,fallbackUsed:!1})},"onStart"),onUsage:i(kn=>{f.usageComplete=se,f.costTracker=$o(f.costTracker,{provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),inputTokens:kn.inputTokens,outputTokens:kn.outputTokens,cacheReadTokens:kn.cachedReadTokens,cacheWriteTokens:kn.cachedWriteTokens})},"onUsage")})){ue+=1,Ao=!0;continue}b=z;let De=pt.snapshot();throw Ce=Fl({error:j,errorClass:B.reasonCode,requestPhase:B.failureStage,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),startedAt:De.startedAt,...B.serverRetryAfterMs===void 0?{}:{serverRetryAfterMs:B.serverRetryAfterMs}}),j}let xt=Co.executeRecovery(z,B);Xn(B.action,xt),z=xt.messages,Y=await rt(z,A,S,p),M.clearAll(),await dr(B.delayMs,e.abortSignal);continue}finally{M.clearAll()}}if(It(h,Ie?{providerRequestId:Ie}:void 0),await U("stream:end",void 0),P.usage?f.costTracker=$o(f.costTracker,{provider:f.currentProviderName,model:f.currentModelOverride??"unknown",inputTokens:P.usage.inputTokens,outputTokens:P.usage.outputTokens,cacheReadTokens:P.usage.cachedReadTokens,cacheWriteTokens:P.usage.cachedWriteTokens}):f.usageComplete=!1,f.lastText=P.textBlocks.map(k=>k.text).join(" "),be&&P.usage&&be.lifecycleCtx.getPermissionMode?.()!=="plan"){await be.refresh?.();let k=be.lifecycleCtx.getGoal();if(k?.status==="active"){let M=fa(k,P.usage,ma(R,Date.now()));M.nextState!==k&&await be.lifecycleCtx.persistEvent(M.nextState,M.budgetLimited?"budget_limited":"updated")}}let Pi=tr(b,P.usage),vn=Pi.source==="api"?Pi:K(b,Ut),Mi=Va(L.activeTools,e.context?.repoIntelligenceMode,a?.hasCapabilityProvider?.("mcp")??!!a,e.context?.toolConstructionMode,e.context?.agentExecutorPlane!==void 0);P={...P,toolBlocks:Nl(P.toolBlocks,Mi)};let hu=P.toolBlocks.filter(k=>et(k.name)),[Tn,Nh]=sn(f.lastText),Ve=Tn==="COMPLETE"||Tn==="BLOCKED"||Tn==="DECIDE"?Tn:void 0;if((P.toolBlocks.length===0||Ve==="COMPLETE"||g+1>=v)&&e.context?.interruptInput?.closeInputWindow(),Ve&&Ve!=="COMPLETE"){await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0,signal:Ve});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=K(b,vn),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:Ve});continue}}let yu=Hr([...P.thinkingBlocks,...P.textBlocks,...Ve==="COMPLETE"?[]:hu]);b.push({role:"assistant",content:yu,outputId:_o,turnId:Z.current.turnId,timestamp:new Date().toISOString()});let Oi=Na(b,P.usage),oe=Oi.source==="api"?Oi:K(b,vn);if(O=oe,Ve==="COMPLETE"){await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0,signal:"COMPLETE"});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=K(b,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:"COMPLETE"});continue}if(Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:"COMPLETE"}),await gi(g))continue;return await U("complete",{success:!0,signal:"COMPLETE"}),Se({success:!0,lastText:f.lastText,signal:"COMPLETE",messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1})}let bn=wl({result:P,messages:b,maxTokensRetryCount:f.maxTokensRetryCount,completedTurnTokenSnapshot:oe,events:Ie?Ul(h,Ie):h});if(f.maxTokensRetryCount=bn.nextMaxTokensRetryCount,bn.outcome==="continue"){let k=await Ke(g+1<y);(k?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=k?K(b,bn.nextContextTokenSnapshot):bn.nextContextTokenSnapshot;continue}let wn=kl({result:P,lastText:f.lastText,messages:b,continueAttempted:f.managedProtocolContinueAttempted,options:e,emittedManagedProtocolPayload:wo.current,completedTurnTokenSnapshot:oe});if(f.managedProtocolContinueAttempted=wn.nextContinueAttempted,wn.outcome==="continue"){let k=await Ke(g+1<y);(k?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=k?K(b,wn.nextContextTokenSnapshot):wn.nextContextTokenSnapshot;continue}let Ni=Tt(P.stopReason);if(Ni==="refused"?h.onOutputNotice?.({code:"model_refused"},Ie?{providerRequestId:Ie}:void 0):Ni==="unknown"&&typeof P.stopReason=="string"&&_({source:"coding:stop-reason",level:"warn",message:"Provider returned an unknown stop reason.",detail:{rawStopReason:P.stopReason,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),hasToolBlocks:P.toolBlocks.length>0,hasTextBlocks:P.textBlocks.length>0}}),P.toolBlocks.length===0){await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),await Un(A,b),O=K(b,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0});continue}if(tt(h,Te))return Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),Se({success:!0,lastText:f.lastText,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1});if(Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),await gi(g))continue;await U("complete",{success:!0,signal:void 0});{let ie=await ho({options:e,sessionId:w,messages:b,title:lt,runtimeSessionState:L,lastText:f.lastText});return Se({success:!0,lastText:f.lastText,signal:ie.finalSignal,signalReason:ie.finalReason,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1})}}let Po=await Qd({toolBlocks:P.toolBlocks,events:h,emitActiveExtensionEvent:U,messages:b,incompleteRetryCount:pi,preAssistantTokenSnapshot:vn,completedTurnTokenSnapshot:oe});if(pi=Po.nextIncompleteRetryCount,O=Po.nextContextTokenSnapshot,Po.outcome!=="no_incomplete")continue;let Ye=[],Di=[],Li=await Jd({toolBlocks:P.toolBlocks,abortSignal:e.abortSignal,events:h,emitActiveExtensionEvent:U});if(Li!==null)Ye.push(...Li);else{let k=Ct(b,O),M=ka({contextWindow:S,currentTokens:k,reservedResponseTokens:F.getEffectiveMaxOutputTokens(f.currentModelOverride)}),Q=A.toolResultCapacityTokens,ie=A.recordToolResultArtifact,jt=new Map;A.maximumInputTokens=k+M.aggregateInlineTokens,A.toolResultCapacityTokens=M.aggregateInlineTokens,A.recordToolResultArtifact=(j,ce)=>{jt.set(j,ce),ie?.(j,ce)};let Ht;try{Ht=await Wa({toolBlocks:P.toolBlocks,events:h,ctx:A,runtimeSessionState:L,activeToolNames:Mi,abortSignal:e.abortSignal,...E.length>0&&q!==void 0?{toolGuardrails:E,guardrailContext:{agent:q,...e.abortSignal!==void 0?{abortSignal:e.abortSignal}:{},messages:b.slice(0,-1),permissionIntent:e.context?.permissionIntent},getAfterGuardrailContext:i(()=>({agent:q,...e.abortSignal!==void 0?{abortSignal:e.abortSignal}:{},messages:[...b],permissionIntent:e.context?.permissionIntent}),"getAfterGuardrailContext"),onToolCallsPrepared:i(j=>{j.some((ce,B)=>{let xt=P.toolBlocks[B];return xt===void 0||ce.name!==xt.name||ce.input!==xt.input})&&(P={...P,toolBlocks:[...j]},sh(b,P),oe=K(b,vn),O=oe)},"onToolCallsPrepared")}:{}})}finally{Q===void 0?delete A.toolResultCapacityTokens:A.toolResultCapacityTokens=Q,ie===void 0?delete A.recordToolResultArtifact:A.recordToolResultArtifact=ie}let xe=await za({toolBlocks:P.toolBlocks,resultMap:Ht,events:h,emitActiveExtensionEvent:U,ctx:A,runtimeSessionState:L,toolResultBudget:M,toolResultArtifactPaths:jt});if(Ye=xe.toolResults,Di=xe.editRecoveryMessages,fe!==void 0){let j=Id({toolBlocks:P.toolBlocks,toolResults:Ye,startSequence:hn,observedAt:new Date().toISOString(),...Pe?.actionSignature!==void 0?{decisionActionSignature:Pe.actionSignature}:{}});for(let ce of j)fe.observe(ce);hn=j.at(-1)?.sequence??hn;for(let ce of j){if(ce.metadata?.failed!==!0)continue;let B=ce.metadata.verification===!0?"verification_failure":"tool_failure";yn.includes(B)||yn.push(B)}}}let xu=Zd(Ye);if(Ye.length===0){e.context?.interruptInput?.closeInputWindow(),await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=K(b,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0});continue}if(tt(h,Te))return Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),Se({success:!0,lastText:f.lastText,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1});Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),await U("complete",{success:!0,signal:void 0});{let ie=await ho({options:e,sessionId:w,messages:b,title:lt,runtimeSessionState:L,lastText:f.lastText});return Se({success:!0,lastText:f.lastText,signal:ie.finalSignal,signalReason:ie.finalReason,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1})}}if(xu){e.context?.interruptInput?.closeInputWindow();let k=await el({events:h,emitActiveExtensionEvent:U,messages:b,toolResults:Ye,completedTurnTokenSnapshot:oe,sessionId:w,queueAgentId:Te,iter:g,emitIterationEnd:Me});return O=k.contextTokenSnapshot,Se({success:!0,lastText:Br,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,interrupted:!k.shouldYieldToQueuedFollowUp})}let Mo=await $l({messages:b,toolResults:Ye,editRecoveryMessages:Di,completedTurnTokenSnapshot:oe,runtimeSessionState:L,emitActiveExtensionEvent:U,sessionId:w,lastText:f.lastText,iter:g});await Un(A,b),O=Mo.contextTokenSnapshot;let $i=await Ke(g+1<y);if($i&&(T(g),O=K(b,O)),Mo.drainedQueuedMessages||$i){if($(g)&&e.context?.interruptInput?.reopenInputWindow(),Mo.drainedQueuedMessages)continue;await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!0,signal:void 0});continue}if(tt(h,Te))return Me(g+1,O),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!0,signal:void 0}),Se({success:!0,lastText:f.lastText,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1});await st(e,w,{messages:b,title:lt,gitRoot:e.context?.gitRoot??void 0,runtimeSessionState:L}),Me(g+1,O),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!0,signal:void 0})}catch(C){return hi(C)}}e.context?.interruptInput?.closeInputWindow();let Ro=await ho({options:e,sessionId:w,messages:b,title:lt,runtimeSessionState:L,lastText:f.lastText});try{await U("complete",{success:!0,signal:Ro.finalSignal||void 0})}catch(g){return hi(g)}return Se({success:!0,lastText:f.lastText,signal:Ro.finalSignal,signalReason:Ro.finalReason,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!0})}finally{await no(p),u?.(),l?.(),m(),d&&Jo(s)}}i(hh,"runSubstrateInContext");var Bl="kodax/coding/default",yh="KodaX default coding agent.\n\nThis agent is a thin declaration that routes through the built-in `runKodaX`\npipeline. Tools, extensions, reasoning, provider selection, session\npersistence, compaction and harness routing are all driven by the\n`KodaXOptions` forwarded via `Runner.run` `opts.presetOptions`.\n";function xh(e){if(typeof e=="string")return e;for(let t=e.length-1;t>=0;t--){let n=e[t];if(n?.role==="user")return Uo(n)||""}return""}i(xh,"extractPrompt");function Hl(e){let t=e.trim();return t===""||t==="..."}i(Hl,"isPlaceholderOnlyAssistantText");function vh(e){if(e.role!=="user")return!1;let t=e.content;return!Array.isArray(t)||t.length===0?!1:t.every(n=>!!n&&typeof n=="object"&&"type"in n&&n.type==="tool_result")}i(vh,"isPureToolResultUserMessage");function Th(e){if(e.lastText&&!Hl(e.lastText))return e.lastText;for(let t=e.messages.length-1;t>=0;t--){let n=e.messages[t];if(n){if(n.role==="assistant"){let o=Uo(n);return o&&!Hl(o)?o:""}if(!vh(n))return""}}return""}i(Th,"extractFinalAssistantText");var bh=i(async(e,t,n,o)=>{let r=n?.presetOptions??{},s=n?.permissionIntent===void 0?r:{...r,context:{...r.context,permissionIntent:n.permissionIntent}},a=n?.abortSignal?{...s,abortSignal:n.abortSignal}:s,c=[...e.guardrails??[],...n?.guardrails??r.guardrails??[]],d=c.length>0?{...a,guardrails:[...new Set(c)]}:a,m=xh(t),l=[],u=o?o.agentSpan.addChild("coding:runSubstrate",{kind:"generation",agentName:Bl,provider:d.provider??"unknown",model:d.model??"unknown",memoryDecisionReceipts:l}):null,p;try{p=o===void 0?await Zr(d,m,e):await Rd(l,()=>Zr(d,m,e))}catch(v){throw u&&(u.setError(v instanceof Error?v:new Error(String(v))),u.end()),v}return u&&u.end(),{output:Th(p),messages:p.messages,sessionId:p.sessionId,data:p}},"codingSubstrate"),wh=Object.freeze([Object.freeze({name:"autoReroute",enabled:!0}),Object.freeze({name:"mutationReflection",enabled:!0}),Object.freeze({name:"preAnswerJudge",enabled:!0}),Object.freeze({name:"postToolJudge",enabled:!0})]),kh=Object.freeze({default:"balanced",max:"deep",escalateOnRevise:!0});function ql(e={}){return Cn({name:Bl,instructions:yh,substrateExecutor:bh,middleware:wh,reasoning:kh,...e})}i(ql,"createDefaultCodingAgent");function Kl(e){return{...e.modelTiers!==void 0?{modelTiers:e.modelTiers}:{},...e.maxOutputTokens!==void 0?{maxOutputTokens:e.maxOutputTokens}:{},...e.disablePromptCache!==void 0?{disablePromptCache:e.disablePromptCache}:{},...e.lsp!==void 0?{lsp:e.lsp}:{},...e.workflow!==void 0?{workflow:e.workflow}:{}}}i(Kl,"deriveRunScopedConfig");var Rh={read:"read",grep:"grep",glob:"glob",write:"write",edit:"edit",bash:"bash",undo:"undo",askuserquestion:"ask-user-question",askuser:"ask-user-question"};function Wl(e){let t=[],n="",o=0;for(let r of e){if(r===","&&o===0){n.trim()&&t.push(n.trim()),n="";continue}r==="("?o++:r===")"&&o>0&&o--,n+=r}return n.trim()&&t.push(n.trim()),t}i(Wl,"splitTopLevelCommaList");function Sh(e){if(!e?.trim())return{configured:!1,rules:[],invalidEntries:[]};let t=[],n=[];for(let o of Wl(e)){if(o==="*"){t.push({tool:"*"});continue}if(o.includes("(")&&!o.endsWith(")")){n.push(o);continue}let r=o.match(/^([^(]+?)(?:\((.*)\))?$/);if(!r){n.push(o);continue}let s=Rh[r[1].replace(/[^a-z]/gi,"").toLowerCase()];if(!s){n.push(o);continue}let a=r[2]?Wl(r[2]).map(c=>c.trim()).filter(Boolean):void 0;t.push({tool:s,...a?.length?{patterns:a}:{}})}return{configured:!0,rules:t,invalidEntries:n}}i(Sh,"parseAllowedTools");function zl(e,t){let n=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${n}$`,"i").test(t)}i(zl,"matchesPattern");function Gl(e,t,n){if(!e.configured)return!0;if(e.rules.length===0)return!1;let o=t.toLowerCase(),r=o==="bash"?String(n.command??"").trim():"";return e.rules.some(s=>s.tool!=="*"&&s.tool!==o?!1:!s.patterns?.length||o!=="bash"?!0:s.patterns.some(a=>zl(a,r)))}i(Gl,"isToolAllowed");function Ch(e,t){return e.matcher===void 0||zl(e.matcher,t)}i(Ch,"hookMatches");function Xl(e,t){return{command:t.command,_reason:`Frontmatter hook ${e}`,_frontmatterHook:!0,_hookEvent:e,_hookMatcher:t.matcher}}i(Xl,"hookToolInput");async function Ih(e,t,n,o,r){let s=r.context?.shellExecution??{version:1,shell:{kind:process.platform==="win32"?"cmd":"bash",profile:"none"}},a=await oa(Xl(e,t),{backups:new Map,executionCwd:o,gitRoot:r.context?.gitRoot??void 0,abortSignal:r.abortSignal,shellSandbox:r.context?.shellSandbox,resolveShellPermissionMode:r.context?.resolveShellPermissionMode,authorizeShellHostExecution:r.context?.authorizeShellHostExecution,sandbox:r.sandbox,shellExecution:{...s,environment:{...s.environment,set:{...s.environment?.set,KODAX_HOOK_EVENT:e,KODAX_HOOK_PAYLOAD:JSON.stringify(n)}}}}),c=`Command: ${t.command}
387
+ `),{turnId:Z.current.turnId}))),ae=qn(So,e.context),ue+=1,Ut=K(Y,Ut);let k=pt.beginAttempt(f.currentProviderName,f.currentModelOverride??F.getModel(),Y,ue,!1);Ie=k,h.onOutputSegmentStart?.({responseId:Ei,outputId:_o,providerRequestId:k,mode:_i}),_i="replace";let M=Hd({hardTimeoutMs:Io,idleTimeoutMs:mu,streamMaxDurationMs:F.getStreamMaxDurationMs?.(f.currentModelOverride)??0,callerAbortSignal:e.abortSignal}),Q=M.retryTimeoutController,ie=M.retrySignal,jt=M.resetIdleTimer,Ht=oo(Y,ae);G("[resilience:request]",{provider:f.currentProviderName,attempt:ue,fallbackActive:!1,payloadBytes:Ht,payloadBucket:ro(Ht),lastToolErrorCode:L.lastToolErrorCode,lastToolResultBytes:L.lastToolResultBytes});try{let xe=qd({configHome:e.context?.configHome,events:Ul(h,k),boundaryTracker:xi,streamTimers:M,emitActiveExtensionEvent:U,providerName:f.currentProviderName}),j=i(B=>{f.costTracker=Qi(f.costTracker,{provider:B.provider,waitMs:B.waitMs,reason:B.reason,source:B.source}),xe.onRetryAfter?.(B)},"wrappedRetryAfter");Ii(Y,Xe);let ce=fo({events:h,enabled:e.context?.contextDiagnostics===!0,provider:F,providerName:f.currentProviderName,...Oe,model:f.currentModelOverride??F.getModel(),reasoning:ft,disablePromptCache:e.disablePromptCache,system:ae,tools:Ne,messages:Y,...N!==void 0?{ephemeralSuffix:N}:{},...ze!==void 0?{promptCacheKey:ze}:{},attempt:ue});P=await vt(F.name,"primary",ie,B=>F.stream(Y,Ne,ae,ft,{...xe,rejectedReasoningEfforts:Yt(f.currentProviderName,We,e.context?.configHome),...Ao?{singleAttempt:!0}:{},promptCacheKey:ze,onRetryAfter:j,modelOverride:f.currentModelOverride,maxOutputTokensOverride:Xe,ephemeralSuffix:N,signal:B},B),Ie),po(h,ce,P.usage),b=z;break}catch(xe){let j=xe instanceof Error?xe:new Error(String(xe));if(Ao){let se=Et(j);throw Ce=Fl({error:j,errorClass:se.errorClass,requestPhase:se.failureStage,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),startedAt:pt.snapshot().startedAt}),j}if(j instanceof Rn&&!Ai&&!e.abortSignal?.aborted){Ai=!0,j.requestInputReliefTokens=Math.max(0,D(z)-D(Y));let se=Ma(z,j,S,O);S=se.capacityWindow;let Ee=await Gr({...Si,messages:z,currentTokens:se.currentTokens,contextWindow:S,needsCompact:!0}),De=D(z);if(z=Ee.messages,b=z,D(Ee.messages)>=De)throw j;O=Ee.contextTokenSnapshot??K(z,se),Ut=Ee.contextTokenSnapshot??se,f.compactConsecutiveFailures=Ee.nextCompactConsecutiveFailures,f.compactAntiThrash=Ee.nextCompactionAntiThrash,Y=await rt(z,A,S,p),Xe=br(F,{model:f.currentModelOverride,maxOutputTokens:Xe,contextWindow:S,currentTokens:Ct(Y,Ut)});continue}if(j instanceof Rn||(j=await Xd(j,Q,e.abortSignal),j.name==="AbortError"&&e.abortSignal?.aborted))throw j;let ce=pt.inferFailureStage(),{decision:B}=Vd({error:j,failureStage:ce,attempt:ue,events:h,resilienceCfg:gt,recoveryCoordinator:Co});if(B.shouldUseNonStreaming){let se=oo(Y,ae);G("[resilience:fallback]",{provider:f.currentProviderName,attempt:ue,payloadBytes:se,payloadBucket:ro(se)}),Ii(Y,Xe),ae=qn(So,e.context);let Ee=fo({events:h,enabled:e.context?.contextDiagnostics===!0,provider:F,providerName:f.currentProviderName,...Oe,model:f.currentModelOverride??F.getModel(),reasoning:ft,disablePromptCache:e.disablePromptCache,system:ae,tools:Ne,messages:Y,...N!==void 0?{ephemeralSuffix:N}:{},...ze!==void 0?{promptCacheKey:ze}:{},attempt:ue,transport:"complete"}),De=await Yd({events:h,streamProvider:F,providerMessages:Y,activeToolDefinitions:Ne,effectiveSystemPrompt:ae,effectiveProviderReasoning:ft,callerAbortSignal:e.abortSignal,promptCacheKey:ze,modelOverride:f.currentModelOverride,maxOutputTokensOverride:Xe,ephemeralSuffix:N,hardTimeoutMs:Io,boundarySession:pt,emitActiveExtensionEvent:U,providerName:f.currentProviderName,attempt:ue,responseId:Ei,outputId:_o,clearStreamTimers:M.clearAll,configHome:e.context?.configHome});if(De.ok){P=De.result,Ie=De.providerRequestId,po(h,Ee,P.usage),b=z;break}j=De.error}if(B.action==="sanitize_thinking_and_retry"){let se=Co.executeRecovery(z,B);Xn(B.action,se),z=se.messages,Y=await rt(z,A,S,p),M.clearAll(),ue-=1,await dr(B.delayMs,e.abortSignal);continue}if(B.action==="manual_continue"||ue>=gt.maxRetries){M.clearAll();let se=f.usageComplete;if(await tc({state:r,error:j,messages:Y,provider:F,system:ae,model:f.currentModelOverride,reasoning:ft,maxOutputTokens:Xe,attempt:ue,maxAttempts:gt.maxRetries,timeoutMs:Io,signal:e.abortSignal,hasPendingInputs:i(()=>e.context?.interruptInput?.hasPendingInputs?.()===!0||tt(h,Te),"hasPendingInputs"),onStart:i(()=>{f.usageComplete=!1,h.onProviderRecovery?.({stage:B.failureStage,errorClass:B.reasonCode,attempt:ue,maxAttempts:gt.maxRetries,delayMs:0,recoveryAction:"text_diagnosis",ladderStep:4,fallbackUsed:!1})},"onStart"),onUsage:i(kn=>{f.usageComplete=se,f.costTracker=$o(f.costTracker,{provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),inputTokens:kn.inputTokens,outputTokens:kn.outputTokens,cacheReadTokens:kn.cachedReadTokens,cacheWriteTokens:kn.cachedWriteTokens})},"onUsage")})){ue+=1,Ao=!0;continue}b=z;let De=pt.snapshot();throw Ce=Fl({error:j,errorClass:B.reasonCode,requestPhase:B.failureStage,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),startedAt:De.startedAt,...B.serverRetryAfterMs===void 0?{}:{serverRetryAfterMs:B.serverRetryAfterMs}}),j}let xt=Co.executeRecovery(z,B);Xn(B.action,xt),z=xt.messages,Y=await rt(z,A,S,p),M.clearAll(),await dr(B.delayMs,e.abortSignal);continue}finally{M.clearAll()}}if(It(h,Ie?{providerRequestId:Ie}:void 0),await U("stream:end",void 0),P.usage?f.costTracker=$o(f.costTracker,{provider:f.currentProviderName,model:f.currentModelOverride??"unknown",inputTokens:P.usage.inputTokens,outputTokens:P.usage.outputTokens,cacheReadTokens:P.usage.cachedReadTokens,cacheWriteTokens:P.usage.cachedWriteTokens}):f.usageComplete=!1,f.lastText=P.textBlocks.map(k=>k.text).join(" "),be&&P.usage&&be.lifecycleCtx.getPermissionMode?.()!=="plan"){await be.refresh?.();let k=be.lifecycleCtx.getGoal();if(k?.status==="active"){let M=fa(k,P.usage,ma(R,Date.now()));M.nextState!==k&&await be.lifecycleCtx.persistEvent(M.nextState,M.budgetLimited?"budget_limited":"updated")}}let Pi=tr(b,P.usage),vn=Pi.source==="api"?Pi:K(b,Ut),Mi=Va(L.activeTools,e.context?.repoIntelligenceMode,a?.hasCapabilityProvider?.("mcp")??!!a,e.context?.toolConstructionMode,e.context?.agentExecutorPlane!==void 0);P={...P,toolBlocks:Nl(P.toolBlocks,Mi)};let hu=P.toolBlocks.filter(k=>et(k.name)),[Tn,Nh]=sn(f.lastText),Ve=Tn==="COMPLETE"||Tn==="BLOCKED"||Tn==="DECIDE"?Tn:void 0;if((P.toolBlocks.length===0||Ve==="COMPLETE"||g+1>=v)&&e.context?.interruptInput?.closeInputWindow(),Ve&&Ve!=="COMPLETE"){await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0,signal:Ve});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=K(b,vn),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:Ve});continue}}let yu=Hr([...P.thinkingBlocks,...P.textBlocks,...Ve==="COMPLETE"?[]:hu]);b.push({role:"assistant",content:yu,outputId:_o,turnId:Z.current.turnId,timestamp:new Date().toISOString()});let Oi=Na(b,P.usage),oe=Oi.source==="api"?Oi:K(b,vn);if(O=oe,Ve==="COMPLETE"){await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0,signal:"COMPLETE"});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=K(b,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:"COMPLETE"});continue}if(Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:"COMPLETE"}),await gi(g))continue;return await U("complete",{success:!0,signal:"COMPLETE"}),Se({success:!0,lastText:f.lastText,signal:"COMPLETE",messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1})}let bn=wl({result:P,messages:b,maxTokensRetryCount:f.maxTokensRetryCount,completedTurnTokenSnapshot:oe,events:Ie?Ul(h,Ie):h});if(f.maxTokensRetryCount=bn.nextMaxTokensRetryCount,bn.outcome==="continue"){let k=await Ke(g+1<y);(k?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=k?K(b,bn.nextContextTokenSnapshot):bn.nextContextTokenSnapshot;continue}let wn=kl({result:P,lastText:f.lastText,messages:b,continueAttempted:f.managedProtocolContinueAttempted,options:e,emittedManagedProtocolPayload:wo.current,completedTurnTokenSnapshot:oe});if(f.managedProtocolContinueAttempted=wn.nextContinueAttempted,wn.outcome==="continue"){let k=await Ke(g+1<y);(k?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=k?K(b,wn.nextContextTokenSnapshot):wn.nextContextTokenSnapshot;continue}let Ni=Tt(P.stopReason);if(Ni==="refused"?h.onOutputNotice?.({code:"model_refused"},Ie?{providerRequestId:Ie}:void 0):Ni==="unknown"&&typeof P.stopReason=="string"&&_({source:"coding:stop-reason",level:"warn",message:"Provider returned an unknown stop reason.",detail:{rawStopReason:P.stopReason,provider:f.currentProviderName,model:f.currentModelOverride??F.getModel(),hasToolBlocks:P.toolBlocks.length>0,hasTextBlocks:P.textBlocks.length>0}}),P.toolBlocks.length===0){await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),await Un(A,b),O=K(b,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0});continue}if(tt(h,Te))return Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),Se({success:!0,lastText:f.lastText,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1});if(Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),await gi(g))continue;await U("complete",{success:!0,signal:void 0});{let ie=await ho({options:e,sessionId:w,messages:b,title:lt,runtimeSessionState:L,lastText:f.lastText});return Se({success:!0,lastText:f.lastText,signal:ie.finalSignal,signalReason:ie.finalReason,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1})}}let Po=await Qd({toolBlocks:P.toolBlocks,events:h,emitActiveExtensionEvent:U,messages:b,incompleteRetryCount:pi,preAssistantTokenSnapshot:vn,completedTurnTokenSnapshot:oe});if(pi=Po.nextIncompleteRetryCount,O=Po.nextContextTokenSnapshot,Po.outcome!=="no_incomplete")continue;let Ye=[],Di=[],Li=await Jd({toolBlocks:P.toolBlocks,abortSignal:e.abortSignal,events:h,emitActiveExtensionEvent:U});if(Li!==null)Ye.push(...Li);else{let k=Ct(b,O),M=ka({contextWindow:S,currentTokens:k,reservedResponseTokens:F.getEffectiveMaxOutputTokens(f.currentModelOverride)}),Q=A.toolResultCapacityTokens,ie=A.recordToolResultArtifact,jt=new Map;A.maximumInputTokens=k+M.aggregateInlineTokens,A.toolResultCapacityTokens=M.aggregateInlineTokens,A.recordToolResultArtifact=(j,ce)=>{jt.set(j,ce),ie?.(j,ce)};let Ht;try{Ht=await Wa({toolBlocks:P.toolBlocks,events:h,ctx:A,runtimeSessionState:L,activeToolNames:Mi,abortSignal:e.abortSignal,...E.length>0&&q!==void 0?{toolGuardrails:E,guardrailContext:{agent:q,...e.abortSignal!==void 0?{abortSignal:e.abortSignal}:{},messages:b.slice(0,-1),permissionIntent:e.context?.permissionIntent},getAfterGuardrailContext:i(()=>({agent:q,...e.abortSignal!==void 0?{abortSignal:e.abortSignal}:{},messages:[...b],permissionIntent:e.context?.permissionIntent}),"getAfterGuardrailContext"),onToolCallsPrepared:i(j=>{j.some((ce,B)=>{let xt=P.toolBlocks[B];return xt===void 0||ce.name!==xt.name||ce.input!==xt.input})&&(P={...P,toolBlocks:[...j]},sh(b,P),oe=K(b,vn),O=oe)},"onToolCallsPrepared")}:{}})}finally{Q===void 0?delete A.toolResultCapacityTokens:A.toolResultCapacityTokens=Q,ie===void 0?delete A.recordToolResultArtifact:A.recordToolResultArtifact=ie}let xe=await za({toolBlocks:P.toolBlocks,resultMap:Ht,events:h,emitActiveExtensionEvent:U,ctx:A,runtimeSessionState:L,toolResultBudget:M,toolResultArtifactPaths:jt});if(Ye=xe.toolResults,Di=xe.editRecoveryMessages,fe!==void 0){let j=Id({toolBlocks:P.toolBlocks,toolResults:Ye,startSequence:hn,observedAt:new Date().toISOString(),...Pe?.actionSignature!==void 0?{decisionActionSignature:Pe.actionSignature}:{}});for(let ce of j)fe.observe(ce);hn=j.at(-1)?.sequence??hn;for(let ce of j){if(ce.metadata?.failed!==!0)continue;let B=ce.metadata.verification===!0?"verification_failure":"tool_failure";yn.includes(B)||yn.push(B)}}}let xu=Zd(Ye);if(Ye.length===0){e.context?.interruptInput?.closeInputWindow(),await Mt(w,f.lastText,L,{hadToolCalls:!1,success:!0});let k=Pt(b,L),M=await Ke(g+1<y);if(k||M){(M?T(g):g+1<v)&&$(g)&&e.context?.interruptInput?.reopenInputWindow(),O=K(b,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0});continue}if(tt(h,Te))return Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),Se({success:!0,lastText:f.lastText,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1});Me(g+1,oe),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!1,signal:void 0}),await U("complete",{success:!0,signal:void 0});{let ie=await ho({options:e,sessionId:w,messages:b,title:lt,runtimeSessionState:L,lastText:f.lastText});return Se({success:!0,lastText:f.lastText,signal:ie.finalSignal,signalReason:ie.finalReason,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1})}}if(xu){e.context?.interruptInput?.closeInputWindow();let k=await el({events:h,emitActiveExtensionEvent:U,messages:b,toolResults:Ye,completedTurnTokenSnapshot:oe,sessionId:w,queueAgentId:Te,iter:g,emitIterationEnd:Me});return O=k.contextTokenSnapshot,Se({success:!0,lastText:Br,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,interrupted:!k.shouldYieldToQueuedFollowUp})}let Mo=await $l({messages:b,toolResults:Ye,editRecoveryMessages:Di,completedTurnTokenSnapshot:oe,runtimeSessionState:L,emitActiveExtensionEvent:U,sessionId:w,lastText:f.lastText,iter:g});await Un(A,b),O=Mo.contextTokenSnapshot;let $i=await Ke(g+1<y);if($i&&(T(g),O=K(b,O)),Mo.drainedQueuedMessages||$i){if($(g)&&e.context?.interruptInput?.reopenInputWindow(),Mo.drainedQueuedMessages)continue;await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!0,signal:void 0});continue}if(tt(h,Te))return Me(g+1,O),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!0,signal:void 0}),Se({success:!0,lastText:f.lastText,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!1});await st(e,w,{messages:b,title:lt,gitRoot:e.context?.gitRoot??void 0,runtimeSessionState:L}),Me(g+1,O),await U("turn:end",{sessionId:w,iteration:g+1,lastText:f.lastText,hadToolCalls:!0,signal:void 0})}catch(C){return hi(C)}}e.context?.interruptInput?.closeInputWindow();let Ro=await ho({options:e,sessionId:w,messages:b,title:lt,runtimeSessionState:L,lastText:f.lastText});try{await U("complete",{success:!0,signal:Ro.finalSignal||void 0})}catch(g){return hi(g)}return Se({success:!0,lastText:f.lastText,signal:Ro.finalSignal,signalReason:Ro.finalReason,messages:b,sessionId:w,routingDecision:we(),contextTokenSnapshot:O,limitReached:!0})}finally{await no(p),u?.(),l?.(),m(),d&&Jo(s)}}i(hh,"runSubstrateInContext");var Bl="kodax/coding/default",yh="KodaX default coding agent.\n\nThis agent is a thin declaration that routes through the built-in `runKodaX`\npipeline. Tools, extensions, reasoning, provider selection, session\npersistence, compaction and harness routing are all driven by the\n`KodaXOptions` forwarded via `Runner.run` `opts.presetOptions`.\n";function xh(e){if(typeof e=="string")return e;for(let t=e.length-1;t>=0;t--){let n=e[t];if(n?.role==="user")return Uo(n)||""}return""}i(xh,"extractPrompt");function Hl(e){let t=e.trim();return t===""||t==="..."}i(Hl,"isPlaceholderOnlyAssistantText");function vh(e){if(e.role!=="user")return!1;let t=e.content;return!Array.isArray(t)||t.length===0?!1:t.every(n=>!!n&&typeof n=="object"&&"type"in n&&n.type==="tool_result")}i(vh,"isPureToolResultUserMessage");function Th(e){if(e.lastText&&!Hl(e.lastText))return e.lastText;for(let t=e.messages.length-1;t>=0;t--){let n=e.messages[t];if(n){if(n.role==="assistant"){let o=Uo(n);return o&&!Hl(o)?o:""}if(!vh(n))return""}}return""}i(Th,"extractFinalAssistantText");var bh=i(async(e,t,n,o)=>{let r=n?.presetOptions??{},s=n?.permissionIntent===void 0?r:{...r,context:{...r.context,permissionIntent:n.permissionIntent}},a=n?.abortSignal?{...s,abortSignal:n.abortSignal}:s,c=[...e.guardrails??[],...n?.guardrails??r.guardrails??[]],d=c.length>0?{...a,guardrails:[...new Set(c)]}:a,m=xh(t),l=[],u=o?o.agentSpan.addChild("coding:runSubstrate",{kind:"generation",agentName:Bl,provider:d.provider??"unknown",model:d.model??"unknown",memoryDecisionReceipts:l}):null,p;try{p=o===void 0?await Zr(d,m,e):await Rd(l,()=>Zr(d,m,e))}catch(v){throw u&&(u.setError(v instanceof Error?v:new Error(String(v))),u.end()),v}return u&&u.end(),{output:Th(p),messages:p.messages,sessionId:p.sessionId,data:p}},"codingSubstrate"),wh=Object.freeze([Object.freeze({name:"autoReroute",enabled:!0}),Object.freeze({name:"mutationReflection",enabled:!0}),Object.freeze({name:"preAnswerJudge",enabled:!0}),Object.freeze({name:"postToolJudge",enabled:!0})]),kh=Object.freeze({default:"balanced",max:"deep",escalateOnRevise:!0});function ql(e={}){return Cn({name:Bl,instructions:yh,substrateExecutor:bh,middleware:wh,reasoning:kh,...e})}i(ql,"createDefaultCodingAgent");function Kl(e){return{...e.modelTiers!==void 0?{modelTiers:e.modelTiers}:{},...e.maxOutputTokens!==void 0?{maxOutputTokens:e.maxOutputTokens}:{},...e.disablePromptCache!==void 0?{disablePromptCache:e.disablePromptCache}:{},...e.lsp!==void 0?{lsp:e.lsp}:{},...e.workflow!==void 0?{workflow:e.workflow}:{}}}i(Kl,"deriveRunScopedConfig");var Rh={read:"read",grep:"grep",glob:"glob",write:"write",edit:"edit",bash:"bash",undo:"undo",askuserquestion:"ask-user-question",askuser:"ask-user-question"};function Wl(e){let t=[],n="",o=0;for(let r of e){if(r===","&&o===0){n.trim()&&t.push(n.trim()),n="";continue}r==="("?o++:r===")"&&o>0&&o--,n+=r}return n.trim()&&t.push(n.trim()),t}i(Wl,"splitTopLevelCommaList");function Sh(e){if(!e?.trim())return{configured:!1,rules:[],invalidEntries:[]};let t=[],n=[];for(let o of Wl(e)){if(o==="*"){t.push({tool:"*"});continue}if(o.includes("(")&&!o.endsWith(")")){n.push(o);continue}let r=o.match(/^([^(]+?)(?:\((.*)\))?$/);if(!r){n.push(o);continue}let s=Rh[r[1].replace(/[^a-z]/gi,"").toLowerCase()];if(!s){n.push(o);continue}let a=r[2]?Wl(r[2]).map(c=>c.trim()).filter(Boolean):void 0;t.push({tool:s,...a?.length?{patterns:a}:{}})}return{configured:!0,rules:t,invalidEntries:n}}i(Sh,"parseAllowedTools");function zl(e,t){let n=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${n}$`,"i").test(t)}i(zl,"matchesPattern");function Gl(e,t,n){if(!e.configured)return!0;if(e.rules.length===0)return!1;let o=t.toLowerCase(),r=o==="bash"?String(n.command??"").trim():"";return e.rules.some(s=>s.tool!=="*"&&s.tool!==o?!1:!s.patterns?.length||o!=="bash"?!0:s.patterns.some(a=>zl(a,r)))}i(Gl,"isToolAllowed");function Ch(e,t){return e.matcher===void 0||zl(e.matcher,t)}i(Ch,"hookMatches");function Xl(e,t){return{command:t.command,_reason:`Frontmatter hook ${e}`,_frontmatterHook:!0,_hookEvent:e,_hookMatcher:t.matcher}}i(Xl,"hookToolInput");async function Ih(e,t,n,o,r){let s=r.context?.shellExecution??{version:1,shell:{kind:process.platform==="win32"?"cmd":"bash",profile:"none"}},a=await oa(Xl(e,t),{configHome:r.context?.configHome,backups:new Map,executionCwd:o,gitRoot:r.context?.gitRoot??void 0,abortSignal:r.abortSignal,shellSandbox:r.context?.shellSandbox,resolveShellPermissionMode:r.context?.resolveShellPermissionMode,authorizeShellHostExecution:r.context?.authorizeShellHostExecution,sandbox:r.sandbox,shellExecution:{...s,environment:{...s.environment,set:{...s.environment?.set,KODAX_HOOK_EVENT:e,KODAX_HOOK_PAYLOAD:JSON.stringify(n)}}}}),c=`Command: ${t.command}
388
388
  Exit: 0
389
389
  `;if(!a.startsWith(c))throw new Error(a);let d=a.slice(c.length),m=d.indexOf(`
390
390
  [stderr]
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{o as ye,p as Ye,u as Ze,v as Qe,w as et,z as tt}from"./chunk-ICCDQVLL.js";import{Ob as ze,Pb as Ge,Sb as Je,Tb as Xe}from"./chunk-IUTBOGEK.js";import{Bg as Ue,Cg as Ve,Eg as Z,Ig as we,Og as ge,Pg as B,Qg as he,Rg as Be,Wa as oe,Yg as He,Zg as Ke,_g as Le,v as pe,yg as ie}from"./chunk-62V3CQH4.js";import{fa as je}from"./chunk-2AM3FRQ7.js";import{a as i}from"./chunk-ONUPGMER.js";import{basename as xr,dirname as Sr}from"node:path";import{execFile as tn}from"node:child_process";import ae from"node:path";import{promisify as nn}from"node:util";var rn=nn(tn),on=1e4,ct=2,nt=new Set(["write","edit","multi_edit","insert_after_anchor"]),rt=new Set(["read"]);function an(e,t){if(t.includes("*"))return e;if(e.includes("*"))return t;let n=new Set(t);return e.filter(o=>n.has(o))}i(an,"intersectWorkflowToolCeilings");var sn=/^\s*(?:let me|i will|i'll|i am going to)\b[\s\S]{0,120}\b(?:start|create|implement|write|build|plan)\b|^\s*(?:我将|让我|接下来)[\s\S]{0,80}(?:开始|创建|编写|实现|制定)/i;function cn(e){if(e?.timeoutMs!==void 0){if(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)throw new Error("workflow wait timeoutMs must be a positive number");return Math.floor(e.timeoutMs)}}i(cn,"normalizeWaitTimeoutMs");function ke(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}i(ke,"hasVerificationWork");function H(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}i(H,"normalizeWorkspacePath");function ve(e,t){let n=t.gitRoot?ae.resolve(t.gitRoot):void 0,o=ae.isAbsolute(e)&&n?ae.relative(n,ae.resolve(e)):e;return H(o)}i(ve,"normalizeRequiredPath");function dn(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},o=e.verification.requiredChangedPaths;return{verification:{...n,...o!==void 0&&o.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}i(dn,"resolveVerificationForInput");function un(e,t){if(t===!0&&e.readOnly===!1)throw new Error(`workflow manifest readOnly=true cannot spawn write-capable child "${e.name}"; set the workflow manifest readOnly=false or use child readOnly:true`);let n=e.readOnly??t??!1;return e.readOnly===n?e:{...e,readOnly:n}}i(un,"resolveSpawnAgentInput");function dt(e){let t=e.trim();return t.length>0&&sn.test(t)}i(dt,"isPreparatoryOnlyText");function ln(e,t){let n=e.trim(),o=t?.trim();return o&&(n.length===0||dt(n))?o:e}i(ln,"selectWorkflowFinalText");async function se(e,t){return await oe({cwd:t}),(await rn("git",[...e],{cwd:t,timeout:on,windowsHide:!0,maxBuffer:4*1024*1024})).stdout.toString()}i(se,"runGit");async function fn(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await se(["rev-parse","--show-toplevel"],t)).trim(),o=await Promise.all([se(["diff","--name-only","--"],n),se(["diff","--cached","--name-only","--"],n),se(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(o.flatMap(a=>a.split(/\r?\n/)).map(H).filter(a=>a.length>0))]}i(fn,"listGitChangedFiles");async function xe(e,t){try{return{paths:(await t(e)).map(H).filter(o=>o.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}i(xe,"captureChangedPaths");function mn(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[],readPathById:new Map,succeededReadPaths:[]}}i(mn,"createMutationRecorder");function ot(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return H(n)}}i(ot,"readMutationPath");function pn(e,t){return{...e??{},onToolUseStart:i((n,o)=>{if(nt.has(n.name)){t.toolNameById.set(n.id,n.name);let a=ot(n.input);a!==void 0&&t.toolPathById.set(n.id,a)}if(rt.has(n.name)){let a=ot(n.input);a!==void 0&&t.readPathById.set(n.id,a)}e?.onToolUseStart?.(n,o)},"onToolUseStart"),onToolResult:i((n,o)=>{let a=t.toolNameById.get(n.id)??n.name;if(nt.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(a);let r=t.toolPathById.get(n.id);r!==void 0&&t.succeededPaths.push(r)}if(rt.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){let r=t.readPathById.get(n.id);r!==void 0&&t.succeededReadPaths.push(r)}e?.onToolResult?.(n,o)},"onToolResult")}}i(pn,"wrapEventsForMutationRecording");function ce(e){return[...new Set(e.filter(t=>t.trim().length>0))]}i(ce,"uniqueItems");function it(e){let t=e.verification;if(!t)return;let n=[],o=new Set(e.before.paths.map(H)),a=ce(e.after.paths.map(H)),r=a.filter(m=>!o.has(m)),s=ce(e.mutationRecorder.succeededToolCalls),d=e.acceptToolMutationEvidence?s:[],g=e.acceptToolMutationEvidence?ce(e.mutationRecorder.succeededPaths.map(H)):[],h=r.length>0||d.length>0,y=t.enforcement??"hard",p=(t.requiredChangedPaths??[]).map(m=>ve(m,e.ctx)),b=ce(e.mutationRecorder.succeededReadPaths.map(m=>ve(m,e.ctx))),k=(t.requiredReadPaths??[]).map(m=>ve(m,e.ctx));t.requiresMutation===!0&&(e.before.error!==void 0||e.after.error!==void 0?n.push(`workspace mutation verification could not read changed files: ${e.after.error??e.before.error}`):h||n.push(e.acceptToolMutationEvidence||s.length===0?"expected file mutations, but no new workspace changes or successful write tools were observed":"write tools ran in an isolated worktree, but no main workspace changes were present after cleanup")),e.term.limitReached===!0&&!h&&n.push("workflow child reached its iteration limit before satisfying the task");for(let m of p)!a.includes(m)&&!g.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);for(let m of k)b.includes(m)||n.push(`required review evidence was not read: ${m}`);let F=t.minFinalTextChars;return F!==void 0&&!h&&e.term.finalText.trim().length<F&&n.push(`finalText was shorter than the required ${F} characters`),t.rejectPreparatoryFinalText===!0&&!h&&dt(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:y,reasons:n,changedPaths:a,mutationToolCalls:s,mutationEvidence:h,...b.length>0?{readPaths:b}:{}}}i(it,"evaluateVerification");function Se(e,t){if(t.ok)return e;let o=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(a=>`- ${a}`)].join(`
2
+ import{o as ye,p as Ye,u as Ze,v as Qe,w as et,z as tt}from"./chunk-WILX5FJH.js";import{Ob as ze,Pb as Ge,Sb as Je,Tb as Xe}from"./chunk-R7YXI7AB.js";import{$g as Ke,Ag as ie,Dg as Ue,Eg as Ve,Gg as Z,Kg as we,Qg as ge,Rg as B,Sg as he,Tg as Be,Wa as oe,_g as He,ah as Le,v as pe}from"./chunk-UHC66D7T.js";import{fa as je}from"./chunk-2AM3FRQ7.js";import{a as i}from"./chunk-ONUPGMER.js";import{basename as xr,dirname as Sr}from"node:path";import{execFile as tn}from"node:child_process";import ae from"node:path";import{promisify as nn}from"node:util";var rn=nn(tn),on=1e4,ct=2,nt=new Set(["write","edit","multi_edit","insert_after_anchor"]),rt=new Set(["read"]);function an(e,t){if(t.includes("*"))return e;if(e.includes("*"))return t;let n=new Set(t);return e.filter(o=>n.has(o))}i(an,"intersectWorkflowToolCeilings");var sn=/^\s*(?:let me|i will|i'll|i am going to)\b[\s\S]{0,120}\b(?:start|create|implement|write|build|plan)\b|^\s*(?:我将|让我|接下来)[\s\S]{0,80}(?:开始|创建|编写|实现|制定)/i;function cn(e){if(e?.timeoutMs!==void 0){if(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)throw new Error("workflow wait timeoutMs must be a positive number");return Math.floor(e.timeoutMs)}}i(cn,"normalizeWaitTimeoutMs");function ke(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}i(ke,"hasVerificationWork");function H(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}i(H,"normalizeWorkspacePath");function ve(e,t){let n=t.gitRoot?ae.resolve(t.gitRoot):void 0,o=ae.isAbsolute(e)&&n?ae.relative(n,ae.resolve(e)):e;return H(o)}i(ve,"normalizeRequiredPath");function dn(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},o=e.verification.requiredChangedPaths;return{verification:{...n,...o!==void 0&&o.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}i(dn,"resolveVerificationForInput");function un(e,t){if(t===!0&&e.readOnly===!1)throw new Error(`workflow manifest readOnly=true cannot spawn write-capable child "${e.name}"; set the workflow manifest readOnly=false or use child readOnly:true`);let n=e.readOnly??t??!1;return e.readOnly===n?e:{...e,readOnly:n}}i(un,"resolveSpawnAgentInput");function dt(e){let t=e.trim();return t.length>0&&sn.test(t)}i(dt,"isPreparatoryOnlyText");function ln(e,t){let n=e.trim(),o=t?.trim();return o&&(n.length===0||dt(n))?o:e}i(ln,"selectWorkflowFinalText");async function se(e,t){return await oe({cwd:t}),(await rn("git",[...e],{cwd:t,timeout:on,windowsHide:!0,maxBuffer:4*1024*1024})).stdout.toString()}i(se,"runGit");async function fn(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await se(["rev-parse","--show-toplevel"],t)).trim(),o=await Promise.all([se(["diff","--name-only","--"],n),se(["diff","--cached","--name-only","--"],n),se(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(o.flatMap(a=>a.split(/\r?\n/)).map(H).filter(a=>a.length>0))]}i(fn,"listGitChangedFiles");async function xe(e,t){try{return{paths:(await t(e)).map(H).filter(o=>o.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}i(xe,"captureChangedPaths");function mn(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[],readPathById:new Map,succeededReadPaths:[]}}i(mn,"createMutationRecorder");function ot(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return H(n)}}i(ot,"readMutationPath");function pn(e,t){return{...e??{},onToolUseStart:i((n,o)=>{if(nt.has(n.name)){t.toolNameById.set(n.id,n.name);let a=ot(n.input);a!==void 0&&t.toolPathById.set(n.id,a)}if(rt.has(n.name)){let a=ot(n.input);a!==void 0&&t.readPathById.set(n.id,a)}e?.onToolUseStart?.(n,o)},"onToolUseStart"),onToolResult:i((n,o)=>{let a=t.toolNameById.get(n.id)??n.name;if(nt.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(a);let r=t.toolPathById.get(n.id);r!==void 0&&t.succeededPaths.push(r)}if(rt.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){let r=t.readPathById.get(n.id);r!==void 0&&t.succeededReadPaths.push(r)}e?.onToolResult?.(n,o)},"onToolResult")}}i(pn,"wrapEventsForMutationRecording");function ce(e){return[...new Set(e.filter(t=>t.trim().length>0))]}i(ce,"uniqueItems");function it(e){let t=e.verification;if(!t)return;let n=[],o=new Set(e.before.paths.map(H)),a=ce(e.after.paths.map(H)),r=a.filter(m=>!o.has(m)),s=ce(e.mutationRecorder.succeededToolCalls),d=e.acceptToolMutationEvidence?s:[],g=e.acceptToolMutationEvidence?ce(e.mutationRecorder.succeededPaths.map(H)):[],h=r.length>0||d.length>0,y=t.enforcement??"hard",p=(t.requiredChangedPaths??[]).map(m=>ve(m,e.ctx)),b=ce(e.mutationRecorder.succeededReadPaths.map(m=>ve(m,e.ctx))),k=(t.requiredReadPaths??[]).map(m=>ve(m,e.ctx));t.requiresMutation===!0&&(e.before.error!==void 0||e.after.error!==void 0?n.push(`workspace mutation verification could not read changed files: ${e.after.error??e.before.error}`):h||n.push(e.acceptToolMutationEvidence||s.length===0?"expected file mutations, but no new workspace changes or successful write tools were observed":"write tools ran in an isolated worktree, but no main workspace changes were present after cleanup")),e.term.limitReached===!0&&!h&&n.push("workflow child reached its iteration limit before satisfying the task");for(let m of p)!a.includes(m)&&!g.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);for(let m of k)b.includes(m)||n.push(`required review evidence was not read: ${m}`);let F=t.minFinalTextChars;return F!==void 0&&!h&&e.term.finalText.trim().length<F&&n.push(`finalText was shorter than the required ${F} characters`),t.rejectPreparatoryFinalText===!0&&!h&&dt(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:y,reasons:n,changedPaths:a,mutationToolCalls:s,mutationEvidence:h,...b.length>0?{readPaths:b}:{}}}i(it,"evaluateVerification");function Se(e,t){if(t.ok)return e;let o=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(a=>`- ${a}`)].join(`
3
3
  `);return e.trim().length>0?`${e}
4
4
 
5
5
  ${o}`:o}i(Se,"appendVerificationFailure");function at(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}i(at,"limitReachedWarningVerification");function wn(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<ct&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}i(wn,"shouldRepairVerificationFailure");function gn(e){let t=e.verification.reasons.map(o=>`- ${o}`).join(`
@@ -13,7 +13,7 @@ ${s.text}`),rubric:t.rubric??Sn}))).text,findings:o,degraded:a}}i(An,"runParalle
13
13
  `).trim().replace(/[\t\n\f\r ]+/g," ")}i(j,"normalizeText");function mt(e){return j(e).replace(/\\/g,"/")}i(mt,"normalizeLocation");function de(e){return[...new Set(e.map(j).filter(Boolean))].sort((t,n)=>t<n?-1:t>n?1:0)}i(de,"uniqueSorted");function Wn(e,t,n){return En("sha256").update(`${e}\0${mt(t)}\0${j(n)}`,"utf8").digest("hex")}i(Wn,"findingId");function pt(e,t,n){if(!t&&n.specVerdict!=="not-verifiable")throw new Error('review result must use specVerdict "not-verifiable" when requirements are absent');return{specVerdict:n.specVerdict,qualityVerdict:n.qualityVerdict,findings:n.findings.map(o=>{let a=mt(o.location),r=j(o.claim),s=j(o.evidence);return{findingId:Wn(e,a,r),severity:o.severity,location:a,claim:r,evidence:s,...o.suggestedFix?{suggestedFix:j(o.suggestedFix)}:{}}}).sort((o,a)=>o.findingId<a.findingId?-1:o.findingId>a.findingId?1:0),unverifiedRequirements:de(n.unverifiedRequirements)}}i(pt,"normalizeScopedReviewResult");var ft={low:0,medium:1,high:2,critical:3};function Fn(e){return e.reduce((t,n)=>ft[n]>ft[t]?n:t,"low")}i(Fn,"maxSeverity");function wt(e){if(e.length===0)throw new Error("at least one primary review result is required");let t=new Map;for(let a of e)for(let r of a.findings)t.set(r.findingId,[...t.get(r.findingId)??[],r]);let n=[...t.entries()].map(([a,r])=>({findingId:a,severity:Fn(r.map(s=>s.severity)),location:r[0].location,claim:r[0].claim,evidence:de(r.map(s=>s.evidence)),suggestedFixes:de(r.flatMap(s=>s.suggestedFix?[s.suggestedFix]:[]))})).sort((a,r)=>a.findingId<r.findingId?-1:a.findingId>r.findingId?1:0);return{specVerdict:e.some(a=>a.specVerdict==="issues")?"issues":e.some(a=>a.specVerdict==="not-verifiable")?"not-verifiable":"compliant",qualityVerdict:e.some(a=>a.qualityVerdict==="needs-fixes")?"needs-fixes":"approved",findings:n,unverifiedRequirements:de(e.flatMap(a=>a.unverifiedRequirements))}}i(wt,"mergeScopedReviewResults");function gt(e,t){let n=new Set(e.findings.map(s=>s.findingId)),o=new Set;for(let s of t.findings){if(!n.has(s.findingId)||o.has(s.findingId))throw new Error("verifier must return every input findingId exactly once");o.add(s.findingId)}if(o.size!==n.size)throw new Error("verifier must return every input findingId exactly once");let a=new Map(t.findings.map(s=>[s.findingId,s])),r=e.findings.flatMap(s=>{let d=a.get(s.findingId);if(d.disposition==="refuted")return[];let g=d.severityReason?.trim(),h=d.effectiveSeverity!==void 0&&!!g;return[{...s,disposition:d.disposition,severity:h?d.effectiveSeverity:s.severity,verificationEvidence:j(d.evidence),...g?{severityReason:j(g)}:{}}]});return{specVerdict:e.specVerdict,qualityVerdict:e.qualityVerdict,unverifiedRequirements:e.unverifiedRequirements,actionable:r,audit:t,unqualifiedApprovalAllowed:r.length===0&&e.unverifiedRequirements.length===0&&e.specVerdict==="compliant"&&e.qualityVerdict==="approved"}}i(gt,"applyFindingVerification");var On={type:"object",additionalProperties:!1,required:["summary"],properties:{summary:{type:"string"}}};function yt(e){return[e.packetPath,...e.evidenceChunks.map(t=>t.path)]}i(yt,"evidencePaths");function qn(e){let t=ye(e,be);if(t.length>0)throw new Error(`primary reviewer structured result is invalid: ${t.join("; ")}`);return e}i(qn,"rawReview");function Cn(e){let t=ye(e,Te);if(t.length>0)throw new Error(`finding verifier structured result is invalid: ${t.join("; ")}`);return e}i(Cn,"rawVerification");function Ie(e,t){if(e===null||e.status!=="completed")throw new Error(`${t} did not complete; no verdict was accepted`);if(e.verification!==void 0&&!e.verification.ok)throw new Error(`${t} did not read every required packet path; no verdict was accepted`);return e}i(Ie,"resultOrThrow");function $n(e,t,n){return["Review one immutable KodaX packet as an independent third-party reviewer.",`Packet manifest: ${e.packetPath}`,...e.evidenceChunks.map(o=>`Evidence chunk: ${o.path}`),`This packet has binding requirements: ${e.requirementsPresent?"yes":"no"}.`,t?"This is the additional high-risk primary. Actively seek a disagreement with the first reader; do not assume it was correct.":"Own both specification and implementation-quality verdicts for this scope.",n.lean?"Also identify unnecessary additions, but never remove validation, security, data-loss protection, accessibility, or requested behavior.":"",n.reviewFocus?`Additional user focus: ${n.reviewFocus}`:"","Read the manifest and every listed chunk with the read tool before deciding.","Begin with the required JSON result. No preamble or process narration.","The findings array contains only actionable defects, never approval evidence or positive observations.","When the scope is compliant and approved with no actionable defect, findings must be empty.","If a named requirement cannot be proven compliant or violated from surfaced evidence, use specVerdict not-verifiable, list it in unverifiedRequirements, and emit no finding for that uncertainty; absence of evidence is not proof of a defect.","If requirements are absent, specVerdict must be not-verifiable."].filter(Boolean).join(`
14
14
  `)}i($n,"buildScopedReviewPrimaryPrompt");function _n(e,t){return["Independently attempt to refute every candidate finding in this batch.",`Packet manifest: ${e.packetPath}`,...e.evidenceChunks.map(n=>`Evidence chunk: ${n.path}`),`Canonical candidates: ${JSON.stringify(t.findings)}`,"Read the packet evidence. You may run one focused check after naming the concrete doubt.","Return every findingId exactly once. A severity change requires severityReason.","Begin with the required JSON result; no preamble."].join(`
15
15
  `)}i(_n,"buildScopedReviewVerificationPrompt");function Nn(e){return["Synthesize the structured review results below without rereading packet bodies.","Lead with confirmed findings, keep unresolved findings visibly unresolved, omit refuted findings from the actionable list, and never silently downgrade severity.","Cite locations and state explicitly when no actionable issue was confirmed.",JSON.stringify(e)].join(`
16
- `)}i(Nn,"buildScopedReviewFinalPrompt");async function ht(e,t,n,o){let a=Ie(await e.runAgent({name:`${n?"high-risk-":""}primary-${t.partitionKey}`,phase:"primary-review",prompt:$n(t,n,o),scopeSummary:`${t.partitionKey}: ${t.scopePaths.join(", ")}`,constraints:["read every required packet path","return both verdicts","cite evidence at each finding"],readOnly:!0,modelHint:n?"deep":"balanced",verification:{enforcement:"hard",requiredReadPaths:yt(t)},outputSchema:be,terseResult:!0}),"primary reviewer");return e.log({message:`primary read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"primary",contentHash:t.contentHash}}),qn(a.structured)}i(ht,"runPrimary");async function Dn(e,t,n){if(n.findings.length===0)return{specVerdict:n.specVerdict,qualityVerdict:n.qualityVerdict,unverifiedRequirements:n.unverifiedRequirements,actionable:[],audit:{findings:[]},unqualifiedApprovalAllowed:n.unverifiedRequirements.length===0&&n.specVerdict==="compliant"&&n.qualityVerdict==="approved"};let o=Ie(await e.runAgent({name:`verify-${t.partitionKey}`,phase:"verifier",prompt:_n(t,n),scopeSummary:`verify ${n.findings.length} candidate finding(s) in ${t.partitionKey}`,constraints:["fresh context","attempt refutation","one disposition per findingId"],readOnly:!0,modelHint:"deep",verification:{enforcement:"hard",requiredReadPaths:yt(t)},outputSchema:Te,terseResult:!0}),"finding verifier");return e.log({message:`verification read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"verification",contentHash:t.contentHash,reason:"candidate findings"}}),gt(n,Cn(o.structured))}i(Dn,"verifyFindings");async function jn(e,t,n){let o=[await ht(e,t,!1,n)];t.riskFlags.includes("routing-high")&&o.push(await ht(e,t,!0,n));let a=o.map(d=>pt(t.contentHash,t.requirementsPresent,d)),r=wt(a),s=await Dn(e,t,r);return e.log({message:`quality gate completed for ${t.partitionKey}`,data:{kind:"review_quality_gate",contentHash:t.contentHash,actionableFindings:s.actionable.length,unresolvedFindings:s.actionable.filter(d=>d.disposition==="unresolved").length,unqualifiedApprovalAllowed:s.unqualifiedApprovalAllowed}}),{contentHash:t.contentHash,result:s}}i(jn,"reviewPacket");async function Un(e,t){if(!Array.isArray(t.packets)||t.packets.length===0)throw new Error("scoped-review requires at least one review packet");let n=await e.parallel(t.packets.map(d=>()=>jn(e,d,t)),{concurrency:4});if(n.some(d=>d===null))throw new Error("one or more scope packets failed review; no final verdict was accepted");let o=n.filter(d=>d!==null);await e.artifact("scoped-review-audit",o);let a=Ie(await e.runAgent({name:"final-review-synthesis",phase:"final-synthesis",prompt:Nn(o),scopeSummary:`cross-scope synthesis for ${o.length} packet(s)`,constraints:["preserve severity","preserve unresolved uncertainty","do not invent evidence"],readOnly:!0,modelHint:"deep",outputSchema:On,terseResult:!0}),"final synthesis"),r=a.structured;return{summary:typeof r?.summary=="string"?r.summary:a.finalText,packetResults:o}}i(Un,"runScopedReview");var kt={meta:{name:"scoped-review",description:"Review immutable scope packets once, verify only candidate findings, then synthesize.",readOnly:!0,phases:["primary-review","verifier","final-synthesis"],maxAgents:64,maxConcurrency:4},run:Un};function vt(e){return{meta:e.meta,run:i((t,n)=>e.run(t,n),"run")}}i(vt,"erase");var xt=[vt(lt),vt(kt)];function St(e){return xt.find(t=>t.meta.name===e)}i(St,"getBuiltinWorkflow");function io(){return xt.map(e=>e.meta)}i(io,"listBuiltinWorkflows");import{mkdir as Pt,readdir as Vn,readFile as Q,rename as Bn,unlink as Ae,writeFile as Ee}from"node:fs/promises";import{basename as Hn,dirname as Me,join as K}from"node:path";import{pathToFileURL as Kn}from"node:url";var Mt=[".workflow.json",".ts",".mjs",".js"],ee="0.7.49";function At(){return"0.7.97-alpha.5"}i(At,"currentKodaxWorkflowVersion");function Ln(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}i(Ln,"executionForPath");function zn(e){let t=Mt.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}i(zn,"stripWorkflowSuffix");function We(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"").slice(0,80);if(!t||t==="."||t==="..")throw new Error("workflow name must contain at least one safe filename character");return t}i(We,"safeWorkflowName");function Fe(e){return typeof e=="object"&&e!==null}i(Fe,"isRecord");function Rt(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}i(Rt,"readRequiredString");async function bt(e,t){if(!e)return[];let n;try{n=await Vn(e)}catch{return[]}let o=new Map;for(let a of Mt)for(let r of n){if(!r.endsWith(a))continue;let s=zn(r);if(!s||s.length===0||o.has(s))continue;let d=K(e,r);o.set(s,{name:s,path:d,source:t,execution:Ln(d)})}return[...o.values()]}i(bt,"scanDir");async function te(e){let t=await bt(e.personal,"personal"),n=await bt(e.project,"project"),o=new Map;for(let a of t)o.set(a.name,a);for(let a of n)o.set(a.name,a);return[...o.values()].sort((a,r)=>a.name.localeCompare(r.name))}i(te,"discoverSavedWorkflows");function Gn(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}i(Gn,"isWorkflowModule");function Jn(e){let t=e.default;if(Gn(t))return t;let n=typeof t=="function"?t:e.run,o=e.workflow??e.meta;if(typeof n=="function"&&typeof o=="object"&&o!==null&&"name"in o)return{meta:o,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}i(Jn,"normalizeWorkflowModule");function Xn(e){let t=JSON.parse(e);if(!Fe(t))throw new Error("generated workflow file must be an object");if(t.format!==void 0&&t.format!=="kodax.workflow")throw new Error(`unsupported workflow capsule format: ${String(t.format)}`);if(t.format==="kodax.workflow"){let a=ge(t);return{manifest:a.manifest,source:a.source,capsule:a,legacy:!1}}let n=t.source;if(typeof n!="string"||n.trim().length===0)throw new Error("generated workflow file source must be a non-empty string");let o=Z(t.manifest);return{manifest:o,source:n,capsule:B({minKodaxVersion:ee,manifest:o,source:n}),legacy:!0}}i(Xn,"parseGeneratedWorkflowFile");async function Oe(e){let t=Xn(await Q(e,"utf8"));return t.capsule??B({minKodaxVersion:ee,manifest:t.manifest,source:t.source})}i(Oe,"loadSavedWorkflowCapsule");async function Et(e){if(e.endsWith(".workflow.json"))return he(await Oe(e));let t=await import(Kn(e).href);return Jn(t)}i(Et,"loadSavedWorkflow");function qe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}i(qe,"deriveRequirements");function ue(e,t){we(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}i(ue,"assertGeneratedCapsuleSource");async function Yn(e){let t=We(e.name),n=Z(e.manifest);ue(n,e.source);let o=e.requires??qe(n),a=B({minKodaxVersion:e.minKodaxVersion??ee,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...o!==void 0?{requires:o}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await Pt(e.dir,{recursive:!0});let r=K(e.dir,`${t}.workflow.json`);return await Ee(r,`${JSON.stringify(a,null,2)}
16
+ `)}i(Nn,"buildScopedReviewFinalPrompt");async function ht(e,t,n,o){let a=Ie(await e.runAgent({name:`${n?"high-risk-":""}primary-${t.partitionKey}`,phase:"primary-review",prompt:$n(t,n,o),scopeSummary:`${t.partitionKey}: ${t.scopePaths.join(", ")}`,constraints:["read every required packet path","return both verdicts","cite evidence at each finding"],readOnly:!0,modelHint:n?"deep":"balanced",verification:{enforcement:"hard",requiredReadPaths:yt(t)},outputSchema:be,terseResult:!0}),"primary reviewer");return e.log({message:`primary read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"primary",contentHash:t.contentHash}}),qn(a.structured)}i(ht,"runPrimary");async function Dn(e,t,n){if(n.findings.length===0)return{specVerdict:n.specVerdict,qualityVerdict:n.qualityVerdict,unverifiedRequirements:n.unverifiedRequirements,actionable:[],audit:{findings:[]},unqualifiedApprovalAllowed:n.unverifiedRequirements.length===0&&n.specVerdict==="compliant"&&n.qualityVerdict==="approved"};let o=Ie(await e.runAgent({name:`verify-${t.partitionKey}`,phase:"verifier",prompt:_n(t,n),scopeSummary:`verify ${n.findings.length} candidate finding(s) in ${t.partitionKey}`,constraints:["fresh context","attempt refutation","one disposition per findingId"],readOnly:!0,modelHint:"deep",verification:{enforcement:"hard",requiredReadPaths:yt(t)},outputSchema:Te,terseResult:!0}),"finding verifier");return e.log({message:`verification read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"verification",contentHash:t.contentHash,reason:"candidate findings"}}),gt(n,Cn(o.structured))}i(Dn,"verifyFindings");async function jn(e,t,n){let o=[await ht(e,t,!1,n)];t.riskFlags.includes("routing-high")&&o.push(await ht(e,t,!0,n));let a=o.map(d=>pt(t.contentHash,t.requirementsPresent,d)),r=wt(a),s=await Dn(e,t,r);return e.log({message:`quality gate completed for ${t.partitionKey}`,data:{kind:"review_quality_gate",contentHash:t.contentHash,actionableFindings:s.actionable.length,unresolvedFindings:s.actionable.filter(d=>d.disposition==="unresolved").length,unqualifiedApprovalAllowed:s.unqualifiedApprovalAllowed}}),{contentHash:t.contentHash,result:s}}i(jn,"reviewPacket");async function Un(e,t){if(!Array.isArray(t.packets)||t.packets.length===0)throw new Error("scoped-review requires at least one review packet");let n=await e.parallel(t.packets.map(d=>()=>jn(e,d,t)),{concurrency:4});if(n.some(d=>d===null))throw new Error("one or more scope packets failed review; no final verdict was accepted");let o=n.filter(d=>d!==null);await e.artifact("scoped-review-audit",o);let a=Ie(await e.runAgent({name:"final-review-synthesis",phase:"final-synthesis",prompt:Nn(o),scopeSummary:`cross-scope synthesis for ${o.length} packet(s)`,constraints:["preserve severity","preserve unresolved uncertainty","do not invent evidence"],readOnly:!0,modelHint:"deep",outputSchema:On,terseResult:!0}),"final synthesis"),r=a.structured;return{summary:typeof r?.summary=="string"?r.summary:a.finalText,packetResults:o}}i(Un,"runScopedReview");var kt={meta:{name:"scoped-review",description:"Review immutable scope packets once, verify only candidate findings, then synthesize.",readOnly:!0,phases:["primary-review","verifier","final-synthesis"],maxAgents:64,maxConcurrency:4},run:Un};function vt(e){return{meta:e.meta,run:i((t,n)=>e.run(t,n),"run")}}i(vt,"erase");var xt=[vt(lt),vt(kt)];function St(e){return xt.find(t=>t.meta.name===e)}i(St,"getBuiltinWorkflow");function io(){return xt.map(e=>e.meta)}i(io,"listBuiltinWorkflows");import{mkdir as Pt,readdir as Vn,readFile as Q,rename as Bn,unlink as Ae,writeFile as Ee}from"node:fs/promises";import{basename as Hn,dirname as Me,join as K}from"node:path";import{pathToFileURL as Kn}from"node:url";var Mt=[".workflow.json",".ts",".mjs",".js"],ee="0.7.49";function At(){return"0.7.97-alpha.6"}i(At,"currentKodaxWorkflowVersion");function Ln(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}i(Ln,"executionForPath");function zn(e){let t=Mt.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}i(zn,"stripWorkflowSuffix");function We(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"").slice(0,80);if(!t||t==="."||t==="..")throw new Error("workflow name must contain at least one safe filename character");return t}i(We,"safeWorkflowName");function Fe(e){return typeof e=="object"&&e!==null}i(Fe,"isRecord");function Rt(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}i(Rt,"readRequiredString");async function bt(e,t){if(!e)return[];let n;try{n=await Vn(e)}catch{return[]}let o=new Map;for(let a of Mt)for(let r of n){if(!r.endsWith(a))continue;let s=zn(r);if(!s||s.length===0||o.has(s))continue;let d=K(e,r);o.set(s,{name:s,path:d,source:t,execution:Ln(d)})}return[...o.values()]}i(bt,"scanDir");async function te(e){let t=await bt(e.personal,"personal"),n=await bt(e.project,"project"),o=new Map;for(let a of t)o.set(a.name,a);for(let a of n)o.set(a.name,a);return[...o.values()].sort((a,r)=>a.name.localeCompare(r.name))}i(te,"discoverSavedWorkflows");function Gn(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}i(Gn,"isWorkflowModule");function Jn(e){let t=e.default;if(Gn(t))return t;let n=typeof t=="function"?t:e.run,o=e.workflow??e.meta;if(typeof n=="function"&&typeof o=="object"&&o!==null&&"name"in o)return{meta:o,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}i(Jn,"normalizeWorkflowModule");function Xn(e){let t=JSON.parse(e);if(!Fe(t))throw new Error("generated workflow file must be an object");if(t.format!==void 0&&t.format!=="kodax.workflow")throw new Error(`unsupported workflow capsule format: ${String(t.format)}`);if(t.format==="kodax.workflow"){let a=ge(t);return{manifest:a.manifest,source:a.source,capsule:a,legacy:!1}}let n=t.source;if(typeof n!="string"||n.trim().length===0)throw new Error("generated workflow file source must be a non-empty string");let o=Z(t.manifest);return{manifest:o,source:n,capsule:B({minKodaxVersion:ee,manifest:o,source:n}),legacy:!0}}i(Xn,"parseGeneratedWorkflowFile");async function Oe(e){let t=Xn(await Q(e,"utf8"));return t.capsule??B({minKodaxVersion:ee,manifest:t.manifest,source:t.source})}i(Oe,"loadSavedWorkflowCapsule");async function Et(e){if(e.endsWith(".workflow.json"))return he(await Oe(e));let t=await import(Kn(e).href);return Jn(t)}i(Et,"loadSavedWorkflow");function qe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}i(qe,"deriveRequirements");function ue(e,t){we(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}i(ue,"assertGeneratedCapsuleSource");async function Yn(e){let t=We(e.name),n=Z(e.manifest);ue(n,e.source);let o=e.requires??qe(n),a=B({minKodaxVersion:e.minKodaxVersion??ee,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...o!==void 0?{requires:o}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await Pt(e.dir,{recursive:!0});let r=K(e.dir,`${t}.workflow.json`);return await Ee(r,`${JSON.stringify(a,null,2)}
17
17
  `,"utf8"),{name:t,path:r,source:"project",execution:"capability-generated"}}i(Yn,"saveGeneratedWorkflow");async function Tt(e,t){await Ee(e,`${JSON.stringify(t,null,2)}
18
18
  `,"utf8")}i(Tt,"writeCapsuleFile");async function Zn(e){try{return await Q(e,"utf8"),!0}catch{return!1}}i(Zn,"fileExists");async function mo(e){let t=(await te(e.dirs)).filter(d=>d.name===e.name).filter(d=>e.source===void 0||d.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let o=We(e.newName),a=K(Me(n.path),`${o}.workflow.json`);if(a!==n.path&&await Zn(a))throw new Error(`saved workflow already exists: ${o}`);let r=await Oe(n.path);ue(r.manifest,r.source);let s=B({minKodaxVersion:r.minKodaxVersion,manifest:{...r.manifest,name:o},source:r.source,...r.intent!==void 0?{intent:r.intent}:{},...r.inputs!==void 0?{inputs:r.inputs}:{},...r.requires!==void 0?{requires:r.requires}:{},...r.provenance!==void 0?{provenance:r.provenance}:{}});return await Ee(a,`${JSON.stringify(s,null,2)}
19
19
  `,"utf8"),a!==n.path&&await Ae(n.path),{name:o,path:a,source:n.source,execution:"capability-generated"}}i(mo,"renameSavedWorkflow");async function po(e){let t=(await te(e.dirs)).filter(o=>o.name===e.name).filter(o=>e.source===void 0||o.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await Ae(n.path),n}i(po,"deleteSavedWorkflow");async function wo(e){let t=We(e.name),n=(await te(e.dirs)).filter(k=>k.name===t).filter(k=>e.savedSource===void 0||k.source===e.savedSource);if(n.length===0)throw new Error(`saved workflow not found: ${t}`);if(n.length>1)throw new Error(`ambiguous saved workflow name: ${t}`);let o=n[0];if(!o.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let a=Z({...e.manifest,name:t});ue(a,e.source);let r=e.requires??qe(a),s=B({minKodaxVersion:e.minKodaxVersion??ee,manifest:a,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}}),d=await Oe(o.path),g=new Date().toISOString().replace(/[:.]/g,"-"),h=K(Me(o.path),".revisions",t),y=`${g}-${process.hrtime.bigint().toString(36)}`,p=K(h,`${t}-${y}.workflow.json`),b=K(Me(o.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Pt(h,{recursive:!0}),await Tt(p,d);try{await Tt(b,s),await Bn(b,o.path)}catch(k){try{await Ae(b)}catch{}throw k}return{name:t,path:o.path,source:o.source,execution:"capability-generated",previousPath:p}}i(wo,"replaceSavedWorkflow");function Qn(e){if(!Fe(e))return;let t=e.request;if(typeof t=="string"&&t.trim().length>0)return t;let n=e.question;if(typeof n=="string"&&n.trim().length>0)return n}i(Qn,"readOptionalOriginalRequest");function Wt(e){return er(e)}i(Wt,"buildCapsuleFromRun");async function er(e){let t=JSON.parse(await Q(K(e.runDir,"run.json"),"utf8"));if(!Fe(t))throw new Error("workflow run.json must be an object");let n=Rt(t,"scriptSnapshotPath"),o=Rt(t,"manifestSnapshotPath"),a=await Q(n,"utf8"),r=Z(JSON.parse(await Q(o,"utf8")));ue(r,a);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:Hn(e.runDir),d=Qn(t.args),g=qe(r),h=Be(r,d!==void 0?{originalRequest:d}:{}),y={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return B({minKodaxVersion:ee,manifest:r,source:a,intent:h,inputs:y,...g!==void 0?{requires:g}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:At()}})}i(er,"readCapsuleFromRun");async function go(e){let t=await Wt(e);return{capsule:t,module:he(t)}}i(go,"loadGeneratedWorkflowFromRun");async function ho(e){let t=await Wt(e);return Yn({dir:e.targetDir,name:e.name,manifest:t.manifest,source:t.source,...t.intent!==void 0?{intent:t.intent}:{},...t.inputs!==void 0?{inputs:t.inputs}:{},...t.requires!==void 0?{requires:t.requires}:{},...t.provenance!==void 0?{provenance:t.provenance}:{},minKodaxVersion:t.minKodaxVersion})}i(ho,"saveGeneratedWorkflowFromRun");function U(e,t,n,o){e.push({severity:t,requirement:n,message:o})}i(U,"addRequirementIssue");function It(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}i(It,"parseSemver");function tr(e,t){for(let n=0;n<3;n+=1){let o=e[n]-t[n];if(o!==0)return o}return 0}i(tr,"compareSemver");function nr(e,t,n){let o=It(t),a=It(n);if(!o){U(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!a){U(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}tr(a,o)<0&&U(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}i(nr,"addMinVersionIssue");function Pe(e,t,n,o){if(!n)return;if(!o){for(let r of n)U(e,"warning",`${t}:${r}`,`workflow requires ${t}:${r}, but no ${t} inventory was provided`);return}let a=new Set(o);for(let r of n)a.has(r)||U(e,"error",`${t}:${r}`,`missing required workflow ${t}: ${r}`)}i(Pe,"addMissingItems");function yo(e,t={}){let n=ge(e),o=[],a=n.requires;nr(o,n.minKodaxVersion,t.kodaxVersion??At()),a?.environment?.includes("git-repo")&&t.isGitRepo===!1&&U(o,"error","environment:git-repo","workflow requires a git repository"),a?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&U(o,"error","environment:worktree-capable","workflow may request git worktree isolation");try{we(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(r){let s=r instanceof Error?r.message:String(r);U(o,"error","workflow:source",s)}return Pe(o,"tools",a?.tools,t.availableTools),Pe(o,"mcp",a?.mcp,t.availableMcp),Pe(o,"skills",a?.skills,t.availableSkills),{ok:!o.some(r=>r.severity==="error"),issues:o}}i(yo,"preflightWorkflowCapsule");function or(e){return{project:Ft(e,".kodax","workflows"),personal:Ft(rr(),".kodax","workflows")}}i(or,"defaultSavedWorkflowDirs");async function ir(e,t){let o=(await te(t)).find(a=>a.name===e);if(o)return Et(o.path)}i(ir,"resolveSavedByName");function Ot(e){let t=or(e);return async n=>St(n)??await ir(n,t)}i(Ot,"createNestedWorkflowResolver");import{existsSync as ar,mkdirSync as sr,readFileSync as cr,writeFileSync as qt}from"node:fs";import{join as ne}from"node:path";var Ct="results";function $t(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}i($t,"safeKey");function _t(e,t){let n=ne(e,t);if(ar(n))try{return JSON.parse(cr(n,"utf8"))}catch{return}}i(_t,"readResult");function Nt(e,t={}){let n=ne(e,Ct);sr(n,{recursive:!0});let o=t.readFrom?ne(t.readFrom,Ct):void 0;return{get:i(a=>{let r=`${$t(a)}.json`,s=_t(n,r);if(s!==void 0)return s;if(o===void 0)return;let d=_t(o,r);if(d!==void 0){try{qt(ne(n,r),JSON.stringify(d),"utf8")}catch{}return d}},"get"),set:i((a,r)=>{try{qt(ne(n,`${$t(a)}.json`),JSON.stringify(r),"utf8")}catch{}},"set")}}i(Nt,"createFsResultCache");import{mkdirSync as dr,appendFileSync as ur,writeFileSync as fe}from"node:fs";import{join as G}from"node:path";function le(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}i(le,"record");function O(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}i(O,"finiteNumber");function Dt(e){let t=new Map,n=new Set,o=[],a=[],r=new Set,s=[],d=[],g=0,h=0,y=0,p=0,b=0,k=0,F=0,m=0,T={},$=[];for(let q of e){let A=q.data??{};if(q.type==="agent_spawned"){let u=typeof A.taskId=="string"?A.taskId:void 0;u&&t.set(u,A),A.role==="primary-review"&&(k+=1);let w=typeof A.role=="string"?A.role:"agent",x=typeof A.requestedTier=="string"?A.requestedTier:"inherited",I=`${w}/${x}`;T[I]=(T[I]??0)+1;continue}if(q.type==="agent_completed"||q.type==="agent_unverified"||q.type==="agent_failed"){let u=typeof A.taskId=="string"?A.taskId:void 0;if(!u||n.has(u))continue;n.add(u);let w=le(A.usage);!w||typeof w.totalTokens!="number"?typeof t.get(u)?.externalTarget=="string"?a.push(u):o.push(u):(g+=O(w.totalTokens),h+=O(w.inputTokens),y+=O(w.cacheReadTokens??w.cachedReadTokens),p+=O(w.outputTokens));let x=le(A.digestUsage);b+=O(x?.totalTokens),h+=O(x?.inputTokens),p+=O(x?.outputTokens),y+=O(x?.cacheReadTokens??x?.cachedReadTokens),F+=O(A.iterations);continue}if(q.type==="agent_summary_updated"){let u=le(A.usage),w=A.summaryKind;if((w==="digest"||w==="digest-failed")&&u){let x=O(u.totalTokens);g+=x,b+=x,h+=O(u.inputTokens),p+=O(u.outputTokens),y+=O(u.cacheReadTokens??u.cachedReadTokens)}continue}if(q.type!=="workflow_log")continue;let f=le(A.data);if(f?.kind==="review_quality_gate"&&typeof f.contentHash=="string"){$.push({contentHash:f.contentHash,actionableFindings:O(f.actionableFindings),unresolvedFindings:O(f.unresolvedFindings),unqualifiedApprovalAllowed:f.unqualifiedApprovalAllowed===!0});continue}if(f?.kind!=="review_packet_read"||typeof f.contentHash!="string")continue;let l={contentHash:f.contentHash,...typeof f.reason=="string"?{reason:f.reason}:{}};f.role==="primary"?(r.has(f.contentHash)&&(m+=1),r.add(f.contentHash)):f.role==="verification"?s.push(l):f.role==="synthesis"&&d.push(l)}for(let q of t.keys())n.has(q)||o.push(q);let J=[...new Set(o)].sort();return{totalModelTokens:g,inputTokens:h,cacheReadTokens:y,outputTokens:p,digestTokens:b,agentStarts:t.size,childTurns:F,agentStartsByRoleTier:T,primaryReviewStarts:k,duplicatePrimaryPacketReads:m,verificationPacketReads:s,synthesisPacketReads:d,reviewWaves:k>0?1:0,fixWaves:0,rereviewWaves:0,qualityGateOutcomes:$,tokenCoverage:{ok:J.length===0,missingTaskIds:J},excludedExternalTaskIds:[...new Set(a)].sort()}}i(Dt,"buildWorkflowCostReport");function lr(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}i(lr,"safeWorkflowArtifactName");function jt(e,t={}){let n=t.now??(()=>Date.now()),o=G(e,"artifacts");dr(o,{recursive:!0});let a=G(e,"events.jsonl");return{runDir:e,onEvent:i(r=>{ur(a,`${JSON.stringify({...r,ts:n()})}
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{F as x,G as C,a as p,b as u,f as v,m as h,n as y,o as m}from"./chunk-PTESSP67.js";import{q as w}from"./chunk-CF4B36EZ.js";import{_d as f}from"./chunk-62V3CQH4.js";import{a as t}from"./chunk-ONUPGMER.js";function g(s,c){let i=t(async e=>{let o=structuredClone(e.input);for(let r of["authorization","credential","hostTools","providerCredential","providerCredentialAccess","origin","trustedRunId","workflowHostPolicy"])delete o[r];let n=await c?.({...e,input:o},s);return{...o,...n===void 0?{}:{authorization:structuredClone(n)}}},"authorize");return{statistics:s.statistics??{read:t(async()=>{throw new Error("Execution facts require a compatible Host.")},"read"),readRequests:t(async()=>{throw new Error("Execution facts require a compatible Host.")},"readRequests"),readTools:t(async()=>{throw new Error("Execution facts require a compatible Host.")},"readTools")},lifecycle:s.lifecycle??{requestExit:t(async()=>{throw new Error("Client exit control requires a compatible daemon Host.")},"requestExit"),readExit:t(async()=>{throw new Error("Client exit control requires a compatible daemon Host.")},"readExit"),listPendingExits:t(async()=>{throw new Error("Client exit control requires a compatible daemon Host.")},"listPendingExits")},commands:{execute:t(async e=>s.invocations.executeCommand(await i({kind:"command",input:e})),"execute"),readPrompt:t(e=>s.invocations.readCommandPrompt(e),"readPrompt")},review:{start:t(async e=>s.invocations.startReview(await i({kind:"review",input:e})),"start")},host:{shutdown:t(()=>s.daemon!==void 0?s.daemon.shutdown():s.close().then(()=>({accepted:!0})),"shutdown")},sessions:{cancel:t(e=>s.sessions.cancel(e),"cancel"),create:t(e=>s.sessions.create(e),"create"),list:t(e=>s.sessions.list(e),"list"),read:t(e=>s.sessions.load(e),"read"),delete:t(e=>s.sessions.delete(e),"delete"),archive:t(e=>s.sessions.archive(e),"archive"),unarchive:t(e=>s.sessions.unarchive(e),"unarchive"),getAutoModeStats:t(async e=>await s.sessions.getAutoModeStats(e)??void 0,"getAutoModeStats"),getSettings:t(async e=>p(await s.sessions.getSettings(e)),"getSettings"),getSettingsVersioned:t(async e=>{let o=await s.sessions.getSettingsVersioned(e);return{revision:o.revision,value:p(o.value)}},"getSettingsVersioned"),updateSettingsVersioned:t(async(e,o,n)=>{let r=await s.sessions.updateSettingsVersioned(e,o,n);return{revision:r.revision,value:p(r.value)}},"updateSettingsVersioned"),updateSettings:t(async(e,o)=>p(await s.sessions.updateSettings(e,o)),"updateSettings"),observe:t((e,o,n)=>s.sessions.observeView(e,o,n),"observe"),readItem:t((e,o,n)=>s.sessions.readViewItem(e,o,n),"readItem"),readHistory:t((e,o)=>s.sessions.readHistory(e,o),"readHistory"),readHistoryEntry:t((e,o,n)=>s.sessions.readHistoryEntry(e,o,n),"readHistoryEntry"),searchHistory:t((e,o)=>s.sessions.searchHistory(e,o),"searchHistory"),readGoal:t(e=>s.sessions.readGoal(e),"readGoal"),createGoal:t((e,o)=>s.sessions.createGoal({sessionId:e,...o}),"createGoal"),pauseGoal:t(e=>s.sessions.pauseGoal(e),"pauseGoal"),resumeGoal:t(e=>s.sessions.resumeGoal(e),"resumeGoal"),clearGoal:t(e=>s.sessions.clearGoal(e),"clearGoal"),appendNotice:t(async(e,o)=>{if(!await s.sessions.appendNotice({sessionId:e,...o}))throw new Error("Host did not save the Session notice.")},"appendNotice"),readLineage:t(e=>s.sessions.readLineage(e),"readLineage"),labelEntry:t((e,o)=>s.sessions.labelEntry({sessionId:e,...o}),"labelEntry"),selectBranch:t((e,o,n)=>s.sessions.setActiveEntry({sessionId:e,entryId:o,...n}).then(r=>{if(r===null)throw Object.assign(new Error("No lineage entry matches the selector."),{code:"conflict"});return r}),"selectBranch"),rewindSession:t((e,o)=>s.sessions.rewind({sessionId:e,...o}).then(n=>{if(n===null)throw Object.assign(new Error("Rewind target no longer resolves."),{code:"conflict"});return n}),"rewindSession"),forkSession:t((e,o)=>s.sessions.fork({sessionId:e,...o??{}}).then(n=>{if(n===null)throw Object.assign(new Error("Fork boundary no longer resolves."),{code:"conflict"});return n}),"forkSession"),recoverSession:t((e,o)=>s.sessions.recover({sessionId:e,...o??{}}),"recoverSession"),compact:t(async(e,o)=>{let n=await i({kind:"compaction",input:{...o,sessionId:e}}),r=await s.sessions.compact({sessionId:n.sessionId,customInstructions:n.customInstructions,...n.authorization?.credential!==void 0?{credential:n.authorization.credential}:{}});return{compacted:r.compacted,messages:r.messages,tokensBefore:r.tokensBefore,tokensAfter:r.tokensAfter,...r.report!==void 0?{report:r.report}:{},...r.reason!==void 0?{reason:r.reason}:{}}},"compact")},learning:{list:t(e=>s.learning.list(e),"list"),get:t(e=>s.learning.get(e),"get"),getSnapshot:t(()=>s.learning.getSnapshot(),"getSnapshot"),events:t(e=>s.learning.events(e),"events"),subscribe:t(e=>s.learning.subscribe(e),"subscribe"),acknowledge:t(e=>s.learning.acknowledge(e),"acknowledge"),snooze:t((e,o)=>s.learning.snooze(e,o),"snooze"),reject:t(e=>s.learning.reject(e),"reject"),disable:t(e=>s.learning.disable(e),"disable"),rollback:t(e=>s.learning.rollback(e),"rollback"),promote:t((e,o)=>s.learning.promote(e,o),"promote"),review:t(e=>s.learning.review(e),"review"),trust:t(e=>s.learning.trust(e),"trust")},memory:{async forProject(e){let o=await s.memory.forProject(e);return{memoryRoot:o.memoryRoot,entrypointPath:o.entrypointPath,listReviews:t(()=>o.listReviews(),"listReviews"),reviewerProviderConfigured:t(()=>o.reviewerProviderConfigured(),"reviewerProviderConfigured"),rebuild:t(()=>o.rebuild(),"rebuild"),ensureOpenTarget:t(n=>o.ensureOpenTarget(n),"ensureOpenTarget"),controller:{listRefs:t(n=>o.controller.listRefs(n),"listRefs"),readRef:t(n=>o.controller.readRef(n),"readRef"),remember:t(n=>o.controller.remember(n),"remember"),forgetRef:t((n,r)=>o.controller.forgetRef(n,r),"forgetRef"),approveProposal:t((n,r,a)=>o.controller.approveProposal(n,r,a),"approveProposal"),rejectProposal:t((n,r,a)=>o.controller.rejectProposal(n,r,a),"rejectProposal"),listInbox:t(async()=>(await o.controller.listInbox()).map(n=>({...n,revision:f(n)})),"listInbox"),showProposal:t(async n=>{let r=await o.controller.showProposal(n);return r===void 0?void 0:{...r,revision:f(r)}},"showProposal")}}}},inputs:{submit:t(async e=>s.runs.acceptInput(await i({kind:"input",input:e})),"submit"),read:t((e,o)=>s.runs.getInput(e,o),"read"),withdraw:t((e,o)=>s.runs.withdrawInput(e,o),"withdraw")},runs:{startTool:t(async e=>{let o=await i({kind:"tool",input:e}),n=await s.runs.start({sessionId:o.sessionId,inputId:o.inputId,prompt:o.rawInput,options:{toolInvocation:{name:o.name,input:o.input}},...o.authorization!==void 0?{authorization:o.authorization}:{}});return{runId:n.runId,sessionId:n.sessionId}},"startTool"),read:t(e=>s.runs.get(e),"read"),stop:t(e=>s.runs.abort(e),"stop"),await:t(async e=>{let o=await s.runs.await(e);return{runId:o.runId,sessionId:o.sessionId,phase:o.phase,...o.result!==void 0?{result:o.result}:{},...o.error!==void 0?{error:o.error.message}:{},...o.terminal!==void 0?{terminal:o.terminal}:{},...o.stop!==void 0?{stop:o.stop}:{}}},"await")},interactions:{list:t(e=>s.interactions.list(e),"list"),respond:t((e,o)=>s.interactions.respond(e,o),"respond")},permissions:{listGrants:t(async()=>{let e=await s.permissions.listGrants();return{revision:e.revision,grants:e.value.map(o=>({id:o.id,...o.scope.sessionId!==void 0?{sessionId:o.scope.sessionId}:{},...o.label!==void 0?{label:o.label}:{},...o.persistence!==void 0?{persistence:o.persistence}:{}}))}},"listGrants"),revokeGrant:t((e,o)=>s.permissions.revokeGrant(e,o),"revokeGrant")},registrations:{list:t(()=>s.admin.agentRegistrations.list(),"list"),upsert:t((e,o)=>s.admin.agentRegistrations.upsert(e,o),"upsert"),setEnabled:t((e,o,n)=>s.admin.agentRegistrations.setEnabled(e,o,n),"setEnabled"),remove:t((e,o)=>s.admin.agentRegistrations.remove(e,o),"remove")},agents:{reviewLean:t(async e=>s.invocations.startAgentsLean(await i({kind:"agents_lean",input:e})),"reviewLean"),tree:t(e=>s.agents.tree(e),"tree"),detail:t((e,o)=>s.agents.detail(e,o),"detail"),spawn:t(async(e,o)=>{let n=await i({kind:"agent_spawn",input:{sessionId:e,agent:o}});return n.authorization===void 0?s.agents.spawn(e,n.agent):s.agents.spawn(e,n.agent,{authorization:n.authorization})},"spawn"),send:t((e,o,n,r)=>s.agents.send(e,o,n,r),"send"),followup:t(async(e,o,n,r)=>{let a=await i({kind:"agent_followup",input:{sessionId:e,actorPath:o,objective:n,...r?.expectedRevision===void 0?{}:{expectedRevision:r.expectedRevision}}});return s.agents.followup(e,o,n,{expectedRevision:a.expectedRevision,...a.authorization===void 0?{}:{authorization:a.authorization}})},"followup"),interrupt:t((e,o,n)=>s.agents.interrupt(e,o,n),"interrupt"),output:t((e,o,n)=>s.agents.output(e,o,n),"output"),wait:t((e,o,n,r)=>s.agents.wait(e,o,n,r?.signal===void 0?void 0:{signal:r.signal}),"wait")},config:{read:t(async()=>u(await s.config.read()),"read"),readEffective:t(async()=>{let{entries:e}=await s.config.readEffective(),o=t((r,a)=>({value:a,source:e[r]?.source??"unset",applied:e[r]?.applied===!0||e[r]?.present!==!0}),"project"),n=e.fallbackProviders?.value;return{stallLog:o("stallLog",e.stallLog?.value==="1"||e.stallLog?.value===!0),fallbackProviders:o("fallbackProviders",typeof n=="string"?n.split(",").map(r=>r.trim()).filter(Boolean):Array.isArray(n)?n.filter(r=>typeof r=="string"):[])}},"readEffective"),patch:t(async e=>u(await s.config.patch(e)),"patch"),reload:t(async()=>({ok:!0,config:u((await s.config.reload()).config)}),"reload")},mcp:{status:t(()=>s.mcp.status(),"status"),listServers:t(()=>s.mcp.listServers(),"listServers"),getServer:t(e=>s.mcp.getServer(e),"getServer"),validateServer:t((e,o)=>s.mcp.validateServer(e,o),"validateServer"),upsertServer:t((e,o)=>s.mcp.upsertServer(e,o),"upsertServer"),deleteServer:t(e=>s.mcp.deleteServer(e),"deleteServer"),reloadServers:t(()=>s.mcp.reloadServers(),"reloadServers"),listTools:t(e=>s.mcp.listTools(e),"listTools")},workflows:{start:t(async e=>s.workflows.start({...await i({kind:"workflow",input:e}),settingsDefaults:"product"}),"start"),list:t(async e=>{let o=[];for(let n of await s.workflows.list(e??{})){let r=n.updatedAt===void 0?await s.workflows.get(n.runId):n;if(r?.updatedAt===void 0)throw new Error(`Workflow process is unavailable: ${n.runId}`);o.push({runId:n.runId,workflowName:n.workflow,status:n.status,totalSpawned:n.totalSpawned,eventCount:n.eventCount,runDir:n.runDir,...n.endedAt!==void 0?{endedAt:new Date(n.endedAt).toISOString()}:{},startedAt:new Date(n.startedAt).toISOString(),updatedAt:r.updatedAt,...r.displayName!==void 0?{displayName:r.displayName}:{},...n.resultText!==void 0?{resultSummary:n.resultText}:{},...n.error!==void 0?{error:n.error}:{}})}return o},"list"),get:t(e=>s.workflows.get(e),"get"),subscribe:t((e,o,n)=>{let r=s.workflows.subscribe(e,o,n);return{ready:r.ready??Promise.resolve(),close:t(()=>r.close(),"close")}},"subscribe"),pause:t(e=>s.workflows.pause(e),"pause"),resume:t(e=>s.workflows.resume(e),"resume"),stop:t((e,o)=>s.workflows.stop(e,o),"stop")},catalog:{extensions:t(async()=>{let e=await s.catalog.extensions(),o=t(({path:a,label:d,loadSource:l})=>({path:a,label:d,loadSource:l}),"loaded"),n=t(({kind:a,id:d,label:l})=>({kind:a,id:d,label:l}),"source"),r=e.diagnostics;return{active:e.active,extensions:e.extensions.map(o),diagnostics:r&&{loadedExtensions:r.loadedExtensions.map(o),capabilityProviders:r.capabilityProviders.map(({id:a,kinds:d,metadata:l})=>({id:a,kinds:d,metadata:l})),commands:r.commands.map(({name:a,aliases:d,description:l})=>({name:a,aliases:d,description:l})),tools:r.tools.map(a=>({name:a.name,source:n(a.source),shadowedSources:a.shadowedSources.map(n)})),hooks:r.hooks.map(a=>({hook:a.hook,order:a.order,source:n(a.source)})),failures:r.failures.map(a=>({stage:a.stage,target:a.target,message:a.message,source:n(a.source)})),defaults:{activeTools:r.defaults.activeTools,modelSelection:{...r.defaults.modelSelection},thinkingLevel:r.defaults.thinkingLevel}}}},"extensions"),providers:t(()=>s.catalog.providers(),"providers"),models:t(async e=>(await s.catalog.providers()).filter(o=>e?.provider===void 0||o.name===e.provider).map(o=>({provider:o.name,models:o.models})),"models"),reasoningEfforts:t(e=>s.catalog.reasoningEfforts(e),"reasoningEfforts"),probeReasoningEfforts:t(e=>s.catalog.probeReasoningEfforts(e),"probeReasoningEfforts"),forgetCapabilities:t(e=>s.catalog.forgetCapabilities(e),"forgetCapabilities"),commands:t(async e=>(await s.catalog.commands(e)).map(o=>({name:o.name,...o.aliases!==void 0?{aliases:o.aliases}:{},description:o.description,source:String(o.source),...o.userInvocable!==void 0?{userInvocable:o.userInvocable}:{}})),"commands"),skills:t(async e=>(await s.catalog.skills(e)).map(o=>({name:o.name,description:o.description,userInvocable:o.userInvocable,path:o.path,source:String(o.source)})),"skills")},disconnect:t(()=>s.close(),"disconnect")}}t(g,"toKodaXProductClient");import b from"node:path";async function H(s){let{instanceId:c,instanceSecret:i}=s.clientInfo;if(!c||!/^[A-Za-z0-9_.:-]{4,160}$/.test(c)||!i||i.length<32||i.length>512)throw new Error("Exit recovery requires the original stable client identity and secret.");let e=v(s.homeDir===void 0?w:b.resolve(s.homeDir,".kodax"),s.profile);return Promise.all(y(e,h(c,i)).map(o=>m(e,o)))}t(H,"readKodaXClientExits");async function q(s={}){return g(await C({...s,requirements:{productClient:1,productHistoryBoundaries:1,productExitControl:1,productExecutionFacts:1,...s.authorizeExecution?{productExecutionAuthorization:2,productActorAuthorization:1}:{}}}),s.authorizeExecution)}t(q,"ensureKodaXClient");async function j(s={}){let c=await x({homeDir:s.homeDir,profile:s.profile,endpoint:s.endpoint,daemonToken:s.token,autoStart:!1,onStartupProgress:s.onStartupProgress,clientInfo:s.clientInfo,requirements:{productClient:1,productHistoryBoundaries:1,productExitControl:1,productExecutionFacts:1,...s.authorizeExecution?{productExecutionAuthorization:2,productActorAuthorization:1}:{}}});return g(c,s.authorizeExecution)}t(j,"connectKodaXClient");export{g as a,H as b,q as c,j as d};
2
+ import{F as x,G as C,a as p,b as u,f as v,m as h,n as y,o as m}from"./chunk-YXRXHHFQ.js";import{q as w}from"./chunk-MWIDZ2GQ.js";import{ae as f}from"./chunk-UHC66D7T.js";import{a as t}from"./chunk-ONUPGMER.js";function g(s,c){let i=t(async e=>{let o=structuredClone(e.input);for(let r of["authorization","credential","hostTools","providerCredential","providerCredentialAccess","origin","trustedRunId","workflowHostPolicy"])delete o[r];let n=await c?.({...e,input:o},s);return{...o,...n===void 0?{}:{authorization:structuredClone(n)}}},"authorize");return{statistics:s.statistics??{read:t(async()=>{throw new Error("Execution facts require a compatible Host.")},"read"),readRequests:t(async()=>{throw new Error("Execution facts require a compatible Host.")},"readRequests"),readTools:t(async()=>{throw new Error("Execution facts require a compatible Host.")},"readTools")},lifecycle:s.lifecycle??{requestExit:t(async()=>{throw new Error("Client exit control requires a compatible daemon Host.")},"requestExit"),readExit:t(async()=>{throw new Error("Client exit control requires a compatible daemon Host.")},"readExit"),listPendingExits:t(async()=>{throw new Error("Client exit control requires a compatible daemon Host.")},"listPendingExits")},commands:{execute:t(async e=>s.invocations.executeCommand(await i({kind:"command",input:e})),"execute"),readPrompt:t(e=>s.invocations.readCommandPrompt(e),"readPrompt")},review:{start:t(async e=>s.invocations.startReview(await i({kind:"review",input:e})),"start")},host:{shutdown:t(()=>s.daemon!==void 0?s.daemon.shutdown():s.close().then(()=>({accepted:!0})),"shutdown")},sessions:{cancel:t(e=>s.sessions.cancel(e),"cancel"),create:t(e=>s.sessions.create(e),"create"),list:t(e=>s.sessions.list(e),"list"),read:t(e=>s.sessions.load(e),"read"),delete:t(e=>s.sessions.delete(e),"delete"),archive:t(e=>s.sessions.archive(e),"archive"),unarchive:t(e=>s.sessions.unarchive(e),"unarchive"),getAutoModeStats:t(async e=>await s.sessions.getAutoModeStats(e)??void 0,"getAutoModeStats"),getSettings:t(async e=>p(await s.sessions.getSettings(e)),"getSettings"),getSettingsVersioned:t(async e=>{let o=await s.sessions.getSettingsVersioned(e);return{revision:o.revision,value:p(o.value)}},"getSettingsVersioned"),updateSettingsVersioned:t(async(e,o,n)=>{let r=await s.sessions.updateSettingsVersioned(e,o,n);return{revision:r.revision,value:p(r.value)}},"updateSettingsVersioned"),updateSettings:t(async(e,o)=>p(await s.sessions.updateSettings(e,o)),"updateSettings"),observe:t((e,o,n)=>s.sessions.observeView(e,o,n),"observe"),readItem:t((e,o,n)=>s.sessions.readViewItem(e,o,n),"readItem"),readHistory:t((e,o)=>s.sessions.readHistory(e,o),"readHistory"),readHistoryEntry:t((e,o,n)=>s.sessions.readHistoryEntry(e,o,n),"readHistoryEntry"),searchHistory:t((e,o)=>s.sessions.searchHistory(e,o),"searchHistory"),readGoal:t(e=>s.sessions.readGoal(e),"readGoal"),createGoal:t((e,o)=>s.sessions.createGoal({sessionId:e,...o}),"createGoal"),pauseGoal:t(e=>s.sessions.pauseGoal(e),"pauseGoal"),resumeGoal:t(e=>s.sessions.resumeGoal(e),"resumeGoal"),clearGoal:t(e=>s.sessions.clearGoal(e),"clearGoal"),appendNotice:t(async(e,o)=>{if(!await s.sessions.appendNotice({sessionId:e,...o}))throw new Error("Host did not save the Session notice.")},"appendNotice"),readLineage:t(e=>s.sessions.readLineage(e),"readLineage"),labelEntry:t((e,o)=>s.sessions.labelEntry({sessionId:e,...o}),"labelEntry"),selectBranch:t((e,o,n)=>s.sessions.setActiveEntry({sessionId:e,entryId:o,...n}).then(r=>{if(r===null)throw Object.assign(new Error("No lineage entry matches the selector."),{code:"conflict"});return r}),"selectBranch"),rewindSession:t((e,o)=>s.sessions.rewind({sessionId:e,...o}).then(n=>{if(n===null)throw Object.assign(new Error("Rewind target no longer resolves."),{code:"conflict"});return n}),"rewindSession"),forkSession:t((e,o)=>s.sessions.fork({sessionId:e,...o??{}}).then(n=>{if(n===null)throw Object.assign(new Error("Fork boundary no longer resolves."),{code:"conflict"});return n}),"forkSession"),recoverSession:t((e,o)=>s.sessions.recover({sessionId:e,...o??{}}),"recoverSession"),compact:t(async(e,o)=>{let n=await i({kind:"compaction",input:{...o,sessionId:e}}),r=await s.sessions.compact({sessionId:n.sessionId,customInstructions:n.customInstructions,...n.authorization?.credential!==void 0?{credential:n.authorization.credential}:{}});return{compacted:r.compacted,messages:r.messages,tokensBefore:r.tokensBefore,tokensAfter:r.tokensAfter,...r.report!==void 0?{report:r.report}:{},...r.reason!==void 0?{reason:r.reason}:{}}},"compact")},learning:{list:t(e=>s.learning.list(e),"list"),get:t(e=>s.learning.get(e),"get"),getSnapshot:t(()=>s.learning.getSnapshot(),"getSnapshot"),events:t(e=>s.learning.events(e),"events"),subscribe:t(e=>s.learning.subscribe(e),"subscribe"),acknowledge:t(e=>s.learning.acknowledge(e),"acknowledge"),snooze:t((e,o)=>s.learning.snooze(e,o),"snooze"),reject:t(e=>s.learning.reject(e),"reject"),disable:t(e=>s.learning.disable(e),"disable"),rollback:t(e=>s.learning.rollback(e),"rollback"),promote:t((e,o)=>s.learning.promote(e,o),"promote"),review:t(e=>s.learning.review(e),"review"),trust:t(e=>s.learning.trust(e),"trust")},memory:{async forProject(e){let o=await s.memory.forProject(e);return{memoryRoot:o.memoryRoot,entrypointPath:o.entrypointPath,listReviews:t(()=>o.listReviews(),"listReviews"),reviewerProviderConfigured:t(()=>o.reviewerProviderConfigured(),"reviewerProviderConfigured"),rebuild:t(()=>o.rebuild(),"rebuild"),ensureOpenTarget:t(n=>o.ensureOpenTarget(n),"ensureOpenTarget"),controller:{listRefs:t(n=>o.controller.listRefs(n),"listRefs"),readRef:t(n=>o.controller.readRef(n),"readRef"),remember:t(n=>o.controller.remember(n),"remember"),forgetRef:t((n,r)=>o.controller.forgetRef(n,r),"forgetRef"),approveProposal:t((n,r,a)=>o.controller.approveProposal(n,r,a),"approveProposal"),rejectProposal:t((n,r,a)=>o.controller.rejectProposal(n,r,a),"rejectProposal"),listInbox:t(async()=>(await o.controller.listInbox()).map(n=>({...n,revision:f(n)})),"listInbox"),showProposal:t(async n=>{let r=await o.controller.showProposal(n);return r===void 0?void 0:{...r,revision:f(r)}},"showProposal")}}}},inputs:{submit:t(async e=>s.runs.acceptInput(await i({kind:"input",input:e})),"submit"),read:t((e,o)=>s.runs.getInput(e,o),"read"),withdraw:t((e,o)=>s.runs.withdrawInput(e,o),"withdraw")},runs:{startTool:t(async e=>{let o=await i({kind:"tool",input:e}),n=await s.runs.start({sessionId:o.sessionId,inputId:o.inputId,prompt:o.rawInput,options:{toolInvocation:{name:o.name,input:o.input}},...o.authorization!==void 0?{authorization:o.authorization}:{}});return{runId:n.runId,sessionId:n.sessionId}},"startTool"),read:t(e=>s.runs.get(e),"read"),stop:t(e=>s.runs.abort(e),"stop"),await:t(async e=>{let o=await s.runs.await(e);return{runId:o.runId,sessionId:o.sessionId,phase:o.phase,...o.result!==void 0?{result:o.result}:{},...o.error!==void 0?{error:o.error.message}:{},...o.terminal!==void 0?{terminal:o.terminal}:{},...o.stop!==void 0?{stop:o.stop}:{}}},"await")},interactions:{list:t(e=>s.interactions.list(e),"list"),respond:t((e,o)=>s.interactions.respond(e,o),"respond")},permissions:{listGrants:t(async()=>{let e=await s.permissions.listGrants();return{revision:e.revision,grants:e.value.map(o=>({id:o.id,...o.scope.sessionId!==void 0?{sessionId:o.scope.sessionId}:{},...o.label!==void 0?{label:o.label}:{},...o.persistence!==void 0?{persistence:o.persistence}:{}}))}},"listGrants"),revokeGrant:t((e,o)=>s.permissions.revokeGrant(e,o),"revokeGrant")},registrations:{list:t(()=>s.admin.agentRegistrations.list(),"list"),upsert:t((e,o)=>s.admin.agentRegistrations.upsert(e,o),"upsert"),setEnabled:t((e,o,n)=>s.admin.agentRegistrations.setEnabled(e,o,n),"setEnabled"),remove:t((e,o)=>s.admin.agentRegistrations.remove(e,o),"remove")},agents:{reviewLean:t(async e=>s.invocations.startAgentsLean(await i({kind:"agents_lean",input:e})),"reviewLean"),tree:t(e=>s.agents.tree(e),"tree"),detail:t((e,o)=>s.agents.detail(e,o),"detail"),spawn:t(async(e,o)=>{let n=await i({kind:"agent_spawn",input:{sessionId:e,agent:o}});return n.authorization===void 0?s.agents.spawn(e,n.agent):s.agents.spawn(e,n.agent,{authorization:n.authorization})},"spawn"),send:t((e,o,n,r)=>s.agents.send(e,o,n,r),"send"),followup:t(async(e,o,n,r)=>{let a=await i({kind:"agent_followup",input:{sessionId:e,actorPath:o,objective:n,...r?.expectedRevision===void 0?{}:{expectedRevision:r.expectedRevision}}});return s.agents.followup(e,o,n,{expectedRevision:a.expectedRevision,...a.authorization===void 0?{}:{authorization:a.authorization}})},"followup"),interrupt:t((e,o,n)=>s.agents.interrupt(e,o,n),"interrupt"),output:t((e,o,n)=>s.agents.output(e,o,n),"output"),wait:t((e,o,n,r)=>s.agents.wait(e,o,n,r?.signal===void 0?void 0:{signal:r.signal}),"wait")},config:{read:t(async()=>u(await s.config.read()),"read"),readEffective:t(async()=>{let{entries:e}=await s.config.readEffective(),o=t((r,a)=>({value:a,source:e[r]?.source??"unset",applied:e[r]?.applied===!0||e[r]?.present!==!0}),"project"),n=e.fallbackProviders?.value;return{stallLog:o("stallLog",e.stallLog?.value==="1"||e.stallLog?.value===!0),fallbackProviders:o("fallbackProviders",typeof n=="string"?n.split(",").map(r=>r.trim()).filter(Boolean):Array.isArray(n)?n.filter(r=>typeof r=="string"):[])}},"readEffective"),patch:t(async e=>u(await s.config.patch(e)),"patch"),reload:t(async()=>({ok:!0,config:u((await s.config.reload()).config)}),"reload")},mcp:{status:t(()=>s.mcp.status(),"status"),listServers:t(()=>s.mcp.listServers(),"listServers"),getServer:t(e=>s.mcp.getServer(e),"getServer"),validateServer:t((e,o)=>s.mcp.validateServer(e,o),"validateServer"),upsertServer:t((e,o)=>s.mcp.upsertServer(e,o),"upsertServer"),deleteServer:t(e=>s.mcp.deleteServer(e),"deleteServer"),reloadServers:t(()=>s.mcp.reloadServers(),"reloadServers"),listTools:t(e=>s.mcp.listTools(e),"listTools")},workflows:{start:t(async e=>s.workflows.start({...await i({kind:"workflow",input:e}),settingsDefaults:"product"}),"start"),list:t(async e=>{let o=[];for(let n of await s.workflows.list(e??{})){let r=n.updatedAt===void 0?await s.workflows.get(n.runId):n;if(r?.updatedAt===void 0)throw new Error(`Workflow process is unavailable: ${n.runId}`);o.push({runId:n.runId,workflowName:n.workflow,status:n.status,totalSpawned:n.totalSpawned,eventCount:n.eventCount,runDir:n.runDir,...n.endedAt!==void 0?{endedAt:new Date(n.endedAt).toISOString()}:{},startedAt:new Date(n.startedAt).toISOString(),updatedAt:r.updatedAt,...r.displayName!==void 0?{displayName:r.displayName}:{},...n.resultText!==void 0?{resultSummary:n.resultText}:{},...n.error!==void 0?{error:n.error}:{}})}return o},"list"),get:t(e=>s.workflows.get(e),"get"),subscribe:t((e,o,n)=>{let r=s.workflows.subscribe(e,o,n);return{ready:r.ready??Promise.resolve(),close:t(()=>r.close(),"close")}},"subscribe"),pause:t(e=>s.workflows.pause(e),"pause"),resume:t(e=>s.workflows.resume(e),"resume"),stop:t((e,o)=>s.workflows.stop(e,o),"stop")},catalog:{extensions:t(async()=>{let e=await s.catalog.extensions(),o=t(({path:a,label:d,loadSource:l})=>({path:a,label:d,loadSource:l}),"loaded"),n=t(({kind:a,id:d,label:l})=>({kind:a,id:d,label:l}),"source"),r=e.diagnostics;return{active:e.active,extensions:e.extensions.map(o),diagnostics:r&&{loadedExtensions:r.loadedExtensions.map(o),capabilityProviders:r.capabilityProviders.map(({id:a,kinds:d,metadata:l})=>({id:a,kinds:d,metadata:l})),commands:r.commands.map(({name:a,aliases:d,description:l})=>({name:a,aliases:d,description:l})),tools:r.tools.map(a=>({name:a.name,source:n(a.source),shadowedSources:a.shadowedSources.map(n)})),hooks:r.hooks.map(a=>({hook:a.hook,order:a.order,source:n(a.source)})),failures:r.failures.map(a=>({stage:a.stage,target:a.target,message:a.message,source:n(a.source)})),defaults:{activeTools:r.defaults.activeTools,modelSelection:{...r.defaults.modelSelection},thinkingLevel:r.defaults.thinkingLevel}}}},"extensions"),providers:t(()=>s.catalog.providers(),"providers"),models:t(async e=>(await s.catalog.providers()).filter(o=>e?.provider===void 0||o.name===e.provider).map(o=>({provider:o.name,models:o.models})),"models"),reasoningEfforts:t(e=>s.catalog.reasoningEfforts(e),"reasoningEfforts"),probeReasoningEfforts:t(e=>s.catalog.probeReasoningEfforts(e),"probeReasoningEfforts"),forgetCapabilities:t(e=>s.catalog.forgetCapabilities(e),"forgetCapabilities"),commands:t(async e=>(await s.catalog.commands(e)).map(o=>({name:o.name,...o.aliases!==void 0?{aliases:o.aliases}:{},description:o.description,source:String(o.source),...o.userInvocable!==void 0?{userInvocable:o.userInvocable}:{}})),"commands"),skills:t(async e=>(await s.catalog.skills(e)).map(o=>({name:o.name,description:o.description,userInvocable:o.userInvocable,path:o.path,source:String(o.source)})),"skills")},disconnect:t(()=>s.close(),"disconnect")}}t(g,"toKodaXProductClient");import b from"node:path";async function H(s){let{instanceId:c,instanceSecret:i}=s.clientInfo;if(!c||!/^[A-Za-z0-9_.:-]{4,160}$/.test(c)||!i||i.length<32||i.length>512)throw new Error("Exit recovery requires the original stable client identity and secret.");let e=v(s.homeDir===void 0?w:b.resolve(s.homeDir,".kodax"),s.profile);return Promise.all(y(e,h(c,i)).map(o=>m(e,o)))}t(H,"readKodaXClientExits");async function q(s={}){return g(await C({...s,requirements:{productClient:1,productHistoryBoundaries:1,productExitControl:1,productExecutionFacts:1,...s.authorizeExecution?{productExecutionAuthorization:2,productActorAuthorization:1}:{}}}),s.authorizeExecution)}t(q,"ensureKodaXClient");async function j(s={}){let c=await x({homeDir:s.homeDir,profile:s.profile,endpoint:s.endpoint,daemonToken:s.token,autoStart:!1,onStartupProgress:s.onStartupProgress,clientInfo:s.clientInfo,requirements:{productClient:1,productHistoryBoundaries:1,productExitControl:1,productExecutionFacts:1,...s.authorizeExecution?{productExecutionAuthorization:2,productActorAuthorization:1}:{}}});return g(c,s.authorizeExecution)}t(j,"connectKodaXClient");export{g as a,H as b,q as c,j as d};