这是一个Cloudflare Worker + Next.js 16的参考实现,它通过Workers AI规划一个专注的一天,将中间事件流式传输到浏览器,并通过官方模型上下文协议(MCP)可流式传输的HTTP端点将生成的任务同步到Todoist。该项目在Apache 2.0许可证下分发(参见LICENSE)。
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。StreamableHTTPClientTransport连接到https://ai.todoist.net/mcp,列出可用的任何元数据/工具(遗留或官方),并使用add-task(s)调用,同时带有projectId和project_id字段以及标准化的优先级(p1…p4)。/api/transcribe代理base64 WebM/Opus音频到@cf/openai/whisper-large-v3-turbo,强制执行8 MB限制,以便前端可以覆盖提示并立即提交/plan。single_reminder,multi_step_plan,recipe_plan和general_plan模板强制任务数量、依赖关系和语气。debug.metadata事件暴露出来,以尽量减少“收件箱”回退。P0,P1或“高优先级”映射到Todoist REST优先级数字(4 = P1,1 = P4)。批量工具自动转换为p1…p4字符串。/plan以application/x-ndjson事件(status,ai.plan,todoist.task,final,error)响应,因此UI可以即时显示进度和失败。/api/transcribe → 单击提交提示,当权限或大小限制失败时优雅回退。pnpm 9+https://ai.todoist.net/mcp)| 名称 | 描述 |
|---|---|
FRONTEND_ORIGIN | CORS和基本认证提示的唯一允许源。 |
TODOIST_MCP_URL | MCP可流式传输的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名称。
LOG_FILE=$(mktemp -t wrangler-tail).log
WRANGLER_LOG_SANITIZE=false npx wrangler tail cf-todoist-daily-agent --format json > "$LOG_FILE" 2>&1 &
/plan。查找:
[todoist.tools] – 发现的MCP工具。[todoist.debug.metadata] – 前几个项目/标签(确认元数据范围)。[todoist.debug.call-args] – 精确的add-task(s)负载(检查project_id,priority,due*)。OPTIONS /plan – CORS预检(204)。POST /plan – 主规划器端点返回application/x-ndjson(参见openapi/plan.yaml)。POST /transcribe – 语音助手,返回{ text, language }或错误负载。OpenAPI模式定义了请求/响应体,用于自动化和客户端生成。
pnpm lintpnpm previewwrangler dev --local后跟随一个示例curl(如上所述)以验证NDJSON流式传输和Todoist MCP连接性。