feat(frontend): show subscription plans on dashboard

This commit is contained in:
Your Name
2026-05-13 14:36:28 +08:00
parent ba054f04cf
commit 55e506b2b5
15 changed files with 7241 additions and 124 deletions

View File

@@ -1,110 +1,340 @@
# OpenClaw 执行诊断与修复
# OpenClaw 执行手册 — LLM Intelligence Hub
## 结论
> 本文档说明宰相AI Agent如何在本项目内执行、验证与回收任务。
> 版本v1.0
> 日期2026-05-11
> 状态:与当前代码状态对齐
`llm-intelligence` 当前的问题,**主因不是规划文档写得不够多,而是 OpenClaw 没有形成项目内执行闭环**。根因排序如下:
---
1. **协作问题最严重**
- 项目没有本地 `GOALS.md` / `TASKS.md`
- 验证器默认读取的是全局 `~/.openclaw/workspace/TASKS.md`
- `openclaw.json` 中唯一明确绑定的 MCP `cwd` 指向 `ai-customer-service`,不是本项目
- 结果是:`llm-intelligence` 被塞进全局流程里,执行上下文被其他项目污染
## 一、项目现状
2. **角色设计问题第二严重**
- 任务全部挂在“宰相”单角色上
- `subagents/runs.json` 为空,说明并没有真实发生多角色并行
- 文档、设计、采集器、前端、验收没有拆给不同责任面
**不再是"仅有规划文档"**
3. **skills 问题是次要但真实存在**
- 关键技能如 `code-analyzer``frontend-design``github``review-pr` 是可用的
- 但很多技能通过软链挂到 `~/.agents/skills`,被 OpenClaw 以 `symlink-escape` 拒绝加载
- 这会导致“看起来安装了,运行时却没真正可用”的错觉
当前已落地:
## 现状误区
| 组件 | 状态 | 路径 |
|------|------|------|
| 规划文档 | ✅ | PRD.md / FEATURE_LIST.md / TECHNICAL_DESIGN.md / BUSINESS_MODEL.md |
| OpenRouter 采集器 | ✅ | `scripts/fetch_openrouter.go` — Go 实现,直写 PostgreSQL |
| 数据库迁移 | ✅ | `db/migrations/001_phase1_core_tables.sql` |
| 日报生成器 | ✅ | `scripts/generate_daily_report.go` |
| 日报产出 | ✅ | `reports/daily/` 已有 7 份 Markdown 日报 + HTML 产物 |
| 前端脚手架 | ✅ | `frontend/src/pages/Explorer.tsx` + 数据文件 |
| 项目内任务管理 | ✅ | `GOALS.md` / `TASKS.md` / `AGENTS.md` |
| 项目内记忆入口 | ✅ | `SESSION-STATE.md` / `MEMORY.md` / `memory/README.md` |
| 验证器 | ✅ | `scripts/verification_executor.go` + 4 个 verify 脚本 |
| OpenClaw Review | ✅ | `reports/openclaw/` 已有 13 份 review + backlog |
### 误区 1规划已完成执行自然会跟上
**技术栈确认**Go 1.22.2 + PostgreSQL + Vanilla JS/React前端
不是。现在仓库里主要是:
- `PRD.md`
- `FEATURE_LIST.md`
- `BUSINESS_MODEL.md`
- `TECHNICAL_DESIGN.md`
---
但没有:
- 数据采集脚本
- `db/migrations`
- `frontend/`
- `reports/daily/`
## 二、角色定义
说明执行没有从“文档阶段”切到“实现阶段”。
四个固定责任面,任务并行推进:
### 误区 2任务状态是可信的
### 产品架构师
- **负责**PRD 维护、Phase 范围冻结、文档一致性审查
- **当前任务**:主线已完成,当前关注 Phase 2 范围定义与文档真实性维护
- **判定标准**PRD / FEATURE / TECH 三份文档无冲突描述
不是。全局 `TASKS.md` 中出现这种状态漂移:
- `TECHNICAL_DESIGN.md` 已标记完成
- 后续任务仍写着“等待技术设计完成后启动”
### 数据后端
- **负责**:采集器、数据库 schema、日报生成、数据质量
- **当前任务**主线已完成当前关注数据质量、Phase 2 多数据源扩展、真实运行验证
- **判定标准**`fetch_openrouter` 可运行并写入 DB`generate_daily_report` 产出 Markdown
这是典型的任务依赖没有被回收更新。
### 前端实现
- **负责**Explorer 页面、Dashboard 组件、数据可视化
- **当前任务**Explorer / Dashboard 最小可用已完成,腾讯云套餐订阅价已接入 Dashboard当前关注展示质量与后续增强
- **判定标准**:前端页面可展示模型表格 + 免费标记 + 筛选排序Dashboard 可独立展示腾讯云套餐订阅价
## 修复策略
### 集成验收
- **负责**验证脚本、任务回收、日报推送、cron 集成
- **当前任务**主线已完成当前关注验证真实性、回写边界、review/cron/verifier 降噪
- **判定标准**`verification_executor --dry-run` 能读取本项目 TASKS.mdcron 每日触发采集+日报
## 一、项目内闭环
---
本项目必须有自己的:
- `GOALS.md`
- `TASKS.md`
- `scripts/verification_executor.go`
## 三、执行顺序(已更新)
不要继续依赖全局 `~/.openclaw/workspace/TASKS.md`
```
执行基线2026-05-11
## 二、角色拆分
[✅] 1. Phase 1 范围冻结与文档冲突清理
[✅] 2. OpenRouter 采集器、数据库迁移、日报生成器落地
[✅] 3. Explorer / Dashboard 最小可用前端落地
[✅] 4. 项目内 TASKS / GOALS / verification / execution 闭环落地
[✅] 5. 自动采集 + 日报调度闭环落地
[✅] 6. Phase 6 综合验收通过(`verify_phase6.sh` PASS
[🟡] 7. OpenClaw review / cron / verifier 质量治理持续优化
[🟡] 8. Phase 2 多数据源扩展待规划
```
建议固定四个责任面
**下一步优先**
1. 提高 review / cron / verifier 的真实性与降噪质量
2. 推进 Phase 2 数据源扩展与真实验证入口
3. 收口工程纪律提交、CI、回写边界、报告一致性
- **产品架构师**
- 负责 PRD、Feature List、技术范围一致性
- **数据后端**
- 负责采集器、数据库、日报生成
- **前端实现**
- 负责 Explorer / Dashboard
- **集成验收**
- 负责验证器、任务回收、日报推送
---
角色不是为了“显得高级”,而是为了让任务能并行、状态能落地。
## 四、验证规则
## 三、执行顺序
### 项目内验证(优先)
按这个顺序推进:
宰相执行本项目任务时,**默认读取本项目 `TASKS.md`**,不是全局 `~/.openclaw/workspace/TASKS.md`
1. 冻结 Phase 1 范围
2. 产出 OpenRouter 采集器
3. 产出 PostgreSQL migration
4. 产出日报生成器
5. 搭 Explorer 最小页面
6. 接日报推送
7. 每一步通过项目内验证器回收
```bash
# 项目内验证(默认行为)
cd /home/long/project/llm-intelligence && go run scripts/verification_executor.go --dry-run
## 四、技能治理
# 指定任务验证
cd /home/long/project/llm-intelligence && go run scripts/verification_executor.go --task T-2.1
短期内不需要继续“装更多 skill”先把现有能力用好。
# 只验证已完成任务(推荐用于日常健康检查)
cd /home/long/project/llm-intelligence && go run scripts/verification_executor.go --completed-only
优先使用:
- `code-analyzer`
- `frontend-design`
- `github`
- `review-pr`
- `self-improving-agent`
# 按状态过滤
cd /home/long/project/llm-intelligence && go run scripts/verification_executor.go --status planned
```
后续要处理的是软链越界问题,不然技能表会继续出现“已安装但跳过加载”。
### 验证 schema
## 推荐动作
每个 Task 必须包含:
### 立即做
- 使用本项目 `TASKS.md`
- 只围绕 `llm-intelligence` 运行验证器
- 把任务从“写文档”切到“产出采集器 / migration / frontend skeleton”
```yaml
verification:
mode: artifact_present | test_pass | semantic
command: "精确命令"
expected_evidence: "预期输出"
evidence_grade: runtime-verified | artifact-present | doc-claimed
task_type: code | automation | documentation | configuration | data | analysis
timeout_seconds: 30
```
### 不要做
- 不要继续往全局 `TASKS.md` 塞本项目任务
- 不要把所有任务都挂在单角色“宰相”名下
- 不要再新增一轮大而全设计文档,先把实现骨架跑起来
### 验证真实性协议
- 任何结论都要区分三种证据等级:
- `doc-claimed`:只有文档、任务表、说明文字这样写
- `artifact-present`:文件、脚本、模板、配置确实存在
- `runtime-verified`:构建、测试、接口、数据库、真实命令输出验证通过
- 对代码、脚本、自动化、调度、数据链路任务,默认**不能**只用 `doc-claimed` 或纯 `semantic` 判定完成。
- `artifact_present` 只适用于:
- 静态文档存在性
- 模板文件存在性
- 非执行型配置存在性
- 只要任务声称“可运行”“已打通”“已自动化”“已上线前可交付”,就必须至少补一条 `runtime-verified` 证据。
- review 报告里必须明确区分:
- 文档宣称完成
- 仓库产物存在
- 真实运行验证通过
- 未区分这三层时,不能把任务写成“完成”。
### 复杂任务执行协议
- 多文件、跨模块、跨角色或高风险任务,必须先拆成 checkpoints再执行。
- 每个 checkpoint 至少包含:
- 目标输出
- 预期证据
- 对应验证命令
- checkpoint 完成后:
1. 先更新 `SESSION-STATE.md`
2. 再做局部验证
3. 最后才考虑改 `TASKS.md`
- 在整个复杂任务链路中,只允许一个写者做最终任务状态回收,避免多个 agent 并发改状态。
- 如果某个 checkpoint 只完成文档或模板,而主链路运行证据尚未出现,任务状态最多更新到 `🟡`,不能直接标 `✅`
### 状态回收流程
1. 任务完成后 → 更新 `TASKS.md` 状态(🔴 → 🟡 → ✅)
2. 运行 `verification_executor` 确认通过
3. 按项目 daily memory 协议记录到 `memory/YYYY-MM-DD.md`
4. 每周复盘时 → 更新 `GOALS.md` 里程碑
### Project Daily Memory 回写协议
项目内的 `cron` / `review` / `verifier` / `main` / `worker` 在结束一个执行块后,如果需要留下可恢复归档,必须遵守以下规则:
#### 1. 写入目标
- 高频工作态只写 `SESSION-STATE.md`
- 单日归档只写 `memory/YYYY-MM-DD.md`
- 长期稳定知识只写 `MEMORY.md`
- 任务状态真相只写 `TASKS.md`
- 目标里程碑真相只写 `GOALS.md`
#### 2. 初始化规则
- 如果 `memory/YYYY-MM-DD.md` 不存在,必须先创建标准骨架:
```md
# llm-intelligence Daily Memory - YYYY-MM-DD
> 项目单日归档文件。
> 记录高价值摘要、证据、结论,不记录每条实时对话。
> 高频工作状态优先写 `SESSION-STATE.md`。
## Entries
```
- 不允许第一次写入就直接从裸 `## HH:MM ...` 开始。
- 项目内 daily memory 细则以 `memory/README.md` 为准。
#### 3. 追加格式
- 新条目只能追加在 `## Entries` 后面
- 标题格式固定为:
```md
## HH:MM - <actor> - <topic>
```
- `<actor>` 只允许:
- `main`
- `cron`
- `review`
- `verifier`
- `worker`
- 每个条目正文只允许使用四个小节:
```md
### Context
- ...
### Evidence
- ...
### Outcome
- ...
### Next
- ...
```
#### 4. 角色写法约束
- `cron`:只写调度结果、失败原因、是否需要人工介入
- `review`:只写关键发现、风险判断、建议动作
- `verifier`只写验证命令、证据、PASS/FAIL
- `main`:只写用户决策、任务切换、阶段结论
- `worker`:只写局部实现进展、阻塞、交接点
#### 5. 工具使用约束
- `memory/YYYY-MM-DD.md` 是日志型文件,默认不要优先使用脆弱的 `edit`
- 推荐流程固定为:
1. `read` 当前文件
2. 保留旧内容
3. 在末尾追加一个新时间块
4.`write` 做整文件重写
- 只有在锚点极小、唯一、且刚刚读取过的情况下,才允许对 daily memory 使用 `edit`
- 不允许把大段原始日志、整篇 review、整段命令输出直接粘进 daily memory只保留高价值摘要和可追溯证据路径
#### 6. 完成前核验
- 写完 `memory/YYYY-MM-DD.md` 后,必须立即重新读取并确认:
- 标题还在
- `## Entries` 还在
- 新条目已经落在末尾
- `<actor>` 与 section 标题格式正确
- 没有通过这一步,不能声称“已归档”
### Review 产物字段协议
- `reports/openclaw/YYYY-MM-DD-HHMM-review.md` 必须与项目 daily memory 保持同一组字段命名。
- 允许保留标题和 metadata block但除这两部分外顶层 section 只允许:
- `## Context`
- `## Evidence`
- `## Outcome`
- `## Next`
- 字段映射固定为:
- `Context`review 背景、阶段判断、时间窗口
- `Evidence`验证命令与结果、完成项、未完成项、不一致项、gap 证据
- `Outcome`:执行摘要、风险判断、阶段结论
- `Next`下一轮动作、owner、复核点
- review 模板以 `reports/openclaw/REVIEW_TEMPLATE.md` 为准;新报告默认基于该模板生成。
- 历史 review 报告允许保留旧格式,不要求批量回写;从本规则生效后生成的新报告必须遵守四段式字段协议。
- `Evidence` 段必须优先展示 `runtime-verified` 证据,其次才是 `artifact-present``doc-claimed`
### 任务写回边界
- `llm-intelligence` 的 review、cron、实施、验收任务**只允许写本项目**
- `/home/long/project/llm-intelligence/TASKS.md`
- `/home/long/project/llm-intelligence/GOALS.md`
- 明确禁止写:
- `~/.openclaw/workspace/TASKS.md`
- `~/.openclaw/workspace/GOALS.md`
- 如果只是 review不要顺手改任务状态只有当本轮真的完成了某项任务并拿到了验证证据才允许改本项目 `TASKS.md`
- 任何任务文件写回前,必须先跑预检守卫:
```bash
cd /home/long/project/llm-intelligence
bash scripts/review/preflight_task_write_guard.sh llm-intelligence-review /home/long/project/llm-intelligence/TASKS.md
bash scripts/review/preflight_task_write_guard.sh llm-intelligence-review /home/long/project/llm-intelligence/GOALS.md
```
- 如果是 cron 场景writer role 改成 `llm-intelligence-cron`;只要守卫返回非 0就必须立即停止不得继续写回。
---
## 五、文档改写规则
这条规则专门用于避免大 Markdown 文档在 Feishu 会话里出现“回复看起来完成、工具层实际失败”的假完成。
### 先读后改
- 修改 `TECHNICAL_DESIGN.md``IMPLEMENTATION_PLAN.md``TASKS.md` 这类大文件前,必须先重新读取目标文件的最新内容。
- 只有在**刚读取过且能精确定位** `oldText` 的情况下,才允许使用 `edit`
- 对共享或高频变动文件(如 `TASKS.md``OPENCLAW_CAPABILITY_BACKLOG.md`),默认假设存在并发写入风险。
### 大文件优先锚点,锚点不稳就整段重写
- 当单文件大于 50KB、变更跨越多个分散段落或旧文本包含表格/代码块/全角字符时,默认不要连续重试 `edit`
- `edit` 一旦出现 `Could not find the exact text`,必须停止复用旧的 `oldText`,改为:
- 重新读取更小范围的精确锚点后再改
- 或基于最新全文直接 `write` 重写目标文件
- **禁止**连续两次拿同一份 `oldText` 重试。
- 如果文件是共享面板或任务总表,第二次失败后直接放弃 `edit`,改为整段 `write`
### 单写者约束
- `~/.openclaw/workspace/TASKS.md``~/.openclaw/workspace/GOALS.md``main session` 独占写入。
- `llm-intelligence` agent 与它的 cron review 对全局任务面板一律只读。
- 本项目自己的 `TASKS.md` 允许本项目 agent 写入,但同一轮执行里只允许一个写者负责回收,避免多个 subagent 同时改任务表。
### 回写后必须二次核验
- 每次 `write``edit` 成功后,必须立刻重新读取目标文件。
- 至少核验三类内容:
- 目标标题是否更新
- 关键关键词是否已落盘
- 旧的冲突描述是否已消失
### 响应前提
- 没有通过“回写后二次核验”,不能在 Feishu 中声称“已完成”。
- 如果工具层失败,应明确报告“失败于 edit/write未落盘”不能用文字总结代替文件变更。
---
## 六、与立交桥其他项目的关系
| 项目 | 关系 | 注意 |
|------|------|------|
| `ai-customer-service` | 独立 | 技术栈相同Go+PostgreSQL但数据/目标完全独立 |
| `supply-intelligence` | 独立 | 小龙团队推进,宰相不直接参与 |
| `~/.openclaw/workspace/` | 全局配置 | 仅保留 GOALS/TASKS 双层管理框架,不塞本项目任务 |
---
## 七、不做清单
- ❌ 不再往全局 `~/.openclaw/workspace/TASKS.md` 塞本项目任务
- ❌ 不新增大而全的设计文档PRD/TECH 已冻结,进入执行期)
- ❌ 不引入 Python/Flask 技术栈(已统一为 Go
- ❌ Phase 1 不碰多租户、用户系统、邮件/飞书推送
---
*本文档由宰相维护,每次项目状态重大变更后更新。*