@spine-event-engine/server 2.0.0-snapshot.21 → 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 (168) hide show
  1. package/README.md +104 -7
  2. package/REFERENCE.md +199 -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/entity-inbox.d.ts.map +1 -1
  84. package/dist/context/entity-inbox.js +5 -5
  85. package/dist/context/entity-inbox.js.map +1 -1
  86. package/dist/context/projection-handoff.d.ts.map +1 -1
  87. package/dist/context/projection-handoff.js +2 -1
  88. package/dist/context/projection-handoff.js.map +1 -1
  89. package/dist/context/tenant-index.d.ts +25 -0
  90. package/dist/context/tenant-index.d.ts.map +1 -1
  91. package/dist/context/tenant-index.js +45 -1
  92. package/dist/context/tenant-index.js.map +1 -1
  93. package/dist/delivery/delivery.d.ts.map +1 -1
  94. package/dist/delivery/delivery.js +4 -3
  95. package/dist/delivery/delivery.js.map +1 -1
  96. package/dist/delivery/inbox-records.d.ts +13 -0
  97. package/dist/delivery/inbox-records.d.ts.map +1 -1
  98. package/dist/delivery/inbox-records.js +204 -30
  99. package/dist/delivery/inbox-records.js.map +1 -1
  100. package/dist/delivery/inbox-storage.d.ts.map +1 -1
  101. package/dist/delivery/inbox-storage.js +26 -5
  102. package/dist/delivery/inbox-storage.js.map +1 -1
  103. package/dist/delivery/inbox.d.ts +7 -7
  104. package/dist/delivery/inbox.d.ts.map +1 -1
  105. package/dist/delivery/inbox.js +1 -2
  106. package/dist/delivery/inbox.js.map +1 -1
  107. package/dist/delivery/sharded-work-registry.d.ts +1 -0
  108. package/dist/delivery/sharded-work-registry.d.ts.map +1 -1
  109. package/dist/delivery/sharded-work-registry.js +3 -1
  110. package/dist/delivery/sharded-work-registry.js.map +1 -1
  111. package/dist/entity/entity-transaction.d.ts.map +1 -1
  112. package/dist/entity/entity-transaction.js +2 -6
  113. package/dist/entity/entity-transaction.js.map +1 -1
  114. package/dist/entity/entity.d.ts +82 -3
  115. package/dist/entity/entity.d.ts.map +1 -1
  116. package/dist/entity/entity.js +121 -22
  117. package/dist/entity/entity.js.map +1 -1
  118. package/dist/handler/generated-handler-registry.js +8 -3
  119. package/dist/handler/generated-handler-registry.js.map +1 -1
  120. package/dist/handler/handler-metadata.d.ts +17 -1
  121. package/dist/handler/handler-metadata.d.ts.map +1 -1
  122. package/dist/handler/handler-metadata.js +10 -4
  123. package/dist/handler/handler-metadata.js.map +1 -1
  124. package/dist/index.d.ts +3 -3
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +2 -2
  127. package/dist/index.js.map +1 -1
  128. package/dist/integration/third-party-context.d.ts +5 -0
  129. package/dist/integration/third-party-context.d.ts.map +1 -1
  130. package/dist/integration/third-party-context.js +7 -6
  131. package/dist/integration/third-party-context.js.map +1 -1
  132. package/dist/repository/commit-fence.d.ts +11 -0
  133. package/dist/repository/commit-fence.d.ts.map +1 -1
  134. package/dist/repository/commit-fence.js +13 -0
  135. package/dist/repository/commit-fence.js.map +1 -1
  136. package/dist/repository/repository.d.ts +222 -13
  137. package/dist/repository/repository.d.ts.map +1 -1
  138. package/dist/repository/repository.js +2329 -137
  139. package/dist/repository/repository.js.map +1 -1
  140. package/dist/runtime/signal-metadata.d.ts +7 -47
  141. package/dist/runtime/signal-metadata.d.ts.map +1 -1
  142. package/dist/runtime/signal-metadata.js +8 -62
  143. package/dist/runtime/signal-metadata.js.map +1 -1
  144. package/dist/runtime/signal-publisher.d.ts +6 -0
  145. package/dist/runtime/signal-publisher.d.ts.map +1 -1
  146. package/dist/runtime/signal-publisher.js +13 -0
  147. package/dist/runtime/signal-publisher.js.map +1 -1
  148. package/dist/runtime/standalone-handler-runtime.d.ts +7 -0
  149. package/dist/runtime/standalone-handler-runtime.d.ts.map +1 -1
  150. package/dist/runtime/standalone-handler-runtime.js +148 -11
  151. package/dist/runtime/standalone-handler-runtime.js.map +1 -1
  152. package/dist/server/managed-server-application.d.ts +36 -6
  153. package/dist/server/managed-server-application.d.ts.map +1 -1
  154. package/dist/server/managed-server-application.js +257 -4
  155. package/dist/server/managed-server-application.js.map +1 -1
  156. package/dist/server/server.d.ts +9 -0
  157. package/dist/server/server.d.ts.map +1 -1
  158. package/dist/server/server.js +13 -1
  159. package/dist/server/server.js.map +1 -1
  160. package/dist/stand/subscription-registry.d.ts.map +1 -1
  161. package/dist/stand/subscription-registry.js +9 -8
  162. package/dist/stand/subscription-registry.js.map +1 -1
  163. package/dist/testing/index.d.ts +57 -1
  164. package/dist/testing/index.d.ts.map +1 -1
  165. package/dist/testing/index.js +87 -0
  166. package/dist/testing/index.js.map +1 -1
  167. package/dist/tsconfig.tsbuildinfo +1 -1
  168. package/package.json +14 -12
