@spine-event-engine/server 2.0.0-snapshot.22 → 2.0.0-snapshot.23

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 (126) hide show
  1. package/README.md +104 -7
  2. package/REFERENCE.md +194 -19
  3. package/dist/agent/agent-admission.d.ts +80 -0
  4. package/dist/agent/agent-admission.d.ts.map +1 -0
  5. package/dist/agent/agent-admission.js +127 -0
  6. package/dist/agent/agent-admission.js.map +1 -0
  7. package/dist/agent/agent-ai-binding.d.ts +24 -0
  8. package/dist/agent/agent-ai-binding.d.ts.map +1 -0
  9. package/dist/agent/agent-ai-binding.js +48 -0
  10. package/dist/agent/agent-ai-binding.js.map +1 -0
  11. package/dist/agent/agent-ai-runtime.d.ts +76 -0
  12. package/dist/agent/agent-ai-runtime.d.ts.map +1 -0
  13. package/dist/agent/agent-ai-runtime.js +1269 -0
  14. package/dist/agent/agent-ai-runtime.js.map +1 -0
  15. package/dist/agent/agent-execution-capacity.d.ts +43 -0
  16. package/dist/agent/agent-execution-capacity.d.ts.map +1 -0
  17. package/dist/agent/agent-execution-capacity.js +147 -0
  18. package/dist/agent/agent-execution-capacity.js.map +1 -0
  19. package/dist/agent/agent-execution-fault.d.ts +18 -0
  20. package/dist/agent/agent-execution-fault.d.ts.map +1 -0
  21. package/dist/agent/agent-execution-fault.js +31 -0
  22. package/dist/agent/agent-execution-fault.js.map +1 -0
  23. package/dist/agent/agent-execution-session.d.ts +103 -0
  24. package/dist/agent/agent-execution-session.d.ts.map +1 -0
  25. package/dist/agent/agent-execution-session.js +238 -0
  26. package/dist/agent/agent-execution-session.js.map +1 -0
  27. package/dist/agent/agent-history.d.ts +148 -0
  28. package/dist/agent/agent-history.d.ts.map +1 -0
  29. package/dist/agent/agent-history.js +340 -0
  30. package/dist/agent/agent-history.js.map +1 -0
  31. package/dist/agent/agent-interaction-audit.d.ts +58 -0
  32. package/dist/agent/agent-interaction-audit.d.ts.map +1 -0
  33. package/dist/agent/agent-interaction-audit.js +114 -0
  34. package/dist/agent/agent-interaction-audit.js.map +1 -0
  35. package/dist/agent/agent-interaction-events.d.ts +40 -0
  36. package/dist/agent/agent-interaction-events.d.ts.map +1 -0
  37. package/dist/agent/agent-interaction-events.js +129 -0
  38. package/dist/agent/agent-interaction-events.js.map +1 -0
  39. package/dist/agent/agent-mcp-budget.d.ts +125 -0
  40. package/dist/agent/agent-mcp-budget.d.ts.map +1 -0
  41. package/dist/agent/agent-mcp-budget.js +566 -0
  42. package/dist/agent/agent-mcp-budget.js.map +1 -0
  43. package/dist/agent/agent-mcp-host.d.ts +125 -0
  44. package/dist/agent/agent-mcp-host.d.ts.map +1 -0
  45. package/dist/agent/agent-mcp-host.js +15 -0
  46. package/dist/agent/agent-mcp-host.js.map +1 -0
  47. package/dist/agent/agent-mcp-runtime.d.ts +199 -0
  48. package/dist/agent/agent-mcp-runtime.d.ts.map +1 -0
  49. package/dist/agent/agent-mcp-runtime.js +621 -0
  50. package/dist/agent/agent-mcp-runtime.js.map +1 -0
  51. package/dist/agent/agent-model-selection.d.ts +129 -0
  52. package/dist/agent/agent-model-selection.d.ts.map +1 -0
  53. package/dist/agent/agent-model-selection.js +342 -0
  54. package/dist/agent/agent-model-selection.js.map +1 -0
  55. package/dist/agent/agent-read-runtime.d.ts +70 -0
  56. package/dist/agent/agent-read-runtime.d.ts.map +1 -0
  57. package/dist/agent/agent-read-runtime.js +320 -0
  58. package/dist/agent/agent-read-runtime.js.map +1 -0
  59. package/dist/agent/agent-revisions.d.ts +35 -0
  60. package/dist/agent/agent-revisions.d.ts.map +1 -0
  61. package/dist/agent/agent-revisions.js +133 -0
  62. package/dist/agent/agent-revisions.js.map +1 -0
  63. package/dist/agent/agent-scheduler.d.ts +99 -0
  64. package/dist/agent/agent-scheduler.d.ts.map +1 -0
  65. package/dist/agent/agent-scheduler.js +398 -0
  66. package/dist/agent/agent-scheduler.js.map +1 -0
  67. package/dist/bus/command-bus.d.ts +62 -0
  68. package/dist/bus/command-bus.d.ts.map +1 -1
  69. package/dist/bus/command-bus.js +51 -2
  70. package/dist/bus/command-bus.js.map +1 -1
  71. package/dist/bus/event-bus.d.ts +137 -3
  72. package/dist/bus/event-bus.d.ts.map +1 -1
  73. package/dist/bus/event-bus.js +133 -2
  74. package/dist/bus/event-bus.js.map +1 -1
  75. package/dist/bus/saved-dispatcher-binding.d.ts +96 -0
  76. package/dist/bus/saved-dispatcher-binding.d.ts.map +1 -0
  77. package/dist/bus/saved-dispatcher-binding.js +35 -0
  78. package/dist/bus/saved-dispatcher-binding.js.map +1 -0
  79. package/dist/context/bounded-context.d.ts +36 -2
  80. package/dist/context/bounded-context.d.ts.map +1 -1
  81. package/dist/context/bounded-context.js +253 -54
  82. package/dist/context/bounded-context.js.map +1 -1
  83. package/dist/context/tenant-index.d.ts +25 -0
  84. package/dist/context/tenant-index.d.ts.map +1 -1
  85. package/dist/context/tenant-index.js +45 -1
  86. package/dist/context/tenant-index.js.map +1 -1
  87. package/dist/entity/entity.d.ts +82 -3
  88. package/dist/entity/entity.d.ts.map +1 -1
  89. package/dist/entity/entity.js +121 -22
  90. package/dist/entity/entity.js.map +1 -1
  91. package/dist/handler/generated-handler-registry.js +8 -3
  92. package/dist/handler/generated-handler-registry.js.map +1 -1
  93. package/dist/handler/handler-metadata.d.ts +17 -1
  94. package/dist/handler/handler-metadata.d.ts.map +1 -1
  95. package/dist/handler/handler-metadata.js +10 -4
  96. package/dist/handler/handler-metadata.js.map +1 -1
  97. package/dist/index.d.ts +2 -2
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +1 -1
  100. package/dist/index.js.map +1 -1
  101. package/dist/repository/commit-fence.d.ts +11 -0
  102. package/dist/repository/commit-fence.d.ts.map +1 -1
  103. package/dist/repository/commit-fence.js +13 -0
  104. package/dist/repository/commit-fence.js.map +1 -1
  105. package/dist/repository/repository.d.ts +222 -13
  106. package/dist/repository/repository.d.ts.map +1 -1
  107. package/dist/repository/repository.js +2323 -123
  108. package/dist/repository/repository.js.map +1 -1
  109. package/dist/runtime/signal-publisher.d.ts +6 -0
  110. package/dist/runtime/signal-publisher.d.ts.map +1 -1
  111. package/dist/runtime/signal-publisher.js +13 -0
  112. package/dist/runtime/signal-publisher.js.map +1 -1
  113. package/dist/runtime/standalone-handler-runtime.d.ts +7 -0
  114. package/dist/runtime/standalone-handler-runtime.d.ts.map +1 -1
  115. package/dist/runtime/standalone-handler-runtime.js +148 -11
  116. package/dist/runtime/standalone-handler-runtime.js.map +1 -1
  117. package/dist/server/server.d.ts +9 -0
  118. package/dist/server/server.d.ts.map +1 -1
  119. package/dist/server/server.js +13 -1
  120. package/dist/server/server.js.map +1 -1
  121. package/dist/testing/index.d.ts +57 -1
  122. package/dist/testing/index.d.ts.map +1 -1
  123. package/dist/testing/index.js +87 -0
  124. package/dist/testing/index.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +14 -12
