@kodax-ai/kodax 0.7.57 → 0.7.58
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 +2004 -1920
- package/README.md +31 -25
- package/README_CN.md +22 -15
- package/dist/chunks/agent-YJNC2755.js +2 -0
- package/dist/chunks/argument-completer-QGBNXTYJ.js +2 -0
- package/dist/chunks/chunk-526OILYL.js +2 -0
- package/dist/chunks/{chunk-LZKGOR2C.js → chunk-6AU6EPO6.js} +1 -1
- package/dist/chunks/chunk-73Z7BK5H.js +15 -0
- package/dist/chunks/chunk-7QB55SYG.js +326 -0
- package/dist/chunks/chunk-CQ6EQG7E.js +322 -0
- package/dist/chunks/{chunk-4SHP3M67.js → chunk-CV6JHPEO.js} +1 -1
- package/dist/chunks/chunk-D6QVXQNI.js +1 -0
- package/dist/chunks/chunk-HS2K74I4.js +31 -0
- package/dist/chunks/chunk-NKHXRN7G.js +403 -0
- package/dist/chunks/chunk-OBPB5BQ6.js +310 -0
- package/dist/chunks/chunk-P4VF3JEP.js +7 -0
- package/dist/chunks/chunk-PIQWODWN.js +18 -0
- package/dist/chunks/{chunk-YSVPF6SN.js → chunk-QHWXPJEG.js} +268 -264
- package/dist/chunks/chunk-XXEIFNBE.js +52 -0
- package/dist/chunks/chunk-ZZDC75H4.js +681 -0
- package/dist/chunks/compaction-config-OPMRZSAK.js +2 -0
- package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-CIXFH5SE.js} +1 -1
- package/dist/chunks/dist-JSE7NICF.js +2 -0
- package/dist/chunks/dist-SDNQOW52.js +2 -0
- package/dist/chunks/host-H7FQMMRC.js +2 -0
- package/dist/chunks/paste-Y4DVUWSM.js +2 -0
- package/dist/chunks/run-manager-4H5HWMVW.js +2 -0
- package/dist/chunks/utils-FLVVQHM7.js +2 -0
- package/dist/index.d.ts +14 -14
- package/dist/index.js +2 -2
- package/dist/kodax_cli.js +1206 -1036
- package/dist/sdk-agent.d.ts +153 -12
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +186 -186
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.d.ts +66 -43
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +18 -2
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +20 -22
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-session.d.ts +7 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
- package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-D3cddmyV.d.ts} +490 -69
- package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
- package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
- package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-iK7FwMdW.d.ts} +4 -4
- package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-DHow2y2G.d.ts} +169 -14
- package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DDOfVYDr.d.ts} +31 -2
- package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-ByDcJc5g.d.ts} +113 -5
- package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-21Tt3N_x.d.ts} +72 -9
- package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-BsZrBPYu.d.ts} +2 -2
- package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
- package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-D4ZA8LJV.d.ts} +125 -3
- package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-BURxOxFd.d.ts} +83 -6
- package/package.json +2 -2
- package/dist/chunks/agent-EHWQZA4C.js +0 -2
- package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
- package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
- package/dist/chunks/chunk-KN6IJMTB.js +0 -636
- package/dist/chunks/chunk-MJFPFRGK.js +0 -423
- package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
- package/dist/chunks/chunk-PCPFLPS4.js +0 -5
- package/dist/chunks/chunk-TCLSPUTR.js +0 -31
- package/dist/chunks/chunk-VACH6QWN.js +0 -315
- package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
- package/dist/chunks/dist-IE4HVWP7.js +0 -2
- package/dist/chunks/dist-IKOK2MJQ.js +0 -2
- package/dist/chunks/paste-WTL2XN7P.js +0 -2
- package/dist/chunks/utils-EJ2VCRTC.js +0 -2
- package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as o}from"./chunk-V4WSBIXB.js";var f=class extends Error{static{o(this,"KodaXMediaError")}code;detail;cause;constructor(t,n,r={}){super(n),this.name="KodaXMediaError",this.code=t,this.detail=r.detail,this.cause=r.cause}},R=class extends f{static{o(this,"ImageResizeError")}constructor(t,n={}){super(n.code??"IMAGE_TOO_LARGE",t,n),this.name="ImageResizeError"}};import ue from"node:path";var pt={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},gt={".3gp":"video/3gpp",".3gpp":"video/3gpp",".avi":"video/x-msvideo",".flv":"video/x-flv",".mov":"video/quicktime",".mp4":"video/mp4",".mpeg":"video/mpeg",".mpg":"video/mpeg",".webm":"video/webm",".wmv":"video/x-ms-wmv"};function ce(e){return pt[ue.extname(e).toLowerCase()]}o(ce,"inferImageMediaType");function fe(e){return gt[ue.extname(e).toLowerCase()]}o(fe,"inferVideoMediaType");function mt(e,t={}){let n=t.mediaType??ce(e);return{kind:"image",path:e,...n?{mediaType:n}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(mt,"createImageArtifactFromPath");function yt(e,t={}){if(t.mediaType!==void 0&&t.mimeType!==void 0&&t.mediaType!==t.mimeType)throw new f("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${t.mediaType} != ${t.mimeType}.`);return{kind:"file",path:e,...t.mediaType?{mediaType:t.mediaType}:{},...t.mimeType?{mimeType:t.mimeType}:{},...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(yt,"createFileArtifactFromPath");function ht(e,t={}){let n=t.mediaType??fe(e);if(!n)throw new f("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${e}.`);return{kind:"video",path:e,mediaType:n,...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(ht,"createVideoArtifactFromPath");import{Jimp as bt}from"jimp";var pe=2e3,ge=Math.floor(3.75*1024*1024),vt=[80,60,40];async function H(e,t={}){let n=t.maxDimension??pe,r=t.targetBytes??ge;if(e.length===0)throw new R("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let i;try{i=await bt.read(e)}catch(u){let y=u instanceof Error?u.message:String(u);throw new R(`Failed to decode image: ${y}`,{code:"IMAGE_DECODE_FAILED",cause:u})}let{width:a,height:d}=i.bitmap,s=Math.max(a,d);if(s>n){let u=n/s;i.resize({w:Math.max(1,Math.round(a*u)),h:Math.max(1,Math.round(d*u))})}let l=i.bitmap.width,m=i.bitmap.height;if(t.preferMediaType!=="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:m}}for(let u of vt){let y=await i.getBuffer("image/jpeg",{quality:u});if(y.length<=r)return{buffer:Buffer.from(y),mediaType:"image/jpeg",width:l,height:m}}if(t.preferMediaType==="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:m}}throw new R(`Image still exceeds budget (${r} bytes raw) after PNG and JPEG q40 compression. Try a smaller image or take a fresh screenshot of a smaller region.`,{code:"IMAGE_TOO_LARGE"})}o(H,"normalizePastedImage");import{spawn as he}from"node:child_process";import{mkdtemp as kt,readFile as Ct,rm as Pt}from"node:fs/promises";import{tmpdir as Rt}from"node:os";import me from"node:path";var be=5e3;async function ve(){switch(process.platform){case"darwin":return Tt();case"win32":return xt();case"linux":return St();default:throw new f("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}o(ve,"readClipboardImage");async function Et(e={}){let t=await ve();return t?H(t,e):null}o(Et,"readAndNormalizeClipboardImage");async function ke(e){let t=await kt(me.join(Rt(),"kodax-clip-")),n=me.join(t,"clip.png");try{return await e(n)}finally{await Pt(t,{recursive:!0,force:!0}).catch(r=>{})}}o(ke,"runWithTempPng");async function Tt(){return ke(async e=>{let t=`set png_data to (the clipboard as \xABclass PNGf\xBB)
|
|
3
|
+
set fh to open for access POSIX file "${e.replace(/"/g,'\\"')}" with write permission
|
|
4
|
+
write png_data to fh
|
|
5
|
+
close access fh`;return await Pe("osascript",["-e",t])?Ce(e):null})}o(Tt,"readMacClipboard");async function xt(){return ke(async e=>{let t=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${e.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await Pe("powershell",["-NoProfile","-Command",t])?Ce(e):null})}o(xt,"readWinClipboard");async function St(){return await ye("wl-paste",["--type","image/png"])??ye("xclip",["-selection","clipboard","-t","image/png","-o"])}o(St,"readLinuxClipboard");async function Ce(e){try{let t=await Ct(e);return t.length>0?t:null}catch(t){return null}}o(Ce,"readNonEmptyFile");function Pe(e,t){return new Promise(n=>{let r=!1,i=he(e,[...t],{stdio:"ignore"}),a=setTimeout(()=>{r||(r=!0,i.kill(),n(!1))},be);i.once("error",()=>{r||(r=!0,clearTimeout(a),n(!1))}),i.once("exit",d=>{r||(r=!0,clearTimeout(a),n(d===0))})})}o(Pe,"runCommand");function ye(e,t){return new Promise(n=>{let r=!1,i=[],a=he(e,[...t],{stdio:["ignore","pipe","ignore"]}),d=setTimeout(()=>{r||(r=!0,a.kill(),n(null))},be);a.stdout?.on("data",s=>i.push(s)),a.once("error",()=>{r||(r=!0,clearTimeout(d),n(null))}),a.once("exit",s=>{if(r)return;if(r=!0,clearTimeout(d),s!==0){n(null);return}let l=Buffer.concat(i);n(l.length>0?l:null)})})}o(ye,"collectStdoutBytes");import{createHash as Mt}from"node:crypto";import{mkdir as _t,readdir as Kt,stat as wt,unlink as At,writeFile as Xt}from"node:fs/promises";import{tmpdir as It}from"node:os";import J from"node:path";var Re="KODAX_PASTE_TMP_DIR",Ee=1440*60*1e3;function Te(){return process.env[Re]??J.join(It(),"kodax-paste")}o(Te,"resolvePasteTmpDir");function Ot(e){let t=e?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t&&t.length>0?t:"paste"}o(Ot,"sanitizeFileNamePrefix");async function Dt(e,t={}){let n=t.directory??Te();await _t(n,{recursive:!0});let r=e.mediaType==="image/jpeg"?".jpg":".png",i=Mt("sha256").update(e.buffer).digest("hex").slice(0,16),a=`${Ot(t.fileNamePrefix)}-${i}${r}`,d=J.join(n,a);return await Xt(d,e.buffer),{type:"image",path:d,mediaType:e.mediaType}}o(Dt,"persistImageAsBlock");async function Bt(e=Date.now()){let t=Te(),n;try{n=await Kt(t)}catch(a){return 0}let r=e-Ee,i=0;return await Promise.all(n.filter(a=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(a)).map(async a=>{let d=J.join(t,a);try{(await wt(d)).mtimeMs<r&&(await At(d),i+=1)}catch(s){}})),i}o(Bt,"prunePasteTmpDir");function j(e,t){return`${e}/${t??""}`}o(j,"capabilityCacheKey");function Nt(e,t,n){return e[j(t,n)]?.rejected??[]}o(Nt,"getRejectedEfforts");function Lt(e,t,n,r,i,a){let d=j(t,n),s=e[d],l=s?.rejected.includes(r)?s.rejected:[...s?.rejected??[],r];return{...e,[d]:{rejected:l,source:i,updatedAt:a}}}o(Lt,"addRejectedEffort");function jt(e,t,n){if(!t)return{};let r={...e};return delete r[j(t,n)],r}o(jt,"removeCacheEntry");function $t(e){if(!e||typeof e!="object")return{};let t={};for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let i=r,a=Array.isArray(i.rejected)?i.rejected.filter(l=>typeof l=="string"):[],d=i.source==="probed"?"probed":"observed",s=typeof i.updatedAt=="string"?i.updatedAt:"";t[n]={rejected:a,source:d,updatedAt:s}}return t}o($t,"sanitizeCapabilityCache");import{AsyncLocalStorage as Ft}from"node:async_hooks";var Ut=new Ft,xe=8,Se=32;function Wt(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}o(Wt,"parsePositiveInt");function Vt(){let e=$()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Wt(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??xe;return Math.max(1,Math.min(Se,t))}o(Vt,"resolveWorkflowMaxConcurrency");function $(){return Ut.getStore()}o($,"getRunScopedConfig");var A={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Me={...A,multimodalSupport:"image-input"},F={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},_e={...F,multimodalSupport:"image-input"};function X(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}o(X,"normalizeCapabilityProfile");import Fr from"@anthropic-ai/sdk";import{parse as Mr}from"partial-json";import oi from"openai";import{ClientSideConnection as yi,PROTOCOL_VERSION as hi,ndJsonStream as bi}from"@agentclientprotocol/sdk";import Ie from"node:fs";import Oe from"node:os";import De from"node:path";var fo="gpt-5.4",po="auto-gemini-3",go=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],mo=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Be(e){let t=new Set,n=[];for(let r of e){let i=r.trim();if(!i)continue;let a=i.toLowerCase();t.has(a)||(t.add(a),n.push(i))}return n}o(Be,"dedupePreserveOrder");function yo(){let e=De.join(Oe.homedir(),".codex","config.toml");try{return Ie.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(yo,"readCodexConfiguredModel");function ho(){let e=De.join(Oe.homedir(),".gemini","settings.json");try{let t=JSON.parse(Ie.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}o(ho,"readGeminiConfiguredModel");function x(){return yo()||fo}o(x,"getCodexCliDefaultModel");function S(){return ho()||po}o(S,"getGeminiCliDefaultModel");function I(){return Be([x(),...go])}o(I,"getCodexCliKnownModels");function O(){return Be([S(),...mo])}o(O,"getGeminiCliKnownModels");var Qi=S(),Zi=O();var ca=x(),fa=I();import{existsSync as _o,readFileSync as Ko}from"node:fs";import M from"node:path";import{fileURLToPath as wo}from"node:url";var Ne=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Le=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],je=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],$e=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Fe=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Ue=["count-tokens","models-list","minimal-message","unsupported"];function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(k,"isPlainObject");function E(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}o(E,"requireString");function D(e,t){if(e!==void 0)return E(e,t)}o(D,"optionalString");function C(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}o(C,"optionalNumber");function g(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(g,"optionalBoolean");function We(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,r)=>E(n,`${t}[${r}]`))}}o(We,"optionalStringArray");function ko(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=E(i,`${t}.${r}`);return n}o(ko,"optionalStringMap");function Co(e,t){if(e!==void 0){if(typeof e!="string"||!$e.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${$e.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(Co,"optionalReasoningPreset");function Q(e,t){if(typeof e!="string"||!Ne.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ne.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Q,"requireReasoningCapability");function Po(e,t){if(typeof e!="string"||!Le.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Le.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Po,"requireEffortStrategy");function Ro(e,t){if(e!==void 0){if(typeof e!="string"||!je.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${je.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(Ro,"optionalThinkingStrategy");function Ve(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Po(e.effortStrategy,`${t}.effortStrategy`),r=Co(e.reasoningPreset,`${t}.reasoningPreset`),i=Ro(e.thinkingStrategy,`${t}.thinkingStrategy`),a=D(e.defaultEffort,`${t}.defaultEffort`),d=ko(e.effortAliases,`${t}.effortAliases`),s=We(e.disabledEfforts,`${t}.disabledEfforts`),l=We(e.localRejectEfforts,`${t}.localRejectEfforts`),m=g(e.allowCustomEffort,`${t}.allowCustomEffort`),u=g(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),y=g(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),p=g(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),P=g(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),T=g(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),h=g(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),L=g(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),c={effortStrategy:n};if(r!==void 0&&(c.reasoningPreset=r),i!==void 0&&(c.thinkingStrategy=i),a!==void 0&&(c.defaultEffort=a),d!==void 0&&(c.effortAliases=d),s!==void 0&&(c.disabledEfforts=s),l!==void 0&&(c.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);c.supportedEfforts=e.supportedEfforts.map((b,v)=>{if(!k(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:E(b.value,`${t}.supportedEfforts[${v}].value`),...D(b.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:D(b.description,`${t}.supportedEfforts[${v}].description`)}:{},...g(b.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:g(b.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...g(b.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:g(b.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!k(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[v,le]of Object.entries(e.budgetByEffort))b[v]=C(le,`${t}.budgetByEffort.${v}`)??0;c.budgetByEffort=b}return m!==void 0&&(c.allowCustomEffort=m),u!==void 0&&(c.supportsReasoningEffort=u),y!==void 0&&(c.supportsReasoningSummary=y),p!==void 0&&(c.supportsEncryptedReasoningReplay=p),P!==void 0&&(c.supportsAdaptiveThinking=P),T!==void 0&&(c.supportsManualThinkingBudget=T),h!==void 0&&(c.supportsDisabledThinking=h),L!==void 0&&(c.requiresEffortBetaHeader=L),c}o(Ve,"validateReasoningProfile");function ze(e,t){let n=e.reasoningProfile,r=e.reasoningCapabilityV2;if(n!==void 0&&r!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?Ve(n,`${t}.reasoningProfile`):Ve(r,`${t}.reasoningCapabilityV2`)}o(ze,"validateReasoningProfileField");function Eo(e,t){if(typeof e!="string"||!Fe.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Fe.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Eo,"requireProfileName");function To(e,t){if(typeof e!="string"||!Ue.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ue.join(", ")}, got ${JSON.stringify(e)}`);return e}o(To,"requireVerifyStrategy");function xo(e,t){if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=E(e.id,`${t}.id`),r=D(e.displayName,`${t}.displayName`),i=C(e.contextWindow,`${t}.contextWindow`),a=C(e.maxOutputTokens,`${t}.maxOutputTokens`),d=C(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),s=g(e.replayReasoningContent,`${t}.replayReasoningContent`),l=g(e.strictThinkingSignature,`${t}.strictThinkingSignature`),m=C(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),u=e.reasoningCapability===void 0?void 0:Q(e.reasoningCapability,`${t}.reasoningCapability`),y=ze(e,t),p={id:n};return r!==void 0&&(p.displayName=r),i!==void 0&&(p.contextWindow=i),a!==void 0&&(p.maxOutputTokens=a),d!==void 0&&(p.thinkingBudgetCap=d),u!==void 0&&(p.reasoningCapability=u),y!==void 0&&(p.reasoningProfile=y),s!==void 0&&(p.replayReasoningContent=s),l!==void 0&&(p.strictThinkingSignature=l),m!==void 0&&(p.streamMaxDurationMs=m),p}o(xo,"validateModelDescriptor");function So(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=Q(i,`${t}.${r}`);return n}o(So,"validateModelReasoningCapabilities");function Mo(e,t){if(!k(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=g(e.cliBridge,`providers.${t}.cliBridge`),r=E(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=Q(e.reasoningCapability,`providers.${t}.reasoningCapability`),a=ze(e,`providers.${t}`),d=Eo(e.capabilityProfile,`providers.${t}.capabilityProfile`),s=To(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&s!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${s}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let l=C(e.contextWindow,`providers.${t}.contextWindow`),m=C(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=C(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),y=g(e.supportsThinking,`providers.${t}.supportsThinking`),p=So(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),P=D(e.model,`providers.${t}.model`);if(n&&(P!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&P===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let T;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);T=e.models.map((L,c)=>xo(L,`providers.${t}.models[${c}]`))}let h={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:d,verifyStrategy:s};return a!==void 0&&(h.reasoningProfile=a),P!==void 0&&(h.model=P),T!==void 0&&(h.models=T),l!==void 0&&(h.contextWindow=l),m!==void 0&&(h.maxOutputTokens=m),u!==void 0&&(h.thinkingBudgetCap=u),y!==void 0&&(h.supportsThinking=y),p!==void 0&&(h.modelReasoningCapabilities=p),n&&(h.cliBridge=!0),h}o(Mo,"validateProviderEntry");function qe(e){if(!k(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=E(e.updatedAt,"updatedAt");if(!k(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[r,i]of Object.entries(e.providers))n[r]=Mo(i,r);return{version:1,updatedAt:t,providers:n}}o(qe,"validateProviderCapabilitiesJson");var Ao=Object.freeze({native:A,"image-input-native":Me,"cli-bridge":F,"image-input-cli-bridge":_e}),z=null;function Xo(){if(process.env.KODAX_BUNDLED==="true")return M.join(M.dirname(process.execPath),"provider-capabilities.json");let e=M.dirname(wo(import.meta.url)),t=[M.join(e,"provider-capabilities.json"),M.join(M.dirname(e),"provider-capabilities.json")];for(let n of t)if(_o(n))return n;return t[0]}o(Xo,"resolveJsonPath");function Io(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Ge(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Ge(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(Io,"deepFreezeSnapshot");function Ge(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}o(Ge,"freezeReasoningProfile");function Oo(e){if(e==="gemini-cli"){let t=S();return{model:t,models:O().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=x();return{model:t,models:I().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(Oo,"resolveCliBridgeModels");function Do(e,t){let n=Ao[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=Oo(e),a={model:i.model,models:i.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(a.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(a.supportsThinking=t.supportsThinking),a}let r={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(r.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(r.models=t.models),t.modelReasoningCapabilities!==void 0&&(r.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(r.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(r.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}o(Do,"buildSnapshot");function He(){if(z)return z;let e=Xo(),t;try{let i=Ko(e,"utf8");t=JSON.parse(i)}catch(i){let a=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${e}: ${a}`)}let n=qe(t),r={};for(let[i,a]of Object.entries(n.providers))r[i]=Io(Do(i,a));return z=Object.freeze(r),z}o(He,"getProviderSnapshots");import Oa from"@anthropic-ai/sdk";var _=He();var Je=process.env.KODAX_PROVIDER??"zhipu-coding";var B=["image/png","image/jpeg","image/webp","image/gif"],N=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],ln=[],un=new Set(["anthropic","openai"]),cn=new Set(["kimi-code/kimi-for-coding","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5"]);function re(e){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:e}}o(re,"unsupported");function fn(e){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:B,nativeMediaTypes:B,reason:e}}o(fn,"supportedImage");function pn(e){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:N,maxCount:0,reason:e}}o(pn,"nativeVideoUnwired");function gn(e){return e.trim().toLowerCase()}o(gn,"normalizeProvider");function mn(e){return _[e]?.model}o(mn,"resolveProviderDefaultModel");function yn(e,t){if(!t)return;let n=t.trim().toLowerCase();if(e==="kimi"){if(n==="k2.5")return"kimi-k2.5";if(n==="k2.6")return"kimi-k2.6";if(n==="k2.7-code")return"kimi-k2.7-code"}return(e==="minimax-coding"||e==="minimax")&&n==="minimax-m3"?"minimax-m3":n}o(yn,"normalizeModel");function hn(e){if(!un.has(e))return!1;let t=_[e];return t?X(t.capabilityProfile).multimodalSupport!=="none":!1}o(hn,"hasOfficialImageSupport");function bn(e,t){let n=yn(e,t);if(!n)return!1;let r=`${e}/${n}`;return cn.has(r)}o(bn,"hasSourceBackedNativeMedia");function vn(e,t,n){if(n)return"source-backed";if(t){if(e==="openai")return"openai-official";if(e==="anthropic")return"anthropic-official"}}o(vn,"resolveImageCapabilityRoute");function kn(e){switch(e){case"openai-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but OpenAI requires non-animated GIF semantics.";case"anthropic-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but Anthropic uses only the first frame of animated GIFs.";case"source-backed":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif; animated-GIF interpretation is provider-owned."}}o(kn,"imageCapabilityReason");function ie(e){let t=gn(e.provider),n=e.model?.trim()||mn(t),r=hn(t),i=bn(t,n),a=vn(t,r,i),d=a!==void 0,s=i;return{text:!0,image:d?fn(kn(a)):re("No verified KodaX image-input route for this provider/model."),video:s?pn("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):re("No verified native video route for this provider/model."),file:re("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}o(ie,"getModelInputCapabilities");function Cn(e){return B.includes(e)}o(Cn,"isKnownImageMediaType");function Pn(e){return N.includes(e)}o(Pn,"isKnownVideoMediaType");function ae(e){return`${e.provider}${e.model?`/${e.model}`:""}`}o(ae,"routeLabel");function se(e){return e.reason?`${e.status}: ${e.reason}`:e.status}o(se,"capabilityDetail");function de(e,t){if(e.length===0)return;let n=ie(t);for(let r of e){let i=r;if(i.kind==="image"){if(!n.image.nativeSupported||!n.image.sdkSupported)throw new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${ae(t)}.`,{detail:se(n.image)});if(typeof i.mediaType=="string"&&!Cn(i.mediaType))throw new f("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${i.mediaType}.`);continue}throw i.kind==="video"?typeof i.mediaType!="string"||!Pn(i.mediaType)?new f("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(i.mediaType)}.`,{detail:`Supported video media types: ${N.join(", ")}`}):new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${ae(t)}.`,{detail:se(n.video)}):i.kind==="file"?typeof i.mediaType=="string"&&typeof i.mimeType=="string"&&i.mediaType!==i.mimeType?new f("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${i.mediaType} != ${i.mimeType}.`):new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${ae(t)}.`,{detail:se(n.file)}):new f("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(i.kind)}.`)}}o(de,"validateInputArtifactsForModel");var K={user:0,background:1};function Rn(e,t){return K[e]<=K[t]}o(Rn,"priorityWithinMax");function ut(e,t){return!(e.agentId!==t.agentId||!Rn(e.priority,t.maxPriority)||t.mode!==void 0&&e.mode!==t.mode||t.id!==void 0&&e.id!==t.id||t.predicate&&!t.predicate(e))}o(ut,"matchesFilter");var G=class{static{o(this,"MessageQueue")}messages=[];nextSeq=1;listeners=new Set;snapshotRef=Object.freeze([]);notify(t){this.snapshotRef=Object.freeze([...this.messages]);for(let n of this.listeners)try{n(t)}catch{}}subscribe=o(t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}),"subscribe");getSnapshot=o(()=>this.snapshotRef,"getSnapshot");enqueue(t){let n=`msg-${this.nextSeq++}`,r={id:n,priority:t.priority,mode:t.mode,content:t.content,agentId:t.agentId,inputArtifacts:t.inputArtifacts,enqueuedAt:Date.now()};return this.messages=[...this.messages,r],this.notify({kind:"enqueued",message:r}),n}dequeue(t){let n=[];for(let s=0;s<this.messages.length;s++){let l=this.messages[s];l&&ut(l,t)&&n.push({originalIndex:s,message:l})}n.sort((s,l)=>{let m=K[s.message.priority]-K[l.message.priority];return m!==0?m:s.originalIndex-l.originalIndex});let r=t.limit,i=typeof r=="number"&&n.length>r?n.slice(0,r):n;if(i.length===0)return[];let a=new Set(i.map(s=>s.originalIndex));this.messages=this.messages.filter((s,l)=>!a.has(l));let d=i.map(s=>s.message);return this.notify({kind:"dequeued",messages:d}),d}peek(t){let n=[];for(let a=0;a<this.messages.length;a++){let d=this.messages[a];d&&ut(d,t)&&n.push({originalIndex:a,message:d})}n.sort((a,d)=>{let s=K[a.message.priority]-K[d.message.priority];return s!==0?s:a.originalIndex-d.originalIndex});let r=t.limit;return(typeof r=="number"&&n.length>r?n.slice(0,r):n).map(a=>a.message)}size(){return this.messages.length}count(t){return this.peek(t).length}has(t){return this.count(t)>0}clear(){if(this.messages.length===0)return;let t=this.messages;this.messages=[],this.notify({kind:"cleared",messages:t})}},q;function w(){return q||(q=new G),q}o(w,"getMessageQueue");function En(){q=void 0}o(En,"_resetMessageQueueForTests");var ct=new Set;function ft(e){return e.some(n=>ct.has(n))?"background":"user"}o(ft,"midTurnDrainPriority");function Tn(e){let t=ft(e.lastTurnToolNames);return w().dequeue({agentId:e.agentId,maxPriority:t,limit:e.limit})}o(Tn,"maybeDrainMidTurn");function xn(e){let t=`<task-completed task_id="${e.taskId}">
|
|
6
|
+
${e.summary}
|
|
7
|
+
</task-completed>`;return w().enqueue({priority:"background",mode:"task-notification",agentId:e.parentAgentId,content:t})}o(xn,"enqueueChildTaskNotification");function Sn(e){return de(e.inputArtifacts??[],e),w().enqueue({priority:e.priority??"user",mode:"prompt",content:e.content,agentId:e.agentId,inputArtifacts:e.inputArtifacts})}o(Sn,"enqueueWithArtifacts");export{f as a,R as b,ce as c,fe as d,mt as e,yt as f,ht as g,pe as h,ge as i,H as j,ve as k,Et as l,Re as m,Ee as n,Dt as o,Bt as p,Nt as q,Lt as r,jt as s,$t as t,Vt as u,B as v,N as w,ln as x,ie as y,de as z,G as A,w as B,En as C,ct as D,ft as E,Tn as F,xn as G,Sn as H};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{Ec as Ee,Fa as Re,Fc as Ae,vb as We,wb as X,xb as be,yb as Te}from"./chunk-7QB55SYG.js";import{N as pe}from"./chunk-HS2K74I4.js";import{Va as G,Zd as ke,_d as ye,ae as F,ce as z,db as ge,ie as J,je as b,ke as H,le as ve,se as Se,te as xe,ue as Me}from"./chunk-ZZDC75H4.js";import{B as he}from"./chunk-P4VF3JEP.js";import{a}from"./chunk-V4WSBIXB.js";import{dirname as yn}from"node:path";import{execFile as gt}from"node:child_process";import B from"node:path";import{promisify as kt}from"node:util";var yt=kt(gt),vt=1e4,Ie=2,Pe=new Set(["write","edit","multi_edit","insert_after_anchor"]),St=/^\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 xt(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)}}a(xt,"normalizeWaitTimeoutMs");function Y(e){return e?.requiresMutation===!0||(e?.requiredChangedPaths?.length??0)>0}a(Y,"hasVerificationWork");function T(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").trim()}a(T,"normalizeWorkspacePath");function Mt(e,t){let n=t.gitRoot?B.resolve(t.gitRoot):void 0,o=B.isAbsolute(e)&&n?B.relative(n,B.resolve(e)):e;return T(o)}a(Mt,"normalizeRequiredPath");function Rt(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}}a(Rt,"resolveVerificationForInput");function Ne(e){let t=e.trim();return t.length>0&&St.test(t)}a(Ne,"isPreparatoryOnlyText");function Wt(e,t){let n=e.trim(),o=t?.trim();return o&&(n.length===0||Ne(n))?o:e}a(Wt,"selectWorkflowFinalText");async function L(e,t){return(await yt("git",[...e],{cwd:t,timeout:vt,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}a(L,"runGit");async function bt(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await L(["rev-parse","--show-toplevel"],t)).trim(),o=await Promise.all([L(["diff","--name-only","--"],n),L(["diff","--cached","--name-only","--"],n),L(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(o.flatMap(s=>s.split(/\r?\n/)).map(T).filter(s=>s.length>0))]}a(bt,"listGitChangedFiles");async function Z(e,t){try{return{paths:(await t(e)).map(T).filter(o=>o.length>0)}}catch(n){return{paths:[],error:n instanceof Error?n.message:String(n)}}}a(Z,"captureChangedPaths");function Tt(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[]}}a(Tt,"createMutationRecorder");function Et(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return T(n)}}a(Et,"readMutationPath");function At(e,t){return{...e??{},onToolUseStart:a((n,o)=>{if(Pe.has(n.name)){t.toolNameById.set(n.id,n.name);let s=Et(n.input);s!==void 0&&t.toolPathById.set(n.id,s)}e?.onToolUseStart?.(n,o)},"onToolUseStart"),onToolResult:a((n,o)=>{let s=t.toolNameById.get(n.id)??n.name;if(Pe.has(s)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(s);let r=t.toolPathById.get(n.id);r!==void 0&&t.succeededPaths.push(r)}e?.onToolResult?.(n,o)},"onToolResult")}}a(At,"wrapEventsForMutationRecording");function Q(e){return[...new Set(e.filter(t=>t.trim().length>0))]}a(Q,"uniqueItems");function Ce(e){let t=e.verification;if(!t)return;let n=[],o=new Set(e.before.paths.map(T)),s=Q(e.after.paths.map(T)),r=s.filter(g=>!o.has(g)),i=Q(e.mutationRecorder.succeededToolCalls),c=e.acceptToolMutationEvidence?i:[],w=e.acceptToolMutationEvidence?Q(e.mutationRecorder.succeededPaths.map(T)):[],u=r.length>0||c.length>0,p=t.enforcement??"hard",v=(t.requiredChangedPaths??[]).map(g=>Mt(g,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}`):u||n.push(e.acceptToolMutationEvidence||i.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&&!u&&n.push("workflow child reached its iteration limit before satisfying the task");for(let g of v)!s.includes(g)&&!w.includes(g)&&n.push(`required changed path was not present in workspace changes: ${g}`);let h=t.minFinalTextChars;return h!==void 0&&!u&&e.term.finalText.trim().length<h&&n.push(`finalText was shorter than the required ${h} characters`),t.rejectPreparatoryFinalText===!0&&!u&&Ne(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:p,reasons:n,changedPaths:s,mutationToolCalls:i,mutationEvidence:u}}a(Ce,"evaluateVerification");function ee(e,t){if(t.ok)return e;let o=[t.enforcement==="warn"?"[Workflow task completed without verification]":"[Workflow task verification failed]",...t.reasons.map(s=>`- ${s}`)].join(`
|
|
3
|
+
`);return e.trim().length>0?`${e}
|
|
4
|
+
|
|
5
|
+
${o}`:o}a(ee,"appendVerificationFailure");function $e(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}a($e,"limitReachedWarningVerification");function Pt(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<Ie&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}a(Pt,"shouldRepairVerificationFailure");function Ct(e){let t=e.verification.reasons.map(o=>`- ${o}`).join(`
|
|
6
|
+
`),n=(e.verification.changedPaths??[]).length>0?`
|
|
7
|
+
Workspace changes already present before this repair attempt:
|
|
8
|
+
${e.verification.changedPaths?.map(o=>`- ${o}`).join(`
|
|
9
|
+
`)??""}`:"";return[e.originalPrompt,"","[Workflow verification repair]",`Repair attempt ${e.attempt}/${Ie}.`,"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
|
+
`)}a(Ct,"buildVerificationRepairPrompt");async function Oe(e,t,n,o,s=n){if(n===void 0)return e;let r;try{return await Promise.race([e,new Promise((i,c)=>{r=setTimeout(()=>{o.childAbortControllers?.get(t)?.abort(),c(new Error(`workflow task ${t} timed out after ${s??n}ms`))},n)})])}finally{r&&clearTimeout(r)}}a(Oe,"waitForChildPromise");function Fe(e,t,n){return t.outputSchema!==void 0&&Re(t.outputSchema),Ae(t.name,t.evidenceRefs,n),{id:e,fanoutClass:"evidence-scan",objective:t.prompt,readOnly:t.readOnly??!1,evidenceRefs:t.evidenceRefs?[...t.evidenceRefs]:[],constraints:[],...t.modelHint?{modelHint:t.modelHint}:{},...t.isolation?{isolation:t.isolation}:{},...t.subagentType?{specialistName:t.subagentType}:{},...t.outputSchema!==void 0?{outputSchema:t.outputSchema}:{},...t.effort?{effort:t.effort}:{}}}a(Fe,"buildBundle");function te(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],o=Wt(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}:{}}:{status:"failed",snapStatus:"failed",finalText:o,...n?.limitReached?{limitReached:!0}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{}}}a(te,"deriveTerminal");function De(e){let{ctx:t,childOptions:n}=e,o=e.runChild??Ee,s=e.queue??he(),r=e.listChangedFiles??bt,i=e.now??(()=>Date.now()),c=0,w=e.generateId??(()=>`wf-child-${c+=1}`),u=new Map,p=new Set,v=new Map,h=a(()=>e.onTaskSummary!==void 0||p.size>0,"hasTaskSummaryObservers"),g=a((f,m)=>{try{e.onTaskSummary?.(f,m)}catch{}for(let l of p)try{l(f,m)}catch{}},"notifyTaskSummary");return{spawn:a(async f=>{let m=w(),l=Fe(m,f,new Set(u.keys())),q=Rt(f).verification,P=Tt(),W=f.isolation!=="worktree",C=Y(q)?Z(t,r):Promise.resolve({paths:[]}),d=t.childProgressSnapshots,k=a(async $=>{let O=new AbortController;t.childAbortControllers?.set(m,O),d&&We(d,{childId:m,startedAt:i(),maxIterations:n.maxIterationsPerChild,parentRole:n.parentRole,readOnly:$.readOnly,specialistName:$.specialistName});let ht={...n,parentOptions:{...n.parentOptions,events:At(n.parentOptions.events,P)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:m,itemId:`agent:${m}`}}:{},childActivityName:f.name,workflowDigestMode:h()?"async":"blocking",...h()?{onWorkflowChildDigest:a(y=>{g(y.childId,{...y.digest?{summary:y.digest}:{},summaryKind:y.digest?"digest":"digest-failed",...y.totalTokensUsed>0?{usage:{totalTokens:y.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:O.signal,snapshotUpdater:d?y=>be(d,m,y):void 0},j;try{return await C,j=await o([$],t,ht),j}finally{if(t.childAbortControllers?.delete(m),d){let y=j?te(j,m):{snapStatus:"failed",finalText:""};X(d,m,{status:y.snapStatus,finalText:y.finalText,endedAt:i()})}}},"runBundle"),S=k(l);return u.set(m,{name:f.name,input:f,bundle:l,promise:S,runBundle:k,verification:q,changedPathBaseline:C,mutationRecorder:P,acceptToolMutationEvidence:W,repairAttempts:0}),G(v,m,S),{taskId:m,name:f.name}},"spawn"),wait:a(async(f,m)=>{let l=u.get(f);if(!l)throw new Error(`unknown workflow task: ${f}`);let M=xt(m),q=Date.now(),P=a(async S=>{if(M===void 0)return Oe(S,f,void 0,t);let $=Date.now()-q,O=M-$;if(O<=0)throw t.childAbortControllers?.get(f)?.abort(),new Error(`workflow task ${f} timed out after ${M}ms`);return Oe(S,f,Math.max(1,Math.floor(O)),t,M)},"waitForAttempt"),W=await P(l.promise),C=W.totalTokensUsed,d=te(W,f),k=l.verification?Ce({verification:l.verification,term:d,before:await l.changedPathBaseline,after:Y(l.verification)?await Z(t,r):{paths:[]},mutationRecorder:l.mutationRecorder,ctx:t,acceptToolMutationEvidence:l.acceptToolMutationEvidence}):void 0;for(d.limitReached===!0&&k===void 0&&d.status==="completed"&&(k=$e(),d={...d,status:"completed_unverified",snapStatus:"completed",finalText:ee(d.finalText,k)});Pt({entry:l,term:d,verification:k});){l.repairAttempts+=1;let S=Fe(f,{...l.input,prompt:Ct({originalPrompt:l.input.prompt,previousFinalText:d.finalText,verification:k,attempt:l.repairAttempts})});l.promise=l.runBundle(S),G(v,f,l.promise),W=await P(l.promise),C+=W.totalTokensUsed,d=te(W,f),k=l.verification?Ce({verification:l.verification,term:d,before:await l.changedPathBaseline,after:Y(l.verification)?await Z(t,r):{paths:[]},mutationRecorder:l.mutationRecorder,ctx:t,acceptToolMutationEvidence:l.acceptToolMutationEvidence}):void 0,d.limitReached===!0&&k===void 0&&d.status==="completed"&&(k=$e(),d={...d,status:"completed_unverified",snapStatus:"completed",finalText:ee(d.finalText,k)})}if(k!==void 0&&!k.ok&&d.status==="completed"){let S=k.enforcement==="warn";d={...d,status:S?"completed_unverified":"failed",snapStatus:S?"completed":"failed",finalText:ee(d.finalText,k)}}return X(t.childProgressSnapshots,f,{status:d.snapStatus,finalText:d.finalText,endedAt:i()}),{taskId:f,name:l.name,status:d.status,finalText:d.finalText,...d.digest?{digest:d.digest}:{},...d.digestFailed?{digestFailed:!0}:{},...d.digestPending?{digestPending:!0}:{},...k!==void 0?{verification:k}:{},...d.limitReached?{limitReached:!0}:{},...d.provider?{provider:d.provider}:{},...d.model?{model:d.model}:{},...d.structured!==void 0?{structured:d.structured}:{},usage:{totalTokens:C}}},"wait"),output:a(async f=>{if(!u.has(f))throw new Error(`unknown workflow task: ${f}`);let m=u.get(f)?.name??f,l=t.childProgressSnapshots?.get(f);if(!l)return{taskId:f,name:m,status:"running"};let M=l.status==="aborted"?"stopped":l.status;return l.finalText!==void 0?{taskId:f,name:m,status:M,lastText:l.finalText}:{taskId:f,name:m,status:M}},"output"),send:a(async(f,m)=>{if(!u.has(f))throw new Error(`unknown workflow task: ${f}`);ge({to:f,priority:"user",mode:"prompt",content:m,registry:v,queue:s})},"send"),stop:a(async f=>{if(!u.has(f))throw new Error(`unknown workflow task: ${f}`);t.childAbortControllers?.get(f)?.abort()},"stop"),subscribeTaskSummaryUpdates:a(f=>(p.add(f),()=>{p.delete(f)}),"subscribeTaskSummaryUpdates")}}a(De,"createCodingWorkflowBackend");import{homedir as en}from"node:os";import{join as Xe}from"node:path";var $t=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],Ot="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.";function Ft(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
|
+
`)}a(Ft,"buildInvestigatorPrompt");function It(e){let t=Math.max(1,(e.maxAgents??8)-1);return(e.targets&&e.targets.length>0?e.targets:$t).slice(0,t).map((o,s)=>({name:`investigate-${s+1}`,prompt:Ft(e.question,o)}))}a(It,"resolveAngles");async function Nt(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0});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:n.finalText}}catch(n){let o=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${o}`}}}a(Nt,"investigate");async function Dt(e,t){let n=It(t),o=(await e.phase("investigate",()=>e.parallel(n.map(i=>()=>Nt(e,i)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0))).filter(i=>i!==null),s=o.some(i=>i.status!=="completed");return{synthesis:(await e.phase("synthesize",()=>e.synthesize({inputs:o.map(i=>`### ${i.angle} (${i.status})
|
|
12
|
+
${i.text}`),rubric:t.rubric??Ot}))).text,findings:o,degraded:s}}a(Dt,"runParallelInvestigation");var _e={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:Dt};function _t(e){return{meta:e.meta,run:a((t,n)=>e.run(t,n),"run")}}a(_t,"erase");var qe=[_t(_e)];function je(e){return qe.find(t=>t.meta.name===e)}a(je,"getBuiltinWorkflow");function Kn(){return qe.map(e=>e.meta)}a(Kn,"listBuiltinWorkflows");import{mkdir as Ke,readdir as qt,readFile as I,rename as jt,unlink as oe,writeFile as ae}from"node:fs/promises";import{basename as Bt,dirname as re,join as E}from"node:path";import{pathToFileURL as Lt}from"node:url";var Ge=[".workflow.json",".ts",".mjs",".js"],N="0.7.49";function ze(){return"0.7.58"}a(ze,"currentKodaxWorkflowVersion");function Ut(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}a(Ut,"executionForPath");function Vt(e){let t=Ge.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}a(Vt,"stripWorkflowSuffix");function se(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}a(se,"safeWorkflowName");function ie(e){return typeof e=="object"&&e!==null}a(ie,"isRecord");function Be(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}a(Be,"readRequiredString");async function Le(e,t){if(!e)return[];let n;try{n=await qt(e)}catch{return[]}let o=new Map;for(let s of Ge)for(let r of n){if(!r.endsWith(s))continue;let i=Vt(r);if(!i||i.length===0||o.has(i))continue;let c=E(e,r);o.set(i,{name:i,path:c,source:t,execution:Ut(c)})}return[...o.values()]}a(Le,"scanDir");async function D(e){let t=await Le(e.personal,"personal"),n=await Le(e.project,"project"),o=new Map;for(let s of t)o.set(s.name,s);for(let s of n)o.set(s.name,s);return[...o.values()].sort((s,r)=>s.name.localeCompare(r.name))}a(D,"discoverSavedWorkflows");function Kt(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}a(Kt,"isWorkflowModule");function Gt(e){let t=e.default;if(Kt(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")}a(Gt,"normalizeWorkflowModule");function zt(e){let t=JSON.parse(e);if(!ie(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 s=J(t);return{manifest:s.manifest,source:s.source,capsule:s,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=F(t.manifest);return{manifest:o,source:n,capsule:b({minKodaxVersion:N,manifest:o,source:n}),legacy:!0}}a(zt,"parseGeneratedWorkflowFile");async function ce(e){let t=zt(await I(e,"utf8"));return t.capsule??b({minKodaxVersion:N,manifest:t.manifest,source:t.source})}a(ce,"loadSavedWorkflowCapsule");async function Je(e){if(e.endsWith(".workflow.json"))return H(await ce(e));let t=await import(Lt(e).href);return Gt(t)}a(Je,"loadSavedWorkflow");function fe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}a(fe,"deriveRequirements");function U(e,t){z(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}a(U,"assertGeneratedCapsuleSource");async function Jt(e){let t=se(e.name),n=F(e.manifest);U(n,e.source);let o=e.requires??fe(n),s=b({minKodaxVersion:e.minKodaxVersion??N,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 Ke(e.dir,{recursive:!0});let r=E(e.dir,`${t}.workflow.json`);return await ae(r,`${JSON.stringify(s,null,2)}
|
|
13
|
+
`,"utf8"),{name:t,path:r,source:"project",execution:"capability-generated"}}a(Jt,"saveGeneratedWorkflow");async function Ue(e,t){await ae(e,`${JSON.stringify(t,null,2)}
|
|
14
|
+
`,"utf8")}a(Ue,"writeCapsuleFile");async function Ht(e){try{return await I(e,"utf8"),!0}catch{return!1}}a(Ht,"fileExists");async function Zn(e){let t=(await D(e.dirs)).filter(c=>c.name===e.name).filter(c=>e.source===void 0||c.source===e.source);if(t.length===0)throw new Error(`saved workflow not found: ${e.name}`);if(t.length>1)throw new Error(`ambiguous saved workflow name: ${e.name}`);let n=t[0];if(!n.path.endsWith(".workflow.json"))throw new Error("only generated workflow capsules can be renamed");let o=se(e.newName),s=E(re(n.path),`${o}.workflow.json`);if(s!==n.path&&await Ht(s))throw new Error(`saved workflow already exists: ${o}`);let r=await ce(n.path);U(r.manifest,r.source);let i=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(s,`${JSON.stringify(i,null,2)}
|
|
15
|
+
`,"utf8"),s!==n.path&&await oe(n.path),{name:o,path:s,source:n.source,execution:"capability-generated"}}a(Zn,"renameSavedWorkflow");async function Qn(e){let t=(await D(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 oe(n.path),n}a(Qn,"deleteSavedWorkflow");async function er(e){let t=se(e.name),n=(await D(e.dirs)).filter(g=>g.name===t).filter(g=>e.savedSource===void 0||g.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 s=F({...e.manifest,name:t});U(s,e.source);let r=e.requires??fe(s),i=b({minKodaxVersion:e.minKodaxVersion??N,manifest:s,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}:{}}),c=await ce(o.path),w=new Date().toISOString().replace(/[:.]/g,"-"),u=E(re(o.path),".revisions",t),p=`${w}-${process.hrtime.bigint().toString(36)}`,v=E(u,`${t}-${p}.workflow.json`),h=E(re(o.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await Ke(u,{recursive:!0}),await Ue(v,c);try{await Ue(h,i),await jt(h,o.path)}catch(g){try{await oe(h)}catch{}throw g}return{name:t,path:o.path,source:o.source,execution:"capability-generated",previousPath:v}}a(er,"replaceSavedWorkflow");function Xt(e){if(!ie(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}a(Xt,"readOptionalOriginalRequest");function He(e){return Yt(e)}a(He,"buildCapsuleFromRun");async function Yt(e){let t=JSON.parse(await I(E(e.runDir,"run.json"),"utf8"));if(!ie(t))throw new Error("workflow run.json must be an object");let n=Be(t,"scriptSnapshotPath"),o=Be(t,"manifestSnapshotPath"),s=await I(n,"utf8"),r=F(JSON.parse(await I(o,"utf8")));U(r,s);let i=typeof t.runId=="string"&&t.runId.length>0?t.runId:Bt(e.runDir),c=Xt(t.args),w=fe(r),u=ve(r,c!==void 0?{originalRequest:c}:{}),p={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return b({minKodaxVersion:N,manifest:r,source:s,intent:u,inputs:p,...w!==void 0?{requires:w}:{},provenance:{fromRunId:i,createdAt:new Date().toISOString(),kodaxVersion:ze()}})}a(Yt,"readCapsuleFromRun");async function tr(e){let t=await He(e);return{capsule:t,module:H(t)}}a(tr,"loadGeneratedWorkflowFromRun");async function nr(e){let t=await He(e);return Jt({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})}a(nr,"saveGeneratedWorkflowFromRun");function R(e,t,n,o){e.push({severity:t,requirement:n,message:o})}a(R,"addRequirementIssue");function Ve(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}a(Ve,"parseSemver");function Zt(e,t){for(let n=0;n<3;n+=1){let o=e[n]-t[n];if(o!==0)return o}return 0}a(Zt,"compareSemver");function Qt(e,t,n){let o=Ve(t),s=Ve(n);if(!o){R(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!s){R(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}Zt(s,o)<0&&R(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}a(Qt,"addMinVersionIssue");function ne(e,t,n,o){if(!n)return;if(!o){for(let r of n)R(e,"warning",`${t}:${r}`,`workflow requires ${t}:${r}, but no ${t} inventory was provided`);return}let s=new Set(o);for(let r of n)s.has(r)||R(e,"error",`${t}:${r}`,`missing required workflow ${t}: ${r}`)}a(ne,"addMissingItems");function rr(e,t={}){let n=J(e),o=[],s=n.requires;Qt(o,n.minKodaxVersion,t.kodaxVersion??ze()),s?.environment?.includes("git-repo")&&t.isGitRepo===!1&&R(o,"error","environment:git-repo","workflow requires a git repository"),s?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&R(o,"error","environment:worktree-capable","workflow may request git worktree isolation");try{z(n.source,{filename:`${n.manifest.name}.workflow.js`,requireAsyncRun:!0})}catch(r){let i=r instanceof Error?r.message:String(r);R(o,"error","workflow:source",i)}return ne(o,"tools",s?.tools,t.availableTools),ne(o,"mcp",s?.mcp,t.availableMcp),ne(o,"skills",s?.skills,t.availableSkills),{ok:!o.some(r=>r.severity==="error"),issues:o}}a(rr,"preflightWorkflowCapsule");function tn(e){return{project:Xe(e,".kodax","workflows"),personal:Xe(en(),".kodax","workflows")}}a(tn,"defaultSavedWorkflowDirs");async function nn(e,t){let o=(await D(t)).find(s=>s.name===e);if(o)return Je(o.path)}a(nn,"resolveSavedByName");function Ye(e){let t=tn(e);return async n=>je(n)??await nn(n,t)}a(Ye,"createNestedWorkflowResolver");import{existsSync as rn,mkdirSync as on,readFileSync as an,writeFileSync as Ze}from"node:fs";import{join as _}from"node:path";var Qe="results";function et(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}a(et,"safeKey");function tt(e,t){let n=_(e,t);if(rn(n))try{return JSON.parse(an(n,"utf8"))}catch{return}}a(tt,"readResult");function nt(e,t={}){let n=_(e,Qe);on(n,{recursive:!0});let o=t.readFrom?_(t.readFrom,Qe):void 0;return{get:a(s=>{let r=`${et(s)}.json`,i=tt(n,r);if(i!==void 0)return i;if(o===void 0)return;let c=tt(o,r);if(c!==void 0){try{Ze(_(n,r),JSON.stringify(c),"utf8")}catch{}return c}},"get"),set:a((s,r)=>{try{Ze(_(n,`${et(s)}.json`),JSON.stringify(r),"utf8")}catch{}},"set")}}a(nt,"createFsResultCache");import{mkdirSync as sn,appendFileSync as cn,writeFileSync as V}from"node:fs";import{join as A}from"node:path";function fn(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}a(fn,"safeWorkflowArtifactName");function rt(e,t={}){let n=t.now??(()=>Date.now()),o=A(e,"artifacts");sn(o,{recursive:!0});let s=A(e,"events.jsonl");return{runDir:e,onEvent:a(r=>{cn(s,`${JSON.stringify({...r,ts:n()})}
|
|
16
|
+
`,"utf8")},"onEvent"),writeArtifact:a((r,i)=>{let c=A(o,`${fn(r)}.json`);return V(c,JSON.stringify(i,null,2),"utf8"),{name:r,path:c}},"writeArtifact"),writeScriptSnapshot:a(r=>{let i=A(e,"script.js");if(V(i,r.source,"utf8"),!r.manifest)return{scriptPath:i};let c=A(e,"manifest.json");return V(c,`${JSON.stringify(r.manifest,null,2)}
|
|
17
|
+
`,"utf8"),{scriptPath:i,manifestPath:c}},"writeScriptSnapshot"),writeRunJson:a(r=>{let i=ke(r.processMetadata?.hostMetadata),c={runId:r.state.runId,workflow:r.meta.name,status:r.state.status,totalSpawned:r.state.totalSpawned,artifacts:r.state.artifacts.map(w=>w.name),eventCount:r.state.events.length,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}:{},...i!==void 0?{hostMetadata:i}:{},...r.scriptSnapshot?{scriptSnapshotPath:r.scriptSnapshot.scriptPath,...r.scriptSnapshot.manifestPath?{manifestSnapshotPath:r.scriptSnapshot.manifestPath}:{}}:{}};V(A(e,"run.json"),`${JSON.stringify(c,null,2)}
|
|
18
|
+
`,"utf8")},"writeRunJson")}}a(rt,"createRunGraphWriter");import{execFile as dn}from"node:child_process";import{promisify as ln}from"node:util";import{statSync as un}from"node:fs";import{join as mn}from"node:path";var wn=ln(dn);function le(e){return mn(e,"worktrees")}a(le,"workflowWorktreeBaseDir");var pn=360*60*1e3;function at(e,t){return wn("git",[...e],{cwd:t}).then(n=>n.stdout)}a(at,"defaultRunGit");function hn(e){return un(e).mtimeMs}a(hn,"defaultMtimeMs");function gn(e){let t=[],n,o,s=a(()=>{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 ")?(s(),n=r.slice(9).trim()):r.startsWith("branch ")&&(o=r.slice(7).trim().replace(/^refs\/heads\//,""));return s(),t}a(gn,"parseWorktreeList");function ot(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}a(ot,"normalize");function st(e,t){let n=ot(e),o=ot(t);return n===o||n.startsWith(`${o}/`)}a(st,"isUnder");async function kn(e,t,n){try{let s=(await t(["status","--porcelain"],e.path)).split(/\r?\n/).filter(c=>c.trim().length>0).length,r=await t(["rev-list","--count","HEAD","--not","--remotes"],e.path),i=Number.parseInt(r.trim(),10)||0;return s>0||i>0}catch(o){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${o instanceof Error?o.message:String(o)}`),!0}}a(kn,"worktreeHasChanges");async function it(e,t,n,o,s){if(await kn(e,n,s)){s.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),o.push(e.path)}catch(r){s.push(`remove ${e.path}: ${r instanceof Error?r.message:String(r)}`);return}if(e.branch)try{await n(["branch","-D",e.branch],t)}catch{}}a(it,"removeWorktree");async function ct(e,t,n){try{let o=await t(["worktree","list","--porcelain"],e);return gn(o)}catch(o){n.push(`list worktrees: ${o instanceof Error?o.message:String(o)}`);return}}a(ct,"listWorktrees");async function de(e,t,n){try{await t(["worktree","prune"],e)}catch(o){n.push(`prune: ${o instanceof Error?o.message:String(o)}`)}}a(de,"prune");async function ft(e,t={}){let n=[],o=[];if(!e.gitRoot)return{removed:o,warnings:n};let s=t.runGit??at,r=await ct(e.gitRoot,s,n);if(!r)return{removed:o,warnings:n};for(let i of r)st(i.path,e.baseDir)&&await it(i,e.gitRoot,s,o,n);return o.length>0&&await de(e.gitRoot,s,n),{removed:o,warnings:n}}a(ft,"sweepWorkflowRunWorktrees");async function dt(e,t={}){let n=[],o=[];if(!e.gitRoot)return{removed:o,warnings:n};let s=t.runGit??at,r=t.mtimeMs??hn,i=t.now??(()=>Date.now()),c=e.maxAgeMs??pn;await de(e.gitRoot,s,n);let w=await ct(e.gitRoot,s,n);if(!w)return{removed:o,warnings:n};for(let u of w){if(!st(u.path,e.workflowRunsRoot))continue;let p;try{p=i()-r(u.path)}catch{continue}p>=c&&await it(u,e.gitRoot,s,o,n)}return o.length>0&&await de(e.gitRoot,s,n),{removed:o,warnings:n}}a(dt,"pruneStaleWorkflowWorktrees");var vn=200,lt={maxAgents:64,tokenBudget:2e5};function Sn(e,t){let n=e.meta,o=K(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}}a(Sn,"buildApprovalSummary");function ue(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}a(ue,"clampLimit");function ut(e,t,n){let o=ue(e,n),s=ue(t,n);return o===void 0?s:s===void 0?o:Math.min(o,s)}a(ut,"clampEffectiveLimit");function K(e,t){let n=ut(e.maxAgents,t?.maxAgents,lt.maxAgents),o=pe(),s=[e.maxConcurrency,t?.maxConcurrency].map(c=>ue(c,o)).filter(c=>c!==void 0),r=s.length===0?o:Math.min(o,...s),i=ut(e.tokenBudget,t?.tokenBudget,lt.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...r!==void 0?{maxConcurrency:r}:{},...i!==void 0?{tokenBudget:i}:{}}}a(K,"clampWorkflowLimits");function mt(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 s=t[o];if(typeof s=="string"&&s.trim().length>0)return s}}a(mt,"workflowResultSummary");async function me(e){let t=K(e.module.meta,e.hostPolicy),n=Sn(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let o=e.now??(()=>Date.now()),s=e.ctx?.executionCwd??e.ctx?.gitRoot;await dt({workflowRunsRoot:yn(e.runDir),gitRoot:s},{now:o,...e.worktreeSweepDeps});let r=rt(e.runDir,{now:o}),i=e.onWorkflowProcessEvent?ye({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}:{},...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:a(()=>new Date(o()).toISOString(),"now")}):void 0,c=e.scriptSnapshot?r.writeScriptSnapshot(e.scriptSnapshot):void 0,w=e.backend??xn(e),p={...e.beforeSpawn?Mn(w,e.beforeSpawn):w,writeArtifact:a(async(x,we)=>r.writeArtifact(x,we),"writeArtifact")},v=o(),h;try{h=await Se({runId:e.runId,args:e.args,backend:p,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:mt,resolveWorkflowModule:Ye(s??process.cwd()),resultCache:nt(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:a(x=>{r.onEvent(x),i&&e.onWorkflowProcessEvent?.(i.applyEvent(x)),e.onEvent?.(x)},"onEvent")},x=>e.module.run(x,e.args))}finally{await ft({baseDir:le(e.runDir),gitRoot:s},{now:o,...e.worktreeSweepDeps})}let g=h.ok?mt(h.result):void 0;return r.writeRunJson({meta:e.module.meta,args:e.args,state:h.state,startedAt:v,endedAt:o(),...c?{scriptSnapshot:c}:{},...g!==void 0?{resultSummary:g}:{},...e.processMetadata!==void 0?{processMetadata:e.processMetadata}:{}}),h.ok?{kind:"completed",result:h.result,state:h.state}:{kind:"failed",error:h.error,state:h.state}}a(me,"runWorkflowModule");function xn(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return De({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId})}a(xn,"buildBackend");function Mn(e,t){return{...e,spawn:a(async n=>(await t(),e.spawn(n)),"spawn")}}a(Mn,"withBeforeSpawn");function Rn(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})}a(Rn,"emitWorkflowAgentDigest");async function wt(e){let t={...Te({options:e.options,runtime:e.options.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),workflowWorktreeBaseDir:le(e.runDir)},n={maxIterationsPerChild:vn,parentRole:"worker",parentHarness:"tool-dispatch",parentOptions:{provider:e.options.provider,model:e.options.modelOverride??e.options.model,effort:e.options.effort,reasoningMode:e.options.reasoningMode,repoIntelligenceMode:e.options.context?.repoIntelligenceMode,repoIntelligenceTrace:e.options.context?.repoIntelligenceTrace,extensionRuntime:e.options.extensionRuntime,events:e.options.events},...e.options.guardrails?{guardrails:e.options.guardrails}:{},...t.planModeBlockCheck?{planModeBlockCheck:t.planModeBlockCheck}:{}},o=e.onWorkflowProcessEvent||e.options.events?.onWorkflowProcessEvent?r=>{e.onWorkflowProcessEvent?.(r),e.options.events?.onWorkflowProcessEvent?.(r)}:void 0,s=e.onEvent||e.options.events?.onWorkflowAgentDigest?r=>{e.onEvent?.(r),Rn(e.options.events,e.runId,r)}:void 0;return me({module:e.module,args:e.args,runId:e.runId,runDir:e.runDir,ctx:t,childOptions:n,...e.approval?{approval:e.approval}:{},...e.signal?{signal:e.signal}:{},...s?{onEvent:s}:{},...o?{onWorkflowProcessEvent:o}:{},...e.options.workflowHostPolicy?{hostPolicy:e.options.workflowHostPolicy}:{},...e.now?{now:e.now}:{},...e.scriptSnapshot?{scriptSnapshot:e.scriptSnapshot}:{},...e.resumeFromRunDir?{resumeFromRunDir:e.resumeFromRunDir}:{},...e.processMetadata?{processMetadata:e.processMetadata}:{},...e.beforeSpawn?{beforeSpawn:e.beforeSpawn}:{}})}a(wt,"runWorkflowFromOptions");function Wn(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 s=t[o];if(typeof s=="string"&&s.trim().length>0)return s}}a(Wn,"resultText");function bn(e){if(e.kind==="completed"){let t=Wn(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}a(bn,"classifyOutcome");function Tn(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,events:[],artifacts:[]}}}a(Tn,"failedOutcome");var En=1e3;function An(e={},t=xe(e)){let n=new Map,o=a(r=>r?{...r,runDir:n.get(r.runId)??""}:void 0,"withRunDir"),s=a((r,i)=>{if(n.set(r.runId,r.runDir),n.size>En){let u=new Set(t.list().map(p=>p.runId));for(let p of n.keys())p!==r.runId&&!u.has(p)&&n.delete(p)}let c=K(r.meta,r.hostPolicy),w=t.start({runId:r.runId,workflow:r.meta.name,...r.meta.phases!==void 0?{phases:r.meta.phases}:{},...c.maxAgents!==void 0?{maxAgents:c.maxAgents}:{},...r.meta.plannedAgents!==void 0?{plannedAgents:r.meta.plannedAgents}:{},...c.tokenBudget!==void 0?{tokenBudget:c.tokenBudget}:{},...r.processMetadata!==void 0?{processMetadata:r.processMetadata}:{},...r.signal?{signal:r.signal}:{},runFn:i,classify:bn,onError:a(u=>Tn(r.runId,u),"onError")});return{runId:w.runId,done:w.done,getSnapshot:a(()=>o(w.getSnapshot()),"getSnapshot"),getProcessSnapshot:a(()=>w.getProcessSnapshot(),"getProcessSnapshot")}},"startManaged");return{start:a(r=>s({runId:r.runId,runDir:r.runDir,meta:r.module.meta,hostPolicy:r.hostPolicy,processMetadata:r.processMetadata,signal:r.signal},i=>me({...r,signal:i.signal,beforeSpawn:i.beforeSpawn,onEvent:a(c=>{i.onEvent(c),r.onEvent?.(c)},"onEvent")})),"start"),startFromOptions:a(r=>s({runId:r.runId,runDir:r.runDir,meta:r.module.meta,hostPolicy:r.options.workflowHostPolicy,processMetadata:r.processMetadata,signal:r.signal},i=>wt({...r,signal:i.signal,beforeSpawn:i.beforeSpawn,onEvent:a(c=>{i.onEvent(c),r.onEvent?.(c)},"onEvent")})),"startFromOptions"),list:a(()=>t.list().map(r=>({...r,runDir:n.get(r.runId)??""})),"list"),get:a(r=>o(t.get(r)),"get"),subscribeWorkflowProcess:a(r=>t.subscribeWorkflowProcess(r),"subscribeWorkflowProcess"),getWorkflowProcessSnapshot:a(r=>t.getWorkflowProcessSnapshot(r),"getWorkflowProcessSnapshot"),listWorkflowProcessSnapshots:a(r=>t.listWorkflowProcessSnapshots(r),"listWorkflowProcessSnapshots"),pause:a(r=>t.pause(r),"pause"),resume:a(r=>t.resume(r),"resume"),stop:a((r,i)=>t.stop(r,i),"stop")}}a(An,"createWorkflowRunManager");var pt;function jr(){return pt??=An({},Me()),pt}a(jr,"getDefaultWorkflowRunManager");export{De as a,_e as b,qe as c,je as d,Kn as e,D as f,Gt as g,ce as h,Je as i,Jt as j,Zn as k,Qn as l,er as m,tr as n,nr as o,rr as p,fn as q,rt as r,lt as s,Sn as t,K as u,me as v,Rn as w,wt as x,An as y,jr as z};
|