Upgrade the runtime and native plugin API to OpenCode 2.0.24. Restore session-scoped learning, credential renewal, typed project queries and controlled frontend actions from the legacy Agent. Replace host Shell execution with an approved Landlock/seccomp executor and persistent per-session workspaces. Add typed Bocha search and Tianditu geocoding bridges using the owning session credential. Require a working kernel sandbox before startup and persist workspace files in deployments. Validation completed before this commit: TypeScript checks, 150 Bun tests, Docker build and UID 10001 sandbox execution, native Shell approval and session recovery. Tianditu succeeded; Bocha currently reports exhausted account quota. Unrelated investigation-report contract work is excluded.
37 lines
1.8 KiB
TypeScript
37 lines
1.8 KiB
TypeScript
import { tool } from "../tool.js";
|
|
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;
|
|
},
|
|
});
|