@spine-event-engine/storage-datastore 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.
package/README.md CHANGED
@@ -11,6 +11,11 @@ record schemas, and a configured Google Datastore client.
11
11
  For exact query limits, entity-storage behavior, and failure handling, see
12
12
  [REFERENCE documentation for agents](REFERENCE.md).
13
13
 
14
+ For an application using Agents, this provider keeps the Agent's accepted
15
+ work and recorded interactions across restarts. Deploy the supplied `index.yaml`
16
+ for Agent history and execution queries; see the [coding-agent reference](REFERENCE.md)
17
+ for provider requirements.
18
+
14
19
  ## 💡 Why use it?
15
20
 
16
21
  - ✅ Stores Spine records in Google Cloud Datastore or Firestore in Datastore mode.
package/REFERENCE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @spine-event-engine/storage-datastore reference
2
2
 
3
- This reference is for agents configuring the Google Cloud Datastore adapter.
3
+ This reference is for coding agents configuring the Google Cloud Datastore adapter.
4
4
 
5
5
  ## Public entry point
6
6
 
@@ -124,6 +124,20 @@ truncate behavior. Timestamp comparisons include seconds and nanoseconds.
124
124
  Long maintenance can commit several bounded chunks, so a later failure leaves
125
125
  earlier chunks durable and the caller retries the same idempotent operation.
126
126
 
127
+ The provider-only Agent history handle uses the fixed `spine_agent_history`
128
+ kind in each complete tenant namespace. Each row retains the original complete
129
+ `AgentHistoryEntry` and full state type and Agent key. SHA-256 digests provide
130
+ bounded physical IDs and indexed scope/conversation keys; every decoded row is
131
+ checked against the complete requested scope and conversation. A digest
132
+ collision fails the read. `index.yaml` declares three complete composite
133
+ indexes for scope plus full order, scope plus category plus full order, and
134
+ scope plus conversation digest plus full order. The order value encodes full
135
+ Timestamp seconds/nanoseconds, category, and unsigned UTF-8 record ID. Values
136
+ longer than Datastore's 1,500-byte indexed-string limit reject before append;
137
+ original scope strings remain unindexed in the payload. Reads use native pages
138
+ of at most 128 rows and sum serialized entry bytes. A fetched chunk can be
139
+ larger than the returned byte budget.
140
+
127
141
  The factory has one tenant catalog. It reads native `__namespace__` metadata,
128
142
  converts only namespaces recognized by its `NamespaceConverter`, and keeps an early
129
143
  in-memory cache for newly admitted tenants. `keep()` stores no `TenantId` row or
@@ -137,6 +151,32 @@ an old `_scope` property, or a scope-derived key name. Passing the inventory is
137
151
  a startup prerequisite; the application performs migration offline, with no
138
152
  dual-layout reads or automatic conflict winner.
139
153
 
