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.
Files changed (145) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/CONTRIBUTING.md +122 -0
  3. package/LICENSE +21 -0
  4. package/README.md +185 -0
  5. package/README.zh-CN.md +185 -0
  6. package/SECURITY.md +224 -0
  7. package/assets/live-dashboard/app.css +1610 -0
  8. package/assets/mark-seal.svg +7 -0
  9. package/assets/mark.svg +7 -0
  10. package/assets/social-preview.png +0 -0
  11. package/assets/vendor/react/LICENSE +21 -0
  12. package/assets/vendor/react/react-dom.production.min.js +267 -0
  13. package/assets/vendor/react/react.production.min.js +31 -0
  14. package/dist/src/errors.d.ts +5 -0
  15. package/dist/src/errors.js +11 -0
  16. package/dist/src/errors.js.map +1 -0
  17. package/dist/src/gateway/claude-compatibility-scratch.d.ts +18 -0
  18. package/dist/src/gateway/claude-compatibility-scratch.js +158 -0
  19. package/dist/src/gateway/claude-compatibility-scratch.js.map +1 -0
  20. package/dist/src/gateway/claude-helper-client.d.ts +43 -0
  21. package/dist/src/gateway/claude-helper-client.js +212 -0
  22. package/dist/src/gateway/claude-helper-client.js.map +1 -0
  23. package/dist/src/gateway/claude-helper-protocol.d.ts +172 -0
  24. package/dist/src/gateway/claude-helper-protocol.js +373 -0
  25. package/dist/src/gateway/claude-helper-protocol.js.map +1 -0
  26. package/dist/src/gateway/claude-helper-supervisor.d.ts +74 -0
  27. package/dist/src/gateway/claude-helper-supervisor.js +497 -0
  28. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -0
  29. package/dist/src/gateway/claude-helper.d.ts +1 -0
  30. package/dist/src/gateway/claude-helper.js +269 -0
  31. package/dist/src/gateway/claude-helper.js.map +1 -0
  32. package/dist/src/gateway/claude-peer.d.ts +273 -0
  33. package/dist/src/gateway/claude-peer.js +2359 -0
  34. package/dist/src/gateway/claude-peer.js.map +1 -0
  35. package/dist/src/gateway/claude-runtime.d.ts +40 -0
  36. package/dist/src/gateway/claude-runtime.js +302 -0
  37. package/dist/src/gateway/claude-runtime.js.map +1 -0
  38. package/dist/src/gateway/cli-copy.d.ts +8 -0
  39. package/dist/src/gateway/cli-copy.en.d.ts +13 -0
  40. package/dist/src/gateway/cli-copy.en.js +43 -0
  41. package/dist/src/gateway/cli-copy.en.js.map +1 -0
  42. package/dist/src/gateway/cli-copy.js +19 -0
  43. package/dist/src/gateway/cli-copy.js.map +1 -0
  44. package/dist/src/gateway/cli-copy.zh-CN.d.ts +13 -0
  45. package/dist/src/gateway/cli-copy.zh-CN.js +43 -0
  46. package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -0
  47. package/dist/src/gateway/cli.d.ts +44 -0
  48. package/dist/src/gateway/cli.js +969 -0
  49. package/dist/src/gateway/cli.js.map +1 -0
  50. package/dist/src/gateway/codex-app-server.d.ts +310 -0
  51. package/dist/src/gateway/codex-app-server.js +1746 -0
  52. package/dist/src/gateway/codex-app-server.js.map +1 -0
  53. package/dist/src/gateway/codex-local-transport.d.ts +81 -0
  54. package/dist/src/gateway/codex-local-transport.js +617 -0
  55. package/dist/src/gateway/codex-local-transport.js.map +1 -0
  56. package/dist/src/gateway/codex-registration-generation.d.ts +5 -0
  57. package/dist/src/gateway/codex-registration-generation.js +19 -0
  58. package/dist/src/gateway/codex-registration-generation.js.map +1 -0
  59. package/dist/src/gateway/codex-registration-succession.d.ts +209 -0
  60. package/dist/src/gateway/codex-registration-succession.js +588 -0
  61. package/dist/src/gateway/codex-registration-succession.js.map +1 -0
  62. package/dist/src/gateway/compatibility.d.ts +70 -0
  63. package/dist/src/gateway/compatibility.js +252 -0
  64. package/dist/src/gateway/compatibility.js.map +1 -0
  65. package/dist/src/gateway/config.d.ts +24 -0
  66. package/dist/src/gateway/config.js +130 -0
  67. package/dist/src/gateway/config.js.map +1 -0
  68. package/dist/src/gateway/control.d.ts +308 -0
  69. package/dist/src/gateway/control.js +1573 -0
  70. package/dist/src/gateway/control.js.map +1 -0
  71. package/dist/src/gateway/dashboard-copy.d.ts +7 -0
  72. package/dist/src/gateway/dashboard-copy.en.d.ts +506 -0
  73. package/dist/src/gateway/dashboard-copy.en.js +507 -0
  74. package/dist/src/gateway/dashboard-copy.en.js.map +1 -0
  75. package/dist/src/gateway/dashboard-copy.js +516 -0
  76. package/dist/src/gateway/dashboard-copy.js.map +1 -0
  77. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +506 -0
  78. package/dist/src/gateway/dashboard-copy.zh-CN.js +507 -0
  79. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -0
  80. package/dist/src/gateway/dashboard-model.d.ts +207 -0
  81. package/dist/src/gateway/dashboard-model.js +720 -0
  82. package/dist/src/gateway/dashboard-model.js.map +1 -0
  83. package/dist/src/gateway/dashboard.d.ts +26 -0
  84. package/dist/src/gateway/dashboard.js +941 -0
  85. package/dist/src/gateway/dashboard.js.map +1 -0
  86. package/dist/src/gateway/delivery-machine.d.ts +235 -0
  87. package/dist/src/gateway/delivery-machine.js +540 -0
  88. package/dist/src/gateway/delivery-machine.js.map +1 -0
  89. package/dist/src/gateway/instance-lease.d.ts +21 -0
  90. package/dist/src/gateway/instance-lease.js +549 -0
  91. package/dist/src/gateway/instance-lease.js.map +1 -0
  92. package/dist/src/gateway/live-dashboard-app/app.js +2914 -0
  93. package/dist/src/gateway/live-dashboard-assets.d.ts +10 -0
  94. package/dist/src/gateway/live-dashboard-assets.js +73 -0
  95. package/dist/src/gateway/live-dashboard-assets.js.map +1 -0
  96. package/dist/src/gateway/live-dashboard-bootstrap.d.ts +36 -0
  97. package/dist/src/gateway/live-dashboard-bootstrap.js +176 -0
  98. package/dist/src/gateway/live-dashboard-bootstrap.js.map +1 -0
  99. package/dist/src/gateway/live-dashboard-command.d.ts +54 -0
  100. package/dist/src/gateway/live-dashboard-command.js +324 -0
  101. package/dist/src/gateway/live-dashboard-command.js.map +1 -0
  102. package/dist/src/gateway/live-dashboard-http.d.ts +41 -0
  103. package/dist/src/gateway/live-dashboard-http.js +445 -0
  104. package/dist/src/gateway/live-dashboard-http.js.map +1 -0
  105. package/dist/src/gateway/live-dashboard-protocol.d.ts +38 -0
  106. package/dist/src/gateway/live-dashboard-protocol.js +156 -0
  107. package/dist/src/gateway/live-dashboard-protocol.js.map +1 -0
  108. package/dist/src/gateway/live-dashboard-server.d.ts +33 -0
  109. package/dist/src/gateway/live-dashboard-server.js +130 -0
  110. package/dist/src/gateway/live-dashboard-server.js.map +1 -0
  111. package/dist/src/gateway/live-dashboard-stream.d.ts +46 -0
  112. package/dist/src/gateway/live-dashboard-stream.js +233 -0
  113. package/dist/src/gateway/live-dashboard-stream.js.map +1 -0
  114. package/dist/src/gateway/live-dashboard.d.ts +31 -0
  115. package/dist/src/gateway/live-dashboard.js +190 -0
  116. package/dist/src/gateway/live-dashboard.js.map +1 -0
  117. package/dist/src/gateway/locale.d.ts +4 -0
  118. package/dist/src/gateway/locale.js +10 -0
  119. package/dist/src/gateway/locale.js.map +1 -0
  120. package/dist/src/gateway/progress-watch-machine.d.ts +97 -0
  121. package/dist/src/gateway/progress-watch-machine.js +172 -0
  122. package/dist/src/gateway/progress-watch-machine.js.map +1 -0
  123. package/dist/src/gateway/providers.d.ts +287 -0
  124. package/dist/src/gateway/providers.js +2451 -0
  125. package/dist/src/gateway/providers.js.map +1 -0
  126. package/dist/src/gateway/server.d.ts +57 -0
  127. package/dist/src/gateway/server.js +264 -0
  128. package/dist/src/gateway/server.js.map +1 -0
  129. package/dist/src/gateway/service.d.ts +449 -0
  130. package/dist/src/gateway/service.js +4831 -0
  131. package/dist/src/gateway/service.js.map +1 -0
  132. package/dist/src/gateway/store.d.ts +340 -0
  133. package/dist/src/gateway/store.js +4047 -0
  134. package/dist/src/gateway/store.js.map +1 -0
  135. package/dist/src/gateway/types.d.ts +514 -0
  136. package/dist/src/gateway/types.js +414 -0
  137. package/dist/src/gateway/types.js.map +1 -0
  138. package/dist/src/mutex.d.ts +4 -0
  139. package/dist/src/mutex.js +23 -0
  140. package/dist/src/mutex.js.map +1 -0
  141. package/docs/DESIGN.md +134 -0
  142. package/docs/GATEWAY-ARCHITECTURE.md +858 -0
  143. package/package.json +80 -0
  144. package/skills/embassy-peer/SKILL.md +198 -0
  145. package/skills/embassy-peer/agents/openai.yaml +4 -0
