π File detail
tools/TaskGetTool/TaskGetTool.ts
π§© .tsπ 129 linesπΎ 2,881 bytesπ text
β Back to All Filesπ― Use case
This module implements the βTaskGetToolβ tool (Task Get) β something the model can call at runtime alongside other agent tools. On the API surface it exposes Output and TaskGetTool β mainly types, interfaces, or factory objects. Dependencies touch schema validation. It composes internal code from Tool, utils, constants, and prompt (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { z } from 'zod/v4' import { buildTool, type ToolDef } from '../../Tool.js' import { lazySchema } from '../../utils/lazySchema.js' import { getTask,
π€ Exports (heuristic)
OutputTaskGetTool
π External import roots
Package roots from from "β¦" (relative paths omitted).
zod
π₯οΈ Source preview
import { z } from 'zod/v4'
import { buildTool, type ToolDef } from '../../Tool.js'
import { lazySchema } from '../../utils/lazySchema.js'
import {
getTask,
getTaskListId,
isTodoV2Enabled,
TaskStatusSchema,
} from '../../utils/tasks.js'
import { TASK_GET_TOOL_NAME } from './constants.js'
import { DESCRIPTION, PROMPT } from './prompt.js'
const inputSchema = lazySchema(() =>
z.strictObject({
taskId: z.string().describe('The ID of the task to retrieve'),
}),
)
type InputSchema = ReturnType<typeof inputSchema>
const outputSchema = lazySchema(() =>
z.object({
task: z
.object({
id: z.string(),
subject: z.string(),
description: z.string(),
status: TaskStatusSchema(),
blocks: z.array(z.string()),
blockedBy: z.array(z.string()),
})
.nullable(),
}),
)
type OutputSchema = ReturnType<typeof outputSchema>
export type Output = z.infer<OutputSchema>
export const TaskGetTool = buildTool({
name: TASK_GET_TOOL_NAME,
searchHint: 'retrieve a task by ID',
maxResultSizeChars: 100_000,
async description() {
return DESCRIPTION
},
async prompt() {
return PROMPT
},
get inputSchema(): InputSchema {
return inputSchema()
},
get outputSchema(): OutputSchema {
return outputSchema()
},
userFacingName() {
return 'TaskGet'
},
shouldDefer: true,
isEnabled() {
return isTodoV2Enabled()
},
isConcurrencySafe() {
return true
},
isReadOnly() {
return true
},
toAutoClassifierInput(input) {
return input.taskId
},
renderToolUseMessage() {
return null
},
async call({ taskId }) {
const taskListId = getTaskListId()
const task = await getTask(taskListId, taskId)
if (!task) {
return {
data: {
task: null,
},
}
}
return {
data: {
task: {
id: task.id,
subject: task.subject,
description: task.description,
status: task.status,
blocks: task.blocks,
blockedBy: task.blockedBy,
},
},
}
},
mapToolResultToToolResultBlockParam(content, toolUseID) {
const { task } = content as Output
if (!task) {
return {
tool_use_id: toolUseID,
type: 'tool_result',
content: 'Task not found',
}
}
const lines = [
`Task #${task.id}: ${task.subject}`,
`Status: ${task.status}`,
`Description: ${task.description}`,
]
if (task.blockedBy.length > 0) {
lines.push(`Blocked by: ${task.blockedBy.map(id => `#${id}`).join(', ')}`)
}
if (task.blocks.length > 0) {
lines.push(`Blocks: ${task.blocks.map(id => `#${id}`).join(', ')}`)
}
return {
tool_use_id: toolUseID,
type: 'tool_result',
content: lines.join('\n'),
}
},
} satisfies ToolDef<InputSchema, Output>)