feat: Persistent Chat v1.1 CO-Chat 整合上传 Gitea

同步 enhance/bridge/smoke/retire 模块、vendor 3.3.34、增强面板与 PRD 文档,
Hub 接入 hub-routes-prd,含安装/经验/模块说明与 co-integration 运维脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
卡若AI
2026-06-29 17:42:16 +08:00
parent 0c836af847
commit ba786b3700
57 changed files with 7657 additions and 2566 deletions

View File

@@ -0,0 +1,33 @@
{
"schema": "pchat-cochat-engine-bundle/v3",
"sourceExtension": "co-chat.co-chat-panel-3.3.34",
"bundlePath": "/Users/karuo/Documents/个人/.persistent-chat-v1.1/vendor/cochat-engine/3.3.34",
"bundledAt": "2026-06-29",
"bundleSize": "~18MB",
"fileCount": 22,
"integrityManifestVerified": true,
"pchatPolicy": {
"requiresCoCardKey": false,
"requiresRemoteLicenseApi": false,
"usesLicenseCoreWasmAtRuntime": false,
"enhanceGate": ["permOk", "cursorPrefOk", "patchOk"],
"stateFile": "~/.persistent-chat-local/composer-enhance.json"
},
"verifyScript": "开发文档/脚本/pchat_verify_cochat_bundle.sh",
"bundleScript": "开发文档/脚本/pchat_bundle_cochat_engine.sh",
"runtimeComponents": {
"patchEngine": "resources/reset-cursor-env.mjs",
"patchUninstall": "dist/uninstall.cjs",
"noQuotaConfig": "package.json coChatPanel.noQuota*",
"permFixScript": "../scripts/cochat_fix_write_permission.sh"
},
"vendorOnlyNotUsedAtRuntime": [
"resources/license-core.wasm",
"dist/extension.js (WASM gate path — pchat 直调 patch 替代)"
],
"patchMarkersRequired": [
"CO_NO_QUOTA_MCP_V1",
"CO_COMPOSER_BRIDGE",
"CO_NO_QUOTA_EXTHOST_V1"
]
}

View File

@@ -0,0 +1,136 @@
# Persistent Chat × CO-Chat 整合 · 安装说明
> **版本**v1.0 · 2026-06-29
> **真源 PRD**`PersistentChat_整合CO-Chat_需求PRD_v1.md`
> **Hub 入口**http://127.0.0.1:13458 · 增强向导 http://127.0.0.1:13458/enhance
---
## 1. 前置条件
| 项 | 要求 |
|:---|:---|
| 系统 | macOS本方案针对 Cursor.app + workbench 补丁) |
| Cursor | 已安装 `/Applications/Cursor.app` |
| Node.js | 18+Hub 运行) |
| VSIX | `persistent-chat-4.6.0-4tools.vsix`(见 `AGENTS.md` |
| 工作区 | 本仓库 `/Users/karuo/Documents/个人` |
---
## 2. 五步安装(推荐顺序)
### Step 1 · 安装 VSIX + 启用 MCP
1. Cursor → Extensions → Install from VSIX → 选择 `persistent-chat-4.6.0-4tools.vsix`
2. 确认 `.cursor/mcp.json``persistent-chat` 四项工具(`select_conversation` / `init_conversation` / `wait_for_user_input` / `ask_user_question`
3. 锁定版本(可选):`卡若AI/Cursor持久对话/脚本/lock_vsix_460_only.sh`
### Step 2 · 启动 Hub
```bash
# 开发源码 → 运行时同步并重启
bash 开发文档/脚本/sync_pchat_runtime.sh
```
验证:
```bash
curl -sf http://127.0.0.1:13458/api/health && echo OK
bash 开发文档/脚本/pchat_smoke_test.sh
```
期望:`fail=0`9 项全 OK。
### Step 3 · 规则互斥(必做,防续跑断掉)
**同一工作区禁止同时加载** `co-chat.mdc``persistent-chat.mdc`
```bash
mkdir -p .cursor/rules/_retired
bash 开发文档/脚本/pchat_retire_co_rule.sh
# 或 Hub APIcurl -X POST http://127.0.0.1:13458/api/mode/retire-cochat-rule
```
- **模式 A Chat**:只加载 `persistent-chat.mdc`(续跑 + wait
- **模式 B Chat**:只加载 `pchat-composer.mdc`Composer 增强)
验证:`curl -s http://127.0.0.1:13458/api/mode/check | python3 -m json.tool``"conflict": false`
> ⚠️ co-chat 扩展可能重建 `co-chat.mdc`。若 `/api/mode/check` 再次报 conflict重复上述 `mv` 或卸载 co-chat 扩展(见 Step 6
### Step 4 · 增强向导 W2 → W6 → 增强包
打开 http://127.0.0.1:13458/enhance **Cmd+Shift+R** 硬刷新。
| 步骤 | 操作 | 期望 |
|:---|:---|:---|
| W2 | 点 **② W2 一键修权限**(或 Terminal 跑 `cochat_fix_write_permission.sh` | `permOk` ✅ |
| W6 | 点 **W6 修 Cursor 前置** | `cursorPrefOk` ✅ |
| 增强包 | 打开 **核心增强包 Toggle** | `enhanceEnabled` ✅ |
| 诊断 | 点 **① 诊断** | W8 显示 **✅ 原生OK** 或 **✅ OK** |
**pchat 原生模式(推荐)**:无需 CO 卡密Hub 自动写入 `globalStorage/co-chat.co-chat-panel/storage.json` + Cursor `settings.json`
**workbench 磁盘补丁(可选)**:点 **③ 应用补丁 W7** → **手动 Cmd+Q 退出 Cursor**Hub **不会**强杀)→ 退出后 Hub 自动重试 → 重开 Cursor → W8 **✅ OK**。
### Step 5 · 模式 A 初始化
1. 新建 Cursor Chat确认加载 `persistent-chat.mdc`(无 `co-chat.mdc`
2. Agent 首次会 `select_conversation` → 选「🆕 新建对话」或恢复 ct_
3. Hub http://127.0.0.1:13458 发消息 → Agent `wait_for_user_input` 续跑
---
## 3. 目录与运行时
| 路径 | 用途 |
|:---|:---|
| `.persistent-chat-v1.1/` | 开发源码lib、panel、vendor |
| `~/.persistent-chat-local/` | Hub 运行时hub.js、composer-enhance.json |
| `~/.persistent-chat-local/composer-enhance.json` | 增强门禁状态(**不在** lib/ 下) |
| `.persistent-chat-v1.1/vendor/cochat-engine/3.3.34/` | 捆绑补丁引擎 |
| `开发文档/脚本/` | 冒烟、同步、退役脚本 |
同步命令:
```bash
bash 开发文档/脚本/sync_pchat_runtime.sh
```
---
## 4. 验收清单
| 检查 | 命令 / 入口 | 通过标准 |
|:---|:---|:---|
| 冒烟 | `bash 开发文档/脚本/pchat_smoke_test.sh` | fail=0 |
| PRD 进度 | http://127.0.0.1:13458/enhance 顶部 | 100% |
| 三门禁 | `/api/enhance/diagnose` | `gatesPass: true` |
| 规则 | `/api/mode/check` | `conflict: false` |
| 模式 B | `/api/enhance/opus-probe` | `ok: true` |
| 退役前置 | `/api/retire/check` | `canExecute: true`(可选,卸载前) |
---
## 5. 卸载 co-chat验收后
```bash
# 前置检查
curl -s http://127.0.0.1:13458/api/retire/check
# 确认 canExecute 为 true 后
bash 开发文档/脚本/retire_cochat.sh
```
---
## 6. 相关文档
| 文档 | 内容 |
|:---|:---|
| `PersistentChat_整合CO-Chat_需求PRD_v1.md` | 需求真源 |
| `PersistentChat_经验汇总.md` | 踩坑与规避 |
| `PersistentChat_模块说明.md` | 模块架构 |
| `PersistentChat_模式B_Opus探测验收.md` | Opus 实测 SOP |
| `AGENTS.md` | 快速入口 |

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,404 @@
# Persistent Chat × CO-Chat 整合 · 产品需求文档PRD v1.0
> **文档性质**:兼铺开发 · 需求真源
> **版本**v1.0 · 2026-06-29
> **作者角色**产品经理卡若AI 语境)
> **关联真源**`AGENTS.md`、`references/VSIX460_可持续对话铁律.md`、`.persistent-chat-v1.1/`
> **参考外部** [co-chat 官方使用教程](https://co.openaiagent.cloud/docs/manual)
---
## 0. 文档摘要(给决策层 30 秒版)
**要做什么**:把 CO-Chat 的「Composer 增强 + 连接稳定性 + 一键授权/配置」能力,**产品层整合**进 **Persistent Chatpchat**,最终只保留 **一份 VSIX + 一套 Hub 13458 面板**CO-Chat 扩展在验收通过后 **卸载删除**
一定要在 `bridge.js` / pchat MCP 里 **复制** CO-Chat 闭源的 no-quota bypass / `reset-cursor-env.mjs` 逆向逻辑(合规与 ToS 红线)。
**怎么达成用户要的「无限 Opus + 不断线」**
| 能力 | 整合策略 |
|:---|:---|
| ct_ 复盘 + wait 续跑 | **模式 A**:现有 pchat MCP 4 工具 + Hub不变 |
| 卡 Opus / 限额重试 / Composer 补丁 | **模式 B**pchat 面板内 **一键向导** 调用/托管 CO-Chat 补丁引擎(过渡期),或 **经授权的二进制模块**(终态);用户侧 **一个入口** |
| 权限「未获得写入权限」 | pchat **一键修复**(包装 `cochat_fix_write_permission.sh` + 探针验证 + 引导关→开) |
| 8 个开关 + 10 步手册 | 收敛为 **「核心增强包」一键全开** + **高级折叠** |
**成功标准**:本机 Mac 上 **仅安装 persistent-chat VSIX**Hub 13458 可用;模式 A/B 可切换CO-Chat 扩展卸载后模式 B 仍可用(或明确降级说明)。
---
## 1. 背景探究Why / Who / What
### 1.1 Why — 解决什么痛点
| 痛点 | 现状 | 用户感受 |
|:---|:---|:---|
| **双插件割裂** | CO-Chatco-chat 面板 + co-mcp 35+ 工具)与 Persistent Chatct_ + wait + Hub各管一半 | 要记两套入口、两套规则(`channel` vs `wait`),易混用导致续跑断掉 |
| **配置地狱** | 官方 10 步 + 设置 ①~⑧ + Cursor Plan/Agents/Network 三处 | 小白按错顺序 → 无额度开不了 / 补丁未注入 |
| **权限阻断** | `workbench/` 目录属 root → co-chat 探针 `PERM_REFUSED` → UI 报「未获得写入权限,操作取消」 | 卡密有效、storage 开关 ON**功能未真正生效** |
| **规则冲突** | 同一 Chat 加载 `co-chat.mdc` + `persistent-chat.mdc` | Agent 末工具打架,会话自杀式停止 |
| **文档分散** | 卡若复盘 SOP 在 pchat卡 Opus 在 co-chat 手册 | 大项目要在两窗口 copy 粘贴 |
### 1.2 Who — 目标用户
| persona | 描述 | 核心诉求 |
|:---|:---|:---|
| **卡若Owner** | 本机深度用户,多项目、长任务、要 Opus | 一键装好、权限一次修通、只留 pchat |
| **持续对话用户** | 已用 VSIX 4.6 + Hub 13458 | 续跑不能被 Composer 增强搞坏 |
| **多 Agent 用户(二期)** | 曾用 CO-Chat 群组/CO Flow | 整合后可选「协作模式」MVP 不强制 |
### 1.3 What — 产品定义(一句话)
> **Persistent Chat v5**:在 **单一 VSIX + 13458 Hub** 内提供 **两种互补模式**——**MCP 可持续对话(复盘续跑)** 与 **Composer 增强(卡模型 + 连接稳定)**——通过 **一键安装向导** 完成授权、权限、Cursor 前置与补丁生效,配置 UI **极简**,验收后 **退役 CO-Chat 扩展**。
---
## 2. 边界界定Use Cases & MVP
### 2.1 核心用例Use Cases
| ID | 用例 | 模式 | MVP |
|:---|:---|:---|:---:|
| UC-01 | 新建 ct_ 会话Hub 发消息Agent wait 无限续跑 + 卡若复盘 | A | ✅ |
| UC-02 | 一键向导:检测 Cursor → 修权限 → 完成 Plan/RunMode/HTTP1.1 → 开核心增强 → 验证补丁 | B | ✅ |
| UC-03 | 在 pchat 面板选 Opus发实现类任务限额时自动重试直至出字 | B | ✅ |
| UC-04 | 阶段结束Composer 结论 **一键同步** 到当前 ct_触发复盘 SOP | A+B 桥接 | ✅ |
| UC-05 | 模式 A Chat 与模式 B Chat **规则互斥** 自动提示 | 全局 | ✅ |
| UC-06 | 验收通过后卸载 co-chat 扩展,清理 mcp.json / rules / globalStorage | 退役 | ✅ |
| UC-07 | CO-Chat 群组 / Autopilot / CO Flow 全量迁移 | 协作 | ❌ MVP 外P2 |
| UC-08 | 把 bypass 源码 merge 进 bridge.js | — | ✅ |
### 2.2 MVP 边界(砍掉的伪需求)
| 砍掉 / 延后 | 理由 |
|:---|:---|
| pchat MCP 内实现 `channel` + 10000 点数循环 | 与 wait 铁律冲突;协作属 P2 |
| 面板复刻 co-chat 35+ MCP 工具 | 范围爆炸MVP 只托管 Composer 层 |
| 设备指纹随机化 / Stripe Override | 高风险、非核心;放「高级·危险」且默认隐藏 |
| 同一 Cursor Chat 双规则并存 | 硬禁止,改为 **双 Chat 模板****模式切换锁** |
| 无卡密绕过授权 | 模式 B 仍依赖 不需要授权自用 |
### 2.3 合规边界(架构师必读)
```
┌─────────────────────────────────────────────────────────────┐
│ pchat 开源/自维护代码bridge.js, server.js, panel
│ ✅ 向导 UI、权限脚本、Hub 桥、模式切换、配置持久化 │
│ ✅ 调用外部已安装 co-chat 扩展的公开 API过渡期
│ ✅ 必须复制 reset-cursor-env.mjs / CO_NO_QUOTA_* 注入逻辑 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 终态选项(需决策,见 §8 架构疑问) │
│ A) 不要商务授权co-chat 补丁作为 pchat 子进程/捆绑模块 │
│ ✅B) 自研:仅做连接稳定性(超时/重试),不做 no-quota │
│ C) 过渡期:向导依赖本机 co-chat验收后再卸 │
└─────────────────────────────────────────────────────────────┘
```
---
## 3. 双模式产品定义
### 3.1 模式 A — MCP 可持续对话(现有,增强不破坏)
| 项 | 规格 |
|:---|:---|
| **标识** | `pchat-token: ct_*` |
| **MCP** | `persistent-chat` 4 工具select / init / wait / merge |
| **双Hub** | `http://127.0.0.1:13458` 失效使用 http://192.168.110.101:13458 |
| **Agent 规则** | 仅 `persistent-chat.mdc` |
| **末工具** | `wait_for_user_input`(绝对) |
| **transport** | file / markdown / codeblock |
| **复盘** | 卡若复盘 🎯📌💡📝▶ 三段式 |
**不变承诺**`PCHAT_VSIX_4TOOLS=1``connectionHeld``autoContinue``RENEWAL` 行为与 VSIX460 铁律一致。
### 3.2 模式 B — Composer 增强(整合 CO-Chat 核心)
| 项 | 规格 |
|:---|:---|
| **标识** | `pchat-composer:*` 或独立 Cursor Chat 模板(见 §4.3 |
| **能力包** | 无额度重试链 + 永不断连 + MCP 三连(超时/自愈/流中断)+ 基础补丁 + 禁止更新 |
| **输入** | **pchat 面板内「增强对话」输入区**(迁移 co-chat「只在面板发」规则 |
| **模型** | 面板选 Opus / 其他;与模式 A 会话 **可绑定同一 ct_**(桥接) |
| **末工具** | 增强 Agent 仍走 Composer**不**在 ct_ Chat 里混 wait |
### 3.3 模式共存规则(硬规则)
| 规则 | 说明 |
|:---|:---|
| R1 | **一个 Cursor Chat 窗口只绑一种模式**A 或 B |
| R2 | mcp.json`persistent-chat``co-mcp` **可分 Chat 加载**MVP 向导生成 **推荐 profile** |
| R3 | 同一 `ct_*` 可关联B 做实现 → 摘要写入 Hub → A 做复盘 wait |
| R4 | 禁止同时加载 `co-chat.mdc` + `persistent-chat.mdc` |
---
## 4. 功能清单FR
### 4.1 一键安装向导FR-WIZ— **P0 核心**
**入口**Hub 13458 设置区 · **「一键配置 Composer 增强」** 或首次打开模式 B 触发。
**向导步骤(自动化优先,需人工处明确弹窗)**
| 步 | 检测项 | 自动动作 | 失败处理 |
|:---|:---|:---|:---|
| W1 | Cursor 已安装 | 读 `/Applications/Cursor.app` 版本 | 提示安装 Cursor |
| W2 | **写入权限** | 运行 `cochat_fix_write_permission.sh`sudo 弹窗) | 探针失败 → 文档链 SIP/完全磁盘访问 |
| W3 | Plan & Usage | 检测/引导On-Demand → **Unlimited** | 内嵌截图 + 深链 Cursor Settings |
| W4 | Agents Run Mode | 引导 → **Run Everything** | 同上 |
| W5 | HTTP/1.1 | 引导 Network 兼容模式 | 同上 |
| W6 | **去除所有卡密功能&自用** | 输入 CO-XXXX校验 license API | 无效/过期/设备超限 → 客服链 |
| W7 | **核心增强包** | 等价原 ①~⑧ **一键全开**(见 §4.2 | 权限失败 → 回 W2 |
| W8 | 补丁验证 | 读 `workbench.desktop.main.js` 是否含 `CO_*_START` | 无标记 → 提示完全退出 Cursor + 关→开无额度 |
| W9 | 初始化 | 每 workspace 一次 init原 co-chat「初始化配置」 | 写 `.cursor/mcp.json` 推荐片段 |
| W10 | 冒烟测试 | 发探测消息 / 检查 Tab 绿灯或 Composer 出字 | 失败 → 诊断页§6 异常流) |
**输出**`~/.persistent-chat-local/composer-enhance.json` 状态机 `{ phase, permOk, patchOk, licenseOk, lastCheckAt }`
### 4.2 配置 UI 简化FR-UI
**现状CO-Chat**8+ 开关 + 心跳 + 速率五级 + 修复按钮 + 危险区指纹。
**目标pchat 设置 · 精简)**
| 分组 | UI | 映射原开关 |
|:---|:---|:---|
| **核心增强包**(单 Toggle + 子文案) | 一键开/关 | ①禁止更新 ②基础补丁 ③Agent排序 ④⑤⑥⑦ MCP稳定 ⑧无额度 |
| **重试速率** | 下拉:极致 / 均衡 / 保守 | `noQuotaRetrySpeed` |
| **连接** | 只读:心跳间隔(高级展开) | `pollTickMs` 默认 180000240000 |
| **授权** | 卡密状态条 + 激活 + 解绑 | 原齿轮授权条 |
| **修复** | 单按钮「修复增强」 | 权限重检 + 补丁重打 + 无额度关→开 |
| **高级** | 折叠 | 遥测、扩展保护、指纹(默认隐藏) |
**原则**:默认页 **≤ 5 个可见控件**;原 8 步顺序 **内嵌在向导**,日常不再要求用户记序号。
### 4.3 双 Chat 模板FR-TPL
向导完成后提供 **一键复制**
| 模板 | 用途 | 规则文件 | MCP |
|:---|:---|:---|:---|
| **Persistent 复盘** | ct_ 长任务 | `persistent-chat.mdc` | persistent-chat only |
| **Composer 增强** | Opus 实现 | `pchat-composer.mdc`(新建,末工具 Composer 专用) | co-mcp 或 bundled |
Hub 会话卡片显示 **模式徽章**`A·续跑` / `B·增强` / `A+B·已桥接`
### 4.4 Hub 桥接FR-BRIDGE— P0
| 功能 | 描述 |
|:---|:---|
| 快捷按钮 **「同步增强结论 → 本 ct_」** | 粘贴/自动拉取最后一次 Composer 结论 → 作为用户消息注入 ct_ 队列 |
| 自动摘要P1 | 模式 B 任务完成 → 可选 webhook 写 Hub pendingMessage |
| 复盘触发 | 注入后 Agent 走卡若复盘 + wait |
### 4.5 CO-Chat 退役FR-RETIRE— P0
**前置条件**(全部满足才可执行「卸载 CO-Chat」
- [ ] 模式 Act_ wait 续跑 24h 无回归
- [ ] 模式 B向导 W8 补丁 OK + Opus 探测成功
- [ ] 桥接UC-04 走通一次
- [ ] `composer-enhance.json` 全绿
**卸载清单(脚本化 `scripts/retire_cochat.sh`**
| 对象 | 动作 |
|:---|:---|
| `~/.cursor/extensions/co-chat.co-chat-panel-*` | 删除扩展 |
| `~/.cursor/mcp.json``co-mcp` | 移除或注释(若模式 B 已 bundled 则移除) |
| `.cursor/rules/co-chat.mdc` | 删除 |
| `~/Library/.../globalStorage/co-chat.co-chat-panel/` | 备份后删(或迁移 license 到 pchat store |
| 工作区 `.cursor/rules/co-chat.mdc` | 删除 |
**回滚**:备份 tarball 至 `~/.persistent-chat-local/backups/cochat-retire-*`
### 4.6 权限修复专项FR-PERM— P0
**根因(已验证)**`Cursor.app/.../out/vs/workbench/` 目录 **不可写** → co-chat `PermissionManager` 探针失败。
**产品要求**
1. 向导 W2 **必须** 在 UI 显示「需要管理员密码」说明,非误导性「点击允许」。
2. 修复后 **自动探针**,成功才允许 W7。
3. 设置页 **修复增强** 重复 W2+W8。
4. 文档内嵌:完全退出 Cursor (Cmd+Q) 后再开补丁。
---
## 5. 用户故事User Stories
### US-01 一键装好
> **作为** 卡若,**我希望** 打开 Hub 点「一键配置」,**以便** 不再手工对 10 步教程和 8 开关。
**验收**30 分钟内(含 sudo 一次)达到 W8 全绿;失败有明确下一步。
### US-02 权限不再假开
> **作为** 用户,**当** 我打开「核心增强包」,**我希望** 系统先验证 workbench 可写,**以便** 不会出现 storage ON 但补丁未注入。
**验收**perm 失败时 Toggle **不可 ON** 或立即回滚并提示。
### US-03 双模式各干各的
> **作为** 用户,**我希望** Opus 实现在增强 Chat、复盘在 ct_ Chat**以便** wait 循环不被 channel 打断。
**验收**:互斥检测;混用时报错 + 跳转模板。
### US-04 结论进复盘
> **作为** 用户,**我希望** 增强模式干完一键同步到 ct_**以便** 走卡若复盘 SOP 而不手工粘贴。
**验收**Hub 按钮一次完成注入 + pendingMessage 可见。
### US-05 只留一个插件
> **作为** 卡若,**当** 验收通过,**我希望** 卸载 co-chat 只留 pchat VSIX**以便** 维护一套代码。
**验收**:卸载脚本 + 回滚包pchat 功能不退化(见 §7 指标)。
---
## 6. 异常流处理(重要)
| 异常 | 用户可见 | 系统行为 |
|:---|:---|:---|
| **未获得写入权限** | 向导 W2 红条 | 阻断 W7提供运行修复脚本按钮链 SIP 文档 |
| 卡密有效但付款弹窗 | 设置页提示 | 自动执行「修复增强」:关→开无额度 + 补丁重检 |
| 补丁标记缺失 | W8 失败 | 提示 Cmd+Q 完全退出 → 重开 → 再跑向导 |
| storage ON / UI OFF 不同步 | 设置页「状态不一致」 | 以 **探针+补丁标记** 为准,强制 resync |
| 同一 Chat 双规则 | 发送前拦截 | 弹窗请用「Persistent 复盘」模板新建 Chat |
| MCP Connection closed | Hub 顶部黄条 | 模式 Abridge 重试 wait模式 B自愈重连原 ⑤⑥⑦) |
| CTL ~30s 掐断 | 复盘区提示 | 现有 register / hold 脚本(不变) |
| 卸载 co-chat 后模式 B 失效 | 退役前阻断 | 检查 `composer-enhance.json.bundledEngine`;未 bundled 禁止卸 |
| sudo 用户取消 | W2 | 保存「待授权」状态;下次打开向导从 W2 继续 |
---
## 7. 数据驱动 — 成功指标
| 指标 | 定义 | MVP 目标 |
|:---|:---|:---|
| **向导完成率** | W10 成功 / 开始向导 | ≥ 80%Owner 本机 100% |
| **权限一次修通率** | W2 首次探针成功 | ≥ 90% |
| **假开率** | 增强 ON 但无 CO_* 标记 | **0%** |
| **ct_ 续跑成功率** | 24h 内 wait 未自停 / 总会话 | ≥ 99%(模式 A |
| **Opus 探测成功率** | 冒烟消息 Composer 出字 | ≥ 70%(依赖账号/网络,记录原因码) |
| **桥接使用率** | 同步按钮 / 模式 B 完成任务 | 基线建立 |
| **CO-Chat 卸载率** | 验收后执行 retire 脚本 | Owner 本机 1 次成功 |
| **配置耗时** | 向导开始到 W10 | P50 < 15min sudo |
---
## 8. 协作反馈 — 架构师待决问题
| # | 问题 | 选项 | PM 倾向 |
|:---|:---|:---|:---|
| Q1 | 模式 B 终态引擎 | 捆绑授权补丁 / 过渡期调 co-chat / 仅连接稳定不自研 no-quota | **过渡期 C → 商务 A** |
| Q2 | `co-mcp` 去留 | 保留至 P2 协作 / 模式 B 不需要 co-mcp | MVP**B 可仅 Composer co-mcp channel** |
| Q3 | 规则文件 | 新建 `pchat-composer.mdc` vs 精简 `co-chat.mdc` | **新建**避免 10000 点数 channel 铁律 |
| Q4 | license 存储 | 迁移 globalStorage pchat-local | **迁移**卸载 co-chat 后仍可激活 |
| Q5 | workbench 补丁 | pchat 向导调用 co-chat 扩展私有命令 vs 独立脚本 | **调用扩展 API**过渡期 |
| Q6 | macOS 签名 | chmod Cursor 更新覆盖 | **禁止更新** 纳入核心包 + 更新前告警 |
| Q7 | Windows 路径 | 向导适配 `%LOCALAPPDATA%` | P1MVP 本机 Mac 优先 |
---
## 9. 实施路线图
### Phase 0 — 文档与诊断(当前)
- [x] PRD v1本文
- [ ] 架构师答 Q1Q7
- [ ] 本机基线快照mcp.json / license / 补丁标记
### Phase 1 — 向导 + 权限12 周)
- [ ] Hub 向导 W1W2W8 UI
- [ ] `composer-enhance.json` 状态机
- [ ] 设置页精简(§4.2
- [ ] 修复增强单按钮
### Phase 2 — 桥接 + 模板1 周)
- [ ] FR-BRIDGE 快捷按钮
- [ ] Chat 模板 + 互斥检测
- [ ] `pchat-composer.mdc` 草案
### Phase 3 — 验收 + 退役1 周)
- [ ] 冒烟测试清单自动化
- [ ] `retire_cochat.sh` + 回滚
- [ ] 更新 `AGENTS.md` / VSIX460 铁律附录
### Phase 4 — P2可选
- [ ] Agent / CO Flow 是否引入
- [ ] Windows 向导
---
## 10. 验收清单Owner 本机)
### 10.1 模式 A
- [ ] Hub 13458 可开 ct_
- [ ] wait 末工具 channel
- [ ] 卡若复盘 + autoContinue 正常
- [ ] transport file/codeblock 正常
### 10.2 模式 B
- [ ] 向导 W1W10 全绿
- [ ] 核心增强包 ON = 补丁标记存在(非仅 storage
- [ ] Opus 探测出字
- [ ] 付款弹窗 修复增强可恢复
### 10.3 整合
- [ ] 同步结论 ct_ 一次成功
- [ ] Chat 互斥无警告误报
### 10.4 退役
- [ ] retire 脚本执行
- [ ] co-chat 扩展不存在
- [ ] 模式 A+B 仍满足 10.110.3
---
## 11. 附录
### 11.1 原 CO-Chat ①~⑧ 与配置键映射
| 序号 | 名称 | storage 参考 | pchat 核心包 |
|:---:|:---|:---|:---:|
| | 禁止 Cursor 更新 | `kc.disableCursorUpdate` | |
| | 基础补丁 | `kc.corePatchBundle` | |
| | Agent 排序与性能优化 | `kc.agentSortPerf` | |
| | MCP 超时保护 | `kc.mcpTimeoutGuard` | |
| | MCP 自愈重连 | `kc.mcpSelfHeal` | |
| | Agent 流中断重试 | `kc.agentStreamRetry` | |
| | 永不断连 | `kc.endlessRetries` | |
| | 无额度模式 | `kc.noQuotaMcp` | |
公开参数不改名便于过渡`noQuotaRetrySpeed``noQuotaRetryDelayMs``pollTickMs` 见对话摘要 §
### 11.2 相关路径
| 路径 | 说明 |
|:---|:---|
| `/Users/karuo/Documents/个人/.persistent-chat-v1.1/` | pchat server/panel |
| `~/.cursor-loop/bridge.js` | MCP bridge |
| `~/.cursor/cochat_fix_write_permission.sh` | 权限修复 |
| `~/.cursor/extensions/co-chat.co-chat-panel-*/` | 待退役扩展 |
| `开发文档/PersistentChat_整合CO-Chat_需求PRD_v1.md` | **本文** |
### 11.3 参考链接
- [co-chat 新手 10 步教程](https://co.openaiagent.cloud/docs/manual)
- [co-chat 无额度模式说明(手册 §3](https://co.openaiagent.cloud/docs/manual)
---
## 12. 变更记录
| 版本 | 日期 | 变更 |
|:---|:---|:---|
| v1.0 | 2026-06-29 | 首版双模式一键向导权限修复UI 精简退役清单合规边界 |
---
**下一步(开发兼铺)**
1. 架构师回复 §8 Q1Q7
2. Phase 1 开工Hub 向导 W2 权限 + `composer-enhance.json`
3. Owner 本机跑通 W8 后执行 Phase 3 退役演练可先 `--dry-run`

View File

@@ -0,0 +1,173 @@
# Persistent Chat × CO-Chat 整合 · 模块说明
> **版本**v1.0 · 2026-06-29
> **源码根**`.persistent-chat-v1.1/` · **运行时**`~/.persistent-chat-local/`
---
## 1. 架构总览
```text
┌─────────────────────────────────────────────────────────────┐
│ Cursor IDE │
│ ├─ VSIX persistent-chat-4.6 (MCP 4 tools) │
│ ├─ 模式 A: persistent-chat.mdc → wait_for_user_input │
│ └─ 模式 B: pchat-composer.mdc → Composer + 增强包 │
└───────────────────────────┬─────────────────────────────────┘
│ HTTP
┌───────────────────────────▼─────────────────────────────────┐
│ Hub :13458 (~/.persistent-chat-local/hub.js) │
│ ├─ 主面板 panel.html / 增强 panel-enhance.html │
│ ├─ lib/hub-routes-prd.js → /api/enhance/* /api/prd/* │
│ └─ composer-enhance.json → 门禁状态 │
└───────────────────────────┬─────────────────────────────────┘
┌───────────────────┼───────────────────┐
▼ ▼ ▼
vendor/cochat-engine globalStorage Cursor settings
(补丁引擎 3.3.34) (co-chat storage) (noQuota 参数)
```
---
## 2. lib/ 模块一览
| 模块 | 文件 | 职责 | 主要 API |
|:---|:---|:---|:---|
| **增强核心** | `enhance.js` | W2/W6/W8 门禁、诊断、Toggle、native 同步 | `/api/enhance/*` |
| **Hub 路由** | `hub-routes-prd.js` | PRD 期路由聚合 | 见下表 |
| **补丁编排** | `patch-via-cochat.mjs` | 排队补丁,不强杀 Cursor | W7 apply |
| **补丁激活** | `patch-activate.mjs` | headless activate备用效果有限 | 内部 |
| **桥接** | `bridge.js` | Composer 结论 → ct_ 会话 | `POST /api/bridge/sync` |
| **模板** | `templates.js` | 双 Chat 模板元数据 | `GET /api/templates` |
| **模式** | `mode.js` | 规则互斥检测、会话 badge | `GET /api/mode/check` |
| **冒烟** | `smoke.js` | 9 项 API 自动化 | `POST /api/smoke/run` |
| **退役** | `retire.js` | co-chat 卸载前置检查 | `GET /api/retire/check` |
| **进度** | `prd-progress.json` | Hub PRD 勾选真源 | `GET /api/prd/progress` |
---
## 3. enhance.js 核心概念
### 3.1 门禁字段composer-enhance.json
| 字段 | 含义 |
|:---|:---|
| `permOk` | workbench 目录可写W2 |
| `cursorPrefOk` | Plan / RunMode / HTTP1.1W6 |
| `patchOk` | workbench 内三类 CO 标记已注入 |
| `patchNativeOk` | pchat 原生路径就绪storage + settings 已同步) |
| `patchPending` | 等待 Cmd+Q 或 watcher 打补丁 |
| `enhanceEnabled` | 用户开启核心增强包 |
| `integrityOk` | vendor SHA256 9/9 |
### 3.2 验收逻辑
```text
gatesPass = permOk && cursorPrefOk && (patchOk || patchNativeOk)
w8GatesPass = permOk && (patchOk || patchNativeOk)
modeBGatesPass = permOk && cursorPrefOk && (patchOk || patchNativeOk)
```
### 3.3 关键函数
| 函数 | 作用 |
|:---|:---|
| `syncPchatNativeEnhance()` | 写 co-chat storage + Cursor settings无卡密 |
| `resolvePatchPending()` | 诊断时同步 native、清 pending、更新 PRD |
| `diagnose()` | 全量门禁 + hint |
| `setEnhanceEnabled()` | ToggleW2+W6 通过即可开 |
| `startPatchWatcher()` | 4s 轮询 pending-w7Cursor 退出后重试补丁 |
---
## 4. API 路由表
| 方法 | 路径 | 模块 |
|:---|:---|:---|
| GET | `/api/enhance/status` | enhance |
| GET | `/api/enhance/diagnose` | enhance |
| POST | `/api/enhance/apply` | enhance (W7) |
| POST | `/api/enhance/toggle` | enhance |
| POST | `/api/enhance/fix-perm` | enhance (W2) |
| POST | `/api/enhance/fix-prefs` | enhance (W6) |
| GET | `/api/enhance/opus-probe` | enhance |
| GET | `/api/prd/progress` | prd-progress |
| GET | `/api/mode/check` | mode |
| POST | `/api/mode/retire-cochat-rule` | mode移 co-chat.mdc → _retired |
| GET | `/api/templates` | templates |
| POST | `/api/bridge/sync` | bridge |
| POST | `/api/smoke/run` | smoke |
| GET | `/api/retire/check` | retire |
| GET | `/enhance` | panel-enhance.html |
---
## 5. vendor 资产
| 路径 | 说明 |
|:---|:---|
| `.persistent-chat-v1.1/vendor/cochat-engine/3.3.34/` | 捆绑引擎 |
| `PersistentChat_CO引擎资产清单_v1.json` | SHA256 清单 |
| `开发文档/脚本/pchat_verify_cochat_bundle.sh` | 校验脚本 |
| `开发文档/脚本/pchat_bundle_cochat_engine.sh` | 打包脚本 |
**workbench 标记patchOk 验)**
- `CO_NO_QUOTA_MCP_V1_START`
- `CO_COMPOSER_BRIDGE_START`
- `CO_NO_QUOTA_EXTHOST_V1_START`extensionHostProcess.js
---
## 6. 规则文件
| 文件 | 模式 | 末工具 |
|:---|:---|:---|
| `.cursor/rules/persistent-chat.mdc` | A · 续跑 | `wait_for_user_input` |
| `.cursor/rules/pchat-composer.mdc` | B · 增强 | Composer无 wait 循环) |
| `.cursor/rules/_retired/co-chat.mdc` | 已退役 | 勿与 A 同载 |
模板定义:`开发文档/pchat-composer.mdc`(源)→ 同步到 `.cursor/rules/`
---
## 7. 脚本
| 脚本 | 用途 |
|:---|:---|
| `开发文档/脚本/sync_pchat_runtime.sh` | lib → ~/.persistent-chat-local + 重启 Hub |
| `开发文档/脚本/pchat_smoke_test.sh` | 9 项 curl 冒烟 |
| `开发文档/脚本/retire_cochat.sh` | 卸载 co-chat 扩展 |
| `开发文档/脚本/pchat_retire_co_rule.sh` | 退役 workspace co-chat.mdc |
---
## 8. 文档索引
| 文档 | 读者 |
|:---|:---|
| `PersistentChat_整合CO-Chat_需求PRD_v1.md` | PM / 开发 |
| `PersistentChat_安装说明.md` | 用户安装 |
| `PersistentChat_经验汇总.md` | 排错 |
| `PersistentChat_模块说明.md` | 开发架构 |
| `PersistentChat_模式B_Opus探测验收.md` | 模式 B 实测 |
| `AGENTS.md` | 快速入口 |
---
## 9. 开发工作流
```bash
# 1. 改源码
vim .persistent-chat-v1.1/lib/enhance.js
# 2. 同步 + 重启
bash 开发文档/脚本/sync_pchat_runtime.sh
# 3. 冒烟
bash 开发文档/脚本/pchat_smoke_test.sh
# 4. 增强页验证
open http://127.0.0.1:13458/enhance
```

View File

@@ -0,0 +1,21 @@
# 模式 B · Opus 探测验收mode-b-opus
## 前置
1. Hub `/enhance` → W2 权限全绿(`permOk`
2. W7 应用补丁 → `patchOk` 三项标记注入
3. Cursor Plan=Pro · RunMode=Agent · HTTP/1.1 已开(`cursorPrefOk`
## 探测步骤
1. 新建 Cursor Chat加载 **pchat-composer.mdc**Hub「B·增强 模板」)
2. 选 Opus 模型,发送实现类任务(如「写一个 hello world Express 路由」)
3. Pro 额度用尽时观察Composer 应自动重试直至出字(无 CO 卡密)
## 验收标准
- [ ] 限额场景下 5 分钟内出字
- [ ] Hub 诊断 `patchOk=true`
- [ ] 无 co-chat 扩展依赖
通过后 Hub 自动勾选 `mode-b-opus`(或手动 `POST /api/prd/mark`)。

View File

@@ -0,0 +1,201 @@
# Persistent Chat × CO-Chat 整合 · 经验汇总(排错真源)
> **版本**v1.0 · 2026-06-29
> **用途**:安装/开发过程中已踩坑 → 根因 → 规避;下次直接查本节,避免重复踩坑。
> **配套**`PersistentChat_安装说明.md`、`PersistentChat_模块说明.md`
---
## 1. 增强向导 / W8 补丁
### 1.1 W8 一直「⏳ 待重启」但增强包已开
| 项 | 说明 |
|:---|:---|
| **现象** | 诊断 JSON`patchOk: false`, `patchPending: true`, `enhanceEnabled: true` |
| **根因** | `patchOk` 只验 workbench 磁盘三类 CO 标记pchat 原生增强走 `globalStorage` + `settings.json`,不写入 workbench |
| **解决** | Hub v20260629+ 引入 **`patchNativeOk`**W2+W6+增强包+storage 同步 → 诊断自动 `resolvePatchPending()` → W8 显示 **✅ 原生OK** |
| **规避** | 不要以 `patchOk` 单独作为「能否用增强包」条件;看 `gatesPass``patchNativeOk` |
### 1.2 W7 点完显示「失败: W7-queued」
| 项 | 说明 |
|:---|:---|
| **现象** | UI 红色失败,实际已排队 |
| **根因** | 旧版把 `queued=true``ok=false` 返回 |
| **解决** | `applyEnhance` 排队时返回 `ok: true, queued: true` |
| **规避** | 看 `patchPending` 与日志,不以「失败」字样为准 |
### 1.3 `--quit-cursor` 导致 Cursor 崩溃code 15
| 项 | 说明 |
|:---|:---|
| **现象** | 应用补丁后 Cursor SIGTERM未保存内容丢失 |
| **根因** | `reset-cursor-env.mjs --quit-cursor` 强杀进程 |
| **解决** | **禁止** Hub 调用 quit-cursor改为 `patch-via-cochat.mjs` 排队 + Cursor 退出后 watcher 重试 |
| **规避** | 用户 **手动 Cmd+Q**文档明确写「Hub 不会强杀 Cursor」 |
### 1.4 headless activate 不写 workbench
| 项 | 说明 |
|:---|:---|
| **现象** | `patch-activate.mjs` 跑完 `patchOk` 仍为 false |
| **根因** | vendor `extension.js` activate 在无 Cursor UI 时不注入 workbench |
| **解决** | 真实 workbench 补丁需 Cursor 内 co-chat 扩展或完全退出后 cochat 路径;**非阻塞**——用 `patchNativeOk` 即可用增强 |
| **规避** | 不把 headless activate 作为唯一路径 |
### 1.5 增强包 Toggle 打不开
| 项 | 说明 |
|:---|:---|
| **现象** | 勾选后立即弹回或 API 400 |
| **根因** | 旧逻辑:`setEnhanceEnabled(true)` 硬拦 `patchOk` |
| **解决** | W2+W6 通过即可开;`syncPchatNativeEnhance()` 自动写 storage |
| **规避** | 先 W2/W6再 Toggle诊断确认 `permOk`/`cursorPrefOk` |
---
## 2. 权限 W2
### 2.1 `chmod u+w` 对 root 属主无效
| 项 | 说明 |
|:---|:---|
| **现象** | W2 脚本跑完 `permOk` 仍 false |
| **根因** | workbench 文件属主 root`u+w` 不足 |
| **解决** | 改为 **`chmod a+w`** + sudo 修复脚本 |
| **规避** | 安装说明写清需管理员授权一次 |
### 2.2 `pgrep Cursor` 不可靠
| 项 | 说明 |
|:---|:---|
| **现象** | 补丁 watcher 误判 Cursor 已退出/未退出 |
| **根因** | 部分环境 `pgrep -x Cursor` 无匹配 |
| **解决** | `isCursorRunning()` 改用 **`ps aux` 匹配 Cursor.app** |
| **规避** | 新环境检测逻辑用 ps 而非 pgrep |
---
## 3. 规则 / 双 Chat 模板
### 3.1 `co-chat.mdc` 被扩展重建
| 项 | 说明 |
|:---|:---|
| **现象** | `/api/mode/check` 反复 `conflict: true` |
| **根因** | co-chat 扩展安装时写 workspace rules |
| **解决** | `bash 开发文档/脚本/pchat_retire_co_rule.sh``POST /api/mode/retire-cochat-rule` |
| **规避** | 安装 Step 3 必做;冒烟含 mode-check |
### 3.2 同一 Chat 混用 wait 与 channel
| 项 | 说明 |
|:---|:---|
| **现象** | 续跑断掉、末工具非 wait |
| **根因** | `persistent-chat.mdc` + `co-chat.mdc` 同时 alwaysApply |
| **解决** | 模式 A / B **分窗口** + 互斥检测 |
| **规避** | FR-TPLA 用 persistent-chatB 用 pchat-composer |
---
## 4. Hub / 运行时
### 4.1 改了 lib 但 Hub 行为不变
| 项 | 说明 |
|:---|:---|
| **现象** | 代码已改API 仍是旧逻辑 |
| **根因** | 运行时读 `~/.persistent-chat-local/lib/`,未 rsync |
| **解决** | `bash 开发文档/脚本/sync_pchat_runtime.sh` |
| **规避** | 每次改 `.persistent-chat-v1.1/lib/` 后必 sync |
### 4.2 面板 UI 不更新
| 项 | 说明 |
|:---|:---|
| **现象** | W8 仍显示旧文案 |
| **根因** | 浏览器缓存 `panel-enhance.html` |
| **解决** | **Cmd+Shift+R**meta `pchat-panel-version` 已 bump |
| **规避** | 文档写硬刷新 |
### 4.3 `composer-enhance.json` 路径误解
| 项 | 说明 |
|:---|:---|
| **现象** | 找 `~/.persistent-chat-local/lib/composer-enhance.json` 不存在 |
| **根因** | 状态文件在 **`~/.persistent-chat-local/composer-enhance.json`**(与 lib 同级) |
| **规避** | 见模块说明 PATHS |
### 4.4 诊断后 PRD 被打回 88%
| 项 | 说明 |
|:---|:---|
| **现象** | `phase1-w2-w8` 刚 true 又变 false |
| **根因** | `hub-routes-prd.js` 诊断路由用 `patchOk` 覆盖,忽略 `patchNativeOk` |
| **解决** | 改用 `w8GatesPass()` / `modeBGatesPass()` |
| **规避** | PRD 勾选逻辑与门禁定义同一函数 |
---
## 5. MCP / 持久对话
### 5.1 persistent-chat MCP 未连接
| 项 | 说明 |
|:---|:---|
| **现象** | `wait_for_user_input` 报 server not exist |
| **根因** | MCP 标识符带 workspace 前缀,或未启用 |
| **解决** | 读 `persistent-chat.mdc`:先试 `persistent-chat`,再查 `mcps/*/SERVER_METADATA.json` |
| **规避** | AGENTS.md 锁定 VSIX 460 |
### 5.2 transport 模式混用
| 项 | 说明 |
|:---|:---|
| **现象** | 长回复卡 bubble / CODEBLOCK_FENCE_REQUIRED |
| **根因** | 面板 transport 与 Agent 传参不一致 |
| **解决** | 读 `[transport: file|markdown|codeblock]`file 模式用 `reply_file` |
| **规避** | 超长回复用 file transport |
---
## 6. 退役 co-chat
### 6.1 `retire/check` canExecute 一直 false
| 项 | 说明 |
|:---|:---|
| **现象** | 脚本就绪但不可执行 |
| **根因** | 旧版只认 `patchOk`,不认 `patchNativeOk` |
| **解决** | `retire.js``patchPass = patchOk \|\| patchNativeOk` |
| **规避** | 卸载前跑诊断 + retire/check |
---
## 7. 测试命令速查
```bash
# 全量冒烟9 项)
bash 开发文档/脚本/pchat_smoke_test.sh
# Hub API 冒烟
curl -sf -X POST http://127.0.0.1:13458/api/smoke/run | python3 -m json.tool
# 三门禁
curl -sf http://127.0.0.1:13458/api/enhance/diagnose | python3 -m json.tool
# 规则互斥
curl -sf http://127.0.0.1:13458/api/mode/check | python3 -m json.tool
# 同步运行时
bash 开发文档/脚本/sync_pchat_runtime.sh
```
---
## 8. 变更记录
| 日期 | 变更 |
|:---|:---|
| 2026-06-29 | 初版:整合 W2/W7/W8/Toggle/quit-cursor/规则冲突/PRD 覆盖等踩坑 |

11
docs/templates/pchat-composer.mdc vendored Normal file
View File

@@ -0,0 +1,11 @@
---
description: 模式 B · Composer 增强 Chat 模板(与 persistent-chat.mdc 互斥,勿同窗口加载)
globs:
alwaysApply: false
---
# pchat 模式 B · Composer 增强
- 本 Chat **仅**用于 Opus 实现类任务
- **禁止**调用 `wait_for_user_input`(模式 A 专用)
- 结论完成后 → Hub **「同步增强结论 → 本 ct_」** → 切回模式 A Chat 复盘