@kodax-ai/kodax 0.7.71 → 0.7.72
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.
- package/CHANGELOG.md +602 -487
- package/README.md +46 -27
- package/README_CN.md +30 -13
- package/dist/chunks/agent-YKGU4USA.js +2 -0
- package/dist/chunks/argument-completer-QZETLNAB.js +2 -0
- package/dist/chunks/{chunk-SX2WFHIS.js → chunk-2RI252RN.js} +1 -1
- package/dist/chunks/chunk-CLFP6UGU.js +71 -0
- package/dist/chunks/chunk-E27LHEIP.js +37 -0
- package/dist/chunks/chunk-EDZ5KJFT.js +5 -0
- package/dist/chunks/chunk-GIK4SGAT.js +364 -0
- package/dist/chunks/chunk-GVWPHE23.js +310 -0
- package/dist/chunks/{chunk-A2TFSV5M.js → chunk-IR5KIK7E.js} +1 -1
- package/dist/chunks/chunk-JSDLBXME.js +755 -0
- package/dist/chunks/chunk-MVARIMQV.js +22 -0
- package/dist/chunks/chunk-PKQOEDHJ.js +628 -0
- package/dist/chunks/{chunk-64NQBOSN.js → chunk-SQODXBLX.js} +1 -1
- package/dist/chunks/chunk-VDGCGOQH.js +328 -0
- package/dist/chunks/chunk-VVE3UM4F.js +410 -0
- package/dist/chunks/chunk-WIBLZK4G.js +151 -0
- package/dist/chunks/{compaction-config-5KKKXYFT.js → compaction-config-TWCDFLX6.js} +1 -1
- package/dist/chunks/{construction-bootstrap-OXDDDW6O.js → construction-bootstrap-ZJPXUPXQ.js} +1 -1
- package/dist/chunks/dist-JT4ATXVM.js +2 -0
- package/dist/chunks/host-SVEDZUC5.js +2 -0
- package/dist/chunks/{run-manager-Z3W6MDO7.js → run-manager-RX42UNEM.js} +1 -1
- package/dist/chunks/{utils-CFOXDCB5.js → utils-OTT5CG5J.js} +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.js +4 -4
- package/dist/kodax_bootstrap.js +28 -0
- package/dist/kodax_cli.js +1325 -1333
- package/dist/kodax_resume.js +44 -0
- package/dist/provider-capabilities.json +50 -48
- package/dist/runtime-worker.js +1322 -1330
- package/dist/sdk-a2a.d.ts +10 -9
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +382 -206
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +80 -128
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +3 -0
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +71 -23
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +143 -31
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-session.d.ts +6 -5
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.d.ts +5 -5
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +14 -14
- package/dist/types-chunks/{bash-prefix-extractor.d-YoiZl5yt.d.ts → bash-prefix-extractor.d-CHJO5y94.d.ts} +107 -248
- package/dist/types-chunks/{capsule.d-CK5Pfz1k.d.ts → capsule.d-DxtdE-GD.d.ts} +24 -95
- package/dist/types-chunks/center-types.d-BBT122uJ.d.ts +91 -0
- package/dist/types-chunks/{commands.d-D6g2jq8V.d.ts → commands.d-DZxHzH5-.d.ts} +6 -4
- package/dist/types-chunks/{guardrail.d-DilYC1dh.d.ts → guardrail.d-DlpMnd-Y.d.ts} +1 -1
- package/dist/types-chunks/{guardrail.d-DdeDWnVu.d.ts → guardrail.d-auV61_h5.d.ts} +83 -10
- package/dist/types-chunks/public-api.d--IDNJsu1.d.ts +1342 -0
- package/dist/types-chunks/{run-manager.d-DxU3SSGR.d.ts → run-manager.d-Bh50OdVl.d.ts} +1 -1
- package/dist/types-chunks/sdk-session-Cfw6NFu-.d.ts +82 -0
- package/dist/types-chunks/{types.d-CEZZSY9s.d.ts → types.d-CNZgY52F.d.ts} +2 -2
- package/dist/types-chunks/{types.d-vJExiRje.d.ts → types.d-DCQVBqVn.d.ts} +10 -5
- package/dist/types-chunks/{types.d-CRCaLt_s.d.ts → types.d-DH1mvdcl.d.ts} +284 -164
- package/dist/types-chunks/{types.d-CzsLFqmf.d.ts → types.d-EqQmHztg.d.ts} +9 -10
- package/dist/types-chunks/{utils.d-Cb6vdvFM.d.ts → utils.d-gmn3c5U4.d.ts} +9 -12
- package/docs/SDK_EMBEDDER_GUIDE.md +171 -26
- package/package.json +4 -4
- package/scripts/kodax-bin.cjs +4 -2
- package/scripts/production-env.cjs +9 -0
- package/dist/chunks/agent-X2EWQADL.js +0 -2
- package/dist/chunks/argument-completer-BLNXDO2F.js +0 -2
- package/dist/chunks/chunk-4DY756KL.js +0 -70
- package/dist/chunks/chunk-52JSZ77P.js +0 -37
- package/dist/chunks/chunk-A574DBTV.js +0 -422
- package/dist/chunks/chunk-F7KGYHJ3.js +0 -624
- package/dist/chunks/chunk-GVTM4Z6O.js +0 -151
- package/dist/chunks/chunk-PHH4TRGF.js +0 -22
- package/dist/chunks/chunk-PVUXONQB.js +0 -366
- package/dist/chunks/chunk-T7LYK53M.js +0 -329
- package/dist/chunks/chunk-VRSVNU2Y.js +0 -7
- package/dist/chunks/chunk-Y5XKAN7C.js +0 -755
- package/dist/chunks/chunk-Z535BARK.js +0 -306
- package/dist/chunks/dist-IXJRJ27U.js +0 -2
- package/dist/chunks/host-VRKDAN26.js +0 -2
- package/dist/types-chunks/public-api.d-BvCp5VkW.d.ts +0 -601
- package/dist/types-chunks/sdk-session-wGpa7X_U.d.ts +0 -796
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{A as xe,y as we}from"./chunk-T7LYK53M.js";import{C as z,Ca as H,F as G,G as le,H as q,Ma as he,Qa as ve,ma as ue,na as de,oa as fe,pa as pe,q as ce,qa as me,ra as V,ya as ge,za as _}from"./chunk-ZJIMT5I3.js";import{Fa as Ee}from"./chunk-Y5XKAN7C.js";import{e as ye}from"./chunk-52JSZ77P.js";import{a as o}from"./chunk-ONUPGMER.js";import u from"fs";import f from"path";import{exec as Ze,spawnSync as et}from"child_process";import{promisify as tt}from"util";import{fileURLToPath as nt}from"url";var W="en";function Xe(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(Xe,"detectSystemLocale");function Pe(e){if(!e||e==="auto"){W=Xe();return}W=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(Pe,"setLocale");var be={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.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","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.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.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 Ot(e,t){let r=be[W][e]??be.en[e]??e;if(t)for(let[i,s]of Object.entries(t))r=r.replace(`{${i}}`,String(s));return r}o(Ot,"t");var Se={core:`// KodaX core configuration template.
|
|
3
|
-
// Copy only the fields you need to ~/.kodax/config.json (strict JSON).
|
|
4
|
-
// MCP, A2A, and Extensions live in ~/.kodax/integrations/*.json; use
|
|
5
|
-
// \`kodax integrations migrate --dry-run\` for legacy declarations.
|
|
6
|
-
{
|
|
7
|
-
// "provider": "deepseek",
|
|
8
|
-
// "model": "deepseek-v4",
|
|
9
|
-
// "runtimeMode": "embedded",
|
|
10
|
-
// "effort": "high",
|
|
11
|
-
// "agentMode": "ama",
|
|
12
|
-
// "permissionMode": "accept-edits",
|
|
13
|
-
// "locale": "zh",
|
|
14
|
-
// "customProviders": [
|
|
15
|
-
// {
|
|
16
|
-
// "name": "my-relay",
|
|
17
|
-
// "protocol": "openai",
|
|
18
|
-
// "baseUrl": "https://api.example.com/v1",
|
|
19
|
-
// "apiKeyEnv": "MY_RELAY_API_KEY",
|
|
20
|
-
// "model": "provider/model",
|
|
21
|
-
// "reasoning": { "efforts": ["off", "low", "high"], "default": "high" }
|
|
22
|
-
// }
|
|
23
|
-
// ],
|
|
24
|
-
// "repoIntelligenceMode": "auto",
|
|
25
|
-
// "sessionRetentionDays": 0,
|
|
26
|
-
// "workflow": { "maxConcurrency": 8 }
|
|
27
|
-
}
|
|
28
|
-
`,mcp:`// User MCP declarations: ~/.kodax/integrations/mcp.json (strict JSON).
|
|
29
|
-
// The whole file hot-reloads; healthy entries remain active if one new entry
|
|
30
|
-
// fails to prepare. Keep credentials in \${env:NAME} references.
|
|
31
|
-
{
|
|
32
|
-
"version": 1,
|
|
33
|
-
"servers": {}
|
|
34
|
-
// Example:
|
|
35
|
-
// "servers": {
|
|
36
|
-
// "reporting": {
|
|
37
|
-
// "type": "streamable-http",
|
|
38
|
-
// "url": "https://mcp.example.com",
|
|
39
|
-
// "headers": { "Authorization": "Bearer \${env:REPORTING_MCP_TOKEN}" },
|
|
40
|
-
// "connect": "lazy"
|
|
41
|
-
// }
|
|
42
|
-
// }
|
|
43
|
-
}
|
|
44
|
-
`,a2a:`// Bidirectional A2A configuration: ~/.kodax/integrations/a2a.json.
|
|
45
|
-
// \`agents\` calls many third-party Agents. The optional singleton \`server\`
|
|
46
|
-
// exposes exactly one KodaX general task Agent; ACP remains the coding/editor
|
|
47
|
-
// protocol. Uncomment only the entries you need; no token value belongs here.
|
|
48
|
-
// Legacy version 1 files remain readable. Non-empty files require an explicit
|
|
49
|
-
// stopped-daemon migration; new/empty files and every later write use version 2.
|
|
50
|
-
{
|
|
51
|
-
"version": 2,
|
|
52
|
-
|
|
53
|
-
// Create this inbound block with \`kodax a2a expose\`; config never starts a
|
|
54
|
-
// listener by itself. Do not copy private Agent instructions, Runtime Skills,
|
|
55
|
-
// model names, or local paths into the public \`published.skills\` list.
|
|
56
|
-
// Managed workspaces default below
|
|
57
|
-
// ~/kodax_a2a_server_workspace/<runtime-profile>/contexts/<context-key>/.
|
|
58
|
-
// Native read/grep/glob remains available according to workspace access.
|
|
59
|
-
// Arbitrary shell is never exposed. Skill instructions/assets need no
|
|
60
|
-
// process authority. An exact checked-in scripts/... entry requires
|
|
61
|
-
// process="isolated", skillScripts admission, and \`kodax sandbox doctor\`.
|
|
62
|
-
// ASRT receives no KodaX credentials or ambient ~/.srt-settings.json and its
|
|
63
|
-
// script quota is observed; hostile tenants also require an outer container/VM.
|
|
64
|
-
//
|
|
65
|
-
// "server": {
|
|
66
|
-
// "execution": {
|
|
67
|
-
// "kind": "local-agent",
|
|
68
|
-
// "agentRef": { "source": "markdown:user", "name": "report-agent" },
|
|
69
|
-
// "workspace": { "mode": "managed" },
|
|
70
|
-
// "toolPolicy": {
|
|
71
|
-
// "workspace": "write",
|
|
72
|
-
// "process": "deny",
|
|
73
|
-
// "network": { "mode": "deny" },
|
|
74
|
-
// "tools": [],
|
|
75
|
-
// "mcp": {},
|
|
76
|
-
// "skillScripts": {},
|
|
77
|
-
// "subagents": "deny"
|
|
78
|
-
// }
|
|
79
|
-
// },
|
|
80
|
-
// "published": {
|
|
81
|
-
// "name": "KodaX Agent",
|
|
82
|
-
// "description": "Completes approved general tasks.",
|
|
83
|
-
// "version": "0.7.71",
|
|
84
|
-
// "skills": [{ "id": "general", "name": "General", "description": "Complete general tasks.", "tags": [] }],
|
|
85
|
-
// "inputModes": ["text/plain"],
|
|
86
|
-
// "outputModes": ["text/plain"]
|
|
87
|
-
// },
|
|
88
|
-
// "authentication": { "type": "bearer-env", "tokenEnv": "KODAX_A2A_TOKEN", "principalId": "configured-client" },
|
|
89
|
-
// "dataDir": "~/.kodax/a2a/tasks"
|
|
90
|
-
// },
|
|
91
|
-
|
|
92
|
-
// Production OAuth2 resource-server alternative for the server above. The
|
|
93
|
-
// external Authorization Server issues access tokens and, for JWT tokens,
|
|
94
|
-
// signs them. KodaX holds no issuer signing key; it validates RFC 9068 tokens
|
|
95
|
-
// against the issuer's rotating JWKS, audience, expiry, subject, and scopes.
|
|
96
|
-
// Replace the server.authentication value above with:
|
|
97
|
-
// {
|
|
98
|
-
// "type": "oauth2-jwt",
|
|
99
|
-
// "scheme": "enterprise-oauth",
|
|
100
|
-
// "issuer": "https://identity.example.com",
|
|
101
|
-
// "audience": "https://agent.example.com/a2a",
|
|
102
|
-
// "jwksUrl": "https://identity.example.com/.well-known/jwks.json",
|
|
103
|
-
// "tokenUrl": "https://identity.example.com/oauth/token",
|
|
104
|
-
// "metadataUrl": "https://identity.example.com/.well-known/oauth-authorization-server",
|
|
105
|
-
// "requiredScopes": ["a2a.invoke"]
|
|
106
|
-
// }
|
|
107
|
-
|
|
108
|
-
"agents": {
|
|
109
|
-
// Fixed Bearer compatibility example. \`enabled\` is hot desired state:
|
|
110
|
-
// disabled Agents remain configured but are not candidates for new
|
|
111
|
-
// orchestration, while already admitted remote tasks may finish.
|
|
112
|
-
// "reporting": {
|
|
113
|
-
// "cardUrl": "https://agents.example.com/.well-known/agent-card.json",
|
|
114
|
-
// "enabled": true,
|
|
115
|
-
// "credentialEnv": "REPORTING_A2A_TOKEN",
|
|
116
|
-
// "effect": "read"
|
|
117
|
-
// },
|
|
118
|
-
|
|
119
|
-
// Standards-based machine-to-machine OAuth2 example. The external
|
|
120
|
-
// Authorization Server issues access tokens; KodaX obtains and caches them
|
|
121
|
-
// only in process memory. \`tokenUrl\` must exactly match the selected Card
|
|
122
|
-
// OAuth2 clientCredentials flow. Use \`kodax a2a enable|disable <name>\` to
|
|
123
|
-
// mutate \`enabled\` atomically; the owning Runtime applies it asynchronously.
|
|
124
|
-
// "reviewer": {
|
|
125
|
-
// "cardUrl": "https://reviewer.example.com/.well-known/agent-card.json",
|
|
126
|
-
// "enabled": false,
|
|
127
|
-
// "effect": "read",
|
|
128
|
-
// "authentication": {
|
|
129
|
-
// "type": "oauth2-client-credentials",
|
|
130
|
-
// "scheme": "enterprise-oauth",
|
|
131
|
-
// "issuer": "https://identity.example.com",
|
|
132
|
-
// "tokenUrl": "https://identity.example.com/oauth/token",
|
|
133
|
-
// "clientId": "kodax-reviewer",
|
|
134
|
-
// "clientSecretEnv": "REVIEWER_CLIENT_SECRET",
|
|
135
|
-
// "scopes": ["a2a.invoke"],
|
|
136
|
-
// "resource": "https://reviewer.example.com/",
|
|
137
|
-
// "clientAuthentication": "client-secret-basic"
|
|
138
|
-
// }
|
|
139
|
-
// }
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
`,extensions:`// Trusted user Extension paths: ~/.kodax/integrations/extensions.json.
|
|
143
|
-
// Extensions are host code. Reload is whole-domain atomic; use MCP for
|
|
144
|
-
// capabilities that should remain outside the KodaX process.
|
|
145
|
-
{
|
|
146
|
-
"version": 1,
|
|
147
|
-
"paths": []
|
|
148
|
-
}
|
|
149
|
-
`};function Ce(e){return Se[e]}o(Ce,"getConfigTemplate");import{closeSync as J,existsSync as p,fsyncSync as Oe,mkdirSync as Z,openSync as ee,readFileSync as Ae,renameSync as Ie,statSync as Fe,unlinkSync as Y,watch as Ue,writeFileSync as Re}from"node:fs";import{createHash as ze}from"node:crypto";import m from"node:path";var Ge={mcp:"mcp.json",a2a:"a2a.json",extensions:"extensions.json"},qe=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 De(e,t){if(e.version!==1)throw new Error(`${t} version must be 1.`)}o(De,"requireVersionOne");function _e(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(_e,"requireStringMap");function Q(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(Q,"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 Ve(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,qe,`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&&Q(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&&_e(n.env,`MCP server "${e}" env`),n.headers!==void 0&&_e(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&&Q(i.scopes,`MCP server "${e}" auth.scopes`),B(i.redirectPort,`MCP server "${e}" auth.redirectPort`)}return structuredClone(n)}o(Ve,"parseMcpServer");function k(e){let t=w(e,"MCP integration config");T(t,new Set(["version","servers"]),"MCP integration config"),De(t,"MCP integration config");let n=w(t.servers,"MCP integration config servers"),r={};for(let[i,s]of Object.entries(n))r[i]=Ve(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"),De(t,"Extensions integration config");let n=Q(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 m.join(m.resolve(t),"integrations",Ge[e])}o(P,"resolveIntegrationConfigPath");function te(e){return m.join(m.resolve(e),"config.json")}o(te,"coreConfigPath");function Le(e){return ze("sha256").update(e).digest("hex")}o(Le,"hashText");function ne(e){let t=Ae(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(ne,"readJsonFile");function O(e){return{domain:e.domain,source:e.source,path:e.path,revision:Le(e.raw),document:structuredClone(e.document),loadedAt:new Date().toISOString()}}o(O,"snapshot");function N(e){let t=te(e);return p(t)?w(ne(t).value,"Core config"):{}}o(N,"readCoreConfig");function $(e){let t=P("mcp",e);if(p(t)){let i=ne(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(p(t)){let i=ne(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 He(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(He,"likelySecretWarnings");function We(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)=>p(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:He(i)}}o(We,"planLegacyIntegrationMigration");function Be(e,t){let n=te(e);Z(m.dirname(n),{recursive:!0,mode:448});let r=`${n}.${process.pid}.${Date.now()}.tmp`,i=ee(r,"wx",384);try{Re(i,`${JSON.stringify(t,null,2)}
|
|
150
|
-
`,"utf8"),Oe(i)}finally{J(i)}try{Ie(r,n)}catch(s){throw p(r)&&Y(r),new Error("Failed to atomically clean legacy integration fields.",{cause:s})}}o(Be,"writeCoreConfigAtomically");function $t(e){let t=We(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&&p(te(e.configHome))){let s={...n};p(t.mcp.destination)&&delete s.mcpServers,p(t.extensions.destination)&&delete s.extensions,Je(n,s)||(Be(e.configHome,s),i=!0)}return{...t,applied:r,cleanedLegacy:i}}o($t,"migrateLegacyIntegrationConfig");function Je(e,t){return JSON.stringify(e)===JSON.stringify(t)}o(Je,"isDeepStrictEqualForConfig");function Ye(e){return p(e)?Le(Ae(e,"utf8")):void 0}o(Ye,"currentUserRevision");function Qe(e){let t=`${e}.lock`;try{return{fd:ee(t,"wx",384),path:t}}catch(n){throw new Error(`Integration configuration is busy: ${m.basename(e)}`,{cause:n})}}o(Qe,"acquireWriteLock");function A(e){let t=P(e.domain,e.configHome),n=e.validate(e.document);Z(m.dirname(t),{recursive:!0,mode:448});let r=Qe(t);try{let i=Ye(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=ee(a,"wx",384);try{Re(l,s,"utf8"),Oe(l)}finally{J(l)}try{Ie(a,t)}catch(c){throw p(a)&&Y(a),new Error(`Failed to atomically replace ${m.basename(t)}.`,{cause:c})}return O({domain:e.domain,source:"user",path:t,raw:s,document:n})}finally{J(r.fd),p(r.path)&&Y(r.path)}}o(A,"writeIntegrationDocument");function ke(e){if(!p(e))return"missing";let t=Fe(e);return`${t.dev}:${t.ino}:${t.size}:${t.mtimeMs}`}o(ke,"metadataSignature");function L(e,t){return{code:e,message:t,time:new Date().toISOString()}}o(L,"safeDiagnostic");var Me=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=ke(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 ke(this.#r)===this.#u&&this.#e?{ok:!0,snapshot:structuredClone(this.#e)}:this.reload()}startWatching(t=100,n=2e3){if(!(this.#o||this.#i)){Z(m.dirname(this.#r),{recursive:!0,mode:448});try{this.#o=Ue(m.dirname(this.#r),(r,i)=>{i!==null&&i.toString()!==m.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 rt=tt(Ze),d=ye(),Yt=f.join(d,"sessions"),g=f.join(d,"config.json"),Qt=60,h=null,oe=!1,ot="dumb";function it(e){let t=f.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(it,"buildShellEnvCommand");function st(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(st,"parseNullDelimitedShellEnv");function at(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||!f.isAbsolute(r))return!1;let{args:i,sentinel:s}=it(r),a=e.run??et,l={...t,TERM:ot},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=st(b,s),D=!1;for(let[U,je]of Object.entries(R))U!=="TERM"&&t[U]===void 0&&(t[U]=je,D=!0);return D}o(at,"hydrateProcessEnvFromShell");function ct(){if(!oe){oe=!0;try{at()}catch{}}}o(ct,"ensureShellEnvironmentHydrated");function Zt(){oe=!1}o(Zt,"resetShellEnvironmentHydrationForTesting");function lt(e){ge(e.customProviders??[])}o(lt,"registerConfiguredCustomProviders");function ie(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(ie,"normalizeConfiguredExtensions");function ut(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{u.mkdirSync(f.dirname(g),{recursive:!0}),u.writeFileSync(g,JSON.stringify(t,null,2))}catch{}return t}o(ut,"migrateLegacyPermissionModeInConfig");function dt(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=u.readFileSync(g,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&u.writeFileSync(g,n)}catch{}return{...e,permissionMode:"auto"}}o(dt,"migrateAutoInProjectAliasInConfig");function ft(){if(h)return h;let e="0.7.71";if(e)return h=e,h;let t=f.join(f.dirname(nt(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(ft,"getVersion");var en=ft();function pt(e){return de(e)}o(pt,"getProviderModel");function se(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(se,"mergeModels");function mt(e,t){t||(t=ae().providerModels);let n=t?.[e];if(n&&n.length>0){try{let r=V(e);if(r.length>0)return se(n,r)}catch{}try{let r=_(e);if(r)return se(n,r.getAvailableModels())}catch{}return n}try{let r=V(e);if(r.length>0)return r}catch{}try{let r=_(e);if(r)return r.getAvailableModels()}catch{}return[]}o(mt,"getProviderAvailableModels");function gt(e,t){let n=fe(e,t);if(n!=="unknown")return n;try{let r=_(e);if(r)return r.getReasoningCapability(t)}catch{}return"unknown"}o(gt,"getProviderReasoningCapability");function ht(e){let t=pe(e);if(t)return t;try{return H().find(r=>r.name===e)?.capabilityProfile??null}catch{return null}}o(ht,"getProviderCapabilityProfile");function $e(e,t){let n=ht(e),r=gt(e,t);if(n)return{capabilityProfile:n,reasoningCapability:r};try{let i=he(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}o($e,"getProviderCapabilityMetadata");function tn(e,t){let n=$e(e,t);return n?we({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(tn,"getProviderCapabilitySnapshot");function vt(e,t,n,r){let i=$e(e,t);return i?xe({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:r}):null}o(vt,"getProviderPolicyDecision");function nn(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(nn,"describeProviderCapabilitySummary");function rn(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(rn,"formatReasoningCapabilityShort");function C(e){if(e)return e==="none"?"off":e}o(C,"formatReasoningEffortForDisplay");function X(e,t){let n=C(t);n&&!e.includes(n)&&e.push(n)}o(X,"pushUniqueEffortDisplay");function on(e,t){let n=["auto"],i=F(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(on,"getProviderReasoningEffortOptions");function sn(e,t){let n=F(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(sn,"getProviderReasoningEffortCycle");function yt(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(yt,"legacyReasoningModeToEffortDisplay");function F(e,t){let n=t??pt(e);if(!n)return;let r=ve(e,n)?.reasoningProfile;if(r)return ce(r,Ee(e,n))}o(F,"resolveReasoningProfileForDisplay");function an(e){let t=C(e.effort)??yt(e.reasoningMode,e.thinking),n=F(e.provider,e.model);if(!n)return t;try{let r=le({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=C(r.configuredEffort)??t,a=r.configuredEffort!==void 0&&n.disabledEfforts?.includes(r.configuredEffort)===!0?"off":C(r.effectiveEffort);return a&&a!==i?`${i}->${a}`:i}catch{if(e.effort)try{let r=q({currentEffort:e.effort,capability:n}),i=C(e.effort)??t,s=C(r.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}o(an,"formatReasoningEffortStatusLabel");function cn(e){let t=kt(e);if(!t)return{preserved:!0};let n=F(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(cn,"resolveProviderReasoningRuntimeEffort");function Et(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(Et,"describeReasoningCapabilityControl");function ln(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(ln,"describeReasoningExecution");function un(e){let t=[];e||(e=ae().providerModels);for(let n of me())t.push({name:n.name,model:n.model,models:mt(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?se(i,r.models):r.models})()}));t.push(...n)}catch{}return t}o(un,"getProviderList");function dn(e){if(ue(e))return!0;try{return _(e)?.isConfigured()??!1}catch{return!1}}o(dn,"isProviderConfigured");function ae(){try{if(u.existsSync(g)){let n=JSON.parse(u.readFileSync(g,"utf-8")),r=n.reasoningCeiling??n.reasoningMode,i=[],s={};try{i=[...K(d).document.paths]}catch{}try{s=$(d).document.servers}catch{}return dt(ut({...n,reasoningMode:r,extensions:ie(i),mcpServers:s}))}}catch{}let e,t;try{let n=K(d);n.source!=="default"&&(e=ie([...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(ae,"loadConfig");var wt=f.join(d,"config.example.jsonc"),re={mcp:f.join(d,"integrations","mcp.example.jsonc"),a2a:f.join(d,"integrations","a2a.example.jsonc"),extensions:f.join(d,"integrations","extensions.example.jsonc")},xt=[{name:"core",path:wt},{name:"mcp",path:re.mcp},{name:"a2a",path:re.a2a},{name:"extensions",path:re.extensions}];function bt(){let e=[];for(let t of xt)try{if(u.existsSync(t.path))continue;u.mkdirSync(f.dirname(t.path),{recursive:!0}),u.writeFileSync(t.path,Ce(t.name),"utf8"),e.push(t.path)}catch{}return e}o(bt,"ensureExampleConfigFiles");function fn(){return bt()[0]}o(fn,"ensureExampleConfigFile");var j=new Map;function Pt(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(Pt,"projectConfigEnvironment");var Ke=[{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=>Ct(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 St(e){for(let t of Ke)Pt(t.env,t.value(e))}o(St,"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 Ct(e){return e?.filter(t=>t.trim().length>0).join(",")}o(Ct,"configStringList");var pn=[...Ke.map(({configPath:e,env:t})=>({configPath:e,env:t}))];function _t(e){St(e)}o(_t,"applyConfigEnvironment");function mn(){ct();let e=ae();return _t(e),lt(e),Pe(e.locale),e}o(mn,"prepareRuntimeConfig");function gn(e){let t={};if(u.existsSync(g))try{let a=JSON.parse(u.readFileSync(g,"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(f.dirname(g),{recursive:!0}),u.writeFileSync(g,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:ie(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(gn,"saveConfig");function hn(e,t,n){return e.effort!==void 0||G(n).kind==="value"||t.effort!==void 0}o(hn,"resolveInitialEffortOverride");function y(e){return e?.trim()?e:void 0}o(y,"nonEmptySelection");function vn(e){return y(e.explicitProvider)??y(e.environmentProvider)??y(e.configuredProvider)??e.defaultProvider}o(vn,"resolveRuntimeProviderSelection");function yn(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(yn,"resolveRuntimeModelSelection");function En(e){if(e.explicitEffort!==void 0)return z(e.explicitEffort);let t=G(e.environmentEffort);return t.kind==="value"?t.value:e.configuredEffort===void 0?void 0:z(e.configuredEffort)}o(En,"resolveRuntimeEffortSelection");function kt(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}o(kt,"resolvePermissionModeEffort");async function wn(e){try{let{stdout:t}=await rt("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}o(wn,"getGitRoot");function Mt(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(Mt,"formatProviderSourceKind");function xn(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: ${Mt(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: ${Et(e.reasoningCapability)}`]}o(xn,"formatProviderCapabilityDetailLines");function bn(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:vt(e,t,n,i.hints)})).filter(i=>i.decision!==null)}o(bn,"getProviderCommonPolicyScenarios");var Te=.5,Ne=0,I={locked:!1,queue:[]};async function Pn(e){for(;I.locked;)await new Promise(t=>I.queue.push(t));I.locked=!0;try{let t=(Date.now()-Ne)/1e3;t<Te&&await new Promise(r=>setTimeout(r,(Te-t)*1e3));let n=await e();return Ne=Date.now(),n}finally{I.locked=!1;let t=I.queue.shift();t&&t()}}o(Pn,"rateLimitedCall");export{Ot as a,Se as b,Ce as c,k as d,M as e,P as f,$ as g,K as h,We as i,$t as j,A as k,Me as l,d as m,Yt as n,g as o,Qt as p,at as q,Zt as r,lt as s,ft as t,en as u,pt as v,mt as w,gt as x,ht as y,tn as z,vt as A,nn as B,rn as C,C as D,on as E,sn as F,an as G,cn as H,Et as I,ln as J,un as K,dn as L,ae as M,wt as N,re as O,bt as P,fn as Q,pn as R,_t as S,mn as T,gn as U,hn as V,vn as W,yn as X,En as Y,kt as Z,wn as _,Mt as $,xn as aa,bn as ba,Pn as ca};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{Ic as Xe,Jc as Ye,Ra as me,Sa as Le,ub as Ke,vb as ze,wb as pe,xb as Ge,yb as Je}from"./chunk-PVUXONQB.js";import{Q as $e}from"./chunk-ZJIMT5I3.js";import{Ed as fe,Fd as N,Gd as le,Hd as Ve,Od as je,Pd as Be,Qd as He,cb as de,mb as Ne,rd as De,sd as Ue,ud as K,yd as ue}from"./chunk-Y5XKAN7C.js";import{w as _e}from"./chunk-VRSVNU2Y.js";import{a as i}from"./chunk-ONUPGMER.js";import{basename as pr,dirname as gr}from"node:path";import{execFile as Zt}from"node:child_process";import Y from"node:path";import{promisify as Qt}from"node:util";var en=Qt(Zt),tn=1e4,at=2,Ze=new Set(["write","edit","multi_edit","insert_after_anchor"]),Qe=new Set(["read"]),nn=/^\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 et(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(et,"normalizeWaitTimeoutMs");function ge(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}i(ge,"hasVerificationWork");function D(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}i(D,"normalizeWorkspacePath");function we(e,t){let n=t.gitRoot?Y.resolve(t.gitRoot):void 0,r=Y.isAbsolute(e)&&n?Y.relative(n,Y.resolve(e)):e;return D(r)}i(we,"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 st(e){let t=e.trim();return t.length>0&&nn.test(t)}i(st,"isPreparatoryOnlyText");function an(e,t){let n=e.trim(),r=t?.trim();return r&&(n.length===0||st(n))?r:e}i(an,"selectWorkflowFinalText");async function Z(e,t){return(await en("git",[...e],{cwd:t,timeout:tn,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}i(Z,"runGit");async function sn(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await Z(["rev-parse","--show-toplevel"],t)).trim(),r=await Promise.all([Z(["diff","--name-only","--"],n),Z(["diff","--cached","--name-only","--"],n),Z(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(r.flatMap(a=>a.split(/\r?\n/)).map(D).filter(a=>a.length>0))]}i(sn,"listGitChangedFiles");async function he(e,t){try{return{paths:(await t(e)).map(D).filter(r=>r.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}i(he,"captureChangedPaths");function cn(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[],readPathById:new Map,succeededReadPaths:[]}}i(cn,"createMutationRecorder");function tt(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 D(n)}}i(tt,"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=tt(n.input);a!==void 0&&t.toolPathById.set(n.id,a)}if(Qe.has(n.name)){let a=tt(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 Q(e){return[...new Set(e.filter(t=>t.trim().length>0))]}i(Q,"uniqueItems");function nt(e){let t=e.verification;if(!t)return;let n=[],r=new Set(e.before.paths.map(D)),a=Q(e.after.paths.map(D)),o=a.filter(w=>!r.has(w)),s=Q(e.mutationRecorder.succeededToolCalls),d=e.acceptToolMutationEvidence?s:[],p=e.acceptToolMutationEvidence?Q(e.mutationRecorder.succeededPaths.map(D)):[],m=o.length>0||d.length>0,h=t.enforcement??"hard",S=(t.requiredChangedPaths??[]).map(w=>we(w,e.ctx)),x=Q(e.mutationRecorder.succeededReadPaths.map(w=>we(w,e.ctx))),y=(t.requiredReadPaths??[]).map(w=>we(w,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}`):m||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&&!m&&n.push("workflow child reached its iteration limit before satisfying the task");for(let w of S)!a.includes(w)&&!p.includes(w)&&n.push(`required changed path was not present in workspace changes: ${w}`);for(let w of y)x.includes(w)||n.push(`required review evidence was not read: ${w}`);let E=t.minFinalTextChars;return E!==void 0&&!m&&e.term.finalText.trim().length<E&&n.push(`finalText was shorter than the required ${E} characters`),t.rejectPreparatoryFinalText===!0&&!m&&st(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:h,reasons:n,changedPaths:a,mutationToolCalls:s,mutationEvidence:m,...x.length>0?{readPaths:x}:{}}}i(nt,"evaluateVerification");function ye(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
|
-
`);return e.trim().length>0?`${e}
|
|
4
|
-
|
|
5
|
-
${r}`:r}i(ye,"appendVerificationFailure");function ct(e){return e.state==="completed"?"completed":e.state==="canceled"?"stopped":e.state==="failed"||e.state==="rejected"||e.state==="unknown"?"failed":"running"}i(ct,"externalWorkflowStatus");function un(e,t){return{taskId:e.taskId,name:t,status:ct(e),finalText:e.output??e.error??"",...e.usage?{usage:e.usage}:{}}}i(un,"externalWorkflowResult");function fn(e,t){let n=ct(e);return{taskId:e.taskId,name:t,status:n,...e.output!==void 0?{lastText:e.output}:{},...e.output===void 0&&e.error!==void 0?{lastText:e.error}:{}}}i(fn,"externalWorkflowSnapshot");function rt(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}i(rt,"limitReachedWarningVerification");function ln(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<at&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}i(ln,"shouldRepairVerificationFailure");function mn(e){let t=e.verification.reasons.map(r=>`- ${r}`).join(`
|
|
6
|
-
`),n=(e.verification.changedPaths??[]).length>0?`
|
|
7
|
-
Workspace changes already present before this repair attempt:
|
|
8
|
-
${e.verification.changedPaths?.map(r=>`- ${r}`).join(`
|
|
9
|
-
`)??""}`:"";return[e.originalPrompt,"","[Workflow verification repair]",`Repair attempt ${e.attempt}/${at}.`,"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(mn,"buildVerificationRepairPrompt");async function ot(e,t,n,r,a=n){if(n===void 0)return e;let o;try{return await Promise.race([e,new Promise((s,d)=>{o=setTimeout(()=>{r.childAbortControllers?.get(t)?.abort(),d(new Error(`workflow task ${t} timed out after ${a??n}ms`))},n)})])}finally{o&&clearTimeout(o)}}i(ot,"waitForChildPromise");function it(e,t,n,r=!1){return t.outputSchema!==void 0&&Le(t.outputSchema),Ye(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?[...t.evidenceRefs]:[],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}:{},...r?{workflowOutputContract:{kodaxAuthored:!0,terseResult:t.terseResult===!0}}:{},...t.effort?{effort:t.effort}:{}}}i(it,"buildBundle");function ve(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(ve,"deriveTerminal");function dt(e){let{ctx:t,childOptions:n}=e,r=e.runChild??Xe,a=e.queue??_e(),o=e.listChangedFiles??sn,s=e.now??(()=>Date.now()),d=0,p=e.generateId??(()=>`wf-child-${d+=1}`),m=new Map,h=new Map,S=new Set,x=new Map,y=i(()=>e.onTaskSummary!==void 0||S.size>0,"hasTaskSummaryObservers"),E=i((u,f)=>{try{e.onTaskSummary?.(u,f)}catch{}for(let g of S)try{g(u,f)}catch{}},"notifyTaskSummary");return{spawn:i(async u=>{let f=on(u,e.defaultChildReadOnly);if(f.target&&f.subagentType)throw new Error("Workflow target and subagentType are mutually exclusive.");if(f.target){let M=t.agentExecutorPlane;if(!M)throw new Error("Workflow target requires a host-bound agent executor plane.");let W=Ke(f.target.agentId,M.context,t.agentScope);if(W){if(f.target.expectedConfigurationRevision!==void 0&&f.target.expectedConfigurationRevision!==W.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let{target:I,...F}=f;f={...F,...W.subagentType?{subagentType:W.subagentType}:{}}}else{if(f.modelHint!==void 0||f.effort!==void 0)throw new Error("External Workflow targets cannot combine local modelHint/effort routing selectors.");if(f.verification?.requiresMutation===!0)throw new Error("External Workflow targets cannot directly satisfy workspace mutation verification.");let I=p();return await M.plane.tasks.start({taskId:I,agentId:f.target.agentId,objective:f.prompt,context:{...M.context,...e.runId?{workflowId:e.runId}:{}},readOnly:f.readOnly,...f.target.expectedConfigurationRevision?{expectedConfigurationRevision:f.target.expectedConfigurationRevision}:{}}),h.set(I,{name:f.name}),{taskId:I,name:f.name}}}let g=p(),l=it(g,f,new Set(m.keys()),e.kodaxAuthored===!0),k=rn(f).verification,O=cn(),_=f.isolation!=="worktree",L=ge(k)?he(t,o):Promise.resolve({paths:[]}),c=t.childProgressSnapshots,A=i(async M=>{let W=new AbortController;t.childAbortControllers?.set(g,W),c&&ze(c,{childId:g,startedAt:s(),maxIterations:n.maxIterationsPerChild,parentRole:n.parentRole,readOnly:M.readOnly,specialistName:M.specialistName});let I={...n,parentOptions:{...n.parentOptions,events:dn(n.parentOptions.events,O)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:g,itemId:`agent:${g}`}}:{},childActivityName:f.name,workflowDigestMode:y()?"async":"blocking",...y()?{onWorkflowChildDigest:i(R=>{E(R.childId,{...R.digest?{summary:R.digest}:{},summaryKind:R.digest?"digest":"digest-failed",...R.totalTokensUsed>0?{usage:R.usage??{totalTokens:R.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:W.signal,snapshotUpdater:c?R=>Ge(c,g,R):void 0},F;try{return await L,F=await r([M],t,I),F}finally{if(t.childAbortControllers?.delete(g),c){let R=F?ve(F,g):{snapStatus:"failed",finalText:""};pe(c,g,{status:R.snapStatus,finalText:R.finalText,endedAt:s()})}}},"runBundle"),j=A(l);return m.set(g,{name:f.name,input:f,bundle:l,promise:j,runBundle:A,verification:k,changedPathBaseline:L,mutationRecorder:O,acceptToolMutationEvidence:_,repairAttempts:0}),de(x,g,j),{taskId:g,name:f.name}},"spawn"),wait:i(async(u,f)=>{let g=h.get(u);if(g){let q=t.agentExecutorPlane;if(!q)throw new Error("Workflow external-agent binding was removed.");let ce=et(f);return un(await q.plane.tasks.wait(u,ce),g.name)}let l=m.get(u);if(!l)throw new Error(`unknown workflow task: ${u}`);let v=et(f),k=Date.now(),O=i(async q=>{if(v===void 0)return ot(q,u,void 0,t);let ce=Date.now()-k,Ce=v-ce;if(Ce<=0)throw t.childAbortControllers?.get(u)?.abort(),new Error(`workflow task ${u} timed out after ${v}ms`);return ot(q,u,Math.max(1,Math.floor(Ce)),t,v)},"waitForAttempt"),_=await O(l.promise),L=_.totalTokensUsed,c=ve(_,u),A=c.routeFacts,j=c.routeFacts?.inputTokens??0,M=c.routeFacts?.outputTokens??0,W=c.routeFacts?.cacheReadTokens??0,I=c.routeFacts?.iterations??0,F=c.routeFacts?.durationMs??0,R=c.routeFacts?.fallbackReason,se=c.digestTokensUsed??0,B=c.digestUsage,b=l.verification?nt({verification:l.verification,term:c,before:await l.changedPathBaseline,after:ge(l.verification)?await he(t,o):{paths:[]},mutationRecorder:l.mutationRecorder,ctx:t,acceptToolMutationEvidence:l.acceptToolMutationEvidence}):void 0;for(c.limitReached===!0&&b===void 0&&c.status==="completed"&&(b=rt(),c={...c,status:"completed_unverified",snapStatus:"completed",finalText:ye(c.finalText,b)});ln({entry:l,term:c,verification:b});){l.repairAttempts+=1;let q=it(u,{...l.input,prompt:mn({originalPrompt:l.input.prompt,previousFinalText:c.finalText,verification:b,attempt:l.repairAttempts})},void 0,e.kodaxAuthored===!0);l.promise=l.runBundle(q),de(x,u,l.promise),_=await O(l.promise),L+=_.totalTokensUsed,c=ve(_,u),j+=c.routeFacts?.inputTokens??0,M+=c.routeFacts?.outputTokens??0,W+=c.routeFacts?.cacheReadTokens??0,I+=c.routeFacts?.iterations??0,F+=c.routeFacts?.durationMs??0,R??=c.routeFacts?.fallbackReason,se+=c.digestTokensUsed??0,c.digestUsage&&(B={inputTokens:(B?.inputTokens??0)+(c.digestUsage.inputTokens??0),outputTokens:(B?.outputTokens??0)+(c.digestUsage.outputTokens??0),totalTokens:(B?.totalTokens??0)+(c.digestUsage.totalTokens??0),cacheReadTokens:(B?.cacheReadTokens??0)+(c.digestUsage.cacheReadTokens??0)}),b=l.verification?nt({verification:l.verification,term:c,before:await l.changedPathBaseline,after:ge(l.verification)?await he(t,o):{paths:[]},mutationRecorder:l.mutationRecorder,ctx:t,acceptToolMutationEvidence:l.acceptToolMutationEvidence}):void 0,c.limitReached===!0&&b===void 0&&c.status==="completed"&&(b=rt(),c={...c,status:"completed_unverified",snapStatus:"completed",finalText:ye(c.finalText,b)})}if(b!==void 0&&!b.ok&&c.status==="completed"){let q=b.enforcement==="warn";c={...c,status:q?"completed_unverified":"failed",snapStatus:q?"completed":"failed",finalText:ye(c.finalText,b)}}return pe(t.childProgressSnapshots,u,{status:c.snapStatus,finalText:c.finalText,endedAt:s()}),{taskId:u,name:l.name,status:c.status,finalText:c.finalText,...c.digest?{digest:c.digest}:{},...c.digestFailed?{digestFailed:!0}:{},...c.digestPending?{digestPending:!0}:{},...b!==void 0?{verification:b}:{},...c.limitReached?{limitReached:!0}:{},...c.provider?{provider:c.provider}:{},...c.model?{model:c.model}:{},...c.structured!==void 0?{structured:c.structured}:{},...se>0?{digestUsage:B??{totalTokens:se}}:{},...c.routeFacts?{requestedTier:A?.requestedTier??c.routeFacts.requestedTier,tierOutcome:c.routeFacts.tierOutcome,providerSource:A?.providerSource??c.routeFacts.providerSource,...A?.modelSource??c.routeFacts.modelSource?{modelSource:A?.modelSource??c.routeFacts.modelSource}:{},...A?.initialProvider??c.routeFacts.initialProvider?{initialProvider:A?.initialProvider??c.routeFacts.initialProvider}:{},...A?.initialModel??c.routeFacts.initialModel?{initialModel:A?.initialModel??c.routeFacts.initialModel}:{},...c.routeFacts.finalProvider?{finalProvider:c.routeFacts.finalProvider}:{},...c.routeFacts.finalModel?{finalModel:c.routeFacts.finalModel}:{},...R?{fallbackReason:R}:{},...c.routeFacts.resolvedEffort?{resolvedEffort:c.routeFacts.resolvedEffort}:{},...I>0?{iterations:I}:{},...F>0?{durationMs:F}:{}}:{},usage:{totalTokens:L,...j>0?{inputTokens:j}:{},...M>0?{outputTokens:M}:{},...W>0?{cacheReadTokens:W}:{}}}},"wait"),output:i(async u=>{let f=h.get(u);if(f){let k=t.agentExecutorPlane;if(!k)throw new Error("Workflow external-agent binding was removed.");return fn(await k.plane.tasks.get(u),f.name)}if(!m.has(u))throw new Error(`unknown workflow task: ${u}`);let g=m.get(u)?.name??u,l=t.childProgressSnapshots?.get(u);if(!l)return{taskId:u,name:g,status:"running"};let v=l.status==="aborted"?"stopped":l.status;return l.finalText!==void 0?{taskId:u,name:g,status:v,lastText:l.finalText}:{taskId:u,name:g,status:v}},"output"),send:i(async(u,f)=>{if(h.has(u)){let g=t.agentExecutorPlane;if(!g)throw new Error("Workflow external-agent binding was removed.");await g.plane.tasks.sendInput(u,{content:f});return}if(!m.has(u))throw new Error(`unknown workflow task: ${u}`);Ne({to:u,priority:"user",mode:"prompt",content:f,registry:x,queue:a})},"send"),stop:i(async(u,f)=>{if(h.has(u)){let g=t.agentExecutorPlane;if(!g)throw new Error("Workflow external-agent binding was removed.");await g.plane.tasks.cancel(u,f);return}if(!m.has(u))throw new Error(`unknown workflow task: ${u}`);t.childAbortControllers?.get(u)?.abort()},"stop"),subscribeTaskSummaryUpdates:i(u=>(S.add(u),()=>{S.delete(u)}),"subscribeTaskSummaryUpdates")}}i(dt,"createCodingWorkflowBackend");import{homedir as Xn}from"node:os";import{join as It}from"node:path";var pn=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],gn="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",wn={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 hn(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(hn,"readStructuredFinding");function yn(e){let t=hn(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(yn,"pickFindingText");function vn(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
|
-
`)}i(vn,"buildInvestigatorPrompt");function kn(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:pn).slice(0,t).map((r,a)=>({name:`investigate-${a+1}`,prompt:vn(e.question,r)}))}i(kn,"resolveAngles");async function xn(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0,modelHint:"balanced",outputSchema:wn});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:yn(n)}}catch(n){let r=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${r}`}}}i(xn,"investigate");async function Sn(e,t){let n=kn(t),r=(await e.phase("investigate",()=>e.parallel(n.map(s=>()=>xn(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
|
-
${s.text}`),rubric:t.rubric??gn}))).text,findings:r,degraded:a}}i(Sn,"runParallelInvestigation");var ut={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:Sn};import{createHash as Rn}from"node:crypto";var ke={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"}}}},xe={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 C(e){return e.normalize("NFC").replace(/\r\n?/g,`
|
|
13
|
-
`).trim().replace(/[\t\n\f\r ]+/g," ")}i(C,"normalizeText");function lt(e){return C(e).replace(/\\/g,"/")}i(lt,"normalizeLocation");function ee(e){return[...new Set(e.map(C).filter(Boolean))].sort((t,n)=>t<n?-1:t>n?1:0)}i(ee,"uniqueSorted");function bn(e,t,n){return Rn("sha256").update(`${e}\0${lt(t)}\0${C(n)}`,"utf8").digest("hex")}i(bn,"findingId");function mt(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=lt(r.location),o=C(r.claim),s=C(r.evidence);return{findingId:bn(e,a,o),severity:r.severity,location:a,claim:o,evidence:s,...r.suggestedFix?{suggestedFix:C(r.suggestedFix)}:{}}}).sort((r,a)=>r.findingId<a.findingId?-1:r.findingId>a.findingId?1:0),unverifiedRequirements:ee(n.unverifiedRequirements)}}i(mt,"normalizeScopedReviewResult");var ft={low:0,medium:1,high:2,critical:3};function Tn(e){return e.reduce((t,n)=>ft[n]>ft[t]?n:t,"low")}i(Tn,"maxSeverity");function pt(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:Tn(o.map(s=>s.severity)),location:o[0].location,claim:o[0].claim,evidence:ee(o.map(s=>s.evidence)),suggestedFixes:ee(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:ee(e.flatMap(a=>a.unverifiedRequirements))}}i(pt,"mergeScopedReviewResults");function gt(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 d=a.get(s.findingId);if(d.disposition==="refuted")return[];let p=d.severityReason?.trim(),m=d.effectiveSeverity!==void 0&&!!p;return[{...s,disposition:d.disposition,severity:m?d.effectiveSeverity:s.severity,verificationEvidence:C(d.evidence),...p?{severityReason:C(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(gt,"applyFindingVerification");var Mn={type:"object",additionalProperties:!1,required:["summary"],properties:{summary:{type:"string"}}};function ht(e){return[e.packetPath,...e.evidenceChunks.map(t=>t.path)]}i(ht,"evidencePaths");function En(e){let t=me(e,ke);if(t.length>0)throw new Error(`primary reviewer structured result is invalid: ${t.join("; ")}`);return e}i(En,"rawReview");function Pn(e){let t=me(e,xe);if(t.length>0)throw new Error(`finding verifier structured result is invalid: ${t.join("; ")}`);return e}i(Pn,"rawVerification");function Se(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(Se,"resultOrThrow");function An(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
|
-
`)}i(An,"buildScopedReviewPrimaryPrompt");function Wn(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
|
-
`)}i(Wn,"buildScopedReviewVerificationPrompt");function In(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(In,"buildScopedReviewFinalPrompt");async function wt(e,t,n,r){let a=Se(await e.runAgent({name:`${n?"high-risk-":""}primary-${t.partitionKey}`,phase:"primary-review",prompt:An(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:ht(t)},outputSchema:ke,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(wt,"runPrimary");async function Fn(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=Se(await e.runAgent({name:`verify-${t.partitionKey}`,phase:"verifier",prompt:Wn(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:ht(t)},outputSchema:xe,terseResult:!0}),"finding verifier");return e.log({message:`verification read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"verification",contentHash:t.contentHash,reason:"candidate findings"}}),gt(n,Pn(r.structured))}i(Fn,"verifyFindings");async function qn(e,t,n){let r=[await wt(e,t,!1,n)];t.riskFlags.includes("routing-high")&&r.push(await wt(e,t,!0,n));let a=r.map(d=>mt(t.contentHash,t.requirementsPresent,d)),o=pt(a),s=await Fn(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(d=>d.disposition==="unresolved").length,unqualifiedApprovalAllowed:s.unqualifiedApprovalAllowed}}),{contentHash:t.contentHash,result:s}}i(qn,"reviewPacket");async function On(e,t){if(!Array.isArray(t.packets)||t.packets.length===0)throw new Error("scoped-review requires at least one review packet");let n=await e.parallel(t.packets.map(d=>()=>qn(e,d,t)),{concurrency:4});if(n.some(d=>d===null))throw new Error("one or more scope packets failed review; no final verdict was accepted");let r=n.filter(d=>d!==null);await e.artifact("scoped-review-audit",r);let a=Se(await e.runAgent({name:"final-review-synthesis",phase:"final-synthesis",prompt:In(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:Mn,terseResult:!0}),"final synthesis"),o=a.structured;return{summary:typeof o?.summary=="string"?o.summary:a.finalText,packetResults:r}}i(On,"runScopedReview");var yt={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:On};function vt(e){return{meta:e.meta,run:i((t,n)=>e.run(t,n),"run")}}i(vt,"erase");var kt=[vt(ut),vt(yt)];function xt(e){return kt.find(t=>t.meta.name===e)}i(xt,"getBuiltinWorkflow");function Jr(){return kt.map(e=>e.meta)}i(Jr,"listBuiltinWorkflows");import{mkdir as Mt,readdir as Cn,readFile as z,rename as $n,unlink as Te,writeFile as Me}from"node:fs/promises";import{basename as _n,dirname as be,join as U}from"node:path";import{pathToFileURL as Nn}from"node:url";var Et=[".workflow.json",".ts",".mjs",".js"],G="0.7.49";function Pt(){return"0.7.71"}i(Pt,"currentKodaxWorkflowVersion");function Dn(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}i(Dn,"executionForPath");function Un(e){let t=Et.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}i(Un,"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 Pe(e){return typeof e=="object"&&e!==null}i(Pe,"isRecord");function St(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}i(St,"readRequiredString");async function Rt(e,t){if(!e)return[];let n;try{n=await Cn(e)}catch{return[]}let r=new Map;for(let a of Et)for(let o of n){if(!o.endsWith(a))continue;let s=Un(o);if(!s||s.length===0||r.has(s))continue;let d=U(e,o);r.set(s,{name:s,path:d,source:t,execution:Dn(d)})}return[...r.values()]}i(Rt,"scanDir");async function J(e){let t=await Rt(e.personal,"personal"),n=await Rt(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(J,"discoverSavedWorkflows");function Vn(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}i(Vn,"isWorkflowModule");function jn(e){let t=e.default;if(Vn(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(jn,"normalizeWorkflowModule");function Bn(e){let t=JSON.parse(e);if(!Pe(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=fe(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=K(t.manifest);return{manifest:r,source:n,capsule:N({minKodaxVersion:G,manifest:r,source:n}),legacy:!0}}i(Bn,"parseGeneratedWorkflowFile");async function Ae(e){let t=Bn(await z(e,"utf8"));return t.capsule??N({minKodaxVersion:G,manifest:t.manifest,source:t.source})}i(Ae,"loadSavedWorkflowCapsule");async function At(e){if(e.endsWith(".workflow.json"))return le(await Ae(e));let t=await import(Nn(e).href);return jn(t)}i(At,"loadSavedWorkflow");function We(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}i(We,"deriveRequirements");function te(e,t){ue(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}i(te,"assertGeneratedCapsuleSource");async function Hn(e){let t=Ee(e.name),n=K(e.manifest);te(n,e.source);let r=e.requires??We(n),a=N({minKodaxVersion:e.minKodaxVersion??G,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 Mt(e.dir,{recursive:!0});let o=U(e.dir,`${t}.workflow.json`);return await Me(o,`${JSON.stringify(a,null,2)}
|
|
17
|
-
`,"utf8"),{name:t,path:o,source:"project",execution:"capability-generated"}}i(Hn,"saveGeneratedWorkflow");async function bt(e,t){await Me(e,`${JSON.stringify(t,null,2)}
|
|
18
|
-
`,"utf8")}i(bt,"writeCapsuleFile");async function Ln(e){try{return await z(e,"utf8"),!0}catch{return!1}}i(Ln,"fileExists");async function no(e){let t=(await J(e.dirs)).filter(d=>d.name===e.name).filter(d=>e.source===void 0||d.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let r=Ee(e.newName),a=U(be(n.path),`${r}.workflow.json`);if(a!==n.path&&await Ln(a))throw new Error(`saved workflow already exists: ${r}`);let o=await Ae(n.path);te(o.manifest,o.source);let s=N({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 Me(a,`${JSON.stringify(s,null,2)}
|
|
19
|
-
`,"utf8"),a!==n.path&&await Te(n.path),{name:r,path:a,source:n.source,execution:"capability-generated"}}i(no,"renameSavedWorkflow");async function ro(e){let t=(await J(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 Te(n.path),n}i(ro,"deleteSavedWorkflow");async function oo(e){let t=Ee(e.name),n=(await J(e.dirs)).filter(y=>y.name===t).filter(y=>e.savedSource===void 0||y.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=K({...e.manifest,name:t});te(a,e.source);let o=e.requires??We(a),s=N({minKodaxVersion:e.minKodaxVersion??G,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}:{}}),d=await Ae(r.path),p=new Date().toISOString().replace(/[:.]/g,"-"),m=U(be(r.path),".revisions",t),h=`${p}-${process.hrtime.bigint().toString(36)}`,S=U(m,`${t}-${h}.workflow.json`),x=U(be(r.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Mt(m,{recursive:!0}),await bt(S,d);try{await bt(x,s),await $n(x,r.path)}catch(y){try{await Te(x)}catch{}throw y}return{name:t,path:r.path,source:r.source,execution:"capability-generated",previousPath:S}}i(oo,"replaceSavedWorkflow");function Kn(e){if(!Pe(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(Kn,"readOptionalOriginalRequest");function Wt(e){return zn(e)}i(Wt,"buildCapsuleFromRun");async function zn(e){let t=JSON.parse(await z(U(e.runDir,"run.json"),"utf8"));if(!Pe(t))throw new Error("workflow run.json must be an object");let n=St(t,"scriptSnapshotPath"),r=St(t,"manifestSnapshotPath"),a=await z(n,"utf8"),o=K(JSON.parse(await z(r,"utf8")));te(o,a);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:_n(e.runDir),d=Kn(t.args),p=We(o),m=Ve(o,d!==void 0?{originalRequest:d}:{}),h={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return N({minKodaxVersion:G,manifest:o,source:a,intent:m,inputs:h,...p!==void 0?{requires:p}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:Pt()}})}i(zn,"readCapsuleFromRun");async function io(e){let t=await Wt(e);return{capsule:t,module:le(t)}}i(io,"loadGeneratedWorkflowFromRun");async function ao(e){let t=await Wt(e);return Hn({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(ao,"saveGeneratedWorkflowFromRun");function $(e,t,n,r){e.push({severity:t,requirement:n,message:r})}i($,"addRequirementIssue");function Tt(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}i(Tt,"parseSemver");function Gn(e,t){for(let n=0;n<3;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}i(Gn,"compareSemver");function Jn(e,t,n){let r=Tt(t),a=Tt(n);if(!r){$(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!a){$(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}Gn(a,r)<0&&$(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}i(Jn,"addMinVersionIssue");function Re(e,t,n,r){if(!n)return;if(!r){for(let o of n)$(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)||$(e,"error",`${t}:${o}`,`missing required workflow ${t}: ${o}`)}i(Re,"addMissingItems");function so(e,t={}){let n=fe(e),r=[],a=n.requires;Jn(r,n.minKodaxVersion,t.kodaxVersion??Pt()),a?.environment?.includes("git-repo")&&t.isGitRepo===!1&&$(r,"error","environment:git-repo","workflow requires a git repository"),a?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&$(r,"error","environment:worktree-capable","workflow may request git worktree isolation");try{ue(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(o){let s=o instanceof Error?o.message:String(o);$(r,"error","workflow:source",s)}return Re(r,"tools",a?.tools,t.availableTools),Re(r,"mcp",a?.mcp,t.availableMcp),Re(r,"skills",a?.skills,t.availableSkills),{ok:!r.some(o=>o.severity==="error"),issues:r}}i(so,"preflightWorkflowCapsule");function Yn(e){return{project:It(e,".kodax","workflows"),personal:It(Xn(),".kodax","workflows")}}i(Yn,"defaultSavedWorkflowDirs");async function Zn(e,t){let r=(await J(t)).find(a=>a.name===e);if(r)return At(r.path)}i(Zn,"resolveSavedByName");function Ft(e){let t=Yn(e);return async n=>xt(n)??await Zn(n,t)}i(Ft,"createNestedWorkflowResolver");import{existsSync as Qn,mkdirSync as er,readFileSync as tr,writeFileSync as qt}from"node:fs";import{join as X}from"node:path";var Ot="results";function Ct(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}i(Ct,"safeKey");function $t(e,t){let n=X(e,t);if(Qn(n))try{return JSON.parse(tr(n,"utf8"))}catch{return}}i($t,"readResult");function _t(e,t={}){let n=X(e,Ot);er(n,{recursive:!0});let r=t.readFrom?X(t.readFrom,Ot):void 0;return{get:i(a=>{let o=`${Ct(a)}.json`,s=$t(n,o);if(s!==void 0)return s;if(r===void 0)return;let d=$t(r,o);if(d!==void 0){try{qt(X(n,o),JSON.stringify(d),"utf8")}catch{}return d}},"get"),set:i((a,o)=>{try{qt(X(n,`${Ct(a)}.json`),JSON.stringify(o),"utf8")}catch{}},"set")}}i(_t,"createFsResultCache");import{mkdirSync as nr,appendFileSync as rr,writeFileSync as re}from"node:fs";import{join as H}from"node:path";function ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}i(ne,"record");function T(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}i(T,"finiteNumber");function Nt(e){let t=new Map,n=new Set,r=[],a=[],o=new Set,s=[],d=[],p=0,m=0,h=0,S=0,x=0,y=0,E=0,w=0,V={},ie=[];for(let P of e){let u=P.data??{};if(P.type==="agent_spawned"){let l=typeof u.taskId=="string"?u.taskId:void 0;l&&t.set(l,u),u.role==="primary-review"&&(y+=1);let v=typeof u.role=="string"?u.role:"agent",k=typeof u.requestedTier=="string"?u.requestedTier:"inherited",O=`${v}/${k}`;V[O]=(V[O]??0)+1;continue}if(P.type==="agent_completed"||P.type==="agent_unverified"||P.type==="agent_failed"){let l=typeof u.taskId=="string"?u.taskId:void 0;if(!l||n.has(l))continue;n.add(l);let v=ne(u.usage);!v||typeof v.totalTokens!="number"?typeof t.get(l)?.externalTarget=="string"?a.push(l):r.push(l):(p+=T(v.totalTokens),m+=T(v.inputTokens),h+=T(v.cacheReadTokens??v.cachedReadTokens),S+=T(v.outputTokens));let k=ne(u.digestUsage);x+=T(k?.totalTokens),m+=T(k?.inputTokens),S+=T(k?.outputTokens),h+=T(k?.cacheReadTokens??k?.cachedReadTokens),E+=T(u.iterations);continue}if(P.type==="agent_summary_updated"){let l=ne(u.usage),v=u.summaryKind;if((v==="digest"||v==="digest-failed")&&l){let k=T(l.totalTokens);p+=k,x+=k,m+=T(l.inputTokens),S+=T(l.outputTokens),h+=T(l.cacheReadTokens??l.cachedReadTokens)}continue}if(P.type!=="workflow_log")continue;let f=ne(u.data);if(f?.kind==="review_quality_gate"&&typeof f.contentHash=="string"){ie.push({contentHash:f.contentHash,actionableFindings:T(f.actionableFindings),unresolvedFindings:T(f.unresolvedFindings),unqualifiedApprovalAllowed:f.unqualifiedApprovalAllowed===!0});continue}if(f?.kind!=="review_packet_read"||typeof f.contentHash!="string")continue;let g={contentHash:f.contentHash,...typeof f.reason=="string"?{reason:f.reason}:{}};f.role==="primary"?(o.has(f.contentHash)&&(w+=1),o.add(f.contentHash)):f.role==="verification"?s.push(g):f.role==="synthesis"&&d.push(g)}for(let P of t.keys())n.has(P)||r.push(P);let ae=[...new Set(r)].sort();return{totalModelTokens:p,inputTokens:m,cacheReadTokens:h,outputTokens:S,digestTokens:x,agentStarts:t.size,childTurns:E,agentStartsByRoleTier:V,primaryReviewStarts:y,duplicatePrimaryPacketReads:w,verificationPacketReads:s,synthesisPacketReads:d,reviewWaves:y>0?1:0,fixWaves:0,rereviewWaves:0,qualityGateOutcomes:ie,tokenCoverage:{ok:ae.length===0,missingTaskIds:ae},excludedExternalTaskIds:[...new Set(a)].sort()}}i(Nt,"buildWorkflowCostReport");function or(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}i(or,"safeWorkflowArtifactName");function Dt(e,t={}){let n=t.now??(()=>Date.now()),r=H(e,"artifacts");nr(r,{recursive:!0});let a=H(e,"events.jsonl");return{runDir:e,onEvent:i(o=>{rr(a,`${JSON.stringify({...o,ts:n()})}
|
|
20
|
-
`,"utf8")},"onEvent"),writeArtifact:i((o,s)=>{let d=H(r,`${or(o)}.json`);return re(d,JSON.stringify(s,null,2),"utf8"),{name:o,path:d}},"writeArtifact"),writeScriptSnapshot:i(o=>{let s=H(e,"script.js");if(re(s,o.source,"utf8"),!o.manifest)return{scriptPath:s};let d=H(e,"manifest.json");return re(d,`${JSON.stringify(o.manifest,null,2)}
|
|
21
|
-
`,"utf8"),{scriptPath:s,manifestPath:d}},"writeScriptSnapshot"),writeRunJson:i(o=>{let s=De(o.processMetadata?.hostMetadata),d={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:{...Nt(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}:{}}:{}};re(H(e,"run.json"),`${JSON.stringify(d,null,2)}
|
|
22
|
-
`,"utf8")},"writeRunJson")}}i(Dt,"createRunGraphWriter");import{execFile as ir}from"node:child_process";import{promisify as ar}from"node:util";import{statSync as sr}from"node:fs";import{join as cr}from"node:path";var dr=ar(ir);function Fe(e){return cr(e,"worktrees")}i(Fe,"workflowWorktreeBaseDir");var ur=360*60*1e3;function Vt(e,t){return dr("git",[...e],{cwd:t}).then(n=>n.stdout)}i(Vt,"defaultRunGit");function fr(e){return sr(e).mtimeMs}i(fr,"defaultMtimeMs");function lr(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(lr,"parseWorktreeList");function Ut(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}i(Ut,"normalize");function jt(e,t){let n=Ut(e),r=Ut(t);return n===r||n.startsWith(`${r}/`)}i(jt,"isUnder");async function mr(e,t,n){try{let a=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(d=>d.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(mr,"worktreeHasChanges");async function Bt(e,t,n,r,a){if(await mr(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(Bt,"removeWorktree");async function Ht(e,t,n){try{let r=await t(["worktree","list","--porcelain"],e);return lr(r)}catch(r){n.push(`list worktrees: ${r instanceof Error?r.message:String(r)}`);return}}i(Ht,"listWorktrees");async function Ie(e,t,n){try{await t(["worktree","prune"],e)}catch(r){n.push(`prune: ${r instanceof Error?r.message:String(r)}`)}}i(Ie,"prune");async function Lt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Vt,o=await Ht(e.gitRoot,a,n);if(!o)return{removed:r,warnings:n};for(let s of o)jt(s.path,e.baseDir)&&await Bt(s,e.gitRoot,a,r,n);return r.length>0&&await Ie(e.gitRoot,a,n),{removed:r,warnings:n}}i(Lt,"sweepWorkflowRunWorktrees");async function Kt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Vt,o=t.mtimeMs??fr,s=t.now??(()=>Date.now()),d=e.maxAgeMs??ur;await Ie(e.gitRoot,a,n);let p=await Ht(e.gitRoot,a,n);if(!p)return{removed:r,warnings:n};for(let m of p){if(!jt(m.path,e.workflowRunsRoot))continue;let h;try{h=s()-o(m.path)}catch{continue}h>=d&&await Bt(m,e.gitRoot,a,r,n)}return r.length>0&&await Ie(e.gitRoot,a,n),{removed:r,warnings:n}}i(Kt,"pruneStaleWorkflowWorktrees");var wr=200,zt={maxAgents:64,tokenBudget:2e5};function hr(e,t){let n=e.meta,r=oe(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(hr,"buildApprovalSummary");function qe(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}i(qe,"clampLimit");function yr(e,t,n){let r=qe(e,n),a=qe(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(yr,"clampEffectiveLimit");function Gt(e,t){if(!(e==null||!Number.isFinite(e)||e<=0))return Math.min(Math.floor(e),t)}i(Gt,"clampTokenBudget");function vr(e,t,n){let r=Gt(e,n),a=Gt(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(vr,"clampEffectiveTokenBudget");function oe(e,t){let n=yr(e.maxAgents,t?.maxAgents,zt.maxAgents),r=$e(),a=[e.maxConcurrency,t?.maxConcurrency].map(d=>qe(d,r)).filter(d=>d!==void 0),o=a.length===0?r:Math.min(r,...a),s=vr(e.tokenBudget,t?.tokenBudget,zt.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...o!==void 0?{maxConcurrency:o}:{},...s!==void 0?{tokenBudget:s}:{}}}i(oe,"clampWorkflowLimits");function Jt(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(Jt,"workflowResultSummary");async function Oe(e){let t=oe(e.module.meta,e.hostPolicy),n=hr(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 Kt({workflowRunsRoot:gr(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps});let o=Dt(e.runDir,{now:r}),s=e.resumeFromRunDir!==void 0?pr(e.resumeFromRunDir):void 0,d=e.onWorkflowProcessEvent?Ue({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,m=e.backend??kr(e),S={...e.beforeSpawn?xr(m,e.beforeSpawn):m,writeArtifact:i(async(w,V)=>o.writeArtifact(w,V),"writeArtifact")},x=r(),y;try{y=await je({runId:e.runId,args:e.args,backend:S,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:Jt,resolveWorkflowModule:Ft(a??process.cwd()),resultCache:_t(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:i(w=>{o.onEvent(w),d&&e.onWorkflowProcessEvent?.(d.applyEvent(w)),e.onEvent?.(w)},"onEvent")},w=>e.module.run(w,e.args))}finally{await Lt({baseDir:Fe(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps})}let E=y.ok?Jt(y.result):void 0;return o.writeRunJson({meta:e.module.meta,args:e.args,state:y.state,startedAt:x,endedAt:r(),...p?{scriptSnapshot:p}:{},...E!==void 0?{resultSummary:E}:{},...e.processMetadata!==void 0||s!==void 0?{processMetadata:{...e.processMetadata,...s!==void 0?{resumedFromRunId:s}:{}}}:{}}),y.ok?{kind:"completed",result:y.result,state:y.state}:{kind:"failed",error:y.error,state:y.state}}i(Oe,"runWorkflowModule");function kr(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return dt({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId,defaultChildReadOnly:e.module.meta.readOnly===!0,kodaxAuthored:e.processMetadata?.hostMetadata?.workflowAuthorship==="kodax-generated"})}i(kr,"buildBackend");function xr(e,t){return{...e,spawn:i(async n=>(await t(),e.spawn(n)),"spawn")}}i(xr,"withBeforeSpawn");function Sr(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(Sr,"emitWorkflowAgentDigest");async function Xt(e){let t={...Je({options:e.options,runtime:e.options.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),workflowWorktreeBaseDir:Fe(e.runDir)},n={maxIterationsPerChild:wr,parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:e.options.provider,model:e.options.modelOverride??e.options.model,effort:e.options.effort,reasoningMode:e.options.reasoningMode,repoIntelligenceMode:e.options.context?.repoIntelligenceMode,repoIntelligenceTrace:e.options.context?.repoIntelligenceTrace,extensionRuntime:e.options.extensionRuntime,events:e.options.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...t.planModeBlockCheck?{planModeBlockCheck:t.planModeBlockCheck}:{}},r=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?o=>{e.onWorkflowProcessEvent?.(o),e.options.events?.onWorkflowProcessEvent?.(o)}:void 0,a=e.onEvent||e.options.events?.onWorkflowAgentDigest?o=>{e.onEvent?.(o),Sr(e.options.events,e.runId,o)}:void 0;return Oe({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:t,childOptions:n,...e.approval?{approval:e.approval}:{},...e.signal?{signal:e.signal}:{},...a?{onEvent:a}:{},...r?{onWorkflowProcessEvent:r}:{},...e.options.workflowHostPolicy?{hostPolicy:e.options.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}:{}})}i(Xt,"runWorkflowFromOptions");function Rr(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(Rr,"resultText");function br(e){if(e.kind==="completed"){let t=Rr(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}i(br,"classifyOutcome");function Tr(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,events:[],artifacts:[]}}}i(Tr,"failedOutcome");var Mr=1e3;function Er(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>Mr){let m=new Set(t.list().map(h=>h.runId));for(let h of n.keys())h!==o.runId&&!m.has(h)&&n.delete(h)}let d=oe(o.meta,o.hostPolicy),p=t.start({runId:o.runId,workflow:o.meta.name,...o.meta.phases!==void 0?{phases:o.meta.phases}:{},...d.maxAgents!==void 0?{maxAgents:d.maxAgents}:{},...o.meta.plannedAgents!==void 0?{plannedAgents:o.meta.plannedAgents}:{},...d.tokenBudget!==void 0?{tokenBudget:d.tokenBudget}:{},...o.processMetadata!==void 0?{processMetadata:o.processMetadata}:{},...o.signal?{signal:o.signal}:{},runFn:s,classify:br,onError:i(m=>Tr(o.runId,m),"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=>Oe({...o,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(d=>{s.onEvent(d),o.onEvent?.(d)},"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=>Xt({...o,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(d=>{s.onEvent(d),o.onEvent?.(d)},"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(Er,"createWorkflowRunManager");var Yt;function Go(){return Yt??=Er({},He()),Yt}i(Go,"getDefaultWorkflowRunManager");export{dt as a,ut as b,ke as c,xe as d,mt as e,pt as f,gt as g,An as h,Wn as i,In as j,yt as k,kt as l,xt as m,Jr as n,J as o,jn as p,Ae as q,At as r,Hn as s,no as t,ro as u,oo as v,io as w,ao as x,so as y,Nt as z,or as A,Dt as B,zt as C,hr as D,oe as E,Oe as F,Sr as G,Xt as H,Er as I,Go as J};
|