@duckmind/dm-darwin-x64 0.48.5 → 0.49.6
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 +159 -220
- package/extensions/dm-9router-ext/package.json +0 -6
- package/extensions/dm-9router-ext/src/index.js +1 -1
- package/extensions/dm-ask-user/package.json +0 -4
- package/extensions/dm-caveman/extensions/caveman.js +29 -0
- package/extensions/dm-caveman/package.json +20 -0
- package/extensions/dm-cli-anything/index.js +5 -5
- package/extensions/dm-cli-anything/package.json +0 -7
- package/extensions/dm-cli-anything/skills/cli-anything/SKILL.md +1 -3
- package/extensions/dm-context/package.json +0 -1
- package/extensions/dm-cua/package.json +0 -7
- package/extensions/dm-fff/package.json +0 -6
- package/extensions/dm-goal/package.json +0 -8
- package/extensions/dm-grill-me/index.js +2 -2
- package/extensions/dm-grill-me/package.json +0 -7
- package/extensions/dm-image2/package.json +0 -8
- package/extensions/dm-subagents/.m/artifacts/shell/shell_output_1783845384621_9cf9262bf674.txt +1336 -0
- package/extensions/dm-subagents/.m/artifacts/shell/shell_output_1783846154938_6a41cefee0bf.txt +1336 -0
- package/extensions/dm-subagents/package.json +0 -11
- package/extensions/dm-subagents/src/extension/doctor.js +10 -10
- package/extensions/dm-subagents/src/extension/fanout-child.js +97 -97
- package/extensions/dm-subagents/src/extension/index.js +121 -121
- 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 +9 -9
- 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 +13 -13
- 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 +19 -19
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +7 -7
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +35 -35
- package/extensions/dm-subagents/src/runs/background/wait.js +7 -7
- package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +32 -32
- package/extensions/dm-subagents/src/runs/foreground/execution.js +26 -26
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +96 -96
- 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/extensions/dm-subagents/src/shared/fork-context.js +4 -4
- package/extensions/dm-tasks/package.json +0 -7
- package/extensions/dm-usage/package.json +0 -7
- package/extensions/greedysearch-dm/bin/cdp-greedy.mjs +1 -8
- package/extensions/greedysearch-dm/bin/gschrome.mjs +3 -3
- package/extensions/greedysearch-dm/bin/launch-visible.mjs +3 -3
- package/extensions/greedysearch-dm/bin/launch.mjs +4 -4
- package/extensions/greedysearch-dm/bin/search.mjs +103 -103
- package/extensions/greedysearch-dm/extractors/consensus.mjs +35 -35
- package/extensions/greedysearch-dm/extractors/gemini.mjs +38 -38
- package/extensions/greedysearch-dm/extractors/logically.mjs +35 -35
- package/extensions/greedysearch-dm/package.json +0 -10
- package/extensions/greedysearch-dm/src/search/chrome.mjs +23 -23
- package/extensions/greedysearch-dm/src/search/fetch-source.mjs +35 -35
- package/extensions/greedysearch-dm/src/search/research.mjs +61 -61
- package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +4 -4
- package/package.json +1 -1
- package/extensions/dm-9router-ext/README.md +0 -142
- package/extensions/dm-9router-ext/tsconfig.json +0 -17
- package/extensions/dm-ask-user/README.md +0 -226
- package/extensions/dm-cli-anything/LICENSE +0 -201
- package/extensions/dm-cli-anything/README.md +0 -33
- package/extensions/dm-cli-anything/vendor/UPSTREAM.md +0 -14
- package/extensions/dm-context/AGENTS.md +0 -41
- package/extensions/dm-context/README.md +0 -18
- package/extensions/dm-context/tsconfig.json +0 -16
- package/extensions/dm-cua/README.md +0 -24
- package/extensions/dm-fff/README.md +0 -36
- package/extensions/dm-fff/tsconfig.json +0 -13
- package/extensions/dm-goal/CHANGELOG.md +0 -12
- package/extensions/dm-goal/LICENSE +0 -21
- package/extensions/dm-goal/README.md +0 -29
- package/extensions/dm-goal/tsconfig.json +0 -15
- package/extensions/dm-grill-me/DESIGN.md +0 -301
- package/extensions/dm-grill-me/LICENSE +0 -21
- package/extensions/dm-grill-me/README.md +0 -82
- package/extensions/dm-grill-me/tsconfig.json +0 -17
- package/extensions/dm-image2/README.md +0 -33
- package/extensions/dm-subagents/CHANGELOG.md +0 -1211
- package/extensions/dm-subagents/README.md +0 -29
- package/extensions/dm-subagents/banner.png +0 -0
- package/extensions/dm-subagents/biome.json +0 -26
- package/extensions/dm-subagents/tsconfig.json +0 -18
- package/extensions/dm-tasks/LICENSE +0 -21
- package/extensions/dm-tasks/README.md +0 -30
- package/extensions/dm-tasks/biome.json +0 -26
- package/extensions/dm-tasks/tsconfig.json +0 -14
- package/extensions/dm-usage/LICENSE +0 -21
- package/extensions/dm-usage/README.md +0 -29
- package/extensions/dm-usage/insights-screenshot.png +0 -0
- package/extensions/dm-usage/screenshot.png +0 -0
- package/extensions/greedysearch-dm/LICENSE +0 -21
- package/extensions/greedysearch-dm/README.md +0 -222
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as Y from"node:fs";import*as P from"node:os";import*as Q from"node:path";import{fileURLToPath as Af}from"node:url";import*as g from"node:path";var qf=128,Mf=4;function Kf(f){return typeof f==="string"&&f.length>0&&f.length<=qf&&!g.isAbsolute(f)&&!f.includes("/")&&!f.includes("\\")&&!f.includes("..")}function h(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function u(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)}:{},...u($.agent,128)?{agent:u($.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 Lf}from"node:crypto";import*as L from"node:fs";import*as K from"node:os";import*as Z from"node:path";import*as E from"node:fs";import*as C from"node:os";import*as M from"node:path";import*as y from"node:os";import*as H 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 W of["USERNAME","USER","LOGNAME"]){let G=j[W];if(G)return`user-${N(G)}`}let T=f&&Object.hasOwn(f,"userInfo")?f.userInfo:y.userInfo;try{let W=T?.().username;if(W)return`user-${N(W)}`}catch{}let B=j.USERPROFILE??j.HOME;if(B)return`home-${N(B)}`;let U=f&&Object.hasOwn(f,"homedir")?f.homedir:y.homedir;try{let W=U?.();if(W)return`home-${N(W)}`}catch{}return"shared"}var c=H.join(y.tmpdir(),`dm-subagents-${Gf()}`),_j=H.join(c,"async-subagent-results"),Qj=H.join(c,"async-subagent-runs"),Sf=H.join(c,"chain-runs"),Yj=H.join(c,"artifacts");var Rf=".dm",Vf="@duckmind/dm-coding-agent",yf="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!==Vf)return;return p(j.piConfig?.configDir)}catch{return}}function Hf(f=process.argv[1],j=process.env[yf]){let $=d(j);if($)return $;if(!f)return;try{let T=M.dirname(E.realpathSync(f));while(T!==M.dirname(T)){let B=d(T);if(B)return B;T=M.dirname(T)}}catch{}return}function cf(f,j,$){return(f&&typeof f==="object"?p(f.CONFIG_DIR_NAME):void 0)??Hf(j,$)??Rf}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 Cf=1,bf=604800000,s=new Set(["read","bash","edit","write","grep","find","ls","mcp"]),e=Z.join(K.homedir(),".config","mcp","mcp.json"),a={cursor:[Z.join(K.homedir(),".cursor","mcp.json")],"claude-code":[Z.join(K.homedir(),".claude","mcp.json"),Z.join(K.homedir(),".claude.json"),Z.join(K.homedir(),".claude","claude_desktop_config.json")],"claude-desktop":[Z.join(K.homedir(),"Library","Application Support","Claude","claude_desktop_config.json")],codex:[Z.join(K.homedir(),".codex","config.json")],windsurf:[Z.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,uf($.settings?.toolPrefix),f)}catch{return[]}}function Ff(){let f=Z.join(z(),"mcp-cache.json"),j;try{j=JSON.parse(L.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=Z.join(z(),"mcp.json"),$=Z.resolve(f,".mcp.json"),T=Z.resolve(I(f),"mcp.json"),B=[];if(e!==j)B.push(e);if(B.push(j),$!==j)B.push($);if(T!==j&&T!==$)B.push(T);return B}function wf(f){let j;try{j=JSON.parse(L.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)=>gf(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 B=of(T,j);if(!B)continue;let U;try{U=JSON.parse(L.readFileSync(B,"utf-8"))}catch{continue}for(let[W,G]of Object.entries(Df(U,T)))if(!$[W])$[W]=G}return{imports:f.imports,settings:f.settings,mcpServers:{...$,...f.mcpServers}}}function of(f,j){for(let $ of a[f]){let T=$.startsWith(".")?Z.resolve(j,$):$;if(L.existsSync(T))return T}return null}function Df(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 B=[],U=new Set,{servers:W,tools:G}=Pf(T);for(let[_,J]of Object.entries(f.mcpServers)){let R=j.servers[_];if(!mf(R,J))continue;let S=W.has(_)?!0:G.get(_);if(!S)continue;for(let X of Array.isArray(R.tools)?R.tools:[]){if(typeof X?.name!=="string"||!X.name)continue;if(S!==!0&&!S.has(X.name))continue;if(l(X.name,_,$,J.excludeTools))continue;let q=F(X.name,_,$);if(s.has(q)||U.has(q))continue;U.add(q),B.push(q)}if(J.exposeResources===!1)continue;for(let X of Array.isArray(R.resources)?R.resources:[]){if(typeof X?.name!=="string"||!X.name||typeof X.uri!=="string"||!X.uri)continue;let q=`get_${rf(X.name)}`;if(S!==!0&&!S.has(q))continue;if(l(q,_,$,J.excludeTools))continue;let V=F(q,_,$);if(s.has(V)||U.has(V))continue;U.add(V),B.push(V)}}return B}function Pf(f){let j=new Set,$=new Map;for(let T of f)if(T=T.replace(/\/+$/,""),T.includes("/")){let[B,U]=T.split("/",2);if(B&&U){if(!$.has(B))$.set(B,new Set);$.get(B).add(U)}else if(B)j.add(B)}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 Lf("sha256").update(n(j)).digest("hex")}function uf(f){return f==="none"||f==="short"||f==="server"?f:"server"}function gf(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 B=new Set([b(f),b(F(f,j,$)),b(F(f,j,"server")),b(F(f,j,"short"))]);return T.some((U)=>typeof U==="string"&&B.has(b(U)))}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 Z.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 Pj}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 tf=["off","minimal","low","medium","high","xhigh"],sf=8000,Bf=Q.join(Q.dirname(Af(import.meta.url)),"subagent-prompt-runtime.ts"),ef=Q.join(Q.dirname(Af(import.meta.url)),"..","..","extension","fanout-child.ts"),lf="DM_SUBAGENT_CHILD",af="DM_SUBAGENT_ORCHESTRATOR_TARGET",fj="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",jj="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",Uf="DM_SUBAGENT_RUN_ID",$j="DM_SUBAGENT_CHILD_AGENT",Tj="DM_SUBAGENT_CHILD_INDEX",Jj="DM_SUBAGENT_FANOUT_CHILD",o="DM_SUBAGENT_PARENT_EVENT_SINK",Of="DM_SUBAGENT_PARENT_CONTROL_INBOX",D="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",Bj="DM_SUBAGENT_STEER_INBOX";function Yf(f){return f.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Uj(f,j,$){return Q.join(c,"supervisor-channels",`${Yf(f)}-${Yf(j)}-${$}`)}function Oj(f,j,$=!1){if(!f||!j)return f;let T=f.lastIndexOf(":");if(T!==-1&&tf.includes(f.substring(T+1)))return $?`${f.slice(0,T)}:${j}`:f;return`${f}:${j}`}function tj(f){let j=[...f.baseArgs];if(f.sessionFile)Y.mkdirSync(Q.dirname(f.sessionFile),{recursive:!0}),j.push("--session",f.sessionFile);else{if(!f.sessionEnabled)j.push("--no-session");if(f.sessionDir)Y.mkdirSync(f.sessionDir,{recursive:!0}),j.push("--session-dir",f.sessionDir)}let $=Oj(f.model,f.thinking);if($)j.push("--model",$);let T=f.tools?.filter((O)=>!(O.includes("/")||O.endsWith(".ts")||O.endsWith(".js")))??[],B=f.requireReadTool&&f.tools?.length&&!T.includes("read")?["read",...T]:T,U=B.includes("subagent"),W=[];if(f.tools?.length){let O=[...B];for(let A of f.tools)if(!B.includes(A)&&(A.includes("/")||A.endsWith(".ts")||A.endsWith(".js")))W.push(A);if(O.length>0){if(f.mcpDirectTools?.length)O.push(...ff(f.mcpDirectTools,f.cwd));j.push("--tools",O.join(","))}}let G=U?[Bf,ef]:[Bf];if(f.extensions!==void 0){j.push("--no-extensions");for(let O of[...new Set([...G,...W,...f.extensions,...f.subagentOnlyExtensions??[]])])j.push("--extension",O)}else for(let O of[...new Set([...G,...W,...f.subagentOnlyExtensions??[]])])j.push("--extension",O);if(!f.inheritSkills)j.push("--no-skills");let _;if(f.systemPrompt!==void 0&&f.systemPrompt!==null){_=Y.mkdtempSync(Q.join(P.tmpdir(),"dm-subagent-"));let O=(f.promptFileStem??"prompt").replace(/[^\w.-]/g,"_"),A=Q.join(_,`${O}.md`);Y.writeFileSync(A,f.systemPrompt,{mode:384}),j.push(f.systemPromptMode==="replace"?"--system-prompt":"--append-system-prompt",A)}if(f.task.length>sf){if(!_)_=Y.mkdtempSync(Q.join(P.tmpdir(),"dm-subagent-"));let O=Q.join(_,"task.md");Y.writeFileSync(O,`Task: ${f.task}`,{mode:384}),j.push(`@${O}`)}else j.push(`Task: ${f.task}`);let J={};J[lf]="1",J[Jj]=U?"1":"0";let R=Boolean(process.env[o]&&process.env[D]&&process.env[v]),S=f.parentRunId??f.runId??(R?process.env[Uf]:void 0)??process.env[Wf]??"",X=f.parentChildIndex!==void 0?String(f.parentChildIndex):f.childIndex!==void 0?String(f.childIndex):process.env[Xf]??"",q=Number(process.env[Zf]),V=f.parentDepth??(R&&Number.isFinite(q)?q+1:1),Ef=f.parentPath??[...w(process.env[_f]),...S?[{runId:S,...X&&/^\d+$/.test(X)?{stepIndex:Number(X)}:{},...f.childAgentName?{agent:f.childAgentName}:{}}]:[]];if(J[o]=U?f.parentEventSink??process.env[o]??"":"",J[Of]=U?f.parentControlInbox??process.env[Of]??"":"",J[D]=U?f.parentRootRunId??process.env[D]??f.runId??"":"",J[Wf]=U?S:"",J[Xf]=U?X:"",J[Zf]=U?String(V):"",J[_f]=U?r(Ef):"",J[v]=U?f.parentCapabilityToken??process.env[v]??"":"",J.DM_SUBAGENT_INHERIT_PROJECT_CONTEXT=f.inheritProjectContext?"1":"0",J.DM_SUBAGENT_INHERIT_SKILLS=f.inheritSkills?"1":"0",f.intercomSessionName)J.DM_SUBAGENT_INTERCOM_SESSION_NAME=f.intercomSessionName;if(f.orchestratorIntercomTarget)J[af]=f.orchestratorIntercomTarget;if(f.parentSessionId)J[fj]=f.parentSessionId;if(f.orchestratorIntercomTarget&&f.parentSessionId&&f.runId&&f.childAgentName){let O=f.childIndex??0,A=Uj(f.runId,f.childAgentName,O);Y.mkdirSync(Q.join(A,"requests"),{recursive:!0}),Y.mkdirSync(Q.join(A,"replies"),{recursive:!0}),J[jj]=A}if(f.runId)J[Uf]=f.runId;if(f.childAgentName)J[$j]=f.childAgentName;if(f.childIndex!==void 0)J[Tj]=String(f.childIndex);if(f.mcpDirectTools?.length)J.MCP_DIRECT_TOOLS=f.mcpDirectTools.join(",");else J.MCP_DIRECT_TOOLS="__none__";if(f.structuredOutput)J[$f]=f.structuredOutput.outputPath,J[jf]=f.structuredOutput.schemaPath;if(f.steerInboxDir)J[Bj]=f.steerInboxDir;let m=Jf(f.toolBudget);if(m)J[Tf]=m;return J[Qf]=f.parentSessionId??process.env[Qf]??"",{args:j,env:J,tempDir:_}}var sj=w;function ej(f){if(!f)return;try{Y.rmSync(f,{recursive:!0,force:!0})}catch{}}export{sj as parseParentPathEnv,ej as cleanupTempDir,tj as buildPiArgs,Oj as applyThinkingSuffix,jj as SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV,Bj as SUBAGENT_STEER_INBOX_ENV,Uf as SUBAGENT_RUN_ID_ENV,Qf as SUBAGENT_PARENT_SESSION_ENV,Wf as SUBAGENT_PARENT_RUN_ID_ENV,D as SUBAGENT_PARENT_ROOT_RUN_ID_ENV,_f as SUBAGENT_PARENT_PATH_ENV,o 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,af as SUBAGENT_ORCHESTRATOR_TARGET_ENV,fj as SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV,Jj as SUBAGENT_FANOUT_CHILD_ENV,Tj as SUBAGENT_CHILD_INDEX_ENV,lf as SUBAGENT_CHILD_ENV,$j as SUBAGENT_CHILD_AGENT_ENV};
|
|
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,8 +1,8 @@
|
|
|
1
|
-
import{randomUUID as U$}from"node:crypto";import*as Y from"node:fs";import*as O from"node:path";import*as
|
|
2
|
-
`,{mode:384}),{rootRunId:$,eventSink:Z,controlInbox:
|
|
3
|
-
`)){let j=
|
|
1
|
+
import{randomUUID as U$}from"node:crypto";import*as Y from"node:fs";import*as O from"node:path";import*as E from"node:os";import*as y from"node:path";function x($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function T$($){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-${x(K)}`}let Z=$&&Object.hasOwn($,"userInfo")?$.userInfo:E.userInfo;try{let X=Z?.().username;if(X)return`user-${x(X)}`}catch{}let Q=J.USERPROFILE??J.HOME;if(Q)return`home-${x(Q)}`;let f=$&&Object.hasOwn($,"homedir")?$.homedir:E.homedir;try{let X=f?.();if(X)return`home-${x(X)}`}catch{}return"shared"}var L=y.join(E.tmpdir(),`dm-subagents-${T$()}`),e=y.join(L,"async-subagent-results"),$$=y.join(L,"async-subagent-runs"),z$=y.join(L,"chain-runs"),s$=y.join(L,"artifacts");import*as Z$ from"node:path";var C$=128,_$=4;function h($){return typeof $==="string"&&$.length>0&&$.length<=C$&&!Z$.isAbsolute($)&&!$.includes("/")&&!$.includes("\\")&&!$.includes("..")}function j$($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function J$($,J){return typeof $==="string"&&$.length>0?$.slice(0,J):void 0}function m($){if(!Array.isArray($))return[];return $.map((J)=>{if(!J||typeof J!=="object")return;let j=J;if(!h(j.runId))return;return{runId:j.runId,...j$(j.stepIndex)!==void 0?{stepIndex:j$(j.stepIndex)}:{},...J$(j.agent,128)?{agent:J$(j.agent,128)}:{}}}).filter((J)=>Boolean(J)).slice(0,_$)}function n($){if(!$)return[];try{return m(JSON.parse($))}catch{return[]}}import*as R from"node:fs";import*as M from"node:path";import{fileURLToPath as y$}from"node:url";import*as V from"node:os";import*as U from"node:path";var zj=U.join(V.homedir(),".config","mcp","mcp.json"),Cj={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 Ej}from"typebox/compile";function Q$($,J){let j=y$($),Z=M.extname(j),Q=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(Z)?Z:".ts",f=M.dirname(j);while(!R.existsSync(M.join(f,"package.json"))){let X=M.dirname(f);if(X===f)throw Error(`Unable to resolve dm-subagents package root from ${j}`);f=X}return M.join(f,`${J}${Q}`)}var mj=Q$(import.meta.url,M.join("src","runs","shared","subagent-prompt-runtime")),nj=Q$(import.meta.url,M.join("src","extension","fanout-child"));var d="DM_SUBAGENT_PARENT_EVENT_SINK",o="DM_SUBAGENT_PARENT_CONTROL_INBOX",p="DM_SUBAGENT_PARENT_ROOT_RUN_ID",f$="DM_SUBAGENT_PARENT_RUN_ID",W$="DM_SUBAGENT_PARENT_CHILD_INDEX",O$="DM_SUBAGENT_PARENT_DEPTH",X$="DM_SUBAGENT_PARENT_PATH",u="DM_SUBAGENT_PARENT_CAPABILITY_TOKEN";import*as R$ from"node:fs";import*as C from"node:path";var D$=[10,25,50,100,200,500,1000,2000,4000],b$=new Set(["EACCES","EBUSY","EPERM"]),B$=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,K$=B$?new Int32Array(B$):void 0;function I$($){if($<=0)return;if(K$)try{Atomics.wait(K$,0,0,$);return}catch{}let J=Date.now()+$;while(Date.now()<J);}function N$($){let J=$?.code;return typeof J==="string"&&b$.has(J)}function x$($,J,j,Z,Q){for(let f=0;;f++)try{$.renameSync(J,j);return}catch(X){let K=Z[f];if(K===void 0||!N$(X))throw X;Q(K)}}function P$($={}){let J=$.fs??R$,j=$.now??Date.now,Z=$.pid??process.pid,Q=$.random??Math.random,X=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??D$:[],K=$.wait??I$;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"),x$(J,T,q,X,K)}finally{J.rmSync(T,{force:!0})}}}var Y$=P$();var A=O.join(L,"nested-subagent-events"),I="route.json",w$="registry.json",S=65536,r=12,b=16,P=3;function F($){return h($)}function v$($,J){if(!F(J))throw Error(`${$} must be a non-empty safe id token.`)}function G($,J){v$($,J)}function _($,J){let j=O.resolve($),Z=O.resolve(J);return Z===j||Z.startsWith(`${j}${O.sep}`)}function s($){return O.dirname(O.resolve($.eventSink))}function H($){if(G("rootRunId",$.rootRunId),G("capabilityToken",$.capabilityToken),!_(A,$.eventSink))throw Error("Nested event sink is outside the subagent nested event root.");if(!_(A,$.controlInbox))throw Error("Nested control inbox is outside the subagent nested event root.");if(s($)!==O.dirname(O.resolve($.controlInbox)))throw Error("Nested event sink and control inbox must share one route root.")}function sj($){G("rootRunId",$);let J=U$(),j=O.join(A,`${$}-${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,I),`${JSON.stringify({rootRunId:$,capabilityToken:J,createdAt:Date.now()})}
|
|
2
|
+
`,{mode:384}),{rootRunId:$,eventSink:Z,controlInbox:Q,capabilityToken:J}}function k$($=process.env){let J=$[p],j=$[d],Z=$[o],Q=$[u];if(!J||!j||!Z||!Q)return;let f={rootRunId:J,eventSink:j,controlInbox:Z,capabilityToken:Q};H(f);let X=O.join(s(f),I),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 aj($=process.env){try{return k$($)}catch(J){console.error("Ignoring invalid nested subagent event route:",J);return}}function tj($=process.env){let J=$[f$];if(!F(J))return;let j=$[W$],Z=j&&/^\d+$/.test(j)?Number(j):void 0,Q=Math.min(Math.max(1,W(Number($[O$]))??1),P),f=n($[X$]),X=f.length?f:[{runId:J,...Z!==void 0?{stepIndex:Z}:{}}];return{parentRunId:J,...Z!==void 0?{parentStepIndex:Z}:{},depth:Q,path:X}}function ej($,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 c$($){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 g$($){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 w($){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 h$($,J){return $==="queued"||$==="running"||$==="complete"||$==="failed"||$==="paused"?$:J}function m$($,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}:{},...w(j.turnBudget)?{turnBudget:w(j.turnBudget)}:{},...j.turnBudgetExceeded===!0?{turnBudgetExceeded:!0}:{},...j.wrapUpRequested===!0?{wrapUpRequested:!0}:{},...J<P&&Array.isArray(j.children)?{children:j.children.map((f)=>k(f,J+1)).filter((f)=>Boolean(f)).slice(0,b)}:{}}}function k($,J=0){if(!$||typeof $!=="object")return;let j=$;if(!F(j.id)||!F(j.parentRunId))return;let Z=m(j.path),Q=Array.isArray(j.steps)?j.steps.map((K)=>m$(K,J+1)).filter((K)=>Boolean(K)).slice(0,r):void 0,f=c$(j.totalTokens),X=g$(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),P),path:Z,state:h$(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,r)}:{},...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}:{},...w(j.turnBudget)?{turnBudget:w(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<P&&Array.isArray(j.children)?{children:j.children.map((K)=>k(K,J+1)).filter((K)=>Boolean(K)).slice(0,b)}:{}}}function l($,J){if(Buffer.byteLength($,"utf-8")>S)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(!F(Z.parentRunId))return;let Q=W(Z.ts);if(Q===void 0)return;let f=k(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 n$($,J){if(!$.includes(`
|
|
3
|
+
`)){let j=l($.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()?l(j,J):void 0).filter((j)=>Boolean(j))}function D($){return $==="complete"||$==="failed"||$==="paused"}function q$($,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(D($.state)&&!D(Z.state))return $;if(D($.state)&&D(Z.state)&&f===Q)return $;return{...$,...Z,state:Z.state,lastUpdate:Math.max(Q,f)}}function d$($,J){let j=!1,Z=(K)=>K.map((q)=>{if(q.id===J.parentRunId){let T=q.children??[],N=T.findIndex((g)=>g.id===J.child.id),t=q$(N>=0?T[N]:void 0,J),A$=N>=0?T.map((g,F$)=>F$===N?t:g):[...T,t];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=q$(f>=0?Q[f]:void 0,J);return f>=0?Q.map((K,q)=>q===f?X:K):[...Q,X].slice(0,b)}function o$($,J){return{...$,updatedAt:Math.max($.updatedAt,J.ts),children:d$($.children,J)}}function M$($){return O.join(s($),w$)}function p$($){G("rootRunId",$);let J;try{J=Y.readdirSync(A)}catch(j){if(j.code==="ENOENT")return;throw j}for(let j of J){if(!j.startsWith(`${$}-`))continue;let Z=O.join(A,j);try{let Q=JSON.parse(Y.readFileSync(O.join(Z,I),"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 $J(){let $;try{$=Y.readdirSync(A)}catch(j){if(j.code==="ENOENT")return new Map;throw j}let J=new Map;for(let j of $){let Z=O.join(A,j);try{let Q=JSON.parse(Y.readFileSync(O.join(Z,I),"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 jJ($){let J=p$($);return J?c(J):void 0}function G$($,J){if(!$?.length)return;for(let j of $){if(j.id===J)return j;let Z=G$(j.children,J)??G$(j.steps?.flatMap((Q)=>Q.children??[]),J);if(Z)return Z}return}function v($,J=[]){for(let j of $??[])J.push(j),v(j.children,J),v(j.steps?.flatMap((Z)=>Z.children??[]),J);return J}function i($,J,j=[]){if(!J)return v($,j);for(let Z of $??[]){if(Z.parentRunId===J.parentRunId&&(J.parentStepIndex===void 0||Z.parentStepIndex===J.parentStepIndex)){v([Z],j);continue}i(Z.children,J,j),i(Z.steps?.flatMap((Q)=>Q.children??[]),J,j)}return j}function u$(){let $;try{$=Y.readdirSync(A)}catch(j){if(j.code==="ENOENT")return[];throw j}let J=[];for(let j of $){let Z=O.join(A,j);try{let Q=JSON.parse(Y.readFileSync(O.join(Z,I),"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 r$($,J={}){G("id",$);let j=[];for(let Z of J.scope?.routes??u$())try{let Q=c(Z);for(let f of i(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 JJ($){let J=r$($)[0];return J?{rootRunId:J.rootRunId,run:J.run}:void 0}function l$($){H($);try{let J=JSON.parse(Y.readFileSync(M$($),"utf-8"));return{rootRunId:$.rootRunId,updatedAt:typeof J.updatedAt==="number"?J.updatedAt:0,children:Array.isArray(J.children)?J.children.map((j)=>k(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 c($){H($);let J=l$($),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>S)continue;K=Y.readFileSync(X,"utf-8")}catch{continue}for(let q of n$(K,$))J=o$(J,q),Z=!0;j.add(f),Z=!0}if(Z)J={...J,processedEvents:[...j].slice(-1000)},Y$(M$($),J);return J}function a($,J,j){let Z=`${JSON.stringify(j)}
|
|
6
|
+
`;if(Buffer.byteLength(Z,"utf-8")>S)throw Error("Nested route record exceeds the maximum size.");Y.mkdirSync($,{recursive:!0,mode:448});let Q=`${String(J).padStart(13,"0")}-${U$()}.json`,f=O.join($,`.${Q}.tmp`),X=O.join($,Q);return Y.writeFileSync(f,Z,{mode:384}),Y.renameSync(f,X),X}function ZJ($,J){H($);let j={...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=l(JSON.stringify(j),$);if(!Z)throw Error("Nested event record failed validation.");a($.eventSink,Z.ts,Z)}function L$($,J){if(Buffer.byteLength($,"utf-8")>S)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(!F(Z.requestId)||!F(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 V$($,J){if(Buffer.byteLength($,"utf-8")>S)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(!F(Z.requestId)||!F(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 QJ($,J){H($),G("requestId",J.requestId),G("targetRunId",J.targetRunId);let j={type:"subagent.nested.control-request",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=L$(JSON.stringify(j),$);if(!Z)throw Error("Nested control request failed validation.");return a($.controlInbox,Z.ts,Z)}function fJ($){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>S)continue;let X=L$(Y.readFileSync(Q,"utf-8"),$);if(X)j.push({...X,filePath:Q})}catch{continue}}return j}function WJ($,J){H($),G("requestId",J.requestId),G("targetRunId",J.targetRunId);let j={type:"subagent.nested.control-result",...J,rootRunId:$.rootRunId,capabilityToken:$.capabilityToken},Z=V$(JSON.stringify(j),$);if(!Z)throw Error("Nested control result failed validation.");a($.eventSink,Z.ts,Z)}function OJ($){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>S)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
|
|
8
|
+
`).filter((q)=>q.trim()):[X];for(let q of K){let z=V$(q,$);if(z)j.push(z)}}catch{continue}}return j}function XJ($){return{[d]:$.eventSink,[o]:$.controlInbox,[p]:$.rootRunId,[u]:$.capabilityToken}}function i$($,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 BJ($){if(!$.nestedRoute)return;let J=c($.nestedRoute);$.nestedChildren=J.children,i$($.asyncId,$.steps,J.children)}function KJ($){if(!$.nestedRoute)return;let J=c($.nestedRoute);$.nestedChildren=J.children}function H$($){if(!$?.length)return!1;for(let J of $){if(!D(J.state))return!0;if(H$(J.children))return!0;if(H$(J.steps?.flatMap((j)=>j.children??[])))return!0}return!1}function YJ($,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,r)}:{}}}function qJ($,J){return{DM_SUBAGENT_NESTED_ROOT_RUN_ID:$,DM_SUBAGENT_NESTED_PARENT_RUN_ID:J}}function GJ($){let J=O.resolve($);return _($$,J)&&!_(O.join(L,"nested-subagent-runs"),J)}function HJ($,J){return G("rootRunId",$),G("id",J),O.join(e,"nested",$,`${J}.json`)}export{ZJ as writeNestedEvent,WJ as writeNestedControlResult,QJ as writeNestedControlRequest,KJ as updateForegroundNestedProjection,BJ as updateAsyncJobNestedProjection,k as sanitizeSummary,k$ as resolveNestedRouteFromEnv,tj as resolveNestedParentAddressFromEnv,ej as resolveNestedAsyncDir,aj as resolveInheritedNestedRouteFromEnv,l$ as readNestedRegistry,OJ as readNestedControlResults,fJ as readNestedControlRequests,jJ as projectNestedRegistryForRoot,c as projectNestedEvents,n$ as parseNestedEventRecords,YJ as nestedSummaryFromAsyncStatus,XJ as nestedRouteEnv,HJ as nestedResultsPath,qJ as nestedArtifactEnv,GJ as isTopLevelAsyncDir,F as isSafeNestedId,H$ as hasLiveNestedDescendants,r$ as findNestedRunMatchesById,JJ as findNestedRunById,G$ as findNestedRun,p$ as findNestedRouteForRootId,sj as createNestedRoute,$J as buildNestedRouteIndex,i$ as attachRootChildrenToSteps,v$ as assertSafeNestedId,o$ as applyNestedEvent,A as NESTED_EVENTS_DIR};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import*as
|
|
2
|
-
`).trimEnd()}function
|
|
3
|
-
${
|
|
4
|
-
`),
|
|
5
|
-
`),
|
|
6
|
-
`),
|
|
1
|
+
import*as A from"node:fs";import*as W$ from"node:path";import{randomUUID as c$}from"node:crypto";import*as M from"node:fs";import*as E from"node:path";import{Type as f}from"typebox";import*as b from"node:fs";import*as H from"node:path";import{fileURLToPath as E$}from"node:url";import*as T from"node:os";import*as G from"node:path";import*as z from"node:os";import*as F from"node:path";function R($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function _$($){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-${R(O)}`}let B=$&&Object.hasOwn($,"userInfo")?$.userInfo:z.userInfo;try{let Q=B?.().username;if(Q)return`user-${R(Q)}`}catch{}let Z=j.USERPROFILE??j.HOME;if(Z)return`home-${R(Z)}`;let X=$&&Object.hasOwn($,"homedir")?$.homedir:z.homedir;try{let Q=X?.();if(Q)return`home-${R(Q)}`}catch{}return"shared"}var _=F.join(z.tmpdir(),`dm-subagents-${_$()}`),Aj=F.join(_,"async-subagent-results"),_j=F.join(_,"async-subagent-runs"),C$=F.join(_,"chain-runs"),Cj=F.join(_,"artifacts");var x=250;var dj=G.join(T.homedir(),".config","mcp","mcp.json"),nj={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 L$}from"typebox/compile";var I="DM_SUBAGENT_STRUCTURED_OUTPUT_SCHEMA",w="DM_SUBAGENT_STRUCTURED_OUTPUT_CAPTURE";function g($,j){let J;try{J=L$($)}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 z$=["read","grep","find","ls"],c="DM_SUBAGENT_TOOL_BUDGET";function F$($){if($==="*")return"*";if($===void 0)return[...z$];return[...new Set($.map((j)=>j.trim()).filter(Boolean))]}function b$($,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 m($,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 d($,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=b$(j,"DM_SUBAGENT_TOOL_BUDGET");if(J.error)throw Error(J.error);return J.budget}function u($,j){let J=E$($),B=H.extname(J),Z=[".js",".mjs",".cjs",".ts",".mts",".cts"].includes(B)?B:".ts",X=H.dirname(J);while(!b.existsSync(H.join(X,"package.json"))){let Q=H.dirname(X);if(Q===X)throw Error(`Unable to resolve dm-subagents package root from ${J}`);X=Q}return H.join(X,`${j}${Z}`)}var X0=u(import.meta.url,H.join("src","runs","shared","subagent-prompt-runtime")),Q0=u(import.meta.url,H.join("src","extension","fanout-child"));var r="DM_SUBAGENT_ORCHESTRATOR_TARGET",p="DM_SUBAGENT_ORCHESTRATOR_SESSION_ID",l="DM_SUBAGENT_SUPERVISOR_CHANNEL_DIR",t="DM_SUBAGENT_RUN_ID",i="DM_SUBAGENT_CHILD_AGENT",s="DM_SUBAGENT_CHILD_INDEX",q="DM_SUBAGENT_FANOUT_CHILD";var a="DM_SUBAGENT_STEER_INBOX";import*as S$ from"node:fs";import*as C from"node:path";var N$=[10,25,50,100,200,500,1000,2000,4000],R$=new Set(["EACCES","EBUSY","EPERM"]),e=typeof SharedArrayBuffer<"u"?new SharedArrayBuffer(4):void 0,$$=e?new Int32Array(e):void 0;function w$($){if($<=0)return;if($$)try{Atomics.wait($$,0,0,$);return}catch{}let j=Date.now()+$;while(Date.now()<j);}function y$($){let j=$?.code;return typeof j==="string"&&R$.has(j)}function x$($,j,J,B,Z){for(let X=0;;X++)try{$.renameSync(j,J);return}catch(Q){let O=B[X];if(O===void 0||!y$(Q))throw Q;Z(O)}}function I$($={}){let j=$.fs??S$,J=$.now??Date.now,B=$.pid??process.pid,Z=$.random??Math.random,Q=$.retryRenameErrors??process.platform==="win32"?$.retryDelaysMs??N$:[],O=$.wait??w$;return(Y,U)=>{j.mkdirSync(C.dirname(Y),{recursive:!0});let W=C.join(C.dirname(Y),`.${C.basename(Y)}.${B}.${J()}.${Z().toString(36).slice(2)}.tmp`);try{j.writeFileSync(W,JSON.stringify(U,null,2),"utf-8"),x$(j,W,Y,Q,O)}finally{j.rmSync(W,{force:!0})}}}var y=I$();var H0=E.join(_,"supervisor-channels"),J$="requests",B$="replies";var q$=65536,v$=600000,V0=Math.min(x,500),D$=f.Object({reason:f.String({enum:["need_decision","interview_request","progress_update"]}),message:f.Optional(f.String()),interview:f.Optional(f.Unsafe({type:"object",additionalProperties:!0}))},{additionalProperties:!1}),P$=f.Object({action:f.String({enum:["list","send","ask","reply","pending","status"]}),to:f.Optional(f.String()),message:f.Optional(f.String()),replyTo:f.Optional(f.String())},{additionalProperties:!1});function Z$($){return $.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function k$($){M.mkdirSync(E.join($,J$),{recursive:!0,mode:448}),M.mkdirSync(E.join($,B$),{recursive:!0,mode:448})}function h$($,j){return E.join($,J$,`${Z$(j)}.json`)}function g$($,j){return E.join($,B$,`${Z$(j)}.json`)}function L($){let j=process.env[$]?.trim();return j?j:void 0}function X$(){let $=L(l),j=L(t),J=L(i),B=L(s),Z=L(p);if(!$||!j||!J||!Z||B===void 0||!/^\d+$/.test(B))return;return{channelDir:$,runId:j,agent:J,childIndex:Number(B),orchestratorTarget:L(r),orchestratorSessionId:Z,childTarget:L("DM_SUBAGENT_INTERCOM_SESSION_NAME")}}function m$($){if($==="interview_request")return"Subagent requests a structured supervisor interview.";if($==="progress_update")return"Subagent progress update.";return"Subagent needs a supervisor decision."}function o$($){let j=[m$($.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 d$($){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 n$(){let $=Number(process.env.PI_INTERCOM_ASK_TIMEOUT_MS);return Number.isFinite($)&&$>0?$:v$}function u$($,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 r$($,j,J){let B=g$($,j),Z=Date.now()+n$();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 u$(250,J)}throw Error("Timed out waiting for supervisor reply.")}async function v($,j){let J=X$();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.");k$(J.channelDir);let B=c$(),Z=$.reason!=="progress_update",X=o$({...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")>q$)throw Error("Supervisor request is too large.");if(y(h$(J.channelDir,B),Q),!Z)return{content:[{type:"text",text:"Supervisor progress update queued."}],details:{delivered:!0,requestId:B,reason:$.reason}};let Y=await r$(J.channelDir,B,j),U={requestId:B,reason:$.reason};if($.reason==="interview_request"){let W=d$(Y.message);if(W.error)U.structuredReplyParseError=W.error;else U.structuredReply=W.value}return{content:[{type:"text",text:`**Reply from supervisor:**
|
|
3
|
+
${Y.message}`}],details:U}}function j$($,j){try{return $.getAllTools?.().some((J)=>J.name===j)===!0}catch{return!1}}function D($,j={}){if(!X$())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:D$,execute(Z,X,Q){return v(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:P$,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 v({reason:"progress_update",message:X.message??""},Q);if(O==="ask")return v({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 Q$ from"node:fs";import*as P from"node:path";var _0=process.platform==="win32"?"SIGBREAK":"SIGUSR2";function p$($){return`${String($.ts).padStart(13,"0")}-${Buffer.from($.id).toString("base64url")}.json`}function O$($,j){let J=P.join($,p$(j));return y(J,j),J}function l$($){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 Y$($,j=Q$){if(!j.existsSync($))return[];let J=[];for(let B of j.readdirSync($).filter((Z)=>Z.endsWith(".json")).sort()){let Z=P.join($,B),X;try{X=l$(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 t$="DM_SUBAGENT_INHERIT_PROJECT_CONTEXT",i$="DM_SUBAGENT_INHERIT_SKILLS",s$="DM_SUBAGENT_INTERCOM_SESSION_NAME",a$=["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
|
+
`),f$=["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
|
+
`),K$=["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
|
+
`),e$=new Set(["subagent-orchestration-instructions","subagent-slash-result","subagent-slash-text-result","subagent-notify","subagent_control_notice","subagent-control","subagent-control-notice"]),$j=/<name>\s*dm-subagents\s*<\/name>/,U$=`
|
|
7
7
|
|
|
8
8
|
# Project Context
|
|
9
9
|
|
|
10
10
|
Project-specific instructions and guidelines:
|
|
11
11
|
|
|
12
|
-
`,
|
|
12
|
+
`,h=`
|
|
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.`,G$=`
|
|
15
|
+
Current date:`;function k($){let j=process.env[$];if(j===void 0)return;return j!=="0"}function H$($,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 jj($){let j=$.indexOf(U$);if(j===-1)return $;let J=H$($,j+U$.length,[h,G$]);return`${$.slice(0,j)}${$.slice(J)}`}function Jj($){let j=$.indexOf(h);if(j===-1)return $;let J=H$($,j+h.length,[G$]);return`${$.slice(0,j)}${$.slice(J)}`}function Bj($){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)=>$j.test(j)?"":j)}function Zj($){let j=$;for(let J of[f$,K$])j=j.split(J).join("");return j.replace(/^(?:[ \t]*\r?\n)+/,"")}function Xj($,j){let J=$;if(!j.inheritProjectContext)J=jj(J);if(!j.inheritSkills)J=Jj(J);J=Bj(J),J=Zj(J);let B=j.fanoutChild?K$:f$,Z=process.env[w]?`
|
|
18
18
|
|
|
19
|
-
${
|
|
19
|
+
${a$}`:"";return`${B}${Z}
|
|
20
20
|
|
|
21
|
-
${J}`}function
|
|
22
|
-
`)}function
|
|
21
|
+
${J}`}function Qj($){let j=$;return j?.role==="custom"&&typeof j.customType==="string"&&e$.has(j.customType)}function Oj($){let j=$;return j?.role==="toolResult"&&j.toolName==="subagent"}function Yj($){let j=$;return j?.type==="toolCall"&&j.name==="subagent"}function Uj($){let j=$;if(j?.role!=="assistant"||!Array.isArray(j.content))return $;let J=j.content.filter((B)=>!Yj(B));if(J.length===j.content.length)return $;if(J.length===0)return;return{...j,content:J}}function Wj($){let j=process.env[q]==="1",J=!1,B=[];for(let Z of $){if(Qj(Z)||!j&&Oj(Z)){J=!0;continue}let X=j?Z:Uj(Z);if(X===void 0){J=!0;continue}if(X!==Z)J=!0;B.push(X)}return J?B:$}function fj($){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 Kj($,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(!m(j,O,J))return;return{block:!0,reason:d(j,O,J)}})}function Gj($){let j=process.env[a]?.trim();if(!j)return;let J=$.sendUserMessage;if(typeof J!=="function")return;let B=!1,Z=!1,X=!1,Q=!1,O,Y,U=()=>{if(Z||X||!B)return;X=!0;try{let K=Y$(j);for(let N=0;N<K.length;N++){let V$=K[N];try{J(fj(V$),{deliverAs:"steer"})}catch{for(let T$ of K.slice(N))O$(j,T$);break}}}finally{X=!1}},W=()=>{if(Q||Z)return;try{A.mkdirSync(j,{recursive:!0})}catch{return}Q=!0;try{O=A.watch(j,()=>U()),O.on("error",()=>{})}catch{O=void 0}Y=setInterval(U,250),Y.unref?.()},S=()=>{W(),B=!0,U();return},V=$.on;V("session_start",()=>W());for(let K of["message_start","message_update","message_end","tool_execution_start","tool_execution_end","turn_end"])V(K,S);V("session_shutdown",()=>{Z=!0;try{O?.close()}catch{}if(Y)clearInterval(Y)})}function Hj($){Gj($),Kj($,n(process.env[c]));let j=!1,J=!1,B=()=>{if(j)return;j=!0,D($,{includeIntercomFallback:!1})},Z=()=>{if(B(),J)return;J=!0,D($)},X=$.on;X("session_start",B);let Q=process.env[w],O=process.env[I];if(Q&&O){let Y=JSON.parse(A.readFileSync(O,"utf-8")),U={type:"object",properties:{value:Y},required:["value"],additionalProperties:!1},W=$.registerTool;W({name:"structured_output",label:"Structured Output",description:"Submit the required final structured output for this subagent step. This terminates the step.",parameters:U,async execute(S,V){let K=g(Y,V.value);if(K.status==="invalid")throw Error(`Structured output validation failed: ${K.message}`);return A.mkdirSync(W$.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 U=Wj(Y.messages);if(U===Y.messages)return;return{messages:U}}),X("before_agent_start",async(Y)=>{Z();let U=process.env[s$]?.trim();if(U&&typeof $.setSessionName==="function")$.setSessionName(U);let W=k(t$),S=k(i$),V=k(q);if(W===void 0&&S===void 0&&V===void 0)return;let K=Xj(Y.systemPrompt,{inheritProjectContext:W??!0,inheritSkills:S??!0,fanoutChild:V===!0});if(K===Y.systemPrompt)return;return{systemPrompt:K}})}export{Bj as stripSubagentOrchestrationSkill,jj as stripProjectContext,Wj as stripParentOnlySubagentMessages,Jj as stripInheritedSkills,Xj as rewriteSubagentPrompt,fj as formatSteerMessage,Hj as default,s$ as SUBAGENT_INTERCOM_SESSION_NAME_ENV,f$ as CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS,K$ as CHILD_FANOUT_BOUNDARY_INSTRUCTIONS};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{randomUUID as k}from"node:crypto";import*as o from"node:fs";import*as F from"node:path";import{SessionManager as
|
|
2
|
-
`).filter((n)=>n.trim().length>0).map((n,r)=>{try{return JSON.parse(n)}catch(
|
|
1
|
+
import{randomUUID as k}from"node:crypto";import*as o from"node:fs";import*as F from"node:path";import{SessionManager as w}from"@duckmind/dm-coding-agent";function v(e){return e==="fork"?"fork":"fresh"}function B(e,t){if(!e||!t||typeof t!=="object"||!("type"in t))return!1;let n=typeof e.provider==="string"?e.provider.toLowerCase():"",r=typeof e.api==="string"?e.api.toLowerCase():"",i=typeof e.model==="string"?e.model.toLowerCase():"",c=n==="anthropic"||r==="anthropic-messages"||i.startsWith("anthropic/");if(t.type==="redacted_thinking")return!0;if(t.type!=="thinking"||!c)return!1;let u="thinkingSignature"in t?t.thinkingSignature:("signature"in t)?t.signature:void 0;return t.redacted===!0||typeof u==="string"&&u.length>0}function I(e){let t=new Set(e.map((n)=>n.id).filter((n)=>typeof n==="string"));for(let n=0;n<100;n++){let r=k().slice(0,8);if(!t.has(r))return r}return k()}function O(e){let t=e[e.length-1];if(t?.type==="thinking_level_change"&&t.thinkingLevel==="off")return;let n=[...e].reverse().find((r)=>typeof r.id==="string");e.push({type:"thinking_level_change",id:I(e),parentId:n?.id??null,timestamp:new Date().toISOString(),thinkingLevel:"off"})}function m(e){let t=!1;for(let n of e){if(n.type!=="message"||n.message?.role!=="assistant"||!Array.isArray(n.message.content))continue;let r=n.message.content.filter((i)=>!B(n.message,i));if(r.length===n.message.content.length)continue;n.message.content=r,t=!0}if(t)O(e);return t}function C(e){return o.readFileSync(e,"utf-8").split(`
|
|
2
|
+
`).filter((n)=>n.trim().length>0).map((n,r)=>{try{return JSON.parse(n)}catch(i){let c=i instanceof Error?i:Error(String(i));throw Error(`Unable to inspect forked session ${e}: invalid JSONL on line ${r+1}: ${c.message}`,{cause:c})}})}function L(e,t,n={}){if(v(t)!=="fork")return{sessionFileForIndex:()=>{return},thinkingOverrideForIndex:()=>{return}};let r=e.getSessionFile();if(!r)throw Error("Forked subagent context requires a persisted parent session.");let i=e.getLeafId();if(!i)throw Error("Forked subagent context requires a current leaf to fork from.");let u=n.openSession??e.openSession??((a,l)=>w.open(a,l)),x=e.getSessionDir?.(),p=new Map,S=(a=0)=>{let l=p.get(a);if(l)return l;try{if(!o.existsSync(r))throw Error(`Parent session file does not exist: ${r}. DM has not persisted enough history to fork yet.`);let f;try{let s=typeof e.createDetachedBranchedSession==="function"?e.createDetachedBranchedSession(i):(f=u(r,x)).createBranchedSession(i);if(!s)throw Error("Session manager did not return a forked session file.");let h;if(!o.existsSync(s)){let d=f?.getHeader?.(),g=f?.getEntries?.();if(!d||!g)throw Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${s}`);if(m(g))h="off";o.mkdirSync(F.dirname(s),{recursive:!0}),o.writeFileSync(s,`${[d,...g].map((E)=>JSON.stringify(E)).join(`
|
|
3
3
|
`)}
|
|
4
|
-
`,"utf-8")}else{let d=
|
|
4
|
+
`,"utf-8")}else{let d=C(s);if(m(d))h="off",o.writeFileSync(s,`${d.map((g)=>JSON.stringify(g)).join(`
|
|
5
5
|
`)}
|
|
6
|
-
`,"utf-8")}let y={sessionFile:
|
|
6
|
+
`,"utf-8")}let y={sessionFile:s,...h?{thinkingOverride:h}:{}};return p.set(a,y),y}finally{f?.dispose?.()}}catch(f){let s=f instanceof Error?f:Error(String(f));throw Error(`Failed to create forked subagent session: ${s.message}`,{cause:s})}};return{sessionFileForIndex(a=0){return S(a).sessionFile},thinkingOverrideForIndex(a=0){return S(a).thinkingOverride}}}export{v as resolveSubagentContext,L as createForkContextResolver};
|
|
@@ -1,9 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{spawn as
|
|
3
|
-
[greedysearch] Available engines: ${Object.keys(Y).join(", ")}
|
|
4
|
-
`);if(X.length>0)return X;process.stderr.write(`[greedysearch] Warning: no valid engines in ${$}, falling back to defaults: ${H.join(", ")}
|
|
5
|
-
`)}}}catch{}return H}function f(){try{if(!W(j))R(j,{recursive:!0});if(!W($))x($,JSON.stringify({engines:H,synthesizer:b},null,2)+`
|
|
6
|
-
`,"utf8")}catch{}}f();var k=["gemini","chatgpt"];function _(){try{if(W($)){let K=w($,"utf8"),Q=JSON.parse(K);if(typeof Q.synthesizer==="string"){let X=Q.synthesizer.toLowerCase();if(k.includes(X))return X;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${Q.synthesizer}" in ${$}
|
|
7
|
-
[greedysearch] Available synthesizers: ${k.join(", ")}
|
|
8
|
-
[greedysearch] Falling back to default: ${b}
|
|
9
|
-
`)}}}catch{}return b}var Y={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},s=y();var d=_(),r=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=Z;function O(K){return String(K||"").trim()==="existing"}var h=Z,C=G,D=g,B=process.argv.slice(2),J=null,A=B.indexOf("--mode");if(A!==-1)J=B[A+1]||null,B.splice(A,2);if(J&&!["visible","headless"].includes(J))console.error(`Invalid --mode ${J}. Use visible or headless.`),process.exit(2);if(!L(C))console.error(`GreedySearch Chrome is not running (missing ${C}). Launch with bin/visible.mjs or bin/launch.mjs.`),process.exit(1);if(J){let K=L(D)?P(D,"utf8").trim():"unknown";if(K!==J&&!(J==="visible"&&O(K)))console.error(`GreedySearch Chrome is ${K}, not ${J}. Refusing to attach.`),process.exit(1)}var I=new URL("./cdp.mjs",import.meta.url).pathname.replace(/^\/([A-Z]:)/,"$1"),m=S(U(),[I,...B],{stdio:"inherit",env:{...process.env,CDP_PROFILE_DIR:h}});m.on("close",(K)=>process.exit(K??0));
|
|
2
|
+
import{spawn as K}from"node:child_process";import{existsSync as J,readFileSync as N}from"node:fs";var Q=GREEDY_PROFILE_DIR,G=ACTIVE_PORT_FILE,H=CHROME_MODE_FILE,v=process.argv.slice(2),k=null,z=v.indexOf("--mode");if(z!==-1)k=v[z+1]||null,v.splice(z,2);if(k&&!["visible","headless"].includes(k))console.error(`Invalid --mode ${k}. Use visible or headless.`),process.exit(2);if(!J(G))console.error(`GreedySearch Chrome is not running (missing ${G}). Launch with bin/visible.mjs or bin/launch.mjs.`),process.exit(1);if(k){let q=J(H)?N(H,"utf8").trim():"unknown";if(q!==k&&!(k==="visible"&&isExistingBrowserMode(q)))console.error(`GreedySearch Chrome is ${q}, not ${k}. Refusing to attach.`),process.exit(1)}var U=new URL("./cdp.mjs",import.meta.url).pathname.replace(/^\/([A-Z]:)/,"$1"),W=K(nodeRuntimeCommand(),[U,...v],{stdio:"inherit",env:{...process.env,CDP_PROFILE_DIR:Q}});W.on("close",(q)=>process.exit(q??0));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{execSync as
|
|
3
|
-
`)[0]):null}catch{return null}}function
|
|
4
|
-
${
|
|
2
|
+
import{execSync as c,spawn as g}from"node:child_process";import{existsSync as u,mkdirSync as x,readFileSync as k,unlinkSync as Y,writeFileSync as B}from"node:fs";import{platform as _,tmpdir as w}from"node:os";import{join as O}from"node:path";var b=w().replaceAll("\\","/"),e=9222,p=O(w(),"greedysearch-chrome-profile"),h=`${b}/greedysearch-chrome.pid`,l=`${b}/greedysearch-chrome-mode`;function m(o){try{if(_()==="win32"){let C=c("netstat -ano -p TCP 2>nul",{encoding:"utf8"}),a=new RegExp(String.raw`TCP\s+\S+:${o}\s+\S+:0\s+LISTENING\s+(\d+)`,"i");return(C.match(a)||[])[1]?parseInt(C.match(a)[1]):null}let r=c(`lsof -i :${o} -t 2>/dev/null || ss -tlnp 2>/dev/null | grep :${o} | grep -oP 'pid=\\K\\d+'`,{encoding:"utf8"}).trim();return r?parseInt(r.split(`
|
|
3
|
+
`)[0]):null}catch{return null}}function f(){let o=m(e);if(!o)return!1;try{if(_()==="win32")c(`taskkill /F /PID ${o}`,{stdio:"ignore"});else process.kill(o,"SIGKILL");return!0}catch{return!1}}function H(){for(let o of[h,l])try{Y(o)}catch{}}async function U(){let{ok:o,body:r}=await probe();if(!o){console.log("Not running.");return}let C=u(l)?k(l,"utf8").trim():"unknown",a=u(h)?k(h,"utf8").trim():"none",n=m(e)||"unknown",{Browser:s}=JSON.parse(r);console.log(`Running: ${s}`),console.log(` Mode: ${C}`),console.log(` Port: ${e}`),console.log(` PID file: ${a}`),console.log(` PID actual:${n}`)}async function K(){let{ok:o}=await probe();if(!o){console.log("Not running — nothing to kill."),H();return}console.log("Killing browser on port 9222..."),f(),H(),await new Promise((C)=>setTimeout(C,1500));let{ok:r}=await probe();console.log(r?"FAILED — still running.":"Killed.")}async function R(o){let{ok:r}=await probe();if(r){let A=u(l)?k(l,"utf8").trim():"unknown";if(A===o){console.log(`Already running in ${o} mode.`);return}console.log(`${A} browser running — killing to switch to ${o}...`),f(),H(),await new Promise((i)=>setTimeout(i,1500))}if(!(process.env.CHROME_PATH||findChrome()))console.error("Chrome not found."),process.exit(1);let a=o==="headless",n=[`--remote-debugging-port=${e}`,"--disable-features=DevToolsPrivacyUI","--no-first-run","--no-default-browser-check","--disable-default-apps","--disable-blink-features=AutomationControlled","--window-size=1920,1080",`--user-data-dir=${p}`,"--profile-directory=Default"];if(a){if(n.push("--headless=new","--disable-gpu","--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"),_()==="win32")n.push("--disable-software-rasterizer")}n.push("about:blank"),x(p,{recursive:!0}),console.log(`Launching ${o} ${browser.label} on port ${e}...`);let s=g(browser.path,n,{detached:!0,stdio:"ignore"});s.unref(),B(h,String(s.pid)),B(l,o);for(let A=0;A<30;A++){await new Promise((t)=>setTimeout(t,500));let{ok:i}=await probe();if(i){try{let{body:t}=await probe(),{webSocketDebuggerUrl:W}=JSON.parse(t),G=new URL(W).pathname;B(`${p}/DevToolsActivePort`,`${e}
|
|
4
|
+
${G}`)}catch{}console.log("Ready.");return}}console.error("Timeout — Chrome did not become ready."),process.exit(1)}var T=process.argv[2];switch(T){case"launch-headless":await R("headless");break;case"launch-visible":await R("visible");break;case"kill":await K();break;case"status":await U();break;default:console.log(`Usage: node bin/gschrome.mjs <command>
|
|
5
5
|
|
|
6
6
|
Commands:
|
|
7
7
|
launch-headless Start headless Chrome on port 9222
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{execSync as c,spawn as YC}from"node:child_process";import{existsSync as EC,mkdirSync as GC,readFileSync as u,unlinkSync as
|
|
2
|
+
import{execSync as c,spawn as YC}from"node:child_process";import{existsSync as EC,mkdirSync as GC,readFileSync as u,unlinkSync as D,writeFileSync as $}from"node:fs";import MC from"node:http";import{platform as p,tmpdir as g}from"node:os";import{join as I}from"node:path";import{existsSync as N}from"node:fs";import{platform as V}from"node:os";function l(C=V()){if(C==="win32")return{cloak:["C:/Program Files/CloakBrowser/CloakBrowser.exe","C:/Program Files (x86)/CloakBrowser/CloakBrowser.exe"],chrome:["C:/Program Files/Google/Chrome/Application/chrome.exe","C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"]};if(C==="darwin")return{cloak:["/Applications/CloakBrowser.app/Contents/MacOS/CloakBrowser","/Applications/Cloak Browser.app/Contents/MacOS/CloakBrowser"],chrome:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium"]};return{cloak:["/usr/bin/cloakbrowser","/usr/local/bin/cloakbrowser","/opt/CloakBrowser/CloakBrowser"],chrome:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium-browser","/usr/bin/chromium","/snap/bin/chromium"]}}function L(C,A=N){return C.find((_)=>_&&A(_))||null}function a(C,A){for(let _ of A){let R=C[_]?.trim();if(R)return{key:_,path:R}}return null}function v(C,A){if(C==="chrome"||A==="CHROME_PATH")return"Chrome";if(C==="cloak"||A==="DM_CUA_CLOAK_PATH"||A==="CLOAKBROWSER_BINARY_PATH")return"CloakBrowser";return"browser"}function S({env:C=process.env,platformName:A=V(),exists:_=N}={}){let R=(C.GREEDY_SEARCH_BROWSER||C.DM_CUA_BROWSER||"auto").toLowerCase(),O=a(C,R==="chrome"?["GREEDY_SEARCH_BROWSER_PATH","DM_CUA_BROWSER_PATH","CHROME_PATH"]:["GREEDY_SEARCH_BROWSER_PATH","DM_CUA_BROWSER_PATH","DM_CUA_CLOAK_PATH","CLOAKBROWSER_BINARY_PATH","CHROME_PATH"]);if(O)return{path:O.path,label:v(R,O.key)};let W=l(A);if(R==="cloak")return{path:L(W.cloak,_),label:"CloakBrowser"};if(R==="chrome")return{path:L(W.chrome,_),label:"Chrome"};let K=L(W.cloak,_);return{path:K||L(W.chrome,_),label:K?"CloakBrowser":"Chrome"}}import{existsSync as h,mkdirSync as o,readFileSync as J,renameSync as r,unlinkSync as n,writeFileSync as U}from"node:fs";import i from"node:http";import{platform as m}from"node:os";import{dirname as s}from"node:path";var x=[9222,9223],d=/^(0|false|no|off)$/i;function t(C){return[...new Set(C.filter(Boolean))]}function w(C,A="localhost"){let _=String(C||"").trim().split(/\r?\n/).map((O)=>O.trim()).filter(Boolean);if(_.length===0)throw Error("empty DevToolsActivePort");let[R,B=""]=_;if(/^wss?:\/\//i.test(R))return R;if(R.includes(":"))return`ws://${R}${B}`;return`ws://${A}:${R}${B}`}function q(C,A="explicit"){let _=new URL(C),R=_.protocol==="wss:"?"wss:":"ws:",B=_.port?Number.parseInt(_.port,10):R==="wss:"?443:80;return{source:A,wsUrl:`${R}//${_.host}${_.pathname}${_.search}`,host:_.hostname,port:B,path:`${_.pathname}${_.search}`,httpUrl:`http://${_.hostname}:${B}`}}function y(C=process.env){return![C.GREEDY_SEARCH_REUSE_EXISTING_BROWSER,C.DM_CUA_REUSE_EXISTING_BROWSER].some((A)=>A!==void 0&&d.test(String(A)))}function Q(C){let A=Number.parseInt(String(C??""),10);return Number.isInteger(A)&&A>0&&A<65536?A:null}function e(C){if(!C)return null;let A=String(C).trim();if(!A)return null;let _=new URL(A.includes("://")?A:`http://${A}`),R=Q(_.port)||(_.protocol==="https:"?443:80);return{host:_.hostname,port:R,source:`env:${A}`}}function CC(C){if(!C)return[];return String(C).split(/[,\s]+/).map(Q).filter(Boolean)}function AC({env:C=process.env,platformName:A=m(),procVersionText:_=null}={}){if(A!=="linux")return!1;if(C.WSL_DISTRO_NAME||C.WSL_INTEROP)return!0;let R=_??(()=>{try{return J("/proc/version","utf8")}catch{return""}})();return/microsoft|wsl/i.test(R)}function _C({env:C=process.env,platformName:A=m(),procVersionText:_=null,resolvConfText:R=null}={}){let B=["localhost","127.0.0.1"];if(AC({env:C,platformName:A,procVersionText:_})){let W=(R??(()=>{try{return J("/etc/resolv.conf","utf8")}catch{return""}})()).match(/^\s*nameserver\s+([^\s#]+)/m);if(W)B.push(W[1]);B.push("host.docker.internal")}return t(B)}function RC({env:C=process.env,hosts:A=_C({env:C}),autoPorts:_=x,excludePorts:R=[]}={}){let B=[];for(let H of["GREEDY_SEARCH_CDP_WS_URL","DM_CUA_CDP_WS_URL","CDP_WS_URL"])if(C[H])B.push({wsUrl:C[H],source:`env:${H}`});for(let H of["GREEDY_SEARCH_CDP_URL","DM_CUA_CDP_URL","CDP_URL"])try{let Y=e(C[H]);if(Y)B.push(Y)}catch{}for(let H of["GREEDY_SEARCH_EXISTING_CDP_PORT","DM_CUA_EXISTING_CDP_PORT","GREEDY_SEARCH_CDP_PORT","DM_CUA_CDP_PORT"]){let Y=Q(C[H]);if(!Y)continue;for(let M of A)B.push({host:M,port:Y,source:`env:${H}`})}let O=CC(C.GREEDY_SEARCH_EXISTING_CDP_PORTS);for(let H of O)for(let Y of A)B.push({host:Y,port:H,source:"env:GREEDY_SEARCH_EXISTING_CDP_PORTS"});let W=new Set(R.filter(Boolean));if(y(C))for(let H of _){if(W.has(H))continue;for(let Y of A)B.push({host:Y,port:H,source:"auto"})}let K=new Set;return B.filter((H)=>{let Y=H.wsUrl||`${H.host}:${H.port}`;if(K.has(Y))return!1;return K.add(Y),!0})}async function BC(C,{timeoutMs:A=700}={}){if(C.wsUrl)return q(C.wsUrl,C.source);let _=C.host||"localhost",R=C.port;if(!R)return null;let B=await new Promise((O)=>{let W=i.get({host:_,port:R,path:"/json/version",timeout:A},(K)=>{let H="";K.setEncoding("utf8"),K.on("data",(Y)=>H+=Y),K.on("end",()=>O(K.statusCode===200?H:null))});W.on("error",()=>O(null)),W.setTimeout(A,()=>{W.destroy(),O(null)})});if(!B)return null;try{let O=JSON.parse(B);if(!O.webSocketDebuggerUrl)return null;let W=q(O.webSocketDebuggerUrl,C.source),K=W.path||new URL(O.webSocketDebuggerUrl).pathname;return{...W,host:_,port:R,httpUrl:`http://${_}:${R}`,wsUrl:`ws://${_}:${R}${K}`,path:K}}catch{return null}}async function OC(C={}){for(let A of RC(C)){let _=await BC(A,C);if(_)return _}return null}function HC(C){if(!C)throw Error("missing CDP endpoint");let A=new URL(C.wsUrl);return`${A.host}
|
|
3
3
|
${A.pathname}${A.search}
|
|
4
|
-
`}function
|
|
5
|
-
${
|
|
4
|
+
`}function KC(C,A){o(s(C),{recursive:!0});let _=`${C}.tmp-${process.pid}`;U(_,HC(A),"utf8");try{n(C)}catch{}r(_,C)}async function P({activePortFile:C,modeFile:A,env:_=process.env,excludePorts:R=[],autoPorts:B=x}={}){if(!y(_))return null;let O=await OC({env:_,excludePorts:R,autoPorts:B});if(!O)return null;if(KC(C,O),A)U(A,"existing","utf8");return O}function WC(C){return String(C||"").trim()==="existing"}function X(C,A){if(!A||!h(A))return!1;if(!WC(J(A,"utf8")))return!1;return!!C&&h(C)}var E=9222,f=I(g(),"greedysearch-chrome-profile"),G=I(f,"DevToolsActivePort"),z=I(g(),"greedysearch-chrome.pid"),b=I(g(),"greedysearch-chrome-mode");function j(){if(!EC(z))return!1;let C=Number.parseInt(u(z,"utf8").trim(),10);if(!C)return!1;try{return process.kill(C,0),C}catch{return!1}}function k(C){try{if(p()==="win32"){let _=c("netstat -ano -p TCP 2>nul",{encoding:"utf8"}),R=new RegExp(String.raw`TCP\s+[^\s]*:${C}\s+[^\s]*:0\s+LISTENING\s+(\d+)`,"i"),B=_.match(R);return B?Number.parseInt(B[1],10):null}}catch{return null}}function Z(C){try{if(p()==="win32")c(`taskkill /F /PID ${C} /T`,{stdio:"ignore"});else process.kill(C,"SIGKILL");return!0}catch{return!1}}function T(C,A=1000){return new Promise((_)=>{let R=MC.get(C,(B)=>{let O="";B.on("data",(W)=>O+=W),B.on("end",()=>_({ok:B.statusCode===200,body:O}))});R.on("error",()=>_({ok:!1})),R.setTimeout(A,()=>{R.destroy(),_({ok:!1})})})}async function bC(C){try{let A=await T(`http://localhost:${C}/json/version`).then((H)=>JSON.parse(H.body)),R=(await T(`http://localhost:${C}/json/list`).then((H)=>JSON.parse(H.body))).find((H)=>H.type==="page")?.id;if(!R)return;let B=A.webSocketDebuggerUrl;if(typeof B!=="string")return;let O=new URL(B);if(O.hostname!=="localhost"&&O.hostname!=="127.0.0.1")return;if(!/^ws:\/\/localhost:\d+/.test(`ws://${O.host}`))return;let W=O.pathname,K=new WebSocket(`ws://localhost:${C}${W}`);await new Promise((H)=>{K.onopen=()=>K.send(JSON.stringify({id:1,method:"Browser.getWindowForTarget",params:{targetId:R}})),K.onmessage=(Y)=>{let M=JSON.parse(Y.data);if(M.id===1&&M.result?.windowId)K.send(JSON.stringify({id:2,method:"Browser.setWindowBounds",params:{windowId:M.result.windowId,bounds:{windowState:"minimized"}}}));else if(M.id===2)K.close(),H()},K.onerror=()=>{K.close(),H()},setTimeout(()=>{try{K.close()}catch{}H()},5000)})}catch{}}async function DC(C=15000){let A=Date.now()+C;while(Date.now()<A){let{ok:_,body:R}=await T(`http://localhost:${E}/json/version`,1500);if(_)try{let{webSocketDebuggerUrl:B}=JSON.parse(R),O=new URL(B).pathname;return $(G,`${E}
|
|
5
|
+
${O}`,"utf8"),!0}catch{}await new Promise((B)=>setTimeout(B,400))}return!1}function F(){let C=j();if(C)Z(C);let A=k(E);if(A&&A!==C)Z(A);try{D(z)}catch{}try{D(G)}catch{}try{D(b)}catch{}return new Promise((_)=>{let R=Date.now(),B=()=>{let O=k(E);if(!O)return _(!0);if(Date.now()-R>5000)return _(!1);Z(O),setTimeout(B,500)};B()})}async function LC(){let C=process.argv[2];if(C==="--kill"){if(X(G,b)){try{D(G)}catch{}try{D(b)}catch{}console.log("Detached from existing browser CDP endpoint; no browser process was killed.");return}await F(),console.log("Browser stopped.");return}if(C==="--status"){if(X(G,b)){try{let H=w(u(G,"utf8"));console.log(`Reusing existing browser — ${H}`)}catch{console.log("Reusing existing browser.")}return}let K=j()||k(E);if(K)console.log(`Running — pid ${K}, port ${E}`);else console.log("Not running.");return}let A=await P({activePortFile:G,modeFile:b,excludePorts:j()?[E]:[],autoPorts:j()?[9223]:[E,9223]});if(A){console.log(`Reusing existing browser CDP endpoint ${A.httpUrl} (${A.source}).`);return}console.log("Stopping any existing browser on port 9222..."),await F();let _=S();if(!_.path)console.error("CloakBrowser/Chrome not found. Set GREEDY_SEARCH_BROWSER_PATH, DM_CUA_BROWSER_PATH, DM_CUA_CLOAK_PATH, CLOAKBROWSER_BINARY_PATH, or CHROME_PATH."),process.exit(1);GC(f,{recursive:!0});let R=[`--remote-debugging-port=${E}`,"--disable-features=DevToolsPrivacyUI","--no-first-run","--no-default-browser-check","--disable-default-apps",`--user-data-dir=${f}`,"--profile-directory=Default","--new-window","about:blank"];console.log("Launching visible Chrome...");let B=YC(_.path,R,{detached:!0,stdio:"ignore"});B.unref();let O=B.pid;if($(z,String(O)),$(b,"visible","utf8"),console.log(`Chrome PID: ${O}`),!await DC())console.error("Chrome did not become ready within 15s."),process.exit(1);await bC(E),console.log("Visible Chrome ready on port 9222."),console.log("Keep this terminal open to keep Chrome alive.")}LC();
|