@junghanacs/entwurf 0.45.0 → 0.51.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 +5 -3
- package/BASELINE.md +110 -1
- package/CHANGELOG.md +249 -0
- package/CONTRIBUTING.md +1 -1
- package/ENTWURF-CLI.json +1229 -0
- package/ENTWURF.json +63 -15
- package/FAQ.md +4 -4
- package/README.md +132 -188
- package/VERIFY.md +18 -11
- package/demo/README.md +1 -1
- package/docs/acp-backend-rail.md +1 -1
- package/docs/external-mcp-host.md +4 -4
- package/docs/setup-clean-host.md +94 -22
- package/mcp/entwurf-bridge/dist/ENTWURF.json +63 -15
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +19 -8
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-contract.js +4 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +483 -18
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-dispatch.js +47 -10
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-fresh-call.js +613 -33
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-resume-call.js +497 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-session.js +3 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-resume-call.js +50 -5
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-fresh-preflight.js +7 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-location.js +347 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-owner-fence.js +1132 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-runtime.js +1 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/resume-launch-identity.js +18 -11
- package/mcp/entwurf-bridge/dist/pi-extensions/meta-bridge-pi-durable.js +30 -15
- package/mcp/entwurf-bridge/dist/scripts/herdr-rails.mjs +40 -7
- package/mcp/entwurf-bridge/dist/scripts/meta-bridge-fresh-cut.js +1 -27
- package/mcp/entwurf-bridge/dist/scripts/meta-bridge-prune.js +1 -1
- package/mcp/entwurf-bridge/dist/scripts/meta-facts.js +1 -1
- package/mcp/entwurf-bridge/dist/scripts/peer-facts.js +1 -1
- package/mcp/entwurf-bridge/src/index.ts +28 -8
- package/mcp/entwurf-bridge/tsconfig.build.json +7 -1
- package/native/win32-x64/manifest.json +1 -1
- package/package.json +16 -20
- package/pi/pi-durable/bootstrap.mjs +179 -6
- package/pi/pi-durable/carrier/runtime.js +327 -57
- package/pi/pi-durable/carrier/session-name.js +11 -0
- package/pi/pi-durable/carrier/sessions.js +96 -20
- package/pi/pi-durable/carrier/subagent.js +5 -2
- package/pi/pi-durable/carrier/tui.js +60 -22
- package/pi/pi-durable/overlay/upstream-pin.json +26 -19
- package/pi-extensions/lib/entwurf-v2-contract-schema.ts +73 -69
- package/pi-extensions/lib/entwurf-v2-contract.ts +4 -4
- package/pi-extensions/lib/entwurf-v2-visible-resume.ts +710 -38
- package/pi-extensions/lib/fresh-call-dispatch.ts +64 -12
- package/pi-extensions/lib/herdr-fresh-call.ts +919 -40
- package/pi-extensions/lib/herdr-resume-call.ts +810 -0
- package/pi-extensions/lib/meta-session.ts +13 -8
- package/pi-extensions/lib/mux-resume-call.ts +77 -4
- package/pi-extensions/lib/pi-durable-fresh-preflight.ts +9 -2
- package/pi-extensions/lib/pi-durable-location.ts +446 -0
- package/pi-extensions/lib/pi-durable-owner-fence.ts +1461 -0
- package/pi-extensions/lib/pi-durable-runtime.ts +4 -0
- package/pi-extensions/lib/resume-launch-identity.ts +31 -12
- package/pi-extensions/meta-bridge-pi-durable.ts +30 -16
- package/run.sh +552 -699
- package/scripts/check-claude-launch.ts +341 -0
- package/scripts/check-entwurf-v2-contract.ts +4 -4
- package/scripts/check-entwurf-v2-surface.ts +2 -2
- package/scripts/check-fresh-call-dispatch.ts +70 -9
- package/scripts/check-fresh-cut-gate.sh +23 -9
- package/scripts/check-gate-qualification.ts +19 -14
- package/scripts/check-herdr-activation.ts +301 -23
- package/scripts/check-herdr-fresh-call.ts +161 -25
- package/scripts/check-herdr-plugin-build.ts +173 -1
- package/scripts/check-herdr-plugin.ts +28 -2
- package/scripts/check-herdr-runtime-bootstrap.ts +136 -0
- package/scripts/check-install-surface.ts +1236 -6
- package/scripts/check-meta-doctor-oracle.sh +1 -1
- package/scripts/check-meta-facts.ts +20 -1
- package/scripts/check-mux-resume-call.ts +28 -0
- package/scripts/check-peer-facts.ts +39 -2
- package/scripts/cli-help.mjs +222 -0
- package/scripts/dev-bin.sh +39 -2
- package/scripts/herdr-activation.mjs +28 -6
- package/scripts/herdr-operator-link.mjs +389 -0
- package/scripts/herdr-plugin-activate.mjs +5 -0
- package/scripts/herdr-plugin-deactivate.mjs +18 -5
- package/scripts/herdr-rails.mjs +43 -7
- package/scripts/herdr-runtime.mjs +27 -0
- package/scripts/meta-bridge-fresh-cut.ts +1 -27
- package/scripts/meta-bridge-prune.ts +1 -1
- package/scripts/meta-facts.ts +1 -1
- package/scripts/mutants/agent-guidance.json +4 -4
- package/scripts/mutants/claude-launch.json +142 -0
- package/scripts/mutants/cli-help-source.json +420 -0
- package/scripts/mutants/control-send-receipt.json +1 -1
- package/scripts/mutants/dev-gate-dispatch.json +109 -0
- package/scripts/mutants/fresh-call-dispatch.json +38 -2
- package/scripts/mutants/fresh-cut.json +15 -0
- package/scripts/mutants/herdr-activation.json +128 -0
- package/scripts/mutants/herdr-fresh-call.json +278 -5
- package/scripts/mutants/herdr-operator-link.json +318 -0
- package/scripts/mutants/herdr-plugin-build.json +55 -0
- package/scripts/mutants/herdr-plugin.json +17 -0
- package/scripts/mutants/herdr-resume-call.json +288 -0
- package/scripts/mutants/herdr-runtime-bootstrap.json +48 -0
- package/scripts/mutants/meta-facts.json +15 -0
- package/scripts/mutants/mux-resume-call.json +63 -2
- package/scripts/mutants/pack-install.json +4 -4
- package/scripts/mutants/peer-facts.json +15 -0
- package/scripts/mutants/pi-durable.json +1167 -3
- package/scripts/mutants/pi-floor.json +22 -5
- package/scripts/mutants/source-install.json +35 -0
- package/scripts/mutants/v2-surface.json +2 -2
- package/scripts/mutants/v2-visible-resume.json +255 -6
- package/scripts/peer-facts.ts +1 -1
- package/scripts/smoke-agy-install-state.sh +66 -0
- package/scripts/smoke-meta-prune.sh +23 -0
- package/scripts/smoke-omp-fresh-live.ts +12 -3
- package/scripts/smoke-omp-receive-live.ts +7 -1
- package/scripts/smoke-pi-durable-fresh-live.ts +12 -2
- package/team.json.example +39 -0
|
@@ -47,6 +47,7 @@ export function piDurableLayoutAt(root) {
|
|
|
47
47
|
adapter: path.join(dist, "pi-extensions", "meta-bridge-pi-durable.js"),
|
|
48
48
|
bridgeEntry: path.join(dist, "mcp", "entwurf-bridge", "src", "index.js"),
|
|
49
49
|
deliverability: path.join(dist, "pi-extensions", "lib", "entwurf-deliverability.js"),
|
|
50
|
+
ownerFence: path.join(dist, "pi-extensions", "lib", "pi-durable-owner-fence.js"),
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
53
|
/**
|
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
* must equal `record.nativeSessionId`, an addressable read (#52) rather than a plain targeted one,
|
|
11
11
|
* a recorded ACP provider must resolve its bridge.
|
|
12
12
|
*
|
|
13
|
-
* The domain is pi and claude-code (#147 L2)
|
|
14
|
-
* record when
|
|
15
|
-
* the transcript header (the launch needs its provider/model/cwd). For
|
|
16
|
-
* transcript at all — the vendor owns it, and `claude --resume <id>` needs
|
|
17
|
-
* checks only that the recorded path is an absolute file that still exists.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* The domain is pi and claude-code (#147 L2), and pi-durable (#157 B3). Each owns its transcript
|
|
14
|
+
* and re-attaches to the same record when its native session reopens; this leaf only names that
|
|
15
|
+
* session. For pi it reads the transcript header (the launch needs its provider/model/cwd). For
|
|
16
|
+
* claude-code it reads no transcript at all — the vendor owns it, and `claude --resume <id>` needs
|
|
17
|
+
* nothing from it — and checks only that the recorded path is an absolute file that still exists.
|
|
18
|
+
* For pi-durable it reads nothing beyond the record: the parent's reservation re-reads the record
|
|
19
|
+
* and its location inside its own holds, and the launched child selects its session from the record
|
|
20
|
+
* itself, so this leaf only says WHICH backend the address names. Every other backend is a named
|
|
21
|
+
* refusal: native-push citizens have no resume authority (AGENTS Hard Rule 10).
|
|
20
22
|
*
|
|
21
23
|
* It takes a bare garden id, not a plan: the plan type it used to destructure belonged to
|
|
22
24
|
* the removed transport, and the identity question never needed the rest of it.
|
|
@@ -27,7 +29,7 @@ import { AcpModelNotCuratedError, isCuratedAcpModelId, PROVIDER_ID } from "./acp
|
|
|
27
29
|
import { getEntwurfExplicitExtensions, readSessionIdentity } from "./entwurf-core.js";
|
|
28
30
|
import { readAddressableMetaIdentity } from "./meta-session.js";
|
|
29
31
|
/** The backends with a visible same-id resume. A closed set: nothing outside it is reopened. */
|
|
30
|
-
export const RESUME_BACKENDS = ["pi", "claude-code"];
|
|
32
|
+
export const RESUME_BACKENDS = ["pi", "claude-code", "pi-durable"];
|
|
31
33
|
/**
|
|
32
34
|
* One of the TWO expected refusals on this leaf: the target is a citizen of a backend that has no
|
|
33
35
|
* same-id resume at all. The other is `AcpModelNotCuratedError` (#128, `acp/model-ids.js`).
|
|
@@ -38,8 +40,7 @@ export const RESUME_BACKENDS = ["pi", "claude-code"];
|
|
|
38
40
|
* except by looking. A Claude Code or agy garden id is different in kind: nothing is broken,
|
|
39
41
|
* the operator simply asked a capability boundary to do something it does not cover, and the
|
|
40
42
|
* honest answer is a named refusal rather than an error report about a store that is fine. Since
|
|
41
|
-
* #147 L2 the boundary is `RESUME_BACKENDS`; a Codex, agy, Copilot
|
|
42
|
-
* this refusal.
|
|
43
|
+
* #147 L2 the boundary is `RESUME_BACKENDS`; a Codex, agy, Copilot or OMP garden id is this refusal.
|
|
43
44
|
*
|
|
44
45
|
* It carries a `reason` so the caller matches on a FIELD. Parsing the message string would make
|
|
45
46
|
* the wording load-bearing, and re-reading the record to ask "was it pi?" would read an address
|
|
@@ -50,7 +51,7 @@ export class ResumeBackendUnsupportedError extends Error {
|
|
|
50
51
|
backend;
|
|
51
52
|
constructor(gardenId, backend) {
|
|
52
53
|
super(`resume-launch-identity: ${gardenId} is a ${backend} citizen — same-id resume is a host-adapter relaunch ` +
|
|
53
|
-
`capability, and its domain is ${RESUME_BACKENDS.join("
|
|
54
|
+
`capability, and its domain is ${RESUME_BACKENDS.join(", ")}. ` +
|
|
54
55
|
`This is a capability boundary, not citizen rank.`);
|
|
55
56
|
this.name = "ResumeBackendUnsupportedError";
|
|
56
57
|
this.backend = backend;
|
|
@@ -128,6 +129,12 @@ export function resolveResumeLaunchIdentity(gardenId) {
|
|
|
128
129
|
const record = readAddressableMetaIdentity(gardenId);
|
|
129
130
|
if (record.backend === "claude-code")
|
|
130
131
|
return resolveClaudeCodeLaunchIdentity(gardenId, record);
|
|
132
|
+
if (record.backend === "pi-durable") {
|
|
133
|
+
if (!path.isAbsolute(record.cwd)) {
|
|
134
|
+
throw new Error(`resume-launch-identity: ${gardenId} records a relative cwd ${JSON.stringify(record.cwd)}.`);
|
|
135
|
+
}
|
|
136
|
+
return { backend: "pi-durable", nativeSessionId: record.nativeSessionId, cwd: record.cwd };
|
|
137
|
+
}
|
|
131
138
|
if (record.backend !== "pi") {
|
|
132
139
|
throw new ResumeBackendUnsupportedError(gardenId, record.backend);
|
|
133
140
|
}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* createPiDurableContact({ bridgeEntry })
|
|
11
11
|
* .extension tools-only durable Extension, handed to the overlay's
|
|
12
12
|
* `openDurable({ extensions })` BEFORE the Harness opens
|
|
13
|
-
* .attach(session) once `openDurable` returns:
|
|
13
|
+
* .attach(session) once `openDurable` returns: commit the record's binding and its
|
|
14
|
+
* location evidence (`lib/pi-durable-location.ts`), name this process as
|
|
14
15
|
* sender, spawn the compiled entwurf-bridge as a DIRECT child, then
|
|
15
16
|
* release the tools
|
|
16
17
|
*
|
|
@@ -93,17 +94,21 @@
|
|
|
93
94
|
* refusal.
|
|
94
95
|
*
|
|
95
96
|
* CALLER FRESH (the sixth tool). `entwurf_fresh_call` lets this durable citizen open a sibling, under the
|
|
96
|
-
* bridge's own schema (pinned below, including the `pi-durable` backend itself).
|
|
97
|
-
* beside the tmux pane this host was launched in, which a fresh-opened durable host inherits
|
|
98
|
-
* operator host started outside tmux gets the bridge's named `no-tmux-context` refusal.
|
|
99
|
-
*
|
|
97
|
+
* bridge's own schema (pinned below, including the `pi-durable` backend itself). Outside herdr, the bridge
|
|
98
|
+
* places it beside the tmux pane this host was launched in, which a fresh-opened durable host inherits,
|
|
99
|
+
* and an operator host started outside tmux gets the bridge's named `no-tmux-context` refusal. Inside
|
|
100
|
+
* herdr (`HERDR_ENV=1`, which the bridge child inherits from this host) it requests a new herdr tab
|
|
101
|
+
* instead, for pi, claude-code or pi-durable only; the other backends are refused by name, and nothing
|
|
102
|
+
* falls back to tmux. Exposing the tool is not a caller LIVE proof.
|
|
100
103
|
*
|
|
101
104
|
* CALLER RESUME (the seventh tool, #147 L1). `entwurf_resume_call` lets this durable citizen reopen a
|
|
102
|
-
* DORMANT pi or Claude Code citizen under its own garden id (#147 L2
|
|
103
|
-
* single-`target` schema (pinned below). The bridge decides everything
|
|
104
|
-
* exactly as for any other caller: other backends have no same-id
|
|
105
|
-
*
|
|
106
|
-
*
|
|
105
|
+
* DORMANT pi, pi-durable or Claude Code citizen under its own garden id (#147 L2; pi-durable since
|
|
106
|
+
* #157 B3), under the bridge's own single-`target` schema (pinned below). The bridge decides everything
|
|
107
|
+
* else from the target's record, exactly as for any other caller: other backends have no same-id
|
|
108
|
+
* resume, a session a live process holds is refused, and outside herdr the window opens in the tmux
|
|
109
|
+
* session this host was launched in. Inside herdr a pi, pi-durable or Claude Code target reopens, in a
|
|
110
|
+
* new herdr tab (Claude Code since #157 stage 4). Exposing the tool names no new authority and is not a caller LIVE proof; it never resumes
|
|
111
|
+
* this durable host itself.
|
|
107
112
|
*
|
|
108
113
|
* NOT HERE: crash-safe receive. `entwurf_inbox_read` archives a body before the durable tool
|
|
109
114
|
* result commits, so a crash between the two loses that body to the model; recovery settles the
|
|
@@ -115,7 +120,8 @@ import * as path from "node:path";
|
|
|
115
120
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
116
121
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
117
122
|
import { ENTWURF_TOOL_GUIDANCE } from "./lib/agent-guidance.js";
|
|
118
|
-
import { defaultMetaMailboxDir, defaultMetaReceiversDir, defaultMetaSendersDir, defaultMetaSessionsDir, listAllMetaIdentitiesDir, readAddressableMetaIdentity, readMetaReceiverMarker, readMetaSenderMarker, requireGardenId,
|
|
123
|
+
import { defaultMetaMailboxDir, defaultMetaReceiversDir, defaultMetaSendersDir, defaultMetaSessionsDir, listAllMetaIdentitiesDir, readAddressableMetaIdentity, readMetaReceiverMarker, readMetaSenderMarker, requireGardenId, writeMetaReceiverMarker, writeMetaSenderMarker, } from "./lib/meta-session.js";
|
|
124
|
+
import { commitPiDurableBirth } from "./lib/pi-durable-location.js";
|
|
119
125
|
/** The backend id this contact mints under. */
|
|
120
126
|
export const PI_DURABLE_BACKEND = "pi-durable";
|
|
121
127
|
/**
|
|
@@ -848,9 +854,18 @@ export function createPiDurableContact(options) {
|
|
|
848
854
|
}
|
|
849
855
|
const ownerPid = options.ownerPid ?? process.pid;
|
|
850
856
|
const sendersDir = path.resolve(options.sendersDir ?? defaultMetaSendersDir());
|
|
851
|
-
const
|
|
852
|
-
|
|
853
|
-
|
|
857
|
+
const receiversDir = path.resolve(options.receiversDir ?? defaultMetaReceiversDir());
|
|
858
|
+
// The record and its location evidence, bound by one minted attachIncarnation under the
|
|
859
|
+
// record-arm lock of the receivers root this birth uses. A refusal here fails the birth;
|
|
860
|
+
// there is no unbound fallback. The pair is not one atomic commit: see the leaf's
|
|
861
|
+
// FAILURE STATES for what each failure leaves behind.
|
|
862
|
+
const upsert = commitPiDurableBirth({
|
|
863
|
+
nativeSessionId: id,
|
|
864
|
+
cwd,
|
|
865
|
+
sessionDirectory: session.directory,
|
|
866
|
+
ownerPid,
|
|
867
|
+
sessionsDir: options.sessionsDir ?? defaultMetaSessionsDir(),
|
|
868
|
+
receiversDir,
|
|
854
869
|
});
|
|
855
870
|
const gardenId = upsert.record.gardenId;
|
|
856
871
|
const markerPath = writeMetaSenderMarker({
|
|
@@ -865,7 +880,7 @@ export function createPiDurableContact(options) {
|
|
|
865
880
|
sessionsDir: upsert.dir,
|
|
866
881
|
sendersDir,
|
|
867
882
|
mailboxDir: path.resolve(options.mailboxDir ?? defaultMetaMailboxDir()),
|
|
868
|
-
receiversDir
|
|
883
|
+
receiversDir,
|
|
869
884
|
};
|
|
870
885
|
const client = await connect({
|
|
871
886
|
command: process.execPath,
|
|
@@ -30,30 +30,58 @@
|
|
|
30
30
|
* `--kind` token) stays with the rail that spends it; this leaf carries no argv.
|
|
31
31
|
*/
|
|
32
32
|
/**
|
|
33
|
-
* The
|
|
34
|
-
* that is not evidence of support
|
|
33
|
+
* The backends the herdr rail opens through `tab create` + `agent start --kind`. Herdr's own
|
|
34
|
+
* `--kind` enum is much larger and that is not evidence of support. This set alone keys the
|
|
35
|
+
* agent-start maps (`HERDR_AGENT_KIND`, `HERDR_CANONICAL_EXECUTABLE`): a backend outside it has no
|
|
36
|
+
* herdr kind, and giving it one would start a different program under its name.
|
|
35
37
|
*
|
|
36
38
|
* The JSDoc cast is what keeps the TYPE half of this single source honest. Without it TypeScript
|
|
37
|
-
* infers `readonly string[]` from a `.mjs` file and `
|
|
39
|
+
* infers `readonly string[]` from a `.mjs` file and `HerdrAgentStartBackend` silently widens to
|
|
38
40
|
* `string` — the tuple would still be one source at runtime while the compiler had stopped
|
|
39
41
|
* checking anything. A gate pins both halves.
|
|
40
42
|
*
|
|
41
43
|
* @type {readonly ["pi", "claude-code"]}
|
|
42
44
|
*/
|
|
43
|
-
export const
|
|
45
|
+
export const HERDR_AGENT_START_BACKENDS = Object.freeze(["pi", "claude-code"]);
|
|
46
|
+
/**
|
|
47
|
+
* The backends the herdr rail opens through ONE fixed `layout.apply` request on the caller's own
|
|
48
|
+
* herdr socket (#157 A-L1). pi-durable has no herdr agent kind, so it is launched as the package's
|
|
49
|
+
* own verified `run.sh pi-durable …` argv vector in a new tab — never disguised as `--kind pi`.
|
|
50
|
+
*
|
|
51
|
+
* @type {readonly ["pi-durable"]}
|
|
52
|
+
*/
|
|
53
|
+
export const HERDR_LAYOUT_LAUNCH_BACKENDS = Object.freeze(["pi-durable"]);
|
|
54
|
+
/**
|
|
55
|
+
* Everything `entwurf_fresh_call` actually opens inside herdr: the union of the two launch domains.
|
|
56
|
+
* Admission and refusal read THIS set, so every backend outside it is a named pre-mutation reject
|
|
57
|
+
* and no backend is admitted by one domain while another surface says it is refused.
|
|
58
|
+
*
|
|
59
|
+
* The status pane's RAILS block renders the two domains as separate groups — agent start, then
|
|
60
|
+
* layout — over this aggregate (#157 A-L2). The install narration covers only the integrations it
|
|
61
|
+
* activated, and pi-durable is never one: it has no herdr agent integration to activate.
|
|
62
|
+
*
|
|
63
|
+
* @type {readonly ["pi", "claude-code", "pi-durable"]}
|
|
64
|
+
*/
|
|
65
|
+
export const HERDR_FRESH_CALL_BACKENDS = Object.freeze([
|
|
66
|
+
...HERDR_AGENT_START_BACKENDS,
|
|
67
|
+
...HERDR_LAYOUT_LAUNCH_BACKENDS,
|
|
68
|
+
]);
|
|
44
69
|
/**
|
|
45
70
|
* ONE model string per backend, and it is an example of SYNTAX, never of choice.
|
|
46
71
|
*
|
|
47
72
|
* `[관측: GLG, 날것 PC, 2026-09-17]` "일단 정확한 모델명을 모른다" — after a green install the first
|
|
48
73
|
* thing missing is a call that works, and the two runtimes spell a model differently enough that
|
|
49
74
|
* guessing fails: pi wants a provider-qualified path, Claude Code wants the vendor id alone.
|
|
50
|
-
* That difference is the whole content of this map.
|
|
75
|
+
* That difference is the whole content of this map. pi-durable takes pi's shape — its preflight
|
|
76
|
+
* refuses a model that is not provider-qualified (`pi-durable-model-not-provider-qualified`) — so its
|
|
77
|
+
* example is the same shape string, not a choice of model.
|
|
51
78
|
*
|
|
52
|
-
* @type {Readonly<Record<"pi" | "claude-code", string>>}
|
|
79
|
+
* @type {Readonly<Record<"pi" | "claude-code" | "pi-durable", string>>}
|
|
53
80
|
*/
|
|
54
81
|
export const MODEL_SYNTAX_EXAMPLE = Object.freeze({
|
|
55
82
|
pi: "openai-codex/gpt-5.6-terra",
|
|
56
83
|
"claude-code": "claude-sonnet-5",
|
|
84
|
+
"pi-durable": "openai-codex/gpt-5.6-terra",
|
|
57
85
|
});
|
|
58
86
|
/**
|
|
59
87
|
* How a citizen on each backend is REACHED once it exists, in the operator's words. This is the
|
|
@@ -64,9 +92,14 @@ export const MODEL_SYNTAX_EXAMPLE = Object.freeze({
|
|
|
64
92
|
* citizen pi: the install says green, `pi` starts, and nothing is there. Citizenship is argv-gated
|
|
65
93
|
* on purpose, and that gate is invisible unless something says it out loud.
|
|
66
94
|
*
|
|
67
|
-
*
|
|
95
|
+
* pi-durable's note says what it is NOT here as much as how it is reached: it is not an integration
|
|
96
|
+
* this plugin activates, and herdr has no agent kind for it, so nothing detects it or associates a
|
|
97
|
+
* session with it.
|
|
98
|
+
*
|
|
99
|
+
* @type {Readonly<Record<"pi" | "claude-code" | "pi-durable", string>>}
|
|
68
100
|
*/
|
|
69
101
|
export const RAIL_ENTRY_NOTE = Object.freeze({
|
|
70
102
|
pi: "start it as `pi --entwurf-control` to be a garden citizen — a plain `pi` loads the extension but has no garden id, no control socket and no entwurf tools",
|
|
71
103
|
"claude-code": "nothing to add — an ordinary `claude` picks up the entwurf tools through MCP",
|
|
104
|
+
"pi-durable": "not a Herdr integration this plugin activates — inside Herdr, `entwurf_fresh_call` opens it in a new tab through ONE layout request; Herdr has no agent kind for it, so it is neither detected nor associated with a session, and its peers placement reads unobserved",
|
|
72
105
|
});
|
|
@@ -111,33 +111,7 @@ import { classifyMarkerOwner, defaultMetaMailboxDir, defaultMetaReceiversDir, de
|
|
|
111
111
|
import { resolveNativePushAdapter } from "../pi-extensions/lib/native-push/adapter.js";
|
|
112
112
|
import { probeSocketLiveness } from "../pi-extensions/lib/socket-probe.js";
|
|
113
113
|
function usage(code) {
|
|
114
|
-
console.error(
|
|
115
|
-
"usage: node --experimental-strip-types scripts/meta-bridge-fresh-cut.ts",
|
|
116
|
-
" (dev clone: `./run.sh meta-bridge-fresh-cut` · installed package: `entwurf meta-bridge-fresh-cut`)",
|
|
117
|
-
"",
|
|
118
|
-
" Open a fresh meta-bridge generation: quiesce-check every live surface, then",
|
|
119
|
-
" archive meta-sessions/ + meta-mailbox/ to `<dir>.archive-<timestamp>` siblings,",
|
|
120
|
-
" clear dead sender/receiver markers and dead control sockets, and open empty",
|
|
121
|
-
" live dirs. No migration, no restore: the archive is forensic bytes only.",
|
|
122
|
-
"",
|
|
123
|
-
"store = ENTWURF_META_SESSIONS_DIR || <PI_CODING_AGENT_DIR|~/.pi/agent>/meta-sessions",
|
|
124
|
-
"mailbox = ENTWURF_META_MAILBOX_DIR || <PI_CODING_AGENT_DIR|~/.pi/agent>/meta-mailbox",
|
|
125
|
-
"sockets = ENTWURF_DIR || ~/.pi/entwurf-control",
|
|
126
|
-
"",
|
|
127
|
-
"EXIT CONTRACT (#54) — what already moved, not how bad it was:",
|
|
128
|
-
` ${FRESH_CUT_EXIT.COMPLETE} cut complete: generation archived (or none existed), fresh v3 store open,`,
|
|
129
|
-
" residue cleared. `&& setup` is correct here.",
|
|
130
|
-
` ${FRESH_CUT_EXIT.NO_MOVE} NOTHING MOVED: a live/unprovable surface, an occupied archive destination,`,
|
|
131
|
-
" an unreadable surface, or a first rename that failed. The host is unchanged —",
|
|
132
|
-
" fix the named cause and re-run. Do NOT run setup: the store it refused is still there.",
|
|
133
|
-
` ${FRESH_CUT_EXIT.USAGE} usage.`,
|
|
134
|
-
` ${FRESH_CUT_EXIT.HALF_CUT} CUT TRANSITION INCOMPLETE: at least one archive move happened,`,
|
|
135
|
-
" but the fresh generation is not confirmed open. Inspect, or re-run to finish under a new stamp.",
|
|
136
|
-
` ${FRESH_CUT_EXIT.CLEANUP_INCOMPLETE} CUT COMPLETE, CLEANUP INCOMPLETE: the generation IS archived and the fresh`,
|
|
137
|
-
" generation IS open — install and citizen birth are unblocked, so setup may run —",
|
|
138
|
-
" but marker/socket residue survived. Prefer fixing it and re-running BEFORE setup; after new citizen birth,",
|
|
139
|
-
" remove the named residue manually instead of archiving the new generation with another cut.",
|
|
140
|
-
].join("\n"));
|
|
114
|
+
console.error("meta-bridge-fresh-cut: see `entwurf help meta-bridge-fresh-cut` (from that checkout's root: `./run.sh help meta-bridge-fresh-cut`)");
|
|
141
115
|
process.exit(code);
|
|
142
116
|
}
|
|
143
117
|
/** Denote-style local timestamp for archive dir names. */
|
|
@@ -27,7 +27,7 @@ function shellQuote(s) {
|
|
|
27
27
|
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
28
28
|
}
|
|
29
29
|
function usage(code) {
|
|
30
|
-
console.error("
|
|
30
|
+
console.error("meta-bridge-prune: see `entwurf help meta-bridge-prune` (from that checkout's root: `./run.sh help meta-bridge-prune`)");
|
|
31
31
|
process.exit(code);
|
|
32
32
|
}
|
|
33
33
|
let dirArg;
|
|
@@ -37,7 +37,7 @@ const arg = process.argv[2];
|
|
|
37
37
|
// A dash argv is a flag this command does not have, not a store directory — treating
|
|
38
38
|
// it as a path would answer `--help` with "empty store, exit 0", a silent wrong fact.
|
|
39
39
|
if (process.argv.length > 3 || (arg !== undefined && arg.startsWith("-"))) {
|
|
40
|
-
console.error("
|
|
40
|
+
console.error("meta-facts: see `entwurf help meta-facts` (from that checkout's root: `./run.sh help meta-facts`)");
|
|
41
41
|
process.exit(2);
|
|
42
42
|
}
|
|
43
43
|
let facts;
|
|
@@ -77,7 +77,7 @@ const arg = process.argv[2];
|
|
|
77
77
|
// A dash argv is a flag this command does not have, not a store directory — treating it as
|
|
78
78
|
// a path would answer `--help` with "empty store, exit 0", a silent wrong fact.
|
|
79
79
|
if (process.argv.length > 3 || (arg !== undefined && arg.startsWith("-"))) {
|
|
80
|
-
console.error("
|
|
80
|
+
console.error("peer-facts: see `entwurf help peer-facts` (from that checkout's root: `./run.sh help peer-facts`)");
|
|
81
81
|
process.exit(2);
|
|
82
82
|
}
|
|
83
83
|
const storeDir = arg ?? defaultMetaSessionsDir();
|
|
@@ -31,9 +31,10 @@
|
|
|
31
31
|
* seat, #105; nothing is ever created), optionally at ONE literal requested
|
|
32
32
|
* cwd (cross-repo fresh, #73); returns a LAUNCH receipt only, and the new
|
|
33
33
|
* address arrives later as the sender envelope of the sibling's nonce callback.
|
|
34
|
-
* - entwurf_resume_call — reopen ONE DORMANT pi or Claude Code citizen under its OWN
|
|
35
|
-
* in a visible window; target-only, submits no prompt,
|
|
36
|
-
* receipts stay apart, the caller is attributed but
|
|
34
|
+
* - entwurf_resume_call — reopen ONE DORMANT pi, pi-durable or Claude Code citizen under its OWN
|
|
35
|
+
* garden id in a visible window or herdr tab; target-only, submits no prompt,
|
|
36
|
+
* LAUNCH and OBSERVATION receipts stay apart, the caller is attributed but
|
|
37
|
+
* grants nothing.
|
|
37
38
|
* - entwurf_retire_call — one operator-requested target, one retirement attempt; actor is not
|
|
38
39
|
* permission, and action / append-record / lock-release receipts stay separate.
|
|
39
40
|
* - entwurf_callback — ZERO-ARGUMENT fresh-sibling callback. Reads ENTWURF_CALLBACK_TARGET +
|
|
@@ -90,7 +91,11 @@ import {
|
|
|
90
91
|
type VisibleResumeDeps,
|
|
91
92
|
visibleResume,
|
|
92
93
|
} from "../../../pi-extensions/lib/entwurf-v2-visible-resume.ts";
|
|
93
|
-
import {
|
|
94
|
+
import {
|
|
95
|
+
dispatchFreshCall,
|
|
96
|
+
dispatchResumeLaunch,
|
|
97
|
+
renderDispatchedFreshCall,
|
|
98
|
+
} from "../../../pi-extensions/lib/fresh-call-dispatch.ts";
|
|
94
99
|
import {
|
|
95
100
|
type CodexRequestSender,
|
|
96
101
|
probeNativeSenderAlive,
|
|
@@ -111,7 +116,11 @@ import {
|
|
|
111
116
|
readMetaSenderMarker,
|
|
112
117
|
requireBackend,
|
|
113
118
|
} from "../../../pi-extensions/lib/meta-session.ts";
|
|
114
|
-
import {
|
|
119
|
+
import {
|
|
120
|
+
RESUME_CALL_REJECT_HINT,
|
|
121
|
+
resumeCall,
|
|
122
|
+
resumePiDurableCall,
|
|
123
|
+
} from "../../../pi-extensions/lib/mux-resume-call.ts";
|
|
115
124
|
import { registerNativeConversation } from "../../../pi-extensions/lib/native-push/register.ts";
|
|
116
125
|
import {
|
|
117
126
|
makeLocalTraceFact,
|
|
@@ -750,12 +759,23 @@ server.tool(
|
|
|
750
759
|
// halves, so it is where the mux launcher is handed to the v2 composition. `entwurf-v2-visible-
|
|
751
760
|
// resume` cannot open a window on its own and `mux-resume-call` cannot read a record — that is
|
|
752
761
|
// the import fence in docs/mux-launch-rail.md §11, expressed as a function argument.
|
|
753
|
-
|
|
754
|
-
|
|
762
|
+
//
|
|
763
|
+
// #157 G1a: this surface does NOT choose the rail. It hands the fixed tmux mapping below to the
|
|
764
|
+
// shared rail root (`fresh-call-dispatch`), which reads the same capability fact fresh_call reads
|
|
765
|
+
// and, inside herdr, launches the herdr resume instead — never calling this mapping there.
|
|
766
|
+
//
|
|
767
|
+
// #157 B3: a pi-durable resume is the same leaf's second entry, which also carries the fixed adopt
|
|
768
|
+
// projection the v2 side built from its reservation; no other backend can hand it one.
|
|
769
|
+
const tmuxResumeLaunch: VisibleResumeDeps["launch"] = (input) => {
|
|
770
|
+
const launched =
|
|
771
|
+
input.backend === "pi-durable"
|
|
772
|
+
? resumePiDurableCall({ cwd: input.cwd, runtimeArgs: input.runtimeArgs, adoptEnv: input.piDurableAdoptEnv })
|
|
773
|
+
: resumeCall({ backend: input.backend, cwd: input.cwd, runtimeArgs: input.runtimeArgs });
|
|
755
774
|
return launched.ok
|
|
756
|
-
? { ok: true, handle: launched.receipt }
|
|
775
|
+
? { ok: true, handle: { rail: "tmux", ...launched.receipt } }
|
|
757
776
|
: { ok: false, reason: launched.reason, hint: RESUME_CALL_REJECT_HINT[launched.reason] };
|
|
758
777
|
};
|
|
778
|
+
const visibleResumeLaunch: VisibleResumeDeps["launch"] = (input) => dispatchResumeLaunch(input, tmuxResumeLaunch);
|
|
759
779
|
|
|
760
780
|
server.tool(
|
|
761
781
|
"entwurf_resume_call",
|
|
@@ -153,6 +153,11 @@
|
|
|
153
153
|
// standalone compiled adapter consumer proof. Its helper is not TS: the
|
|
154
154
|
// build script byte-copies pi-extensions/lib/cc-retire-pidfd.py beside the emitted adapter.
|
|
155
155
|
// Its repo imports (meta-session, entwurf-v2-visible-resume) are ALREADY emitted for the bridge.
|
|
156
|
+
// WHY pi-durable-owner-fence rides THIS build (#157 B3): the packaged durable bootstrap builds the owner
|
|
157
|
+
// fence from THIS closure and hands it to every owned open, so an installed Entwurf never imports checkout
|
|
158
|
+
// TypeScript. Nothing in the bridge graph imports it, so it needs its own entry. Its only repo import is
|
|
159
|
+
// meta-session.ts, ALREADY emitted for the bridge: ONE leaf JS, ZERO new deps. It is never in index.ts's boot
|
|
160
|
+
// closure.
|
|
156
161
|
"include": [
|
|
157
162
|
"./src/index.ts",
|
|
158
163
|
"../../protocol.js",
|
|
@@ -177,6 +182,7 @@
|
|
|
177
182
|
"../../pi-extensions/meta-bridge-pi-durable.ts",
|
|
178
183
|
"../../pi-extensions/lib/cc-retire-request.ts",
|
|
179
184
|
// Keep the standalone Pi adapter consumer entry; the public factory also reaches it now.
|
|
180
|
-
"../../pi-extensions/lib/pi-retire-request.ts"
|
|
185
|
+
"../../pi-extensions/lib/pi-retire-request.ts",
|
|
186
|
+
"../../pi-extensions/lib/pi-durable-owner-fence.ts"
|
|
181
187
|
]
|
|
182
188
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@junghanacs/entwurf",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Visible sibling sessions across independent agent harnesses: launch in Herdr or tmux, retire on request
|
|
3
|
+
"version": "0.51.0",
|
|
4
|
+
"description": "Visible sibling sessions across independent agent harnesses: launch in Herdr or tmux, retire on request, visibly reopen supported sessions under the same id, and deliver messages by garden id; native bridges and Claude/Cortex ACP adapters.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Junghan Kim",
|
|
@@ -40,6 +40,8 @@
|
|
|
40
40
|
"type": "module",
|
|
41
41
|
"files": [
|
|
42
42
|
"ENTWURF.json",
|
|
43
|
+
"ENTWURF-CLI.json",
|
|
44
|
+
"team.json.example",
|
|
43
45
|
"protocol.js",
|
|
44
46
|
"pi-extensions/",
|
|
45
47
|
"native/win32-x64/",
|
|
@@ -103,23 +105,21 @@
|
|
|
103
105
|
"@agentclientprotocol/claude-agent-acp": "0.90.0",
|
|
104
106
|
"@agentclientprotocol/sdk": "1.8.0",
|
|
105
107
|
"@anthropic-ai/sdk": "0.100.1",
|
|
106
|
-
"@earendil-works/chord": "1.
|
|
107
|
-
"@earendil-works/pi-agent-core": "1.
|
|
108
|
-
"@earendil-works/pi-ai": "1.
|
|
109
|
-
"@earendil-works/pi-codemode": "1.
|
|
110
|
-
"@earendil-works/pi-coding-agent": "1.
|
|
111
|
-
"@earendil-works/pi-durable": "1.
|
|
112
|
-
"@earendil-works/pi-mcp": "1.
|
|
113
|
-
"@earendil-works/pi-
|
|
114
|
-
"@earendil-works/pi-
|
|
108
|
+
"@earendil-works/chord": "1.5.0",
|
|
109
|
+
"@earendil-works/pi-agent-core": "1.5.0",
|
|
110
|
+
"@earendil-works/pi-ai": "1.5.0",
|
|
111
|
+
"@earendil-works/pi-codemode": "1.5.0",
|
|
112
|
+
"@earendil-works/pi-coding-agent": "1.5.0",
|
|
113
|
+
"@earendil-works/pi-durable": "1.5.0",
|
|
114
|
+
"@earendil-works/pi-mcp": "1.5.0",
|
|
115
|
+
"@earendil-works/pi-schema": "1.5.0",
|
|
116
|
+
"@earendil-works/pi-telemetry": "1.5.0",
|
|
117
|
+
"@earendil-works/pi-tui": "1.5.0",
|
|
115
118
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
116
119
|
"proper-lockfile": "4.1.2",
|
|
117
120
|
"smol-toml": "^1.8.0",
|
|
118
121
|
"zod": "^3.25.0 || ^4.0.0"
|
|
119
122
|
},
|
|
120
|
-
"peerDependencies": {
|
|
121
|
-
"typebox": "*"
|
|
122
|
-
},
|
|
123
123
|
"devDependencies": {
|
|
124
124
|
"@biomejs/biome": "^2.4.13",
|
|
125
125
|
"@types/node": "^24.3.0",
|
|
@@ -159,6 +159,7 @@
|
|
|
159
159
|
"check-copilot-statusline": "./run.sh check-copilot-statusline",
|
|
160
160
|
"check-copilot-launch": "./run.sh check-copilot-launch",
|
|
161
161
|
"check-pi-launch": "./run.sh check-pi-launch",
|
|
162
|
+
"check-claude-launch": "./run.sh check-claude-launch",
|
|
162
163
|
"smoke-copilot-statusline-state": "./run.sh smoke-copilot-statusline-state",
|
|
163
164
|
"smoke-copilot-mcp-state": "./run.sh smoke-copilot-mcp-state",
|
|
164
165
|
"smoke-omp-bridge-state": "./run.sh smoke-omp-bridge-state",
|
|
@@ -199,7 +200,7 @@
|
|
|
199
200
|
"check:toolchain": "pnpm lint && pnpm typecheck",
|
|
200
201
|
"check:vitest": "./run.sh check-mux-fresh-call && ./run.sh check-acp-sdk-surface && ./run.sh check-pi-queue-oracle && ./run.sh check-tests-beside-behavior && ./run.sh check-remote-pair-installed-audit && ./run.sh check-chain-terminus-publication",
|
|
201
202
|
"check:contracts": "./run.sh check-demo-reproducibility && ./run.sh check-shell-quote && ./run.sh check-entwurf-session-identity && ./run.sh check-meta-session && ./run.sh check-meta-v3-record && ./run.sh check-mailbox-receipt-state && ./run.sh check-entwurf-capabilities && ./run.sh check-harness-admission-parity && ./run.sh check-capability-bundle-reach && ./run.sh check-meta-mailbox-state-write && ./run.sh check-meta-receiver-marker && ./run.sh check-meta-capability-source && ./run.sh check-model-lock && ./run.sh check-dep-versions && ./run.sh check-node-floor-coherence && ./run.sh check-claude-floor-coherence && ./run.sh check-copilot-statusline && ./run.sh check-pi-import-surface && ./run.sh check-env-namespace && ./run.sh check-pi-runtime-version && ./run.sh check-pi-preflight && ./run.sh check-project-trust-handler && ./run.sh check-entwurf-v2-contract && ./run.sh check-entwurf-v2-send && ./run.sh check-entwurf-v2-runner && ./run.sh check-control-send-receipt && ./run.sh check-control-retire && ./run.sh check-pi-retire-request && ./run.sh check-cc-retire-pidfd && ./run.sh check-cc-retire-request && ./run.sh check-retirement-event && ./run.sh check-entwurf-v2-retire && ./run.sh check-compaction-send-guard && ./run.sh check-entwurf-resume-args && ./run.sh check-entwurf-v2-native-push && ./run.sh check-entwurf-v2-production && ./run.sh check-entwurf-v2-surface && ./run.sh check-entwurf-bridge-pi-free && ./run.sh check-resume-launch-identity && ./run.sh check-mux-placement && ./run.sh check-mux-launch && ./run.sh check-mux-resume-call && ./run.sh check-mux-parent-artifact && ./run.sh check-mux-launcher-fence && ./run.sh check-entwurf-v2-visible-resume && ./run.sh check-control-socket-path && ./run.sh check-win32-preview && ./run.sh check-pack-win32-carrier && ./run.sh check-meta-listing && ./run.sh check-entwurf-fact-provider && ./run.sh check-herdr-placement && ./run.sh check-herdr-fresh-call && ./run.sh check-herdr-supply && ./run.sh check-fresh-call-dispatch && ./run.sh check-fresh-call-provider && ./run.sh check-entwurf-peers-surface && ./run.sh check-entwurf-self-address && ./run.sh check-entwurf-deliverability && ./run.sh check-native-push-adapter && ./run.sh check-native-push-register && ./run.sh check-native-push-paused && ./run.sh check-auth-boundary && ./run.sh check-acp-overlay && ./run.sh check-acp-tool-surface && ./run.sh check-acp-event-mapper && ./run.sh check-acp-prompt-builder && ./run.sh check-acp-config && ./run.sh check-acp-session-store && ./run.sh check-acp-carrier-augment && ./run.sh check-acp-foreground-only && ./run.sh check-acp-set-model-readback && ./run.sh check-acp-vendor-rejection && ./run.sh check-codex-sender-identity && ./run.sh check-codex-native-push && ./run.sh check-agent-guidance-beside && ./run.sh check-pi-durable-beside && ./run.sh check-pi-durable-carrier && ./run.sh check-pi-durable-native-module && ./run.sh check-remote-pair-beside",
|
|
202
|
-
"check:hermetic": "./run.sh check-bridge-delivery && ./run.sh smoke-pi-attach && ./run.sh check-fresh-cut-gate && ./run.sh check-hook-launch-topology && ./run.sh check-meta-hook-session-switch && ./run.sh check-copilot-birth-hook && ./run.sh check-copilot-receive-arm && ./run.sh check-copilot-launch && ./run.sh check-pi-launch && ./run.sh check-codex-app-server-launch && ./run.sh check-meta-identity-consumers && ./run.sh check-socket-probe && ./run.sh smoke-meta-honesty && ./run.sh check-meta-doctor-oracle && ./run.sh check-agy-permission-matrix && ./run.sh smoke-agy-statusline-state && ./run.sh smoke-copilot-statusline-state && ./run.sh smoke-copilot-mcp-state && ./run.sh smoke-omp-bridge-state && ./run.sh smoke-omp-mcp-state && ./run.sh smoke-omp-receive-state && ./run.sh check-omp-birth-hook && ./run.sh check-omp-receive-arm && ./run.sh check-omp-fresh-preflight && ./run.sh smoke-agy-hooks-state && ./run.sh smoke-pi-provider-state && ./run.sh smoke-user-scope-citizen && ./run.sh smoke-meta-prune && ./run.sh smoke-meta-keyset-guard && ./run.sh check-meta-manifest-schema && ./run.sh check-entwurf-control-rpc && ./run.sh check-entwurf-bridge-boot && ./run.sh check-probe-bridge-command && ./run.sh check-meta-facts && ./run.sh check-peer-facts && ./run.sh check-herdr-plugin && ./run.sh check-herdr-plugin-profile && ./run.sh check-herdr-plugin-build && ./run.sh check-herdr-runtime-bootstrap && ./run.sh check-herdr-activation && ./run.sh check-agy-sender-identity && ./run.sh check-acp-provider-surface && ./run.sh check-acp-stop-reason && ./run.sh check-acp-prompt-lifecycle && ./run.sh check-acp-usage-accounting && ./run.sh check-acp-launch-namespace && ./run.sh check-acp-stream-hooks && ./run.sh check-acp-backend-preflight && ./run.sh check-acp-session-reuse && ./run.sh check-typing-call-fence && ./run.sh check-gate-manifests && ./run.sh check-release-gate-outcomes && ./run.sh check-probe-ordering && ./run.sh check-probe-cli-shim && ./run.sh check-acp-cortex && ./run.sh check-codex-bridge-identity && ./run.sh check-pi-bridge-sender && ./run.sh check-pi-mcp-register && ./run.sh check-pi-mcp-bridge && ./run.sh check-codex-birth-hook && ./run.sh smoke-codex-config-state && ./run.sh smoke-codex-birth && ./run.sh check-herdr-sandbox",
|
|
203
|
+
"check:hermetic": "./run.sh check-bridge-delivery && ./run.sh smoke-pi-attach && ./run.sh check-fresh-cut-gate && ./run.sh check-hook-launch-topology && ./run.sh check-meta-hook-session-switch && ./run.sh check-copilot-birth-hook && ./run.sh check-copilot-receive-arm && ./run.sh check-copilot-launch && ./run.sh check-pi-launch && ./run.sh check-claude-launch && ./run.sh check-codex-app-server-launch && ./run.sh check-meta-identity-consumers && ./run.sh check-socket-probe && ./run.sh smoke-meta-honesty && ./run.sh check-meta-doctor-oracle && ./run.sh check-agy-permission-matrix && ./run.sh smoke-agy-statusline-state && ./run.sh smoke-copilot-statusline-state && ./run.sh smoke-copilot-mcp-state && ./run.sh smoke-omp-bridge-state && ./run.sh smoke-omp-mcp-state && ./run.sh smoke-omp-receive-state && ./run.sh check-omp-birth-hook && ./run.sh check-omp-receive-arm && ./run.sh check-omp-fresh-preflight && ./run.sh smoke-agy-hooks-state && ./run.sh smoke-pi-provider-state && ./run.sh smoke-user-scope-citizen && ./run.sh smoke-meta-prune && ./run.sh smoke-meta-keyset-guard && ./run.sh check-meta-manifest-schema && ./run.sh check-entwurf-control-rpc && ./run.sh check-entwurf-bridge-boot && ./run.sh check-probe-bridge-command && ./run.sh check-meta-facts && ./run.sh check-peer-facts && ./run.sh check-herdr-plugin && ./run.sh check-herdr-plugin-profile && ./run.sh check-herdr-plugin-build && ./run.sh check-herdr-runtime-bootstrap && ./run.sh check-herdr-activation && ./run.sh check-agy-sender-identity && ./run.sh check-acp-provider-surface && ./run.sh check-acp-stop-reason && ./run.sh check-acp-prompt-lifecycle && ./run.sh check-acp-usage-accounting && ./run.sh check-acp-launch-namespace && ./run.sh check-acp-stream-hooks && ./run.sh check-acp-backend-preflight && ./run.sh check-acp-session-reuse && ./run.sh check-typing-call-fence && ./run.sh check-gate-manifests && ./run.sh check-release-gate-outcomes && ./run.sh check-probe-ordering && ./run.sh check-probe-cli-shim && ./run.sh check-acp-cortex && ./run.sh check-codex-bridge-identity && ./run.sh check-pi-bridge-sender && ./run.sh check-pi-mcp-register && ./run.sh check-pi-mcp-bridge && ./run.sh check-codex-birth-hook && ./run.sh smoke-codex-config-state && ./run.sh smoke-codex-birth && ./run.sh check-herdr-sandbox",
|
|
203
204
|
"check:package": "./run.sh check-install-surface && ./run.sh smoke-meta-install-state && ./run.sh smoke-agy-install-state && ./run.sh smoke-setup-verdict && ./run.sh check-pack-pin-matcher && ./run.sh check-pack-argv-matcher && ./run.sh check-pack-consumer-roots && ./run.sh check-package-source-routing && ./run.sh check-install-preflight && ./run.sh check-pack"
|
|
204
205
|
},
|
|
205
206
|
"pi": {
|
|
@@ -217,10 +218,5 @@
|
|
|
217
218
|
"entwurf-agy-statusline": "./scripts/agy-statusline.sh",
|
|
218
219
|
"entwurf-agy-imprint": "./scripts/agy-imprint.sh",
|
|
219
220
|
"entwurf-copilot-statusline": "./scripts/copilot-statusline.sh"
|
|
220
|
-
},
|
|
221
|
-
"peerDependenciesMeta": {
|
|
222
|
-
"typebox": {
|
|
223
|
-
"optional": true
|
|
224
|
-
}
|
|
225
221
|
}
|
|
226
222
|
}
|