@junghanacs/entwurf 0.25.1 → 0.30.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.
- package/AGENTS.md +1 -1
- package/BASELINE.md +1 -1
- package/CHANGELOG.md +73 -0
- package/DELIVERY.md +1 -1
- package/README.md +178 -674
- package/VERIFY.md +16 -15
- package/demo/README.md +1 -1
- package/docs/acp-backend-rail.md +6 -2
- package/docs/external-mcp-host.md +1 -1
- package/docs/setup-clean-host.md +346 -10
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +27 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/backend-adapter.js +12 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-peers-render.js +1 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-decider.js +2 -2
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-mailbox.js +2 -2
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-production.js +2 -2
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +3 -5
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +3 -3
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-composition.js +13 -6
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-mailbox-body.js +1 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +3 -3
- package/mcp/entwurf-bridge/src/index.ts +30 -3
- package/package.json +11 -11
- package/pi-extensions/entwurf-control.ts +50 -637
- package/pi-extensions/lib/acp/backend-adapter.ts +13 -1
- package/pi-extensions/lib/entwurf-fact-provider.ts +2 -2
- package/pi-extensions/lib/entwurf-mcp-server.ts +74 -0
- package/pi-extensions/lib/entwurf-peers-render.ts +1 -1
- package/pi-extensions/lib/entwurf-v2-decider.ts +2 -2
- package/pi-extensions/lib/entwurf-v2-mailbox.ts +2 -2
- package/pi-extensions/lib/entwurf-v2-production.ts +3 -3
- package/pi-extensions/lib/entwurf-v2-surface.ts +3 -5
- package/pi-extensions/lib/entwurf-v2-visible-resume.ts +3 -3
- package/pi-extensions/lib/fresh-call-composition.ts +13 -6
- package/pi-extensions/lib/meta-mailbox-body.ts +1 -1
- package/pi-extensions/lib/mux-fresh-call.ts +3 -3
- package/run.sh +163 -50
- package/scripts/check-entwurf-peers-surface.ts +8 -15
- package/scripts/check-entwurf-self-address.ts +7 -11
- package/scripts/check-entwurf-v2-surface.ts +20 -112
- package/scripts/check-fresh-call-dispatch.ts +12 -13
- package/scripts/check-gate-qualification.ts +248 -4
- package/scripts/check-install-surface.ts +3 -2
- package/scripts/check-mux-resume-call.ts +24 -35
- package/scripts/check-pi-bridge-sender.ts +130 -0
- package/scripts/check-pi-mcp-bridge.ts +251 -0
- package/scripts/lib/codex-fresh-live-protocol.ts +17 -5
- package/scripts/lib/codex-fresh-source-receipts.ts +21 -2
- package/scripts/lib/mutation-qualify.ts +269 -44
- package/scripts/lib/pi-mcp-bridge-probe.mjs +170 -0
- package/scripts/meta-bridge-doctor.sh +16 -5
- package/scripts/mutants/acp-foreground-only.json +17 -0
- package/scripts/mutants/codex-native.json +11 -11
- package/scripts/mutants/control-send-receipt.json +6 -4
- package/scripts/mutants/copilot-birth.json +2 -1
- package/scripts/mutants/fresh-call-dispatch.json +3 -14
- package/scripts/mutants/gate-qualification.json +59 -0
- package/scripts/mutants/mux-fresh-call.json +43 -45
- package/scripts/mutants/mux-resume-call.json +11 -35
- package/scripts/mutants/pack-install.json +15 -4
- package/scripts/mutants/pi-bridge-sender.json +54 -0
- package/scripts/mutants/pi-floor.json +6 -2
- package/scripts/mutants/pi-mcp-bridge.json +36 -0
- package/scripts/mutants/pi-mcp-register.json +51 -0
- package/scripts/mutants/v2-surface.json +6 -6
- package/scripts/resident-rpc-drive.ts +5 -1
- package/scripts/smoke-acp-bundled-mcp-live.ts +3 -1
- package/scripts/smoke-acp-cortex-live.ts +3 -1
- package/scripts/smoke-acp-session-reuse-live.ts +29 -12
- package/scripts/smoke-acp-socket-citizen-live.ts +3 -1
- package/scripts/smoke-acp-v2-send-live.ts +3 -1
- package/scripts/smoke-codex-fresh-live.ts +20 -1
- package/scripts/smoke-entwurf-chain-live.ts +6 -2
- package/scripts/smoke-entwurf-v2-matrix-live.ts +3 -1
- package/scripts/smoke-herdr-raw-install-live.sh +1 -1
- package/scripts/smoke-mux-lifecycle-live.ts +1 -1
- package/scripts/smoke-resident-garden-guard.sh +3 -1
package/AGENTS.md
CHANGED
|
@@ -18,7 +18,7 @@ Ask: does this follow capability rather than a surface name; record backend asym
|
|
|
18
18
|
|
|
19
19
|
- **entwurf-core (v2):** garden-id addressing, record facts, rail liveness, dispatch decisions, and delivery evidence.
|
|
20
20
|
- **Record authority:** every citizen uses V3 `MetaIdentity`; `backend` selects rail capability, never identity rank.
|
|
21
|
-
- **pi adapter:** attaches its native session to a record, hosts the record-keyed control socket, and
|
|
21
|
+
- **pi adapter:** attaches its native session to a record, hosts the record-keyed control socket, and registers the compiled `entwurf-bridge` with Pi’s built-in MCP under that record’s identity.
|
|
22
22
|
- **Native bridges:** register existing sessions without owning transcript or auth. Claude Code and Copilot are self-fetch; Antigravity and Codex are native-push. Codex remains native rather than ACP so its vendor tools, delegation, and work context remain intact. Admission/evidence details belong in [DELIVERY.md](./DELIVERY.md) and [VERIFY.md](./VERIFY.md).
|
|
23
23
|
- **ACP plugin:** one `entwurf` provider under an isolated overlay. The host pi session is already a record-backed citizen; ACP creates neither a second citizen nor a socket layer.
|
|
24
24
|
- **mux:** launch-only placement and fixed-runtime launch. It never imports into delivery. Fresh identity arrives only through its callback envelope, never a lookup; same-id visible resume keeps identity/liveness/locking on the v2 side of the injected seam. Fresh call accepts only the narrow model, literal absolute cwd, and existing caller-server seat inputs; it creates no session and does not infer seat from cwd. A Codex CALLER alone has an omitted-placement rule: it opens beside its own TUI pane, matched by thread-id in that pane title; 0/2+ matches reject; explicit placement still wins. Do not turn either fresh call or resume into a generic driver, command/env carrier, or second creation API. Exact module/argv/import ownership: [docs/mux-launch-rail.md](./docs/mux-launch-rail.md).
|
package/BASELINE.md
CHANGED
|
@@ -246,7 +246,7 @@ Per-question PASS / FAIL / NOTE for grading the model's response.
|
|
|
246
246
|
### Q-MCP — MCP enumerate
|
|
247
247
|
- **PASS** — Exactly one: `entwurf-bridge`.
|
|
248
248
|
- **FAIL** — Any second server appears, or `entwurf-bridge` missing.
|
|
249
|
-
- **NOTE** — Codex naturally writes the name with underscores (`entwurf_bridge`); that is the agent-visible backend marker, not a mutation. The current server exposes
|
|
249
|
+
- **NOTE** — Codex naturally writes the name with underscores (`entwurf_bridge`); that is the agent-visible backend marker, not a mutation. The current server exposes eight tools, including the manual `entwurf_register_native` fallback; MCP enumeration asks for the server name, not a stale tool count.
|
|
250
250
|
|
|
251
251
|
---
|
|
252
252
|
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,79 @@ All notable changes to this project will be documented here. Format follows [Kee
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 0.30.0 - 2026-10-02
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Pi 1.0 admission — the pi fence is `>=1.0.0 <1.1` (#125).** Dev pins move to Pi 1.0.0 and the
|
|
12
|
+
peer range to the next-minor ceiling `>=1.0.0 <1.1`. The range checks are major-aware; pack
|
|
13
|
+
literals, the four affected mutants, the live docs and ROADMAP's two gate-read lines follow. No
|
|
14
|
+
ACP, vendor or Herdr companion bump rides it. The 0.99.1 and 0.99.2 floors this cycle passed
|
|
15
|
+
through were branch steps and never shipped. Pi now carries MCP in its core
|
|
16
|
+
([You Said No MCP!](https://earendil.com/posts/you-said-no-mcp/), 2026-09-29) and this admission
|
|
17
|
+
builds on it rather than duplicating native tools; `pi-durable` and Pi's codemode are not adopted
|
|
18
|
+
here, and what they mean for Entwurf is undecided.
|
|
19
|
+
- **Codex first-admission verification follows the current Pi MCP dialect.** Joined native
|
|
20
|
+
call/result names must still agree before exact Pi-qualified names become semantic receipts;
|
|
21
|
+
downstream source audits and receipt-owned cleanup use the same boundary. The LIVE driver now
|
|
22
|
+
separates launch from callback-validated relay, and clarifies callback-first startup without
|
|
23
|
+
relaxing message bytes, role counts, omitted cwd/seat, or claiming guaranteed model obedience.
|
|
24
|
+
The final standalone Codex chain passed 65 assertions, including both exact source-role audits.
|
|
25
|
+
- **This cut has an explicit local acceptance exception (GLG, 2026-10-02).** The original P5
|
|
26
|
+
remains MUST 23 PASS / 1 FAIL / 0 SKIP, BEHAVIOR PASS; subsequent scoped Codex acceptance is a
|
|
27
|
+
separate run on amended bytes, not a synthetic 24/24 single-run result. GLG chose not to repeat
|
|
28
|
+
local full/qualification BODY/P5/M0 after the repairs. Exact prepared-SHA CI (including fresh
|
|
29
|
+
full and qualification BODY) and preserved-candidate Docker acceptance remain required. The
|
|
30
|
+
grouped development proofs do not activate #124 P3 composite release policy.
|
|
31
|
+
- **A pi citizen's Entwurf verbs ride Pi's built-in MCP (#125).** A born pi citizen registers the
|
|
32
|
+
compiled `entwurf-bridge` with `pi.registerMcpServer` under its record gardenId, so a pi model
|
|
33
|
+
reaches the same server every other host does. The five hand-written native tools are gone;
|
|
34
|
+
`entwurf_inbox_read` and `entwurf_register_native` are hidden on a pi host, leaving six declared.
|
|
35
|
+
Pi folds every character outside `[A-Za-z0-9_]` in an MCP tool name to `_`, so a pi model calls
|
|
36
|
+
`mcp__entwurf_bridge__<verb>`, and the pi fresh-call dialect (callback, delivery, peers) moved to
|
|
37
|
+
that spelling as one literal hard cut — no alias, no version router. The server key stays
|
|
38
|
+
`entwurf-bridge`; a same-namespace `mcp.json` entry overrides the registration by Pi's own
|
|
39
|
+
precedence.
|
|
40
|
+
- **Qualification builds what a gate consumes (#125, development tooling).** The snapshot stays
|
|
41
|
+
source-only; a mutant may declare `build {argv, output}`, and for that gate group only the
|
|
42
|
+
runner builds the output from the snapshot's own bytes, rebuilds it after every mutation and
|
|
43
|
+
before the post-control (baseline digest required), never counts a build red as a kill, voids a
|
|
44
|
+
run whose gate writes into the output, and removes it when the group ends (`[QK:QUALIFY-BUILD-*]`).
|
|
45
|
+
|
|
46
|
+
- **README is the product entry; clean-host setup owns the operating detail.** Installation,
|
|
47
|
+
prerequisites, citizen first use, terms and short history stay in README. Detailed settings,
|
|
48
|
+
harness configuration, context, skills and upgrades move to `docs/setup-clean-host.md` with
|
|
49
|
+
retained entry anchors and links. Herdr keeps its separate installation document. VERIFY
|
|
50
|
+
distinguishes Pi's built-in MCP tool ingress from record-addressed Unix-socket receive and
|
|
51
|
+
the ACP explicit tool projection; this is contract prose, not a new acceptance receipt.
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- **Claude ACP turns no longer get vendor-managed background work (#125).** The Claude adapter's
|
|
56
|
+
child env sets `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`, which turns off the vendor's own
|
|
57
|
+
Bash/Agent `run_in_background` option and its timeout / turn-abort auto-backgrounding. Cortex is
|
|
58
|
+
unchanged. A process a command detaches on its own (`&`, `setsid`, a daemon) is outside this
|
|
59
|
+
switch, so it is not a general termination guarantee. Observed on the branch (#125, one host,
|
|
60
|
+
not a release acceptance): cancelling a reused turn's foreground work ended it and the same
|
|
61
|
+
session served the next turn, while a cancelled FIRST turn is not retained and the next turn
|
|
62
|
+
bootstraps a new session. Pinned by `[QK:ACP-CLAUDE-FOREGROUND-ONLY]` with one rollback mutant.
|
|
63
|
+
- **`check-pack-install` keeps the consumer inside its own sandbox.** Its consumer subcalls name
|
|
64
|
+
every writable root (HOME, four XDG, `PI_CODING_AGENT_DIR`); an inherited agent dir had received
|
|
65
|
+
the npm consumer's user-scope settings (`[QK:PACK-INSTALL-INHERITED-AGENTDIR-UNTOUCHED]`,
|
|
66
|
+
`[QK:PACK-INSTALL-CONSUMER-ROOTS-CONTAINED]`).
|
|
67
|
+
- **LIVE smokes match Pi 1.0 (#125).** Isolated pi citizens load `-e builtin:mcp` beside
|
|
68
|
+
`--no-extensions`, which turns the built-in MCP off too; the chain hop-2 tool name uses the
|
|
69
|
+
underscore form. `smoke-acp-session-reuse-live` judges reuse by turn 2's `[acp: reusing live
|
|
70
|
+
session]` notice rather than by recall alone, since a rebuilt turn re-sends the full transcript.
|
|
71
|
+
The native lifecycle cell drives `openai-codex/gpt-6-luna`.
|
|
72
|
+
- **Docs state the current contract.** The bridge's eight verbs are counted as eight wherever a
|
|
73
|
+
current sentence counts them (dated seven-tool receipts stay as they were). The harness source
|
|
74
|
+
map's callback column names `FRESH_CALL_CALLBACK_TOOL`, with the delivery dialects moved to a
|
|
75
|
+
note. The ACP support table is this checkout's declaration rather than a shipped baseline,
|
|
76
|
+
VERIFY's surface banner no longer carries 0.21.0's acceptance numbers, the Herdr docs separate
|
|
77
|
+
the committed `herdr-checkout` carrier from npm's production authority, and VERIFY's ACP
|
|
78
|
+
troubleshooting reads turn evidence from lifecycle notices and the session's stopReason.
|
|
79
|
+
|
|
7
80
|
## 0.25.1 - 2026-09-30
|
|
8
81
|
|
|
9
82
|
### Added
|
package/DELIVERY.md
CHANGED
|
@@ -108,7 +108,7 @@ physical host. Do not read a D-level cell as a Darwin receipt.
|
|
|
108
108
|
|
|
109
109
|
| Harness / surface | Product status | Capability | Transport and boundary |
|
|
110
110
|
|---|---|---|---|
|
|
111
|
-
| **pi
|
|
111
|
+
| **pi Entwurf** | shipped | D7; D8 partial | Record-addressed Unix control socket. A record-less socket is diagnostic only and never dispatched. A pi session calls the verbs through Pi's built-in MCP running the compiled `entwurf-bridge` (#125); the receive rail is unchanged. |
|
|
112
112
|
| **Claude Code interactive `>=2.1.217`** | shipped; Linux certified | D6; D7/D8 partial | Per-session mailbox + exec-form `FileChanged`/`asyncRewake`. B2 proved idle wake and same-session continuity on one NixOS host. |
|
|
113
113
|
| **Antigravity / agy** | shipped | D6; D7 partial | Record-backed native-push through LS gRPC `agentapi send-message`; no mailbox or receiver marker. Admitted before the #82 step 9 contract and not re-evaluated under it, so it is legacy citizen evidence, not a step-9 supported harness: `entwurf_fresh_call` cannot open an agy sibling, and nothing here should be read as claiming visible lifecycle parity. |
|
|
114
114
|
| **Codex CLI app-server citizen** | supported in 0.21.0; caller-seat topology ACCEPTED on Linux at 0.153.4, 2026-09-16 (56 assertions, exit 0), and the caller-DIRECTORY axis ACCEPTED the same day on the same host (#95 lane C, 65 assertions, exit 0; the 2026-09-12 explicit-home acceptance is history — #95 D1 retired that room) | D6 accepted; D7 partial; D8 unproven | Vendor-trusted user-scope `SessionStart` birth plus strict per-request metadata join; no shared-pid sender marker. `thread/loaded/list` probes the operator-owned app-server UDS and one-shot `codex queue` delivers with no retry. The operator owns the app-server and seats it wherever they like; Entwurf creates, moves and supervises none of it. Since #95 lane B a Codex CALLER with no explicit placement opens its sibling beside its OWN pane, located by the `thread-id` its `[tui].terminal_title` writes into the pane title; 0 or 2+ matching panes refuse with no fallback, and the title is a placement input only — never an address, liveness or delivery fact. #95 D1 (2026-09-16) retired the fixed `codex` home that omitted-placement Codex TARGETS used to select, so an omitted seat is the caller's own session for every backend. Exact 0.153.4 source still bounds placing a sibling beside a TUI whose thread nobody named as unsupported; the anchor resolves only the pane showing the caller's own thread. |
|