Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
7ed74bf
chore: initialize mcpp VS Code extension
wellwei Jul 31, 2026
9bbd656
docs: add mcpp CLI integration design
wellwei Jul 31, 2026
8dca63f
docs: add mcpp CLI implementation plan
wellwei Jul 31, 2026
aa55629
feat: parse mcpp toolchain inventory
wellwei Jul 31, 2026
81f3e5a
feat: integrate mcpp cli and toolchain controls
wellwei Jul 31, 2026
6de32de
feat: finalize toolchain input and branding
wellwei Jul 31, 2026
96ab2ed
docs: design tag release workflow
wellwei Aug 1, 2026
c7a3a3b
docs: plan tag release implementation
wellwei Aug 1, 2026
42de803
fix: release CLI lock and automate tag releases
wellwei Aug 1, 2026
b8d8bc1
docs: clarify extension capabilities and roadmap
wellwei Aug 1, 2026
d5248df
feat: add one-click llvm-tools install and auto-configure wizard
wellwei Aug 2, 2026
9dddad7
feat: 为非 LLVM 工具链项目提供清晰的引导而非催促安装
wellwei Aug 2, 2026
5eb82d4
fix: narrow serial executor reentrancy detection and fix xlings PATH …
wellwei Aug 2, 2026
1a881a1
docs: add 0.2.2 changelog and README for auto-configure wizard
wellwei Aug 2, 2026
eb64724
feat: add build.mcpp syntax highlighting
wellwei Aug 4, 2026
15c5c1c
feat: add mcpp.toml syntax highlighting
wellwei Aug 4, 2026
74bb0af
fix: preserve hermetic clangd configuration
wellwei Aug 5, 2026
225c975
fix: complete clangd release validation
wellwei Aug 5, 2026
87ac991
docs: clarify hermetic clangd requirements
wellwei Aug 5, 2026
607e404
feat: add run/test buttons to editor title bar
Ximiaw Aug 5, 2026
551072e
feat: gate editor title buttons behind mcpp project detection
Ximiaw Aug 5, 2026
f2da6ba
fix: scope editor actions to active mcpp member
wellwei Aug 6, 2026
81e3b76
chore: release mcpp-vscode 0.2.5
wellwei Aug 6, 2026
1a8ae33
Merge pull request #2 from Ximiaw/feat/editor-title-run-test
wellwei Aug 6, 2026
a79cbe0
feat: add mcpp.newProject command to scaffold and open projects
Ximiaw Aug 6, 2026
d8db658
fix: harden new-project validation, drop pending auto-build state
Ximiaw Aug 7, 2026
c239dc0
fix: reject names that corrupt mcpp-generated project files
Ximiaw Aug 8, 2026
3aa5ca0
test: cover new-project flow with injectable dependencies
Ximiaw Aug 8, 2026
bfbaffe
fix: reject unsafe new-project names
wellwei Aug 8, 2026
694acd8
Merge pull request #3 from Ximiaw/feat/new-project
wellwei Aug 8, 2026
4b97d68
docs: design issue 6 and 7 changes
wellwei Aug 8, 2026
a5445f4
docs: add issues 6 and 7 implementation plan
wellwei Aug 8, 2026
6ebc6e6
feat: add module setup workflow
wellwei Aug 8, 2026
4f80fc4
fix: avoid default switch without effective toolchain
wellwei Aug 8, 2026
64b7e57
fix: make module setup confirmation neutral
wellwei Aug 8, 2026
c90bf6a
feat: add structural completion for mcpp.toml
Ximiaw Aug 8, 2026
736cbaf
feat: add automatic module setup controller
wellwei Aug 8, 2026
bc56d0b
feat: make module setup one click
wellwei Aug 8, 2026
2cb6a5e
test: add extension host smoke coverage
wellwei Aug 8, 2026
f233584
ci: add pull request extension checks
wellwei Aug 8, 2026
de7d250
fix: force LLVM module database refresh
wellwei Aug 8, 2026
18d828e
Merge pull request #10 from mcpp-community/codex/issues-6-7
wellwei Aug 8, 2026
be14ad9
Merge branch 'main' into feat/mcpp-toml-structure-completion
Ximiaw Aug 8, 2026
d5b953a
fix: PR #9 review 打磨——补 [build-dependencies] 段头、[[...]] 数组表不出建议、READM…
wellwei Aug 8, 2026
e8586b5
Merge pull request #9 from Ximiaw/feat/mcpp-toml-structure-completion
wellwei Aug 8, 2026
2316fe7
docs: 更新 0.2.5 变更日志(模块向导 + mcpp.toml 结构补全)
wellwei Aug 8, 2026
4367b95
release: mcpp-vscode 0.2.6(mcpp.toml 结构补全 + 一键模块配置向导)
wellwei Aug 8, 2026
9e1740c
fix: findXlingsExecutable 支持发现 mcpp 内置 xlings($MCPP_HOME/registry/bin…
lildengzi Aug 8, 2026
b11ce64
fix: xlings 发现以 `mcpp self env` 为权威来源(项目级契约),路径探测仅作回退
lildengzi Aug 8, 2026
c2f5507
fix: PR #11 打磨——`mcpp self env` 加超时保护、回退探测支持注入、测试平台可移植、补 CHANGELOG
wellwei Aug 8, 2026
d4fd363
Merge pull request #11 from lildengzi/fix/find-xlings-mcpp-bundled
wellwei Aug 8, 2026
2fcaf26
release: mcpp-vscode 0.2.7(修复标准安装下 xlings 发现,一键配置向导适配)
wellwei Aug 8, 2026
2892481
docs: README 同步至 0.2.7(版本号、仓库地址迁移 mcpp-community、xlings 定位说明)
wellwei Aug 8, 2026
e1eb80e
meta: package.json 仓库元数据迁移至 mcpp-community(repository/homepage/bugs)
wellwei Aug 8, 2026
736ecbb
test: 同步 artifacts 断言仓库地址至 mcpp-community
wellwei Aug 8, 2026
51a5821
feat: bootstrap clangd from mcpp IDE configure
wellwei Aug 6, 2026
ff89164
fix: refresh IDE snapshot after project changes
wellwei Aug 6, 2026
ce56724
feat: consume configure-only compile database workflow
wellwei Aug 11, 2026
83f4cc8
release: mcpp-vscode 0.3.0
wellwei Aug 11, 2026
0740431
Merge pull request #12 from mcpp-community/codex/fix-clangd-cdb-build…
wellwei Aug 11, 2026
499ba2f
fix: keep IDE commands responsive after CDB removal
wellwei Aug 11, 2026
db80d42
release: mcpp-vscode 0.3.1
wellwei Aug 11, 2026
fcd8296
Merge pull request #13 from mcpp-community/codex/fix-cdb-command-live…
wellwei Aug 11, 2026
304463d
fix: preserve PCM when LLVM setup is unchanged
helantianshen Aug 11, 2026
504eb11
chore: use workspace TypeScript SDK
helantianshen Aug 11, 2026
ecf1448
Merge pull request #14 from helantianshen/fix/preserve-pcm-on-repeat-…
wellwei Aug 13, 2026
1bfd6c8
feat: 语言服务依赖切换为 mcpp-language-server
wellwei Sep 25, 2026
4940647
test: E2E 语言服务依赖 stub 由 clangd 换成 mcppls
wellwei Sep 25, 2026
3403deb
docs: 重写 README 与更新日志,补迁移计划与 CI 门禁
wellwei Sep 25, 2026
2eb6581
Merge pull request #16 from mcpp-community/codex/mcppls-migration
wellwei Sep 25, 2026
20f1076
release: mcpp-vscode 0.4.0(mcppls 语言服务迁移)
wellwei Sep 25, 2026
26283ea
mcpp-vscode 0.6.0: 侧边栏重组、库生态、缓存视图与仓库工程化 (#17)
Sunrisepeak Oct 3, 2026
9b524e4
docs: 隐私清理——归档文档中的本机路径与个人邮箱脱敏(/home/speak、~/Desktop、/Users/cltx、outlo…
Sunrisepeak Oct 3, 2026
1be6c16
mcpp-vscode 0.7.0: build.mcpp 是 C++ 文件,由 C++ Modules 编译;「其他 C++ 语言服务」…
speak-agent Oct 13, 2026
f667b5b
feat: Libraries UX and shared dependency graphs (0.8.0) (#19)
Sunrisepeak Oct 18, 2026
432325a
feat: simplify module graph navigation and optimize large projects (#20)
Sunrisepeak Oct 19, 2026
58daa0c
mcpp-vscode: the 1.0 adapter moves aside while 0.9.0's extension take…
Sunrisepeak Oct 29, 2026
9d588f2
mcpp-vscode: import 0.9.0 with its history (subtree of mcpp-community…
Sunrisepeak Oct 29, 2026
653de4e
mcpp-vscode: drop the old repository's workflows and design records (…
Sunrisepeak Oct 29, 2026
03ed17e
spec/ states 0.9.0's contributions exactly; gen vscode --dev writes t…
Sunrisepeak Oct 29, 2026
e30d187
mcpp-vscode 1.1.0: 0.9.0's extension over the mcpp-ide backend
Sunrisepeak Oct 29, 2026
5e4035f
mcpp-vscode: parity gates against 0.9.0 — the manifest and strings, a…
Sunrisepeak Oct 29, 2026
d71f8e2
mcpp-vscode: CI and release as 0.9.0's, in the repository; the 1.0 ad…
Sunrisepeak Oct 29, 2026
bd7e521
mcpp-vscode: only the staged backend at the extension's root is ignor…
Sunrisepeak Oct 29, 2026
e21df38
mcpp-vscode: the build-script API and the mcpp.toml schema from mcpp …
Sunrisepeak Oct 29, 2026
53b6d07
mcpp-vscode: the backend locator's tests use the host's PATH conventi…
Sunrisepeak Oct 29, 2026
0ca145b
mcpp-clion: the trust, debug-session and debugger APIs that 2026.1 th…
Sunrisepeak Oct 29, 2026
f0ef33e
mcpp-vscode: mcpp through the backend's mcpp/exec, mcppls through its…
Sunrisepeak Oct 29, 2026
237c8df
mcpp-vscode: the pages are registered by one function, registerPages,…
Sunrisepeak Oct 29, 2026
ec94f6f
webui: the workbench -- mcpp-vscode's pages, unchanged, in a browser …
Sunrisepeak Oct 29, 2026
1ebe209
mcpp-clion: the mcpp tool window and the settings page are the workbe…
Sunrisepeak Oct 29, 2026
9c7d58f
mcpp-vscode: an mcpp launch without a debugger extension is refused a…
Sunrisepeak Oct 29, 2026
dd4faf7
0.2.0: the backend, mcpp-clion and mcpp-nvim 0.2.0, mcpp-vscode 1.1.0…
Sunrisepeak Oct 29, 2026
3e02ac8
mcpp-vscode: stage-backend finds the extension's directory on Windows…
Sunrisepeak Oct 29, 2026
bfc37a8
mcpp-clion: the save dialog's extensions as the descriptor's extensio…
Sunrisepeak Oct 29, 2026
3e062aa
mcpp-clion: the plugin and tool window icons are the mcpp logo, not t…
Sunrisepeak Oct 29, 2026
998154b
CI and documentation on mcpp 2026.10.30.1: one pack for the target se…
Sunrisepeak Oct 29, 2026
e06830b
mcpplibs.os 0.2.3 and openkal-platform 0.18.0; CI builds mcpp from re…
Sunrisepeak Oct 29, 2026
734d856
CI and the release read the tree's name as pack writes it (mcpp-ide-<…
Sunrisepeak Oct 30, 2026
9fed440
checkpoint 1: the project's mcpp, asked in the project; the backend's…
Sunrisepeak Oct 30, 2026
a9c0b15
checkpoint 2: what mcppls says about the workspace, from mcppls statu…
Sunrisepeak Oct 30, 2026
78ea18b
the Neovim report's "cannot write" in Chinese
Sunrisepeak Oct 30, 2026
e0d949a
checkpoints 3 and 4: entries beside main and a test framework's cases…
Sunrisepeak Oct 30, 2026
0d0f1c3
CLion: a case's ▶ shows its last outcome, the test tree locating each…
Sunrisepeak Oct 30, 2026
6edea12
a test's name from its file as the file system spells both (macOS's l…
Sunrisepeak Oct 30, 2026
dfe074a
the Extension Host suite's mcppls stubs carry a server the backend as…
Sunrisepeak Oct 30, 2026
a383fb1
checkpoint 5a: the rules layer of mcpp.toml and build.mcpp in the bac…
Sunrisepeak Oct 30, 2026
fb29e37
checkpoint 5b: the session is an LSP server (protocol 2), and every e…
Sunrisepeak Oct 30, 2026
59d65d0
CI uses the released mcpp 2026.10.31.1
Sunrisepeak Oct 30, 2026
87fc148
checkpoint 6: CLion in its own components (mcpp design 2026-10-30 par…
Sunrisepeak Oct 30, 2026
8fc8eb5
the workspace's mcpp is the one CI installs, 2026.10.31.1 (.github/ve…
Sunrisepeak Oct 30, 2026
9f064bc
CI: the manifest check's script holds no apostrophe, which closed its…
Sunrisepeak Oct 30, 2026
c58a529
CLion: the UI tests run over the application alone (ApplicationRule, …
Sunrisepeak Oct 30, 2026
9400c3f
CLion: whether the mcppls plugin is enabled through PluginManager.fin…
Sunrisepeak Oct 30, 2026
56919ed
CLion: the mcppls plugin serves when PluginManagerCore.isLoaded says …
Sunrisepeak Oct 30, 2026
280b8e6
CI and the workspace use mcpp 2026.10.31.2, which states test-launch
Sunrisepeak Oct 30, 2026
d0e0535
mcpplibs.os 0.2.4 and openkal-platform 0.19.0 for the ok images (open…
Sunrisepeak Oct 30, 2026
0abc6ef
openkal-platform 0.19.1 for the ok images: okrun releases the file it…
Sunrisepeak Oct 31, 2026
090b4ae
openkal-platform 0.19.2 for the ok images: on Linux arm64 okrun admit…
Sunrisepeak Oct 31, 2026
4a3dd8e
mcpplibs.os 0.2.5 and openkal-platform 0.20.0 for the ok images: open…
Sunrisepeak Oct 31, 2026
17921bf
mcpplibs.os 0.2.6 and openkal-platform 0.20.1 for the ok images: on m…
Sunrisepeak Nov 1, 2026
ab65f5d
openkal-platform 0.20.2 for the ok images: threads allocate together …
Sunrisepeak Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
* text=auto eol=lf
protocol/fixtures/** -text
*.png binary
tests/rules/corpus/** -text
11 changes: 6 additions & 5 deletions .github/versions.env
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# The versions CI builds and tests with, in one file; .github/actions/setup-mcpp exports them.
# The released mcpp CI installs and uses: the control contract the fixtures were captured from
# (protocol/fixtures/version.txt) and the platforms (openkal-platform 0.17.3) the backend's ok images
# are built on.
MCPP_VERSION=2026.10.27.1
# The released mcpp CI installs and uses: it states its features (`features`, the project's mcpp of
# part 2 §4.3), test-launch among them (2026.10.31.2), and builds the backend's ok images on
# openkal-platform 0.18.0. The mock replays the control contract the fixtures were captured from
# (protocol/fixtures/version.txt).
MCPP_VERSION=2026.10.31.2
# A ref of mcpp-community/mcpp CI builds mcpp from and uses instead, for a contract not yet released.
# Empty: the release above is used.
MCPP_SOURCE_REF=
# The LLVM the backend builds with on macOS and Windows (the targets mcpp reaches there with it).
LLVM_VERSION=23.1.3
# The xlings mcpp 2026.10.27.1 bundles, which reads the current index.
# The xlings mcpp 2026.10.31.2 bundles, which reads the current index.
XLINGS_VERSION=v2026.10.26.1
# The oldest VS Code the extension supports (engines.vscode), which its tests run in.
VSCODE_VERSION=1.91.0
346 changes: 308 additions & 38 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

23 changes: 22 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,27 @@ jobs:
mkdir -p dist
cp artifacts/mcpp-vscode-vsix/*.vsix artifacts/mcpp-clion-zip/*.zip dist/
cp artifacts/backend/mcpp-ide.okb "dist/mcpp-ide-${version}.okb"
cp "artifacts/backend/mcpp-ide-${version}-openkal.tar.gz" dist/
cp "artifacts/backend/mcpp-ide-${version}"-openkal*.tar.gz dist/
(cd dist && sha256sum * > SHA256SUMS && cat SHA256SUMS)
gh release create "v${version}" dist/* --target "$GITHUB_SHA" --title "mcpp-ide ${version}" --notes-file CHANGELOG.md
# Open VSX receives the exact VSIX attached to the GitHub Release; the Visual Studio
# Marketplace and the JetBrains Marketplace receive the same assets through their portals.
- uses: actions/setup-node@v5
with:
node-version: 22
- name: Publish to Open VSX
env:
OPENVSX_TOKEN: ${{ secrets.OPENVSX_TOKEN }}
run: |
set -euo pipefail
if [ -z "${OPENVSX_TOKEN:-}" ]; then
echo "OPENVSX_TOKEN is not set: Open VSX is a required destination of a release."
echo "Create a token with the publish scope at open-vsx.org (Settings, Access Tokens) and add it"
echo "as the OPENVSX_TOKEN secret of this repository (Settings, Secrets and variables, Actions)."
exit 1
fi
(cd mide-plugins/vscode && npm ci --ignore-scripts)
vsix="$(ls dist/mcpp-vscode-*.vsix)"
(cd mide-plugins/vscode && npx ovsx publish "$GITHUB_WORKSPACE/$vsix" --pat "$OPENVSX_TOKEN")
- name: The Marketplaces
run: echo "Upload the GitHub Release VSIX manually to Visual Studio Marketplace, and the CLion zip to JetBrains Marketplace."
2 changes: 1 addition & 1 deletion .xlings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"workspace": {
"mcpp": "2026.10.27.1"
"mcpp": "2026.10.31.2"
}
}
120 changes: 120 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,125 @@
# Changelog

## 0.2.0

mcpp-vscode 1.1.0, mcpp-clion 0.2.0 and mcpp-nvim 0.2.0 (mcpp design 2026-10-29 §10).

- **The project's mcpp (mcpp design 2026-10-30 part 2 §4).** Each project is asked in its own
directory, `mcpp self env --format json` through the program a version manager's shim stands for
(or `mcpp.path`), with `XLINGS_PROJECT_DIR` removed from every run of mcpp, so a project pinned in
`.xlings.json` is described by the mcpp that builds it. A feature is turned on by what the project's
mcpp states (`features`, mcpp 2026.10.31.1) or, for an earlier mcpp, by a table frozen at that
release, never by comparing versions. A pinned version that is not installed is `pinned-missing`,
with the shim's words and its install command; an untrusted workspace's project is not asked. A
job whose envelope names another version, the editor regaining focus and a changed manifest each
make the project be asked again; never more than two at once. Methods `project/mcpp`,
`project/refresh`, `capabilities/explain` (why a feature is not offered: which party, which
capability, from which version) and `report/collect`; notification `project/mcppChanged`.
- **The backend's lifecycle and what it says (§3).** VS Code and CLion start an ended backend again
after 1, 4 and 16 seconds; a fourth end within three minutes leaves them in the degraded mode with
two actions, restarting the backend and exporting the IDE report. **mcpp: Export IDE Report**
(every editor; Neovim `:Mcpp exportReport [path]`) writes the backend, every project's mcpp,
mcppls's status, the settings in effect, recent jobs and the backend's recent log to a file the
person names. `mcpp.backend.logLevel` decides what the backend writes to the editor's log. VS
Code's status item names the project's mcpp version, and its tooltip the program and whether
`mcpp.path` chose it.
- **What mcppls says about the workspace (§5).** The backend's `languageService/status` runs
`mcppls status --root <dir> --format json` (mcppls 0.0.20 and later, bounded at five seconds) and
returns its capabilities, the workspace's state, engine and kit, the servers serving it, and
mcppls's actions under each editor's own id; for mcppls 0.0.18 and 0.0.19 the actions come from a
table frozen at those releases. A different answer is sent once (`languageService/changed`). The
command table's forwards name mcppls's action ids, and `commands/list` gives each editor the id
mcppls states for it: CLion runs the mcppls plugin's action (and hides a row it does not have),
Neovim mcppls-nvim's command. VS Code reads the state and the commands from this answer instead of
the mcppls extension's API object and keeps only the confirmation each action needs; the state is
asked again after a job, on focus, when the project view becomes visible and, while it is visible,
at most every 30 seconds. A missing semantic kit is a row with **C++ Modules: Install the Semantic
Kit**. After a build nothing is forwarded by default (`auto`): mcppls reads mcpp's result record.
- **Entries (§6).** The backend's `source/entries` says what a C++ file is to its project -- a
program's `main`, a test's (`tests/**`, named as mcpp names it), or neither -- with the line of
`main` read from the text, outside comments and literals. VS Code shows Run and Debug above `main`
(`mcpp.codeLens.enable`), at the position C++ Modules gives and otherwise at the line read, said to
be approximate; Build and Debug join Run and Test in the editor's title bar, and Run, Debug, Build
and Test are in the editor's context menu. The command table states these places (`placements`),
and the generator writes VS Code's menus and CLion's editor popup from it. CLion's ▶ stands on the
PSI element `main` on the line the backend read, the IDE's Build (the hammer) of an mcpp project is
`mcpp build`, a status bar item shows the project's mcpp and the running job with the quick menu,
and two keymaps (`mcpp`, `mcpp (macOS)`) carry VS Code's chords.
- **Test cases (§7).** `spec/test-frameworks.json` describes GoogleTest, Catch2 and doctest: a test
program belongs to one when its plan holds the framework's package and its source calls the
framework's macros (`mcpp.test.macros` adds a project's own). `test/cases` reads the cases from the
source and, after a build in a trusted workspace, from the program's own listing; `test/runCases`
runs some of them with the framework's filter and reads its report, each outcome sent as
`test/caseResult`. VS Code's Testing view has the cases under their program, located at their
macros, and the program at its `main`; CLion has a ▶ on each case and runs cases in its test tree.
Debugging a test's program is offered where the project's mcpp describes its launch (`test-launch`,
mcpp 2026.10.31.2).
- **The rules layer of mcpp.toml and build.mcpp, in the backend (§8; docs/rules.md).** The session
is an LSP server, protocol 2: `initialize` in LSP's shape with mcpp-ide's parameters in
`initializationOptions`, mcpp.toml's and build.mcpp's completion, hover, jumps and diagnostics as
`textDocument/*` (full synchronisation, UTF-16 columns), and mcpp-ide's own methods and
notifications under `mcpp-ide/`. The tolerant scanner, the seven manifest rules and the SPEC-007
checks are ported from mcpp-vscode 0.9's TypeScript, whose answers over a corpus at every position
are the tests' goldens (`tests/rules`). A table is read through the schema (a workspace table as the
table it mirrors, a platform's table under a selector as the platform's); a selector-only table is
offered with its selector; the schema's own arrays of tables are allowed; a dependency's version is
completed from mcpp's catalogue (`mcpp search --format json`) when `mcpp.toml.indexCompletion` is
on. VS Code connects with its language client (bundled into `dist/vendor`); CLion over the
session's connection, through a completion contributor, an annotator, a documentation provider
and a go-to-declaration handler; Neovim with its LSP client, attached to mcpp.toml and build.mcpp
buffers. While C++ Modules serves build.mcpp (`mcpplsServes`) it is left the unknownSymbol rule
and the module names after `import`. One snapshot of each: `spec/toml-schema.json`,
`spec/buildscript-api.json` (mcpp 2026.10.29.1's directives).
- **CLion in its own components (§9).** The "mcpp" tool window's Project, Libraries and Cache tabs
are native trees and lists over the backend's view models (each project's mcpp, targets, tests,
libraries, last build, artifacts and platform, and what C++ Modules says; the indexes' packages, a
package's page and adding it to the project; what mcpp keeps and the command table's cleanups with
their confirmations). A graph of the packages or the modules is the one page in JCEF
(`webui/graph.html`, mermaid over `graph/packages` and `graph/modules`; a module opens its source),
tested in Chromium over a real backend. Settings | Tools | mcpp is a form generated from
`settings/registry`, with Apply, Reset and a search. The workbench that ran mcpp-vscode's pages in
JCEF, its `vscode` shim and its bridge are removed; the views' models and the settings form are
tested headless.
- **The declared degraded mode (§8, F15).** Where the package's okrun does not run (macOS x86_64,
Windows arm64, Linux armhf) VS Code says the backend does not run on this platform and goes on
with build, run, test and the project pages, running mcpp's queries itself; an Extension Host run
in CI holds it.
- **mcpp-vscode 1.1.0 is mcpp-vscode 0.9.0 over the backend.** 0.9.0's extension is imported with
its history (`mide-plugins/vscode`); every view, page, command, menu, setting and string a user
sees is 0.9.0's. What 1.0 added stays, in 0.9.0's style: debugging (`mcpp.debug`, the `mcpp`
launch type), the test tree, the target picker with target-set rows, packing, build on save,
cancellable jobs. mcpp is run through the backend's `mcpp/exec`, mcppls through its
`languageService/exec`; the extension starts no other process for mcpp or mcppls.
- **Parity gates against 0.9.0.** The manifest's contributions and strings contain 0.9.0's exactly
(`spec/` states them; `mcpp-ide-dev gen vscode` writes the manifest); every page's document,
rendered by the extension's generators, is byte-identical to the snapshot rendered by 0.9.0's;
the Extension Host suite runs over the bundled backend.
- **One page library for VS Code and CLion.** The workbench (`webui/`) runs mcpp-vscode's page
modules unchanged in a browser host: the `vscode` module and Node's built-ins are answered by
the host's bridge, views are tabs, webviews are iframes with the IDE's `--vscode-*` theme.
mcpp-clion's tool window and its settings page are this workbench in JCEF; the earlier panels
(`webui/js`) are removed. A Chromium test runs the workbench over a real backend.
- **Backend methods.** `mcpp/exec` (a bounded mcpp run: timeout, output limit, truncation reported),
`languageService/exec` (the located mcppls with arguments), `project/files` (manifest, lock and
the source count 0.9.0 shows); `targets` rows for target sets (`set`, `members`, `label`) when mcpp
is 2026.10.30.1 or later.
- **The mcpp logo in CLion.** mcpp-clion's plugin icon and its tool window's icon are the mcpp
logo, as mcpp-vscode's and mcppls's are; the text icons (`m++`, `m+`) are removed. CI checks that
both embed the logo and that the VS Code logo is 0.9.0's.
- **mcpp-clion on 2026.1 through 2026.3.** Trust through `TrustedProjects.isProjectTrusted`, debug
sessions through `XDebuggerManager.newSessionBuilder`, the debugger driver through
`createDriverConfiguration(project, CPPEnvironment(toolchain))`; packing is a job over the
backend's `pack/formats`.
- **mcpp 2026.10.31.2.** One pack of the target set `openkal` writes the editor packages' tree and
okb (`--target openkal --mode self-contained --systems all --pkg-format tar,okb`); CI reads
`runs_on`; the Windows launcher is `bin/mcpp-ide.exe`, built over a platform other than mcpp's own
openkal rows'. The backend is on mcpplibs.os 0.2.6 and openkal-platform 0.20.2, ok images included
(openkal 0.19, whose okrun releases the image file once loaded and verifies an okb's chunk digests on
several contexts, and whose C library serves threads that allocate together from their own caches).
- **CI and release.** 0.9.0's gates run in this repository (registry, translations, unit suite on
three systems, manifest drift, parity, Extension Host on three systems, isolated install, the
graph page in Chromium); the release publishes the VSIX to Open VSX beside the GitHub release.

## 0.1.1

mcpp-vscode 1.0.1, mcpp-clion 0.1.1 and the first mcpp-nvim (0.1.1), with mcppls 0.0.19.
Expand Down
23 changes: 13 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ different tool.

mcpp-ide makes them once. Its backend, `mcpp-ide serve`, is a C++ program that reads only mcpp's
machine contract (event streams, result records, launch descriptors, JSON queries) and answers the
editors over JSON-RPC. The VS Code extension and the CLion plugin map those answers onto their own
UI and share one set of web panels; the Neovim plugin maps them onto buffers, floating windows and
the quickfix list. The editor plugins are `mide-plugins/` of this repository. Language features of
C++ files come from [mcppls](https://github.com/Sunrisepeak/mcpp-language-server); mcpp-ide
registers none.
editors as an LSP server (JSON-RPC, protocol 2). The VS Code extension's views and pages are
mcpp-vscode 0.9.0's; the CLion plugin shows the same information in CLion's own trees, lists and
settings form (a graph in JCEF), and the Neovim plugin maps the answers onto buffers, floating
windows and the quickfix list. The editor plugins are `mide-plugins/` of this repository. Language
features of C++ files come from [mcppls](https://github.com/Sunrisepeak/mcpp-language-server);
those of mcpp.toml and build.mcpp come from the backend ([docs/rules.md](docs/rules.md)).

## Features

Expand All @@ -29,8 +30,9 @@ registers none.
| Test tree, re-run one test | Testing view | IDE test runner | `:Mcpp test <filter>` |
| Debug | CodeLLDB, C/C++ (gdb, lldb), lldb-dap | CLion's GDB or LLDB | nvim-dap (codelldb, lldb-dap, cppdbg, gdb) |
| Diagnostics | Problems, from mcpp's located diagnostics | Console links to the reported location | `vim.diagnostic`, `:Mcpp problems` in the quickfix list |
| mcpp.toml | Problems from mcpp; completion, hover, outline from mcpp's key registry | Problems from mcpp | Problems from mcpp |
| Targets and platforms, libraries, graphs, cache, pack, settings | Shared web panels | The same panels (JCEF) | Text in floating windows, `vim.ui.select`; settings in `setup()` |
| mcpp.toml, build.mcpp | Completion, hover, jumps and the rules' diagnostics from the backend (language client); Problems from mcpp | The same, through CLion's completion, documentation, annotations and go-to | The same, through `vim.lsp`; mcpp's problems in `vim.diagnostic` |
| Libraries, a package's page, graphs, cache, settings | mcpp-vscode's views and pages | Native trees and lists, a settings form from the registry, the graphs in JCEF | Text in floating windows, `vim.ui.select`; settings in `setup()` |
| Targets (target sets among them), pack | Quick picks | Popups | `vim.ui.select` |
| Language features | mcppls (installed with the extension) | mcppls CLion plugin (a dependency) | mcppls-nvim (`xlings install mcppls-nvim`) |

- **One answer everywhere** -- what a build runs, how a test is reported, what a cleanup costs: the backend's
Expand All @@ -57,10 +59,10 @@ the editor I use (VS Code, CLion or Neovim) from its latest release, and check i
| VS Code-compatible editors | Open VSX, or the `.vsix` | install the `.vsix` from the extensions view |
| CLion 2026.1+ | JetBrains Marketplace (`mcpp-clion`), or `mcpp-clion-<version>.zip` | Settings → Plugins → Install Plugin from Disk; the mcppls CLion plugin (its package for this system carries the server) first |
| Neovim 0.10+ | `mide-plugins/nvim` of the release's source tree | `xlings install mcpp-ide-nvim` (the backend with it, set up at start); or the directory on the runtimepath and `require('mcpp').setup()` ([its README](mide-plugins/nvim/README.md)) |
| Agents, other clients | `mcpp-ide-<version>-openkal.tar.gz` (both images; okrun for Linux x64/arm64, macOS arm64, Windows x64), `mcpp-ide-<version>.okb` with okrun, or `xlings install mcpp-ide` | run `bin/mcpp-ide serve` (`bin\mcpp-ide.cmd` on Windows), or `okrun mcpp-ide-<version>.okb serve` |
| Agents, other clients | `mcpp-ide-<version>-openkal-bundle-all.tar.gz` (both images; okrun for Linux x64/arm64, macOS arm64, Windows x64), `mcpp-ide-<version>.okb` with okrun, or `xlings install mcpp-ide` | run `bin/mcpp-ide serve` (`bin\mcpp-ide.exe` on Windows), or `okrun mcpp-ide-<version>.okb serve` |

Each editor package serves every system: it carries the backend as one ok-image bundle
(`backend/mcpp-ide.okb`, the x86_64 and aarch64 images on openkal-platform 0.17.3) and okrun for
(`backend/mcpp-ide.okb`, the x86_64 and aarch64 images on openkal-platform 0.20.2) and okrun for
Linux x64/arm64, macOS arm64 and Windows x64. The Neovim plugin carries none: it starts the
`mcpp-ide` command xlings installs (okrun on the same bundle).

Expand All @@ -69,7 +71,8 @@ Linux x64/arm64, macOS arm64 and Windows x64. The Neovim plugin carries none: it
```bash
mcpp build # the backend, the mock mcpp, mcpp-ide-dev
mcpp test # the backend's tests
cd mide-plugins/vscode && npm ci && npm test # the extension's and the panels' tests
cd mide-plugins/vscode && npm ci && npm test # the extension's tests, the parity gates against 0.9.0 among them
npm run test:webui # CLion's graph page in Chromium, over the backend
npm run package # dist/mcpp-vscode-<version>.vsix
cd ../clion && gradle buildPlugin verifyPlugin # build/distributions/mcpp-clion-<version>.zip
cd ../.. && nvim --headless --clean -l mide-plugins/nvim/tests/smoke.lua # the Neovim plugin's tests
Expand Down
Loading
Loading