@dsh-enhanced/assistant-memory-learning 0.0.0-stage → 0.1.53
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/LICENSE +21 -0
- package/README.md +57 -2
- package/cordis.patch.yml +16 -0
- package/lib/config.d.ts +6 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +71 -0
- package/lib/config.js.map +1 -0
- package/lib/extractor.d.ts +25 -0
- package/lib/extractor.d.ts.map +1 -0
- package/lib/extractor.js +244 -0
- package/lib/extractor.js.map +1 -0
- package/lib/index.d.ts +37 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +33 -0
- package/lib/index.js.map +1 -0
- package/lib/runtime.d.ts +116 -0
- package/lib/runtime.d.ts.map +1 -0
- package/lib/runtime.js +474 -0
- package/lib/runtime.js.map +1 -0
- package/lib/store.d.ts +43 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +524 -0
- package/lib/store.js.map +1 -0
- package/lib/types.d.ts +78 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/package.json +123 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/lib/store.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { MemoryLearningReviewRequest } from '@dsh-enhanced/assistant-growth-contract';
|
|
2
|
+
import type { LearningCursor, LearningIntent, LearningJob, LearningSnapshot, LearningState } from './types.js';
|
|
3
|
+
type Feed = 'delivery' | 'evaluation';
|
|
4
|
+
type Grant = Readonly<{
|
|
5
|
+
authorityId: string;
|
|
6
|
+
configDigest: string;
|
|
7
|
+
maxExtractions: number;
|
|
8
|
+
}>;
|
|
9
|
+
export declare class LearningStoreError extends Error {
|
|
10
|
+
readonly code: 'invalid-input' | 'conflict' | 'corrupt' | 'closed';
|
|
11
|
+
constructor(code: 'invalid-input' | 'conflict' | 'corrupt' | 'closed', message: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class LearningStore {
|
|
14
|
+
#private;
|
|
15
|
+
constructor(path: string, grant: Grant);
|
|
16
|
+
close(): void;
|
|
17
|
+
cursor(lane: string, feed: Feed): LearningCursor | undefined;
|
|
18
|
+
stage(input: {
|
|
19
|
+
lane: string;
|
|
20
|
+
feed: Feed;
|
|
21
|
+
cursor: LearningCursor;
|
|
22
|
+
sequence: number;
|
|
23
|
+
subject: string;
|
|
24
|
+
intent?: LearningIntent;
|
|
25
|
+
maxPending: number;
|
|
26
|
+
supersede?: boolean;
|
|
27
|
+
}): boolean;
|
|
28
|
+
get(id: string): LearningJob | undefined;
|
|
29
|
+
pending(lane: string): LearningJob[];
|
|
30
|
+
counts(lane: string): Record<LearningState, number>;
|
|
31
|
+
freeze(id: string, snapshotInput: LearningSnapshot): LearningJob;
|
|
32
|
+
bind(id: string, definitionHash: string): LearningJob;
|
|
33
|
+
claim(id: string, definitionHash: string, occurrenceId: string): LearningJob;
|
|
34
|
+
saveRequest(id: string, occurrenceId: string, requestInput: MemoryLearningReviewRequest): LearningJob;
|
|
35
|
+
settle(id: string, state: Extract<LearningState, 'adopted' | 'rejected' | 'noop' | 'failed' | 'unknown' | 'superseded'>, reason: string, resultDigest?: string, occurrenceId?: string): void;
|
|
36
|
+
interrupt(lane: string): void;
|
|
37
|
+
availability(): {
|
|
38
|
+
remainingExtractions: number;
|
|
39
|
+
available: boolean;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAA;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE9G,KAAK,IAAI,GAAG,UAAU,GAAG,YAAY,CAAA;AACrC,KAAK,KAAK,GAAG,QAAQ,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAU5F,qBAAa,kBAAmB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ;gBAAzD,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM;CAGhG;AAsHD,qBAAa,aAAa;;gBAKZ,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAkCtC,KAAK,IAAI,IAAI;IA4Db,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,SAAS;IAQ5D,KAAK,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QACjG,MAAM,CAAC,EAAE,cAAc,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO;IAgD9E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IACxC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;IAMpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;IAQnD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,GAAG,WAAW;IAehE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,WAAW;IASrD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW;IAa5E,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,2BAA2B,GAAG,WAAW;IAmBrG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC,EACrH,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBrE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,YAAY,IAAI;QAAE,oBAAoB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;CAIrE"}
|
package/lib/store.js
ADDED
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
import { chmodSync, closeSync, constants, lstatSync, mkdirSync, openSync, realpathSync } from 'node:fs';
|
|
2
|
+
import { dirname, isAbsolute, normalize } from 'node:path';
|
|
3
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
4
|
+
import { canonicalGrowthJson, growthObjectDigest, validateMemoryLearningOwner, validateMemoryLearningReviewRequest, } from '@dsh-enhanced/assistant-growth-contract';
|
|
5
|
+
const DIGEST = /^[a-f0-9]{64}$/u;
|
|
6
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/u;
|
|
7
|
+
const ACTIVE = ['pending', 'queued', 'running', 'unknown'];
|
|
8
|
+
const TERMINAL = ['adopted', 'rejected', 'noop', 'failed', 'superseded'];
|
|
9
|
+
export class LearningStoreError extends Error {
|
|
10
|
+
code;
|
|
11
|
+
constructor(code, message) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.name = 'LearningStoreError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function fail(code, message) { throw new LearningStoreError(code, message); }
|
|
18
|
+
function identifier(value, label) {
|
|
19
|
+
if (typeof value !== 'string' || !ID.test(value))
|
|
20
|
+
fail('invalid-input', `${label} is invalid`);
|
|
21
|
+
}
|
|
22
|
+
function digest(value, label) {
|
|
23
|
+
if (typeof value !== 'string' || !DIGEST.test(value))
|
|
24
|
+
fail('invalid-input', `${label} is invalid`);
|
|
25
|
+
}
|
|
26
|
+
function integer(value, label, minimum = 0) {
|
|
27
|
+
if (!Number.isSafeInteger(value) || value < minimum)
|
|
28
|
+
fail('invalid-input', `${label} is invalid`);
|
|
29
|
+
}
|
|
30
|
+
function fields(value, required, optional = []) {
|
|
31
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)
|
|
32
|
+
|| ![Object.prototype, null].includes(Object.getPrototypeOf(value)))
|
|
33
|
+
fail('invalid-input', 'object is invalid');
|
|
34
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
35
|
+
if (Reflect.ownKeys(value).some(key => typeof key !== 'string' || ![...required, ...optional].includes(key))
|
|
36
|
+
|| required.some(key => !Object.hasOwn(descriptors, key))
|
|
37
|
+
|| Object.values(descriptors).some(field => !field.enumerable || !('value' in field)))
|
|
38
|
+
fail('invalid-input', 'object fields are invalid');
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function normalizedText(value, label, bytes) {
|
|
42
|
+
if (typeof value !== 'string' || value.length === 0 || value !== value.normalize('NFC').trim()
|
|
43
|
+
|| !value.isWellFormed() || value.includes('\0') || Buffer.byteLength(value) > bytes)
|
|
44
|
+
fail('invalid-input', `${label} is invalid`);
|
|
45
|
+
}
|
|
46
|
+
function sourceText(value, label) {
|
|
47
|
+
if (typeof value !== 'string' || !value.trim() || !value.isWellFormed() || value.includes('\0')
|
|
48
|
+
|| Buffer.byteLength(value) > 65_536)
|
|
49
|
+
fail('invalid-input', `${label} is invalid`);
|
|
50
|
+
}
|
|
51
|
+
function canonical(value) { return canonicalGrowthJson(value); }
|
|
52
|
+
function parse(value, label) {
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(value);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return fail('corrupt', `${label} is invalid JSON`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function safeIntent(input, grant) {
|
|
61
|
+
const raw = fields(input, ['configDigest', 'owner', 'kind', 'subject', 'inboxId', 'createdAt', 'expiresAt'], ['expectedSourceDigest', 'canonical']);
|
|
62
|
+
digest(raw.configDigest, 'configDigest');
|
|
63
|
+
if (raw.configDigest !== grant.configDigest)
|
|
64
|
+
fail('conflict', 'intent config digest differs from grant');
|
|
65
|
+
try {
|
|
66
|
+
validateMemoryLearningOwner(raw.owner);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return fail('invalid-input', 'owner is invalid');
|
|
70
|
+
}
|
|
71
|
+
// Extraction authority and Delivery owner route are independently configured.
|
|
72
|
+
// The immutable config digest fixes the complete owner, not equality of ids.
|
|
73
|
+
if (raw.kind !== 'fact' && raw.kind !== 'experience')
|
|
74
|
+
fail('invalid-input', 'kind is invalid');
|
|
75
|
+
identifier(raw.subject, 'subject');
|
|
76
|
+
identifier(raw.inboxId, 'inboxId');
|
|
77
|
+
integer(raw.createdAt, 'createdAt');
|
|
78
|
+
integer(raw.expiresAt, 'expiresAt', 1);
|
|
79
|
+
if (raw.expiresAt <= raw.createdAt)
|
|
80
|
+
fail('invalid-input', 'intent is already expired');
|
|
81
|
+
if (Object.hasOwn(raw, 'expectedSourceDigest'))
|
|
82
|
+
digest(raw.expectedSourceDigest, 'expectedSourceDigest');
|
|
83
|
+
if (Object.hasOwn(raw, 'canonical')) {
|
|
84
|
+
const item = fields(raw.canonical, ['outcomeId', 'version', 'digest', 'objectiveStatus']);
|
|
85
|
+
identifier(item.outcomeId, 'outcomeId');
|
|
86
|
+
integer(item.version, 'canonical version', 1);
|
|
87
|
+
digest(item.digest, 'canonical digest');
|
|
88
|
+
if (item.objectiveStatus !== 'achieved' && item.objectiveStatus !== 'not-achieved')
|
|
89
|
+
fail('invalid-input', 'objective status is invalid');
|
|
90
|
+
}
|
|
91
|
+
if (raw.kind === 'experience' && raw.canonical === undefined)
|
|
92
|
+
fail('invalid-input', 'experience needs canonical outcome');
|
|
93
|
+
return JSON.parse(canonical(input));
|
|
94
|
+
}
|
|
95
|
+
function safeCursor(feed, value, sequence) {
|
|
96
|
+
integer(sequence, 'sequence');
|
|
97
|
+
if (feed === 'delivery') {
|
|
98
|
+
const raw = fields(value, ['protocol', 'epoch', 'scopeKey', 'sequence']);
|
|
99
|
+
if (raw.protocol !== 'assistant-delivery/owner-foreground-source-cursor/v1')
|
|
100
|
+
fail('invalid-input', 'delivery cursor protocol is invalid');
|
|
101
|
+
identifier(raw.epoch, 'epoch');
|
|
102
|
+
normalizedText(raw.scopeKey, 'scopeKey', 512);
|
|
103
|
+
integer(raw.sequence, 'cursor sequence');
|
|
104
|
+
if (raw.sequence < sequence)
|
|
105
|
+
fail('invalid-input', 'delivery cursor precedes item');
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const raw = fields(value, ['scopeKey', 'watermark']);
|
|
109
|
+
normalizedText(raw.scopeKey, 'scopeKey', 512);
|
|
110
|
+
integer(raw.watermark, 'watermark');
|
|
111
|
+
if (raw.watermark < sequence)
|
|
112
|
+
fail('invalid-input', 'evaluation cursor precedes item');
|
|
113
|
+
}
|
|
114
|
+
return JSON.parse(canonical(value));
|
|
115
|
+
}
|
|
116
|
+
function safeSnapshot(input, intent) {
|
|
117
|
+
const raw = fields(input, ['model', 'source', 'ownerStatement', 'assistantReply', 'targets'], ['ownerFeedback']);
|
|
118
|
+
const model = fields(raw.model, ['provider', 'model'], ['reasoningEffort']);
|
|
119
|
+
for (const key of Object.keys(model))
|
|
120
|
+
normalizedText(model[key], `model ${key}`, 256);
|
|
121
|
+
const source = fields(raw.source, ['inboxId', 'sourceDigest', 'contentDigest'], ['canonical']);
|
|
122
|
+
identifier(source.inboxId, 'source inboxId');
|
|
123
|
+
digest(source.sourceDigest, 'sourceDigest');
|
|
124
|
+
digest(source.contentDigest, 'contentDigest');
|
|
125
|
+
if (source.inboxId !== intent.inboxId || (intent.expectedSourceDigest !== undefined && source.sourceDigest !== intent.expectedSourceDigest))
|
|
126
|
+
fail('conflict', 'snapshot source differs from intent');
|
|
127
|
+
if (Object.hasOwn(source, 'canonical')) {
|
|
128
|
+
const outcome = fields(source.canonical, ['outcomeId', 'version', 'digest', 'objectiveStatus']);
|
|
129
|
+
identifier(outcome.outcomeId, 'outcomeId');
|
|
130
|
+
integer(outcome.version, 'version', 1);
|
|
131
|
+
digest(outcome.digest, 'digest');
|
|
132
|
+
if (outcome.objectiveStatus !== 'achieved' && outcome.objectiveStatus !== 'not-achieved')
|
|
133
|
+
fail('invalid-input', 'objective status is invalid');
|
|
134
|
+
}
|
|
135
|
+
if (canonical(source.canonical ?? null) !== canonical(intent.canonical ?? null))
|
|
136
|
+
fail('conflict', 'snapshot canonical revision differs from intent');
|
|
137
|
+
sourceText(raw.ownerStatement, 'ownerStatement');
|
|
138
|
+
sourceText(raw.assistantReply, 'assistantReply');
|
|
139
|
+
if (Object.hasOwn(raw, 'ownerFeedback'))
|
|
140
|
+
sourceText(raw.ownerFeedback, 'ownerFeedback');
|
|
141
|
+
if (!Array.isArray(raw.targets) || raw.targets.length > 100)
|
|
142
|
+
fail('invalid-input', 'targets are invalid');
|
|
143
|
+
for (const target of raw.targets) {
|
|
144
|
+
const item = fields(target, ['id', 'version', 'kind', 'content'], ['knowledge']);
|
|
145
|
+
identifier(item.id, 'target id');
|
|
146
|
+
integer(item.version, 'target version', 1);
|
|
147
|
+
if (item.kind !== 'fact' && item.kind !== 'experience')
|
|
148
|
+
fail('invalid-input', 'target kind is invalid');
|
|
149
|
+
normalizedText(item.content, 'target content', 4096);
|
|
150
|
+
if (Object.hasOwn(item, 'knowledge'))
|
|
151
|
+
canonical(item.knowledge);
|
|
152
|
+
}
|
|
153
|
+
return JSON.parse(canonical(input));
|
|
154
|
+
}
|
|
155
|
+
function privateFile(path) {
|
|
156
|
+
const stat = lstatSync(path);
|
|
157
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1 || (stat.mode & 0o077) !== 0
|
|
158
|
+
|| (process.getuid?.() !== undefined && stat.uid !== process.getuid?.()))
|
|
159
|
+
fail('corrupt', 'database file is not private');
|
|
160
|
+
}
|
|
161
|
+
function privatePaths(path) {
|
|
162
|
+
if (!isAbsolute(path) || normalize(path) !== path)
|
|
163
|
+
fail('invalid-input', 'database path is not canonical absolute');
|
|
164
|
+
const parent = dirname(path);
|
|
165
|
+
mkdirSync(parent, { recursive: true, mode: 0o700 });
|
|
166
|
+
const dir = lstatSync(parent);
|
|
167
|
+
if (!dir.isDirectory() || dir.isSymbolicLink() || realpathSync(parent) !== parent || (dir.mode & 0o077) !== 0
|
|
168
|
+
|| (process.getuid?.() !== undefined && dir.uid !== process.getuid?.()))
|
|
169
|
+
fail('corrupt', 'database parent is not private');
|
|
170
|
+
try {
|
|
171
|
+
lstatSync(path);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
if (!error || typeof error !== 'object' || !('code' in error) || error.code !== 'ENOENT')
|
|
175
|
+
throw error;
|
|
176
|
+
closeSync(openSync(path, constants.O_CREAT | constants.O_EXCL | constants.O_RDWR | constants.O_NOFOLLOW, 0o600));
|
|
177
|
+
chmodSync(path, 0o600);
|
|
178
|
+
}
|
|
179
|
+
privateFile(path);
|
|
180
|
+
for (const suffix of ['-wal', '-shm']) {
|
|
181
|
+
try {
|
|
182
|
+
privateFile(`${path}${suffix}`);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (!error || typeof error !== 'object' || !('code' in error) || error.code !== 'ENOENT')
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export class LearningStore {
|
|
191
|
+
#db;
|
|
192
|
+
#grant;
|
|
193
|
+
#closed = false;
|
|
194
|
+
constructor(path, grant) {
|
|
195
|
+
const raw = fields(grant, ['authorityId', 'configDigest', 'maxExtractions']);
|
|
196
|
+
identifier(raw.authorityId, 'authorityId');
|
|
197
|
+
digest(raw.configDigest, 'configDigest');
|
|
198
|
+
integer(raw.maxExtractions, 'maxExtractions', 1);
|
|
199
|
+
this.#grant = { authorityId: raw.authorityId, configDigest: raw.configDigest, maxExtractions: raw.maxExtractions };
|
|
200
|
+
if (path !== ':memory:')
|
|
201
|
+
privatePaths(path);
|
|
202
|
+
this.#db = new DatabaseSync(path);
|
|
203
|
+
try {
|
|
204
|
+
this.#db.exec('PRAGMA foreign_keys=ON; PRAGMA busy_timeout=5000; PRAGMA synchronous=FULL;');
|
|
205
|
+
if (path !== ':memory:') {
|
|
206
|
+
const mode = this.#db.prepare('PRAGMA journal_mode=WAL').get();
|
|
207
|
+
if (mode.journal_mode.toLowerCase() !== 'wal')
|
|
208
|
+
fail('corrupt', 'WAL mode unavailable');
|
|
209
|
+
privatePaths(path);
|
|
210
|
+
}
|
|
211
|
+
const version = this.#db.prepare('PRAGMA user_version').get().user_version;
|
|
212
|
+
if (version === 0) {
|
|
213
|
+
if (this.#db.prepare("SELECT 1 FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' LIMIT 1").get())
|
|
214
|
+
fail('corrupt', 'unversioned database contains objects');
|
|
215
|
+
this.#db.exec(`BEGIN IMMEDIATE;
|
|
216
|
+
CREATE TABLE grant_record (authority_id TEXT PRIMARY KEY, config_digest TEXT NOT NULL, max_extractions INTEGER NOT NULL, consumed INTEGER NOT NULL DEFAULT 0) STRICT;
|
|
217
|
+
CREATE TABLE cursors (lane TEXT NOT NULL, feed TEXT NOT NULL, cursor_json TEXT NOT NULL, sequence INTEGER NOT NULL, PRIMARY KEY(lane,feed)) STRICT, WITHOUT ROWID;
|
|
218
|
+
CREATE TABLE jobs (id TEXT PRIMARY KEY, lane TEXT NOT NULL, subject TEXT NOT NULL, intent_json TEXT NOT NULL, digest TEXT NOT NULL,
|
|
219
|
+
state TEXT NOT NULL, snapshot_json TEXT, definition_hash TEXT, occurrence_id TEXT, request_json TEXT, result_digest TEXT, reason TEXT) STRICT;
|
|
220
|
+
CREATE INDEX jobs_lane_state ON jobs(lane,state);
|
|
221
|
+
`);
|
|
222
|
+
this.#db.prepare('INSERT INTO grant_record(authority_id,config_digest,max_extractions,consumed) VALUES(?,?,?,0)')
|
|
223
|
+
.run(this.#grant.authorityId, this.#grant.configDigest, this.#grant.maxExtractions);
|
|
224
|
+
this.#db.exec('PRAGMA user_version=1; COMMIT;');
|
|
225
|
+
}
|
|
226
|
+
else if (version !== 1)
|
|
227
|
+
fail('corrupt', 'unsupported schema version');
|
|
228
|
+
this.#checkGrant();
|
|
229
|
+
const integrity = this.#db.prepare('PRAGMA quick_check').get();
|
|
230
|
+
if (integrity.quick_check !== 'ok')
|
|
231
|
+
fail('corrupt', 'database integrity check failed');
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
this.#db.close();
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
close() { if (!this.#closed) {
|
|
239
|
+
this.#closed = true;
|
|
240
|
+
this.#db.close();
|
|
241
|
+
} }
|
|
242
|
+
#checkGrant() {
|
|
243
|
+
if (this.#closed)
|
|
244
|
+
fail('closed', 'store is closed');
|
|
245
|
+
const row = this.#db.prepare('SELECT authority_id,config_digest,max_extractions,consumed FROM grant_record').all();
|
|
246
|
+
if (row.length !== 1 || row[0].authority_id !== this.#grant.authorityId
|
|
247
|
+
|| row[0].config_digest !== this.#grant.configDigest || row[0].max_extractions !== this.#grant.maxExtractions)
|
|
248
|
+
fail('conflict', 'immutable grant differs');
|
|
249
|
+
integer(row[0].consumed, 'consumed');
|
|
250
|
+
if (row[0].consumed > this.#grant.maxExtractions)
|
|
251
|
+
fail('corrupt', 'extraction quota is corrupt');
|
|
252
|
+
return row[0].consumed;
|
|
253
|
+
}
|
|
254
|
+
#transaction(action) {
|
|
255
|
+
this.#checkGrant();
|
|
256
|
+
this.#db.exec('BEGIN IMMEDIATE');
|
|
257
|
+
try {
|
|
258
|
+
const result = action();
|
|
259
|
+
this.#db.exec('COMMIT');
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
this.#db.exec('ROLLBACK');
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
#job(row) {
|
|
268
|
+
identifier(row.lane, 'stored lane');
|
|
269
|
+
const intent = safeIntent(parse(row.intent_json, 'intent'), this.#grant);
|
|
270
|
+
const expectedId = this.#id(intent);
|
|
271
|
+
if (row.id !== expectedId || row.subject !== intent.subject || ![...ACTIVE, ...TERMINAL].includes(row.state))
|
|
272
|
+
fail('corrupt', 'stored job identity is invalid');
|
|
273
|
+
const snapshot = row.snapshot_json === null ? null : safeSnapshot(parse(row.snapshot_json, 'snapshot'), intent);
|
|
274
|
+
const expectedDigest = growthObjectDigest(snapshot === null ? intent : { intent, snapshot });
|
|
275
|
+
if (row.digest !== expectedDigest)
|
|
276
|
+
fail('corrupt', 'stored job digest differs');
|
|
277
|
+
if ((row.state === 'pending' && snapshot !== null)
|
|
278
|
+
|| (['queued', 'running', 'unknown'].includes(row.state) && snapshot === null)
|
|
279
|
+
|| (row.definition_hash !== null && !DIGEST.test(row.definition_hash))
|
|
280
|
+
|| (row.occurrence_id !== null && !ID.test(row.occurrence_id)) || (row.result_digest !== null && !DIGEST.test(row.result_digest)))
|
|
281
|
+
fail('corrupt', 'stored job state is inconsistent');
|
|
282
|
+
if (row.definition_hash !== null && snapshot === null)
|
|
283
|
+
fail('corrupt', 'unfrozen job has definition');
|
|
284
|
+
if ((row.state === 'running' || row.state === 'unknown') && (row.definition_hash === null || row.occurrence_id === null))
|
|
285
|
+
fail('corrupt', 'claimed job lacks immutable binding');
|
|
286
|
+
if (row.state === 'queued' && (row.occurrence_id !== null || row.request_json !== null || row.reason !== null))
|
|
287
|
+
fail('corrupt', 'queued job has claim or settlement');
|
|
288
|
+
if (row.state === 'pending' && (row.definition_hash !== null || row.occurrence_id !== null
|
|
289
|
+
|| row.request_json !== null || row.reason !== null))
|
|
290
|
+
fail('corrupt', 'pending job has claim or settlement');
|
|
291
|
+
if (TERMINAL.includes(row.state) && (row.reason === null || (!['superseded', 'failed'].includes(row.state)
|
|
292
|
+
&& (snapshot === null || row.definition_hash === null || row.occurrence_id === null))))
|
|
293
|
+
fail('corrupt', 'terminal job lacks evidence or reason');
|
|
294
|
+
if (row.reason !== null)
|
|
295
|
+
normalizedText(row.reason, 'reason', 512);
|
|
296
|
+
if (row.request_json !== null && row.occurrence_id === null)
|
|
297
|
+
fail('corrupt', 'request lacks claim');
|
|
298
|
+
let request = null;
|
|
299
|
+
if (row.request_json !== null) {
|
|
300
|
+
try {
|
|
301
|
+
request = validateMemoryLearningReviewRequest(parse(row.request_json, 'request'));
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return fail('corrupt', 'stored request is invalid');
|
|
305
|
+
}
|
|
306
|
+
if (canonical(request.owner) !== canonical(intent.owner) || canonical(request.source) !== canonical(snapshot.source)
|
|
307
|
+
|| request.operationId !== row.id)
|
|
308
|
+
fail('corrupt', 'stored request binding differs');
|
|
309
|
+
}
|
|
310
|
+
return { id: row.id, intent, digest: row.digest, state: row.state, snapshot, definitionHash: row.definition_hash,
|
|
311
|
+
occurrenceId: row.occurrence_id, request, resultDigest: row.result_digest, reason: row.reason };
|
|
312
|
+
}
|
|
313
|
+
#id(intent) {
|
|
314
|
+
return `memory-learning:${growthObjectDigest({ authorityId: this.#grant.authorityId, kind: intent.kind,
|
|
315
|
+
subject: intent.subject, revision: intent.canonical ?? intent.expectedSourceDigest ?? intent.inboxId })}`;
|
|
316
|
+
}
|
|
317
|
+
#read(id) {
|
|
318
|
+
const row = this.#db.prepare('SELECT * FROM jobs WHERE id=?').get(id);
|
|
319
|
+
return row === undefined ? undefined : { ...this.#job(row), lane: row.lane };
|
|
320
|
+
}
|
|
321
|
+
cursor(lane, feed) {
|
|
322
|
+
this.#checkGrant();
|
|
323
|
+
identifier(lane, 'lane');
|
|
324
|
+
if (feed !== 'delivery' && feed !== 'evaluation')
|
|
325
|
+
fail('invalid-input', 'feed is invalid');
|
|
326
|
+
const row = this.#db.prepare('SELECT cursor_json,sequence FROM cursors WHERE lane=? AND feed=?').get(lane, feed);
|
|
327
|
+
if (!row)
|
|
328
|
+
return undefined;
|
|
329
|
+
try {
|
|
330
|
+
return safeCursor(feed, parse(row.cursor_json, 'cursor'), row.sequence);
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return fail('corrupt', 'stored cursor is invalid');
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
stage(input) {
|
|
337
|
+
identifier(input.lane, 'lane');
|
|
338
|
+
identifier(input.subject, 'subject');
|
|
339
|
+
if (input.feed !== 'delivery' && input.feed !== 'evaluation')
|
|
340
|
+
fail('invalid-input', 'feed is invalid');
|
|
341
|
+
const cursor = safeCursor(input.feed, input.cursor, input.sequence);
|
|
342
|
+
integer(input.maxPending, 'maxPending', 1);
|
|
343
|
+
if (input.maxPending > 1000)
|
|
344
|
+
fail('invalid-input', 'maxPending exceeds bound');
|
|
345
|
+
const intent = input.intent === undefined ? undefined : safeIntent(input.intent, this.#grant);
|
|
346
|
+
if (intent && intent.subject !== input.subject)
|
|
347
|
+
fail('conflict', 'stage subject differs from intent');
|
|
348
|
+
if (input.supersede !== undefined && typeof input.supersede !== 'boolean')
|
|
349
|
+
fail('invalid-input', 'supersede is invalid');
|
|
350
|
+
return this.#transaction(() => {
|
|
351
|
+
const previous = this.cursor(input.lane, input.feed);
|
|
352
|
+
const previousRow = this.#db.prepare('SELECT cursor_json,sequence FROM cursors WHERE lane=? AND feed=?').get(input.lane, input.feed);
|
|
353
|
+
if (previous) {
|
|
354
|
+
if (previous.scopeKey !== cursor.scopeKey || ('epoch' in previous && 'epoch' in cursor && previous.epoch !== cursor.epoch))
|
|
355
|
+
fail('conflict', 'cursor scope or epoch changed');
|
|
356
|
+
if (input.sequence <= previousRow.sequence) {
|
|
357
|
+
if (input.sequence === previousRow.sequence && canonical(cursor) !== previousRow.cursor_json)
|
|
358
|
+
fail('conflict', 'cursor replay differs');
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
const proposedId = intent === undefined ? undefined : this.#id(intent);
|
|
363
|
+
const active = this.#db.prepare("SELECT id, state FROM jobs WHERE lane=? AND state IN ('pending','queued','running','unknown')").all(input.lane);
|
|
364
|
+
const superseded = input.supersede
|
|
365
|
+
? active.filter(item => {
|
|
366
|
+
const previousJob = this.#read(item.id);
|
|
367
|
+
return previousJob.id !== proposedId && previousJob.intent.kind === 'experience' && previousJob.intent.subject === input.subject;
|
|
368
|
+
}) : [];
|
|
369
|
+
if (intent) {
|
|
370
|
+
const id = this.#id(intent);
|
|
371
|
+
const existing = this.#read(id);
|
|
372
|
+
if (existing && (existing.lane !== input.lane || canonical(existing.intent.owner) !== canonical(intent.owner)
|
|
373
|
+
|| existing.intent.configDigest !== intent.configDigest || existing.intent.inboxId !== intent.inboxId
|
|
374
|
+
|| existing.intent.kind !== intent.kind || canonical(existing.intent.canonical ?? null) !== canonical(intent.canonical ?? null)
|
|
375
|
+
|| existing.intent.expectedSourceDigest !== intent.expectedSourceDigest))
|
|
376
|
+
fail('conflict', 'job identity collision');
|
|
377
|
+
if (!existing) {
|
|
378
|
+
if (active.length - superseded.length >= input.maxPending)
|
|
379
|
+
return false;
|
|
380
|
+
this.#db.prepare(`INSERT INTO jobs(id,lane,subject,intent_json,digest,state,snapshot_json,definition_hash,occurrence_id,request_json,result_digest,reason)
|
|
381
|
+
VALUES(?,?,?,?,?,'pending',NULL,NULL,NULL,NULL,NULL,NULL)`)
|
|
382
|
+
.run(id, input.lane, intent.subject, canonical(intent), growthObjectDigest(intent));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
for (const old of superseded)
|
|
386
|
+
this.#db.prepare("UPDATE jobs SET state='superseded',reason='new-canonical-revision' WHERE id=?").run(old.id);
|
|
387
|
+
this.#db.prepare(`INSERT INTO cursors(lane,feed,cursor_json,sequence) VALUES(?,?,?,?)
|
|
388
|
+
ON CONFLICT(lane,feed) DO UPDATE SET cursor_json=excluded.cursor_json,sequence=excluded.sequence`)
|
|
389
|
+
.run(input.lane, input.feed, canonical(cursor), input.sequence);
|
|
390
|
+
return true;
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
get(id) { this.#checkGrant(); identifier(id, 'id'); const job = this.#read(id); if (!job)
|
|
394
|
+
return undefined; const { lane: _lane, ...result } = job; return result; }
|
|
395
|
+
pending(lane) {
|
|
396
|
+
this.#checkGrant();
|
|
397
|
+
identifier(lane, 'lane');
|
|
398
|
+
const rows = this.#db.prepare("SELECT * FROM jobs WHERE lane=? AND state IN ('pending','queued','running','unknown') ORDER BY rowid").all(lane);
|
|
399
|
+
if (rows.length > 1000)
|
|
400
|
+
fail('corrupt', 'pending set is unbounded');
|
|
401
|
+
return rows.map(row => this.#job(row));
|
|
402
|
+
}
|
|
403
|
+
counts(lane) {
|
|
404
|
+
this.#checkGrant();
|
|
405
|
+
identifier(lane, 'lane');
|
|
406
|
+
const counts = { pending: 0, queued: 0, running: 0, unknown: 0,
|
|
407
|
+
adopted: 0, rejected: 0, noop: 0, failed: 0, superseded: 0 };
|
|
408
|
+
const rows = this.#db.prepare('SELECT * FROM jobs WHERE lane=? ORDER BY rowid').all(lane);
|
|
409
|
+
for (const row of rows)
|
|
410
|
+
counts[this.#job(row).state]++;
|
|
411
|
+
return counts;
|
|
412
|
+
}
|
|
413
|
+
freeze(id, snapshotInput) {
|
|
414
|
+
identifier(id, 'id');
|
|
415
|
+
return this.#transaction(() => {
|
|
416
|
+
const job = this.#read(id);
|
|
417
|
+
if (!job)
|
|
418
|
+
fail('invalid-input', 'job not found');
|
|
419
|
+
const snapshot = safeSnapshot(snapshotInput, job.intent);
|
|
420
|
+
if (job.state !== 'pending') {
|
|
421
|
+
if (job.snapshot !== null && canonical(job.snapshot) === canonical(snapshot))
|
|
422
|
+
return job;
|
|
423
|
+
fail('conflict', 'job snapshot is immutable');
|
|
424
|
+
}
|
|
425
|
+
const frozenDigest = growthObjectDigest({ intent: job.intent, snapshot });
|
|
426
|
+
this.#db.prepare("UPDATE jobs SET snapshot_json=?,digest=?,state='queued' WHERE id=? AND state='pending'")
|
|
427
|
+
.run(canonical(snapshot), frozenDigest, id);
|
|
428
|
+
return this.#read(id);
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
bind(id, definitionHash) {
|
|
432
|
+
identifier(id, 'id');
|
|
433
|
+
digest(definitionHash, 'definitionHash');
|
|
434
|
+
return this.#transaction(() => {
|
|
435
|
+
const job = this.#read(id);
|
|
436
|
+
if (!job || job.state !== 'queued')
|
|
437
|
+
fail('conflict', 'job is not queued');
|
|
438
|
+
if (job.definitionHash && job.definitionHash !== definitionHash)
|
|
439
|
+
fail('conflict', 'definition is immutable');
|
|
440
|
+
if (!job.definitionHash)
|
|
441
|
+
this.#db.prepare('UPDATE jobs SET definition_hash=? WHERE id=?').run(definitionHash, id);
|
|
442
|
+
return this.#read(id);
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
claim(id, definitionHash, occurrenceId) {
|
|
446
|
+
identifier(id, 'id');
|
|
447
|
+
digest(definitionHash, 'definitionHash');
|
|
448
|
+
identifier(occurrenceId, 'occurrenceId');
|
|
449
|
+
return this.#transaction(() => {
|
|
450
|
+
const job = this.#read(id);
|
|
451
|
+
if (!job || job.state !== 'queued' || job.definitionHash !== definitionHash || job.occurrenceId !== null)
|
|
452
|
+
fail('conflict', 'job is not claimable');
|
|
453
|
+
const consumed = this.#checkGrant();
|
|
454
|
+
if (consumed >= this.#grant.maxExtractions)
|
|
455
|
+
fail('conflict', 'extraction quota exhausted');
|
|
456
|
+
this.#db.prepare('UPDATE grant_record SET consumed=consumed+1 WHERE authority_id=?').run(this.#grant.authorityId);
|
|
457
|
+
this.#db.prepare("UPDATE jobs SET state='running',occurrence_id=? WHERE id=? AND state='queued'").run(occurrenceId, id);
|
|
458
|
+
return this.#read(id);
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
saveRequest(id, occurrenceId, requestInput) {
|
|
462
|
+
identifier(id, 'id');
|
|
463
|
+
identifier(occurrenceId, 'occurrenceId');
|
|
464
|
+
let request;
|
|
465
|
+
try {
|
|
466
|
+
request = validateMemoryLearningReviewRequest(requestInput);
|
|
467
|
+
}
|
|
468
|
+
catch {
|
|
469
|
+
return fail('invalid-input', 'review request is invalid');
|
|
470
|
+
}
|
|
471
|
+
return this.#transaction(() => {
|
|
472
|
+
const job = this.#read(id);
|
|
473
|
+
if (!job || job.state !== 'running' || job.occurrenceId !== occurrenceId)
|
|
474
|
+
fail('conflict', 'claim is not running');
|
|
475
|
+
if (request.operationId !== id
|
|
476
|
+
|| canonical(request.owner) !== canonical(job.intent.owner) || canonical(request.source) !== canonical(job.snapshot.source))
|
|
477
|
+
fail('conflict', 'review request differs from frozen source or session');
|
|
478
|
+
if (job.request !== null) {
|
|
479
|
+
if (canonical(job.request) !== canonical(request))
|
|
480
|
+
fail('conflict', 'review request is immutable');
|
|
481
|
+
return job;
|
|
482
|
+
}
|
|
483
|
+
this.#db.prepare('UPDATE jobs SET request_json=? WHERE id=? AND state=\'running\' AND request_json IS NULL')
|
|
484
|
+
.run(canonical(request), id);
|
|
485
|
+
return this.#read(id);
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
settle(id, state, reason, resultDigest, occurrenceId) {
|
|
489
|
+
identifier(id, 'id');
|
|
490
|
+
normalizedText(reason, 'reason', 512);
|
|
491
|
+
if (![...TERMINAL, 'unknown'].includes(state))
|
|
492
|
+
fail('invalid-input', 'settlement state is invalid');
|
|
493
|
+
if (resultDigest !== undefined)
|
|
494
|
+
digest(resultDigest, 'resultDigest');
|
|
495
|
+
if (occurrenceId !== undefined)
|
|
496
|
+
identifier(occurrenceId, 'occurrenceId');
|
|
497
|
+
this.#transaction(() => {
|
|
498
|
+
const job = this.#read(id);
|
|
499
|
+
if (!job)
|
|
500
|
+
fail('invalid-input', 'job not found');
|
|
501
|
+
if (occurrenceId !== undefined && job.occurrenceId !== occurrenceId)
|
|
502
|
+
fail('conflict', 'occurrence differs');
|
|
503
|
+
if (TERMINAL.includes(job.state)) {
|
|
504
|
+
if (job.state === state && job.reason === reason && job.resultDigest === (resultDigest ?? null))
|
|
505
|
+
return;
|
|
506
|
+
fail('conflict', 'terminal job is immutable');
|
|
507
|
+
}
|
|
508
|
+
if (state === 'unknown' && job.state !== 'running')
|
|
509
|
+
fail('conflict', 'only running jobs become unknown');
|
|
510
|
+
if (state !== 'superseded' && state !== 'failed' && state !== 'unknown' && job.state !== 'running' && job.state !== 'unknown')
|
|
511
|
+
fail('conflict', 'job has not been claimed');
|
|
512
|
+
this.#db.prepare('UPDATE jobs SET state=?,reason=?,result_digest=? WHERE id=?').run(state, reason, resultDigest ?? null, id);
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
interrupt(lane) {
|
|
516
|
+
identifier(lane, 'lane');
|
|
517
|
+
this.#transaction(() => { this.#db.prepare("UPDATE jobs SET state='unknown',reason='interrupted' WHERE lane=? AND state='running'").run(lane); });
|
|
518
|
+
}
|
|
519
|
+
availability() {
|
|
520
|
+
const remainingExtractions = this.#grant.maxExtractions - this.#checkGrant();
|
|
521
|
+
return { remainingExtractions, available: remainingExtractions > 0 };
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=store.js.map
|