{"version":3,"file":"delegation-adapters.d.ts","sourceRoot":"","sources":["../../../src/slash/delegation-adapters.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tSubagentDelegationRequest,\n\tSubagentDelegationResponse,\n\tSubagentDelegationStatus,\n\tSubagentDelegationThinking,\n\tSubagentDelegationUpdate,\n\tSubagentDelegationValue,\n} from \"../api/delegation.ts\";\nimport type {\n\tAcceptanceInput,\n\tAgentContract,\n\tEffectsProjection,\n\tExecutionProjection,\n\tJsonSchemaObject,\n\tReviewProjection,\n\tToolBudgetConfig,\n\tTurnBudgetConfig,\n\tUsage,\n} from \"../shared/types.ts\";\nimport { cloneJsonWithinByteLimit } from \"./delegation-json.ts\";\n\nexport interface PromptTemplateDelegationRequest {\n\trequestId: string;\n\tagent: string;\n\ttask: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel: string;\n\tcwd: string;\n}\n\nexport interface PromptTemplateDelegationResponse extends PromptTemplateDelegationRequest {\n\tmessages: unknown[];\n\tcontentText?: string;\n\tisError: boolean;\n\terrorText?: string;\n}\n\ninterface PromptTemplateDelegationTaskProgress {\n\tindex?: number;\n\tagent: string;\n\tstatus?: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n}\n\nexport interface PromptTemplateDelegationUpdate {\n\trequestId: string;\n\trunId?: string;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\trecentOutput?: string;\n\trecentOutputLines?: string[];\n\trecentTools?: Array<{ tool: string; args: string }>;\n\tmodel?: string;\n\ttoolCount?: number;\n\tdurationMs?: number;\n\ttokens?: number;\n\ttaskProgress?: PromptTemplateDelegationTaskProgress[];\n}\n\ninterface DelegationAcceptanceSnapshot {\n\tstatus: string;\n\tevidenceStatus?: string;\n\texplicit?: boolean;\n}\n\nexport interface PromptTemplateBridgeResult {\n\tisError?: boolean;\n\tcontent?: unknown;\n\tdetails?: {\n\t\tmode?: \"single\" | \"parallel\" | \"chain\" | \"workflow\" | \"management\";\n\t\trunId?: string;\n\t\ttimedOut?: boolean;\n\t\tstopped?: boolean;\n\t\tresults?: Array<{\n\t\t\tagent?: string;\n\t\t\tmessages?: unknown[];\n\t\t\tfinalOutput?: string;\n\t\t\ttoolCalls?: Array<{ text?: string; expandedText?: string }>;\n\t\t\texitCode?: number;\n\t\t\terror?: string;\n\t\t\tmodel?: string;\n\t\t\tthinking?: string;\n\t\t\tstructuredOutput?: unknown;\n\t\t\tinterrupted?: boolean;\n\t\t\ttimedOut?: boolean;\n\t\t\tstopped?: boolean;\n\t\t\tturnBudgetExceeded?: boolean;\n\t\t\ttoolBudgetBlocked?: boolean;\n\t\t\tstructuredOutputFailed?: boolean;\n\t\t\tsavedOutputPath?: string;\n\t\t\tsessionFile?: string;\n\t\t\tagentContract?: AgentContract;\n\t\t\texecution?: ExecutionProjection;\n\t\t\tacceptance?: DelegationAcceptanceSnapshot;\n\t\t\treview?: ReviewProjection;\n\t\t\teffects?: EffectsProjection;\n\t\t\tusage?: Usage;\n\t\t\tprogressSummary?: { toolCount?: number; durationMs?: number; tokens?: number };\n\t\t\tskillsWarning?: string;\n\t\t\toutputSaveError?: string;\n\t\t\ttranscriptError?: string;\n\t\t}>;\n\t\tprogress?: Array<{\n\t\t\tindex?: number;\n\t\t\tagent?: string;\n\t\t\tstatus?: string;\n\t\t\tcurrentTool?: string;\n\t\t\tcurrentToolArgs?: string;\n\t\t\trecentOutput?: string[];\n\t\t\trecentTools?: Array<{ tool?: string; args?: string }>;\n\t\t\ttoolCount?: number;\n\t\t\tdurationMs?: number;\n\t\t\ttokens?: number;\n\t\t}>;\n\t};\n}\n\nexport interface DelegatedSubagentExecutionParams {\n\tagent?: string;\n\ttask?: string;\n\tcontext: \"fresh\" | \"fork\";\n\tmodel?: string;\n\tcwd: string;\n\ttimeoutMs?: number;\n\tturnBudget?: TurnBudgetConfig;\n\t/** Internal-only strict turn-boundary enforcement for structured foreground delegation. */\n\tenforceHardTurnLimit?: boolean;\n\ttoolBudget?: ToolBudgetConfig;\n\tskill?: string | string[] | boolean;\n\toutput?: string | boolean;\n\toutputMode?: \"inline\" | \"file-only\";\n\toutputSchema?: JsonSchemaObject;\n\tagentContract?: AgentContract;\n\tacceptance?: AcceptanceInput;\n\tartifacts?: boolean;\n\t/** Internal-only thinking override accepted by executeDelegated. */\n\tdelegatedThinkingOverride?: SubagentDelegationThinking;\n\t/** Internal-only capability accepted and stripped by executeDelegated. */\n\tdelegatedAllowZeroToolBudget?: true;\n\tasync: false;\n\tforegroundOnly: true;\n\tclarify: false;\n}\n\nexport function parsePromptTemplateRequest(data: unknown): PromptTemplateDelegationRequest | undefined {\n\tif (!data || typeof data !== \"object\") return undefined;\n\tconst value = data as Partial<PromptTemplateDelegationRequest> & { tasks?: unknown; worktree?: unknown };\n\tif (value.tasks !== undefined || value.worktree !== undefined) return undefined;\n\tif (typeof value.requestId !== \"string\" || !value.requestId) return undefined;\n\tif (typeof value.agent !== \"string\" || !value.agent) return undefined;\n\tif (typeof value.task !== \"string\" || !value.task) return undefined;\n\tif (typeof value.model !== \"string\" || !value.model) return undefined;\n\tif (typeof value.cwd !== \"string\" || !value.cwd) return undefined;\n\tif (value.context !== \"fresh\" && value.context !== \"fork\") return undefined;\n\treturn {\n\t\trequestId: value.requestId,\n\t\tagent: value.agent,\n\t\ttask: value.task,\n\t\tcontext: value.context,\n\t\tmodel: value.model,\n\t\tcwd: value.cwd,\n\t};\n}\n\nfunction firstTextContent(content: unknown): string | undefined {\n\tif (!Array.isArray(content)) return undefined;\n\tfor (const part of content) {\n\t\tif (!part || typeof part !== \"object\") continue;\n\t\tif ((part as { type?: string }).type !== \"text\") continue;\n\t\tconst text = (part as { text?: unknown }).text;\n\t\tif (typeof text === \"string\" && text.trim()) return text.trim();\n\t}\n\treturn undefined;\n}\n\nfunction filterRecentOutput(lines: string[] | undefined): string[] | undefined {\n\tif (!lines || lines.length === 0) return undefined;\n\tconst filtered = lines.filter((line) => typeof line === \"string\" && line.trim() && line.trim() !== \"(running...)\");\n\tif (filtered.length === 0) return undefined;\n\treturn filtered;\n}\n\nfunction sanitizeRecentTools(\n\ttools: Array<{ tool?: string; args?: string }> | undefined,\n): Array<{ tool: string; args: string }> | undefined {\n\tif (!tools || tools.length === 0) return undefined;\n\tconst sanitized = tools.flatMap((entry) => {\n\t\tif (typeof entry.tool !== \"string\" || entry.tool.trim().length === 0) return [];\n\t\treturn [\n\t\t\t{\n\t\t\t\ttool: entry.tool,\n\t\t\t\targs: typeof entry.args === \"string\" ? entry.args : String(entry.args ?? \"\"),\n\t\t\t},\n\t\t];\n\t});\n\treturn sanitized.length > 0 ? sanitized : undefined;\n}\n\nfunction resolveProgressModel(\n\tupdate: PromptTemplateBridgeResult,\n\tentry: { index?: number; agent?: string },\n): string | undefined {\n\tconst results = update.details?.results;\n\tif (!results || results.length === 0) return undefined;\n\tif (typeof entry.index === \"number\" && entry.index >= 0) {\n\t\tconst byIndex = results[entry.index];\n\t\tif (typeof byIndex?.model === \"string\") return byIndex.model;\n\t}\n\tif (entry.agent) {\n\t\tconst byAgent = results.find((result) => result.agent === entry.agent && typeof result.model === \"string\");\n\t\tif (byAgent?.model) return byAgent.model;\n\t}\n\tconst firstWithModel = results.find((result) => typeof result.model === \"string\");\n\treturn firstWithModel?.model;\n}\n\nfunction toolCallNameFromSummary(summary: { text?: string; expandedText?: string }): string | undefined {\n\tconst text =\n\t\ttypeof summary.expandedText === \"string\" && summary.expandedText.trim().length > 0\n\t\t\t? summary.expandedText.trim()\n\t\t\t: typeof summary.text === \"string\"\n\t\t\t\t? summary.text.trim()\n\t\t\t\t: \"\";\n\tif (!text) return undefined;\n\tif (text.startsWith(\"$ \")) return \"bash\";\n\treturn text.match(/^[A-Za-z_][\\w.-]*/)?.[0];\n}\n\nfunction buildDelegationMessages(\n\tresult: { messages?: unknown[]; finalOutput?: string; toolCalls?: Array<{ text?: string; expandedText?: string }> },\n\tfallbackText?: string,\n): unknown[] {\n\tif (Array.isArray(result.messages) && result.messages.length > 0) return result.messages;\n\tconst toolCallParts = (result.toolCalls ?? []).flatMap((summary) => {\n\t\tconst name = toolCallNameFromSummary(summary);\n\t\treturn name\n\t\t\t? [{ type: \"toolCall\", name, arguments: { summary: summary.expandedText ?? summary.text ?? \"\" } }]\n\t\t\t: [];\n\t});\n\tconst text =\n\t\ttypeof result.finalOutput === \"string\" && result.finalOutput.trim().length > 0\n\t\t\t? result.finalOutput.trim()\n\t\t\t: fallbackText;\n\tconst content = [...toolCallParts, ...(text ? [{ type: \"text\", text }] : [])];\n\tif (content.length === 0) return [];\n\treturn [{ role: \"assistant\", content }];\n}\n\nexport function toDelegationUpdate(\n\trequestId: string,\n\tupdate: PromptTemplateBridgeResult,\n): PromptTemplateDelegationUpdate | undefined {\n\tconst progress = update.details?.progress?.[0];\n\tconst taskProgress = update.details?.progress?.map((entry) => {\n\t\tconst lastOutput = entry.recentOutput?.[entry.recentOutput.length - 1];\n\t\tconst safeLastOutput =\n\t\t\ttypeof lastOutput === \"string\" && lastOutput.trim() && lastOutput !== \"(running...)\" ? lastOutput : undefined;\n\t\treturn {\n\t\t\tindex: entry.index,\n\t\t\tagent: entry.agent ?? \"delegate\",\n\t\t\tstatus: entry.status,\n\t\t\tcurrentTool: entry.currentTool,\n\t\t\tcurrentToolArgs: entry.currentToolArgs,\n\t\t\trecentOutput: safeLastOutput,\n\t\t\trecentOutputLines: filterRecentOutput(entry.recentOutput),\n\t\t\trecentTools: sanitizeRecentTools(entry.recentTools),\n\t\t\tmodel: resolveProgressModel(update, entry),\n\t\t\ttoolCount: entry.toolCount,\n\t\t\tdurationMs: entry.durationMs,\n\t\t\ttokens: entry.tokens,\n\t\t};\n\t});\n\tif (!progress && (!taskProgress || taskProgress.length === 0)) return undefined;\n\tconst lastOutput = progress?.recentOutput?.[progress.recentOutput.length - 1];\n\tconst safeLastOutput =\n\t\ttypeof lastOutput === \"string\" && lastOutput.trim() && lastOutput !== \"(running...)\" ? lastOutput : undefined;\n\treturn {\n\t\trequestId,\n\t\t...(update.details?.runId ? { runId: update.details.runId } : {}),\n\t\tcurrentTool: progress?.currentTool,\n\t\tcurrentToolArgs: progress?.currentToolArgs,\n\t\trecentOutput: safeLastOutput,\n\t\trecentOutputLines: filterRecentOutput(progress?.recentOutput),\n\t\trecentTools: sanitizeRecentTools(progress?.recentTools),\n\t\tmodel: progress ? resolveProgressModel(update, progress) : undefined,\n\t\ttoolCount: progress?.toolCount,\n\t\tdurationMs: progress?.durationMs,\n\t\ttokens: progress?.tokens,\n\t\ttaskProgress,\n\t};\n}\n\nexport function toSubagentDelegationExecutionParams(\n\trequest: SubagentDelegationRequest,\n): DelegatedSubagentExecutionParams {\n\treturn {\n\t\tagent: request.agent,\n\t\ttask: request.task,\n\t\tcontext: request.context,\n\t\tcwd: request.cwd,\n\t\tmodel: request.model,\n\t\ttimeoutMs: request.timeoutMs,\n\t\tturnBudget: request.turnBudget,\n\t\tenforceHardTurnLimit: true,\n\t\ttoolBudget: request.toolBudget,\n\t\tskill: request.skill,\n\t\toutput: false,\n\t\t...(request.result.kind === \"structured\" ? { outputSchema: request.result.schema } : {}),\n\t\tacceptance: false,\n\t\tartifacts: request.artifacts,\n\t\tdelegatedThinkingOverride: request.thinking,\n\t\tdelegatedAllowZeroToolBudget: true,\n\t\tasync: false,\n\t\tforegroundOnly: true,\n\t\tclarify: false,\n\t};\n}\n\nexport function toSubagentDelegationUpdate(\n\trequest: SubagentDelegationRequest,\n\tresult: PromptTemplateBridgeResult,\n): SubagentDelegationUpdate | undefined {\n\tconst legacy = toDelegationUpdate(request.requestId, result);\n\tif (!legacy) return undefined;\n\treturn {\n\t\trequestId: request.requestId,\n\t\townerRunId: request.ownerRunId,\n\t\tnodeId: request.nodeId,\n\t\t...(legacy.runId ? { runId: legacy.runId } : {}),\n\t\t...(legacy.currentTool ? { currentTool: legacy.currentTool } : {}),\n\t\t...(legacy.currentToolArgs ? { currentToolArgs: legacy.currentToolArgs } : {}),\n\t\t...(legacy.recentOutput ? { recentOutput: legacy.recentOutput } : {}),\n\t\t...(legacy.recentOutputLines ? { recentOutputLines: legacy.recentOutputLines } : {}),\n\t\t...(legacy.recentTools ? { recentTools: legacy.recentTools } : {}),\n\t\t...(legacy.model ? { model: legacy.model } : {}),\n\t\t...(typeof legacy.toolCount === \"number\" ? { toolCount: legacy.toolCount } : {}),\n\t\t...(typeof legacy.durationMs === \"number\" ? { durationMs: legacy.durationMs } : {}),\n\t\t...(typeof legacy.tokens === \"number\" ? { tokens: legacy.tokens } : {}),\n\t};\n}\n\nfunction resolveSubagentDelegationStatus(\n\tresult: PromptTemplateBridgeResult,\n\taborted: boolean,\n): SubagentDelegationStatus {\n\tif (aborted) return \"cancelled\";\n\tconst child = result.details?.results?.[0];\n\tif (!child) return \"failed\";\n\tif (result.details?.timedOut || child.timedOut) return \"timed_out\";\n\tif (child?.structuredOutputFailed) return \"structured_output_failed\";\n\tif (child?.turnBudgetExceeded) return \"turn_budget_exhausted\";\n\tif (child?.toolBudgetBlocked) return \"tool_budget_exhausted\";\n\tif (child?.acceptance?.status === \"rejected\" && child.acceptance.explicit) return \"acceptance_failed\";\n\tif (result.details?.stopped || child?.stopped || child?.interrupted) return \"interrupted\";\n\tif (result.isError || child?.error || (typeof child?.exitCode === \"number\" && child.exitCode !== 0)) return \"failed\";\n\treturn \"completed\";\n}\n\nconst MAX_RESULT_BYTES = 1024 * 1024;\n\nexport function toSubagentDelegationResponse(\n\trequest: SubagentDelegationRequest,\n\tresult: PromptTemplateBridgeResult,\n\taborted: boolean,\n): SubagentDelegationResponse {\n\tconst child = result.details?.results?.[0];\n\tconst progress = child?.progressSummary ?? result.details?.progress?.[0];\n\tlet status = resolveSubagentDelegationStatus(result, aborted);\n\tlet error = child?.error ?? (status === \"failed\" ? firstTextContent(result.content) : undefined);\n\tlet projectedResult: SubagentDelegationValue | undefined;\n\tif (status === \"completed\") {\n\t\tif (request.result.kind === \"text\") {\n\t\t\tif (typeof child?.finalOutput !== \"string\") {\n\t\t\t\tstatus = \"failed\";\n\t\t\t\terror = \"Delegated subagent did not capture a text result.\";\n\t\t\t} else if (Buffer.byteLength(child.finalOutput, \"utf8\") > MAX_RESULT_BYTES) {\n\t\t\t\tstatus = \"failed\";\n\t\t\t\terror = \"Delegated text result exceeds 1 MiB when UTF-8 encoded.\";\n\t\t\t} else {\n\t\t\t\tprojectedResult = { kind: \"text\", text: child.finalOutput };\n\t\t\t}\n\t\t} else if (child?.structuredOutput === undefined) {\n\t\t\tstatus = \"failed\";\n\t\t\terror = \"Delegated subagent did not capture the requested structured result.\";\n\t\t} else {\n\t\t\tconst inspected = cloneJsonWithinByteLimit(child.structuredOutput, MAX_RESULT_BYTES);\n\t\t\tif (inspected.ok === false) {\n\t\t\t\tstatus = \"failed\";\n\t\t\t\terror =\n\t\t\t\t\tinspected.reason === \"too_large\"\n\t\t\t\t\t\t? \"Delegated structured result exceeds 1 MiB when encoded.\"\n\t\t\t\t\t\t: \"Delegated structured result is not plain JSON data.\";\n\t\t\t} else {\n\t\t\t\tprojectedResult = { kind: \"structured\", value: inspected.value };\n\t\t\t}\n\t\t}\n\t}\n\tconst usage = child?.usage;\n\tconst childLaunchContractDigest = (child as { launchContractDigest?: string } | undefined)?.launchContractDigest;\n\treturn {\n\t\trequestId: request.requestId,\n\t\townerRunId: request.ownerRunId,\n\t\tnodeId: request.nodeId,\n\t\tstatus,\n\t\t...(error ? { error } : {}),\n\t\t...(result.details?.runId ? { runId: result.details.runId } : {}),\n\t\t...(child?.agent ? { agent: child.agent } : {}),\n\t\t...(child?.model ? { model: child.model } : {}),\n\t\t...(child?.thinking ? { thinking: child.thinking } : {}),\n\t\t...(typeof child?.exitCode === \"number\" ? { exitCode: child.exitCode } : {}),\n\t\t...(childLaunchContractDigest ? { launchContractDigest: childLaunchContractDigest } : {}),\n\t\t...(projectedResult ? { result: projectedResult } : {}),\n\t\t...(usage\n\t\t\t? {\n\t\t\t\t\tusage: {\n\t\t\t\t\t\tinput: usage.input,\n\t\t\t\t\t\toutput: usage.output,\n\t\t\t\t\t\tcacheRead: usage.cacheRead,\n\t\t\t\t\t\tcacheWrite: usage.cacheWrite,\n\t\t\t\t\t\tcost: usage.cost,\n\t\t\t\t\t\tturns: usage.turns,\n\t\t\t\t\t\ttoolCalls: progress?.toolCount ?? 0,\n\t\t\t\t\t\tdurationMs: progress?.durationMs ?? 0,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nexport function toPromptTemplateResponse(\n\trequest: PromptTemplateDelegationRequest,\n\tresult: PromptTemplateBridgeResult,\n): PromptTemplateDelegationResponse {\n\tconst contentText = firstTextContent(result.content);\n\tconst messages = buildDelegationMessages(result.details?.results?.[0] ?? {}, contentText);\n\treturn {\n\t\t...request,\n\t\tmessages,\n\t\t...(contentText ? { contentText } : {}),\n\t\tisError: result.isError === true,\n\t\terrorText: result.isError ? contentText : undefined,\n\t};\n}\n"]}