wicked-garden 12.54.0 → 12.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"name": "wicked-garden", "owner": {"name": "Mike Parcewski"}, "plugins": [{"name": "wicked-garden", "source": "./", "description": "Your coding agent already plans and swarms \u2014 Wicked Garden is the curated toolkit for what it can't: proof-not-claims gates, code links grep can't see, deterministic refactor, cross-session memory, multi-model second opinions (fallback seats labelled). Don't fight the harness; fill its gaps. The gate needs wicked-vault (a self-contained infra peer, installed directly) and re-derives through garden's built-in engine; estate/bus are opt-in layers (wicked-testing and wicked-brain are retired \u2014 QE ships in-catalog as the qe domain, memory lives in wicked-estate).", "version": "12.54.0"}], "version": "12.54.0"}
1
+ {"name": "wicked-garden", "owner": {"name": "Mike Parcewski"}, "plugins": [{"name": "wicked-garden", "source": "./", "description": "Your coding agent already plans and swarms \u2014 Wicked Garden is the curated toolkit for what it can't: proof-not-claims gates, code links grep can't see, deterministic refactor, cross-session memory, multi-model second opinions (fallback seats labelled). Don't fight the harness; fill its gaps. The gate needs wicked-vault (a self-contained infra peer, installed directly) and re-derives through garden's built-in engine; estate/bus are opt-in layers (wicked-testing and wicked-brain are retired \u2014 QE ships in-catalog as the qe domain, memory lives in wicked-estate).", "version": "12.55.0"}], "version": "12.55.0"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wicked-garden",
3
- "version": "12.54.0",
3
+ "version": "12.55.0",
4
4
  "description": "Your coding agent's harness already plans and swarms; Wicked Garden is the curated toolkit for what it can't do alone. Proof, not claims \u2014 gates re-derive 'done' through the internal loom engine (fail-closed, independently attested via wicked-vault), so a self-asserted pass can't lie its way green. Relationships grep can't see \u2014 the wicked-estate code graph + injected bus/dispatch/capability/archetype edges power blast-radius & lineage. Plus deterministic multi-file refactor (wicked-patch), cross-session memory + knowledge (the mem domain over wicked-estate), multi-model second opinions (fallback seats labelled) (jam:council), portable expertise as on-demand skill-refs, and evidence-gated testing (the in-catalog qe domain). It reads the shape of your work to apply the right rigor \u2014 steering, not a pipeline \u2014 then gets out of the way. The compiler stamps a self-contained evidence gate into any repo that runs with no wicked-garden installed. Don't fight the harness; fill its gaps. The evidence gate requires wicked-vault, a self-contained infra peer wicked-garden installs directly; wicked-bus is an opt-in layer \u2014 install what you'll use, the toolkit works without the rest.",
5
5
  "wicked_vault_version": "^0.5.0",
6
6
  "wicked_ledger_version": "^0.6.0",
package/CHANGELOG.md CHANGED
@@ -2,10 +2,21 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [12.55.0] — 2026-10-14
6
+
7
+ ### Added
8
+ - **The editor-plugin builder speaks wicked.editor/2 (PR #1303, DES-EDITOR-PLUGIN-CONTRACT-001).** A protocol-2 editor declares its surfaces: the card in the run's thread, options tabs in the host panel (plugin-rendered, or host-drawn controls), and full screen with Simple/Advanced. The host renders all three from that declaration. The pack schema and `pack check` (new code PK069) require `surfaces` when `protocol` lists 2 and refuse it otherwise, using the same rules as studio's host. `scaffold.py` writes a protocol-[1,2] plugin with all three surfaces (`--surfaces <file>` for your own declaration), and the template implements every part of it while still speaking protocol 1 to an older host. Conformance adds cases 13-16 (surfaces, card, options, full screen) and 17 (a protocol-1 plugin under a protocol-2 host). Cases 13-16 need a studio whose conformance page reads `surface`, `tab` and `mode` and reports options values. On a conformance host that speaks protocol 1 only, cases 13-16 are not run and are reported as a gap, so the 12-case base suite can pass. That report does not certify protocol 2, and crew still requires 13-16 to install a protocol-2 editor. New editor permission: `artifact.theme`.
9
+ - **The MCP inspector ships as an editor plugin pack: `packs/garden-mcp-inspector` (PR #1307, DES-EDITOR-PLUGIN-CONTRACT-001 slice 5).** The editor-plugin scaffold made it (kind `mcp-server`, protocol [1,2], sizes inline/pane/full, permissions `artifact.read`, `mcp.session`, `ui.fullscreen`). The card holds the tools, the argument form, Call and the result. The options tabs are Resources, Prompts and the JSON-RPC Log. Full screen shows the whole inspector, and Advanced adds the last call's raw exchange. It follows list pages, shows a list the server refuses as its error, and starts the log over on Restart. Arguments come from the tool's schema, with a JSON box for anything the fields can't express. A tool call is sent only from a click on Call. Install it with `install.py --dir "$(wicked-garden path packs/garden-mcp-inspector)"`. A test re-runs the scaffold and holds the pack to its output.
10
+
11
+ ### Changed
12
+ - **Editor conformance tolerates a slow host and checks the options mount (PR #1307).** Each page load and each read proxied to the daemon may take `--timeout` seconds (else `$WG_EDITOR_CONFORMANCE_TIMEOUT`, default 120; it was Playwright's 30 s). No load waits for "network idle", which never comes while studio holds its live socket. The host page's own files are fetched once per run. Case 15 now reads the `host.hello` the editor's frame received: each plugin tab must be mounted as an options instance told that tab, and `host.tab` must switch it to the other tabs and back without a reload. Case 14 checks the card is told `surface: card`. Before, a host page that ignored `tab` passed case 15.
13
+ - **Demo videos follow the studio skin by default (PR #1304).** The recorder's stage, title and chapter cards, captions, progress and callouts take their colours and typeface from the operator's studio Theme. It reads them from wicked-crew's `GET /api/v1/appearance/video-palette` (`$WICKED_CREW_URL`), replacing the fixed grey palette and its red accent (`#ee0000`). A storyline's `brand.accent` still overrides the accent. With no daemon, the stage uses a neutral grey-and-slate look.
14
+ - **deps:** Playwright 1.64.1 (PR #1305) and motion 14.2.0 (PR #1302).
15
+
5
16
  ## [12.54.0] — 2026-10-12
6
17
 
7
18
  ### Changed
8
- - **QE acceptance needs an isolated reviewer; a seat without one records FAIL (PR #1296, #1290).** `qe accept` runs the writer, executor and reviewer as separate workers (a fresh context per step, whose reply returns to the pipeline), so a claude QE seat no longer ends its turn on the writer's test plan. The reviewer is never run inline. **QE seat change:** a seat that cannot run an isolated sub-agent (for example pi or codex) now records FAIL `inconclusive — no isolated reviewer` instead of a verdict. Until the engine-run reviewer (wicked-core, `feat/qe-reviewer-every-seat`) ships in a core-ts release, put QE steps on a claude seat; the earlier "put QE on pi" workaround no longer yields a PASS.
19
+ - **QE acceptance needs an isolated reviewer; a seat without one records FAIL (PR #1296, #1290).** `qe accept` runs the writer, executor and reviewer as separate workers (a fresh context per step, whose reply returns to the pipeline), so a claude QE seat no longer ends its turn on the writer's test plan. The reviewer is never run inline. **QE seat change:** with wicked-core-ts 0.9.9 or later (wicked-core#917), QE acceptance works on every seat: the engine runs the reviewer as its own isolated reviewer turn, and when no reviewer is possible the operator's approve at the `qe_reviewer_unavailable` gate is the judgment, labelled "judged by operator". On an older engine (core-ts 0.9.8 or earlier) a seat that cannot run an isolated sub-agent (for example pi or codex) records FAIL `inconclusive — no isolated reviewer`: it fails closed, never a false PASS.
9
20
 
10
21
  ### Added
11
22
  - **Engine-run reviewer phases for accept (PR #1299).** `accept --phase evidence` and `accept --phase review --evidence <dir>`: inside a governed run the engine can run the isolated reviewer as its own fresh session on any seat; the verdict carries `review_session`. `--phase all` (direct use) is unchanged. Takes effect once a wicked-core release with the engine side ships.
@@ -1118,7 +1129,8 @@ through `v9.2.18`. Major themes across that span:
1118
1129
 
1119
1130
  For each of those releases, see the corresponding tag in git history.
1120
1131
 
1121
- [Unreleased]: https://github.com/mikeparcewski/wicked-garden/compare/v12.54.0...HEAD
1132
+ [Unreleased]: https://github.com/mikeparcewski/wicked-garden/compare/v12.55.0...HEAD
1133
+ [12.55.0]: https://github.com/mikeparcewski/wicked-garden/compare/v12.54.0...v12.55.0
1122
1134
  [12.54.0]: https://github.com/mikeparcewski/wicked-garden/compare/v12.53.3...v12.54.0
1123
1135
  [12.53.3]: https://github.com/mikeparcewski/wicked-garden/compare/v12.53.2...v12.53.3
1124
1136
  [12.53.2]: https://github.com/mikeparcewski/wicked-garden/compare/v12.53.1...v12.53.2
package/install.mjs CHANGED
@@ -61,7 +61,8 @@ import { execSync, spawnSync } from "node:child_process";
61
61
  const __dirname = dirname(fileURLToPath(import.meta.url));
62
62
  const pkg = JSON.parse(readFileSync(join(__dirname, "package.json"), "utf8"));
63
63
 
64
- const PLUGIN_DIRS = [".claude-plugin", "hooks", "scripts", "skills", "schemas"];
64
+ // packs/ = the editor plugin packs garden ships (`wicked-garden path packs/<name>` resolves inside the copy).
65
+ const PLUGIN_DIRS = [".claude-plugin", "hooks", "scripts", "skills", "schemas", "packs"];
65
66
  // uv.lock rides along so the copy's `uv sync` (and the launcher's `uv run --frozen`) resolve
66
67
  // the same pins the release was tested with.
67
68
  const PLUGIN_FILES = ["ETHOS.md", "CHANGELOG.md", "README.md", "WICKED_GARDEN_BUS_EVENTS.md", "pyproject.toml", "uv.lock"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wicked-garden",
3
- "version": "12.54.0",
3
+ "version": "12.55.0",
4
4
  "type": "module",
5
5
  "description": "Curated toolkit for what AI coding agents can't do alone: evidence-gated work, codegraph relationships, deterministic multi-file refactor, multi-model second opinions, and cross-session memory. Installs as a Claude Code plugin.",
6
6
  "keywords": [
@@ -0,0 +1,29 @@
1
+ # Editor plugin packs that ship with wicked-garden
2
+
3
+ Each directory is a `wicked-pack.json` spec-2 pack built with the editor-plugin builder
4
+ (the `wicked-garden-editor-scaffold` skill), the same way the `editor-plugin` workflow builds any plugin.
5
+ None of them uses the reserved `wicked` vendor: that prefix belongs to the editors bundled inside studio.
6
+
7
+ | Pack | Opens | What it is |
8
+ |---|---|---|
9
+ | `garden-mcp-inspector` | `mcp-server` | The MCP inspector: list a server's tools, resources and prompts, call them, and read the JSON-RPC log. The host connects the server and draws Connect, Restart and the call line. |
10
+
11
+ ## How it was made
12
+
13
+ ```
14
+ wicked-garden run scripts/editor/scaffold.py --vendor garden --id garden-mcp-inspector --title "MCP inspector" \
15
+ --kinds mcp-server --permissions artifact.read,mcp.session,ui.fullscreen --surfaces <its surfaces JSON> \
16
+ --out packs/garden-mcp-inspector
17
+ ```
18
+
19
+ Then the inspector went into the entry's YOUR EDITOR part, and `pin.py` re-pinned the hash. `tests/editor/test_garden_packs.py`
20
+ re-runs that scaffold with the pack's own declaration and requires everything but the entry's hash to match.
21
+
22
+ ## Install one
23
+
24
+ ```
25
+ wicked-garden run scripts/editor/install.py --dir "$(wicked-garden path packs/garden-mcp-inspector)" --crew-url <the daemon URL>
26
+ ```
27
+
28
+ The daemon re-runs `pack check` and the conformance cases before it lists the editor. Installing grants
29
+ `mcp.session` for this build only, and studio's MCP inspector page then opens it.
@@ -0,0 +1,35 @@
1
+ # MCP inspector
2
+
3
+ An artifact editor plugin for wicked-studio (`garden-mcp-inspector` 0.1.0), packaged as a
4
+ `wicked-pack.json` spec-2 pack. It opens: mcp-server.
5
+
6
+ - `wicked-pack.json` declares the editor: its id, the artifact kinds it opens, its sizes, every
7
+ permission it asks for and why, and the sha256 of its one entry file.
8
+ - `editors/garden-mcp-inspector/index.html` is the whole editor: one self-contained HTML file speaking the
9
+ `wicked.editor/2` protocol (and /1 to an older host) to studio's plugin host over a MessagePort. It
10
+ runs in sandboxed frames with no network: the card in the run's thread, the options tabs in the host
11
+ panel and full screen, all drawn from the `surfaces` its manifest declares.
12
+
13
+ ## Check it
14
+
15
+ ```
16
+ wicked-garden run scripts/editor/pin.py . # re-pin the entry's sha256 after an edit
17
+ npx wicked-garden pack check . # the manifest and the entry
18
+ wicked-garden run scripts/editor/conformance.py --pack . --host-url <a wicked-crew daemon URL> --json
19
+ ```
20
+
21
+ The conformance run drives studio's conformance host page in headless Chromium against this
22
+ editor: handshake, sizes, no network, permissions, typing never acts, key forwarding, strict
23
+ input, liveness, keyboard reach, theme, the pinned hash, and the three surfaces (the card, each
24
+ options tab, full screen and its modes). On a slow host, give it longer to load the page with
25
+ `--timeout <seconds>` (default 120).
26
+
27
+ ## Install it
28
+
29
+ Through the `editor-plugin` workflow's install step, or by hand:
30
+
31
+ ```
32
+ wicked-garden run scripts/editor/install.py --dir . --crew-url <the daemon URL>
33
+ ```
34
+
35
+ It then shows in studio under Settings → Developer → Editor plugins, and opens in the editor dev host.