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,190 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { getDashboardCopy, } from "./dashboard-copy.js";
3
+ import { renderLiveDashboardAssets } from "./live-dashboard-assets.js";
4
+ import { createLiveDashboardBootstrap, } from "./live-dashboard-bootstrap.js";
5
+ import { createLiveDashboardRequestHandler, } from "./live-dashboard-http.js";
6
+ import { liveDashboardSecurityHeaders } from "./live-dashboard-protocol.js";
7
+ import { bindLiveDashboardServer, defaultLiveDashboardHttpFactory, } from "./live-dashboard-server.js";
8
+ import { createLiveDashboardStreamHub, } from "./live-dashboard-stream.js";
9
+ export class LiveDashboardStartupCancelledError extends Error {
10
+ code = "LIVE_DASHBOARD_START_CANCELLED";
11
+ constructor() {
12
+ super("Live dashboard startup was cancelled.");
13
+ this.name = "LiveDashboardStartupCancelledError";
14
+ }
15
+ }
16
+ export function isLiveDashboardStartupCancelled(error) {
17
+ return (error instanceof LiveDashboardStartupCancelledError ||
18
+ (typeof error === "object" &&
19
+ error !== null &&
20
+ "code" in error &&
21
+ error.code === "LIVE_DASHBOARD_START_CANCELLED"));
22
+ }
23
+ function throwIfStartupCancelled(signal) {
24
+ if (signal?.aborted === true) {
25
+ throw new LiveDashboardStartupCancelledError();
26
+ }
27
+ }
28
+ async function awaitStartupStep(operation, signal, onLateSuccess) {
29
+ if (signal === undefined)
30
+ return operation;
31
+ if (signal.aborted) {
32
+ void operation.then((value) => Promise.resolve(onLateSuccess?.(value)).catch(() => undefined), () => undefined);
33
+ throw new LiveDashboardStartupCancelledError();
34
+ }
35
+ return await new Promise((resolve, reject) => {
36
+ let settled = false;
37
+ const onAbort = () => {
38
+ if (settled)
39
+ return;
40
+ settled = true;
41
+ signal.removeEventListener("abort", onAbort);
42
+ reject(new LiveDashboardStartupCancelledError());
43
+ };
44
+ signal.addEventListener("abort", onAbort, { once: true });
45
+ void operation.then((value) => {
46
+ if (settled) {
47
+ void Promise.resolve(onLateSuccess?.(value)).catch(() => undefined);
48
+ return;
49
+ }
50
+ settled = true;
51
+ signal.removeEventListener("abort", onAbort);
52
+ resolve(value);
53
+ }, (error) => {
54
+ if (settled)
55
+ return;
56
+ settled = true;
57
+ signal.removeEventListener("abort", onAbort);
58
+ reject(error);
59
+ });
60
+ });
61
+ }
62
+ function randomBase64Url(size, random) {
63
+ const value = Buffer.from(random(size)).toString("base64url");
64
+ const expectedLength = size === 16 ? 22 : size === 32 ? 43 : undefined;
65
+ if (expectedLength === undefined ||
66
+ value.length !== expectedLength ||
67
+ !/^[A-Za-z0-9_-]+$/u.test(value)) {
68
+ throw new Error("LIVE_DASHBOARD_RANDOM_SOURCE_INVALID");
69
+ }
70
+ return value;
71
+ }
72
+ function notReadyHandler(lang) {
73
+ const body = `${getDashboardCopy(lang)["live.http.starting"]}\n`;
74
+ return (_request, response) => {
75
+ if (response.headersSent) {
76
+ response.end();
77
+ return;
78
+ }
79
+ response.writeHead(503, {
80
+ ...liveDashboardSecurityHeaders(),
81
+ "Content-Type": "text/plain; charset=utf-8",
82
+ "Content-Length": String(Buffer.byteLength(body, "utf8")),
83
+ });
84
+ response.end(body);
85
+ };
86
+ }
87
+ export async function startLiveDashboard(options) {
88
+ throwIfStartupCancelled(options.signal);
89
+ const dependencies = options.dependencies ?? {};
90
+ const random = dependencies.random ?? randomBytes;
91
+ const http = dependencies.http ?? defaultLiveDashboardHttpFactory;
92
+ const locale = options.locale ?? "en";
93
+ const instancePath = `/${randomBase64Url(16, random)}`;
94
+ const sessionSecret = randomBase64Url(32, random);
95
+ const assets = renderLiveDashboardAssets(locale);
96
+ const hub = createLiveDashboardStreamHub({
97
+ observer: options.observer,
98
+ ...(dependencies.clock === undefined ? {} : { clock: dependencies.clock }),
99
+ });
100
+ let activeHandler = notReadyHandler(locale);
101
+ const server = http.createServer((request, response) => {
102
+ void activeHandler(request, response);
103
+ });
104
+ let bound;
105
+ let bootstrap;
106
+ try {
107
+ bound = await bindLiveDashboardServer(server, options.signal);
108
+ throwIfStartupCancelled(options.signal);
109
+ const expectedHost = `${bound.address.host}:${bound.address.port}`;
110
+ const expectedOrigin = `http://${expectedHost}`;
111
+ const bootstrapOperation = createLiveDashboardBootstrap({
112
+ privateStateRoot: options.privateStateRoot,
113
+ bootstrapTargetWithoutFragment: `${expectedOrigin}${instancePath}/bootstrap`,
114
+ lang: locale,
115
+ random,
116
+ ...(dependencies.fileSystem === undefined
117
+ ? {}
118
+ : { fileSystem: dependencies.fileSystem }),
119
+ });
120
+ bootstrap = await awaitStartupStep(bootstrapOperation, options.signal, async (lateBootstrap) => await lateBootstrap.close());
121
+ throwIfStartupCancelled(options.signal);
122
+ activeHandler = createLiveDashboardRequestHandler({
123
+ instancePath,
124
+ expectedHost,
125
+ expectedOrigin,
126
+ capability: bootstrap.capability,
127
+ sessionSecret,
128
+ cookieName: "embassy_live",
129
+ lang: locale,
130
+ assets,
131
+ hub,
132
+ actions: options.actions,
133
+ ...(dependencies.clock === undefined
134
+ ? {}
135
+ : { now: dependencies.clock.now }),
136
+ });
137
+ if (dependencies.openBootstrap !== undefined) {
138
+ await awaitStartupStep(Promise.resolve(dependencies.openBootstrap(bootstrap.bootstrapPath)), options.signal);
139
+ }
140
+ throwIfStartupCancelled(options.signal);
141
+ }
142
+ catch (error) {
143
+ hub.shutdown();
144
+ await bound?.close().catch(() => undefined);
145
+ await bootstrap?.close().catch(() => undefined);
146
+ if (options.signal?.aborted === true) {
147
+ throw new LiveDashboardStartupCancelledError();
148
+ }
149
+ throw error;
150
+ }
151
+ let closeInFlight;
152
+ const close = async () => {
153
+ if (closeInFlight !== undefined)
154
+ return closeInFlight;
155
+ closeInFlight = (async () => {
156
+ options.signal?.removeEventListener("abort", onAbortAfterReady);
157
+ hub.shutdown();
158
+ let closeError;
159
+ try {
160
+ await bound.close();
161
+ }
162
+ catch (error) {
163
+ closeError = error;
164
+ }
165
+ try {
166
+ await bootstrap.close();
167
+ }
168
+ catch (error) {
169
+ closeError ??= error;
170
+ }
171
+ if (closeError !== undefined)
172
+ throw closeError;
173
+ })();
174
+ return closeInFlight;
175
+ };
176
+ const onAbortAfterReady = () => {
177
+ void close().catch(() => undefined);
178
+ };
179
+ options.signal?.addEventListener("abort", onAbortAfterReady, { once: true });
180
+ if (options.signal?.aborted === true) {
181
+ await close();
182
+ throw new LiveDashboardStartupCancelledError();
183
+ }
184
+ return {
185
+ address: bound.address,
186
+ bootstrapPath: bootstrap.bootstrapPath,
187
+ close,
188
+ };
189
+ }
190
+ //# sourceMappingURL=live-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-dashboard.js","sourceRoot":"","sources":["../../../src/gateway/live-dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const dashboardLocales: readonly ["en", "zh-CN"];
2
+ export type DashboardLocale = (typeof dashboardLocales)[number];
3
+ export declare function isDashboardLocale(value: unknown): value is DashboardLocale;
4
+ export declare function assertDashboardLocale(value: unknown): asserts value is DashboardLocale;
@@ -0,0 +1,10 @@
1
+ export const dashboardLocales = ["en", "zh-CN"];
2
+ export function isDashboardLocale(value) {
3
+ return value === "en" || value === "zh-CN";
4
+ }
5
+ export function assertDashboardLocale(value) {
6
+ if (!isDashboardLocale(value)) {
7
+ throw new Error("DASHBOARD_LOCALE_UNSUPPORTED");
8
+ }
9
+ }
10
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../../../src/gateway/locale.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,CAAU,CAAC;AAIzD,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAc;IAEd,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,97 @@
1
+ export declare const progressWatchPhases: readonly ["quiet", "episode"];
2
+ export type ProgressWatchPhase = (typeof progressWatchPhases)[number];
3
+ export declare const progressWatchCapabilities: readonly ["conversation", "route"];
4
+ export type ProgressWatchCapability = (typeof progressWatchCapabilities)[number];
5
+ export declare const progressWatchOutcomes: readonly ["done", "unresponsive", "endpoint_retired", "disabled"];
6
+ export type ProgressWatchOutcome = (typeof progressWatchOutcomes)[number];
7
+ export declare const progressWatchJournalKinds: readonly ["opened", "activity", "nudge", "worker_reported_complete", "capability_degraded", "done", "unresponsive", "endpoint_retired", "disabled"];
8
+ export type ProgressWatchJournalKind = (typeof progressWatchJournalKinds)[number];
9
+ export declare const PROGRESS_WATCH_DEFAULT_IDLE_MS: number;
10
+ export declare const PROGRESS_WATCH_MIN_IDLE_MS = 60000;
11
+ export declare const PROGRESS_WATCH_MAX_IDLE_MS: number;
12
+ export declare const PROGRESS_WATCH_DEFAULT_CAPACITY = 32;
13
+ export declare const PROGRESS_WATCH_HARD_CAPACITY = 256;
14
+ /**
15
+ * Durable, content-free liveness state. Route leases keep a watch attached to
16
+ * the exact consent edge that opened it; they are never publicly projected.
17
+ */
18
+ export type ProgressWatchMachine = Readonly<{
19
+ conversationId: string;
20
+ ownerAlias: string;
21
+ workerAlias: string;
22
+ ownerLease: string;
23
+ workerLease: string;
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ lastActivityAt: string;
27
+ idleMs: number;
28
+ phase: ProgressWatchPhase;
29
+ nudgeCount: 0 | 1 | 2;
30
+ nextActionAt: string;
31
+ capability: ProgressWatchCapability;
32
+ degradedNoticeSent: boolean;
33
+ workerReportedCompleteAt?: string;
34
+ }>;
35
+ export type ProgressWatchJournalEvent = Readonly<{
36
+ sequence: number;
37
+ timestamp: string;
38
+ conversationId: string;
39
+ ownerAlias: string;
40
+ workerAlias: string;
41
+ kind: ProgressWatchJournalKind;
42
+ nudgeNumber?: 1 | 2;
43
+ }>;
44
+ export type ProgressWatchEvent = Readonly<{
45
+ type: "activity";
46
+ at: number;
47
+ workerReportedComplete?: true;
48
+ }> | Readonly<{
49
+ type: "route_activity";
50
+ at: number;
51
+ }> | Readonly<{
52
+ type: "due";
53
+ at: number;
54
+ bothIdle: boolean;
55
+ endpointsPresent: boolean;
56
+ }> | Readonly<{
57
+ type: "restart";
58
+ at: number;
59
+ conversationCapabilityRestored: boolean;
60
+ }> | Readonly<{
61
+ type: "nudge_deferred";
62
+ at: number;
63
+ retryAt: number;
64
+ }> | Readonly<{
65
+ type: "owner_done";
66
+ at: number;
67
+ }> | Readonly<{
68
+ type: "endpoint_retired";
69
+ at: number;
70
+ }> | Readonly<{
71
+ type: "disabled";
72
+ at: number;
73
+ }>;
74
+ export type ProgressWatchEffect = Readonly<{
75
+ type: "send_nudge";
76
+ nudgeNumber: 1 | 2;
77
+ }> | Readonly<{
78
+ type: "notify_capability_degraded";
79
+ }> | Readonly<{
80
+ type: "settled";
81
+ outcome: ProgressWatchOutcome;
82
+ }>;
83
+ export type ProgressWatchTransition = Readonly<{
84
+ state: ProgressWatchMachine | null;
85
+ effects: readonly ProgressWatchEffect[];
86
+ }>;
87
+ export declare function createProgressWatchMachine(input: Readonly<{
88
+ conversationId: string;
89
+ ownerAlias: string;
90
+ workerAlias: string;
91
+ ownerLease: string;
92
+ workerLease: string;
93
+ idleMs: number;
94
+ at: number;
95
+ }>): ProgressWatchMachine;
96
+ /** Pure, deterministic owner-ended progress-watch transition function. */
97
+ export declare function transitionProgressWatch(state: ProgressWatchMachine, event: ProgressWatchEvent): ProgressWatchTransition;
@@ -0,0 +1,172 @@
1
+ export const progressWatchPhases = ["quiet", "episode"];
2
+ export const progressWatchCapabilities = ["conversation", "route"];
3
+ export const progressWatchOutcomes = [
4
+ "done",
5
+ "unresponsive",
6
+ "endpoint_retired",
7
+ "disabled",
8
+ ];
9
+ export const progressWatchJournalKinds = [
10
+ "opened",
11
+ "activity",
12
+ "nudge",
13
+ "worker_reported_complete",
14
+ "capability_degraded",
15
+ "done",
16
+ "unresponsive",
17
+ "endpoint_retired",
18
+ "disabled",
19
+ ];
20
+ export const PROGRESS_WATCH_DEFAULT_IDLE_MS = 5 * 60_000;
21
+ export const PROGRESS_WATCH_MIN_IDLE_MS = 60_000;
22
+ export const PROGRESS_WATCH_MAX_IDLE_MS = 24 * 60 * 60_000;
23
+ export const PROGRESS_WATCH_DEFAULT_CAPACITY = 32;
24
+ export const PROGRESS_WATCH_HARD_CAPACITY = 256;
25
+ function iso(at) {
26
+ if (!Number.isFinite(at))
27
+ throw new RangeError("INVALID_PROGRESS_WATCH_TIME");
28
+ return new Date(at).toISOString();
29
+ }
30
+ function plus(at, delayMs) {
31
+ return iso(at + delayMs);
32
+ }
33
+ function settle(outcome) {
34
+ return { state: null, effects: [{ type: "settled", outcome }] };
35
+ }
36
+ export function createProgressWatchMachine(input) {
37
+ if (!Number.isSafeInteger(input.idleMs) ||
38
+ input.idleMs < PROGRESS_WATCH_MIN_IDLE_MS ||
39
+ input.idleMs > PROGRESS_WATCH_MAX_IDLE_MS) {
40
+ throw new RangeError("INVALID_PROGRESS_WATCH_IDLE_MS");
41
+ }
42
+ const timestamp = iso(input.at);
43
+ return {
44
+ conversationId: input.conversationId,
45
+ ownerAlias: input.ownerAlias,
46
+ workerAlias: input.workerAlias,
47
+ ownerLease: input.ownerLease,
48
+ workerLease: input.workerLease,
49
+ createdAt: timestamp,
50
+ updatedAt: timestamp,
51
+ lastActivityAt: timestamp,
52
+ idleMs: input.idleMs,
53
+ phase: "quiet",
54
+ nudgeCount: 0,
55
+ nextActionAt: plus(input.at, input.idleMs),
56
+ capability: "conversation",
57
+ degradedNoticeSent: false,
58
+ };
59
+ }
60
+ /** Pure, deterministic owner-ended progress-watch transition function. */
61
+ export function transitionProgressWatch(state, event) {
62
+ const at = event.at;
63
+ const timestamp = iso(at);
64
+ switch (event.type) {
65
+ case "owner_done":
66
+ return settle("done");
67
+ case "endpoint_retired":
68
+ return settle("endpoint_retired");
69
+ case "disabled":
70
+ return settle("disabled");
71
+ case "activity":
72
+ case "route_activity": {
73
+ const workerReportedComplete = event.type === "activity" && event.workerReportedComplete === true;
74
+ return {
75
+ state: {
76
+ ...state,
77
+ updatedAt: timestamp,
78
+ lastActivityAt: timestamp,
79
+ phase: "quiet",
80
+ nudgeCount: 0,
81
+ nextActionAt: plus(at, state.idleMs),
82
+ ...(workerReportedComplete
83
+ ? { workerReportedCompleteAt: timestamp }
84
+ : {}),
85
+ },
86
+ effects: [],
87
+ };
88
+ }
89
+ case "restart": {
90
+ if (event.conversationCapabilityRestored) {
91
+ return {
92
+ state: {
93
+ ...state,
94
+ updatedAt: timestamp,
95
+ capability: "conversation",
96
+ },
97
+ effects: [],
98
+ };
99
+ }
100
+ const notify = !state.degradedNoticeSent;
101
+ return {
102
+ state: {
103
+ ...state,
104
+ updatedAt: timestamp,
105
+ capability: "route",
106
+ degradedNoticeSent: true,
107
+ },
108
+ effects: notify ? [{ type: "notify_capability_degraded" }] : [],
109
+ };
110
+ }
111
+ case "nudge_deferred": {
112
+ if (!Number.isFinite(event.retryAt) ||
113
+ event.retryAt <= at ||
114
+ event.retryAt > at + Math.min(state.idleMs, 60_000)) {
115
+ throw new RangeError("INVALID_PROGRESS_WATCH_RETRY_AT");
116
+ }
117
+ return {
118
+ state: {
119
+ ...state,
120
+ updatedAt: timestamp,
121
+ nextActionAt: iso(event.retryAt),
122
+ },
123
+ effects: [],
124
+ };
125
+ }
126
+ case "due": {
127
+ if (at < Date.parse(state.nextActionAt)) {
128
+ return { state, effects: [] };
129
+ }
130
+ if (!event.endpointsPresent)
131
+ return settle("endpoint_retired");
132
+ if (!event.bothIdle) {
133
+ return {
134
+ state: {
135
+ ...state,
136
+ updatedAt: timestamp,
137
+ lastActivityAt: timestamp,
138
+ phase: "quiet",
139
+ nudgeCount: 0,
140
+ nextActionAt: plus(at, state.idleMs),
141
+ },
142
+ effects: [],
143
+ };
144
+ }
145
+ if (state.phase === "quiet") {
146
+ return {
147
+ state: {
148
+ ...state,
149
+ updatedAt: timestamp,
150
+ phase: "episode",
151
+ nudgeCount: 1,
152
+ nextActionAt: plus(at, state.idleMs),
153
+ },
154
+ effects: [{ type: "send_nudge", nudgeNumber: 1 }],
155
+ };
156
+ }
157
+ if (state.nudgeCount === 1) {
158
+ return {
159
+ state: {
160
+ ...state,
161
+ updatedAt: timestamp,
162
+ nudgeCount: 2,
163
+ nextActionAt: plus(at, state.idleMs * 2),
164
+ },
165
+ effects: [{ type: "send_nudge", nudgeNumber: 2 }],
166
+ };
167
+ }
168
+ return settle("unresponsive");
169
+ }
170
+ }
171
+ }
172
+ //# sourceMappingURL=progress-watch-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-watch-machine.js","sourceRoot":"","sources":["../../../src/gateway/progress-watch-machine.ts"],"names":[],"mappings":"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"}