@junghanacs/entwurf 0.51.0 → 0.53.1
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 +116 -397
- package/CHANGELOG.md +191 -2
- package/CONTRIBUTING.md +4 -4
- package/DELIVERY.md +2 -2
- package/ENTWURF-CLI.json +1 -1
- package/ENTWURF.json +10 -4
- package/README.md +11 -8
- package/VERIFY.md +333 -143
- package/demo/README.md +1 -1
- package/demo/demo-baseline.sh +1 -1
- package/demo/demo.sh +1 -1
- package/docs/acp-backend-rail.md +248 -34
- package/docs/setup-clean-host.md +75 -80
- package/mcp/entwurf-bridge/dist/ENTWURF.json +10 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/acp-client.js +1 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/backend-adapter.js +90 -14
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/config.js +4 -9
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/context.js +15 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/model-ids.js +9 -12
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/models.js +41 -56
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/tool-surface.js +33 -6
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-control-rpc.js +4 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-composition.js +34 -3
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-fresh-call.js +3 -1
- 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 +2 -1
- package/package.json +14 -14
- package/pi/pi-durable/carrier/harness-setup.js +1 -1
- package/pi/pi-durable/carrier/subagent.js +1 -1
- package/pi/pi-durable/overlay/upstream-pin.json +15 -15
- package/pi/settings.reference.json +0 -1
- package/pi-extensions/acp-provider.ts +12 -6
- package/pi-extensions/lib/acp/acp-client.ts +6 -7
- package/pi-extensions/lib/acp/backend-adapter.ts +139 -15
- package/pi-extensions/lib/acp/backend.ts +261 -32
- package/pi-extensions/lib/acp/config.ts +4 -9
- package/pi-extensions/lib/acp/context.ts +17 -0
- package/pi-extensions/lib/acp/event-mapper.ts +236 -17
- package/pi-extensions/lib/acp/model-ids.js +9 -12
- package/pi-extensions/lib/acp/models.ts +46 -57
- package/pi-extensions/lib/acp/tool-surface.ts +34 -6
- package/pi-extensions/lib/entwurf-control-rpc.ts +5 -1
- package/pi-extensions/lib/fresh-call-composition.ts +37 -3
- package/pi-extensions/lib/herdr-fresh-call.ts +3 -1
- package/pi-extensions/lib/meta-mailbox-body.ts +1 -1
- package/pi-extensions/lib/mux-fresh-call.ts +3 -1
- package/pi-extensions/meta-bridge-pi-durable.ts +1 -1
- package/run.sh +62 -120
- package/scripts/check-acp-carrier-augment.ts +3 -21
- package/scripts/check-acp-prompt-lifecycle.ts +24 -3
- package/scripts/check-acp-provider-surface.ts +17 -26
- package/scripts/check-acp-session-reuse.ts +23 -4
- package/scripts/check-acp-stop-reason.ts +22 -3
- package/scripts/check-acp-stream-hooks.ts +24 -3
- package/scripts/check-acp-usage-accounting.ts +53 -24
- package/scripts/check-copilot-receive-arm.ts +19 -2
- package/scripts/check-entwurf-v2-surface.ts +7 -21
- package/scripts/check-fresh-call-dispatch.ts +9 -3
- package/scripts/check-gate-qualification.ts +6 -6
- package/scripts/check-herdr-fresh-call.ts +1 -0
- package/scripts/check-install-surface.ts +6 -0
- package/scripts/check-pi-durable-send.ts +4 -1
- package/scripts/check-probe-ordering.ts +34 -24
- package/scripts/check-release-gate-outcomes.ts +9 -23
- package/scripts/lib/codex-fresh-source-receipts.ts +12 -6
- package/scripts/lib/probe-cli-target.ts +3 -2
- package/scripts/mutants/acp-augment.json +0 -26
- package/scripts/mutants/acp-cortex.json +10 -183
- package/scripts/mutants/acp-foreground-only.json +11 -0
- package/scripts/mutants/acp-launch-namespace.json +3 -1
- package/scripts/mutants/acp-prompt-lifecycle.json +2 -2
- package/scripts/mutants/acp-set-model-readback.json +488 -0
- package/scripts/mutants/agent-guidance.json +2 -2
- package/scripts/mutants/codex-native.json +2 -2
- package/scripts/mutants/control-send-receipt.json +47 -7
- package/scripts/mutants/mux-fresh-call.json +12 -1
- package/scripts/mutants/pack-install.json +4 -4
- package/scripts/mutants/pi-floor.json +8 -10
- package/scripts/mutants/release-gate.json +3 -3
- package/scripts/mutants/v2-surface.json +4 -6
- package/scripts/raw-acp-compaction-measure/probe.ts +8 -2
- package/scripts/smoke-acp-cortex-live.ts +4 -408
- package/scripts/smoke-acp-ordering-probe-live.ts +7 -1
- package/scripts/smoke-acp-session-reuse-live.ts +11 -2
- package/scripts/smoke-acp-v2-send-live.ts +1 -1
- package/scripts/smoke-herdr-raw-install-live.sh +4 -4
- package/scripts/check-acp-cortex.ts +0 -710
package/AGENTS.md
CHANGED
|
@@ -71,7 +71,7 @@ A pi control session and native bridge session are citizens for the same reason:
|
|
|
71
71
|
**Retirement is operator-requested, never autonomous.** A real citizen may be retired only when the operator explicitly requests that target/action, like the separate approval needed for a push. Development, tool exposure, a coordinator role, record-backed attribution or delegated release judgement is not a standing retirement grant. No timer, idle heuristic, roster cleanup or agent initiative substitutes for that request. Preserve request attribution without inventing a self-signed permission boolean or role database. Test-owned lifecycle gates require their own named execution scope; working siblings are never incidental test targets.
|
|
72
72
|
|
|
73
73
|
- Pi owns its native session lifecycle; `birthPiCitizen` attaches `(backend: "pi", nativeSessionId)` to the stable garden id. Socket and env values are record-derived carriers.
|
|
74
|
-
- `entwurf_resume_call {target}` is a separate lifecycle verb for pi, pi-durable and Claude Code targets, not delivery intent. It reopens the same dormant id visibly, submits no prompt, and uses the record as the sole address authority (Pi: the record selects an absolute transcript whose native id must match; its session-header cwd and first `model_change` provider/model feed the launch resolver, with no record/host cwd fallback; Claude Code: record session id and cwd, with no model or permission flag restored; pi-durable: the record's native session and cwd, opened by `entwurf pi-durable --entwurf-adopt` with a closed `{v, gardenId, metaRoot, sourceGeneration}` context and the fixed five-name profile/meta-root projection, a bridge-only launch rather than an operator selector). Dormancy is rail-specific: a dead pi control socket; for pi-durable, a session claim the owner fence can reserve for one child — closed and released, or its holder proven gone — while a claim a live process holds, a reservation awaiting adoption included, refuses without delivery advice; or — for Claude Code — the last validated owner the Entwurf hook armed is proven gone (`classifyMarkerOwner` dead) AND the record, re-read after that verdict, still carries the same non-null `attachIncarnation` (arm revision) the marker copied; an absent, unreadable, mismatched, inconclusive or unbound marker refuses. That guarantees only committed hook attaches: a process holding the session without one (hooks disabled, a record-arm lock timeout or store failure at its start) is invisible to it — a boundary GLG accepted on 2026-10-21. A launch receipt and the observation (same-id socket; for pi-durable a child's adoption of this call's reservation, which is not readiness, liveness or recall; or a NEW live owner — the opened pane's direct child — re-arming the marker with a fresh binding the record carries) are distinct; while a reservation stays unadopted under its live holder a resume refuses on it, nothing clears it automatically, and a child that adopts it becomes its holder; an unobserved window stays visible. The caller is attributed, never authorised by that. Inside herdr pi, pi-durable and Claude Code targets reopen, in a new herdr tab (pi through agent start; pi-durable and Claude Code through one `layout.apply`, the Claude Code observation joining the receiver marker to the pane's direct child herdr reports, or `pane-process-unread` when it reports none — #157 stage 4, two n=1 runs on 2026-11-02: recall unmeasured in the first, a blind recall in the second) launched through the same injected seam by the same exact `HERDR_ENV=1` predicate fresh call reads (#157 G1a; the dated native-Pi n=1 in BASELINE records actual resume/protocol/no-turn/recall on a PATH-supplemented private fixture, not release acceptance; #157 B3's dated pi-durable n=1 there is a pre-final candidate with synthetic callers, and the tmux path is unmeasured); a failure after the tab exists is reported with its recovery rather than as nothing opened, and no rail falls back to the other. No watcher, retry, or supervisor.
|
|
74
|
+
- `entwurf_resume_call {target}` is a separate lifecycle verb for pi, pi-durable and Claude Code targets, not delivery intent. It reopens the same dormant id visibly, submits no prompt, and uses the record as the sole address authority (Pi: the record selects an absolute transcript whose native id must match; its session-header cwd and first `model_change` provider/model feed the launch resolver, with no record/host cwd fallback; Claude Code: record session id and cwd, with no model or permission flag restored; pi-durable: the record's native session and cwd, opened by `entwurf pi-durable --entwurf-adopt` with a closed `{v, gardenId, metaRoot, sourceGeneration}` context and the fixed five-name profile/meta-root projection, a bridge-only launch rather than an operator selector). Dormancy is rail-specific: a dead pi control socket; for pi-durable, a session claim the owner fence can reserve for one child — closed and released, or its holder proven gone — while a claim a live process holds, a reservation awaiting adoption included, refuses without delivery advice; or — for Claude Code — the last validated owner the Entwurf hook armed is proven gone (`classifyMarkerOwner` dead) AND the record, re-read after that verdict, still carries the same non-null `attachIncarnation` (arm revision) the marker copied; an absent, unreadable, mismatched, inconclusive or unbound marker refuses. That guarantees only committed hook attaches: a process holding the session without one (hooks disabled, a record-arm lock timeout or store failure at its start) is invisible to it — a boundary GLG accepted on 2026-10-21. A launch receipt and the observation (same-id socket; for pi-durable a child's adoption of this call's reservation, which is not readiness, liveness or recall; or a NEW live owner — the opened pane's direct child — re-arming the marker with a fresh binding the record carries) are distinct; while a reservation stays unadopted under its live holder a resume refuses on it, nothing clears it automatically, and a child that adopts it becomes its holder; an unobserved window stays visible. The caller is attributed, never authorised by that. Inside herdr pi, pi-durable and Claude Code targets reopen, in a new herdr tab (pi through agent start; pi-durable and Claude Code through one `layout.apply`, the Claude Code observation joining the receiver marker to the pane's direct child herdr reports, or `pane-process-unread` when it reports none — #157 stage 4, two n=1 runs on 2026-11-02: recall unmeasured in the first, a blind recall in the second) launched through the same injected seam by the same exact `HERDR_ENV=1` predicate fresh call reads (#157 G1a; the dated native-Pi n=1 in the BASELINE receipts (docs/baseline-receipts.md) records actual resume/protocol/no-turn/recall on a PATH-supplemented private fixture, not release acceptance; #157 B3's dated pi-durable n=1 there is a pre-final candidate with synthetic callers, and the tmux path is unmeasured); a failure after the tab exists is reported with its recovery rather than as nothing opened, and no rail falls back to the other. No watcher, retry, or supervisor.
|
|
75
75
|
- **control-socket:** live send under per-target lock; dormant rejects.
|
|
76
76
|
- **self-fetch:** active receiver plus deliverable mailbox; no resume authority. Sender/receiver joins are owner-kind specific and must not be generalized across vendors.
|
|
77
77
|
- **native-push:** probe-alive direct injection; no mailbox and no resume authority.
|