一个窗口,就是一个工作空间
§、打开 qqqide = 打开一个窗口 = 一个工作空间。
§、每个工作空间绑定一个「主文件夹」(带 ★ 标识),这是这个窗口的"家":
- 项目锁挂在这里(30 秒心跳、60 秒过期,防止同一项目被两个窗口同时写)
- AI 对话数据、项目偏好、编辑器布局全部存在这个文件夹下的
_qqq/里 - 切换主文件夹 = 新开一个窗口。一个窗口一生只有一个主文件夹。
§、工作空间之间物理隔离:每个窗口有独立的同步频道、独立的项目锁、独立的 AI 对话数据。两个窗口可以各干各的,互不干扰。
AI 视口 — 工作空间的"眼睛"
§、窗口顶部的文件夹豆腐块列表,就是 AI 视口——它决定了 AI 此刻能看见哪些文件。
§、第一个被添加的文件夹(项目)是「主文件夹」,一个窗口最多一个,带 ★ 标识,不可移除。
§、可以继续点击「+」添加更多文件夹(项目)作为「辅文件夹」——不再像传统编辑器那样被限定在一个项目里。前端、后端、文档、设计稿……放在同一窗口中级联开发。
§、点击辅文件夹尾部的「-」可将其从 AI 视野中移除。
§、光标右键单击每一个文件夹豆腐块,可快速进入项目检索。
§、红色数字是该文件夹 git 未提交的文件数。
工作空间 与 AI 视口 的关系
一句话:工作空间是"物理边界",AI 视口是"AI 的视野"。
| 工作空间 | AI 视口 | |
|---|---|---|
| 管什么 | 锁哪个项目、数据写哪里、和哪个窗口通信 | AI 能看哪些文件夹、按什么顺序看 |
| 粒度 | 一个窗口 = 一个工作空间 = 一个主文件夹 | 主文件夹 ★ + 任意多个辅文件夹 |
| 物理载体 | 项目锁 .lock、_qqq/ 数据目录、独立同步频道 | 视口数组(顺序即显示顺序) |
| 变化方式 | 新开窗口 | 随时 +/- 增删辅文件夹 |
两者的交点就是主文件夹:它既是工作空间的"家"(锁、数据、对话都挂它名下),也是 AI 视口第一个、永不移除的条目。
project → quest → floor → house → room — 我们原创的五级结构
这是 qqqide 最核心的原创概念。任何一条 AI 对话记录,都能精确到五级定位:
| 层级 | 含义 | 例子 |
|---|---|---|
| project | 项目(主文件夹 / 工作空间) | E:\s\wol\py\qqq-shell-v2 |
| quest | 一次对话会话 | q3.重构 API 层 |
| floor | 一次用户回车(可能含多次 AI 调用) | f2.调试索引 |
| house | 一次 AI 调用(可能含多次工具调用) | h1 |
| room | 一次工具调用 | r3 |
物理上,它长这样:
项目/_qqq/quests/
├── _index.json ← 所有 quest 的索引(标题/楼层数/状态)
├── q1.搭建数据库层/
│ ├── f1.设计 schema/
│ │ ├── all.json ← 机器用:完整对话 + 计费 + 文件快照引用
│ │ ├── all.txt ← 人类读:纯文本母本,记事本/grep 直接消费
│ │ └── reasoning.txt ← 审计用:工具调用摘要
│ ├── f2.调试索引/
│ └── f3.性能优化/
├── q2.重构 API 层/
└── ...
为什么不是"会话 + 消息"两级,而是要五级?
因为每一级都是一个真实存在的物理单元,都能独立寻址、独立引用:
- 你可以精确说"参考 q1/f2 继续"——AI 只加载那一层楼的完整上下文,不浪费 token 拖上整个 quest。
- 你甚至可以精确到一次工具调用:文件版本时间线(Timeline)里每一行代码变更都带着 trace 标记——
q3/f2/h1/r2意思是"quest 3、第 2 层楼、第 1 次 AI 调用、第 2 个工具调用产生的"。 - 点开这段代码的 diff,就能跳回产生它的那一层楼,看到 AI 当时的完整推理:为什么这样改、踩了什么坑、否决了什么方案。
竞品只有"会话",我们有的是"档案"。 会话是流水账,档案是每层楼一个文件夹、三份文件、带因果链的完整记录。
为什么这是全球唯一的
| 维度 | ChatGPT | Claude Code | Copilot | Cursor | qqqide |
|---|---|---|---|---|---|
| 上下文物理位置 | 云端 | 云端 | 云端 | 云端 | 本地硬盘,跟代码同树 |
| 最小可寻址单位 | 会话(扁平列表) | 会话 | 无 | 会话 | 楼层,甚至精确到一次工具调用 |
| 层级结构 | ❌ | ❌ | ❌ | ❌ | project→quest→floor→house→room 五级 |
| 全文检索 | ❌ 只能搜标题 | ❌ | ❌ | ❌ | ✅ ripgrep 毫秒级全文 |
| 导出 / 迁移 | 一次性 JSON,无工具链 | ❌ | ❌ | ❌ | ✅ 拷贝项目文件夹 = 带走一切 |
| 代码 ↔ 对话关联 | ❌ | ❌ | ❌ | ❌ | ✅ trace 双向追溯 |
| 人类可读存档 | ❌ | ❌ | ❌ | ❌ | ✅ 每层楼 all.txt 纯文本 |
| 离线可用 | ❌ | ❌ | 部分 | ❌ | ✅ |
这不是"我们比他们多做几个功能",而是物理可行性差异:
- 数据在不在本地——竞品对话全在服务商服务器上,你连 ripgrep 都无处可扫;qqqide 的数据就在项目
_qqq/quests/里,毫秒级全文检索。 - 格式开不开放——竞品即使给导出,也是扁平的一次性 JSON,没有目录结构、没有楼层粒度;qqqide 是开放的双轨格式(all.json + all.txt),机器可加载、人可 grep、任何工具可消费。
- 有没有因果链——竞品的代码和对话是断裂的;qqqide 靠 trace 把"代码变更 ↔ 产生它的对话 ↔ 当时的推理"永久绑在一起。
竞品不是"没做",而是"架构上做不到"。 云端 + 扁平 + 封闭的三重物理限制,让它们永远无法到达这五级结构。
为什么这很重要
1. 上下文是 AI 时代最稀缺的生产资料
代码可以重写,但"AI 为什么这样改"的推理链、"上次踩过的坑"、"这个架构决策的来龙去脉"——一旦丢失,无法重建。所有主流工具都在系统性地制造这种丢失:对话存在服务商服务器上,你换工具 = 一切归零。
2. 我们要的是「原料级」资产,不是"聊天记录"
一场 AI 对话产生的全部可留存信息,qqqide 逐项完整保存:
| 原料 | 存哪里 | 用途 |
|---|---|---|
| 完整对话(结构化) | all.json | AI 精确加载某层楼 |
| 完整对话(人类可读) | all.txt | 全文检索、快速浏览 |
| 审计摘要 | reasoning.txt | 快速了解 AI 做了什么 |
| 代码快照(SHA256 不可变) | timeline/blobs/ | 任何时候恢复任何版本 |
| 代码变更索引 | timeline.db + wal | 查询文件变更历史 |
| 因果链 | trace(q/f/h/r) | 代码 ↔ 对话双向追溯 |
| 预渲染 HTML | ai_html | 重启零损耗还原 |
| Quest 元信息 | _index.json | O(1) 列出所有对话 |
竞品也会成长但相比之下大概存在结构性缺陷(自由层面 - 由公司性质决定),更不用提你滴核心资产往往是以服务商控制的格式、存在服务商控制的服务器。
3. 反锁定:拷贝文件夹 = 完整迁移
你越用,积累越多;积累越多,迁移成本越高;迁移成本越高,你越离不开——这是竞品的商业锁定。qqqide 从根上拒绝:数据在本地、格式开放、层级可寻址,拷贝项目文件夹就是完整迁移,你的上下文永远是你自己的。
4. 精确引用 = 每一分 token 都花在刀刃上
五级结构让 AI 只需要加载相关的几层楼,而不是整个会话。引用历史、开分支、跨任务复用,都建立在"每层楼独立可寻址"这个物理基础上。
一句话总结
工作空间是你的地盘,AI 视口是 AI 的眼睛,五级结构是你所有 AI 记忆的完整档案。 别人把对话锁在云端当"租客",我们把每一层楼、每一次工具调用、每一条因果链都留在你的硬盘上——把原料级的上下文资产,还给它的创造者:你。