Repository navigation
0.1.0: the mcpp-ide backend, shared panels, mcpp-vscode 1.0.0 and mcpp-clion 0.1.0 - #1
Merged
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
protocol/protocol.schema.json(the backend's methods and notifications) andmcpp-contract.schema.json(the part of mcpp's contract it reads); golden fixtures recaptured from mcpp 2026.10.27.1 (release branch at 7c5ee0bb) bymcpp-ide-dev capture, with the platform fixtures (toolchain-list-platform.json,build-platform.ndjson: anaarch64-openkalbuild)src/)--protocol-versionandmcppls --versionhandshakes, targets with the platform that configures each, normalised job/test notificationsspec/mcpp-ide-dev gen vscode|jetbrains(nothing generated is committed)webui/vscode/extensionPack: ["sunrisepeak.mcpp-language-server"], no language servicejetbrains/io.github.mcpp-community.mcpp-clion), CLion 2025.2+: run configurations (PTY console, ▶ besidemain), test tree, CLion's debugger, console links, the mcpp tool window; depends onio.github.sunrisepeak.mcppls, no language serviceagents/<arch>-openkal, openkal-platform 0.17.3), packed as one bundlebackend/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--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 packageSizes
Depends on
mcpp pack --pkg-format okb, universal packages,--merge): CI buildsrelease/2026.10.27.1(MCPP_SOURCE_REFin.github/versions.env) until it is released.