@spine-event-engine/storage-mysql 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 +8 -0
- package/REFERENCE.md +39 -3
- package/dist/mysql/agent-execution.d.ts +278 -0
- package/dist/mysql/agent-execution.d.ts.map +1 -0
- package/dist/mysql/agent-execution.js +638 -0
- package/dist/mysql/agent-execution.js.map +1 -0
- package/dist/mysql/agent-history.d.ts +104 -0
- package/dist/mysql/agent-history.d.ts.map +1 -0
- package/dist/mysql/agent-history.js +212 -0
- package/dist/mysql/agent-history.js.map +1 -0
- package/dist/mysql/record-storage.d.ts +33 -0
- package/dist/mysql/record-storage.d.ts.map +1 -1
- package/dist/mysql/record-storage.js +92 -11
- package/dist/mysql/record-storage.js.map +1 -1
- package/dist/mysql/storage-factory.d.ts +22 -0
- package/dist/mysql/storage-factory.d.ts.map +1 -1
- package/dist/mysql/storage-factory.js +164 -11
- package/dist/mysql/storage-factory.js.map +1 -1
- package/dist/mysql/table-spec.d.ts +13 -0
- package/dist/mysql/table-spec.d.ts.map +1 -1
- package/dist/mysql/table-spec.js +81 -1
- package/dist/mysql/table-spec.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -11,6 +11,10 @@ record schemas, and a reachable MySQL database.
|
|
|
11
11
|
For database requirements, query limits, lifecycle, and error details, 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. Use InnoDB for Agent repositories;
|
|
16
|
+
see the [coding-agent reference](REFERENCE.md) for database requirements.
|
|
17
|
+
|
|
14
18
|
## 💡 Why use it?
|
|
15
19
|
|
|
16
20
|
- ✅ Stores Spine records durably in a MySQL database.
|
|
@@ -123,6 +127,10 @@ numbers, enums, bytes, messages, `Timestamp`, and `Version`. Spine JVM JDBC
|
|
|
123
127
|
does not support `float` or `double` record columns, so this adapter rejects
|
|
124
128
|
them too.
|
|
125
129
|
|
|
130
|
+
Indexed `Timestamp` columns store epoch nanoseconds in signed 64-bit `BIGINT`.
|
|
131
|
+
Values must fit that range (approximately 1677–2262 UTC); Protobuf's wider
|
|
132
|
+
`Timestamp` range does not expand the SQL range.
|
|
133
|
+
|
|
126
134
|
MyISAM and Aria limit the byte length of an indexed key. Their `VARCHAR(512)`
|
|
127
135
|
ID column therefore needs a one-byte binary collation, such as `latin1_bin`,
|
|
128
136
|
and every ID must be representable in that character set. The normal InnoDB
|
package/REFERENCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @spine-event-engine/storage-mysql reference
|
|
2
2
|
|
|
3
|
-
This reference is for agents configuring the supported MySQL storage adapter.
|
|
3
|
+
This reference is for coding agents configuring the supported MySQL storage adapter.
|
|
4
4
|
|
|
5
5
|
## Public entry point
|
|
6
6
|
|
|
@@ -88,8 +88,10 @@ revision. Proto fields without `(column)` exist only inside the authoritative
|
|
|
88
88
|
never altered. A mismatched type, nullability, primary key, unique constraint,
|
|
89
89
|
or extra column is rejected. Ordinary message columns use the same configured
|
|
90
90
|
reversible stringifier for writes and query operands. `Timestamp` uses epoch
|
|
91
|
-
nanoseconds
|
|
92
|
-
|
|
91
|
+
nanoseconds in signed 64-bit `BIGINT` columns. Indexed timestamp values must
|
|
92
|
+
fit that range (approximately 1677–2262 UTC); Protobuf's wider `Timestamp`
|
|
93
|
+
range does not expand the SQL range. `Version` uses its number. Floating-point
|
|
94
|
+
record columns are not supported by Spine JVM JDBC and are rejected here.
|
|
93
95
|
|
|
94
96
|
Queries execute ID filters, ANDed column filters, materialized-column sorts,
|
|
95
97
|
keyset continuations, offsets, and limits in MySQL. Before executing, MySQL
|
|
@@ -131,6 +133,40 @@ nontransactional engines use a deterministic immutable-history prefix and may
|
|
|
131
133
|
require an identical retry after a storage failure. Standalone history
|
|
132
134
|
operations remain separate.
|
|
133
135
|
|
|
136
|
+
## Agent history
|
|
137
|
+
|
|
138
|
+
The provider-only Agent history handle stores original complete
|
|
139
|
+
`AgentHistoryEntry` bytes and full repository scope in one `agent_history`
|
|
140
|
+
record family per tenant database. SHA-256 digests provide bounded physical
|
|
141
|
+
record IDs and indexed scope/conversation keys; reads also compare the full
|
|
142
|
+
state type, Agent key, and selected conversation key with binary equality.
|
|
143
|
+
Three validated InnoDB B-tree indexes cover scope plus full order, scope plus
|
|
144
|
+
category plus full order, and scope plus conversation digest plus full order.
|
|
145
|
+
The `VARBINARY(2944)` order column fits the 3,072-byte InnoDB composite-index
|
|
146
|
+
budget with two 64-byte digests; category uses 12 bytes. Its value encodes the
|
|
147
|
+
complete Timestamp, category, and unsigned UTF-8 record ID. Longer values
|
|
148
|
+
reject before storage rather than using a prefix index. Existing prefix,
|
|
149
|
+
misordered, or otherwise incompatible same-name indexes reject when the handle
|
|
150
|
+
opens. Pages use bounded native SQL chunks and sum serialized entry bytes; a
|
|
151
|
+
fetched chunk can be larger than the returned byte budget.
|
|
152
|
+
|
|
153
|
+
## Agent execution
|
|
154
|
+
|
|
155
|
+
Agent execution conformance is exercised with MySQL 5.7 and 8.4, and MariaDB 11.4.
|
|
156
|
+
|
|
157
|
+
Agent repositories require InnoDB. The execution handle rejects a nontransactional
|
|
158
|
+
engine before accepting Agent work; the existing engine choices for other Entity
|
|
159
|
+
families are unchanged. Execution and per-instance pending records use complete
|
|
160
|
+
binary ordering keys and validated composite indexes.
|
|
161
|
+
|
|
162
|
+
One connection transaction checks the claim and initial Entity Version, then
|
|
163
|
+
writes state, mandatory history, preferences and outgoing signals. Connection
|
|
164
|
+
binding is scoped to that asynchronous operation. Encoded execution,
|
|
165
|
+
per-instance, and Agent history records must each fit the 65,535-byte BLOB limit. The runtime must
|
|
166
|
+
check its response reservation against the provider limits before inference.
|
|
167
|
+
Reopening a factory can read the saved work. No transaction remains open during
|
|
168
|
+
a model request.
|
|
169
|
+
|
|
134
170
|
`MysqlStorageSchemaError` reports incompatible layouts,
|
|
135
171
|
`MysqlStorageDataError` reports stored bytes that cannot be decoded, and
|
|
136
172
|
`MysqlStorageOperationError` reports sanitized bounds, query, collision, and
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { type Message } from "@bufbuild/protobuf";
|
|
2
|
+
import type { Timestamp } from "@bufbuild/protobuf/wkt";
|
|
3
|
+
import type { Event, 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 AgentExecutionStorage, type AgentExecutionCapacity, type AgentExecutionStorageInput, type AgentExecutionClaim, type AgentExecutionUpdate, type AgentExecutionComplete, type AgentPendingRead, type AgentPendingPage } from "@spine-event-engine/storage/provider";
|
|
7
|
+
import { MysqlEntityCommitCoordinator } from "./entity-commit.js";
|
|
8
|
+
import { MysqlEntityStorage } from "./entity-history.js";
|
|
9
|
+
import { MysqlRecordStorage } from "./record-storage.js";
|
|
10
|
+
/**
|
|
11
|
+
* Native records that participate in every Agent execution transaction.
|
|
12
|
+
*
|
|
13
|
+
* @typeParam I Typed entity identifier.
|
|
14
|
+
* @typeParam S Generated Entity state.
|
|
15
|
+
*/
|
|
16
|
+
interface ExecutionRows<I, S extends Message> {
|
|
17
|
+
readonly invocation: MysqlRecordStorage<string, AgentExecutionRecord>;
|
|
18
|
+
readonly head: MysqlRecordStorage<string, AgentExecutionHead>;
|
|
19
|
+
readonly history: MysqlRecordStorage<string, AgentHistoryRecord>;
|
|
20
|
+
readonly entity: MysqlEntityStorage<I, S>;
|
|
21
|
+
readonly events: MysqlRecordStorage<EventId, Event>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Persists Agent claims and evidence through one required InnoDB transaction.
|
|
25
|
+
*
|
|
26
|
+
* @typeParam I Typed Agent identifier.
|
|
27
|
+
* @typeParam S Generated Agent state.
|
|
28
|
+
*/
|
|
29
|
+
export declare class MysqlAgentExecution<I, S extends Message> implements AgentExecutionStorage<I, S> {
|
|
30
|
+
#private;
|
|
31
|
+
private readonly input;
|
|
32
|
+
private readonly rows;
|
|
33
|
+
private readonly coordinator;
|
|
34
|
+
private readonly databaseName;
|
|
35
|
+
/**
|
|
36
|
+
* Native BLOB row limits for complete internal Protobuf wrappers.
|
|
37
|
+
*/
|
|
38
|
+
readonly capacity: Required<Pick<AgentExecutionCapacity, "executionRecordBytes" | "executionHeadBytes" | "historyRecordBytes">>;
|
|
39
|
+
/**
|
|
40
|
+
* Binds tenant-scoped record families and the native transaction coordinator.
|
|
41
|
+
*
|
|
42
|
+
* @param coordinator Native transaction coordinator.
|
|
43
|
+
* @param databaseName Tenant database name.
|
|
44
|
+
* @param input Requested fenced execution change.
|
|
45
|
+
* @param rows Provider record handles bound to the tenant.
|
|
46
|
+
*/
|
|
47
|
+
constructor(input: AgentExecutionStorageInput<I, S>, rows: ExecutionRows<I, S>, coordinator: MysqlEntityCommitCoordinator, databaseName: string);
|
|
48
|
+
/**
|
|
49
|
+
* Persists original accepted work once under the per-instance row lock.
|
|
50
|
+
*
|
|
51
|
+
* @param accepted Original accepted signal and selected bindings.
|
|
52
|
+
* @returns Persisted invocation with the original accepted facts.
|
|
53
|
+
*/
|
|
54
|
+
admit(accepted: AgentAcceptedInvocation): Promise<AgentExecutionRecord>;
|
|
55
|
+
/**
|
|
56
|
+
* Reads one bounded page from complete native pending indexes.
|
|
57
|
+
*
|
|
58
|
+
* @param request Bounded pending-page request.
|
|
59
|
+
* @returns Bounded eligible work and continuation cursor.
|
|
60
|
+
*/
|
|
61
|
+
pending(request: AgentPendingRead): Promise<AgentPendingPage>;
|
|
62
|
+
/**
|
|
63
|
+
* Builds the indexed native query for one fixed eligibility cutoff.
|
|
64
|
+
*
|
|
65
|
+
* @param request Bounded pending-page request.
|
|
66
|
+
* @param asOf Fixed provider-time eligibility cutoff.
|
|
67
|
+
* @returns Native SQL and exact bound values.
|
|
68
|
+
*/
|
|
69
|
+
private pendingQuery;
|
|
70
|
+
/**
|
|
71
|
+
* Reads one complete invocation after provider reconstruction.
|
|
72
|
+
*
|
|
73
|
+
* @param key Original Agent invocation identity.
|
|
74
|
+
* @returns Complete stored invocation when present.
|
|
75
|
+
*/
|
|
76
|
+
read(key: AgentInvocationKey): Promise<AgentExecutionRecord | undefined>;
|
|
77
|
+
/**
|
|
78
|
+
* Acquires earliest unresolved work and records the current exclusive token.
|
|
79
|
+
*
|
|
80
|
+
* @param expiresAt Requested future lease expiry.
|
|
81
|
+
* @param key Original Agent invocation identity.
|
|
82
|
+
* @param token Exclusive claim token.
|
|
83
|
+
* @returns Claimed work and preferences when eligible.
|
|
84
|
+
*/
|
|
85
|
+
claim(key: AgentInvocationKey, token: string, expiresAt: Timestamp): Promise<AgentExecutionClaim | undefined>;
|
|
86
|
+
/**
|
|
87
|
+
* Checks the locked instance and writes one current lease.
|
|
88
|
+
*
|
|
89
|
+
* @param key Original Agent invocation identity.
|
|
90
|
+
* @param token New exclusive claim token.
|
|
91
|
+
* @param expiresAt Requested future lease expiry.
|
|
92
|
+
* @returns Claimed record and preferences when eligible.
|
|
93
|
+
*/
|
|
94
|
+
private claimLocked;
|
|
95
|
+
/**
|
|
96
|
+
* Checks the current head and earliest same-instance source.
|
|
97
|
+
*
|
|
98
|
+
* @param head Per-instance pending and lease record.
|
|
99
|
+
* @param key Original Agent invocation identity.
|
|
100
|
+
* @param now Fresh time read in the locked transaction.
|
|
101
|
+
* @returns Whether this invocation may receive the next lease.
|
|
102
|
+
*/
|
|
103
|
+
private eligibleClaim;
|
|
104
|
+
/**
|
|
105
|
+
* Updates a still-live token under a fresh transaction clock.
|
|
106
|
+
*
|
|
107
|
+
* @param expiresAt Requested future lease expiry.
|
|
108
|
+
* @param key Original Agent invocation identity.
|
|
109
|
+
* @param token Exclusive claim token.
|
|
110
|
+
* @returns Whether the current lease was extended.
|
|
111
|
+
*/
|
|
112
|
+
renew(key: AgentInvocationKey, token: string, expiresAt: Timestamp): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Persists a journal update and its immutable history under one transaction.
|
|
115
|
+
*
|
|
116
|
+
* @param input Requested fenced execution change.
|
|
117
|
+
* @returns Completion after fenced evidence is persisted.
|
|
118
|
+
*/
|
|
119
|
+
update(input: AgentExecutionUpdate): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Commits state, history, preferences and outgoing obligations together.
|
|
122
|
+
*
|
|
123
|
+
* @param input Requested fenced execution change.
|
|
124
|
+
* @returns Completion after conditional Entity and evidence commit.
|
|
125
|
+
*/
|
|
126
|
+
complete(input: AgentExecutionComplete<I, S>): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Marks original outgoing IDs delivered under the still-current token.
|
|
129
|
+
*
|
|
130
|
+
* @param expectedRecordBytes Exact prior execution record bytes.
|
|
131
|
+
* @param key Original Agent invocation identity.
|
|
132
|
+
* @param signals Original outgoing signal identities.
|
|
133
|
+
* @param token Exclusive claim token.
|
|
134
|
+
* @returns Completion after original output IDs are marked delivered.
|
|
135
|
+
*/
|
|
136
|
+
markDelivered(key: AgentInvocationKey, token: string, expectedRecordBytes: Uint8Array, signals: readonly AgentSignalKey[]): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* Marks exact saved output IDs within the current per-instance transaction.
|
|
139
|
+
*
|
|
140
|
+
* @param key Original Agent invocation identity.
|
|
141
|
+
* @param token Current exclusive claim token.
|
|
142
|
+
* @param expectedRecordBytes Exact prior execution record bytes.
|
|
143
|
+
* @param signals Original accepted output IDs.
|
|
144
|
+
* @returns Completion after persisted output status is updated.
|
|
145
|
+
*/
|
|
146
|
+
private deliverLocked;
|
|
147
|
+
/**
|
|
148
|
+
* Closes record handles without deleting accepted work.
|
|
149
|
+
*/
|
|
150
|
+
close(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Prepares existing record families and verifies complete binary indexes.
|
|
153
|
+
*
|
|
154
|
+
* @returns Completion after provider capabilities are checked.
|
|
155
|
+
*/
|
|
156
|
+
private ready;
|
|
157
|
+
/**
|
|
158
|
+
* Prepares every table before transactions and checks the native indexes.
|
|
159
|
+
*
|
|
160
|
+
* @returns Completion after native tables and indexes are prepared.
|
|
161
|
+
*/
|
|
162
|
+
private initialize;
|
|
163
|
+
/**
|
|
164
|
+
* Executes all record-family work on one required InnoDB connection.
|
|
165
|
+
*
|
|
166
|
+
* @param key Original Agent invocation identity.
|
|
167
|
+
* @param work Operation executed inside the transaction.
|
|
168
|
+
* @returns Callback result after the native transaction commits.
|
|
169
|
+
* @typeParam T Result returned by the transaction callback.
|
|
170
|
+
*/
|
|
171
|
+
private transaction;
|
|
172
|
+
/**
|
|
173
|
+
* Reads a head under the transaction lock and verifies the full scope.
|
|
174
|
+
*
|
|
175
|
+
* @param key Original Agent invocation identity.
|
|
176
|
+
* @returns Per-instance head when present.
|
|
177
|
+
*/
|
|
178
|
+
private currentHead;
|
|
179
|
+
/**
|
|
180
|
+
* Reads the invocation under the transaction lock and verifies its identity.
|
|
181
|
+
*
|
|
182
|
+
* @param key Original Agent invocation identity.
|
|
183
|
+
* @returns Stored invocation when present.
|
|
184
|
+
*/
|
|
185
|
+
private existing;
|
|
186
|
+
/**
|
|
187
|
+
* Rejects a physical digest collision on an invocation row.
|
|
188
|
+
*
|
|
189
|
+
* @param found Stored record read in this transaction.
|
|
190
|
+
* @param key Original Agent invocation identity.
|
|
191
|
+
*/
|
|
192
|
+
private checkIdentity;
|
|
193
|
+
/**
|
|
194
|
+
* Checks this is the earliest unresolved invocation in the full scope.
|
|
195
|
+
*
|
|
196
|
+
* @param key Original Agent invocation identity.
|
|
197
|
+
* @returns Whether this invocation is earliest unresolved work.
|
|
198
|
+
*/
|
|
199
|
+
private earliest;
|
|
200
|
+
/**
|
|
201
|
+
* Reads at most two native rows for each unresolved status.
|
|
202
|
+
*
|
|
203
|
+
* @param exclude Invocation omitted while selecting the successor.
|
|
204
|
+
* @param key Original Agent invocation identity.
|
|
205
|
+
* @returns Earliest unresolved invocation when present.
|
|
206
|
+
*/
|
|
207
|
+
private successor;
|
|
208
|
+
/**
|
|
209
|
+
* Adds an earlier source while retaining the prior eligibility value.
|
|
210
|
+
*
|
|
211
|
+
* @param head Per-instance pending and lease record.
|
|
212
|
+
* @param record Persisted Agent execution record.
|
|
213
|
+
*/
|
|
214
|
+
private offerCandidate;
|
|
215
|
+
/**
|
|
216
|
+
* Updates terminal work to the next same-instance source in one transaction.
|
|
217
|
+
*
|
|
218
|
+
* @param head Per-instance pending and lease record.
|
|
219
|
+
* @param key Original Agent invocation identity.
|
|
220
|
+
* @param order Original Inbox order.
|
|
221
|
+
* @returns Completion after updating the next pending head.
|
|
222
|
+
*/
|
|
223
|
+
private advanceCandidate;
|
|
224
|
+
/**
|
|
225
|
+
* Reads the current claim with fresh Time inside the native transaction.
|
|
226
|
+
*
|
|
227
|
+
* @param key Original Agent invocation identity.
|
|
228
|
+
* @param token Exclusive claim token.
|
|
229
|
+
* @returns Current record and head if the token remains valid.
|
|
230
|
+
*/
|
|
231
|
+
private claimed;
|
|
232
|
+
/**
|
|
233
|
+
* Checks exact prior bytes and preserves immutable source facts.
|
|
234
|
+
*
|
|
235
|
+
* @param checkNext Whether to validate the proposed next record.
|
|
236
|
+
* @param input Requested fenced execution change.
|
|
237
|
+
* @returns Current fenced record and head.
|
|
238
|
+
*/
|
|
239
|
+
private expected;
|
|
240
|
+
/**
|
|
241
|
+
* Prepares immutable history records under the same fenced transaction.
|
|
242
|
+
*
|
|
243
|
+
* @param entries Immutable history entries to append.
|
|
244
|
+
* @param key Original Agent invocation identity.
|
|
245
|
+
* @returns Completion after immutable history is appended.
|
|
246
|
+
*/
|
|
247
|
+
private appendHistory;
|
|
248
|
+
/**
|
|
249
|
+
* Rejects a changed initial Version and applies Entity rows in this transaction.
|
|
250
|
+
*
|
|
251
|
+
* @param expectedVersion Expected current Entity Version.
|
|
252
|
+
* @param input Requested fenced execution change.
|
|
253
|
+
* @returns Completion after conditional Entity state and Version write.
|
|
254
|
+
*/
|
|
255
|
+
private completeEntity;
|
|
256
|
+
/**
|
|
257
|
+
* Checks exactly one Version advance or a no-op completion.
|
|
258
|
+
*
|
|
259
|
+
* @param input Requested fenced execution change.
|
|
260
|
+
* @param prior Previously persisted execution record.
|
|
261
|
+
* @returns Expected initial Entity Version.
|
|
262
|
+
*/
|
|
263
|
+
private validateCompletion;
|
|
264
|
+
/**
|
|
265
|
+
* Rejects values outside the full InnoDB index or record payload budget.
|
|
266
|
+
*
|
|
267
|
+
* @param record Persisted Agent execution record.
|
|
268
|
+
*/
|
|
269
|
+
private validateRecord;
|
|
270
|
+
/**
|
|
271
|
+
* Checks complete indexed discovery and native record payload budgets.
|
|
272
|
+
*
|
|
273
|
+
* @param head Per-instance pending and lease record.
|
|
274
|
+
*/
|
|
275
|
+
private validateHead;
|
|
276
|
+
}
|
|
277
|
+
export {};
|
|
278
|
+
//# sourceMappingURL=agent-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-execution.d.ts","sourceRoot":"","sources":["../../src/mysql/agent-execution.ts"],"names":[],"mappings":"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"}
|