Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
529c4b9
refactor: 目录按用途分组,删除 clangd 时代死代码
Sunrisepeak Oct 2, 2026
5a439a4
feat(i18n,config): 中英文案跟随 VS Code,配置注册表成为单一事实源
Sunrisepeak Oct 2, 2026
73d7dbd
feat(mcppls,cli): 能力探测/降级、C++ Modules 状态适配层、mcpp 协议与错误分层、缓存聚合
Sunrisepeak Oct 2, 2026
3160cd5
feat(views): 三棵视图树的纯模型、清理计划表与工程摘要
Sunrisepeak Oct 2, 2026
4c85f95
feat(buildscript): mcpp build-script API snapshot and self-contained …
Sunrisepeak Oct 2, 2026
e342eee
feat(toml): mcpp.toml 段/键/枚举快照与七条清单诊断
Sunrisepeak Oct 2, 2026
6feaa4d
chore(ci): 生成物漂移门禁与 npm 脚本
Sunrisepeak Oct 2, 2026
2569a7a
docs: 统一 mcpp.toml 枚举键名为 opt(mcpp 实际拼写)
Sunrisepeak Oct 2, 2026
f6042cc
docs: 记录 round 1 进展与下一轮起点
Sunrisepeak Oct 2, 2026
058788b
feat(views,commands): 视图容器、三棵视图、清理命令、C++ Modules 状态视图、配置面板与清单接线
Sunrisepeak Oct 2, 2026
32dc167
chore(release): 0.5.0 版本、英文更新日志与本地验收 profile
Sunrisepeak Oct 2, 2026
342ee26
docs: 英文 README 与中文对照,补齐用户文档;e2e 覆盖五种 mcppls 变体
Sunrisepeak Oct 2, 2026
0ee0319
test: 修正版本与双语 README 断言;e2e 支持用已安装的 VS Code 运行
Sunrisepeak Oct 2, 2026
a759edc
feat: 补齐 §8 缺口(TOML hover/跳转/键补全、缓存 webview 面板、设置接线)、CI 体系与两条防倒退门禁
Sunrisepeak Oct 2, 2026
69c3e3b
docs: 修正 round 3 起已实现的功能描述(TOML 悬停/跳转/键补全、缓存 webview 面板)
Sunrisepeak Oct 2, 2026
783e739
fix(package): 本地验收 profile 曾被打进 VSIX(4035 文件 64.7 MB)
Sunrisepeak Oct 2, 2026
5d8ecff
feat: 快捷键、视图可见性、设置重命名提示、语言服务版本提示;例外表防腐烂
Sunrisepeak Oct 2, 2026
8415024
feat: 64 个设置全部接线;例外表清零,改为'间接读取'证据表
Sunrisepeak Oct 2, 2026
519705c
docs(settings): 每个设置的中文说明直接取自 package.nls.zh-cn.json
Sunrisepeak Oct 2, 2026
c0a9568
ci(release): 发布产物也加体积与目录守卫
Sunrisepeak Oct 2, 2026
11c804c
docs(plan): 记录 round 5 进展
Sunrisepeak Oct 2, 2026
8518f89
feat(i18n): 硬编码中文 162 行清零,并加上'纯模块不依赖 vscode'的架构门禁
Sunrisepeak Oct 2, 2026
441e968
docs(plan): round 5 收尾状态
Sunrisepeak Oct 2, 2026
02a7758
feat(ui): 侧边栏重组为 工程 / mcpp 库生态 / 缓存(0.6.0)
Sunrisepeak Oct 2, 2026
c4c2222
fix(views): 修正'关闭视图会移除活动栏图标'这一错误假设,并补两处遗漏
Sunrisepeak Oct 2, 2026
11ded01
fix(ui): 按真实实例的 6 条反馈修正(0.6.0)
Sunrisepeak Oct 2, 2026
12e84f2
fix(ui): 修库视图渲染死循环、菜单图标配色、cache 默认折叠、状态栏背景(0.6.0)
Sunrisepeak Oct 2, 2026
51f2556
fix(ui): 侧边栏配比、库标签与详情页重排、年龄渐变、新建工程入口(0.6.0)
Sunrisepeak Oct 3, 2026
721fcb9
feat(menu): C++ Modules 分组补上抓日志与日志/压缩包定位(0.6.0 补)
Sunrisepeak Oct 3, 2026
273f299
refactor(library): 去掉筛选标签行、详情页合成一行按钮;说明活动栏 logo 为何是单色
Sunrisepeak Oct 3, 2026
3f1cec9
feat(library): 详情页认识"已添加/已安装版本",按钮变为切换版本;外链点击不再无声
Sunrisepeak Oct 3, 2026
7a7dd44
docs: 0.6.0 更新日志与 README 与实现对齐(含验收轮次修掉的真 bug)
Sunrisepeak Oct 3, 2026
34c7c35
fix(ci): 修好两处只在 CI 才会红的门禁(都不是功能 bug,但都该本地可复现)
Sunrisepeak Oct 3, 2026
8688388
fix(ci): isolated-install 自己下载 VS Code——runner 本来就没有 code CLI
Sunrisepeak Oct 3, 2026
02917a0
ci: 三平台矩阵——gates/e2e/isolated-install 都跑 Linux+macOS+Windows
Sunrisepeak Oct 3, 2026
461fd84
ci: VS Code 下载加外层重试与 .vscode-test 缓存(macos 瞬断过一轮)
Sunrisepeak Oct 3, 2026
88bfc31
docs: 方案 §21 仓库工程化四项——l10n 命名/目录树收敛/README 精简/Open VSX(仅方案,待 review)
Sunrisepeak Oct 3, 2026
e5eb1ca
docs: 0.6.x 仓库工程化实施方案——双市场发布/images 合并/README/webview 骨架(待 review,未动代码)
Sunrisepeak Oct 3, 2026
d065c35
docs: 实施方案 §7.1 记录作者答复——commit 6/7 批准,第 3 项待定
Sunrisepeak Oct 3, 2026
7024cac
build(release): 双市场发布——Open VSX 必发(缺 token 显式失败),Marketplace 未配 token…
Sunrisepeak Oct 3, 2026
31e2a74
chore: images/ 并入 media/——根目录少一个,全部 6 处引用对齐(package.json×2、README×2、图…
Sunrisepeak Oct 3, 2026
1cdc164
docs: README 中英重构——121/120 行收至 81/79,新增相关项目表(mcpp/mcppls/本插件 × 仓库+双市场…
Sunrisepeak Oct 3, 2026
96e4441
refactor(webview): 抽出 WebviewDocument——每视图 nonce + 只在文档变化时赋值;library …
Sunrisepeak Oct 3, 2026
9ace876
fix(cache): 缓存视图换用 WebviewDocument——数据未变的刷新不再整页重载,预算输入与滚动位置保留;nonce 由…
Sunrisepeak Oct 3, 2026
817be1e
refactor(config,library): 设置面板与详情页同用 WebviewDocument——nonce 全仓库一个铸造点,…
Sunrisepeak Oct 3, 2026
a8f43d4
chore: cache 四文件移入 src/cache/——views/ 只剩工程树,与 library/config 对称;PURE_…
Sunrisepeak Oct 3, 2026
cf9a420
docs: 实施方案 D1 表修正——设置面板本就 postMessage 更新不重载,迁移是骨架一致性收口
Sunrisepeak Oct 3, 2026
88cd23e
feat(library): 详情页真的认识"已添加"了——宿主读 mcpp.toml/mcpp.lock 填 installed(§20…
Sunrisepeak Oct 3, 2026
e0edc48
feat(library): 详情页 round 9 补——import 名按全 id(唯 mcpplibs 短名);命令/用法行代码块样…
Sunrisepeak Oct 3, 2026
ad9c572
fix(security): 工作区信任边界收口——runMcpp 信任门接缝(架构门禁禁直调 runProcess)+ restrict…
Sunrisepeak Oct 3, 2026
972d0c7
fix(cli): Windows shell 路径参数按 CommandLineToArgvW 规则加引号——空格路径不再拆参,搜索词的…
Sunrisepeak Oct 3, 2026
02af186
fix: 三处评审小项——版本比较改用 compareVersions+contract 单一事实源;视图总开关注释改为与事实一致;cop…
Sunrisepeak Oct 3, 2026
8b2ec14
fix(ux): 设置迁移标记改到用户做出选择之后——关掉弹窗不再永久搁浅重命名提示(源码顺序门禁锁死)
Sunrisepeak Oct 3, 2026
25b4438
docs: 方案 §23(round 10)——外部评审 P0/P1/P2 修复记录与过时项判定
Sunrisepeak Oct 3, 2026
dda81eb
chore: CHANGELOG 补 0.4.x 重命名对照表与安全/平台条目;exportDiagnosticBundle 图标统一+递…
Sunrisepeak Oct 3, 2026
027af7a
fix(release): Open VSX secret 名对齐仓库实际的 OPENVSX_TOKEN 并显式传 --pat——原读 O…
Sunrisepeak Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .agents/docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# .agents/docs

本目录存放 **面向贡献者与 agent 的设计/背景文档**:对 mcpp-vscode 当前架构、跨仓库契约
与决策的记录。使用说明请看仓库根目录的 `README.md`。

| 文件 | 内容 | 状态 |
| --- | --- | --- |
| [`architecture.md`](architecture.md) | mcpp-vscode 的分层结构、模块职责与扩展点 | 现状 |
| [`mcpp-integration.md`](mcpp-integration.md) | 与 `mcpp-community/mcpp`(mcpp CLI)的接口契约 | 现状 |
| [`mcppls-integration.md`](mcppls-integration.md) | 与 `sunrisepeak.mcpp-language-server`(mcppls)的依赖与命令桥接契约 | 现状 |


边界:

- `docs/`(仓库根)= **用户文档**(安装、命令、设置、排错);
- `.agents/docs/` = **贡献者/agent 文档**(设计、契约、方案、决策);
- `.agents/superpowers/` = **过程文档**(原 `docs/superpowers/`,plans/specs);
- `.agents/reviews/` = **分析与评审记录**,已加入 `.gitignore`,不进入版本库。

背景分析见 `.agents/reviews/2026-10-02-mcpp-vscode-architecture-and-mcppls-dependency-review.md`。

## archive/

`archive/` 存放**已按其执行完毕**的方案文档(round 制的评审与决定记录),按日期命名。
当前实现与其偏差以代码与 CHANGELOG 为准:

| 文档 | 内容 |
| --- | --- |
| [`archive/2026-10-02-implementation-plan.md`](archive/2026-10-02-implementation-plan.md) | 0.5.0 基座实施(纯模块、注册表、门禁) |
| [`archive/2026-10-02-plugin-optimisation-plan.md`](archive/2026-10-02-plugin-optimisation-plan.md) | 插件优化方案 v4(侧边栏、编辑体验、缓存、i18n、配置面板) |
| [`archive/2026-10-02-ui-ux-optimisation-plan.md`](archive/2026-10-02-ui-ux-optimisation-plan.md) | 0.6.0 UI/UX 方案与 23 轮作者反馈记录 |
| [`archive/2026-10-03-repo-engineering-plan.md`](archive/2026-10-03-repo-engineering-plan.md) | 仓库工程化(双市场发布、WebviewDocument、目录收敛) |
77 changes: 77 additions & 0 deletions .agents/docs/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# mcpp-vscode 架构

> 状态:0.4.0(mcppls 语言服务迁移之后)。本文记录**当前**结构;变动请同步更新。

## 1. 一句话定位

mcpp-vscode 是 **mcpp CLI 的 IDE 前端**:工程发现、任务(build/run/test/clean)、工具链管理、
`mcpp.toml` 的语法与结构补全。C++ 模块语义(诊断/补全/跳转/引用/模块图/状态)由扩展依赖
`sunrisepeak.mcpp-language-server`(mcppls)提供,本扩展**不创建 LSP 客户端**。

## 2. 分层

```
extension.ts VS Code 装配层:激活、命令注册、provider 注册、资源释放
├── cliController.ts CLI 编排层:快捷菜单、任务、工具链、新工程、操作互斥
│ ├── newProject.ts 新建工程流程(纯函数 + 注入的动作)
│ └── commands.ts 命令 ID 与快捷菜单清单(纯数据)
├── languageServer.ts mcppls 桥接层:只调用 4 个公开 VS Code 命令
├── moduleSetup.ts 一键流程状态机(build → 刷新语言服务)
├── inProject.ts `mcpp.inProject` 上下文键
├── mcppTomlCompletion.ts mcpp.toml 补全查询层(段头 + 写法模板)
├── mcppTomlParser.ts 容错 TOML 解析器(纯函数)
├── discovery.ts 最近的 mcpp.toml 发现(纯函数)
├── cli.ts mcpp CLI 输出解析(工具链清单)
├── process.ts runProcess 封装
└── tasks.ts 任务计划、退出码分类、操作注册表(纯函数)
```

**约束**:`tasks.ts` / `moduleSetup.ts` / `discovery.ts` / `cli.ts` / `mcppTomlParser.ts` /
`newProject.ts` 不 import `vscode`,因此可用 `node --test` 直接测。`extension.ts` 与
`cliController.ts` 是唯一接触 VS Code API 的地方。

## 3. 运行时边界

| 触发 | 行为 |
| --- | --- |
| 打开含 `mcpp.toml` 的工作区 | 激活;不执行 `mcpp`,不下载工具链 |
| 执行 mcpp 命令 | 通过 `vscode.Task` + `ProcessExecution` 在专用终端运行 |
| build 结束(含失败) | 调用一次 `mcppls.restartServer`(单飞,取消除外) |
| run/test/clean 结束 | 不触碰语言服务 |
| 未受信任工作区 | 只保留语法高亮与 TOML 结构补全 |

## 4. 并发模型

`McppOperationRegistry`(`tasks.ts`)做两级互斥:

- **项目级**(键 = 工程根):build/run/test/clean 互斥;
- **全局**:工具链安装 / 设置全局默认,与所有项目级操作互斥。

任务结束**先释放锁、再刷新语言服务**,避免刷新期间用户操作被拒。该顺序由
`test/artifacts.test.ts` 钉住。

## 5. 与 mcppls 的唯一接口

`languageServer.ts` 是全部耦合面:

| 本扩展命令 | 转发到 |
| --- | --- |
| `mcpp.configureLanguageServer`(+ 弃用别名 `mcpp.configureClangd`) | `mcppls.selectContext` |
| `mcpp.checkModuleSupport` | `mcppls.restartServer` |
| `mcpp.showModuleGraph` | `mcppls.showModuleGraph` |
| `mcpp.showLanguageServerLogs` | `mcppls.showLogs` |
| build 之后 | `mcppls.restartServer` |

不读 `mcppls.*` 设置、不解析 LSP、不写跨扩展配置。详见
[`mcppls-integration.md`](mcppls-integration.md)。

## 6. 已知的结构性债务

- `src/configureOnly.ts`、`src/ideWorkflow.ts` 在 0.4.0 迁移后已无生产调用者(仅被自身测试引用),
它们描述的是 `compile_commands.json` 时代的行为,与当前职责边界冲突。
- `cli.ts` 用正则解析 `mcpp toolchain list` 的**人类输出**,而 mcpp 已提供
`--format json` 的稳定契约。
- 命令 ID `mcpp.refreshCompilationDatabase` / `mcpp.checkModuleSupport` 是历史拼写,与当前语义
(build / restart)不符。

具体建议见 `.agents/reviews/` 下的评审报告。
Loading
Loading