todo.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import z from "zod"
  2. import { Tool } from "./tool"
  3. import DESCRIPTION_WRITE from "./todowrite.txt"
  4. import { Todo } from "../session/todo"
  5. export const TodoWriteTool = Tool.define("todowrite", {
  6. description: DESCRIPTION_WRITE,
  7. parameters: z.object({
  8. todos: z.array(z.object(Todo.Info.shape)).describe("The updated todo list"),
  9. }),
  10. async execute(params, opts) {
  11. await Todo.update({
  12. sessionID: opts.sessionID,
  13. todos: params.todos,
  14. })
  15. return {
  16. title: `${params.todos.filter((x) => x.status !== "completed").length} todos`,
  17. output: JSON.stringify(params.todos, null, 2),
  18. metadata: {
  19. todos: params.todos,
  20. },
  21. }
  22. },
  23. })
  24. export const TodoReadTool = Tool.define("todoread", {
  25. description: "Use this tool to read your todo list",
  26. parameters: z.object({}),
  27. async execute(_params, opts) {
  28. const todos = await Todo.get(opts.sessionID)
  29. return {
  30. title: `${todos.filter((x) => x.status !== "completed").length} todos`,
  31. metadata: {
  32. todos,
  33. },
  34. output: JSON.stringify(todos, null, 2),
  35. }
  36. },
  37. })