@duckmind/dm-darwin-x64 0.49.8 → 0.49.9
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/dm +0 -0
- package/extensions/.dm-extensions.json +44 -15
- package/extensions/dm-cliproxy/NOTICE.md +12 -0
- package/extensions/dm-cliproxy/index.js +2 -0
- package/extensions/dm-cliproxy/package.json +20 -0
- package/extensions/dm-cliproxy/scripts/check-config-migration.js +10 -0
- package/extensions/dm-cliproxy/src/apply.js +1 -0
- package/extensions/dm-cliproxy/src/cache.js +1 -0
- package/extensions/dm-cliproxy/src/commands.js +2 -0
- package/extensions/dm-cliproxy/src/compat.js +1 -0
- package/extensions/dm-cliproxy/src/config.js +2 -0
- package/extensions/dm-cliproxy/src/conflicts.js +1 -0
- package/extensions/dm-cliproxy/src/fetch-models.js +1 -0
- package/extensions/dm-cliproxy/src/fetch-usage.js +1 -0
- package/extensions/dm-cliproxy/src/log.js +1 -0
- package/extensions/dm-cliproxy/src/status-quota.js +1 -0
- package/extensions/dm-cliproxy/src/ui-frame.js +1 -0
- package/extensions/dm-cliproxy/src/ui-hub/hub.js +2 -0
- package/extensions/dm-cliproxy/src/ui-hub/index.js +2 -0
- package/extensions/dm-cliproxy/src/ui-hub/shell.js +1 -0
- package/extensions/dm-cliproxy/src/ui-hub/types.js +0 -0
- package/extensions/dm-cliproxy/src/ui-hub/view-diagnostics.js +1 -0
- package/extensions/dm-cliproxy/src/ui-hub/view-models.js +1 -0
- package/extensions/dm-cliproxy/src/ui-hub/view-usage.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/catalog.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/mutate.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/prompt-confirm.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/prompt-name.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/providers.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/render-text.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/rows.js +1 -0
- package/extensions/dm-cliproxy/src/ui-picker/types.js +0 -0
- package/extensions/dm-cliproxy/src/ui-setup.js +2 -0
- package/extensions/dm-cliproxy/src/ui-usage.js +1 -0
- package/extensions/dm-cliproxy/src/usage-shared-cache.js +1 -0
- package/extensions/dm-subagents/src/extension/doctor.js +10 -10
- package/extensions/dm-subagents/src/extension/fanout-child.js +129 -129
- package/extensions/dm-subagents/src/extension/index.js +179 -179
- package/extensions/dm-subagents/src/extension/rpc.js +5 -5
- package/extensions/dm-subagents/src/extension/schemas.js +1 -1
- package/extensions/dm-subagents/src/extension/tool-description.js +2 -2
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +5 -5
- package/extensions/dm-subagents/src/runs/background/async-execution.js +19 -19
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +10 -10
- package/extensions/dm-subagents/src/runs/background/async-resume.js +5 -5
- package/extensions/dm-subagents/src/runs/background/async-status.js +8 -8
- package/extensions/dm-subagents/src/runs/background/fleet-view.js +14 -14
- package/extensions/dm-subagents/src/runs/background/result-watcher.js +5 -5
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +3 -3
- package/extensions/dm-subagents/src/runs/background/run-status.js +20 -20
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +7 -7
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +38 -38
- package/extensions/dm-subagents/src/runs/background/wait.js +7 -7
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +58 -58
- package/extensions/dm-subagents/src/runs/foreground/execution.js +36 -36
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +129 -129
- package/extensions/dm-subagents/src/runs/shared/dm-args.js +1 -1
- package/extensions/dm-subagents/src/runs/shared/nested-events.js +6 -6
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +13 -13
- package/package.json +1 -1
- package/extensions/dm-9router-ext/package.json +0 -23
- package/extensions/dm-9router-ext/src/index.js +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as Q from"node:fs";import*as P from"node:os";import*as X from"node:path";import{fileURLToPath as tf}from"node:url";import*as u from"node:path";var qf=128,Mf=4;function Kf(f){return typeof f==="string"&&f.length>0&&f.length<=qf&&!u.isAbsolute(f)&&!f.includes("/")&&!f.includes("\\")&&!f.includes("..")}function h(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function g(f,j){return typeof f==="string"&&f.length>0?f.slice(0,j):void 0}function k(f){if(!Array.isArray(f))return[];return f.map((j)=>{if(!j||typeof j!=="object")return;let $=j;if(!Kf($.runId))return;return{runId:$.runId,...h($.stepIndex)!==void 0?{stepIndex:h($.stepIndex)}:{},...g($.agent,128)?{agent:g($.agent,128)}:{}}}).filter((j)=>Boolean(j)).slice(0,Mf)}function w(f){if(!f)return[];try{return k(JSON.parse(f))}catch{return[]}}function r(f){let j=k(f);return j.length?JSON.stringify(j):""}import{createHash as Rf}from"node:crypto";import*as R from"node:fs";import*as K from"node:os";import*as _ from"node:path";import*as E from"node:fs";import*as C from"node:os";import*as M from"node:path";import*as c from"node:os";import*as S from"node:path";function N(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Gf(f){let j=f?.env??process.env,$=f&&Object.hasOwn(f,"getuid")?f.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let O of["USERNAME","USER","LOGNAME"]){let G=j[O];if(G)return`user-${N(G)}`}let T=f&&Object.hasOwn(f,"userInfo")?f.userInfo:c.userInfo;try{let O=T?.().username;if(O)return`user-${N(O)}`}catch{}let J=j.USERPROFILE??j.HOME;if(J)return`home-${N(J)}`;let B=f&&Object.hasOwn(f,"homedir")?f.homedir:c.homedir;try{let O=B?.();if(O)return`home-${N(O)}`}catch{}return"shared"}var L=S.join(c.tmpdir(),`dm-subagents-${Gf()}`),Qj=S.join(L,"async-subagent-results"),Yj=S.join(L,"async-subagent-runs"),Vf=S.join(L,"chain-runs"),Aj=S.join(L,"artifacts");var yf=".dm",Hf="@duckmind/dm-coding-agent",cf="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function p(f){return typeof f==="string"&&f.trim()?f:void 0}function d(f){if(!f)return;try{let j=JSON.parse(E.readFileSync(M.join(f,"package.json"),"utf-8"));if(j.name!==Hf)return;return p(j.piConfig?.configDir)}catch{return}}function Sf(f=process.argv[1],j=process.env[cf]){let $=d(j);if($)return $;if(!f)return;try{let T=M.dirname(E.realpathSync(f));while(T!==M.dirname(T)){let J=d(T);if(J)return J;T=M.dirname(T)}}catch{}return}function Lf(f,j,$){return(f&&typeof f==="object"?p(f.CONFIG_DIR_NAME):void 0)??Sf(j,$)??yf}function t(){return Lf()}function I(f){return M.join(f,t())}function z(){let f=process.env.DM_CODING_AGENT_DIR;if(f==="~")return C.homedir();if(f?.startsWith("~/"))return M.join(C.homedir(),f.slice(2));return f||M.join(C.homedir(),t(),"agent")}var Cf=1,bf=604800000,s=new Set(["read","bash","edit","write","grep","find","ls","mcp"]),e=_.join(K.homedir(),".config","mcp","mcp.json"),a={cursor:[_.join(K.homedir(),".cursor","mcp.json")],"claude-code":[_.join(K.homedir(),".claude","mcp.json"),_.join(K.homedir(),".claude.json"),_.join(K.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[_.join(K.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[_.join(K.homedir(),".codex","config.json")],windsurf:[_.join(K.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};function ff(f,j=process.cwd()){if(!f?.length)return[];try{let $=zf(j),T=Ff();if(!T)return[];return vf($,T,gf($.settings?.toolPrefix),f)}catch{return[]}}function Ff(){let f=_.join(z(),"mcp-cache.json"),j;try{j=JSON.parse(R.readFileSync(f,"utf-8"))}catch{return null}if(!j||typeof j!=="object")return null;let $=j;if($.version!==Cf||!$.servers||typeof $.servers!=="object"||Array.isArray($.servers))return null;return $}function zf(f){let j={mcpServers:{}};for(let $ of Nf(f)){let T=wf($);if(!T)continue;j=nf(j,xf(T,f))}return j}function Nf(f){let j=_.join(z(),"mcp.json"),$=_.resolve(f,".mcp.json"),T=_.resolve(I(f),"mcp.json"),J=[];if(e!==j)J.push(e);if(J.push(j),$!==j)J.push($);if(T!==j&&T!==$)J.push(T);return J}function wf(f){let j;try{j=JSON.parse(R.readFileSync(f,"utf-8"))}catch{return null}return If(j)}function If(f){if(!f||typeof f!=="object"||Array.isArray(f))return{mcpServers:{}};let j=f,$=j.mcpServers??j["mcp-servers"]??{};return{mcpServers:$&&typeof $==="object"&&!Array.isArray($)?$:{},imports:Array.isArray(j.imports)?j.imports.filter((T)=>uf(T)):void 0,settings:j.settings&&typeof j.settings==="object"&&!Array.isArray(j.settings)?j.settings:void 0}}function nf(f,j){let $=[...f.imports??[],...j.imports??[]];return{mcpServers:{...f.mcpServers,...j.mcpServers},imports:$.length?[...new Set($)]:void 0,settings:j.settings?{...f.settings,...j.settings}:f.settings}}function xf(f,j){if(!f.imports?.length)return f;let $={};for(let T of f.imports){let J=Df(T,j);if(!J)continue;let B;try{B=JSON.parse(R.readFileSync(J,"utf-8"))}catch{continue}for(let[O,G]of Object.entries(of(B,T)))if(!$[O])$[O]=G}return{imports:f.imports,settings:f.settings,mcpServers:{...$,...f.mcpServers}}}function Df(f,j){for(let $ of a[f]){let T=$.startsWith(".")?_.resolve(j,$):$;if(R.existsSync(T))return T}return null}function of(f,j){if(!f||typeof f!=="object"||Array.isArray(f))return{};let $=f,T=j==="cursor"||j==="windsurf"||j==="vscode"?$.mcpServers??$["mcp-servers"]:$.mcpServers;return T&&typeof T==="object"&&!Array.isArray(T)?T:{}}function vf(f,j,$,T){let J=[],B=new Set,{servers:O,tools:G}=Pf(T);for(let[Y,U]of Object.entries(f.mcpServers)){let y=j.servers[Y];if(!mf(y,U))continue;let V=O.has(Y)?!0:G.get(Y);if(!V)continue;for(let Z of Array.isArray(y.tools)?y.tools:[]){if(typeof Z?.name!=="string"||!Z.name)continue;if(V!==!0&&!V.has(Z.name))continue;if(l(Z.name,Y,$,U.excludeTools))continue;let q=F(Z.name,Y,$);if(s.has(q)||B.has(q))continue;B.add(q),J.push(q)}if(U.exposeResources===!1)continue;for(let Z of Array.isArray(y.resources)?y.resources:[]){if(typeof Z?.name!=="string"||!Z.name||typeof Z.uri!=="string"||!Z.uri)continue;let q=`get_${rf(Z.name)}`;if(V!==!0&&!V.has(q))continue;if(l(q,Y,$,U.excludeTools))continue;let H=F(q,Y,$);if(s.has(H)||B.has(H))continue;B.add(H),J.push(H)}}return J}function Pf(f){let j=new Set,$=new Map;for(let T of f)if(T=T.replace(/\/+$/,""),T.includes("/")){let[J,B]=T.split("/",2);if(J&&B){if(!$.has(J))$.set(J,new Set);$.get(J).add(B)}else if(J)j.add(J)}else if(T)j.add(T);return{servers:j,tools:$}}function mf(f,j){if(!f||f.configHash!==hf(j))return!1;if(!f.cachedAt||typeof f.cachedAt!=="number")return!1;return Date.now()-f.cachedAt<=bf}function hf(f){let j={command:f.command,args:f.args,env:i(f.env),cwd:df(f.cwd),url:f.url,headers:i(f.headers),auth:f.auth,bearerToken:pf(f),bearerTokenEnv:f.bearerTokenEnv,exposeResources:f.exposeResources,excludeTools:f.excludeTools};return Rf("sha256").update(n(j)).digest("hex")}function gf(f){return f==="none"||f==="short"||f==="server"?f:"server"}function uf(f){return typeof f==="string"&&Object.hasOwn(a,f)}function kf(f,j){if(j==="none")return"";if(j==="short")return f.replace(/-?mcp$/i,"").replace(/-/g,"_")||"mcp";return f.replace(/-/g,"_")}function F(f,j,$){let T=kf(j,$);return T?`${T}_${f}`:f}function l(f,j,$,T){if(!Array.isArray(T)||T.length===0)return!1;let J=new Set([b(f),b(F(f,j,$)),b(F(f,j,"server")),b(F(f,j,"short"))]);return T.some((B)=>typeof B==="string"&&J.has(b(B)))}function b(f){return f.replace(/-/g,"_")}function rf(f){let j=f.replace(/[^a-zA-Z0-9]/g,"_").replace(/_+/g,"_").replace(/^_+/,"").replace(/_+$/,"").toLowerCase();if(!j||/^\d/.test(j))j=`resource${j?`_${j}`:""}`;return j}function i(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let j={};for(let[$,T]of Object.entries(f))if(typeof T==="string")j[$]=x(T);return j}function x(f){return f.replace(/\$\{(\w+)\}/g,(j,$)=>process.env[$]??"").replace(/\$env:(\w+)/g,(j,$)=>process.env[$]??"")}function df(f){if(typeof f!=="string")return;let j=x(f);if(j==="~")return K.homedir();if(j.startsWith("~/")||j.startsWith("~\\"))return _.join(K.homedir(),j.slice(2));return j}function pf(f){if(typeof f.bearerToken==="string")return x(f.bearerToken);return typeof f.bearerTokenEnv==="string"?process.env[f.bearerTokenEnv]:void 0}function n(f){if(f===null||f===void 0||typeof f!=="object"){let $=JSON.stringify(f);return $===void 0?"undefined":$}if(Array.isArray(f))return`[${f.map(($)=>n($)).join(",")}]`;let j=f;return`{${Object.keys(j).sort().map(($)=>`${JSON.stringify($)}:${n(j[$])}`).join(",")}}`}import{Compile as mj}from"typebox/compile";var jf="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",$f="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";var Tf="DM_SUBAGENT_TOOL_BUDGET";function Jf(f){return f?JSON.stringify(f):void 0}var sf=["off","minimal","low","medium","high","xhigh"],ef=8000;function Af(f,j){let $=tf(f),T=X.extname($),J=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(T)?T:".ts",B=X.dirname($);while(!Q.existsSync(X.join(B,"package.json"))){let O=X.dirname(B);if(O===B)throw Error(`Unable to resolve dm-subagents package root from ${$}`);B=O}return X.join(B,`${j}${J}`)}var Bf=Af(import.meta.url,X.join("src","runs","shared","subagent-prompt-runtime")),lf=Af(import.meta.url,X.join("src","extension","fanout-child")),af="DM_SUBAGENT_CHILD",fj="DM_SUBAGENT_ORCHESTRATOR_TARGET",jj="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",$j="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",Uf="DM_SUBAGENT_RUN_ID",Tj="DM_SUBAGENT_CHILD_AGENT",Jj="DM_SUBAGENT_CHILD_INDEX",Bj="DM_SUBAGENT_FANOUT_CHILD",D="DM_SUBAGENT_PARENT_EVENT_SINK",Of="DM_SUBAGENT_PARENT_CONTROL_INBOX",o="DM_SUBAGENT_PARENT_ROOT_RUN_ID",Wf="DM_SUBAGENT_PARENT_RUN_ID",Xf="DM_SUBAGENT_PARENT_CHILD_INDEX",Zf="DM_SUBAGENT_PARENT_DEPTH",_f="DM_SUBAGENT_PARENT_PATH",v="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN",Qf="DM_SUBAGENT_PARENT_SESSION",Uj="DM_SUBAGENT_STEER_INBOX";function Yf(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Oj(f,j,$){return X.join(L,"supervisor-channels",`${Yf(f)}-${Yf(j)}-${$}`)}function Wj(f,j,$=!1){if(!f||!j)return f;let T=f.lastIndexOf(":");if(T!==-1&&sf.includes(f.substring(T+1)))return $?`${f.slice(0,T)}:${j}`:f;return`${f}:${j}`}function sj(f){let j=[...f.baseArgs];if(f.sessionFile)Q.mkdirSync(X.dirname(f.sessionFile),{recursive:!0}),j.push("--session",f.sessionFile);else{if(!f.sessionEnabled)j.push("--no-session");if(f.sessionDir)Q.mkdirSync(f.sessionDir,{recursive:!0}),j.push("--session-dir",f.sessionDir)}let $=Wj(f.model,f.thinking);if($)j.push("--model",$);let T=f.tools?.filter((W)=>!(W.includes("/")||W.endsWith(".ts")||W.endsWith(".js")))??[],J=f.requireReadTool&&f.tools?.length&&!T.includes("read")?["read",...T]:T,B=J.includes("subagent"),O=[];if(f.tools?.length){let W=[...J];for(let A of f.tools)if(!J.includes(A)&&(A.includes("/")||A.endsWith(".ts")||A.endsWith(".js")))O.push(A);if(W.length>0){if(f.mcpDirectTools?.length)W.push(...ff(f.mcpDirectTools,f.cwd));j.push("--tools",W.join(","))}}let G=B?[Bf,lf]:[Bf];if(f.extensions!==void 0){j.push("--no-extensions");for(let W of[...new Set([...G,...O,...f.extensions,...f.subagentOnlyExtensions??[]])])j.push("--extension",W)}else for(let W of[...new Set([...G,...O,...f.subagentOnlyExtensions??[]])])j.push("--extension",W);if(!f.inheritSkills)j.push("--no-skills");let Y;if(f.systemPrompt!==void 0&&f.systemPrompt!==null){Y=Q.mkdtempSync(X.join(P.tmpdir(),"dm-subagent-"));let W=(f.promptFileStem??"prompt").replace(/[^\w.-]/g,"_"),A=X.join(Y,`${W}.md`);Q.writeFileSync(A,f.systemPrompt,{mode:384}),j.push(f.systemPromptMode==="replace"?"--system-prompt":"--append-system-prompt",A)}if(f.task.length>ef){if(!Y)Y=Q.mkdtempSync(X.join(P.tmpdir(),"dm-subagent-"));let W=X.join(Y,"task.md");Q.writeFileSync(W,`Task: ${f.task}`,{mode:384}),j.push(`@${W}`)}else j.push(`Task: ${f.task}`);let U={};U[af]="1",U[Bj]=B?"1":"0";let y=Boolean(process.env[D]&&process.env[o]&&process.env[v]),V=f.parentRunId??f.runId??(y?process.env[Uf]:void 0)??process.env[Wf]??"",Z=f.parentChildIndex!==void 0?String(f.parentChildIndex):f.childIndex!==void 0?String(f.childIndex):process.env[Xf]??"",q=Number(process.env[Zf]),H=f.parentDepth??(y&&Number.isFinite(q)?q+1:1),Ef=f.parentPath??[...w(process.env[_f]),...V?[{runId:V,...Z&&/^\d+$/.test(Z)?{stepIndex:Number(Z)}:{},...f.childAgentName?{agent:f.childAgentName}:{}}]:[]];if(U[D]=B?f.parentEventSink??process.env[D]??"":"",U[Of]=B?f.parentControlInbox??process.env[Of]??"":"",U[o]=B?f.parentRootRunId??process.env[o]??f.runId??"":"",U[Wf]=B?V:"",U[Xf]=B?Z:"",U[Zf]=B?String(H):"",U[_f]=B?r(Ef):"",U[v]=B?f.parentCapabilityToken??process.env[v]??"":"",U.DM_SUBAGENT_INHERIT_PROJECT_CONTEXT=f.inheritProjectContext?"1":"0",U.DM_SUBAGENT_INHERIT_SKILLS=f.inheritSkills?"1":"0",f.intercomSessionName)U.DM_SUBAGENT_INTERCOM_SESSION_NAME=f.intercomSessionName;if(f.orchestratorIntercomTarget)U[fj]=f.orchestratorIntercomTarget;if(f.parentSessionId)U[jj]=f.parentSessionId;if(f.orchestratorIntercomTarget&&f.parentSessionId&&f.runId&&f.childAgentName){let W=f.childIndex??0,A=Oj(f.runId,f.childAgentName,W);Q.mkdirSync(X.join(A,"requests"),{recursive:!0}),Q.mkdirSync(X.join(A,"replies"),{recursive:!0}),U[$j]=A}if(f.runId)U[Uf]=f.runId;if(f.childAgentName)U[Tj]=f.childAgentName;if(f.childIndex!==void 0)U[Jj]=String(f.childIndex);if(f.mcpDirectTools?.length)U.MCP_DIRECT_TOOLS=f.mcpDirectTools.join(",");else U.MCP_DIRECT_TOOLS="__none__";if(f.structuredOutput)U[$f]=f.structuredOutput.outputPath,U[jf]=f.structuredOutput.schemaPath;if(f.steerInboxDir)U[Uj]=f.steerInboxDir;let m=Jf(f.toolBudget);if(m)U[Tf]=m;return U[Qf]=f.parentSessionId??process.env[Qf]??"",{args:j,env:U,tempDir:Y}}var ej=w;function lj(f){if(!f)return;try{Q.rmSync(f,{recursive:!0,force:!0})}catch{}}export{Af as resolveRuntimeExtensionPath,ej as parseParentPathEnv,lj as cleanupTempDir,sj as buildPiArgs,Wj as applyThinkingSuffix,$j as SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV,Uj as SUBAGENT_STEER_INBOX_ENV,Uf as SUBAGENT_RUN_ID_ENV,Qf as SUBAGENT_PARENT_SESSION_ENV,Wf as SUBAGENT_PARENT_RUN_ID_ENV,o as SUBAGENT_PARENT_ROOT_RUN_ID_ENV,_f as SUBAGENT_PARENT_PATH_ENV,D as SUBAGENT_PARENT_EVENT_SINK_ENV,Zf as SUBAGENT_PARENT_DEPTH_ENV,Of as SUBAGENT_PARENT_CONTROL_INBOX_ENV,Xf as SUBAGENT_PARENT_CHILD_INDEX_ENV,v as SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV,fj as SUBAGENT_ORCHESTRATOR_TARGET_ENV,jj as SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV,Bj as SUBAGENT_FANOUT_CHILD_ENV,Jj as SUBAGENT_CHILD_INDEX_ENV,af as SUBAGENT_CHILD_ENV,Tj as SUBAGENT_CHILD_AGENT_ENV};
|
|
1
|
+
import*as A from"node:fs";import*as P from"node:os";import*as X from"node:path";import{fileURLToPath as Ef}from"node:url";import*as k from"node:path";var Kf=128,Gf=4;function Vf(f){return typeof f==="string"&&f.length>0&&f.length<=Kf&&!k.isAbsolute(f)&&!f.includes("/")&&!f.includes("\\")&&!f.includes("..")}function h(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function g(f,j){return typeof f==="string"&&f.length>0?f.slice(0,j):void 0}function u(f){if(!Array.isArray(f))return[];return f.map((j)=>{if(!j||typeof j!=="object")return;let $=j;if(!Vf($.runId))return;return{runId:$.runId,...h($.stepIndex)!==void 0?{stepIndex:h($.stepIndex)}:{},...g($.agent,128)?{agent:g($.agent,128)}:{}}}).filter((j)=>Boolean(j)).slice(0,Gf)}function w(f){if(!f)return[];try{return u(JSON.parse(f))}catch{return[]}}function r(f){let j=u(f);return j.length?JSON.stringify(j):""}import{createHash as bf}from"node:crypto";import*as S from"node:fs";import*as K from"node:os";import*as Q from"node:path";import*as q from"node:fs";import*as C from"node:os";import*as M from"node:path";import*as c from"node:os";import*as R from"node:path";function N(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function yf(f){let j=f?.env??process.env,$=f&&Object.hasOwn(f,"getuid")?f.getuid:process.getuid?.bind(process);if(typeof $==="function")return`uid-${$()}`;for(let Z of["USERNAME","USER","LOGNAME"]){let G=j[Z];if(G)return`user-${N(G)}`}let T=f&&Object.hasOwn(f,"userInfo")?f.userInfo:c.userInfo;try{let Z=T?.().username;if(Z)return`user-${N(Z)}`}catch{}let J=j.USERPROFILE??j.HOME;if(J)return`home-${N(J)}`;let O=f&&Object.hasOwn(f,"homedir")?f.homedir:c.homedir;try{let Z=O?.();if(Z)return`home-${N(Z)}`}catch{}return"shared"}var L=R.join(c.tmpdir(),`dm-subagents-${yf()}`),qj=R.join(L,"async-subagent-results"),Uj=R.join(L,"async-subagent-runs"),Hf=R.join(L,"chain-runs"),Mj=R.join(L,"artifacts");var cf=".dm",Rf="@duckmind/dm-coding-agent",Lf="DM_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";function p(f){return typeof f==="string"&&f.trim()?f:void 0}function d(f){if(!f)return;try{let j=JSON.parse(q.readFileSync(M.join(f,"package.json"),"utf-8"));if(j.name!==Rf)return;return p(j.piConfig?.configDir)}catch{return}}function Sf(f=process.argv[1],j=process.env[Lf]){let $=d(j);if($)return $;if(!f)return;try{let T=M.dirname(q.realpathSync(f));while(T!==M.dirname(T)){let J=d(T);if(J)return J;T=M.dirname(T)}}catch{}return}function Cf(f,j,$){return(f&&typeof f==="object"?p(f.CONFIG_DIR_NAME):void 0)??Sf(j,$)??cf}function t(){return Cf()}function I(f){return M.join(f,t())}function z(){let f=process.env.DM_CODING_AGENT_DIR;if(f==="~")return C.homedir();if(f?.startsWith("~/"))return M.join(C.homedir(),f.slice(2));return f||M.join(C.homedir(),t(),"agent")}var Ff=1,zf=604800000,s=new Set(["read","bash","edit","write","grep","find","ls","mcp"]),e=Q.join(K.homedir(),".config","mcp","mcp.json"),a={cursor:[Q.join(K.homedir(),".cursor","mcp.json")],"claude-code":[Q.join(K.homedir(),".claude","mcp.json"),Q.join(K.homedir(),".claude.json"),Q.join(K.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[Q.join(K.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[Q.join(K.homedir(),".codex","config.json")],windsurf:[Q.join(K.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};function ff(f,j=process.cwd()){if(!f?.length)return[];try{let $=wf(j),T=Nf();if(!T)return[];return mf($,T,uf($.settings?.toolPrefix),f)}catch{return[]}}function Nf(){let f=Q.join(z(),"mcp-cache.json"),j;try{j=JSON.parse(S.readFileSync(f,"utf-8"))}catch{return null}if(!j||typeof j!=="object")return null;let $=j;if($.version!==Ff||!$.servers||typeof $.servers!=="object"||Array.isArray($.servers))return null;return $}function wf(f){let j={mcpServers:{}};for(let $ of If(f)){let T=nf($);if(!T)continue;j=Df(j,of(T,f))}return j}function If(f){let j=Q.join(z(),"mcp.json"),$=Q.resolve(f,".mcp.json"),T=Q.resolve(I(f),"mcp.json"),J=[];if(e!==j)J.push(e);if(J.push(j),$!==j)J.push($);if(T!==j&&T!==$)J.push(T);return J}function nf(f){let j;try{j=JSON.parse(S.readFileSync(f,"utf-8"))}catch{return null}return xf(j)}function xf(f){if(!f||typeof f!=="object"||Array.isArray(f))return{mcpServers:{}};let j=f,$=j.mcpServers??j["mcp-servers"]??{};return{mcpServers:$&&typeof $==="object"&&!Array.isArray($)?$:{},imports:Array.isArray(j.imports)?j.imports.filter((T)=>rf(T)):void 0,settings:j.settings&&typeof j.settings==="object"&&!Array.isArray(j.settings)?j.settings:void 0}}function Df(f,j){let $=[...f.imports??[],...j.imports??[]];return{mcpServers:{...f.mcpServers,...j.mcpServers},imports:$.length?[...new Set($)]:void 0,settings:j.settings?{...f.settings,...j.settings}:f.settings}}function of(f,j){if(!f.imports?.length)return f;let $={};for(let T of f.imports){let J=vf(T,j);if(!J)continue;let O;try{O=JSON.parse(S.readFileSync(J,"utf-8"))}catch{continue}for(let[Z,G]of Object.entries(Pf(O,T)))if(!$[Z])$[Z]=G}return{imports:f.imports,settings:f.settings,mcpServers:{...$,...f.mcpServers}}}function vf(f,j){for(let $ of a[f]){let T=$.startsWith(".")?Q.resolve(j,$):$;if(S.existsSync(T))return T}return null}function Pf(f,j){if(!f||typeof f!=="object"||Array.isArray(f))return{};let $=f,T=j==="cursor"||j==="windsurf"||j==="vscode"?$.mcpServers??$["mcp-servers"]:$.mcpServers;return T&&typeof T==="object"&&!Array.isArray(T)?T:{}}function mf(f,j,$,T){let J=[],O=new Set,{servers:Z,tools:G}=hf(T);for(let[Y,B]of Object.entries(f.mcpServers)){let y=j.servers[Y];if(!gf(y,B))continue;let V=Z.has(Y)?!0:G.get(Y);if(!V)continue;for(let _ of Array.isArray(y.tools)?y.tools:[]){if(typeof _?.name!=="string"||!_.name)continue;if(V!==!0&&!V.has(_.name))continue;if(i(_.name,Y,$,B.excludeTools))continue;let U=F(_.name,Y,$);if(s.has(U)||O.has(U))continue;O.add(U),J.push(U)}if(B.exposeResources===!1)continue;for(let _ of Array.isArray(y.resources)?y.resources:[]){if(typeof _?.name!=="string"||!_.name||typeof _.uri!=="string"||!_.uri)continue;let U=`get_${pf(_.name)}`;if(V!==!0&&!V.has(U))continue;if(i(U,Y,$,B.excludeTools))continue;let H=F(U,Y,$);if(s.has(H)||O.has(H))continue;O.add(H),J.push(H)}}return J}function hf(f){let j=new Set,$=new Map;for(let T of f)if(T=T.replace(/\/+$/,""),T.includes("/")){let[J,O]=T.split("/",2);if(J&&O){if(!$.has(J))$.set(J,new Set);$.get(J).add(O)}else if(J)j.add(J)}else if(T)j.add(T);return{servers:j,tools:$}}function gf(f,j){if(!f||f.configHash!==kf(j))return!1;if(!f.cachedAt||typeof f.cachedAt!=="number")return!1;return Date.now()-f.cachedAt<=zf}function kf(f){let j={command:f.command,args:f.args,env:l(f.env),cwd:tf(f.cwd),url:f.url,headers:l(f.headers),auth:f.auth,bearerToken:sf(f),bearerTokenEnv:f.bearerTokenEnv,exposeResources:f.exposeResources,excludeTools:f.excludeTools};return bf("sha256").update(n(j)).digest("hex")}function uf(f){return f==="none"||f==="short"||f==="server"?f:"server"}function rf(f){return typeof f==="string"&&Object.hasOwn(a,f)}function df(f,j){if(j==="none")return"";if(j==="short")return f.replace(/-?mcp$/i,"").replace(/-/g,"_")||"mcp";return f.replace(/-/g,"_")}function F(f,j,$){let T=df(j,$);return T?`${T}_${f}`:f}function i(f,j,$,T){if(!Array.isArray(T)||T.length===0)return!1;let J=new Set([b(f),b(F(f,j,$)),b(F(f,j,"server")),b(F(f,j,"short"))]);return T.some((O)=>typeof O==="string"&&J.has(b(O)))}function b(f){return f.replace(/-/g,"_")}function pf(f){let j=f.replace(/[^a-zA-Z0-9]/g,"_").replace(/_+/g,"_").replace(/^_+/,"").replace(/_+$/,"").toLowerCase();if(!j||/^\d/.test(j))j=`resource${j?`_${j}`:""}`;return j}function l(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let j={};for(let[$,T]of Object.entries(f))if(typeof T==="string")j[$]=x(T);return j}function x(f){return f.replace(/\$\{(\w+)\}/g,(j,$)=>process.env[$]??"").replace(/\$env:(\w+)/g,(j,$)=>process.env[$]??"")}function tf(f){if(typeof f!=="string")return;let j=x(f);if(j==="~")return K.homedir();if(j.startsWith("~/")||j.startsWith("~\\"))return Q.join(K.homedir(),j.slice(2));return j}function sf(f){if(typeof f.bearerToken==="string")return x(f.bearerToken);return typeof f.bearerTokenEnv==="string"?process.env[f.bearerTokenEnv]:void 0}function n(f){if(f===null||f===void 0||typeof f!=="object"){let $=JSON.stringify(f);return $===void 0?"undefined":$}if(Array.isArray(f))return`[${f.map(($)=>n($)).join(",")}]`;let j=f;return`{${Object.keys(j).sort().map(($)=>`${JSON.stringify($)}:${n(j[$])}`).join(",")}}`}import{Compile as kj}from"typebox/compile";var jf="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",$f="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";var Tf="DM_SUBAGENT_TOOL_BUDGET";function Jf(f){return f?JSON.stringify(f):void 0}var ef=["off","minimal","low","medium","high","xhigh"],lf=8000;function qf(f,j){let $=Ef(f),T=X.extname($),J=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(T)?T:".ts";return X.join(X.dirname($),`${j}${J}`)}function Uf(f){return X.basename(Ef(f)).startsWith("dm-args.")}function af(f=import.meta.url){let j=Uf(f)?"subagent-prompt-runtime":X.join("..","runs","shared","subagent-prompt-runtime");return qf(f,j)}function fj(f=import.meta.url){let j=Uf(f)?X.join("..","..","extension","fanout-child"):"fanout-child";return qf(f,j)}var Bf=af(),jj=fj(),$j="DM_SUBAGENT_CHILD",Tj="DM_SUBAGENT_ORCHESTRATOR_TARGET",Jj="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",Bj="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",Of="DM_SUBAGENT_RUN_ID",Oj="DM_SUBAGENT_CHILD_AGENT",Wj="DM_SUBAGENT_CHILD_INDEX",Xj="DM_SUBAGENT_FANOUT_CHILD",D="DM_SUBAGENT_PARENT_EVENT_SINK",Wf="DM_SUBAGENT_PARENT_CONTROL_INBOX",o="DM_SUBAGENT_PARENT_ROOT_RUN_ID",Xf="DM_SUBAGENT_PARENT_RUN_ID",Zf="DM_SUBAGENT_PARENT_CHILD_INDEX",_f="DM_SUBAGENT_PARENT_DEPTH",Qf="DM_SUBAGENT_PARENT_PATH",v="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN",Yf="DM_SUBAGENT_PARENT_SESSION",Zj="DM_SUBAGENT_STEER_INBOX";function Af(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function _j(f,j,$){return X.join(L,"supervisor-channels",`${Af(f)}-${Af(j)}-${$}`)}function Qj(f,j,$=!1){if(!f||!j)return f;let T=f.lastIndexOf(":");if(T!==-1&&ef.includes(f.substring(T+1)))return $?`${f.slice(0,T)}:${j}`:f;return`${f}:${j}`}function lj(f){let j=[...f.baseArgs];if(f.sessionFile)A.mkdirSync(X.dirname(f.sessionFile),{recursive:!0}),j.push("--session",f.sessionFile);else{if(!f.sessionEnabled)j.push("--no-session");if(f.sessionDir)A.mkdirSync(f.sessionDir,{recursive:!0}),j.push("--session-dir",f.sessionDir)}let $=Qj(f.model,f.thinking);if($)j.push("--model",$);let T=f.tools?.filter((W)=>!(W.includes("/")||W.endsWith(".ts")||W.endsWith(".js")))??[],J=f.requireReadTool&&f.tools?.length&&!T.includes("read")?["read",...T]:T,O=J.includes("subagent"),Z=[];if(f.tools?.length){let W=[...J];for(let E of f.tools)if(!J.includes(E)&&(E.includes("/")||E.endsWith(".ts")||E.endsWith(".js")))Z.push(E);if(W.length>0){if(f.mcpDirectTools?.length)W.push(...ff(f.mcpDirectTools,f.cwd));j.push("--tools",W.join(","))}}let G=O?[Bf,jj]:[Bf];if(f.extensions!==void 0){j.push("--no-extensions");for(let W of[...new Set([...G,...Z,...f.extensions,...f.subagentOnlyExtensions??[]])])j.push("--extension",W)}else for(let W of[...new Set([...G,...Z,...f.subagentOnlyExtensions??[]])])j.push("--extension",W);if(!f.inheritSkills)j.push("--no-skills");let Y;if(f.systemPrompt!==void 0&&f.systemPrompt!==null){Y=A.mkdtempSync(X.join(P.tmpdir(),"dm-subagent-"));let W=(f.promptFileStem??"prompt").replace(/[^\w.-]/g,"_"),E=X.join(Y,`${W}.md`);A.writeFileSync(E,f.systemPrompt,{mode:384}),j.push(f.systemPromptMode==="replace"?"--system-prompt":"--append-system-prompt",E)}if(f.task.length>lf){if(!Y)Y=A.mkdtempSync(X.join(P.tmpdir(),"dm-subagent-"));let W=X.join(Y,"task.md");A.writeFileSync(W,`Task: ${f.task}`,{mode:384}),j.push(`@${W}`)}else j.push(`Task: ${f.task}`);let B={};B[$j]="1",B[Xj]=O?"1":"0";let y=Boolean(process.env[D]&&process.env[o]&&process.env[v]),V=f.parentRunId??f.runId??(y?process.env[Of]:void 0)??process.env[Xf]??"",_=f.parentChildIndex!==void 0?String(f.parentChildIndex):f.childIndex!==void 0?String(f.childIndex):process.env[Zf]??"",U=Number(process.env[_f]),H=f.parentDepth??(y&&Number.isFinite(U)?U+1:1),Mf=f.parentPath??[...w(process.env[Qf]),...V?[{runId:V,..._&&/^\d+$/.test(_)?{stepIndex:Number(_)}:{},...f.childAgentName?{agent:f.childAgentName}:{}}]:[]];if(B[D]=O?f.parentEventSink??process.env[D]??"":"",B[Wf]=O?f.parentControlInbox??process.env[Wf]??"":"",B[o]=O?f.parentRootRunId??process.env[o]??f.runId??"":"",B[Xf]=O?V:"",B[Zf]=O?_:"",B[_f]=O?String(H):"",B[Qf]=O?r(Mf):"",B[v]=O?f.parentCapabilityToken??process.env[v]??"":"",B.DM_SUBAGENT_INHERIT_PROJECT_CONTEXT=f.inheritProjectContext?"1":"0",B.DM_SUBAGENT_INHERIT_SKILLS=f.inheritSkills?"1":"0",f.intercomSessionName)B.DM_SUBAGENT_INTERCOM_SESSION_NAME=f.intercomSessionName;if(f.orchestratorIntercomTarget)B[Tj]=f.orchestratorIntercomTarget;if(f.parentSessionId)B[Jj]=f.parentSessionId;if(f.orchestratorIntercomTarget&&f.parentSessionId&&f.runId&&f.childAgentName){let W=f.childIndex??0,E=_j(f.runId,f.childAgentName,W);A.mkdirSync(X.join(E,"requests"),{recursive:!0}),A.mkdirSync(X.join(E,"replies"),{recursive:!0}),B[Bj]=E}if(f.runId)B[Of]=f.runId;if(f.childAgentName)B[Oj]=f.childAgentName;if(f.childIndex!==void 0)B[Wj]=String(f.childIndex);if(f.mcpDirectTools?.length)B.MCP_DIRECT_TOOLS=f.mcpDirectTools.join(",");else B.MCP_DIRECT_TOOLS="__none__";if(f.structuredOutput)B[$f]=f.structuredOutput.outputPath,B[jf]=f.structuredOutput.schemaPath;if(f.steerInboxDir)B[Zj]=f.steerInboxDir;let m=Jf(f.toolBudget);if(m)B[Tf]=m;return B[Yf]=f.parentSessionId??process.env[Yf]??"",{args:j,env:B,tempDir:Y}}var aj=w;function f$(f){if(!f)return;try{A.rmSync(f,{recursive:!0,force:!0})}catch{}}export{qf as resolveRuntimeExtensionPath,af as resolvePromptRuntimePath,fj as resolveFanoutChildPath,aj as parseParentPathEnv,f$ as cleanupTempDir,lj as buildPiArgs,Qj as applyThinkingSuffix,Bj as SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV,Zj as SUBAGENT_STEER_INBOX_ENV,Of as SUBAGENT_RUN_ID_ENV,Yf as SUBAGENT_PARENT_SESSION_ENV,Xf as SUBAGENT_PARENT_RUN_ID_ENV,o as SUBAGENT_PARENT_ROOT_RUN_ID_ENV,Qf as SUBAGENT_PARENT_PATH_ENV,D as SUBAGENT_PARENT_EVENT_SINK_ENV,_f as SUBAGENT_PARENT_DEPTH_ENV,Wf as SUBAGENT_PARENT_CONTROL_INBOX_ENV,Zf as SUBAGENT_PARENT_CHILD_INDEX_ENV,v as SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV,Tj as SUBAGENT_ORCHESTRATOR_TARGET_ENV,Jj as SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV,Xj as SUBAGENT_FANOUT_CHILD_ENV,Wj as SUBAGENT_CHILD_INDEX_ENV,$j as SUBAGENT_CHILD_ENV,Oj as SUBAGENT_CHILD_AGENT_ENV};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{randomUUID as
|
|
2
|
-
`,{mode:384}),{rootRunId:$,eventSink:Z,controlInbox:Q,capabilityToken:J}}function
|
|
3
|
-
`)){let j=
|
|
1
|
+
import{randomUUID as M$}from"node:crypto";import*as Y from"node:fs";import*as O from"node:path";import*as S from"node:os";import*as y from"node:path";function N($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function z$($){let J=$?.env??process.env,j=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof j==="function")return`uid-${j()}`;for(let X of["USERNAME","USER","LOGNAME"]){let K=J[X];if(K)return`user-${N(K)}`}let Z=$&&Object.hasOwn($,"userInfo")?$.userInfo:S.userInfo;try{let X=Z?.().username;if(X)return`user-${N(X)}`}catch{}let Q=J.USERPROFILE??J.HOME;if(Q)return`home-${N(Q)}`;let f=$&&Object.hasOwn($,"homedir")?$.homedir:S.homedir;try{let X=f?.();if(X)return`home-${N(X)}`}catch{}return"shared"}var L=y.join(S.tmpdir(),`dm-subagents-${z$()}`),t=y.join(L,"async-subagent-results"),e=y.join(L,"async-subagent-runs"),C$=y.join(L,"chain-runs"),t$=y.join(L,"artifacts");import*as J$ from"node:path";var _$=128,E$=4;function g($){return typeof $==="string"&&$.length>0&&$.length<=_$&&!J$.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function $$($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function j$($,J){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function h($){if(!Array.isArray($))return[];return $.map((J)=>{if(!J||typeof J!=="object")return;let j=J;if(!g(j.runId))return;return{runId:j.runId,...$$(j.stepIndex)!==void 0?{stepIndex:$$(j.stepIndex)}:{},...j$(j.agent,128)?{agent:j$(j.agent,128)}:{}}}).filter((J)=>Boolean(J)).slice(0,E$)}function m($){if(!$)return[];try{return h(JSON.parse($))}catch{return[]}}import*as M from"node:path";import{fileURLToPath as Z$}from"node:url";import*as V from"node:os";import*as U from"node:path";var _j=U.join(V.homedir(),".config","mcp","mcp.json"),Ej={cursor:[U.join(V.homedir(),".cursor","mcp.json")],"claude-code":[U.join(V.homedir(),".claude","mcp.json"),U.join(V.homedir(),".claude.json"),U.join(V.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[U.join(V.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[U.join(V.homedir(),".codex","config.json")],windsurf:[U.join(V.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as Rj}from"typebox/compile";function Q$($,J){let j=Z$($),Z=M.extname(j),Q=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(Z)?Z:".ts";return M.join(M.dirname(j),`${J}${Q}`)}function f$($){return M.basename(Z$($)).startsWith("dm-args.")}function R$($=import.meta.url){let J=f$($)?"subagent-prompt-runtime":M.join("..","runs","shared","subagent-prompt-runtime");return Q$($,J)}function b$($=import.meta.url){let J=f$($)?M.join("..","..","extension","fanout-child"):"fanout-child";return Q$($,J)}var dj=R$(),oj=b$();var n="DM_SUBAGENT_PARENT_EVENT_SINK",d="DM_SUBAGENT_PARENT_CONTROL_INBOX",o="DM_SUBAGENT_PARENT_ROOT_RUN_ID",W$="DM_SUBAGENT_PARENT_RUN_ID",O$="DM_SUBAGENT_PARENT_CHILD_INDEX",X$="DM_SUBAGENT_PARENT_DEPTH",B$="DM_SUBAGENT_PARENT_PATH",p="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN";import*as D$ from"node:fs";import*as C from"node:path";var I$=[10,25,50,100,200,500,1000,2000,4000],N$=new Set(["EACCES","EBUSY","EPERM"]),K$=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,Y$=K$?new Int32Array(K$):void 0;function x$($){if($<=0)return;if(Y$)try{Atomics.wait(Y$,0,0,$);return}catch{}let J=Date.now()+$;while(Date.now()<J);}function P$($){let J=$?.code;return typeof J==="string"&&N$.has(J)}function w$($,J,j,Z,Q){for(let f=0;;f++)try{$.renameSync(J,j);return}catch(X){let K=Z[f];if(K===void 0||!P$(X))throw X;Q(K)}}function v$($={}){let J=$.fs??D$,j=$.now??Date.now,Z=$.pid??process.pid,Q=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??I$:[],K=$.wait??x$;return(q,z)=>{J.mkdirSync(C.dirname(q),{recursive:!0});let T=C.join(C.dirname(q),`.${C.basename(q)}.${Z}.${j()}.${Q().toString(36).slice(2)}.tmp`);try{J.writeFileSync(T,JSON.stringify(z,null,2),"utf-8"),w$(J,T,q,X,K)}finally{J.rmSync(T,{force:!0})}}}var q$=v$();var F=O.join(L,"nested-subagent-events"),D="route.json",k$="registry.json",E=65536,u=12,b=16,x=3;function A($){return g($)}function c$($,J){if(!A(J))throw Error(`${$} must be a non-empty safe id token.`)}function G($,J){c$($,J)}function _($,J){let j=O.resolve($),Z=O.resolve(J);return Z===j||Z.startsWith(`${j}${O.sep}`)}function i($){return O.dirname(O.resolve($.eventSink))}function H($){if(G("rootRunId",$.rootRunId),G("capabilityToken",$.capabilityToken),!_(F,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!_(F,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(i($)!==O.dirname(O.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function tj($){G("rootRunId",$);let J=M$(),j=O.join(F,`${$}-${J}`),Z=O.join(j,"events"),Q=O.join(j,"controls");return Y.mkdirSync(Z,{recursive:!0,mode:448}),Y.mkdirSync(Q,{recursive:!0,mode:448}),Y.writeFileSync(O.join(j,D),`${JSON.stringify({rootRunId:$,capabilityToken:J,createdAt:Date.now()})}
|
|
2
|
+
`,{mode:384}),{rootRunId:$,eventSink:Z,controlInbox:Q,capabilityToken:J}}function g$($=process.env){let J=$[o],j=$[n],Z=$[d],Q=$[p];if(!J||!j||!Z||!Q)return;let f={rootRunId:J,eventSink:j,controlInbox:Z,capabilityToken:Q};H(f);let X=O.join(i(f),D),K=JSON.parse(Y.readFileSync(X,"utf-8"));if(K.rootRunId!==J||K.capabilityToken!==Q)throw Error("Nested event route metadata does not match the provided root id and capability token.");return f}function ej($=process.env){try{return g$($)}catch(J){console.error("Ignoring invalid nested subagent event route:",J);return}}function $J($=process.env){let J=$[W$];if(!A(J))return;let j=$[O$],Z=j&&/^\d+$/.test(j)?Number(j):void 0,Q=Math.min(Math.max(1,W(Number($[X$]))??1),x),f=m($[B$]),X=f.length?f:[{runId:J,...Z!==void 0?{stepIndex:Z}:{}}];return{parentRunId:J,...Z!==void 0?{parentStepIndex:Z}:{},depth:Q,path:X}}function jJ($,J){if(!J.asyncDir)return;let j=O.resolve(J.asyncDir),Z=O.resolve(L,"nested-subagent-runs",$,J.id),Q=O.relative(Z,j);return j===Z||!Q.startsWith("..")&&!O.isAbsolute(Q)?j:void 0}function W($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function B($,J=512){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function h$($){if(!$||typeof $!=="object")return;let J=$,j=W(J.input),Z=W(J.output),Q=W(J.total);return j!==void 0&&Z!==void 0&&Q!==void 0?{input:j,output:Z,total:Q}:void 0}function m$($){if(!$||typeof $!=="object")return;let J=$,j=W(J.inputTokens),Z=W(J.outputTokens),Q=W(J.costUsd);return j!==void 0&&Z!==void 0&&Q!==void 0?{inputTokens:j,outputTokens:Z,costUsd:Q}:void 0}function P($){if(!$||typeof $!=="object")return;let J=$,j=W(J.maxTurns),Z=W(J.graceTurns),Q=W(J.turnCount),f=J.outcome==="within-budget"||J.outcome==="wrap-up-requested"||J.outcome==="exceeded"?J.outcome:void 0;if(j===void 0||Z===void 0||Q===void 0||!f)return;return{maxTurns:j,graceTurns:Z,turnCount:Q,outcome:f,...W(J.wrapUpRequestedAtTurn)!==void 0?{wrapUpRequestedAtTurn:W(J.wrapUpRequestedAtTurn)}:{},...W(J.exceededAtTurn)!==void 0?{exceededAtTurn:W(J.exceededAtTurn)}:{}}}function n$($,J){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:J}function d$($,J){if(!$||typeof $!=="object")return;let j=$,Z=B(j.agent,128);if(!Z)return;let Q=j.status==="pending"||j.status==="running"||j.status==="complete"||j.status==="completed"||j.status==="failed"||j.status==="paused"?j.status:"pending";return{agent:Z,status:Q,...B(j.sessionFile,2048)?{sessionFile:B(j.sessionFile,2048)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...W(j.lastActivityAt)!==void 0?{lastActivityAt:W(j.lastActivityAt)}:{},...B(j.currentTool,128)?{currentTool:B(j.currentTool,128)}:{},...W(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:W(j.currentToolStartedAt)}:{},...B(j.currentPath,2048)?{currentPath:B(j.currentPath,2048)}:{},...W(j.turnCount)!==void 0?{turnCount:W(j.turnCount)}:{},...W(j.toolCount)!==void 0?{toolCount:W(j.toolCount)}:{},...W(j.startedAt)!==void 0?{startedAt:W(j.startedAt)}:{},...W(j.endedAt)!==void 0?{endedAt:W(j.endedAt)}:{},...B(j.error,1024)?{error:B(j.error,1024)}:{},...j.timedOut===!0?{timedOut:!0}:{},...P(j.turnBudget)?{turnBudget:P(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...J<x&&Array.isArray(j.children)?{children:j.children.map((f)=>v(f,J+1)).filter((f)=>Boolean(f)).slice(0,b)}:{}}}function v($,J=0){if(!$||typeof $!=="object")return;let j=$;if(!A(j.id)||!A(j.parentRunId))return;let Z=h(j.path),Q=Array.isArray(j.steps)?j.steps.map((K)=>d$(K,J+1)).filter((K)=>Boolean(K)).slice(0,u):void 0,f=h$(j.totalTokens),X=m$(j.totalCost);return{id:j.id,parentRunId:j.parentRunId,...W(j.parentStepIndex)!==void 0?{parentStepIndex:W(j.parentStepIndex)}:{},...B(j.parentAgent,128)?{parentAgent:B(j.parentAgent,128)}:{},depth:Math.min(Math.max(0,W(j.depth)??0),x),path:Z,state:n$(j.state,"running"),...B(j.asyncDir,2048)?{asyncDir:B(j.asyncDir,2048)}:{},...W(j.pid)!==void 0&&W(j.pid)>0&&Number.isInteger(W(j.pid))?{pid:W(j.pid)}:{},...B(j.sessionId,256)?{sessionId:B(j.sessionId,256)}:{},...B(j.sessionFile,2048)?{sessionFile:B(j.sessionFile,2048)}:{},...B(j.intercomTarget,256)?{intercomTarget:B(j.intercomTarget,256)}:{},...B(j.ownerIntercomTarget,256)?{ownerIntercomTarget:B(j.ownerIntercomTarget,256)}:{},...B(j.leafIntercomTarget,256)?{leafIntercomTarget:B(j.leafIntercomTarget,256)}:{},...j.ownerState==="live"||j.ownerState==="gone"||j.ownerState==="unknown"?{ownerState:j.ownerState}:{},...B(j.controlInbox,2048)?{controlInbox:B(j.controlInbox,2048)}:{},...B(j.capabilityToken,128)?{capabilityToken:B(j.capabilityToken,128)}:{},...j.mode==="single"||j.mode==="parallel"||j.mode==="chain"?{mode:j.mode}:{},...B(j.agent,128)?{agent:B(j.agent,128)}:{},...Array.isArray(j.agents)?{agents:j.agents.map((K)=>B(K,128)).filter((K)=>Boolean(K)).slice(0,u)}:{},...W(j.currentStep)!==void 0?{currentStep:W(j.currentStep)}:{},...W(j.chainStepCount)!==void 0?{chainStepCount:W(j.chainStepCount)}:{},...j.activityState==="active_long_running"||j.activityState==="needs_attention"?{activityState:j.activityState}:{},...W(j.lastActivityAt)!==void 0?{lastActivityAt:W(j.lastActivityAt)}:{},...B(j.currentTool,128)?{currentTool:B(j.currentTool,128)}:{},...W(j.currentToolStartedAt)!==void 0?{currentToolStartedAt:W(j.currentToolStartedAt)}:{},...B(j.currentPath,2048)?{currentPath:B(j.currentPath,2048)}:{},...W(j.turnCount)!==void 0?{turnCount:W(j.turnCount)}:{},...W(j.toolCount)!==void 0?{toolCount:W(j.toolCount)}:{},...f?{totalTokens:f}:{},...X?{totalCost:X}:{},...W(j.startedAt)!==void 0?{startedAt:W(j.startedAt)}:{},...W(j.endedAt)!==void 0?{endedAt:W(j.endedAt)}:{},...W(j.lastUpdate)!==void 0?{lastUpdate:W(j.lastUpdate)}:{},...W(j.timeoutMs)!==void 0?{timeoutMs:W(j.timeoutMs)}:{},...W(j.deadlineAt)!==void 0?{deadlineAt:W(j.deadlineAt)}:{},...j.timedOut===!0?{timedOut:!0}:{},...P(j.turnBudget)?{turnBudget:P(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...B(j.error,1024)?{error:B(j.error,1024)}:{},...Q&&Q.length>0?{steps:Q}:{},...J<x&&Array.isArray(j.children)?{children:j.children.map((K)=>v(K,J+1)).filter((K)=>Boolean(K)).slice(0,b)}:{}}}function r($,J){if(Buffer.byteLength($,"utf-8")>E)return;let j;try{j=JSON.parse($)}catch{return}if(!j||typeof j!=="object")return;let Z=j;if(Z.type!=="subagent.nested.started"&&Z.type!=="subagent.nested.updated"&&Z.type!=="subagent.nested.completed")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!A(Z.parentRunId))return;let Q=W(Z.ts);if(Q===void 0)return;let f=v(Z.child);if(!f||f.id===J.rootRunId)return;let X={...f,controlInbox:J.controlInbox,capabilityToken:J.capabilityToken,ownerState:f.ownerState??"unknown"};return{type:Z.type,ts:Q,rootRunId:J.rootRunId,parentRunId:Z.parentRunId,...W(Z.parentStepIndex)!==void 0?{parentStepIndex:W(Z.parentStepIndex)}:{},capabilityToken:J.capabilityToken,child:X}}function o$($,J){if(!$.includes(`
|
|
3
|
+
`)){let j=r($.trim(),J);return j?[j]:[]}return $.split(`
|
|
4
4
|
`).slice(0,$.endsWith(`
|
|
5
|
-
`)?void 0:-1).map((j)=>j.trim()?
|
|
6
|
-
`;if(Buffer.byteLength(Z,"utf-8")>
|
|
5
|
+
`)?void 0:-1).map((j)=>j.trim()?r(j,J):void 0).filter((j)=>Boolean(j))}function R($){return $==="complete"||$==="failed"||$==="paused"}function G$($,J){let j=J.type==="subagent.nested.completed"&&J.child.state==="running"?"complete":J.child.state,Z={...J.child,state:j,lastUpdate:J.child.lastUpdate??J.ts};if(!$)return Z;let Q=$.lastUpdate??0,f=Z.lastUpdate??J.ts;if(f<Q)return $;if(R($.state)&&!R(Z.state))return $;if(R($.state)&&R(Z.state)&&f===Q)return $;return{...$,...Z,state:Z.state,lastUpdate:Math.max(Q,f)}}function p$($,J){let j=!1,Z=(K)=>K.map((q)=>{if(q.id===J.parentRunId){let T=q.children??[],I=T.findIndex((c)=>c.id===J.child.id),a=G$(I>=0?T[I]:void 0,J),A$=I>=0?T.map((c,T$)=>T$===I?a:c):[...T,a];return j=!0,{...q,children:A$.slice(0,b),lastUpdate:Math.max(q.lastUpdate??0,J.ts)}}if(!q.children?.length)return q;let z=Z(q.children);return z===q.children?q:{...q,children:z}}),Q=Z($);if(j)return Q;let f=Q.findIndex((K)=>K.id===J.child.id),X=G$(f>=0?Q[f]:void 0,J);return f>=0?Q.map((K,q)=>q===f?X:K):[...Q,X].slice(0,b)}function u$($,J){return{...$,updatedAt:Math.max($.updatedAt,J.ts),children:p$($.children,J)}}function L$($){return O.join(i($),k$)}function r$($){G("rootRunId",$);let J;try{J=Y.readdirSync(F)}catch(j){if(j.code==="ENOENT")return;throw j}for(let j of J){if(!j.startsWith(`${$}-`))continue;let Z=O.join(F,j);try{let Q=JSON.parse(Y.readFileSync(O.join(Z,D),"utf-8"));if(Q.rootRunId!==$||typeof Q.capabilityToken!=="string")continue;let f={rootRunId:$,eventSink:O.join(Z,"events"),controlInbox:O.join(Z,"controls"),capabilityToken:Q.capabilityToken};return H(f),f}catch{continue}}return}function JJ(){let $;try{$=Y.readdirSync(F)}catch(j){if(j.code==="ENOENT")return new Map;throw j}let J=new Map;for(let j of $){let Z=O.join(F,j);try{let Q=JSON.parse(Y.readFileSync(O.join(Z,D),"utf-8"));if(typeof Q.rootRunId!=="string"||typeof Q.capabilityToken!=="string")continue;if(J.has(Q.rootRunId))continue;let f={rootRunId:Q.rootRunId,eventSink:O.join(Z,"events"),controlInbox:O.join(Z,"controls"),capabilityToken:Q.capabilityToken};H(f),J.set(Q.rootRunId,f)}catch{continue}}return J}function ZJ($){let J=r$($);return J?k(J):void 0}function H$($,J){if(!$?.length)return;for(let j of $){if(j.id===J)return j;let Z=H$(j.children,J)??H$(j.steps?.flatMap((Q)=>Q.children??[]),J);if(Z)return Z}return}function w($,J=[]){for(let j of $??[])J.push(j),w(j.children,J),w(j.steps?.flatMap((Z)=>Z.children??[]),J);return J}function l($,J,j=[]){if(!J)return w($,j);for(let Z of $??[]){if(Z.parentRunId===J.parentRunId&&(J.parentStepIndex===void 0||Z.parentStepIndex===J.parentStepIndex)){w([Z],j);continue}l(Z.children,J,j),l(Z.steps?.flatMap((Q)=>Q.children??[]),J,j)}return j}function l$(){let $;try{$=Y.readdirSync(F)}catch(j){if(j.code==="ENOENT")return[];throw j}let J=[];for(let j of $){let Z=O.join(F,j);try{let Q=JSON.parse(Y.readFileSync(O.join(Z,D),"utf-8"));if(typeof Q.rootRunId!=="string"||typeof Q.capabilityToken!=="string")continue;let f={rootRunId:Q.rootRunId,eventSink:O.join(Z,"events"),controlInbox:O.join(Z,"controls"),capabilityToken:Q.capabilityToken};H(f),J.push(f)}catch{continue}}return J}function i$($,J={}){G("id",$);let j=[];for(let Z of J.scope?.routes??l$())try{let Q=k(Z);for(let f of l(Q.children,J.scope?.descendantOf))if(J.prefix?f.id.startsWith($):f.id===$)j.push({rootRunId:Z.rootRunId,route:Z,run:f})}catch{continue}return j}function QJ($){let J=i$($)[0];return J?{rootRunId:J.rootRunId,run:J.run}:void 0}function s$($){H($);try{let J=JSON.parse(Y.readFileSync(L$($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof J.updatedAt==="number"?J.updatedAt:0,children:Array.isArray(J.children)?J.children.map((j)=>v(j)).filter((j)=>Boolean(j)):[],processedEvents:Array.isArray(J.processedEvents)?J.processedEvents.filter((j)=>typeof j==="string"):[]}}catch(J){if(J.code!=="ENOENT")throw J;return{rootRunId:$.rootRunId,updatedAt:0,children:[],processedEvents:[]}}}function k($){H($);let J=s$($),j=new Set(J.processedEvents),Z=!1,Q=[];try{Q=Y.readdirSync($.eventSink).filter((f)=>f.endsWith(".json")||f.endsWith(".jsonl")).sort()}catch(f){if(f.code!=="ENOENT")throw f}for(let f of Q){if(j.has(f))continue;let X=O.join($.eventSink,f);if(!_($.eventSink,X))continue;let K;try{let q=Y.statSync(X);if(!q.isFile()||q.size>E)continue;K=Y.readFileSync(X,"utf-8")}catch{continue}for(let q of o$(K,$))J=u$(J,q),Z=!0;j.add(f),Z=!0}if(Z)J={...J,processedEvents:[...j].slice(-1000)},q$(L$($),J);return J}function s($,J,j){let Z=`${JSON.stringify(j)}
|
|
6
|
+
`;if(Buffer.byteLength(Z,"utf-8")>E)throw Error("Nested route record exceeds the maximum size.");Y.mkdirSync($,{recursive:!0,mode:448});let Q=`${String(J).padStart(13,"0")}-${M$()}.json`,f=O.join($,`.${Q}.tmp`),X=O.join($,Q);return Y.writeFileSync(f,Z,{mode:384}),Y.renameSync(f,X),X}function fJ($,J){H($);let j={...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=r(JSON.stringify(j),$);if(!Z)throw Error("Nested event record failed validation.");s($.eventSink,Z.ts,Z)}function V$($,J){if(Buffer.byteLength($,"utf-8")>E)return;let j;try{j=JSON.parse($)}catch{return}if(!j||typeof j!=="object")return;let Z=j;if(Z.type!=="subagent.nested.control-request")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!A(Z.requestId)||!A(Z.targetRunId))return;if(Z.action!=="interrupt"&&Z.action!=="resume")return;let Q=W(Z.ts);if(Q===void 0)return;return{type:"subagent.nested.control-request",ts:Q,rootRunId:J.rootRunId,capabilityToken:J.capabilityToken,requestId:Z.requestId,targetRunId:Z.targetRunId,action:Z.action,...B(Z.message,16000)?{message:B(Z.message,16000)}:{}}}function F$($,J){if(Buffer.byteLength($,"utf-8")>E)return;let j;try{j=JSON.parse($)}catch{return}if(!j||typeof j!=="object")return;let Z=j;if(Z.type!=="subagent.nested.control-result")return;if(Z.rootRunId!==J.rootRunId||Z.capabilityToken!==J.capabilityToken)return;if(!A(Z.requestId)||!A(Z.targetRunId))return;let Q=W(Z.ts);if(Q===void 0||typeof Z.ok!=="boolean")return;return{type:"subagent.nested.control-result",ts:Q,rootRunId:J.rootRunId,capabilityToken:J.capabilityToken,requestId:Z.requestId,targetRunId:Z.targetRunId,ok:Z.ok,message:B(Z.message,16000)??(Z.ok?"Control request completed.":"Control request failed.")}}function WJ($,J){H($),G("requestId",J.requestId),G("targetRunId",J.targetRunId);let j={type:"subagent.nested.control-request",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=V$(JSON.stringify(j),$);if(!Z)throw Error("Nested control request failed validation.");return s($.controlInbox,Z.ts,Z)}function OJ($){H($);let J=[];try{J=Y.readdirSync($.controlInbox).filter((Z)=>Z.endsWith(".json")).sort()}catch(Z){if(Z.code!=="ENOENT")throw Z}let j=[];for(let Z of J){let Q=O.join($.controlInbox,Z);if(!_($.controlInbox,Q))continue;try{let f=Y.statSync(Q);if(!f.isFile()||f.size>E)continue;let X=V$(Y.readFileSync(Q,"utf-8"),$);if(X)j.push({...X,filePath:Q})}catch{continue}}return j}function XJ($,J){H($),G("requestId",J.requestId),G("targetRunId",J.targetRunId);let j={type:"subagent.nested.control-result",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=F$(JSON.stringify(j),$);if(!Z)throw Error("Nested control result failed validation.");s($.eventSink,Z.ts,Z)}function BJ($){H($);let J=[];try{J=Y.readdirSync($.eventSink).filter((Z)=>Z.endsWith(".json")||Z.endsWith(".jsonl")).sort()}catch(Z){if(Z.code!=="ENOENT")throw Z}let j=[];for(let Z of J){let Q=O.join($.eventSink,Z);if(!_($.eventSink,Q))continue;try{let f=Y.statSync(Q);if(!f.isFile()||f.size>E)continue;let X=Y.readFileSync(Q,"utf-8"),K=X.includes(`
|
|
7
7
|
`)?X.split(`
|
|
8
|
-
`).filter((q)=>q.trim()):[X];for(let q of K){let z=
|
|
8
|
+
`).filter((q)=>q.trim()):[X];for(let q of K){let z=F$(q,$);if(z)j.push(z)}}catch{continue}}return j}function KJ($){return{[n]:$.eventSink,[d]:$.controlInbox,[o]:$.rootRunId,[p]:$.capabilityToken}}function a$($,J,j){if(!J?.length)return;for(let Z of J)Z.children=void 0;if(!j?.length)return;for(let Z of j){if(Z.parentRunId!==$||Z.parentStepIndex===void 0)continue;let Q=J.find((f,X)=>(f.index??X)===Z.parentStepIndex);if(!Q)continue;Q.children??=[],Q.children=[...Q.children.filter((f)=>f.id!==Z.id),Z].slice(0,b)}}function YJ($){if(!$.nestedRoute)return;let J=k($.nestedRoute);$.nestedChildren=J.children,a$($.asyncId,$.steps,J.children)}function qJ($){if(!$.nestedRoute)return;let J=k($.nestedRoute);$.nestedChildren=J.children}function U$($){if(!$?.length)return!1;for(let J of $){if(!R(J.state))return!0;if(U$(J.children))return!0;if(U$(J.steps?.flatMap((j)=>j.children??[])))return!0}return!1}function GJ($,J,j){return{id:$.runId||j.id,parentRunId:j.parentRunId,...j.parentStepIndex!==void 0?{parentStepIndex:j.parentStepIndex}:{},depth:j.depth,path:j.path??[{runId:j.parentRunId,...j.parentStepIndex!==void 0?{stepIndex:j.parentStepIndex}:{}}],asyncDir:J,...$.pid?{pid:$.pid}:{},...$.sessionId?{sessionId:$.sessionId}:{},mode:$.mode??j.mode,state:$.state,...$.currentStep!==void 0?{currentStep:$.currentStep}:{},...$.chainStepCount!==void 0?{chainStepCount:$.chainStepCount}:{},...$.activityState?{activityState:$.activityState}:{},...$.lastActivityAt!==void 0?{lastActivityAt:$.lastActivityAt}:{},...$.currentTool?{currentTool:$.currentTool}:{},...$.currentToolStartedAt!==void 0?{currentToolStartedAt:$.currentToolStartedAt}:{},...$.currentPath?{currentPath:$.currentPath}:{},...$.turnCount!==void 0?{turnCount:$.turnCount}:{},...$.toolCount!==void 0?{toolCount:$.toolCount}:{},...$.totalTokens?{totalTokens:$.totalTokens}:{},...$.timeoutMs!==void 0?{timeoutMs:$.timeoutMs}:{},...$.deadlineAt!==void 0?{deadlineAt:$.deadlineAt}:{},...$.timedOut!==void 0?{timedOut:$.timedOut}:{},...$.turnBudget?{turnBudget:$.turnBudget}:{},...$.turnBudgetExceeded!==void 0?{turnBudgetExceeded:$.turnBudgetExceeded}:{},...$.wrapUpRequested!==void 0?{wrapUpRequested:$.wrapUpRequested}:{},...$.error?{error:$.error}:{},...$.startedAt!==void 0?{startedAt:$.startedAt}:{startedAt:j.ts},...$.endedAt!==void 0?{endedAt:$.endedAt}:{},lastUpdate:$.lastUpdate??j.ts,...$.sessionFile?{sessionFile:$.sessionFile}:{},...$.steps?.length?{steps:$.steps.map((Z)=>({agent:Z.agent,status:Z.status,...Z.sessionFile?{sessionFile:Z.sessionFile}:{},...Z.activityState?{activityState:Z.activityState}:{},...Z.lastActivityAt!==void 0?{lastActivityAt:Z.lastActivityAt}:{},...Z.currentTool?{currentTool:Z.currentTool}:{},...Z.currentToolStartedAt!==void 0?{currentToolStartedAt:Z.currentToolStartedAt}:{},...Z.currentPath?{currentPath:Z.currentPath}:{},...Z.turnCount!==void 0?{turnCount:Z.turnCount}:{},...Z.toolCount!==void 0?{toolCount:Z.toolCount}:{},...Z.startedAt!==void 0?{startedAt:Z.startedAt}:{},...Z.endedAt!==void 0?{endedAt:Z.endedAt}:{},...Z.error?{error:Z.error}:{},...Z.timedOut!==void 0?{timedOut:Z.timedOut}:{},...Z.turnBudget?{turnBudget:Z.turnBudget}:{},...Z.turnBudgetExceeded!==void 0?{turnBudgetExceeded:Z.turnBudgetExceeded}:{},...Z.wrapUpRequested!==void 0?{wrapUpRequested:Z.wrapUpRequested}:{}})).slice(0,u)}:{}}}function HJ($,J){return{DM_SUBAGENT_NESTED_ROOT_RUN_ID:$,DM_SUBAGENT_NESTED_PARENT_RUN_ID:J}}function UJ($){let J=O.resolve($);return _(e,J)&&!_(O.join(L,"nested-subagent-runs"),J)}function MJ($,J){return G("rootRunId",$),G("id",J),O.join(t,"nested",$,`${J}.json`)}export{fJ as writeNestedEvent,XJ as writeNestedControlResult,WJ as writeNestedControlRequest,qJ as updateForegroundNestedProjection,YJ as updateAsyncJobNestedProjection,v as sanitizeSummary,g$ as resolveNestedRouteFromEnv,$J as resolveNestedParentAddressFromEnv,jJ as resolveNestedAsyncDir,ej as resolveInheritedNestedRouteFromEnv,s$ as readNestedRegistry,BJ as readNestedControlResults,OJ as readNestedControlRequests,ZJ as projectNestedRegistryForRoot,k as projectNestedEvents,o$ as parseNestedEventRecords,GJ as nestedSummaryFromAsyncStatus,KJ as nestedRouteEnv,MJ as nestedResultsPath,HJ as nestedArtifactEnv,UJ as isTopLevelAsyncDir,A as isSafeNestedId,U$ as hasLiveNestedDescendants,i$ as findNestedRunMatchesById,QJ as findNestedRunById,H$ as findNestedRun,r$ as findNestedRouteForRootId,tj as createNestedRoute,JJ as buildNestedRouteIndex,a$ as attachRootChildrenToSteps,c$ as assertSafeNestedId,u$ as applyNestedEvent,F as NESTED_EVENTS_DIR};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import*as A from"node:fs";import*as
|
|
2
|
-
`).trimEnd()}function
|
|
3
|
-
${Y.message}`}],details:
|
|
4
|
-
`),
|
|
5
|
-
`),
|
|
6
|
-
`),
|
|
1
|
+
import*as A from"node:fs";import*as K$ from"node:path";import{randomUUID as v$}from"node:crypto";import*as M from"node:fs";import*as F from"node:path";import{Type as K}from"typebox";import*as H from"node:path";import{fileURLToPath as d}from"node:url";import*as T from"node:os";import*as G from"node:path";import*as z from"node:os";import*as b from"node:path";function S($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function L$($){let j=$?.env??process.env,J=$&&Object.hasOwn($,"getuid")?$.getuid:process.getuid?.bind(process);if(typeof J==="function")return`uid-${J()}`;for(let Q of["USERNAME","USER","LOGNAME"]){let O=j[Q];if(O)return`user-${S(O)}`}let B=$&&Object.hasOwn($,"userInfo")?$.userInfo:z.userInfo;try{let Q=B?.().username;if(Q)return`user-${S(Q)}`}catch{}let Z=j.USERPROFILE??j.HOME;if(Z)return`home-${S(Z)}`;let X=$&&Object.hasOwn($,"homedir")?$.homedir:z.homedir;try{let Q=X?.();if(Q)return`home-${S(Q)}`}catch{}return"shared"}var _=b.join(z.tmpdir(),`dm-subagents-${L$()}`),Lj=b.join(_,"async-subagent-results"),Cj=b.join(_,"async-subagent-runs"),C$=b.join(_,"chain-runs"),zj=b.join(_,"artifacts");var y=250;var uj=G.join(T.homedir(),".config","mcp","mcp.json"),rj={cursor:[G.join(T.homedir(),".cursor","mcp.json")],"claude-code":[G.join(T.homedir(),".claude","mcp.json"),G.join(T.homedir(),".claude.json"),G.join(T.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[G.join(T.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[G.join(T.homedir(),".codex","config.json")],windsurf:[G.join(T.homedir(),".windsurf","mcp.json")],vscode:[".vscode/mcp.json"]};import{Compile as z$}from"typebox/compile";var x="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",R="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";function h($,j){let J;try{J=z$($)}catch(Z){return{status:"invalid",message:`invalid outputSchema: ${Z instanceof Error?Z.message:String(Z)}`}}if(J.Check(j))return{status:"valid"};return{status:"invalid",message:[...J.Errors(j)].slice(0,8).map((Z)=>{return`${Z.instancePath?Z.instancePath.replace(/^\//,"").replace(/\//g,"."):"root"}: ${Z.message}`}).join("; ")||"schema validation failed"}}var b$=["read","grep","find","ls"],I="DM_SUBAGENT_TOOL_BUDGET";function F$($){if($==="*")return"*";if($===void 0)return[...b$];return[...new Set($.map((j)=>j.trim()).filter(Boolean))]}function E$($,j="toolBudget"){if($===void 0)return{};if(!$||typeof $!=="object"||Array.isArray($))return{error:`${j} must be an object with hard and optional soft/block.`};let J=$;if(typeof J.hard!=="number"||!Number.isInteger(J.hard)||J.hard<1)return{error:`${j}.hard must be an integer >= 1.`};if(J.soft!==void 0&&(typeof J.soft!=="number"||!Number.isInteger(J.soft)||J.soft<1))return{error:`${j}.soft must be an integer >= 1 when provided.`};if(J.soft!==void 0&&J.soft>J.hard)return{error:`${j}.soft must be <= ${j}.hard.`};if(J.block!==void 0&&J.block!=="*"){if(!Array.isArray(J.block))return{error:`${j}.block must be "*" or an array of tool names.`};if(J.block.length===0)return{error:`${j}.block must contain at least one tool name.`};for(let B of J.block)if(typeof B!=="string"||!B.trim())return{error:`${j}.block must contain non-empty tool names.`}}return{budget:{hard:J.hard,...J.soft!==void 0?{soft:J.soft}:{},block:F$(J.block)}}}function g($,j,J){if(J<=$.hard)return!1;return $.block==="*"||$.block.includes(j)}function o($,j){return`Tool budget soft limit reached after ${j} tool call${j===1?"":"s"} (soft ${$.soft}, hard ${$.hard}). Stop starting new browsing/search work and finalize from the context you already have.`}function m($,j,J){return`Tool budget hard limit reached after ${J} tool call${J===1?"":"s"} (hard ${$.hard}). The '${j}' tool is blocked so you can finalize from the context you already have.`}function n($){if(!$?.trim())return;let j=JSON.parse($),J=E$(j,"DM_SUBAGENT_TOOL_BUDGET");if(J.error)throw Error(J.error);return J.budget}function u($,j){let J=d($),B=H.extname(J),Z=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(B)?B:".ts";return H.join(H.dirname(J),`${j}${Z}`)}function r($){return H.basename(d($)).startsWith("dm-args.")}function N$($=import.meta.url){let j=r($)?"subagent-prompt-runtime":H.join("..","runs","shared","subagent-prompt-runtime");return u($,j)}function S$($=import.meta.url){let j=r($)?H.join("..","..","extension","fanout-child"):"fanout-child";return u($,j)}var O0=N$(),Y0=S$();var p="DM_SUBAGENT_ORCHESTRATOR_TARGET",l="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",t="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",i="DM_SUBAGENT_RUN_ID",s="DM_SUBAGENT_CHILD_AGENT",a="DM_SUBAGENT_CHILD_INDEX",c="DM_SUBAGENT_FANOUT_CHILD";var e="DM_SUBAGENT_STEER_INBOX";import*as R$ from"node:fs";import*as L from"node:path";var w$=[10,25,50,100,200,500,1000,2000,4000],y$=new Set(["EACCES","EBUSY","EPERM"]),$$=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,j$=$$?new Int32Array($$):void 0;function x$($){if($<=0)return;if(j$)try{Atomics.wait(j$,0,0,$);return}catch{}let j=Date.now()+$;while(Date.now()<j);}function I$($){let j=$?.code;return typeof j==="string"&&y$.has(j)}function c$($,j,J,B,Z){for(let X=0;;X++)try{$.renameSync(j,J);return}catch(Q){let O=B[X];if(O===void 0||!I$(Q))throw Q;Z(O)}}function q$($={}){let j=$.fs??R$,J=$.now??Date.now,B=$.pid??process.pid,Z=$.random??Math.random,Q=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??w$:[],O=$.wait??x$;return(Y,W)=>{j.mkdirSync(L.dirname(Y),{recursive:!0});let f=L.join(L.dirname(Y),`.${L.basename(Y)}.${B}.${J()}.${Z().toString(36).slice(2)}.tmp`);try{j.writeFileSync(f,JSON.stringify(W,null,2),"utf-8"),c$(j,f,Y,Q,O)}finally{j.rmSync(f,{force:!0})}}}var w=q$();var T0=F.join(_,"supervisor-channels"),B$="requests",Z$="replies";var D$=65536,P$=600000,M0=Math.min(y,500),k$=K.Object({reason:K.String({enum:["need_decision","interview_request","progress_update"]}),message:K.Optional(K.String()),interview:K.Optional(K.Unsafe({type:"object",additionalProperties:!0}))},{additionalProperties:!1}),h$=K.Object({action:K.String({enum:["list","send","ask","reply","pending","status"]}),to:K.Optional(K.String()),message:K.Optional(K.String()),replyTo:K.Optional(K.String())},{additionalProperties:!1});function X$($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function g$($){M.mkdirSync(F.join($,B$),{recursive:!0,mode:448}),M.mkdirSync(F.join($,Z$),{recursive:!0,mode:448})}function o$($,j){return F.join($,B$,`${X$(j)}.json`)}function m$($,j){return F.join($,Z$,`${X$(j)}.json`)}function C($){let j=process.env[$]?.trim();return j?j:void 0}function Q$(){let $=C(t),j=C(i),J=C(s),B=C(a),Z=C(l);if(!$||!j||!J||!Z||B===void 0||!/^\d+$/.test(B))return;return{channelDir:$,runId:j,agent:J,childIndex:Number(B),orchestratorTarget:C(p),orchestratorSessionId:Z,childTarget:C("DM_SUBAGENT_INTERCOM_SESSION_NAME")}}function n$($){if($==="interview_request")return"Subagent requests a structured supervisor interview.";if($==="progress_update")return"Subagent progress update.";return"Subagent needs a supervisor decision."}function d$($){let j=[n$($.reason),`Run: ${$.runId}`,`Agent: ${$.agent}`,`Child index: ${$.childIndex}`];if($.childTarget)j.push(`Child intercom target: ${$.childTarget}`);if(j.push(""),$.message?.trim())j.push($.message.trim());if($.reason==="interview_request"){if(j.push("","Structured response requested. Reply with JSON, optionally fenced in ```json, matching the requested interview shape."),$.interview!==void 0)j.push(JSON.stringify($.interview,null,"\t"))}return j.join(`
|
|
2
|
+
`).trimEnd()}function u$($){let j=$.trim(),J=j.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i)?.[1]?.trim();try{return{value:JSON.parse(J??j)}}catch(B){return{error:B instanceof Error?`${B.name}: ${B.message}`:String(B)}}}function r$(){let $=Number(process.env.PI_INTERCOM_ASK_TIMEOUT_MS);return Number.isFinite($)&&$>0?$:P$}function p$($,j){return new Promise((J,B)=>{if(j?.aborted){B(Error("Supervisor request cancelled."));return}let Z,X=()=>{if(Z)clearTimeout(Z);j?.removeEventListener("abort",Q)},Q=()=>{X(),B(Error("Supervisor request cancelled."))};Z=setTimeout(()=>{X(),J()},$),j?.addEventListener("abort",Q,{once:!0})})}async function l$($,j,J){let B=m$($,j),Z=Date.now()+r$();while(Date.now()<=Z){if(J?.aborted)throw Error("Supervisor request cancelled.");if(M.existsSync(B)){let X=JSON.parse(M.readFileSync(B,"utf-8"));if(X.type==="subagent.supervisor.reply"&&X.requestId===j&&typeof X.message==="string")return X}await p$(250,J)}throw Error("Timed out waiting for supervisor reply.")}async function q($,j){let J=Q$();if(!J)throw Error("Native supervisor channel is not available for this subagent.");if($.reason!=="progress_update"&&!$.message?.trim()&&$.reason!=="interview_request")throw Error("message is required for supervisor decisions.");g$(J.channelDir);let B=v$(),Z=$.reason!=="progress_update",X=d$({...J,reason:$.reason,message:$.message,interview:$.interview}),Q={type:"subagent.supervisor.request",id:B,createdAt:Date.now(),reason:$.reason,message:X,expectsReply:Z,...J.orchestratorTarget?{orchestratorTarget:J.orchestratorTarget}:{},...J.orchestratorSessionId?{orchestratorSessionId:J.orchestratorSessionId}:{},runId:J.runId,agent:J.agent,childIndex:J.childIndex,...J.childTarget?{childTarget:J.childTarget}:{},...$.interview!==void 0?{interview:$.interview}:{}},O=JSON.stringify(Q,null,"\t");if(Buffer.byteLength(O,"utf-8")>D$)throw Error("Supervisor request is too large.");if(w(o$(J.channelDir,B),Q),!Z)return{content:[{type:"text",text:"Supervisor progress update queued."}],details:{delivered:!0,requestId:B,reason:$.reason}};let Y=await l$(J.channelDir,B,j),W={requestId:B,reason:$.reason};if($.reason==="interview_request"){let f=u$(Y.message);if(f.error)W.structuredReplyParseError=f.error;else W.structuredReply=f.value}return{content:[{type:"text",text:`**Reply from supervisor:**
|
|
3
|
+
${Y.message}`}],details:W}}function J$($,j){try{return $.getAllTools?.().some((J)=>J.name===j)===!0}catch{return!1}}function v($,j={}){if(!Q$())return;let J=j.includeIntercomFallback!==!1;if(!J$($,"contact_supervisor")){let B={name:"contact_supervisor",label:"Contact Supervisor",description:"Contact the parent/supervisor session for a blocking decision, structured interview, or progress update.",parameters:k$,execute(Z,X,Q){return q(X,Q)}};$.registerTool(B)}if(J&&!J$($,"intercom")){let B={name:"intercom",label:"Intercom",description:"Native supervisor-channel intercom fallback for subagents. Prefer contact_supervisor when available.",parameters:h$,async execute(Z,X,Q){let O=X.action;if(O==="status")return{content:[{type:"text",text:"Native supervisor channel is active."}],details:{active:!0}};if(O==="list")return{content:[{type:"text",text:"Supervisor session available through contact_supervisor."}],details:{sessions:[]}};if(O==="send")return q({reason:"progress_update",message:X.message??""},Q);if(O==="ask")return q({reason:"need_decision",message:X.message??""},Q);throw Error("Native child intercom supports status, list, send, and ask. Use parent intercom reply from the supervisor session.")}};$.registerTool(B)}}import*as O$ from"node:fs";import*as D from"node:path";var C0=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function t$($){return`${String($.ts).padStart(13,"0")}-${Buffer.from($.id).toString("base64url")}.json`}function Y$($,j){let J=D.join($,t$(j));return w(J,j),J}function i$($){if(!$||typeof $!=="object"||Array.isArray($))return;let j=$;if(j.type!=="steer")return;if(typeof j.id!=="string"||!j.id.trim())return;if(typeof j.ts!=="number"||!Number.isFinite(j.ts))return;if(typeof j.message!=="string"||!j.message.trim())return;if(j.targetIndex!==void 0&&(!Number.isInteger(j.targetIndex)||j.targetIndex<0))return;return{type:"steer",id:j.id.trim(),ts:j.ts,message:j.message.trim(),...j.targetIndex!==void 0?{targetIndex:j.targetIndex}:{},...typeof j.source==="string"&&j.source.trim()?{source:j.source}:{}}}function W$($,j=O$){if(!j.existsSync($))return[];let J=[];for(let B of j.readdirSync($).filter((Z)=>Z.endsWith(".json")).sort()){let Z=D.join($,B),X;try{X=i$(JSON.parse(j.readFileSync(Z,"utf-8")))}catch{X=void 0}try{j.rmSync(Z,{recursive:!0})}catch{continue}if(X)J.push(X)}return J.sort((B,Z)=>B.ts-Z.ts||B.id.localeCompare(Z.id))}var s$="DM_SUBAGENT_INHERIT_PROJECT_CONTEXT",a$="DM_SUBAGENT_INHERIT_SKILLS",e$="DM_SUBAGENT_INTERCOM_SESSION_NAME",$j=["This subagent step has a strict structured output contract.","Your final action must be to call the `structured_output` tool with JSON matching the provided schema.","Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step."].join(`
|
|
4
|
+
`),U$=["You are a child subagent, not the parent orchestrator.","The parent session owns delegation, orchestration, review fanout, and follow-up worker launches.","Ignore prior parent-only orchestration instructions in inherited conversation history.","Do not propose or run subagents. Complete only your assigned role-specific task with the tools available to you.","If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text."].join(`
|
|
5
|
+
`),G$=["You are a child subagent with explicit fanout responsibility for this assigned task.","The parent session owns final orchestration, acceptance, and follow-up implementation launches.","You may use the `subagent` tool only for the fanout work explicitly requested in this task.","Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.","The maxSubagentDepth cap still applies and may block further fanout.","If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text."].join(`
|
|
6
|
+
`),jj=new Set(["subagent-orchestration-instructions","subagent-slash-result","subagent-slash-text-result","subagent-notify","subagent_control_notice","subagent-control","subagent-control-notice"]),Jj=/<name>\s*dm-subagents\s*<\/name>/,f$=`
|
|
7
7
|
|
|
8
8
|
# Project Context
|
|
9
9
|
|
|
10
10
|
Project-specific instructions and guidelines:
|
|
11
11
|
|
|
12
|
-
`,
|
|
12
|
+
`,k=`
|
|
13
13
|
|
|
14
|
-
The following skills provide specialized instructions for specific tasks.`,
|
|
15
|
-
Current date:`;function
|
|
14
|
+
The following skills provide specialized instructions for specific tasks.`,H$=`
|
|
15
|
+
Current date:`;function P($){let j=process.env[$];if(j===void 0)return;return j!=="0"}function V$($,j,J){let B=$.length;for(let Z of J){let X=$.indexOf(Z,j);if(X!==-1&&X<B)B=X}return B}function Bj($){let j=$.indexOf(f$);if(j===-1)return $;let J=V$($,j+f$.length,[k,H$]);return`${$.slice(0,j)}${$.slice(J)}`}function Zj($){let j=$.indexOf(k);if(j===-1)return $;let J=V$($,j+k.length,[H$]);return`${$.slice(0,j)}${$.slice(J)}`}function Xj($){return $.replace(/\n{0,2}<skill\s+name=["']dm-subagents["'][^>]*>[\s\S]*?<\/skill>\n{0,2}/g,`
|
|
16
16
|
|
|
17
|
-
`).replace(/[ \t]*<skill>\s*[\s\S]*?<\/skill>\s*/g,(j)
|
|
17
|
+
`).replace(/[ \t]*<skill>\s*[\s\S]*?<\/skill>\s*/g,(j)=>Jj.test(j)?"":j)}function Qj($){let j=$;for(let J of[U$,G$])j=j.split(J).join("");return j.replace(/^(?:[ \t]*\r?\n)+/,"")}function Oj($,j){let J=$;if(!j.inheritProjectContext)J=Bj(J);if(!j.inheritSkills)J=Zj(J);J=Xj(J),J=Qj(J);let B=j.fanoutChild?G$:U$,Z=process.env[R]?`
|
|
18
18
|
|
|
19
|
-
${
|
|
19
|
+
${$j}`:"";return`${B}${Z}
|
|
20
20
|
|
|
21
|
-
${J}`}function
|
|
22
|
-
`)}function
|
|
21
|
+
${J}`}function Yj($){let j=$;return j?.role==="custom"&&typeof j.customType==="string"&&jj.has(j.customType)}function Wj($){let j=$;return j?.role==="toolResult"&&j.toolName==="subagent"}function fj($){let j=$;return j?.type==="toolCall"&&j.name==="subagent"}function Kj($){let j=$;if(j?.role!=="assistant"||!Array.isArray(j.content))return $;let J=j.content.filter((B)=>!fj(B));if(J.length===j.content.length)return $;if(J.length===0)return;return{...j,content:J}}function Uj($){let j=process.env[c]==="1",J=!1,B=[];for(let Z of $){if(Yj(Z)||!j&&Wj(Z)){J=!0;continue}let X=j?Z:Kj(Z);if(X===void 0){J=!0;continue}if(X!==Z)J=!0;B.push(X)}return J?B:$}function Gj($){return["Mid-run steering from the parent orchestrator:","",$.message,"","Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to."].join(`
|
|
22
|
+
`)}function Hj($,j){if(!j)return;let J=0,B=!1,Z=$.sendUserMessage,X=$.on;X("tool_call",(Q)=>{let O=typeof Q.toolName==="string"?Q.toolName:"tool";if(J++,j.soft!==void 0&&J>=j.soft&&!B){B=!0;try{Z?.(o(j,J),{deliverAs:"steer"})}catch{}}if(!g(j,O,J))return;return{block:!0,reason:m(j,O,J)}})}function Vj($){let j=process.env[e]?.trim();if(!j)return;let J=$.sendUserMessage;if(typeof J!=="function")return;let B=!1,Z=!1,X=!1,Q=!1,O,Y,W=()=>{if(Z||X||!B)return;X=!0;try{let U=W$(j);for(let N=0;N<U.length;N++){let T$=U[N];try{J(Gj(T$),{deliverAs:"steer"})}catch{for(let M$ of U.slice(N))Y$(j,M$);break}}}finally{X=!1}},f=()=>{if(Q||Z)return;try{A.mkdirSync(j,{recursive:!0})}catch{return}Q=!0;try{O=A.watch(j,()=>W()),O.on("error",()=>{})}catch{O=void 0}Y=setInterval(W,250),Y.unref?.()},E=()=>{f(),B=!0,W();return},V=$.on;V("session_start",()=>f());for(let U of["message_start","message_update","message_end","tool_execution_start","tool_execution_end","turn_end"])V(U,E);V("session_shutdown",()=>{Z=!0;try{O?.close()}catch{}if(Y)clearInterval(Y)})}function Tj($){Vj($),Hj($,n(process.env[I]));let j=!1,J=!1,B=()=>{if(j)return;j=!0,v($,{includeIntercomFallback:!1})},Z=()=>{if(B(),J)return;J=!0,v($)},X=$.on;X("session_start",B);let Q=process.env[R],O=process.env[x];if(Q&&O){let Y=JSON.parse(A.readFileSync(O,"utf-8")),W={type:"object",properties:{value:Y},required:["value"],additionalProperties:!1},f=$.registerTool;f({name:"structured_output",label:"Structured Output",description:"Submit the required final structured output for this subagent step. This terminates the step.",parameters:W,async execute(E,V){let U=h(Y,V.value);if(U.status==="invalid")throw Error(`Structured output validation failed: ${U.message}`);return A.mkdirSync(K$.dirname(Q),{recursive:!0}),A.writeFileSync(Q,JSON.stringify(V.value),{mode:384}),{content:[{type:"text",text:"Structured output captured."}],details:{path:Q},terminate:!0}}})}X("context",(Y)=>{let W=Uj(Y.messages);if(W===Y.messages)return;return{messages:W}}),X("before_agent_start",async(Y)=>{Z();let W=process.env[e$]?.trim();if(W&&typeof $.setSessionName==="function")$.setSessionName(W);let f=P(s$),E=P(a$),V=P(c);if(f===void 0&&E===void 0&&V===void 0)return;let U=Oj(Y.systemPrompt,{inheritProjectContext:f??!0,inheritSkills:E??!0,fanoutChild:V===!0});if(U===Y.systemPrompt)return;return{systemPrompt:U}})}export{Xj as stripSubagentOrchestrationSkill,Bj as stripProjectContext,Uj as stripParentOnlySubagentMessages,Zj as stripInheritedSkills,Oj as rewriteSubagentPrompt,Gj as formatSteerMessage,Tj as default,e$ as SUBAGENT_INTERCOM_SESSION_NAME_ENV,U$ as CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS,G$ as CHILD_FANOUT_BOUNDARY_INSTRUCTIONS};
|
package/package.json
CHANGED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dm-9router-ext",
|
|
3
|
-
"version": "0.1.1",
|
|
4
|
-
"description": "DM extension for 9router AI routing proxy instances",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"duckmind",
|
|
7
|
-
"dm",
|
|
8
|
-
"dm-package",
|
|
9
|
-
"dm-extension",
|
|
10
|
-
"9router",
|
|
11
|
-
"ai-router",
|
|
12
|
-
"openai-proxy"
|
|
13
|
-
],
|
|
14
|
-
"license": "MIT",
|
|
15
|
-
"author": "Irfan Sofyana <mail@irfansp.dev>",
|
|
16
|
-
"type": "module",
|
|
17
|
-
"main": "./src/index.js",
|
|
18
|
-
"dm": {
|
|
19
|
-
"extensions": [
|
|
20
|
-
"./src/index.js"
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{existsSync as k,mkdirSync as T,readFileSync as N,writeFileSync as P}from"node:fs";import{homedir as _}from"node:os";import{dirname as R,join as p}from"node:path";import{Type as y}from"typebox";var C="http://localhost:20128",u=process.env.NINE_ROUTER_BASE_URL,M=process.env.NINE_ROUTER_API_KEY,b=p(_(),".dm","agent","9router-config.json"),S="9router-config",x="9router-last-route",v=["x-9router-model","x-routed-model","x-actual-model","x-upstream-model","x-provider-model"];function G(q){return q.replace(/\/$/,"")}function I(q){if(q.length<=8)return"●".repeat(q.length);return q.slice(0,4)+"●".repeat(Math.max(0,q.length-8))+q.slice(-4)}function A(q){return{baseUrl:G(u||q.baseUrl),apiKey:M||q.apiKey}}function E(){try{if(!k(b))return null;let q=JSON.parse(N(b,"utf8"));if(!q.baseUrl||typeof q.baseUrl!=="string")return null;return{baseUrl:G(q.baseUrl),apiKey:typeof q.apiKey==="string"&&q.apiKey.trim()?q.apiKey.trim():void 0}}catch(q){return console.error("[dm-9router-ext] Failed to load persisted config:",q),null}}function a(q){try{T(R(b),{recursive:!0}),P(b,`${JSON.stringify({baseUrl:q.baseUrl,apiKey:q.apiKey},null,2)}
|
|
2
|
-
`,{mode:384})}catch(J){console.error("[dm-9router-ext] Failed to persist config:",J)}}function f(){return A(E()||{baseUrl:C,apiKey:void 0})}function g(q){for(let J of q.sessionManager.getEntries())if(J.type==="custom"&&J.customType===S){let Q=J.data;if(Q?.baseUrl)return A({baseUrl:G(Q.baseUrl),apiKey:void 0})}return null}function O(q,J){a(J),q.appendEntry(S,{baseUrl:J.baseUrl})}async function K(q,J){let Q={Accept:"application/json"};if(q.apiKey)Q.Authorization=`Bearer ${q.apiKey}`;let $=await fetch(`${q.baseUrl}/v1/models`,{method:"GET",headers:Q,signal:J});if(!$.ok){let w=await $.text().catch(()=>"");throw Error(`9router returned ${$.status}: ${w||$.statusText}`)}return(await $.json()).data||[]}async function h(q,J){try{let Q={};if(q.apiKey)Q.Authorization=`Bearer ${q.apiKey}`;let $=await fetch(`${q.baseUrl}/v1/models`,{method:"GET",headers:Q,signal:J});if($.ok)return{ok:!0};return{ok:!1,error:`HTTP ${$.status}: ${$.statusText}`}}catch(Q){return{ok:!1,error:Q instanceof Error?Q.message:String(Q)}}}function l(q){let J=q.owned_by==="combo";return{id:q.id,name:J?`\uD83D\uDD00 ${q.id}`:q.id,reasoning:!1,input:["text"],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:128000,maxTokens:4096,compat:{supportsDeveloperRole:!1,supportsReasoningEffort:!1}}}function L(q,J,Q){q.registerProvider("9router",{name:"9router",baseUrl:`${J.baseUrl}/v1`,apiKey:J.apiKey||"9router-no-api-key",api:"openai-completions",models:Q.map(l)})}function F(q){q.unregisterProvider("9router")}async function m(q){let J=f(),Q=[],$,B,w=!1;try{let V=await K(J);Q=V,w=!0,L(q,J,V)}catch(V){F(q)}q.on("session_start",async(V,W)=>{let X=g(W);if(!E()&&X){J=X,O(q,J);try{let j=await K(J,W.signal);Q=j,w=!0,L(q,J,j)}catch(j){w=!1,console.error("[dm-9router-ext] Failed to refresh migrated config:",j)}}if(w&&Q.length>0)W.ui.notify(`9router connected — ${Q.length} models available`,"info")}),q.on("after_provider_response",(V)=>{if(V.status>=400||B!=="9router")return;for(let W of v){let X=V.headers[W];if(X&&typeof X==="string"){$=X,q.appendEntry(x,{model:X,timestamp:Date.now()});break}}}),q.on("model_select",async(V)=>{if(B=V.model.provider,V.model.provider!=="9router")$=void 0}),q.registerCommand("9router-status",{description:"Show 9router connection status and configuration",handler:async(V,W)=>{let X=await h(J,W.signal),j=["\uD83D\uDD17 9router Status","",`Base URL: ${J.baseUrl}`,`API Key: ${J.apiKey?I(J.apiKey):"not set"}`,`Connection: ${X.ok?"\uD83D\uDFE2 connected":`\uD83D\uDD34 ${X.error||"disconnected"}`}`,`Models: ${Q.length} available`];if($)j.push(`Last routed: ${$}`);let D=Q.filter((Z)=>Z.owned_by==="combo"),Y=Q.filter((Z)=>Z.owned_by!=="combo");if(Y.length>0)j.push("",`Regular models: ${Y.length}`);if(D.length>0)j.push(`Combos: ${D.length}`);W.ui.notify(j.join(`
|
|
3
|
-
`),X.ok?"info":"warning")}}),q.registerCommand("9router-models",{description:"Browse 9router available models and combos",handler:async(V,W)=>{if(Q.length===0){W.ui.notify("No 9router models discovered. Check connection with /9router-status","warning");return}let X=Q.map((Z)=>{let H=Z.owned_by==="combo";return{value:Z.id,label:H?`\uD83D\uDD00 ${Z.id}`:Z.id}}),j=await W.ui.select("Select a 9router model to use:",X.map((Z)=>Z.label));if(!j)return;let D=X.find((Z)=>Z.label===j)?.value;if(!D)return;let Y=`9router/${D}`;W.ui.notify(`Switching to ${Y}...`,"info"),q.sendUserMessage(`/model ${Y}`,{deliverAs:"followUp"})}}),q.registerCommand("9router-config",{description:"Configure 9router base URL and API key",handler:async(V,W)=>{let j=(await h(J,W.signal)).ok?"\uD83D\uDFE2 connected":"\uD83D\uDD34 disconnected",D=J.apiKey?"●●●●●●●● (set)":"not set",Y=["Current config:",` Base URL: ${J.baseUrl}`,` API Key: ${J.apiKey?I(J.apiKey):"not set"}`,` Status: ${j}`,"","Enter new values (press Enter to keep current):"].join(`
|
|
4
|
-
`);W.ui.notify(Y,"info");let Z=await W.ui.input("Base URL",J.baseUrl);if(Z===void 0)return;let H=await W.ui.input("API key (press Enter to keep current, leave blank to remove):",J.apiKey||"");if(H===void 0)return;J={baseUrl:G(Z),apiKey:H.trim()||void 0},O(q,J);try{let z=await K(J,W.signal);Q=z,w=!0,L(q,J,z),W.ui.notify(`9router updated — ${z.length} models at ${J.baseUrl}`,"info")}catch(z){w=!1,F(q);let U=z instanceof Error?z.message:String(z);W.ui.notify(`Failed to connect: ${U}`,"error")}}}),q.registerCommand("9router-reload",{description:"Reload models from 9router",handler:async(V,W)=>{try{let X=await K(J,W.signal);Q=X,w=!0,L(q,J,X),W.ui.notify(`9router reloaded — ${X.length} models`,"info")}catch(X){w=!1,F(q);let j=X instanceof Error?X.message:String(X);W.ui.notify(`Reload failed: ${j}`,"error")}}}),q.registerTool({name:"ninerouter_status",label:"9router Status",description:"Check 9router connection status and list available models",parameters:y.Object({}),async execute(V,W,X,j,D){let Y=await h(J,D.signal),Z=Q.filter((z)=>z.owned_by==="combo"),H=Q.filter((z)=>z.owned_by!=="combo");return{content:[{type:"text",text:[`9router: ${Y.ok?"connected":`disconnected (${Y.error})`}`,`Base URL: ${J.baseUrl}`,`Total models: ${Q.length}`,` Regular: ${H.length}`,` Combos: ${Z.length}`,$?`Last routed model: ${$}`:""].filter(Boolean).join(`
|
|
5
|
-
`)}],details:{connected:Y.ok,baseUrl:J.baseUrl,modelCount:Q.length,regularCount:H.length,comboCount:Z.length,lastRoutedModel:$,models:Q.map((z)=>z.id)}}}})}export{m as default};
|