@kodax-ai/kodax 0.7.73 → 0.7.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/README.md +40 -6
  3. package/README_CN.md +34 -5
  4. package/config-templates/config.example.jsonc +7 -0
  5. package/dist/chunks/{agent-T6PGT6AU.js → agent-LVZJB2GQ.js} +1 -1
  6. package/dist/chunks/argument-completer-GHWEWPVQ.js +2 -0
  7. package/dist/chunks/chunk-4PVSDE5L.js +2 -0
  8. package/dist/chunks/chunk-5WSOB34U.js +329 -0
  9. package/dist/chunks/chunk-6YUDR7WN.js +5 -0
  10. package/dist/chunks/chunk-6ZMKX3XF.js +74 -0
  11. package/dist/chunks/chunk-737LI7OS.js +369 -0
  12. package/dist/chunks/{chunk-64M5HOCA.js → chunk-BN3W2DQY.js} +1 -1
  13. package/dist/chunks/chunk-DEHOFNQA.js +427 -0
  14. package/dist/chunks/{chunk-MBAPT2R5.js → chunk-G5VW55T4.js} +1 -1
  15. package/dist/chunks/{chunk-6RI2RBTF.js → chunk-N6M2LYEP.js} +1 -1
  16. package/dist/chunks/{chunk-GAFFYJU3.js → chunk-OGL227XV.js} +11 -11
  17. package/dist/chunks/{chunk-6JTWXGVU.js → chunk-OJQQRLZJ.js} +225 -225
  18. package/dist/chunks/{chunk-XXQLPTAN.js → chunk-Q65EAOX6.js} +7 -7
  19. package/dist/chunks/chunk-QRBWNYFV.js +321 -0
  20. package/dist/chunks/chunk-QSMXI4MH.js +770 -0
  21. package/dist/chunks/{chunk-MLEAQTCD.js → chunk-SB75RNNR.js} +11 -4
  22. package/dist/chunks/{chunk-M7FXNPWV.js → chunk-UJRRZINL.js} +6 -6
  23. package/dist/chunks/{compaction-config-IHJBP4GO.js → compaction-config-L2YZK7Q3.js} +1 -1
  24. package/dist/chunks/{construction-bootstrap-EGRUHKLP.js → construction-bootstrap-3TQWTHSQ.js} +1 -1
  25. package/dist/chunks/{dist-EVEJAII2.js → dist-D3EPVAOZ.js} +1 -1
  26. package/dist/chunks/dist-ZJFTZJ55.js +2 -0
  27. package/dist/chunks/host-KHDXYFVG.js +2 -0
  28. package/dist/chunks/{run-manager-AY7RQOWM.js → run-manager-CD24OO4V.js} +1 -1
  29. package/dist/chunks/{utils-2GAE4XIM.js → utils-HMVP6XPH.js} +1 -1
  30. package/dist/index.d.ts +12 -11
  31. package/dist/index.js +5 -5
  32. package/dist/kodax_cli.js +1300 -1258
  33. package/dist/runtime-worker.js +1209 -1167
  34. package/dist/sdk-a2a.d.ts +9 -8
  35. package/dist/sdk-a2a.js +1 -1
  36. package/dist/sdk-agent.d.ts +107 -59
  37. package/dist/sdk-agent.js +1 -1
  38. package/dist/sdk-coding.d.ts +32 -16
  39. package/dist/sdk-coding.js +1 -1
  40. package/dist/sdk-experimental-memory.js +1 -1
  41. package/dist/sdk-llm.js +1 -1
  42. package/dist/sdk-mcp.js +1 -1
  43. package/dist/sdk-media.js +1 -1
  44. package/dist/sdk-repl.d.ts +27 -20
  45. package/dist/sdk-repl.js +2 -2
  46. package/dist/sdk-runtime.d.ts +153 -15
  47. package/dist/sdk-runtime.js +1 -1
  48. package/dist/sdk-session.d.ts +4 -4
  49. package/dist/sdk-session.js +1 -1
  50. package/dist/sdk-skills.js +1 -1
  51. package/dist/semantic-worker.js +16 -14
  52. package/dist/types-chunks/{bash-prefix-extractor.d-bApf5nGw.d.ts → bash-prefix-extractor.d-r1beOESM.d.ts} +48 -12
  53. package/dist/types-chunks/{capsule.d-CGWltwno.d.ts → capsule.d-zeqV4IQX.d.ts} +10 -2
  54. package/dist/types-chunks/{commands.d-CEHGwRok.d.ts → commands.d-DUxnK2TU.d.ts} +10 -7
  55. package/dist/types-chunks/{guardrail.d-CC4vAQl7.d.ts → guardrail.d-CWYD1bdL.d.ts} +1 -1
  56. package/dist/types-chunks/{guardrail.d-CXIPlWP3.d.ts → guardrail.d-qjuKJZ31.d.ts} +72 -11
  57. package/dist/types-chunks/history-retrieval.d-BKTJIrVd.d.ts +57 -0
  58. package/dist/types-chunks/{public-api.d-FBmX0kxo.d.ts → public-api.d-CX4B11qY.d.ts} +17 -4
  59. package/dist/types-chunks/{run-manager.d-DUNnJcpE.d.ts → run-manager.d-B9fEIjZk.d.ts} +1 -1
  60. package/dist/types-chunks/{sdk-session-XqacVOs8.d.ts → sdk-session-B0fhAOPa.d.ts} +2 -2
  61. package/dist/types-chunks/{types.d-DKr6TCXL.d.ts → types.d-Bm_y6YuM.d.ts} +2 -2
  62. package/dist/types-chunks/{types.d-DgciGHoG.d.ts → types.d-DEctY20M.d.ts} +9 -2
  63. package/dist/types-chunks/{types.d-BnPhGmar.d.ts → types.d-sRLugmjy.d.ts} +61 -14
  64. package/dist/types-chunks/{utils.d-BPYX7-KN.d.ts → utils.d-D0wPxz8y.d.ts} +5 -5
  65. package/docs/SDK_EMBEDDER_GUIDE.md +1995 -1689
  66. package/package.json +8 -1
  67. package/dist/chunks/argument-completer-QGMWA2C3.js +0 -2
  68. package/dist/chunks/chunk-AGDDM5AW.js +0 -329
  69. package/dist/chunks/chunk-BUPJGG3C.js +0 -5
  70. package/dist/chunks/chunk-EAD4SF3Z.js +0 -413
  71. package/dist/chunks/chunk-HVCNAZ52.js +0 -365
  72. package/dist/chunks/chunk-OG6DRNKV.js +0 -755
  73. package/dist/chunks/chunk-PFH53O4M.js +0 -2
  74. package/dist/chunks/chunk-V4F6IYNK.js +0 -73
  75. package/dist/chunks/chunk-WQ6PWGK5.js +0 -320
  76. package/dist/chunks/dist-5N3I2RTW.js +0 -2
  77. package/dist/chunks/host-MECITNE3.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{T as xe,V as be}from"./chunk-AGDDM5AW.js";import{C as z,Ca as H,F as V,G as ue,H as q,Ma as ve,Qa as ye,ma as de,na as fe,oa as pe,pa as me,q as le,qa as ge,ra as W,ya as he,za as C}from"./chunk-XXQLPTAN.js";import{Fa as we}from"./chunk-OG6DRNKV.js";import{e as Ee}from"./chunk-GAFFYJU3.js";import{a as o}from"./chunk-ONUPGMER.js";import u from"fs";import p from"path";import{exec as tt,spawnSync as nt}from"child_process";import{promisify as rt}from"util";import{fileURLToPath as ot}from"url";var J="en";function Ue(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(Ue,"detectSystemLocale");function Se(e){if(!e||e==="auto"){J=Ue();return}J=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(Se,"setLocale");var Pe={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.runtime_session":"Press (y) allow once, (s) allow this Runtime scope for the session, (n) no","confirm.instruction.runtime_persistent":"Press (y) allow once, (s) allow this Runtime scope for the session, (a) always allow this Runtime scope, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.approved_session":"Approved (this session)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.multiselect_min":"Select at least {min} option(s) with Space before confirming.","select.multiselect_max":"Select at most {max} option(s) with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.runtime_session":"\u6309 (y) \u4EC5\u5141\u8BB8\u4E00\u6B21, (s) \u672C\u4F1A\u8BDD\u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (n) \u62D2\u7EDD","confirm.instruction.runtime_persistent":"\u6309 (y) \u4EC5\u5141\u8BB8\u4E00\u6B21, (s) \u672C\u4F1A\u8BDD\u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (a) \u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.approved_session":"\u5DF2\u6279\u51C6 (\u672C\u4F1A\u8BDD)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.multiselect_min":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u81F3\u5C11\u9009\u62E9 {min} \u4E2A\u9009\u9879\u3002","select.multiselect_max":"\u6700\u591A\u53EA\u80FD\u9009\u62E9 {max} \u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function Dt(e,t){let r=Pe[J][e]??Pe.en[e]??e;if(t)for(let[i,s]of Object.entries(t))r=r.replace(`{${i}}`,String(s));return r}o(Dt,"t");var _e={core:`// KodaX core configuration template.
2
+ import{T as xe,V as be}from"./chunk-5WSOB34U.js";import{C as z,Ca as W,F as V,G as ue,H as q,Ma as ve,Qa as ye,ma as de,na as fe,oa as pe,pa as me,q as le,qa as ge,ra as H,ya as he,za as C}from"./chunk-Q65EAOX6.js";import{Fa as Ee}from"./chunk-QSMXI4MH.js";import{e as we}from"./chunk-OGL227XV.js";import{a as o}from"./chunk-ONUPGMER.js";import u from"fs";import p from"path";import{exec as tt,spawnSync as nt}from"child_process";import{promisify as rt}from"util";import{fileURLToPath as ot}from"url";var J="en";function Ue(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(Ue,"detectSystemLocale");function Se(e){if(!e||e==="auto"){J=Ue();return}J=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(Se,"setLocale");var Pe={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.runtime_session":"Press (y) allow once, (s) allow this Runtime scope for the session, (n) no","confirm.instruction.runtime_persistent":"Press (y) allow once, (s) allow this Runtime scope for the session, (a) always allow this Runtime scope, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.approved_session":"Approved (this session)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.multiselect_min":"Select at least {min} option(s) with Space before confirming.","select.multiselect_max":"Select at most {max} option(s) with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.runtime_session":"\u6309 (y) \u4EC5\u5141\u8BB8\u4E00\u6B21, (s) \u672C\u4F1A\u8BDD\u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (n) \u62D2\u7EDD","confirm.instruction.runtime_persistent":"\u6309 (y) \u4EC5\u5141\u8BB8\u4E00\u6B21, (s) \u672C\u4F1A\u8BDD\u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (a) \u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.approved_session":"\u5DF2\u6279\u51C6 (\u672C\u4F1A\u8BDD)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.multiselect_min":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u81F3\u5C11\u9009\u62E9 {min} \u4E2A\u9009\u9879\u3002","select.multiselect_max":"\u6700\u591A\u53EA\u80FD\u9009\u62E9 {max} \u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function Dt(e,t){let r=Pe[J][e]??Pe.en[e]??e;if(t)for(let[i,s]of Object.entries(t))r=r.replace(`{${i}}`,String(s));return r}o(Dt,"t");var _e={core:`// KodaX core configuration template.
3
3
  // Copy only the fields you need to ~/.kodax/config.json (strict JSON).
4
4
  // MCP, A2A, and Extensions live in ~/.kodax/integrations/*.json; use
5
5
  // \`kodax integrations migrate --dry-run\` for legacy declarations.
@@ -22,6 +22,13 @@ import{T as xe,V as be}from"./chunk-AGDDM5AW.js";import{C as z,Ca as H,F as V,G
22
22
  // }
23
23
  // ],
24
24
  // "repoIntelligenceMode": "auto",
25
+ // Automatic large compaction is always enabled. Percentage defaults to 75
26
+ // and is clamped to 15..90. A missing/zero absolute threshold is inactive;
27
+ // otherwise the smaller percentage, absolute, and physical limit wins.
28
+ // "compaction": {
29
+ // "triggerPercent": 75,
30
+ // "triggerTokens": 0
31
+ // },
25
32
  // "sessionRetentionDays": 0,
26
33
  // "workflow": { "maxConcurrency": 8 }
27
34
  }
@@ -146,6 +153,6 @@ import{T as xe,V as be}from"./chunk-AGDDM5AW.js";import{C as z,Ca as H,F as V,G
146
153
  "version": 1,
147
154
  "paths": []
148
155
  }
149
- `};function Ce(e){return _e[e]}o(Ce,"getConfigTemplate");import{closeSync as Y,existsSync as m,fsyncSync as Ae,mkdirSync as ee,openSync as te,readFileSync as Ie,renameSync as Re,statSync as Ge,unlinkSync as Q,watch as ze,writeFileSync as De}from"node:fs";import{createHash as Ve}from"node:crypto";import g from"node:path";var qe={mcp:"mcp.json",a2a:"a2a.json",extensions:"extensions.json"},We=new Set(["type","command","args","cwd","env","url","headers","connect","startupTimeoutMs","requestTimeoutMs","auth"]);function E(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}o(E,"isRecord");function w(e,t){if(!E(e))throw new Error(`${t} must be an object.`);return e}o(w,"requireRecord");function T(e,t,n){let r=Object.keys(e).find(i=>!t.has(i));if(r!==void 0)throw new Error(`${n} has unknown field "${r}".`)}o(T,"assertNoUnknownKeys");function Le(e,t){if(e.version!==1)throw new Error(`${t} version must be 1.`)}o(Le,"requireVersionOne");function ke(e,t){let n=w(e,t);for(let[r,i]of Object.entries(n))if(r.trim().length===0||typeof i!="string")throw new Error(`${t} must contain non-empty string keys and string values.`);return structuredClone(n)}o(ke,"requireStringMap");function Z(e,t){if(!Array.isArray(e)||!e.every(n=>typeof n=="string"&&n.trim().length>0))throw new Error(`${t} must be an array of non-empty strings.`);return e.map(n=>n.trim())}o(Z,"requireStringArray");function B(e,t){if(e!==void 0&&(!Number.isFinite(e)||Number(e)<=0))throw new Error(`${t} must be a positive number.`)}o(B,"validatePositiveNumber");function He(e,t){if(e.trim().length===0)throw new Error("MCP server names must not be empty.");let n=w(t,`MCP server "${e}"`);T(n,We,`MCP server "${e}"`);let r=n.type??"stdio";if(!["stdio","sse","streamable-http","http"].includes(String(r)))throw new Error(`MCP server "${e}" has an unsupported transport type.`);if(r==="stdio"){if(typeof n.command!="string"||n.command.trim().length===0)throw new Error(`MCP server "${e}" stdio transport requires command.`)}else if(typeof n.url!="string"||n.url.trim().length===0)throw new Error(`MCP server "${e}" ${String(r)} transport requires url.`);if(n.args!==void 0&&Z(n.args,`MCP server "${e}" args`),n.cwd!==void 0&&typeof n.cwd!="string")throw new Error(`MCP server "${e}" cwd must be a string.`);if(n.env!==void 0&&ke(n.env,`MCP server "${e}" env`),n.headers!==void 0&&ke(n.headers,`MCP server "${e}" headers`),n.connect!==void 0&&!["lazy","prewarm","disabled"].includes(String(n.connect)))throw new Error(`MCP server "${e}" has an unsupported connect mode.`);if(B(n.startupTimeoutMs,`MCP server "${e}" startupTimeoutMs`),B(n.requestTimeoutMs,`MCP server "${e}" requestTimeoutMs`),n.auth!==void 0){let i=w(n.auth,`MCP server "${e}" auth`);if(T(i,new Set(["type","clientId","authorizationUrl","tokenUrl","scopes","redirectPort"]),`MCP server "${e}" auth`),i.type!=="oauth2")throw new Error(`MCP server "${e}" auth type must be oauth2.`);for(let a of["clientId","authorizationUrl","tokenUrl"])if(i[a]!==void 0&&typeof i[a]!="string")throw new Error(`MCP server "${e}" auth.${a} must be a string.`);i.scopes!==void 0&&Z(i.scopes,`MCP server "${e}" auth.scopes`),B(i.redirectPort,`MCP server "${e}" auth.redirectPort`)}return structuredClone(n)}o(He,"parseMcpServer");function k(e){let t=w(e,"MCP integration config");T(t,new Set(["version","servers"]),"MCP integration config"),Le(t,"MCP integration config");let n=w(t.servers,"MCP integration config servers"),r={};for(let[i,s]of Object.entries(n))r[i]=He(i,s);return{version:1,servers:r}}o(k,"parseMcpIntegrationDocument");function M(e){let t=w(e,"Extensions integration config");T(t,new Set(["version","paths"]),"Extensions integration config"),Le(t,"Extensions integration config");let n=Z(t.paths,"Extensions integration config paths");if(new Set(n).size!==n.length)throw new Error("Extensions integration config paths must not contain duplicates.");return{version:1,paths:n}}o(M,"parseExtensionsIntegrationDocument");function P(e,t){return g.join(g.resolve(t),"integrations",qe[e])}o(P,"resolveIntegrationConfigPath");function ne(e){return g.join(g.resolve(e),"config.json")}o(ne,"coreConfigPath");function Te(e){return Ve("sha256").update(e).digest("hex")}o(Te,"hashText");function re(e){let t=Ie(e,"utf8");try{return{raw:t,value:JSON.parse(t)}}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Invalid JSON: ${r}`)}}o(re,"readJsonFile");function O(e){return{domain:e.domain,source:e.source,path:e.path,revision:Te(e.raw),document:structuredClone(e.document),loadedAt:new Date().toISOString()}}o(O,"snapshot");function N(e){let t=ne(e);return m(t)?w(re(t).value,"Core config"):{}}o(N,"readCoreConfig");function $(e){let t=P("mcp",e);if(m(t)){let i=re(t);return O({domain:"mcp",source:"user",path:t,raw:i.raw,document:k(i.value)})}let n=N(e).mcpServers,r=k({version:1,servers:E(n)?n:{}});return O({domain:"mcp",source:n===void 0?"default":"legacy-user",path:t,raw:JSON.stringify(r),document:r})}o($,"readMcpIntegration");function K(e){let t=P("extensions",e);if(m(t)){let i=re(t);return O({domain:"extensions",source:"user",path:t,raw:i.raw,document:M(i.value)})}let n=N(e).extensions,r=M({version:1,paths:Array.isArray(n)?n:[]});return O({domain:"extensions",source:n===void 0?"default":"legacy-user",path:t,raw:JSON.stringify(r),document:r})}o(K,"readExtensionsIntegration");function Je(e){if(!E(e))return[];let t=[],n=/(token|secret|password|api[_-]?key|authorization)/i;for(let[r,i]of Object.entries(e))if(E(i))for(let s of["env","headers"]){let a=i[s];if(E(a))for(let[l,c]of Object.entries(a))n.test(l)&&typeof c=="string"&&!c.startsWith("${env:")&&t.push(`MCP server "${r}" ${s}.${l} may contain a literal secret.`)}return t}o(Je,"likelySecretWarnings");function Be(e){let t=N(e),n=P("mcp",e),r=P("extensions",e),i=t.mcpServers,s=t.extensions,a=E(i)?Object.keys(i).length:0,l=Array.isArray(s)?s.length:0,c=o((b,R,D)=>m(b)?{action:"none",entries:R,destination:b,reason:"destination-exists"}:D?{action:"create",entries:R,destination:b}:{action:"none",entries:0,destination:b,reason:"legacy-absent"},"domainPlan");return{mcp:c(n,a,i!==void 0),extensions:c(r,l,s!==void 0),warnings:Je(i)}}o(Be,"planLegacyIntegrationMigration");function Ye(e,t){let n=ne(e);ee(g.dirname(n),{recursive:!0,mode:448});let r=`${n}.${process.pid}.${Date.now()}.tmp`,i=te(r,"wx",384);try{De(i,`${JSON.stringify(t,null,2)}
150
- `,"utf8"),Ae(i)}finally{Y(i)}try{Re(r,n)}catch(s){throw m(r)&&Q(r),new Error("Failed to atomically clean legacy integration fields.",{cause:s})}}o(Ye,"writeCoreConfigAtomically");function Ft(e){let t=Be(e.configHome),n=N(e.configHome),r=[];t.mcp.action==="create"&&(A({domain:"mcp",configHome:e.configHome,document:{version:1,servers:E(n.mcpServers)?n.mcpServers:{}},validate:k}),r.push("mcp")),t.extensions.action==="create"&&(A({domain:"extensions",configHome:e.configHome,document:{version:1,paths:Array.isArray(n.extensions)?n.extensions:[]},validate:M}),r.push("extensions"));let i=!1;if(e.cleanupLegacy&&m(ne(e.configHome))){let s={...n};m(t.mcp.destination)&&delete s.mcpServers,m(t.extensions.destination)&&delete s.extensions,Qe(n,s)||(Ye(e.configHome,s),i=!0)}return{...t,applied:r,cleanedLegacy:i}}o(Ft,"migrateLegacyIntegrationConfig");function Qe(e,t){return JSON.stringify(e)===JSON.stringify(t)}o(Qe,"isDeepStrictEqualForConfig");function Ze(e){return m(e)?Te(Ie(e,"utf8")):void 0}o(Ze,"currentUserRevision");function et(e){let t=`${e}.lock`;try{return{fd:te(t,"wx",384),path:t}}catch(n){throw new Error(`Integration configuration is busy: ${g.basename(e)}`,{cause:n})}}o(et,"acquireWriteLock");function A(e){let t=P(e.domain,e.configHome),n=e.validate(e.document);ee(g.dirname(t),{recursive:!0,mode:448});let r=et(t);try{let i=Ze(t);if(e.expectedRevision!==void 0&&i!==e.expectedRevision)throw new Error(`Integration configuration revision changed (expected ${e.expectedRevision}, actual ${i??"missing"}).`);let s=`${JSON.stringify(n,null,2)}
151
- `,a=`${t}.${process.pid}.${Date.now()}.tmp`,l=te(a,"wx",384);try{De(l,s,"utf8"),Ae(l)}finally{Y(l)}try{Re(a,t)}catch(c){throw m(a)&&Q(a),new Error(`Failed to atomically replace ${g.basename(t)}.`,{cause:c})}return O({domain:e.domain,source:"user",path:t,raw:s,document:n})}finally{Y(r.fd),m(r.path)&&Q(r.path)}}o(A,"writeIntegrationDocument");function Me(e){if(!m(e))return"missing";let t=Ge(e);return`${t.dev}:${t.ino}:${t.size}:${t.mtimeMs}`}o(Me,"metadataSignature");function L(e,t){return{code:e,message:t,time:new Date().toISOString()}}o(L,"safeDiagnostic");var Oe=class{static{o(this,"IntegrationConfigController")}#a;#r;#c;#l;#e;#t;#u="";#o;#n;#i;#d=Promise.resolve();#s=new Set;constructor(t){this.#a=t.domain,this.#r=P(t.domain,t.configHome),this.#l=t.validate,this.#c=t.read}async initialize(){let t=await this.reload();if(!t.ok||!this.#e)throw new Error(t.ok?"Integration configuration did not produce a snapshot.":t.error);return structuredClone(this.#e)}snapshot(){return this.#e?structuredClone(this.#e):void 0}status(){return{domain:this.#a,path:this.#r,...this.#e?{revision:this.#e.revision,source:this.#e.source,lastReloadAt:this.#e.loadedAt}:{},...this.#t?{diagnostic:this.#t}:{},watching:this.#o!==void 0}}subscribe(t){return this.#s.add(t),()=>{this.#s.delete(t)}}reload(){let t=this.#d.then(()=>this.#f());return this.#d=t.then(()=>{},()=>{}),t}async#f(){this.#u=Me(this.#r);let t;try{t=this.#c(),this.#l(t.document)}catch{return this.#t=L("invalid-config","Integration configuration is invalid; check the file against its versioned schema."),{ok:!1,error:this.#t.message}}let n=this.#e?structuredClone(this.#e):void 0;try{for(let r of this.#s)await r(structuredClone(t),n)}catch{return this.#t=L("activation-failed","Integration configuration could not be activated; the previous configuration remains active."),{ok:!1,error:this.#t.message}}return this.#e=t,this.#t=void 0,{ok:!0,snapshot:structuredClone(t)}}async ensureCurrent(){return Me(this.#r)===this.#u&&this.#e?{ok:!0,snapshot:structuredClone(this.#e)}:this.reload()}startWatching(t=100,n=2e3){if(!(this.#o||this.#i)){ee(g.dirname(this.#r),{recursive:!0,mode:448});try{this.#o=ze(g.dirname(this.#r),(r,i)=>{i!==null&&i.toString()!==g.basename(this.#r)||(this.#n&&clearTimeout(this.#n),this.#n=setTimeout(()=>{this.#n=void 0,this.reload()},t),this.#n.unref?.())}),this.#o.unref(),this.#o.on("error",()=>{this.#t=L("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")})}catch{this.#t=L("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")}this.#i=setInterval(()=>{this.ensureCurrent()},n),this.#i.unref?.()}}close(){this.#n&&clearTimeout(this.#n),this.#n=void 0,this.#i&&clearInterval(this.#i),this.#i=void 0,this.#o?.close(),this.#o=void 0,this.#s.clear()}};var it=rt(tt),st=2,Ne=!1,d=Ee(),tn=p.join(d,"sessions"),f=p.join(d,"config.json"),nn=60,h=null,ie=!1,at="dumb";function ct(e){let t=p.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",r=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",r],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",r]:["-lc",r],sentinel:n}}o(ct,"buildShellEnvCommand");function lt(e,t){let n=`${t}\0`,r=e.lastIndexOf(n);if(r===-1)return{};let i=e.slice(r+n.length),s={};for(let a of i.split("\0")){if(!a)continue;let l=a.indexOf("=");l<=0||(s[a.slice(0,l)]=a.slice(l+1))}return s}o(lt,"parseNullDelimitedShellEnv");function ut(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let r=e.shell??t.SHELL;if(!r||!p.isAbsolute(r))return!1;let{args:i,sentinel:s}=ct(r),a=e.run??nt,l={...t,TERM:at},c=a(r,i,{encoding:"utf8",env:l,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(c.status!==0||!c.stdout)return!1;let b=typeof c.stdout=="string"?c.stdout:c.stdout.toString("utf8"),R=lt(b,s),D=!1;for(let[G,Fe]of Object.entries(R))G!=="TERM"&&t[G]===void 0&&(t[G]=Fe,D=!0);return D}o(ut,"hydrateProcessEnvFromShell");function dt(){if(!ie){ie=!0;try{ut()}catch{}}}o(dt,"ensureShellEnvironmentHydrated");function rn(){ie=!1}o(rn,"resetShellEnvironmentHydrationForTesting");function ft(e){he(e.customProviders??[])}o(ft,"registerConfiguredCustomProviders");function se(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}o(se,"normalizeConfiguredExtensions");function pt(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{u.mkdirSync(p.dirname(f),{recursive:!0}),u.writeFileSync(f,JSON.stringify(t,null,2))}catch{}return t}o(pt,"migrateLegacyPermissionModeInConfig");function mt(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=u.readFileSync(f,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&u.writeFileSync(f,n)}catch{}return{...e,permissionMode:"auto"}}o(mt,"migrateAutoInProjectAliasInConfig");function gt(){if(h)return h;let e="0.7.73";if(e)return h=e,h;let t=p.join(p.dirname(ot(import.meta.url)),"../../package.json");if(u.existsSync(t))try{return h=JSON.parse(u.readFileSync(t,"utf-8")).version??"0.0.0",h??"0.0.0"}catch{}return h="0.0.0",h}o(gt,"getVersion");var on=gt();function ht(e){return fe(e)}o(ht,"getProviderModel");function ae(e,t){let n=new Set(e.map(i=>i.toLowerCase())),r=[...e];for(let i of t)n.has(i.toLowerCase())||r.push(i);return r}o(ae,"mergeModels");function vt(e,t){t||(t=ce().providerModels);let n=t?.[e];if(n&&n.length>0){try{let r=W(e);if(r.length>0)return ae(n,r)}catch{}try{let r=C(e);if(r)return ae(n,r.getAvailableModels())}catch{}return n}try{let r=W(e);if(r.length>0)return r}catch{}try{let r=C(e);if(r)return r.getAvailableModels()}catch{}return[]}o(vt,"getProviderAvailableModels");function yt(e,t){let n=pe(e,t);if(n!=="unknown")return n;try{let r=C(e);if(r)return r.getReasoningCapability(t)}catch{}return"unknown"}o(yt,"getProviderReasoningCapability");function Et(e){let t=me(e);if(t)return t;try{return H().find(r=>r.name===e)?.capabilityProfile??null}catch{return null}}o(Et,"getProviderCapabilityProfile");function je(e,t){let n=Et(e),r=yt(e,t);if(n)return{capabilityProfile:n,reasoningCapability:r};try{let i=ve(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}o(je,"getProviderCapabilityMetadata");function sn(e,t){let n=je(e,t);return n?xe({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(sn,"getProviderCapabilitySnapshot");function wt(e,t,n,r){let i=je(e,t);return i?be({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:r}):null}o(wt,"getProviderPolicyDecision");function an(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",r=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${r}`}o(an,"describeProviderCapabilitySummary");function cn(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}o(cn,"formatReasoningCapabilityShort");function _(e){if(e)return e==="none"?"off":e}o(_,"formatReasoningEffortForDisplay");function X(e,t){let n=_(t);n&&!e.includes(n)&&e.push(n)}o(X,"pushUniqueEffortDisplay");function ln(e,t){let n=["auto"],i=U(e,t)?.supportedEfforts?.filter(s=>s.isUserVisible!==!1);if(!i||i.length===0){for(let s of["off","low","medium","high"])X(n,s);return n}for(let s of i)X(n,s.value);return n}o(ln,"getProviderReasoningEffortOptions");function un(e,t){let n=U(e,t),r=new Set(n?.disabledEfforts??[]),i=n?.supportedEfforts?.filter(c=>c.isUserVisible!==!1),s=[],a=n?.supportsDisabledThinking===!0;if(!i||i.length===0){for(let c of["low","medium","high"])X(s,c);a=!0}else for(let c of i){if(c.value==="none"){a=!0;continue}if(r.has(c.value)){a=!0;continue}X(s,c.value)}let l=[];return a&&l.push("off"),l.push(...s),l.push("auto"),l}o(un,"getProviderReasoningEffortCycle");function xt(e,t){if(t===!1)return"off";switch(e){case"off":return"off";case"quick":return"low";case"balanced":return"medium";case"deep":return"high";default:return"auto"}}o(xt,"legacyReasoningModeToEffortDisplay");function U(e,t){let n=t??ht(e);if(!n)return;let r=ye(e,n)?.reasoningProfile;if(r)return le(r,we(e,n))}o(U,"resolveReasoningProfileForDisplay");function dn(e){let t=_(e.effort)??xt(e.reasoningMode,e.thinking),n=U(e.provider,e.model);if(!n)return t;try{let r=ue({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=_(r.configuredEffort)??t,a=r.configuredEffort!==void 0&&n.disabledEfforts?.includes(r.configuredEffort)===!0?"off":_(r.effectiveEffort);return a&&a!==i?`${i}->${a}`:i}catch{if(e.effort)try{let r=q({currentEffort:e.effort,capability:n}),i=_(e.effort)??t,s=_(r.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}o(dn,"formatReasoningEffortStatusLabel");function fn(e){let t=It(e);if(!t)return{preserved:!0};let n=U(e.provider,e.model);if(!n)return{configuredEffort:t,runtimeEffort:t,preserved:!0};let r=q({currentEffort:t,capability:n});return{configuredEffort:t,runtimeEffort:r.effectiveEffort,preserved:r.preserved,diagnostic:r.diagnostic}}o(fn,"resolveProviderReasoningRuntimeEffort");function bt(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}o(bt,"describeReasoningCapabilityControl");function pn(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}o(pn,"describeReasoningExecution");function mn(e){let t=[];e||(e=ce().providerModels);for(let n of ge())t.push({name:n.name,model:n.model,models:vt(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=H().map(r=>({...r,models:(()=>{let i=e?.[r.name];return i&&i.length>0?ae(i,r.models):r.models})()}));t.push(...n)}catch{}return t}o(mn,"getProviderList");function gn(e){if(de(e))return!0;try{return C(e)?.isConfigured()??!1}catch{return!1}}o(gn,"isProviderConfigured");var F=class extends Error{static{o(this,"InvalidAgentModeConfigError")}};function Pt(e){let t=e.agentMode;if(t===void 0||t==="ama"||t==="sa")return e;if(t!=="amaw"&&t!=="ama-workflow")throw new F(`Invalid agentMode "${t}" in ${f}. Expected "ama" or "sa".`);let n={...e,agentMode:"ama",schemaVersion:Math.max(e.schemaVersion??0,st)},r=`${f}.migrate-${process.pid}.tmp`;try{u.writeFileSync(r,JSON.stringify(n,null,2),{mode:384}),u.renameSync(r,f)}catch{u.rmSync(r,{force:!0})}return Ne||(process.emitWarning(`Migrated persisted agentMode "${t}" to "ama". Workflow use is now explicit intent.`,{code:"KODAX_AGENT_MODE_MIGRATED"}),Ne=!0),n}o(Pt,"migrateLegacyAgentModeConfig");function ce(){try{if(u.existsSync(f)){let n=JSON.parse(u.readFileSync(f,"utf-8")),r=Pt(n),i=r.reasoningCeiling??r.reasoningMode,s=[],a={};try{s=[...K(d).document.paths]}catch{}try{a=$(d).document.servers}catch{}return mt(pt({...r,reasoningMode:i,extensions:se(s),mcpServers:a}))}}catch(n){if(n instanceof F)throw n}let e,t;try{let n=K(d);n.source!=="default"&&(e=se([...n.document.paths]))}catch{}try{let n=$(d);n.source!=="default"&&(t=n.document.servers)}catch{}return{...e===void 0?{}:{extensions:e},...t===void 0?{}:{mcpServers:t}}}o(ce,"loadConfig");var St=p.join(d,"config.example.jsonc"),oe={mcp:p.join(d,"integrations","mcp.example.jsonc"),a2a:p.join(d,"integrations","a2a.example.jsonc"),extensions:p.join(d,"integrations","extensions.example.jsonc")},_t=[{name:"core",path:St},{name:"mcp",path:oe.mcp},{name:"a2a",path:oe.a2a},{name:"extensions",path:oe.extensions}];function Ct(){let e=[];for(let t of _t)try{if(u.existsSync(t.path))continue;u.mkdirSync(p.dirname(t.path),{recursive:!0}),u.writeFileSync(t.path,Ce(t.name),"utf8"),e.push(t.path)}catch{}return e}o(Ct,"ensureExampleConfigFiles");function hn(){return Ct()[0]}o(hn,"ensureExampleConfigFile");var j=new Map;function kt(e,t){let n=process.env[e],r=j.get(e),i=r!==void 0&&n===r;if(n!==void 0&&!i){j.delete(e);return}if(t===void 0){i&&delete process.env[e],j.delete(e);return}process.env[e]=t,j.set(e,t)}o(kt,"projectConfigEnvironment");var Xe=[{configPath:"streamIdleTimeoutMs",env:"KODAX_STREAM_IDLE_TIMEOUT_MS",value:o(e=>x(e.streamIdleTimeoutMs),"value")},{configPath:"repoIntelligenceMode",env:"KODAX_REPO_INTELLIGENCE",value:o(e=>e.repoIntelligenceMode,"value")},{configPath:"repoIntelligenceTrace",env:"KODAX_REPO_INTELLIGENCE_TRACE",value:o(e=>S(e.repoIntelligenceTrace),"value")},{configPath:"verifierLog",env:"KODAX_VERIFIER_LOG",value:o(e=>S(e.verifierLog),"value")},{configPath:"stallLog",env:"KODAX_STALL_LOG",value:o(e=>S(e.stallLog),"value")},{configPath:"fallbackProviders",env:"KODAX_FALLBACK_PROVIDERS",value:o(e=>Ot(e.fallbackProviders),"value")},{configPath:"fastProvider",env:"KODAX_FAST_PROVIDER",value:o(e=>v(e.fastProvider),"value")},{configPath:"fastModel",env:"KODAX_FAST_MODEL",value:o(e=>v(e.fastModel),"value")},{configPath:"deepProvider",env:"KODAX_DEEP_PROVIDER",value:o(e=>v(e.deepProvider),"value")},{configPath:"deepModel",env:"KODAX_DEEP_MODEL",value:o(e=>v(e.deepModel),"value")},{configPath:"provider",env:"KODAX_PROVIDER",value:o(e=>v(e.provider),"value")},{configPath:"effort",env:"KODAX_EFFORT",value:o(e=>v(e.effort),"value")},{configPath:"runtimeMode",env:"KODAX_RUNTIME_MODE",value:o(e=>e.runtimeMode,"value")},{configPath:"sessionRetentionDays",env:"KODAX_SESSION_RETENTION_DAYS",value:o(e=>x(e.sessionRetentionDays),"value")},{configPath:"maxOutputTokens",env:"KODAX_MAX_OUTPUT_TOKENS",value:o(e=>x(e.maxOutputTokens),"value")},{configPath:"disablePromptCache",env:"KODAX_DISABLE_PROMPT_CACHE",value:o(e=>S(e.disablePromptCache),"value")},{configPath:"lsp",env:"KODAX_LSP",value:o(e=>S(e.lsp),"value")},{configPath:"lspAutoDownload",env:"KODAX_LSP_DOWNLOAD",value:o(e=>S(e.lspAutoDownload),"value")},{configPath:"acpLogLevel",env:"KODAX_ACP_LOG",value:o(e=>v(e.acpLogLevel),"value")},{configPath:"repoIntelligence.toolWaitMs",env:"KODAX_REPO_INTELLIGENCE_TOOL_WAIT_MS",value:o(e=>x(e.repoIntelligence?.toolWaitMs),"value")},{configPath:"repoIntelligence.workerTimeoutMs",env:"KODAX_REPO_INTELLIGENCE_WORKER_TIMEOUT_MS",value:o(e=>x(e.repoIntelligence?.workerTimeoutMs),"value")},{configPath:"repoIntelligence.workerOldSpaceMb",env:"KODAX_REPO_INTELLIGENCE_WORKER_OLD_SPACE_MB",value:o(e=>x(e.repoIntelligence?.workerOldSpaceMb),"value")},{configPath:"repoIntelligence.storageDir",env:"KODAX_REPO_INTELLIGENCE_STORAGE_DIR",value:o(e=>v(e.repoIntelligence?.storageDir),"value")},{configPath:"workflow.maxConcurrency",env:"KODAX_WORKFLOW_MAX_CONCURRENCY",value:o(e=>x(e.workflow?.maxConcurrency),"value")}];function Mt(e){for(let t of Xe)kt(t.env,t.value(e))}o(Mt,"applyConfigSurfaceBridges");function v(e){return e?.trim()||void 0}o(v,"normalizedConfigString");function x(e){return typeof e=="number"&&Number.isFinite(e)?String(e):void 0}o(x,"configNumberString");function S(e){return e===void 0?void 0:e?"1":"0"}o(S,"configBooleanString");function Ot(e){return e?.filter(t=>t.trim().length>0).join(",")}o(Ot,"configStringList");var vn=[...Xe.map(({configPath:e,env:t})=>({configPath:e,env:t}))];function At(e){Mt(e)}o(At,"applyConfigEnvironment");function yn(){dt();let e=ce();return At(e),ft(e),Se(e.locale),e}o(yn,"prepareRuntimeConfig");function En(e){let t={};if(u.existsSync(f))try{let a=JSON.parse(u.readFileSync(f,"utf8"));a&&typeof a=="object"&&!Array.isArray(a)&&(t=a)}catch{}let{extensions:n,mcpServers:r,...i}=e,s={...t,...i};for(let a of Object.keys(i))i[a]===void 0&&delete s[a];if(u.mkdirSync(p.dirname(f),{recursive:!0}),u.writeFileSync(f,JSON.stringify(s,null,2)),n!==void 0){let a=K(d);A({domain:"extensions",configHome:d,...a.source==="user"?{expectedRevision:a.revision}:{},document:{version:1,paths:se(n)??[]},validate:M})}if(r!==void 0){let a=$(d);A({domain:"mcp",configHome:d,...a.source==="user"?{expectedRevision:a.revision}:{},document:{version:1,servers:r},validate:k})}}o(En,"saveConfig");function wn(e,t,n){return e.effort!==void 0||V(n).kind==="value"||t.effort!==void 0}o(wn,"resolveInitialEffortOverride");function y(e){return e?.trim()?e:void 0}o(y,"nonEmptySelection");function xn(e){return y(e.explicitProvider)??y(e.environmentProvider)??y(e.configuredProvider)??e.defaultProvider}o(xn,"resolveRuntimeProviderSelection");function bn(e){let t=y(e.explicitModel);if(t)return t;let n=y(e.configuredModel);if(!n)return;let r=y(e.explicitProvider)??y(e.environmentProvider);return r?y(e.configuredProvider)===r?n:void 0:n}o(bn,"resolveRuntimeModelSelection");function Pn(e){if(e.explicitEffort!==void 0)return z(e.explicitEffort);let t=V(e.environmentEffort);return t.kind==="value"?t.value:e.configuredEffort===void 0?void 0:z(e.configuredEffort)}o(Pn,"resolveRuntimeEffortSelection");function It(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}o(It,"resolvePermissionModeEffort");async function Sn(e){try{let{stdout:t}=await it("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}o(Sn,"getGitRoot");function Rt(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(Rt,"formatProviderSourceKind");function _n(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${Rt(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${bt(e.reasoningCapability)}`]}o(_n,"formatProviderCapabilityDetailLines");function Cn(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(i=>({label:i.label,decision:wt(e,t,n,i.hints)})).filter(i=>i.decision!==null)}o(Cn,"getProviderCommonPolicyScenarios");var $e=.5,Ke=0,I={locked:!1,queue:[]};async function kn(e){for(;I.locked;)await new Promise(t=>I.queue.push(t));I.locked=!0;try{let t=(Date.now()-Ke)/1e3;t<$e&&await new Promise(r=>setTimeout(r,($e-t)*1e3));let n=await e();return Ke=Date.now(),n}finally{I.locked=!1;let t=I.queue.shift();t&&t()}}o(kn,"rateLimitedCall");export{Dt as a,_e as b,Ce as c,k as d,M as e,P as f,$ as g,K as h,Be as i,Ft as j,A as k,Oe as l,d as m,tn as n,f as o,nn as p,ut as q,rn as r,ft as s,gt as t,on as u,ht as v,vt as w,yt as x,Et as y,sn as z,wt as A,an as B,cn as C,_ as D,ln as E,un as F,dn as G,fn as H,bt as I,pn as J,mn as K,gn as L,ce as M,St as N,oe as O,Ct as P,hn as Q,vn as R,At as S,yn as T,En as U,wn as V,xn as W,bn as X,Pn as Y,It as Z,Sn as _,Rt as $,_n as aa,Cn as ba,kn as ca};
156
+ `};function Ce(e){return _e[e]}o(Ce,"getConfigTemplate");import{closeSync as Y,existsSync as m,fsyncSync as Oe,mkdirSync as ee,openSync as te,readFileSync as Ie,renameSync as Re,statSync as Ge,unlinkSync as Q,watch as ze,writeFileSync as De}from"node:fs";import{createHash as Ve}from"node:crypto";import g from"node:path";var qe={mcp:"mcp.json",a2a:"a2a.json",extensions:"extensions.json"},He=new Set(["type","command","args","cwd","env","url","headers","connect","startupTimeoutMs","requestTimeoutMs","auth"]);function w(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}o(w,"isRecord");function E(e,t){if(!w(e))throw new Error(`${t} must be an object.`);return e}o(E,"requireRecord");function T(e,t,n){let r=Object.keys(e).find(i=>!t.has(i));if(r!==void 0)throw new Error(`${n} has unknown field "${r}".`)}o(T,"assertNoUnknownKeys");function Le(e,t){if(e.version!==1)throw new Error(`${t} version must be 1.`)}o(Le,"requireVersionOne");function ke(e,t){let n=E(e,t);for(let[r,i]of Object.entries(n))if(r.trim().length===0||typeof i!="string")throw new Error(`${t} must contain non-empty string keys and string values.`);return structuredClone(n)}o(ke,"requireStringMap");function Z(e,t){if(!Array.isArray(e)||!e.every(n=>typeof n=="string"&&n.trim().length>0))throw new Error(`${t} must be an array of non-empty strings.`);return e.map(n=>n.trim())}o(Z,"requireStringArray");function B(e,t){if(e!==void 0&&(!Number.isFinite(e)||Number(e)<=0))throw new Error(`${t} must be a positive number.`)}o(B,"validatePositiveNumber");function We(e,t){if(e.trim().length===0)throw new Error("MCP server names must not be empty.");let n=E(t,`MCP server "${e}"`);T(n,He,`MCP server "${e}"`);let r=n.type??"stdio";if(!["stdio","sse","streamable-http","http"].includes(String(r)))throw new Error(`MCP server "${e}" has an unsupported transport type.`);if(r==="stdio"){if(typeof n.command!="string"||n.command.trim().length===0)throw new Error(`MCP server "${e}" stdio transport requires command.`)}else if(typeof n.url!="string"||n.url.trim().length===0)throw new Error(`MCP server "${e}" ${String(r)} transport requires url.`);if(n.args!==void 0&&Z(n.args,`MCP server "${e}" args`),n.cwd!==void 0&&typeof n.cwd!="string")throw new Error(`MCP server "${e}" cwd must be a string.`);if(n.env!==void 0&&ke(n.env,`MCP server "${e}" env`),n.headers!==void 0&&ke(n.headers,`MCP server "${e}" headers`),n.connect!==void 0&&!["lazy","prewarm","disabled"].includes(String(n.connect)))throw new Error(`MCP server "${e}" has an unsupported connect mode.`);if(B(n.startupTimeoutMs,`MCP server "${e}" startupTimeoutMs`),B(n.requestTimeoutMs,`MCP server "${e}" requestTimeoutMs`),n.auth!==void 0){let i=E(n.auth,`MCP server "${e}" auth`);if(T(i,new Set(["type","clientId","authorizationUrl","tokenUrl","scopes","redirectPort"]),`MCP server "${e}" auth`),i.type!=="oauth2")throw new Error(`MCP server "${e}" auth type must be oauth2.`);for(let a of["clientId","authorizationUrl","tokenUrl"])if(i[a]!==void 0&&typeof i[a]!="string")throw new Error(`MCP server "${e}" auth.${a} must be a string.`);i.scopes!==void 0&&Z(i.scopes,`MCP server "${e}" auth.scopes`),B(i.redirectPort,`MCP server "${e}" auth.redirectPort`)}return structuredClone(n)}o(We,"parseMcpServer");function k(e){let t=E(e,"MCP integration config");T(t,new Set(["version","servers"]),"MCP integration config"),Le(t,"MCP integration config");let n=E(t.servers,"MCP integration config servers"),r={};for(let[i,s]of Object.entries(n))r[i]=We(i,s);return{version:1,servers:r}}o(k,"parseMcpIntegrationDocument");function M(e){let t=E(e,"Extensions integration config");T(t,new Set(["version","paths"]),"Extensions integration config"),Le(t,"Extensions integration config");let n=Z(t.paths,"Extensions integration config paths");if(new Set(n).size!==n.length)throw new Error("Extensions integration config paths must not contain duplicates.");return{version:1,paths:n}}o(M,"parseExtensionsIntegrationDocument");function P(e,t){return g.join(g.resolve(t),"integrations",qe[e])}o(P,"resolveIntegrationConfigPath");function ne(e){return g.join(g.resolve(e),"config.json")}o(ne,"coreConfigPath");function Te(e){return Ve("sha256").update(e).digest("hex")}o(Te,"hashText");function re(e){let t=Ie(e,"utf8");try{return{raw:t,value:JSON.parse(t)}}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Invalid JSON: ${r}`)}}o(re,"readJsonFile");function A(e){return{domain:e.domain,source:e.source,path:e.path,revision:Te(e.raw),document:structuredClone(e.document),loadedAt:new Date().toISOString()}}o(A,"snapshot");function N(e){let t=ne(e);return m(t)?E(re(t).value,"Core config"):{}}o(N,"readCoreConfig");function $(e){let t=P("mcp",e);if(m(t)){let i=re(t);return A({domain:"mcp",source:"user",path:t,raw:i.raw,document:k(i.value)})}let n=N(e).mcpServers,r=k({version:1,servers:w(n)?n:{}});return A({domain:"mcp",source:n===void 0?"default":"legacy-user",path:t,raw:JSON.stringify(r),document:r})}o($,"readMcpIntegration");function K(e){let t=P("extensions",e);if(m(t)){let i=re(t);return A({domain:"extensions",source:"user",path:t,raw:i.raw,document:M(i.value)})}let n=N(e).extensions,r=M({version:1,paths:Array.isArray(n)?n:[]});return A({domain:"extensions",source:n===void 0?"default":"legacy-user",path:t,raw:JSON.stringify(r),document:r})}o(K,"readExtensionsIntegration");function Je(e){if(!w(e))return[];let t=[],n=/(token|secret|password|api[_-]?key|authorization)/i;for(let[r,i]of Object.entries(e))if(w(i))for(let s of["env","headers"]){let a=i[s];if(w(a))for(let[l,c]of Object.entries(a))n.test(l)&&typeof c=="string"&&!c.startsWith("${env:")&&t.push(`MCP server "${r}" ${s}.${l} may contain a literal secret.`)}return t}o(Je,"likelySecretWarnings");function Be(e){let t=N(e),n=P("mcp",e),r=P("extensions",e),i=t.mcpServers,s=t.extensions,a=w(i)?Object.keys(i).length:0,l=Array.isArray(s)?s.length:0,c=o((b,R,D)=>m(b)?{action:"none",entries:R,destination:b,reason:"destination-exists"}:D?{action:"create",entries:R,destination:b}:{action:"none",entries:0,destination:b,reason:"legacy-absent"},"domainPlan");return{mcp:c(n,a,i!==void 0),extensions:c(r,l,s!==void 0),warnings:Je(i)}}o(Be,"planLegacyIntegrationMigration");function Ye(e,t){let n=ne(e);ee(g.dirname(n),{recursive:!0,mode:448});let r=`${n}.${process.pid}.${Date.now()}.tmp`,i=te(r,"wx",384);try{De(i,`${JSON.stringify(t,null,2)}
157
+ `,"utf8"),Oe(i)}finally{Y(i)}try{Re(r,n)}catch(s){throw m(r)&&Q(r),new Error("Failed to atomically clean legacy integration fields.",{cause:s})}}o(Ye,"writeCoreConfigAtomically");function Ft(e){let t=Be(e.configHome),n=N(e.configHome),r=[];t.mcp.action==="create"&&(O({domain:"mcp",configHome:e.configHome,document:{version:1,servers:w(n.mcpServers)?n.mcpServers:{}},validate:k}),r.push("mcp")),t.extensions.action==="create"&&(O({domain:"extensions",configHome:e.configHome,document:{version:1,paths:Array.isArray(n.extensions)?n.extensions:[]},validate:M}),r.push("extensions"));let i=!1;if(e.cleanupLegacy&&m(ne(e.configHome))){let s={...n};m(t.mcp.destination)&&delete s.mcpServers,m(t.extensions.destination)&&delete s.extensions,Qe(n,s)||(Ye(e.configHome,s),i=!0)}return{...t,applied:r,cleanedLegacy:i}}o(Ft,"migrateLegacyIntegrationConfig");function Qe(e,t){return JSON.stringify(e)===JSON.stringify(t)}o(Qe,"isDeepStrictEqualForConfig");function Ze(e){return m(e)?Te(Ie(e,"utf8")):void 0}o(Ze,"currentUserRevision");function et(e){let t=`${e}.lock`;try{return{fd:te(t,"wx",384),path:t}}catch(n){throw new Error(`Integration configuration is busy: ${g.basename(e)}`,{cause:n})}}o(et,"acquireWriteLock");function O(e){let t=P(e.domain,e.configHome),n=e.validate(e.document);ee(g.dirname(t),{recursive:!0,mode:448});let r=et(t);try{let i=Ze(t);if(e.expectedRevision!==void 0&&i!==e.expectedRevision)throw new Error(`Integration configuration revision changed (expected ${e.expectedRevision}, actual ${i??"missing"}).`);let s=`${JSON.stringify(n,null,2)}
158
+ `,a=`${t}.${process.pid}.${Date.now()}.tmp`,l=te(a,"wx",384);try{De(l,s,"utf8"),Oe(l)}finally{Y(l)}try{Re(a,t)}catch(c){throw m(a)&&Q(a),new Error(`Failed to atomically replace ${g.basename(t)}.`,{cause:c})}return A({domain:e.domain,source:"user",path:t,raw:s,document:n})}finally{Y(r.fd),m(r.path)&&Q(r.path)}}o(O,"writeIntegrationDocument");function Me(e){if(!m(e))return"missing";let t=Ge(e);return`${t.dev}:${t.ino}:${t.size}:${t.mtimeMs}`}o(Me,"metadataSignature");function L(e,t){return{code:e,message:t,time:new Date().toISOString()}}o(L,"safeDiagnostic");var Ae=class{static{o(this,"IntegrationConfigController")}#a;#r;#c;#l;#e;#t;#u="";#o;#n;#i;#d=Promise.resolve();#s=new Set;constructor(t){this.#a=t.domain,this.#r=P(t.domain,t.configHome),this.#l=t.validate,this.#c=t.read}async initialize(){let t=await this.reload();if(!t.ok||!this.#e)throw new Error(t.ok?"Integration configuration did not produce a snapshot.":t.error);return structuredClone(this.#e)}snapshot(){return this.#e?structuredClone(this.#e):void 0}status(){return{domain:this.#a,path:this.#r,...this.#e?{revision:this.#e.revision,source:this.#e.source,lastReloadAt:this.#e.loadedAt}:{},...this.#t?{diagnostic:this.#t}:{},watching:this.#o!==void 0}}subscribe(t){return this.#s.add(t),()=>{this.#s.delete(t)}}reload(){let t=this.#d.then(()=>this.#f());return this.#d=t.then(()=>{},()=>{}),t}async#f(){this.#u=Me(this.#r);let t;try{t=this.#c(),this.#l(t.document)}catch{return this.#t=L("invalid-config","Integration configuration is invalid; check the file against its versioned schema."),{ok:!1,error:this.#t.message}}let n=this.#e?structuredClone(this.#e):void 0;try{for(let r of this.#s)await r(structuredClone(t),n)}catch{return this.#t=L("activation-failed","Integration configuration could not be activated; the previous configuration remains active."),{ok:!1,error:this.#t.message}}return this.#e=t,this.#t=void 0,{ok:!0,snapshot:structuredClone(t)}}async ensureCurrent(){return Me(this.#r)===this.#u&&this.#e?{ok:!0,snapshot:structuredClone(this.#e)}:this.reload()}startWatching(t=100,n=2e3){if(!(this.#o||this.#i)){ee(g.dirname(this.#r),{recursive:!0,mode:448});try{this.#o=ze(g.dirname(this.#r),(r,i)=>{i!==null&&i.toString()!==g.basename(this.#r)||(this.#n&&clearTimeout(this.#n),this.#n=setTimeout(()=>{this.#n=void 0,this.reload()},t),this.#n.unref?.())}),this.#o.unref(),this.#o.on("error",()=>{this.#t=L("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")})}catch{this.#t=L("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")}this.#i=setInterval(()=>{this.ensureCurrent()},n),this.#i.unref?.()}}close(){this.#n&&clearTimeout(this.#n),this.#n=void 0,this.#i&&clearInterval(this.#i),this.#i=void 0,this.#o?.close(),this.#o=void 0,this.#s.clear()}};var it=rt(tt),st=2,Ne=!1,d=we(),tn=p.join(d,"sessions"),f=p.join(d,"config.json"),nn=60,h=null,ie=!1,at="dumb";function ct(e){let t=p.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",r=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",r],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",r]:["-lc",r],sentinel:n}}o(ct,"buildShellEnvCommand");function lt(e,t){let n=`${t}\0`,r=e.lastIndexOf(n);if(r===-1)return{};let i=e.slice(r+n.length),s={};for(let a of i.split("\0")){if(!a)continue;let l=a.indexOf("=");l<=0||(s[a.slice(0,l)]=a.slice(l+1))}return s}o(lt,"parseNullDelimitedShellEnv");function ut(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let r=e.shell??t.SHELL;if(!r||!p.isAbsolute(r))return!1;let{args:i,sentinel:s}=ct(r),a=e.run??nt,l={...t,TERM:at},c=a(r,i,{encoding:"utf8",env:l,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(c.status!==0||!c.stdout)return!1;let b=typeof c.stdout=="string"?c.stdout:c.stdout.toString("utf8"),R=lt(b,s),D=!1;for(let[G,Fe]of Object.entries(R))G!=="TERM"&&t[G]===void 0&&(t[G]=Fe,D=!0);return D}o(ut,"hydrateProcessEnvFromShell");function dt(){if(!ie){ie=!0;try{ut()}catch{}}}o(dt,"ensureShellEnvironmentHydrated");function rn(){ie=!1}o(rn,"resetShellEnvironmentHydrationForTesting");function ft(e){he(e.customProviders??[])}o(ft,"registerConfiguredCustomProviders");function se(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}o(se,"normalizeConfiguredExtensions");function pt(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{u.mkdirSync(p.dirname(f),{recursive:!0}),u.writeFileSync(f,JSON.stringify(t,null,2))}catch{}return t}o(pt,"migrateLegacyPermissionModeInConfig");function mt(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=u.readFileSync(f,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&u.writeFileSync(f,n)}catch{}return{...e,permissionMode:"auto"}}o(mt,"migrateAutoInProjectAliasInConfig");function gt(){if(h)return h;let e="0.7.75";if(e)return h=e,h;let t=p.join(p.dirname(ot(import.meta.url)),"../../package.json");if(u.existsSync(t))try{return h=JSON.parse(u.readFileSync(t,"utf-8")).version??"0.0.0",h??"0.0.0"}catch{}return h="0.0.0",h}o(gt,"getVersion");var on=gt();function ht(e){return fe(e)}o(ht,"getProviderModel");function ae(e,t){let n=new Set(e.map(i=>i.toLowerCase())),r=[...e];for(let i of t)n.has(i.toLowerCase())||r.push(i);return r}o(ae,"mergeModels");function vt(e,t){t||(t=ce().providerModels);let n=t?.[e];if(n&&n.length>0){try{let r=H(e);if(r.length>0)return ae(n,r)}catch{}try{let r=C(e);if(r)return ae(n,r.getAvailableModels())}catch{}return n}try{let r=H(e);if(r.length>0)return r}catch{}try{let r=C(e);if(r)return r.getAvailableModels()}catch{}return[]}o(vt,"getProviderAvailableModels");function yt(e,t){let n=pe(e,t);if(n!=="unknown")return n;try{let r=C(e);if(r)return r.getReasoningCapability(t)}catch{}return"unknown"}o(yt,"getProviderReasoningCapability");function wt(e){let t=me(e);if(t)return t;try{return W().find(r=>r.name===e)?.capabilityProfile??null}catch{return null}}o(wt,"getProviderCapabilityProfile");function je(e,t){let n=wt(e),r=yt(e,t);if(n)return{capabilityProfile:n,reasoningCapability:r};try{let i=ve(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}o(je,"getProviderCapabilityMetadata");function sn(e,t){let n=je(e,t);return n?xe({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(sn,"getProviderCapabilitySnapshot");function Et(e,t,n,r){let i=je(e,t);return i?be({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:r}):null}o(Et,"getProviderPolicyDecision");function an(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",r=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${r}`}o(an,"describeProviderCapabilitySummary");function cn(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}o(cn,"formatReasoningCapabilityShort");function _(e){if(e)return e==="none"?"off":e}o(_,"formatReasoningEffortForDisplay");function X(e,t){let n=_(t);n&&!e.includes(n)&&e.push(n)}o(X,"pushUniqueEffortDisplay");function ln(e,t){let n=["auto"],i=U(e,t)?.supportedEfforts?.filter(s=>s.isUserVisible!==!1);if(!i||i.length===0){for(let s of["off","low","medium","high"])X(n,s);return n}for(let s of i)X(n,s.value);return n}o(ln,"getProviderReasoningEffortOptions");function un(e,t){let n=U(e,t),r=new Set(n?.disabledEfforts??[]),i=n?.supportedEfforts?.filter(c=>c.isUserVisible!==!1),s=[],a=n?.supportsDisabledThinking===!0;if(!i||i.length===0){for(let c of["low","medium","high"])X(s,c);a=!0}else for(let c of i){if(c.value==="none"){a=!0;continue}if(r.has(c.value)){a=!0;continue}X(s,c.value)}let l=[];return a&&l.push("off"),l.push(...s),l.push("auto"),l}o(un,"getProviderReasoningEffortCycle");function xt(e,t){if(t===!1)return"off";switch(e){case"off":return"off";case"quick":return"low";case"balanced":return"medium";case"deep":return"high";default:return"auto"}}o(xt,"legacyReasoningModeToEffortDisplay");function U(e,t){let n=t??ht(e);if(!n)return;let r=ye(e,n)?.reasoningProfile;if(r)return le(r,Ee(e,n))}o(U,"resolveReasoningProfileForDisplay");function dn(e){let t=_(e.effort)??xt(e.reasoningMode,e.thinking),n=U(e.provider,e.model);if(!n)return t;try{let r=ue({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=_(r.configuredEffort)??t,a=r.configuredEffort!==void 0&&n.disabledEfforts?.includes(r.configuredEffort)===!0?"off":_(r.effectiveEffort);return a&&a!==i?`${i}->${a}`:i}catch{if(e.effort)try{let r=q({currentEffort:e.effort,capability:n}),i=_(e.effort)??t,s=_(r.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}o(dn,"formatReasoningEffortStatusLabel");function fn(e){let t=It(e);if(!t)return{preserved:!0};let n=U(e.provider,e.model);if(!n)return{configuredEffort:t,runtimeEffort:t,preserved:!0};let r=q({currentEffort:t,capability:n});return{configuredEffort:t,runtimeEffort:r.effectiveEffort,preserved:r.preserved,diagnostic:r.diagnostic}}o(fn,"resolveProviderReasoningRuntimeEffort");function bt(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}o(bt,"describeReasoningCapabilityControl");function pn(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}o(pn,"describeReasoningExecution");function mn(e){let t=[];e||(e=ce().providerModels);for(let n of ge())t.push({name:n.name,model:n.model,models:vt(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=W().map(r=>({...r,models:(()=>{let i=e?.[r.name];return i&&i.length>0?ae(i,r.models):r.models})()}));t.push(...n)}catch{}return t}o(mn,"getProviderList");function gn(e){if(de(e))return!0;try{return C(e)?.isConfigured()??!1}catch{return!1}}o(gn,"isProviderConfigured");var F=class extends Error{static{o(this,"InvalidAgentModeConfigError")}};function Pt(e){let t=e.agentMode;if(t===void 0||t==="ama"||t==="sa")return e;if(t!=="amaw"&&t!=="ama-workflow")throw new F(`Invalid agentMode "${t}" in ${f}. Expected "ama" or "sa".`);let n={...e,agentMode:"ama",schemaVersion:Math.max(e.schemaVersion??0,st)},r=`${f}.migrate-${process.pid}.tmp`;try{u.writeFileSync(r,JSON.stringify(n,null,2),{mode:384}),u.renameSync(r,f)}catch{u.rmSync(r,{force:!0})}return Ne||(process.emitWarning(`Migrated persisted agentMode "${t}" to "ama". Workflow use is now explicit intent.`,{code:"KODAX_AGENT_MODE_MIGRATED"}),Ne=!0),n}o(Pt,"migrateLegacyAgentModeConfig");function ce(){try{if(u.existsSync(f)){let n=JSON.parse(u.readFileSync(f,"utf-8")),r=Pt(n),i=r.reasoningCeiling??r.reasoningMode,s=[],a={};try{s=[...K(d).document.paths]}catch{}try{a=$(d).document.servers}catch{}return mt(pt({...r,reasoningMode:i,extensions:se(s),mcpServers:a}))}}catch(n){if(n instanceof F)throw n}let e,t;try{let n=K(d);n.source!=="default"&&(e=se([...n.document.paths]))}catch{}try{let n=$(d);n.source!=="default"&&(t=n.document.servers)}catch{}return{...e===void 0?{}:{extensions:e},...t===void 0?{}:{mcpServers:t}}}o(ce,"loadConfig");var St=p.join(d,"config.example.jsonc"),oe={mcp:p.join(d,"integrations","mcp.example.jsonc"),a2a:p.join(d,"integrations","a2a.example.jsonc"),extensions:p.join(d,"integrations","extensions.example.jsonc")},_t=[{name:"core",path:St},{name:"mcp",path:oe.mcp},{name:"a2a",path:oe.a2a},{name:"extensions",path:oe.extensions}];function Ct(){let e=[];for(let t of _t)try{if(u.existsSync(t.path))continue;u.mkdirSync(p.dirname(t.path),{recursive:!0}),u.writeFileSync(t.path,Ce(t.name),"utf8"),e.push(t.path)}catch{}return e}o(Ct,"ensureExampleConfigFiles");function hn(){return Ct()[0]}o(hn,"ensureExampleConfigFile");var j=new Map;function kt(e,t){let n=process.env[e],r=j.get(e),i=r!==void 0&&n===r;if(n!==void 0&&!i){j.delete(e);return}if(t===void 0){i&&delete process.env[e],j.delete(e);return}process.env[e]=t,j.set(e,t)}o(kt,"projectConfigEnvironment");var Xe=[{configPath:"streamIdleTimeoutMs",env:"KODAX_STREAM_IDLE_TIMEOUT_MS",value:o(e=>x(e.streamIdleTimeoutMs),"value")},{configPath:"repoIntelligenceMode",env:"KODAX_REPO_INTELLIGENCE",value:o(e=>e.repoIntelligenceMode,"value")},{configPath:"repoIntelligenceTrace",env:"KODAX_REPO_INTELLIGENCE_TRACE",value:o(e=>S(e.repoIntelligenceTrace),"value")},{configPath:"verifierLog",env:"KODAX_VERIFIER_LOG",value:o(e=>S(e.verifierLog),"value")},{configPath:"stallLog",env:"KODAX_STALL_LOG",value:o(e=>S(e.stallLog),"value")},{configPath:"fallbackProviders",env:"KODAX_FALLBACK_PROVIDERS",value:o(e=>At(e.fallbackProviders),"value")},{configPath:"fastProvider",env:"KODAX_FAST_PROVIDER",value:o(e=>v(e.fastProvider),"value")},{configPath:"fastModel",env:"KODAX_FAST_MODEL",value:o(e=>v(e.fastModel),"value")},{configPath:"deepProvider",env:"KODAX_DEEP_PROVIDER",value:o(e=>v(e.deepProvider),"value")},{configPath:"deepModel",env:"KODAX_DEEP_MODEL",value:o(e=>v(e.deepModel),"value")},{configPath:"provider",env:"KODAX_PROVIDER",value:o(e=>v(e.provider),"value")},{configPath:"effort",env:"KODAX_EFFORT",value:o(e=>v(e.effort),"value")},{configPath:"runtimeMode",env:"KODAX_RUNTIME_MODE",value:o(e=>e.runtimeMode,"value")},{configPath:"sessionRetentionDays",env:"KODAX_SESSION_RETENTION_DAYS",value:o(e=>x(e.sessionRetentionDays),"value")},{configPath:"maxOutputTokens",env:"KODAX_MAX_OUTPUT_TOKENS",value:o(e=>x(e.maxOutputTokens),"value")},{configPath:"disablePromptCache",env:"KODAX_DISABLE_PROMPT_CACHE",value:o(e=>S(e.disablePromptCache),"value")},{configPath:"lsp",env:"KODAX_LSP",value:o(e=>S(e.lsp),"value")},{configPath:"lspAutoDownload",env:"KODAX_LSP_DOWNLOAD",value:o(e=>S(e.lspAutoDownload),"value")},{configPath:"acpLogLevel",env:"KODAX_ACP_LOG",value:o(e=>v(e.acpLogLevel),"value")},{configPath:"repoIntelligence.toolWaitMs",env:"KODAX_REPO_INTELLIGENCE_TOOL_WAIT_MS",value:o(e=>x(e.repoIntelligence?.toolWaitMs),"value")},{configPath:"repoIntelligence.workerTimeoutMs",env:"KODAX_REPO_INTELLIGENCE_WORKER_TIMEOUT_MS",value:o(e=>x(e.repoIntelligence?.workerTimeoutMs),"value")},{configPath:"repoIntelligence.workerOldSpaceMb",env:"KODAX_REPO_INTELLIGENCE_WORKER_OLD_SPACE_MB",value:o(e=>x(e.repoIntelligence?.workerOldSpaceMb),"value")},{configPath:"repoIntelligence.storageDir",env:"KODAX_REPO_INTELLIGENCE_STORAGE_DIR",value:o(e=>v(e.repoIntelligence?.storageDir),"value")},{configPath:"workflow.maxConcurrency",env:"KODAX_WORKFLOW_MAX_CONCURRENCY",value:o(e=>x(e.workflow?.maxConcurrency),"value")}];function Mt(e){for(let t of Xe)kt(t.env,t.value(e))}o(Mt,"applyConfigSurfaceBridges");function v(e){return e?.trim()||void 0}o(v,"normalizedConfigString");function x(e){return typeof e=="number"&&Number.isFinite(e)?String(e):void 0}o(x,"configNumberString");function S(e){return e===void 0?void 0:e?"1":"0"}o(S,"configBooleanString");function At(e){return e?.filter(t=>t.trim().length>0).join(",")}o(At,"configStringList");var vn=[...Xe.map(({configPath:e,env:t})=>({configPath:e,env:t}))];function Ot(e){Mt(e)}o(Ot,"applyConfigEnvironment");function yn(){dt();let e=ce();return Ot(e),ft(e),Se(e.locale),e}o(yn,"prepareRuntimeConfig");function wn(e){let t={};if(u.existsSync(f))try{let a=JSON.parse(u.readFileSync(f,"utf8"));a&&typeof a=="object"&&!Array.isArray(a)&&(t=a)}catch{}let{extensions:n,mcpServers:r,...i}=e,s={...t,...i};for(let a of Object.keys(i))i[a]===void 0&&delete s[a];if(u.mkdirSync(p.dirname(f),{recursive:!0}),u.writeFileSync(f,JSON.stringify(s,null,2)),n!==void 0){let a=K(d);O({domain:"extensions",configHome:d,...a.source==="user"?{expectedRevision:a.revision}:{},document:{version:1,paths:se(n)??[]},validate:M})}if(r!==void 0){let a=$(d);O({domain:"mcp",configHome:d,...a.source==="user"?{expectedRevision:a.revision}:{},document:{version:1,servers:r},validate:k})}}o(wn,"saveConfig");function En(e,t,n){return e.effort!==void 0||V(n).kind==="value"||t.effort!==void 0}o(En,"resolveInitialEffortOverride");function y(e){return e?.trim()?e:void 0}o(y,"nonEmptySelection");function xn(e){return y(e.explicitProvider)??y(e.environmentProvider)??y(e.configuredProvider)??e.defaultProvider}o(xn,"resolveRuntimeProviderSelection");function bn(e){let t=y(e.explicitModel);if(t)return t;let n=y(e.configuredModel);if(!n)return;let r=y(e.explicitProvider)??y(e.environmentProvider);return r?y(e.configuredProvider)===r?n:void 0:n}o(bn,"resolveRuntimeModelSelection");function Pn(e){if(e.explicitEffort!==void 0)return z(e.explicitEffort);let t=V(e.environmentEffort);return t.kind==="value"?t.value:e.configuredEffort===void 0?void 0:z(e.configuredEffort)}o(Pn,"resolveRuntimeEffortSelection");function It(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}o(It,"resolvePermissionModeEffort");async function Sn(e){try{let{stdout:t}=await it("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0});return t.trim()}catch{return null}}o(Sn,"getGitRoot");function Rt(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(Rt,"formatProviderSourceKind");function _n(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${Rt(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${bt(e.reasoningCapability)}`]}o(_n,"formatProviderCapabilityDetailLines");function Cn(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(i=>({label:i.label,decision:Et(e,t,n,i.hints)})).filter(i=>i.decision!==null)}o(Cn,"getProviderCommonPolicyScenarios");var $e=.5,Ke=0,I={locked:!1,queue:[]};async function kn(e){for(;I.locked;)await new Promise(t=>I.queue.push(t));I.locked=!0;try{let t=(Date.now()-Ke)/1e3;t<$e&&await new Promise(r=>setTimeout(r,($e-t)*1e3));let n=await e();return Ke=Date.now(),n}finally{I.locked=!1;let t=I.queue.shift();t&&t()}}o(kn,"rateLimitedCall");export{Dt as a,_e as b,Ce as c,k as d,M as e,P as f,$ as g,K as h,Be as i,Ft as j,O as k,Ae as l,d as m,tn as n,f as o,nn as p,ut as q,rn as r,ft as s,gt as t,on as u,ht as v,vt as w,yt as x,wt as y,sn as z,Et as A,an as B,cn as C,_ as D,ln as E,un as F,dn as G,fn as H,bt as I,pn as J,mn as K,gn as L,ce as M,St as N,oe as O,Ct as P,hn as Q,vn as R,Ot as S,yn as T,wn as U,En as V,xn as W,bn as X,Pn as Y,It as Z,Sn as _,Rt as $,_n as aa,Cn as ba,kn as ca};
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Dd as ge,Ed as ze,Fd as Je,Gd as Ge,Hd as Xe,Kd as Ye,cb as Ke,db as Le}from"./chunk-HVCNAZ52.js";import{Q as Ne}from"./chunk-XXQLPTAN.js";import{$d as Be,Ad as re,Dd as De,Ed as je,Gd as Z,Kd as me,Qd as pe,Rd as U,Sd as we,Td as Ue,_d as Ve,ae as He}from"./chunk-OG6DRNKV.js";import{b as fe}from"./chunk-GAFFYJU3.js";import{a as i}from"./chunk-ONUPGMER.js";import{basename as gr,dirname as hr}from"node:path";import{execFile as Yt}from"node:child_process";import oe from"node:path";import{promisify as Zt}from"node:util";var Qt=Zt(Yt),en=1e4,ot=2,Ze=new Set(["write","edit","multi_edit","insert_after_anchor"]),Qe=new Set(["read"]),tn=/^\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 nn(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(nn,"normalizeWaitTimeoutMs");function he(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}i(he,"hasVerificationWork");function V(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}i(V,"normalizeWorkspacePath");function ye(e,t){let n=t.gitRoot?oe.resolve(t.gitRoot):void 0,r=oe.isAbsolute(e)&&n?oe.relative(n,oe.resolve(e)):e;return V(r)}i(ye,"normalizeRequiredPath");function rn(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},r=e.verification.requiredChangedPaths;return{verification:{...n,...r!==void 0&&r.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}i(rn,"resolveVerificationForInput");function on(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(on,"resolveSpawnAgentInput");function it(e){let t=e.trim();return t.length>0&&tn.test(t)}i(it,"isPreparatoryOnlyText");function an(e,t){let n=e.trim(),r=t?.trim();return r&&(n.length===0||it(n))?r:e}i(an,"selectWorkflowFinalText");async function ie(e,t){return(await Qt("git",[...e],{cwd:t,timeout:en,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}i(ie,"runGit");async function sn(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await ie(["rev-parse","--show-toplevel"],t)).trim(),r=await Promise.all([ie(["diff","--name-only","--"],n),ie(["diff","--cached","--name-only","--"],n),ie(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(r.flatMap(a=>a.split(/\r?\n/)).map(V).filter(a=>a.length>0))]}i(sn,"listGitChangedFiles");async function ke(e,t){try{return{paths:(await t(e)).map(V).filter(r=>r.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}i(ke,"captureChangedPaths");function cn(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[],readPathById:new Map,succeededReadPaths:[]}}i(cn,"createMutationRecorder");function et(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 V(n)}}i(et,"readMutationPath");function dn(e,t){return{...e??{},onToolUseStart:i((n,r)=>{if(Ze.has(n.name)){t.toolNameById.set(n.id,n.name);let a=et(n.input);a!==void 0&&t.toolPathById.set(n.id,a)}if(Qe.has(n.name)){let a=et(n.input);a!==void 0&&t.readPathById.set(n.id,a)}e?.onToolUseStart?.(n,r)},"onToolUseStart"),onToolResult:i((n,r)=>{let a=t.toolNameById.get(n.id)??n.name;if(Ze.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(a);let o=t.toolPathById.get(n.id);o!==void 0&&t.succeededPaths.push(o)}if(Qe.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){let o=t.readPathById.get(n.id);o!==void 0&&t.succeededReadPaths.push(o)}e?.onToolResult?.(n,r)},"onToolResult")}}i(dn,"wrapEventsForMutationRecording");function ae(e){return[...new Set(e.filter(t=>t.trim().length>0))]}i(ae,"uniqueItems");function tt(e){let t=e.verification;if(!t)return;let n=[],r=new Set(e.before.paths.map(V)),a=ae(e.after.paths.map(V)),o=a.filter(m=>!r.has(m)),s=ae(e.mutationRecorder.succeededToolCalls),c=e.acceptToolMutationEvidence?s:[],p=e.acceptToolMutationEvidence?ae(e.mutationRecorder.succeededPaths.map(V)):[],g=o.length>0||c.length>0,h=t.enforcement??"hard",y=(t.requiredChangedPaths??[]).map(m=>ye(m,e.ctx)),I=ae(e.mutationRecorder.succeededReadPaths.map(m=>ye(m,e.ctx))),k=(t.requiredReadPaths??[]).map(m=>ye(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}`):g||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&&!g&&n.push("workflow child reached its iteration limit before satisfying the task");for(let m of y)!a.includes(m)&&!p.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);for(let m of k)I.includes(m)||n.push(`required review evidence was not read: ${m}`);let A=t.minFinalTextChars;return A!==void 0&&!g&&e.term.finalText.trim().length<A&&n.push(`finalText was shorter than the required ${A} characters`),t.rejectPreparatoryFinalText===!0&&!g&&it(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:h,reasons:n,changedPaths:a,mutationToolCalls:s,mutationEvidence:g,...I.length>0?{readPaths:I}:{}}}i(tt,"evaluateVerification");function ve(e,t){if(t.ok)return e;let r=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(a=>`- ${a}`)].join(`
2
+ import{Dd as ge,Ed as ze,Fd as Je,Gd as Ge,Hd as Xe,Od as Ye,fb as Ke,gb as Le}from"./chunk-737LI7OS.js";import{Q as Ne}from"./chunk-Q65EAOX6.js";import{Qd as re,Td as De,Ud as je,Wd as Z,_d as me,ee as pe,fe as U,ge as we,he as Ue,oe as Ve,pe as Be,qe as He}from"./chunk-QSMXI4MH.js";import{b as fe}from"./chunk-OGL227XV.js";import{a as i}from"./chunk-ONUPGMER.js";import{basename as gr,dirname as hr}from"node:path";import{execFile as Yt}from"node:child_process";import oe from"node:path";import{promisify as Zt}from"node:util";var Qt=Zt(Yt),en=1e4,ot=2,Ze=new Set(["write","edit","multi_edit","insert_after_anchor"]),Qe=new Set(["read"]),tn=/^\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 nn(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(nn,"normalizeWaitTimeoutMs");function he(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}i(he,"hasVerificationWork");function V(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}i(V,"normalizeWorkspacePath");function ye(e,t){let n=t.gitRoot?oe.resolve(t.gitRoot):void 0,r=oe.isAbsolute(e)&&n?oe.relative(n,oe.resolve(e)):e;return V(r)}i(ye,"normalizeRequiredPath");function rn(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},r=e.verification.requiredChangedPaths;return{verification:{...n,...r!==void 0&&r.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}i(rn,"resolveVerificationForInput");function on(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(on,"resolveSpawnAgentInput");function it(e){let t=e.trim();return t.length>0&&tn.test(t)}i(it,"isPreparatoryOnlyText");function an(e,t){let n=e.trim(),r=t?.trim();return r&&(n.length===0||it(n))?r:e}i(an,"selectWorkflowFinalText");async function ie(e,t){return(await Qt("git",[...e],{cwd:t,timeout:en,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}i(ie,"runGit");async function sn(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await ie(["rev-parse","--show-toplevel"],t)).trim(),r=await Promise.all([ie(["diff","--name-only","--"],n),ie(["diff","--cached","--name-only","--"],n),ie(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(r.flatMap(a=>a.split(/\r?\n/)).map(V).filter(a=>a.length>0))]}i(sn,"listGitChangedFiles");async function ke(e,t){try{return{paths:(await t(e)).map(V).filter(r=>r.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}i(ke,"captureChangedPaths");function cn(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[],readPathById:new Map,succeededReadPaths:[]}}i(cn,"createMutationRecorder");function et(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 V(n)}}i(et,"readMutationPath");function dn(e,t){return{...e??{},onToolUseStart:i((n,r)=>{if(Ze.has(n.name)){t.toolNameById.set(n.id,n.name);let a=et(n.input);a!==void 0&&t.toolPathById.set(n.id,a)}if(Qe.has(n.name)){let a=et(n.input);a!==void 0&&t.readPathById.set(n.id,a)}e?.onToolUseStart?.(n,r)},"onToolUseStart"),onToolResult:i((n,r)=>{let a=t.toolNameById.get(n.id)??n.name;if(Ze.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(a);let o=t.toolPathById.get(n.id);o!==void 0&&t.succeededPaths.push(o)}if(Qe.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){let o=t.readPathById.get(n.id);o!==void 0&&t.succeededReadPaths.push(o)}e?.onToolResult?.(n,r)},"onToolResult")}}i(dn,"wrapEventsForMutationRecording");function ae(e){return[...new Set(e.filter(t=>t.trim().length>0))]}i(ae,"uniqueItems");function tt(e){let t=e.verification;if(!t)return;let n=[],r=new Set(e.before.paths.map(V)),a=ae(e.after.paths.map(V)),o=a.filter(m=>!r.has(m)),s=ae(e.mutationRecorder.succeededToolCalls),c=e.acceptToolMutationEvidence?s:[],p=e.acceptToolMutationEvidence?ae(e.mutationRecorder.succeededPaths.map(V)):[],h=o.length>0||c.length>0,y=t.enforcement??"hard",g=(t.requiredChangedPaths??[]).map(m=>ye(m,e.ctx)),I=ae(e.mutationRecorder.succeededReadPaths.map(m=>ye(m,e.ctx))),k=(t.requiredReadPaths??[]).map(m=>ye(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 g)!a.includes(m)&&!p.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);for(let m of k)I.includes(m)||n.push(`required review evidence was not read: ${m}`);let A=t.minFinalTextChars;return A!==void 0&&!h&&e.term.finalText.trim().length<A&&n.push(`finalText was shorter than the required ${A} characters`),t.rejectPreparatoryFinalText===!0&&!h&&it(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,...I.length>0?{readPaths:I}:{}}}i(tt,"evaluateVerification");function ve(e,t){if(t.ok)return e;let r=[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
  ${r}`:r}i(ve,"appendVerificationFailure");function nt(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}i(nt,"limitReachedWarningVerification");function un(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<ot&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}i(un,"shouldRepairVerificationFailure");function ln(e){let t=e.verification.reasons.map(r=>`- ${r}`).join(`
@@ -7,16 +7,16 @@ ${r}`:r}i(ve,"appendVerificationFailure");function nt(){return{ok:!1,enforcement
7
7
  Workspace changes already present before this repair attempt:
8
8
  ${e.verification.changedPaths?.map(r=>`- ${r}`).join(`
9
9
  `)??""}`:"";return[e.originalPrompt,"","[Workflow verification repair]",`Repair attempt ${e.attempt}/${ot}.`,"The previous attempt did not satisfy the workflow postconditions.","Do not stop at analysis, planning, or a promise to begin. Complete the required file writes in the real workspace now.","Use the available file editing tools when a file change is required, then report the exact files changed.","","Verification failures:",t,n,"","Previous terminal response:",e.previousFinalText.trim()||"(empty)"].join(`
10
- `)}i(ln,"buildVerificationRepairPrompt");function rt(e,t,n,r,a=!1){return t.outputSchema!==void 0&&ze(t.outputSchema),Ge(t.name,t.evidenceRefs,n),{id:e,fanoutClass:"evidence-scan",objective:t.prompt,...t.scopeSummary?{scopeSummary:t.scopeSummary}:{},readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?.map(o=>{if(!o.startsWith("task_id:"))return o;let s=o.slice(8).trim(),c=r?.get(s);if(!c)throw new Error(`Workflow task ${s} has no Actor path.`);return`agent:${c}`})??[],constraints:t.constraints?[...t.constraints]:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{},...t.outputSchema!==void 0?{outputSchema:t.outputSchema}:{},...a?{workflowOutputContract:{kodaxAuthored:!0,terseResult:t.terseResult===!0}}:{},...t.effort?{effort:t.effort}:{}}}i(rt,"buildBundle");function xe(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],r=an(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:r,...n.digest?{digest:n.digest}:{},...n.digestFailed?{digestFailed:!0}:{},...n.digestPending?{digestPending:!0}:{},...n.limitReached?{limitReached:!0}:{},...n.provider?{provider:n.provider}:{},...n.model?{model:n.model}:{},...n.structured!==void 0?{structured:n.structured}:{},...n.digestTokensUsed!==void 0?{digestTokensUsed:n.digestTokensUsed}:{},...n.digestUsage!==void 0?{digestUsage:n.digestUsage}:{},...n.routeFacts?{routeFacts:n.routeFacts}:{}}:{status:"failed",snapStatus:"failed",finalText:r,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{},...n?.digestTokensUsed!==void 0?{digestTokensUsed:n.digestTokensUsed}:{},...n?.digestUsage!==void 0?{digestUsage:n.digestUsage}:{},...n?.routeFacts?{routeFacts:n.routeFacts}:{}}}i(xe,"deriveTerminal");function fn(){let e=i(()=>{},"resolvePromise"),t=i(()=>{},"rejectPromise"),n=new Promise((r,a)=>{e=r,t=a});return n.catch(()=>{}),{promise:n,resolve:e,reject:t}}i(fn,"createPendingChildResult");function mn(e,t){let n=e.normalize("NFKD").replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48);return`${/^[A-Za-z]/.test(n)&&!/^(?:root|workflow|external)(?:[-_]|$)/i.test(n)?n:"step"}-${t}`}i(mn,"workflowActorTaskName");function pn(e){let t=e.workflow;return{readOnly:t.readOnly!==!1,constraints:[...t.constraints??[]],evidenceRefs:[...t.evidenceRefs??[]],...t.scopeSummary?{scope:t.scopeSummary}:{},...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.effort?{effort:t.effort}:{},...e.executionKey?{executionKey:e.executionKey}:{},...e.agentId?{agentId:e.agentId}:{},...e.specialistName?{specialistName:e.specialistName}:{},...e.workflowRunId?{workflowRunId:e.workflowRunId}:{},...t.target?.expectedConfigurationRevision?{expectedConfigurationRevision:t.target.expectedConfigurationRevision}:{}}}i(pn,"workflowActorMetadata");function wn(e,t){let n=xe(e,t);if(n.status!=="completed"&&n.status!=="completed_unverified")throw new Error(n.finalText||`Workflow Agent ${t} ${n.status}.`);let r=e.mergedArtifacts.filter(Boolean);return{output:n.finalText,...r.length>0?{artifacts:r}:{}}}i(wn,"actorExecutionResult");function at(e){let{ctx:t,childOptions:n}=e,r=e.runChild??Je,a=t.actorControl,o=t.actorHost;if(!a||!o)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let s=e.listChangedFiles??sn,c=0,p=0,g=e.generateId??(()=>`wf-child-${c+=1}`),h=new Map,y=new Set,I=i(()=>e.onTaskSummary!==void 0||y.size>0,"hasTaskSummaryObservers"),k=i((f,l)=>{try{e.onTaskSummary?.(f,l)}catch(u){fe({source:"coding:workflow-summary",level:"warn",message:u instanceof Error?u.message:String(u)})}for(let u of y)try{u(f,l)}catch(w){fe({source:"coding:workflow-summary",level:"warn",message:w instanceof Error?w.message:String(w)})}},"notifyTaskSummary"),A=i((f,l,u,w)=>{let S=`workflow:${e.runId??"inline"}:${f}:${w}`,b=fn(),v=i(()=>{},"unregister"),_={async execute(d){try{let T=await u(l,d,o.bindActor(d.actor.path));return b.resolve(T),wn(T,f)}catch(T){throw b.reject(T),T}finally{v()}}};return v=o.registerTurnExecutor(S,_),{key:S,promise:b.promise,cancel:v}},"registerExecution"),m=i(async f=>{let l=on(f,e.defaultChildReadOnly),u=l.subagentType?"constructed":"native",w=l.subagentType,S,b;if(l.target&&l.subagentType)throw new Error("Workflow target and subagentType are mutually exclusive.");if(l.target){let W=t.agentExecutorPlane;if(!W)throw new Error("Workflow target requires a host-bound agent executor plane.");let E=Le(l.target.agentId,W.context,t.agentScope);if(E){if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==E.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let{target:R,...x}=l;l={...x,...E.subagentType?{subagentType:E.subagentType}:{}},u=E.kind,w=E.subagentType}else{if(l.modelHint!==void 0||l.effort!==void 0)throw new Error("External Workflow targets cannot combine local modelHint/effort routing selectors.");if(l.verification?.requiresMutation===!0)throw new Error("External Workflow targets cannot directly satisfy workspace mutation verification.");let R=await W.plane.describe(l.target.agentId,{...W.context,readOnly:l.readOnly},Ke(W.context,t.agentScope));if(!R||R.descriptor.origin!=="external")throw new Error(`Workflow target is not dispatchable: ${l.target.agentId}`);if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==R.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let x=R.descriptor.capabilities;u="external",b=l.target.agentId,S={followup:x.inputRequired!=="unsupported",interrupt:x.cancellation!=="unsupported",streaming:x.streaming!=="unsupported",artifacts:x.artifacts!=="unsupported"}}}let v=g(),_=rt(v,l,new Set(h.keys()),new Map([...h].map(([W,E])=>[W,E.actorPath])),e.kodaxAuthored===!0),T=rn(l).verification,H=cn(),G=l.isolation!=="worktree",K=he(T)?ke(t,s):Promise.resolve({paths:[]}),L=i(async(W,E,R)=>{let x={...n,parentOptions:{...n.parentOptions,events:dn(n.parentOptions.events,H)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:v,itemId:`agent:${v}`}}:{},childActivityName:l.name,workflowDigestMode:I()?"async":"blocking",...I()?{onWorkflowChildDigest:i(q=>{k(q.childId,{...q.digest?{summary:q.digest}:{},summaryKind:q.digest?"digest":"digest-failed",...q.totalTokensUsed>0?{usage:q.usage??{totalTokens:q.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:E.signal,actorControl:void 0,actorHost:void 0};return await K,r([W],t,x)},"runBundle"),C=u==="external"?void 0:A(v,_,L,1);p+=1;let j;try{j=await a.spawn({taskName:mn(l.name,p),objective:l.prompt,kind:u,capabilities:{filesystem:l.readOnly!==!1?"read":"write",canAskUser:!1,...S?{control:S}:{}},metadata:pn({workflow:l,...C?{executionKey:C.key}:{},...b?{agentId:b}:{},...w?{specialistName:w}:{},...e.runId?{workflowRunId:e.runId}:{}})})}catch(W){throw C?.cancel(),W}return h.set(v,{name:l.name,input:l,bundle:_,actorPath:j.actorPath,turnId:j.turnId,...C?{promise:C.promise}:{},runBundle:L,external:u==="external",verification:T,changedPathBaseline:K,mutationRecorder:H,acceptToolMutationEvidence:G,repairAttempts:0}),{taskId:v,name:l.name}},"spawn"),M=i(async(f,l,u=l)=>{let w=i(v=>v.turnId===f.turnId&&(v.kind==="turn_completed"||v.kind==="turn_failed"||v.kind==="turn_interrupted"),"isTerminalEvent"),S=l===void 0?void 0:Date.now()+l,b=0;for(;;){let v=a.eventSnapshot(b);if(v.find(w))return;b=v.at(-1)?.sequence??b;let d=S===void 0?void 0:S-Date.now();if(d!==void 0&&d<=0)throw await a.interrupt(f.actorPath,"workflow wait timeout"),new Error(`workflow task ${f.name} timed out after ${u??l}ms`);let T=await a.wait(b,d);if(!T)throw await a.interrupt(f.actorPath,"workflow wait timeout"),new Error(`workflow task ${f.name} timed out after ${u??l}ms`);if(w(T))return;b=T.sequence}},"waitForActorTurn");return{spawn:m,waitForAgentCapacity:i(f=>o.waitForAgentCapacity(f),"waitForAgentCapacity"),wait:i(async(f,l)=>{let u=h.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);let w=nn(l),S=Date.now(),b=i(async x=>{let q=Date.now()-S,X=w===void 0?void 0:Math.max(0,w-q);if(await M(u,X,w),!x)throw new Error(`workflow task ${f} has no local execution result`);return x},"waitForAttempt");if(u.external){await M(u,w);let x=a.output(u.actorPath,u.turnId);return{taskId:f,name:u.name,status:x.state==="completed"?"completed":x.state==="interrupted"?"stopped":"failed",finalText:x.output??x.error??"",...x.structured===void 0?{}:{structured:x.structured},...x.artifacts.length===0?{}:{artifacts:x.artifacts}}}let v=await b(u.promise),_=v.totalTokensUsed,d=xe(v,f),T=d.routeFacts,H=d.routeFacts?.inputTokens??0,G=d.routeFacts?.outputTokens??0,K=d.routeFacts?.cacheReadTokens??0,L=d.routeFacts?.iterations??0,C=d.routeFacts?.durationMs??0,j=d.routeFacts?.fallbackReason,W=d.digestTokensUsed??0,E=d.digestUsage,R=u.verification?tt({verification:u.verification,term:d,before:await u.changedPathBaseline,after:he(u.verification)?await ke(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0;for(d.limitReached===!0&&R===void 0&&d.status==="completed"&&(R=nt(),d={...d,status:"completed_unverified",snapStatus:"completed",finalText:ve(d.finalText,R)});un({entry:u,term:d,verification:R});){u.repairAttempts+=1;let x=ln({originalPrompt:u.input.prompt,previousFinalText:d.finalText,verification:R,attempt:u.repairAttempts}),q=rt(f,{...u.input,prompt:x},new Set(h.keys()),new Map([...h].map(([Y,Xt])=>[Y,Xt.actorPath])),e.kodaxAuthored===!0),X=A(f,q,u.runBundle,u.repairAttempts+1);u.promise=X.promise;try{let Y=await a.followup(u.actorPath,x,{executionKey:X.key});u.turnId=Y.turn.turnId}catch(Y){throw X.cancel(),Y}v=await b(u.promise),_+=v.totalTokensUsed,d=xe(v,f),H+=d.routeFacts?.inputTokens??0,G+=d.routeFacts?.outputTokens??0,K+=d.routeFacts?.cacheReadTokens??0,L+=d.routeFacts?.iterations??0,C+=d.routeFacts?.durationMs??0,j??=d.routeFacts?.fallbackReason,W+=d.digestTokensUsed??0,d.digestUsage&&(E={inputTokens:(E?.inputTokens??0)+(d.digestUsage.inputTokens??0),outputTokens:(E?.outputTokens??0)+(d.digestUsage.outputTokens??0),totalTokens:(E?.totalTokens??0)+(d.digestUsage.totalTokens??0),cacheReadTokens:(E?.cacheReadTokens??0)+(d.digestUsage.cacheReadTokens??0)}),R=u.verification?tt({verification:u.verification,term:d,before:await u.changedPathBaseline,after:he(u.verification)?await ke(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0,d.limitReached===!0&&R===void 0&&d.status==="completed"&&(R=nt(),d={...d,status:"completed_unverified",snapStatus:"completed",finalText:ve(d.finalText,R)})}if(R!==void 0&&!R.ok&&d.status==="completed"){let x=R.enforcement==="warn";d={...d,status:x?"completed_unverified":"failed",snapStatus:x?"completed":"failed",finalText:ve(d.finalText,R)}}return{taskId:f,name:u.name,status:d.status,finalText:d.finalText,...d.digest?{digest:d.digest}:{},...d.digestFailed?{digestFailed:!0}:{},...d.digestPending?{digestPending:!0}:{},...R!==void 0?{verification:R}:{},...d.limitReached?{limitReached:!0}:{},...d.provider?{provider:d.provider}:{},...d.model?{model:d.model}:{},...d.structured!==void 0?{structured:d.structured}:{},...v.mergedArtifacts.length>0?{artifacts:v.mergedArtifacts.filter(Boolean)}:{},...W>0?{digestUsage:E??{totalTokens:W}}:{},...d.routeFacts?{requestedTier:T?.requestedTier??d.routeFacts.requestedTier,tierOutcome:d.routeFacts.tierOutcome,providerSource:T?.providerSource??d.routeFacts.providerSource,...T?.modelSource??d.routeFacts.modelSource?{modelSource:T?.modelSource??d.routeFacts.modelSource}:{},...T?.initialProvider??d.routeFacts.initialProvider?{initialProvider:T?.initialProvider??d.routeFacts.initialProvider}:{},...T?.initialModel??d.routeFacts.initialModel?{initialModel:T?.initialModel??d.routeFacts.initialModel}:{},...d.routeFacts.finalProvider?{finalProvider:d.routeFacts.finalProvider}:{},...d.routeFacts.finalModel?{finalModel:d.routeFacts.finalModel}:{},...j?{fallbackReason:j}:{},...d.routeFacts.resolvedEffort?{resolvedEffort:d.routeFacts.resolvedEffort}:{},...L>0?{iterations:L}:{},...C>0?{durationMs:C}:{}}:{},usage:{totalTokens:_,...H>0?{inputTokens:H}:{},...G>0?{outputTokens:G}:{},...K>0?{cacheReadTokens:K}:{}}}},"wait"),output:i(async f=>{let l=h.get(f);if(!l)throw new Error(`unknown workflow task: ${f}`);if(a.get(l.actorPath).actor.currentTurnId===l.turnId)return{taskId:f,name:l.name,status:"running"};let w=a.output(l.actorPath,l.turnId),S=w.state==="completed"?"completed":w.state==="interrupted"?"stopped":"failed",b=w.output??w.error;return b===void 0?{taskId:f,name:l.name,status:S}:{taskId:f,name:l.name,status:S,lastText:b}},"output"),send:i(async(f,l)=>{let u=h.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.send(u.actorPath,l)},"send"),stop:i(async(f,l)=>{let u=h.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.interrupt(u.actorPath,l)},"stop"),subscribeTaskSummaryUpdates:i(f=>(y.add(f),()=>{y.delete(f)}),"subscribeTaskSummaryUpdates")}}i(at,"createCodingWorkflowBackend");import{homedir as Zn}from"node:os";import{join as Pt}from"node:path";var gn=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],hn="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",yn={type:"object",additionalProperties:!1,required:["finding"],properties:{finding:{type:"string",description:"Your concrete findings for this focus, with file:line evidence. If nothing relevant was found, a brief note saying so."}}};function kn(e){if(e!==null&&typeof e=="object"&&"finding"in e){let t=e.finding;if(typeof t=="string"&&t.trim().length>0)return t}}i(kn,"readStructuredFinding");function vn(e){let t=kn(e.structured);if(t)return t;let n=e.finalText?.trim();return n&&n.length>0?e.finalText:"[no finding text was returned \u2014 the investigator may have ended on a tool call without a closing summary]"}i(vn,"pickFindingText");function xn(e,t){return["Investigate the following question (READ-ONLY \u2014 do not modify any files):",e,"",`Focus your investigation on: ${t}`,"","Report concrete findings backed by evidence (cite file:line). If you find nothing relevant for this focus, say so briefly."].join(`
10
+ `)}i(ln,"buildVerificationRepairPrompt");function rt(e,t,n,r,a=!1){return t.outputSchema!==void 0&&ze(t.outputSchema),Ge(t.name,t.evidenceRefs,n),{id:e,fanoutClass:"evidence-scan",objective:t.prompt,...t.scopeSummary?{scopeSummary:t.scopeSummary}:{},readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?.map(o=>{if(!o.startsWith("task_id:"))return o;let s=o.slice(8).trim(),c=r?.get(s);if(!c)throw new Error(`Workflow task ${s} has no Actor path.`);return`agent:${c}`})??[],constraints:t.constraints?[...t.constraints]:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{},...t.outputSchema!==void 0?{outputSchema:t.outputSchema}:{},...a?{workflowOutputContract:{kodaxAuthored:!0,terseResult:t.terseResult===!0}}:{},...t.effort?{effort:t.effort}:{}}}i(rt,"buildBundle");function xe(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],r=an(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:r,...n.digest?{digest:n.digest}:{},...n.digestFailed?{digestFailed:!0}:{},...n.digestPending?{digestPending:!0}:{},...n.limitReached?{limitReached:!0}:{},...n.provider?{provider:n.provider}:{},...n.model?{model:n.model}:{},...n.structured!==void 0?{structured:n.structured}:{},...n.digestTokensUsed!==void 0?{digestTokensUsed:n.digestTokensUsed}:{},...n.digestUsage!==void 0?{digestUsage:n.digestUsage}:{},...n.routeFacts?{routeFacts:n.routeFacts}:{}}:{status:"failed",snapStatus:"failed",finalText:r,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{},...n?.digestTokensUsed!==void 0?{digestTokensUsed:n.digestTokensUsed}:{},...n?.digestUsage!==void 0?{digestUsage:n.digestUsage}:{},...n?.routeFacts?{routeFacts:n.routeFacts}:{}}}i(xe,"deriveTerminal");function fn(){let e=i(()=>{},"resolvePromise"),t=i(()=>{},"rejectPromise"),n=new Promise((r,a)=>{e=r,t=a});return n.catch(()=>{}),{promise:n,resolve:e,reject:t}}i(fn,"createPendingChildResult");function mn(e,t){let n=e.normalize("NFKD").replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48);return`${/^[A-Za-z]/.test(n)&&!/^(?:root|workflow|external)(?:[-_]|$)/i.test(n)?n:"step"}-${t}`}i(mn,"workflowActorTaskName");function pn(e){let t=e.workflow;return{readOnly:t.readOnly!==!1,constraints:[...t.constraints??[]],evidenceRefs:[...t.evidenceRefs??[]],...t.scopeSummary?{scope:t.scopeSummary}:{},...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.effort?{effort:t.effort}:{},...e.executionKey?{executionKey:e.executionKey}:{},...e.agentId?{agentId:e.agentId}:{},...e.specialistName?{specialistName:e.specialistName}:{},...e.workflowRunId?{workflowRunId:e.workflowRunId}:{},...t.target?.expectedConfigurationRevision?{expectedConfigurationRevision:t.target.expectedConfigurationRevision}:{}}}i(pn,"workflowActorMetadata");function wn(e,t){let n=xe(e,t);if(n.status!=="completed"&&n.status!=="completed_unverified")throw new Error(n.finalText||`Workflow Agent ${t} ${n.status}.`);let r=e.mergedArtifacts.filter(Boolean);return{output:n.finalText,...r.length>0?{artifacts:r}:{}}}i(wn,"actorExecutionResult");function at(e){let{ctx:t,childOptions:n}=e,r=e.runChild??Je,a=t.actorControl,o=t.actorHost;if(!a||!o)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let s=e.listChangedFiles??sn,c=0,p=0,h=e.generateId??(()=>`wf-child-${c+=1}`),y=new Map,g=new Set,I=i(()=>e.onTaskSummary!==void 0||g.size>0,"hasTaskSummaryObservers"),k=i((f,l)=>{try{e.onTaskSummary?.(f,l)}catch(u){fe({source:"coding:workflow-summary",level:"warn",message:u instanceof Error?u.message:String(u)})}for(let u of g)try{u(f,l)}catch(w){fe({source:"coding:workflow-summary",level:"warn",message:w instanceof Error?w.message:String(w)})}},"notifyTaskSummary"),A=i((f,l,u,w)=>{let S=`workflow:${e.runId??"inline"}:${f}:${w}`,b=fn(),v=i(()=>{},"unregister"),_={async execute(d){try{let T=await u(l,d,o.bindActor(d.actor.path));return b.resolve(T),wn(T,f)}catch(T){throw b.reject(T),T}finally{v()}}};return v=o.registerTurnExecutor(S,_),{key:S,promise:b.promise,cancel:v}},"registerExecution"),m=i(async f=>{let l=on(f,e.defaultChildReadOnly),u=l.subagentType?"constructed":"native",w=l.subagentType,S,b;if(l.target&&l.subagentType)throw new Error("Workflow target and subagentType are mutually exclusive.");if(l.target){let W=t.agentExecutorPlane;if(!W)throw new Error("Workflow target requires a host-bound agent executor plane.");let E=Le(l.target.agentId,W.context,t.agentScope);if(E){if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==E.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let{target:R,...x}=l;l={...x,...E.subagentType?{subagentType:E.subagentType}:{}},u=E.kind,w=E.subagentType}else{if(l.modelHint!==void 0||l.effort!==void 0)throw new Error("External Workflow targets cannot combine local modelHint/effort routing selectors.");if(l.verification?.requiresMutation===!0)throw new Error("External Workflow targets cannot directly satisfy workspace mutation verification.");let R=await W.plane.describe(l.target.agentId,{...W.context,readOnly:l.readOnly},Ke(W.context,t.agentScope));if(!R||R.descriptor.origin!=="external")throw new Error(`Workflow target is not dispatchable: ${l.target.agentId}`);if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==R.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let x=R.descriptor.capabilities;u="external",b=l.target.agentId,S={followup:x.inputRequired!=="unsupported",interrupt:x.cancellation!=="unsupported",streaming:x.streaming!=="unsupported",artifacts:x.artifacts!=="unsupported"}}}let v=h(),_=rt(v,l,new Set(y.keys()),new Map([...y].map(([W,E])=>[W,E.actorPath])),e.kodaxAuthored===!0),T=rn(l).verification,H=cn(),G=l.isolation!=="worktree",K=he(T)?ke(t,s):Promise.resolve({paths:[]}),L=i(async(W,E,R)=>{let x={...n,parentOptions:{...n.parentOptions,events:dn(n.parentOptions.events,H)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:v,itemId:`agent:${v}`}}:{},childActivityName:l.name,workflowDigestMode:I()?"async":"blocking",...I()?{onWorkflowChildDigest:i(q=>{k(q.childId,{...q.digest?{summary:q.digest}:{},summaryKind:q.digest?"digest":"digest-failed",...q.totalTokensUsed>0?{usage:q.usage??{totalTokens:q.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:E.signal,actorControl:void 0,actorHost:void 0};return await K,r([W],t,x)},"runBundle"),C=u==="external"?void 0:A(v,_,L,1);p+=1;let j;try{j=await a.spawn({taskName:mn(l.name,p),objective:l.prompt,kind:u,capabilities:{filesystem:l.readOnly!==!1?"read":"write",canAskUser:!1,...S?{control:S}:{}},metadata:pn({workflow:l,...C?{executionKey:C.key}:{},...b?{agentId:b}:{},...w?{specialistName:w}:{},...e.runId?{workflowRunId:e.runId}:{}})})}catch(W){throw C?.cancel(),W}return y.set(v,{name:l.name,input:l,bundle:_,actorPath:j.actorPath,turnId:j.turnId,...C?{promise:C.promise}:{},runBundle:L,external:u==="external",verification:T,changedPathBaseline:K,mutationRecorder:H,acceptToolMutationEvidence:G,repairAttempts:0}),{taskId:v,name:l.name}},"spawn"),M=i(async(f,l,u=l)=>{let w=i(v=>v.turnId===f.turnId&&(v.kind==="turn_completed"||v.kind==="turn_failed"||v.kind==="turn_interrupted"),"isTerminalEvent"),S=l===void 0?void 0:Date.now()+l,b=0;for(;;){let v=a.eventSnapshot(b);if(v.find(w))return;b=v.at(-1)?.sequence??b;let d=S===void 0?void 0:S-Date.now();if(d!==void 0&&d<=0)throw await a.interrupt(f.actorPath,"workflow wait timeout"),new Error(`workflow task ${f.name} timed out after ${u??l}ms`);let T=await a.wait(b,d);if(!T)throw await a.interrupt(f.actorPath,"workflow wait timeout"),new Error(`workflow task ${f.name} timed out after ${u??l}ms`);if(w(T))return;b=T.sequence}},"waitForActorTurn");return{spawn:m,waitForAgentCapacity:i(f=>o.waitForAgentCapacity(f),"waitForAgentCapacity"),wait:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);let w=nn(l),S=Date.now(),b=i(async x=>{let q=Date.now()-S,X=w===void 0?void 0:Math.max(0,w-q);if(await M(u,X,w),!x)throw new Error(`workflow task ${f} has no local execution result`);return x},"waitForAttempt");if(u.external){await M(u,w);let x=a.output(u.actorPath,u.turnId);return{taskId:f,name:u.name,status:x.state==="completed"?"completed":x.state==="interrupted"?"stopped":"failed",finalText:x.output??x.error??"",...x.structured===void 0?{}:{structured:x.structured},...x.artifacts.length===0?{}:{artifacts:x.artifacts}}}let v=await b(u.promise),_=v.totalTokensUsed,d=xe(v,f),T=d.routeFacts,H=d.routeFacts?.inputTokens??0,G=d.routeFacts?.outputTokens??0,K=d.routeFacts?.cacheReadTokens??0,L=d.routeFacts?.iterations??0,C=d.routeFacts?.durationMs??0,j=d.routeFacts?.fallbackReason,W=d.digestTokensUsed??0,E=d.digestUsage,R=u.verification?tt({verification:u.verification,term:d,before:await u.changedPathBaseline,after:he(u.verification)?await ke(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0;for(d.limitReached===!0&&R===void 0&&d.status==="completed"&&(R=nt(),d={...d,status:"completed_unverified",snapStatus:"completed",finalText:ve(d.finalText,R)});un({entry:u,term:d,verification:R});){u.repairAttempts+=1;let x=ln({originalPrompt:u.input.prompt,previousFinalText:d.finalText,verification:R,attempt:u.repairAttempts}),q=rt(f,{...u.input,prompt:x},new Set(y.keys()),new Map([...y].map(([Y,Xt])=>[Y,Xt.actorPath])),e.kodaxAuthored===!0),X=A(f,q,u.runBundle,u.repairAttempts+1);u.promise=X.promise;try{let Y=await a.followup(u.actorPath,x,{executionKey:X.key});u.turnId=Y.turn.turnId}catch(Y){throw X.cancel(),Y}v=await b(u.promise),_+=v.totalTokensUsed,d=xe(v,f),H+=d.routeFacts?.inputTokens??0,G+=d.routeFacts?.outputTokens??0,K+=d.routeFacts?.cacheReadTokens??0,L+=d.routeFacts?.iterations??0,C+=d.routeFacts?.durationMs??0,j??=d.routeFacts?.fallbackReason,W+=d.digestTokensUsed??0,d.digestUsage&&(E={inputTokens:(E?.inputTokens??0)+(d.digestUsage.inputTokens??0),outputTokens:(E?.outputTokens??0)+(d.digestUsage.outputTokens??0),totalTokens:(E?.totalTokens??0)+(d.digestUsage.totalTokens??0),cacheReadTokens:(E?.cacheReadTokens??0)+(d.digestUsage.cacheReadTokens??0)}),R=u.verification?tt({verification:u.verification,term:d,before:await u.changedPathBaseline,after:he(u.verification)?await ke(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0,d.limitReached===!0&&R===void 0&&d.status==="completed"&&(R=nt(),d={...d,status:"completed_unverified",snapStatus:"completed",finalText:ve(d.finalText,R)})}if(R!==void 0&&!R.ok&&d.status==="completed"){let x=R.enforcement==="warn";d={...d,status:x?"completed_unverified":"failed",snapStatus:x?"completed":"failed",finalText:ve(d.finalText,R)}}return{taskId:f,name:u.name,status:d.status,finalText:d.finalText,...d.digest?{digest:d.digest}:{},...d.digestFailed?{digestFailed:!0}:{},...d.digestPending?{digestPending:!0}:{},...R!==void 0?{verification:R}:{},...d.limitReached?{limitReached:!0}:{},...d.provider?{provider:d.provider}:{},...d.model?{model:d.model}:{},...d.structured!==void 0?{structured:d.structured}:{},...v.mergedArtifacts.length>0?{artifacts:v.mergedArtifacts.filter(Boolean)}:{},...W>0?{digestUsage:E??{totalTokens:W}}:{},...d.routeFacts?{requestedTier:T?.requestedTier??d.routeFacts.requestedTier,tierOutcome:d.routeFacts.tierOutcome,providerSource:T?.providerSource??d.routeFacts.providerSource,...T?.modelSource??d.routeFacts.modelSource?{modelSource:T?.modelSource??d.routeFacts.modelSource}:{},...T?.initialProvider??d.routeFacts.initialProvider?{initialProvider:T?.initialProvider??d.routeFacts.initialProvider}:{},...T?.initialModel??d.routeFacts.initialModel?{initialModel:T?.initialModel??d.routeFacts.initialModel}:{},...d.routeFacts.finalProvider?{finalProvider:d.routeFacts.finalProvider}:{},...d.routeFacts.finalModel?{finalModel:d.routeFacts.finalModel}:{},...j?{fallbackReason:j}:{},...d.routeFacts.resolvedEffort?{resolvedEffort:d.routeFacts.resolvedEffort}:{},...L>0?{iterations:L}:{},...C>0?{durationMs:C}:{}}:{},usage:{totalTokens:_,...H>0?{inputTokens:H}:{},...G>0?{outputTokens:G}:{},...K>0?{cacheReadTokens:K}:{}}}},"wait"),output:i(async f=>{let l=y.get(f);if(!l)throw new Error(`unknown workflow task: ${f}`);if(a.get(l.actorPath).actor.currentTurnId===l.turnId)return{taskId:f,name:l.name,status:"running"};let w=a.output(l.actorPath,l.turnId),S=w.state==="completed"?"completed":w.state==="interrupted"?"stopped":"failed",b=w.output??w.error;return b===void 0?{taskId:f,name:l.name,status:S}:{taskId:f,name:l.name,status:S,lastText:b}},"output"),send:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.send(u.actorPath,l)},"send"),stop:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.interrupt(u.actorPath,l)},"stop"),subscribeTaskSummaryUpdates:i(f=>(g.add(f),()=>{g.delete(f)}),"subscribeTaskSummaryUpdates")}}i(at,"createCodingWorkflowBackend");import{homedir as Zn}from"node:os";import{join as Pt}from"node:path";var gn=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],hn="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",yn={type:"object",additionalProperties:!1,required:["finding"],properties:{finding:{type:"string",description:"Your concrete findings for this focus, with file:line evidence. If nothing relevant was found, a brief note saying so."}}};function kn(e){if(e!==null&&typeof e=="object"&&"finding"in e){let t=e.finding;if(typeof t=="string"&&t.trim().length>0)return t}}i(kn,"readStructuredFinding");function vn(e){let t=kn(e.structured);if(t)return t;let n=e.finalText?.trim();return n&&n.length>0?e.finalText:"[no finding text was returned \u2014 the investigator may have ended on a tool call without a closing summary]"}i(vn,"pickFindingText");function xn(e,t){return["Investigate the following question (READ-ONLY \u2014 do not modify any files):",e,"",`Focus your investigation on: ${t}`,"","Report concrete findings backed by evidence (cite file:line). If you find nothing relevant for this focus, say so briefly."].join(`
11
11
  `)}i(xn,"buildInvestigatorPrompt");function Sn(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:gn).slice(0,t).map((r,a)=>({name:`investigate-${a+1}`,prompt:xn(e.question,r)}))}i(Sn,"resolveAngles");async function Rn(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0,modelHint:"balanced",outputSchema:yn});return n===null?{angle:t.name,status:"failed",text:"[investigation failed] agent did not complete"}:{angle:t.name,status:n.status==="completed"?"completed":"failed",text:vn(n)}}catch(n){let r=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${r}`}}}i(Rn,"investigate");async function bn(e,t){let n=Sn(t),r=(await e.phase("investigate",()=>e.parallel(n.map(s=>()=>Rn(e,s)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0))).filter(s=>s!==null),a=r.some(s=>s.status!=="completed");return{synthesis:(await e.phase("synthesize",()=>e.synthesize({inputs:r.map(s=>`### ${s.angle} (${s.status})
12
12
  ${s.text}`),rubric:t.rubric??hn}))).text,findings:r,degraded:a}}i(bn,"runParallelInvestigation");var st={meta:{name:"parallel-investigation",description:"Fan out read-only investigators over a question (split by target areas), then synthesize ranked, evidence-keeping findings.",maxAgents:8,maxConcurrency:4,readOnly:!0,phases:["investigate","synthesize"]},run:bn};import{createHash as Tn}from"node:crypto";var Se={type:"object",additionalProperties:!1,required:["specVerdict","qualityVerdict","findings","unverifiedRequirements"],properties:{specVerdict:{enum:["compliant","issues","not-verifiable"]},qualityVerdict:{enum:["approved","needs-fixes"]},findings:{type:"array",items:{type:"object",additionalProperties:!1,required:["severity","location","claim","evidence"],properties:{severity:{enum:["critical","high","medium","low"]},location:{type:"string"},claim:{type:"string"},evidence:{type:"string"},suggestedFix:{type:"string"}}}},unverifiedRequirements:{type:"array",items:{type:"string"}}}},Re={type:"object",additionalProperties:!1,required:["findings"],properties:{findings:{type:"array",items:{type:"object",additionalProperties:!1,required:["findingId","disposition","evidence"],properties:{findingId:{type:"string"},disposition:{enum:["confirmed","refuted","unresolved"]},evidence:{type:"string"},effectiveSeverity:{enum:["critical","high","medium","low"]},severityReason:{type:"string"}}}}}};function N(e){return e.normalize("NFC").replace(/\r\n?/g,`
13
- `).trim().replace(/[\t\n\f\r ]+/g," ")}i(N,"normalizeText");function dt(e){return N(e).replace(/\\/g,"/")}i(dt,"normalizeLocation");function se(e){return[...new Set(e.map(N).filter(Boolean))].sort((t,n)=>t<n?-1:t>n?1:0)}i(se,"uniqueSorted");function In(e,t,n){return Tn("sha256").update(`${e}\0${dt(t)}\0${N(n)}`,"utf8").digest("hex")}i(In,"findingId");function ut(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(r=>{let a=dt(r.location),o=N(r.claim),s=N(r.evidence);return{findingId:In(e,a,o),severity:r.severity,location:a,claim:o,evidence:s,...r.suggestedFix?{suggestedFix:N(r.suggestedFix)}:{}}}).sort((r,a)=>r.findingId<a.findingId?-1:r.findingId>a.findingId?1:0),unverifiedRequirements:se(n.unverifiedRequirements)}}i(ut,"normalizeScopedReviewResult");var ct={low:0,medium:1,high:2,critical:3};function Mn(e){return e.reduce((t,n)=>ct[n]>ct[t]?n:t,"low")}i(Mn,"maxSeverity");function lt(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 o of a.findings)t.set(o.findingId,[...t.get(o.findingId)??[],o]);let n=[...t.entries()].map(([a,o])=>({findingId:a,severity:Mn(o.map(s=>s.severity)),location:o[0].location,claim:o[0].claim,evidence:se(o.map(s=>s.evidence)),suggestedFixes:se(o.flatMap(s=>s.suggestedFix?[s.suggestedFix]:[]))})).sort((a,o)=>a.findingId<o.findingId?-1:a.findingId>o.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:se(e.flatMap(a=>a.unverifiedRequirements))}}i(lt,"mergeScopedReviewResults");function ft(e,t){let n=new Set(e.findings.map(s=>s.findingId)),r=new Set;for(let s of t.findings){if(!n.has(s.findingId)||r.has(s.findingId))throw new Error("verifier must return every input findingId exactly once");r.add(s.findingId)}if(r.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])),o=e.findings.flatMap(s=>{let c=a.get(s.findingId);if(c.disposition==="refuted")return[];let p=c.severityReason?.trim(),g=c.effectiveSeverity!==void 0&&!!p;return[{...s,disposition:c.disposition,severity:g?c.effectiveSeverity:s.severity,verificationEvidence:N(c.evidence),...p?{severityReason:N(p)}:{}}]});return{specVerdict:e.specVerdict,qualityVerdict:e.qualityVerdict,unverifiedRequirements:e.unverifiedRequirements,actionable:o,audit:t,unqualifiedApprovalAllowed:o.length===0&&e.unverifiedRequirements.length===0&&e.specVerdict==="compliant"&&e.qualityVerdict==="approved"}}i(ft,"applyFindingVerification");var Pn={type:"object",additionalProperties:!1,required:["summary"],properties:{summary:{type:"string"}}};function pt(e){return[e.packetPath,...e.evidenceChunks.map(t=>t.path)]}i(pt,"evidencePaths");function En(e){let t=ge(e,Se);if(t.length>0)throw new Error(`primary reviewer structured result is invalid: ${t.join("; ")}`);return e}i(En,"rawReview");function An(e){let t=ge(e,Re);if(t.length>0)throw new Error(`finding verifier structured result is invalid: ${t.join("; ")}`);return e}i(An,"rawVerification");function be(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(be,"resultOrThrow");function Wn(e,t,n){return["Review one immutable KodaX packet as an independent third-party reviewer.",`Packet manifest: ${e.packetPath}`,...e.evidenceChunks.map(r=>`Evidence chunk: ${r.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(`
13
+ `).trim().replace(/[\t\n\f\r ]+/g," ")}i(N,"normalizeText");function dt(e){return N(e).replace(/\\/g,"/")}i(dt,"normalizeLocation");function se(e){return[...new Set(e.map(N).filter(Boolean))].sort((t,n)=>t<n?-1:t>n?1:0)}i(se,"uniqueSorted");function In(e,t,n){return Tn("sha256").update(`${e}\0${dt(t)}\0${N(n)}`,"utf8").digest("hex")}i(In,"findingId");function ut(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(r=>{let a=dt(r.location),o=N(r.claim),s=N(r.evidence);return{findingId:In(e,a,o),severity:r.severity,location:a,claim:o,evidence:s,...r.suggestedFix?{suggestedFix:N(r.suggestedFix)}:{}}}).sort((r,a)=>r.findingId<a.findingId?-1:r.findingId>a.findingId?1:0),unverifiedRequirements:se(n.unverifiedRequirements)}}i(ut,"normalizeScopedReviewResult");var ct={low:0,medium:1,high:2,critical:3};function Mn(e){return e.reduce((t,n)=>ct[n]>ct[t]?n:t,"low")}i(Mn,"maxSeverity");function lt(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 o of a.findings)t.set(o.findingId,[...t.get(o.findingId)??[],o]);let n=[...t.entries()].map(([a,o])=>({findingId:a,severity:Mn(o.map(s=>s.severity)),location:o[0].location,claim:o[0].claim,evidence:se(o.map(s=>s.evidence)),suggestedFixes:se(o.flatMap(s=>s.suggestedFix?[s.suggestedFix]:[]))})).sort((a,o)=>a.findingId<o.findingId?-1:a.findingId>o.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:se(e.flatMap(a=>a.unverifiedRequirements))}}i(lt,"mergeScopedReviewResults");function ft(e,t){let n=new Set(e.findings.map(s=>s.findingId)),r=new Set;for(let s of t.findings){if(!n.has(s.findingId)||r.has(s.findingId))throw new Error("verifier must return every input findingId exactly once");r.add(s.findingId)}if(r.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])),o=e.findings.flatMap(s=>{let c=a.get(s.findingId);if(c.disposition==="refuted")return[];let p=c.severityReason?.trim(),h=c.effectiveSeverity!==void 0&&!!p;return[{...s,disposition:c.disposition,severity:h?c.effectiveSeverity:s.severity,verificationEvidence:N(c.evidence),...p?{severityReason:N(p)}:{}}]});return{specVerdict:e.specVerdict,qualityVerdict:e.qualityVerdict,unverifiedRequirements:e.unverifiedRequirements,actionable:o,audit:t,unqualifiedApprovalAllowed:o.length===0&&e.unverifiedRequirements.length===0&&e.specVerdict==="compliant"&&e.qualityVerdict==="approved"}}i(ft,"applyFindingVerification");var Pn={type:"object",additionalProperties:!1,required:["summary"],properties:{summary:{type:"string"}}};function pt(e){return[e.packetPath,...e.evidenceChunks.map(t=>t.path)]}i(pt,"evidencePaths");function En(e){let t=ge(e,Se);if(t.length>0)throw new Error(`primary reviewer structured result is invalid: ${t.join("; ")}`);return e}i(En,"rawReview");function An(e){let t=ge(e,Re);if(t.length>0)throw new Error(`finding verifier structured result is invalid: ${t.join("; ")}`);return e}i(An,"rawVerification");function be(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(be,"resultOrThrow");function Wn(e,t,n){return["Review one immutable KodaX packet as an independent third-party reviewer.",`Packet manifest: ${e.packetPath}`,...e.evidenceChunks.map(r=>`Evidence chunk: ${r.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(Wn,"buildScopedReviewPrimaryPrompt");function Fn(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(Fn,"buildScopedReviewVerificationPrompt");function On(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(On,"buildScopedReviewFinalPrompt");async function mt(e,t,n,r){let a=be(await e.runAgent({name:`${n?"high-risk-":""}primary-${t.partitionKey}`,phase:"primary-review",prompt:Wn(t,n,r),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:pt(t)},outputSchema:Se,terseResult:!0}),"primary reviewer");return e.log({message:`primary read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"primary",contentHash:t.contentHash}}),En(a.structured)}i(mt,"runPrimary");async function qn(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 r=be(await e.runAgent({name:`verify-${t.partitionKey}`,phase:"verifier",prompt:Fn(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:pt(t)},outputSchema:Re,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"}}),ft(n,An(r.structured))}i(qn,"verifyFindings");async function $n(e,t,n){let r=[await mt(e,t,!1,n)];t.riskFlags.includes("routing-high")&&r.push(await mt(e,t,!0,n));let a=r.map(c=>ut(t.contentHash,t.requirementsPresent,c)),o=lt(a),s=await qn(e,t,o);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(c=>c.disposition==="unresolved").length,unqualifiedApprovalAllowed:s.unqualifiedApprovalAllowed}}),{contentHash:t.contentHash,result:s}}i($n,"reviewPacket");async function Cn(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(c=>()=>$n(e,c,t)),{concurrency:4});if(n.some(c=>c===null))throw new Error("one or more scope packets failed review; no final verdict was accepted");let r=n.filter(c=>c!==null);await e.artifact("scoped-review-audit",r);let a=be(await e.runAgent({name:"final-review-synthesis",phase:"final-synthesis",prompt:On(r),scopeSummary:`cross-scope synthesis for ${r.length} packet(s)`,constraints:["preserve severity","preserve unresolved uncertainty","do not invent evidence"],readOnly:!0,modelHint:"deep",outputSchema:Pn,terseResult:!0}),"final synthesis"),o=a.structured;return{summary:typeof o?.summary=="string"?o.summary:a.finalText,packetResults:r}}i(Cn,"runScopedReview");var wt={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:Cn};function gt(e){return{meta:e.meta,run:i((t,n)=>e.run(t,n),"run")}}i(gt,"erase");var ht=[gt(st),gt(wt)];function yt(e){return ht.find(t=>t.meta.name===e)}i(yt,"getBuiltinWorkflow");function Zr(){return ht.map(e=>e.meta)}i(Zr,"listBuiltinWorkflows");import{mkdir as Rt,readdir as _n,readFile as Q,rename as Nn,unlink as Me,writeFile as Pe}from"node:fs/promises";import{basename as Dn,dirname as Ie,join as B}from"node:path";import{pathToFileURL as jn}from"node:url";var bt=[".workflow.json",".ts",".mjs",".js"],ee="0.7.49";function Tt(){return"0.7.73"}i(Tt,"currentKodaxWorkflowVersion");function Un(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}i(Un,"executionForPath");function Vn(e){let t=bt.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}i(Vn,"stripWorkflowSuffix");function Ee(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(Ee,"safeWorkflowName");function Ae(e){return typeof e=="object"&&e!==null}i(Ae,"isRecord");function kt(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}i(kt,"readRequiredString");async function vt(e,t){if(!e)return[];let n;try{n=await _n(e)}catch{return[]}let r=new Map;for(let a of bt)for(let o of n){if(!o.endsWith(a))continue;let s=Vn(o);if(!s||s.length===0||r.has(s))continue;let c=B(e,o);r.set(s,{name:s,path:c,source:t,execution:Un(c)})}return[...r.values()]}i(vt,"scanDir");async function te(e){let t=await vt(e.personal,"personal"),n=await vt(e.project,"project"),r=new Map;for(let a of t)r.set(a.name,a);for(let a of n)r.set(a.name,a);return[...r.values()].sort((a,o)=>a.name.localeCompare(o.name))}i(te,"discoverSavedWorkflows");function Bn(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}i(Bn,"isWorkflowModule");function Hn(e){let t=e.default;if(Bn(t))return t;let n=typeof t=="function"?t:e.run,r=e.workflow??e.meta;if(typeof n=="function"&&typeof r=="object"&&r!==null&&"name"in r)return{meta:r,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}i(Hn,"normalizeWorkflowModule");function Kn(e){let t=JSON.parse(e);if(!Ae(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=pe(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 r=Z(t.manifest);return{manifest:r,source:n,capsule:U({minKodaxVersion:ee,manifest:r,source:n}),legacy:!0}}i(Kn,"parseGeneratedWorkflowFile");async function We(e){let t=Kn(await Q(e,"utf8"));return t.capsule??U({minKodaxVersion:ee,manifest:t.manifest,source:t.source})}i(We,"loadSavedWorkflowCapsule");async function It(e){if(e.endsWith(".workflow.json"))return we(await We(e));let t=await import(jn(e).href);return Hn(t)}i(It,"loadSavedWorkflow");function Fe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}i(Fe,"deriveRequirements");function ce(e,t){me(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}i(ce,"assertGeneratedCapsuleSource");async function Ln(e){let t=Ee(e.name),n=Z(e.manifest);ce(n,e.source);let r=e.requires??Fe(n),a=U({minKodaxVersion:e.minKodaxVersion??ee,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await Rt(e.dir,{recursive:!0});let o=B(e.dir,`${t}.workflow.json`);return await Pe(o,`${JSON.stringify(a,null,2)}
16
+ `)}i(On,"buildScopedReviewFinalPrompt");async function mt(e,t,n,r){let a=be(await e.runAgent({name:`${n?"high-risk-":""}primary-${t.partitionKey}`,phase:"primary-review",prompt:Wn(t,n,r),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:pt(t)},outputSchema:Se,terseResult:!0}),"primary reviewer");return e.log({message:`primary read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"primary",contentHash:t.contentHash}}),En(a.structured)}i(mt,"runPrimary");async function qn(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 r=be(await e.runAgent({name:`verify-${t.partitionKey}`,phase:"verifier",prompt:Fn(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:pt(t)},outputSchema:Re,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"}}),ft(n,An(r.structured))}i(qn,"verifyFindings");async function $n(e,t,n){let r=[await mt(e,t,!1,n)];t.riskFlags.includes("routing-high")&&r.push(await mt(e,t,!0,n));let a=r.map(c=>ut(t.contentHash,t.requirementsPresent,c)),o=lt(a),s=await qn(e,t,o);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(c=>c.disposition==="unresolved").length,unqualifiedApprovalAllowed:s.unqualifiedApprovalAllowed}}),{contentHash:t.contentHash,result:s}}i($n,"reviewPacket");async function Cn(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(c=>()=>$n(e,c,t)),{concurrency:4});if(n.some(c=>c===null))throw new Error("one or more scope packets failed review; no final verdict was accepted");let r=n.filter(c=>c!==null);await e.artifact("scoped-review-audit",r);let a=be(await e.runAgent({name:"final-review-synthesis",phase:"final-synthesis",prompt:On(r),scopeSummary:`cross-scope synthesis for ${r.length} packet(s)`,constraints:["preserve severity","preserve unresolved uncertainty","do not invent evidence"],readOnly:!0,modelHint:"deep",outputSchema:Pn,terseResult:!0}),"final synthesis"),o=a.structured;return{summary:typeof o?.summary=="string"?o.summary:a.finalText,packetResults:r}}i(Cn,"runScopedReview");var wt={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:Cn};function gt(e){return{meta:e.meta,run:i((t,n)=>e.run(t,n),"run")}}i(gt,"erase");var ht=[gt(st),gt(wt)];function yt(e){return ht.find(t=>t.meta.name===e)}i(yt,"getBuiltinWorkflow");function Zr(){return ht.map(e=>e.meta)}i(Zr,"listBuiltinWorkflows");import{mkdir as Rt,readdir as _n,readFile as Q,rename as Nn,unlink as Me,writeFile as Pe}from"node:fs/promises";import{basename as Dn,dirname as Ie,join as B}from"node:path";import{pathToFileURL as jn}from"node:url";var bt=[".workflow.json",".ts",".mjs",".js"],ee="0.7.49";function Tt(){return"0.7.75"}i(Tt,"currentKodaxWorkflowVersion");function Un(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}i(Un,"executionForPath");function Vn(e){let t=bt.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}i(Vn,"stripWorkflowSuffix");function Ee(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(Ee,"safeWorkflowName");function Ae(e){return typeof e=="object"&&e!==null}i(Ae,"isRecord");function kt(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}i(kt,"readRequiredString");async function vt(e,t){if(!e)return[];let n;try{n=await _n(e)}catch{return[]}let r=new Map;for(let a of bt)for(let o of n){if(!o.endsWith(a))continue;let s=Vn(o);if(!s||s.length===0||r.has(s))continue;let c=B(e,o);r.set(s,{name:s,path:c,source:t,execution:Un(c)})}return[...r.values()]}i(vt,"scanDir");async function te(e){let t=await vt(e.personal,"personal"),n=await vt(e.project,"project"),r=new Map;for(let a of t)r.set(a.name,a);for(let a of n)r.set(a.name,a);return[...r.values()].sort((a,o)=>a.name.localeCompare(o.name))}i(te,"discoverSavedWorkflows");function Bn(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}i(Bn,"isWorkflowModule");function Hn(e){let t=e.default;if(Bn(t))return t;let n=typeof t=="function"?t:e.run,r=e.workflow??e.meta;if(typeof n=="function"&&typeof r=="object"&&r!==null&&"name"in r)return{meta:r,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}i(Hn,"normalizeWorkflowModule");function Kn(e){let t=JSON.parse(e);if(!Ae(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=pe(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 r=Z(t.manifest);return{manifest:r,source:n,capsule:U({minKodaxVersion:ee,manifest:r,source:n}),legacy:!0}}i(Kn,"parseGeneratedWorkflowFile");async function We(e){let t=Kn(await Q(e,"utf8"));return t.capsule??U({minKodaxVersion:ee,manifest:t.manifest,source:t.source})}i(We,"loadSavedWorkflowCapsule");async function It(e){if(e.endsWith(".workflow.json"))return we(await We(e));let t=await import(jn(e).href);return Hn(t)}i(It,"loadSavedWorkflow");function Fe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}i(Fe,"deriveRequirements");function ce(e,t){me(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}i(ce,"assertGeneratedCapsuleSource");async function Ln(e){let t=Ee(e.name),n=Z(e.manifest);ce(n,e.source);let r=e.requires??Fe(n),a=U({minKodaxVersion:e.minKodaxVersion??ee,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await Rt(e.dir,{recursive:!0});let o=B(e.dir,`${t}.workflow.json`);return await Pe(o,`${JSON.stringify(a,null,2)}
17
17
  `,"utf8"),{name:t,path:o,source:"project",execution:"capability-generated"}}i(Ln,"saveGeneratedWorkflow");async function xt(e,t){await Pe(e,`${JSON.stringify(t,null,2)}
18
18
  `,"utf8")}i(xt,"writeCapsuleFile");async function zn(e){try{return await Q(e,"utf8"),!0}catch{return!1}}i(zn,"fileExists");async function io(e){let t=(await te(e.dirs)).filter(c=>c.name===e.name).filter(c=>e.source===void 0||c.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let r=Ee(e.newName),a=B(Ie(n.path),`${r}.workflow.json`);if(a!==n.path&&await zn(a))throw new Error(`saved workflow already exists: ${r}`);let o=await We(n.path);ce(o.manifest,o.source);let s=U({minKodaxVersion:o.minKodaxVersion,manifest:{...o.manifest,name:r},source:o.source,...o.intent!==void 0?{intent:o.intent}:{},...o.inputs!==void 0?{inputs:o.inputs}:{},...o.requires!==void 0?{requires:o.requires}:{},...o.provenance!==void 0?{provenance:o.provenance}:{}});return await Pe(a,`${JSON.stringify(s,null,2)}
19
- `,"utf8"),a!==n.path&&await Me(n.path),{name:r,path:a,source:n.source,execution:"capability-generated"}}i(io,"renameSavedWorkflow");async function ao(e){let t=(await te(e.dirs)).filter(r=>r.name===e.name).filter(r=>e.source===void 0||r.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await Me(n.path),n}i(ao,"deleteSavedWorkflow");async function so(e){let t=Ee(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 r=n[0];if(!r.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let a=Z({...e.manifest,name:t});ce(a,e.source);let o=e.requires??Fe(a),s=U({minKodaxVersion:e.minKodaxVersion??ee,manifest:a,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}:{}}),c=await We(r.path),p=new Date().toISOString().replace(/[:.]/g,"-"),g=B(Ie(r.path),".revisions",t),h=`${p}-${process.hrtime.bigint().toString(36)}`,y=B(g,`${t}-${h}.workflow.json`),I=B(Ie(r.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Rt(g,{recursive:!0}),await xt(y,c);try{await xt(I,s),await Nn(I,r.path)}catch(k){try{await Me(I)}catch{}throw k}return{name:t,path:r.path,source:r.source,execution:"capability-generated",previousPath:y}}i(so,"replaceSavedWorkflow");function Jn(e){if(!Ae(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(Jn,"readOptionalOriginalRequest");function Mt(e){return Gn(e)}i(Mt,"buildCapsuleFromRun");async function Gn(e){let t=JSON.parse(await Q(B(e.runDir,"run.json"),"utf8"));if(!Ae(t))throw new Error("workflow run.json must be an object");let n=kt(t,"scriptSnapshotPath"),r=kt(t,"manifestSnapshotPath"),a=await Q(n,"utf8"),o=Z(JSON.parse(await Q(r,"utf8")));ce(o,a);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:Dn(e.runDir),c=Jn(t.args),p=Fe(o),g=Ue(o,c!==void 0?{originalRequest:c}:{}),h={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return U({minKodaxVersion:ee,manifest:o,source:a,intent:g,inputs:h,...p!==void 0?{requires:p}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:Tt()}})}i(Gn,"readCapsuleFromRun");async function co(e){let t=await Mt(e);return{capsule:t,module:we(t)}}i(co,"loadGeneratedWorkflowFromRun");async function uo(e){let t=await Mt(e);return Ln({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(uo,"saveGeneratedWorkflowFromRun");function D(e,t,n,r){e.push({severity:t,requirement:n,message:r})}i(D,"addRequirementIssue");function St(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}i(St,"parseSemver");function Xn(e,t){for(let n=0;n<3;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}i(Xn,"compareSemver");function Yn(e,t,n){let r=St(t),a=St(n);if(!r){D(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!a){D(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}Xn(a,r)<0&&D(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}i(Yn,"addMinVersionIssue");function Te(e,t,n,r){if(!n)return;if(!r){for(let o of n)D(e,"warning",`${t}:${o}`,`workflow requires ${t}:${o}, but no ${t} inventory was provided`);return}let a=new Set(r);for(let o of n)a.has(o)||D(e,"error",`${t}:${o}`,`missing required workflow ${t}: ${o}`)}i(Te,"addMissingItems");function lo(e,t={}){let n=pe(e),r=[],a=n.requires;Yn(r,n.minKodaxVersion,t.kodaxVersion??Tt()),a?.environment?.includes("git-repo")&&t.isGitRepo===!1&&D(r,"error","environment:git-repo","workflow requires a git repository"),a?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&D(r,"error","environment:worktree-capable","workflow may request git worktree isolation");try{me(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(o){let s=o instanceof Error?o.message:String(o);D(r,"error","workflow:source",s)}return Te(r,"tools",a?.tools,t.availableTools),Te(r,"mcp",a?.mcp,t.availableMcp),Te(r,"skills",a?.skills,t.availableSkills),{ok:!r.some(o=>o.severity==="error"),issues:r}}i(lo,"preflightWorkflowCapsule");function Qn(e){return{project:Pt(e,".kodax","workflows"),personal:Pt(Zn(),".kodax","workflows")}}i(Qn,"defaultSavedWorkflowDirs");async function er(e,t){let r=(await te(t)).find(a=>a.name===e);if(r)return It(r.path)}i(er,"resolveSavedByName");function Et(e){let t=Qn(e);return async n=>yt(n)??await er(n,t)}i(Et,"createNestedWorkflowResolver");import{existsSync as tr,mkdirSync as nr,readFileSync as rr,writeFileSync as At}from"node:fs";import{join as ne}from"node:path";var Wt="results";function Ft(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}i(Ft,"safeKey");function Ot(e,t){let n=ne(e,t);if(tr(n))try{return JSON.parse(rr(n,"utf8"))}catch{return}}i(Ot,"readResult");function qt(e,t={}){let n=ne(e,Wt);nr(n,{recursive:!0});let r=t.readFrom?ne(t.readFrom,Wt):void 0;return{get:i(a=>{let o=`${Ft(a)}.json`,s=Ot(n,o);if(s!==void 0)return s;if(r===void 0)return;let c=Ot(r,o);if(c!==void 0){try{At(ne(n,o),JSON.stringify(c),"utf8")}catch{}return c}},"get"),set:i((a,o)=>{try{At(ne(n,`${Ft(a)}.json`),JSON.stringify(o),"utf8")}catch{}},"set")}}i(qt,"createFsResultCache");import{mkdirSync as or,appendFileSync as ir,writeFileSync as ue}from"node:fs";import{join as z}from"node:path";function de(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}i(de,"record");function F(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}i(F,"finiteNumber");function $t(e){let t=new Map,n=new Set,r=[],a=[],o=new Set,s=[],c=[],p=0,g=0,h=0,y=0,I=0,k=0,A=0,m=0,M={},$=[];for(let O of e){let P=O.data??{};if(O.type==="agent_spawned"){let u=typeof P.taskId=="string"?P.taskId:void 0;u&&t.set(u,P),P.role==="primary-review"&&(k+=1);let w=typeof P.role=="string"?P.role:"agent",S=typeof P.requestedTier=="string"?P.requestedTier:"inherited",b=`${w}/${S}`;M[b]=(M[b]??0)+1;continue}if(O.type==="agent_completed"||O.type==="agent_unverified"||O.type==="agent_failed"){let u=typeof P.taskId=="string"?P.taskId:void 0;if(!u||n.has(u))continue;n.add(u);let w=de(P.usage);!w||typeof w.totalTokens!="number"?typeof t.get(u)?.externalTarget=="string"?a.push(u):r.push(u):(p+=F(w.totalTokens),g+=F(w.inputTokens),h+=F(w.cacheReadTokens??w.cachedReadTokens),y+=F(w.outputTokens));let S=de(P.digestUsage);I+=F(S?.totalTokens),g+=F(S?.inputTokens),y+=F(S?.outputTokens),h+=F(S?.cacheReadTokens??S?.cachedReadTokens),A+=F(P.iterations);continue}if(O.type==="agent_summary_updated"){let u=de(P.usage),w=P.summaryKind;if((w==="digest"||w==="digest-failed")&&u){let S=F(u.totalTokens);p+=S,I+=S,g+=F(u.inputTokens),y+=F(u.outputTokens),h+=F(u.cacheReadTokens??u.cachedReadTokens)}continue}if(O.type!=="workflow_log")continue;let f=de(P.data);if(f?.kind==="review_quality_gate"&&typeof f.contentHash=="string"){$.push({contentHash:f.contentHash,actionableFindings:F(f.actionableFindings),unresolvedFindings:F(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"?(o.has(f.contentHash)&&(m+=1),o.add(f.contentHash)):f.role==="verification"?s.push(l):f.role==="synthesis"&&c.push(l)}for(let O of t.keys())n.has(O)||r.push(O);let J=[...new Set(r)].sort();return{totalModelTokens:p,inputTokens:g,cacheReadTokens:h,outputTokens:y,digestTokens:I,agentStarts:t.size,childTurns:A,agentStartsByRoleTier:M,primaryReviewStarts:k,duplicatePrimaryPacketReads:m,verificationPacketReads:s,synthesisPacketReads:c,reviewWaves:k>0?1:0,fixWaves:0,rereviewWaves:0,qualityGateOutcomes:$,tokenCoverage:{ok:J.length===0,missingTaskIds:J},excludedExternalTaskIds:[...new Set(a)].sort()}}i($t,"buildWorkflowCostReport");function ar(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}i(ar,"safeWorkflowArtifactName");function Ct(e,t={}){let n=t.now??(()=>Date.now()),r=z(e,"artifacts");or(r,{recursive:!0});let a=z(e,"events.jsonl");return{runDir:e,onEvent:i(o=>{ir(a,`${JSON.stringify({...o,ts:n()})}
19
+ `,"utf8"),a!==n.path&&await Me(n.path),{name:r,path:a,source:n.source,execution:"capability-generated"}}i(io,"renameSavedWorkflow");async function ao(e){let t=(await te(e.dirs)).filter(r=>r.name===e.name).filter(r=>e.source===void 0||r.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await Me(n.path),n}i(ao,"deleteSavedWorkflow");async function so(e){let t=Ee(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 r=n[0];if(!r.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let a=Z({...e.manifest,name:t});ce(a,e.source);let o=e.requires??Fe(a),s=U({minKodaxVersion:e.minKodaxVersion??ee,manifest:a,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}:{}}),c=await We(r.path),p=new Date().toISOString().replace(/[:.]/g,"-"),h=B(Ie(r.path),".revisions",t),y=`${p}-${process.hrtime.bigint().toString(36)}`,g=B(h,`${t}-${y}.workflow.json`),I=B(Ie(r.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Rt(h,{recursive:!0}),await xt(g,c);try{await xt(I,s),await Nn(I,r.path)}catch(k){try{await Me(I)}catch{}throw k}return{name:t,path:r.path,source:r.source,execution:"capability-generated",previousPath:g}}i(so,"replaceSavedWorkflow");function Jn(e){if(!Ae(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(Jn,"readOptionalOriginalRequest");function Mt(e){return Gn(e)}i(Mt,"buildCapsuleFromRun");async function Gn(e){let t=JSON.parse(await Q(B(e.runDir,"run.json"),"utf8"));if(!Ae(t))throw new Error("workflow run.json must be an object");let n=kt(t,"scriptSnapshotPath"),r=kt(t,"manifestSnapshotPath"),a=await Q(n,"utf8"),o=Z(JSON.parse(await Q(r,"utf8")));ce(o,a);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:Dn(e.runDir),c=Jn(t.args),p=Fe(o),h=Ue(o,c!==void 0?{originalRequest:c}:{}),y={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return U({minKodaxVersion:ee,manifest:o,source:a,intent:h,inputs:y,...p!==void 0?{requires:p}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:Tt()}})}i(Gn,"readCapsuleFromRun");async function co(e){let t=await Mt(e);return{capsule:t,module:we(t)}}i(co,"loadGeneratedWorkflowFromRun");async function uo(e){let t=await Mt(e);return Ln({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(uo,"saveGeneratedWorkflowFromRun");function D(e,t,n,r){e.push({severity:t,requirement:n,message:r})}i(D,"addRequirementIssue");function St(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}i(St,"parseSemver");function Xn(e,t){for(let n=0;n<3;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}i(Xn,"compareSemver");function Yn(e,t,n){let r=St(t),a=St(n);if(!r){D(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!a){D(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}Xn(a,r)<0&&D(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}i(Yn,"addMinVersionIssue");function Te(e,t,n,r){if(!n)return;if(!r){for(let o of n)D(e,"warning",`${t}:${o}`,`workflow requires ${t}:${o}, but no ${t} inventory was provided`);return}let a=new Set(r);for(let o of n)a.has(o)||D(e,"error",`${t}:${o}`,`missing required workflow ${t}: ${o}`)}i(Te,"addMissingItems");function lo(e,t={}){let n=pe(e),r=[],a=n.requires;Yn(r,n.minKodaxVersion,t.kodaxVersion??Tt()),a?.environment?.includes("git-repo")&&t.isGitRepo===!1&&D(r,"error","environment:git-repo","workflow requires a git repository"),a?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&D(r,"error","environment:worktree-capable","workflow may request git worktree isolation");try{me(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(o){let s=o instanceof Error?o.message:String(o);D(r,"error","workflow:source",s)}return Te(r,"tools",a?.tools,t.availableTools),Te(r,"mcp",a?.mcp,t.availableMcp),Te(r,"skills",a?.skills,t.availableSkills),{ok:!r.some(o=>o.severity==="error"),issues:r}}i(lo,"preflightWorkflowCapsule");function Qn(e){return{project:Pt(e,".kodax","workflows"),personal:Pt(Zn(),".kodax","workflows")}}i(Qn,"defaultSavedWorkflowDirs");async function er(e,t){let r=(await te(t)).find(a=>a.name===e);if(r)return It(r.path)}i(er,"resolveSavedByName");function Et(e){let t=Qn(e);return async n=>yt(n)??await er(n,t)}i(Et,"createNestedWorkflowResolver");import{existsSync as tr,mkdirSync as nr,readFileSync as rr,writeFileSync as At}from"node:fs";import{join as ne}from"node:path";var Wt="results";function Ft(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}i(Ft,"safeKey");function Ot(e,t){let n=ne(e,t);if(tr(n))try{return JSON.parse(rr(n,"utf8"))}catch{return}}i(Ot,"readResult");function qt(e,t={}){let n=ne(e,Wt);nr(n,{recursive:!0});let r=t.readFrom?ne(t.readFrom,Wt):void 0;return{get:i(a=>{let o=`${Ft(a)}.json`,s=Ot(n,o);if(s!==void 0)return s;if(r===void 0)return;let c=Ot(r,o);if(c!==void 0){try{At(ne(n,o),JSON.stringify(c),"utf8")}catch{}return c}},"get"),set:i((a,o)=>{try{At(ne(n,`${Ft(a)}.json`),JSON.stringify(o),"utf8")}catch{}},"set")}}i(qt,"createFsResultCache");import{mkdirSync as or,appendFileSync as ir,writeFileSync as ue}from"node:fs";import{join as z}from"node:path";function de(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}i(de,"record");function F(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}i(F,"finiteNumber");function $t(e){let t=new Map,n=new Set,r=[],a=[],o=new Set,s=[],c=[],p=0,h=0,y=0,g=0,I=0,k=0,A=0,m=0,M={},$=[];for(let O of e){let P=O.data??{};if(O.type==="agent_spawned"){let u=typeof P.taskId=="string"?P.taskId:void 0;u&&t.set(u,P),P.role==="primary-review"&&(k+=1);let w=typeof P.role=="string"?P.role:"agent",S=typeof P.requestedTier=="string"?P.requestedTier:"inherited",b=`${w}/${S}`;M[b]=(M[b]??0)+1;continue}if(O.type==="agent_completed"||O.type==="agent_unverified"||O.type==="agent_failed"){let u=typeof P.taskId=="string"?P.taskId:void 0;if(!u||n.has(u))continue;n.add(u);let w=de(P.usage);!w||typeof w.totalTokens!="number"?typeof t.get(u)?.externalTarget=="string"?a.push(u):r.push(u):(p+=F(w.totalTokens),h+=F(w.inputTokens),y+=F(w.cacheReadTokens??w.cachedReadTokens),g+=F(w.outputTokens));let S=de(P.digestUsage);I+=F(S?.totalTokens),h+=F(S?.inputTokens),g+=F(S?.outputTokens),y+=F(S?.cacheReadTokens??S?.cachedReadTokens),A+=F(P.iterations);continue}if(O.type==="agent_summary_updated"){let u=de(P.usage),w=P.summaryKind;if((w==="digest"||w==="digest-failed")&&u){let S=F(u.totalTokens);p+=S,I+=S,h+=F(u.inputTokens),g+=F(u.outputTokens),y+=F(u.cacheReadTokens??u.cachedReadTokens)}continue}if(O.type!=="workflow_log")continue;let f=de(P.data);if(f?.kind==="review_quality_gate"&&typeof f.contentHash=="string"){$.push({contentHash:f.contentHash,actionableFindings:F(f.actionableFindings),unresolvedFindings:F(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"?(o.has(f.contentHash)&&(m+=1),o.add(f.contentHash)):f.role==="verification"?s.push(l):f.role==="synthesis"&&c.push(l)}for(let O of t.keys())n.has(O)||r.push(O);let J=[...new Set(r)].sort();return{totalModelTokens:p,inputTokens:h,cacheReadTokens:y,outputTokens:g,digestTokens:I,agentStarts:t.size,childTurns:A,agentStartsByRoleTier:M,primaryReviewStarts:k,duplicatePrimaryPacketReads:m,verificationPacketReads:s,synthesisPacketReads:c,reviewWaves:k>0?1:0,fixWaves:0,rereviewWaves:0,qualityGateOutcomes:$,tokenCoverage:{ok:J.length===0,missingTaskIds:J},excludedExternalTaskIds:[...new Set(a)].sort()}}i($t,"buildWorkflowCostReport");function ar(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}i(ar,"safeWorkflowArtifactName");function Ct(e,t={}){let n=t.now??(()=>Date.now()),r=z(e,"artifacts");or(r,{recursive:!0});let a=z(e,"events.jsonl");return{runDir:e,onEvent:i(o=>{ir(a,`${JSON.stringify({...o,ts:n()})}
20
20
  `,"utf8")},"onEvent"),writeArtifact:i((o,s)=>{let c=z(r,`${ar(o)}.json`);return ue(c,JSON.stringify(s,null,2),"utf8"),{name:o,path:c}},"writeArtifact"),writeScriptSnapshot:i(o=>{let s=z(e,"script.js");if(ue(s,o.source,"utf8"),!o.manifest)return{scriptPath:s};let c=z(e,"manifest.json");return ue(c,`${JSON.stringify(o.manifest,null,2)}
21
21
  `,"utf8"),{scriptPath:s,manifestPath:c}},"writeScriptSnapshot"),writeRunJson:i(o=>{let s=De(o.processMetadata?.hostMetadata),c={runId:o.state.runId,workflow:o.meta.name,status:o.state.status,totalSpawned:o.state.totalSpawned,artifacts:o.state.artifacts.map(p=>p.name),eventCount:o.state.events.length,efficiencyReport:{...$t(o.state.events),wallClockDurationMs:Math.max(0,o.endedAt-o.startedAt)},startedAt:o.startedAt,endedAt:o.endedAt,args:o.args,...o.resultSummary!==void 0?{resultSummary:o.resultSummary}:{},...o.processMetadata?.displayName!==void 0?{displayName:o.processMetadata.displayName}:{},...o.processMetadata?.goal!==void 0?{goal:o.processMetadata.goal}:{},...o.processMetadata?.source!==void 0?{source:o.processMetadata.source}:{},...o.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:o.processMetadata.savedWorkflowName}:{},...o.processMetadata?.sourceRunId!==void 0?{sourceRunId:o.processMetadata.sourceRunId}:{},...o.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:o.processMetadata.sourceWorkflowName}:{},...o.processMetadata?.revisionOf!==void 0?{revisionOf:o.processMetadata.revisionOf}:{},...o.processMetadata?.resumedFromRunId!==void 0?{resumedFromRunId:o.processMetadata.resumedFromRunId}:{},...s!==void 0?{hostMetadata:s}:{},...o.scriptSnapshot?{scriptSnapshotPath:o.scriptSnapshot.scriptPath,...o.scriptSnapshot.manifestPath?{manifestSnapshotPath:o.scriptSnapshot.manifestPath}:{}}:{}};ue(z(e,"run.json"),`${JSON.stringify(c,null,2)}
22
- `,"utf8")},"writeRunJson")}}i(Ct,"createRunGraphWriter");import{execFile as sr}from"node:child_process";import{promisify as cr}from"node:util";import{statSync as dr}from"node:fs";import{join as ur}from"node:path";var lr=cr(sr);function qe(e){return ur(e,"worktrees")}i(qe,"workflowWorktreeBaseDir");var fr=360*60*1e3;function Nt(e,t){return lr("git",[...e],{cwd:t}).then(n=>n.stdout)}i(Nt,"defaultRunGit");function mr(e){return dr(e).mtimeMs}i(mr,"defaultMtimeMs");function pr(e){let t=[],n,r,a=i(()=>{n&&t.push(r?{path:n,branch:r}:{path:n}),n=void 0,r=void 0},"flush");for(let o of e.split(/\r?\n/))o.startsWith("worktree ")?(a(),n=o.slice(9).trim()):o.startsWith("branch ")&&(r=o.slice(7).trim().replace(/^refs\/heads\//,""));return a(),t}i(pr,"parseWorktreeList");function _t(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}i(_t,"normalize");function Dt(e,t){let n=_t(e),r=_t(t);return n===r||n.startsWith(`${r}/`)}i(Dt,"isUnder");async function wr(e,t,n){try{let a=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(c=>c.trim().length>0).length,o=await t(["rev-list","--count","HEAD","--not","--remotes"],e.path),s=Number.parseInt(o.trim(),10)||0;return a>0||s>0}catch(r){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${r instanceof Error?r.message:String(r)}`),!0}}i(wr,"worktreeHasChanges");async function jt(e,t,n,r,a){if(await wr(e,n,a)){a.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),r.push(e.path)}catch(o){a.push(`remove ${e.path}: ${o instanceof Error?o.message:String(o)}`);return}if(e.branch)try{await n(["branch","-D",e.branch],t)}catch{}}i(jt,"removeWorktree");async function Ut(e,t,n){try{let r=await t(["worktree","list","--porcelain"],e);return pr(r)}catch(r){n.push(`list worktrees: ${r instanceof Error?r.message:String(r)}`);return}}i(Ut,"listWorktrees");async function Oe(e,t,n){try{await t(["worktree","prune"],e)}catch(r){n.push(`prune: ${r instanceof Error?r.message:String(r)}`)}}i(Oe,"prune");async function Vt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Nt,o=await Ut(e.gitRoot,a,n);if(!o)return{removed:r,warnings:n};for(let s of o)Dt(s.path,e.baseDir)&&await jt(s,e.gitRoot,a,r,n);return r.length>0&&await Oe(e.gitRoot,a,n),{removed:r,warnings:n}}i(Vt,"sweepWorkflowRunWorktrees");async function Bt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Nt,o=t.mtimeMs??mr,s=t.now??(()=>Date.now()),c=e.maxAgeMs??fr;await Oe(e.gitRoot,a,n);let p=await Ut(e.gitRoot,a,n);if(!p)return{removed:r,warnings:n};for(let g of p){if(!Dt(g.path,e.workflowRunsRoot))continue;let h;try{h=s()-o(g.path)}catch{continue}h>=c&&await jt(g,e.gitRoot,a,r,n)}return r.length>0&&await Oe(e.gitRoot,a,n),{removed:r,warnings:n}}i(Bt,"pruneStaleWorkflowWorktrees");var yr=200,Ht={maxAgents:64,tokenBudget:2e5};function kr(e,t){let n=e.meta,r=le(n,t);return{name:n.name,description:n.description,phases:n.phases??[],...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},maxAgents:r.maxAgents??null,maxConcurrency:r.maxConcurrency??null,tokenBudget:r.tokenBudget??null,writesFiles:n.readOnly!==!0}}i(kr,"buildApprovalSummary");function $e(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}i($e,"clampLimit");function vr(e,t,n){let r=$e(e,n),a=$e(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(vr,"clampEffectiveLimit");function Kt(e,t){if(!(e==null||!Number.isFinite(e)||e<=0))return Math.min(Math.floor(e),t)}i(Kt,"clampTokenBudget");function xr(e,t,n){let r=Kt(e,n),a=Kt(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(xr,"clampEffectiveTokenBudget");function le(e,t){let n=vr(e.maxAgents,t?.maxAgents,Ht.maxAgents),r=Ne(),a=[e.maxConcurrency,t?.maxConcurrency].map(c=>$e(c,r)).filter(c=>c!==void 0),o=a.length===0?r:Math.min(r,...a),s=xr(e.tokenBudget,t?.tokenBudget,Ht.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...o!==void 0?{maxConcurrency:o}:{},...s!==void 0?{tokenBudget:s}:{}}}i(le,"clampWorkflowLimits");function Ce(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let a=t[r];if(typeof a=="string"&&a.trim().length>0)return a}}i(Ce,"workflowResultSummary");async function _e(e){let t=le(e.module.meta,e.hostPolicy),n=kr(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let r=e.now??(()=>Date.now()),a=e.ctx?.executionCwd??e.ctx?.gitRoot;await Bt({workflowRunsRoot:hr(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps});let o=Ct(e.runDir,{now:r}),s=e.resumeFromRunDir!==void 0?gr(e.resumeFromRunDir):void 0,c=e.onWorkflowProcessEvent?je({runId:e.runId,workflowName:e.module.meta.name,displayName:e.processMetadata?.displayName??e.module.meta.name,...e.processMetadata?.goal!==void 0?{goal:e.processMetadata.goal}:{},...e.processMetadata?.source!==void 0?{source:e.processMetadata.source}:{},...e.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:e.processMetadata.savedWorkflowName}:{},...e.processMetadata?.sourceRunId!==void 0?{sourceRunId:e.processMetadata.sourceRunId}:{},...e.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:e.processMetadata.sourceWorkflowName}:{},...e.processMetadata?.revisionOf!==void 0?{revisionOf:e.processMetadata.revisionOf}:{},...s!==void 0?{resumedFromRunId:s}:{},...e.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...e.processMetadata.hostMetadata}}:{},...e.module.meta.phases!==void 0?{phases:e.module.meta.phases}:{},...t.maxAgents!==void 0?{maxAgents:t.maxAgents}:{},...e.module.meta.plannedAgents!==void 0?{plannedAgents:e.module.meta.plannedAgents}:{},...t.tokenBudget!==void 0?{tokenBudget:t.tokenBudget}:{},now:i(()=>new Date(r()).toISOString(),"now")}):void 0,p=e.scriptSnapshot?o.writeScriptSnapshot(e.scriptSnapshot):void 0,g=e.backend??Sr(e),y={...e.beforeSpawn?Rr(g,e.beforeSpawn):g,writeArtifact:i(async(m,M)=>o.writeArtifact(m,M),"writeArtifact")},I=r(),k;try{k=await Ve({runId:e.runId,args:e.args,backend:y,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:Ce,resolveWorkflowModule:Et(a??process.cwd()),resultCache:qt(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:i(m=>{o.onEvent(m),c&&e.onWorkflowProcessEvent?.(c.applyEvent(m)),e.onEvent?.(m)},"onEvent")},m=>e.module.run(m,e.args))}finally{await Vt({baseDir:qe(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps})}let A=k.ok?Ce(k.result):void 0;return o.writeRunJson({meta:e.module.meta,args:e.args,state:k.state,startedAt:I,endedAt:r(),...p?{scriptSnapshot:p}:{},...A!==void 0?{resultSummary:A}:{},...e.processMetadata!==void 0||s!==void 0?{processMetadata:{...e.processMetadata,...s!==void 0?{resumedFromRunId:s}:{}}}:{}}),k.ok?{kind:"completed",result:k.result,state:k.state}:{kind:"failed",error:k.error,state:k.state}}i(_e,"runWorkflowModule");function Sr(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return at({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId,defaultChildReadOnly:e.module.meta.readOnly===!0,kodaxAuthored:e.processMetadata?.hostMetadata?.workflowAuthorship==="kodax-generated"})}i(Sr,"buildBackend");function Rr(e,t){return{...e,spawn:i(async n=>(await t(),e.spawn(n)),"spawn")}}i(Rr,"withBeforeSpawn");function br(e,t,n){let r=e?.onWorkflowAgentDigest;r&&(n.type==="agent_completed"||n.type==="agent_unverified"||n.type==="agent_failed"||n.type==="agent_summary_updated")&&r({runId:t,event:n})}i(br,"emitWorkflowAgentDigest");async function Jt(e){let t=e.options.context?.actorControl,n=e.options.context?.actorHost;if(t===void 0!=(n===void 0))throw new Error("Workflow Runtime requires actorControl and actorHost together.");let r=t?void 0:new Xe({maxConcurrentThreadsPerSession:e.options.maxConcurrentThreadsPerSession}),a=r?{...e.options,context:{...e.options.context,actorSession:r}}:e.options,o=Ye({options:a,runtime:a.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),s=o.actorControl,c=o.actorHost;if(!s||!c)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let p=await c.createWorkflowOwner(s.callerPath,e.runId),g=c.workflowOwnerSignal(p.callerPath),h=Ir(e.signal,g);o.actorControl=p,o.actorHost=c;let y={...a,context:{...a.context,actorControl:p,actorHost:c}};Object.assign(o,{workflowWorktreeBaseDir:qe(e.runDir)});let I={maxIterationsPerChild:yr,parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:y.provider,model:y.modelOverride??y.model,effort:y.effort,reasoningMode:y.reasoningMode,repoIntelligenceMode:y.context?.repoIntelligenceMode,repoIntelligenceTrace:y.context?.repoIntelligenceTrace,extensionRuntime:y.extensionRuntime,events:y.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...o.planModeBlockCheck?{planModeBlockCheck:o.planModeBlockCheck}:{}},k=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?m=>{e.onWorkflowProcessEvent?.(m),y.events?.onWorkflowProcessEvent?.(m)}:void 0,A=e.onEvent||y.events?.onWorkflowAgentDigest?m=>{e.onEvent?.(m),br(y.events,e.runId,m)}:void 0;try{let m=await _e({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:o,childOptions:I,...e.approval?{approval:e.approval}:{},signal:h,...A?{onEvent:A}:{},...k?{onWorkflowProcessEvent:k}:{},...y.workflowHostPolicy?{hostPolicy:y.workflowHostPolicy}:{},...e.now?{now:e.now}:{},...e.scriptSnapshot?{scriptSnapshot:e.scriptSnapshot}:{},...e.resumeFromRunDir?{resumeFromRunDir:e.resumeFromRunDir}:{},...e.processMetadata?{processMetadata:e.processMetadata}:{},...e.beforeSpawn?{beforeSpawn:e.beforeSpawn}:{}}),M=Tr(e.runId,m);return await c.settleWorkflowOwner(p.callerPath,Lt(M),{output:JSON.stringify(M),structured:zt(M),artifacts:M.artifacts.map($=>$.path??$.name).filter(Boolean),...m.kind==="failed"?{error:m.error.message}:{}}),m}catch(m){let M=m instanceof Error?m:new Error(String(m)),$=re({state:{runId:e.runId,status:g.aborted?"stopped":"failed",totalSpawned:0,results:[],events:[],artifacts:[]},error:M});try{await c.settleWorkflowOwner(p.callerPath,Lt($),{output:JSON.stringify($),structured:zt($),error:M.message})}catch(J){throw new AggregateError([M,J],"Workflow execution and owner settlement failed.")}throw M}finally{await r?.close("workflow run finished")}}i(Jt,"runWorkflowFromOptions");function Tr(e,t){return t.kind==="denied"?re({state:{runId:e,status:"stopped",totalSpawned:0,results:[],events:[],artifacts:[]},summary:`Workflow ${e} was declined.`}):re({state:t.state,...t.kind==="completed"?{summary:Ce(t.result)}:{error:t.error}})}i(Tr,"workflowProtocolOutcome");function Lt(e){return e.status==="failed"?"failed":e.status==="interrupted"?"interrupted":"completed"}i(Lt,"protocolOwnerState");function Ir(e,t){return e?AbortSignal.any([e,t]):t}i(Ir,"combineAbortSignals");function zt(e){return JSON.parse(JSON.stringify(e))}i(zt,"toAgentMetadata");function Mr(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let a=t[r];if(typeof a=="string"&&a.trim().length>0)return a}}i(Mr,"resultText");function Pr(e){if(e.kind==="completed"){let t=Mr(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}i(Pr,"classifyOutcome");function Er(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,results:[],events:[],artifacts:[]}}}i(Er,"failedOutcome");var Ar=1e3;function Wr(e={},t=Be(e)){let n=new Map,r=i(o=>o?{...o,runDir:n.get(o.runId)??""}:void 0,"withRunDir"),a=i((o,s)=>{if(n.set(o.runId,o.runDir),n.size>Ar){let g=new Set(t.list().map(h=>h.runId));for(let h of n.keys())h!==o.runId&&!g.has(h)&&n.delete(h)}let c=le(o.meta,o.hostPolicy),p=t.start({runId:o.runId,workflow:o.meta.name,...o.meta.phases!==void 0?{phases:o.meta.phases}:{},...c.maxAgents!==void 0?{maxAgents:c.maxAgents}:{},...o.meta.plannedAgents!==void 0?{plannedAgents:o.meta.plannedAgents}:{},...c.tokenBudget!==void 0?{tokenBudget:c.tokenBudget}:{},...o.processMetadata!==void 0?{processMetadata:o.processMetadata}:{},...o.signal?{signal:o.signal}:{},runFn:s,classify:Pr,onError:i(g=>Er(o.runId,g),"onError")});return{runId:p.runId,done:p.done,getSnapshot:i(()=>r(p.getSnapshot()),"getSnapshot"),getProcessSnapshot:i(()=>p.getProcessSnapshot(),"getProcessSnapshot")}},"startManaged");return{start:i(o=>a({runId:o.runId,runDir:o.runDir,meta:o.module.meta,hostPolicy:o.hostPolicy,processMetadata:o.processMetadata,signal:o.signal},s=>_e({...o,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(c=>{s.onEvent(c),o.onEvent?.(c)},"onEvent")})),"start"),startFromOptions:i(o=>a({runId:o.runId,runDir:o.runDir,meta:o.module.meta,hostPolicy:o.options.workflowHostPolicy,processMetadata:o.processMetadata,signal:o.signal},s=>Jt({...o,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(c=>{s.onEvent(c),o.onEvent?.(c)},"onEvent")})),"startFromOptions"),list:i(()=>t.list().map(o=>({...o,runDir:n.get(o.runId)??""})),"list"),get:i(o=>r(t.get(o)),"get"),subscribeWorkflowProcess:i(o=>t.subscribeWorkflowProcess(o),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:i(o=>t.getWorkflowProcessSnapshot(o),"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:i(o=>t.listWorkflowProcessSnapshots(o),"listWorkflowProcessSnapshots"),pause:i(o=>t.pause(o),"pause"),resume:i(o=>t.resume(o),"resume"),stop:i((o,s)=>t.stop(o,s),"stop")}}i(Wr,"createWorkflowRunManager");var Gt;function Zo(){return Gt??=Wr({},He()),Gt}i(Zo,"getDefaultWorkflowRunManager");export{at as a,st as b,Se as c,Re as d,ut as e,lt as f,ft as g,Wn as h,Fn as i,On as j,wt as k,ht as l,yt as m,Zr as n,te as o,Hn as p,We as q,It as r,Ln as s,io as t,ao as u,so as v,co as w,uo as x,lo as y,$t as z,ar as A,Ct as B,Ht as C,kr as D,le as E,_e as F,br as G,Jt as H,Wr as I,Zo as J};
22
+ `,"utf8")},"writeRunJson")}}i(Ct,"createRunGraphWriter");import{execFile as sr}from"node:child_process";import{promisify as cr}from"node:util";import{statSync as dr}from"node:fs";import{join as ur}from"node:path";var lr=cr(sr);function qe(e){return ur(e,"worktrees")}i(qe,"workflowWorktreeBaseDir");var fr=360*60*1e3;function Nt(e,t){return lr("git",[...e],{cwd:t,windowsHide:!0}).then(n=>n.stdout)}i(Nt,"defaultRunGit");function mr(e){return dr(e).mtimeMs}i(mr,"defaultMtimeMs");function pr(e){let t=[],n,r,a=i(()=>{n&&t.push(r?{path:n,branch:r}:{path:n}),n=void 0,r=void 0},"flush");for(let o of e.split(/\r?\n/))o.startsWith("worktree ")?(a(),n=o.slice(9).trim()):o.startsWith("branch ")&&(r=o.slice(7).trim().replace(/^refs\/heads\//,""));return a(),t}i(pr,"parseWorktreeList");function _t(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}i(_t,"normalize");function Dt(e,t){let n=_t(e),r=_t(t);return n===r||n.startsWith(`${r}/`)}i(Dt,"isUnder");async function wr(e,t,n){try{let a=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(c=>c.trim().length>0).length,o=await t(["rev-list","--count","HEAD","--not","--remotes"],e.path),s=Number.parseInt(o.trim(),10)||0;return a>0||s>0}catch(r){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${r instanceof Error?r.message:String(r)}`),!0}}i(wr,"worktreeHasChanges");async function jt(e,t,n,r,a){if(await wr(e,n,a)){a.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),r.push(e.path)}catch(o){a.push(`remove ${e.path}: ${o instanceof Error?o.message:String(o)}`);return}if(e.branch)try{await n(["branch","-D",e.branch],t)}catch{}}i(jt,"removeWorktree");async function Ut(e,t,n){try{let r=await t(["worktree","list","--porcelain"],e);return pr(r)}catch(r){n.push(`list worktrees: ${r instanceof Error?r.message:String(r)}`);return}}i(Ut,"listWorktrees");async function Oe(e,t,n){try{await t(["worktree","prune"],e)}catch(r){n.push(`prune: ${r instanceof Error?r.message:String(r)}`)}}i(Oe,"prune");async function Vt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Nt,o=await Ut(e.gitRoot,a,n);if(!o)return{removed:r,warnings:n};for(let s of o)Dt(s.path,e.baseDir)&&await jt(s,e.gitRoot,a,r,n);return r.length>0&&await Oe(e.gitRoot,a,n),{removed:r,warnings:n}}i(Vt,"sweepWorkflowRunWorktrees");async function Bt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Nt,o=t.mtimeMs??mr,s=t.now??(()=>Date.now()),c=e.maxAgeMs??fr;await Oe(e.gitRoot,a,n);let p=await Ut(e.gitRoot,a,n);if(!p)return{removed:r,warnings:n};for(let h of p){if(!Dt(h.path,e.workflowRunsRoot))continue;let y;try{y=s()-o(h.path)}catch{continue}y>=c&&await jt(h,e.gitRoot,a,r,n)}return r.length>0&&await Oe(e.gitRoot,a,n),{removed:r,warnings:n}}i(Bt,"pruneStaleWorkflowWorktrees");var yr=200,Ht={maxAgents:64,tokenBudget:2e5};function kr(e,t){let n=e.meta,r=le(n,t);return{name:n.name,description:n.description,phases:n.phases??[],...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},maxAgents:r.maxAgents??null,maxConcurrency:r.maxConcurrency??null,tokenBudget:r.tokenBudget??null,writesFiles:n.readOnly!==!0}}i(kr,"buildApprovalSummary");function $e(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}i($e,"clampLimit");function vr(e,t,n){let r=$e(e,n),a=$e(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(vr,"clampEffectiveLimit");function Kt(e,t){if(!(e==null||!Number.isFinite(e)||e<=0))return Math.min(Math.floor(e),t)}i(Kt,"clampTokenBudget");function xr(e,t,n){let r=Kt(e,n),a=Kt(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(xr,"clampEffectiveTokenBudget");function le(e,t){let n=vr(e.maxAgents,t?.maxAgents,Ht.maxAgents),r=Ne(),a=[e.maxConcurrency,t?.maxConcurrency].map(c=>$e(c,r)).filter(c=>c!==void 0),o=a.length===0?r:Math.min(r,...a),s=xr(e.tokenBudget,t?.tokenBudget,Ht.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...o!==void 0?{maxConcurrency:o}:{},...s!==void 0?{tokenBudget:s}:{}}}i(le,"clampWorkflowLimits");function Ce(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let a=t[r];if(typeof a=="string"&&a.trim().length>0)return a}}i(Ce,"workflowResultSummary");async function _e(e){let t=le(e.module.meta,e.hostPolicy),n=kr(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let r=e.now??(()=>Date.now()),a=e.ctx?.executionCwd??e.ctx?.gitRoot;await Bt({workflowRunsRoot:hr(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps});let o=Ct(e.runDir,{now:r}),s=e.resumeFromRunDir!==void 0?gr(e.resumeFromRunDir):void 0,c=e.onWorkflowProcessEvent?je({runId:e.runId,workflowName:e.module.meta.name,displayName:e.processMetadata?.displayName??e.module.meta.name,...e.processMetadata?.goal!==void 0?{goal:e.processMetadata.goal}:{},...e.processMetadata?.source!==void 0?{source:e.processMetadata.source}:{},...e.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:e.processMetadata.savedWorkflowName}:{},...e.processMetadata?.sourceRunId!==void 0?{sourceRunId:e.processMetadata.sourceRunId}:{},...e.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:e.processMetadata.sourceWorkflowName}:{},...e.processMetadata?.revisionOf!==void 0?{revisionOf:e.processMetadata.revisionOf}:{},...s!==void 0?{resumedFromRunId:s}:{},...e.processMetadata?.hostMetadata!==void 0?{hostMetadata:{...e.processMetadata.hostMetadata}}:{},...e.module.meta.phases!==void 0?{phases:e.module.meta.phases}:{},...t.maxAgents!==void 0?{maxAgents:t.maxAgents}:{},...e.module.meta.plannedAgents!==void 0?{plannedAgents:e.module.meta.plannedAgents}:{},...t.tokenBudget!==void 0?{tokenBudget:t.tokenBudget}:{},now:i(()=>new Date(r()).toISOString(),"now")}):void 0,p=e.scriptSnapshot?o.writeScriptSnapshot(e.scriptSnapshot):void 0,h=e.backend??Sr(e),g={...e.beforeSpawn?Rr(h,e.beforeSpawn):h,writeArtifact:i(async(m,M)=>o.writeArtifact(m,M),"writeArtifact")},I=r(),k;try{k=await Ve({runId:e.runId,args:e.args,backend:g,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:Ce,resolveWorkflowModule:Et(a??process.cwd()),resultCache:qt(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:i(m=>{o.onEvent(m),c&&e.onWorkflowProcessEvent?.(c.applyEvent(m)),e.onEvent?.(m)},"onEvent")},m=>e.module.run(m,e.args))}finally{await Vt({baseDir:qe(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps})}let A=k.ok?Ce(k.result):void 0;return o.writeRunJson({meta:e.module.meta,args:e.args,state:k.state,startedAt:I,endedAt:r(),...p?{scriptSnapshot:p}:{},...A!==void 0?{resultSummary:A}:{},...e.processMetadata!==void 0||s!==void 0?{processMetadata:{...e.processMetadata,...s!==void 0?{resumedFromRunId:s}:{}}}:{}}),k.ok?{kind:"completed",result:k.result,state:k.state}:{kind:"failed",error:k.error,state:k.state}}i(_e,"runWorkflowModule");function Sr(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return at({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId,defaultChildReadOnly:e.module.meta.readOnly===!0,kodaxAuthored:e.processMetadata?.hostMetadata?.workflowAuthorship==="kodax-generated"})}i(Sr,"buildBackend");function Rr(e,t){return{...e,spawn:i(async n=>(await t(),e.spawn(n)),"spawn")}}i(Rr,"withBeforeSpawn");function br(e,t,n){let r=e?.onWorkflowAgentDigest;r&&(n.type==="agent_completed"||n.type==="agent_unverified"||n.type==="agent_failed"||n.type==="agent_summary_updated")&&r({runId:t,event:n})}i(br,"emitWorkflowAgentDigest");async function Jt(e){let t=e.options.context?.actorControl,n=e.options.context?.actorHost;if(t===void 0!=(n===void 0))throw new Error("Workflow Runtime requires actorControl and actorHost together.");let r=t?void 0:new Xe({maxConcurrentThreadsPerSession:e.options.maxConcurrentThreadsPerSession}),a=r?{...e.options,context:{...e.options.context,actorSession:r}}:e.options,o=Ye({options:a,runtime:a.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),s=o.actorControl,c=o.actorHost;if(!s||!c)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let p=await c.createWorkflowOwner(s.callerPath,e.runId),h=c.workflowOwnerSignal(p.callerPath),y=Ir(e.signal,h);o.actorControl=p,o.actorHost=c;let g={...a,context:{...a.context,actorControl:p,actorHost:c}};Object.assign(o,{workflowWorktreeBaseDir:qe(e.runDir)});let I={maxIterationsPerChild:yr,...g.session?.storage!==void 0?{historyStorage:g.session.storage}:{},parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:g.provider,model:g.modelOverride??g.model,effort:g.effort,reasoningMode:g.reasoningMode,repoIntelligenceMode:g.context?.repoIntelligenceMode,repoIntelligenceTrace:g.context?.repoIntelligenceTrace,compaction:g.compaction,extensionRuntime:g.extensionRuntime,events:g.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...o.planModeBlockCheck?{planModeBlockCheck:o.planModeBlockCheck}:{}},k=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?m=>{e.onWorkflowProcessEvent?.(m),g.events?.onWorkflowProcessEvent?.(m)}:void 0,A=e.onEvent||g.events?.onWorkflowAgentDigest?m=>{e.onEvent?.(m),br(g.events,e.runId,m)}:void 0;try{let m=await _e({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:o,childOptions:I,...e.approval?{approval:e.approval}:{},signal:y,...A?{onEvent:A}:{},...k?{onWorkflowProcessEvent:k}:{},...g.workflowHostPolicy?{hostPolicy:g.workflowHostPolicy}:{},...e.now?{now:e.now}:{},...e.scriptSnapshot?{scriptSnapshot:e.scriptSnapshot}:{},...e.resumeFromRunDir?{resumeFromRunDir:e.resumeFromRunDir}:{},...e.processMetadata?{processMetadata:e.processMetadata}:{},...e.beforeSpawn?{beforeSpawn:e.beforeSpawn}:{}}),M=Tr(e.runId,m);return await c.settleWorkflowOwner(p.callerPath,Lt(M),{output:JSON.stringify(M),structured:zt(M),artifacts:M.artifacts.map($=>$.path??$.name).filter(Boolean),...m.kind==="failed"?{error:m.error.message}:{}}),m}catch(m){let M=m instanceof Error?m:new Error(String(m)),$=re({state:{runId:e.runId,status:h.aborted?"stopped":"failed",totalSpawned:0,results:[],events:[],artifacts:[]},error:M});try{await c.settleWorkflowOwner(p.callerPath,Lt($),{output:JSON.stringify($),structured:zt($),error:M.message})}catch(J){throw new AggregateError([M,J],"Workflow execution and owner settlement failed.")}throw M}finally{await r?.close("workflow run finished")}}i(Jt,"runWorkflowFromOptions");function Tr(e,t){return t.kind==="denied"?re({state:{runId:e,status:"stopped",totalSpawned:0,results:[],events:[],artifacts:[]},summary:`Workflow ${e} was declined.`}):re({state:t.state,...t.kind==="completed"?{summary:Ce(t.result)}:{error:t.error}})}i(Tr,"workflowProtocolOutcome");function Lt(e){return e.status==="failed"?"failed":e.status==="interrupted"?"interrupted":"completed"}i(Lt,"protocolOwnerState");function Ir(e,t){return e?AbortSignal.any([e,t]):t}i(Ir,"combineAbortSignals");function zt(e){return JSON.parse(JSON.stringify(e))}i(zt,"toAgentMetadata");function Mr(e){if(typeof e=="string"&&e.trim().length>0)return e;if(typeof e!="object"||e===null)return;let t=e,n=t.synthesis;if(typeof n=="string"&&n.trim().length>0)return n;if(typeof n=="object"&&n!==null){let r=n.text;if(typeof r=="string"&&r.trim().length>0)return r}for(let r of["summary","report","text","result"]){let a=t[r];if(typeof a=="string"&&a.trim().length>0)return a}}i(Mr,"resultText");function Pr(e){if(e.kind==="completed"){let t=Mr(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}i(Pr,"classifyOutcome");function Er(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,results:[],events:[],artifacts:[]}}}i(Er,"failedOutcome");var Ar=1e3;function Wr(e={},t=Be(e)){let n=new Map,r=i(o=>o?{...o,runDir:n.get(o.runId)??""}:void 0,"withRunDir"),a=i((o,s)=>{if(n.set(o.runId,o.runDir),n.size>Ar){let h=new Set(t.list().map(y=>y.runId));for(let y of n.keys())y!==o.runId&&!h.has(y)&&n.delete(y)}let c=le(o.meta,o.hostPolicy),p=t.start({runId:o.runId,workflow:o.meta.name,...o.meta.phases!==void 0?{phases:o.meta.phases}:{},...c.maxAgents!==void 0?{maxAgents:c.maxAgents}:{},...o.meta.plannedAgents!==void 0?{plannedAgents:o.meta.plannedAgents}:{},...c.tokenBudget!==void 0?{tokenBudget:c.tokenBudget}:{},...o.processMetadata!==void 0?{processMetadata:o.processMetadata}:{},...o.signal?{signal:o.signal}:{},runFn:s,classify:Pr,onError:i(h=>Er(o.runId,h),"onError")});return{runId:p.runId,done:p.done,getSnapshot:i(()=>r(p.getSnapshot()),"getSnapshot"),getProcessSnapshot:i(()=>p.getProcessSnapshot(),"getProcessSnapshot")}},"startManaged");return{start:i(o=>a({runId:o.runId,runDir:o.runDir,meta:o.module.meta,hostPolicy:o.hostPolicy,processMetadata:o.processMetadata,signal:o.signal},s=>_e({...o,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(c=>{s.onEvent(c),o.onEvent?.(c)},"onEvent")})),"start"),startFromOptions:i(o=>a({runId:o.runId,runDir:o.runDir,meta:o.module.meta,hostPolicy:o.options.workflowHostPolicy,processMetadata:o.processMetadata,signal:o.signal},s=>Jt({...o,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(c=>{s.onEvent(c),o.onEvent?.(c)},"onEvent")})),"startFromOptions"),list:i(()=>t.list().map(o=>({...o,runDir:n.get(o.runId)??""})),"list"),get:i(o=>r(t.get(o)),"get"),subscribeWorkflowProcess:i(o=>t.subscribeWorkflowProcess(o),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:i(o=>t.getWorkflowProcessSnapshot(o),"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:i(o=>t.listWorkflowProcessSnapshots(o),"listWorkflowProcessSnapshots"),pause:i(o=>t.pause(o),"pause"),resume:i(o=>t.resume(o),"resume"),stop:i((o,s)=>t.stop(o,s),"stop")}}i(Wr,"createWorkflowRunManager");var Gt;function Zo(){return Gt??=Wr({},He()),Gt}i(Zo,"getDefaultWorkflowRunManager");export{at as a,st as b,Se as c,Re as d,ut as e,lt as f,ft as g,Wn as h,Fn as i,On as j,wt as k,ht as l,yt as m,Zr as n,te as o,Hn as p,We as q,It as r,Ln as s,io as t,ao as u,so as v,co as w,uo as x,lo as y,$t as z,ar as A,Ct as B,Ht as C,kr as D,le as E,_e as F,br as G,Jt as H,Wr as I,Zo as J};
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a}from"./chunk-PFH53O4M.js";import"./chunk-OG6DRNKV.js";import"./chunk-GAFFYJU3.js";import"./chunk-BUPJGG3C.js";import"./chunk-F7AIEHSS.js";import"./chunk-ONUPGMER.js";export{a as loadCompactionConfig};
2
+ import{a}from"./chunk-4PVSDE5L.js";import"./chunk-QSMXI4MH.js";import"./chunk-OGL227XV.js";import"./chunk-6YUDR7WN.js";import"./chunk-F7AIEHSS.js";import"./chunk-ONUPGMER.js";export{a as loadCompactionConfig};