Files
next-tjwater-agent/.opencode/tools/publish_task_report.ts
T

37 lines
1.8 KiB
TypeScript

import { tool } from "@opencode-ai/plugin";
import { getInternalBridgeConfig } from "../internalBridge.js";
export default tool({
description: "Publish the final concise report for this execution turn after the current full plan and any pending action proposals have been saved. The Server combines this report with the current generation and session plan to settle the task as running, waiting_human or completed. This records artifacts; it does not perform field work or execute commands.",
args: {
request_id: tool.schema.string().describe("Stable UUID idempotency key for this report revision"),
report: tool.schema.object({
title: tool.schema.string(),
current_conclusion: tool.schema.string(),
conclusion_boundary: tool.schema.string(),
evidence_refs: tool.schema.array(tool.schema.string()),
recommendations: tool.schema.array(tool.schema.string()),
pending_items: tool.schema.array(tool.schema.string()),
}),
evidence: tool.schema.array(tool.schema.object({
evidence_id: tool.schema.string(),
kind: tool.schema.literal("synthetic"),
summary: tool.schema.string(),
source_label: tool.schema.string(),
source_ref: tool.schema.string().optional(),
observed_at: tool.schema.string(),
})),
},
async execute(args, context) {
const { baseUrl, internalToken } = getInternalBridgeConfig();
const response = await fetch(`${baseUrl}/internal/operational-task/artifacts`, {
method: "POST",
headers: { "Content-Type": "application/json", "x-agent-internal-token": internalToken },
body: JSON.stringify({ session_id: context.sessionID, ...args }),
});
const text = await response.text();
if (!response.ok) throw new Error(`task report publish failed (${response.status}): ${text}`);
return text;
},
});