Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
2.9 kB · 128 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129import { 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>)