🔄 卡若AI 重建本地主仓 | 保留有效小文件

This commit is contained in:
Manus AI
2026-07-19 00:21:31 +08:00
commit df98da40cc
7617 changed files with 5180190 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
---
## name: 卡资(金)负责人管理技能
description: 卡资的人设、五席编制、所管成员与技能分配。执行映射以金仓/金盾物理目录为准,路径不变。
triggers: 卡资/金组/基础设施/巡检/备份
owner: 卡若
group: 金
version: "5.1"
updated: "2026-03-29"
# 卡资(金)— 负责人 SKILL
> 本文件 = 负责人人设 + **五席编制**(每组固定 5 席人设)+ 执行映射。**技能真源**`SKILL_REGISTRY.md`(成员列仍为 **金仓 / 金盾**,路径不迁)。
---
## 一、负责人人设
| 项目 | 内容 |
| ------------- | ---------------------------------------------------------------------------------- |
| **人名** | 卡资 |
| **五行** | 金 |
| **角色定位** | 基础设施守护者、金组组长 |
| **口头禅** | "稳了。" |
| **MBTI** | ISTJ检查者 |
| **性格** | 可靠、负责、注重规则和细节;猫头鹰型,精确谨慎 |
| **核心能力(不下放)** | 基础设施巡检、风险预警、应急响应 |
| **编制** | **五席**(人设名)→ **执行**仅 `**@金仓`** 或 `**@金盾**`;全表见 `**运营中枢/工作台/五行编制_五席人设与执行映射.md**` §一 |
**分配关系**卡若AI → 卡资 → 按席分工思考 → **落地执行 `@金仓` / `@金盾`** → 读注册表路径下 SKILL.md。
**本目录结构**
```
01_卡资/
├── SKILL.md
├── 编制_五席/ # 物理人设 S01S05编-金-*
├── 金仓_存储备份/
└── 金盾_数据安全/
```
---
## 二、五席角色总览(金组)
**团队定位**:守护数字资产,确保系统稳定。
**记忆意象**:金库守卫者,五钥分职:库政、网卫、算巡、密栈、交付。
| 席名(人设) | 执行映射 | 子五行 | MBTI | PDP 倾向 | 协同要点 |
| --------- | ---- | --- | ---- | ------- | ------------- |
| **金仓·库政** | @金仓 | 金·藏 | ISFJ | 考拉 + C | 与密栈对齐备份策略 |
| **金仓·网卫** | @金仓 | 金·络 | ISTP | 猫头鹰 + S | 与算巡联查、与交付联调环境 |
| **金仓·算巡** | @金仓 | 金·察 | INTJ | 猫头鹰 + C | 告警驱动密栈复核 |
| **金盾·密栈** | @金盾 | 金·密 | ISTJ | 猫头鹰 + C | 敏感数据与库安全 |
| **金盾·交付** | @金盾 | 金·钥 | ESTJ | 老虎 + D | 私域与一键部署交付 |
**技能编号与路径**:一律查 `**SKILL_REGISTRY.md`**「金组」表G01G22 等),**不按席改路径**。
```
卡资(金)核心:巡检、预警、应急
├── 执行面 A金仓_存储备份/ ← 库政·网卫·算巡
└── 执行面 B金盾_数据安全/ ← 密栈·交付
```
---
## 三、管理制度与协作场景
**制度**定期巡检预防为主文档先行操作留痕风险操作必须先备份异常立即汇报周五提交周报。招募标准ISTJ/ISFJ/ESTJ/ISTP猫头鹰型/考拉型C 型或 S 型。
**协作场景(服务器异常告警)**
1. **算巡**视角:金仓侧监测 → 快速诊断
2. **密栈**视角:通知金盾检查数据库与安全面
3. **库政**视角:金仓同步备份最新数据
4. 卡资汇总 → 上报卡若AI
---
## 四、执行日志与信条
**执行日志**`02_卡人/水溪_整理归档/执行日志/`
**卡资信条**:稳了,才能放心

View File

@@ -0,0 +1,5 @@
# 卡资(金) · 编制_五席物理人设目录
本目录下 **S01S05** 各一席,每席 `SKILL.md` = **人设龛**;业务执行仍按 **`SKILL_REGISTRY.md`** 成员列进入 **`成员名_业务目录/`**。
总表:`运营中枢/工作台/五行编制_五席人设与执行映射.md`

View File

@@ -0,0 +1,44 @@
---
name: 金仓·库政(执行人员)
description: 五行执行人员可直接挂载并执行Skill兼容能力目录 @金仓。触发词:金仓库政、库政席、金席库政、卡资金库政…
triggers: 金仓库政、库政席、金席库政、卡资金库政
owner: 金仓·库政
group: 金
skill_mount_source: 金仓
executor_type: direct
version: "1.0"
updated: "2026-03-29"
memory_palace_path: 卡若记忆宫殿/金殿/编制厢/金仓库政
---
# 金仓·库政 — 执行人员
> **物理分类**:本文件位于 **`编制_五席/S01_金仓库政/`**可直接接任务、挂载Skill并执行同时保留**协同与排班口径**。
> **Skill挂载**:执行前按任务从 **`SKILL_REGISTRY.md`**,直接读取并执行 **`01_卡资/金仓_存储备份/`** 下对应 SKILL兼容能力目录**金仓**)。
## 人设卡
| 项目 | 内容 |
|:---|:---|
| **执行人员** | 金仓·库政 |
| **Skill挂载来源** | **@金仓**(兼容目录别名) |
| **子五行** | 金·藏 |
| **MBTI** | ISFJ |
| **PDP/行为** | 考拉 + C 谨慎 |
| **协同** | 与金盾·密栈对齐备份策略;与算巡联动巡检结果落盘 |
## 技能锚(查注册表)
金组 G存储、Gitea、文件、照片、聊天记录、容灾等见注册表金仓行
## 执行步骤Agent
1. 用本席触发词命中编制需求时,先读本文件对齐人设与边界。
2.**`SKILL_REGISTRY.md`** 按关键词定位 **G/W/M/F/E** 编号与 **SKILL 路径**(成员 **金仓**)。
3. 打开路径所指 **`SKILL.md`**,按其中 Steps 执行;**不得**因编制席而改写注册表路径。
4. 多席协作时见 **`运营中枢/工作台/五行编制_五席人设与执行映射.md`**。
## Files
- 本席人设:`编制_五席/S01_金仓库政/SKILL.md`
- 总表:`运营中枢/工作台/五行编制_五席人设与执行映射.md`

View File

@@ -0,0 +1,44 @@
---
name: 金仓·网卫(执行人员)
description: 五行执行人员可直接挂载并执行Skill兼容能力目录 @金仓。触发词:金仓网卫、网卫席、金络席…
triggers: 金仓网卫、网卫席、金络席
owner: 金仓·网卫
group: 金
skill_mount_source: 金仓
executor_type: direct
version: "1.0"
updated: "2026-03-29"
memory_palace_path: 卡若记忆宫殿/金殿/编制厢/金仓网卫
---
# 金仓·网卫 — 执行人员
> **物理分类**:本文件位于 **`编制_五席/S02_金仓网卫/`**可直接接任务、挂载Skill并执行同时保留**协同与排班口径**。
> **Skill挂载**:执行前按任务从 **`SKILL_REGISTRY.md`**,直接读取并执行 **`01_卡资/金仓_存储备份/`** 下对应 SKILL兼容能力目录**金仓**)。
## 人设卡
| 项目 | 内容 |
|:---|:---|
| **执行人员** | 金仓·网卫 |
| **Skill挂载来源** | **@金仓**(兼容目录别名) |
| **子五行** | 金·络 |
| **MBTI** | ISTP |
| **PDP/行为** | 猫头鹰 + S 稳定 |
| **协同** | 与算巡联查;与金盾·交付联调环境 |
## 技能锚(查注册表)
金组 G服务器、NAS、局域网、设备、iCloud、算力等
## 执行步骤Agent
1. 用本席触发词命中编制需求时,先读本文件对齐人设与边界。
2.**`SKILL_REGISTRY.md`** 按关键词定位 **G/W/M/F/E** 编号与 **SKILL 路径**(成员 **金仓**)。
3. 打开路径所指 **`SKILL.md`**,按其中 Steps 执行;**不得**因编制席而改写注册表路径。
4. 多席协作时见 **`运营中枢/工作台/五行编制_五席人设与执行映射.md`**。
## Files
- 本席人设:`编制_五席/S02_金仓网卫/SKILL.md`
- 总表:`运营中枢/工作台/五行编制_五席人设与执行映射.md`

View File

@@ -0,0 +1,44 @@
---
name: 金仓·算巡(执行人员)
description: 五行执行人员可直接挂载并执行Skill兼容能力目录 @金仓。触发词:金仓算巡、算巡席、巡检席…
triggers: 金仓算巡、算巡席、巡检席
owner: 金仓·算巡
group: 金
skill_mount_source: 金仓
executor_type: direct
version: "1.0"
updated: "2026-03-29"
memory_palace_path: 卡若记忆宫殿/金殿/编制厢/金仓算巡
---
# 金仓·算巡 — 执行人员
> **物理分类**:本文件位于 **`编制_五席/S03_金仓算巡/`**可直接接任务、挂载Skill并执行同时保留**协同与排班口径**。
> **Skill挂载**:执行前按任务从 **`SKILL_REGISTRY.md`**,直接读取并执行 **`01_卡资/金仓_存储备份/`** 下对应 SKILL兼容能力目录**金仓**)。
## 人设卡
| 项目 | 内容 |
|:---|:---|
| **执行人员** | 金仓·算巡 |
| **Skill挂载来源** | **@金仓**(兼容目录别名) |
| **子五行** | 金·察 |
| **MBTI** | INTJ |
| **PDP/行为** | 猫头鹰 + C |
| **协同** | 告警驱动金盾·密栈复核 |
## 技能锚(查注册表)
金组 G系统监控、磁盘清理、风险巡检
## 执行步骤Agent
1. 用本席触发词命中编制需求时,先读本文件对齐人设与边界。
2.**`SKILL_REGISTRY.md`** 按关键词定位 **G/W/M/F/E** 编号与 **SKILL 路径**(成员 **金仓**)。
3. 打开路径所指 **`SKILL.md`**,按其中 Steps 执行;**不得**因编制席而改写注册表路径。
4. 多席协作时见 **`运营中枢/工作台/五行编制_五席人设与执行映射.md`**。
## Files
- 本席人设:`编制_五席/S03_金仓算巡/SKILL.md`
- 总表:`运营中枢/工作台/五行编制_五席人设与执行映射.md`

View File

@@ -0,0 +1,44 @@
---
name: 金盾·密栈(执行人员)
description: 五行执行人员可直接挂载并执行Skill兼容能力目录 @金盾。触发词:金盾密栈、密栈席…
triggers: 金盾密栈、密栈席
owner: 金盾·密栈
group: 金
skill_mount_source: 金盾
executor_type: direct
version: "1.0"
updated: "2026-03-29"
memory_palace_path: 卡若记忆宫殿/金殿/编制厢/金盾密栈
---
# 金盾·密栈 — 执行人员
> **物理分类**:本文件位于 **`编制_五席/S04_金盾密栈/`**可直接接任务、挂载Skill并执行同时保留**协同与排班口径**。
> **Skill挂载**:执行前按任务从 **`SKILL_REGISTRY.md`**,直接读取并执行 **`01_卡资/金盾_数据安全/`** 下对应 SKILL兼容能力目录**金盾**)。
## 人设卡
| 项目 | 内容 |
|:---|:---|
| **执行人员** | 金盾·密栈 |
| **Skill挂载来源** | **@金盾**(兼容目录别名) |
| **子五行** | 金·密 |
| **MBTI** | ISTJ |
| **PDP/行为** | 猫头鹰 + C |
| **协同** | 接库政备份策略;敏感变更先备份 |
## 技能锚(查注册表)
金组 G数据库安全、微信安全解析等
## 执行步骤Agent
1. 用本席触发词命中编制需求时,先读本文件对齐人设与边界。
2.**`SKILL_REGISTRY.md`** 按关键词定位 **G/W/M/F/E** 编号与 **SKILL 路径**(成员 **金盾**)。
3. 打开路径所指 **`SKILL.md`**,按其中 Steps 执行;**不得**因编制席而改写注册表路径。
4. 多席协作时见 **`运营中枢/工作台/五行编制_五席人设与执行映射.md`**。
## Files
- 本席人设:`编制_五席/S04_金盾密栈/SKILL.md`
- 总表:`运营中枢/工作台/五行编制_五席人设与执行映射.md`

View File

@@ -0,0 +1,44 @@
---
name: 金盾·交付(执行人员)
description: 五行执行人员可直接挂载并执行Skill兼容能力目录 @金盾。触发词:金盾交付、交付席、一键部署席…
triggers: 金盾交付、交付席、一键部署席
owner: 金盾·交付
group: 金
skill_mount_source: 金盾
executor_type: direct
version: "1.0"
updated: "2026-03-29"
memory_palace_path: 卡若记忆宫殿/金殿/编制厢/金盾交付
---
# 金盾·交付 — 执行人员
> **物理分类**:本文件位于 **`编制_五席/S05_金盾交付/`**可直接接任务、挂载Skill并执行同时保留**协同与排班口径**。
> **Skill挂载**:执行前按任务从 **`SKILL_REGISTRY.md`**,直接读取并执行 **`01_卡资/金盾_数据安全/`** 下对应 SKILL兼容能力目录**金盾**)。
## 人设卡
| 项目 | 内容 |
|:---|:---|
| **执行人员** | 金盾·交付 |
| **Skill挂载来源** | **@金盾**(兼容目录别名) |
| **子五行** | 金·钥 |
| **MBTI** | ESTJ |
| **PDP/行为** | 老虎 + D |
| **协同** | 与网卫联调;与卡火交接网关类联调 |
## 技能锚(查注册表)
金组 G存客宝、远程部署、Vercel 等
## 执行步骤Agent
1. 用本席触发词命中编制需求时,先读本文件对齐人设与边界。
2.**`SKILL_REGISTRY.md`** 按关键词定位 **G/W/M/F/E** 编号与 **SKILL 路径**(成员 **金盾**)。
3. 打开路径所指 **`SKILL.md`**,按其中 Steps 执行;**不得**因编制席而改写注册表路径。
4. 多席协作时见 **`运营中枢/工作台/五行编制_五席人设与执行映射.md`**。
## Files
- 本席人设:`编制_五席/S05_金盾交付/SKILL.md`
- 总表:`运营中枢/工作台/五行编制_五席人设与执行映射.md`

View File

