summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-01-07 02:01:23 -0600
committerAiden Cline <[email protected]>2026-01-07 02:01:32 -0600
commit6590c1641f341ac47d8c44d207ceee8d7862bfa9 (patch)
treed88c55728b5e51a19227d0f939d73c9636d4aea8
parent0ffe496869d20fef2696d1b2c2f48e9b4ca61d3a (diff)
downloadopencode-6590c1641f341ac47d8c44d207ceee8d7862bfa9.tar.gz
opencode-6590c1641f341ac47d8c44d207ceee8d7862bfa9.zip
add truncation for all tools
-rw-r--r--packages/opencode/src/tool/registry.ts6
-rw-r--r--packages/opencode/src/tool/tool.ts14
2 files changed, 16 insertions, 4 deletions
diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts
index db5152847..bca6626db 100644
--- a/packages/opencode/src/tool/registry.ts
+++ b/packages/opencode/src/tool/registry.ts
@@ -23,6 +23,7 @@ import { CodeSearchTool } from "./codesearch"
import { Flag } from "@/flag/flag"
import { Log } from "@/util/log"
import { LspTool } from "./lsp"
+import { Truncate } from "../session/truncation"
export namespace ToolRegistry {
const log = Log.create({ service: "tool.registry" })
@@ -64,10 +65,11 @@ export namespace ToolRegistry {
description: def.description,
execute: async (args, ctx) => {
const result = await def.execute(args as any, ctx)
+ const out = Truncate.output(result)
return {
title: "",
- output: result,
- metadata: {},
+ output: out.truncated ? out.content : result,
+ metadata: { truncated: out.truncated },
}
},
}),
diff --git a/packages/opencode/src/tool/tool.ts b/packages/opencode/src/tool/tool.ts
index 434a3d426..060da0ae7 100644
--- a/packages/opencode/src/tool/tool.ts
+++ b/packages/opencode/src/tool/tool.ts
@@ -2,6 +2,7 @@ import z from "zod"
import type { MessageV2 } from "../session/message-v2"
import type { Agent } from "../agent/agent"
import type { PermissionNext } from "../permission/next"
+import { Truncate } from "../session/truncation"
export namespace Tool {
interface Metadata {
@@ -52,7 +53,7 @@ export namespace Tool {
init: async (ctx) => {
const toolInfo = init instanceof Function ? await init(ctx) : init
const execute = toolInfo.execute
- toolInfo.execute = (args, ctx) => {
+ toolInfo.execute = async (args, ctx) => {
try {
toolInfo.parameters.parse(args)
} catch (error) {
@@ -64,7 +65,16 @@ export namespace Tool {
{ cause: error },
)
}
- return execute(args, ctx)
+ const result = await execute(args, ctx)
+ const truncated = Truncate.output(result.output)
+ return {
+ ...result,
+ output: truncated.content,
+ metadata: {
+ ...result.metadata,
+ truncated: truncated.truncated,
+ },
+ }
}
return toolInfo
},