Production Ready

Limitless Agents

AI Agent 平台开发时间线

3
Days
47
Commits
62
Tests
1
Builder
Sprint 1
从零到生产就绪 AI Agent 平台
2026-02-08 ~ 2026-02-09 — 2 天,33 commits
08

2月8日 · 周六

从零到功能完备

上午 · 项目初始化
12:49013d513create-next-app — 空壳诞生
下午 · 基础管线搭建
13:15c19ee53核心三管线上线 — Kimi K2.5 对话 + Fish TTS + Web Speech STT
13:235378535fix: moonshot API 域名修正
15:056527b74STT 迁移 → SenseVoice 本地模型
15:37fc7cc41STT 再迁移 → 阿里云百炼 Qwen3-ASR-Flash
15:525bc206bTTS 迁移 → 阿里云百炼 Qwen3-TTS-Flash
15:5893deffdSTT 手动发送 + TTS 加载动画 + 播放进度条
16:0294f19cc关闭自动播放,改为手动点击
16:08f2d92ca文档同步 PRD v2.0 + CLAUDE.md
下午 · UI 体系构建
16:155063ab3统一输入容器 — 模型选择器 + 上传按钮
16:264ab440d侧边栏 — 对话历史 + 主题切换 + 多对话管理
16:41a1f5de5Markdown 渲染 — 代码高亮 + 复制 + Toast + Tooltip
16:504465ae0PRD-P4 UI polish 规划文档
17:0189e9514录音计时器 + 3 分钟自动停止安全阀
晚上 · 高级特性爆发
20:15cbae37d多模型 + 设置中心 — DeepSeek V3/R1 接入
20:41564b96eAI 工具系统 — 搜索 / 网页 / 天气 / 时间 / 任务管理
21:010db1dd2TodoWrite 自主规划 — AI 自动拆解复杂任务
21:57d6b0565fix: AI SDK v6 工具可见性 + 推理流式 UX
22:087e14158时序 parts 渲染 + 可折叠 PlanCard
22:27dd0f7e4fix: 侧边栏标题溢出遮挡操作按钮
深夜 · 工程化
23:285111363ToolPlugin 架构重构 — 单文件共置 + 每工具开关 + OTel 可观测性
09

2月9日 · 周日

企业级特性 + 生产部署

凌晨 · Auth + 持久化
00:07eeddaa2Supabase Auth — 登录/注册 + session 中间件 + Postgres 持久化
00:218a0dbc4用户菜单重构 — Claude/ChatGPT 风格
00:288f10d6c聊天内容居中 + 关闭 dev indicators
00:31458b3d4设置面板加宽
00:33da600a2fix: shadcn 覆盖问题
00:3639af22eCLAUDE.md 文档同步
晚上 · 核心能力扩展
20:00d8603fcE2B 代码执行 — 沙箱 Python/JS + 迷你终端渲染器
21:15319caf1文件分析 + Artifacts — PDF/DOCX/XLSX/CSV 解析 + 5 类型预览 + 拖拽调宽
21:3390c3851UI 打磨 — 入场动画 + 滚动回底 + 建议芯片 + iOS 安全区
深夜 · 技能系统 + 生产修复
22:51610be91技能系统全栈 — .md/.zip 上传 + Supabase 持久化 + Popover 开关 + 技能标签
23:07028221a生产修复 #1 — Artifact 面板字段兼容 + 点击回退
23:126e290b1生产修复 #2 — maxDuration 60→300s

Sprint 1 Features

对话Kimi K2.5 / DeepSeek V3 / DeepSeek R1 多模型切换 工具网络搜索 (Tavily) / 网页阅读 (Jina) / 天气 / 时间 / 任务规划 / 代码执行 (E2B) / Artifact 创建 文件PDF / DOCX / XLSX / CSV 服务端解析管线 Artifacts5 类型预览 (code/html/markdown/csv/svg) + sandbox iframe + 拖拽调宽 技能.md/.zip 上传 → Supabase 持久化 → system prompt 注入 → 聊天区快速开关 认证Supabase Auth (邮箱/密码 + OAuth 回调) 持久化Supabase Postgres 对话存储 (乐观更新 + 防抖写入 + 懒加载) 语音阿里云百炼 TTS (Qwen3-TTS-Flash) + STT (Qwen3-ASR-Flash) 可观测性消息级 token/延迟 + OpenTelemetry → SigNoz Cloud UIMarkdown 渲染 + 代码高亮 + 动画 + 滚动回底 + 建议芯片 + iOS 安全区 + 暗色模式 部署Vercel Pro (limitless-agents.vercel.app),maxDuration=300
Sprint 2
记忆系统 + 上下文压缩 + 设置同步
2026-02-11 — 1 天,14 commits,62 tests
11