@@ -0,0 +1,134 @@
---
name: Codex对话状态修复
description: 修复 Codex Desktop 侧栏项目、置顶、session_index、state_5.sqlite、空 rollout 与历史对话可见性。触发词Codex侧栏修复、Codex对话恢复、Codex项目分类、rollout缺失、state_5.sqlite、session_index、thread-store internal error。
group: 金
triggers: Codex侧栏修复、Codex对话恢复、Codex项目分类、Codex旧对话、Codex置顶、rollout缺失、rollout为空、empty rollout、thread-store internal error、session_index、state_5.sqlite、codex-global-state、repair-backups
owner: 金仓
memory_palace_path: 卡若记忆宫殿/金殿/金仓厢/Codex对话状态修复
memory_palace_slot: Codex 本地对话、项目侧栏和状态库修复入口
version: "1.0"
updated: "2026-07-05"
---
# Codex对话状态修复
> 金仓 · Codex Desktop 本地状态修复入口。只处理 Codex不优化 Cursor。用于侧栏项目错乱、旧对话缺失、置顶不显示、`thread-store internal error`、空 `rollout-*.jsonl`、`session_index.jsonl` / `state_5.sqlite` / `.codex-global-state.json` 不一致等问题。
## 一句话
先备份,再查 `session_index.jsonl``state_5.sqlite``.codex-global-state.json``process_manager/chat_processes.json``rollout-*.jsonl`,按“恢复并分类”修复 Codex Desktop 侧栏可用性;历史正文真缺失时只建可读 placeholder不冒充原始内容。
## 触发场景
| 现象 | 判断 |
|:---|:---|
| 左侧项目下对话丢失、误归类、全部挂到某项目 | 走本 Skill |
| 置顶对话消失或勾选状态不对 | 走本 Skill |
| 打开线程报 `thread-store internal error` | 优先查空 rollout |
| `missing rollout references``rollout is empty` | 走补 placeholder / 修索引 |
| 用户说“都恢复并分类,不是隐藏” | 目标是侧栏可用,不是清理坏引用 |
## 红线
- 不删除原始 `rollout-*.jsonl``session_index.jsonl``state_5.sqlite``.codex-global-state.json`
- 不执行 `git reset --hard`、不清 Time Machine、不删快照。
- 不把 placeholder 说成“恢复原始聊天内容”;只能说“可打开占位”。
- 不把 Cursor 的 `state.vscdb``.cursor/rules` 当成修复对象;本 Skill 只管 Codex。
## Phase 0备份
在第一次改任何 Codex 状态文件前,创建时间戳备份目录:
```bash
ts="$(date +%Y%m%d-%H%M%S)"
backup="/Users/karuo/.codex/repair-backups/${ts}-codex-state-repair"
mkdir -p "$backup"
cp /Users/karuo/.codex/session_index.jsonl "$backup/" 2>/dev/null || true
cp /Users/karuo/.codex/state_5.sqlite "$backup/" 2>/dev/null || true
cp /Users/karuo/.codex/.codex-global-state.json "$backup/" 2>/dev/null || true
cp /Users/karuo/.codex/process_manager/chat_processes.json "$backup/" 2>/dev/null || true
```
## Phase 1定位真实状态
1. 统计 `session_index.jsonl` 记录数、重复 thread、缺失 rollout、空 rollout。
2.`state_5.sqlite` 里线程、项目、置顶状态与 `session_index.jsonl` 是否一致。
3.`.codex-global-state.json` 是否仍保留旧项目挂载。
4.`process_manager/chat_processes.json` 是否引用已不存在或空 rollout。
5. 写一份报告到备份目录,例如 `codex-state-repair-report.json`
## Phase 2修复策略
| 问题 | 动作 |
|:---|:---|
| 缺失 rollout 引用 | 若能从索引或记忆找到摘要,生成 readable placeholder否则标记不可恢复 |
| 空 `rollout-*.jsonl` | 写入最小有效 JSONL 占位,避免 Desktop 读线程报错 |
| 项目误分类 | 按标题、cwd、首条用户消息、记忆摘要重新分桶 |
| 置顶丢失 | 同步修 `state_5.sqlite` 与 global state 的 pinned/top 字段 |
| 修完仍不显示 | 把重启 Codex Desktop / reload state 作为验收步骤 |
## Phase 3项目分类建议
优先保留用户真实业务桶:
- 卡若AI / Codex管理
- Soul / SOUL创业派对
- 私域银行 / 存客宝 / 工作手机
- 厦门房产
- 域名注册
- MBTI
- 玩值电竞
- 服务器管理 / NAS
- 个人项目
分类证据优先级:
1. 当前 `cwd`
2. 会话标题
3. 首条用户消息
4. rollout 摘要
5. memory / repair report 中的旧分类记录
## Phase 4验收
必须至少验证:
- `missing rollout references = 0`
- 空 rollout 已处理或已列入不可恢复清单
- 误挂大项目的对话数量回落到合理范围
- 关键项目侧栏能打开
- 修复报告写入 `/Users/karuo/.codex/repair-backups/`
- 若 Desktop 仍缓存旧状态,明确提示重启 Codex Desktop 再验
## 常用证据入口
| 文件/目录 | 用途 |
|:---|:---|
| `/Users/karuo/.codex/session_index.jsonl` | 线程索引 |
| `/Users/karuo/.codex/state_5.sqlite` | Desktop 状态库 |
| `/Users/karuo/.codex/.codex-global-state.json` | 全局侧栏/项目状态 |
| `/Users/karuo/.codex/process_manager/chat_processes.json` | 进程/线程引用 |
| `/Users/karuo/.codex/sessions/` | rollout 真源 |
| `/Users/karuo/.codex/repair-backups/` | 备份与修复报告 |
## 复用过的历史证据
- 2026-07-04从隐藏缺失 rollout 改为“恢复并分类旧对话”。
- 2026-07-04空 rollout 引发 `thread-store internal error`
- 2026-07-05把误挂在“厦门房产”的约 70 个对话重新拆回 Soul、私域银行、工作手机、域名注册、MBTI、玩值电竞、服务器管理、个人项目等桶。
## 输出格式
交付时用卡若复盘:
- 🎯 目标&结果:修复范围、达成率
- 📌 过程:备份、扫描、修复、验收
- 💡 反思:哪里是不可恢复或需重启
- 📝 总结:修复报告路径
- ▶ 下一步执行:是否需要重启 Desktop、是否需补 Mongo/记忆
## 变更记录
| 日期 | 说明 |
|:---|:---|
| 2026-07-05 | 初版从近30天 Codex Desktop 侧栏/rollout 修复高复发流程沉淀 |

View File

@@ -0,0 +1,70 @@
# Codex 降级锁定2026-06-17
## 目标
从 GitHub 安装 **2026 年 6 月以前** 的 Codex并禁止自动升级。
## 已执行版本
| 组件 | 版本 | 来源 |
|:---|:---|:---|
| Codex.app | `26.519.81530` | 本机 2026-05-28 备份 |
| codex CLI | `0.135.0` | [rust-v0.135.0](https://github.com/openai/codex/releases/tag/rust-v0.135.0) |
| 发布日期 | 2026-05-28 | 6 月前稳定版 |
## 防升级措施(四层)
1. **CLI**`~/.codex/config.toml` 顶层 `check_for_update_on_startup = false`
2. **Sparkle桌面 App**`defaults write com.openai.codex SUEnableAutomaticChecks -bool false`
3. **文件锁**`chflags uchg` 锁定 `/Applications/Codex.app`
4. **hosts 阻断**`persistent.oaistatic.com``downloads.openai.com``0.0.0.0`
一键启用:
```bash
bash "…/Codex版本锁定/脚本/codex_block_updates.sh" on
```
关闭(恢复可升级):
```bash
bash "…/Codex版本锁定/脚本/codex_block_updates.sh" off
```
## 一键重装脚本
```bash
bash "/Users/karuo/Documents/个人/卡若AI/01_卡资/金仓_存储备份/Codex版本锁定/脚本/codex_pin_version.sh"
```
换其它 5 月 tag
```bash
bash …/codex_pin_version.sh rust-v0.134.0
```
## 解锁升级
```bash
chflags -R nouchg /Applications/Codex.app
chflags nouchg /usr/local/bin/codex
```
## 备份位置
- 降级前新版:`~/Documents/卡若Ai的文件夹/1、金_资产存储/备份/系统/codex_pin_0.135.0/Codex.app.before_downgrade`
- GitHub 包:`…/codex_pin_0.135.0/codex-aarch64-apple-darwin.tar.gz`
## 注意
- 从备份/GitHub 恢复的 App 可能弹 **「已损坏」**:执行 `xattr -cr /Applications/Codex.app && codesign --force --deep --sign - /Applications/Codex.app`(脚本已内置)。
- 桌面 App 的「更新」按钮不受 `check_for_update_on_startup` 控制(仅 CLI/TUI**uchg 文件锁** 防覆盖。
- 若需其它 5 月 App 构建,可换用 `codex_full_reset_20260528` 同期备份或带 `.dmg` 的较新 pre-release如 0.138.0-alpha.6)。
## 进度
- [x] GitHub 下载 0.135.0 CLI
- [x] 恢复 5 月 Codex.app
- [x] config 关更新检查
- [x] uchg 锁定
- [x] 脚本 + 开发文档

View File

@@ -0,0 +1,105 @@
#!/usr/bin/env bash
# Codex 禁止更新CLI 配置 + Sparkle 关检查 + 文件锁 + hosts 阻断 CDN
# 用法: bash codex_block_updates.sh [on|off] 默认 on
set -euo pipefail
MODE="${1:-on}"
CONFIG="${HOME}/.codex/config.toml"
APP="/Applications/Codex.app"
CLI="${APP}/Contents/Resources/codex"
HOSTS_MARKER="# karuo-codex-no-update"
HOSTS_FILE="/etc/hosts"
HOSTS_BLOCK=(
"0.0.0.0 persistent.oaistatic.com"
"0.0.0.0 downloads.openai.com"
)
ensure_config_off() {
if [[ ! -f "${CONFIG}" ]]; then
mkdir -p "$(dirname "${CONFIG}")"
printf 'check_for_update_on_startup = false\n' > "${CONFIG}"
return
fi
if grep -q '^check_for_update_on_startup' "${CONFIG}"; then
sed -i '' 's/^check_for_update_on_startup.*/check_for_update_on_startup = false/' "${CONFIG}"
else
printf 'check_for_update_on_startup = false\n\n' | cat - "${CONFIG}" > "${CONFIG}.tmp" && mv "${CONFIG}.tmp" "${CONFIG}"
fi
}
sparkle_off() {
defaults write com.openai.codex SUEnableAutomaticChecks -bool false
defaults write com.openai.codex SUAutomaticallyUpdate -bool false
}
sparkle_on() {
defaults write com.openai.codex SUEnableAutomaticChecks -bool true
}
lock_app() {
[[ -d "${APP}" ]] || { echo "未找到 ${APP}" >&2; exit 1; }
chflags -R uchg "${APP}"
if [[ -f "${CLI}" ]]; then
chflags uchg "${CLI}" 2>/dev/null || true
fi
if [[ -f /usr/local/bin/codex ]] && [[ ! -L /usr/local/bin/codex ]]; then
chflags uchg /usr/local/bin/codex 2>/dev/null || true
fi
}
unlock_app() {
chflags -R nouchg "${APP}" 2>/dev/null || true
chflags nouchg /usr/local/bin/codex 2>/dev/null || true
}
hosts_block() {
if grep -q "${HOSTS_MARKER}" "${HOSTS_FILE}" 2>/dev/null; then
echo "hosts 阻断已存在"
return
fi
local tmp
tmp="$(mktemp)"
{
echo ""
echo "${HOSTS_MARKER}"
for line in "${HOSTS_BLOCK[@]}"; do echo "${line}"; done
} | sudo tee -a "${HOSTS_FILE}" >/dev/null
echo "已写入 /etc/hosts 阻断 Codex 更新 CDN"
}
hosts_unblock() {
if ! grep -q "${HOSTS_MARKER}" "${HOSTS_FILE}" 2>/dev/null; then
echo "hosts 无 Codex 阻断条目"
return
fi
sudo sed -i '' "/${HOSTS_MARKER}/,/^0\.0\.0\.0 downloads\.openai\.com/d" "${HOSTS_FILE}"
echo "已移除 hosts 阻断"
}
case "${MODE}" in
on)
ensure_config_off
sparkle_off
lock_app
hosts_block || echo "⚠️ hosts 阻断需 sudo可稍后手动: sudo bash $0 on"
echo "✅ Codex 禁止更新已启用"
;;
off)
unlock_app
sparkle_on
hosts_unblock || true
sed -i '' 's/^check_for_update_on_startup.*/check_for_update_on_startup = true/' "${CONFIG}" 2>/dev/null || true
echo "✅ Codex 禁止更新已关闭(可正常升级)"
;;
*)
echo "用法: $0 [on|off]" >&2
exit 1
;;
esac
echo "--- 状态 ---"
grep '^check_for_update_on_startup' "${CONFIG}" 2>/dev/null || true
defaults read com.openai.codex SUEnableAutomaticChecks SUAutomaticallyUpdate 2>/dev/null || true
ls -lO "${APP}" 2>/dev/null | head -2 || true
grep -A3 "${HOSTS_MARKER}" "${HOSTS_FILE}" 2>/dev/null || echo "hosts: 未阻断"
codex --version 2>/dev/null || true

View File

@@ -0,0 +1,84 @@
#!/usr/bin/env bash
# Codex 版本锁定:从 GitHub 下载指定旧版并禁止自动升级
# 用法: bash codex_pin_version.sh [版本tag默认 rust-v0.135.0]
set -euo pipefail
TAG="${1:-rust-v0.135.0}"
ARCH="$(uname -m)"
PIN_ROOT="${HOME}/Documents/卡若Ai的文件夹/1、金_资产存储/备份/系统"
PIN_DIR="${PIN_ROOT}/codex_pin_${TAG#rust-v}"
BACKUP_APP="${PIN_ROOT}/codex_full_reset_20260528/Codex.app"
CONFIG="${HOME}/.codex/config.toml"
if [[ "${ARCH}" != "arm64" ]]; then
echo "当前脚本仅验证过 Apple Silicon (arm64)" >&2
exit 1
fi
mkdir -p "${PIN_DIR}"
cd "${PIN_DIR}"
if [[ ! -f codex-aarch64-apple-darwin.tar.gz ]]; then
echo "▸ 从 GitHub 下载 ${TAG} ..."
gh release download "${TAG}" -R openai/codex \
-p 'codex-aarch64-apple-darwin.tar.gz' \
-p 'codex-package-aarch64-apple-darwin.tar.gz' \
--clobber
fi
tar -xzf codex-aarch64-apple-darwin.tar.gz
echo "▸ 退出 Codex ..."
osascript -e 'tell application "Codex" to quit' 2>/dev/null || true
sleep 3
pgrep -x Codex >/dev/null && killall Codex 2>/dev/null || true
sleep 2
echo "▸ 备份当前安装 ..."
rm -rf "${PIN_DIR}/Codex.app.before_downgrade"
[[ -d /Applications/Codex.app ]] && cp -a /Applications/Codex.app "${PIN_DIR}/Codex.app.before_downgrade"
[[ -f /usr/local/bin/codex ]] && cp -a /usr/local/bin/codex "${PIN_DIR}/codex.before_downgrade" || true
echo "▸ 安装桌面版5 月备份包,与 0.135.0 同期)..."
chflags -R nouchg /Applications/Codex.app 2>/dev/null || true
chflags nouchg /usr/local/bin/codex 2>/dev/null || true
rm -rf /Applications/Codex.app
cp -a "${BACKUP_APP}" /Applications/Codex.app
echo "▸ 修复 Gatekeeper清除隔离 + 重签名)..."
xattr -cr /Applications/Codex.app
codesign --force --deep --sign - /Applications/Codex.app >/dev/null
echo "▸ 安装 CLI随 App 内嵌,/usr/local/bin/codex 为符号链接)..."
# App 内已含匹配版本 CLI仅当 /usr/local/bin/codex 为独立文件时才覆盖
if [[ -L /usr/local/bin/codex ]] || [[ ! -f /usr/local/bin/codex ]]; then
ln -sf /Applications/Codex.app/Contents/Resources/codex /usr/local/bin/codex
else
cp -a "${PIN_DIR}/codex-aarch64-apple-darwin" /usr/local/bin/codex
chmod +x /usr/local/bin/codex
chflags uchg /usr/local/bin/codex
fi
echo "▸ 锁定 App 防覆盖升级 ..."
chflags -R uchg /Applications/Codex.app
echo "▸ 关闭 CLI 启动更新检查 ..."
BLOCK_SCRIPT="$(dirname "$0")/codex_block_updates.sh"
if [[ -x "${BLOCK_SCRIPT}" ]]; then
# 仅 config + Sparkle + 锁hosts 需本机 sudo
bash "${BLOCK_SCRIPT}" on 2>/dev/null || true
else
if ! grep -q '^check_for_update_on_startup' "${CONFIG}" 2>/dev/null; then
printf 'check_for_update_on_startup = false\n\n' | cat - "${CONFIG}" > "${CONFIG}.tmp" && mv "${CONFIG}.tmp" "${CONFIG}"
else
sed -i '' 's/^check_for_update_on_startup.*/check_for_update_on_startup = false/' "${CONFIG}"
fi
defaults write com.openai.codex SUEnableAutomaticChecks -bool false 2>/dev/null || true
defaults write com.openai.codex SUAutomaticallyUpdate -bool false 2>/dev/null || true
chflags -R uchg /Applications/Codex.app
fi
echo "✅ 完成"
defaults read /Applications/Codex.app/Contents/Info.plist CFBundleShortVersionString
codex --version
echo "解锁升级: chflags -R nouchg /Applications/Codex.app && chflags nouchg /usr/local/bin/codex"

View File

