diff --git a/src/plugin/tool-registry.ts b/src/plugin/tool-registry.ts index 10947308e..d01fa7ddb 100644 --- a/src/plugin/tool-registry.ts +++ b/src/plugin/tool-registry.ts @@ -31,6 +31,7 @@ import { createHashlineEditTool, createPrepareCouncilPromptTool, } from "../tools" +import { createCouncilFinalize, createCouncilRead } from "../tools/council-archive" import { getMainSessionID } from "../features/claude-code-session-state" import { filterDisabledTools } from "../shared/disabled-tools" import { isTaskSystemEnabled, log } from "../shared" @@ -280,6 +281,8 @@ export function createToolRegistry(args: { ...taskToolsRecord, ...hashlineToolsRecord, prepare_council_prompt: createPrepareCouncilPromptTool(ctx.directory), + council_finalize: createCouncilFinalize(), + council_read: createCouncilRead(), } for (const toolDefinition of Object.values(allTools)) { diff --git a/src/tools/council-archive/index.ts b/src/tools/council-archive/index.ts new file mode 100644 index 000000000..eddde2eda --- /dev/null +++ b/src/tools/council-archive/index.ts @@ -0,0 +1,5 @@ +export { createCouncilFinalize } from "./create-council-finalize" +export { createCouncilRead } from "./create-council-read" +export { extractCouncilResponse, OPENING_TAG, CLOSING_TAG } from "./council-response-extractor" +export type { CouncilResponseExtraction } from "./council-response-extractor" +export type { CouncilFinalizeArgs, CouncilMemberResult, CouncilFinalizeResult } from "./types" diff --git a/src/tools/delegate-task/background-task.ts b/src/tools/delegate-task/background-task.ts index 184325ec9..29d556b1b 100644 --- a/src/tools/delegate-task/background-task.ts +++ b/src/tools/delegate-task/background-task.ts @@ -80,6 +80,7 @@ export async function executeBackgroundTask( skillContent: systemContent, category: args.category, sessionPermission: QUESTION_DENIED_SESSION_PERMISSION, + writeOutputToFile: args.write_output_to_file, }) // OpenCode TUI's `Task` tool UI calculates toolcalls by looking up diff --git a/src/tools/delegate-task/tools.ts b/src/tools/delegate-task/tools.ts index ab55e1789..5cf062aaf 100644 --- a/src/tools/delegate-task/tools.ts +++ b/src/tools/delegate-task/tools.ts @@ -105,6 +105,7 @@ export function createDelegateTask(options: DelegateTaskToolOptions): ToolDefini subagent_type: tool.schema.string().optional().describe("REQUIRED if category not provided. Do NOT provide both category and subagent_type."), session_id: tool.schema.string().optional().describe("Existing Task session to continue"), command: tool.schema.string().optional().describe("The command that triggered this task"), + write_output_to_file: tool.schema.boolean().optional().describe("Write raw task output to file on completion"), }, async execute(args: DelegateTaskArgs, toolContext) { const ctx = toolContext as ToolContextWithMetadata diff --git a/src/tools/delegate-task/types.ts b/src/tools/delegate-task/types.ts index bbb0e8e21..958868a10 100644 --- a/src/tools/delegate-task/types.ts +++ b/src/tools/delegate-task/types.ts @@ -17,6 +17,7 @@ export interface DelegateTaskArgs { session_id?: string command?: string load_skills: string[] + write_output_to_file?: boolean execute?: { task_id: string task_dir?: string diff --git a/src/tools/index.ts b/src/tools/index.ts index e887e3cf4..6d1d6d3ab 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -47,6 +47,7 @@ export { } from "./task" export { createHashlineEditTool } from "./hashline-edit" export { createPrepareCouncilPromptTool } from "./prepare-council-prompt" +export { createCouncilFinalize, createCouncilRead } from "./council-archive" export function createBackgroundTools(manager: BackgroundManager, client: OpencodeClient): Record { const outputManager: BackgroundOutputManager = manager