refactor(tool): Tool.Context.metadata returns Effect (#21972)
This commit is contained in:
@@ -158,7 +158,7 @@ async function createToolContext(agent: Agent.Info) {
|
|||||||
agent: agent.name,
|
agent: agent.name,
|
||||||
abort: new AbortController().signal,
|
abort: new AbortController().signal,
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask(req: Omit<Permission.Request, "id" | "sessionID" | "tool">) {
|
ask(req: Omit<Permission.Request, "id" | "sessionID" | "tool">) {
|
||||||
return Effect.sync(() => {
|
return Effect.sync(() => {
|
||||||
for (const pattern of req.patterns) {
|
for (const pattern of req.patterns) {
|
||||||
|
|||||||
@@ -364,7 +364,6 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
|||||||
agent: input.agent.name,
|
agent: input.agent.name,
|
||||||
messages: input.messages,
|
messages: input.messages,
|
||||||
metadata: (val) =>
|
metadata: (val) =>
|
||||||
run.promise(
|
|
||||||
input.processor.updateToolCall(options.toolCallId, (match) => {
|
input.processor.updateToolCall(options.toolCallId, (match) => {
|
||||||
if (!["running", "pending"].includes(match.state.status)) return match
|
if (!["running", "pending"].includes(match.state.status)) return match
|
||||||
return {
|
return {
|
||||||
@@ -378,7 +377,6 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
),
|
|
||||||
ask: (req) =>
|
ask: (req) =>
|
||||||
permission
|
permission
|
||||||
.ask({
|
.ask({
|
||||||
@@ -592,8 +590,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
|||||||
callID: part.callID,
|
callID: part.callID,
|
||||||
extra: { bypassAgentCheck: true, promptOps },
|
extra: { bypassAgentCheck: true, promptOps },
|
||||||
messages: msgs,
|
messages: msgs,
|
||||||
metadata(val: { title?: string; metadata?: Record<string, any> }) {
|
metadata: (val: { title?: string; metadata?: Record<string, any> }) =>
|
||||||
return run.promise(
|
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
part = yield* sessions.updatePart({
|
part = yield* sessions.updatePart({
|
||||||
...part,
|
...part,
|
||||||
@@ -601,8 +598,6 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
|||||||
state: { ...part.state, ...val },
|
state: { ...part.state, ...val },
|
||||||
} satisfies MessageV2.ToolPart)
|
} satisfies MessageV2.ToolPart)
|
||||||
}),
|
}),
|
||||||
)
|
|
||||||
},
|
|
||||||
ask: (req: any) =>
|
ask: (req: any) =>
|
||||||
permission
|
permission
|
||||||
.ask({
|
.ask({
|
||||||
@@ -1054,7 +1049,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
|||||||
messageID: info.id,
|
messageID: info.id,
|
||||||
extra: { bypassCwdCheck: true, ...extra },
|
extra: { bypassCwdCheck: true, ...extra },
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
})
|
})
|
||||||
.pipe(Effect.onInterrupt(() => Effect.sync(() => controller.abort())))
|
.pipe(Effect.onInterrupt(() => Effect.sync(() => controller.abort())))
|
||||||
|
|||||||
@@ -385,7 +385,7 @@ export const BashTool = Tool.define(
|
|||||||
let expired = false
|
let expired = false
|
||||||
let aborted = false
|
let aborted = false
|
||||||
|
|
||||||
ctx.metadata({
|
yield* ctx.metadata({
|
||||||
metadata: {
|
metadata: {
|
||||||
output: "",
|
output: "",
|
||||||
description: input.description,
|
description: input.description,
|
||||||
@@ -397,16 +397,15 @@ export const BashTool = Tool.define(
|
|||||||
const handle = yield* spawner.spawn(cmd(input.shell, input.name, input.command, input.cwd, input.env))
|
const handle = yield* spawner.spawn(cmd(input.shell, input.name, input.command, input.cwd, input.env))
|
||||||
|
|
||||||
yield* Effect.forkScoped(
|
yield* Effect.forkScoped(
|
||||||
Stream.runForEach(Stream.decodeText(handle.all), (chunk) =>
|
Stream.runForEach(Stream.decodeText(handle.all), (chunk) => {
|
||||||
Effect.sync(() => {
|
|
||||||
output += chunk
|
output += chunk
|
||||||
ctx.metadata({
|
return ctx.metadata({
|
||||||
metadata: {
|
metadata: {
|
||||||
output: preview(output),
|
output: preview(output),
|
||||||
description: input.description,
|
description: input.description,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}),
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ export const EditTool = Tool.define(
|
|||||||
if (change.removed) filediff.deletions += change.count || 0
|
if (change.removed) filediff.deletions += change.count || 0
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.metadata({
|
yield* ctx.metadata({
|
||||||
metadata: {
|
metadata: {
|
||||||
diff,
|
diff,
|
||||||
filediff,
|
filediff,
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ export const TaskTool = Tool.define(
|
|||||||
providerID: msg.info.providerID,
|
providerID: msg.info.providerID,
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.metadata({
|
yield* ctx.metadata({
|
||||||
title: params.description,
|
title: params.description,
|
||||||
metadata: {
|
metadata: {
|
||||||
sessionId: nextSession.id,
|
sessionId: nextSession.id,
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export namespace Tool {
|
|||||||
callID?: string
|
callID?: string
|
||||||
extra?: { [key: string]: any }
|
extra?: { [key: string]: any }
|
||||||
messages: MessageV2.WithParts[]
|
messages: MessageV2.WithParts[]
|
||||||
metadata(input: { title?: string; metadata?: M }): void
|
metadata(input: { title?: string; metadata?: M }): Effect.Effect<void>
|
||||||
ask(input: Omit<Permission.Request, "id" | "sessionID" | "tool">): Effect.Effect<void>
|
ask(input: Omit<Permission.Request, "id" | "sessionID" | "tool">): Effect.Effect<void>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const baseCtx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
type AskInput = {
|
type AskInput = {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const ctx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -982,13 +982,14 @@ describe("tool.bash abort", () => {
|
|||||||
{
|
{
|
||||||
...ctx,
|
...ctx,
|
||||||
abort: controller.signal,
|
abort: controller.signal,
|
||||||
metadata: (input) => {
|
metadata: (input) =>
|
||||||
|
Effect.sync(() => {
|
||||||
const output = (input.metadata as { output?: string })?.output
|
const output = (input.metadata as { output?: string })?.output
|
||||||
if (output && output.includes("before") && !controller.signal.aborted) {
|
if (output && output.includes("before") && !controller.signal.aborted) {
|
||||||
collected.push(output)
|
collected.push(output)
|
||||||
controller.abort()
|
controller.abort()
|
||||||
}
|
}
|
||||||
},
|
}),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -1074,10 +1075,11 @@ describe("tool.bash abort", () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
...ctx,
|
...ctx,
|
||||||
metadata: (input) => {
|
metadata: (input) =>
|
||||||
|
Effect.sync(() => {
|
||||||
const output = (input.metadata as { output?: string })?.output
|
const output = (input.metadata as { output?: string })?.output
|
||||||
if (output) updates.push(output)
|
if (output) updates.push(output)
|
||||||
},
|
}),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const ctx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ const baseCtx: Omit<Tool.Context, "ask"> = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
const glob = (p: string) =>
|
const glob = (p: string) =>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const ctx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const ctx = {
|
|||||||
agent: "test-agent",
|
agent: "test-agent",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const ctx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const baseCtx: Omit<Tool.Context, "ask"> = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ describe("tool.task", () => {
|
|||||||
abort: new AbortController().signal,
|
abort: new AbortController().signal,
|
||||||
extra: { promptOps },
|
extra: { promptOps },
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata() {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -247,7 +247,7 @@ describe("tool.task", () => {
|
|||||||
abort: new AbortController().signal,
|
abort: new AbortController().signal,
|
||||||
extra: { promptOps, ...extra },
|
extra: { promptOps, ...extra },
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata() {},
|
metadata: () => Effect.void,
|
||||||
ask: (input) =>
|
ask: (input) =>
|
||||||
Effect.sync(() => {
|
Effect.sync(() => {
|
||||||
calls.push(input)
|
calls.push(input)
|
||||||
@@ -296,7 +296,7 @@ describe("tool.task", () => {
|
|||||||
abort: new AbortController().signal,
|
abort: new AbortController().signal,
|
||||||
extra: { promptOps },
|
extra: { promptOps },
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata() {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -335,7 +335,7 @@ describe("tool.task", () => {
|
|||||||
abort: new AbortController().signal,
|
abort: new AbortController().signal,
|
||||||
extra: { promptOps },
|
extra: { promptOps },
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata() {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const ctx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const ctx = {
|
|||||||
agent: "build",
|
agent: "build",
|
||||||
abort: AbortSignal.any([]),
|
abort: AbortSignal.any([]),
|
||||||
messages: [],
|
messages: [],
|
||||||
metadata: () => {},
|
metadata: () => Effect.void,
|
||||||
ask: () => Effect.void,
|
ask: () => Effect.void,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user