@@ -0,0 +1,540 @@
1
+ /**
2
+ * Pure delivery lifecycle for one accepted Embassy message.
3
+ *
4
+ * This module deliberately owns no timers, I/O, message bodies, provider
5
+ * handles, or reply correlation. Callers feed it observed events and execute
6
+ * the returned effects. That keeps the terminal decision independently
7
+ * testable while the service remains responsible for serialization.
8
+ * Event timestamps are trusted, normalized controller inputs; untrusted wire
9
+ * values must be validated before they reach this reducer.
10
+ */
11
+ export const deliveryPhases = [
12
+ "queued",
13
+ "dispatching",
14
+ "transport_written",
15
+ "awaiting_terminal",
16
+ "terminal",
17
+ ];
18
+ export const deliveryTerminalOutcomes = [
19
+ "delivered",
20
+ "unconfirmed",
21
+ "expired",
22
+ "failed",
23
+ "ambiguous",
24
+ "cancelled",
25
+ ];
26
+ export const deliveryEventTypes = [
27
+ "dispatch_requested",
28
+ "dispatch_retry_due",
29
+ "dispatch_clean_prewrite_failed",
30
+ "dispatch_ambiguous",
31
+ "transport_written",
32
+ "await_terminal",
33
+ "provider_held",
34
+ "provider_released",
35
+ "provider_denied",
36
+ "provider_expired",
37
+ "provider_failed",
38
+ "provider_unconfirmed",
39
+ "route_terminated",
40
+ "external_settlement",
41
+ "stall_due",
42
+ "deadline_due",
43
+ "cancel",
44
+ "shutdown",
45
+ "native_receipt_confirmed",
46
+ "native_receipt_clean_prewrite_failed",
47
+ "native_receipt_retry_due",
48
+ "native_receipt_ambiguous",
49
+ ];
50
+ /** Provider terminal evidence must be observed strictly before the deadline. */
51
+ export function arbitrateDeliveryDeadline(observedAt, deadlineAt) {
52
+ return observedAt < deadlineAt
53
+ ? "provider_terminal_wins"
54
+ : "deadline_wins";
55
+ }
56
+ export function createDeliveryMachine(input) {
57
+ assertFiniteTime(input.enqueuedAt, "enqueuedAt");
58
+ assertFiniteTime(input.stallAt, "stallAt");
59
+ assertFiniteTime(input.deadlineAt, "deadlineAt");
60
+ if (!(input.enqueuedAt <= input.stallAt && input.stallAt < input.deadlineAt)) {
61
+ throw new RangeError("Delivery times must satisfy enqueuedAt <= stallAt < deadlineAt.");
62
+ }
63
+ const maxCleanPrewriteRetries = nonnegativeInteger(input.maxCleanPrewriteRetries ?? 0, "maxCleanPrewriteRetries");
64
+ const maxNativeReceiptCleanPrewriteRetries = nonnegativeInteger(input.maxNativeReceiptCleanPrewriteRetries ?? 0, "maxNativeReceiptCleanPrewriteRetries");
65
+ return {
66
+ phase: "queued",
67
+ enqueuedAt: input.enqueuedAt,
68
+ stallAt: input.stallAt,
69
+ deadlineAt: input.deadlineAt,
70
+ maxCleanPrewriteRetries,
71
+ dispatchAttempt: 0,
72
+ dispatchRetryAt: null,
73
+ writeEvidence: "none",
74
+ uncertaintyCode: null,
75
+ approvalProgress: "none",
76
+ stall: "pending",
77
+ nativeReceipt: input.nativeReceipt === true
78
+ ? {
79
+ phase: "open",
80
+ maxCleanPrewriteRetries: maxNativeReceiptCleanPrewriteRetries,
81
+ }
82
+ : { phase: "absent" },
83
+ };
84
+ }
85
+ export function isTerminalDeliveryMachine(state) {
86
+ return state.phase === "terminal";
87
+ }
88
+ export function projectDelivery(state, now) {
89
+ assertFiniteTime(now, "now");
90
+ if (state.phase === "terminal") {
91
+ return {
92
+ phase: state.phase,
93
+ publicState: state.outcome,
94
+ terminal: true,
95
+ stalled: state.stall === "emitted",
96
+ outcome: state.outcome,
97
+ approvalProgress: state.approvalProgress,
98
+ writeEvidence: state.writeEvidence,
99
+ nativeReceiptPhase: state.nativeReceipt.phase,
100
+ };
101
+ }
102
+ return {
103
+ phase: state.phase,
104
+ publicState: state.stall === "emitted" ? "stalled" : state.phase,
105
+ terminal: false,
106
+ stalled: state.stall === "emitted",
107
+ pendingForMs: Math.max(0, now - state.enqueuedAt),
108
+ approvalProgress: state.approvalProgress,
109
+ writeEvidence: state.writeEvidence,
110
+ nativeReceiptPhase: state.nativeReceipt.phase,
111
+ };
112
+ }
113
+ /** Timer projection; scheduling remains a controller responsibility. */
114
+ export function projectDeliveryWakeups(state) {
115
+ const nativeReceiptRetryAt = state.nativeReceipt.phase === "retry_wait"
116
+ ? state.nativeReceipt.retryAt
117
+ : undefined;
118
+ if (state.phase === "terminal") {
119
+ return nativeReceiptRetryAt === undefined
120
+ ? {}
121
+ : { nativeReceiptRetryAt };
122
+ }
123
+ return {
124
+ ...(state.stall === "pending" ? { stallAt: state.stallAt } : {}),
125
+ deadlineAt: state.deadlineAt,
126
+ ...(state.dispatchRetryAt === null
127
+ ? {}
128
+ : { dispatchRetryAt: state.dispatchRetryAt }),
129
+ ...(nativeReceiptRetryAt === undefined ? {} : { nativeReceiptRetryAt }),
130
+ };
131
+ }
132
+ export function transitionDelivery(state, event) {
133
+ if (isNativeReceiptEvent(event)) {
134
+ return transitionDeliveryNativeReceipt(state, event);
135
+ }
136
+ if (state.phase === "terminal")
137
+ return unchanged(state);
138
+ switch (event.type) {
139
+ case "dispatch_requested":
140
+ if (state.phase !== "queued" ||
141
+ state.dispatchAttempt !== 0 ||
142
+ state.dispatchRetryAt !== null ||
143
+ event.at >= state.deadlineAt) {
144
+ return event.at >= state.deadlineAt
145
+ ? settleAtDeadline(state, event.at)
146
+ : unchanged(state);
147
+ }
148
+ return {
149
+ state: {
150
+ ...state,
151
+ phase: "dispatching",
152
+ dispatchAttempt: 1,
153
+ },
154
+ effects: [{ type: "dispatch", attempt: 1 }],
155
+ };
156
+ case "dispatch_retry_due":
157
+ if (state.phase !== "queued" ||
158
+ state.dispatchRetryAt === null ||
159
+ event.at < state.dispatchRetryAt) {
160
+ return event.at >= state.deadlineAt
161
+ ? settleAtDeadline(state, event.at)
162
+ : unchanged(state);
163
+ }
164
+ if (event.at >= state.deadlineAt)
165
+ return settleAtDeadline(state, event.at);
166
+ return {
167
+ state: {
168
+ ...state,
169
+ phase: "dispatching",
170
+ dispatchAttempt: state.dispatchAttempt + 1,
171
+ dispatchRetryAt: null,
172
+ },
173
+ effects: [
174
+ { type: "dispatch", attempt: state.dispatchAttempt + 1 },
175
+ ],
176
+ };
177
+ case "dispatch_clean_prewrite_failed": {
178
+ if (state.phase !== "dispatching")
179
+ return unchanged(state);
180
+ if (event.at >= state.deadlineAt)
181
+ return settleAtDeadline(state, event.at);
182
+ const canRetry = state.writeEvidence === "none" &&
183
+ state.dispatchAttempt <= state.maxCleanPrewriteRetries &&
184
+ event.retryAt > event.at &&
185
+ event.retryAt < state.deadlineAt;
186
+ if (!canRetry) {
187
+ return terminalize(state, "failed", event.at, event.safeErrorCode);
188
+ }
189
+ return {
190
+ state: {
191
+ ...state,
192
+ phase: "queued",
193
+ dispatchRetryAt: event.retryAt,
194
+ },
195
+ effects: [
196
+ {
197
+ type: "schedule_dispatch_retry",
198
+ attempt: state.dispatchAttempt + 1,
199
+ retryAt: event.retryAt,
200
+ },
201
+ ],
202
+ };
203
+ }
204
+ case "dispatch_ambiguous": {
205
+ if (!hasDispatchStarted(state))
206
+ return unchanged(state);
207
+ if (state.writeEvidence === "transport_written") {
208
+ return event.at >= state.deadlineAt
209
+ ? settleAtDeadline(state, event.at)
210
+ : unchanged(state);
211
+ }
212
+ if (state.writeEvidence === "transport_uncertain" &&
213
+ event.at < state.deadlineAt) {
214
+ return unchanged(state);
215
+ }
216
+ const uncertain = {
217
+ ...state,
218
+ phase: "awaiting_terminal",
219
+ writeEvidence: "transport_uncertain",
220
+ uncertaintyCode: event.safeErrorCode,
221
+ };
222
+ if (event.at >= state.deadlineAt) {
223
+ return settleAtDeadline(uncertain, event.at);
224
+ }
225
+ return {
226
+ state: uncertain,
227
+ effects: [
228
+ { type: "record_progress", progress: "transport_uncertain" },
229
+ ],
230
+ };
231
+ }
232
+ case "transport_written":
233
+ if (!hasDispatchStarted(state))
234
+ return unchanged(state);
235
+ if (arbitrateDeliveryDeadline(event.observedAt, state.deadlineAt) ===
236
+ "deadline_wins") {
237
+ return settleAtDeadline(state, event.observedAt);
238
+ }
239
+ return {
240
+ state: {
241
+ ...state,
242
+ phase: state.phase === "awaiting_terminal"
243
+ ? "awaiting_terminal"
244
+ : "transport_written",
245
+ writeEvidence: "transport_written",
246
+ uncertaintyCode: null,
247
+ },
248
+ effects: [
249
+ { type: "record_progress", progress: "transport_written" },
250
+ ],
251
+ };
252
+ case "await_terminal":
253
+ if (!hasDispatchStarted(state))
254
+ return unchanged(state);
255
+ if (event.at >= state.deadlineAt)
256
+ return settleAtDeadline(state, event.at);
257
+ if (state.phase !== "dispatching" &&
258
+ state.phase !== "transport_written") {
259
+ return unchanged(state);
260
+ }
261
+ return {
262
+ state: { ...state, phase: "awaiting_terminal" },
263
+ effects: [],
264
+ };
265
+ case "provider_held":
266
+ if (!hasDispatchStarted(state))
267
+ return unchanged(state);
268
+ if (arbitrateDeliveryDeadline(event.observedAt, state.deadlineAt) ===
269
+ "deadline_wins") {
270
+ return settleAtDeadline(state, event.observedAt);
271
+ }
272
+ return {
273
+ state: {
274
+ ...state,
275
+ phase: "awaiting_terminal",
276
+ writeEvidence: "transport_written",
277
+ uncertaintyCode: null,
278
+ approvalProgress: "held",
279
+ },
280
+ effects: [{ type: "record_progress", progress: "held" }],
281
+ };
282
+ case "provider_released":
283
+ return providerTerminal(state, event.observedAt, "delivered");
284
+ case "provider_denied":
285
+ return providerTerminal(state, event.observedAt, "failed", event.safeErrorCode);
286
+ case "provider_expired":
287
+ return providerTerminal(state, event.observedAt, "expired", event.safeErrorCode);
288
+ case "provider_failed":
289
+ return providerTerminal(state, event.observedAt, "failed", event.safeErrorCode);
290
+ case "provider_unconfirmed":
291
+ if (!hasDispatchStarted(state))
292
+ return unchanged(state);
293
+ if (event.observedAt >= state.deadlineAt) {
294
+ return settleAtDeadline(state, event.observedAt);
295
+ }
296
+ return terminalize({
297
+ ...state,
298
+ writeEvidence: "transport_written",
299
+ uncertaintyCode: null,
300
+ }, "unconfirmed", event.observedAt, event.safeErrorCode);
301
+ case "route_terminated":
302
+ if (event.at >= state.deadlineAt) {
303
+ return settleAtDeadline(state, event.at);
304
+ }
305
+ if (state.writeEvidence === "transport_written") {
306
+ return terminalize(state, "unconfirmed", event.at, "DELIVERY_UNCONFIRMED");
307
+ }
308
+ if (state.writeEvidence === "transport_uncertain") {
309
+ return terminalize(state, "ambiguous", event.at, state.uncertaintyCode ?? "DISPATCH_OUTCOME_AMBIGUOUS");
310
+ }
311
+ return terminalize(state, event.unwrittenOutcome, event.at, event.safeErrorCode);
312
+ case "external_settlement":
313
+ return terminalize(state, event.outcome, event.at, event.safeErrorCode);
314
+ case "stall_due":
315
+ if (event.at >= state.deadlineAt)
316
+ return settleAtDeadline(state, event.at);
317
+ if (state.stall === "emitted" || event.at < state.stallAt) {
318
+ return unchanged(state);
319
+ }
320
+ return {
321
+ state: { ...state, stall: "emitted" },
322
+ effects: [
323
+ {
324
+ type: "publish_stall",
325
+ pendingForMs: Math.max(0, event.at - state.enqueuedAt),
326
+ },
327
+ ],
328
+ };
329
+ case "deadline_due":
330
+ return event.at < state.deadlineAt
331
+ ? unchanged(state)
332
+ : settleAtDeadline(state, event.at);
333
+ case "cancel":
334
+ if (event.at >= state.deadlineAt)
335
+ return settleAtDeadline(state, event.at);
336
+ return terminalize(state, "cancelled", event.at, event.safeErrorCode);
337
+ case "shutdown":
338
+ if (event.at >= state.deadlineAt)
339
+ return settleAtDeadline(state, event.at);
340
+ if (state.writeEvidence === "transport_written") {
341
+ return terminalize(state, "unconfirmed", event.at, "DELIVERY_UNCONFIRMED");
342
+ }
343
+ if (state.writeEvidence === "transport_uncertain") {
344
+ return terminalize(state, "ambiguous", event.at, state.uncertaintyCode ?? "DISPATCH_OUTCOME_AMBIGUOUS");
345
+ }
346
+ return terminalize(state, "cancelled", event.at, "GATEWAY_SHUTDOWN");
347
+ default:
348
+ return assertNever(event);
349
+ }
350
+ }
351
+ function transitionDeliveryNativeReceipt(state, event) {
352
+ if (state.phase !== "terminal")
353
+ return unchanged(state);
354
+ const transition = transitionNativeReceipt(state.nativeReceipt, event);
355
+ if (transition.state === state.nativeReceipt)
356
+ return unchanged(state);
357
+ return {
358
+ state: { ...state, nativeReceipt: transition.state },
359
+ effects: transition.effects,
360
+ };
361
+ }
362
+ /**
363
+ * Child lifecycle for notifying a native sender about the already-decided
364
+ * delivery outcome. It cannot alter the parent's terminal outcome.
365
+ */
366
+ export function transitionNativeReceipt(state, event) {
367
+ switch (event.type) {
368
+ case "native_receipt_confirmed":
369
+ if (state.phase !== "sending")
370
+ return unchangedNative(state);
371
+ return {
372
+ state: {
373
+ phase: "confirmed",
374
+ notification: state.notification,
375
+ attempts: state.attempt,
376
+ },
377
+ effects: [],
378
+ };
379
+ case "native_receipt_clean_prewrite_failed":
380
+ if (state.phase !== "sending")
381
+ return unchangedNative(state);
382
+ if (state.attempt <= state.maxCleanPrewriteRetries &&
383
+ event.retryAt > event.at) {
384
+ return {
385
+ state: {
386
+ phase: "retry_wait",
387
+ notification: state.notification,
388
+ attempt: state.attempt,
389
+ retryAt: event.retryAt,
390
+ maxCleanPrewriteRetries: state.maxCleanPrewriteRetries,
391
+ },
392
+ effects: [
393
+ {
394
+ type: "schedule_native_receipt_retry",
395
+ attempt: state.attempt + 1,
396
+ retryAt: event.retryAt,
397
+ },
398
+ ],
399
+ };
400
+ }
401
+ return abandonNativeReceipt(state.notification, state.attempt, "clean_prewrite_retries_exhausted");
402
+ case "native_receipt_retry_due":
403
+ if (state.phase !== "retry_wait" ||
404
+ event.at < state.retryAt) {
405
+ return unchangedNative(state);
406
+ }
407
+ return {
408
+ state: {
409
+ phase: "sending",
410
+ notification: state.notification,
411
+ attempt: state.attempt + 1,
412
+ maxCleanPrewriteRetries: state.maxCleanPrewriteRetries,
413
+ },
414
+ effects: [
415
+ {
416
+ type: "send_native_receipt",
417
+ notification: state.notification,
418
+ attempt: state.attempt + 1,
419
+ },
420
+ ],
421
+ };
422
+ case "native_receipt_ambiguous":
423
+ if (state.phase !== "sending")
424
+ return unchangedNative(state);
425
+ return abandonNativeReceipt(state.notification, state.attempt, "ambiguous_write");
426
+ default:
427
+ return assertNever(event);
428
+ }
429
+ }
430
+ function providerTerminal(state, observedAt, outcome, safeErrorCode) {
431
+ if (!hasDispatchStarted(state))
432
+ return unchanged(state);
433
+ if (arbitrateDeliveryDeadline(observedAt, state.deadlineAt) === "deadline_wins") {
434
+ return settleAtDeadline(state, observedAt);
435
+ }
436
+ return terminalize(state, outcome, observedAt, safeErrorCode);
437
+ }
438
+ function settleAtDeadline(state, observedAt) {
439
+ const outcome = state.writeEvidence === "transport_written"
440
+ ? "unconfirmed"
441
+ : state.writeEvidence === "transport_uncertain"
442
+ ? "ambiguous"
443
+ : "expired";
444
+ const safeErrorCode = outcome === "unconfirmed"
445
+ ? "DELIVERY_UNCONFIRMED"
446
+ : outcome === "ambiguous"
447
+ ? (state.uncertaintyCode ?? "DISPATCH_OUTCOME_AMBIGUOUS")
448
+ : "DELIVERY_DEADLINE_EXPIRED";
449
+ return terminalize(state, outcome, state.deadlineAt, safeErrorCode);
450
+ }
451
+ function terminalize(state, outcome, terminalAt, safeErrorCode) {
452
+ const notification = nativeNotification(outcome, safeErrorCode);
453
+ const armed = armNativeReceipt(state.nativeReceipt, notification);
454
+ const terminal = {
455
+ ...state,
456
+ phase: "terminal",
457
+ outcome,
458
+ terminalAt,
459
+ dispatchRetryAt: null,
460
+ nativeReceipt: armed.state,
461
+ ...(safeErrorCode === undefined ? {} : { safeErrorCode }),
462
+ };
463
+ return {
464
+ state: terminal,
465
+ effects: [
466
+ {
467
+ type: "settle_delivery",
468
+ outcome,
469
+ terminalAt,
470
+ ...(safeErrorCode === undefined ? {} : { safeErrorCode }),
471
+ },
472
+ ...armed.effects,
473
+ ],
474
+ };
475
+ }
476
+ function armNativeReceipt(state, notification) {
477
+ if (state.phase !== "open")
478
+ return unchangedNative(state);
479
+ const sending = {
480
+ phase: "sending",
481
+ notification,
482
+ attempt: 1,
483
+ maxCleanPrewriteRetries: state.maxCleanPrewriteRetries,
484
+ };
485
+ return {
486
+ state: sending,
487
+ effects: [
488
+ { type: "send_native_receipt", notification, attempt: 1 },
489
+ ],
490
+ };
491
+ }
492
+ function nativeNotification(outcome, safeErrorCode) {
493
+ return outcome === "delivered"
494
+ ? { status: "delivered" }
495
+ : {
496
+ status: "expired",
497
+ diagnosticCode: safeErrorCode ??
498
+ (outcome === "unconfirmed"
499
+ ? "DELIVERY_UNCONFIRMED"
500
+ : `DELIVERY_${outcome.toUpperCase()}`),
501
+ };
502
+ }
503
+ function abandonNativeReceipt(notification, attempts, reason) {
504
+ return {
505
+ state: {
506
+ phase: "write_unconfirmed",
507
+ notification,
508
+ attempts,
509
+ reason,
510
+ },
511
+ effects: [{ type: "release_native_receipt", reason }],
512
+ };
513
+ }
514
+ function hasDispatchStarted(state) {
515
+ return state.dispatchAttempt > 0 && state.dispatchRetryAt === null;
516
+ }
517
+ function isNativeReceiptEvent(event) {
518
+ return event.type.startsWith("native_receipt_");
519
+ }
520
+ function unchanged(state) {
521
+ return { state, effects: [] };
522
+ }
523
+ function unchangedNative(state) {
524
+ return { state, effects: [] };
525
+ }
526
+ function assertFiniteTime(value, label) {
527
+ if (!Number.isFinite(value)) {
528
+ throw new RangeError(`${label} must be a finite number.`);
529
+ }
530
+ }
531
+ function nonnegativeInteger(value, label) {
532
+ if (!Number.isSafeInteger(value) || value < 0) {
533
+ throw new RangeError(`${label} must be a non-negative safe integer.`);
534
+ }
535
+ return value;
536
+ }
537
+ function assertNever(value) {
538
+ throw new Error(`Unreachable delivery event: ${JSON.stringify(value)}`);
539
+ }
540
+ //# sourceMappingURL=delivery-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-machine.js","sourceRoot":"","sources":["../../../src/gateway/delivery-machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ChildProcessWithoutNullStreams } from "node:child_process";
2
+ export type GatewayInstanceLease = Readonly<{
3
+ /** Resolves only if the host-wide kernel lease is lost unexpectedly. */
4
+ lost: Promise<void>;
5
+ isLost: () => boolean;
6
+ close: () => Promise<void>;
7
+ }>;
8
+ export type GatewayInstanceLeaseDependencies = Readonly<{
9
+ hostLeaseExitTimeoutMs?: number;
10
+ spawnLeaseHelper?: (command: string, args: string[], options: Readonly<{
11
+ env: NodeJS.ProcessEnv;
12
+ stdio: ["pipe", "pipe", "pipe"];
13
+ }>) => ChildProcessWithoutNullStreams;
14
+ }>;
15
+ /**
16
+ * Acquire the one per-login-user Embassy controller lease. The fixed lease is
17
+ * deliberately independent of EMBASSY_STATE_DIR. For one release, a genuine
18
+ * legacy default state root is also leased so a still-running pre-rename
19
+ * gateway cannot advertise a second Codex peer.
20
+ */
21
+ export declare function acquireGatewayInstanceLease(suppliedLoginHome: string, dependencies?: GatewayInstanceLeaseDependencies): Promise<GatewayInstanceLease>;