Skip to content

0.1.0: the mcpp-ide backend, shared panels, mcpp-vscode 1.0.0 and mcpp-clion 0.1.0 - #1

Merged
Sunrisepeak merged 30 commits into
mainfrom
release/0.1.0
Oct 28, 2026
Merged

Sunrisepeak merged 30 commits into
mainfrom
release/0.1.0

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

The first release of mcpp-ide (mcpp design 2026-10-26 part 1 §14; 2026-10-28 §11.2): one backend for mcpp's editor integrations, the VS Code extension it now powers, and the CLion plugin.

What is in it

Part Content
protocol/ protocol.schema.json (the backend's methods and notifications) and mcpp-contract.schema.json (the part of mcpp's contract it reads); golden fixtures recaptured from mcpp 2026.10.27.1 (release branch at 7c5ee0bb) by mcpp-ide-dev capture, with the platform fixtures (toolchain-list-platform.json, build-platform.ndjson: an aarch64-openkal build)
backend (src/) sessions, watching, jobs (one per project, cancel, newest-supersedes), view models, cleanup plans, settings validation and migration, the command table, i18n, self-check, --protocol-version and mcppls --version handshakes, targets with the platform that configures each, normalised job/test notifications
spec/ settings, commands, translations: the source of both editors' declarations, generated by mcpp-ide-dev gen vscode|jetbrains (nothing generated is committed)
webui/ project, targets and platforms, libraries, graphs, cache, pack, settings: one set of panels for a VS Code webview and a JCEF page
vscode/ mcpp-vscode 1.0.0 (extension ID unchanged): tasks in a pseudoterminal, Testing view, debug configurations, Problems from mcpp, project tree, status bar, mcpp.toml editing help; extensionPack: ["sunrisepeak.mcpp-language-server"], no language service
jetbrains/ mcpp-clion 0.1.0 (ID io.github.mcpp-community.mcpp-clion), CLion 2025.2+: run configurations (PTY console, ▶ beside main), test tree, CLion's debugger, console links, the mcpp tool window; depends on io.github.sunrisepeak.mcppls, no language service
agents/ driving the backend from an agent, and a skill
distribution the backend as ok images (<arch>-openkal, openkal-platform 0.17.3), packed as one bundle backend/mcpp-ide.okb (5.7 MB) that both editor packages carry with okrun for linux-x86_64, linux-aarch64, macos-aarch64 and windows-x86_64
CI / release backend built and tested on Linux x64/arm64, macOS, Windows, and with the host graph on openkal-platform 0.17.3 (build programs as ok images); the bundle and the universal self-contained package (--systems linux,macos,windows, every okrun built over the platform's hosted arrangement) packed once, on Linux; extension unit, panel and extension-host tests (backend via setting, and the bundle the extension carries) and package; plugin tests, package and Plugin Verifier; both editor packages and the universal package opened and started on all four systems; release publishes the packages, the bundle and the universal package

Sizes

before (a program per system) after (one bundle + okrun per system)
mcpp-vscode-1.0.0.vsix 4,686,866 B 3,217,042 B
mcpp-clion-0.1.0.zip 4,605,498 B 3,172,459 B

Depends on

  • mcpp 2026.10.27.1 (platforms, mcpp pack --pkg-format okb, universal packages, --merge): CI builds release/2026.10.27.1 (MCPP_SOURCE_REF in .github/versions.env) until it is released.
  • mcpplibs/os 0.2.1 (no openkal-tools of its own beside the platform's): a git dependency on its branch until it is published.

xllmapi-official and others added 30 commits October 28, 2026 01:47
…mmand table, mcppls's handshake, targets and platforms

- protocol/protocol.schema.json: the backend's methods and notifications; the
  tests require the registered ones to be exactly these, and check a session's
  answers and notifications over the mock mcpp against them.
- protocol/mcpp-contract.schema.json: the part of mcpp's control contract the
  backend reads; every golden fixture is checked against the definition
  protocol/fixtures.json names (src/schema.cppm: the JSON Schema subset used).
- Fixtures recaptured from mcpp 2026.10.26.2 by `mcpp-ide-dev capture` (C++,
  replacing tools/capture-fixtures.sh); test-list.ndjson added.
- spec/commands.json: the command table both editors declare and run; the
  backend serves it (`commands/list`, `menu/quick`) in the session's language.
- `languageService/status`: which mcppls answers and whether it reads mcpp's
  result record (0.0.18); an older or missing one is reported with what to do.
- `targets/list`: one row per target with its toolchains and the platform mcpp
  names for it; `project/summary` carries the platforms of the last plan.
- A job's stream becomes job/plan, job/progress, job/diagnostic, job/artifact,
  test/result and test/summary; job/finished carries the envelope's
  diagnostics and artifacts.
- `test/list` (mcpp test --list), `project/new`, `pack/start`; `--target` from
  the request or `mcpp.build.target`; a program that runs through a runner is
  debugged as the runner, its symbols read through the GDB JIT interface.
- `mcpp-ide-dev gen vscode|jetbrains` writes the editors' declarations from
  spec/; `mcpp-ide-dev check-i18n` requires a Chinese entry for every string.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…and presets; the mock mcpp reads its failure from the project; LICENSE

The mock mcpp also takes `.mock-mcpp-fail` in the project directory, so an
editor's test can make a build fail through a backend it did not start.
Deprecated settings carry their deprecation message in both languages.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…, graphs, cache, pack, settings

Classic scripts on one global (McppUi), loaded unchanged by a VS Code
webview and a JCEF page. A panel speaks the backend's protocol through its
host (rpc in, notifications out) and asks the host only for what the editor
does. The graphs use a layered layout with cycle breaking and open large
graphs on one node's neighbourhood. Tests: the layout, and every panel
mounted in jsdom against the real backend over the mock mcpp.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
The extension starts the backend (bundled bin/<platform>/, mcpp.ide.backendPath,
xlings or PATH) and maps its protocol onto VS Code: build and test tasks in a
pseudoterminal showing mcpp's narration (closing it cancels), the Testing
view from mcpp test --list, debug configurations of type mcpp for CodeLLDB,
cppdbg, lldb-dap or Native Debug, Problems from mcpp's located diagnostics
and mcpp.toml's from mcpp, the project tree, the status bar, the shared
panels, and mcpp.toml editing help from the backend. Every command id of
0.9 is kept; package.json's commands, keybindings, menus and configuration
are generated from spec/ (mcpp-ide-dev gen vscode --stage). mcppls is an
extension pack, not a dependency; no language service is registered.

Tests: unit (the wire against the real backend, the mappings, the
locators) and an extension-host suite in VS Code 1.91 over the mock mcpp.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
The plugin starts the backend per project and maps its protocol onto the
IDE: the "mcpp" run configuration type (run in a PTY console, test into the
IDE's test tree through TeamCity messages, build as a backend job whose
stop cancels it), a ▶ beside main (the project's program, or the test whose
main it is), debugging under CLion's own GDB or LLDB, console links to
file:line:column, and the mcpp tool window hosting the shared panels in
JCEF. The Tools | mcpp menu and the message bundles are generated from
spec/ (mcpp-ide-dev gen jetbrains), included by plugin.xml.

It depends on the mcppls CLion plugin and registers no language service;
at startup it points out a root compile_commands.json an earlier mcpp left,
which would let CLion's compilation-database support take the project over.
The Marketplace refuses a product name in a plugin's name, so the plugin is
named "mcpp"; its ID and archive keep mcpp-clion. Only public platform API:
the Plugin Verifier passes against CLion 2025.2 and 2026.2.3.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
CI: the backend built and tested on Linux, macOS and Windows; the extension's
unit and panel tests, its extension-host suite in VS Code 1.91 and its
package; the plugin's tests, archive and Plugin Verifier run. Release: a
backend per system laid out bin/<platform>/, both editor packages carrying
all of them, and a GitHub release with checksums; the Marketplaces are
uploaded to by the maintainer from those assets.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…th all four; the mock mcpp ends with _Exit (MinGW has no quick_exit)

The release workflow publishes the packages CI built and checked. A bundled
backend whose mode bits an archive dropped is made executable before it is
started.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
….26.2; the extension-host suite also runs on the backend the package carries

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…VM on macOS and Windows; the arm64 Linux release program is cross-built on x86_64

`--target aarch64-macos` linked without libSystem and `--target
x86_64-windows-gnu` read the runner's MinGW libstdc++ with clang; the
native targets with [toolchain] macos/windows are what mcpp's own build uses.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…es are byte-exact (.gitattributes); an arm64 Linux machine builds its own programs with LLVM

On Windows a C++ stream wrote mcpp's output translated, and the backend's
tests there read no envelope; mcpp's own output is bytes. test_jobs prints
what it received when the envelope is missing.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ache is per architecture

A Windows runner's HOME holds backslashes, which made every fixture line
naming the home invalid JSON there. An arm64 Linux runner restored the x86_64
store (its ninja could not start): runner.os is Linux on both.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ystem delivers a request to end; on Windows the build is ended outright and its record is never `ok`

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…y the okrun carried per system; --pkg-format where mcpp offers it

Both adapters start, in order: mcpp.ide.backendPath (a program, or an .okb
run by okrun); backend/mcpp-ide.okb run by backend/okrun/<os>-<arch>/okrun,
else by okrun on PATH (mcpp design 2026-10-28 part 2 §15); bin/<platform>/,
the program per system packages carry until the bundle is built; then an
installed mcpp-ide. mcpp-ide-dev gen vscode --stage and the plugin's
sandbox take --okb/MCPP_IDE_OKB and --okrun/MCPP_IDE_OKRUN.

CI opens both packages on Linux x64 and arm64, macOS and Windows and starts
what each carries for that system (.github/scripts/check-package.sh): one
bundle and its okrun once they exist, the system's program until then.

The backend reads `mcpp pack --help` once: the package format goes as
--pkg-format where mcpp offers it (SPEC-014), else --format; the pack panel's
closures are SPEC-014's and linkages appear where mcpp takes them
(protocol: pack/start's pkgFormat and linkage; pack/formats' modes and
linkages; the captured help is a fixture).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…he verifier's rebuild keeps the backends; the archive is checked after it

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… (an unpacked .vsix)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… package spec, a plan states the platform and the host's in its configuration, a wrapped program's launch is resolved by --print-launch; toolchains stated per target system, so the ok-image targets take openkal-platform 0.17.2's; os by its 0.2.1 branch

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…stem packs its universal self-contained package, `mcpp pack --merge` joins them, and the editor packages carry the bundle and the joined okrun; the program-per-system form is gone; a host-platform row; CI builds mcpp from MCPP_SOURCE_REF until it is released

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…s .xlings.json pins

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…bits and its one directory kept), and --merge joins the archives

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ot yet the file Linux and macOS build, so --merge refuses it); macOS packs its own

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…the setting's, or the bundle the extension carries)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e fixtures recaptured from mcpp release/2026.10.27.1 at 7c5ee0bb (openkal-musl 0.22.6, openkal-llvm-runtime 0.16.6); mcpp.lock as that mcpp writes it, the platform's packages beside the system's

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ith okrun for Linux, macOS and Windows (each built over the platform's hosted arrangement); no per-system packs and no --merge

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… CI on the released mcpp

spec/toml-schema.json is taken from mcpp 2026.10.27.1 (e0b1133d): [platform]
and its tables (build and its cfg tables, carrier, hosted, layers, link,
[[platform.link.inputs]], runners, tools, versions), [host] platform, the
selector keys platform, carrier, requires, run_under and runners, [pack]
linkage, format, compress, sign and universal, and [build]
compile_commands. A platform's table is one section under [platform] and
under the selector that overrides it (target.<sel>.link is platform.link).

spec/buildscript-api.json is protocol 17: link-start, link-driver,
link-input, artifact-name, seal and run-host, and each directive names the
typed API's functions that emit it; build.mcpp completion offers those
names (mcpp::link_driver, mcpp::define) rather than the wire's.

CI installs mcpp 2026.10.27.1 and builds none from a ref; .xlings.json pins
it. The views' comments name openkal-platform 0.17.3.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ase that added it

The manifest reader of mcpp e0b1133d was read table by table (the get_*
paths of toml.cppm, its known-key lists, key_registry.cppm) and the schema
now holds what it lacked: [target.<selector>.abi], requires_abi (of
[package], a feature, a selector; a table, not an array) and
[target.<selector>.feature-requires-abi]; [c-abi], [kernel-abi],
[scan_overrides] and [workspace] keys; [runtime]'s keys and its
[[runtime.requirements]], [[runtime.artifacts]] and [[runtime.deploy]]
entries; [hooks] and [hooks.<event>]; a feature's table keys and
[features] default; [profile] ndebug and trim_paths; [test]
windows_code_page and windows_long_paths; [resources.version-info];
[pack.bundle-project]; [xlings] keys, [xlings.workspace],
[xlings.overrides] and [tools.overrides]. Each new key's `since` is the
first release whose reader contains it.

A table reads as the longest leading run of its segments that names a
section, so a sub-table with keys of its own is completed with them;
`workspace.<table>` reads as the table it mirrors (a mirrored selector's
build table was `target`). A table written only under a selector is
offered as `[target.'cfg(...)'.<table>]` with the selector to fill in.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… writes it, each entry with the configurations that resolved it

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak
Sunrisepeak merged commit 3c2c7b8 into main Oct 28, 2026
11 checks passed
@Sunrisepeak
Sunrisepeak deleted the release/0.1.0 branch October 28, 2026 16:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants