@junghanacs/entwurf 0.12.0 → 0.12.2
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.
- package/CHANGELOG.md +40 -0
- package/README.md +88 -28
- package/docs/setup-clean-host.md +117 -219
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +454 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-control-rpc.js +111 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-core.js +1683 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-deliverability.js +76 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-fact-provider.js +121 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-facts.js +155 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-peers-render.js +119 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-preflight.js +160 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-resume-args.js +63 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-self-address.js +81 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-contract.js +290 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-decider.js +254 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-lock.js +365 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-mailbox.js +64 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-production.js +218 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-release.js +108 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-resume-marker.js +33 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-runner.js +116 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-send-fallback.js +125 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-send.js +184 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-spawn-production.js +237 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-spawn.js +216 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +164 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-mailbox-body.js +66 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-session.js +1502 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/session-id.js +50 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/socket-discovery.js +259 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/socket-probe.js +81 -0
- package/mcp/entwurf-bridge/dist/protocol.js +29 -0
- package/mcp/entwurf-bridge/start.sh +49 -7
- package/mcp/entwurf-bridge/test.sh +12 -3
- package/mcp/entwurf-bridge/tsconfig.build.json +42 -0
- package/package.json +30 -9
- package/pi/meta-bridge/.claude-plugin/marketplace.json +0 -1
- package/pi-extensions/lib/entwurf-v2-contract-schema.ts +101 -0
- package/pi-extensions/lib/entwurf-v2-contract.ts +10 -78
- package/pi-extensions/lib/entwurf-v2-decider.ts +6 -2
- package/pi-extensions/lib/entwurf-v2-production.ts +26 -4
- package/run.sh +150 -15
- package/scripts/check-entwurf-bridge-pi-free.ts +146 -0
- package/scripts/check-entwurf-v2-contract.ts +6 -4
- package/scripts/check-meta-manifest-schema.py +145 -0
- package/scripts/meta-bridge-install.sh +17 -3
- package/scripts/meta-bridge-state.py +37 -10
- package/scripts/smoke-acp-bundled-mcp-live.ts +13 -2
- package/scripts/smoke-acp-carrier-augment-live.ts +35 -19
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,46 @@ All notable changes to this project will be documented here. Format follows [Kee
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 0.12.2 — 2026-06-29
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **Claude Code meta-bridge installs on the supported 2.1.x floor.** Claude's plugin validator is a closed schema whose accepted marketplace keys differ by patch level; 0.12.1's root-level `marketplace.json` `description` passed on Claude 2.1.195 but failed on the floor host's 2.1.97 with `Unrecognized key: "description"`. The marketplace manifest now keeps only the minimal root keyset confirmed on the floor (`name`, `owner`, `plugins`), leaving explanatory text in installer/docs comments rather than in closed-schema JSON.
|
|
12
|
+
- **Installed meta-bridge MCP wiring no longer bakes pnpm store paths.** On npm/pnpm-installed hosts, the user-scope Claude MCP entry now points at the stable `entwurf-bridge` bin instead of `$REPO/mcp/entwurf-bridge/start.sh`, whose `$REPO` can be a `.pnpm/@junghanacs+entwurf@.../node_modules/...` hash path that goes stale on version or peer changes. Development clones still pin to that clone's `start.sh`; both branches preserve the external Claude sender env (`ENTWURF_BRIDGE_EXTERNAL_AGENT_ID=external-mcp/claude-code`, `ENTWURF_BRIDGE_REQUIRE_META_SENDER=1`).
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **`check-meta-manifest-schema` — a CLI-version-independent meta-bridge manifest guard.** The new deterministic gate pins the Claude marketplace/plugin/hooks manifests to the minimal keysets used by the meta-bridge, including the load-bearing hook event names (`SessionStart`, `CwdChanged`, `UserPromptSubmit`, `FileChanged`) and hook command keys. It also asserts `meta-bridge-state.py::desired_mcp()` chooses the installed-vs-clone MCP wiring without invoking a real Claude CLI. The gate is wired into `pnpm check` so future decorative closed-schema keys fail before release.
|
|
17
|
+
|
|
18
|
+
### Verification
|
|
19
|
+
|
|
20
|
+
- `pnpm check` passes with the new `check-meta-manifest-schema` static guard included.
|
|
21
|
+
- `./run.sh smoke-meta-install-state` passes, proving the state manager/doctor consumers still follow `desired_mcp()` without drift.
|
|
22
|
+
- Installed-location regression probe passes: running `scripts/check-meta-manifest-schema.py` from a synthetic `node_modules/@junghanacs/entwurf` package no longer self-fails.
|
|
23
|
+
- Claude Code 2.1.97 floor validation passed on `hejdev6` after removing the root marketplace `description`; current Claude 2.1.195 validation also passes with warnings only.
|
|
24
|
+
- `LIVE=1 ./run.sh release-gate /tmp/psa-release-gate-0.12.2.NLGhet` passed on 2026-06-29 with `MUST: PASS=17 FAIL=0 SKIP=0` and `BEHAVIOR: PASS=1 FAIL=0`; log `/tmp/entwurf-release-gate-0.12.2-20260629T205339.log`.
|
|
25
|
+
|
|
26
|
+
## 0.12.1 — 2026-06-29
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- **Installed MCP bridge boots from npm/node_modules.** The 0.12.0 launcher ran `src/index.ts` through Node strip-types, but Node refuses type stripping below `node_modules` (`ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING`). The npm tarball now carries a clean tsc-emitted bridge JS closure under `mcp/entwurf-bridge/dist/`, and `start.sh` runs that dist path when installed while keeping the strip-types source path for development clones.
|
|
31
|
+
- **Stale dist files cannot ship.** `build-bridge` removes `mcp/entwurf-bridge/dist` before emit, and `check-pack-install` plants a stale sentinel before `npm pack` to prove prepack cleaned the tree. This closes the orphan-emit tarball contamination found during the 0.12.1 C review.
|
|
32
|
+
- **npm bin symlink installs resolve the package root.** `run.sh`, `start.sh`, and the bridge protocol smoke now resolve symlinks before computing their root, so `node_modules/.bin/entwurf` and `node_modules/.bin/entwurf-bridge` work like direct package paths.
|
|
33
|
+
- **Two live ACP MUST smokes no longer flake on model-in-loop phrasing.** `smoke-acp-carrier-augment-live` proved augment delivery by asking the model to echo a `SECRET_PROJECT_CODE` planted in a `/tmp` `AGENTS.md` — current Claude correctly refuses that as a prompt-injection/exfil pattern, so the MUST gate failed even though the augment rode the wire and the empty carrier billed clean. It now uses a benign factual marker (an internal build codename) asked back as a normal "answer from project context" task. `smoke-acp-bundled-mcp-live` asked the model for "values only, one per line" yet asserted on field-name-labeled lines (`socketState: alive`), so a compliant bare-value reply was dropped by the envelope filter while the `[tool:done]` notice truncated `socketState`; it now requests labeled lines so the three identity fields are deterministically observable. Neither change weakens the gate (same MUST assertions, same non-circular gid proof) — both only realign the observation contract with current model behavior.
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- **Install docs are npm-first and pi-adapter-second.** The README and clean-host walkthrough now lead with neutral `npm install @junghanacs/entwurf`, document the `entwurf` / `entwurf-bridge` bins, and move pi to the optional ACP-provider/control-socket adapter lane (`@earendil-works/pi-coding-agent >=0.80.2 <0.81`). `pi install npm:...` is no longer the public primary install recipe.
|
|
38
|
+
- **Pi peers are optional for the neutral package.** The `@earendil-works/*` peer trio and `typebox` are marked optional so a plain npm install can boot the MCP bridge without pulling the pi adapter stack. The pi loader lane is still verified separately with explicit pi peers.
|
|
39
|
+
- **Garden id concept is documented up front.** The concept primer now defines garden/garden id as the shared address space for independent harness citizens, not a worker name or proof of pi ownership, and points callers to `entwurf_peers` + `entwurf_v2` instead of hand-picking transports.
|
|
40
|
+
|
|
41
|
+
### Verification
|
|
42
|
+
|
|
43
|
+
- `./run.sh check-pack-install` passes with the neutral npm install regression: package bins present, optional pi peers absent, installed dist bridge answers `tools/list`, and pi-loader registration still passes on the explicit pi-peer lane.
|
|
44
|
+
- Remote `hejdev6` real-install probe from the packed tarball passed: local npm install, package bins, optional pi peers absent, installed `entwurf-bridge` `tools/list`, `entwurf install` with isolated HOME, and `entwurf check-bridge`. The host's real HOME also exposed a pre-existing stale `~/.pi/agent/entwurf-targets.json` symlink to `pi-shell-acp`; fix with `entwurf setup:links --force` or an explicit `ENTWURF_TARGETS_PATH` if that old registry is intentional.
|
|
45
|
+
- `LIVE=1 ./run.sh release-gate /tmp/psa-release-gate-0.12.1.GUFDUb` tiers `MUST: PASS=17 FAIL=0 SKIP=0` with `BEHAVIOR: PASS=1 FAIL=0` on 2026-06-29; log `/tmp/entwurf-release-gate-0.12.1-20260629T191543.log` (the two live-smoke observation fixes above were what moved the gate from `MUST FAIL=1` to green; the install change is harness-neutral and touches no ACP code path).
|
|
46
|
+
|
|
7
47
|
## 0.12.0 — 2026-06-29
|
|
8
48
|
|
|
9
49
|
> This release hard-cuts the project from `pi-shell-acp` to **`entwurf`**. It is not a compatibility rename: the package/provider/model/MCP identity is now `entwurf`, v1 entwurf verbs are gone, and `entwurf_v2` is the canonical garden-id dispatch verb. The repo is **entwurf-core (v2 dispatch) + meta-bridge + pi adapter + ACP plugin**. Pi remains an important adapter and ACP host, but the project subject is the garden-citizen dispatch substrate. Verified release floor: `pnpm check`, `check-pack`, `check-pack-install`, and `LIVE=1 ./run.sh release-gate <scratch>` MUST tier `PASS=17 FAIL=0 SKIP=0` on 2026-06-29, with BEHAVIOR (advisory model-in-loop autonomous MCP tool-selection) `PASS=1 FAIL=0` and recorded separately from the cut decision.
|
package/README.md
CHANGED
|
@@ -8,9 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
npm package: <https://www.npmjs.com/package/@junghanacs/entwurf>
|
|
10
10
|
|
|
11
|
+
Legacy package: [`@junghanacs/pi-shell-acp`](https://www.npmjs.com/package/@junghanacs/pi-shell-acp). `entwurf` is its 0.12+ successor line: the same work renamed around the garden-citizen dispatch substrate rather than the pi adapter.
|
|
12
|
+
|
|
11
13
|
> **Public, active development.** Real working code, still young. Verify it in your own workflow before relying on it all day. Evidence calibration: [VERIFY.md](./VERIFY.md); native async-delivery capability levels: [DELIVERY.md](./DELIVERY.md).
|
|
12
14
|
|
|
13
|
-
> **Current state for 0.12.
|
|
15
|
+
> **Current state for 0.12.1.** This repo is **entwurf-core (v2 dispatch) + a meta-bridge + a pi adapter + an ACP plugin**. Pi is one supported harness adapter — important because it supplies control sockets and hosts the ACP plugin today — but it is not the project subject. Claude Code is shipped through the meta-bridge; pi is shipped through the control-socket adapter; Codex and Antigravity (`agy`) reach the garden with verified delivery probes, documented per launch mode in [DELIVERY.md](./DELIVERY.md), with shipped adapter/install lanes landing after the 0.12.0 doc cut. The ACP plugin is Claude-first; Cortex/vendor-governed ACP backends are future lanes.
|
|
14
16
|
|
|
15
17
|
<details>
|
|
16
18
|
<summary>Watch archived pre-0.12 demo (2131×1142 GIF, click to expand)</summary>
|
|
@@ -68,68 +70,126 @@ This meta-bridge installer/doctor is **Claude Code only** in the shipped 0.12.0
|
|
|
68
70
|
A few words that look unusual for a coding tool.
|
|
69
71
|
|
|
70
72
|
- **Entwurf** (기투, projection-of-self) — sibling sessions with their own runtime boundary. Not "delegate," not "worker," not "sub-agent." Spawn, resume, and live peer messaging are first-class.
|
|
73
|
+
- **Garden / garden id** — the garden is the shared address space where independent harness sessions become citizens without losing their own runtime or transcript. A garden id is the stable address of one such citizen (for pi, a garden-native session id like `YYYYMMDDTHHMMSS-<6hex>`; for native harnesses, a meta-session id minted by the `SessionStart` hook). It is not a worker name and not proof that pi owns the session. The same-looking id may name a live control socket, a dormant pi record, or a mailbox-backed native session, so callers discover facts with `entwurf_peers` and deliver with `entwurf_v2` instead of choosing a transport by hand.
|
|
71
74
|
- **Engraving** — optional short operator text delivered through each backend's native identity carrier. Not a giant hidden prompt, not a tool catalog.
|
|
72
75
|
- **MCP** — in this repo, MCP is just the transport by which ACP-backed sessions receive pi capabilities that native pi exposes directly as extensions. It is not a general MCP platform. Explicit `entwurfProvider.mcpServers` only; no ambient `~/.mcp.json` scanning, no automatic retrieval. The same `entwurf-bridge` entry can also be wired into another host's MCP catalog (Claude Code, Codex, Antigravity, …) when the operator chooses. `entwurf_self` returns an authoritative pi-session or trusted meta-session identity envelope; `entwurf_v2` can deliver from plain external MCP hosts, but only pi-session and trusted meta-session senders are replyable.
|
|
73
76
|
- **Session persistence** — re-attaches pi to the same remote ACP session. Does not hydrate backend transcripts into pi history.
|
|
74
77
|
|
|
75
78
|
## Install
|
|
76
79
|
|
|
77
|
-
`entwurf` is a
|
|
80
|
+
`entwurf` is a neutral npm package first. Install the package with `npm` (or
|
|
81
|
+
`pnpm`/`yarn`) and then wire the harness you want to use. Pi is still the
|
|
82
|
+
adapter that hosts the ACP plugin and live control-socket surface, but the base
|
|
83
|
+
install is **not** `pi install npm:...` anymore.
|
|
84
|
+
|
|
85
|
+
The package exposes two bins:
|
|
78
86
|
|
|
79
|
-
|
|
87
|
+
- `entwurf` → `run.sh` (installer, checks, meta-bridge doctor/install)
|
|
88
|
+
- `entwurf-bridge` → the MCP stdio launcher (`mcp/entwurf-bridge/start.sh`)
|
|
80
89
|
|
|
81
|
-
|
|
90
|
+
The bridge does not provide Claude credentials, tokens, or subscription access,
|
|
91
|
+
and does not bypass any backend auth. Whatever the operator's local `claude` /
|
|
92
|
+
`codex` / pi runtime already trusts is what entwurf can use.
|
|
82
93
|
|
|
83
|
-
### From npm
|
|
94
|
+
### From npm — user/global install
|
|
84
95
|
|
|
85
96
|
```bash
|
|
86
|
-
|
|
97
|
+
npm install -g @junghanacs/entwurf
|
|
98
|
+
|
|
99
|
+
# wire a target project for the pi adapter / ACP plugin lane
|
|
87
100
|
cd /path/to/your-project
|
|
88
|
-
|
|
89
|
-
|
|
101
|
+
entwurf install .
|
|
102
|
+
entwurf check-bridge
|
|
90
103
|
```
|
|
91
104
|
|
|
92
|
-
|
|
105
|
+
This writes `.pi/settings.json` in the target project with the absolute path to
|
|
106
|
+
the installed `entwurf-bridge` launcher. It also links the target registry under
|
|
107
|
+
`~/.pi/agent/` for spawn-bg resume. The global install is the easiest path when
|
|
108
|
+
Claude Code's USER-scope MCP registration should work from every cwd.
|
|
109
|
+
|
|
110
|
+
### From npm — project-local install
|
|
93
111
|
|
|
94
112
|
```bash
|
|
95
113
|
cd /path/to/your-project
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
114
|
+
npm install --save-dev @junghanacs/entwurf
|
|
115
|
+
|
|
116
|
+
npx entwurf install .
|
|
117
|
+
npx entwurf check-bridge
|
|
99
118
|
```
|
|
100
119
|
|
|
101
|
-
|
|
120
|
+
For manual MCP registration from a project-local install, point the host at:
|
|
102
121
|
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
cd /path/to/your-project
|
|
106
|
-
~/.pi/agent/git/github.com/junghan0611/entwurf/run.sh install .
|
|
107
|
-
~/.pi/agent/git/github.com/junghan0611/entwurf/run.sh check-bridge
|
|
122
|
+
```text
|
|
123
|
+
/path/to/your-project/node_modules/.bin/entwurf-bridge
|
|
108
124
|
```
|
|
109
125
|
|
|
110
|
-
|
|
126
|
+
or at the package launcher directly:
|
|
111
127
|
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
pi install -l git:github.com/junghan0611/entwurf
|
|
115
|
-
./.pi/git/github.com/junghan0611/entwurf/run.sh install .
|
|
116
|
-
./.pi/git/github.com/junghan0611/entwurf/run.sh check-bridge
|
|
128
|
+
```text
|
|
129
|
+
/path/to/your-project/node_modules/@junghanacs/entwurf/mcp/entwurf-bridge/start.sh
|
|
117
130
|
```
|
|
118
131
|
|
|
119
|
-
###
|
|
132
|
+
### From source — development clone
|
|
120
133
|
|
|
121
134
|
```bash
|
|
122
135
|
git clone https://github.com/junghan0611/entwurf ~/repos/gh/entwurf
|
|
123
136
|
cd ~/repos/gh/entwurf
|
|
124
137
|
pnpm install
|
|
125
|
-
|
|
138
|
+
|
|
126
139
|
./run.sh install /path/to/your-project
|
|
127
140
|
./run.sh check-bridge
|
|
128
141
|
```
|
|
129
142
|
|
|
130
|
-
|
|
143
|
+
A development clone runs the bridge source through Node's strip-types path;
|
|
144
|
+
an npm-installed package runs the prebuilt JS under `mcp/entwurf-bridge/dist/`
|
|
145
|
+
because Node refuses to strip `.ts` files under `node_modules`.
|
|
146
|
+
|
|
147
|
+
### Pi adapter / ACP plugin lane
|
|
148
|
+
|
|
149
|
+
To use the `entwurf` provider inside pi, install a compatible pi binary
|
|
150
|
+
separately (`@earendil-works/pi-coding-agent >=0.80.2 <0.81`). Then point pi at
|
|
151
|
+
the npm-installed package or development clone:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# global npm install path
|
|
155
|
+
pi -e "$(npm root -g)/@junghanacs/entwurf" --list-models entwurf
|
|
156
|
+
|
|
157
|
+
# project-local install path
|
|
158
|
+
pi -e ./node_modules/@junghanacs/entwurf --list-models entwurf
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
For daily operator sessions, launch pi with `--entwurf-control` and a garden id
|
|
162
|
+
from `entwurf new-session-id`; see [Garden launcher](#garden-launcher). Older pi
|
|
163
|
+
versions may silently miss the provider/extension surface, so treat the pi floor
|
|
164
|
+
as release-critical for the ACP/plugin lane. A host that only uses
|
|
165
|
+
`entwurf-bridge` from Claude Code / Codex / Antigravity does not need pi until it
|
|
166
|
+
tries an `owned-outcome` spawn-bg resume target.
|
|
167
|
+
|
|
168
|
+
### External MCP host lane
|
|
169
|
+
|
|
170
|
+
After any npm install, register `entwurf-bridge` with the external host:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
claude mcp add --scope user entwurf-bridge \
|
|
174
|
+
entwurf-bridge
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
If the host does not inherit the npm bin directory, use an absolute path to the
|
|
178
|
+
bin or `start.sh`. For a garden-native Claude Code meta-session (replyable by
|
|
179
|
+
garden id), run:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
entwurf install-meta-bridge
|
|
183
|
+
entwurf doctor-meta-bridge
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
For manual configuration, [`pi/settings.reference.json`](./pi/settings.reference.json)
|
|
187
|
+
shows the pi adapter settings shape, and the external-host examples below show
|
|
188
|
+
plain MCP registrations.
|
|
189
|
+
|
|
190
|
+
> **First time on a clean Ubuntu / Debian / macOS host?** See the [clean-host walk-through](./docs/setup-clean-host.md) — Node/npm install, auth-free bridge boot, optional pi adapter verification, and authenticated runtime smokes.
|
|
131
191
|
|
|
132
|
-
> **Post-install checks.** `run.sh check-bridge` proves the `entwurf-bridge` MCP surface loads
|
|
192
|
+
> **Post-install checks.** `entwurf check-bridge` (or `./run.sh check-bridge` from a clone) proves the `entwurf-bridge` MCP surface loads with no backend auth needed. To prove the **ACP backend actually answers** — the bridge spawns Claude through the pi provider path and a real turn comes back — run `LIVE=1 entwurf smoke-acp-provider-live` from an installed package/clone with pi and Claude auth available. Package-source routing is pinned deterministically by `run.sh check-package-source-routing`, which runs inside `pnpm check` and the release gate.
|
|
133
193
|
|
|
134
194
|
> **Extension set — do not filter.** `entwurf` ships three `pi.extensions` entries as a single set: the ACP provider extension (`pi-extensions/acp-provider.ts`) plus `pi-extensions/entwurf-control.ts` and `pi-extensions/model-lock.ts`. Filtering some out via pi's object-form package configuration can leave the model lock or entwurf-control surface in a broken state. Disable the entire package or none of it unless you know precisely which boundary you are turning off.
|
|
135
195
|
|