@@ -0,0 +1,320 @@
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 { clone, create, equals } from "@bufbuild/protobuf";
15
+ import { AnySchema } from "@bufbuild/protobuf/wkt";
16
+ import { AnyMessages, TypeUrls } from "@spine-event-engine/core";
17
+ import { QuerySchema } from "@spine-event-engine/proto/client";
18
+ import { AgentExecutionJournalEntrySchema as JournalEntrySchema, AgentExecutionScopeSchema, AgentHistoryReadKind, AgentHistoryReadPageSchema as ReadPageSchema, AgentHistoryReadRequestSchema as ReadRequestSchema, AgentProjectionReadResultSchema as ProjectionResultSchema, AgentReadSnapshotSchema, } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
19
+ import { AgentExecutionSizes, } from "@spine-event-engine/storage/provider";
20
+ import { AgentExecutionFault } from "./agent-execution-fault.js";
21
+ /**
22
+ * Reuses complete indexed pages under one handler's fenced journal.
23
+ */
24
+ export class AgentReadRuntime {
25
+ session;
26
+ handlerOrdinal;
27
+ #cursor = 0;
28
+ #pending = 0;
29
+ #tail = Promise.resolve();
30
+ /**
31
+ * Creates a read sequencer for one handler invocation.
32
+ *
33
+ * @param session Fenced execution journal for this invocation.
34
+ * @param handlerOrdinal Ordinal of the handler within the accepted delivery.
35
+ */
36
+ constructor(session, handlerOrdinal) {
37
+ this.session = session;
38
+ this.handlerOrdinal = handlerOrdinal;
39
+ }
40
+ /**
41
+ * Returns one saved page or persists a live page before the handler sees it.
42
+ *
43
+ * @param scope Accepted Agent instance for this read.
44
+ * @param view History view selected by the handler.
45
+ * @param request Requested page and cursor.
46
+ * @param live Performs the live read when no saved page exists.
47
+ * @param maxBytes Maximum size of a live history page.
48
+ * @returns The saved or newly persisted page.
49
+ */
50
+ history(scope, view, request, live, maxBytes) {
51
+ this.#pending++;
52
+ const read = this.#tail.then(() => this.#history(scope, view, request, live, maxBytes));
53
+ this.#tail = read.then(() => undefined, () => undefined);
54
+ return read.finally(() => {
55
+ this.#pending--;
56
+ });
57
+ }
58
+ /**
59
+ * Returns saved typed projection states or persists a live query result.
60
+ *
61
+ * @typeParam Schema Schema of each returned projection state.
62
+ * @param schema Projection state schema.
63
+ * @param query Typed query to replay or execute.
64
+ * @param live Performs the live query when no saved result exists.
65
+ * @returns The saved or newly persisted projection states.
66
+ */
67
+ query(schema, query, live) {
68
+ this.#pending++;
69
+ const read = this.#tail.then(() => this.#query(schema, query, live));
70
+ this.#tail = read.then(() => undefined, () => undefined);
71
+ return read.finally(() => {
72
+ this.#pending--;
73
+ });
74
+ }
75
+ /**
76
+ * Handles a projection read in the same call-order sequence as history reads.
77
+ *
78
+ * @typeParam Schema Schema of the projection states.
79
+ */
80
+ async #query(schema, query, live) {
81
+ if (query.target?.type !== TypeUrls.derive(schema))
82
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Agent projection query target type changed.");
83
+ const name = `query:${String(this.#cursor)}`;
84
+ const prior = this.#savedReads()[this.#cursor];
85
+ if (prior !== undefined) {
86
+ const states = this.#replayQuery(prior, name, schema, query);
87
+ this.#cursor++;
88
+ return states;
89
+ }
90
+ this.#checkBudget(this.session.record());
91
+ const states = await live();
92
+ await this.#saveQuery(name, query, schema, states);
93
+ this.#cursor++;
94
+ return states;
95
+ }
96
+ /**
97
+ * Reuses typed states after comparing every request field except generated ID.
98
+ *
99
+ * @typeParam Schema Schema of the saved projection states.
100
+ */
101
+ #replayQuery(prior, name, schema, query) {
102
+ const scope = this.session.record().accepted?.key?.scope;
103
+ const saved = prior.request === undefined ? undefined : AnyMessages.unpack(prior.request, QuerySchema);
104
+ if (saved?.id === undefined ||
105
+ scope === undefined ||
106
+ prior.readName !== name ||
107
+ prior.scope === undefined ||
108
+ !equals(AgentExecutionScopeSchema, prior.scope, scope))
109
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Agent projection query request or scope changed on recovery.");
110
+ const normalized = clone(QuerySchema, query);
111
+ normalized.id = saved.id;
112
+ if (!equals(QuerySchema, normalized, saved))
113
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Agent projection query request changed on recovery.");
114
+ return this.#savedQueryStates(prior, schema);
115
+ }
116
+ /**
117
+ * Decodes only states matching the requested generated Projection schema.
118
+ *
119
+ * @typeParam Schema Generated state schema requested by the handler.
120
+ * @param prior Saved read entry with its typed result.
121
+ * @param schema Expected Projection state schema.
122
+ * @returns Independent retained state messages.
123
+ */
124
+ #savedQueryStates(prior, schema) {
125
+ const result = prior.result === undefined
126
+ ? undefined
127
+ : AnyMessages.unpack(prior.result, ProjectionResultSchema);
128
+ if (result === undefined)
129
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Saved Agent projection result is absent.");
130
+ return Object.freeze(result.states.map((packed) => {
131
+ const state = AnyMessages.unpack(packed, schema);
132
+ if (state === undefined)
133
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Saved Agent projection state type changed.");
134
+ return state;
135
+ }));
136
+ }
137
+ /**
138
+ * Persists typed projection states before exposing them to a handler.
139
+ *
140
+ * @typeParam Schema Schema of the states being saved.
141
+ */
142
+ async #saveQuery(name, query, schema, states) {
143
+ const request = AnyMessages.pack(QuerySchema, query);
144
+ const result = this.#queryResult(schema, states);
145
+ await this.session.update((record) => {
146
+ const scope = record.accepted?.key?.scope;
147
+ if (scope === undefined)
148
+ throw new Error("Agent query requires accepted scope.");
149
+ this.#checkBudget(record);
150
+ record.journal.push(create(JournalEntrySchema, {
151
+ ordinal: BigInt(record.journal.length),
152
+ evidence: {
153
+ case: "read",
154
+ value: create(AgentReadSnapshotSchema, {
155
+ handlerOrdinal: this.handlerOrdinal,
156
+ readName: name,
157
+ scope,
158
+ request,
159
+ result,
160
+ }),
161
+ },
162
+ }));
163
+ this.#checkCapacity(record);
164
+ return record;
165
+ });
166
+ }
167
+ /**
168
+ * Packs the exact typed state array returned by a Projection read.
169
+ *
170
+ * @typeParam Schema Schema of the states being saved.
171
+ * @param schema Generated state descriptor.
172
+ * @param states Ordered states returned by the live query.
173
+ * @returns Typed saved query result envelope.
174
+ */
175
+ #queryResult(schema, states) {
176
+ return AnyMessages.pack(ProjectionResultSchema, create(ProjectionResultSchema, {
177
+ states: states.map((state) => AnyMessages.pack(schema, state)),
178
+ }));
179
+ }
180
+ /**
181
+ * Processes reads in call order, including concurrent handler requests.
182
+ */
183
+ async #history(scope, view, request, live, maxBytes) {
184
+ this.#checkScope(scope);
185
+ const named = `history:${String(this.#cursor)}`;
186
+ const prepared = this.#request(view, request, maxBytes);
187
+ const prior = this.#savedReads()[this.#cursor];
188
+ if (prior !== undefined) {
189
+ const page = this.#replay(prior, named, prepared);
190
+ this.#cursor++;
191
+ return page;
192
+ }
193
+ this.#checkBudget(this.session.record());
194
+ const page = await live();
195
+ await this.#save(named, prepared, page);
196
+ this.#cursor++;
197
+ return page;
198
+ }
199
+ /**
200
+ * Rejects omitted saved reads after all handler methods have returned.
201
+ */
202
+ finish() {
203
+ if (this.#pending !== 0)
204
+ throw new Error("Agent history read is still in progress.");
205
+ if (this.#cursor !== this.#savedReads().length)
206
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Agent history read sequence changed on recovery.");
207
+ }
208
+ /**
209
+ * Ensures the read cannot escape its accepted Agent instance.
210
+ */
211
+ #checkScope(scope) {
212
+ const accepted = this.session.record().accepted?.key?.scope;
213
+ if (accepted?.stateType !== scope.repository || accepted.agentKey !== scope.entity)
214
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Agent history read scope changed on recovery.");
215
+ }
216
+ /**
217
+ * Encodes the complete public request and effective byte ceiling.
218
+ */
219
+ #request(view, request, maxBytes) {
220
+ if (maxBytes !== undefined && (!Number.isSafeInteger(maxBytes) || maxBytes <= 0))
221
+ throw new RangeError("Agent history maxBytes must be a positive safe integer.");
222
+ const kind = {
223
+ full: AgentHistoryReadKind.AGENT_HISTORY_READ_FULL,
224
+ conversation: AgentHistoryReadKind.AGENT_HISTORY_READ_CONVERSATION,
225
+ system: AgentHistoryReadKind.AGENT_HISTORY_READ_SYSTEM,
226
+ domain: AgentHistoryReadKind.AGENT_HISTORY_READ_DOMAIN,
227
+ }[view.kind];
228
+ return AnyMessages.pack(ReadRequestSchema, create(ReadRequestSchema, {
229
+ kind,
230
+ ...(view.kind === "conversation" ? { conversation: view.conversation } : {}),
231
+ pageSize: BigInt(request.pageSize),
232
+ ...(request.cursor === undefined ? {} : { cursor: request.cursor }),
233
+ ...(maxBytes === undefined ? {} : { maxBytes: BigInt(maxBytes) }),
234
+ }));
235
+ }
236
+ /**
237
+ * Selects this handler's saved reads in original call order.
238
+ */
239
+ #savedReads() {
240
+ return this.session
241
+ .record()
242
+ .journal.flatMap((entry) => entry.evidence.case === "read" &&
243
+ entry.evidence.value.handlerOrdinal === this.handlerOrdinal
244
+ ? [entry.evidence.value]
245
+ : []);
246
+ }
247
+ /**
248
+ * Returns exact prior content without consulting current provider state.
249
+ */
250
+ #replay(prior, name, request) {
251
+ const scope = this.session.record().accepted?.key?.scope;
252
+ if (prior.readName !== name ||
253
+ scope === undefined ||
254
+ prior.scope === undefined ||
255
+ prior.request === undefined ||
256
+ !equals(AnySchema, prior.request, request) ||
257
+ !equals(AgentExecutionScopeSchema, prior.scope, scope))
258
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Agent history read request or scope changed on recovery.");
259
+ const page = prior.result === undefined ? undefined : AnyMessages.unpack(prior.result, ReadPageSchema);
260
+ if (page === undefined)
261
+ throw new AgentExecutionFault("REPLAY_DIVERGENCE", "Saved Agent history page is absent or changed.");
262
+ return { entries: page.entries, hasMore: page.hasMore };
263
+ }
264
+ /**
265
+ * Saves a complete page under the provider claim before returning it.
266
+ */
267
+ async #save(name, request, page) {
268
+ await this.session.update((record) => {
269
+ const scope = record.accepted?.key?.scope;
270
+ if (scope === undefined)
271
+ throw new Error("Agent history read requires accepted scope.");
272
+ this.#checkBudget(record);
273
+ record.journal.push(this.#entry(record.journal.length, scope, name, request, page));
274
+ this.#checkCapacity(record);
275
+ return record;
276
+ });
277
+ }
278
+ /**
279
+ * Counts both history and projection snapshots against one invocation bound.
280
+ */
281
+ #checkBudget(record) {
282
+ const count = record.journal.filter((entry) => entry.evidence.case === "read").length;
283
+ const limit = record.started?.bounds?.recordedReads;
284
+ if (limit !== undefined && BigInt(count) >= limit)
285
+ throw new AgentExecutionFault("READ_BUDGET_EXCEEDED", "Agent recorded read budget is exhausted.");
286
+ }
287
+ /**
288
+ * Constructs the complete recorded read page with its call-order name.
289
+ */
290
+ #entry(ordinal, scope, name, request, page) {
291
+ return create(JournalEntrySchema, {
292
+ ordinal: BigInt(ordinal),
293
+ evidence: {
294
+ case: "read",
295
+ value: create(AgentReadSnapshotSchema, {
296
+ handlerOrdinal: this.handlerOrdinal,
297
+ readName: name,
298
+ scope,
299
+ request,
300
+ result: AnyMessages.pack(ReadPageSchema, create(ReadPageSchema, {
301
+ entries: [...page.entries],
302
+ hasMore: page.hasMore,
303
+ })),
304
+ }),
305
+ },
306
+ });
307
+ }
308
+ /**
309
+ * Rejects a page whose full persisted journal exceeds runtime or provider bounds.
310
+ */
311
+ #checkCapacity(record) {
312
+ const size = AgentExecutionSizes.record(record);
313
+ const providerLimit = this.session.capacity().executionRecordBytes;
314
+ const configuredLimit = record.started?.bounds?.maxRecoveryBytes;
315
+ if ((configuredLimit !== undefined && BigInt(size) > configuredLimit) ||
316
+ (providerLimit !== undefined && size > providerLimit))
317
+ throw new Error("Agent read snapshot exceeds durable record bytes.");
318
+ }
319
+ }
320
+ //# sourceMappingURL=agent-read-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-read-runtime.js","sourceRoot":"","sources":["../../src/agent/agent-read-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAqB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAY,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAc,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EACL,gCAAgC,IAAI,kBAAkB,EACtD,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,IAAI,cAAc,EAC5C,6BAA6B,IAAI,iBAAiB,EAClD,+BAA+B,IAAI,sBAAsB,EACzD,uBAAuB,GAGxB,MAAM,+EAA+E,CAAC;AACvF,OAAO,EACL,mBAAmB,GAIpB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AA4BjE;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAcR;IACA;IAdnB,OAAO,GAAG,CAAC,CAAC;IAEZ,QAAQ,GAAG,CAAC,CAAC;IAEb,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEzC;;;;;OAKG;IACH,YACmB,OAAoB,EACpB,cAAsB;QADtB,YAAO,GAAP,OAAO,CAAa;QACpB,mBAAc,GAAd,cAAc,CAAQ;IACtC,CAAC;IAEJ;;;;;;;;;OASG;IACH,OAAO,CACL,KAAwB,EACxB,IAAsB,EACtB,OAAoB,EACpB,IAAqC,EACrC,QAA4B;QAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CACpB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CACH,MAAc,EACd,KAAY,EACZ,IAAoD;QAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CACpB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,MAAc,EACd,KAAY,EACZ,IAAoD;QAEpD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAChD,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,6CAA6C,CAC9C,CAAC;QACJ,MAAM,IAAI,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,YAAY,CACV,KAAwB,EACxB,IAAY,EACZ,MAAc,EACd,KAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;QACzD,MAAM,KAAK,GACT,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3F,IACE,KAAK,EAAE,EAAE,KAAK,SAAS;YACvB,KAAK,KAAK,SAAS;YACnB,KAAK,CAAC,QAAQ,KAAK,IAAI;YACvB,KAAK,CAAC,KAAK,KAAK,SAAS;YACzB,CAAC,MAAM,CAAC,yBAAyB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YAEtD,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,8DAA8D,CAC/D,CAAC;QACJ,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7C,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC;YACzC,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,qDAAqD,CACtD,CAAC;QACJ,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CACf,KAAwB,EACxB,MAAc;QAEd,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,SAAS;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAC/D,IAAI,MAAM,KAAK,SAAS;YACtB,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,0CAA0C,CAC3C,CAAC;QACJ,OAAO,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,SAAS;gBACrB,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,4CAA4C,CAC7C,CAAC;YACJ,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,KAAY,EACZ,MAAc,EACd,MAAuC;QAEvC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;YAC1C,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACjF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,MAAM,CAAC,kBAAkB,EAAE;gBACzB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gBACtC,QAAQ,EAAE;oBACR,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM,CAAC,uBAAuB,EAAE;wBACrC,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,QAAQ,EAAE,IAAI;wBACd,KAAK;wBACL,OAAO;wBACP,MAAM;qBACP,CAAC;iBACH;aACF,CAAC,CACH,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CACV,MAAc,EACd,MAAuC;QAEvC,OAAO,WAAW,CAAC,IAAI,CACrB,sBAAsB,EACtB,MAAM,CAAC,sBAAsB,EAAE;YAC7B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC/D,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,KAAwB,EACxB,IAAsB,EACtB,OAAoB,EACpB,IAAqC,EACrC,QAA4B;QAE5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,WAAW,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACrF,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;YAC5C,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,kDAAkD,CACnD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAwB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;QAC5D,IAAI,QAAQ,EAAE,SAAS,KAAK,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM;YAChF,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,+CAA+C,CAChD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAsB,EAAE,OAAoB,EAAE,QAA4B;QACjF,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC;YAC9E,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,oBAAoB,CAAC,uBAAuB;YAClD,YAAY,EAAE,oBAAoB,CAAC,+BAA+B;YAClE,MAAM,EAAE,oBAAoB,CAAC,yBAAyB;YACtD,MAAM,EAAE,oBAAoB,CAAC,yBAAyB;SACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,WAAW,CAAC,IAAI,CACrB,iBAAiB,EACjB,MAAM,CAAC,iBAAiB,EAAE;YACxB,IAAI;YACJ,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAClC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACnE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;SAClE,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,EAAE;aACR,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACzB,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM;YAC9B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc;YACzD,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,CAAC,CAAC,EAAE,CACP,CAAC;IACN,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAwB,EAAE,IAAY,EAAE,OAAY;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;QACzD,IACE,KAAK,CAAC,QAAQ,KAAK,IAAI;YACvB,KAAK,KAAK,SAAS;YACnB,KAAK,CAAC,KAAK,KAAK,SAAS;YACzB,KAAK,CAAC,OAAO,KAAK,SAAS;YAC3B,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;YAC1C,CAAC,MAAM,CAAC,yBAAyB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YAEtD,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,0DAA0D,CAC3D,CAAC;QACJ,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC5F,IAAI,IAAI,KAAK,SAAS;YACpB,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,EACnB,gDAAgD,CACjD,CAAC;QACJ,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,OAAY,EAAE,IAAsB;QAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;YAC1C,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACxF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAA4B;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACtF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK;YAC/C,MAAM,IAAI,mBAAmB,CAC3B,sBAAsB,EACtB,0CAA0C,CAC3C,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CACJ,OAAe,EACf,KAA8C,EAC9C,IAAY,EACZ,OAAY,EACZ,IAAsB;QAEtB,OAAO,MAAM,CAAC,kBAAkB,EAAE;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;YACxB,QAAQ,EAAE;gBACR,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM,CAAC,uBAAuB,EAAE;oBACrC,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,QAAQ,EAAE,IAAI;oBACd,KAAK;oBACL,OAAO;oBACP,MAAM,EAAE,WAAW,CAAC,IAAI,CACtB,cAAc,EACd,MAAM,CAAC,cAAc,EAAE;wBACrB,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;wBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;qBACtB,CAAC,CACH;iBACF,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAA4B;QACzC,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC;QACnE,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC;QACjE,IACE,CAAC,eAAe,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;YACjE,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,GAAG,aAAa,CAAC;YAErD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import type { AiRegistry } from "@spine-event-engine/ai";
2
+ import type { DescriptorMessageSchema } from "../entity/entity-metadata.js";
3
+ import type { RegisteredHandlerMetadata } from "../handler/handler-metadata.js";
4
+ import type { RepositoryAiOptions } from "../repository/repository.js";
5
+ /**
6
+ * Exact generated-schema and effective-policy revisions at Agent admission.
7
+ */
8
+ export interface AgentAdmissionRevisions {
9
+ /**
10
+ * Digest of the selected state, signal, and capability descriptors.
11
+ */
12
+ readonly schema: string;
13
+ /**
14
+ * Digest of effective registry and repository capability policy.
15
+ */
16
+ readonly policy: string;
17
+ }
18
+ interface AgentRevisionsAccess {
19
+ /**
20
+ * Calculates admission revisions from generated descriptors and configured policy.
21
+ *
22
+ * @param state Generated Agent state descriptor.
23
+ * @param handlers Selected original handler bindings.
24
+ * @param ai Effective Bounded Context AI registry.
25
+ * @param repository Repository capability configuration.
26
+ * @returns Revisions compared when accepted work resumes.
27
+ */
28
+ atAdmission(state: DescriptorMessageSchema, handlers: readonly RegisteredHandlerMetadata[], ai: AiRegistry, repository: RepositoryAiOptions): AgentAdmissionRevisions;
29
+ }
30
+ /**
31
+ * Derives restart comparison keys without retaining application callbacks.
32
+ */
33
+ export declare const AgentRevisions: AgentRevisionsAccess;
34
+ export {};
35
+ //# sourceMappingURL=agent-revisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-revisions.d.ts","sourceRoot":"","sources":["../../src/agent/agent-revisions.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,oBAAoB;IAC5B;;;;;;;;OAQG;IACH,WAAW,CACT,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,SAAS,yBAAyB,EAAE,EAC9C,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,mBAAmB,GAC9B,uBAAuB,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,oBAoC3B,CAAC"}
@@ -0,0 +1,133 @@
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 { createHash } from "node:crypto";
15
+ import { toBinary } from "@bufbuild/protobuf";
16
+ import { FileDescriptorProtoSchema } from "@bufbuild/protobuf/wkt";
17
+ import { mcpDefinition, mcpRegistrations, registryOptions, } from "@spine-event-engine/ai/spi/runtime";
18
+ /**
19
+ * Derives restart comparison keys without retaining application callbacks.
20
+ */
21
+ export const AgentRevisions = Object.freeze({
22
+ /**
23
+ * Computes descriptor and effective-policy digests for accepted work.
24
+ *
25
+ * @param state Generated Agent state descriptor.
26
+ * @param handlers Selected handler bindings in execution order.
27
+ * @param ai Effective Bounded Context AI registry.
28
+ * @param repository Repository capability configuration.
29
+ * @returns Revisions persisted for recovery comparison.
30
+ */
31
+ atAdmission(state, handlers, ai, repository) {
32
+ const schemas = [
33
+ state,
34
+ ...handlers.map((entry) => entry.handler.schema),
35
+ ...repository.models.flatMap((model) => [model.definition.input, model.definition.output]),
36
+ ];
37
+ const files = new Map(schemas.map((schema) => [schema.file.proto.name, schema.file.proto]));
38
+ const schemaHash = createHash("sha256");
39
+ for (const name of [...files.keys()].sort()) {
40
+ schemaHash.update(name);
41
+ const file = files.get(name);
42
+ if (file === undefined)
43
+ throw new Error("Agent descriptor disappeared during admission.");
44
+ schemaHash.update(toBinary(FileDescriptorProtoSchema, file));
45
+ }
46
+ return Object.freeze({
47
+ schema: schemaHash.digest("hex"),
48
+ policy: createHash("sha256")
49
+ .update(JSON.stringify(policyShape(ai, repository)))
50
+ .digest("hex"),
51
+ });
52
+ },
53
+ });
54
+ /**
55
+ * Selects serializable policy fields while callback revisions remain in codeRevision.
56
+ *
57
+ * @param ai Effective registry.
58
+ * @param repository Repository capabilities and narrowing policy.
59
+ * @returns Ordered policy value for a deterministic digest.
60
+ */
61
+ function policyShape(ai, repository) {
62
+ const options = registryOptions(ai);
63
+ return {
64
+ defaults: options.defaultModels,
65
+ limits: options.invocationLimits,
66
+ hookTimeoutMs: options.hookTimeoutMs,
67
+ repositoryDefaults: repository.defaultModels,
68
+ allowedModels: repository.allowedModels,
69
+ invocationLimits: repository.invocationLimits,
70
+ mcpServers: mcpPolicies(ai, repository),
71
+ models: repository.models.map(({ definition }) => ({
72
+ name: definition.name,
73
+ version: definition.version,
74
+ kind: definition.kind,
75
+ input: definition.input.typeName,
76
+ output: definition.output.typeName,
77
+ limits: definition.limits,
78
+ validationVersion: definition.validation?.version,
79
+ ...(definition.kind === "generation"
80
+ ? {
81
+ instructions: definition.instructions,
82
+ outputMode: definition.outputMode,
83
+ tools: definition.tools,
84
+ }
85
+ : {
86
+ questions: definition.questions,
87
+ mappingVersion: definition.mapping.version,
88
+ requireProbabilities: definition.requireProbabilities,
89
+ requireIndependentQuestions: definition.requireIndependentQuestions,
90
+ }),
91
+ })),
92
+ };
93
+ }
94
+ /**
95
+ * Hashes only available tools and their server policy without evaluating credential callbacks.
96
+ *
97
+ * @param ai Effective AI registry with registered tool servers.
98
+ * @param repository Model capabilities available to this Agent repository.
99
+ * @returns Deterministically ordered serializable server policies.
100
+ */
101
+ function mcpPolicies(ai, repository) {
102
+ const selected = repository.models.flatMap(({ definition }) => definition.kind === "generation" ? (definition.tools ?? []) : []);
103
+ return mcpRegistrations(ai)
104
+ .filter((registration) => selected.some((ref) => ref.server === mcpDefinition(registration).id))
105
+ .map((registration) => {
106
+ const server = mcpDefinition(registration);
107
+ const transport = server.transport.kind === "streamable-http"
108
+ ? { kind: server.transport.kind, url: server.transport.url }
109
+ : {
110
+ kind: server.transport.kind,
111
+ executable: server.transport.executable,
112
+ args: server.transport.args,
113
+ cwd: server.transport.cwd,
114
+ };
115
+ return {
116
+ id: server.id,
117
+ revision: server.revision,
118
+ transport,
119
+ tools: Object.entries(server.tools)
120
+ .filter(([name]) => selected.some((ref) => ref.server === server.id && ref.tool === name))
121
+ .sort(([left], [right]) => left.localeCompare(right))
122
+ .map(([name, policy]) => ({
123
+ name,
124
+ effect: policy.effect,
125
+ timeoutMs: policy.timeoutMs,
126
+ maxArgumentBytes: policy.maxArgumentBytes,
127
+ maxResultBytes: policy.maxResultBytes,
128
+ })),
129
+ };
130
+ })
131
+ .sort((left, right) => left.id.localeCompare(right.id));
132
+ }
133
+ //# sourceMappingURL=agent-revisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-revisions.js","sourceRoot":"","sources":["../../src/agent/agent-revisions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { type AgentInvocationKey } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
2
+ import type { TenantId } from "@spine-event-engine/proto";
3
+ import type { AgentPendingCursor, AgentPendingPage, TenantCatalogCursor } from "@spine-event-engine/storage/provider";
4
+ import type { TenantIndexPage } from "../context/tenant-index.js";
5
+ import { AgentExecutionCapacity } from "./agent-execution-capacity.js";
6
+ /**
7
+ * One complete repository and tenant visited by the Agent scheduler.
8
+ */
9
+ export interface AgentScanScope {
10
+ /**
11
+ * Identifies one repository and tenant scan scope.
12
+ */
13
+ readonly id: string;
14
+ /**
15
+ * Reads a finite page of unresolved Agent invocations.
16
+ *
17
+ * @param after Provider continuation from the prior page.
18
+ * @param count Maximum records requested for this scan.
19
+ * @returns Pending records and their next continuation.
20
+ */
21
+ pending(after: AgentPendingCursor | undefined, count: number): Promise<AgentPendingPage>;
22
+ /**
23
+ * Executes one invocation after attempting its provider claim.
24
+ *
25
+ * @param key Exact accepted invocation selected by the scan.
26
+ * @param signal Bounded Context shutdown cancellation signal.
27
+ * @returns Completion after the claimed work settles.
28
+ */
29
+ run(key: AgentInvocationKey, signal: AbortSignal): Promise<void>;
30
+ }
31
+ /**
32
+ * Produces finite tenant pages and lazily constructs registered scopes.
33
+ */
34
+ export interface AgentScopeSource {
35
+ /**
36
+ * Number of registered Agent repository views per tenant.
37
+ */
38
+ readonly repositories: number;
39
+ /**
40
+ * Reads one bounded tenant catalog page.
41
+ *
42
+ * @param after Opaque provider continuation from the prior page.
43
+ * @param signal Scheduler shutdown signal.
44
+ * @returns Complete tenant IDs and a possible continuation.
45
+ */
46
+ page(after: TenantCatalogCursor | undefined, signal: AbortSignal): Promise<TenantIndexPage>;
47
+ /**
48
+ * Creates one registered repository scope for a selected tenant.
49
+ *
50
+ * @param tenant Complete tenant identifier.
51
+ * @param repository Index in the fixed registered repository list.
52
+ * @returns A lazily constructed scan scope.
53
+ */
54
+ scope(tenant: TenantId, repository: number): AgentScanScope;
55
+ }
56
+ /**
57
+ * Bounded, round-robin scan of provider-indexed Agent heads.
58
+ */
59
+ export declare class AgentScheduler {
60
+ #private;
61
+ private readonly source;
62
+ private readonly capacity;
63
+ private readonly onError;
64
+ /**
65
+ * Creates bounded discovery for the Bounded Context's registered Agent scopes.
66
+ *
67
+ * @param source Pages tenants and constructs a registered scope on demand.
68
+ * @param capacity Shared registry execution gate.
69
+ * @param onError Reports failed discovery or execution turns.
70
+ */
71
+ constructor(source: AgentScopeSource, capacity: AgentExecutionCapacity, onError: (error: unknown) => void);
72
+ /**
73
+ * Starts periodic discovery, including pending work after process reconstruction.
74
+ */
75
+ start(): void;
76
+ /**
77
+ * Schedules a prompt bounded turn without resetting the fixed-time sweep.
78
+ *
79
+ * @param scope Newly accepted repository and tenant, when available.
80
+ */
81
+ wake(scope?: AgentScanScope): void;
82
+ /**
83
+ * Reads at most four indexed pages and retains continuation across turns.
84
+ *
85
+ * @returns Completion after this bounded scan, or the scan already in progress.
86
+ */
87
+ turn(): Promise<void>;
88
+ /**
89
+ * Stops discovery and waits for already dispatched bounded work.
90
+ */
91
+ stop(): void;
92
+ /**
93
+ * Waits for dispatched work after stopping new discovery.
94
+ *
95
+ * @returns Completion after active work has settled.
96
+ */
97
+ close(): Promise<void>;
98
+ }
99
+ //# sourceMappingURL=agent-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-scheduler.d.ts","sourceRoot":"","sources":["../../src/agent/agent-scheduler.ts"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,+EAA+E,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEzF;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5F;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC;CAC7D;AAmBD;;GAEG;AACH,qBAAa,cAAc;;IA6CvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B;;;;;;OAMG;gBAEgB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAGpD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI;IAelC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiR3B;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}