@@ -0,0 +1,398 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ import { toBinary } from "@bufbuild/protobuf";
15
+ import { AgentInvocationKeySchema, } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
16
+ import { AgentExecutionRecords } from "@spine-event-engine/storage/provider";
17
+ import { Time } from "@spine-event-engine/core";
18
+ import { withoutDeliveryCommitFence } from "../repository/commit-fence.js";
19
+ import { AgentExecutionCapacity } from "./agent-execution-capacity.js";
20
+ const catalogPageSize = 16;
21
+ const pendingPageSize = 16;
22
+ const maxPendingPages = 4;
23
+ const maxResidentScopes = 4;
24
+ const maxUrgentScopes = 64;
25
+ const sweepIntervalNanoseconds = 5000000000n;
26
+ /**
27
+ * Bounded, round-robin scan of provider-indexed Agent heads.
28
+ */
29
+ export class AgentScheduler {
30
+ source;
31
+ capacity;
32
+ onError;
33
+ #controller = new AbortController();
34
+ #active = new Map();
35
+ #urgent = new Map();
36
+ #resident = [];
37
+ #catalogAfter;
38
+ #catalogPage;
39
+ #catalogReady;
40
+ #catalogRequest;
41
+ #catalogDone = false;
42
+ #tenantAt = 0;
43
+ #repositoryAt = 0;
44
+ #restartAt = 0n;
45
+ #sweepStarted = false;
46
+ #sweepFirst = false;
47
+ #nextResident = 0;
48
+ #timer;
49
+ #scanning;
50
+ #closed = false;
51
+ /**
52
+ * Creates bounded discovery for the Bounded Context's registered Agent scopes.
53
+ *
54
+ * @param source Pages tenants and constructs a registered scope on demand.
55
+ * @param capacity Shared registry execution gate.
56
+ * @param onError Reports failed discovery or execution turns.
57
+ */
58
+ constructor(source, capacity, onError) {
59
+ this.source = source;
60
+ this.capacity = capacity;
61
+ this.onError = onError;
62
+ }
63
+ /**
64
+ * Starts periodic discovery, including pending work after process reconstruction.
65
+ */
66
+ start() {
67
+ this.#schedule(100);
68
+ }
69
+ /**
70
+ * Schedules a prompt bounded turn without resetting the fixed-time sweep.
71
+ *
72
+ * @param scope Newly accepted repository and tenant, when available.
73
+ */
74
+ wake(scope) {
75
+ if (this.#closed)
76
+ return;
77
+ if (scope !== undefined && !this.#urgent.has(scope.id) && this.#urgent.size < maxUrgentScopes)
78
+ this.#urgent.set(scope.id, { scope });
79
+ if (this.#timer !== undefined)
80
+ clearTimeout(this.#timer);
81
+ this.#timer = setTimeout(() => {
82
+ this.#timer = undefined;
83
+ void this.turn()
84
+ .catch(this.onError)
85
+ .finally(() => {
86
+ this.#schedule(100);
87
+ });
88
+ }, 0);
89
+ }
90
+ /**
91
+ * Reads at most four indexed pages and retains continuation across turns.
92
+ *
93
+ * @returns Completion after this bounded scan, or the scan already in progress.
94
+ */
95
+ async turn() {
96
+ if (this.#closed)
97
+ return;
98
+ if (this.#scanning !== undefined)
99
+ return this.#scanning;
100
+ const scan = this.#scan();
101
+ this.#scanning = scan;
102
+ try {
103
+ await scan;
104
+ }
105
+ finally {
106
+ this.#scanning = undefined;
107
+ }
108
+ }
109
+ async #scan() {
110
+ this.#prepareSweep();
111
+ const sweepFirst = this.#sweepFirst;
112
+ const visited = new Set();
113
+ const firstSweep = sweepFirst ? await this.#sweepPages(1, visited) : 0;
114
+ let pages = firstSweep;
115
+ pages += await this.#urgentPages(3 - pages);
116
+ pages += await this.#sweepPages(maxPendingPages - pages, visited);
117
+ if (pages > 0)
118
+ this.#sweepFirst = !sweepFirst;
119
+ }
120
+ /**
121
+ * Visits a bounded set of accepted scopes ahead of catalog rotation.
122
+ *
123
+ * @param limit Maximum indexed pages to visit.
124
+ * @returns Number of pages visited.
125
+ */
126
+ async #urgentPages(limit) {
127
+ let pages = 0;
128
+ for (const [id, resident] of this.#urgent) {
129
+ if (pages === limit || this.#closed || this.capacity.full())
130
+ break;
131
+ const { page, retry } = await this.#visit(resident);
132
+ if (!retry) {
133
+ if (page.hasMore && page.after !== undefined)
134
+ resident.cursor = page.after;
135
+ else
136
+ this.#urgent.delete(id);
137
+ }
138
+ pages += 1;
139
+ }
140
+ return pages;
141
+ }
142
+ /**
143
+ * Advances the periodic catalog sweep even under sustained accepted work.
144
+ *
145
+ * @param limit Remaining page budget.
146
+ * @param visited Residents already read in this turn.
147
+ * @returns Number of pages visited.
148
+ */
149
+ async #sweepPages(limit, visited) {
150
+ let pages = 0;
151
+ for (let considered = 0; considered < maxResidentScopes && pages < limit; considered += 1) {
152
+ if (this.#closed || this.capacity.full())
153
+ break;
154
+ if (this.#resident.length === 0)
155
+ break;
156
+ const index = this.#nextResident % this.#resident.length;
157
+ const resident = this.#resident[index];
158
+ if (resident === undefined)
159
+ break;
160
+ if (visited.has(resident)) {
161
+ this.#nextResident = index + 1;
162
+ continue;
163
+ }
164
+ visited.add(resident);
165
+ const { page, retry } = await this.#visit(resident);
166
+ if (page.hasMore || retry) {
167
+ if (!retry && page.after !== undefined)
168
+ resident.cursor = page.after;
169
+ this.#nextResident = index + 1;
170
+ }
171
+ else {
172
+ this.#resident.splice(index, 1);
173
+ this.#nextResident = index;
174
+ }
175
+ pages += 1;
176
+ }
177
+ return pages;
178
+ }
179
+ /**
180
+ * Restarts completed traversals only after their original cadence.
181
+ */
182
+ #prepareSweep() {
183
+ const now = Time.currentTime();
184
+ const current = now.seconds * 1000000000n + BigInt(now.nanos);
185
+ if (!this.#sweepStarted || (this.#completeSweep() && current >= this.#restartAt)) {
186
+ this.#sweepStarted = true;
187
+ this.#restartAt = current + sweepIntervalNanoseconds;
188
+ this.#catalogDone = false;
189
+ this.#catalogAfter = undefined;
190
+ }
191
+ this.#acceptCatalogPage();
192
+ this.#fillResident();
193
+ if (!this.#catalogDone && this.#catalogPage === undefined && this.#catalogRequest === undefined)
194
+ this.#requestCatalogPage();
195
+ }
196
+ /**
197
+ * Reports whether the prior finite catalog traversal has ended.
198
+ */
199
+ #completeSweep() {
200
+ return (this.#catalogDone &&
201
+ this.#catalogPage === undefined &&
202
+ this.#catalogReady === undefined &&
203
+ this.#catalogRequest === undefined &&
204
+ this.#resident.length === 0);
205
+ }
206
+ /**
207
+ * Installs one settled provider page without retaining earlier pages.
208
+ */
209
+ #acceptCatalogPage() {
210
+ const page = this.#catalogReady;
211
+ if (page === undefined)
212
+ return;
213
+ this.#catalogReady = undefined;
214
+ if (page.ids.length > catalogPageSize || (page.hasMore && page.after === undefined))
215
+ throw new Error("Agent tenant catalog returned an invalid bounded page.");
216
+ if (page.hasMore && page.after === this.#catalogAfter)
217
+ throw new Error("Agent tenant catalog returned a nonadvancing continuation.");
218
+ this.#catalogPage = page;
219
+ this.#catalogAfter = page.after;
220
+ this.#catalogDone = !page.hasMore;
221
+ this.#tenantAt = 0;
222
+ this.#repositoryAt = 0;
223
+ }
224
+ /**
225
+ * Constructs at most four resident tenant/repository scopes.
226
+ */
227
+ #fillResident() {
228
+ while (this.#resident.length < maxResidentScopes && this.#catalogPage !== undefined) {
229
+ const tenant = this.#catalogPage.ids[this.#tenantAt];
230
+ if (tenant === undefined) {
231
+ this.#catalogPage = undefined;
232
+ break;
233
+ }
234
+ this.#resident.push({ scope: this.source.scope(tenant, this.#repositoryAt) });
235
+ this.#repositoryAt += 1;
236
+ if (this.#repositoryAt === this.source.repositories) {
237
+ this.#repositoryAt = 0;
238
+ this.#tenantAt += 1;
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Starts one provider page without making urgent work await its I/O.
244
+ */
245
+ #requestCatalogPage() {
246
+ const after = this.#catalogAfter;
247
+ let received = false;
248
+ this.#catalogRequest = Promise.resolve()
249
+ .then(() => {
250
+ if (this.#closed)
251
+ return undefined;
252
+ return this.source.page(after, this.#controller.signal);
253
+ })
254
+ .then((page) => {
255
+ if (!this.#closed && page !== undefined) {
256
+ this.#catalogReady = page;
257
+ received = true;
258
+ }
259
+ })
260
+ .catch((error) => {
261
+ if (!this.#closed)
262
+ this.onError(error);
263
+ })
264
+ .finally(() => {
265
+ this.#catalogRequest = undefined;
266
+ if (this.#closed)
267
+ return;
268
+ if (received)
269
+ this.wake();
270
+ else
271
+ this.#schedule(100);
272
+ });
273
+ }
274
+ /**
275
+ * Reads one indexed pending page with shutdown detachment.
276
+ */
277
+ async #visit(resident) {
278
+ const page = await this.#awaitStop(resident.scope.pending(resident.cursor, pendingPageSize));
279
+ if (page.records.length > pendingPageSize)
280
+ throw new Error("Agent pending provider exceeded the bounded page size.");
281
+ if (page.hasMore && page.after === undefined)
282
+ throw new Error("Agent pending provider omitted its required continuation.");
283
+ if (page.hasMore && !this.#advances(resident.cursor, page.after))
284
+ throw new Error("Agent pending provider returned a nonadvancing continuation.");
285
+ let retry = false;
286
+ if (!this.#closed)
287
+ for (const record of page.records)
288
+ if (!this.#submit(resident.scope, record))
289
+ retry = true;
290
+ return { page, retry };
291
+ }
292
+ /**
293
+ * Verifies that a continuation moves beyond the previously examined head.
294
+ */
295
+ #advances(before, after) {
296
+ if (after === undefined)
297
+ return false;
298
+ if (before === undefined)
299
+ return true;
300
+ if (after.asOf.seconds !== before.asOf.seconds || after.asOf.nanos !== before.asOf.nanos)
301
+ return false;
302
+ return (AgentExecutionRecords.pendingKey(after.key.eligibleAt, after.key.scope) >
303
+ AgentExecutionRecords.pendingKey(before.key.eligibleAt, before.key.scope));
304
+ }
305
+ /**
306
+ * Detaches promptly from a provider read that ignores cancellation.
307
+ *
308
+ * @typeParam T Provider response type.
309
+ * @param promise Underlying provider read.
310
+ * @returns Response or prompt shutdown rejection.
311
+ */
312
+ #awaitStop(promise) {
313
+ return new Promise((resolve, reject) => {
314
+ const signal = this.#controller.signal;
315
+ const abort = () => {
316
+ signal.removeEventListener("abort", abort);
317
+ reject(new Error("Agent discovery stopped."));
318
+ };
319
+ signal.addEventListener("abort", abort, { once: true });
320
+ promise.then((value) => {
321
+ signal.removeEventListener("abort", abort);
322
+ if (!signal.aborted)
323
+ resolve(value);
324
+ }, (error) => {
325
+ signal.removeEventListener("abort", abort);
326
+ reject(error instanceof Error ? error : new Error("Agent discovery failed.", { cause: error }));
327
+ });
328
+ if (signal.aborted)
329
+ abort();
330
+ });
331
+ }
332
+ #submit(scope, record) {
333
+ const key = record.accepted?.key;
334
+ if (key === undefined || this.#closed)
335
+ return false;
336
+ const id = `${scope.id}:${Buffer.from(toBinary(AgentInvocationKeySchema, key)).toString("base64")}`;
337
+ if (this.#active.has(id))
338
+ return true;
339
+ const invocation = key;
340
+ const task = this.capacity.trySubmit({
341
+ key: id,
342
+ signal: this.#controller.signal,
343
+ run: () => withoutDeliveryCommitFence(() => {
344
+ if (this.#closed)
345
+ return Promise.resolve();
346
+ return scope.run(invocation, this.#controller.signal);
347
+ }),
348
+ });
349
+ if (task === undefined)
350
+ return false;
351
+ this.#active.set(id, task);
352
+ void task.catch(this.onError).finally(() => {
353
+ this.#active.delete(id);
354
+ this.wake();
355
+ });
356
+ return true;
357
+ }
358
+ #schedule(delay) {
359
+ if (this.#closed || this.#timer !== undefined)
360
+ return;
361
+ this.#timer = setTimeout(() => {
362
+ this.#timer = undefined;
363
+ void this.turn()
364
+ .catch(this.onError)
365
+ .finally(() => {
366
+ this.#schedule(100);
367
+ });
368
+ }, delay);
369
+ }
370
+ /**
371
+ * Stops discovery and waits for already dispatched bounded work.
372
+ */
373
+ stop() {
374
+ this.#closed = true;
375
+ this.#controller.abort();
376
+ if (this.#timer !== undefined)
377
+ clearTimeout(this.#timer);
378
+ this.#timer = undefined;
379
+ this.#urgent.clear();
380
+ this.#resident.length = 0;
381
+ this.#catalogPage = undefined;
382
+ this.#catalogReady = undefined;
383
+ }
384
+ /**
385
+ * Waits for dispatched work after stopping new discovery.
386
+ *
387
+ * @returns Completion after active work has settled.
388
+ */
389
+ async close() {
390
+ this.stop();
391
+ await this.#scanning?.catch((error) => {
392
+ if (!this.#closed)
393
+ throw error;
394
+ });
395
+ await Promise.allSettled(this.#active.values());
396
+ }
397
+ }
398
+ //# sourceMappingURL=agent-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-scheduler.js","sourceRoot":"","sources":["../../src/agent/agent-scheduler.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,72 @@
1
1
  import { type Command } from "@spine-event-engine/proto";
2
+ import { type AgentSavedDispatchPlan } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
2
3
  import type { CommandDispatcher } from "./command-dispatcher.js";
3
4
  interface CommandBusAccess {
5
+ /**
6
+ * Posts an accepted internal command.
7
+ *
8
+ * @param commandBus Command bus receiving this internal operation.
9
+ * @param command Command envelope to prepare or dispatch.
10
+ * @returns A promise for completion of the accepted command dispatch.
11
+ */
4
12
  postInternal(commandBus: CommandBus, command: Command): Promise<void>;
13
+ /**
14
+ * Posts an internal command after intake begins closing.
15
+ *
16
+ * @param commandBus Command bus receiving this internal operation.
17
+ * @param command Command envelope to prepare or dispatch.
18
+ * @returns A promise for completion of the command follow-up.
19
+ */
5
20
  postInternalFollowUp(commandBus: CommandBus, command: Command): Promise<void>;
21
+ /**
22
+ * Prepares a dispatch plan before persisting accepted output.
23
+ *
24
+ * @param commandBus Command bus receiving this internal operation.
25
+ * @param command Command envelope to prepare or dispatch.
26
+ * @returns The exact saved recipient plan.
27
+ */
28
+ prepareSaved(commandBus: CommandBus, command: Command): Promise<AgentSavedDispatchPlan>;
29
+ /**
30
+ * Posts a prepared dispatch after its Agent result is saved.
31
+ *
32
+ * @param commandBus Command bus receiving this internal operation.
33
+ * @param command Command envelope to prepare or dispatch.
34
+ * @param plan Persisted recipient plan for this dispatch.
35
+ * @returns A promise for completion of the saved dispatch.
36
+ */
37
+ postSavedFollowUp(commandBus: CommandBus, command: Command, plan: AgentSavedDispatchPlan): Promise<void>;
38
+ /**
39
+ * Stops accepting new external work.
40
+ *
41
+ * @param commandBus Command bus receiving this internal operation.
42
+ */
6
43
  beginClose(commandBus: CommandBus): void;
44
+ /**
45
+ * Waits for accepted dispatches to settle.
46
+ *
47
+ * @param commandBus Command bus receiving this internal operation.
48
+ * @returns A promise that settles when accepted work drains.
49
+ */
7
50
  drain(commandBus: CommandBus): Promise<void>;
51
+ /**
52
+ * Completes the bus shutdown.
53
+ *
54
+ * @param commandBus Command bus receiving this internal operation.
55
+ * @returns A promise that settles when shutdown completes.
56
+ */
8
57
  finishClose(commandBus: CommandBus): Promise<void>;
58
+ /**
59
+ * Restores intake after an aborted shutdown.
60
+ *
61
+ * @param commandBus Command bus receiving this internal operation.
62
+ */
9
63
  abortClose(commandBus: CommandBus): void;
64
+ /**
65
+ * Returns the number of accepted dispatches still in progress.
66
+ *
67
+ * @param commandBus Command bus receiving this internal operation.
68
+ * @returns The number of accepted dispatches still in progress.
69
+ */
10
70
  acceptedWorkCount(commandBus: CommandBus): number;
11
71
  }
12
72
  /**
@@ -26,6 +86,7 @@ export declare class CommandBus {
26
86
  /**
27
87
  * Registers a dispatcher.
28
88
  *
89
+ * @typeParam Dispatcher Concrete Command dispatcher type returned to the caller.
29
90
  * @param dispatcher the dispatcher to register.
30
91
  * @returns the registered dispatcher.
31
92
  */
@@ -48,6 +109,7 @@ export declare class CommandBus {
48
109
  *
49
110
  * Close is idempotent and returns the same close outcome on repeated calls.
50
111
  * Runtime close failures reject the returned promise.
112
+ *
51
113
  * @returns A promise that settles after the command bus closes.
52
114
  *
53
115
  */
@@ -1 +1 @@
1
- {"version":3,"file":"command-bus.d.ts","sourceRoot":"","sources":["../../src/bus/command-bus.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAUxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAUjE,UAAU,gBAAgB;IACxB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;CACnD;AAID;;;;;GAKG;AACH,qBAAa,UAAU;;IAQrB;;;;OAIG;gBACS,WAAW,GAAE,QAAQ,CAAC,iBAAiB,CAAM;IAqBzD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,SAAS,iBAAiB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU;IAKlF;;;;OAIG;IACH,oBAAoB,IAAI,SAAS,MAAM,EAAE;IAIzC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC;;;;;;;OAOG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8FvB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAoE7B,CAAC"}
1
+ {"version":3,"file":"command-bus.d.ts","sourceRoot":"","sources":["../../src/bus/command-bus.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,+EAA+E,CAAC;AAUvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAmBjE,UAAU,gBAAgB;IACxB;;;;;;OAMG;IACH,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;;;;;OAMG;IACH,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;;;;OAMG;IACH,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAExF;;;;;;;OAOG;IACH,iBAAiB,CACf,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAEzC;;;;;OAKG;IACH,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAEzC;;;;;OAKG;IACH,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;CACnD;AAID;;;;;GAKG;AACH,qBAAa,UAAU;;IAarB;;;;OAIG;gBACS,WAAW,GAAE,QAAQ,CAAC,iBAAiB,CAAM;IAuBzD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,SAAS,iBAAiB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU;IAKlF;;;;OAIG;IACH,oBAAoB,IAAI,SAAS,MAAM,EAAE;IAIzC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC;;;;;;;;OAQG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAiIvB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAqF7B,CAAC"}
@@ -11,15 +11,19 @@
11
11
  * or implied. See the License for the specific language governing permissions and limitations under
12
12
  * the License.
13
13
  */
14
- import { clone } from "@bufbuild/protobuf";
14
+ import { clone, create } from "@bufbuild/protobuf";
15
15
  import { ValidationException, Validate, AnyMessages } from "@spine-event-engine/core";
16
16
  import { CommandSchema } from "@spine-event-engine/proto";
17
+ import { AgentSavedDispatchPlanSchema as SavedPlanSchema, } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
17
18
  import { runtimeAccess, ServerRuntimeStateError, SingleProcessServerRuntime, } from "../runtime/runtime.js";
18
19
  import { CommandValidationError } from "./command-errors.js";
19
20
  import { ImplicitRequiredIds } from "../entity/implicit-required-id.js";
20
21
  import { CommandDispatcherRegistry } from "./command-dispatcher-registry.js";
22
+ import { SavedDispatcherBindings } from "./saved-dispatcher-binding.js";
21
23
  const internalCommandPosters = new WeakMap();
22
24
  const commandFollowUpPosters = new WeakMap();
25
+ const savedPreparers = new WeakMap();
26
+ const savedFollowUps = new WeakMap();
23
27
  const commandBusCloseStarters = new WeakMap();
24
28
  const commandBusDrainers = new WeakMap();
25
29
  const commandBusCloseFinishers = new WeakMap();
@@ -47,6 +51,8 @@ export class CommandBus {
47
51
  this.#started = this.#runtime.start();
48
52
  internalCommandPosters.set(this, (command) => this.#postInternal(command));
49
53
  commandFollowUpPosters.set(this, (command) => this.#postInternalFollowUp(command));
54
+ savedPreparers.set(this, (command) => this.#prepareSaved(command));
55
+ savedFollowUps.set(this, (command, plan) => this.#postSavedFollowUp(command, plan));
50
56
  commandBusCloseStarters.set(this, () => {
51
57
  this.#beginClose();
52
58
  });
@@ -65,6 +71,7 @@ export class CommandBus {
65
71
  /**
66
72
  * Registers a dispatcher.
67
73
  *
74
+ * @typeParam Dispatcher Concrete Command dispatcher type returned to the caller.
68
75
  * @param dispatcher the dispatcher to register.
69
76
  * @returns the registered dispatcher.
70
77
  */
@@ -98,6 +105,7 @@ export class CommandBus {
98
105
  *
99
106
  * Close is idempotent and returns the same close outcome on repeated calls.
100
107
  * Runtime close failures reject the returned promise.
108
+ *
101
109
  * @returns A promise that settles after the command bus closes.
102
110
  *
103
111
  */
@@ -120,6 +128,32 @@ export class CommandBus {
120
128
  this.#acceptedWorkCount++;
121
129
  return this.#started.then(() => runtimeAccess.enqueueFollowUp(this.#runtime, () => this.#dispatch(accepted)));
122
130
  }
131
+ async #prepareSaved(command) {
132
+ const dispatcher = this.#checkedDispatcher(command);
133
+ const binding = SavedDispatcherBindings.forCommand(dispatcher);
134
+ if (binding === undefined)
135
+ throw new Error("Saved Agent Command matches a dispatcher without durable metadata.");
136
+ return create(SavedPlanSchema, {
137
+ targets: [await binding.prepare(clone(CommandSchema, command))],
138
+ });
139
+ }
140
+ #postSavedFollowUp(command, plan) {
141
+ const accepted = clone(CommandSchema, command);
142
+ const frozen = clone(SavedPlanSchema, plan);
143
+ if (this.#intakeState === "closed")
144
+ return Promise.reject(new ServerRuntimeStateError("enqueue", "closed"));
145
+ this.#acceptedWorkCount++;
146
+ return this.#started.then(() => runtimeAccess.enqueueFollowUp(this.#runtime, () => this.#dispatchSaved(accepted, frozen)));
147
+ }
148
+ async #dispatchSaved(command, plan) {
149
+ const dispatcher = this.#checkedDispatcher(command);
150
+ const target = plan.targets[0];
151
+ const binding = SavedDispatcherBindings.forCommand(dispatcher);
152
+ if (plan.targets.length !== 1 || target === undefined || !binding?.matches(target))
153
+ throw new Error("Saved Agent Command dispatcher binding changed before delivery.");
154
+ const deliver = await binding.bind(clone(CommandSchema, command), target);
155
+ await deliver();
156
+ }
123
157
  #enqueueAccepted(command) {
124
158
  this.#acceptedWorkCount++;
125
159
  return this.#started.then(() => this.#runtime.enqueue(() => this.#dispatch(command)));
@@ -148,6 +182,9 @@ export class CommandBus {
148
182
  this.#intakeState = "closed";
149
183
  }
150
184
  async #dispatch(command) {
185
+ await this.#checkedDispatcher(command).dispatch(command);
186
+ }
187
+ #checkedDispatcher(command) {
151
188
  const packed = command.message;
152
189
  if (packed === undefined || packed.typeUrl === "") {
153
190
  throw new Error("CommandBus requires command.message.typeUrl.");
@@ -174,7 +211,7 @@ export class CommandBus {
174
211
  if (!implicitId.valid) {
175
212
  throw new CommandValidationError(implicitId.error);
176
213
  }
177
- await registration.dispatcher.dispatch(clone(CommandSchema, command));
214
+ return registration.dispatcher;
178
215
  }
179
216
  }
180
217
  /**
@@ -197,6 +234,18 @@ export const commandBusAccess = Object.freeze({
197
234
  }
198
235
  return post(command);
199
236
  },
237
+ prepareSaved(commandBus, command) {
238
+ const prepare = savedPreparers.get(commandBus);
239
+ if (prepare === undefined)
240
+ throw new TypeError("Saved Command preparation requires a CommandBus.");
241
+ return prepare(command);
242
+ },
243
+ postSavedFollowUp(commandBus, command, plan) {
244
+ const post = savedFollowUps.get(commandBus);
245
+ if (post === undefined)
246
+ throw new TypeError("Saved Command delivery requires a CommandBus.");
247
+ return post(command, plan);
248
+ },
200
249
  beginClose(commandBus) {
201
250
  const beginClose = commandBusCloseStarters.get(commandBus);
202
251
  if (beginClose === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"command-bus.js","sourceRoot":"","sources":["../../src/bus/command-bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-bus.js","sourceRoot":"","sources":["../../src/bus/command-bus.ts"],"names":[],"mappings":"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"}