agent-embassy 1.0.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/CHANGELOG.md +61 -0
- package/CONTRIBUTING.md +122 -0
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/README.zh-CN.md +185 -0
- package/SECURITY.md +224 -0
- package/assets/live-dashboard/app.css +1610 -0
- package/assets/mark-seal.svg +7 -0
- package/assets/mark.svg +7 -0
- package/assets/social-preview.png +0 -0
- package/assets/vendor/react/LICENSE +21 -0
- package/assets/vendor/react/react-dom.production.min.js +267 -0
- package/assets/vendor/react/react.production.min.js +31 -0
- package/dist/src/errors.d.ts +5 -0
- package/dist/src/errors.js +11 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/gateway/claude-compatibility-scratch.d.ts +18 -0
- package/dist/src/gateway/claude-compatibility-scratch.js +158 -0
- package/dist/src/gateway/claude-compatibility-scratch.js.map +1 -0
- package/dist/src/gateway/claude-helper-client.d.ts +43 -0
- package/dist/src/gateway/claude-helper-client.js +212 -0
- package/dist/src/gateway/claude-helper-client.js.map +1 -0
- package/dist/src/gateway/claude-helper-protocol.d.ts +172 -0
- package/dist/src/gateway/claude-helper-protocol.js +373 -0
- package/dist/src/gateway/claude-helper-protocol.js.map +1 -0
- package/dist/src/gateway/claude-helper-supervisor.d.ts +74 -0
- package/dist/src/gateway/claude-helper-supervisor.js +497 -0
- package/dist/src/gateway/claude-helper-supervisor.js.map +1 -0
- package/dist/src/gateway/claude-helper.d.ts +1 -0
- package/dist/src/gateway/claude-helper.js +269 -0
- package/dist/src/gateway/claude-helper.js.map +1 -0
- package/dist/src/gateway/claude-peer.d.ts +273 -0
- package/dist/src/gateway/claude-peer.js +2359 -0
- package/dist/src/gateway/claude-peer.js.map +1 -0
- package/dist/src/gateway/claude-runtime.d.ts +40 -0
- package/dist/src/gateway/claude-runtime.js +302 -0
- package/dist/src/gateway/claude-runtime.js.map +1 -0
- package/dist/src/gateway/cli-copy.d.ts +8 -0
- package/dist/src/gateway/cli-copy.en.d.ts +13 -0
- package/dist/src/gateway/cli-copy.en.js +43 -0
- package/dist/src/gateway/cli-copy.en.js.map +1 -0
- package/dist/src/gateway/cli-copy.js +19 -0
- package/dist/src/gateway/cli-copy.js.map +1 -0
- package/dist/src/gateway/cli-copy.zh-CN.d.ts +13 -0
- package/dist/src/gateway/cli-copy.zh-CN.js +43 -0
- package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -0
- package/dist/src/gateway/cli.d.ts +44 -0
- package/dist/src/gateway/cli.js +969 -0
- package/dist/src/gateway/cli.js.map +1 -0
- package/dist/src/gateway/codex-app-server.d.ts +310 -0
- package/dist/src/gateway/codex-app-server.js +1746 -0
- package/dist/src/gateway/codex-app-server.js.map +1 -0
- package/dist/src/gateway/codex-local-transport.d.ts +81 -0
- package/dist/src/gateway/codex-local-transport.js +617 -0
- package/dist/src/gateway/codex-local-transport.js.map +1 -0
- package/dist/src/gateway/codex-registration-generation.d.ts +5 -0
- package/dist/src/gateway/codex-registration-generation.js +19 -0
- package/dist/src/gateway/codex-registration-generation.js.map +1 -0
- package/dist/src/gateway/codex-registration-succession.d.ts +209 -0
- package/dist/src/gateway/codex-registration-succession.js +588 -0
- package/dist/src/gateway/codex-registration-succession.js.map +1 -0
- package/dist/src/gateway/compatibility.d.ts +70 -0
- package/dist/src/gateway/compatibility.js +252 -0
- package/dist/src/gateway/compatibility.js.map +1 -0
- package/dist/src/gateway/config.d.ts +24 -0
- package/dist/src/gateway/config.js +130 -0
- package/dist/src/gateway/config.js.map +1 -0
- package/dist/src/gateway/control.d.ts +308 -0
- package/dist/src/gateway/control.js +1573 -0
- package/dist/src/gateway/control.js.map +1 -0
- package/dist/src/gateway/dashboard-copy.d.ts +7 -0
- package/dist/src/gateway/dashboard-copy.en.d.ts +506 -0
- package/dist/src/gateway/dashboard-copy.en.js +507 -0
- package/dist/src/gateway/dashboard-copy.en.js.map +1 -0
- package/dist/src/gateway/dashboard-copy.js +516 -0
- package/dist/src/gateway/dashboard-copy.js.map +1 -0
- package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +506 -0
- package/dist/src/gateway/dashboard-copy.zh-CN.js +507 -0
- package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -0
- package/dist/src/gateway/dashboard-model.d.ts +207 -0
- package/dist/src/gateway/dashboard-model.js +720 -0
- package/dist/src/gateway/dashboard-model.js.map +1 -0
- package/dist/src/gateway/dashboard.d.ts +26 -0
- package/dist/src/gateway/dashboard.js +941 -0
- package/dist/src/gateway/dashboard.js.map +1 -0
- package/dist/src/gateway/delivery-machine.d.ts +235 -0
- package/dist/src/gateway/delivery-machine.js +540 -0
- package/dist/src/gateway/delivery-machine.js.map +1 -0
- package/dist/src/gateway/instance-lease.d.ts +21 -0
- package/dist/src/gateway/instance-lease.js +549 -0
- package/dist/src/gateway/instance-lease.js.map +1 -0
- package/dist/src/gateway/live-dashboard-app/app.js +2914 -0
- package/dist/src/gateway/live-dashboard-assets.d.ts +10 -0
- package/dist/src/gateway/live-dashboard-assets.js +73 -0
- package/dist/src/gateway/live-dashboard-assets.js.map +1 -0
- package/dist/src/gateway/live-dashboard-bootstrap.d.ts +36 -0
- package/dist/src/gateway/live-dashboard-bootstrap.js +176 -0
- package/dist/src/gateway/live-dashboard-bootstrap.js.map +1 -0
- package/dist/src/gateway/live-dashboard-command.d.ts +54 -0
- package/dist/src/gateway/live-dashboard-command.js +324 -0
- package/dist/src/gateway/live-dashboard-command.js.map +1 -0
- package/dist/src/gateway/live-dashboard-http.d.ts +41 -0
- package/dist/src/gateway/live-dashboard-http.js +445 -0
- package/dist/src/gateway/live-dashboard-http.js.map +1 -0
- package/dist/src/gateway/live-dashboard-protocol.d.ts +38 -0
- package/dist/src/gateway/live-dashboard-protocol.js +156 -0
- package/dist/src/gateway/live-dashboard-protocol.js.map +1 -0
- package/dist/src/gateway/live-dashboard-server.d.ts +33 -0
- package/dist/src/gateway/live-dashboard-server.js +130 -0
- package/dist/src/gateway/live-dashboard-server.js.map +1 -0
- package/dist/src/gateway/live-dashboard-stream.d.ts +46 -0
- package/dist/src/gateway/live-dashboard-stream.js +233 -0
- package/dist/src/gateway/live-dashboard-stream.js.map +1 -0
- package/dist/src/gateway/live-dashboard.d.ts +31 -0
- package/dist/src/gateway/live-dashboard.js +190 -0
- package/dist/src/gateway/live-dashboard.js.map +1 -0
- package/dist/src/gateway/locale.d.ts +4 -0
- package/dist/src/gateway/locale.js +10 -0
- package/dist/src/gateway/locale.js.map +1 -0
- package/dist/src/gateway/progress-watch-machine.d.ts +97 -0
- package/dist/src/gateway/progress-watch-machine.js +172 -0
- package/dist/src/gateway/progress-watch-machine.js.map +1 -0
- package/dist/src/gateway/providers.d.ts +287 -0
- package/dist/src/gateway/providers.js +2451 -0
- package/dist/src/gateway/providers.js.map +1 -0
- package/dist/src/gateway/server.d.ts +57 -0
- package/dist/src/gateway/server.js +264 -0
- package/dist/src/gateway/server.js.map +1 -0
- package/dist/src/gateway/service.d.ts +449 -0
- package/dist/src/gateway/service.js +4831 -0
- package/dist/src/gateway/service.js.map +1 -0
- package/dist/src/gateway/store.d.ts +340 -0
- package/dist/src/gateway/store.js +4047 -0
- package/dist/src/gateway/store.js.map +1 -0
- package/dist/src/gateway/types.d.ts +514 -0
- package/dist/src/gateway/types.js +414 -0
- package/dist/src/gateway/types.js.map +1 -0
- package/dist/src/mutex.d.ts +4 -0
- package/dist/src/mutex.js +23 -0
- package/dist/src/mutex.js.map +1 -0
- package/docs/DESIGN.md +134 -0
- package/docs/GATEWAY-ARCHITECTURE.md +858 -0
- package/package.json +80 -0
- package/skills/embassy-peer/SKILL.md +198 -0
- package/skills/embassy-peer/agents/openai.yaml +4 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { BridgeError } from "../errors.js";
|
|
4
|
+
import { assertClaudeNativeHelperIpcSize, CLAUDE_NATIVE_HELPER_MAX_REQUESTS, CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION, isClaudeNativeHelperParentMessage, } from "./claude-helper-protocol.js";
|
|
5
|
+
import { createLocalClaudeGatewayProvider, } from "./providers.js";
|
|
6
|
+
function sendChildMessage(value) {
|
|
7
|
+
assertClaudeNativeHelperIpcSize(value);
|
|
8
|
+
if (process.send === undefined || !process.connected) {
|
|
9
|
+
return Promise.reject(new Error("CLAUDE_NATIVE_HELPER_PARENT_GONE"));
|
|
10
|
+
}
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
process.send(value, undefined, {}, (error) => {
|
|
13
|
+
if (error === null)
|
|
14
|
+
resolve();
|
|
15
|
+
else
|
|
16
|
+
reject(error);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function safeCode(error) {
|
|
21
|
+
if (error instanceof BridgeError &&
|
|
22
|
+
/^[A-Z][A-Z0-9_]{0,95}$/.test(error.code)) {
|
|
23
|
+
return { code: error.code, recoverable: error.recoverable };
|
|
24
|
+
}
|
|
25
|
+
return { code: "CLAUDE_NATIVE_HELPER_OPERATION_FAILED", recoverable: false };
|
|
26
|
+
}
|
|
27
|
+
function okResult() {
|
|
28
|
+
return { ok: true };
|
|
29
|
+
}
|
|
30
|
+
export async function runClaudeNativeHelperProcess() {
|
|
31
|
+
if (process.send === undefined)
|
|
32
|
+
return;
|
|
33
|
+
let provider;
|
|
34
|
+
let initialized = false;
|
|
35
|
+
let closing = false;
|
|
36
|
+
let admitted = 0;
|
|
37
|
+
let operation = Promise.resolve();
|
|
38
|
+
let sendOperation = Promise.resolve();
|
|
39
|
+
const queueSend = (message) => {
|
|
40
|
+
const queued = sendOperation.then(async () => await sendChildMessage(message));
|
|
41
|
+
sendOperation = queued.catch(() => undefined);
|
|
42
|
+
return queued;
|
|
43
|
+
};
|
|
44
|
+
const event = (value) => {
|
|
45
|
+
void queueSend({
|
|
46
|
+
protocolVersion: CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION,
|
|
47
|
+
type: "event",
|
|
48
|
+
value,
|
|
49
|
+
}).catch(() => void shutdown());
|
|
50
|
+
};
|
|
51
|
+
const callbacks = {
|
|
52
|
+
onDelivery: (value) => event({ event: "delivery", value: { ...value } }),
|
|
53
|
+
onRouteState: () => undefined,
|
|
54
|
+
onClaudeReply: (value) => event({
|
|
55
|
+
event: "claude_reply",
|
|
56
|
+
value: {
|
|
57
|
+
routeHandle: value.endpoint.routeHandle,
|
|
58
|
+
text: value.text,
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
onClaudeMessage: (value) => event({
|
|
62
|
+
event: "claude_message",
|
|
63
|
+
value: {
|
|
64
|
+
routeHandle: value.endpoint.routeHandle,
|
|
65
|
+
sourceAlias: value.sourceAlias,
|
|
66
|
+
targetAlias: value.targetAlias,
|
|
67
|
+
text: value.text,
|
|
68
|
+
...(value.receiptHandle === undefined
|
|
69
|
+
? {}
|
|
70
|
+
: { receiptHandle: value.receiptHandle }),
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
onProtocolNotice: (value) => event({ event: "protocol_notice", value: { code: value.code } }),
|
|
74
|
+
};
|
|
75
|
+
const respond = async (requestId, result) => {
|
|
76
|
+
await queueSend({
|
|
77
|
+
protocolVersion: CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION,
|
|
78
|
+
type: "response",
|
|
79
|
+
requestId,
|
|
80
|
+
ok: true,
|
|
81
|
+
result,
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
const reject = async (requestId, error) => {
|
|
85
|
+
await queueSend({
|
|
86
|
+
protocolVersion: CLAUDE_NATIVE_HELPER_PROTOCOL_VERSION,
|
|
87
|
+
type: "response",
|
|
88
|
+
requestId,
|
|
89
|
+
ok: false,
|
|
90
|
+
error: safeCode(error),
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
const initialize = async (message) => {
|
|
94
|
+
if (initialized || provider !== undefined) {
|
|
95
|
+
throw new BridgeError("CLAUDE_NATIVE_HELPER_ALREADY_INITIALIZED", "The native helper accepts exactly one immutable initialization.");
|
|
96
|
+
}
|
|
97
|
+
const created = createLocalClaudeGatewayProvider({
|
|
98
|
+
runtime: message.runtime,
|
|
99
|
+
hostId: message.hostId,
|
|
100
|
+
locale: message.locale,
|
|
101
|
+
deliveryNotices: message.deliveryNotices,
|
|
102
|
+
maxPendingMessages: message.maxPendingMessages,
|
|
103
|
+
});
|
|
104
|
+
provider = created;
|
|
105
|
+
try {
|
|
106
|
+
await created.initialize(callbacks);
|
|
107
|
+
const generation = created.currentUnadvertisedNativeCodexPeerGeneration();
|
|
108
|
+
await created.quiesceNativeCodexPeerGeneration(generation);
|
|
109
|
+
await created.advertiseNativeCodexPeer(message.registration);
|
|
110
|
+
initialized = true;
|
|
111
|
+
return { generation };
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
await created.close().catch(() => undefined);
|
|
115
|
+
provider = undefined;
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const execute = async (command) => {
|
|
120
|
+
const active = provider;
|
|
121
|
+
if (!initialized || active === undefined) {
|
|
122
|
+
throw new BridgeError("CLAUDE_NATIVE_HELPER_NOT_INITIALIZED", "The native helper has not established its immutable registration.");
|
|
123
|
+
}
|
|
124
|
+
switch (command.method) {
|
|
125
|
+
case "resume_generation":
|
|
126
|
+
await active.resumeNativeCodexPeerGeneration(command.generation);
|
|
127
|
+
return okResult();
|
|
128
|
+
case "authorize_route": {
|
|
129
|
+
const snapshot = await active.discoverClaudePeers();
|
|
130
|
+
const peer = snapshot.peers.find((candidate) => candidate.routeHandle === command.routeHandle &&
|
|
131
|
+
candidate.alias === command.alias);
|
|
132
|
+
if (peer === undefined) {
|
|
133
|
+
throw new BridgeError("CLAUDE_ROUTE_MISMATCH", "The helper could not prove the exact selected Claude route.", true);
|
|
134
|
+
}
|
|
135
|
+
await active.assertWorkspaceDisjoint(command.routeHandle, command.stateRoot);
|
|
136
|
+
await active.selectRoute({
|
|
137
|
+
alias: command.alias,
|
|
138
|
+
routeHandle: command.routeHandle,
|
|
139
|
+
});
|
|
140
|
+
return okResult();
|
|
141
|
+
}
|
|
142
|
+
case "release_route":
|
|
143
|
+
await active.releaseRoute(command.routeHandle);
|
|
144
|
+
return okResult();
|
|
145
|
+
case "dispatch":
|
|
146
|
+
return await active.dispatch(command);
|
|
147
|
+
case "update_inbound_status":
|
|
148
|
+
await active.updateNativeInboundStatus(command.receiptHandle, command.status, command.diagnosticCode);
|
|
149
|
+
return okResult();
|
|
150
|
+
case "notify_inbound_progress":
|
|
151
|
+
await active.notifyNativeInboundProgress(command.receiptHandle, command.progress);
|
|
152
|
+
return okResult();
|
|
153
|
+
case "release_inbound_receipt":
|
|
154
|
+
return {
|
|
155
|
+
released: await active.releaseNativeInboundReceipt(command.receiptHandle),
|
|
156
|
+
};
|
|
157
|
+
case "update_status":
|
|
158
|
+
await active.updateNativeCodexPeerStatus(command.alias, command.status);
|
|
159
|
+
return okResult();
|
|
160
|
+
case "unadvertise":
|
|
161
|
+
await active.unadvertiseNativeCodexPeer(command.alias);
|
|
162
|
+
return okResult();
|
|
163
|
+
case "quiesce_generation":
|
|
164
|
+
await active.quiesceNativeCodexPeerGeneration(command.generation);
|
|
165
|
+
return okResult();
|
|
166
|
+
case "observe_barrier":
|
|
167
|
+
return await active.observeNativeCodexSuccessionBarrier(command.generation);
|
|
168
|
+
case "prepare_generation":
|
|
169
|
+
await active.prepareNativeCodexPeerGeneration({
|
|
170
|
+
alias: command.alias,
|
|
171
|
+
cwd: command.cwd,
|
|
172
|
+
generation: command.generation,
|
|
173
|
+
});
|
|
174
|
+
return okResult();
|
|
175
|
+
case "publish_prepared":
|
|
176
|
+
return {
|
|
177
|
+
publication: await active.publishPreparedNativeCodexPeer({
|
|
178
|
+
currentGeneration: command.currentGeneration,
|
|
179
|
+
preparedGeneration: command.preparedGeneration,
|
|
180
|
+
}),
|
|
181
|
+
};
|
|
182
|
+
case "activate_prepared":
|
|
183
|
+
await active.activatePreparedNativeCodexPeerGeneration(command.generation);
|
|
184
|
+
return okResult();
|
|
185
|
+
case "cleanup_prepared":
|
|
186
|
+
await active.cleanupPreparedNativeCodexPeerGeneration(command.generation);
|
|
187
|
+
return okResult();
|
|
188
|
+
case "rollback_prepared":
|
|
189
|
+
await active.rollbackPreparedNativeCodexPeerGeneration({
|
|
190
|
+
preparedGeneration: command.preparedGeneration,
|
|
191
|
+
resumeGeneration: command.resumeGeneration,
|
|
192
|
+
});
|
|
193
|
+
return okResult();
|
|
194
|
+
case "retire_generation":
|
|
195
|
+
await active.retireNativeCodexPeerGeneration({
|
|
196
|
+
retiredGeneration: command.retiredGeneration,
|
|
197
|
+
protectedActiveGeneration: command.protectedActiveGeneration,
|
|
198
|
+
});
|
|
199
|
+
return okResult();
|
|
200
|
+
case "purge_generation_replies":
|
|
201
|
+
return {
|
|
202
|
+
purged: await active.purgeNativeCodexPeerGenerationReplyCapabilities(command.generation),
|
|
203
|
+
};
|
|
204
|
+
case "close":
|
|
205
|
+
await active.close();
|
|
206
|
+
return okResult();
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
const shutdown = async () => {
|
|
210
|
+
if (closing)
|
|
211
|
+
return;
|
|
212
|
+
closing = true;
|
|
213
|
+
const current = provider;
|
|
214
|
+
provider = undefined;
|
|
215
|
+
if (current !== undefined)
|
|
216
|
+
await current.close().catch(() => undefined);
|
|
217
|
+
if (process.connected)
|
|
218
|
+
process.disconnect();
|
|
219
|
+
setImmediate(() => process.exit(0));
|
|
220
|
+
};
|
|
221
|
+
process.on("disconnect", () => void shutdown());
|
|
222
|
+
process.on("SIGTERM", () => void shutdown());
|
|
223
|
+
process.on("SIGINT", () => void shutdown());
|
|
224
|
+
process.on("message", (value) => {
|
|
225
|
+
if (closing)
|
|
226
|
+
return;
|
|
227
|
+
try {
|
|
228
|
+
assertClaudeNativeHelperIpcSize(value);
|
|
229
|
+
if (!isClaudeNativeHelperParentMessage(value)) {
|
|
230
|
+
throw new Error("CLAUDE_NATIVE_HELPER_PROTOCOL_INVALID");
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
void shutdown();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (admitted >= CLAUDE_NATIVE_HELPER_MAX_REQUESTS) {
|
|
238
|
+
void shutdown();
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
admitted += 1;
|
|
242
|
+
operation = operation
|
|
243
|
+
.then(async () => {
|
|
244
|
+
try {
|
|
245
|
+
const result = value.type === "initialize"
|
|
246
|
+
? await initialize(value)
|
|
247
|
+
: await execute(value.command);
|
|
248
|
+
await respond(value.requestId, result);
|
|
249
|
+
if (value.type === "request" && value.command.method === "close") {
|
|
250
|
+
await shutdown();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
await reject(value.requestId, error).catch(() => undefined);
|
|
255
|
+
if (value.type === "initialize")
|
|
256
|
+
await shutdown();
|
|
257
|
+
}
|
|
258
|
+
})
|
|
259
|
+
.finally(() => {
|
|
260
|
+
admitted -= 1;
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
const invokedPath = process.argv[1];
|
|
265
|
+
if (invokedPath !== undefined &&
|
|
266
|
+
path.resolve(invokedPath) === fileURLToPath(import.meta.url)) {
|
|
267
|
+
void runClaudeNativeHelperProcess();
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=claude-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-helper.js","sourceRoot":"","sources":["../../../src/gateway/claude-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { type Socket } from "node:net";
|
|
2
|
+
import type { GatewayDeliveryNoticeMode } from "./config.js";
|
|
3
|
+
import { type DashboardLocale } from "./locale.js";
|
|
4
|
+
/**
|
|
5
|
+
* This adapter intentionally pins the inspected, implementation-specific
|
|
6
|
+
* local peer boundary. The feature is documented in Claude Code, but its
|
|
7
|
+
* registry and NDJSON formats are not a stable public integration contract.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CLAUDE_PEER_COMPATIBILITY: Readonly<{
|
|
10
|
+
claudeCodeVersion: "2.1.226";
|
|
11
|
+
peerProtocol: 1;
|
|
12
|
+
messageVersion: 1;
|
|
13
|
+
}>;
|
|
14
|
+
/** Live peer records may outlive a same-protocol Claude Code upgrade. */
|
|
15
|
+
export declare const CLAUDE_PEER_COMPATIBLE_SESSION_VERSIONS: readonly ["2.1.224", "2.1.225", "2.1.226"];
|
|
16
|
+
export declare const claudePeerStatuses: readonly ["busy", "shell", "idle", "waiting"];
|
|
17
|
+
export type ClaudePeerStatus = (typeof claudePeerStatuses)[number];
|
|
18
|
+
export declare const claudePeerKinds: readonly ["interactive", "bg", "daemon", "daemon-worker"];
|
|
19
|
+
export type ClaudePeerKind = (typeof claudePeerKinds)[number];
|
|
20
|
+
export declare const claudePeerRejectionCodes: readonly ["ENTRY_LIMIT_EXCEEDED", "INVALID_FILE_NAME", "REGISTRY_NOT_REGULAR", "REGISTRY_OWNER_MISMATCH", "REGISTRY_MODE_UNSAFE", "REGISTRY_TOO_LARGE", "REGISTRY_RACED", "REGISTRY_INVALID_JSON", "REGISTRY_INVALID_SCHEMA", "PID_MISMATCH", "PID_NOT_LIVE", "PID_OWNER_MISMATCH", "SOCKET_OUTSIDE_ROOT", "SOCKET_NOT_SOCKET", "SOCKET_OWNER_MISMATCH", "SOCKET_MODE_UNSAFE", "SELF_TARGET", "SESSION_ID_COLLISION"];
|
|
21
|
+
export type ClaudePeerRejectionCode = (typeof claudePeerRejectionCodes)[number];
|
|
22
|
+
export type ClaudePeerDescriptor = {
|
|
23
|
+
/** Claude's stable logical session UUID. Names and sockets are not identity. */
|
|
24
|
+
targetId: string;
|
|
25
|
+
alias: string;
|
|
26
|
+
kind: ClaudePeerKind;
|
|
27
|
+
status: ClaudePeerStatus;
|
|
28
|
+
compatibility: "compatible";
|
|
29
|
+
};
|
|
30
|
+
export type ClaudePeerDiscovery = {
|
|
31
|
+
peers: ClaudePeerDescriptor[];
|
|
32
|
+
rejected: Partial<Record<ClaudePeerRejectionCode, number>>;
|
|
33
|
+
truncated: boolean;
|
|
34
|
+
/** Bounded registry entries examined, including safely skipped records. */
|
|
35
|
+
entriesScanned: number;
|
|
36
|
+
/** Records whose closed wire schema parsed before later liveness checks. */
|
|
37
|
+
parseableRecords: number;
|
|
38
|
+
};
|
|
39
|
+
export type ClaudePeerTransportStatus = "connecting" | "write_started" | "transport_written" | "ambiguous" | "not_written";
|
|
40
|
+
export type ClaudePeerReceiptStatus = "held"
|
|
41
|
+
/** Native `delivered`: approval released the frame to Claude's queue. */
|
|
42
|
+
| "released" | "denied" | "expired" | "unconfirmed" | "ambiguous";
|
|
43
|
+
export type ClaudePeerDeliveryDiagnostic = {
|
|
44
|
+
/** Stable, non-sensitive gateway code rendered into Claude's context. */
|
|
45
|
+
code: string;
|
|
46
|
+
};
|
|
47
|
+
export declare const claudePeerInboundStallReasons: readonly ["ROUTE_BUSY", "ROUTE_UNAVAILABLE", "CODEX_ROUTE_STALE", "AWAITING_EXTERNAL_APPROVAL"];
|
|
48
|
+
export type ClaudePeerInboundStallReason = (typeof claudePeerInboundStallReasons)[number];
|
|
49
|
+
export type ClaudePeerInboundProgress = {
|
|
50
|
+
kind: "stall";
|
|
51
|
+
reason: ClaudePeerInboundStallReason;
|
|
52
|
+
queuedForMs: number;
|
|
53
|
+
};
|
|
54
|
+
export type ClaudePeerAcknowledgmentResult = {
|
|
55
|
+
transportStatus: "transport_written" | "suppressed";
|
|
56
|
+
};
|
|
57
|
+
export type ClaudePeerTransportEvent = {
|
|
58
|
+
messageId: string;
|
|
59
|
+
status: ClaudePeerTransportStatus;
|
|
60
|
+
};
|
|
61
|
+
export type ClaudePeerReceiptEvent = {
|
|
62
|
+
messageId: string;
|
|
63
|
+
status: ClaudePeerReceiptStatus;
|
|
64
|
+
trust: "untrusted_same_uid_peer";
|
|
65
|
+
};
|
|
66
|
+
export type ClaudePeerInboundMessage = {
|
|
67
|
+
inboundId: string;
|
|
68
|
+
content: string;
|
|
69
|
+
/** Validated connect-back capability, not proof of the connecting PID. */
|
|
70
|
+
sourceTargetId?: string;
|
|
71
|
+
/** Display label from that capability; never an authority. */
|
|
72
|
+
sourceAlias?: string;
|
|
73
|
+
/** Opaque listener-owned handle for native held/delivered status updates. */
|
|
74
|
+
receiptHandle?: string;
|
|
75
|
+
replySupported: boolean;
|
|
76
|
+
trust: "untrusted_same_uid_peer" | "untrusted_anonymous_local_peer";
|
|
77
|
+
};
|
|
78
|
+
export type ClaudePeerProtocolNotice = {
|
|
79
|
+
code: "FRAME_TOO_LARGE" | "INVALID_UTF8" | "INVALID_FRAME" | "UNSUPPORTED_FRAME" | "UNREGISTERED_REPLY_ADDRESS" | "UNKNOWN_RECEIPT" | "INVALID_RECEIPT_TRANSITION" | "RECEIPT_LIMIT" | "CONNECTION_LIMIT" | "CONNECTION_TIMEOUT" | "CALLBACK_ERROR";
|
|
80
|
+
};
|
|
81
|
+
export type ClaudeProcessIdentity = {
|
|
82
|
+
uid: number;
|
|
83
|
+
/** Stable only for the lifetime of this process, such as ps(1) lstart. */
|
|
84
|
+
generation: string;
|
|
85
|
+
};
|
|
86
|
+
export type ClaudeProcessInspector = (pid: number) => Promise<ClaudeProcessIdentity | undefined>;
|
|
87
|
+
export type ClaudePeerConnect = (socketPath: string) => Socket;
|
|
88
|
+
export type ClaudePeerAdapterOptions = {
|
|
89
|
+
sessionsDir: string;
|
|
90
|
+
socketDir: string;
|
|
91
|
+
/** Exact version attested by the trusted launcher, never user input. */
|
|
92
|
+
attestedClaudeCodeVersion: string;
|
|
93
|
+
/** Locale for bounded user-visible gateway notices written to Claude. */
|
|
94
|
+
locale?: DashboardLocale;
|
|
95
|
+
/** Gateway-authored user-frame policy; native status frames are unaffected. */
|
|
96
|
+
deliveryNotices?: GatewayDeliveryNoticeMode;
|
|
97
|
+
maxRegistryEntries?: number;
|
|
98
|
+
maxRegistryBytes?: number;
|
|
99
|
+
maxFrameBytes?: number;
|
|
100
|
+
targetLeaseMs?: number;
|
|
101
|
+
connectTimeoutMs?: number;
|
|
102
|
+
receiptDeadlineMs?: number;
|
|
103
|
+
maxPendingReceipts?: number;
|
|
104
|
+
maxConnections?: number;
|
|
105
|
+
connectionIdleMs?: number;
|
|
106
|
+
maxFramesPerConnection?: number;
|
|
107
|
+
};
|
|
108
|
+
/** Dependency seams for deterministic tests; never populate from config. */
|
|
109
|
+
export type ClaudePeerAdapterTestOverrides = {
|
|
110
|
+
processInspector?: ClaudeProcessInspector;
|
|
111
|
+
connect?: ClaudePeerConnect;
|
|
112
|
+
now?: () => number;
|
|
113
|
+
createId?: () => string;
|
|
114
|
+
/** Separate from protocol/message UUID generation so lifecycle tests cannot alias it. */
|
|
115
|
+
createGeneration?: () => string;
|
|
116
|
+
registryRename?: (source: string, destination: string) => Promise<void>;
|
|
117
|
+
registryOperationHook?: (event: {
|
|
118
|
+
operation: "advertise" | "publish" | "status" | "unadvertise";
|
|
119
|
+
phase: "entered" | "exited";
|
|
120
|
+
generation: string;
|
|
121
|
+
}) => void | Promise<void>;
|
|
122
|
+
userHome?: string;
|
|
123
|
+
tempRoots?: readonly string[];
|
|
124
|
+
registryPublicationHook?: (stage: "before_rename" | "after_rename") => void | Promise<void>;
|
|
125
|
+
};
|
|
126
|
+
export type ClaudePeerRegistryPublicationOutcome = "published" | "not_published" | "unknown";
|
|
127
|
+
export type ClaudePeerListenerOptions = {
|
|
128
|
+
onMessage: (message: ClaudePeerInboundMessage) => void | Promise<void>;
|
|
129
|
+
onReceipt?: (event: ClaudePeerReceiptEvent) => void | Promise<void>;
|
|
130
|
+
onProtocolNotice?: (notice: ClaudePeerProtocolNotice) => void | Promise<void>;
|
|
131
|
+
};
|
|
132
|
+
export type ClaudePeerSendOptions = {
|
|
133
|
+
listener?: ClaudePeerListener;
|
|
134
|
+
/** Exact gateway message deadline as an epoch-millisecond timestamp. */
|
|
135
|
+
receiptDeadlineAt?: number;
|
|
136
|
+
onTransportStatus?: (event: ClaudePeerTransportEvent) => void | Promise<void>;
|
|
137
|
+
};
|
|
138
|
+
export type ClaudePeerSendResult = {
|
|
139
|
+
messageId: string;
|
|
140
|
+
transportStatus: "transport_written";
|
|
141
|
+
receiptStatus: "pending" | "unavailable";
|
|
142
|
+
};
|
|
143
|
+
type FileGeneration = {
|
|
144
|
+
dev: number;
|
|
145
|
+
ino: number;
|
|
146
|
+
size: number;
|
|
147
|
+
mtimeMs: number;
|
|
148
|
+
};
|
|
149
|
+
type SocketGeneration = {
|
|
150
|
+
dev: number;
|
|
151
|
+
ino: number;
|
|
152
|
+
};
|
|
153
|
+
type ParsedRegistryRecord = {
|
|
154
|
+
pid: number;
|
|
155
|
+
sessionId: string;
|
|
156
|
+
cwd: string;
|
|
157
|
+
peerProtocol: 1;
|
|
158
|
+
kind: ClaudePeerKind;
|
|
159
|
+
messagingSocketPath: string;
|
|
160
|
+
name: string;
|
|
161
|
+
status: ClaudePeerStatus;
|
|
162
|
+
};
|
|
163
|
+
type TargetBinding = {
|
|
164
|
+
targetId: string;
|
|
165
|
+
alias: string;
|
|
166
|
+
registryPath: string;
|
|
167
|
+
registryGeneration: FileGeneration;
|
|
168
|
+
socketGeneration: SocketGeneration;
|
|
169
|
+
record: ParsedRegistryRecord;
|
|
170
|
+
processGeneration: string;
|
|
171
|
+
expiresAt: number;
|
|
172
|
+
};
|
|
173
|
+
type AdapterLimits = {
|
|
174
|
+
maxRegistryEntries: number;
|
|
175
|
+
maxRegistryBytes: number;
|
|
176
|
+
maxFrameBytes: number;
|
|
177
|
+
targetLeaseMs: number;
|
|
178
|
+
connectTimeoutMs: number;
|
|
179
|
+
receiptDeadlineMs: number;
|
|
180
|
+
maxPendingReceipts: number;
|
|
181
|
+
maxConnections: number;
|
|
182
|
+
connectionIdleMs: number;
|
|
183
|
+
maxFramesPerConnection: number;
|
|
184
|
+
};
|
|
185
|
+
export declare function encodeClaudePeerUserFrame(input: {
|
|
186
|
+
messageId: string;
|
|
187
|
+
content: string;
|
|
188
|
+
from?: string;
|
|
189
|
+
maxFrameBytes?: number;
|
|
190
|
+
}): Buffer;
|
|
191
|
+
export declare class ClaudePeerAdapter {
|
|
192
|
+
#private;
|
|
193
|
+
constructor(options: ClaudePeerAdapterOptions, testing?: ClaudePeerAdapterTestOverrides);
|
|
194
|
+
discover(): Promise<ClaudePeerDiscovery>;
|
|
195
|
+
/**
|
|
196
|
+
* Required selection gate. It reveals no workspace data and binds the
|
|
197
|
+
* opaque target to one canonical controller state root for later sends.
|
|
198
|
+
*/
|
|
199
|
+
assertTargetWorkspaceDisjoint(targetId: string, controllerStateRoot: string): Promise<void>;
|
|
200
|
+
/**
|
|
201
|
+
* Converts a transient CLAUDE_CODE_MESSAGING_SOCKET-style address into the
|
|
202
|
+
* owning logical Claude session UUID. Callers discard the socket address;
|
|
203
|
+
* every later delivery resolves the UUID to fresh transport coordinates.
|
|
204
|
+
*/
|
|
205
|
+
resolveReplyAddress(address: string): Promise<ClaudePeerDescriptor>;
|
|
206
|
+
listen(options: ClaudePeerListenerOptions): Promise<ClaudePeerListener>;
|
|
207
|
+
listenPrepared(generation: string, options: ClaudePeerListenerOptions): Promise<ClaudePeerListener>;
|
|
208
|
+
send(targetId: string, content: string, options?: ClaudePeerSendOptions): Promise<ClaudePeerSendResult>;
|
|
209
|
+
close(): Promise<void>;
|
|
210
|
+
}
|
|
211
|
+
type ListenerCreateOptions = {
|
|
212
|
+
sessionsDir: string;
|
|
213
|
+
socketDir: string;
|
|
214
|
+
expectedUid: number;
|
|
215
|
+
limits: AdapterLimits;
|
|
216
|
+
createId: () => string;
|
|
217
|
+
connect: ClaudePeerConnect;
|
|
218
|
+
now: () => number;
|
|
219
|
+
locale: DashboardLocale;
|
|
220
|
+
deliveryNotices: GatewayDeliveryNoticeMode;
|
|
221
|
+
attestedClaudeCodeVersion: string;
|
|
222
|
+
resolveReplyAddress: (address: string) => Promise<TargetBinding>;
|
|
223
|
+
resolveSessionBinding: (sessionId: string) => Promise<TargetBinding>;
|
|
224
|
+
revalidateBinding: (binding: TargetBinding) => Promise<TargetBinding>;
|
|
225
|
+
options: ClaudePeerListenerOptions;
|
|
226
|
+
owner: object;
|
|
227
|
+
generation: string;
|
|
228
|
+
registryRename: (source: string, destination: string) => Promise<void>;
|
|
229
|
+
registryOperationHook?: ClaudePeerAdapterTestOverrides["registryOperationHook"];
|
|
230
|
+
runRegistryMutation: <T>(operation: () => Promise<T>) => Promise<T>;
|
|
231
|
+
preparedGeneration?: string;
|
|
232
|
+
registryPublicationHook?: (stage: "before_rename" | "after_rename") => void | Promise<void>;
|
|
233
|
+
onClosed: () => void;
|
|
234
|
+
};
|
|
235
|
+
export declare class ClaudePeerListener {
|
|
236
|
+
#private;
|
|
237
|
+
readonly address: string;
|
|
238
|
+
readonly generation: string;
|
|
239
|
+
private constructor();
|
|
240
|
+
static create(options: ListenerCreateOptions): Promise<ClaudePeerListener>;
|
|
241
|
+
get closed(): boolean;
|
|
242
|
+
advertise(name: string, cwd: string): Promise<void>;
|
|
243
|
+
publishReplacing(current: ClaudePeerListener, name: string, cwd: string): Promise<ClaudePeerRegistryPublicationOutcome>;
|
|
244
|
+
updateAdvertisedStatus(status: ClaudePeerStatus): Promise<void>;
|
|
245
|
+
unadvertise(name?: string): Promise<void>;
|
|
246
|
+
grantSuccessionActivation(): void;
|
|
247
|
+
resumeInbound(): void;
|
|
248
|
+
acknowledge(receiptHandle: string, status: "held" | "delivered" | "denied" | "expired", diagnostic?: ClaudePeerDeliveryDiagnostic): Promise<ClaudePeerAcknowledgmentResult>;
|
|
249
|
+
/**
|
|
250
|
+
* Writes one nonterminal gateway progress frame without synthesizing a
|
|
251
|
+
* native peer_message_status transition. The receipt remains available for
|
|
252
|
+
* its later exact terminal acknowledgement or explicit release.
|
|
253
|
+
*/
|
|
254
|
+
notifyInboundProgress(receiptHandle: string, progress: ClaudePeerInboundProgress): Promise<ClaudePeerAcknowledgmentResult>;
|
|
255
|
+
/**
|
|
256
|
+
* Releases a listener-owned native receipt capability without writing to the
|
|
257
|
+
* peer. The service uses this after a terminal notification becomes
|
|
258
|
+
* definitively undeliverable so bounded receipt capacity cannot leak.
|
|
259
|
+
*/
|
|
260
|
+
releaseInboundReceipt(receiptHandle: string): boolean;
|
|
261
|
+
/**
|
|
262
|
+
* Stop admitting new user-message frames while keeping the listener alive
|
|
263
|
+
* for terminal receipt writes. The promise joins every frame already
|
|
264
|
+
* admitted, so controller shutdown can drain service receipt work before
|
|
265
|
+
* closing the provider socket.
|
|
266
|
+
*/
|
|
267
|
+
quiesceInbound(): Promise<void>;
|
|
268
|
+
track(messageId: string, binding: TargetBinding, receiptDeadlineAt?: number): void;
|
|
269
|
+
recordTransportOutcome(messageId: string, outcome: "transport_written" | "transport_uncertain"): void;
|
|
270
|
+
untrack(messageId: string): void;
|
|
271
|
+
close(): Promise<void>;
|
|
272
|
+
}
|
|
273
|
+
export {};
|