@@ -0,0 +1,67 @@
# 可持续对话 MCP · Manus 直接使用说明
> **给 Manus**:解压本 zip 后,按下面步骤在本机 macOS 执行即可,无需卡密、无需联网 API。
## 一、包里有什么
| 路径 | 用途 |
|:---|:---|
| `install.sh` | 一键安装(写 MCP + 启动 Hub |
| `package/` | hub.js、server.js、panel.html、规则模板 |
| `check-mcp.sh` | 安装后验收 |
| `SKILL.md` | 完整 Skill 文档G22b |
| `图文教程/` | 零基础安装 + MCP 三张产品图 |
| `脚本/sync-runtime.sh` | 仅同步运行时(已装过时用) |
## 二、Manus 执行清单(复制即用)
```bash
# 1) 解压后进入目录(文件夹名以 zip 内为准)
cd "解压后的/Cursor可持续对话-安装包-v*"
# 2) 安装到本机 + 绑定当前项目(把路径换成实际工作区)
bash install.sh --project "/你的/项目/根目录"
# 3) 验收
bash check-mcp.sh
# 4) 打开面板确认
open "http://127.0.0.1:13458"
```
**安装成功后必须**:用户 **Cmd+Q 完全退出 Cursor 再打开**Settings → MCP 里 `persistent-chat` 显示绿点。
## 三、Manus 接任务后的 Agent 流程
每轮开发循环(不要停):
1. `select_conversation`(传 `cursorTitle`=当前对话标签名)
2. 无会话 → `init_conversation`
3. `verify_karuo_ai_gate`(带 `pchat-token`)→ 须 `PASS`
4. 执行用户任务
5.**[卡若复盘]** 五块
6. `wait_for_user_input`(同一 `pchat-token` + `title`
7. 收到 `[RENEWAL]` → 立刻再 `wait`,不展示给用户
8. 仅用户说 **「结束持久对话」** 才可停止 wait
面板 http://127.0.0.1:13458 可开 **自动续跑**,模式选 **直通**(连续开发)或 **复盘**(追问→检索→执行)。
## 四、常见问题
| 现象 | 处理 |
|:---|:---|
| 面板「连接中…」 | `bash 脚本/sync-runtime.sh` 后刷新面板 |
| MCP 不绿 | Cmd+Q 重启 Cursor`bash 脚本/清理重复MCP.sh` |
| 多标签串线 | 每个标签用中文名;`init` 必须传 `cursorTitle` |
| interrupted | 单轮少跑长命令;末 tool 必须是 `wait` |
## 五、环境要求
- macOS + Node.js 18+(推荐 22`brew install node@22`
- Cursor IDEAuto 或 Agent 模式,非 Plan/Ask
- 本机端口 **13458** 未被占用
---
**版本**:见 `package/panel.html``PANEL_VERSION`
**Skill 真源**卡若AI `01_卡资/金仓_存储备份/Cursor持久对话/SKILL.md`

View File

@@ -0,0 +1,48 @@
# 可持续对话Cursor / Codex· v1.4
> Agent 卡住续跑 · 本地免费 · **MCP 全局只配 1 条** · Cursor/Codex 共用同一 Hub
## 安装3 步)
```bash
unzip Cursor持久对话-安装包-v1.3.zip
cd Cursor持久对话
bash install.sh --project "/你的项目路径"
bash check-mcp.sh # 必须全绿
```
或双击 `一键安装.command` → Cmd+Q 重启 Cursor。
## v1.4 修复了什么
- **Hub 独立进程**13458 只有一个,多工作区不再抢端口
- **MCP 不重复**:只在 `~/.cursor/mcp.json` 配 1 条Settings 不会出现两个)
- **面板输入不闪退**:打字时暂停刷新
- **发错会话提示**:自动对齐 Cursor 正在等的 `ct_` token
- **Codex 同步支持**`~/.codex/config.toml` 也写入同一套 `persistent-chat`,与 Cursor 共享同一 Hub / 规则 / 复盘流程
## 验收
| 命令 | 作用 |
|:---|:---|
| `bash check-mcp.sh` | 深度检查(无重复 MCP + 4 tools + Hub |
| `bash verify.sh` | 基础文件/Hub/Mongo/Codex 检查 |
| `bash 脚本/清理重复MCP.sh` | 清项目级重复 MCP |
## 成功标准
Settings → **1 个** persistent-chat · 绿点 · **4 tools enabled**
Codex 配置里也应能看到同一 `persistent-chat` 指向本地 Hub
面板发送后变「已发送·处理中」Cursor 里 `Wait For User Input` 结束并继续。
## 文件
| 文件 | 说明 |
|:---|:---|
| `install.sh` | 一键安装 |
| `check-mcp.sh` | 深度验收 |
| `verify.sh` | 基础验收 |
| `一键安装.command` | 双击安装 |
| `图文教程/` | 8 张步骤图 |
| `package/` | hub / server / panel 源码 |

View File

@@ -0,0 +1,459 @@
# 可持续对话(本地 MCP · 长连接)
```yaml
id: G22b
name: 可持续对话
member: 金仓
trigger:
- 可持续对话
- persistent chat
- 卡住续跑
- wait_for_user_input
- 13458
- Cursor持久对话
- 安装持久对话
- 长连接
- 自动续跑
- 优化续跑
- Auto模式
- Cursor Auto
- Agent模式
- 不间断
- 持续运作
- 长时间对话
- 持续对话
- persistent MCP
version: 1.6.51
updated: 2026-06-14
heat: 🔴 热
related:
- 02_卡人/水桥_平台对接/MCP管理/SKILL.md
- 04_卡火/火炬_全栈消息/持续执行闭环/SKILL.md
- 04_卡火/火炬_全栈消息/前端开发/私域银行统一前端模块/README.md
```
## 一句话
**Cursor Agent 永不中断**:本地 MCP + Hub 长轮询 + 浏览器面板 `http://127.0.0.1:13458`;单对话可配 **复盘 / 直通 / 优化** 三模式UI 对齐 **卡若AI Glass UI Kit**;无卡密、无第三方 API。
**与 G26 持续执行闭环**:用户要 **把需求/代码做到验收**(不限挂起)→ 先读 `04_卡火/火炬_全栈消息/持续执行闭环/SKILL.md`;本 Skill 只管 **wait 循环与 13458 面板**
---
## Cursor Auto / Agent + persistent-chat默认不间断
**用户不必每次粘贴提示词。** `install.sh` 会在项目写入 `.cursor/rules/persistent-chat.mdc``alwaysApply: true`)。
| 步骤 | 操作 |
|:---|:---|
| 1 | 对话模式选 **Auto**、**Agent** 或 **Composer**(本机 Cursor 任意 Agent 类模式;**不限制 LLM 模型** |
| 2 | MCP `persistent-chat` 绿点;面板 http://127.0.0.1:13458 **自动续跑** 开 |
| 3 | 详情区模式:**直通**(连续 ▶下一步)或 **优化**(总结→检索→开发) |
| 4 | 第一条消息直接写任务Agent 自动 `select_conversation``verify_karuo_ai_gate` → 执行 → `wait_for_user_input` |
**完整说明 + 可粘贴启动词(仅换机/规则未生效时)**`references/Cursor_Auto与持久MCP不间断.md`
**禁止**:因「任务已完成」停止 `wait``wait` 只是挂起传输,不是终点;仅用户明确 **「结束持久对话」** 可停。
---
## 模型无关v1.6.50 · 不限制)
| 层 | 是否限制模型 |
|:---|:---|
| **MCP server.js** | ❌ 无 model 参数、无白名单 |
| **Hub hub.js** | ❌ 只认 ct_ / composerId不认 LLM |
| **13458 面板** | ❌ |
| **Cursor 侧** | 你选 Auto / Agent / Composer / Claude / GPT … **均可** |
| **不可用** | Plan / Ask无 Agent 工具,调不了 wait |
**composerId** = Cursor **对话框 ID**(防串线),≠ Composer 模型产品;任意模型对话框都有 composerId。
---
## 文档索引
| 文档 | 用途 |
|:---|:---|
| **本文件 SKILL.md** | 安装、用法、三模式、MCP 工具 |
| **references/Cursor_Auto与持久MCP不间断.md** | **Cursor Auto/Agent + persistent-chat 默认不间断**(提示词、配置、与 G26 叠加) |
| **references/不间断开发_G22b叠加G26.md** | **九条铁律**:每轮读需求 + 开发至验收 + 边打勾 + 优化沉淀(与 G26 叠加真源) |
| **开发需求_不间断开发叠加_20260605.md** | 本 Skill 自身进行中需求(每轮循环 Read 入口) |
| **部署与长连接接入.md** | 跨科室部署、HTTP API、长轮询时序、踩坑 |
| **图文教程/零基础安装指南.md** | 新手图文 |
| **package/故障排查_输入闪退与发送状态.md** | 面板异常 |
| **package/故障排查_工具中断interrupted.md** | Read/GenerateImage/MCP 误报 interrupted |
| **图文教程/功能说明图/** | MCP 产品三张图(概念/落地/形态代价 PNG + 说明 MD |
---
## 架构(长连接)
```
┌─────────────┐ stdio ┌──────────────┐ HTTP ┌─────────────────┐
│ Cursor Agent│◄──────────►│ server.js │◄─────────►│ hub.js :13458 │
│ MCP 工具 │ │ (MCP 客户端) │ │ 唯一 HTTP 进程 │
└─────────────┘ └──────────────┘ └────────┬────────┘
┌──────────────────────────────────────────┤
│ panel.html浏览器
│ /api/wait/poll 28s 长轮询 renewal │
│ /api/reply 用户回复 │
└──────────────────────────────────────────┘
```
**长连接本质**MCP 侧对 `/api/wait/poll` 循环长轮询;面板 2s 拉 `/api/state`;用户回复经 `/api/reply` 唤醒 poll。
---
## 一键安装
```bash
bash "/Users/karuo/Documents/个人/卡若AI/01_卡资/金仓_存储备份/Cursor持久对话/install.sh"
bash install.sh --project "/path/to/repo" # 指定项目
bash install.sh --all-karuo # 卡若多根工作区
# 改 package 后同步运行时
bash "脚本/sync-runtime.sh"
# 打可分发安装包(插件 + 网站桥接 zip
bash "脚本/build_package.sh"
```
安装后 **Cmd+Q 退出 Cursor 再开** → Settings → MCP → `persistent-chat` 绿点 → 打开 http://127.0.0.1:13458
---
## 验收
```bash
bash check-mcp.sh
bash "脚本/check-mcp-link.sh" ct_xxx # v1.6.51 MCP↔Hub 链接 + verify_mcp_status
bash "脚本/check-continuous-loop.sh" ct_xxx # 发消息+续跑不停v1.6.40
bash "脚本/check-optimize-fullchain.sh" ct_xxx # 优化模式四步 Hub 验收v1.6.47
curl -s http://127.0.0.1:13458/api/health # panelVersion ≥ 1.6.17
curl -s "http://127.0.0.1:13458/api/link/status?token=ct_xxx" # pendingWait/linked
```
### MCP 链路检测v1.6.51 · wait 前必调)
| 工具 / API | 用途 |
|:---|:---|
| **`verify_mcp_status`** | MCP 工具Hub 在线 + ct_ 链接;须 `[MCP_LINK] PASS` |
| **`/api/link/status`** | `pendingWait` / `connectionHeld` / `linked` / `cursorOccupied` |
| **占用态铁律** | 每 turn **最后 tool = wait**`[RENEWAL]` 同 turn 零正文再 wait |
### 单轮 REQ 与 renewal 链v1.6.71 · 防 interrupted
| 铁律 | 说明 |
|:---|:---|
| **单轮少 REQ** | 先执行后 wait禁止 wait 前堆砌 Shell/Read/并行 tool |
| **MCP 预算** | select + gate + **一次** waitgate 10min 缓存;勿与改码/生图/Shell 同批并行 |
| **RENEWAL 零工** | `[RENEWAL]` → 立刻 renewalOnly 再 wait**禁止** 其间任何 Read/Shell/verify |
| **禁止多级 renewal 工** | 同 turnwait →RENEWAL→ renewalOnly wait → 收 turn禁止 RENEWAL 后再执行又第三次 wait |
| **大任务拆轮** | 单轮 ~25s 可完成量;超出则复盘+wait下轮续跑 ▶ |
### 多标签并行v1.6.72 · Cursor/Codex/VS Code 通用)
| 项 | 说明 |
|:---|:---|
| **一套 Hub** | 所有客户端共用 `:13458`;每标签独立 ct_可并行多项目 |
| **三开三 wait** | 每窗口末 tool 必须各自 `wait`A 挂起不能代替 B |
| **断链诊断** | `bash 脚本/check-multi-tabs.sh``dialogueState=OFF` = Agent 未 wait |
| **OFF 一键排队** | `bash 脚本/repair-off-tabs.sh` → 开 turbo+保活并为 OFF 会话排队续跑 |
| **composer 防串** | rebuild 只取最新 thread禁止验收脚本污染 composer 绑定 |
### 发消息后不停v1.6.40 · 科室必验)
| 步骤 | 预期 |
|:---|:---|
| 面板发消息 / `/api/reply` | 未 wait 时 **queued**`connectionHeld` **仍为 true** |
| `/api/continue` | 未 wait 时排队续跑,**不** 404 |
| Hub `postDeliverWatchdog` | 消息送达后 10s 内 Agent 未 re-wait → 再排队续跑 |
| Agent 每轮 | 处理完面板消息 → **必须再 `wait_for_user_input`** |
```bash
bash "脚本/check-continuous-loop.sh" ct_ca405c05
```
---
## 单对话三模式v1.6.13+ · 默认自动续跑开)
在面板**选中对话 → 详情区顶部**配置(非全局):
| 模式 | 值 | 行为 |
|:---|:---|:---|
| **复盘** | `standard` | 挂起后:追问 → 检索 → 执行;需 **[卡若复盘]** 五块 |
| **直通** | `turbo` | 不等复盘Hub 直推 `▶下一步` 直到目标完成 |
| **优化** | `optimize` | 自动四步:①总结聊天 → ②WebSearch+GitHub → ③补开发文档 → ④按文档开发 |
API
```bash
curl -X POST http://127.0.0.1:13458/api/session/config \
-H 'Content-Type: application/json' \
-d '{"token":"ct_xxx","continueMode":"optimize","sessionAutoContinue":true}'
```
## 定时回复v1.6.17+ · 默认「自动」)
| 项 | 默认 |
|:---|:---|
| 自动续跑延迟 | **10 秒** |
| 间隔 | **自动**(仅走续跑规则) |
| 固定保活 | 30 秒 · 4 分钟 · 9 分钟 |
**自动**:约 10 秒后按复盘/直通/优化规则续跑。
**固定间隔**:到点发保活文案(直通 ▶=无 时选 4 分钟/9 分钟)。
```bash
curl -X POST http://127.0.0.1:13458/api/session/config \
-H 'Content-Type: application/json' \
-d '{"token":"ct_xxx","timedReplyIntervalMs":0}'
# 0=自动 · 30000/240000/540000=固定
```
---
## 完整 Token 绑定铁律v1.6.30
- 计划真源是完整 `ct_xxxxxxxx`,禁止前缀匹配、禁止按标题猜 token。
- 每次挂载先用完整 token 查 Hub 会话库、`bindings.json``thread-bindings/`;能恢复就必须恢复原 token。
- 只有完整 token 在库里找不到时,才允许 `init_conversation(newPlan:true, cursorTitle=标签名, planLabel=计划名)` 新建。
- `newPlan` 不归档旧计划;旧计划继续 `holding/waiting`,所有计划可并行保活。
- 同一 Cursor 标签下多计划用 `planLabel` 区分;消息写入必须命中对应 token 的 wait 或 steerQueue不能串到其它计划。
---
## 对话框 ID 垂直绑定v1.6.42 · composerId 真源)
**根因**:仅靠 `cursorTitle`标签名绑定时vscdb 可能读到「最近更新」的其它标签 → `TOKEN_TITLE_MISMATCH` / 标签变来变去。
| 真源 | 说明 |
|:---|:---|
| **`composerId`** | Cursor 对话框 ID`CURSOR_CONVERSATION_ID`**一个对话框 ↔ 一个 ct_** |
| **`composer-bindings.json`** | Hub 权威:`工作区::composer:{id}@IP``ct_` |
| **`/api/binding/sync-title`** | wait/select 时按 composerId 对齐;标签改名自动 `migrateBindingRename` |
| **标签名** | 仅展示/迁移用;**禁止**用标签猜 token |
**Agent 行为**`select`/`wait`/`verify` 必须带当前对话框 composerId标签与 token 不一致时 **先 sync composer**,不要弹错绑选项。
**同步**`bash "…/Cursor持久对话/脚本/sync-runtime.sh"`
---
## 防 interrupted 融合v1.6.47 · 6/14 绑定 + 6/12 poll
| 保留6/14 | 回退6/12 |
|:---|:---|
| composerId↔ct_ 垂直绑定、sync-title | **单次** `hubPollOnce`~10s renewal 即归还 Cursor |
| offWait / postDeliverWatchdog / perpetualDev | 禁止 `hubPollUntilReply` 内循环 ≤24s |
| steerQueue 续跑 | `[RENEWAL]` 续期跳过 sync/verify HTTP |
**根因**6/14 内循环 poll + 前置 verify ≈ 3040s → 超过 Cursor MCP 单工具超时 → `interrupted` → 任务像自动停止。
**部署**`bash 脚本/sync-runtime.sh`**Cmd+Q 重启 Cursor**`grep 1.6.47 ~/.persistent-chat-local/server.js`
---
## 对话不断v1.6.49 · 复盘永不停止 · 硬修 interrupted
**用户诉求**:对话**保持在场**,不要 interrupted / 「关掉 turn 再续」。
| 项 | v1.6.49 做法 |
|:---|:---|
| **MCP** | **仅** `hubPollOnce` ~10s**禁止** while ≤24sinterrupted 根因) |
| **RENEWAL** | 跳过 sync/verifyHub 错也 renewal 不断环 |
| **Hub neverStop** | 1.2s 续跑;【对话续接】;**不 flush steerQueue** |
| **Agent** | `[RENEWAL]` 静默立刻再 wait续接=复盘+wait 同 turn禁 meta 收工句 |
```bash
bash "脚本/sync-runtime.sh" && bash "脚本/一键重载MCP.sh"
# 必须 Cmd+Q 重启 Cursor → grep 1.6.49 ~/.persistent-chat-local/server.js
```
---
## 保活显示与不跳转规则v1.6.32
- `waiting` 只表示 Agent 当前真的在 `wait_for_user_input` 等回复。
- `holding` 表示计划 token 已绑定并保持连接态;当前没有 wait 时,面板消息先进入排队,等 Agent 下次 wait 自动送达。
- `/api/state` 会把所有未结束计划维持为 `connectionHeld=true`;只有用户明确发「结束持久对话」才清掉保活。
- 面板列表按创建时间稳定排序,不因 active/waiting 变化置顶;用户点选后轮询只刷新状态,不自动跳到其它会话。
- 左侧徽标:`续跑`=有 pending wait 自动续跑;`挂起`=等用户;`保活`=计划连接保持、可排队。
---
## 未挂起断链修复v1.6.39 · Hub
**现象**Cursor Agent 跑完一轮**没调 wait** → 面板「计划保活中(未挂起)」→ 续跑/保活文案进不了 Cursor → 任务像「直接结束」。
| 层 | 机制 |
|:---|:---|
| **Hub** | `triggerOffWaitKeepAlive`:绑定会话且未 wait 时,每 10s 把续跑文案写入 `steerQueue``/api/continue` 无 wait 时也排队而非 404 |
| **Agent** | **每轮必须** 复盘 → `wait_for_user_input`G26「不要停/直到完成」**禁止**无 wait 收工 |
| **开发任务** | 面板切 **直通**`turbo`),跳过复盘三段式阻塞;`curl` 见下 |
```bash
# MBTI 等开发任务切直通 + 自动续跑
curl -s -X POST http://127.0.0.1:13458/api/session/config \
-H 'Content-Type: application/json' \
-d '{"token":"ct_1d4a71eb","continueMode":"turbo","sessionAutoContinue":true}'
```
**steerQueue 送达**Agent 下次 `wait` 后,排队续跑**自动**注入 Cursorpoll 首包 dequeue
**同步 Hub**`bash "…/Cursor持久对话/脚本/sync-runtime.sh"`
---
## 永续等待 + 中文回复v1.6.41 · 强制)
**可持续对话 = 一直保持等待/保活,不因出错、超时、任务中断而结束。**
| 铁律 | Agent / Hub |
|:---|:---|
| **每轮 wait** | 每轮末尾 **必须** `wait_for_user_input`;挂起 = 待命,**不是**结束 |
| **出错仍 wait** | `[RENEWAL]`、Hub 超时、连接异常 → **立即**同一 `pchat-token``wait` |
| **不关进度** | 禁止说「对话结束」「停止等待」;禁止清 ct_/关面板会话 |
| **唯一停机** | 仅用户当轮 **「结束持久对话」** |
| **renewal 静默** | `[RENEWAL]` **不展示**给用户,直接再 `wait` |
| **中文回复** | 凡涉及可持续对话/面板/wait/续跑/挂起/ct_ 的回复 **一律中文**Cursor/MCP/Hub 等专有名词除外) |
| **Hub perpetualWait** | 新会话默认 `perpetualWait=true`;绑定会话不因 2h 无 wait 归档 |
### 出错时 Agent 动作
```text
Hub 异常 / wait 失败 / 收到 RENEWAL
→ 不向用户宣布结束
→ 中文简短说明(若需)
→ 立即再 call wait_for_user_input同一 pchat-token + title
→ 永不因 retry 次数而停
```
---
## MCP 工具一览
| 工具 | 用途 |
|:---|:---|
| `select_conversation` | 选/绑 ct_冲突时 `ask_user_question` |
| `init_conversation` | 新建;**新计划** `newPlan:true` + `cursorTitle` |
| `wait_for_user_input` | 挂起;须同一 `pchat-token` + `cursorTitle` |
| `verify_karuo_ai_gate` | 每对话至少一次门禁 |
| `verify_binding` / `apply_binding_choice` | 垂直绑定校验 |
**铁律**:一 Cursor 标签 ↔ 一 ct_ ↔ 一 IP`cursorTitle` 必填。
**中文标识(强制)**`cursorTitle` / `planLabel` / 面板 `title` / `prompt` / 续跑文案 **一律中文**;标签为英文时 Agent 须 `rename_chat` 改中文。细则见 `package/templates/persistent-chat.mdc` §中文标识铁律。
---
## 卡若复盘 + 续跑节奏
| 步骤 | 复盘模式 | 直通/优化 |
|:---|:---|:---|
| ⓪ 读需求 | **每轮** Read 进行中 MD + `references/不间断开发_G22b叠加G26.md` | 同左 |
| ① 执行 | Agent 改代码;**边打勾**bug 当场修 | 同左 |
| ② 复盘 | **[卡若复盘]** 🎯目标/✅结果/📊达成率 → 🧭过程 → 🔍反思 → 📌总结 → 🚀下一步执行 | 直通可省略;优化在 Hub 侧补 |
| ③ wait | `wait_for_user_input` | 同左 |
| ④~⑥ | 追问→检索→执行 | 优化=总结→检索→补文档→执行 |
| ⑦ 验收 | 清单全 ✅ → 全量测试页面/细节 → 全绿才 100% | 同左 |
面板快捷:**追问完成** · **检索完成** · **▶ 继续开发**
### 不间断开发叠加 G26v1.6.36
用户说 **一直继续 / 不要停 / 直接开发直到完成 / 每轮读需求** 时:
1. **G22b**`wait` 循环与 13458 续跑(仅「结束持久对话」可停)。
2. **G26** 管需求做到验收(见 `持续执行闭环/SKILL.md`)。
3. **每轮** 先 Read 项目 `{项目}_进行中_*.md` + 本目录 `references/不间断开发_G22b叠加G26.md`
4. **优化方法** 写入需求 MD「优化沉淀区」与共享文档。
5. **开发至全绿**:全部子项 ✅ + 全量回归通过;否则 ▶ 写下一修复/下一子项。
---
## 面板 UIv1.6.14 · 卡若AI Glass
- **视觉**`kir-glass` 毛玻璃 + 蓝紫渐变品牌色(与私域银行统一前端模块一致)
- **顶栏**:已连接 + ⋯(新计划/清理/复制提示词)
- **侧栏**:增量渲染不闪;显示模式标签
- **详情**:自动续跑开关 + 复盘/直通/优化;消息区智能滚底
UI 真源:`04_卡火/火炬_全栈消息/前端开发/私域银行统一前端模块/`
---
## 与其他 MCP / 工具并存
| 场景 | 做法 |
|:---|:---|
| 只用持久对话 | `install.sh` 即可,**不必** MCPfinder |
| 再加数据库/飞书等 MCP | 走 **MCP管理 SKILL** 搜索安装,与 persistent-chat **并列** |
| 外部脚本发回复 | POST `http://127.0.0.1:13458/api/reply` |
| Codex/类似工具 | 对接同一 Hub API**部署与长连接接入.md §四** |
---
## 成功 / 失败判定
### ✅ 成功
- MCP 绿点;面板「已连接」
- `wait_for_user_input` 出现在 Cursor 工具调用
- 面板回复后 Agent 立刻继续
- 左侧选中会话不闪;滚底正常
### ❌ 常见故障
| 现象 | 动作 |
|:---|:---|
| 两个 persistent-chat | `bash 脚本/清理重复MCP.sh` |
| 发错 ct_ | 面板 token 须与 Cursor pchat-token 一致 |
| 面板离线 | `bash 脚本/sync-runtime.sh` |
| 左侧 idle 堆满 | ⋯ → 清理旧会话 |
| 优化不跑 | 详情区切「优化」+ 开自动续跑 |
| wait 后进程自己退出 | `server.js` 已改stdin 关闭后,只要还有活跃会话/连接态就不退出;同步运行时后生效 |
| **续跑断链 / 未挂起** | Agent 未 wait → Hub v1.6.39 已排队续跑;**须** Agent 下轮调 wait 送达;开发任务切 **直通** |
| **发消息后停了** | `bash 脚本/check-continuous-loop.sh ct_xxx`;确认 `connectionHeld` 仍为 true |
| **等待被中断** | v1.6.47:回退 6/12 单次 pollHub 异常也 renewal 不断环;须 Cmd+Q 重载 MCP |
---
## 文件布局
| 路径 | 说明 |
|:---|:---|
| `package/hub.js` | Hub 源码真源 |
| `package/panel.html` | 面板源码真源 |
| `package/server.js` | MCP 客户端 |
| `~/.persistent-chat-local/` | 运行时sync 同步) |
| `~/.cursor/mcp.json` | 全局 MCP |
| `<项目>/.cursor/rules/persistent-chat.mdc` | Agent 规则 |
| Mongo `karuo_site.持久对话会话` | 备份 |
---
## 版本记录
| 版本 | 要点 |
|:---|:---|
| **1.6.36** | **不间断开发叠加 G26**:每轮读需求、边打勾、开发至全绿、优化沉淀;共享文档 `references/不间断开发_G22b叠加G26.md` |
| **1.6.17** | 自动续跑默认 **10秒**;定时间隔默认 **自动**,固定 30s/4min/9min |
| **1.6.16** | **定时回复**:预设与 Hub 调度;修 panel duplicate let |
| **1.6.14** | 卡若AI Glass UISkill+部署文档完善 |
| **1.6.13** | 单对话三模式(复盘/直通/优化);`/api/session/config` |
| **1.6.12** | 侧栏增量渲染;智能滚底;顶栏精简 |
| **1.6.3** | 垂直绑定铁律 |
| **1.5** | 自动续跑默认开;恢复对话 |
---
## 卸载
```bash
rm -rf ~/.persistent-chat-local
# 编辑 ~/.cursor/mcp.json 删除 persistent-chat
```

View File

@@ -0,0 +1,3 @@
1.6.37
locked_at=2026-06-29T10:33:48+08:00
plugin_root=/Users/karuo/Documents/个人/persistent-chat-plugin

View File

@@ -0,0 +1,224 @@
{
"/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1": {
"token": "ct_f9feebda",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782448231182
},
"/Users/karuo/Documents/个人 2::Trae持续对话迁移@192.168.3.1": {
"token": "ct_8017ec8c",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782450795018
},
"/Users/karuo/Documents/个人::Trae重装验证-20260626@192.168.3.1": {
"token": "ct_3a4e8a75",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782448623061
},
"/Users/karuo/Documents/个人::可持续对话-20260626@192.168.3.1": {
"token": "ct_f3a15ea1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782453886768
},
"/Users/karuo/Documents/个人::持久对话永久续跑-20260626@192.168.3.1": {
"token": "ct_f3a15ea1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782450202336
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1": {
"token": "ct_79c877c9",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782471437537
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1": {
"token": "ct_79d712d3",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782471635094
},
"/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1": {
"token": "ct_fd19663f",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782481462482
},
"/Users/karuo/Documents/个人 2::mbti王@192.168.3.1": {
"token": "ct_e7f24f80",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782513791241
},
"/Users/karuo/Documents/个人 2::个人 2@192.168.3.1": {
"token": "ct_a9041b43",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782512901718
},
"/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1": {
"token": "ct_d2c4fd54",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782526295598
},
"/Users/karuo/Documents/个人 2::恢复Codex对话记录@192.168.3.1": {
"token": "ct_ca8c6f6d",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782527358213
},
"/Users/karuo/Documents/个人 2::mbti王-勾选已完成需求@192.168.3.1": {
"token": "ct_6ee84716",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782561067784
},
"/Users/karuo/Documents/个人 2::mbti王-需求勾选同步@192.168.3.1": {
"token": "ct_1f89ce17",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782561135829
},
"/Users/karuo/Documents/个人 2::mbti王-需求高考版整理@192.168.3.1": {
"token": "ct_2d71a51d",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782562082336
},
"/Users/karuo/Documents/个人::工作手机开发@192.168.3.1": {
"token": "ct_416ecd8a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782597502343
},
"/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1": {
"token": "ct_52930d68",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782566117547
},
"/Users/karuo/Documents/个人::工作手机部署NAS@192.168.3.1": {
"token": "ct_195ff862",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782568355795
},
"/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1": {
"token": "ct_b65f6044",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782638395011
},
"/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1": {
"token": "ct_4346073a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782572327886
},
"/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1": {
"token": "ct_a883e14a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782612844424
},
"/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1": {
"token": "ct_7dda1f8b",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782572328055
},
"/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1": {
"token": "ct_252aa00f",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782572308129
},
"/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1": {
"token": "ct_4b73f2a2",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782577296232
},
"/Users/karuo/Documents/个人::个人 2@192.168.3.1": {
"token": "ct_3da81225",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782696025212
},
"/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1": {
"token": "ct_b41c40ad",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782642489268
},
"/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1": {
"token": "ct_3d469745",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782643011397
},
"/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1": {
"token": "ct_857e1daf",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782664185114
},
"/Users/karuo/Documents/个人::工作手机@192.168.3.1": {
"token": "ct_0cee24c2",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782664228161
},
"/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1": {
"token": "ct_57f3beb5",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782646785446
},
"/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1": {
"token": "ct_fbbca11a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782648780698
},
"/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1": {
"token": "ct_db298e18",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782684364088
},
"/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1": {
"token": "ct_cc0ef5d9",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782687674552
},
"/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1": {
"token": "ct_6cc01012",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782688072444
},
"/Users/karuo/Documents/个人::soul视频@192.168.3.1": {
"token": "ct_6a6781d1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782701417290
},
"/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1": {
"token": "ct_71f7c3fe",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782696941588
},
"/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1": {
"token": "ct_4d8a312f",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782699663007
}
}

View File

@@ -0,0 +1,196 @@
model = "gpt-5.4"
model_reasoning_effort = "low"
service_tier = "priority"
personality = "pragmatic"
approval_policy = "never"
sandbox_mode = "danger-full-access"
check_for_update_on_startup = false
notify = ["/Users/karuo/.codex/computer-use/Codex Computer Use.app/Contents/SharedSupport/SkyComputerUseClient.app/Contents/MacOS/SkyComputerUseClient", "turn-ended"]
[marketplaces.openai-bundled]
last_updated = "2026-06-26T13:03:00Z"
source_type = "local"
source = "/Users/karuo/.codex/.tmp/bundled-marketplaces/openai-bundled"
[marketplaces.openai-primary-runtime]
last_updated = "2026-06-23T03:15:54Z"
source_type = "local"
source = "/Users/karuo/.cache/codex-runtimes/codex-primary-runtime/plugins/openai-primary-runtime"
[plugins."documents@openai-primary-runtime"]
enabled = true
[plugins."spreadsheets@openai-primary-runtime"]
enabled = true
[plugins."presentations@openai-primary-runtime"]
enabled = true
[plugins."hyperframes@openai-curated"]
enabled = true
[plugins."slack@openai-curated"]
enabled = true
[plugins."vercel@openai-curated"]
enabled = true
[plugins."build-macos-apps@openai-curated"]
enabled = true
[plugins."build-ios-apps@openai-curated"]
enabled = true
[plugins."build-web-apps@openai-curated"]
enabled = true
[plugins."figma@openai-curated"]
enabled = true
[plugins."windsor-ai@openai-curated"]
enabled = true
[plugins."remotion@openai-curated"]
enabled = true
[plugins."canva@openai-curated"]
enabled = true
[plugins."github@openai-curated"]
enabled = true
[plugins."pdf@openai-primary-runtime"]
enabled = true
[plugins."browser@openai-bundled"]
enabled = true
[plugins."template-creator@openai-primary-runtime"]
enabled = true
[plugins."chrome@openai-bundled"]
enabled = true
[plugins."computer-use@openai-bundled"]
enabled = true
[mcp_servers.node_repl]
args = []
command = "/Applications/Codex.app/Contents/Resources/node_repl"
startup_timeout_sec = 120
[mcp_servers.node_repl.env]
NODE_REPL_NATIVE_PIPE_CONNECT_TIMEOUT_MS = "1000"
NODE_REPL_NODE_MODULE_DIRS = ""
NODE_REPL_NODE_PATH = "/Applications/Codex.app/Contents/Resources/node"
NODE_REPL_TRUSTED_CODE_PATHS = "/Users/karuo/.codex"
CODEX_HOME = "/Users/karuo/.codex"
NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S = "496c7b3cb95b4bc20cff49b513150606e0da0000c92bf752206bee5a6c248423"
BROWSER_USE_AVAILABLE_BACKENDS = "chrome,iab"
BROWSER_USE_MARKETPLACE_NAME = "openai-bundled"
NODE_REPL_UNTRUSTED_ENV_ALLOWLIST = "BROWSER_USE_MARKETPLACE_NAME"
CODEX_CLI_PATH = "/Applications/Codex.app/Contents/Resources/codex"
[shell_environment_policy]
inherit = "core"
[shell_environment_policy.set]
ANTHROPIC_AUTH_TOKEN = "sk-ICT5L0hPqwNeTKvIDgMeOaivp4ojvEgUeykud1GSkQnUaFew"
ANTHROPIC_API_KEY = "sk-ICT5L0hPqwNeTKvIDgMeOaivp4ojvEgUeykud1GSkQnUaFew"
ANTHROPIC_BASE_URL = "https://timesniper.club"
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
ANTHROPIC_MODEL = "claude-sonnet-4-6"
[desktop]
conversationDetailMode = "STEPS_COMMANDS"
ambient-suggestions-enabled = true
preventSleepWhileRunning = true
reviewDelivery = "detached"
followUpQueueMode = "queue"
default-service-tier = "priority"
[desktop.open-in-target-preferences]
global = "fileManager"
[desktop.open-in-target-preferences.perPath]
"/Users/karuo/Documents/开发/2、私域银行/cunkebao_v3" = "fileManager"
[projects."/Users/karuo/Documents/Codex/2026-06-07/users-karuo-documents-ai-ai-ser"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/开发/2、私域银行/cunkebao_v3"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/开发/3、自营项目/BUDDY"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/开发/2、私域银行/工作手机"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/个人 2"]
trust_level = "trusted"
[projects."/Users/karuo/Movies/soul视频"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/开发/3、自营项目/mbti王"]
trust_level = "trusted"
[projects."/Users/karuo/Downloads/未命名文件夹 4"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/个人/卡若AI"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/个人"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/开发/4、小工具/服务器管理"]
trust_level = "trusted"
[projects."/Users/karuo/Documents/开发/3、自营项目/玩值电竞App"]
trust_level = "trusted"
[memories]
generate_memories = true
use_memories = true
disable_on_external_context = true
[features]
js_repl = false
[mcp_servers.persistent-chat]
command = "bash"
args = ["/Users/karuo/.persistent-chat-local/ensure-hub.sh", "--workspace=/Users/karuo/Documents/个人"]
[mcp_servers.persistent-chat.env]
PCHAT_VSIX_4TOOLS = "1"
PCHAT_TOOL_SET = "4"
PCHAT_SHORT_ROUND = "0"
PCHAT_PANEL_WAIT = "1"
PCHAT_WAKE_HOOK = "1"
PCHAT_CURSOR_AUTO_CONTINUE = "1"
PCHAT_HTTP_PORT = "13458"
PCHAT_NODE = "/usr/local/opt/node@22/bin/node"
[mcp_servers.persistent-chat.tools.wait_for_user_input]
approval_mode = "auto"
[mcp_servers.persistent-chat.tools.init_conversation]
approval_mode = "auto"
[mcp_servers.persistent-chat.tools.merge_conversation]
approval_mode = "auto"
[mcp_servers.persistent-chat.tools.select_conversation]
approval_mode = "auto"
[mcp_servers.persistent-chat.tools.verify_binding]
approval_mode = "auto"
[mcp_servers.persistent-chat.tools.verify_karuo_ai_gate]
approval_mode = "auto"
[mcp_servers.persistent-chat.tools.apply_binding_choice]
approval_mode = "auto"

View File

@@ -0,0 +1,141 @@
'use strict';
const fs = require('fs');
const path = require('path');
const { execFileSync } = require('child_process');
const crypto = require('crypto');
const HOME = process.env.HOME || process.env.USERPROFILE || '';
const VSCDB = path.join(
HOME,
'Library/Application Support/Cursor/User/globalStorage/state.vscdb'
);
const LOOP_DIR = path.join(HOME, '.cursor-loop');
const ACTIVE_VERTICAL = path.join(LOOP_DIR, 'active-vertical.json');
function normTitle(title) {
const t = String(title || '').trim();
return t || '(未命名标签)';
}
function readActiveVertical() {
try {
const raw = fs.readFileSync(ACTIVE_VERTICAL, 'utf8');
const j = JSON.parse(raw);
if (j && j.title) return j;
} catch {}
return null;
}
function writeActiveVertical(payload) {
try {
fs.mkdirSync(LOOP_DIR, { recursive: true });
fs.writeFileSync(
ACTIVE_VERTICAL,
JSON.stringify({ ...payload, updatedAt: Date.now() }, null, 2)
);
} catch {}
}
function queryVscdb(sql) {
if (!fs.existsSync(VSCDB)) return null;
try {
return execFileSync('sqlite3', [VSCDB, sql], { encoding: 'utf8', timeout: 3000 }).trim();
} catch {
return null;
}
}
function loadComposerHeaders() {
const raw = queryVscdb(
"SELECT value FROM ItemTable WHERE key='composer.composerHeaders' LIMIT 1;"
);
if (!raw) return null;
try {
return JSON.parse(raw);
} catch {
return null;
}
}
function pickComposer(headers, opts = {}) {
const list = headers?.allComposers || [];
const composerId =
opts.composerId ||
process.env.CURSOR_CONVERSATION_ID ||
process.env.CURSOR_CHAT_ID ||
process.env.COMPOSER_ID ||
readActiveVertical()?.composerId;
if (composerId) {
const hit = list.find((c) => c.composerId === composerId);
if (hit) return hit;
}
const wsHint = String(opts.workspace || '').replace(/\/+$/, '');
const candidates = list.filter((c) => c.type === 'head' && !c.isArchived);
if (wsHint) {
const wsMatch = candidates.filter((c) => {
const cfg = c.workspaceIdentifier?.configPath;
const fp = cfg?.fsPath || cfg?.path || '';
return fp && (wsHint.includes(fp) || fp.includes(wsHint));
});
if (wsMatch.length) {
wsMatch.sort((a, b) => (b.lastUpdatedAt || 0) - (a.lastUpdatedAt || 0));
return wsMatch[0];
}
}
candidates.sort((a, b) => (b.lastUpdatedAt || 0) - (a.lastUpdatedAt || 0));
return candidates[0] || null;
}
/** 解析当前 Cursor Agent 标签名真源args > threadLock > active-vertical > vscdb */
function resolveCursorTabTitle(opts = {}) {
const fromArgs = opts.cursorTitle || opts.title;
if (fromArgs && normTitle(fromArgs) !== '(未命名标签)') {
return { title: normTitle(fromArgs), source: 'args', composerId: opts.composerId || null };
}
const active = readActiveVertical();
if (active?.title && normTitle(active.title) !== '(未命名标签)') {
const age = Date.now() - (active.updatedAt || 0);
if (age < 30 * 60 * 1000) {
return {
title: normTitle(active.title),
source: 'active-vertical',
composerId: active.composerId || null,
};
}
}
const envTitle = process.env.CURSOR_CHAT_TITLE || process.env.PCHAT_CURSOR_TITLE;
if (envTitle) {
return { title: normTitle(envTitle), source: 'env', composerId: null };
}
const headers = loadComposerHeaders();
const composer = pickComposer(headers, opts);
if (composer?.name) {
const payload = {
composerId: composer.composerId,
title: normTitle(composer.name),
workspace: composer.workspaceIdentifier?.configPath?.fsPath || opts.workspace || '',
};
writeActiveVertical(payload);
return {
title: payload.title,
source: 'vscdb',
composerId: composer.composerId,
};
}
return { title: '', source: 'missing', composerId: null };
}
module.exports = {
resolveCursorTabTitle,
writeActiveVertical,
readActiveVertical,
ACTIVE_VERTICAL,
normTitle,
};

View File

@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# 启动 MCP 前确保 Hub 在 13458 运行(全局唯一)
set -eo pipefail
INSTALL="$(cd "$(dirname "$0")" && pwd)"
PORT="${PCHAT_HTTP_PORT:-13458}"
HUB_HOST="${PCHAT_HUB_HOST:-127.0.0.1}"
LOG="$INSTALL/logs/hub.log"
NODE="${PCHAT_NODE:-$(command -v node 2>/dev/null || true)}"
[[ -z "$NODE" ]] && NODE="/usr/local/opt/node@22/bin/node"
mkdir -p "$INSTALL/logs"
if [[ ! -x "$NODE" ]]; then
echo "[ensure-hub] FATAL: node not found: $NODE" >&2
exit 1
fi
hub_health() {
curl -sf -m 2 "http://${HUB_HOST}:${PORT}/api/health" >/dev/null 2>&1
}
start_hub() {
if hub_health; then return 0; fi
if [[ "$HUB_HOST" != "127.0.0.1" && "$HUB_HOST" != "localhost" ]]; then
echo "[ensure-hub] remote hub not ready: http://${HUB_HOST}:${PORT}; fallback to local :${PORT}" >> "$LOG"
HUB_HOST="127.0.0.1"
export PCHAT_HUB_HOST="$HUB_HOST"
hub_health && return 0
fi
echo "[ensure-hub] starting hub on :${PORT}" >> "$LOG"
nohup "$NODE" "$INSTALL/hub.js" >> "$INSTALL/logs/hub.stdout.log" 2>&1 &
local i=0
while [[ $i -lt 80 ]]; do
hub_health && return 0
sleep 0.15
i=$((i + 1))
done
return 1
}
if ! start_hub; then
echo "[ensure-hub] FATAL: Hub not ready on ${HUB_HOST}:${PORT} (waited ~12s). Run: bash 卡若AI/.../Cursor持久对话/脚本/sync-runtime.sh" >&2
exit 1
fi
# Cursor 无工作区时 ${workspaceFolder} 可能为空/none/未替换字面量 → 兜底 HOME
ARGS=()
for a in "$@"; do
case "$a" in
--workspace=|--workspace=none|--workspace=\$\{workspaceFolder\})
ARGS+=("--workspace=$HOME")
;;
--workspace=*)
ARGS+=("$a")
;;
*)
ARGS+=("$a")
;;
esac
done
if [[ ${#ARGS[@]} -eq 0 ]] || ! printf '%s\n' "${ARGS[@]}" | grep -q '^--workspace='; then
ARGS+=("--workspace=${PWD:-$HOME}")
fi
exec "$NODE" "$INSTALL/server.js" "${ARGS[@]}"

View File

@@ -0,0 +1,143 @@
#!/usr/bin/env bash
# 方案B · Hub 短回合唤醒守护HTTP 拉续跑 → 写入 ~/.cursor-loop/wake/{ct_}.md
set -u
PORT="${PCHAT_HTTP_PORT:-13458}"
HUB="http://127.0.0.1:${PORT}"
export WAKE_DIR="${PCHAT_WAKE_DIR:-$HOME/.cursor-loop/wake}"
LOG_DIR="${PCHAT_WAKE_LOG_DIR:-$HOME/.cursor-loop/logs}"
LOG="$LOG_DIR/hub_wake_daemon.log"
POLL_SEC="${PCHAT_WAKE_POLL_SEC:-2}"
mkdir -p "$WAKE_DIR" "$LOG_DIR"
log() {
printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >>"$LOG"
}
hub_ok() {
curl -sf -m 2 "$HUB/api/health" >/dev/null 2>&1
}
# 禁止 curl|python3 - <<'PY'pipe 与 heredoc 争 stdinjson.load 恒失败)
pull_tokens() {
local state_json
state_json="$(curl -sf -m 5 "$HUB/api/state" 2>/dev/null)" || return 0
[[ -z "$state_json" ]] && return 0
PCHAT_STATE_JSON="$state_json" python3 - <<'PY'
import os, json
try:
d = json.loads(os.environ.get("PCHAT_STATE_JSON", "{}"))
except Exception:
raise SystemExit(0)
seen = set()
for s in d.get("sessions") or []:
if s.get("isAbandoned"):
continue
sq = int(s.get("steerQueueCount") or 0)
short = bool(s.get("shortRoundMode"))
if short:
manual = bool(s.get("steerManualQueued"))
panel_pending = bool(s.get("panelPendingSince"))
if not manual and not panel_pending:
continue
elif not (s.get("connectionHeld") or s.get("hasPending") or sq > 0):
continue
tok = (s.get("token") or "").strip()
if tok.startswith("ct_") and tok not in seen:
seen.add(tok)
print(tok)
PY
}
process_wake_pull() {
local token="$1"
local resp out status
resp="$(curl -sf -m 5 -X POST "$HUB/api/wake/pull" \
-H 'Content-Type: application/json' \
-d "{\"token\":\"$token\"}" 2>/dev/null || echo '{}')"
[[ -z "$resp" ]] && return 0
out="$(WAKE_DIR="$WAKE_DIR" WAKE_RESP="$resp" python3 - <<'PY' 2>/dev/null || true
import os, json, sys, time
from datetime import datetime
try:
d = json.loads(os.environ.get("WAKE_RESP", "{}"))
except Exception:
sys.exit(2)
if d.get("status") != "replied":
sys.exit(1)
token = d.get("token", "")
reply = d.get("reply", "")
title = d.get("cursorTitle", "")
workspace = d.get("workspace", "")
manual = bool(d.get("manual"))
auto = bool(d.get("auto"))
wake_dir = os.environ.get("WAKE_DIR", os.path.expanduser("~/.cursor-loop/wake"))
path = os.path.join(wake_dir, f"{token}.md")
body = f"""# Hub 唤醒 · 方案B
- **token**: `{token}`
- **cursorTitle**: {title}
- **workspace**: {workspace}
- **at**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
- **来源**: {'面板消息' if manual else '自动续跑(仅备查,不注入对话)'}
## 续跑指令Agent 下轮必须先 Read 本文件再执行)
```text
{reply}
```
## Agent 动作
1. Read 本文件 + 进行中需求 MD + `references/不间断开发_G22b叠加G26.md`
2. 执行 ▶wait 须 shortRound默认禁止长 poll
3. 复盘五块 → shortRound register
"""
os.makedirs(wake_dir, exist_ok=True)
with open(path, "w", encoding="utf-8") as f:
f.write(body)
# 仅面板真人消息写 pending供可选 PCHAT_WAKE_HOOK=1自动续跑禁止注入 Cursor 对话
if manual:
pending_path = os.path.join(wake_dir, f"_pending_{token}.json")
payload = {
"token": token,
"reply": reply,
"cursorTitle": title,
"workspace": workspace,
"at": time.time(),
"consumed": False,
"manual": True,
"auto": False,
}
with open(pending_path, "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False)
legacy = os.path.join(wake_dir, "_pending_followup.json")
with open(legacy, "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False)
print(f"replied|{path}|manual={int(manual)}")
PY
)"
if [[ -n "$out" && "$out" == replied\|* ]]; then
log "pull ok token=$token path=${out#replied|}"
return 0
fi
status="$(printf '%s' "$resp" | python3 -c 'import sys,json; print(json.load(sys.stdin).get("status",""))' 2>/dev/null || echo '')"
if [[ -n "$status" && "$status" != "replied" ]]; then
log "pull skip token=$token status=$status"
fi
}
log "daemon start hub=$HUB wake=$WAKE_DIR poll=${POLL_SEC}s"
while true; do
if ! hub_ok; then
log "hub offline, sleep ${POLL_SEC}s"
sleep "$POLL_SEC"
continue
fi
while IFS= read -r token; do
[[ -z "$token" ]] && continue
process_wake_pull "$token"
done < <(pull_tokens || true)
sleep "$POLL_SEC"
done

View File

@@ -0,0 +1,52 @@
#!/usr/bin/env python3
"""持久对话会话 → MongoDB karuo_site.持久对话会话(本地 ~/.persistent-chat-local/sessions.json"""
import json
import os
import sys
from datetime import datetime, timezone
HOME = os.path.expanduser("~")
SESSIONS_FILE = os.path.join(HOME, ".persistent-chat-local", "sessions.json")
MONGO_URI = os.environ.get("MONGO_URI", "mongodb://127.0.0.1:27017")
DB_NAME = os.environ.get("MONGO_DB", "karuo_site")
COLL_NAME = "持久对话会话"
def main() -> int:
if not os.path.isfile(SESSIONS_FILE):
print("SKIP: no sessions.json")
return 0
try:
from pymongo import MongoClient
except ImportError:
print("SKIP: pymongo not installed (pip3 install pymongo)")
return 0
with open(SESSIONS_FILE, encoding="utf-8") as f:
data = json.load(f)
client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=4000)
client.admin.command("ping")
col = client[DB_NAME][COLL_NAME]
col.create_index("token", unique=True)
col.create_index("workspace")
col.create_index("lastActiveAt")
now = datetime.now(timezone.utc)
n = 0
for token, sess in data.items():
doc = dict(sess)
doc["token"] = token
doc["mongo_sync_at"] = now
col.update_one({"token": token}, {"$set": doc}, upsert=True)
n += 1
print(f"OK: synced {n} sessions → {DB_NAME}.{COLL_NAME}")
return 0
if __name__ == "__main__":
try:
sys.exit(main())
except Exception as e:
print(f"FAIL: {e}", file=sys.stderr)
sys.exit(1)

View File

@@ -0,0 +1,374 @@
{
"/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1#MCP连接验证-20260626": {
"token": "ct_f9feebda",
"planLabel": "MCP连接验证-20260626",
"cursorTitle": "MCP连接验证-20260626",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782448231183
},
"ct_f9feebda": {
"planBindingKey": "/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1#MCP连接验证-20260626",
"updatedAt": 1782448231183
},
"/Users/karuo/Documents/个人::可持续对话-20260626@192.168.3.1#持久对话永久续跑-20260626": {
"token": "ct_f3a15ea1",
"planLabel": "持久对话永久续跑-20260626",
"cursorTitle": "可持续对话-20260626",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782453886768
},
"ct_f3a15ea1": {
"planBindingKey": "/Users/karuo/Documents/个人::可持续对话-20260626@192.168.3.1#持久对话永久续跑-20260626",
"updatedAt": 1782453886768
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1#CODEX持续对话不中断修复": {
"token": "ct_79c877c9",
"planLabel": "CODEX持续对话不中断修复",
"cursorTitle": "CODEX持续对话不中断修复",
"workspace": "/Users/karuo/Movies/soul视频",
"hostIp": "192.168.3.1",
"updatedAt": 1782471437528
},
"ct_79c877c9": {
"planBindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1#CODEX持续对话不中断修复",
"updatedAt": 1782471437528
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1#持续对话不中断验证": {
"token": "ct_79d712d3",
"planLabel": "持续对话不中断验证",
"cursorTitle": "CODEX持续对话不中断验证",
"workspace": "/Users/karuo/Movies/soul视频",
"hostIp": "192.168.3.1",
"updatedAt": 1782471635087
},
"ct_79d712d3": {
"planBindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1#持续对话不中断验证",
"updatedAt": 1782471635087
},
"/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1#继续用可持续对话": {
"token": "ct_fd19663f",
"planLabel": "继续用可持续对话",
"cursorTitle": "继续用可持续对话",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782510271641
},
"ct_fd19663f": {
"planBindingKey": "/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1#继续用可持续对话",
"updatedAt": 1782510271641
},
"/Users/karuo/Documents/个人 2::个人 2@192.168.3.1#个人 2": {
"token": "ct_a9041b43",
"planLabel": "个人 2",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782512901723
},
"ct_a9041b43": {
"planBindingKey": "/Users/karuo/Documents/个人 2::个人 2@192.168.3.1#个人 2",
"updatedAt": 1782512901723
},
"/Users/karuo/Documents/个人 2::mbti王@192.168.3.1#mbti王": {
"token": "ct_e7f24f80",
"planLabel": "mbti王",
"cursorTitle": "mbti王",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782513791244
},
"ct_e7f24f80": {
"planBindingKey": "/Users/karuo/Documents/个人 2::mbti王@192.168.3.1#mbti王",
"updatedAt": 1782513791244
},
"/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1#thread-read-fix": {
"token": "ct_d2c4fd54",
"planLabel": "thread-read-fix",
"cursorTitle": "修复Codex线程读取报错",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782526295581
},
"ct_d2c4fd54": {
"planBindingKey": "/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1#thread-read-fix",
"updatedAt": 1782526295581
},
"/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1#Trae迁移到Codex": {
"token": "ct_52930d68",
"planLabel": "Trae迁移到Codex",
"cursorTitle": "Codex可持续对话迁移验证",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782566117561
},
"ct_52930d68": {
"planBindingKey": "/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1#Trae迁移到Codex",
"updatedAt": 1782566117561
},
"/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1#版本降级": {
"token": "ct_b65f6044",
"planLabel": "版本降级",
"cursorTitle": "工作手机版本降级到1.6.37",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782638395016
},
"ct_b65f6044": {
"planBindingKey": "/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1#版本降级",
"updatedAt": 1782638395016
},
"/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1#舒克宝微信链路全面检查": {
"token": "ct_4346073a",
"planLabel": "舒克宝微信链路全面检查",
"cursorTitle": "存客宝工作手机微信链路全面检查",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782571686629
},
"ct_4346073a": {
"planBindingKey": "/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1#舒克宝微信链路全面检查",
"updatedAt": 1782571686629
},
"/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1#全项目_20260620完整验收": {
"token": "ct_a883e14a",
"planLabel": "全项目_20260620完整验收",
"cursorTitle": "私域银行全项目需求开发",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782612844432
},
"ct_a883e14a": {
"planBindingKey": "/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1#全项目_20260620完整验收",
"updatedAt": 1782612844432
},
"/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1#存客宝功能完善测试": {
"token": "ct_7dda1f8b",
"planLabel": "存客宝功能完善测试",
"cursorTitle": "存客宝功能完善复检",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782572302281
},
"ct_7dda1f8b": {
"planBindingKey": "/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1#存客宝功能完善测试",
"updatedAt": 1782572302281
},
"/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1#MBTI需求高考版整理": {
"token": "ct_252aa00f",
"planLabel": "MBTI需求高考版整理",
"cursorTitle": "mbti王-需求高考版整理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782572308124
},
"ct_252aa00f": {
"planBindingKey": "/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1#MBTI需求高考版整理",
"updatedAt": 1782572308124
},
"/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1#Trae配置迁移": {
"token": "ct_4b73f2a2",
"planLabel": "Trae配置迁移",
"cursorTitle": "Trae 中英文版配置迁移",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782577296247
},
"ct_4b73f2a2": {
"planBindingKey": "/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1#Trae配置迁移",
"updatedAt": 1782577296247
},
"/Users/karuo/Documents/个人::个人 2@192.168.3.1#wzdj证书修复": {
"token": "ct_67f25313",
"planLabel": "wzdj证书修复",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782664676328
},
"ct_67f25313": {
"planBindingKey": "/Users/karuo/Documents/个人::个人 2@192.168.3.1#wzdj证书修复",
"updatedAt": 1782664676328
},
"/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1#接口梳理": {
"token": "ct_b41c40ad",
"planLabel": "接口梳理",
"cursorTitle": "对接配置接口梳理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782642485459
},
"ct_b41c40ad": {
"planBindingKey": "/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1#接口梳理",
"updatedAt": 1782642485459
},
"/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1#工作手机源码调研": {
"token": "ct_3d469745",
"planLabel": "工作手机源码调研",
"cursorTitle": "市场调研-工作手机源码",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782643011409
},
"ct_3d469745": {
"planBindingKey": "/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1#工作手机源码调研",
"updatedAt": 1782643011409
},
"/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#超管工作手机切换文档": {
"token": "ct_c3308636",
"planLabel": "超管工作手机切换文档",
"cursorTitle": "SuperAdmin工作手机切换需求文档",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782645124103
},
"ct_c3308636": {
"planBindingKey": "/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#超管工作手机切换文档",
"updatedAt": 1782645124103
},
"/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#SuperAdmin需求文档续改": {
"token": "ct_857e1daf",
"planLabel": "SuperAdmin需求文档续改",
"cursorTitle": "SuperAdmin工作手机切换需求文档",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782664185131
},
"ct_857e1daf": {
"planBindingKey": "/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#SuperAdmin需求文档续改",
"updatedAt": 1782664185131
},
"/Users/karuo/Documents/个人::工作手机@192.168.3.1#工作手机需求可用性闭环": {
"token": "ct_0cee24c2",
"planLabel": "工作手机需求可用性闭环",
"cursorTitle": "工作手机",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782664228186
},
"ct_0cee24c2": {
"planBindingKey": "/Users/karuo/Documents/个人::工作手机@192.168.3.1#工作手机需求可用性闭环",
"updatedAt": 1782664228186
},
"/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1#工作手机SDK演示": {
"token": "ct_57f3beb5",
"planLabel": "工作手机SDK演示",
"cursorTitle": "工作手机SDK演示",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782646775961
},
"ct_57f3beb5": {
"planBindingKey": "/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1#工作手机SDK演示",
"updatedAt": 1782646775961
},
"/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1#SuperAdmin当日需求": {
"token": "ct_fbbca11a",
"planLabel": "SuperAdmin当日需求",
"cursorTitle": "SuperAdmin当日需求",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782648775395
},
"ct_fbbca11a": {
"planBindingKey": "/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1#SuperAdmin当日需求",
"updatedAt": 1782648775395
},
"/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1#SuperAdmin当日需求": {
"token": "ct_db298e18",
"planLabel": "SuperAdmin当日需求",
"cursorTitle": "私域银行-工作手机开发",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782684364098
},
"ct_db298e18": {
"planBindingKey": "/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1#SuperAdmin当日需求",
"updatedAt": 1782684364098
},
"/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1#Codex限额监控插件": {
"token": "ct_cc0ef5d9",
"planLabel": "Codex限额监控插件",
"cursorTitle": "Codex限额监控插件",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782687674569
},
"ct_cc0ef5d9": {
"planBindingKey": "/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1#Codex限额监控插件",
"updatedAt": 1782687674569
},
"/Users/karuo/Documents/个人::个人 2@192.168.3.1#Manus接入持久对话": {
"token": "ct_3da81225",
"planLabel": "Manus接入持久对话",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782696025219
},
"ct_3da81225": {
"planBindingKey": "/Users/karuo/Documents/个人::个人 2@192.168.3.1#Manus接入持久对话",
"updatedAt": 1782696025219
},
"/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1#SOUL派对高光剪辑": {
"token": "ct_6cc01012",
"planLabel": "SOUL派对高光剪辑",
"cursorTitle": "运营-剪辑",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782688062113
},
"ct_6cc01012": {
"planBindingKey": "/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1#SOUL派对高光剪辑",
"updatedAt": 1782688062113
},
"/Users/karuo/Documents/个人::soul视频@192.168.3.1#soul视频": {
"token": "ct_266be1c6",
"planLabel": "soul视频",
"cursorTitle": "soul视频",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782700792676
},
"ct_266be1c6": {
"planBindingKey": "/Users/karuo/Documents/个人::soul视频@192.168.3.1#soul视频",
"updatedAt": 1782700792676
},
"/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1#创业派对收费策略": {
"token": "ct_71f7c3fe",
"planLabel": "创业派对收费策略",
"cursorTitle": "卡若创业派对收费策略需求整理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782696941576
},
"ct_71f7c3fe": {
"planBindingKey": "/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1#创业派对收费策略",
"updatedAt": 1782696941576
},
"/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1#团队分润": {
"token": "ct_4d8a312f",
"planLabel": "团队分润",
"cursorTitle": "Soul创业派对团队分润问题处理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782699662995
},
"ct_4d8a312f": {
"planBindingKey": "/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1#团队分润",
"updatedAt": 1782699662995
},
"/Users/karuo/Documents/个人::soul视频@192.168.3.1#Soul创业实验永平需求续做": {
"token": "ct_6a6781d1",
"planLabel": "Soul创业实验永平需求续做",
"cursorTitle": "soul视频",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782701413827
},
"ct_6a6781d1": {
"planBindingKey": "/Users/karuo/Documents/个人::soul视频@192.168.3.1#Soul创业实验永平需求续做",
"updatedAt": 1782701413827
}
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_d2c4fd54",
"cursorTitle": "修复Codex线程读取报错",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782526295598,
"pid": 38300,
"planLabel": "thread-read-fix"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_7dda1f8b",
"cursorTitle": "存客宝功能完善复检",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782572328055,
"pid": 87533
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_8017ec8c",
"cursorTitle": "Trae持续对话迁移",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::Trae持续对话迁移@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782450795018,
"pid": 14597
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_71f7c3fe",
"cursorTitle": "卡若创业派对收费策略需求整理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782696941588,
"pid": 15742,
"planLabel": "创业派对收费策略"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_e7f24f80",
"cursorTitle": "mbti王",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782513791241,
"pid": 34781
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_57f3beb5",
"cursorTitle": "工作手机SDK演示",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782646785446,
"pid": 98947
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_1f89ce17",
"cursorTitle": "mbti王-需求勾选同步",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王-需求勾选同步@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782561135829,
"pid": 41876,
"planLabel": "需求勾选同步"
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_4346073a",
"cursorTitle": "存客宝工作手机微信链路全面检查",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782572327886,
"pid": 65001,
"planLabel": "存客宝触客宝界面功能检查"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_f3a15ea1",
"cursorTitle": "持久对话永久续跑-20260626",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::持久对话永久续跑-20260626@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782450202336,
"pid": 55199
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_6a6781d1",
"cursorTitle": "soul视频",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::soul视频@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782701417290,
"pid": 87594
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_6ee84716",
"cursorTitle": "mbti王-勾选已完成需求",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王-勾选已完成需求@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782561067784,
"pid": 36829,
"planLabel": "需求勾选"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_52930d68",
"cursorTitle": "Codex可持续对话迁移验证",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782566117547,
"pid": 96891
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_ca8c6f6d",
"cursorTitle": "恢复Codex对话记录",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::恢复Codex对话记录@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782527358213,
"pid": 92286,
"planLabel": "时间机器恢复"
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_79c877c9",
"cursorTitle": "CODEX持续对话不中断修复",
"workspace": "/Users/karuo/Movies/soul视频",
"bindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782471437537,
"pid": 16399,
"planLabel": ""
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_0cee24c2",
"cursorTitle": "工作手机",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782664228161,
"pid": 86421
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_cc0ef5d9",
"cursorTitle": "Codex限额监控插件",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782687674552,
"pid": 48375
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_2d71a51d",
"cursorTitle": "mbti王-需求高考版整理",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王-需求高考版整理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782562082336,
"pid": 41876
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_3a4e8a75",
"cursorTitle": "Trae重装验证-20260626",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Trae重装验证-20260626@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782448623061,
"pid": 55199
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_fd19663f",
"cursorTitle": "继续用可持续对话",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782481462482,
"pid": 46545
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_b41c40ad",
"cursorTitle": "对接配置接口梳理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782642489268,
"pid": 81431
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_252aa00f",
"cursorTitle": "mbti王-需求高考版整理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782572308129,
"pid": 94233,
"planLabel": "MBTI需求高考版整理"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_857e1daf",
"cursorTitle": "SuperAdmin工作手机切换需求文档",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782664185114,
"pid": 80276
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_a9041b43",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::个人 2@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782512901718,
"pid": 22997
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_4d8a312f",
"cursorTitle": "Soul创业派对团队分润问题处理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782699663007,
"pid": 49055,
"planLabel": "团队分润"
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_79d712d3",
"cursorTitle": "CODEX持续对话不中断验证",
"workspace": "/Users/karuo/Movies/soul视频",
"bindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782471635094,
"pid": 16399,
"planLabel": "持续对话不中断验证"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_4b73f2a2",
"cursorTitle": "Trae 中英文版配置迁移",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782577296232,
"pid": 35503
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_416ecd8a",
"cursorTitle": "工作手机开发",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机开发@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782597502343,
"pid": 81064,
"planLabel": ""
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_3d469745",
"cursorTitle": "市场调研-工作手机源码",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782643011397,
"pid": 1413
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_fbbca11a",
"cursorTitle": "SuperAdmin当日需求",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782648780698,
"pid": 63569
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_b65f6044",
"cursorTitle": "工作手机版本降级到1.6.37",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782638395011,
"pid": 73734
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_6cc01012",
"cursorTitle": "运营-剪辑",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782688072444,
"pid": 92533
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_195ff862",
"cursorTitle": "工作手机部署NAS",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机部署NAS@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782568355795,
"pid": 1588
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_73cb8e3f",
"cursorTitle": "MCP连接验证-20260626",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782448332091,
"pid": 53976
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_a883e14a",
"cursorTitle": "私域银行全项目需求开发",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782612844424,
"pid": 2535
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_3da81225",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::个人 2@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782696025212,
"pid": 30641
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_db298e18",
"cursorTitle": "私域银行-工作手机开发",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782684364088,
"pid": 1460
}

View File

@@ -0,0 +1,224 @@
{
"/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1": {
"token": "ct_f9feebda",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782448231182
},
"/Users/karuo/Documents/个人 2::Trae持续对话迁移@192.168.3.1": {
"token": "ct_8017ec8c",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782450795018
},
"/Users/karuo/Documents/个人::Trae重装验证-20260626@192.168.3.1": {
"token": "ct_3a4e8a75",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782448623061
},
"/Users/karuo/Documents/个人::可持续对话-20260626@192.168.3.1": {
"token": "ct_f3a15ea1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782453886768
},
"/Users/karuo/Documents/个人::持久对话永久续跑-20260626@192.168.3.1": {
"token": "ct_f3a15ea1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782450202336
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1": {
"token": "ct_79c877c9",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782471437537
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1": {
"token": "ct_79d712d3",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782471635094
},
"/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1": {
"token": "ct_fd19663f",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782481462482
},
"/Users/karuo/Documents/个人 2::mbti王@192.168.3.1": {
"token": "ct_e7f24f80",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782513791241
},
"/Users/karuo/Documents/个人 2::个人 2@192.168.3.1": {
"token": "ct_a9041b43",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782512901718
},
"/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1": {
"token": "ct_d2c4fd54",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782526295598
},
"/Users/karuo/Documents/个人 2::恢复Codex对话记录@192.168.3.1": {
"token": "ct_ca8c6f6d",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782527358213
},
"/Users/karuo/Documents/个人 2::mbti王-勾选已完成需求@192.168.3.1": {
"token": "ct_6ee84716",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782561067784
},
"/Users/karuo/Documents/个人 2::mbti王-需求勾选同步@192.168.3.1": {
"token": "ct_1f89ce17",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782561135829
},
"/Users/karuo/Documents/个人 2::mbti王-需求高考版整理@192.168.3.1": {
"token": "ct_2d71a51d",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782562082336
},
"/Users/karuo/Documents/个人::工作手机开发@192.168.3.1": {
"token": "ct_416ecd8a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782597502343
},
"/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1": {
"token": "ct_52930d68",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782566117547
},
"/Users/karuo/Documents/个人::工作手机部署NAS@192.168.3.1": {
"token": "ct_195ff862",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"updatedAt": 1782568355795
},
"/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1": {
"token": "ct_b65f6044",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782638395011
},
"/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1": {
"token": "ct_4346073a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782572327886
},
"/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1": {
"token": "ct_a883e14a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782612844424
},
"/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1": {
"token": "ct_7dda1f8b",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782572328055
},
"/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1": {
"token": "ct_252aa00f",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782572308129
},
"/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1": {
"token": "ct_4b73f2a2",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782577296232
},
"/Users/karuo/Documents/个人::个人 2@192.168.3.1": {
"token": "ct_3da81225",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782696025212
},
"/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1": {
"token": "ct_b41c40ad",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782642489268
},
"/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1": {
"token": "ct_3d469745",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782643011397
},
"/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1": {
"token": "ct_857e1daf",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782664185114
},
"/Users/karuo/Documents/个人::工作手机@192.168.3.1": {
"token": "ct_0cee24c2",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782664228161
},
"/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1": {
"token": "ct_57f3beb5",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782646785446
},
"/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1": {
"token": "ct_fbbca11a",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782648780698
},
"/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1": {
"token": "ct_db298e18",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782684364088
},
"/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1": {
"token": "ct_cc0ef5d9",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782687674552
},
"/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1": {
"token": "ct_6cc01012",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782688072444
},
"/Users/karuo/Documents/个人::soul视频@192.168.3.1": {
"token": "ct_6a6781d1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782701417290
},
"/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1": {
"token": "ct_71f7c3fe",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782696941588
},
"/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1": {
"token": "ct_4d8a312f",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"updatedAt": 1782699663007
}
}

View File

@@ -0,0 +1,141 @@
'use strict';
const fs = require('fs');
const path = require('path');
const { execFileSync } = require('child_process');
const crypto = require('crypto');
const HOME = process.env.HOME || process.env.USERPROFILE || '';
const VSCDB = path.join(
HOME,
'Library/Application Support/Cursor/User/globalStorage/state.vscdb'
);
const LOOP_DIR = path.join(HOME, '.cursor-loop');
const ACTIVE_VERTICAL = path.join(LOOP_DIR, 'active-vertical.json');
function normTitle(title) {
const t = String(title || '').trim();
return t || '(未命名标签)';
}
function readActiveVertical() {
try {
const raw = fs.readFileSync(ACTIVE_VERTICAL, 'utf8');
const j = JSON.parse(raw);
if (j && j.title) return j;
} catch {}
return null;
}
function writeActiveVertical(payload) {
try {
fs.mkdirSync(LOOP_DIR, { recursive: true });
fs.writeFileSync(
ACTIVE_VERTICAL,
JSON.stringify({ ...payload, updatedAt: Date.now() }, null, 2)
);
} catch {}
}
function queryVscdb(sql) {
if (!fs.existsSync(VSCDB)) return null;
try {
return execFileSync('sqlite3', [VSCDB, sql], { encoding: 'utf8', timeout: 3000 }).trim();
} catch {
return null;
}
}
function loadComposerHeaders() {
const raw = queryVscdb(
"SELECT value FROM ItemTable WHERE key='composer.composerHeaders' LIMIT 1;"
);
if (!raw) return null;
try {
return JSON.parse(raw);
} catch {
return null;
}
}
function pickComposer(headers, opts = {}) {
const list = headers?.allComposers || [];
const composerId =
opts.composerId ||
process.env.CURSOR_CONVERSATION_ID ||
process.env.CURSOR_CHAT_ID ||
process.env.COMPOSER_ID ||
readActiveVertical()?.composerId;
if (composerId) {
const hit = list.find((c) => c.composerId === composerId);
if (hit) return hit;
}
const wsHint = String(opts.workspace || '').replace(/\/+$/, '');
const candidates = list.filter((c) => c.type === 'head' && !c.isArchived);
if (wsHint) {
const wsMatch = candidates.filter((c) => {
const cfg = c.workspaceIdentifier?.configPath;
const fp = cfg?.fsPath || cfg?.path || '';
return fp && (wsHint.includes(fp) || fp.includes(wsHint));
});
if (wsMatch.length) {
wsMatch.sort((a, b) => (b.lastUpdatedAt || 0) - (a.lastUpdatedAt || 0));
return wsMatch[0];
}
}
candidates.sort((a, b) => (b.lastUpdatedAt || 0) - (a.lastUpdatedAt || 0));
return candidates[0] || null;
}
/** 解析当前 Cursor Agent 标签名真源args > threadLock > active-vertical > vscdb */
function resolveCursorTabTitle(opts = {}) {
const fromArgs = opts.cursorTitle || opts.title;
if (fromArgs && normTitle(fromArgs) !== '(未命名标签)') {
return { title: normTitle(fromArgs), source: 'args', composerId: opts.composerId || null };
}
const active = readActiveVertical();
if (active?.title && normTitle(active.title) !== '(未命名标签)') {
const age = Date.now() - (active.updatedAt || 0);
if (age < 30 * 60 * 1000) {
return {
title: normTitle(active.title),
source: 'active-vertical',
composerId: active.composerId || null,
};
}
}
const envTitle = process.env.CURSOR_CHAT_TITLE || process.env.PCHAT_CURSOR_TITLE;
if (envTitle) {
return { title: normTitle(envTitle), source: 'env', composerId: null };
}
const headers = loadComposerHeaders();
const composer = pickComposer(headers, opts);
if (composer?.name) {
const payload = {
composerId: composer.composerId,
title: normTitle(composer.name),
workspace: composer.workspaceIdentifier?.configPath?.fsPath || opts.workspace || '',
};
writeActiveVertical(payload);
return {
title: payload.title,
source: 'vscdb',
composerId: composer.composerId,
};
}
return { title: '', source: 'missing', composerId: null };
}
module.exports = {
resolveCursorTabTitle,
writeActiveVertical,
readActiveVertical,
ACTIVE_VERTICAL,
normTitle,
};

View File

@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# 启动 MCP 前确保 Hub 在 13458 运行(全局唯一)
set -eo pipefail
INSTALL="$(cd "$(dirname "$0")" && pwd)"
PORT="${PCHAT_HTTP_PORT:-13458}"
HUB_HOST="${PCHAT_HUB_HOST:-127.0.0.1}"
LOG="$INSTALL/logs/hub.log"
NODE="${PCHAT_NODE:-$(command -v node 2>/dev/null || true)}"
[[ -z "$NODE" ]] && NODE="/usr/local/opt/node@22/bin/node"
mkdir -p "$INSTALL/logs"
if [[ ! -x "$NODE" ]]; then
echo "[ensure-hub] FATAL: node not found: $NODE" >&2
exit 1
fi
hub_health() {
curl -sf -m 2 "http://${HUB_HOST}:${PORT}/api/health" >/dev/null 2>&1
}
start_hub() {
if hub_health; then return 0; fi
if [[ "$HUB_HOST" != "127.0.0.1" && "$HUB_HOST" != "localhost" ]]; then
echo "[ensure-hub] remote hub not ready: http://${HUB_HOST}:${PORT}; fallback to local :${PORT}" >> "$LOG"
HUB_HOST="127.0.0.1"
export PCHAT_HUB_HOST="$HUB_HOST"
hub_health && return 0
fi
echo "[ensure-hub] starting hub on :${PORT}" >> "$LOG"
nohup "$NODE" "$INSTALL/hub.js" >> "$INSTALL/logs/hub.stdout.log" 2>&1 &
local i=0
while [[ $i -lt 80 ]]; do
hub_health && return 0
sleep 0.15
i=$((i + 1))
done
return 1
}
if ! start_hub; then
echo "[ensure-hub] FATAL: Hub not ready on ${HUB_HOST}:${PORT} (waited ~12s). Run: bash 卡若AI/.../Cursor持久对话/脚本/sync-runtime.sh" >&2
exit 1
fi
# Cursor 无工作区时 ${workspaceFolder} 可能为空/none/未替换字面量 → 兜底 HOME
ARGS=()
for a in "$@"; do
case "$a" in
--workspace=|--workspace=none|--workspace=\$\{workspaceFolder\})
ARGS+=("--workspace=$HOME")
;;
--workspace=*)
ARGS+=("$a")
;;
*)
ARGS+=("$a")
;;
esac
done
if [[ ${#ARGS[@]} -eq 0 ]] || ! printf '%s\n' "${ARGS[@]}" | grep -q '^--workspace='; then
ARGS+=("--workspace=${PWD:-$HOME}")
fi
exec "$NODE" "$INSTALL/server.js" "${ARGS[@]}"

View File

@@ -0,0 +1,143 @@
#!/usr/bin/env bash
# 方案B · Hub 短回合唤醒守护HTTP 拉续跑 → 写入 ~/.cursor-loop/wake/{ct_}.md
set -u
PORT="${PCHAT_HTTP_PORT:-13458}"
HUB="http://127.0.0.1:${PORT}"
export WAKE_DIR="${PCHAT_WAKE_DIR:-$HOME/.cursor-loop/wake}"
LOG_DIR="${PCHAT_WAKE_LOG_DIR:-$HOME/.cursor-loop/logs}"
LOG="$LOG_DIR/hub_wake_daemon.log"
POLL_SEC="${PCHAT_WAKE_POLL_SEC:-2}"
mkdir -p "$WAKE_DIR" "$LOG_DIR"
log() {
printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >>"$LOG"
}
hub_ok() {
curl -sf -m 2 "$HUB/api/health" >/dev/null 2>&1
}
# 禁止 curl|python3 - <<'PY'pipe 与 heredoc 争 stdinjson.load 恒失败)
pull_tokens() {
local state_json
state_json="$(curl -sf -m 5 "$HUB/api/state" 2>/dev/null)" || return 0
[[ -z "$state_json" ]] && return 0
PCHAT_STATE_JSON="$state_json" python3 - <<'PY'
import os, json
try:
d = json.loads(os.environ.get("PCHAT_STATE_JSON", "{}"))
except Exception:
raise SystemExit(0)
seen = set()
for s in d.get("sessions") or []:
if s.get("isAbandoned"):
continue
sq = int(s.get("steerQueueCount") or 0)
short = bool(s.get("shortRoundMode"))
if short:
manual = bool(s.get("steerManualQueued"))
panel_pending = bool(s.get("panelPendingSince"))
if not manual and not panel_pending:
continue
elif not (s.get("connectionHeld") or s.get("hasPending") or sq > 0):
continue
tok = (s.get("token") or "").strip()
if tok.startswith("ct_") and tok not in seen:
seen.add(tok)
print(tok)
PY
}
process_wake_pull() {
local token="$1"
local resp out status
resp="$(curl -sf -m 5 -X POST "$HUB/api/wake/pull" \
-H 'Content-Type: application/json' \
-d "{\"token\":\"$token\"}" 2>/dev/null || echo '{}')"
[[ -z "$resp" ]] && return 0
out="$(WAKE_DIR="$WAKE_DIR" WAKE_RESP="$resp" python3 - <<'PY' 2>/dev/null || true
import os, json, sys, time
from datetime import datetime
try:
d = json.loads(os.environ.get("WAKE_RESP", "{}"))
except Exception:
sys.exit(2)
if d.get("status") != "replied":
sys.exit(1)
token = d.get("token", "")
reply = d.get("reply", "")
title = d.get("cursorTitle", "")
workspace = d.get("workspace", "")
manual = bool(d.get("manual"))
auto = bool(d.get("auto"))
wake_dir = os.environ.get("WAKE_DIR", os.path.expanduser("~/.cursor-loop/wake"))
path = os.path.join(wake_dir, f"{token}.md")
body = f"""# Hub 唤醒 · 方案B
- **token**: `{token}`
- **cursorTitle**: {title}
- **workspace**: {workspace}
- **at**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
- **来源**: {'面板消息' if manual else '自动续跑(仅备查,不注入对话)'}
## 续跑指令Agent 下轮必须先 Read 本文件再执行)
```text
{reply}
```
## Agent 动作
1. Read 本文件 + 进行中需求 MD + `references/不间断开发_G22b叠加G26.md`
2. 执行 ▶wait 须 shortRound默认禁止长 poll
3. 复盘五块 → shortRound register
"""
os.makedirs(wake_dir, exist_ok=True)
with open(path, "w", encoding="utf-8") as f:
f.write(body)
# 仅面板真人消息写 pending供可选 PCHAT_WAKE_HOOK=1自动续跑禁止注入 Cursor 对话
if manual:
pending_path = os.path.join(wake_dir, f"_pending_{token}.json")
payload = {
"token": token,
"reply": reply,
"cursorTitle": title,
"workspace": workspace,
"at": time.time(),
"consumed": False,
"manual": True,
"auto": False,
}
with open(pending_path, "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False)
legacy = os.path.join(wake_dir, "_pending_followup.json")
with open(legacy, "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False)
print(f"replied|{path}|manual={int(manual)}")
PY
)"
if [[ -n "$out" && "$out" == replied\|* ]]; then
log "pull ok token=$token path=${out#replied|}"
return 0
fi
status="$(printf '%s' "$resp" | python3 -c 'import sys,json; print(json.load(sys.stdin).get("status",""))' 2>/dev/null || echo '')"
if [[ -n "$status" && "$status" != "replied" ]]; then
log "pull skip token=$token status=$status"
fi
}
log "daemon start hub=$HUB wake=$WAKE_DIR poll=${POLL_SEC}s"
while true; do
if ! hub_ok; then
log "hub offline, sleep ${POLL_SEC}s"
sleep "$POLL_SEC"
continue
fi
while IFS= read -r token; do
[[ -z "$token" ]] && continue
process_wake_pull "$token"
done < <(pull_tokens || true)
sleep "$POLL_SEC"
done

View File

@@ -0,0 +1,52 @@
#!/usr/bin/env python3
"""持久对话会话 → MongoDB karuo_site.持久对话会话(本地 ~/.persistent-chat-local/sessions.json"""
import json
import os
import sys
from datetime import datetime, timezone
HOME = os.path.expanduser("~")
SESSIONS_FILE = os.path.join(HOME, ".persistent-chat-local", "sessions.json")
MONGO_URI = os.environ.get("MONGO_URI", "mongodb://127.0.0.1:27017")
DB_NAME = os.environ.get("MONGO_DB", "karuo_site")
COLL_NAME = "持久对话会话"
def main() -> int:
if not os.path.isfile(SESSIONS_FILE):
print("SKIP: no sessions.json")
return 0
try:
from pymongo import MongoClient
except ImportError:
print("SKIP: pymongo not installed (pip3 install pymongo)")
return 0
with open(SESSIONS_FILE, encoding="utf-8") as f:
data = json.load(f)
client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=4000)
client.admin.command("ping")
col = client[DB_NAME][COLL_NAME]
col.create_index("token", unique=True)
col.create_index("workspace")
col.create_index("lastActiveAt")
now = datetime.now(timezone.utc)
n = 0
for token, sess in data.items():
doc = dict(sess)
doc["token"] = token
doc["mongo_sync_at"] = now
col.update_one({"token": token}, {"$set": doc}, upsert=True)
n += 1
print(f"OK: synced {n} sessions → {DB_NAME}.{COLL_NAME}")
return 0
if __name__ == "__main__":
try:
sys.exit(main())
except Exception as e:
print(f"FAIL: {e}", file=sys.stderr)
sys.exit(1)

View File

@@ -0,0 +1,374 @@
{
"/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1#MCP连接验证-20260626": {
"token": "ct_f9feebda",
"planLabel": "MCP连接验证-20260626",
"cursorTitle": "MCP连接验证-20260626",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782448231183
},
"ct_f9feebda": {
"planBindingKey": "/Users/karuo/Documents/个人::MCP连接验证-20260626@192.168.3.1#MCP连接验证-20260626",
"updatedAt": 1782448231183
},
"/Users/karuo/Documents/个人::可持续对话-20260626@192.168.3.1#持久对话永久续跑-20260626": {
"token": "ct_f3a15ea1",
"planLabel": "持久对话永久续跑-20260626",
"cursorTitle": "可持续对话-20260626",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782453886768
},
"ct_f3a15ea1": {
"planBindingKey": "/Users/karuo/Documents/个人::可持续对话-20260626@192.168.3.1#持久对话永久续跑-20260626",
"updatedAt": 1782453886768
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1#CODEX持续对话不中断修复": {
"token": "ct_79c877c9",
"planLabel": "CODEX持续对话不中断修复",
"cursorTitle": "CODEX持续对话不中断修复",
"workspace": "/Users/karuo/Movies/soul视频",
"hostIp": "192.168.3.1",
"updatedAt": 1782471437528
},
"ct_79c877c9": {
"planBindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1#CODEX持续对话不中断修复",
"updatedAt": 1782471437528
},
"/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1#持续对话不中断验证": {
"token": "ct_79d712d3",
"planLabel": "持续对话不中断验证",
"cursorTitle": "CODEX持续对话不中断验证",
"workspace": "/Users/karuo/Movies/soul视频",
"hostIp": "192.168.3.1",
"updatedAt": 1782471635087
},
"ct_79d712d3": {
"planBindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1#持续对话不中断验证",
"updatedAt": 1782471635087
},
"/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1#继续用可持续对话": {
"token": "ct_fd19663f",
"planLabel": "继续用可持续对话",
"cursorTitle": "继续用可持续对话",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782510271641
},
"ct_fd19663f": {
"planBindingKey": "/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1#继续用可持续对话",
"updatedAt": 1782510271641
},
"/Users/karuo/Documents/个人 2::个人 2@192.168.3.1#个人 2": {
"token": "ct_a9041b43",
"planLabel": "个人 2",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782512901723
},
"ct_a9041b43": {
"planBindingKey": "/Users/karuo/Documents/个人 2::个人 2@192.168.3.1#个人 2",
"updatedAt": 1782512901723
},
"/Users/karuo/Documents/个人 2::mbti王@192.168.3.1#mbti王": {
"token": "ct_e7f24f80",
"planLabel": "mbti王",
"cursorTitle": "mbti王",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782513791244
},
"ct_e7f24f80": {
"planBindingKey": "/Users/karuo/Documents/个人 2::mbti王@192.168.3.1#mbti王",
"updatedAt": 1782513791244
},
"/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1#thread-read-fix": {
"token": "ct_d2c4fd54",
"planLabel": "thread-read-fix",
"cursorTitle": "修复Codex线程读取报错",
"workspace": "/Users/karuo/Documents/个人 2",
"hostIp": "192.168.3.1",
"updatedAt": 1782526295581
},
"ct_d2c4fd54": {
"planBindingKey": "/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1#thread-read-fix",
"updatedAt": 1782526295581
},
"/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1#Trae迁移到Codex": {
"token": "ct_52930d68",
"planLabel": "Trae迁移到Codex",
"cursorTitle": "Codex可持续对话迁移验证",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782566117561
},
"ct_52930d68": {
"planBindingKey": "/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1#Trae迁移到Codex",
"updatedAt": 1782566117561
},
"/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1#版本降级": {
"token": "ct_b65f6044",
"planLabel": "版本降级",
"cursorTitle": "工作手机版本降级到1.6.37",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782638395016
},
"ct_b65f6044": {
"planBindingKey": "/Users/karuo/Documents/个人::工作手机版本降级到1.6.37@192.168.3.1#版本降级",
"updatedAt": 1782638395016
},
"/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1#舒克宝微信链路全面检查": {
"token": "ct_4346073a",
"planLabel": "舒克宝微信链路全面检查",
"cursorTitle": "存客宝工作手机微信链路全面检查",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782571686629
},
"ct_4346073a": {
"planBindingKey": "/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1#舒克宝微信链路全面检查",
"updatedAt": 1782571686629
},
"/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1#全项目_20260620完整验收": {
"token": "ct_a883e14a",
"planLabel": "全项目_20260620完整验收",
"cursorTitle": "私域银行全项目需求开发",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782612844432
},
"ct_a883e14a": {
"planBindingKey": "/Users/karuo/Documents/个人::私域银行全项目需求开发@192.168.3.1#全项目_20260620完整验收",
"updatedAt": 1782612844432
},
"/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1#存客宝功能完善测试": {
"token": "ct_7dda1f8b",
"planLabel": "存客宝功能完善测试",
"cursorTitle": "存客宝功能完善复检",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782572302281
},
"ct_7dda1f8b": {
"planBindingKey": "/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1#存客宝功能完善测试",
"updatedAt": 1782572302281
},
"/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1#MBTI需求高考版整理": {
"token": "ct_252aa00f",
"planLabel": "MBTI需求高考版整理",
"cursorTitle": "mbti王-需求高考版整理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782572308124
},
"ct_252aa00f": {
"planBindingKey": "/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1#MBTI需求高考版整理",
"updatedAt": 1782572308124
},
"/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1#Trae配置迁移": {
"token": "ct_4b73f2a2",
"planLabel": "Trae配置迁移",
"cursorTitle": "Trae 中英文版配置迁移",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782577296247
},
"ct_4b73f2a2": {
"planBindingKey": "/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1#Trae配置迁移",
"updatedAt": 1782577296247
},
"/Users/karuo/Documents/个人::个人 2@192.168.3.1#wzdj证书修复": {
"token": "ct_67f25313",
"planLabel": "wzdj证书修复",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782664676328
},
"ct_67f25313": {
"planBindingKey": "/Users/karuo/Documents/个人::个人 2@192.168.3.1#wzdj证书修复",
"updatedAt": 1782664676328
},
"/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1#接口梳理": {
"token": "ct_b41c40ad",
"planLabel": "接口梳理",
"cursorTitle": "对接配置接口梳理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782642485459
},
"ct_b41c40ad": {
"planBindingKey": "/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1#接口梳理",
"updatedAt": 1782642485459
},
"/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1#工作手机源码调研": {
"token": "ct_3d469745",
"planLabel": "工作手机源码调研",
"cursorTitle": "市场调研-工作手机源码",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782643011409
},
"ct_3d469745": {
"planBindingKey": "/Users/karuo/Documents/个人::市场调研-工作手机源码@192.168.3.1#工作手机源码调研",
"updatedAt": 1782643011409
},
"/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#超管工作手机切换文档": {
"token": "ct_c3308636",
"planLabel": "超管工作手机切换文档",
"cursorTitle": "SuperAdmin工作手机切换需求文档",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782645124103
},
"ct_c3308636": {
"planBindingKey": "/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#超管工作手机切换文档",
"updatedAt": 1782645124103
},
"/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#SuperAdmin需求文档续改": {
"token": "ct_857e1daf",
"planLabel": "SuperAdmin需求文档续改",
"cursorTitle": "SuperAdmin工作手机切换需求文档",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782664185131
},
"ct_857e1daf": {
"planBindingKey": "/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1#SuperAdmin需求文档续改",
"updatedAt": 1782664185131
},
"/Users/karuo/Documents/个人::工作手机@192.168.3.1#工作手机需求可用性闭环": {
"token": "ct_0cee24c2",
"planLabel": "工作手机需求可用性闭环",
"cursorTitle": "工作手机",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782664228186
},
"ct_0cee24c2": {
"planBindingKey": "/Users/karuo/Documents/个人::工作手机@192.168.3.1#工作手机需求可用性闭环",
"updatedAt": 1782664228186
},
"/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1#工作手机SDK演示": {
"token": "ct_57f3beb5",
"planLabel": "工作手机SDK演示",
"cursorTitle": "工作手机SDK演示",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782646775961
},
"ct_57f3beb5": {
"planBindingKey": "/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1#工作手机SDK演示",
"updatedAt": 1782646775961
},
"/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1#SuperAdmin当日需求": {
"token": "ct_fbbca11a",
"planLabel": "SuperAdmin当日需求",
"cursorTitle": "SuperAdmin当日需求",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782648775395
},
"ct_fbbca11a": {
"planBindingKey": "/Users/karuo/Documents/个人::SuperAdmin当日需求@192.168.3.1#SuperAdmin当日需求",
"updatedAt": 1782648775395
},
"/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1#SuperAdmin当日需求": {
"token": "ct_db298e18",
"planLabel": "SuperAdmin当日需求",
"cursorTitle": "私域银行-工作手机开发",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782684364098
},
"ct_db298e18": {
"planBindingKey": "/Users/karuo/Documents/个人::私域银行-工作手机开发@192.168.3.1#SuperAdmin当日需求",
"updatedAt": 1782684364098
},
"/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1#Codex限额监控插件": {
"token": "ct_cc0ef5d9",
"planLabel": "Codex限额监控插件",
"cursorTitle": "Codex限额监控插件",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782687674569
},
"ct_cc0ef5d9": {
"planBindingKey": "/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1#Codex限额监控插件",
"updatedAt": 1782687674569
},
"/Users/karuo/Documents/个人::个人 2@192.168.3.1#Manus接入持久对话": {
"token": "ct_3da81225",
"planLabel": "Manus接入持久对话",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782696025219
},
"ct_3da81225": {
"planBindingKey": "/Users/karuo/Documents/个人::个人 2@192.168.3.1#Manus接入持久对话",
"updatedAt": 1782696025219
},
"/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1#SOUL派对高光剪辑": {
"token": "ct_6cc01012",
"planLabel": "SOUL派对高光剪辑",
"cursorTitle": "运营-剪辑",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782688062113
},
"ct_6cc01012": {
"planBindingKey": "/Users/karuo/Documents/个人::运营-剪辑@192.168.3.1#SOUL派对高光剪辑",
"updatedAt": 1782688062113
},
"/Users/karuo/Documents/个人::soul视频@192.168.3.1#soul视频": {
"token": "ct_266be1c6",
"planLabel": "soul视频",
"cursorTitle": "soul视频",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782700792676
},
"ct_266be1c6": {
"planBindingKey": "/Users/karuo/Documents/个人::soul视频@192.168.3.1#soul视频",
"updatedAt": 1782700792676
},
"/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1#创业派对收费策略": {
"token": "ct_71f7c3fe",
"planLabel": "创业派对收费策略",
"cursorTitle": "卡若创业派对收费策略需求整理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782696941576
},
"ct_71f7c3fe": {
"planBindingKey": "/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1#创业派对收费策略",
"updatedAt": 1782696941576
},
"/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1#团队分润": {
"token": "ct_4d8a312f",
"planLabel": "团队分润",
"cursorTitle": "Soul创业派对团队分润问题处理",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782699662995
},
"ct_4d8a312f": {
"planBindingKey": "/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1#团队分润",
"updatedAt": 1782699662995
},
"/Users/karuo/Documents/个人::soul视频@192.168.3.1#Soul创业实验永平需求续做": {
"token": "ct_6a6781d1",
"planLabel": "Soul创业实验永平需求续做",
"cursorTitle": "soul视频",
"workspace": "/Users/karuo/Documents/个人",
"hostIp": "192.168.3.1",
"updatedAt": 1782701413827
},
"ct_6a6781d1": {
"planBindingKey": "/Users/karuo/Documents/个人::soul视频@192.168.3.1#Soul创业实验永平需求续做",
"updatedAt": 1782701413827
}
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_d2c4fd54",
"cursorTitle": "修复Codex线程读取报错",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::修复Codex线程读取报错@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782526295598,
"pid": 38300,
"planLabel": "thread-read-fix"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_7dda1f8b",
"cursorTitle": "存客宝功能完善复检",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::存客宝功能完善复检@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782572328055,
"pid": 87533
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_8017ec8c",
"cursorTitle": "Trae持续对话迁移",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::Trae持续对话迁移@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782450795018,
"pid": 14597
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_71f7c3fe",
"cursorTitle": "卡若创业派对收费策略需求整理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::卡若创业派对收费策略需求整理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782696941588,
"pid": 15742,
"planLabel": "创业派对收费策略"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_e7f24f80",
"cursorTitle": "mbti王",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782513791241,
"pid": 34781
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_57f3beb5",
"cursorTitle": "工作手机SDK演示",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机SDK演示@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782646785446,
"pid": 98947
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_1f89ce17",
"cursorTitle": "mbti王-需求勾选同步",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王-需求勾选同步@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782561135829,
"pid": 41876,
"planLabel": "需求勾选同步"
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_4346073a",
"cursorTitle": "存客宝工作手机微信链路全面检查",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::存客宝工作手机微信链路全面检查@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782572327886,
"pid": 65001,
"planLabel": "存客宝触客宝界面功能检查"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_f3a15ea1",
"cursorTitle": "持久对话永久续跑-20260626",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::持久对话永久续跑-20260626@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782450202336,
"pid": 55199
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_6a6781d1",
"cursorTitle": "soul视频",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::soul视频@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782701417290,
"pid": 87594
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_6ee84716",
"cursorTitle": "mbti王-勾选已完成需求",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王-勾选已完成需求@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782561067784,
"pid": 36829,
"planLabel": "需求勾选"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_52930d68",
"cursorTitle": "Codex可持续对话迁移验证",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Codex可持续对话迁移验证@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782566117547,
"pid": 96891
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_ca8c6f6d",
"cursorTitle": "恢复Codex对话记录",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::恢复Codex对话记录@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "192.168.110.101:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782527358213,
"pid": 92286,
"planLabel": "时间机器恢复"
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_79c877c9",
"cursorTitle": "CODEX持续对话不中断修复",
"workspace": "/Users/karuo/Movies/soul视频",
"bindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断修复@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782471437537,
"pid": 16399,
"planLabel": ""
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_0cee24c2",
"cursorTitle": "工作手机",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::工作手机@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782664228161,
"pid": 86421
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_cc0ef5d9",
"cursorTitle": "Codex限额监控插件",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Codex限额监控插件@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782687674552,
"pid": 48375
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_2d71a51d",
"cursorTitle": "mbti王-需求高考版整理",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::mbti王-需求高考版整理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782562082336,
"pid": 41876
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_3a4e8a75",
"cursorTitle": "Trae重装验证-20260626",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Trae重装验证-20260626@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782448623061,
"pid": 55199
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_fd19663f",
"cursorTitle": "继续用可持续对话",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::继续用可持续对话@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782481462482,
"pid": 46545
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_b41c40ad",
"cursorTitle": "对接配置接口梳理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::对接配置接口梳理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782642489268,
"pid": 81431
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_252aa00f",
"cursorTitle": "mbti王-需求高考版整理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::mbti王-需求高考版整理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782572308129,
"pid": 94233,
"planLabel": "MBTI需求高考版整理"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_857e1daf",
"cursorTitle": "SuperAdmin工作手机切换需求文档",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::SuperAdmin工作手机切换需求文档@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782664185114,
"pid": 80276
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_a9041b43",
"cursorTitle": "个人 2",
"workspace": "/Users/karuo/Documents/个人 2",
"bindingKey": "/Users/karuo/Documents/个人 2::个人 2@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782512901718,
"pid": 22997
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_4d8a312f",
"cursorTitle": "Soul创业派对团队分润问题处理",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Soul创业派对团队分润问题处理@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782699663007,
"pid": 49055,
"planLabel": "团队分润"
}

View File

@@ -0,0 +1,13 @@
{
"token": "ct_79d712d3",
"cursorTitle": "CODEX持续对话不中断验证",
"workspace": "/Users/karuo/Movies/soul视频",
"bindingKey": "/Users/karuo/Movies/soul视频::CODEX持续对话不中断验证@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782471635094,
"pid": 16399,
"planLabel": "持续对话不中断验证"
}

View File

@@ -0,0 +1,12 @@
{
"token": "ct_4b73f2a2",
"cursorTitle": "Trae 中英文版配置迁移",
"workspace": "/Users/karuo/Documents/个人",
"bindingKey": "/Users/karuo/Documents/个人::Trae 中英文版配置迁移@192.168.3.1",
"hostIp": "192.168.3.1",
"hub": "127.0.0.1:13458",
"composerId": "",
"verticalLock": true,
"updatedAt": 1782577296232,
"pid": 35503
}

Some files were not shown because too many files have changed in this diff Show More