2月11日 · 周二

记忆 + 压缩 + 同步

下午 · askUser + 计划修复
13:48aca3effaskUser 主动提问(F15) — AI 暂停向用户提问,用户通过 UI 回答后继续
14:20e85ff96计划生命周期修复 — 按对话 ID 隔离 localStorage 存储 + 完成后自动清除
晚上 · 记忆系统 + 迁移 + 压缩
19:47a250074OpenClaw 记忆系统(F16 Phase 1-3) — 记忆存储/检索/压缩摘要 + Context 架构 + 测试套件
19:58192ffe8生产构建修复 — AI SDK v6 zodSchema() wrapper + 类型断言
20:33ce6c2c9记忆系统 Supabase 迁移 — 文件系统 → Postgres memory_store 表(Serverless 兼容)
21:25a5b8792设置跨设备同步(F18) — localStorage → Supabase user_settings 表
21:52e3fd41f测试套件 — useFileMemories 17 tests,项目 62 tests total
22:18a839a10上下文压缩(F17) — 两层防线:客户端 70% 阈值主动摘要 + 服务端 85% 滑动窗口裁剪
22:26ee4564f压缩 E2E 测试 — 30 轮对话 drop/inject/model-compare 全场景覆盖
深夜 · 压缩 UI + 修正
22:327bcbcd4 → 003faa8临时降低 contextLimit=1000 浏览器实测 → 恢复
23:13a4ac80f压缩通知 UI — 剪刀分隔条 + 可展开摘要(类 Claude Code compacting)
23:1440d0959Kimi K2.5 contextLimit 修正 — 128K → 256K(按官方规格)
23:31b6b044b生产修复 #3 — 历史对话点击不加载消息(useEffect 空依赖 + 异步 fetchMessages 竞态)

Sprint 2 Features

记忆AI 主动存储 + saveMemory 工具 + searchMemories 语义检索 + 压缩摘要持久化 压缩客户端 useContextMonitor 70% 主动摘要 + 服务端 compressMessages 85% 滑动窗口 压缩 UI剪刀分隔条 + 可展开摘要(N 条旧消息已整合为摘要) 交互askUser — AI 暂停提问,用户通过 UI 卡片回答后继续生成 同步Settings Supabase 迁移 — 跨设备配置同步 测试62 tests — 记忆 Hook 17 + 压缩 E2E 30 轮 + 既有套件

Lessons Learned

01Serverless 无状态:文件系统不可写

记忆系统初版用 fs.writeFile 写本地 JSON,本地完美,Vercel 部署后 500。Serverless Functions 每次请求可能分配到不同容器,文件系统只读。

Serverless = 无状态。任何持久化数据必须走外部存储,永远不要假设本地文件系统可写。
02AI SDK v6 类型兼容陷阱

本地 build 通过,Vercel 构建失败。v5→v6 breaking change,messageMetadataSchema 需要 zodSchema() wrapper。本地 TypeScript 宽松模式没报错。

SDK 大版本升级时,TypeScript 编译通过 ≠ 运行时兼容。升级后必须跑完整 npm run build。
03客户端日志 ≠ 服务端行为

浏览器 Console 显示压缩在工作,但这只证明客户端预警层正常 — 服务端执行层是否真的裁剪了消息?没有证据。

分层系统中,每一层都需要独立的可观测性。验证时要追踪完整数据流,不能只看一端。
04模型参数标错 = 能力阉割

Kimi K2.5 contextLimit 设为 128K,导致压缩在 ~89.6K 就触发 — 实际模型支持 256K,远未到极限。凭印象填写,没查官方文档。

模型配置必须以官方文档为准,不凭记忆。一个数字的错误会导致整条管线行为偏移。
05压缩后用户无感知

服务端静默裁剪旧消息,用户完全不知道。AI 回复突然"忘记"之前的内容,用户困惑。

任何影响用户体验的后端行为都必须有前端反馈。"无声的优化"在用户看来就是"无声的 bug"。

Tech Stack

Next.js 15 Vercel AI SDK v6 Kimi K2.5 DeepSeek V3/R1 Supabase PostgreSQL E2B Sandbox 阿里云百炼 ReAct Artifacts Skills OTel Streaming Voice I/O Context Compression Memory System
Limitless