返回市场
每日任务代理服务器

每日任务代理服务器

作者:BillDuke132 星标更新:2025-10-27

项目介绍

Todoist Daily Agent

这是一个Cloudflare Worker + Next.js 16的参考实现,它通过Workers AI规划一个专注的一天,将中间事件流式传输到浏览器,并通过官方模型上下文协议(MCP)可流式传输的HTTP端点将生成的任务同步到Todoist。该项目在Apache 2.0许可证下分发(参见LICENSE)。

架构概述

  • 前端:React 19 App Router页面(src/app/page.tsx),捕获单个自然语言提示,从/plan流式传输NDJSON事件,并可选地记录一个简短的语音笔记,该笔记通过/api/transcribe流动。
  • 规划管道/plan(在openapi/plan.yaml中记录)验证请求,使用@cf/openai/gpt-oss-120b / @cf/openai/gpt-oss-20b进行意图分类+场景特定规划,动态发现Todoist项目/标签,并以换行符分隔的JSON形式流式传输每个阶段。详情请参阅docs/PLAN_PIPELINE.md
  • Todoist MCP集成:使用StreamableHTTPClientTransport连接到https://ai.todoist.net/mcp,列出可用的任何元数据/工具(遗留或官方),并使用add-task(s)调用,同时带有projectIdproject_id字段以及标准化的优先级(p1…p4)。
  • 语音转录/api/transcribe代理base64 WebM/Opus音频到@cf/openai/whisper-large-v3-turbo,强制执行8 MB限制,以便前端可以覆盖提示并立即提交/plan

功能

  • 意图感知规划single_remindermulti_step_planrecipe_plangeneral_plan模板强制任务数量、依赖关系和语气。
  • 元数据驱动提示:通过MCP获取的Todoist项目/标签被注入到AI提示中,并通过debug.metadata事件暴露出来,以尽量减少“收件箱”回退。
  • 优先级规范化:自然语言提示如P0P1或“高优先级”映射到Todoist REST优先级数字(4 = P11 = P4)。批量工具自动转换为p1…p4字符串。
  • 流式用户体验/planapplication/x-ndjson事件(statusai.plantodoist.taskfinalerror)响应,因此UI可以即时显示进度和失败。
  • 语音优先流程:浏览器MediaRecorder → /api/transcribe → 单击提交提示,当权限或大小限制失败时优雅回退。

预备条件

  • Node.js 20+
  • pnpm 9+
  • Wrangler CLI 4.45+
  • 启用了Workers AI的Cloudflare账户
  • Todoist账户+已批准用于MCP测试版的API令牌(https://ai.todoist.net/mcp

配置

名称描述
FRONTEND_ORIGINCORS和基本认证提示的唯一允许源。
TODOIST_MCP_URLMCP可流式传输的HTTP端点(默认https://ai.todoist.net/mcp)。
TODOIST_TOKEN被Todoist MCP识别的Bearer令牌。
BASIC_AUTH_USER / BASIC_AUTH_PASS/plan/transcribe之间使用的HTTP基本认证凭据。
AI 绑定wrangler.jsonc中配置以访问Workers AI(例如,binding: "AI")。

在本地运行时填充.dev.vars,然后通过wrangler secret put在Cloudflare中设置相同名称。

本地开发

pnpm install
pnpm dev          # Next.js 开发服务器(无Worker绑定)
pnpm lint         # 对Next.js 16 + TS严格配置的ESLint扁平化配置
pnpm preview      # 通过OpenNext + Wrangler预览构建
wrangler dev      # 在http://127.0.0.1:8787本地运行Worker

示例流式请求:

curl -u "$BASIC_AUTH_USER:$BASIC_AUTH_PASS" \
     -N -H "Content-Type: application/json" \
     -H "Origin: $FRONTEND_ORIGIN" \
     -d '{"prompt":"计划一个有意识的夜晚"}' \
     http://127.0.0.1:8787/plan

部署

pnpm run deploy   # 使用opennextjs-cloudflare构建并运行`wrangler deploy`

脚本会生成.open-next/worker.js,上传静态资产,并发布到wrangler.jsonc中的Worker名称。

可观察性和调试

  1. 禁用日志清理以捕获Todoist负载:
    LOG_FILE=$(mktemp -t wrangler-tail).log
    WRANGLER_LOG_SANITIZE=false npx wrangler tail cf-todoist-daily-agent --format json > "$LOG_FILE" 2>&1 &
    
  2. 在日志运行时触发/plan。查找:
    • [todoist.tools] – 发现的MCP工具。
    • [todoist.debug.metadata] – 前几个项目/标签(确认元数据范围)。
    • [todoist.debug.call-args] – 精确的add-task(s)负载(检查project_idprioritydue*)。
  3. 交叉引用Todoist活动日志,确认任务是否落在预期的项目和优先级中。

API概要

  • OPTIONS /plan – CORS预检(204)。
  • POST /plan – 主规划器端点返回application/x-ndjson(参见openapi/plan.yaml)。
  • POST /transcribe – 语音助手,返回{ text, language }或错误负载。

OpenAPI模式定义了请求/响应体,用于自动化和客户端生成。

测试与验证

  • pnpm lint
  • pnpm preview
  • wrangler dev --local后跟随一个示例curl(如上所述)以验证NDJSON流式传输和Todoist MCP连接性。

许可证

根据Apache License, Version 2.0许可。