154
+ ## Agent execution
155
+
156
+ Agent execution uses `spine_agent_execution` and `spine_agent_execution_head` in
157
+ the selected tenant namespace. Deploy the execution indexes in this package's
158
+ `index.yaml` together with its Agent history indexes. Pending queries select one
159
+ entry per instance by its complete eligibility-time key.
160
+
161
+ The database must support the adapter's non-ancestor query inside a transaction.
162
+ The `OPTIMISTIC_WITH_ENTITY_GROUPS` concurrency mode requires ancestor queries
163
+ and is therefore incompatible with Agent execution in this adapter. See
164
+ [Datastore transaction modes](https://docs.cloud.google.com/datastore/docs/concepts/transactions).
165
+ Admission probes that query and the indexed pending query before saving work.
166
+ A database mode that forbids it is rejected; the adapter does not fall back to
167
+ a scan or a query outside the transaction. The local Agent execution conformance suite uses the Firestore emulator in
168
+ Datastore mode, distributed with Google Cloud CLI 578.0.0. This tests the
169
+ transactional query capability; it does not validate a production project's
170
+ configuration.
171
+
172
+ Conditional completion reads the current Entity Version and pending work before
173
+ queuing writes. State, mandatory history, preferences, execution completion and
174
+ outgoing signals are saved in the same transaction. Datastore entity, index and
175
+ transaction limits still apply: execution, per-instance and Agent history
176
+ payloads are limited to 1,000,000 encoded bytes each, and the adapter limits a staged transaction to
177
+ 9 MiB. Response reservations must account for the complete stored records before
178
+ inference. No transaction remains open during a model call.
179
+
140
180
  ## Operations and errors
141
181
 
142
182
  Malformed payloads fail with a redacted decoding error. Physical Datastore
@@ -0,0 +1,337 @@
1
+ import { type Message } from "@bufbuild/protobuf";
2
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
3
+ import { type Event, type EventId } from "@spine-event-engine/proto";
4
+ import { type AgentAcceptedInvocation, type AgentExecutionHead, type AgentExecutionRecord, type AgentInvocationKey, type AgentSignalKey } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
5
+ import type { AgentHistoryRecord } from "@spine-event-engine/proto/generated/spine/server/agent/history_record_pb.js";
6
+ import type { EntityRecord } from "@spine-event-engine/proto/generated/spine/server/entity/entity_pb.js";
7
+ import { type AgentExecutionStorage, type AgentExecutionCapacity, type AgentExecutionStorageInput, type AgentExecutionClaim, type AgentExecutionUpdate, type AgentExecutionComplete, type AgentPendingRead, type AgentPendingPage } from "@spine-event-engine/storage/provider";
8
+ import { DatastoreRecordStorage } from "./record-storage.js";
9
+ /**
10
+ * Existing native record families participating in one Agent transaction.
11
+ *
12
+ * @typeParam I Typed entity identifier.
13
+ */
14
+ export interface DatastoreExecutionRows<I> {
15
+ /**
16
+ * Mutable execution evidence.
17
+ */
18
+ readonly invocation: DatastoreRecordStorage<string, AgentExecutionRecord>;
19
+ /**
20
+ * Per-instance discovery and claim row.
21
+ */
22
+ readonly head: DatastoreRecordStorage<string, AgentExecutionHead>;
23
+ /**
24
+ * Immutable conversation, System and domain history.
25
+ */
26
+ readonly history: DatastoreRecordStorage<string, AgentHistoryRecord>;
27
+ /**
28
+ * Current Entity state and Version.
29
+ */
30
+ readonly current: DatastoreRecordStorage<I, EntityRecord>;
31
+ /**
32
+ * Optional retained state-history records.
33
+ */
34
+ readonly states?: DatastoreRecordStorage<unknown, EntityRecord>;
35
+ /**
36
+ * Optional retained diagnostic Event records.
37
+ */
38
+ readonly diagnostics?: DatastoreRecordStorage<unknown, Event>;
39
+ /**
40
+ * Canonical outgoing Event envelopes.
41
+ */
42
+ readonly events: DatastoreRecordStorage<EventId, Event>;
43
+ }
44
+ /**
45
+ * Persists Agent execution evidence through native namespace-scoped transactions.
46
+ *
47
+ * @typeParam I Typed Agent identifier.
48
+ * @typeParam S Generated Agent state.
49
+ */
50
+ export declare class DatastoreAgentExecution<I, S extends Message> implements AgentExecutionStorage<I, S> {
51
+ #private;
52
+ private readonly input;
53
+ private readonly rows;
54
+ /**
55
+ * Entity and staged-transaction limits for complete internal Protobuf wrappers.
56
+ */
57
+ readonly capacity: Required<AgentExecutionCapacity>;
58
+ /**
59
+ * Binds one complete tenant and generated state type to native record kinds.
60
+ *
61
+ * @param input Requested fenced execution change.
62
+ * @param rows Provider record handles bound to the tenant.
63
+ */
64
+ constructor(input: AgentExecutionStorageInput<I, S>, rows: DatastoreExecutionRows<I>);
65
+ /**
66
+ * Persists source facts once after proving transaction-query capability.
67
+ *
68
+ * @param accepted Original accepted signal and selected bindings.
69
+ * @returns Persisted invocation with the original accepted facts.
70
+ */
71
+ admit(accepted: AgentAcceptedInvocation): Promise<AgentExecutionRecord>;
72
+ /**
73
+ * Reads a bounded native head page before a fixed provider-time cutoff.
74
+ *
75
+ * @param request Bounded pending-page request.
76
+ * @returns Bounded eligible work and continuation cursor.
77
+ */
78
+ pending(request: AgentPendingRead): Promise<AgentPendingPage>;
79
+ /**
80
+ * Reads no more than count plus one complete native head keys.
81
+ *
82
+ * @param asOf Fixed eligibility cutoff for the page.
83
+ * @param request Bounded pending-page request.
84
+ * @returns Bounded native page of eligible per-instance heads.
85
+ */
86
+ private pendingHeads;
87
+ /**
88
+ * Reads one complete retained invocation after reconstruction.
89
+ *
90
+ * @param key Original Agent invocation identity.
91
+ * @returns Complete stored invocation when present.
92
+ */
93
+ read(key: AgentInvocationKey): Promise<AgentExecutionRecord | undefined>;
94
+ /**
95
+ * Acquires the earliest same-instance candidate with a fresh transaction clock.
96
+ *
97
+ * @param expiresAt Requested future lease expiry.
98
+ * @param key Original Agent invocation identity.
99
+ * @param token Exclusive claim token.
100
+ * @returns Claimed work and preferences when eligible.
101
+ */
102
+ claim(key: AgentInvocationKey, token: string, expiresAt: Timestamp): Promise<AgentExecutionClaim | undefined>;
103
+ /**
104
+ * Checks the current head and invocation before writing one exclusive lease.
105
+ *
106
+ * @param expiresAt Requested future lease expiry.
107
+ * @param key Original Agent invocation identity.
108
+ * @param token Exclusive claim token.
109
+ * @param tx Native transaction that fences the change.
110
+ * @returns Claimed record and preferences when eligible.
111
+ */
112
+ private claimLocked;
113
+ /**
114
+ * Checks the current per-instance head and earliest unresolved source.
115
+ *
116
+ * @param tx Native transaction that fences the claim.
117
+ * @param head Per-instance pending and lease record.
118
+ * @param key Original Agent invocation identity.
119
+ * @param now Fresh time read inside the transaction.
120
+ * @returns Whether this invocation may receive the next lease.
121
+ */
122
+ private eligibleClaim;
123
+ /**
124
+ * Updates the same live token inside a fresh native transaction.
125
+ *
126
+ * @param expiresAt Requested future lease expiry.
127
+ * @param key Original Agent invocation identity.
128
+ * @param token Exclusive claim token.
129
+ * @returns Whether the current lease was extended.
130
+ */
131
+ renew(key: AgentInvocationKey, token: string, expiresAt: Timestamp): Promise<boolean>;
132
+ /**
133
+ * Persists evidence and immutable history inside one native transaction.
134
+ *
135
+ * @param input Requested fenced execution change.
136
+ * @returns Completion after fenced evidence is persisted.
137
+ */
138
+ update(input: AgentExecutionUpdate): Promise<void>;
139
+ /**
140
+ * Commits Entity, history, preferences and outgoing IDs together.
141
+ *
142
+ * @param input Requested fenced execution change.
143
+ * @returns Completion after conditional Entity and evidence commit.
144
+ */
145
+ complete(input: AgentExecutionComplete<I, S>): Promise<void>;
146
+ /**
147
+ * Marks original output IDs delivered without rerunning completed handlers.
148
+ *
149
+ * @param expectedRecordBytes Exact prior execution record bytes.
150
+ * @param key Original Agent invocation identity.
151
+ * @param signals Original outgoing signal identities.
152
+ * @param token Exclusive claim token.
153
+ * @returns Completion after original output IDs are marked delivered.
154
+ */
155
+ markDelivered(key: AgentInvocationKey, token: string, expectedRecordBytes: Uint8Array, signals: readonly AgentSignalKey[]): Promise<void>;
156
+ /**
157
+ * Closes provider handles without deleting accepted work.
158
+ */
159
+ close(): void;
160
+ /**
161
+ * Rejects use after closure and probes native transaction-query support once.
162
+ *
163
+ * @returns Completion after provider capabilities are checked.
164
+ */
165
+ private ready;
166
+ /**
167
+ * Checks flat scoped successor and head queries before accepting a signal.
168
+ *
169
+ * @returns Completion after native query support is verified.
170
+ */
171
+ private checkCapability;
172
+ /**
173
+ * Checks that native indexed head pagination is available.
174
+ *
175
+ * @returns Completion after the indexed query succeeds.
176
+ */
177
+ private checkHeadCapability;
178
+ /**
179
+ * Executes one namespace-scoped transaction and retries native contention.
180
+ *
181
+ * @param work Operation executed inside the transaction.
182
+ * @returns Callback result after the native transaction commits.
183
+ * @typeParam T Result returned by the transaction callback.
184
+ */
185
+ private transaction;
186
+ /**
187
+ * Reads one head by complete scope inside the active transaction.
188
+ *
189
+ * @param key Original Agent invocation identity.
190
+ * @param tx Native transaction that fences the change.
191
+ * @returns Per-instance head when present.
192
+ */
193
+ private head;
194
+ /**
195
+ * Reads one invocation by original source and complete scope.
196
+ *
197
+ * @param key Original Agent invocation identity.
198
+ * @param tx Native transaction that fences the change.
199
+ * @returns Stored invocation when present.
200
+ */
201
+ private invocation;
202
+ /**
203
+ * Reads a materialized key and decodes exact original Protobuf bytes.
204
+ *
205
+ * @param id Complete persisted record identity.
206
+ * @param storage Native record storage for this row.
207
+ * @param tx Native transaction that fences the change.
208
+ * @returns Stored typed row when present.
209
+ * @typeParam Id Typed record identifier.
210
+ * @typeParam R Typed persisted record.
211
+ */
212
+ private readRow;
213
+ /**
214
+ * Queues one validated native row for the current short transaction.
215
+ *
216
+ * @param record Persisted Agent execution record.
217
+ * @param storage Native record storage for this row.
218
+ * @param tx Native transaction that fences the change.
219
+ * @typeParam Id Typed record identifier.
220
+ * @typeParam R Typed persisted record.
221
+ */
222
+ private save;
223
+ /**
224
+ * Checks fresh Time, exact token, and the persisted claim image.
225
+ *
226
+ * @param key Original Agent invocation identity.
227
+ * @param token Exclusive claim token.
228
+ * @param tx Native transaction that fences the change.
229
+ * @returns Current record and head if the token remains valid.
230
+ */
231
+ private claimed;
232
+ /**
233
+ * Checks exact prior bytes and unchanged immutable source facts.
234
+ *
235
+ * @param checkNext Whether to validate the proposed next record.
236
+ * @param input Requested fenced execution change.
237
+ * @param tx Native transaction that fences the change.
238
+ * @returns Current fenced record and head.
239
+ */
240
+ private expected;
241
+ /**
242
+ * Updates the pending head for one earlier accepted source without resetting existing eligibility.
243
+ *
244
+ * @param head Per-instance pending and lease record.
245
+ * @param record Persisted Agent execution record.
246
+ */
247
+ private offerCandidate;
248
+ /**
249
+ * Reads up to two same-instance rows per unresolved status inside the transaction.
250
+ *
251
+ * @param exclude Invocation omitted while selecting the successor.
252
+ * @param key Original Agent invocation identity.
253
+ * @param tx Native transaction that fences the change.
254
+ * @returns Earliest unresolved invocation when present.
255
+ */
256
+ private successor;
257
+ /**
258
+ * Reads the first two rows of one unresolved status under the instance scope.
259
+ *
260
+ * @param tx Native transaction that fences successor selection.
261
+ * @param scope Generated state type and canonical Agent key.
262
+ * @param status Persisted unresolved invocation status.
263
+ * @returns Native rows in complete Inbox order.
264
+ */
265
+ private successorsForStatus;
266
+ /**
267
+ * Updates the next original Inbox source after terminal work.
268
+ *
269
+ * @param head Per-instance pending and lease record.
270
+ * @param key Original Agent invocation identity.
271
+ * @param order Original Inbox order.
272
+ * @param tx Native transaction that fences the change.
273
+ * @returns Completion after updating the next pending head.
274
+ */
275
+ private advance;
276
+ /**
277
+ * Reads immutable history keys before queuing any transaction writes.
278
+ *
279
+ * @param entries Immutable history entries to append.
280
+ * @param key Original Agent invocation identity.
281
+ * @param tx Native transaction that fences the change.
282
+ * @returns Completion after immutable history is appended.
283
+ */
284
+ private appendHistory;
285
+ /**
286
+ * Persists one missing immutable row or rejects divergent existing bytes.
287
+ *
288
+ * @param record Persisted Agent execution record.
289
+ * @param storage Native record storage for this row.
290
+ * @param tx Native transaction that fences the change.
291
+ * @returns Completion after immutable row insertion or exact-byte verification.
292
+ * @typeParam Id Typed record identifier.
293
+ * @typeParam R Typed persisted record.
294
+ */
295
+ private immutable;
296
+ /**
297
+ * Checks initial Version and stages Entity records in this transaction.
298
+ *
299
+ * @param expected Expected current Entity Version.
300
+ * @param input Requested fenced execution change.
301
+ * @param tx Native transaction that fences the change.
302
+ * @returns Completion after conditional Entity state and Version write.
303
+ */
304
+ private completeEntity;
305
+ /**
306
+ * Rejects cross-Entity completion and disabled framework histories.
307
+ *
308
+ * @param commit Conditional Entity state and Version write.
309
+ * @param id Complete persisted record identity.
310
+ */
311
+ private validateEntityCommit;
312
+ /**
313
+ * Checks exactly one Version advance or an unchanged state.
314
+ *
315
+ * @param input Requested fenced execution change.
316
+ * @param prior Previously persisted execution record.
317
+ * @returns Expected initial Entity Version.
318
+ */
319
+ private validateCompletion;
320
+ /**
321
+ * Checks native indexed metadata and per-entity payload limits.
322
+ *
323
+ * @param record Persisted Agent execution record.
324
+ */
325
+ private validateRecord;
326
+ /**
327
+ * Checks complete head discovery key and per-entity payload limits.
328
+ *
329
+ * @param head Per-instance pending and lease record.
330
+ */
331
+ private validateHead;
332
+ /**
333
+ * Rejects provider calls after closure.
334
+ */
335
+ private requireOpen;
336
+ }
337
+ //# sourceMappingURL=agent-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-execution.d.ts","sourceRoot":"","sources":["../../src/datastore/agent-execution.ts"],"names":[],"mappings":"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"}