@junghanacs/entwurf 0.41.2 → 0.45.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 -0
- package/CHANGELOG.md +159 -0
- package/ENTWURF.json +236 -0
- package/README.md +12 -7
- package/docs/setup-clean-host.md +8 -8
- package/mcp/entwurf-bridge/dist/ENTWURF.json +236 -0
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +27 -188
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/agent-guidance.js +299 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +21 -25
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +15 -11
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +23 -20
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-resume-call.js +18 -16
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/remote-pair-send.js +7 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/meta-bridge-pi-durable.js +23 -45
- package/mcp/entwurf-bridge/src/index.ts +121 -319
- package/package.json +3 -2
- package/pi-extensions/lib/agent-guidance.ts +341 -0
- package/pi-extensions/lib/entwurf-v2-surface.ts +25 -31
- package/pi-extensions/lib/entwurf-v2-visible-resume.ts +15 -16
- package/pi-extensions/lib/mux-fresh-call.ts +23 -26
- package/pi-extensions/lib/mux-resume-call.ts +18 -19
- package/pi-extensions/lib/remote-pair-send.ts +7 -4
- package/pi-extensions/meta-bridge-pi-durable.ts +23 -64
- package/run.sh +9 -0
- package/scripts/build-bridge.sh +10 -0
- package/scripts/check-capability-bundle-reach.ts +86 -0
- package/scripts/check-entwurf-self-address.ts +3 -3
- package/scripts/check-entwurf-v2-surface.ts +94 -98
- package/scripts/check-gate-qualification.ts +9 -7
- package/scripts/check-mux-resume-call.ts +20 -3
- package/scripts/mutants/agent-guidance.json +160 -0
- package/scripts/mutants/bridge-boot-resume.json +6 -8
- package/scripts/mutants/capability-bundle-reach.json +124 -0
- package/scripts/mutants/control-send-receipt.json +21 -4
- package/scripts/mutants/mux-fresh-call.json +14 -3
- package/scripts/mutants/mux-resume-call.json +28 -3
- package/scripts/mutants/pi-durable.json +17 -5
- package/scripts/mutants/remote-pair-send.json +21 -2
- package/scripts/mutants/self-address.json +10 -10
- package/scripts/mutants/v2-surface.json +50 -64
- package/scripts/mutants/v2-visible-resume.json +11 -0
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
{
|
|
6
6
|
"claim": "V2SURF-RESUME-HINT-SCOPE",
|
|
7
7
|
"title": "the dormant capability hint returns to a Pi-only automatic-resume invitation",
|
|
8
|
-
"subject": "
|
|
8
|
+
"subject": "ENTWURF.json",
|
|
9
9
|
"find": [
|
|
10
|
-
"
|
|
11
|
-
"\t\t\t\t\"it submits no prompt. This capability hint is not permission to resume automatically.\""
|
|
10
|
+
"Only on an explicit operator request, use entwurf_resume_call {target} for Pi or Claude Code; it submits no prompt. This capability hint is not permission to resume automatically."
|
|
12
11
|
],
|
|
13
12
|
"replace": [
|
|
14
|
-
"
|
|
13
|
+
"Reopen the citizen with entwurf_resume_call {target} (pi targets only; it runs no turn), then dispatch again."
|
|
15
14
|
],
|
|
16
15
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
17
16
|
"timeoutSeconds": 60,
|
|
@@ -21,12 +20,11 @@
|
|
|
21
20
|
{
|
|
22
21
|
"claim": "V2SURF-MCP-LOCK-DOMAIN",
|
|
23
22
|
"title": "MCP long description reverts to the false \"socket paths take a per-target lock\" claim",
|
|
24
|
-
"subject": "
|
|
23
|
+
"subject": "ENTWURF.json",
|
|
25
24
|
"find": [
|
|
26
|
-
"
|
|
27
|
-
"\t\t\"mailbox and native-push rails are lock-free — deliverability and the adapter probe guard them. mode \" +"
|
|
25
|
+
"LOCK: taken for a control-socket-DOMAIN dispatch. The mailbox and native-push rails are lock-free — deliverability and the adapter probe guard them. mode "
|
|
28
26
|
],
|
|
29
|
-
"replace": ["
|
|
27
|
+
"replace": ["LOCK POLICY: socket paths take a per-target lock; the mailbox path does not. mode "],
|
|
30
28
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
31
29
|
"timeoutSeconds": 60,
|
|
32
30
|
"signature": "[QK:V2SURF-MCP-LOCK-DOMAIN]",
|
|
@@ -57,15 +55,9 @@
|
|
|
57
55
|
{
|
|
58
56
|
"claim": "V2SURF-MODE-SCOPE",
|
|
59
57
|
"title": "the bridge mode param (the one every caller reads, pi included since #125) reverts to \"Delivery mode for a live send\" (false for native-push) (#120 P2: the description was rewritten to stop claiming an interrupt, so the mutation now strips the rail scope from the corrected sentence)",
|
|
60
|
-
"subject": "
|
|
61
|
-
"find": [
|
|
62
|
-
|
|
63
|
-
"\t\t\t\t\t\"The mailbox and native-push plans carry no mode, so it has no effect on those rails.\","
|
|
64
|
-
],
|
|
65
|
-
"replace": [
|
|
66
|
-
"\t\t\t\t\"Delivery mode for a live send: steer (ask the steering queue) or follow_up (ask the follow-up queue). \" +",
|
|
67
|
-
"\t\t\t\t\t\"Both queues are volatile process memory.\","
|
|
68
|
-
],
|
|
58
|
+
"subject": "ENTWURF.json",
|
|
59
|
+
"find": ["Injection style for a CONTROL-SOCKET send only:"],
|
|
60
|
+
"replace": ["Delivery mode for a live send:"],
|
|
69
61
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
70
62
|
"timeoutSeconds": 60,
|
|
71
63
|
"signature": "[QK:V2SURF-MODE-SCOPE]",
|
|
@@ -74,19 +66,11 @@
|
|
|
74
66
|
{
|
|
75
67
|
"claim": "V2SURF-INBOX-SCOPE-HONESTY",
|
|
76
68
|
"title": "entwurf_inbox_read reverts to the false \"drains your own inbox\" access claim (SCOPE paragraph gone)",
|
|
77
|
-
"subject": "
|
|
69
|
+
"subject": "ENTWURF.json",
|
|
78
70
|
"find": [
|
|
79
|
-
"
|
|
80
|
-
"\t\t\"SCOPE — read this literally: the garden id is CALLER-SUPPLIED and is NOT verified against \" +",
|
|
81
|
-
"\t\t\"your own identity (a host with no garden record of its own can call this too). So passing \" +",
|
|
82
|
-
"\t\t\"another citizen's garden id drains THEIR mail and stamps THEIR receipt, and they will never \" +",
|
|
83
|
-
"\t\t\"see those messages. Pass only the id from your own doorbell notice or your own meta-record; \" +",
|
|
84
|
-
"\t\t\"use entwurf_self if you need to confirm which id that is. \" +"
|
|
85
|
-
],
|
|
86
|
-
"replace": [
|
|
87
|
-
"\t\t\"doorbell is only a wake attempt, not a read. An empty inbox mutates nothing. \" +",
|
|
88
|
-
"\t\t\"This tool drains your own meta-bridge inbox and stamps the read receipt on your meta-record. \" +"
|
|
71
|
+
"SCOPE — read this literally: the garden id is CALLER-SUPPLIED and is NOT verified against your own identity"
|
|
89
72
|
],
|
|
73
|
+
"replace": ["This tool drains your own meta-bridge inbox and stamps the read receipt on your meta-record"],
|
|
90
74
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
91
75
|
"timeoutSeconds": 60,
|
|
92
76
|
"signature": "[QK:V2SURF-INBOX-SCOPE-HONESTY]",
|
|
@@ -95,15 +79,12 @@
|
|
|
95
79
|
{
|
|
96
80
|
"claim": "V2SURF-DORMANT-HONESTY",
|
|
97
81
|
"title": "MCP long description advertises owned-outcome as a selectable dormant verb again and drops the reason a dormant target actually returns",
|
|
98
|
-
"subject": "
|
|
82
|
+
"subject": "ENTWURF.json",
|
|
99
83
|
"find": [
|
|
100
|
-
"
|
|
101
|
-
"\t\t\"— same receiver rule as the mailbox, no active drainer means no delivery. \" +",
|
|
102
|
-
"\t\t\"The intent that used to answer there, owned-outcome, resumed it by launching a hidden background child \" +",
|
|
103
|
-
"\t\t\"and was withdrawn under the visible-first rule — re-open the session yourself, then dispatch again. \" +"
|
|
84
|
+
"A dormant socket rejects this delivery verb as dormant-fire-forget-unsupported. owned-outcome was withdrawn. Only on an explicit operator request, entwurf_resume_call may visibly reopen a proven-dormant Pi or Claude Code citizen under the same id, submitting no prompt; that lifecycle is separate from delivery. "
|
|
104
85
|
],
|
|
105
86
|
"replace": [
|
|
106
|
-
"
|
|
87
|
+
"owned-outcome wakes a DORMANT socket-domain citizen by spawn-bg resume ONLY and is never auto-converted. "
|
|
107
88
|
],
|
|
108
89
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
109
90
|
"timeoutSeconds": 60,
|
|
@@ -113,45 +94,35 @@
|
|
|
113
94
|
{
|
|
114
95
|
"claim": "V2SURF-INDETERMINATE-NO-START",
|
|
115
96
|
"title": "the indeterminate hint reverts to a socket that \"answered\" and drops the no-start facts — overclaiming a reply that a permission-refused or timed-out probe never got",
|
|
116
|
-
"subject": "
|
|
97
|
+
"subject": "ENTWURF.json",
|
|
117
98
|
"find": [
|
|
118
|
-
"
|
|
119
|
-
"\t\t\t// The socket probe did not settle, so liveness is UNKNOWN — an unestablished probe",
|
|
120
|
-
"\t\t\t// is not a measured death, and dispatching into it could double-deliver. Say",
|
|
121
|
-
"\t\t\t// \"the PROBE was inconclusive\", never \"the socket answered inconclusively\":",
|
|
122
|
-
"\t\t\t// `indeterminate` also covers a probe that got no answer at all, was refused by",
|
|
123
|
-
"\t\t\t// permissions, or timed out, and \"answered\" claims a reply that may never have",
|
|
124
|
-
"\t\t\t// existed. The wire id is FROZEN and still spells \"-no-spawn\"; it names the rule",
|
|
125
|
-
"\t\t\t// (never dispatch into an indeterminate target), not a capability that still",
|
|
126
|
-
"\t\t\t// exists. So the hint's job is to say plainly what did NOT happen: nothing",
|
|
127
|
-
"\t\t\t// delivered, nothing started.",
|
|
128
|
-
"\t\t\treturn (",
|
|
129
|
-
"\t\t\t\t\"the control-socket probe was inconclusive, so the target's liveness is UNKNOWN — this is not a \" +",
|
|
130
|
-
"\t\t\t\t\"measured death. NOTHING was delivered and NO process was started (the reason id keeps its frozen \" +",
|
|
131
|
-
"\t\t\t\t\"'-no-spawn' wire spelling from an era when one could be; entwurf_v2 starts nothing on any rail). \" +",
|
|
132
|
-
"\t\t\t\t\"Re-run entwurf_peers to re-probe; if it stays indeterminate, check for a stale socket file left at \" +",
|
|
133
|
-
"\t\t\t\t\"that garden id by a session that died without cleaning up.\"",
|
|
134
|
-
"\t\t\t);"
|
|
135
|
-
],
|
|
136
|
-
"replace": [
|
|
137
|
-
"\t\tcase \"indeterminate-no-spawn\":",
|
|
138
|
-
"\t\t\treturn \"the target's control socket answered inconclusively; retry.\";"
|
|
99
|
+
"the control-socket probe was inconclusive, so the target's liveness is UNKNOWN — this is not a measured death. NOTHING was delivered and NO process was started (the reason id keeps its frozen '-no-spawn' wire spelling from an era when one could be; entwurf_v2 starts nothing on any rail). Re-run entwurf_peers to re-probe; if it stays indeterminate, check for a stale socket file left at that garden id by a session that died without cleaning up."
|
|
139
100
|
],
|
|
101
|
+
"replace": ["the target's control socket answered inconclusively; retry."],
|
|
140
102
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
141
103
|
"timeoutSeconds": 60,
|
|
142
104
|
"signature": "[QK:V2SURF-INDETERMINATE-NO-START]",
|
|
143
105
|
"signatureSource": "scripts/check-entwurf-v2-surface.ts"
|
|
144
106
|
},
|
|
107
|
+
{
|
|
108
|
+
"claim": "V2SURF-REJECT-HINTS-FROM-ROOT",
|
|
109
|
+
"title": "the surface stops returning the Root hint for one declared reason, so a native-push caller loses its next step while the Root text itself still looks perfect",
|
|
110
|
+
"subject": "pi-extensions/lib/entwurf-v2-surface.ts",
|
|
111
|
+
"find": ["\t\t\treturn ENTWURF_REJECT_HINTS[\"native-push-probe-indeterminate\"];"],
|
|
112
|
+
"replace": ["\t\t\treturn undefined;"],
|
|
113
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
114
|
+
"timeoutSeconds": 60,
|
|
115
|
+
"signature": "[QK:V2SURF-REJECT-HINTS-FROM-ROOT]",
|
|
116
|
+
"signatureSource": "scripts/check-entwurf-v2-surface.ts"
|
|
117
|
+
},
|
|
145
118
|
{
|
|
146
119
|
"claim": "V2SURF-PEERS-DEAD-ROW",
|
|
147
120
|
"title": "entwurf_peers drops the dead-row sentence, so a dormant citizen is listed with nothing saying it is unreachable",
|
|
148
|
-
"subject": "
|
|
121
|
+
"subject": "ENTWURF.json",
|
|
149
122
|
"find": [
|
|
150
|
-
"
|
|
151
|
-
"\t\t\"currently unreachable by any verb, so listing it grants no action — appearing here is not \" +",
|
|
152
|
-
"\t\t\"an invitation to dispatch. In particular `unsupported` does NOT mean mailbox: it means this backend has no \" +"
|
|
123
|
+
"row. A `dead` socket row is a REPORTED FACT: no entwurf_v2 delivery is available while it is dormant. Listing it grants no action and is not an invitation to dispatch. Only on an explicit operator request, the separate entwurf_resume_call may visibly reopen a proven-dormant Pi or Claude Code citizen under the same id, submitting no prompt. In particular"
|
|
153
124
|
],
|
|
154
|
-
"replace": ["
|
|
125
|
+
"replace": ["row. In particular"],
|
|
155
126
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
156
127
|
"timeoutSeconds": 60,
|
|
157
128
|
"signature": "[QK:V2SURF-PEERS-DEAD-ROW]",
|
|
@@ -160,12 +131,12 @@
|
|
|
160
131
|
{
|
|
161
132
|
"claim": "V2SURF-DESC-FITS-HOST-CAP",
|
|
162
133
|
"title": "the v2 tool description grows back past the host's 2048-char cap — the INTENT contract is silently cut off before the model that must choose an intent ever reads it",
|
|
163
|
-
"subject": "
|
|
134
|
+
"subject": "ENTWURF.json",
|
|
164
135
|
"find": [
|
|
165
|
-
"
|
|
136
|
+
"CANONICAL DELIVERY SURFACE for garden ids: message, reply, or hand off to whoever an id names. The id "
|
|
166
137
|
],
|
|
167
138
|
"replace": [
|
|
168
|
-
"
|
|
139
|
+
"CANONICAL DELIVERY SURFACE for garden ids: message, reply, or hand off to whoever an id names. The id PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING "
|
|
169
140
|
],
|
|
170
141
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
171
142
|
"timeoutSeconds": 60,
|
|
@@ -223,6 +194,21 @@
|
|
|
223
194
|
"timeoutSeconds": 120,
|
|
224
195
|
"signature": "[QK:NATIVE-PUSH-RETRY-BYTE-IDENTITY]",
|
|
225
196
|
"signatureSource": "pi-extensions/lib/entwurf-v2-native-push.test.ts"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"claim": "V2SURF-RECORD-LESS-SOCKET-HINT-FROM-ROOT",
|
|
200
|
+
"title": "the record-less-socket hint returns a hand-kept copy of its text, one byte off the Root segments, instead of composing them with the owner's command: every phrase the 2C cell checks still reads, so only the whole-string comparison against Root can see the drift",
|
|
201
|
+
"subject": "pi-extensions/lib/entwurf-v2-surface.ts",
|
|
202
|
+
"find": [
|
|
203
|
+
"\t\t\treturn `${hint.beforeFreshCutPrescription}${FRESH_CUT_PRESCRIPTION}${hint.afterFreshCutPrescription}`;"
|
|
204
|
+
],
|
|
205
|
+
"replace": [
|
|
206
|
+
"\t\t\treturn `a control socket exists at this garden id but NO meta-record claims it — the record is the sole address authority, so a bare socket is not an addressable citizen. If a pre-record-era resident owns that socket, restart it under the current runtime (session_start births its record); if the store predates the current generation, quiesce and archive it with ${FRESH_CUT_PRESCRIPTION}. A stale/forged socket should be removed.`;"
|
|
207
|
+
],
|
|
208
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
209
|
+
"timeoutSeconds": 60,
|
|
210
|
+
"signature": "[QK:V2SURF-RECORD-LESS-SOCKET-HINT-FROM-ROOT]",
|
|
211
|
+
"signatureSource": "scripts/check-entwurf-v2-surface.ts"
|
|
226
212
|
}
|
|
227
213
|
]
|
|
228
214
|
}
|
|
@@ -491,6 +491,17 @@
|
|
|
491
491
|
"timeoutSeconds": 60,
|
|
492
492
|
"signature": "[QK:V2RESUME-CC-MARKER-BINDING-READ]",
|
|
493
493
|
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"claim": "V2RESUME-REJECT-HINTS-FROM-ROOT",
|
|
497
|
+
"title": "one static rejection hint is re-authored as a code literal instead of the root ENTWURF.json text, so the reader stays exact while the rendered rejection no longer carries it",
|
|
498
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
499
|
+
"find": ["\t\"target-locked\": ENTWURF_RESUME_REJECT_HINTS[\"target-locked\"],"],
|
|
500
|
+
"replace": ["\t\"target-locked\": \"another resume or dispatch holds this citizen's lock\","],
|
|
501
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
502
|
+
"timeoutSeconds": 60,
|
|
503
|
+
"signature": "[QK:V2RESUME-REJECT-HINTS-FROM-ROOT]",
|
|
504
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
494
505
|
}
|
|
495
506
|
]
|
|
496
507
|
}
|