@kodax-ai/kodax 0.7.66 → 0.7.68
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 +180 -3
- package/README.md +51 -16
- package/README_CN.md +34 -13
- package/dist/chunks/agent-DATNZOBK.js +2 -0
- package/dist/chunks/argument-completer-X7MMM7Y6.js +2 -0
- package/dist/chunks/chunk-5GL55MOH.js +36 -0
- package/dist/chunks/chunk-67XJ4YUA.js +703 -0
- package/dist/chunks/chunk-C4SBXBWH.js +346 -0
- package/dist/chunks/{chunk-ALS32RNZ.js → chunk-CC4BVVE7.js} +9 -9
- package/dist/chunks/{chunk-VS4CDDEF.js → chunk-CTHUX5ZH.js} +221 -221
- package/dist/chunks/{chunk-YRBNXFHY.js → chunk-HFM2D5BP.js} +1 -1
- package/dist/chunks/chunk-HLBHSA2B.js +325 -0
- package/dist/chunks/{chunk-O7N22GJ3.js → chunk-K2NCKRVY.js} +16 -14
- package/dist/chunks/chunk-KGAI32VS.js +22 -0
- package/dist/chunks/{chunk-QAQ2HNXD.js → chunk-KIQRCGVR.js} +126 -112
- package/dist/chunks/chunk-MP52BDK5.js +15 -0
- package/dist/chunks/chunk-O5OJQFPY.js +307 -0
- package/dist/chunks/chunk-OIELNE6Z.js +56 -0
- package/dist/chunks/chunk-PEGSHZAA.js +5 -0
- package/dist/chunks/chunk-TOGESFRN.js +2 -0
- package/dist/chunks/compaction-config-BXEDHIQP.js +2 -0
- package/dist/chunks/{construction-bootstrap-3XDS2D5K.js → construction-bootstrap-PYWJHO35.js} +1 -1
- package/dist/chunks/dist-76PJHNSG.js +2 -0
- package/dist/chunks/{dist-4PXB7U22.js → dist-HTDJRAD6.js} +1 -1
- package/dist/chunks/host-UAXIDZ6V.js +2 -0
- package/dist/chunks/run-manager-UCXB4G22.js +2 -0
- package/dist/chunks/utils-S63V5UCM.js +2 -0
- package/dist/index.d.ts +19 -16
- package/dist/index.js +6 -6
- package/dist/kodax_cli.js +1292 -1255
- package/dist/runtime-worker.js +1196 -1153
- package/dist/sdk-agent.d.ts +143 -18
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +281 -20
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +618 -0
- package/dist/sdk-experimental-memory.js +2 -0
- package/dist/sdk-llm.d.ts +6 -6
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-repl.d.ts +26 -17
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +102 -14
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-session.d.ts +6 -6
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +12 -12
- package/dist/types-chunks/{base.d-DalIRhbb.d.ts → base.d-C8mXDhLL.d.ts} +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-BjkITAva.d.ts → bash-prefix-extractor.d-Dm-T865v.d.ts} +67 -12
- package/dist/types-chunks/{capability-learning.d-BQB0M70w.d.ts → capability-learning.d-BLEmCib0.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-hVhPNkHd.d.ts → capsule.d-CzaamUUv.d.ts} +5 -5
- package/dist/types-chunks/{commands.d-C3B1TdGM.d.ts → commands.d-DxKjVSNU.d.ts} +4 -4
- package/dist/types-chunks/{guardrail.d-wk-s0psS.d.ts → guardrail.d-CPDfZyJp.d.ts} +3 -3
- package/dist/types-chunks/{guardrail.d-C_Siraua.d.ts → guardrail.d-D7r6zVSR.d.ts} +1 -1
- package/dist/types-chunks/{public-api.d-jtREVfEq.d.ts → public-api.d-BcKbBy1E.d.ts} +12 -7
- package/dist/types-chunks/{resolver.d-CGkfRULj.d.ts → resolver.d-DmBnoilY.d.ts} +2 -2
- package/dist/types-chunks/{run-manager.d-CFknOfo1.d.ts → run-manager.d-CSj7_kWk.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-CLqyfAmf.d.ts → sdk-session-C6nDgyh8.d.ts} +4 -4
- package/dist/types-chunks/{types.d-Bp4Lm1jv.d.ts → types.d-CO_ZkmOd.d.ts} +6 -1
- package/dist/types-chunks/{types.d-CUN_bZU7.d.ts → types.d-CzscbsG0.d.ts} +4 -4
- package/dist/types-chunks/{process.d-CY2g03Mb.d.ts → types.d-D2frCRaY.d.ts} +505 -10
- package/dist/types-chunks/{types.d-BMLxKV69.d.ts → types.d-D9FKbAmf.d.ts} +2 -2
- package/dist/types-chunks/{utils.d-C1rpoeDh.d.ts → utils.d-DOXxnOnI.d.ts} +9 -5
- package/docs/SDK_EMBEDDER_GUIDE.md +3179 -0
- package/package.json +6 -1
- package/dist/chunks/agent-KER4WDNO.js +0 -2
- package/dist/chunks/argument-completer-HK3MHA3K.js +0 -2
- package/dist/chunks/chunk-3HKBBY74.js +0 -339
- package/dist/chunks/chunk-AKBH2EEE.js +0 -8
- package/dist/chunks/chunk-MHRN2LQV.js +0 -328
- package/dist/chunks/chunk-NBQW7PNZ.js +0 -18
- package/dist/chunks/chunk-QJVZZSEO.js +0 -56
- package/dist/chunks/chunk-TLJGOKBT.js +0 -729
- package/dist/chunks/chunk-WBBEJIAY.js +0 -306
- package/dist/chunks/chunk-WMIZCY2J.js +0 -2
- package/dist/chunks/compaction-config-7GMUFNPB.js +0 -2
- package/dist/chunks/dist-4YAYT2TO.js +0 -2
- package/dist/chunks/host-KG3456QP.js +0 -2
- package/dist/chunks/run-manager-6CAH3KTA.js +0 -2
- package/dist/chunks/utils-OT5ENFUL.js +0 -2
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{Db as Te,Eb as X,Fb as Ee,Gb as Ae,Ia as We,Nc as Pe,Oc as Oe}from"./chunk-3HKBBY74.js";import{N as ge}from"./chunk-O7N22GJ3.js";import{Be as Me,Ce as Re,De as be,_a as G,ee as ve,fe as Se,he as F,ib as ye,le as z,re as J,se as W,te as H,ue as xe}from"./chunk-TLJGOKBT.js";import{B as ke}from"./chunk-PZTG2C33.js";import{a}from"./chunk-ONUPGMER.js";import{basename as bn,dirname as Wn}from"node:path";import{execFile as yt}from"node:child_process";import j from"node:path";import{promisify as vt}from"node:util";var St=vt(yt),xt=1e4,De=2,Fe=new Set(["write","edit","multi_edit","insert_after_anchor"]),Mt=/^\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 Rt(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(Rt,"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 bt(e,t){let n=t.gitRoot?j.resolve(t.gitRoot):void 0,o=j.isAbsolute(e)&&n?j.relative(n,j.resolve(e)):e;return T(o)}a(bt,"normalizeRequiredPath");function Wt(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(Wt,"resolveVerificationForInput");function Tt(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}}a(Tt,"resolveSpawnAgentInput");function _e(e){let t=e.trim();return t.length>0&&Mt.test(t)}a(_e,"isPreparatoryOnlyText");function Et(e,t){let n=e.trim(),o=t?.trim();return o&&(n.length===0||_e(n))?o:e}a(Et,"selectWorkflowFinalText");async function B(e,t){return(await St("git",[...e],{cwd:t,timeout:xt,windowsHide:!0,maxBuffer:4194304})).stdout.toString()}a(B,"runGit");async function At(e){let t=e.gitRoot??e.executionCwd??process.cwd(),n=(await B(["rev-parse","--show-toplevel"],t)).trim(),o=await Promise.all([B(["diff","--name-only","--"],n),B(["diff","--cached","--name-only","--"],n),B(["ls-files","--others","--exclude-standard"],n)]);return[...new Set(o.flatMap(i=>i.split(/\r?\n/)).map(T).filter(i=>i.length>0))]}a(At,"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 Pt(){return{toolNameById:new Map,toolPathById:new Map,succeededToolCalls:[],succeededPaths:[]}}a(Pt,"createMutationRecorder");function Ot(e){if(e)for(let t of["path","file_path","target_path"]){let n=e[t];if(typeof n=="string"&&n.trim().length>0)return T(n)}}a(Ot,"readMutationPath");function Ft(e,t){return{...e??{},onToolUseStart:a((n,o)=>{if(Fe.has(n.name)){t.toolNameById.set(n.id,n.name);let i=Ot(n.input);i!==void 0&&t.toolPathById.set(n.id,i)}e?.onToolUseStart?.(n,o)},"onToolUseStart"),onToolResult:a((n,o)=>{let i=t.toolNameById.get(n.id)??n.name;if(Fe.has(i)&&!n.content.trimStart().startsWith("[Tool Error]")){t.succeededToolCalls.push(i);let r=t.toolPathById.get(n.id);r!==void 0&&t.succeededPaths.push(r)}e?.onToolResult?.(n,o)},"onToolResult")}}a(Ft,"wrapEventsForMutationRecording");function Q(e){return[...new Set(e.filter(t=>t.trim().length>0))]}a(Q,"uniqueItems");function Ie(e){let t=e.verification;if(!t)return;let n=[],o=new Set(e.before.paths.map(T)),i=Q(e.after.paths.map(T)),r=i.filter(m=>!o.has(m)),s=Q(e.mutationRecorder.succeededToolCalls),c=e.acceptToolMutationEvidence?s:[],p=e.acceptToolMutationEvidence?Q(e.mutationRecorder.succeededPaths.map(T)):[],l=r.length>0||c.length>0,h=t.enforcement??"hard",v=(t.requiredChangedPaths??[]).map(m=>bt(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}`):l||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&&!l&&n.push("workflow child reached its iteration limit before satisfying the task");for(let m of v)!i.includes(m)&&!p.includes(m)&&n.push(`required changed path was not present in workspace changes: ${m}`);let k=t.minFinalTextChars;return k!==void 0&&!l&&e.term.finalText.trim().length<k&&n.push(`finalText was shorter than the required ${k} characters`),t.rejectPreparatoryFinalText===!0&&!l&&_e(e.term.finalText)&&n.push("finalText looks preparatory instead of terminal"),{ok:n.length===0,enforcement:h,reasons:n,changedPaths:i,mutationToolCalls:s,mutationEvidence:l}}a(Ie,"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(i=>`- ${i}`)].join(`
|
|
3
|
-
`);return e.trim().length>0?`${e}
|
|
4
|
-
|
|
5
|
-
${o}`:o}a(ee,"appendVerificationFailure");function Ce(){return{ok:!1,enforcement:"warn",reasons:["workflow child reached its iteration limit before satisfying the task"],mutationEvidence:!1}}a(Ce,"limitReachedWarningVerification");function It(e){return e.entry.bundle.readOnly!==!0&&e.entry.repairAttempts<De&&e.term.status==="completed"&&e.verification!==void 0&&e.verification.ok!==!0&&e.verification.enforcement!=="warn"}a(It,"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}/${De}.`,"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 $e(e,t,n,o,i=n){if(n===void 0)return e;let r;try{return await Promise.race([e,new Promise((s,c)=>{r=setTimeout(()=>{o.childAbortControllers?.get(t)?.abort(),c(new Error(`workflow task ${t} timed out after ${i??n}ms`))},n)})])}finally{r&&clearTimeout(r)}}a($e,"waitForChildPromise");function Ne(e,t,n){return t.outputSchema!==void 0&&We(t.outputSchema),Oe(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(Ne,"buildBundle");function te(e,t){if(e.cancelledChildren.includes(t))return{status:"stopped",snapStatus:"aborted",finalText:""};let n=e.results[0],o=Et(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 qe(e){let{ctx:t,childOptions:n}=e,o=e.runChild??Pe,i=e.queue??ke(),r=e.listChangedFiles??At,s=e.now??(()=>Date.now()),c=0,p=e.generateId??(()=>`wf-child-${c+=1}`),l=new Map,h=new Set,v=new Map,k=a(()=>e.onTaskSummary!==void 0||h.size>0,"hasTaskSummaryObservers"),m=a((d,g)=>{try{e.onTaskSummary?.(d,g)}catch{}for(let f of h)try{f(d,g)}catch{}},"notifyTaskSummary");return{spawn:a(async d=>{let g=Tt(d,e.defaultChildReadOnly),f=p(),S=Ne(f,g,new Set(l.keys())),O=Wt(g).verification,R=Pt(),D=g.isolation!=="worktree",u=Y(O)?Z(t,r):Promise.resolve({paths:[]}),w=t.childProgressSnapshots,x=a(async A=>{let he=new AbortController;t.childAbortControllers?.set(f,he),w&&Te(w,{childId:f,startedAt:s(),maxIterations:n.maxIterationsPerChild,parentRole:n.parentRole,readOnly:A.readOnly,specialistName:A.specialistName});let kt={...n,parentOptions:{...n.parentOptions,events:Ft(n.parentOptions.events,R)},maxParallel:1,workflowChild:!0,...e.runId!==void 0?{workflowCorrelation:{workflowRunId:e.runId,childAgentId:f,itemId:`agent:${f}`}}:{},childActivityName:g.name,workflowDigestMode:k()?"async":"blocking",...k()?{onWorkflowChildDigest:a(y=>{m(y.childId,{...y.digest?{summary:y.digest}:{},summaryKind:y.digest?"digest":"digest-failed",...y.totalTokensUsed>0?{usage:{totalTokens:y.totalTokensUsed}}:{}})},"onWorkflowChildDigest")}:{},abortSignal:he.signal,snapshotUpdater:w?y=>Ee(w,f,y):void 0},q;try{return await u,q=await o([A],t,kt),q}finally{if(t.childAbortControllers?.delete(f),w){let y=q?te(q,f):{snapStatus:"failed",finalText:""};X(w,f,{status:y.snapStatus,finalText:y.finalText,endedAt:s()})}}},"runBundle"),_=x(S);return l.set(f,{name:g.name,input:g,bundle:S,promise:_,runBundle:x,verification:O,changedPathBaseline:u,mutationRecorder:R,acceptToolMutationEvidence:D,repairAttempts:0}),G(v,f,_),{taskId:f,name:g.name}},"spawn"),wait:a(async(d,g)=>{let f=l.get(d);if(!f)throw new Error(`unknown workflow task: ${d}`);let S=Rt(g),pe=Date.now(),O=a(async x=>{if(S===void 0)return $e(x,d,void 0,t);let _=Date.now()-pe,A=S-_;if(A<=0)throw t.childAbortControllers?.get(d)?.abort(),new Error(`workflow task ${d} timed out after ${S}ms`);return $e(x,d,Math.max(1,Math.floor(A)),t,S)},"waitForAttempt"),R=await O(f.promise),D=R.totalTokensUsed,u=te(R,d),w=f.verification?Ie({verification:f.verification,term:u,before:await f.changedPathBaseline,after:Y(f.verification)?await Z(t,r):{paths:[]},mutationRecorder:f.mutationRecorder,ctx:t,acceptToolMutationEvidence:f.acceptToolMutationEvidence}):void 0;for(u.limitReached===!0&&w===void 0&&u.status==="completed"&&(w=Ce(),u={...u,status:"completed_unverified",snapStatus:"completed",finalText:ee(u.finalText,w)});It({entry:f,term:u,verification:w});){f.repairAttempts+=1;let x=Ne(d,{...f.input,prompt:Ct({originalPrompt:f.input.prompt,previousFinalText:u.finalText,verification:w,attempt:f.repairAttempts})});f.promise=f.runBundle(x),G(v,d,f.promise),R=await O(f.promise),D+=R.totalTokensUsed,u=te(R,d),w=f.verification?Ie({verification:f.verification,term:u,before:await f.changedPathBaseline,after:Y(f.verification)?await Z(t,r):{paths:[]},mutationRecorder:f.mutationRecorder,ctx:t,acceptToolMutationEvidence:f.acceptToolMutationEvidence}):void 0,u.limitReached===!0&&w===void 0&&u.status==="completed"&&(w=Ce(),u={...u,status:"completed_unverified",snapStatus:"completed",finalText:ee(u.finalText,w)})}if(w!==void 0&&!w.ok&&u.status==="completed"){let x=w.enforcement==="warn";u={...u,status:x?"completed_unverified":"failed",snapStatus:x?"completed":"failed",finalText:ee(u.finalText,w)}}return X(t.childProgressSnapshots,d,{status:u.snapStatus,finalText:u.finalText,endedAt:s()}),{taskId:d,name:f.name,status:u.status,finalText:u.finalText,...u.digest?{digest:u.digest}:{},...u.digestFailed?{digestFailed:!0}:{},...u.digestPending?{digestPending:!0}:{},...w!==void 0?{verification:w}:{},...u.limitReached?{limitReached:!0}:{},...u.provider?{provider:u.provider}:{},...u.model?{model:u.model}:{},...u.structured!==void 0?{structured:u.structured}:{},usage:{totalTokens:D}}},"wait"),output:a(async d=>{if(!l.has(d))throw new Error(`unknown workflow task: ${d}`);let g=l.get(d)?.name??d,f=t.childProgressSnapshots?.get(d);if(!f)return{taskId:d,name:g,status:"running"};let S=f.status==="aborted"?"stopped":f.status;return f.finalText!==void 0?{taskId:d,name:g,status:S,lastText:f.finalText}:{taskId:d,name:g,status:S}},"output"),send:a(async(d,g)=>{if(!l.has(d))throw new Error(`unknown workflow task: ${d}`);ye({to:d,priority:"user",mode:"prompt",content:g,registry:v,queue:i})},"send"),stop:a(async d=>{if(!l.has(d))throw new Error(`unknown workflow task: ${d}`);t.childAbortControllers?.get(d)?.abort()},"stop"),subscribeTaskSummaryUpdates:a(d=>(h.add(d),()=>{h.delete(d)}),"subscribeTaskSummaryUpdates")}}a(qe,"createCodingWorkflowBackend");import{homedir as sn}from"node:os";import{join as Ze}from"node:path";var $t=["structure, entry points, and control flow","edge cases, error handling, and failure modes","tests, validation, and existing coverage"],Nt="Deduplicate overlapping findings, keep concrete evidence (file:line), rank by relevance to the question, and explicitly note gaps left by any failed investigation.",Dt={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 _t(e){if(e!==null&&typeof e=="object"&&"finding"in e){let t=e.finding;if(typeof t=="string"&&t.trim().length>0)return t}}a(_t,"readStructuredFinding");function qt(e){let t=_t(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]"}a(qt,"pickFindingText");function jt(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(jt,"buildInvestigatorPrompt");function Bt(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,i)=>({name:`investigate-${i+1}`,prompt:jt(e.question,o)}))}a(Bt,"resolveAngles");async function Lt(e,t){try{let n=await e.runAgent({name:t.name,prompt:t.prompt,readOnly:!0,outputSchema:Dt});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:qt(n)}}catch(n){let o=n instanceof Error?n.message:String(n);return{angle:t.name,status:"failed",text:`[investigation failed] ${o}`}}}a(Lt,"investigate");async function Ut(e,t){let n=Bt(t),o=(await e.phase("investigate",()=>e.parallel(n.map(s=>()=>Lt(e,s)),t.maxConcurrency!==void 0?{concurrency:t.maxConcurrency}:void 0))).filter(s=>s!==null),i=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??Nt}))).text,findings:o,degraded:i}}a(Ut,"runParallelInvestigation");var je={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:Ut};function Vt(e){return{meta:e.meta,run:a((t,n)=>e.run(t,n),"run")}}a(Vt,"erase");var Be=[Vt(je)];function Le(e){return Be.find(t=>t.meta.name===e)}a(Le,"getBuiltinWorkflow");function Qn(){return Be.map(e=>e.meta)}a(Qn,"listBuiltinWorkflows");import{mkdir as ze,readdir as Kt,readFile as I,rename as Gt,unlink as oe,writeFile as ae}from"node:fs/promises";import{basename as zt,dirname as re,join as E}from"node:path";import{pathToFileURL as Jt}from"node:url";var Je=[".workflow.json",".ts",".mjs",".js"],C="0.7.49";function He(){return"0.7.66"}a(He,"currentKodaxWorkflowVersion");function Ht(e){return e.endsWith(".workflow.json")?"capability-generated":"trusted-local"}a(Ht,"executionForPath");function Xt(e){let t=Je.find(n=>e.endsWith(n));return t?e.slice(0,-t.length):void 0}a(Xt,"stripWorkflowSuffix");function ie(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(ie,"safeWorkflowName");function se(e){return typeof e=="object"&&e!==null}a(se,"isRecord");function Ue(e,t){let n=e[t];if(typeof n!="string"||n.length===0)throw new Error(`workflow run.json missing ${t}`);return n}a(Ue,"readRequiredString");async function Ve(e,t){if(!e)return[];let n;try{n=await Kt(e)}catch{return[]}let o=new Map;for(let i of Je)for(let r of n){if(!r.endsWith(i))continue;let s=Xt(r);if(!s||s.length===0||o.has(s))continue;let c=E(e,r);o.set(s,{name:s,path:c,source:t,execution:Ht(c)})}return[...o.values()]}a(Ve,"scanDir");async function $(e){let t=await Ve(e.personal,"personal"),n=await Ve(e.project,"project"),o=new Map;for(let i of t)o.set(i.name,i);for(let i of n)o.set(i.name,i);return[...o.values()].sort((i,r)=>i.name.localeCompare(r.name))}a($,"discoverSavedWorkflows");function Yt(e){return typeof e=="object"&&e!==null&&"meta"in e&&"run"in e&&typeof e.run=="function"}a(Yt,"isWorkflowModule");function Zt(e){let t=e.default;if(Yt(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(Zt,"normalizeWorkflowModule");function Qt(e){let t=JSON.parse(e);if(!se(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 i=J(t);return{manifest:i.manifest,source:i.source,capsule:i,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:W({minKodaxVersion:C,manifest:o,source:n}),legacy:!0}}a(Qt,"parseGeneratedWorkflowFile");async function ce(e){let t=Qt(await I(e,"utf8"));return t.capsule??W({minKodaxVersion:C,manifest:t.manifest,source:t.source})}a(ce,"loadSavedWorkflowCapsule");async function Xe(e){if(e.endsWith(".workflow.json"))return H(await ce(e));let t=await import(Jt(e).href);return Zt(t)}a(Xe,"loadSavedWorkflow");function fe(e){if(e.mayUseWorktree===!0)return{environment:["git-repo","worktree-capable"]}}a(fe,"deriveRequirements");function L(e,t){z(t,{filename:`${e.name}.workflow.js`,requireAsyncRun:!0})}a(L,"assertGeneratedCapsuleSource");async function en(e){let t=ie(e.name),n=F(e.manifest);L(n,e.source);let o=e.requires??fe(n),i=W({minKodaxVersion:e.minKodaxVersion??C,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 ze(e.dir,{recursive:!0});let r=E(e.dir,`${t}.workflow.json`);return await ae(r,`${JSON.stringify(i,null,2)}
|
|
13
|
-
`,"utf8"),{name:t,path:r,source:"project",execution:"capability-generated"}}a(en,"saveGeneratedWorkflow");async function Ke(e,t){await ae(e,`${JSON.stringify(t,null,2)}
|
|
14
|
-
`,"utf8")}a(Ke,"writeCapsuleFile");async function tn(e){try{return await I(e,"utf8"),!0}catch{return!1}}a(tn,"fileExists");async function ir(e){let t=(await $(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=ie(e.newName),i=E(re(n.path),`${o}.workflow.json`);if(i!==n.path&&await tn(i))throw new Error(`saved workflow already exists: ${o}`);let r=await ce(n.path);L(r.manifest,r.source);let s=W({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(i,`${JSON.stringify(s,null,2)}
|
|
15
|
-
`,"utf8"),i!==n.path&&await oe(n.path),{name:o,path:i,source:n.source,execution:"capability-generated"}}a(ir,"renameSavedWorkflow");async function sr(e){let t=(await $(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(sr,"deleteSavedWorkflow");async function cr(e){let t=ie(e.name),n=(await $(e.dirs)).filter(m=>m.name===t).filter(m=>e.savedSource===void 0||m.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 i=F({...e.manifest,name:t});L(i,e.source);let r=e.requires??fe(i),s=W({minKodaxVersion:e.minKodaxVersion??C,manifest:i,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),p=new Date().toISOString().replace(/[:.]/g,"-"),l=E(re(o.path),".revisions",t),h=`${p}-${process.hrtime.bigint().toString(36)}`,v=E(l,`${t}-${h}.workflow.json`),k=E(re(o.path),`.${t}.${process.pid}.${Date.now().toString(36)}.tmp`);await ze(l,{recursive:!0}),await Ke(v,c);try{await Ke(k,s),await Gt(k,o.path)}catch(m){try{await oe(k)}catch{}throw m}return{name:t,path:o.path,source:o.source,execution:"capability-generated",previousPath:v}}a(cr,"replaceSavedWorkflow");function nn(e){if(!se(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(nn,"readOptionalOriginalRequest");function Ye(e){return rn(e)}a(Ye,"buildCapsuleFromRun");async function rn(e){let t=JSON.parse(await I(E(e.runDir,"run.json"),"utf8"));if(!se(t))throw new Error("workflow run.json must be an object");let n=Ue(t,"scriptSnapshotPath"),o=Ue(t,"manifestSnapshotPath"),i=await I(n,"utf8"),r=F(JSON.parse(await I(o,"utf8")));L(r,i);let s=typeof t.runId=="string"&&t.runId.length>0?t.runId:zt(e.runDir),c=nn(t.args),p=fe(r),l=xe(r,c!==void 0?{originalRequest:c}:{}),h={description:"Provide new workflow args matching the generated request shape.",..."args"in t?{examples:[t.args]}:{}};return W({minKodaxVersion:C,manifest:r,source:i,intent:l,inputs:h,...p!==void 0?{requires:p}:{},provenance:{fromRunId:s,createdAt:new Date().toISOString(),kodaxVersion:He()}})}a(rn,"readCapsuleFromRun");async function fr(e){let t=await Ye(e);return{capsule:t,module:H(t)}}a(fr,"loadGeneratedWorkflowFromRun");async function dr(e){let t=await Ye(e);return en({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(dr,"saveGeneratedWorkflowFromRun");function b(e,t,n,o){e.push({severity:t,requirement:n,message:o})}a(b,"addRequirementIssue");function Ge(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(e.trim());if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}a(Ge,"parseSemver");function on(e,t){for(let n=0;n<3;n+=1){let o=e[n]-t[n];if(o!==0)return o}return 0}a(on,"compareSemver");function an(e,t,n){let o=Ge(t),i=Ge(n);if(!o){b(e,"error","kodax:min-version",`workflow minKodaxVersion is not valid semver: ${t}`);return}if(!i){b(e,"warning","kodax:min-version",`cannot verify workflow minKodaxVersion ${t}; current version is unknown`);return}on(i,o)<0&&b(e,"error","kodax:min-version",`workflow requires KodaX >= ${t}, current version is ${n}`)}a(an,"addMinVersionIssue");function ne(e,t,n,o){if(!n)return;if(!o){for(let r of n)b(e,"warning",`${t}:${r}`,`workflow requires ${t}:${r}, but no ${t} inventory was provided`);return}let i=new Set(o);for(let r of n)i.has(r)||b(e,"error",`${t}:${r}`,`missing required workflow ${t}: ${r}`)}a(ne,"addMissingItems");function ur(e,t={}){let n=J(e),o=[],i=n.requires;an(o,n.minKodaxVersion,t.kodaxVersion??He()),i?.environment?.includes("git-repo")&&t.isGitRepo===!1&&b(o,"error","environment:git-repo","workflow requires a git repository"),i?.environment?.includes("worktree-capable")&&t.worktreeCapable===!1&&b(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 s=r instanceof Error?r.message:String(r);b(o,"error","workflow:source",s)}return ne(o,"tools",i?.tools,t.availableTools),ne(o,"mcp",i?.mcp,t.availableMcp),ne(o,"skills",i?.skills,t.availableSkills),{ok:!o.some(r=>r.severity==="error"),issues:o}}a(ur,"preflightWorkflowCapsule");function cn(e){return{project:Ze(e,".kodax","workflows"),personal:Ze(sn(),".kodax","workflows")}}a(cn,"defaultSavedWorkflowDirs");async function fn(e,t){let o=(await $(t)).find(i=>i.name===e);if(o)return Xe(o.path)}a(fn,"resolveSavedByName");function Qe(e){let t=cn(e);return async n=>Le(n)??await fn(n,t)}a(Qe,"createNestedWorkflowResolver");import{existsSync as dn,mkdirSync as un,readFileSync as ln,writeFileSync as et}from"node:fs";import{join as N}from"node:path";var tt="results";function nt(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_")}a(nt,"safeKey");function rt(e,t){let n=N(e,t);if(dn(n))try{return JSON.parse(ln(n,"utf8"))}catch{return}}a(rt,"readResult");function ot(e,t={}){let n=N(e,tt);un(n,{recursive:!0});let o=t.readFrom?N(t.readFrom,tt):void 0;return{get:a(i=>{let r=`${nt(i)}.json`,s=rt(n,r);if(s!==void 0)return s;if(o===void 0)return;let c=rt(o,r);if(c!==void 0){try{et(N(n,r),JSON.stringify(c),"utf8")}catch{}return c}},"get"),set:a((i,r)=>{try{et(N(n,`${nt(i)}.json`),JSON.stringify(r),"utf8")}catch{}},"set")}}a(ot,"createFsResultCache");import{mkdirSync as mn,appendFileSync as wn,writeFileSync as U}from"node:fs";import{join as P}from"node:path";function pn(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,120);return t.length>0?t:"artifact"}a(pn,"safeWorkflowArtifactName");function at(e,t={}){let n=t.now??(()=>Date.now()),o=P(e,"artifacts");mn(o,{recursive:!0});let i=P(e,"events.jsonl");return{runDir:e,onEvent:a(r=>{wn(i,`${JSON.stringify({...r,ts:n()})}
|
|
16
|
-
`,"utf8")},"onEvent"),writeArtifact:a((r,s)=>{let c=P(o,`${pn(r)}.json`);return U(c,JSON.stringify(s,null,2),"utf8"),{name:r,path:c}},"writeArtifact"),writeScriptSnapshot:a(r=>{let s=P(e,"script.js");if(U(s,r.source,"utf8"),!r.manifest)return{scriptPath:s};let c=P(e,"manifest.json");return U(c,`${JSON.stringify(r.manifest,null,2)}
|
|
17
|
-
`,"utf8"),{scriptPath:s,manifestPath:c}},"writeScriptSnapshot"),writeRunJson:a(r=>{let s=ve(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(p=>p.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}:{},...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}:{}}:{}};U(P(e,"run.json"),`${JSON.stringify(c,null,2)}
|
|
18
|
-
`,"utf8")},"writeRunJson")}}a(at,"createRunGraphWriter");import{execFile as hn}from"node:child_process";import{promisify as gn}from"node:util";import{statSync as kn}from"node:fs";import{join as yn}from"node:path";var vn=gn(hn);function ue(e){return yn(e,"worktrees")}a(ue,"workflowWorktreeBaseDir");var Sn=360*60*1e3;function st(e,t){return vn("git",[...e],{cwd:t}).then(n=>n.stdout)}a(st,"defaultRunGit");function xn(e){return kn(e).mtimeMs}a(xn,"defaultMtimeMs");function Mn(e){let t=[],n,o,i=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 ")?(i(),n=r.slice(9).trim()):r.startsWith("branch ")&&(o=r.slice(7).trim().replace(/^refs\/heads\//,""));return i(),t}a(Mn,"parseWorktreeList");function it(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}a(it,"normalize");function ct(e,t){let n=it(e),o=it(t);return n===o||n.startsWith(`${o}/`)}a(ct,"isUnder");async function Rn(e,t,n){try{let i=(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),s=Number.parseInt(r.trim(),10)||0;return i>0||s>0}catch(o){return n.push(`retain ${e.path}: cannot verify worktree cleanliness: ${o instanceof Error?o.message:String(o)}`),!0}}a(Rn,"worktreeHasChanges");async function ft(e,t,n,o,i){if(await Rn(e,n,i)){i.push(`retain ${e.path}: worktree has unmerged changes`);return}try{await n(["worktree","remove",e.path,"--force"],t),o.push(e.path)}catch(r){i.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(ft,"removeWorktree");async function dt(e,t,n){try{let o=await t(["worktree","list","--porcelain"],e);return Mn(o)}catch(o){n.push(`list worktrees: ${o instanceof Error?o.message:String(o)}`);return}}a(dt,"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 ut(e,t={}){let n=[],o=[];if(!e.gitRoot)return{removed:o,warnings:n};let i=t.runGit??st,r=await dt(e.gitRoot,i,n);if(!r)return{removed:o,warnings:n};for(let s of r)ct(s.path,e.baseDir)&&await ft(s,e.gitRoot,i,o,n);return o.length>0&&await de(e.gitRoot,i,n),{removed:o,warnings:n}}a(ut,"sweepWorkflowRunWorktrees");async function lt(e,t={}){let n=[],o=[];if(!e.gitRoot)return{removed:o,warnings:n};let i=t.runGit??st,r=t.mtimeMs??xn,s=t.now??(()=>Date.now()),c=e.maxAgeMs??Sn;await de(e.gitRoot,i,n);let p=await dt(e.gitRoot,i,n);if(!p)return{removed:o,warnings:n};for(let l of p){if(!ct(l.path,e.workflowRunsRoot))continue;let h;try{h=s()-r(l.path)}catch{continue}h>=c&&await ft(l,e.gitRoot,i,o,n)}return o.length>0&&await de(e.gitRoot,i,n),{removed:o,warnings:n}}a(lt,"pruneStaleWorkflowWorktrees");var Tn=200,mt={maxAgents:64,tokenBudget:2e5};function En(e,t){let n=e.meta,o=V(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(En,"buildApprovalSummary");function le(e,t){if(e!==void 0)return!Number.isInteger(e)||e<=0?1:Math.min(e,t)}a(le,"clampLimit");function An(e,t,n){let o=le(e,n),i=le(t,n);return o===void 0?i:i===void 0?o:Math.min(o,i)}a(An,"clampEffectiveLimit");function wt(e,t){if(!(e==null||!Number.isFinite(e)||e<=0))return Math.min(Math.floor(e),t)}a(wt,"clampTokenBudget");function Pn(e,t,n){let o=wt(e,n),i=wt(t,n);return o===void 0?i:i===void 0?o:Math.min(o,i)}a(Pn,"clampEffectiveTokenBudget");function V(e,t){let n=An(e.maxAgents,t?.maxAgents,mt.maxAgents),o=ge(),i=[e.maxConcurrency,t?.maxConcurrency].map(c=>le(c,o)).filter(c=>c!==void 0),r=i.length===0?o:Math.min(o,...i),s=Pn(e.tokenBudget,t?.tokenBudget,mt.tokenBudget);return{...n!==void 0?{maxAgents:n}:{},...r!==void 0?{maxConcurrency:r}:{},...s!==void 0?{tokenBudget:s}:{}}}a(V,"clampWorkflowLimits");function pt(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 i=t[o];if(typeof i=="string"&&i.trim().length>0)return i}}a(pt,"workflowResultSummary");async function me(e){let t=V(e.module.meta,e.hostPolicy),n=En(e.module,e.hostPolicy);if(e.approval&&!await e.approval(n))return{kind:"denied",summary:n};let o=e.now??(()=>Date.now()),i=e.ctx?.executionCwd??e.ctx?.gitRoot;await lt({workflowRunsRoot:Wn(e.runDir),gitRoot:i},{now:o,...e.worktreeSweepDeps});let r=at(e.runDir,{now:o}),s=e.resumeFromRunDir!==void 0?bn(e.resumeFromRunDir):void 0,c=e.onWorkflowProcessEvent?Se({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:a(()=>new Date(o()).toISOString(),"now")}):void 0,p=e.scriptSnapshot?r.writeScriptSnapshot(e.scriptSnapshot):void 0,l=e.backend??On(e),v={...e.beforeSpawn?Fn(l,e.beforeSpawn):l,writeArtifact:a(async(M,we)=>r.writeArtifact(M,we),"writeArtifact")},k=o(),m;try{m=await Me({runId:e.runId,args:e.args,backend:v,limits:t,...e.signal?{signal:e.signal}:{},summarizeResult:pt,resolveWorkflowModule:Qe(i??process.cwd()),resultCache:ot(e.runDir,e.resumeFromRunDir?{readFrom:e.resumeFromRunDir}:{}),onEvent:a(M=>{r.onEvent(M),c&&e.onWorkflowProcessEvent?.(c.applyEvent(M)),e.onEvent?.(M)},"onEvent")},M=>e.module.run(M,e.args))}finally{await ut({baseDir:ue(e.runDir),gitRoot:i},{now:o,...e.worktreeSweepDeps})}let K=m.ok?pt(m.result):void 0;return r.writeRunJson({meta:e.module.meta,args:e.args,state:m.state,startedAt:k,endedAt:o(),...p?{scriptSnapshot:p}:{},...K!==void 0?{resultSummary:K}:{},...e.processMetadata!==void 0||s!==void 0?{processMetadata:{...e.processMetadata,...s!==void 0?{resumedFromRunId:s}:{}}}:{}}),m.ok?{kind:"completed",result:m.result,state:m.state}:{kind:"failed",error:m.error,state:m.state}}a(me,"runWorkflowModule");function On(e){if(!e.ctx||!e.childOptions)throw new Error("runWorkflowModule requires either a backend or ctx + childOptions");return qe({ctx:e.ctx,childOptions:e.childOptions,runId:e.runId,defaultChildReadOnly:e.module.meta.readOnly===!0})}a(On,"buildBackend");function Fn(e,t){return{...e,spawn:a(async n=>(await t(),e.spawn(n)),"spawn")}}a(Fn,"withBeforeSpawn");function In(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(In,"emitWorkflowAgentDigest");async function ht(e){let t={...Ae({options:e.options,runtime:e.options.extensionRuntime,managedProtocolPayloadRef:{current:void 0}}),workflowWorktreeBaseDir:ue(e.runDir)},n={maxIterationsPerChild:Tn,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,i=e.onEvent||e.options.events?.onWorkflowAgentDigest?r=>{e.onEvent?.(r),In(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}:{},...i?{onEvent:i}:{},...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(ht,"runWorkflowFromOptions");function Cn(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 i=t[o];if(typeof i=="string"&&i.trim().length>0)return i}}a(Cn,"resultText");function $n(e){if(e.kind==="completed"){let t=Cn(e.result);return t!==void 0?{status:"completed",resultText:t}:{status:"completed"}}return e.kind==="denied"?{status:"denied"}:{status:"failed",error:e.error}}a($n,"classifyOutcome");function Nn(e,t){return{kind:"failed",error:t instanceof Error?t:new Error(String(t)),state:{runId:e,status:"failed",totalSpawned:0,events:[],artifacts:[]}}}a(Nn,"failedOutcome");var Dn=1e3;function _n(e={},t=Re(e)){let n=new Map,o=a(r=>r?{...r,runDir:n.get(r.runId)??""}:void 0,"withRunDir"),i=a((r,s)=>{if(n.set(r.runId,r.runDir),n.size>Dn){let l=new Set(t.list().map(h=>h.runId));for(let h of n.keys())h!==r.runId&&!l.has(h)&&n.delete(h)}let c=V(r.meta,r.hostPolicy),p=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:s,classify:$n,onError:a(l=>Nn(r.runId,l),"onError")});return{runId:p.runId,done:p.done,getSnapshot:a(()=>o(p.getSnapshot()),"getSnapshot"),getProcessSnapshot:a(()=>p.getProcessSnapshot(),"getProcessSnapshot")}},"startManaged");return{start:a(r=>i({runId:r.runId,runDir:r.runDir,meta:r.module.meta,hostPolicy:r.hostPolicy,processMetadata:r.processMetadata,signal:r.signal},s=>me({...r,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:a(c=>{s.onEvent(c),r.onEvent?.(c)},"onEvent")})),"start"),startFromOptions:a(r=>i({runId:r.runId,runDir:r.runDir,meta:r.module.meta,hostPolicy:r.options.workflowHostPolicy,processMetadata:r.processMetadata,signal:r.signal},s=>ht({...r,signal:s.signal,beforeSpawn:s.beforeSpawn,onEvent:a(c=>{s.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,s)=>t.stop(r,s),"stop")}}a(_n,"createWorkflowRunManager");var gt;function Jr(){return gt??=_n({},be()),gt}a(Jr,"getDefaultWorkflowRunManager");export{qe as a,je as b,Be as c,Le as d,Qn as e,$ as f,Zt as g,ce as h,Xe as i,en as j,ir as k,sr as l,cr as m,fr as n,dr as o,ur as p,pn as q,at as r,mt as s,En as t,V as u,me as v,In as w,ht as x,_n as y,Jr as z};
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{w as q,y as J}from"./chunk-MHRN2LQV.js";import{C as k,D as X,E as R,Ja as B,Na as z,ja as F,ka as j,la as G,ma as U,n as K,na as V,oa as A,va as $,wa as E,z as x,za as I}from"./chunk-O7N22GJ3.js";import{Ea as H,ya as W}from"./chunk-TLJGOKBT.js";import{a as o}from"./chunk-ONUPGMER.js";import c from"fs";import f from"path";import{exec as ce,spawnSync as le}from"child_process";import{promisify as ue}from"util";import{fileURLToPath as fe}from"url";var L="en";function ae(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(ae,"detectSystemLocale");function Q(e){if(!e||e==="auto"){L=ae();return}L=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(Q,"setLocale");var Y={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.multiselect_min":"Select at least {min} option(s) with Space before confirming.","select.multiselect_max":"Select at most {max} option(s) with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.multiselect_min":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u81F3\u5C11\u9009\u62E9 {min} \u4E2A\u9009\u9879\u3002","select.multiselect_max":"\u6700\u591A\u53EA\u80FD\u9009\u62E9 {max} \u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function Ne(e,t){let r=Y[L][e]??Y.en[e]??e;if(t)for(let[i,s]of Object.entries(t))r=r.replace(`{${i}}`,String(s));return r}o(Ne,"t");var de=ue(ce),S=W(),He=f.join(S,"sessions"),d=f.join(S,"config.json"),qe=60,p=null,D=!1,pe="dumb";function me(e){let t=f.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",r=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",r],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",r]:["-lc",r],sentinel:n}}o(me,"buildShellEnvCommand");function ge(e,t){let n=`${t}\0`,r=e.lastIndexOf(n);if(r===-1)return{};let i=e.slice(r+n.length),s={};for(let a of i.split("\0")){if(!a)continue;let u=a.indexOf("=");u<=0||(s[a.slice(0,u)]=a.slice(u+1))}return s}o(ge,"parseNullDelimitedShellEnv");function ve(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let r=e.shell??t.SHELL;if(!r||!f.isAbsolute(r))return!1;let{args:i,sentinel:s}=me(r),a=e.run??le,u={...t,TERM:pe},l=a(r,i,{encoding:"utf8",env:u,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(l.status!==0||!l.stdout)return!1;let re=typeof l.stdout=="string"?l.stdout:l.stdout.toString("utf8"),ie=ge(re,s),N=!1;for(let[C,se]of Object.entries(ie))C!=="TERM"&&t[C]===void 0&&(t[C]=se,N=!0);return N}o(ve,"hydrateProcessEnvFromShell");function he(){if(!D){D=!0;try{ve()}catch{}}}o(he,"ensureShellEnvironmentHydrated");function Je(){D=!1}o(Je,"resetShellEnvironmentHydrationForTesting");function ye(e){$(e.customProviders??[])}o(ye,"registerConfiguredCustomProviders");function te(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}o(te,"normalizeConfiguredExtensions");function Ee(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{c.mkdirSync(f.dirname(d),{recursive:!0}),c.writeFileSync(d,JSON.stringify(t,null,2))}catch{}return t}o(Ee,"migrateLegacyPermissionModeInConfig");function Pe(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=c.readFileSync(d,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&c.writeFileSync(d,n)}catch{}return{...e,permissionMode:"auto"}}o(Pe,"migrateAutoInProjectAliasInConfig");function be(){if(p)return p;let e="0.7.66";if(e)return p=e,p;let t=f.join(f.dirname(fe(import.meta.url)),"../../package.json");if(c.existsSync(t))try{return p=JSON.parse(c.readFileSync(t,"utf-8")).version??"0.0.0",p??"0.0.0"}catch{}return p="0.0.0",p}o(be,"getVersion");var Ye=be();function _e(e){return j(e)}o(_e,"getProviderModel");function T(e,t){let n=new Set(e.map(i=>i.toLowerCase())),r=[...e];for(let i of t)n.has(i.toLowerCase())||r.push(i);return r}o(T,"mergeModels");function Se(e,t){t||(t=w().providerModels);let n=t?.[e];if(n&&n.length>0){try{let r=A(e);if(r.length>0)return T(n,r)}catch{}try{let r=E(e);if(r)return T(n,r.getAvailableModels())}catch{}return n}try{let r=A(e);if(r.length>0)return r}catch{}try{let r=E(e);if(r)return r.getAvailableModels()}catch{}return[]}o(Se,"getProviderAvailableModels");function Oe(e,t){let n=G(e,t);if(n!=="unknown")return n;try{let r=E(e);if(r)return r.getReasoningCapability(t)}catch{}return"unknown"}o(Oe,"getProviderReasoningCapability");function we(e){let t=U(e);if(t)return t;try{return I().find(r=>r.name===e)?.capabilityProfile??null}catch{return null}}o(we,"getProviderCapabilityProfile");function ne(e,t){let n=we(e),r=Oe(e,t);if(n)return{capabilityProfile:n,reasoningCapability:r};try{let i=B(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}o(ne,"getProviderCapabilityMetadata");function Qe(e,t){let n=ne(e,t);return n?q({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(Qe,"getProviderCapabilitySnapshot");function Ce(e,t,n,r){let i=ne(e,t);return i?J({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:r}):null}o(Ce,"getProviderPolicyDecision");function Ze(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",r=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${r}`}o(Ze,"describeProviderCapabilitySummary");function et(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}o(et,"formatReasoningCapabilityShort");function y(e){if(e)return e==="none"?"off":e}o(y,"formatReasoningEffortForDisplay");function _(e,t){let n=y(t);n&&!e.includes(n)&&e.push(n)}o(_,"pushUniqueEffortDisplay");function tt(e,t){let n=["auto"],i=O(e,t)?.supportedEfforts?.filter(s=>s.isUserVisible!==!1);if(!i||i.length===0){for(let s of["off","low","medium","high"])_(n,s);return n}for(let s of i)_(n,s.value);return n}o(tt,"getProviderReasoningEffortOptions");function nt(e,t){let n=O(e,t),r=new Set(n?.disabledEfforts??[]),i=n?.supportedEfforts?.filter(l=>l.isUserVisible!==!1),s=[],a=n?.supportsDisabledThinking===!0;if(!i||i.length===0){for(let l of["low","medium","high"])_(s,l);a=!0}else for(let l of i){if(l.value==="none"){a=!0;continue}if(r.has(l.value)){a=!0;continue}_(s,l.value)}let u=[];return a&&u.push("off"),u.push(...s),u.push("auto"),u}o(nt,"getProviderReasoningEffortCycle");function xe(e,t){if(t===!1)return"off";switch(e){case"off":return"off";case"quick":return"low";case"balanced":return"medium";case"deep":return"high";default:return"auto"}}o(xe,"legacyReasoningModeToEffortDisplay");function O(e,t){let n=t??_e(e);if(!n)return;let r=z(e,n)?.reasoningProfile;if(r)return K(r,H(e,n))}o(O,"resolveReasoningProfileForDisplay");function ot(e){let t=y(e.effort)??xe(e.reasoningMode,e.thinking),n=O(e.provider,e.model);if(!n)return t;try{let r=X({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=y(r.configuredEffort)??t,a=r.configuredEffort!==void 0&&n.disabledEfforts?.includes(r.configuredEffort)===!0?"off":y(r.effectiveEffort);return a&&a!==i?`${i}->${a}`:i}catch{if(e.effort)try{let r=R({currentEffort:e.effort,capability:n}),i=y(e.effort)??t,s=y(r.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}o(ot,"formatReasoningEffortStatusLabel");function rt(e){let t=De(e);if(!t)return{preserved:!0};let n=O(e.provider,e.model);if(!n)return{configuredEffort:t,runtimeEffort:t,preserved:!0};let r=R({currentEffort:t,capability:n});return{configuredEffort:t,runtimeEffort:r.effectiveEffort,preserved:r.preserved,diagnostic:r.diagnostic}}o(rt,"resolveProviderReasoningRuntimeEffort");function ke(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}o(ke,"describeReasoningCapabilityControl");function it(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}o(it,"describeReasoningExecution");function st(e){let t=[];e||(e=w().providerModels);for(let n of V())t.push({name:n.name,model:n.model,models:Se(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=I().map(r=>({...r,models:(()=>{let i=e?.[r.name];return i&&i.length>0?T(i,r.models):r.models})()}));t.push(...n)}catch{}return t}o(st,"getProviderList");function at(e){if(F(e))return!0;try{return E(e)?.isConfigured()??!1}catch{return!1}}o(at,"isProviderConfigured");function w(){try{if(c.existsSync(d)){let e=JSON.parse(c.readFileSync(d,"utf-8")),t=e.reasoningCeiling??e.reasoningMode;return Pe(Ee({...e,reasoningMode:t,extensions:te(e.extensions)}))}}catch{}return{}}o(w,"loadConfig");var M=f.join(S,"config.example.jsonc"),Re=`// KodaX example configuration \u2014 copy what you need into config.json (in this same
|
|
3
|
-
// folder). config.json must be STRICT JSON: no comments, no trailing commas. Most
|
|
4
|
-
// settings also have a semantic KODAX_* env counterpart that overrides the file.
|
|
5
|
-
// Priority: explicit option > environment > config.json > default. Delete anything
|
|
6
|
-
// you don't use; everything here is optional.
|
|
7
|
-
{
|
|
8
|
-
// Default provider + model. Override live with /provider and /model.
|
|
9
|
-
// "provider": "deepseek",
|
|
10
|
-
// "model": "deepseek-v4",
|
|
11
|
-
|
|
12
|
-
// Task runtime: "embedded" (default) or shared local "daemon".
|
|
13
|
-
// "runtimeMode": "embedded",
|
|
14
|
-
|
|
15
|
-
// Reasoning effort for normal turns: off | auto | low | medium | high | xhigh | max.
|
|
16
|
-
// "effort": "high",
|
|
17
|
-
|
|
18
|
-
// Permission mode: "accept-edits" | "plan" | "auto".
|
|
19
|
-
// "permissionMode": "accept-edits",
|
|
20
|
-
|
|
21
|
-
// Custom providers \u2014 point KodaX at an OpenAI/Anthropic-compatible endpoint.
|
|
22
|
-
// "customProviders": [
|
|
23
|
-
// {
|
|
24
|
-
// "name": "my-relay", // unique; do NOT reuse a built-in provider name
|
|
25
|
-
// "protocol": "openai", // "openai" or "anthropic" = the wire format the endpoint speaks
|
|
26
|
-
// "baseUrl": "https://api.example.com/v1",
|
|
27
|
-
// "apiKeyEnv": "MY_RELAY_API_KEY", // env var that holds the key (never put the key here)
|
|
28
|
-
// "model": "deepseek/deepseek-v4",
|
|
29
|
-
// "models": ["deepseek/deepseek-v4"],
|
|
30
|
-
//
|
|
31
|
-
// // --- Thinking / reasoning (optional) ---
|
|
32
|
-
// // For most NON-Claude models this single line is all you need:
|
|
33
|
-
// "supportsThinking": true
|
|
34
|
-
// // openai-compat : KodaX sends no thinking toggle and just shows whatever
|
|
35
|
-
// // reasoning the model emits (deepseek/qwen/etc. via relays).
|
|
36
|
-
// // anthropic-compat: KodaX sends thinking:{type:"enabled"} \u2014 what the Anthropic
|
|
37
|
-
// // endpoints of zhipu / kimi / minimax / deepseek expect.
|
|
38
|
-
// //
|
|
39
|
-
// // openai-compat MULTI-TURN: some models (notably DeepSeek V4) reject later turns
|
|
40
|
-
// // whose history drops the previous reasoning_content. If thinking shows on turn 1
|
|
41
|
-
// // but turn 2 errors, also set: "replayReasoningContent": true
|
|
42
|
-
// //
|
|
43
|
-
// // To expose a TUNABLE effort level, use "reasoning" instead. Include "off" to
|
|
44
|
-
// // allow disabling thinking:
|
|
45
|
-
// // "reasoning": { "efforts": ["off", "low", "high"], "default": "high" }
|
|
46
|
-
// //
|
|
47
|
-
// // Pointing anthropic-compat at REAL Claude (4.6+)? Claude needs ADAPTIVE
|
|
48
|
-
// // thinking, not the enable toggle \u2014 set instead:
|
|
49
|
-
// // "reasoningCapability": "native-adaptive"
|
|
50
|
-
// }
|
|
51
|
-
// ],
|
|
52
|
-
|
|
53
|
-
// MCP servers (stdio or remote). See the /mcp command and manual topic "mcp".
|
|
54
|
-
// "mcpServers": {}
|
|
55
|
-
}
|
|
56
|
-
`;function ct(){try{return c.existsSync(d)||c.existsSync(M)?void 0:(c.mkdirSync(S,{recursive:!0}),c.writeFileSync(M,Re,"utf-8"),M)}catch{return}}o(ct,"ensureExampleConfigFile");var b=new Map;function Ae(e,t){let n=process.env[e],r=b.get(e),i=r!==void 0&&n===r;if(n!==void 0&&!i){b.delete(e);return}if(t===void 0){i&&delete process.env[e],b.delete(e);return}process.env[e]=t,b.set(e,t)}o(Ae,"projectConfigEnvironment");var oe=[{configPath:"streamIdleTimeoutMs",env:"KODAX_STREAM_IDLE_TIMEOUT_MS",value:o(e=>v(e.streamIdleTimeoutMs),"value")},{configPath:"repoIntelligenceMode",env:"KODAX_REPO_INTELLIGENCE",value:o(e=>e.repoIntelligenceMode,"value")},{configPath:"repoIntelligenceTrace",env:"KODAX_REPO_INTELLIGENCE_TRACE",value:o(e=>h(e.repoIntelligenceTrace),"value")},{configPath:"verifierLog",env:"KODAX_VERIFIER_LOG",value:o(e=>h(e.verifierLog),"value")},{configPath:"stallLog",env:"KODAX_STALL_LOG",value:o(e=>h(e.stallLog),"value")},{configPath:"fallbackProviders",env:"KODAX_FALLBACK_PROVIDERS",value:o(e=>Le(e.fallbackProviders),"value")},{configPath:"fastProvider",env:"KODAX_FAST_PROVIDER",value:o(e=>m(e.fastProvider),"value")},{configPath:"fastModel",env:"KODAX_FAST_MODEL",value:o(e=>m(e.fastModel),"value")},{configPath:"deepProvider",env:"KODAX_DEEP_PROVIDER",value:o(e=>m(e.deepProvider),"value")},{configPath:"deepModel",env:"KODAX_DEEP_MODEL",value:o(e=>m(e.deepModel),"value")},{configPath:"provider",env:"KODAX_PROVIDER",value:o(e=>m(e.provider),"value")},{configPath:"effort",env:"KODAX_EFFORT",value:o(e=>m(e.effort),"value")},{configPath:"runtimeMode",env:"KODAX_RUNTIME_MODE",value:o(e=>e.runtimeMode,"value")},{configPath:"sessionRetentionDays",env:"KODAX_SESSION_RETENTION_DAYS",value:o(e=>v(e.sessionRetentionDays),"value")},{configPath:"maxOutputTokens",env:"KODAX_MAX_OUTPUT_TOKENS",value:o(e=>v(e.maxOutputTokens),"value")},{configPath:"disablePromptCache",env:"KODAX_DISABLE_PROMPT_CACHE",value:o(e=>h(e.disablePromptCache),"value")},{configPath:"lsp",env:"KODAX_LSP",value:o(e=>h(e.lsp),"value")},{configPath:"lspAutoDownload",env:"KODAX_LSP_DOWNLOAD",value:o(e=>h(e.lspAutoDownload),"value")},{configPath:"acpLogLevel",env:"KODAX_ACP_LOG",value:o(e=>m(e.acpLogLevel),"value")},{configPath:"repoIntelligence.toolWaitMs",env:"KODAX_REPO_INTELLIGENCE_TOOL_WAIT_MS",value:o(e=>v(e.repoIntelligence?.toolWaitMs),"value")},{configPath:"repoIntelligence.workerTimeoutMs",env:"KODAX_REPO_INTELLIGENCE_WORKER_TIMEOUT_MS",value:o(e=>v(e.repoIntelligence?.workerTimeoutMs),"value")},{configPath:"repoIntelligence.workerOldSpaceMb",env:"KODAX_REPO_INTELLIGENCE_WORKER_OLD_SPACE_MB",value:o(e=>v(e.repoIntelligence?.workerOldSpaceMb),"value")},{configPath:"repoIntelligence.storageDir",env:"KODAX_REPO_INTELLIGENCE_STORAGE_DIR",value:o(e=>m(e.repoIntelligence?.storageDir),"value")},{configPath:"workflow.maxConcurrency",env:"KODAX_WORKFLOW_MAX_CONCURRENCY",value:o(e=>v(e.workflow?.maxConcurrency),"value")}];function Ie(e){for(let t of oe)Ae(t.env,t.value(e))}o(Ie,"applyConfigSurfaceBridges");function m(e){return e?.trim()||void 0}o(m,"normalizedConfigString");function v(e){return typeof e=="number"&&Number.isFinite(e)?String(e):void 0}o(v,"configNumberString");function h(e){return e===void 0?void 0:e?"1":"0"}o(h,"configBooleanString");function Le(e){return e?.filter(t=>t.trim().length>0).join(",")}o(Le,"configStringList");var lt=[...oe.map(({configPath:e,env:t})=>({configPath:e,env:t}))];function Me(e){Ie(e)}o(Me,"applyConfigEnvironment");function ut(){he();let e=w();return Me(e),ye(e),Q(e.locale),e}o(ut,"prepareRuntimeConfig");function ft(e){let n={...w(),...e},r=te(n.extensions);r!==void 0&&(n.extensions=r);for(let i of Object.keys(e))e[i]===void 0&&delete n[i];c.mkdirSync(f.dirname(d),{recursive:!0}),c.writeFileSync(d,JSON.stringify(n,null,2))}o(ft,"saveConfig");function dt(e,t,n){return e.effort!==void 0||k(n).kind==="value"||t.effort!==void 0}o(dt,"resolveInitialEffortOverride");function g(e){return e?.trim()?e:void 0}o(g,"nonEmptySelection");function pt(e){return g(e.explicitProvider)??g(e.environmentProvider)??g(e.configuredProvider)??e.defaultProvider}o(pt,"resolveRuntimeProviderSelection");function mt(e){let t=g(e.explicitModel);if(t)return t;let n=g(e.configuredModel);if(!n)return;let r=g(e.explicitProvider)??g(e.environmentProvider);return r?g(e.configuredProvider)===r?n:void 0:n}o(mt,"resolveRuntimeModelSelection");function gt(e){if(e.explicitEffort!==void 0)return x(e.explicitEffort);let t=k(e.environmentEffort);return t.kind==="value"?t.value:e.configuredEffort===void 0?void 0:x(e.configuredEffort)}o(gt,"resolveRuntimeEffortSelection");function De(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}o(De,"resolvePermissionModeEffort");async function vt(e){try{let{stdout:t}=await de("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}o(vt,"getGitRoot");function Te(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(Te,"formatProviderSourceKind");function ht(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${Te(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${ke(e.reasoningCapability)}`]}o(ht,"formatProviderCapabilityDetailLines");function yt(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(i=>({label:i.label,decision:Ce(e,t,n,i.hints)})).filter(i=>i.decision!==null)}o(yt,"getProviderCommonPolicyScenarios");var Z=.5,ee=0,P={locked:!1,queue:[]};async function Et(e){for(;P.locked;)await new Promise(t=>P.queue.push(t));P.locked=!0;try{let t=(Date.now()-ee)/1e3;t<Z&&await new Promise(r=>setTimeout(r,(Z-t)*1e3));let n=await e();return ee=Date.now(),n}finally{P.locked=!1;let t=P.queue.shift();t&&t()}}o(Et,"rateLimitedCall");export{Ne as a,S as b,He as c,d,qe as e,ve as f,Je as g,ye as h,be as i,Ye as j,_e as k,Se as l,Oe as m,we as n,Qe as o,Ce as p,Ze as q,et as r,y as s,tt as t,nt as u,ot as v,rt as w,ke as x,it as y,st as z,at as A,w as B,M as C,ct as D,lt as E,Me as F,ut as G,ft as H,dt as I,pt as J,mt as K,gt as L,De as M,vt as N,Te as O,ht as P,yt as Q,Et as R};
|