Download src/tools/TaskGetTool/TaskGetTool.ts from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 2.88 kB
-
https://huggingface.co/chenbhao/codev/resolve/714ab7d15ffd78992a4c3d4e2bf153c2f62f4841/src/tools/TaskGetTool/TaskGetTool.ts
- Command line
-
hf download hf://chenbhao/codev@714ab7d15ffd78992a4c3d4e2bf153c2f62f4841/src/tools/TaskGetTool/TaskGetTool.ts
-
curl -L -o TaskGetTool.ts https://huggingface.co/chenbhao/codev/resolve/714ab7d15ffd78992a4c3d4e2bf153c2f62f4841/src/tools/TaskGetTool/TaskGetTool.ts
2.88 kB
| 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>) | |