@humain/terminal 0.0.4-beta.2 → 0.0.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/CHANGELOG.md +20 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +4 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/tools/subagent.d.ts +3 -0
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js +20 -9
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/humain/web-access/vendor/chrome-cookies.js +11 -7
- package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.js +30 -12
- package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
- package/dist/humain/web-access/vendor/index.d.ts +74 -1
- package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/index.js +16 -10
- package/dist/humain/web-access/vendor/index.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/src/humain/web-access/UPSTREAM.md +1 -1
- package/src/humain/web-access/upstream.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subagent Tool - Delegate tasks to specialized agents\n *\n * Spawns a separate humain-terminal process for each subagent invocation,\n * giving it an isolated context window.\n *\n * Supports three modes:\n * - Single: { agent: \"name\", task: \"...\" }\n * - Parallel: { tasks: [{ agent: \"name\", task: \"...\" }, ...] }\n * - Chain: { chain: [{ agent: \"name\", task: \"... {previous} ...\" }, ...] }\n *\n * Uses JSON mode to capture structured output from subagents.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport { shortenPath } from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst MAX_PARALLEL_TASKS = 8;\nconst MAX_CONCURRENCY = 4;\nconst COLLAPSED_ITEM_COUNT = 10;\nconst PER_TASK_OUTPUT_CAP = 50 * 1024;\n\n/** Children must not delegate further: depth 0 = top-level agent, depth >= 1 = subagent. */\nexport const SUBAGENT_DEPTH_ENV = \"HUMAIN_TERMINAL_SUBAGENT_DEPTH\";\nconst MAX_SUBAGENT_DEPTH = 1;\n\nfunction currentSubagentDepth(): number {\n\tconst raw = Number(process.env[SUBAGENT_DEPTH_ENV] ?? \"0\");\n\treturn Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;\n}\n\n// --- Agent discovery ---\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tsystemPrompt: string;\n\tsource: \"user\" | \"project\";\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n}\n\nfunction loadAgentsFromDir(dir: string, source: \"user\" | \"project\"): AgentConfig[] {\n\tconst agents: AgentConfig[] = [];\n\n\tif (!fs.existsSync(dir)) {\n\t\treturn agents;\n\t}\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn agents;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\")) continue;\n\t\tif (!entry.isFile() && !entry.isSymbolicLink()) continue;\n\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);\n\n\t\tif (!frontmatter.name || !frontmatter.description) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tools = frontmatter.tools\n\t\t\t?.split(\",\")\n\t\t\t.map((t: string) => t.trim())\n\t\t\t.filter(Boolean);\n\n\t\tagents.push({\n\t\t\tname: frontmatter.name,\n\t\t\tdescription: frontmatter.description,\n\t\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\t\tmodel: frontmatter.model,\n\t\t\tsystemPrompt: body,\n\t\t\tsource,\n\t\t\tfilePath,\n\t\t});\n\t}\n\n\treturn agents;\n}\n\nfunction isDirectory(p: string): boolean {\n\ttry {\n\t\treturn fs.statSync(p).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\tif (isDirectory(candidate)) return candidate;\n\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = scope === \"user\" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, \"project\");\n\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tif (scope === \"both\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t} else if (scope === \"user\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t} else {\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t}\n\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\n// --- Formatting helpers ---\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\treturn `${(count / 1000000).toFixed(1)}M`;\n}\n\nfunction formatUsageStats(\n\tusage: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\tcost: number;\n\t\tcontextTokens?: number;\n\t\tturns?: number;\n\t},\n\tmodel?: string,\n): string {\n\tconst parts: string[] = [];\n\tif (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? \"s\" : \"\"}`);\n\tif (usage.input) parts.push(`↑${formatTokens(usage.input)}`);\n\tif (usage.output) parts.push(`↓${formatTokens(usage.output)}`);\n\tif (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);\n\tif (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);\n\tif (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);\n\tif (usage.contextTokens && usage.contextTokens > 0) {\n\t\tparts.push(`ctx:${formatTokens(usage.contextTokens)}`);\n\t}\n\tif (model) parts.push(model);\n\treturn parts.join(\" \");\n}\n\nfunction formatToolCall(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tthemeFg: (color: any, text: string) => string,\n): string {\n\tswitch (toolName) {\n\t\tcase \"bash\": {\n\t\t\tconst command = (args.command as string) || \"...\";\n\t\t\tconst preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;\n\t\t\treturn themeFg(\"muted\", \"$ \") + themeFg(\"toolOutput\", preview);\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst offset = args.offset as number | undefined;\n\t\t\tconst limit = args.limit as number | undefined;\n\t\t\tlet text = themeFg(\"accent\", filePath);\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tconst startLine = offset ?? 1;\n\t\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\t\ttext += themeFg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\t\t\treturn themeFg(\"muted\", \"read \") + text;\n\t\t}\n\t\tcase \"write\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst content = (args.content || \"\") as string;\n\t\t\tconst lines = content.split(\"\\n\").length;\n\t\t\tlet text = themeFg(\"muted\", \"write \") + themeFg(\"accent\", filePath);\n\t\t\tif (lines > 1) text += themeFg(\"dim\", ` (${lines} lines)`);\n\t\t\treturn text;\n\t\t}\n\t\tcase \"edit\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\treturn themeFg(\"muted\", \"edit \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"ls\": {\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"ls \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"find\": {\n\t\t\tconst pattern = (args.pattern || \"*\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"find \") + themeFg(\"accent\", pattern) + themeFg(\"dim\", ` in ${shortenPath(rawPath)}`);\n\t\t}\n\t\tcase \"grep\": {\n\t\t\tconst pattern = (args.pattern || \"\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn (\n\t\t\t\tthemeFg(\"muted\", \"grep \") +\n\t\t\t\tthemeFg(\"accent\", `/${pattern}/`) +\n\t\t\t\tthemeFg(\"dim\", ` in ${shortenPath(rawPath)}`)\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tconst argsStr = JSON.stringify(args);\n\t\t\tconst preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;\n\t\t\treturn themeFg(\"accent\", toolName) + themeFg(\"dim\", ` ${preview}`);\n\t\t}\n\t}\n}\n\nexport interface SubagentUsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nexport interface SubagentSingleResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\tusage: SubagentUsageStats;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n}\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentSingleResult[];\n}\n\nfunction getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") return part.text;\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction isFailedResult(result: SubagentSingleResult): boolean {\n\treturn result.exitCode !== 0 || result.stopReason === \"error\" || result.stopReason === \"aborted\";\n}\n\nfunction getResultOutput(result: SubagentSingleResult): string {\n\tif (isFailedResult(result)) {\n\t\treturn result.errorMessage || result.stderr || getFinalOutput(result.messages) || \"(no output)\";\n\t}\n\treturn getFinalOutput(result.messages) || \"(no output)\";\n}\n\nfunction truncateParallelOutput(output: string): string {\n\tconst byteLength = Buffer.byteLength(output, \"utf8\");\n\tif (byteLength <= PER_TASK_OUTPUT_CAP) return output;\n\n\tlet truncated = output.slice(0, PER_TASK_OUTPUT_CAP);\n\twhile (Buffer.byteLength(truncated, \"utf8\") > PER_TASK_OUTPUT_CAP) {\n\t\ttruncated = truncated.slice(0, -1);\n\t}\n\treturn `${truncated}\\n\\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, \"utf8\")} bytes omitted. Full output preserved in tool details.]`;\n}\n\ntype DisplayItem = { type: \"text\"; text: string } | { type: \"toolCall\"; name: string; args: Record<string, any> };\n\nfunction getDisplayItems(messages: Message[]): DisplayItem[] {\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"toolCall\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\nasync function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\t// Don't spawn doomed children for tasks still queued after an abort.\n\t\t\tif (signal?.aborted) throw new Error(\"Subagent was aborted\");\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(agentName: string, prompt: string): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"humain-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction getCliInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\tif (!isGenericRuntime) {\n\t\treturn { command: process.execPath, args };\n\t}\n\n\treturn { command: \"humain-terminal\", args };\n}\n\ntype OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;\n\nasync function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SubagentSingleResult[]) => SubagentDetails,\n): Promise<SubagentSingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\tstep,\n\t\t};\n\t}\n\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (agent.model) args.push(\"--model\", agent.model);\n\tif (agent.tools && agent.tools.length > 0) args.push(\"--tools\", agent.tools.join(\",\"));\n\n\tlet tmpPromptDir: string | null = null;\n\tlet tmpPromptPath: string | null = null;\n\n\tconst currentResult: SubagentSingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\tmodel: agent.model,\n\t\tstep,\n\t};\n\n\tconst emitUpdate = () => {\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(currentResult.messages) || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttmpPromptDir = tmp.dir;\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpPromptPath);\n\t\t}\n\n\t\targs.push(`Task: ${task}`);\n\t\tlet wasAborted = false;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tconst invocation = getCliInvocation(args);\n\t\t\tconst proc = spawn(invocation.command, invocation.args, {\n\t\t\t\tcwd: cwd ?? defaultCwd,\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\tenv: { ...process.env, [SUBAGENT_DEPTH_ENV]: String(currentSubagentDepth() + 1) },\n\t\t\t});\n\t\t\tlet buffer = \"\";\n\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet event: any;\n\t\t\t\ttry {\n\t\t\t\t\tevent = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message as Message;\n\t\t\t\t\tcurrentResult.messages.push(msg);\n\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage) {\n\t\t\t\t\t\t\tcurrentResult.usage.input += usage.input || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.output += usage.output || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead += usage.cacheRead || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite += usage.cacheWrite || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cost += usage.cost?.total || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = usage.totalTokens || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!currentResult.model && msg.model) currentResult.model = msg.model;\n\t\t\t\t\t\tif (msg.stopReason) currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (msg.errorMessage) currentResult.errorMessage = msg.errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tcurrentResult.messages.push(event.message as Message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tproc.stdout.on(\"data\", (data) => {\n\t\t\t\tbuffer += data.toString();\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() || \"\";\n\t\t\t\tfor (const line of lines) processLine(line);\n\t\t\t});\n\n\t\t\tproc.stderr.on(\"data\", (data) => {\n\t\t\t\tcurrentResult.stderr += data.toString();\n\t\t\t});\n\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\tresolve(code ?? 0);\n\t\t\t});\n\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\tresolve(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tconst killProc = () => {\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tproc.kill(\"SIGTERM\");\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (!proc.killed) proc.kill(\"SIGKILL\");\n\t\t\t\t\t}, 5000);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) killProc();\n\t\t\t\telse signal.addEventListener(\"abort\", killProc, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tcurrentResult.exitCode = exitCode;\n\t\tif (wasAborted) throw new Error(\"Subagent was aborted\");\n\t\treturn currentResult;\n\t} finally {\n\t\tif (tmpPromptPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpPromptPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpPromptDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpPromptDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t}\n}\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription: 'Which agent directories to use. Default: \"user\". Use \"both\" to include project-local agents.',\n\tdefault: \"user\",\n});\n\nconst SubagentParams = Type.Object({\n\tagent: Type.Optional(Type.String({ description: \"Name of the agent to invoke (for single mode)\" })),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\ttasks: Type.Optional(Type.Array(TaskItem, { description: \"Array of {agent, task} for parallel execution\" })),\n\tchain: Type.Optional(Type.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" })),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({ description: \"Prompt before running project-local agents. Default: true.\", default: true }),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process (single mode)\" })),\n});\n\nexport function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails> {\n\treturn {\n\t\tname: \"subagent\",\n\t\tlabel: \"Subagent\",\n\t\tdescription: [\n\t\t\t\"Delegate tasks to specialized subagents with isolated context.\",\n\t\t\t\"Modes: single (agent + task), parallel (tasks array), chain (sequential with {previous} placeholder).\",\n\t\t\t`Default agent scope is \"user\" (from ${path.join(getAgentDir(), \"agents\")}).`,\n\t\t\t`To enable project-local agents in ${CONFIG_DIR_NAME}/agents, set agentScope: \"both\" (or \"project\").`,\n\t\t].join(\" \"),\n\t\tpromptSnippet:\n\t\t\t\"subagent: delegate work to isolated subagents — single task, parallel batch (tasks array), or sequential chain with {previous} placeholder\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use subagent to fan out independent work in parallel (tasks array) or run multi-step pipelines (chain). Subagents run with isolated context and cannot delegate further.\",\n\t\t],\n\t\tparameters: SubagentParams,\n\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx: ExtensionContext) {\n\t\t\tconst agentScope: AgentScope = params.agentScope ?? \"user\";\n\t\t\tconst defaultCwd = ctx?.cwd ?? cwd;\n\t\t\tconst discovery = discoverAgents(defaultCwd, agentScope);\n\t\t\tconst agents = discovery.agents;\n\t\t\tconst confirmProjectAgents = params.confirmProjectAgents ?? true;\n\n\t\t\t// Every requested child must appear in details.results, even when\n\t\t\t// nothing ran: external consumers fan out per-child bookkeeping from\n\t\t\t// the tool args and reconcile it against results by index.\n\t\t\tconst requestedChildren = (): Array<{ agent: string; task?: string; step?: number }> => {\n\t\t\t\tif (params.tasks && params.tasks.length > 0)\n\t\t\t\t\treturn params.tasks.map((t) => ({ agent: t.agent, task: t.task }));\n\t\t\t\tif (params.chain && params.chain.length > 0)\n\t\t\t\t\treturn params.chain.map((s, i) => ({ agent: s.agent, task: s.task, step: i + 1 }));\n\t\t\t\tif (params.agent) return [{ agent: params.agent, task: params.task }];\n\t\t\t\treturn [];\n\t\t\t};\n\t\t\tconst stubResult = (\n\t\t\t\tchild: { agent: string; task?: string; step?: number },\n\t\t\t\terrorMessage: string,\n\t\t\t): SubagentSingleResult => ({\n\t\t\t\tagent: child.agent,\n\t\t\t\tagentSource: \"unknown\",\n\t\t\t\ttask: child.task ?? \"\",\n\t\t\t\texitCode: 1,\n\t\t\t\tmessages: [],\n\t\t\t\tstderr: \"\",\n\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\terrorMessage,\n\t\t\t\tstep: child.step,\n\t\t\t});\n\t\t\tconst stubAllChildren = (errorMessage: string): SubagentSingleResult[] =>\n\t\t\t\trequestedChildren().map((child) => stubResult(child, errorMessage));\n\n\t\t\tconst makeDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t});\n\n\t\t\tif (currentSubagentDepth() >= MAX_SUBAGENT_DEPTH) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"Nested delegation is not allowed: this process is already a subagent. Complete the task directly.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\t\t\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\t\t\tconst hasSingle = Boolean(params.agent && params.task);\n\t\t\tconst modeCount = Number(hasChain) + Number(hasTasks) + Number(hasSingle);\n\n\t\t\tif (modeCount !== 1) {\n\t\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Invalid parameters. Provide exactly one mode.\\nAvailable agents: ${available}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")(\n\t\t\t\t\t\tstubAllChildren(\"not run: invalid parameters (provide exactly one mode)\"),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ((agentScope === \"project\" || agentScope === \"both\") && confirmProjectAgents && ctx?.hasUI) {\n\t\t\t\tconst requestedAgentNames = new Set<string>();\n\t\t\t\tif (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);\n\t\t\t\tif (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);\n\t\t\t\tif (params.agent) requestedAgentNames.add(params.agent);\n\n\t\t\t\tconst projectAgentsRequested = Array.from(requestedAgentNames)\n\t\t\t\t\t.map((name) => agents.find((a) => a.name === name))\n\t\t\t\t\t.filter((a): a is AgentConfig => a?.source === \"project\");\n\n\t\t\t\tif (projectAgentsRequested.length > 0) {\n\t\t\t\t\tconst names = projectAgentsRequested.map((a) => a.name).join(\", \");\n\t\t\t\t\tconst dir = discovery.projectAgentsDir ?? \"(unknown)\";\n\t\t\t\t\tconst ok = await ctx.ui.confirm(\n\t\t\t\t\t\t\"Run project-local agents?\",\n\t\t\t\t\t\t`Agents: ${names}\\nSource: ${dir}\\n\\nProject agents are repo-controlled. Only continue for trusted repositories.`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!ok)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Canceled: project-local agents not approved.\" }],\n\t\t\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\t\t\tstubAllChildren(\"canceled: project-local agents not approved\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (params.chain && params.chain.length > 0) {\n\t\t\t\tconst results: SubagentSingleResult[] = [];\n\t\t\t\tlet previousOutput = \"\";\n\n\t\t\t\tfor (let i = 0; i < params.chain.length; i++) {\n\t\t\t\t\tconst step = params.chain[i];\n\t\t\t\t\tconst taskWithContext = step.task.replace(/\\{previous\\}/g, previousOutput);\n\n\t\t\t\t\t// Create update callback that includes all previous results\n\t\t\t\t\tconst chainUpdate: OnUpdateCallback | undefined = onUpdate\n\t\t\t\t\t\t? (partial) => {\n\t\t\t\t\t\t\t\t// Combine completed results with current streaming result\n\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\tconst allResults = [...results, currentResult];\n\t\t\t\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\t\t\t\tcontent: partial.content,\n\t\t\t\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")(allResults),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\tagents,\n\t\t\t\t\t\tstep.agent,\n\t\t\t\t\t\ttaskWithContext,\n\t\t\t\t\t\tstep.cwd,\n\t\t\t\t\t\ti + 1,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tchainUpdate,\n\t\t\t\t\t\tmakeDetails(\"chain\"),\n\t\t\t\t\t);\n\t\t\t\t\tresults.push(result);\n\n\t\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\t\tconst skipped = params.chain\n\t\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t\t.map((s, offset) =>\n\t\t\t\t\t\t\t\tstubResult(\n\t\t\t\t\t\t\t\t\t{ agent: s.agent, task: s.task, step: i + 2 + offset },\n\t\t\t\t\t\t\t\t\t`not run: chain stopped at step ${i + 1}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],\n\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")([...results, ...skipped]),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tpreviousOutput = getFinalOutput(result.messages);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(results[results.length - 1].messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"chain\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.tasks && params.tasks.length > 0) {\n\t\t\t\tif (params.tasks.length > MAX_PARALLEL_TASKS)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Too many parallel tasks (${params.tasks.length}). Max is ${MAX_PARALLEL_TASKS}.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: makeDetails(\"parallel\")(\n\t\t\t\t\t\t\tstubAllChildren(`not run: too many parallel tasks (max ${MAX_PARALLEL_TASKS})`),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\n\t\t\t\t// Track all results for streaming updates\n\t\t\t\tconst allResults: SubagentSingleResult[] = new Array(params.tasks.length);\n\n\t\t\t\t// Initialize placeholder results\n\t\t\t\tfor (let i = 0; i < params.tasks.length; i++) {\n\t\t\t\t\tallResults[i] = {\n\t\t\t\t\t\tagent: params.tasks[i].agent,\n\t\t\t\t\t\tagentSource: \"unknown\",\n\t\t\t\t\t\ttask: params.tasks[i].task,\n\t\t\t\t\t\texitCode: -1, // -1 = still running\n\t\t\t\t\t\tmessages: [],\n\t\t\t\t\t\tstderr: \"\",\n\t\t\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst emitParallelUpdate = () => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tconst running = allResults.filter((r) => r.exitCode === -1).length;\n\t\t\t\t\t\tconst done = allResults.filter((r) => r.exitCode !== -1).length;\n\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `Parallel: ${done}/${allResults.length} done, ${running} running...` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: makeDetails(\"parallel\")([...allResults]),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst results = await mapWithConcurrencyLimit(\n\t\t\t\t\tparams.tasks,\n\t\t\t\t\tMAX_CONCURRENCY,\n\t\t\t\t\tasync (t, index) => {\n\t\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\t\tagents,\n\t\t\t\t\t\t\tt.agent,\n\t\t\t\t\t\t\tt.task,\n\t\t\t\t\t\t\tt.cwd,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t// Per-task update callback\n\t\t\t\t\t\t\t(partial) => {\n\t\t\t\t\t\t\t\tif (partial.details?.results[0]) {\n\t\t\t\t\t\t\t\t\tallResults[index] = partial.details.results[0];\n\t\t\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmakeDetails(\"parallel\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tallResults[index] = result;\n\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\n\t\t\t\tconst successCount = results.filter((r) => !isFailedResult(r)).length;\n\t\t\t\tconst summaries = results.map((r) => {\n\t\t\t\t\tconst output = truncateParallelOutput(getResultOutput(r));\n\t\t\t\t\tconst status = isFailedResult(r)\n\t\t\t\t\t\t? `failed${r.stopReason && r.stopReason !== \"end\" ? ` (${r.stopReason})` : \"\"}`\n\t\t\t\t\t\t: \"completed\";\n\t\t\t\t\treturn `### [${r.agent}] ${status}\\n\\n${output}`;\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Parallel: ${successCount}/${results.length} succeeded\\n\\n${summaries.join(\"\\n\\n---\\n\\n\")}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"parallel\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.agent && params.task) {\n\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\tdefaultCwd,\n\t\t\t\t\tagents,\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tparams.task,\n\t\t\t\t\tparams.cwd,\n\t\t\t\t\tundefined,\n\t\t\t\t\tsignal,\n\t\t\t\t\tonUpdate,\n\t\t\t\t\tmakeDetails(\"single\"),\n\t\t\t\t);\n\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\tif (isError) {\n\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Agent ${result.stopReason || \"failed\"}: ${errorMsg}` }],\n\t\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(result.messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Invalid parameters. Available agents: ${available}` }],\n\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t};\n\t\t},\n\n\t\trenderCall(args, theme: Theme, _context) {\n\t\t\tconst scope: AgentScope = args.agentScope ?? \"user\";\n\t\t\tif (args.chain && args.chain.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `chain (${args.chain.length} steps)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (let i = 0; i < Math.min(args.chain.length, 3); i++) {\n\t\t\t\t\tconst step = args.chain[i];\n\t\t\t\t\t// Clean up {previous} placeholder for display\n\t\t\t\t\tconst cleanTask = step.task.replace(/\\{previous\\}/g, \"\").trim();\n\t\t\t\t\tconst preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n \" +\n\t\t\t\t\t\ttheme.fg(\"muted\", `${i + 1}.`) +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\ttheme.fg(\"accent\", step.agent) +\n\t\t\t\t\t\ttheme.fg(\"dim\", ` ${preview}`);\n\t\t\t\t}\n\t\t\t\tif (args.chain.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.chain.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tif (args.tasks && args.tasks.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `parallel (${args.tasks.length} tasks)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (const t of args.tasks.slice(0, 3)) {\n\t\t\t\t\tconst preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;\n\t\t\t\t\ttext += `\\n ${theme.fg(\"accent\", t.agent)}${theme.fg(\"dim\", ` ${preview}`)}`;\n\t\t\t\t}\n\t\t\t\tif (args.tasks.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.tasks.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tconst agentName = args.agent || \"...\";\n\t\t\tconst preview = args.task ? (args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task) : \"...\";\n\t\t\tlet text =\n\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\ttheme.fg(\"accent\", agentName) +\n\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\ttext += `\\n ${theme.fg(\"dim\", preview)}`;\n\t\t\treturn new Text(text, 0, 0);\n\t\t},\n\n\t\trenderResult(result, { expanded }, theme: Theme, _context) {\n\t\t\tconst details = result.details as SubagentDetails | undefined;\n\t\t\tif (!details || details.results.length === 0) {\n\t\t\t\tconst text = result.content[0];\n\t\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t\t}\n\n\t\t\tconst mdTheme = getMarkdownTheme();\n\n\t\t\tconst renderDisplayItems = (items: DisplayItem[], limit?: number) => {\n\t\t\t\tconst toShow = limit ? items.slice(-limit) : items;\n\t\t\t\tconst skipped = limit && items.length > limit ? items.length - limit : 0;\n\t\t\t\tlet text = \"\";\n\t\t\t\tif (skipped > 0) text += theme.fg(\"muted\", `... ${skipped} earlier items\\n`);\n\t\t\t\tfor (const item of toShow) {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\tconst preview = expanded ? item.text : item.text.split(\"\\n\").slice(0, 3).join(\"\\n\");\n\t\t\t\t\t\ttext += `${theme.fg(\"toolOutput\", preview)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `${theme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn text.trimEnd();\n\t\t\t};\n\n\t\t\tif (details.mode === \"single\" && details.results.length === 1) {\n\t\t\t\tconst r = details.results[0];\n\t\t\t\tconst isError = isFailedResult(r);\n\t\t\t\tconst icon = isError ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tlet header = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\t\tif (isError && r.stopReason) header += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\t\tcontainer.addChild(new Text(header, 0, 0));\n\t\t\t\t\tif (isError && r.errorMessage)\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"error\", `Error: ${r.errorMessage}`), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Task ───\"), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", r.task), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Output ───\"), 0, 0));\n\t\t\t\t\tif (displayItems.length === 0 && !finalOutput) {\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"(no output)\"), 0, 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\")\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", usageStr), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\tif (isError && r.stopReason) text += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\tif (isError && r.errorMessage) text += `\\n${theme.fg(\"error\", `Error: ${r.errorMessage}`)}`;\n\t\t\t\telse if (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\telse {\n\t\t\t\t\ttext += `\\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;\n\t\t\t\t\tif (displayItems.length > COLLAPSED_ITEM_COUNT) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\tif (usageStr) text += `\\n${theme.fg(\"dim\", usageStr)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst aggregateUsage = (results: SubagentSingleResult[]) => {\n\t\t\t\tconst total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\ttotal.input += r.usage.input;\n\t\t\t\t\ttotal.output += r.usage.output;\n\t\t\t\t\ttotal.cacheRead += r.usage.cacheRead;\n\t\t\t\t\ttotal.cacheWrite += r.usage.cacheWrite;\n\t\t\t\t\ttotal.cost += r.usage.cost;\n\t\t\t\t\ttotal.turns += r.usage.turns;\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t};\n\n\t\t\tif (details.mode === \"chain\") {\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode === 0).length;\n\t\t\t\tconst icon = successCount === details.results.length ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`),\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t`${theme.fg(\"muted\", `─── Step ${r.step}: `) + theme.fg(\"accent\", r.agent)} ${rIcon}`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stepUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (stepUsage) container.addChild(new Text(theme.fg(\"dim\", stepUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view\n\t\t\t\tlet text =\n\t\t\t\t\ticon +\n\t\t\t\t\t\" \" +\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`);\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", `─── Step ${r.step}: `)}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\ttext += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tif (details.mode === \"parallel\") {\n\t\t\t\tconst running = details.results.filter((r) => r.exitCode === -1).length;\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;\n\t\t\t\tconst failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;\n\t\t\t\tconst isRunning = running > 0;\n\t\t\t\tconst icon = isRunning\n\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t: failCount > 0\n\t\t\t\t\t\t? theme.fg(\"warning\", \"◐\")\n\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\tconst status = isRunning\n\t\t\t\t\t? `${successCount + failCount}/${details.results.length} done, ${running} running`\n\t\t\t\t\t: `${successCount}/${details.results.length} tasks`;\n\n\t\t\t\tif (expanded && !isRunning) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t`${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = isFailedResult(r) ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(`${theme.fg(\"muted\", \"─── \") + theme.fg(\"accent\", r.agent)} ${rIcon}`, 0, 0),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst taskUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (taskUsage) container.addChild(new Text(theme.fg(\"dim\", taskUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view (or still running)\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`;\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon =\n\t\t\t\t\t\tr.exitCode === -1\n\t\t\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t\t\t: isFailedResult(r)\n\t\t\t\t\t\t\t\t? theme.fg(\"error\", \"✗\")\n\t\t\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", \"─── \")}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0)\n\t\t\t\t\t\ttext += `\\n${theme.fg(\"muted\", r.exitCode === -1 ? \"(running...)\" : \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tif (!isRunning) {\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\t}\n\t\t\t\tif (!expanded) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst text = result.content[0];\n\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t},\n\t};\n}\n\nexport function createSubagentTool(cwd: string) {\n\treturn wrapToolDefinition(createSubagentToolDefinition(cwd));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subagent Tool - Delegate tasks to specialized agents\n *\n * Spawns a separate humain-terminal process for each subagent invocation,\n * giving it an isolated context window.\n *\n * Supports three modes:\n * - Single: { agent: \"name\", task: \"...\" }\n * - Parallel: { tasks: [{ agent: \"name\", task: \"...\" }, ...] }\n * - Chain: { chain: [{ agent: \"name\", task: \"... {previous} ...\" }, ...] }\n *\n * Uses JSON mode to capture structured output from subagents.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model } from \"@earendil-works/pi-ai\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport { shortenPath } from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst MAX_PARALLEL_TASKS = 8;\nconst MAX_CONCURRENCY = 4;\nconst COLLAPSED_ITEM_COUNT = 10;\nconst PER_TASK_OUTPUT_CAP = 50 * 1024;\n\n/** Children must not delegate further: depth 0 = top-level agent, depth >= 1 = subagent. */\nexport const SUBAGENT_DEPTH_ENV = \"HUMAIN_TERMINAL_SUBAGENT_DEPTH\";\nconst MAX_SUBAGENT_DEPTH = 1;\n\nfunction currentSubagentDepth(): number {\n\tconst raw = Number(process.env[SUBAGENT_DEPTH_ENV] ?? \"0\");\n\treturn Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;\n}\n\n// --- Agent discovery ---\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tsystemPrompt: string;\n\tsource: \"user\" | \"project\";\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n}\n\nfunction loadAgentsFromDir(dir: string, source: \"user\" | \"project\"): AgentConfig[] {\n\tconst agents: AgentConfig[] = [];\n\n\tif (!fs.existsSync(dir)) {\n\t\treturn agents;\n\t}\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn agents;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\")) continue;\n\t\tif (!entry.isFile() && !entry.isSymbolicLink()) continue;\n\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);\n\n\t\tif (!frontmatter.name || !frontmatter.description) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tools = frontmatter.tools\n\t\t\t?.split(\",\")\n\t\t\t.map((t: string) => t.trim())\n\t\t\t.filter(Boolean);\n\n\t\tagents.push({\n\t\t\tname: frontmatter.name,\n\t\t\tdescription: frontmatter.description,\n\t\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\t\tmodel: frontmatter.model,\n\t\t\tsystemPrompt: body,\n\t\t\tsource,\n\t\t\tfilePath,\n\t\t});\n\t}\n\n\treturn agents;\n}\n\nfunction isDirectory(p: string): boolean {\n\ttry {\n\t\treturn fs.statSync(p).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\tif (isDirectory(candidate)) return candidate;\n\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = scope === \"user\" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, \"project\");\n\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tif (scope === \"both\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t} else if (scope === \"user\") {\n\t\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\t} else {\n\t\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\t}\n\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\n// --- Formatting helpers ---\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\treturn `${(count / 1000000).toFixed(1)}M`;\n}\n\nfunction formatUsageStats(\n\tusage: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\tcost: number;\n\t\tcontextTokens?: number;\n\t\tturns?: number;\n\t},\n\tmodel?: string,\n): string {\n\tconst parts: string[] = [];\n\tif (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? \"s\" : \"\"}`);\n\tif (usage.input) parts.push(`↑${formatTokens(usage.input)}`);\n\tif (usage.output) parts.push(`↓${formatTokens(usage.output)}`);\n\tif (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);\n\tif (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);\n\tif (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);\n\tif (usage.contextTokens && usage.contextTokens > 0) {\n\t\tparts.push(`ctx:${formatTokens(usage.contextTokens)}`);\n\t}\n\tif (model) parts.push(model);\n\treturn parts.join(\" \");\n}\n\nfunction formatToolCall(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tthemeFg: (color: any, text: string) => string,\n): string {\n\tswitch (toolName) {\n\t\tcase \"bash\": {\n\t\t\tconst command = (args.command as string) || \"...\";\n\t\t\tconst preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;\n\t\t\treturn themeFg(\"muted\", \"$ \") + themeFg(\"toolOutput\", preview);\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst offset = args.offset as number | undefined;\n\t\t\tconst limit = args.limit as number | undefined;\n\t\t\tlet text = themeFg(\"accent\", filePath);\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tconst startLine = offset ?? 1;\n\t\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\t\ttext += themeFg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\t\t\treturn themeFg(\"muted\", \"read \") + text;\n\t\t}\n\t\tcase \"write\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst content = (args.content || \"\") as string;\n\t\t\tconst lines = content.split(\"\\n\").length;\n\t\t\tlet text = themeFg(\"muted\", \"write \") + themeFg(\"accent\", filePath);\n\t\t\tif (lines > 1) text += themeFg(\"dim\", ` (${lines} lines)`);\n\t\t\treturn text;\n\t\t}\n\t\tcase \"edit\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\treturn themeFg(\"muted\", \"edit \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"ls\": {\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"ls \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"find\": {\n\t\t\tconst pattern = (args.pattern || \"*\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"find \") + themeFg(\"accent\", pattern) + themeFg(\"dim\", ` in ${shortenPath(rawPath)}`);\n\t\t}\n\t\tcase \"grep\": {\n\t\t\tconst pattern = (args.pattern || \"\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn (\n\t\t\t\tthemeFg(\"muted\", \"grep \") +\n\t\t\t\tthemeFg(\"accent\", `/${pattern}/`) +\n\t\t\t\tthemeFg(\"dim\", ` in ${shortenPath(rawPath)}`)\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tconst argsStr = JSON.stringify(args);\n\t\t\tconst preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;\n\t\t\treturn themeFg(\"accent\", toolName) + themeFg(\"dim\", ` ${preview}`);\n\t\t}\n\t}\n}\n\nexport interface SubagentUsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nexport interface SubagentSingleResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\tusage: SubagentUsageStats;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n}\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentSingleResult[];\n}\n\nfunction getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") return part.text;\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction isFailedResult(result: SubagentSingleResult): boolean {\n\treturn result.exitCode !== 0 || result.stopReason === \"error\" || result.stopReason === \"aborted\";\n}\n\nfunction getResultOutput(result: SubagentSingleResult): string {\n\tif (isFailedResult(result)) {\n\t\treturn result.errorMessage || result.stderr || getFinalOutput(result.messages) || \"(no output)\";\n\t}\n\treturn getFinalOutput(result.messages) || \"(no output)\";\n}\n\nfunction truncateParallelOutput(output: string): string {\n\tconst byteLength = Buffer.byteLength(output, \"utf8\");\n\tif (byteLength <= PER_TASK_OUTPUT_CAP) return output;\n\n\tlet truncated = output.slice(0, PER_TASK_OUTPUT_CAP);\n\twhile (Buffer.byteLength(truncated, \"utf8\") > PER_TASK_OUTPUT_CAP) {\n\t\ttruncated = truncated.slice(0, -1);\n\t}\n\treturn `${truncated}\\n\\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, \"utf8\")} bytes omitted. Full output preserved in tool details.]`;\n}\n\ntype DisplayItem = { type: \"text\"; text: string } | { type: \"toolCall\"; name: string; args: Record<string, any> };\n\nfunction getDisplayItems(messages: Message[]): DisplayItem[] {\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"toolCall\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\nasync function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\t// Don't spawn doomed children for tasks still queued after an abort.\n\t\t\tif (signal?.aborted) throw new Error(\"Subagent was aborted\");\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(agentName: string, prompt: string): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"humain-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction getCliInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\tif (!isGenericRuntime) {\n\t\treturn { command: process.execPath, args };\n\t}\n\n\treturn { command: \"humain-terminal\", args };\n}\n\ntype OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;\n\nasync function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tparentModel: Model<Api>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SubagentSingleResult[]) => SubagentDetails,\n): Promise<SubagentSingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\tstep,\n\t\t};\n\t}\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\targs.push(\"--provider\", parentModel.provider, \"--model\", parentModel.id);\n\tif (agent.tools && agent.tools.length > 0) args.push(\"--tools\", agent.tools.join(\",\"));\n\n\tlet tmpPromptDir: string | null = null;\n\tlet tmpPromptPath: string | null = null;\n\n\tconst currentResult: SubagentSingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\tmodel: `${parentModel.provider}/${parentModel.id}`,\n\t\tstep,\n\t};\n\n\tconst emitUpdate = () => {\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(currentResult.messages) || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttmpPromptDir = tmp.dir;\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpPromptPath);\n\t\t}\n\n\t\targs.push(`Task: ${task}`);\n\t\tlet wasAborted = false;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tconst invocation = getCliInvocation(args);\n\t\t\tconst proc = spawn(invocation.command, invocation.args, {\n\t\t\t\tcwd: cwd ?? defaultCwd,\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\tenv: { ...process.env, [SUBAGENT_DEPTH_ENV]: String(currentSubagentDepth() + 1) },\n\t\t\t});\n\t\t\tlet buffer = \"\";\n\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet event: any;\n\t\t\t\ttry {\n\t\t\t\t\tevent = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message as Message;\n\t\t\t\t\tcurrentResult.messages.push(msg);\n\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage) {\n\t\t\t\t\t\t\tcurrentResult.usage.input += usage.input || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.output += usage.output || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead += usage.cacheRead || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite += usage.cacheWrite || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cost += usage.cost?.total || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = usage.totalTokens || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (msg.model) currentResult.model = msg.responseModel ?? msg.model;\n\t\t\t\t\t\tif (msg.stopReason) currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (msg.errorMessage) currentResult.errorMessage = msg.errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tcurrentResult.messages.push(event.message as Message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tproc.stdout.on(\"data\", (data) => {\n\t\t\t\tbuffer += data.toString();\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() || \"\";\n\t\t\t\tfor (const line of lines) processLine(line);\n\t\t\t});\n\n\t\t\tproc.stderr.on(\"data\", (data) => {\n\t\t\t\tcurrentResult.stderr += data.toString();\n\t\t\t});\n\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\tresolve(code ?? 0);\n\t\t\t});\n\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\tresolve(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tconst killProc = () => {\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tproc.kill(\"SIGTERM\");\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (!proc.killed) proc.kill(\"SIGKILL\");\n\t\t\t\t\t}, 5000);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) killProc();\n\t\t\t\telse signal.addEventListener(\"abort\", killProc, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tcurrentResult.exitCode = exitCode;\n\t\tif (wasAborted) throw new Error(\"Subagent was aborted\");\n\t\treturn currentResult;\n\t} finally {\n\t\tif (tmpPromptPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpPromptPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpPromptDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpPromptDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t}\n}\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tmodel: Type.Optional(Type.String({ description: \"Ignored: children inherit the parent provider/model.\" })),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tmodel: Type.Optional(Type.String({ description: \"Ignored: children inherit the parent provider/model.\" })),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription: 'Which agent directories to use. Default: \"user\". Use \"both\" to include project-local agents.',\n\tdefault: \"user\",\n});\n\nconst SubagentParams = Type.Object({\n\tagent: Type.Optional(Type.String({ description: \"Name of the agent to invoke (for single mode)\" })),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\tmodel: Type.Optional(Type.String({ description: \"Ignored: children inherit the parent provider/model.\" })),\n\ttasks: Type.Optional(Type.Array(TaskItem, { description: \"Array of {agent, task} for parallel execution\" })),\n\tchain: Type.Optional(Type.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" })),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({ description: \"Prompt before running project-local agents. Default: true.\", default: true }),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process (single mode)\" })),\n});\n\nexport function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails> {\n\treturn {\n\t\tname: \"subagent\",\n\t\tlabel: \"Subagent\",\n\t\tdescription: [\n\t\t\t\"Delegate tasks to specialized subagents with isolated context.\",\n\t\t\t\"Modes: single (agent + task), parallel (tasks array), chain (sequential with {previous} placeholder).\",\n\t\t\t`Default agent scope is \"user\" (from ${path.join(getAgentDir(), \"agents\")}).`,\n\t\t\t`To enable project-local agents in ${CONFIG_DIR_NAME}/agents, set agentScope: \"both\" (or \"project\").`,\n\t\t].join(\" \"),\n\t\tpromptSnippet:\n\t\t\t\"subagent: delegate work to isolated subagents — single task, parallel batch (tasks array), or sequential chain with {previous} placeholder\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use subagent to fan out independent work in parallel (tasks array) or run multi-step pipelines (chain). Subagents run with isolated context and cannot delegate further.\",\n\t\t],\n\t\tparameters: SubagentParams,\n\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx: ExtensionContext) {\n\t\t\tconst agentScope: AgentScope = params.agentScope ?? \"user\";\n\t\t\tconst defaultCwd = ctx?.cwd ?? cwd;\n\t\t\tconst parentModel = ctx?.model;\n\t\t\tconst discovery = discoverAgents(defaultCwd, agentScope);\n\t\t\tconst agents = discovery.agents;\n\t\t\tconst confirmProjectAgents = params.confirmProjectAgents ?? true;\n\n\t\t\t// Every requested child must appear in details.results, even when\n\t\t\t// nothing ran: external consumers fan out per-child bookkeeping from\n\t\t\t// the tool args and reconcile it against results by index.\n\t\t\tconst requestedChildren = (): Array<{ agent: string; task?: string; step?: number }> => {\n\t\t\t\tif (params.tasks && params.tasks.length > 0)\n\t\t\t\t\treturn params.tasks.map((t) => ({ agent: t.agent, task: t.task }));\n\t\t\t\tif (params.chain && params.chain.length > 0)\n\t\t\t\t\treturn params.chain.map((s, i) => ({ agent: s.agent, task: s.task, step: i + 1 }));\n\t\t\t\tif (params.agent) return [{ agent: params.agent, task: params.task }];\n\t\t\t\treturn [];\n\t\t\t};\n\t\t\tconst stubResult = (\n\t\t\t\tchild: { agent: string; task?: string; step?: number },\n\t\t\t\terrorMessage: string,\n\t\t\t): SubagentSingleResult => ({\n\t\t\t\tagent: child.agent,\n\t\t\t\tagentSource: \"unknown\",\n\t\t\t\ttask: child.task ?? \"\",\n\t\t\t\texitCode: 1,\n\t\t\t\tmessages: [],\n\t\t\t\tstderr: \"\",\n\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\terrorMessage,\n\t\t\t\tstep: child.step,\n\t\t\t});\n\t\t\tconst stubAllChildren = (errorMessage: string): SubagentSingleResult[] =>\n\t\t\t\trequestedChildren().map((child) => stubResult(child, errorMessage));\n\n\t\t\tconst makeDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t});\n\n\t\t\tif (currentSubagentDepth() >= MAX_SUBAGENT_DEPTH) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: \"Nested delegation is not allowed: this process is already a subagent. Complete the task directly.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\t\t\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\t\t\tconst hasSingle = Boolean(params.agent && params.task);\n\t\t\tconst modeCount = Number(hasChain) + Number(hasTasks) + Number(hasSingle);\n\n\t\t\tif (modeCount !== 1) {\n\t\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Invalid parameters. Provide exactly one mode.\\nAvailable agents: ${available}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")(\n\t\t\t\t\t\tstubAllChildren(\"not run: invalid parameters (provide exactly one mode)\"),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!parentModel?.provider || !parentModel.id) {\n\t\t\t\tconst errorMessage = \"Cannot run subagents without a parent provider and model.\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\tstubAllChildren(errorMessage),\n\t\t\t\t\t),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ((agentScope === \"project\" || agentScope === \"both\") && confirmProjectAgents && ctx?.hasUI) {\n\t\t\t\tconst requestedAgentNames = new Set<string>();\n\t\t\t\tif (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);\n\t\t\t\tif (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);\n\t\t\t\tif (params.agent) requestedAgentNames.add(params.agent);\n\n\t\t\t\tconst projectAgentsRequested = Array.from(requestedAgentNames)\n\t\t\t\t\t.map((name) => agents.find((a) => a.name === name))\n\t\t\t\t\t.filter((a): a is AgentConfig => a?.source === \"project\");\n\n\t\t\t\tif (projectAgentsRequested.length > 0) {\n\t\t\t\t\tconst names = projectAgentsRequested.map((a) => a.name).join(\", \");\n\t\t\t\t\tconst dir = discovery.projectAgentsDir ?? \"(unknown)\";\n\t\t\t\t\tconst ok = await ctx.ui.confirm(\n\t\t\t\t\t\t\"Run project-local agents?\",\n\t\t\t\t\t\t`Agents: ${names}\\nSource: ${dir}\\n\\nProject agents are repo-controlled. Only continue for trusted repositories.`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!ok)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Canceled: project-local agents not approved.\" }],\n\t\t\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\t\t\tstubAllChildren(\"canceled: project-local agents not approved\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (params.chain && params.chain.length > 0) {\n\t\t\t\tconst results: SubagentSingleResult[] = [];\n\t\t\t\tlet previousOutput = \"\";\n\n\t\t\t\tfor (let i = 0; i < params.chain.length; i++) {\n\t\t\t\t\tconst step = params.chain[i];\n\t\t\t\t\tconst taskWithContext = step.task.replace(/\\{previous\\}/g, previousOutput);\n\n\t\t\t\t\t// Create update callback that includes all previous results\n\t\t\t\t\tconst chainUpdate: OnUpdateCallback | undefined = onUpdate\n\t\t\t\t\t\t? (partial) => {\n\t\t\t\t\t\t\t\t// Combine completed results with current streaming result\n\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\tconst allResults = [...results, currentResult];\n\t\t\t\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\t\t\t\tcontent: partial.content,\n\t\t\t\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")(allResults),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\tagents,\n\t\t\t\t\t\tstep.agent,\n\t\t\t\t\t\ttaskWithContext,\n\t\t\t\t\t\tstep.cwd,\n\t\t\t\t\t\ti + 1,\n\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tchainUpdate,\n\t\t\t\t\t\tmakeDetails(\"chain\"),\n\t\t\t\t\t);\n\t\t\t\t\tresults.push(result);\n\n\t\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\t\tconst skipped = params.chain\n\t\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t\t.map((s, offset) =>\n\t\t\t\t\t\t\t\tstubResult(\n\t\t\t\t\t\t\t\t\t{ agent: s.agent, task: s.task, step: i + 2 + offset },\n\t\t\t\t\t\t\t\t\t`not run: chain stopped at step ${i + 1}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],\n\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")([...results, ...skipped]),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tpreviousOutput = getFinalOutput(result.messages);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(results[results.length - 1].messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"chain\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.tasks && params.tasks.length > 0) {\n\t\t\t\tif (params.tasks.length > MAX_PARALLEL_TASKS)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Too many parallel tasks (${params.tasks.length}). Max is ${MAX_PARALLEL_TASKS}.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: makeDetails(\"parallel\")(\n\t\t\t\t\t\t\tstubAllChildren(`not run: too many parallel tasks (max ${MAX_PARALLEL_TASKS})`),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\n\t\t\t\t// Track all results for streaming updates\n\t\t\t\tconst allResults: SubagentSingleResult[] = new Array(params.tasks.length);\n\n\t\t\t\t// Initialize placeholder results\n\t\t\t\tfor (let i = 0; i < params.tasks.length; i++) {\n\t\t\t\t\tallResults[i] = {\n\t\t\t\t\t\tagent: params.tasks[i].agent,\n\t\t\t\t\t\tagentSource: \"unknown\",\n\t\t\t\t\t\ttask: params.tasks[i].task,\n\t\t\t\t\t\texitCode: -1, // -1 = still running\n\t\t\t\t\t\tmessages: [],\n\t\t\t\t\t\tstderr: \"\",\n\t\t\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst emitParallelUpdate = () => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tconst running = allResults.filter((r) => r.exitCode === -1).length;\n\t\t\t\t\t\tconst done = allResults.filter((r) => r.exitCode !== -1).length;\n\t\t\t\t\t\tonUpdate({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `Parallel: ${done}/${allResults.length} done, ${running} running...` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: makeDetails(\"parallel\")([...allResults]),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst results = await mapWithConcurrencyLimit(\n\t\t\t\t\tparams.tasks,\n\t\t\t\t\tMAX_CONCURRENCY,\n\t\t\t\t\tasync (t, index) => {\n\t\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\t\tagents,\n\t\t\t\t\t\t\tt.agent,\n\t\t\t\t\t\t\tt.task,\n\t\t\t\t\t\t\tt.cwd,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t// Per-task update callback\n\t\t\t\t\t\t\t(partial) => {\n\t\t\t\t\t\t\t\tif (partial.details?.results[0]) {\n\t\t\t\t\t\t\t\t\tallResults[index] = partial.details.results[0];\n\t\t\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmakeDetails(\"parallel\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tallResults[index] = result;\n\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\n\t\t\t\tconst successCount = results.filter((r) => !isFailedResult(r)).length;\n\t\t\t\tconst summaries = results.map((r) => {\n\t\t\t\t\tconst output = truncateParallelOutput(getResultOutput(r));\n\t\t\t\t\tconst status = isFailedResult(r)\n\t\t\t\t\t\t? `failed${r.stopReason && r.stopReason !== \"end\" ? ` (${r.stopReason})` : \"\"}`\n\t\t\t\t\t\t: \"completed\";\n\t\t\t\t\treturn `### [${r.agent}] ${status}\\n\\n${output}`;\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Parallel: ${successCount}/${results.length} succeeded\\n\\n${summaries.join(\"\\n\\n---\\n\\n\")}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"parallel\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.agent && params.task) {\n\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\tdefaultCwd,\n\t\t\t\t\tagents,\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tparams.task,\n\t\t\t\t\tparams.cwd,\n\t\t\t\t\tundefined,\n\t\t\t\t\tparentModel,\n\t\t\t\t\tsignal,\n\t\t\t\t\tonUpdate,\n\t\t\t\t\tmakeDetails(\"single\"),\n\t\t\t\t);\n\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\tif (isError) {\n\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Agent ${result.stopReason || \"failed\"}: ${errorMsg}` }],\n\t\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(result.messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Invalid parameters. Available agents: ${available}` }],\n\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t};\n\t\t},\n\n\t\trenderCall(args, theme: Theme, _context) {\n\t\t\tconst scope: AgentScope = args.agentScope ?? \"user\";\n\t\t\tif (args.chain && args.chain.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `chain (${args.chain.length} steps)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (let i = 0; i < Math.min(args.chain.length, 3); i++) {\n\t\t\t\t\tconst step = args.chain[i];\n\t\t\t\t\t// Clean up {previous} placeholder for display\n\t\t\t\t\tconst cleanTask = step.task.replace(/\\{previous\\}/g, \"\").trim();\n\t\t\t\t\tconst preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n \" +\n\t\t\t\t\t\ttheme.fg(\"muted\", `${i + 1}.`) +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\ttheme.fg(\"accent\", step.agent) +\n\t\t\t\t\t\ttheme.fg(\"dim\", ` ${preview}`);\n\t\t\t\t}\n\t\t\t\tif (args.chain.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.chain.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tif (args.tasks && args.tasks.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `parallel (${args.tasks.length} tasks)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (const t of args.tasks.slice(0, 3)) {\n\t\t\t\t\tconst preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;\n\t\t\t\t\ttext += `\\n ${theme.fg(\"accent\", t.agent)}${theme.fg(\"dim\", ` ${preview}`)}`;\n\t\t\t\t}\n\t\t\t\tif (args.tasks.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.tasks.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tconst agentName = args.agent || \"...\";\n\t\t\tconst preview = args.task ? (args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task) : \"...\";\n\t\t\tlet text =\n\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\ttheme.fg(\"accent\", agentName) +\n\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\ttext += `\\n ${theme.fg(\"dim\", preview)}`;\n\t\t\treturn new Text(text, 0, 0);\n\t\t},\n\n\t\trenderResult(result, { expanded }, theme: Theme, _context) {\n\t\t\tconst details = result.details as SubagentDetails | undefined;\n\t\t\tif (!details || details.results.length === 0) {\n\t\t\t\tconst text = result.content[0];\n\t\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t\t}\n\n\t\t\tconst mdTheme = getMarkdownTheme();\n\n\t\t\tconst renderDisplayItems = (items: DisplayItem[], limit?: number) => {\n\t\t\t\tconst toShow = limit ? items.slice(-limit) : items;\n\t\t\t\tconst skipped = limit && items.length > limit ? items.length - limit : 0;\n\t\t\t\tlet text = \"\";\n\t\t\t\tif (skipped > 0) text += theme.fg(\"muted\", `... ${skipped} earlier items\\n`);\n\t\t\t\tfor (const item of toShow) {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\tconst preview = expanded ? item.text : item.text.split(\"\\n\").slice(0, 3).join(\"\\n\");\n\t\t\t\t\t\ttext += `${theme.fg(\"toolOutput\", preview)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `${theme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn text.trimEnd();\n\t\t\t};\n\n\t\t\tif (details.mode === \"single\" && details.results.length === 1) {\n\t\t\t\tconst r = details.results[0];\n\t\t\t\tconst isError = isFailedResult(r);\n\t\t\t\tconst icon = isError ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tlet header = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\t\tif (isError && r.stopReason) header += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\t\tcontainer.addChild(new Text(header, 0, 0));\n\t\t\t\t\tif (isError && r.errorMessage)\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"error\", `Error: ${r.errorMessage}`), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Task ───\"), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", r.task), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Output ───\"), 0, 0));\n\t\t\t\t\tif (displayItems.length === 0 && !finalOutput) {\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"(no output)\"), 0, 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\")\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", usageStr), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\tif (isError && r.stopReason) text += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\tif (isError && r.errorMessage) text += `\\n${theme.fg(\"error\", `Error: ${r.errorMessage}`)}`;\n\t\t\t\telse if (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\telse {\n\t\t\t\t\ttext += `\\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;\n\t\t\t\t\tif (displayItems.length > COLLAPSED_ITEM_COUNT) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\tif (usageStr) text += `\\n${theme.fg(\"dim\", usageStr)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst aggregateUsage = (results: SubagentSingleResult[]) => {\n\t\t\t\tconst total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\ttotal.input += r.usage.input;\n\t\t\t\t\ttotal.output += r.usage.output;\n\t\t\t\t\ttotal.cacheRead += r.usage.cacheRead;\n\t\t\t\t\ttotal.cacheWrite += r.usage.cacheWrite;\n\t\t\t\t\ttotal.cost += r.usage.cost;\n\t\t\t\t\ttotal.turns += r.usage.turns;\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t};\n\n\t\t\tif (details.mode === \"chain\") {\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode === 0).length;\n\t\t\t\tconst icon = successCount === details.results.length ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`),\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t`${theme.fg(\"muted\", `─── Step ${r.step}: `) + theme.fg(\"accent\", r.agent)} ${rIcon}`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stepUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (stepUsage) container.addChild(new Text(theme.fg(\"dim\", stepUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view\n\t\t\t\tlet text =\n\t\t\t\t\ticon +\n\t\t\t\t\t\" \" +\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`);\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", `─── Step ${r.step}: `)}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\ttext += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tif (details.mode === \"parallel\") {\n\t\t\t\tconst running = details.results.filter((r) => r.exitCode === -1).length;\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;\n\t\t\t\tconst failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;\n\t\t\t\tconst isRunning = running > 0;\n\t\t\t\tconst icon = isRunning\n\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t: failCount > 0\n\t\t\t\t\t\t? theme.fg(\"warning\", \"◐\")\n\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\tconst status = isRunning\n\t\t\t\t\t? `${successCount + failCount}/${details.results.length} done, ${running} running`\n\t\t\t\t\t: `${successCount}/${details.results.length} tasks`;\n\n\t\t\t\tif (expanded && !isRunning) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t`${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = isFailedResult(r) ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\t\tconst finalOutput = getFinalOutput(r.messages);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(`${theme.fg(\"muted\", \"─── \") + theme.fg(\"accent\", r.agent)} ${rIcon}`, 0, 0),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst taskUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (taskUsage) container.addChild(new Text(theme.fg(\"dim\", taskUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view (or still running)\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`;\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon =\n\t\t\t\t\t\tr.exitCode === -1\n\t\t\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t\t\t: isFailedResult(r)\n\t\t\t\t\t\t\t\t? theme.fg(\"error\", \"✗\")\n\t\t\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\t\tconst displayItems = getDisplayItems(r.messages);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", \"─── \")}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0)\n\t\t\t\t\t\ttext += `\\n${theme.fg(\"muted\", r.exitCode === -1 ? \"(running...)\" : \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tif (!isRunning) {\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\t}\n\t\t\t\tif (!expanded) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst text = result.content[0];\n\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t},\n\t};\n}\n\nexport function createSubagentTool(cwd: string) {\n\treturn wrapToolDefinition(createSubagentToolDefinition(cwd));\n}\n"]}
|
|
@@ -367,8 +367,9 @@ async function readWindowsEncryptionKey(config, home) {
|
|
|
367
367
|
}
|
|
368
368
|
function unprotectWindowsData(protectedData) {
|
|
369
369
|
return new Promise((resolve) => {
|
|
370
|
-
const script = "
|
|
371
|
-
|
|
370
|
+
const script = "Add-Type -AssemblyName System.Security;$data=[Convert]::FromBase64String($env:PIWA_PROTECTED);$clear=[System.Security.Cryptography.ProtectedData]::Unprotect($data,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser);[Console]::Write([Convert]::ToBase64String($clear))";
|
|
371
|
+
const encoded = Buffer.from(script, "utf16le").toString("base64");
|
|
372
|
+
execFile("powershell.exe", ["-NoProfile", "-NonInteractive", "-EncodedCommand", encoded], { timeout: 5000, maxBuffer: 1024 * 1024, env: { ...process.env, PIWA_PROTECTED: protectedData.toString("base64") } }, (err, stdout) => {
|
|
372
373
|
if (err) {
|
|
373
374
|
resolve(null);
|
|
374
375
|
return;
|
|
@@ -521,10 +522,10 @@ async function queryCookieRows(dbPath, hosts, names, filterExpired) {
|
|
|
521
522
|
if (columns.status === "failure")
|
|
522
523
|
return columns;
|
|
523
524
|
const pathExpr = columns.columns.has("path") ? "path" : "'/' AS path";
|
|
524
|
-
const expiresExpr = columns.columns.has("expires_utc") ?
|
|
525
|
-
const expiryFilter = filterExpired && columns.columns.has("expires_utc") ? ` AND (
|
|
525
|
+
const expiresExpr = columns.columns.has("expires_utc") ? chromeExpiryMillisExpr() : "0";
|
|
526
|
+
const expiryFilter = filterExpired && columns.columns.has("expires_utc") ? ` AND (${expiresExpr} = 0 OR ${expiresExpr} > ${chromeExpiryNowMillis()})` : "";
|
|
526
527
|
const partitionFilter = filterExpired ? unpartitionedCookieFilter(columns.columns) : "";
|
|
527
|
-
return runSqliteQuery(dbPath, `SELECT name, value, host_key, ${pathExpr}, ${expiresExpr}, hex(encrypted_value) AS encrypted_value_hex FROM cookies WHERE ${buildCookieWhere(hosts, names ?? undefined)}${expiryFilter}${partitionFilter} ORDER BY length(path) DESC,
|
|
528
|
+
return runSqliteQuery(dbPath, `SELECT name, value, host_key, ${pathExpr}, ${expiresExpr} AS expires_utc, hex(encrypted_value) AS encrypted_value_hex FROM cookies WHERE ${buildCookieWhere(hosts, names ?? undefined)}${expiryFilter}${partitionFilter} ORDER BY length(path) DESC, ${expiresExpr} ASC`);
|
|
528
529
|
}
|
|
529
530
|
async function readCookieColumns(dbPath) {
|
|
530
531
|
const result = await runSqliteQuery(dbPath, "PRAGMA table_info(cookies)");
|
|
@@ -532,8 +533,11 @@ async function readCookieColumns(dbPath) {
|
|
|
532
533
|
return result;
|
|
533
534
|
return { status: "success", columns: new Set(result.rows.map(row => typeof row.name === "string" ? row.name : "")) };
|
|
534
535
|
}
|
|
535
|
-
function
|
|
536
|
-
return (
|
|
536
|
+
function chromeExpiryMillisExpr() {
|
|
537
|
+
return "CASE WHEN expires_utc = 0 THEN 0 ELSE CAST(expires_utc / 1000 AS INTEGER) + CASE WHEN expires_utc % 1000 = 0 THEN 0 ELSE 1 END END";
|
|
538
|
+
}
|
|
539
|
+
function chromeExpiryNowMillis() {
|
|
540
|
+
return Date.now() + 11644473600000;
|
|
537
541
|
}
|
|
538
542
|
function unpartitionedCookieFilter(columns) {
|
|
539
543
|
const clauses = [];
|