@kodax-ai/kodax 0.7.96 → 0.7.97-alpha.2
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 +86 -0
- package/README.md +85 -62
- package/README_CN.md +57 -67
- package/config-templates/config.example.jsonc +0 -14
- package/dist/chunks/{agent-7N427EVB.js → agent-J7SHFM5N.js} +1 -1
- package/dist/chunks/argument-completer-ZJQOWTIS.js +2 -0
- package/dist/chunks/{chunk-ABZDFK2X.js → chunk-2GV6MQ4T.js} +14 -14
- package/dist/chunks/{chunk-6QI3GOYG.js → chunk-3PS3YEDS.js} +1 -1
- package/dist/chunks/chunk-4VJMQDTH.js +417 -0
- package/dist/chunks/{chunk-NI7PBPUR.js → chunk-5DSUVP46.js} +1 -1
- package/dist/chunks/chunk-5P7RTSZT.js +21 -0
- package/dist/chunks/{chunk-XXNR6S4Q.js → chunk-6ZAQKFIM.js} +1 -1
- package/dist/chunks/chunk-7V2QBZ73.js +137 -0
- package/dist/chunks/{chunk-C7U542KM.js → chunk-F7DHZH6T.js} +1 -1
- package/dist/chunks/{chunk-7IMWOR34.js → chunk-HSRYDDPF.js} +1 -1
- package/dist/chunks/chunk-K3DQGSQU.js +372 -0
- package/dist/chunks/chunk-NO23K2CB.js +2 -0
- package/dist/chunks/{chunk-NKT3B3DR.js → chunk-OT5WHAX4.js} +1 -1
- package/dist/chunks/{chunk-YEAUDI6U.js → chunk-QGWHJIO4.js} +1 -1
- package/dist/chunks/chunk-QOFFAY5C.js +261 -0
- package/dist/chunks/{chunk-4PFZ7BEE.js → chunk-QVDTORL3.js} +11 -11
- package/dist/chunks/chunk-QZ4B4AWG.js +473 -0
- package/dist/chunks/chunk-RXDS6CNA.js +355 -0
- package/dist/chunks/{chunk-WV3DJVW4.js → chunk-VDGPJQL7.js} +135 -135
- package/dist/chunks/chunk-VEZ4WHPN.js +641 -0
- package/dist/chunks/chunk-ZPPAT25E.js +5 -0
- package/dist/chunks/chunk-ZQYWDI4O.js +1 -0
- package/dist/chunks/chunk-ZS2GUADU.js +498 -0
- package/dist/chunks/{chunk-GN2IY5YE.js → chunk-ZTYZYXGV.js} +1 -1
- package/dist/chunks/{chunk-EM4XJBTK.js → chunk-ZZQ4GDVU.js} +1 -1
- package/dist/chunks/{client-6WZZTTSV.js → client-MXOJ5XUN.js} +1 -1
- package/dist/chunks/{compaction-config-ZMEJU4U7.js → compaction-config-5VZSGKBQ.js} +1 -1
- package/dist/chunks/{construction-bootstrap-RX4DMHI7.js → construction-bootstrap-U2ZU2WAT.js} +1 -1
- package/dist/chunks/dist-CSLNWLOE.js +2 -0
- package/dist/chunks/dist-XXMJMJDU.js +2 -0
- package/dist/chunks/host-RUXYZFYN.js +2 -0
- package/dist/chunks/readline-helpers-JCVULR4C.js +2 -0
- package/dist/chunks/run-manager-DRIM5VNE.js +2 -0
- package/dist/chunks/utils-MQEBGKIX.js +2 -0
- package/dist/index.d.ts +63 -30
- package/dist/index.js +10 -6
- package/dist/kodax_bootstrap.js +1 -1
- package/dist/kodax_cli.js +1745 -1734
- package/dist/kodax_resume.js +32 -35
- package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
- package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
- package/dist/native/win32-x64/manifest.json +2 -2
- package/dist/sandbox-network-broker.js +77 -77
- package/dist/sdk-a2a.d.ts +33 -18
- package/dist/sdk-a2a.js +8 -9
- package/dist/sdk-agent.d.ts +33 -26
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-client.d.ts +40 -0
- package/dist/sdk-client.js +2 -0
- package/dist/sdk-coding.d.ts +87 -499
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +3 -4
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +11 -9
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +3 -3
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +3 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +317 -70
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +580 -452
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +13 -9
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +57 -57
- package/dist/types-chunks/{base.d-Bt9lhwSV.d.ts → base.d-ZBOdjDUT.d.ts} +2 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-DWFIMg0v.d.ts → bash-prefix-extractor.d-DvswAXKS.d.ts} +136 -66
- package/dist/types-chunks/{capability-learning.d-gRtO03f6.d.ts → capability-learning.d-B4pxKwP4.d.ts} +1 -1
- package/dist/types-chunks/{capability.d-Ch5Vos33.d.ts → capability.d-DOF3r0fJ.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-Dj1n6s0Y.d.ts → capsule.d-B4atvlxE.d.ts} +7 -19
- package/dist/types-chunks/client-contract-A1jdk6xz.d.ts +1993 -0
- package/dist/types-chunks/{controller.d-C0IM1Tud.d.ts → controller.d-BkUJ_3sl.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-J2t1q8Ly.d.ts → controller.d-yyKajPTi.d.ts} +140 -1380
- package/dist/types-chunks/{cost-tracker.d-BWI4lFWn.d.ts → cost-tracker.d-BeaenODW.d.ts} +2 -47
- package/dist/types-chunks/{history-retrieval.d-CPN5PMBV.d.ts → history-retrieval.d-JdFfkeF3.d.ts} +2 -2
- package/dist/types-chunks/{manager.d-rtmywU9M.d.ts → manager.d-C_20XqCV.d.ts} +8 -1
- package/dist/types-chunks/manifest.d-Bw2i-zQi.d.ts +18 -0
- package/dist/types-chunks/provider-credential-context.d-BH2OaB1b.d.ts +47 -0
- package/dist/types-chunks/provider-request-observation.d-jL8T6wVO.d.ts +34 -0
- package/dist/types-chunks/{public-api.d-amBop8Nk.d.ts → public-api.d-Cq8ILMte.d.ts} +52 -13
- package/dist/types-chunks/{resolver.d-BrwLoWNr.d.ts → resolver.d-DLY01RHx.d.ts} +4 -2
- package/dist/types-chunks/{types.d-CSv0_cZC.d.ts → review-inbox.d-BeaLRNHx.d.ts} +251 -3
- package/dist/types-chunks/{shell-command-sets.d-oejwpP_7.d.ts → review-packet.d-D4bbTbq3.d.ts} +46 -3
- package/dist/types-chunks/{exec-policy.d-BPESl90L.d.ts → run-manager.d-C7Q71rin.d.ts} +385 -62
- package/dist/types-chunks/runtime-client-info-CxnlZlW5.d.ts +175 -0
- package/dist/types-chunks/{sdk-session-B6XjHNU1.d.ts → sdk-session-BDFjCpDn.d.ts} +12 -4
- package/dist/types-chunks/{side-query.d-DHWG1JZg.d.ts → side-query.d-DTrhVd_r.d.ts} +4 -3
- package/dist/types-chunks/trusted-repl-entry-vbUM8R6P.d.ts +445 -0
- package/dist/types-chunks/{types.d-CtO8mR1s.d.ts → types.d-BJTN-RZr.d.ts} +5 -5
- package/dist/types-chunks/{types.d-BrQMB-hy.d.ts → types.d-BjOq57-z.d.ts} +6 -0
- package/dist/types-chunks/types.d-o7t9dds4.d.ts +1484 -0
- package/dist/types-chunks/{utils.d-DcznBeQ3.d.ts → utils.d-CWiMhFfu.d.ts} +202 -36
- package/docs/CLIENT_CONTRACT.md +441 -0
- package/docs/SDK_MIGRATION.md +123 -0
- package/docs/SPACE_SDK_SEAMS.md +139 -0
- package/package.json +10 -5
- package/public_docs/README.md +12 -133
- package/public_docs/configuration/config-files.md +8 -14
- package/public_docs/sdk/embedder-guide.md +494 -420
- package/dist/chunks/argument-completer-FAIHW7HZ.js +0 -2
- package/dist/chunks/chunk-66XN5AFU.js +0 -417
- package/dist/chunks/chunk-7O2AIFNE.js +0 -373
- package/dist/chunks/chunk-DSXUXUZG.js +0 -5
- package/dist/chunks/chunk-GYO73UYQ.js +0 -275
- package/dist/chunks/chunk-HPCS3LZ5.js +0 -324
- package/dist/chunks/chunk-HZYRLIOC.js +0 -137
- package/dist/chunks/chunk-SC2ELSUS.js +0 -675
- package/dist/chunks/chunk-TEUD5VPJ.js +0 -471
- package/dist/chunks/chunk-TYZ2ZAYL.js +0 -487
- package/dist/chunks/dist-3UCCMCYR.js +0 -2
- package/dist/chunks/dist-F5IWZSAY.js +0 -2
- package/dist/chunks/host-W2JJ3V3Q.js +0 -2
- package/dist/chunks/run-manager-RBWU3EVE.js +0 -2
- package/dist/chunks/utils-DJ4ZFJGL.js +0 -2
- package/dist/runtime-worker.js +0 -5381
- package/dist/types-chunks/review-inbox.d-CTeUIKda.d.ts +0 -225
- package/dist/types-chunks/run-manager.d-hm1XgEou.d.ts +0 -94
- package/dist/types-chunks/trusted-repl-entry-D0w5M0UZ.d.ts +0 -323
- package/dist/types-chunks/types.d-B1l9pWyX.d.ts +0 -146
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{$a as a,ab as b}from"./chunk-VEZ4WHPN.js";import"./chunk-ZQYWDI4O.js";import"./chunk-QOFFAY5C.js";import"./chunk-QGWHJIO4.js";import"./chunk-QZ4B4AWG.js";import"./chunk-K3DQGSQU.js";import"./chunk-OT5WHAX4.js";import"./chunk-ZZQ4GDVU.js";import"./chunk-2GV6MQ4T.js";import"./chunk-4VJMQDTH.js";import"./chunk-F7DHZH6T.js";import"./chunk-5DSUVP46.js";import"./chunk-VDGPJQL7.js";import"./chunk-ZPPAT25E.js";import"./chunk-7V2QBZ73.js";import"./chunk-ONUPGMER.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{
|
|
2
|
+
import{De as Ye,Ee as Ze,Fe as Qe,Ie as et,Ob as Le,Pb as ze,Sb as Ge,Tb as Je,we as he,xe as Xe}from"./chunk-4VJMQDTH.js";import{Bg as je,Cg as Ue,Eg as Z,Ig as pe,Og as we,Pg as B,Qg as ge,Rg as Ve,Wa as re,Yg as Be,Zg as He,_g as Ke,v as me,yg as oe}from"./chunk-VDGPJQL7.js";import{ea as De}from"./chunk-7V2QBZ73.js";import{a as i}from"./chunk-ONUPGMER.js";import{basename as vr,dirname as xr}from"node:path";import{execFile as en}from"node:child_process";import ie from"node:path";import{promisify as tn}from"node:util";var nn=tn(en),rn=1e4,st=2,tt=new Set(["write","edit","multi_edit","insert_after_anchor"]),nt=new Set(["read"]);function on(e,t){if(t.includes("*"))return e;if(e.includes("*"))return t;let n=new Set(t);return e.filter(o=>n.has(o))}i(on,"intersectWorkflowToolCeilings");var an=/^\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 sn(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(sn,"normalizeWaitTimeoutMs");function ye(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}i(ye,"hasVerificationWork");function H(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}i(H,"normalizeWorkspacePath");function ke(e,t){let n=t.gitRoot?ie.resolve(t.gitRoot):void 0,o=ie.isAbsolute(e)&&n?ie.relative(n,ie.resolve(e)):e;return H(o)}i(ke,"normalizeRequiredPath");function cn(e){let t=(e.readOnly??!1)===!1?{enforcement:"warn",requiresMutation:!0,rejectPreparatoryFinalText:!0}:void 0;if(e.verification!==void 0){let n={...t??{},...e.verification,enforcement:e.verification.enforcement??"hard"},o=e.verification.requiredChangedPaths;return{verification:{...n,...o!==void 0&&o.length>0&&n.requiresMutation===void 0?{requiresMutation:!0}:{}}}}return{verification:t}}i(cn,"resolveVerificationForInput");function dn(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(dn,"resolveSpawnAgentInput");function ct(e){let t=e.trim();return t.length>0&&an.test(t)}i(ct,"isPreparatoryOnlyText");function un(e,t){let n=e.trim(),o=t?.trim();return o&&(n.length===0||ct(n))?o:e}i(un,"selectWorkflowFinalText");async function ae(e,t){return await re({cwd:t}),(await nn("git",[...e],{cwd:t,timeout:rn,windowsHide:!0,maxBuffer:4*1024*1024})).stdout.toString()}i(ae,"runGit");async function ln(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await ae(["rev-parse","--show-toplevel"],t)).trim(),o=await Promise.all([ae(["diff","--name-only","--"],n),ae(["diff","--cached","--name-only","--"],n),ae(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(o.flatMap(a=>a.split(/\r?\n/)).map(H).filter(a=>a.length>0))]}i(ln,"listGitChangedFiles");async function ve(e,t){try{return{paths:(await t(e)).map(H).filter(o=>o.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}i(ve,"captureChangedPaths");function fn(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[],readPathById:new Map,succeededReadPaths:[]}}i(fn,"createMutationRecorder");function rt(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return H(n)}}i(rt,"readMutationPath");function mn(e,t){return{...e??{},onToolUseStart:i((n,o)=>{if(tt.has(n.name)){t.toolNameById.set(n.id,n.name);let a=rt(n.input);a!==void 0&&t.toolPathById.set(n.id,a)}if(nt.has(n.name)){let a=rt(n.input);a!==void 0&&t.readPathById.set(n.id,a)}e?.onToolUseStart?.(n,o)},"onToolUseStart"),onToolResult:i((n,o)=>{let a=t.toolNameById.get(n.id)??n.name;if(tt.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(a);let r=t.toolPathById.get(n.id);r!==void 0&&t.succeededPaths.push(r)}if(nt.has(a)&&!n.content.trimStart().startsWith("[Tool Error]")){let r=t.readPathById.get(n.id);r!==void 0&&t.succeededReadPaths.push(r)}e?.onToolResult?.(n,o)},"onToolResult")}}i(mn,"wrapEventsForMutationRecording");function se(e){return[...new Set(e.filter(t=>t.trim().length>0))]}i(se,"uniqueItems");function ot(e){let t=e.verification;if(!t)return;let n=[],o=new Set(e.before.paths.map(H)),a=se(e.after.paths.map(H)),r=a.filter(m=>!o.has(m)),s=se(e.mutationRecorder.succeededToolCalls),d=e.acceptToolMutationEvidence?s:[],g=e.acceptToolMutationEvidence?se(e.mutationRecorder.succeededPaths.map(H)):[],h=r.length>0||d.length>0,y=t.enforcement??"hard",p=(t.requiredChangedPaths??[]).map(m=>ke(m,e.ctx)),b=se(e.mutationRecorder.succeededReadPaths.map(m=>ke(m,e.ctx))),v=(t.requiredReadPaths??[]).map(m=>ke(m,e.ctx));t.requiresMutation===!0&&(e.before.error!==void 0||e.after.error!==void 0?n.push(`workspace mutation verification could not read changed files: ${e.after.error??e.before.error}`):h||n.push(e.acceptToolMutationEvidence||s.length===0?"expected file mutations, but no new workspace changes or successful write tools were observed":"write tools ran in an isolated worktree, but no main workspace changes were present after cleanup")),e.term.limitReached===!0&&!h&&n.push("workflow child reached its iteration limit before satisfying the task");for(let m of p)!a.includes(m)&&!g.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);for(let m of v)b.includes(m)||n.push(`required review evidence was not read: ${m}`);let W=t.minFinalTextChars;return W!==void 0&&!h&&e.term.finalText.trim().length<W&&n.push(`finalText was shorter than the required ${W} characters`),t.rejectPreparatoryFinalText===!0&&!h&&ct(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:y,reasons:n,changedPaths:a,mutationToolCalls:s,mutationEvidence:h,...b.length>0?{readPaths:b}:{}}}i(ot,"evaluateVerification");function xe(e,t){if(t.ok)return e;let o=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(a=>`- ${a}`)].join(`
|
|
3
3
|
`);return e.trim().length>0?`${e}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${o}`:o}i(xe,"appendVerificationFailure");function it(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}i(it,"limitReachedWarningVerification");function pn(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<st&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}i(pn,"shouldRepairVerificationFailure");function wn(e){let t=e.verification.reasons.map(o=>`- ${o}`).join(`
|
|
6
6
|
`),n=(e.verification.changedPaths??[]).length>0?`
|
|
7
7
|
Workspace changes already present before this repair attempt:
|
|
8
|
-
${e.verification.changedPaths?.map(
|
|
8
|
+
${e.verification.changedPaths?.map(o=>`- ${o}`).join(`
|
|
9
9
|
`)??""}`:"";return[e.originalPrompt,"","[Workflow verification repair]",`Repair attempt ${e.attempt}/${st}.`,"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(wn,"buildVerificationRepairPrompt");function at(e,t,n,r,a=!1){return t.outputSchema!==void 0&&Xe(t.outputSchema),Ze(t.name,t.evidenceRefs,n),{id:e,fanoutClass:"evidence-scan",objective:t.prompt,...t.scopeSummary?{scopeSummary:t.scopeSummary}:{},readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?.map(o=>{if(!o.startsWith("task_id:"))return o;let s=o.slice(8).trim(),d=r?.get(s);if(!d)throw new Error(`Workflow task ${s} has no Actor path.`);return`agent:${d}`})??[],constraints:t.constraints?[...t.constraints]:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{},...t.outputSchema!==void 0?{outputSchema:t.outputSchema}:{},...a?{workflowOutputContract:{kodaxAuthored:!0,terseResult:t.terseResult===!0}}:{},...t.effort?{effort:t.effort}:{}}}i(at,"buildBundle");function xe(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],r=un(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:r,...n.digest?{digest:n.digest}:{},...n.digestFailed?{digestFailed:!0}:{},...n.digestPending?{digestPending:!0}:{},...n.limitReached?{limitReached:!0}:{},...n.provider?{provider:n.provider}:{},...n.model?{model:n.model}:{},...n.structured!==void 0?{structured:n.structured}:{},...n.digestTokensUsed!==void 0?{digestTokensUsed:n.digestTokensUsed}:{},...n.digestUsage!==void 0?{digestUsage:n.digestUsage}:{},...n.routeFacts?{routeFacts:n.routeFacts}:{}}:{status:"failed",snapStatus:"failed",finalText:r,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{},...n?.digestTokensUsed!==void 0?{digestTokensUsed:n.digestTokensUsed}:{},...n?.digestUsage!==void 0?{digestUsage:n.digestUsage}:{},...n?.routeFacts?{routeFacts:n.routeFacts}:{}}}i(xe,"deriveTerminal");function gn(){let e=i(()=>{},"resolvePromise"),t=i(()=>{},"rejectPromise"),n=new Promise((r,a)=>{e=r,t=a});return n.catch(()=>{}),{promise:n,resolve:e,reject:t}}i(gn,"createPendingChildResult");function hn(e,t){let n=e.normalize("NFKD").replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48);return`${/^[A-Za-z]/.test(n)&&!/^(?:root|workflow|external)(?:[-_]|$)/i.test(n)?n:"step"}-${t}`}i(hn,"workflowActorTaskName");function yn(e){let t=e.workflow;return{readOnly:t.readOnly!==!1,constraints:[...t.constraints??[]],evidenceRefs:[...t.evidenceRefs??[]],...t.scopeSummary?{scope:t.scopeSummary}:{},...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.effort?{effort:t.effort}:{},...e.executionKey?{executionKey:e.executionKey}:{},...e.agentId?{agentId:e.agentId}:{},...e.specialistName?{specialistName:e.specialistName}:{},...e.workflowRunId?{workflowRunId:e.workflowRunId}:{},...t.target?.expectedConfigurationRevision?{expectedConfigurationRevision:t.target.expectedConfigurationRevision}:{}}}i(yn,"workflowActorMetadata");function kn(e,t){let n=xe(e,t);if(n.status!=="completed"&&n.status!=="completed_unverified")throw new Error(n.finalText||`Workflow Agent ${t} ${n.status}.`);let r=e.mergedArtifacts.filter(Boolean);return{output:n.finalText,...r.length>0?{artifacts:r}:{}}}i(kn,"actorExecutionResult");function dt(e){let{ctx:t,childOptions:n}=e,r=e.runChild??Ye,a=t.actorControl,o=t.actorHost;if(!a||!o)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let s=e.listChangedFiles??ln,d=0,g=0,h=e.generateId??(()=>`wf-child-${d+=1}`),y=new Map,p=new Set,b=i(()=>e.onTaskSummary!==void 0||p.size>0,"hasTaskSummaryObservers"),v=i((f,l)=>{try{e.onTaskSummary?.(f,l)}catch(u){me({source:"coding:workflow-summary",level:"warn",message:u instanceof Error?u.message:String(u)})}for(let u of p)try{u(f,l)}catch(w){me({source:"coding:workflow-summary",level:"warn",message:w instanceof Error?w.message:String(w)})}},"notifyTaskSummary"),W=i((f,l,u,w)=>{let x=`workflow:${e.runId??"inline"}:${f}:${w}`,I=gn(),P=i(()=>{},"unregister"),A={async execute(c){try{let E=await u(l,c,o.bindActor(c.actor.path));return I.resolve(E),kn(E,f)}catch(E){throw I.reject(E),E}finally{P()}}};return P=o.registerTurnExecutor(x,A),{key:x,promise:I.promise,cancel:P}},"registerExecution"),m=i(async f=>{let l=dn(f,e.defaultChildReadOnly),u=l.subagentType?"constructed":"native",w=l.subagentType,x=w?(()=>{let R=ze(w,t.agentScope);return R?Le(R):void 0})():void 0,I,P;if(l.target&&l.subagentType)throw new Error("Workflow target and subagentType are mutually exclusive.");if(l.target){let R=t.agentExecutorPlane;if(!R)throw new Error("Workflow target requires a host-bound agent executor plane.");let k=Je(l.target.agentId,R.context,t.agentScope);if(k){if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==k.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let{target:S,...q}=l;l={...q,...k.subagentType?{subagentType:k.subagentType}:{}},u=k.kind,w=k.subagentType,x=k.toolCeiling}else{if(l.modelHint!==void 0||l.effort!==void 0)throw new Error("External Workflow targets cannot combine local modelHint/effort routing selectors.");if(l.verification?.requiresMutation===!0)throw new Error("External Workflow targets cannot directly satisfy workspace mutation verification.");let S=await R.plane.describe(l.target.agentId,{...R.context,readOnly:l.readOnly},Ge(R.context,t.agentScope));if(!S||S.descriptor.origin!=="external")throw new Error(`Workflow target is not dispatchable: ${l.target.agentId}`);if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==S.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let q=S.descriptor.capabilities;u="external",P=l.target.agentId,I={followup:q.inputRequired!=="unsupported",interrupt:q.cancellation!=="unsupported",streaming:q.streaming!=="unsupported",artifacts:q.artifacts!=="unsupported"}}}let A=h(),c=at(A,l,new Set(y.keys()),new Map([...y].map(([R,k])=>[R,k.actorPath])),e.kodaxAuthored===!0),_=cn(l).verification,N=fn(),X=l.isolation!=="worktree",L=ye(_)?ve(t,s):Promise.resolve({paths:[]}),z=i(async(R,k,S)=>{let q={...n,parentOptions:{...n.parentOptions,events:mn(n.parentOptions.events,N)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:A,itemId:`agent:${A}`}}:{},childActivityName:l.name,workflowDigestMode:b()?"async":"blocking",...b()?{onWorkflowChildDigest:i(O=>{v(O.childId,{...O.digest?{summary:O.digest}:{},summaryKind:O.digest?"digest":"digest-failed",...O.totalTokensUsed>0?{usage:O.usage??{totalTokens:O.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:k.signal,actorControl:void 0,actorHost:void 0,actorCapabilities:k.actor.capabilities,contextAgentId:k.actor.path,...k.actor.parentPath!==void 0?{contextParentAgentId:k.actor.parentPath}:{}};return await L,r([R],t,q)},"runBundle"),D=u==="external"?void 0:W(A,c,z,1);g+=1;let V;try{V=await a.spawn({taskName:hn(l.name,g),objective:l.prompt,kind:u,capabilities:{filesystem:l.readOnly!==!1?"read":"write",canAskUser:!1,...x!==void 0?{tools:on(x,a.get(a.callerPath).actor.capabilities.tools)}:{},...I?{control:I}:{}},metadata:yn({workflow:l,...D?{executionKey:D.key}:{},...P?{agentId:P}:{},...w?{specialistName:w}:{},...e.runId?{workflowRunId:e.runId}:{}})})}catch(R){throw D?.cancel(),R}return y.set(A,{name:l.name,input:l,bundle:c,actorPath:V.actorPath,turnId:V.turnId,...D?{promise:D.promise}:{},runBundle:z,external:u==="external",verification:_,changedPathBaseline:L,mutationRecorder:N,acceptToolMutationEvidence:X,repairAttempts:0}),{taskId:A,name:l.name}},"spawn"),T=i(async(f,l,u=l)=>{let w=i(()=>{let c=a.output(f.actorPath,f.turnId).state;return c==="completed"||c==="failed"||c==="interrupted"},"isTurnTerminal"),x=i(c=>c.turnId===f.turnId&&(c.kind==="turn_completed"||c.kind==="turn_failed"||c.kind==="turn_interrupted"),"isTerminalEvent"),I=i(async()=>{if(w())return!1;try{return await a.interrupt(f.actorPath,"workflow wait timeout"),!0}catch(c){if(w())return!1;throw c}},"interruptOrAcceptTerminal"),P=l===void 0?void 0:Date.now()+l,A=0;for(;;){if(w())return;let c=a.eventSnapshot(A);if(c.find(x))return;A=c.at(-1)?.sequence??A;let _=P===void 0?void 0:P-Date.now();if(_!==void 0&&_<=0){if(await I())throw new Error(`workflow task ${f.name} timed out after ${u??l}ms`);return}let N=await a.wait(A,_);if(N){if(x(N))return;A=N.sequence}}},"waitForActorTurn");return{spawn:m,waitForAgentCapacity:i(f=>o.waitForAgentCapacity(f),"waitForAgentCapacity"),wait:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);let w=sn(l),x=Date.now(),I=i(async S=>{let q=Date.now()-x,O=w===void 0?void 0:Math.max(0,w-q);if(await T(u,O,w),!S)throw new Error(`workflow task ${f} has no local execution result`);return S},"waitForAttempt");if(u.external){await T(u,w);let S=a.output(u.actorPath,u.turnId);return{taskId:f,name:u.name,status:S.state==="completed"?"completed":S.state==="interrupted"?"stopped":"failed",finalText:S.output??S.error??"",...S.structured===void 0?{}:{structured:S.structured},...S.artifacts.length===0?{}:{artifacts:S.artifacts}}}let P=await I(u.promise),A=P.totalTokensUsed,c=xe(P,f),E=c.routeFacts,_=c.routeFacts?.inputTokens??0,N=c.routeFacts?.outputTokens??0,X=c.routeFacts?.cacheReadTokens??0,L=c.routeFacts?.iterations??0,z=c.routeFacts?.durationMs??0,D=c.routeFacts?.fallbackReason,V=c.digestTokensUsed??0,R=c.digestUsage,k=u.verification?ot({verification:u.verification,term:c,before:await u.changedPathBaseline,after:ye(u.verification)?await ve(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0;for(c.limitReached===!0&&k===void 0&&c.status==="completed"&&(k=it(),c={...c,status:"completed_unverified",snapStatus:"completed",finalText:Se(c.finalText,k)});pn({entry:u,term:c,verification:k});){u.repairAttempts+=1;let S=wn({originalPrompt:u.input.prompt,previousFinalText:c.finalText,verification:k,attempt:u.repairAttempts}),q=at(f,{...u.input,prompt:S},new Set(y.keys()),new Map([...y].map(([Y,Qt])=>[Y,Qt.actorPath])),e.kodaxAuthored===!0),O=W(f,q,u.runBundle,u.repairAttempts+1);u.promise=O.promise;try{let Y=await a.followup(u.actorPath,S,{executionKey:O.key});u.turnId=Y.turn.turnId}catch(Y){throw O.cancel(),Y}P=await I(u.promise),A+=P.totalTokensUsed,c=xe(P,f),_+=c.routeFacts?.inputTokens??0,N+=c.routeFacts?.outputTokens??0,X+=c.routeFacts?.cacheReadTokens??0,L+=c.routeFacts?.iterations??0,z+=c.routeFacts?.durationMs??0,D??=c.routeFacts?.fallbackReason,V+=c.digestTokensUsed??0,c.digestUsage&&(R={inputTokens:(R?.inputTokens??0)+(c.digestUsage.inputTokens??0),outputTokens:(R?.outputTokens??0)+(c.digestUsage.outputTokens??0),totalTokens:(R?.totalTokens??0)+(c.digestUsage.totalTokens??0),cacheReadTokens:(R?.cacheReadTokens??0)+(c.digestUsage.cacheReadTokens??0)}),k=u.verification?ot({verification:u.verification,term:c,before:await u.changedPathBaseline,after:ye(u.verification)?await ve(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0,c.limitReached===!0&&k===void 0&&c.status==="completed"&&(k=it(),c={...c,status:"completed_unverified",snapStatus:"completed",finalText:Se(c.finalText,k)})}if(k!==void 0&&!k.ok&&c.status==="completed"){let S=k.enforcement==="warn";c={...c,status:S?"completed_unverified":"failed",snapStatus:S?"completed":"failed",finalText:Se(c.finalText,k)}}return{taskId:f,name:u.name,status:c.status,finalText:c.finalText,...c.digest?{digest:c.digest}:{},...c.digestFailed?{digestFailed:!0}:{},...c.digestPending?{digestPending:!0}:{},...k!==void 0?{verification:k}:{},...c.limitReached?{limitReached:!0}:{},...c.provider?{provider:c.provider}:{},...c.model?{model:c.model}:{},...c.structured!==void 0?{structured:c.structured}:{},...P.mergedArtifacts.length>0?{artifacts:P.mergedArtifacts.filter(Boolean)}:{},...V>0?{digestUsage:R??{totalTokens:V}}:{},...c.routeFacts?{requestedTier:E?.requestedTier??c.routeFacts.requestedTier,tierOutcome:c.routeFacts.tierOutcome,providerSource:E?.providerSource??c.routeFacts.providerSource,...E?.modelSource??c.routeFacts.modelSource?{modelSource:E?.modelSource??c.routeFacts.modelSource}:{},...E?.initialProvider??c.routeFacts.initialProvider?{initialProvider:E?.initialProvider??c.routeFacts.initialProvider}:{},...E?.initialModel??c.routeFacts.initialModel?{initialModel:E?.initialModel??c.routeFacts.initialModel}:{},...c.routeFacts.finalProvider?{finalProvider:c.routeFacts.finalProvider}:{},...c.routeFacts.finalModel?{finalModel:c.routeFacts.finalModel}:{},...D?{fallbackReason:D}:{},...c.routeFacts.resolvedEffort?{resolvedEffort:c.routeFacts.resolvedEffort}:{},...L>0?{iterations:L}:{},...z>0?{durationMs:z}:{}}:{},usage:{totalTokens:A,..._>0?{inputTokens:_}:{},...N>0?{outputTokens:N}:{},...X>0?{cacheReadTokens:X}:{}}}},"wait"),output:i(async f=>{let l=y.get(f);if(!l)throw new Error(`unknown workflow task: ${f}`);if(a.get(l.actorPath).actor.currentTurnId===l.turnId)return{taskId:f,name:l.name,status:"running"};let w=a.output(l.actorPath,l.turnId),x=w.state==="completed"?"completed":w.state==="interrupted"?"stopped":"failed",I=w.output??w.error;return I===void 0?{taskId:f,name:l.name,status:x}:{taskId:f,name:l.name,status:x,lastText:I}},"output"),send:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.send(u.actorPath,l)},"send"),stop:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.interrupt(u.actorPath,l)},"stop"),subscribeTaskSummaryUpdates:i(f=>(p.add(f),()=>{p.delete(f)}),"subscribeTaskSummaryUpdates")}}i(dt,"createCodingWorkflowBackend");import{homedir as nr}from"node:os";import{join as Wt}from"node:path";var vn=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],Sn="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",xn={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 Rn(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(Rn,"readStructuredFinding");function bn(e){let t=Rn(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(bn,"pickFindingText");function Tn(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(Tn,"buildInvestigatorPrompt");function In(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:vn).slice(0,t).map((
|
|
12
|
-
${s.text}`),rubric:t.rubric??
|
|
13
|
-
`).trim().replace(/[\t\n\f\r ]+/g," ")}i(j,"normalizeText");function ft(e){return j(e).replace(/\\/g,"/")}i(ft,"normalizeLocation");function ce(e){return[...new Set(e.map(j).filter(Boolean))].sort((t,n)=>t<n?-1:t>n?1:0)}i(ce,"uniqueSorted");function En(e,t,n){return An("sha256").update(`${e}\0${ft(t)}\0${j(n)}`,"utf8").digest("hex")}i(En,"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(
|
|
10
|
+
`)}i(wn,"buildVerificationRepairPrompt");function at(e,t,n,o,a=!1){return t.outputSchema!==void 0&&Xe(t.outputSchema),Ze(t.name,t.evidenceRefs,n),{id:e,fanoutClass:"evidence-scan",objective:t.prompt,...t.scopeSummary?{scopeSummary:t.scopeSummary}:{},readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?.map(r=>{if(!r.startsWith("task_id:"))return r;let s=r.slice(8).trim(),d=o?.get(s);if(!d)throw new Error(`Workflow task ${s} has no Actor path.`);return`agent:${d}`})??[],constraints:t.constraints?[...t.constraints]:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{},...t.outputSchema!==void 0?{outputSchema:t.outputSchema}:{},...a?{workflowOutputContract:{kodaxAuthored:!0,terseResult:t.terseResult===!0}}:{},...t.effort?{effort:t.effort}:{}}}i(at,"buildBundle");function Se(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],o=un(n?.summary??"",n?.digest);return n?.status==="completed"?{status:"completed",snapStatus:"completed",finalText:o,...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:o,...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(Se,"deriveTerminal");function gn(){let e=i(()=>{},"resolvePromise"),t=i(()=>{},"rejectPromise"),n=new Promise((o,a)=>{e=o,t=a});return n.catch(()=>{}),{promise:n,resolve:e,reject:t}}i(gn,"createPendingChildResult");function hn(e,t){let n=e.normalize("NFKD").replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48);return`${/^[A-Za-z]/.test(n)&&!/^(?:root|workflow|external)(?:[-_]|$)/i.test(n)?n:"step"}-${t}`}i(hn,"workflowActorTaskName");function yn(e){let t=e.workflow;return{readOnly:t.readOnly!==!1,constraints:[...t.constraints??[]],evidenceRefs:[...t.evidenceRefs??[]],...t.scopeSummary?{scope:t.scopeSummary}:{},...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.effort?{effort:t.effort}:{},...e.executionKey?{executionKey:e.executionKey}:{},...e.agentId?{agentId:e.agentId}:{},...e.specialistName?{specialistName:e.specialistName}:{},...e.workflowRunId?{workflowRunId:e.workflowRunId}:{},...t.target?.expectedConfigurationRevision?{expectedConfigurationRevision:t.target.expectedConfigurationRevision}:{}}}i(yn,"workflowActorMetadata");function kn(e,t){let n=Se(e,t);if(n.status!=="completed"&&n.status!=="completed_unverified")throw new Error(n.finalText||`Workflow Agent ${t} ${n.status}.`);let o=e.mergedArtifacts.filter(Boolean);return{output:n.finalText,...o.length>0?{artifacts:o}:{}}}i(kn,"actorExecutionResult");function dt(e){let{ctx:t,childOptions:n}=e,o=e.runChild??Ye,a=t.actorControl,r=t.actorHost;if(!a||!r)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let s=e.listChangedFiles??ln,d=0,g=0,h=e.generateId??(()=>`wf-child-${d+=1}`),y=new Map,p=new Set,b=i(()=>e.onTaskSummary!==void 0||p.size>0,"hasTaskSummaryObservers"),v=i((f,l)=>{try{e.onTaskSummary?.(f,l)}catch(u){me({source:"coding:workflow-summary",level:"warn",message:u instanceof Error?u.message:String(u)})}for(let u of p)try{u(f,l)}catch(w){me({source:"coding:workflow-summary",level:"warn",message:w instanceof Error?w.message:String(w)})}},"notifyTaskSummary"),W=i((f,l,u,w)=>{let S=`workflow:${e.runId??"inline"}:${f}:${w}`,I=gn(),P=i(()=>{},"unregister"),A={async execute(c){try{let E=await u(l,c,r.bindActor(c.actor.path));return I.resolve(E),kn(E,f)}catch(E){throw I.reject(E),E}finally{P()}}};return P=r.registerTurnExecutor(S,A),{key:S,promise:I.promise,cancel:P}},"registerExecution"),m=i(async f=>{let l=dn(f,e.defaultChildReadOnly),u=l.subagentType?"constructed":"native",w=l.subagentType,S=w?(()=>{let R=ze(w,t.agentScope);return R?Le(R):void 0})():void 0,I,P;if(l.target&&l.subagentType)throw new Error("Workflow target and subagentType are mutually exclusive.");if(l.target){let R=t.agentExecutorPlane;if(!R)throw new Error("Workflow target requires a host-bound agent executor plane.");let k=Je(l.target.agentId,R.context,t.agentScope);if(k){if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==k.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let{target:x,...q}=l;l={...q,...k.subagentType?{subagentType:k.subagentType}:{}},u=k.kind,w=k.subagentType,S=k.toolCeiling}else{if(l.modelHint!==void 0||l.effort!==void 0)throw new Error("External Workflow targets cannot combine local modelHint/effort routing selectors.");if(l.verification?.requiresMutation===!0)throw new Error("External Workflow targets cannot directly satisfy workspace mutation verification.");let x=await R.plane.describe(l.target.agentId,{...R.context,readOnly:l.readOnly},Ge(R.context,t.agentScope));if(!x||x.descriptor.origin!=="external")throw new Error(`Workflow target is not dispatchable: ${l.target.agentId}`);if(l.target.expectedConfigurationRevision!==void 0&&l.target.expectedConfigurationRevision!==x.descriptor.configurationRevision)throw new Error("Workflow target configuration revision changed.");let q=x.descriptor.capabilities;u="external",P=l.target.agentId,I={followup:q.inputRequired!=="unsupported",interrupt:q.cancellation!=="unsupported",streaming:q.streaming!=="unsupported",artifacts:q.artifacts!=="unsupported"}}}let A=h(),c=at(A,l,new Set(y.keys()),new Map([...y].map(([R,k])=>[R,k.actorPath])),e.kodaxAuthored===!0),_=cn(l).verification,N=fn(),X=l.isolation!=="worktree",L=ye(_)?ve(t,s):Promise.resolve({paths:[]}),z=i(async(R,k,x)=>{let q={...n,parentOptions:{...n.parentOptions,events:mn(n.parentOptions.events,N)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:A,itemId:`agent:${A}`}}:{},childActivityName:l.name,workflowDigestMode:b()?"async":"blocking",...b()?{onWorkflowChildDigest:i(O=>{v(O.childId,{...O.digest?{summary:O.digest}:{},summaryKind:O.digest?"digest":"digest-failed",...O.totalTokensUsed>0?{usage:O.usage??{totalTokens:O.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:k.signal,actorControl:void 0,actorHost:void 0,actorCapabilities:k.actor.capabilities,contextAgentId:k.actor.path,...k.actor.parentPath!==void 0?{contextParentAgentId:k.actor.parentPath}:{}};return await L,o([R],t,q)},"runBundle"),D=u==="external"?void 0:W(A,c,z,1);g+=1;let V;try{V=await a.spawn({taskName:hn(l.name,g),objective:l.prompt,kind:u,capabilities:{filesystem:l.readOnly!==!1?"read":"write",canAskUser:!1,...S!==void 0?{tools:on(S,a.get(a.callerPath).actor.capabilities.tools)}:{},...I?{control:I}:{}},metadata:yn({workflow:l,...D?{executionKey:D.key}:{},...P?{agentId:P}:{},...w?{specialistName:w}:{},...e.runId?{workflowRunId:e.runId}:{}})})}catch(R){throw D?.cancel(),R}return y.set(A,{name:l.name,input:l,bundle:c,actorPath:V.actorPath,turnId:V.turnId,...D?{promise:D.promise}:{},runBundle:z,external:u==="external",verification:_,changedPathBaseline:L,mutationRecorder:N,acceptToolMutationEvidence:X,repairAttempts:0}),{taskId:A,name:l.name}},"spawn"),T=i(async(f,l,u=l)=>{let w=i(()=>{let c=a.output(f.actorPath,f.turnId).state;return c==="completed"||c==="failed"||c==="interrupted"},"isTurnTerminal"),S=i(c=>c.turnId===f.turnId&&(c.kind==="turn_completed"||c.kind==="turn_failed"||c.kind==="turn_interrupted"),"isTerminalEvent"),I=i(async()=>{if(w())return!1;try{return await a.interrupt(f.actorPath,"workflow wait timeout"),!0}catch(c){if(w())return!1;throw c}},"interruptOrAcceptTerminal"),P=l===void 0?void 0:Date.now()+l,A=0;for(;;){if(w())return;let c=a.eventSnapshot(A);if(c.find(S))return;A=c.at(-1)?.sequence??A;let _=P===void 0?void 0:P-Date.now();if(_!==void 0&&_<=0){if(await I())throw new Error(`workflow task ${f.name} timed out after ${u??l}ms`);return}let N=await a.wait(A,_);if(N){if(S(N))return;A=N.sequence}}},"waitForActorTurn");return{spawn:m,waitForAgentCapacity:i(f=>r.waitForAgentCapacity(f),"waitForAgentCapacity"),wait:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);let w=sn(l),S=Date.now(),I=i(async x=>{let q=Date.now()-S,O=w===void 0?void 0:Math.max(0,w-q);if(await T(u,O,w),!x)throw new Error(`workflow task ${f} has no local execution result`);return x},"waitForAttempt");if(u.external){await T(u,w);let x=a.output(u.actorPath,u.turnId);return{taskId:f,name:u.name,status:x.state==="completed"?"completed":x.state==="interrupted"?"stopped":"failed",finalText:x.output??x.error??"",...x.structured===void 0?{}:{structured:x.structured},...x.artifacts.length===0?{}:{artifacts:x.artifacts}}}let P=await I(u.promise),A=P.totalTokensUsed,c=Se(P,f),E=c.routeFacts,_=c.routeFacts?.inputTokens??0,N=c.routeFacts?.outputTokens??0,X=c.routeFacts?.cacheReadTokens??0,L=c.routeFacts?.iterations??0,z=c.routeFacts?.durationMs??0,D=c.routeFacts?.fallbackReason,V=c.digestTokensUsed??0,R=c.digestUsage,k=u.verification?ot({verification:u.verification,term:c,before:await u.changedPathBaseline,after:ye(u.verification)?await ve(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0;for(c.limitReached===!0&&k===void 0&&c.status==="completed"&&(k=it(),c={...c,status:"completed_unverified",snapStatus:"completed",finalText:xe(c.finalText,k)});pn({entry:u,term:c,verification:k});){u.repairAttempts+=1;let x=wn({originalPrompt:u.input.prompt,previousFinalText:c.finalText,verification:k,attempt:u.repairAttempts}),q=at(f,{...u.input,prompt:x},new Set(y.keys()),new Map([...y].map(([Y,Qt])=>[Y,Qt.actorPath])),e.kodaxAuthored===!0),O=W(f,q,u.runBundle,u.repairAttempts+1);u.promise=O.promise;try{let Y=await a.followup(u.actorPath,x,{executionKey:O.key});u.turnId=Y.turn.turnId}catch(Y){throw O.cancel(),Y}P=await I(u.promise),A+=P.totalTokensUsed,c=Se(P,f),_+=c.routeFacts?.inputTokens??0,N+=c.routeFacts?.outputTokens??0,X+=c.routeFacts?.cacheReadTokens??0,L+=c.routeFacts?.iterations??0,z+=c.routeFacts?.durationMs??0,D??=c.routeFacts?.fallbackReason,V+=c.digestTokensUsed??0,c.digestUsage&&(R={inputTokens:(R?.inputTokens??0)+(c.digestUsage.inputTokens??0),outputTokens:(R?.outputTokens??0)+(c.digestUsage.outputTokens??0),totalTokens:(R?.totalTokens??0)+(c.digestUsage.totalTokens??0),cacheReadTokens:(R?.cacheReadTokens??0)+(c.digestUsage.cacheReadTokens??0)}),k=u.verification?ot({verification:u.verification,term:c,before:await u.changedPathBaseline,after:ye(u.verification)?await ve(t,s):{paths:[]},mutationRecorder:u.mutationRecorder,ctx:t,acceptToolMutationEvidence:u.acceptToolMutationEvidence}):void 0,c.limitReached===!0&&k===void 0&&c.status==="completed"&&(k=it(),c={...c,status:"completed_unverified",snapStatus:"completed",finalText:xe(c.finalText,k)})}if(k!==void 0&&!k.ok&&c.status==="completed"){let x=k.enforcement==="warn";c={...c,status:x?"completed_unverified":"failed",snapStatus:x?"completed":"failed",finalText:xe(c.finalText,k)}}return{taskId:f,name:u.name,status:c.status,finalText:c.finalText,...c.digest?{digest:c.digest}:{},...c.digestFailed?{digestFailed:!0}:{},...c.digestPending?{digestPending:!0}:{},...k!==void 0?{verification:k}:{},...c.limitReached?{limitReached:!0}:{},...c.provider?{provider:c.provider}:{},...c.model?{model:c.model}:{},...c.structured!==void 0?{structured:c.structured}:{},...P.mergedArtifacts.length>0?{artifacts:P.mergedArtifacts.filter(Boolean)}:{},...V>0?{digestUsage:R??{totalTokens:V}}:{},...c.routeFacts?{requestedTier:E?.requestedTier??c.routeFacts.requestedTier,tierOutcome:c.routeFacts.tierOutcome,providerSource:E?.providerSource??c.routeFacts.providerSource,...E?.modelSource??c.routeFacts.modelSource?{modelSource:E?.modelSource??c.routeFacts.modelSource}:{},...E?.initialProvider??c.routeFacts.initialProvider?{initialProvider:E?.initialProvider??c.routeFacts.initialProvider}:{},...E?.initialModel??c.routeFacts.initialModel?{initialModel:E?.initialModel??c.routeFacts.initialModel}:{},...c.routeFacts.finalProvider?{finalProvider:c.routeFacts.finalProvider}:{},...c.routeFacts.finalModel?{finalModel:c.routeFacts.finalModel}:{},...D?{fallbackReason:D}:{},...c.routeFacts.resolvedEffort?{resolvedEffort:c.routeFacts.resolvedEffort}:{},...L>0?{iterations:L}:{},...z>0?{durationMs:z}:{}}:{},usage:{totalTokens:A,..._>0?{inputTokens:_}:{},...N>0?{outputTokens:N}:{},...X>0?{cacheReadTokens:X}:{}}}},"wait"),output:i(async f=>{let l=y.get(f);if(!l)throw new Error(`unknown workflow task: ${f}`);if(a.get(l.actorPath).actor.currentTurnId===l.turnId)return{taskId:f,name:l.name,status:"running"};let w=a.output(l.actorPath,l.turnId),S=w.state==="completed"?"completed":w.state==="interrupted"?"stopped":"failed",I=w.output??w.error;return I===void 0?{taskId:f,name:l.name,status:S}:{taskId:f,name:l.name,status:S,lastText:I}},"output"),send:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.send(u.actorPath,l)},"send"),stop:i(async(f,l)=>{let u=y.get(f);if(!u)throw new Error(`unknown workflow task: ${f}`);await a.interrupt(u.actorPath,l)},"stop"),subscribeTaskSummaryUpdates:i(f=>(p.add(f),()=>{p.delete(f)}),"subscribeTaskSummaryUpdates")}}i(dt,"createCodingWorkflowBackend");import{homedir as nr}from"node:os";import{join as Wt}from"node:path";var vn=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],xn="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",Sn={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 Rn(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(Rn,"readStructuredFinding");function bn(e){let t=Rn(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(bn,"pickFindingText");function Tn(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(Tn,"buildInvestigatorPrompt");function In(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:vn).slice(0,t).map((o,a)=>({name:`investigate-${a+1}`,prompt:Tn(e.question,o)}))}i(In,"resolveAngles");async function Pn(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0,modelHint:"balanced",outputSchema:Sn});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:bn(n)}}catch(n){let o=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${o}`}}}i(Pn,"investigate");async function Mn(e,t){let n=In(t),o=(await e.phase("investigate",()=>e.parallel(n.map(s=>()=>Pn(e,s)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0))).filter(s=>s!==null),a=o.some(s=>s.status!=="completed");return{synthesis:(await e.phase("synthesize",()=>e.synthesize({inputs:o.map(s=>`### ${s.angle} (${s.status})
|
|
12
|
+
${s.text}`),rubric:t.rubric??xn}))).text,findings:o,degraded:a}}i(Mn,"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:Mn};import{createHash as An}from"node:crypto";var Re={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"}}}},be={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 j(e){return e.normalize("NFC").replace(/\r\n?/g,`
|
|
13
|
+
`).trim().replace(/[\t\n\f\r ]+/g," ")}i(j,"normalizeText");function ft(e){return j(e).replace(/\\/g,"/")}i(ft,"normalizeLocation");function ce(e){return[...new Set(e.map(j).filter(Boolean))].sort((t,n)=>t<n?-1:t>n?1:0)}i(ce,"uniqueSorted");function En(e,t,n){return An("sha256").update(`${e}\0${ft(t)}\0${j(n)}`,"utf8").digest("hex")}i(En,"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(o=>{let a=ft(o.location),r=j(o.claim),s=j(o.evidence);return{findingId:En(e,a,r),severity:o.severity,location:a,claim:r,evidence:s,...o.suggestedFix?{suggestedFix:j(o.suggestedFix)}:{}}}).sort((o,a)=>o.findingId<a.findingId?-1:o.findingId>a.findingId?1:0),unverifiedRequirements:ce(n.unverifiedRequirements)}}i(mt,"normalizeScopedReviewResult");var lt={low:0,medium:1,high:2,critical:3};function Wn(e){return e.reduce((t,n)=>lt[n]>lt[t]?n:t,"low")}i(Wn,"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 r of a.findings)t.set(r.findingId,[...t.get(r.findingId)??[],r]);let n=[...t.entries()].map(([a,r])=>({findingId:a,severity:Wn(r.map(s=>s.severity)),location:r[0].location,claim:r[0].claim,evidence:ce(r.map(s=>s.evidence)),suggestedFixes:ce(r.flatMap(s=>s.suggestedFix?[s.suggestedFix]:[]))})).sort((a,r)=>a.findingId<r.findingId?-1:a.findingId>r.findingId?1:0);return{specVerdict:e.some(a=>a.specVerdict==="issues")?"issues":e.some(a=>a.specVerdict==="not-verifiable")?"not-verifiable":"compliant",qualityVerdict:e.some(a=>a.qualityVerdict==="needs-fixes")?"needs-fixes":"approved",findings:n,unverifiedRequirements:ce(e.flatMap(a=>a.unverifiedRequirements))}}i(pt,"mergeScopedReviewResults");function wt(e,t){let n=new Set(e.findings.map(s=>s.findingId)),o=new Set;for(let s of t.findings){if(!n.has(s.findingId)||o.has(s.findingId))throw new Error("verifier must return every input findingId exactly once");o.add(s.findingId)}if(o.size!==n.size)throw new Error("verifier must return every input findingId exactly once");let a=new Map(t.findings.map(s=>[s.findingId,s])),r=e.findings.flatMap(s=>{let d=a.get(s.findingId);if(d.disposition==="refuted")return[];let g=d.severityReason?.trim(),h=d.effectiveSeverity!==void 0&&!!g;return[{...s,disposition:d.disposition,severity:h?d.effectiveSeverity:s.severity,verificationEvidence:j(d.evidence),...g?{severityReason:j(g)}:{}}]});return{specVerdict:e.specVerdict,qualityVerdict:e.qualityVerdict,unverifiedRequirements:e.unverifiedRequirements,actionable:r,audit:t,unqualifiedApprovalAllowed:r.length===0&&e.unverifiedRequirements.length===0&&e.specVerdict==="compliant"&&e.qualityVerdict==="approved"}}i(wt,"applyFindingVerification");var Fn={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 On(e){let t=he(e,Re);if(t.length>0)throw new Error(`primary reviewer structured result is invalid: ${t.join("; ")}`);return e}i(On,"rawReview");function qn(e){let t=he(e,be);if(t.length>0)throw new Error(`finding verifier structured result is invalid: ${t.join("; ")}`);return e}i(qn,"rawVerification");function Te(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(Te,"resultOrThrow");function Cn(e,t,n){return["Review one immutable KodaX packet as an independent third-party reviewer.",`Packet manifest: ${e.packetPath}`,...e.evidenceChunks.map(o=>`Evidence chunk: ${o.path}`),`This packet has binding requirements: ${e.requirementsPresent?"yes":"no"}.`,t?"This is the additional high-risk primary. Actively seek a disagreement with the first reader; do not assume it was correct.":"Own both specification and implementation-quality verdicts for this scope.",n.lean?"Also identify unnecessary additions, but never remove validation, security, data-loss protection, accessibility, or requested behavior.":"",n.reviewFocus?`Additional user focus: ${n.reviewFocus}`:"","Read the manifest and every listed chunk with the read tool before deciding.","Begin with the required JSON result. No preamble or process narration.","The findings array contains only actionable defects, never approval evidence or positive observations.","When the scope is compliant and approved with no actionable defect, findings must be empty.","If a named requirement cannot be proven compliant or violated from surfaced evidence, use specVerdict not-verifiable, list it in unverifiedRequirements, and emit no finding for that uncertainty; absence of evidence is not proof of a defect.","If requirements are absent, specVerdict must be not-verifiable."].filter(Boolean).join(`
|
|
14
14
|
`)}i(Cn,"buildScopedReviewPrimaryPrompt");function $n(e,t){return["Independently attempt to refute every candidate finding in this batch.",`Packet manifest: ${e.packetPath}`,...e.evidenceChunks.map(n=>`Evidence chunk: ${n.path}`),`Canonical candidates: ${JSON.stringify(t.findings)}`,"Read the packet evidence. You may run one focused check after naming the concrete doubt.","Return every findingId exactly once. A severity change requires severityReason.","Begin with the required JSON result; no preamble."].join(`
|
|
15
15
|
`)}i($n,"buildScopedReviewVerificationPrompt");function _n(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(_n,"buildScopedReviewFinalPrompt");async function gt(e,t,n,
|
|
17
|
-
`,"utf8"),{name:t,path:
|
|
18
|
-
`,"utf8")}i(bt,"writeCapsuleFile");async function Yn(e){try{return await Q(e,"utf8"),!0}catch{return!1}}i(Yn,"fileExists");async function fo(e){let t=(await te(e.dirs)).filter(d=>d.name===e.name).filter(d=>e.source===void 0||d.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let
|
|
19
|
-
`,"utf8"),a!==n.path&&await Me(n.path),{name:
|
|
20
|
-
`,"utf8")},"onEvent"),writeArtifact:i((
|
|
21
|
-
`,"utf8"),{scriptPath:s,manifestPath:d}},"writeScriptSnapshot"),writeRunJson:i(
|
|
22
|
-
`,"utf8")},"writeRunJson")}}i(Dt,"createRunGraphWriter");import{execFile as lr}from"node:child_process";import{promisify as fr}from"node:util";import{statSync as mr}from"node:fs";import{join as pr}from"node:path";var wr=fr(lr);function Ce(e){return pr(e,"worktrees")}i(Ce,"workflowWorktreeBaseDir");var gr=360*60*1e3;async function Ut(e,t){return await re({cwd:t}),wr("git",[...e],{cwd:t,windowsHide:!0}).then(n=>n.stdout)}i(Ut,"defaultRunGit");function hr(e){return mr(e).mtimeMs}i(hr,"defaultMtimeMs");function yr(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(yr,"parseWorktreeList");function jt(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}i(jt,"normalize");function Vt(e,t){let n=jt(e),r=jt(t);return n===r||n.startsWith(`${r}/`)}i(Vt,"isUnder");async function kr(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(kr,"worktreeHasChanges");async function Bt(e,t,n,r,a){if(await kr(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 yr(r)}catch(r){n.push(`list worktrees: ${r instanceof Error?r.message:String(r)}`);return}}i(Ht,"listWorktrees");async function qe(e,t,n){try{await t(["worktree","prune"],e)}catch(r){n.push(`prune: ${r instanceof Error?r.message:String(r)}`)}}i(qe,"prune");async function Kt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Ut,o=await Ht(e.gitRoot,a,n);if(!o)return{removed:r,warnings:n};for(let s of o)Vt(s.path,e.baseDir)&&await Bt(s,e.gitRoot,a,r,n);return r.length>0&&await qe(e.gitRoot,a,n),{removed:r,warnings:n}}i(Kt,"sweepWorkflowRunWorktrees");async function Lt(e,t={}){let n=[],r=[];if(!e.gitRoot)return{removed:r,warnings:n};let a=t.runGit??Ut,o=t.mtimeMs??hr,s=t.now??(()=>Date.now()),d=e.maxAgeMs??gr;await qe(e.gitRoot,a,n);let g=await Ht(e.gitRoot,a,n);if(!g)return{removed:r,warnings:n};for(let h of g){if(!Vt(h.path,e.workflowRunsRoot))continue;let y;try{y=s()-o(h.path)}catch{continue}y>=d&&await Bt(h,e.gitRoot,a,r,n)}return r.length>0&&await qe(e.gitRoot,a,n),{removed:r,warnings:n}}i(Lt,"pruneStaleWorkflowWorktrees");var xr=200,zt={maxAgents:64,tokenBudget:2e5};function Rr(e,t){let n=e.meta,r=fe(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(Rr,"buildApprovalSummary");function $e(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}i($e,"clampLimit");function br(e,t,n){let r=$e(e,n),a=$e(t,n);return r===void 0?a:a===void 0?r:Math.min(r,a)}i(br,"clampEffectiveLimit");function Gt(e,t){if(!(e==null||!Number.isFinite(e)||e<=0))return Math.min(Math.floor(e),t)}i(Gt,"clampTokenBudget");function Tr(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(Tr,"clampEffectiveTokenBudget");function fe(e,t){let n=br(e.maxAgents,t?.maxAgents,zt.maxAgents),r=De(),a=[e.maxConcurrency,t?.maxConcurrency].map(d=>$e(d,r)).filter(d=>d!==void 0),o=a.length===0?r:Math.min(r,...a),s=Tr(e.tokenBudget,t?.tokenBudget,zt.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...o!==void 0?{maxConcurrency:o}:{},...s!==void 0?{tokenBudget:s}:{}}}i(fe,"clampWorkflowLimits");function _e(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(_e,"workflowResultSummary");async function Ne(e){let t=fe(e.module.meta,e.hostPolicy),n=Rr(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 Lt({workflowRunsRoot:Sr(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps});let o=Dt(e.runDir,{now:r}),s=e.resumeFromRunDir!==void 0?vr(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,g=e.scriptSnapshot?o.writeScriptSnapshot(e.scriptSnapshot):void 0,h=e.backend??Ir(e),p={...e.beforeSpawn?Pr(h,e.beforeSpawn):h,writeArtifact:i(async(m,T)=>o.writeArtifact(m,T),"writeArtifact")},b=r(),v;try{v=await Be({runId:e.runId,args:e.args,backend:p,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:_e,resolveWorkflowModule:Ft(a??process.cwd()),resultCache:_t(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:i(m=>{o.onEvent(m),d&&e.onWorkflowProcessEvent?.(d.applyEvent(m)),e.onEvent?.(m)},"onEvent")},m=>e.module.run(m,e.args))}finally{await Kt({baseDir:Ce(e.runDir),gitRoot:a},{now:r,...e.worktreeSweepDeps})}let W=v.ok?_e(v.result):void 0;return o.writeRunJson({meta:e.module.meta,args:e.args,state:v.state,startedAt:b,endedAt:r(),...g?{scriptSnapshot:g}:{},...W!==void 0?{resultSummary:W}:{},...e.processMetadata!==void 0||s!==void 0?{processMetadata:{...e.processMetadata,...s!==void 0?{resumedFromRunId:s}:{}}}:{}}),v.ok?{kind:"completed",result:v.result,state:v.state}:{kind:"failed",error:v.error,state:v.state}}i(Ne,"runWorkflowModule");function Ir(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(Ir,"buildBackend");function Pr(e,t){return{...e,spawn:i(async n=>(await t(),e.spawn(n)),"spawn")}}i(Pr,"withBeforeSpawn");function Mr(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(Mr,"emitWorkflowAgentDigest");async function Yt(e){let t=e.options.context?.actorControl,n=e.options.context?.actorHost;if(t===void 0!=(n===void 0))throw new Error("Workflow Runtime requires actorControl and actorHost together.");let r=t?void 0:new Qe({maxConcurrentThreadsPerSession:e.options.maxConcurrentThreadsPerSession}),a=r?{...e.options,context:{...e.options.context,actorSession:r}}:e.options,o=et({options:a,runtime:a.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),s=o.actorControl,d=o.actorHost;if(!s||!d)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let g=await d.createWorkflowOwner(s.callerPath,e.runId),h=d.workflowOwnerSignal(g.callerPath),y=Er(e.signal,h);o.actorControl=g,o.actorHost=d;let p={...a,context:{...a.context,actorControl:g,actorHost:d}};Object.assign(o,{workflowWorktreeBaseDir:Ce(e.runDir)});let b={maxIterationsPerChild:xr,...p.session?.storage!==void 0?{historyStorage:p.session.storage}:{},parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:p.provider,model:p.modelOverride??p.model,effort:p.effort,reasoningMode:p.reasoningMode,repoIntelligenceMode:p.context?.repoIntelligenceMode,repoIntelligenceTrace:p.context?.repoIntelligenceTrace,compaction:p.compaction,contextDiagnostics:p.context?.contextDiagnostics,permissionIntent:p.context?.permissionIntent,disablePromptCache:p.disablePromptCache,sandbox:p.sandbox,extensionRuntime:p.extensionRuntime,events:p.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...o.planModeBlockCheck?{planModeBlockCheck:o.planModeBlockCheck}:{}},v=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?m=>{e.onWorkflowProcessEvent?.(m),p.events?.onWorkflowProcessEvent?.(m)}:void 0,W=e.onEvent||p.events?.onWorkflowAgentDigest?m=>{e.onEvent?.(m),Mr(p.events,e.runId,m)}:void 0;try{let m=await Ne({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:o,childOptions:b,...e.approval?{approval:e.approval}:{},signal:y,...W?{onEvent:W}:{},...v?{onWorkflowProcessEvent:v}:{},...p.workflowHostPolicy?{hostPolicy:p.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}:{}}),T=Ar(e.runId,m);return await d.settleWorkflowOwner(g.callerPath,Jt(T),{output:JSON.stringify(T),structured:Xt(T),artifacts:T.artifacts.map($=>$.path??$.name).filter(Boolean),...m.kind==="failed"?{error:m.error.message}:{}}),m}catch(m){let T=m instanceof Error?m:new Error(String(m)),$=oe({state:{runId:e.runId,status:h.aborted?"stopped":"failed",totalSpawned:0,results:[],events:[],artifacts:[]},error:T});try{await d.settleWorkflowOwner(g.callerPath,Jt($),{output:JSON.stringify($),structured:Xt($),error:T.message})}catch(J){throw new AggregateError([T,J],"Workflow execution and owner settlement failed.")}throw T}finally{await r?.close("workflow run finished")}}i(Yt,"runWorkflowFromOptions");function Ar(e,t){return t.kind==="denied"?oe({state:{runId:e,status:"stopped",totalSpawned:0,results:[],events:[],artifacts:[]},summary:`Workflow ${e} was declined.`}):oe({state:t.state,...t.kind==="completed"?{summary:_e(t.result)}:{error:t.error}})}i(Ar,"workflowProtocolOutcome");function Jt(e){return e.status==="failed"?"failed":e.status==="interrupted"?"interrupted":"completed"}i(Jt,"protocolOwnerState");function Er(e,t){return e?AbortSignal.any([e,t]):t}i(Er,"combineAbortSignals");function Xt(e){return JSON.parse(JSON.stringify(e))}i(Xt,"toAgentMetadata");function Wr(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(Wr,"resultText");function Fr(e){if(e.kind==="completed"){let t=Wr(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}i(Fr,"classifyOutcome");function Or(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,results:[],events:[],artifacts:[]}}}i(Or,"failedOutcome");var qr=1e3;function Cr(e={},t=He(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>qr){let h=new Set(t.list().map(y=>y.runId));for(let y of n.keys())y!==o.runId&&!h.has(y)&&n.delete(y)}let d=fe(o.meta,o.hostPolicy),g=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:Fr,onError:i(h=>Or(o.runId,h),"onError")});return{runId:g.runId,done:g.done,getSnapshot:i(()=>r(g.getSnapshot()),"getSnapshot"),getProcessSnapshot:i(()=>g.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=>Ne({...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,hostMetadata:{...o.processMetadata?.hostMetadata,ownerSessionId:o.options.session?.id??"",ownerRunId:o.options.context?.runtimeRunId??""}},signal:o.signal??o.options.abortSignal},s=>Yt({...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(Cr,"createWorkflowRunManager");var Zt;function ii(e,t,n,r="stopped by user"){if(!t||e.getWorkflowProcessSnapshot(n)?.hostMetadata?.ownerSessionId!==t)throw Object.assign(new Error(JSON.stringify({code:"forbidden",denialSource:"session_scope",runId:n,remediation:"Stop the workflow from the Session that owns it."})),{code:"forbidden",denialSource:"session_scope"});let a=e.stop(n,r);return{runId:n,accepted:a,state:e.get(n)?.stop?.state??"unknown"}}i(ii,"requestSessionWorkflowStop");function ai(){return Zt??=Cr({},Ke()),Zt}i(ai,"getDefaultWorkflowRunManager");export{dt as a,ut as b,Re as c,be as d,mt as e,pt as f,wt as g,Cn as h,$n as i,_n as j,yt as k,vt as l,St as m,oo as n,te as o,Gn as p,Fe as q,At as r,Xn as s,fo as t,mo as u,po as v,wo as w,go as x,ho as y,Nt as z,ur as A,Dt as B,zt as C,Rr as D,fe as E,Ne as F,Mr as G,Yt as H,Cr as I,ii as J,ai as K};
|
|
16
|
+
`)}i(_n,"buildScopedReviewFinalPrompt");async function gt(e,t,n,o){let a=Te(await e.runAgent({name:`${n?"high-risk-":""}primary-${t.partitionKey}`,phase:"primary-review",prompt:Cn(t,n,o),scopeSummary:`${t.partitionKey}: ${t.scopePaths.join(", ")}`,constraints:["read every required packet path","return both verdicts","cite evidence at each finding"],readOnly:!0,modelHint:n?"deep":"balanced",verification:{enforcement:"hard",requiredReadPaths:ht(t)},outputSchema:Re,terseResult:!0}),"primary reviewer");return e.log({message:`primary read accepted for ${t.partitionKey}`,data:{kind:"review_packet_read",role:"primary",contentHash:t.contentHash}}),On(a.structured)}i(gt,"runPrimary");async function Nn(e,t,n){if(n.findings.length===0)return{specVerdict:n.specVerdict,qualityVerdict:n.qualityVerdict,unverifiedRequirements:n.unverifiedRequirements,actionable:[],audit:{findings:[]},unqualifiedApprovalAllowed:n.unverifiedRequirements.length===0&&n.specVerdict==="compliant"&&n.qualityVerdict==="approved"};let o=Te(await e.runAgent({name:`verify-${t.partitionKey}`,phase:"verifier",prompt:$n(t,n),scopeSummary:`verify ${n.findings.length} candidate finding(s) in ${t.partitionKey}`,constraints:["fresh context","attempt refutation","one disposition per findingId"],readOnly:!0,modelHint:"deep",verification:{enforcement:"hard",requiredReadPaths:ht(t)},outputSchema:be,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"}}),wt(n,qn(o.structured))}i(Nn,"verifyFindings");async function Dn(e,t,n){let o=[await gt(e,t,!1,n)];t.riskFlags.includes("routing-high")&&o.push(await gt(e,t,!0,n));let a=o.map(d=>mt(t.contentHash,t.requirementsPresent,d)),r=pt(a),s=await Nn(e,t,r);return e.log({message:`quality gate completed for ${t.partitionKey}`,data:{kind:"review_quality_gate",contentHash:t.contentHash,actionableFindings:s.actionable.length,unresolvedFindings:s.actionable.filter(d=>d.disposition==="unresolved").length,unqualifiedApprovalAllowed:s.unqualifiedApprovalAllowed}}),{contentHash:t.contentHash,result:s}}i(Dn,"reviewPacket");async function jn(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=>()=>Dn(e,d,t)),{concurrency:4});if(n.some(d=>d===null))throw new Error("one or more scope packets failed review; no final verdict was accepted");let o=n.filter(d=>d!==null);await e.artifact("scoped-review-audit",o);let a=Te(await e.runAgent({name:"final-review-synthesis",phase:"final-synthesis",prompt:_n(o),scopeSummary:`cross-scope synthesis for ${o.length} packet(s)`,constraints:["preserve severity","preserve unresolved uncertainty","do not invent evidence"],readOnly:!0,modelHint:"deep",outputSchema:Fn,terseResult:!0}),"final synthesis"),r=a.structured;return{summary:typeof r?.summary=="string"?r.summary:a.finalText,packetResults:o}}i(jn,"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:jn};function kt(e){return{meta:e.meta,run:i((t,n)=>e.run(t,n),"run")}}i(kt,"erase");var vt=[kt(ut),kt(yt)];function xt(e){return vt.find(t=>t.meta.name===e)}i(xt,"getBuiltinWorkflow");function oo(){return vt.map(e=>e.meta)}i(oo,"listBuiltinWorkflows");import{mkdir as It,readdir as Un,readFile as Q,rename as Vn,unlink as Me,writeFile as Ae}from"node:fs/promises";import{basename as Bn,dirname as Pe,join as K}from"node:path";import{pathToFileURL as Hn}from"node:url";var Pt=[".workflow.json",".ts",".mjs",".js"],ee="0.7.49";function Mt(){return"0.7.97-alpha.2"}i(Mt,"currentKodaxWorkflowVersion");function Kn(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}i(Kn,"executionForPath");function Ln(e){let t=Pt.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}i(Ln,"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 We(e){return typeof e=="object"&&e!==null}i(We,"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 Un(e)}catch{return[]}let o=new Map;for(let a of Pt)for(let r of n){if(!r.endsWith(a))continue;let s=Ln(r);if(!s||s.length===0||o.has(s))continue;let d=K(e,r);o.set(s,{name:s,path:d,source:t,execution:Kn(d)})}return[...o.values()]}i(Rt,"scanDir");async function te(e){let t=await Rt(e.personal,"personal"),n=await Rt(e.project,"project"),o=new Map;for(let a of t)o.set(a.name,a);for(let a of n)o.set(a.name,a);return[...o.values()].sort((a,r)=>a.name.localeCompare(r.name))}i(te,"discoverSavedWorkflows");function zn(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}i(zn,"isWorkflowModule");function Gn(e){let t=e.default;if(zn(t))return t;let n=typeof t=="function"?t:e.run,o=e.workflow??e.meta;if(typeof n=="function"&&typeof o=="object"&&o!==null&&"name"in o)return{meta:o,run:n};throw new Error("invalid workflow module: expected a `{ meta, run }` default export, or `export const workflow = {...}` + a default run function")}i(Gn,"normalizeWorkflowModule");function Jn(e){let t=JSON.parse(e);if(!We(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=we(t);return{manifest:a.manifest,source:a.source,capsule:a,legacy:!1}}let n=t.source;if(typeof n!="string"||n.trim().length===0)throw new Error("generated workflow file source must be a non-empty string");let o=Z(t.manifest);return{manifest:o,source:n,capsule:B({minKodaxVersion:ee,manifest:o,source:n}),legacy:!0}}i(Jn,"parseGeneratedWorkflowFile");async function Fe(e){let t=Jn(await Q(e,"utf8"));return t.capsule??B({minKodaxVersion:ee,manifest:t.manifest,source:t.source})}i(Fe,"loadSavedWorkflowCapsule");async function At(e){if(e.endsWith(".workflow.json"))return ge(await Fe(e));let t=await import(Hn(e).href);return Gn(t)}i(At,"loadSavedWorkflow");function Oe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}i(Oe,"deriveRequirements");function de(e,t){pe(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}i(de,"assertGeneratedCapsuleSource");async function Xn(e){let t=Ee(e.name),n=Z(e.manifest);de(n,e.source);let o=e.requires??Oe(n),a=B({minKodaxVersion:e.minKodaxVersion??ee,manifest:n,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...o!==void 0?{requires:o}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}});await It(e.dir,{recursive:!0});let r=K(e.dir,`${t}.workflow.json`);return await Ae(r,`${JSON.stringify(a,null,2)}
|
|
17
|
+
`,"utf8"),{name:t,path:r,source:"project",execution:"capability-generated"}}i(Xn,"saveGeneratedWorkflow");async function bt(e,t){await Ae(e,`${JSON.stringify(t,null,2)}
|
|
18
|
+
`,"utf8")}i(bt,"writeCapsuleFile");async function Yn(e){try{return await Q(e,"utf8"),!0}catch{return!1}}i(Yn,"fileExists");async function fo(e){let t=(await te(e.dirs)).filter(d=>d.name===e.name).filter(d=>e.source===void 0||d.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let o=Ee(e.newName),a=K(Pe(n.path),`${o}.workflow.json`);if(a!==n.path&&await Yn(a))throw new Error(`saved workflow already exists: ${o}`);let r=await Fe(n.path);de(r.manifest,r.source);let s=B({minKodaxVersion:r.minKodaxVersion,manifest:{...r.manifest,name:o},source:r.source,...r.intent!==void 0?{intent:r.intent}:{},...r.inputs!==void 0?{inputs:r.inputs}:{},...r.requires!==void 0?{requires:r.requires}:{},...r.provenance!==void 0?{provenance:r.provenance}:{}});return await Ae(a,`${JSON.stringify(s,null,2)}
|
|
19
|
+
`,"utf8"),a!==n.path&&await Me(n.path),{name:o,path:a,source:n.source,execution:"capability-generated"}}i(fo,"renameSavedWorkflow");async function mo(e){let t=(await te(e.dirs)).filter(o=>o.name===e.name).filter(o=>e.source===void 0||o.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be deleted");return await Me(n.path),n}i(mo,"deleteSavedWorkflow");async function po(e){let t=Ee(e.name),n=(await te(e.dirs)).filter(v=>v.name===t).filter(v=>e.savedSource===void 0||v.source===e.savedSource);if(n.length===0)throw new Error(`saved workflow not found: ${t}`);if(n.length>1)throw new Error(`ambiguous saved workflow name: ${t}`);let o=n[0];if(!o.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be replaced");let a=Z({...e.manifest,name:t});de(a,e.source);let r=e.requires??Oe(a),s=B({minKodaxVersion:e.minKodaxVersion??ee,manifest:a,source:e.source,...e.intent!==void 0?{intent:e.intent}:{},...e.inputs!==void 0?{inputs:e.inputs}:{},...r!==void 0?{requires:r}:{},...e.provenance!==void 0?{provenance:e.provenance}:{}}),d=await Fe(o.path),g=new Date().toISOString().replace(/[:.]/g,"-"),h=K(Pe(o.path),".revisions",t),y=`${g}-${process.hrtime.bigint().toString(36)}`,p=K(h,`${t}-${y}.workflow.json`),b=K(Pe(o.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await It(h,{recursive:!0}),await bt(p,d);try{await bt(b,s),await Vn(b,o.path)}catch(v){try{await Me(b)}catch{}throw v}return{name:t,path:o.path,source:o.source,execution:"capability-generated",previousPath:p}}i(po,"replaceSavedWorkflow");function Zn(e){if(!We(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(Zn,"readOptionalOriginalRequest");function Et(e){return Qn(e)}i(Et,"buildCapsuleFromRun");async function Qn(e){let t=JSON.parse(await Q(K(e.runDir,"run.json"),"utf8"));if(!We(t))throw new Error("workflow run.json must be an object");let n=St(t,"scriptSnapshotPath"),o=St(t,"manifestSnapshotPath"),a=await Q(n,"utf8"),r=Z(JSON.parse(await Q(o,"utf8")));de(r,a);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:Bn(e.runDir),d=Zn(t.args),g=Oe(r),h=Ve(r,d!==void 0?{originalRequest:d}:{}),y={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return B({minKodaxVersion:ee,manifest:r,source:a,intent:h,inputs:y,...g!==void 0?{requires:g}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:Mt()}})}i(Qn,"readCapsuleFromRun");async function wo(e){let t=await Et(e);return{capsule:t,module:ge(t)}}i(wo,"loadGeneratedWorkflowFromRun");async function go(e){let t=await Et(e);return Xn({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(go,"saveGeneratedWorkflowFromRun");function U(e,t,n,o){e.push({severity:t,requirement:n,message:o})}i(U,"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 er(e,t){for(let n=0;n<3;n+=1){let o=e[n]-t[n];if(o!==0)return o}return 0}i(er,"compareSemver");function tr(e,t,n){let o=Tt(t),a=Tt(n);if(!o){U(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!a){U(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}er(a,o)<0&&U(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}i(tr,"addMinVersionIssue");function Ie(e,t,n,o){if(!n)return;if(!o){for(let r of n)U(e,"warning",`${t}:${r}`,`workflow requires ${t}:${r}, but no ${t} inventory was provided`);return}let a=new Set(o);for(let r of n)a.has(r)||U(e,"error",`${t}:${r}`,`missing required workflow ${t}: ${r}`)}i(Ie,"addMissingItems");function ho(e,t={}){let n=we(e),o=[],a=n.requires;tr(o,n.minKodaxVersion,t.kodaxVersion??Mt()),a?.environment?.includes("git-repo")&&t.isGitRepo===!1&&U(o,"error","environment:git-repo","workflow requires a git repository"),a?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&U(o,"error","environment:worktree-capable","workflow may request git worktree isolation");try{pe(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(r){let s=r instanceof Error?r.message:String(r);U(o,"error","workflow:source",s)}return Ie(o,"tools",a?.tools,t.availableTools),Ie(o,"mcp",a?.mcp,t.availableMcp),Ie(o,"skills",a?.skills,t.availableSkills),{ok:!o.some(r=>r.severity==="error"),issues:o}}i(ho,"preflightWorkflowCapsule");function rr(e){return{project:Wt(e,".kodax","workflows"),personal:Wt(nr(),".kodax","workflows")}}i(rr,"defaultSavedWorkflowDirs");async function or(e,t){let o=(await te(t)).find(a=>a.name===e);if(o)return At(o.path)}i(or,"resolveSavedByName");function Ft(e){let t=rr(e);return async n=>xt(n)??await or(n,t)}i(Ft,"createNestedWorkflowResolver");import{existsSync as ir,mkdirSync as ar,readFileSync as sr,writeFileSync as Ot}from"node:fs";import{join as ne}from"node:path";var qt="results";function Ct(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}i(Ct,"safeKey");function $t(e,t){let n=ne(e,t);if(ir(n))try{return JSON.parse(sr(n,"utf8"))}catch{return}}i($t,"readResult");function _t(e,t={}){let n=ne(e,qt);ar(n,{recursive:!0});let o=t.readFrom?ne(t.readFrom,qt):void 0;return{get:i(a=>{let r=`${Ct(a)}.json`,s=$t(n,r);if(s!==void 0)return s;if(o===void 0)return;let d=$t(o,r);if(d!==void 0){try{Ot(ne(n,r),JSON.stringify(d),"utf8")}catch{}return d}},"get"),set:i((a,r)=>{try{Ot(ne(n,`${Ct(a)}.json`),JSON.stringify(r),"utf8")}catch{}},"set")}}i(_t,"createFsResultCache");import{mkdirSync as cr,appendFileSync as dr,writeFileSync as le}from"node:fs";import{join as G}from"node:path";function ue(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}i(ue,"record");function F(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}i(F,"finiteNumber");function Nt(e){let t=new Map,n=new Set,o=[],a=[],r=new Set,s=[],d=[],g=0,h=0,y=0,p=0,b=0,v=0,W=0,m=0,T={},$=[];for(let C of e){let M=C.data??{};if(C.type==="agent_spawned"){let u=typeof M.taskId=="string"?M.taskId:void 0;u&&t.set(u,M),M.role==="primary-review"&&(v+=1);let w=typeof M.role=="string"?M.role:"agent",S=typeof M.requestedTier=="string"?M.requestedTier:"inherited",I=`${w}/${S}`;T[I]=(T[I]??0)+1;continue}if(C.type==="agent_completed"||C.type==="agent_unverified"||C.type==="agent_failed"){let u=typeof M.taskId=="string"?M.taskId:void 0;if(!u||n.has(u))continue;n.add(u);let w=ue(M.usage);!w||typeof w.totalTokens!="number"?typeof t.get(u)?.externalTarget=="string"?a.push(u):o.push(u):(g+=F(w.totalTokens),h+=F(w.inputTokens),y+=F(w.cacheReadTokens??w.cachedReadTokens),p+=F(w.outputTokens));let S=ue(M.digestUsage);b+=F(S?.totalTokens),h+=F(S?.inputTokens),p+=F(S?.outputTokens),y+=F(S?.cacheReadTokens??S?.cachedReadTokens),W+=F(M.iterations);continue}if(C.type==="agent_summary_updated"){let u=ue(M.usage),w=M.summaryKind;if((w==="digest"||w==="digest-failed")&&u){let S=F(u.totalTokens);g+=S,b+=S,h+=F(u.inputTokens),p+=F(u.outputTokens),y+=F(u.cacheReadTokens??u.cachedReadTokens)}continue}if(C.type!=="workflow_log")continue;let f=ue(M.data);if(f?.kind==="review_quality_gate"&&typeof f.contentHash=="string"){$.push({contentHash:f.contentHash,actionableFindings:F(f.actionableFindings),unresolvedFindings:F(f.unresolvedFindings),unqualifiedApprovalAllowed:f.unqualifiedApprovalAllowed===!0});continue}if(f?.kind!=="review_packet_read"||typeof f.contentHash!="string")continue;let l={contentHash:f.contentHash,...typeof f.reason=="string"?{reason:f.reason}:{}};f.role==="primary"?(r.has(f.contentHash)&&(m+=1),r.add(f.contentHash)):f.role==="verification"?s.push(l):f.role==="synthesis"&&d.push(l)}for(let C of t.keys())n.has(C)||o.push(C);let J=[...new Set(o)].sort();return{totalModelTokens:g,inputTokens:h,cacheReadTokens:y,outputTokens:p,digestTokens:b,agentStarts:t.size,childTurns:W,agentStartsByRoleTier:T,primaryReviewStarts:v,duplicatePrimaryPacketReads:m,verificationPacketReads:s,synthesisPacketReads:d,reviewWaves:v>0?1:0,fixWaves:0,rereviewWaves:0,qualityGateOutcomes:$,tokenCoverage:{ok:J.length===0,missingTaskIds:J},excludedExternalTaskIds:[...new Set(a)].sort()}}i(Nt,"buildWorkflowCostReport");function ur(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}i(ur,"safeWorkflowArtifactName");function Dt(e,t={}){let n=t.now??(()=>Date.now()),o=G(e,"artifacts");cr(o,{recursive:!0});let a=G(e,"events.jsonl");return{runDir:e,onEvent:i(r=>{dr(a,`${JSON.stringify({...r,ts:n()})}
|
|
20
|
+
`,"utf8")},"onEvent"),writeArtifact:i((r,s)=>{let d=G(o,`${ur(r)}.json`);return le(d,JSON.stringify(s,null,2),"utf8"),{name:r,path:d}},"writeArtifact"),writeScriptSnapshot:i(r=>{let s=G(e,"script.js");if(le(s,r.source,"utf8"),!r.manifest)return{scriptPath:s};let d=G(e,"manifest.json");return le(d,`${JSON.stringify(r.manifest,null,2)}
|
|
21
|
+
`,"utf8"),{scriptPath:s,manifestPath:d}},"writeScriptSnapshot"),writeRunJson:i(r=>{let s=je(r.processMetadata?.hostMetadata),d={runId:r.state.runId,workflow:r.meta.name,status:r.state.status,totalSpawned:r.state.totalSpawned,artifacts:r.state.artifacts.map(g=>g.name),eventCount:r.state.events.length,efficiencyReport:{...Nt(r.state.events),wallClockDurationMs:Math.max(0,r.endedAt-r.startedAt)},startedAt:r.startedAt,endedAt:r.endedAt,args:r.args,...r.resultSummary!==void 0?{resultSummary:r.resultSummary}:{},...r.processMetadata?.displayName!==void 0?{displayName:r.processMetadata.displayName}:{},...r.processMetadata?.goal!==void 0?{goal:r.processMetadata.goal}:{},...r.processMetadata?.source!==void 0?{source:r.processMetadata.source}:{},...r.processMetadata?.savedWorkflowName!==void 0?{savedWorkflowName:r.processMetadata.savedWorkflowName}:{},...r.processMetadata?.sourceRunId!==void 0?{sourceRunId:r.processMetadata.sourceRunId}:{},...r.processMetadata?.sourceWorkflowName!==void 0?{sourceWorkflowName:r.processMetadata.sourceWorkflowName}:{},...r.processMetadata?.revisionOf!==void 0?{revisionOf:r.processMetadata.revisionOf}:{},...r.processMetadata?.resumedFromRunId!==void 0?{resumedFromRunId:r.processMetadata.resumedFromRunId}:{},...s!==void 0?{hostMetadata:s}:{},...r.scriptSnapshot?{scriptSnapshotPath:r.scriptSnapshot.scriptPath,...r.scriptSnapshot.manifestPath?{manifestSnapshotPath:r.scriptSnapshot.manifestPath}:{}}:{}};le(G(e,"run.json"),`${JSON.stringify(d,null,2)}
|
|
22
|
+
`,"utf8")},"writeRunJson")}}i(Dt,"createRunGraphWriter");import{execFile as lr}from"node:child_process";import{promisify as fr}from"node:util";import{statSync as mr}from"node:fs";import{join as pr}from"node:path";var wr=fr(lr);function Ce(e){return pr(e,"worktrees")}i(Ce,"workflowWorktreeBaseDir");var gr=360*60*1e3;async function Ut(e,t){return await re({cwd:t}),wr("git",[...e],{cwd:t,windowsHide:!0}).then(n=>n.stdout)}i(Ut,"defaultRunGit");function hr(e){return mr(e).mtimeMs}i(hr,"defaultMtimeMs");function yr(e){let t=[],n,o,a=i(()=>{n&&t.push(o?{path:n,branch:o}:{path:n}),n=void 0,o=void 0},"flush");for(let r of e.split(/\r?\n/))r.startsWith("worktree ")?(a(),n=r.slice(9).trim()):r.startsWith("branch ")&&(o=r.slice(7).trim().replace(/^refs\/heads\//,""));return a(),t}i(yr,"parseWorktreeList");function jt(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}i(jt,"normalize");function Vt(e,t){let n=jt(e),o=jt(t);return n===o||n.startsWith(`${o}/`)}i(Vt,"isUnder");async function kr(e,t,n){try{let a=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(d=>d.trim().length>0).length,r=await t(["rev-list","--count","HEAD","--not","--remotes"],e.path),s=Number.parseInt(r.trim(),10)||0;return a>0||s>0}catch(o){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${o instanceof Error?o.message:String(o)}`),!0}}i(kr,"worktreeHasChanges");async function Bt(e,t,n,o,a){if(await kr(e,n,a)){a.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),o.push(e.path)}catch(r){a.push(`remove ${e.path}: ${r instanceof Error?r.message:String(r)}`);return}if(e.branch)try{await n(["branch","-D",e.branch],t)}catch{}}i(Bt,"removeWorktree");async function Ht(e,t,n){try{let o=await t(["worktree","list","--porcelain"],e);return yr(o)}catch(o){n.push(`list worktrees: ${o instanceof Error?o.message:String(o)}`);return}}i(Ht,"listWorktrees");async function qe(e,t,n){try{await t(["worktree","prune"],e)}catch(o){n.push(`prune: ${o instanceof Error?o.message:String(o)}`)}}i(qe,"prune");async function Kt(e,t={}){let n=[],o=[];if(!e.gitRoot)return{removed:o,warnings:n};let a=t.runGit??Ut,r=await Ht(e.gitRoot,a,n);if(!r)return{removed:o,warnings:n};for(let s of r)Vt(s.path,e.baseDir)&&await Bt(s,e.gitRoot,a,o,n);return o.length>0&&await qe(e.gitRoot,a,n),{removed:o,warnings:n}}i(Kt,"sweepWorkflowRunWorktrees");async function Lt(e,t={}){let n=[],o=[];if(!e.gitRoot)return{removed:o,warnings:n};let a=t.runGit??Ut,r=t.mtimeMs??hr,s=t.now??(()=>Date.now()),d=e.maxAgeMs??gr;await qe(e.gitRoot,a,n);let g=await Ht(e.gitRoot,a,n);if(!g)return{removed:o,warnings:n};for(let h of g){if(!Vt(h.path,e.workflowRunsRoot))continue;let y;try{y=s()-r(h.path)}catch{continue}y>=d&&await Bt(h,e.gitRoot,a,o,n)}return o.length>0&&await qe(e.gitRoot,a,n),{removed:o,warnings:n}}i(Lt,"pruneStaleWorkflowWorktrees");var Sr=200,zt={maxAgents:64,tokenBudget:2e5};function Rr(e,t){let n=e.meta,o=fe(n,t);return{name:n.name,description:n.description,phases:n.phases??[],...n.plannedAgents!==void 0?{plannedAgents:n.plannedAgents}:{},maxAgents:o.maxAgents??null,maxConcurrency:o.maxConcurrency??null,tokenBudget:o.tokenBudget??null,writesFiles:n.readOnly!==!0}}i(Rr,"buildApprovalSummary");function $e(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}i($e,"clampLimit");function br(e,t,n){let o=$e(e,n),a=$e(t,n);return o===void 0?a:a===void 0?o:Math.min(o,a)}i(br,"clampEffectiveLimit");function Gt(e,t){if(!(e==null||!Number.isFinite(e)||e<=0))return Math.min(Math.floor(e),t)}i(Gt,"clampTokenBudget");function Tr(e,t,n){let o=Gt(e,n),a=Gt(t,n);return o===void 0?a:a===void 0?o:Math.min(o,a)}i(Tr,"clampEffectiveTokenBudget");function fe(e,t){let n=br(e.maxAgents,t?.maxAgents,zt.maxAgents),o=De(),a=[e.maxConcurrency,t?.maxConcurrency].map(d=>$e(d,o)).filter(d=>d!==void 0),r=a.length===0?o:Math.min(o,...a),s=Tr(e.tokenBudget,t?.tokenBudget,zt.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...r!==void 0?{maxConcurrency:r}:{},...s!==void 0?{tokenBudget:s}:{}}}i(fe,"clampWorkflowLimits");function _e(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 o=n.text;if(typeof o=="string"&&o.trim().length>0)return o}for(let o of["summary","report","text","result"]){let a=t[o];if(typeof a=="string"&&a.trim().length>0)return a}}i(_e,"workflowResultSummary");async function Ne(e){let t=fe(e.module.meta,e.hostPolicy),n=Rr(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let o=e.now??(()=>Date.now()),a=e.ctx?.executionCwd??e.ctx?.gitRoot;await Lt({workflowRunsRoot:xr(e.runDir),gitRoot:a},{now:o,...e.worktreeSweepDeps});let r=Dt(e.runDir,{now:o}),s=e.resumeFromRunDir!==void 0?vr(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(o()).toISOString(),"now")}):void 0,g=e.scriptSnapshot?r.writeScriptSnapshot(e.scriptSnapshot):void 0,h=e.backend??Ir(e),p={...e.beforeSpawn?Pr(h,e.beforeSpawn):h,writeArtifact:i(async(m,T)=>r.writeArtifact(m,T),"writeArtifact")},b=o(),v;try{v=await Be({runId:e.runId,args:e.args,backend:p,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:_e,resolveWorkflowModule:Ft(a??process.cwd()),resultCache:_t(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:i(m=>{r.onEvent(m),d&&e.onWorkflowProcessEvent?.(d.applyEvent(m)),e.onEvent?.(m)},"onEvent")},m=>e.module.run(m,e.args))}finally{await Kt({baseDir:Ce(e.runDir),gitRoot:a},{now:o,...e.worktreeSweepDeps})}let W=v.ok?_e(v.result):void 0;return r.writeRunJson({meta:e.module.meta,args:e.args,state:v.state,startedAt:b,endedAt:o(),...g?{scriptSnapshot:g}:{},...W!==void 0?{resultSummary:W}:{},...e.processMetadata!==void 0||s!==void 0?{processMetadata:{...e.processMetadata,...s!==void 0?{resumedFromRunId:s}:{}}}:{}}),v.ok?{kind:"completed",result:v.result,state:v.state}:{kind:"failed",error:v.error,state:v.state}}i(Ne,"runWorkflowModule");function Ir(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(Ir,"buildBackend");function Pr(e,t){return{...e,spawn:i(async n=>(await t(),e.spawn(n)),"spawn")}}i(Pr,"withBeforeSpawn");function Mr(e,t,n){let o=e?.onWorkflowAgentDigest;o&&(n.type==="agent_completed"||n.type==="agent_unverified"||n.type==="agent_failed"||n.type==="agent_summary_updated")&&o({runId:t,event:n})}i(Mr,"emitWorkflowAgentDigest");async function Yt(e){let t=e.options.context?.actorControl,n=e.options.context?.actorHost;if(t===void 0!=(n===void 0))throw new Error("Workflow Runtime requires actorControl and actorHost together.");let o=t?void 0:new Qe({maxConcurrentThreadsPerSession:e.options.maxConcurrentThreadsPerSession}),a=o?{...e.options,context:{...e.options.context,actorSession:o}}:e.options,r=et({options:a,runtime:a.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),s=r.actorControl,d=r.actorHost;if(!s||!d)throw new Error("Workflow execution requires the Runtime-owned Actor control plane.");let g=await d.createWorkflowOwner(s.callerPath,e.runId),h=d.workflowOwnerSignal(g.callerPath),y=Er(e.signal,h);r.actorControl=g,r.actorHost=d;let p={...a,context:{...a.context,actorControl:g,actorHost:d}};Object.assign(r,{workflowWorktreeBaseDir:Ce(e.runDir)});let b={maxIterationsPerChild:Sr,...p.session?.storage!==void 0?{historyStorage:p.session.storage}:{},parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:p.provider,model:p.modelOverride??p.model,effort:p.effort,reasoningMode:p.reasoningMode,repoIntelligenceMode:p.context?.repoIntelligenceMode,repoIntelligenceTrace:p.context?.repoIntelligenceTrace,compaction:p.compaction,contextDiagnostics:p.context?.contextDiagnostics,permissionIntent:p.context?.permissionIntent,disablePromptCache:p.disablePromptCache,sandbox:p.sandbox,extensionRuntime:p.extensionRuntime,events:p.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...r.planModeBlockCheck?{planModeBlockCheck:r.planModeBlockCheck}:{}},v=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?m=>{e.onWorkflowProcessEvent?.(m),p.events?.onWorkflowProcessEvent?.(m)}:void 0,W=e.onEvent||p.events?.onWorkflowAgentDigest?m=>{e.onEvent?.(m),Mr(p.events,e.runId,m)}:void 0;try{let m=await Ne({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:r,childOptions:b,...e.approval?{approval:e.approval}:{},signal:y,...W?{onEvent:W}:{},...v?{onWorkflowProcessEvent:v}:{},...p.workflowHostPolicy?{hostPolicy:p.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}:{}}),T=Ar(e.runId,m);return await d.settleWorkflowOwner(g.callerPath,Jt(T),{output:JSON.stringify(T),structured:Xt(T),artifacts:T.artifacts.map($=>$.path??$.name).filter(Boolean),...m.kind==="failed"?{error:m.error.message}:{}}),m}catch(m){let T=m instanceof Error?m:new Error(String(m)),$=oe({state:{runId:e.runId,status:h.aborted?"stopped":"failed",totalSpawned:0,results:[],events:[],artifacts:[]},error:T});try{await d.settleWorkflowOwner(g.callerPath,Jt($),{output:JSON.stringify($),structured:Xt($),error:T.message})}catch(J){throw new AggregateError([T,J],"Workflow execution and owner settlement failed.")}throw T}finally{await o?.close("workflow run finished")}}i(Yt,"runWorkflowFromOptions");function Ar(e,t){return t.kind==="denied"?oe({state:{runId:e,status:"stopped",totalSpawned:0,results:[],events:[],artifacts:[]},summary:`Workflow ${e} was declined.`}):oe({state:t.state,...t.kind==="completed"?{summary:_e(t.result)}:{error:t.error}})}i(Ar,"workflowProtocolOutcome");function Jt(e){return e.status==="failed"?"failed":e.status==="interrupted"?"interrupted":"completed"}i(Jt,"protocolOwnerState");function Er(e,t){return e?AbortSignal.any([e,t]):t}i(Er,"combineAbortSignals");function Xt(e){return JSON.parse(JSON.stringify(e))}i(Xt,"toAgentMetadata");function Wr(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 o=n.text;if(typeof o=="string"&&o.trim().length>0)return o}for(let o of["summary","report","text","result"]){let a=t[o];if(typeof a=="string"&&a.trim().length>0)return a}}i(Wr,"resultText");function Fr(e){if(e.kind==="completed"){let t=Wr(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}i(Fr,"classifyOutcome");function Or(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,results:[],events:[],artifacts:[]}}}i(Or,"failedOutcome");var qr=1e3;function Cr(e={},t=He(e)){let n=new Map,o=i(r=>r?{...r,runDir:n.get(r.runId)??""}:void 0,"withRunDir"),a=i((r,s)=>{if(n.set(r.runId,r.runDir),n.size>qr){let h=new Set(t.list().map(y=>y.runId));for(let y of n.keys())y!==r.runId&&!h.has(y)&&n.delete(y)}let d=fe(r.meta,r.hostPolicy),g=t.start({runId:r.runId,workflow:r.meta.name,...r.meta.phases!==void 0?{phases:r.meta.phases}:{},...d.maxAgents!==void 0?{maxAgents:d.maxAgents}:{},...r.meta.plannedAgents!==void 0?{plannedAgents:r.meta.plannedAgents}:{},...d.tokenBudget!==void 0?{tokenBudget:d.tokenBudget}:{},...r.processMetadata!==void 0?{processMetadata:r.processMetadata}:{},...r.signal?{signal:r.signal}:{},runFn:s,classify:Fr,onError:i(h=>Or(r.runId,h),"onError")});return{runId:g.runId,done:g.done,getSnapshot:i(()=>o(g.getSnapshot()),"getSnapshot"),getProcessSnapshot:i(()=>g.getProcessSnapshot(),"getProcessSnapshot")}},"startManaged");return{start:i(r=>a({runId:r.runId,runDir:r.runDir,meta:r.module.meta,hostPolicy:r.hostPolicy,processMetadata:r.processMetadata,signal:r.signal},s=>Ne({...r,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(d=>{s.onEvent(d),r.onEvent?.(d)},"onEvent")})),"start"),startFromOptions:i(r=>a({runId:r.runId,runDir:r.runDir,meta:r.module.meta,hostPolicy:r.options.workflowHostPolicy,processMetadata:{...r.processMetadata,hostMetadata:{...r.processMetadata?.hostMetadata,ownerSessionId:r.options.session?.id??"",ownerRunId:r.options.context?.runtimeRunId??""}},signal:r.signal??r.options.abortSignal},s=>Yt({...r,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:i(d=>{s.onEvent(d),r.onEvent?.(d)},"onEvent")})),"startFromOptions"),list:i(()=>t.list().map(r=>({...r,runDir:n.get(r.runId)??""})),"list"),get:i(r=>o(t.get(r)),"get"),subscribeWorkflowProcess:i(r=>t.subscribeWorkflowProcess(r),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:i(r=>t.getWorkflowProcessSnapshot(r),"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:i(r=>t.listWorkflowProcessSnapshots(r),"listWorkflowProcessSnapshots"),pause:i(r=>t.pause(r),"pause"),resume:i(r=>t.resume(r),"resume"),stop:i((r,s)=>t.stop(r,s),"stop")}}i(Cr,"createWorkflowRunManager");var Zt;function ii(){return Zt??=Cr({},Ke()),Zt}i(ii,"getDefaultWorkflowRunManager");export{dt as a,ut as b,Re as c,be as d,mt as e,pt as f,wt as g,Cn as h,$n as i,_n as j,yt as k,vt as l,xt as m,oo as n,te as o,Gn as p,Fe as q,At as r,Xn as s,fo as t,mo as u,po as v,wo as w,go as x,ho as y,Nt as z,ur as A,Dt as B,zt as C,Rr as D,fe as E,Ne as F,Mr as G,Yt as H,Cr as I,ii as J};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{Ka as v}from"./chunk-
|
|
2
|
+
import{Ka as v}from"./chunk-VDGPJQL7.js";import{a}from"./chunk-ONUPGMER.js";import{spawnSync as O}from"node:child_process";import{createHash as F}from"node:crypto";import c from"node:fs";import q from"node:os";import i from"node:path";import{fileURLToPath as W}from"node:url";var z=64*1024*1024,Y="v2";function x(){{let e=JSON.parse('{"darwin-arm64":"{\\n \\"version\\": 1,\\n \\"platform\\": \\"darwin\\",\\n \\"arch\\": \\"arm64\\",\\n \\"textTransaction\\": {\\n \\"file\\": \\"kodax-text-transaction.node\\",\\n \\"protocol\\": 5,\\n \\"sha256\\": \\"3822f552af1c81ddc3df0de743f5bbd87c0588d9aa0f9617446f22b6b483a156\\"\\n },\\n \\"legal\\": [\\n {\\n \\"file\\": \\"LICENSE-APACHE.txt\\",\\n \\"sha256\\": \\"6bdadfab6d5d2b0d4e0ccea244f5e412d1597dc84c56db645556ce192b131e98\\"\\n }\\n ]\\n}\\n","darwin-x64":"{\\n \\"version\\": 1,\\n \\"platform\\": \\"darwin\\",\\n \\"arch\\": \\"x64\\",\\n \\"textTransaction\\": {\\n \\"file\\": \\"kodax-text-transaction.node\\",\\n \\"protocol\\": 5,\\n \\"sha256\\": \\"7c8ab6d7b687cc0a2ff3dd453921eb449f12b8481e1815793bbbccfd39911385\\"\\n },\\n \\"legal\\": [\\n {\\n \\"file\\": \\"LICENSE-APACHE.txt\\",\\n \\"sha256\\": \\"6bdadfab6d5d2b0d4e0ccea244f5e412d1597dc84c56db645556ce192b131e98\\"\\n }\\n ]\\n}\\n","linux-arm64":"{\\n \\"version\\": 1,\\n \\"platform\\": \\"linux\\",\\n \\"arch\\": \\"arm64\\",\\n \\"textTransaction\\": {\\n \\"file\\": \\"kodax-text-transaction.node\\",\\n \\"protocol\\": 5,\\n \\"sha256\\": \\"3f788f0fb2bd627c758fcfe5b171cfed20da8102fa31d56e41b3047e855c016e\\"\\n },\\n \\"legal\\": [\\n {\\n \\"file\\": \\"LICENSE-APACHE.txt\\",\\n \\"sha256\\": \\"6bdadfab6d5d2b0d4e0ccea244f5e412d1597dc84c56db645556ce192b131e98\\"\\n }\\n ]\\n}\\n","linux-x64":"{\\n \\"version\\": 1,\\n \\"platform\\": \\"linux\\",\\n \\"arch\\": \\"x64\\",\\n \\"textTransaction\\": {\\n \\"file\\": \\"kodax-text-transaction.node\\",\\n \\"protocol\\": 5,\\n \\"sha256\\": \\"a667ba689ef9b95118236496e60612ee4407dae02a67fdef30e6456ee4592a6a\\"\\n },\\n \\"legal\\": [\\n {\\n \\"file\\": \\"LICENSE-APACHE.txt\\",\\n \\"sha256\\": \\"6bdadfab6d5d2b0d4e0ccea244f5e412d1597dc84c56db645556ce192b131e98\\"\\n }\\n ]\\n}\\n","win32-x64":"{\\n \\"version\\": 1,\\n \\"platform\\": \\"win32\\",\\n \\"arch\\": \\"x64\\",\\n \\"textTransaction\\": {\\n \\"file\\": \\"kodax-windows-text-transaction.node\\",\\n \\"protocol\\": 5,\\n \\"sha256\\": \\"f9b3abd5765c501e5828a5ef8d6a8ebf42c77bac25a2e286133d30aafe370fd5\\"\\n },\\n \\"legal\\": [\\n {\\n \\"file\\": \\"LICENSE-APACHE.txt\\",\\n \\"sha256\\": \\"f8dd90eb71a7af4048bde3ff1d18b7d7280522e0a429ff71b7270a4189cf3568\\"\\n },\\n {\\n \\"file\\": \\"NOTICE-windows-sandbox.txt\\",\\n \\"sha256\\": \\"78723eb162f0782c5e27928f46c681996edc1907d552eba9d0f7f53e014c20c9\\"\\n }\\n ],\\n \\"shellSandbox\\": {\\n \\"file\\": \\"kodax-windows-sandbox.exe\\",\\n \\"protocol\\": 10,\\n \\"sha256\\": \\"f9fc7ab01a13735671f00ee02d3db134efdc5b1b96d40ec05b8bf7750fbc0b40\\"\\n },\\n \\"asrtRunner\\": {\\n \\"file\\": \\"srt-win.exe\\",\\n \\"version\\": \\"0.0.65\\",\\n \\"sha256\\": \\"777736e17d6cf9b4280f155f5cda731fdff0f789fa16e6cb3adc0006073e241a\\"\\n }\\n}\\n"}');if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("embedded native manifest map is invalid");let t=e[`${process.platform}-${process.arch}`];if(typeof t!="string"||t==="")throw new Error(`embedded native manifest is missing for ${process.platform}-${process.arch}`);return t}return process.platform==="win32",`{
|
|
3
3
|
"version": 1,
|
|
4
4
|
"platform": "linux",
|
|
5
5
|
"arch": "x64",
|