@dsh-enhanced/assistant-goals 0.1.30

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 (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/cordis.patch.yml +3 -0
  4. package/lib/budget-store.d.ts +73 -0
  5. package/lib/budget-store.d.ts.map +1 -0
  6. package/lib/budget-store.js +345 -0
  7. package/lib/budget-store.js.map +1 -0
  8. package/lib/budget.d.ts +78 -0
  9. package/lib/budget.d.ts.map +1 -0
  10. package/lib/budget.js +344 -0
  11. package/lib/budget.js.map +1 -0
  12. package/lib/dependency.d.ts +11 -0
  13. package/lib/dependency.d.ts.map +1 -0
  14. package/lib/dependency.js +34 -0
  15. package/lib/dependency.js.map +1 -0
  16. package/lib/event-wait-store.d.ts +56 -0
  17. package/lib/event-wait-store.d.ts.map +1 -0
  18. package/lib/event-wait-store.js +189 -0
  19. package/lib/event-wait-store.js.map +1 -0
  20. package/lib/event-wait.d.ts +47 -0
  21. package/lib/event-wait.d.ts.map +1 -0
  22. package/lib/event-wait.js +372 -0
  23. package/lib/event-wait.js.map +1 -0
  24. package/lib/execution-store.d.ts +23 -0
  25. package/lib/execution-store.d.ts.map +1 -0
  26. package/lib/execution-store.js +207 -0
  27. package/lib/execution-store.js.map +1 -0
  28. package/lib/execution.d.ts +49 -0
  29. package/lib/execution.d.ts.map +1 -0
  30. package/lib/execution.js +438 -0
  31. package/lib/execution.js.map +1 -0
  32. package/lib/feedback.d.ts +63 -0
  33. package/lib/feedback.d.ts.map +1 -0
  34. package/lib/feedback.js +134 -0
  35. package/lib/feedback.js.map +1 -0
  36. package/lib/index.d.ts +27 -0
  37. package/lib/index.d.ts.map +1 -0
  38. package/lib/index.js +9 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/outcome-store.d.ts +47 -0
  41. package/lib/outcome-store.d.ts.map +1 -0
  42. package/lib/outcome-store.js +271 -0
  43. package/lib/outcome-store.js.map +1 -0
  44. package/lib/outcome.d.ts +77 -0
  45. package/lib/outcome.d.ts.map +1 -0
  46. package/lib/outcome.js +417 -0
  47. package/lib/outcome.js.map +1 -0
  48. package/lib/service.d.ts +363 -0
  49. package/lib/service.d.ts.map +1 -0
  50. package/lib/service.js +1839 -0
  51. package/lib/service.js.map +1 -0
  52. package/lib/store.d.ts +21 -0
  53. package/lib/store.d.ts.map +1 -0
  54. package/lib/store.js +577 -0
  55. package/lib/store.js.map +1 -0
  56. package/lib/strategy-feedback.d.ts +29 -0
  57. package/lib/strategy-feedback.d.ts.map +1 -0
  58. package/lib/strategy-feedback.js +53 -0
  59. package/lib/strategy-feedback.js.map +1 -0
  60. package/lib/strategy-identity.d.ts +11 -0
  61. package/lib/strategy-identity.d.ts.map +1 -0
  62. package/lib/strategy-identity.js +10 -0
  63. package/lib/strategy-identity.js.map +1 -0
  64. package/lib/strategy-store.d.ts +76 -0
  65. package/lib/strategy-store.d.ts.map +1 -0
  66. package/lib/strategy-store.js +277 -0
  67. package/lib/strategy-store.js.map +1 -0
  68. package/lib/strategy.d.ts +56 -0
  69. package/lib/strategy.d.ts.map +1 -0
  70. package/lib/strategy.js +478 -0
  71. package/lib/strategy.js.map +1 -0
  72. package/lib/tools.d.ts +4 -0
  73. package/lib/tools.d.ts.map +1 -0
  74. package/lib/tools.js +130 -0
  75. package/lib/tools.js.map +1 -0
  76. package/lib/types.d.ts +285 -0
  77. package/lib/types.d.ts.map +1 -0
  78. package/lib/types.js +10 -0
  79. package/lib/types.js.map +1 -0
  80. package/lib/verified-artifact.d.ts +72 -0
  81. package/lib/verified-artifact.d.ts.map +1 -0
  82. package/lib/verified-artifact.js +142 -0
  83. package/lib/verified-artifact.js.map +1 -0
  84. package/lib/verified-workflow.d.ts +120 -0
  85. package/lib/verified-workflow.d.ts.map +1 -0
  86. package/lib/verified-workflow.js +253 -0
  87. package/lib/verified-workflow.js.map +1 -0
  88. package/lib/version.d.ts +2 -0
  89. package/lib/version.d.ts.map +1 -0
  90. package/lib/version.js +2 -0
  91. package/lib/version.js.map +1 -0
  92. package/lib/wake-store.d.ts +38 -0
  93. package/lib/wake-store.d.ts.map +1 -0
  94. package/lib/wake-store.js +177 -0
  95. package/lib/wake-store.js.map +1 -0
  96. package/lib/wake.d.ts +45 -0
  97. package/lib/wake.d.ts.map +1 -0
  98. package/lib/wake.js +327 -0
  99. package/lib/wake.js.map +1 -0
  100. package/package.json +143 -0
package/lib/store.js ADDED
@@ -0,0 +1,577 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { chmodSync, closeSync, constants, lstatSync, mkdirSync, openSync } from 'node:fs';
3
+ import { isAbsolute, dirname } from 'node:path';
4
+ import { DatabaseSync } from 'node:sqlite';
5
+ import { acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
6
+ import { GoalStoreError } from './types.js';
7
+ const schemaVersion = 3;
8
+ const message = 'goal store operation rejected';
9
+ const phases = new Set(['active', 'paused', 'blocked', 'complete', 'cleared']);
10
+ const fail = (code) => { throw new GoalStoreError(code); };
11
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
12
+ function privateFile(path) {
13
+ const stat = lstatSync(path);
14
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1 || (stat.mode & 0o077) !== 0 || (process.getuid?.() !== undefined && stat.uid !== process.getuid?.()))
15
+ fail('unsafe-file');
16
+ }
17
+ function privateDirectory(path) {
18
+ const stat = lstatSync(path);
19
+ if (!stat.isDirectory() || stat.isSymbolicLink() || (stat.mode & 0o022) !== 0 || (process.getuid?.() !== undefined && stat.uid !== process.getuid?.()))
20
+ fail('unsafe-file');
21
+ }
22
+ function privateDatabaseFiles(path) {
23
+ privateFile(path);
24
+ // These checks reject known unsafe paths, but cannot prevent a same-UID actor
25
+ // replacing a path after lstat and before SQLite opens it.
26
+ for (const suffix of ['-wal', '-shm']) {
27
+ try {
28
+ privateFile(`${path}${suffix}`);
29
+ }
30
+ catch (error) {
31
+ if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT')
32
+ continue;
33
+ throw error;
34
+ }
35
+ }
36
+ }
37
+ export function prepareGoalStoreDatabaseFile(path) {
38
+ if (!isAbsolute(path))
39
+ fail('unsafe-file');
40
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
41
+ privateDirectory(dirname(path));
42
+ let present = false;
43
+ try {
44
+ lstatSync(path);
45
+ present = true;
46
+ }
47
+ catch (error) {
48
+ if (!error || typeof error !== 'object' || !('code' in error) || error.code !== 'ENOENT')
49
+ fail('unsafe-file');
50
+ }
51
+ if (!present) {
52
+ const descriptor = openSync(path, constants.O_CREAT | constants.O_EXCL | constants.O_RDWR | constants.O_NOFOLLOW, 0o600);
53
+ closeSync(descriptor);
54
+ chmodSync(path, 0o600);
55
+ }
56
+ privateDatabaseFiles(path);
57
+ }
58
+ function validateSchema(database) {
59
+ let version = database.prepare('PRAGMA user_version').get().user_version;
60
+ const objects = database.prepare("SELECT type, name FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%' ORDER BY type, name").all();
61
+ if (version === 0) {
62
+ if (objects.length !== 0)
63
+ fail('schema');
64
+ database.exec(`
65
+ BEGIN IMMEDIATE;
66
+ CREATE TABLE goal_records (
67
+ id TEXT PRIMARY KEY, scope_json TEXT NOT NULL, original_objective TEXT NOT NULL, definition_json TEXT NOT NULL, native_json TEXT NOT NULL,
68
+ checkpoint_json TEXT NOT NULL, version INTEGER NOT NULL, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL
69
+ ) STRICT;
70
+ CREATE TABLE goal_history (
71
+ record_id TEXT NOT NULL REFERENCES goal_records(id) ON DELETE RESTRICT, sequence INTEGER NOT NULL,
72
+ kind TEXT NOT NULL CHECK(kind IN ('native', 'checkpoint')), payload_json TEXT NOT NULL, recorded_at INTEGER NOT NULL,
73
+ PRIMARY KEY(record_id, sequence)
74
+ ) STRICT, WITHOUT ROWID;
75
+ CREATE TABLE goal_focus (
76
+ scope_json TEXT NOT NULL, session_id TEXT NOT NULL, record_id TEXT NOT NULL,
77
+ PRIMARY KEY(scope_json, session_id),
78
+ FOREIGN KEY(record_id) REFERENCES goal_records(id) ON DELETE RESTRICT
79
+ ) STRICT, WITHOUT ROWID;
80
+ PRAGMA user_version = 3;
81
+ COMMIT;
82
+ `);
83
+ }
84
+ if (version === 1) {
85
+ const columns = database.prepare('PRAGMA table_info(goal_records)').all().map(row => row.name);
86
+ if (!same(columns, ['id', 'scope_json', 'original_objective', 'native_json', 'checkpoint_json', 'version', 'created_at', 'updated_at']))
87
+ fail('schema');
88
+ database.exec('BEGIN IMMEDIATE; ALTER TABLE goal_records ADD COLUMN definition_json TEXT NOT NULL DEFAULT \'{}\';');
89
+ const rows = database.prepare('SELECT id FROM goal_records').all();
90
+ const history = database.prepare("SELECT record_id, payload_json FROM goal_history WHERE kind = 'native' ORDER BY record_id, sequence").all();
91
+ const natives = new Map();
92
+ for (const row of history) {
93
+ const values = natives.get(row.record_id) ?? [];
94
+ values.push(nativeInput(parse(row.payload_json)));
95
+ natives.set(row.record_id, values);
96
+ }
97
+ for (const row of rows) {
98
+ const values = natives.get(row.id);
99
+ if (!values || values.length === 0)
100
+ fail('schema');
101
+ const definition = definitionFromHistory(values);
102
+ database.prepare('UPDATE goal_records SET definition_json = ? WHERE id = ?').run(JSON.stringify(definition), row.id);
103
+ }
104
+ validateStoredPayloads(database);
105
+ database.exec('PRAGMA user_version = 2; COMMIT;');
106
+ version = 2;
107
+ }
108
+ if (version === 2) {
109
+ // v2 checkpoints stored dependency IDs only. Keep them readable but
110
+ // unresolved; only a new owner checkpoint can bind exact definitions.
111
+ validateStoredPayloads(database);
112
+ const forged = database.prepare("SELECT 1 AS found FROM goal_records WHERE json_type(checkpoint_json, '$.dependencyBindings') IS NOT NULL UNION ALL SELECT 1 AS found FROM goal_history WHERE kind = 'checkpoint' AND json_type(payload_json, '$.dependencyBindings') IS NOT NULL LIMIT 1").get();
113
+ if (forged !== undefined)
114
+ fail('schema');
115
+ database.exec('PRAGMA user_version = 3;');
116
+ version = 3;
117
+ }
118
+ if (version !== 0 && version !== schemaVersion)
119
+ fail('schema');
120
+ const expected = JSON.stringify(['goal_focus', 'goal_history', 'goal_records']);
121
+ const tables = database.prepare("SELECT name FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all().map(row => row.name);
122
+ if (JSON.stringify(tables) !== expected)
123
+ fail('schema');
124
+ const recordColumns = database.prepare('PRAGMA table_info(goal_records)').all().map(row => row.name);
125
+ const historyColumns = database.prepare('PRAGMA table_info(goal_history)').all().map(row => row.name);
126
+ const focusColumns = database.prepare('PRAGMA table_info(goal_focus)').all().map(row => row.name);
127
+ if (!same(recordColumns.sort(), ['id', 'scope_json', 'original_objective', 'definition_json', 'native_json', 'checkpoint_json', 'version', 'created_at', 'updated_at'].sort())
128
+ || !same(historyColumns, ['record_id', 'sequence', 'kind', 'payload_json', 'recorded_at'])
129
+ || !same(focusColumns, ['scope_json', 'session_id', 'record_id']))
130
+ fail('schema');
131
+ const sql = database.prepare("SELECT name, sql FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%'").all();
132
+ if (!sql.every(row => /\bSTRICT\b/u.test(row.sql)) || !/WITHOUT\s+ROWID/iu.test(sql.find(row => row.name === 'goal_history')?.sql ?? ''))
133
+ fail('schema');
134
+ const focusKeys = database.prepare('PRAGMA foreign_key_list(goal_focus)').all();
135
+ if (!focusKeys.some(key => key.table === 'goal_records' && key.from === 'record_id' && key.to === 'id'))
136
+ fail('schema');
137
+ const check = database.prepare('PRAGMA quick_check').get();
138
+ if (check.quick_check !== 'ok' || database.prepare('PRAGMA foreign_key_check').all().length !== 0)
139
+ fail('schema');
140
+ }
141
+ function openDatabase(path) {
142
+ if (path !== ':memory:')
143
+ prepareGoalStoreDatabaseFile(path);
144
+ const database = new DatabaseSync(path, { enableForeignKeyConstraints: true });
145
+ try {
146
+ database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 250; PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;');
147
+ validateSchema(database);
148
+ validateStoredPayloads(database);
149
+ if (path !== ':memory:') {
150
+ privateDirectory(dirname(path));
151
+ privateDatabaseFiles(path);
152
+ }
153
+ return database;
154
+ }
155
+ catch (error) {
156
+ database.close();
157
+ throw error;
158
+ }
159
+ }
160
+ function plain(value) {
161
+ return value !== null && typeof value === 'object' && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype && Object.getOwnPropertySymbols(value).length === 0;
162
+ }
163
+ function object(value, keys) {
164
+ if (!plain(value) || !same(Object.getOwnPropertyNames(value).sort(), [...keys].sort()))
165
+ fail('invalid-input');
166
+ for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value)))
167
+ if (!('value' in descriptor) || !descriptor.enumerable)
168
+ fail('invalid-input');
169
+ return value;
170
+ }
171
+ function array(value, maximum) {
172
+ if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype || Object.getOwnPropertySymbols(value).length !== 0 || value.length > maximum)
173
+ fail('invalid-input');
174
+ const input = value;
175
+ const names = Object.getOwnPropertyNames(input);
176
+ if (names.length !== input.length + 1 || names.at(-1) !== 'length')
177
+ fail('invalid-input');
178
+ for (let index = 0; index < input.length; index++) {
179
+ const descriptor = Object.getOwnPropertyDescriptor(input, String(index));
180
+ if (!descriptor || !('value' in descriptor) || !descriptor.enumerable)
181
+ fail('invalid-input');
182
+ }
183
+ return input;
184
+ }
185
+ function text(value, maximum, minimum = 1) {
186
+ if (typeof value !== 'string' || value.length < minimum || value.length > maximum)
187
+ fail('invalid-input');
188
+ return value;
189
+ }
190
+ function integer(value, minimum) {
191
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum)
192
+ fail('invalid-input');
193
+ return value;
194
+ }
195
+ function scopeInput(value) {
196
+ const input = object(value, ['principalId', 'principalRecordId', 'principalVersion', 'workspace', 'preset']);
197
+ const workspace = text(input.workspace, 4096);
198
+ if (!isAbsolute(workspace))
199
+ fail('invalid-input');
200
+ return freeze({ principalId: text(input.principalId, 512), principalRecordId: text(input.principalRecordId, 512), principalVersion: integer(input.principalVersion, 1), workspace, preset: text(input.preset, 512) });
201
+ }
202
+ function nativeInput(value) {
203
+ const input = object(value, ['sessionId', 'goalId', 'revision', 'objective', 'phase', 'roundsStarted', 'maxGoalRounds', 'updatedAt']);
204
+ const maxGoalRounds = integer(input.maxGoalRounds, 1);
205
+ const roundsStarted = integer(input.roundsStarted, 0);
206
+ if (roundsStarted > maxGoalRounds || typeof input.phase !== 'string' || !phases.has(input.phase))
207
+ fail('invalid-input');
208
+ return freeze({ sessionId: text(input.sessionId, 512), goalId: text(input.goalId, 512), revision: integer(input.revision, 1), objective: text(input.objective, 16_384), phase: input.phase, roundsStarted, maxGoalRounds, updatedAt: integer(input.updatedAt, 0) });
209
+ }
210
+ function definitionInput(value) {
211
+ const input = object(value, ['version', 'digest', 'objective']);
212
+ const objective = text(input.objective, 16_384);
213
+ const version = integer(input.version, 1);
214
+ const digest = text(input.digest, 128);
215
+ if (digest !== acceptanceDigest({ objective }))
216
+ fail('invalid-input');
217
+ return freeze({ version, digest, objective });
218
+ }
219
+ function definitionFromHistory(natives) {
220
+ let objective = natives[0].objective;
221
+ let version = 1;
222
+ for (const native of natives.slice(1)) {
223
+ if (native.objective !== objective) {
224
+ objective = native.objective;
225
+ version += 1;
226
+ }
227
+ }
228
+ return freeze({ version, digest: acceptanceDigest({ objective }), objective });
229
+ }
230
+ function definitionsFromHistory(natives) {
231
+ const definitions = [];
232
+ for (const native of natives) {
233
+ const previous = definitions.at(-1);
234
+ if (previous?.objective === native.objective)
235
+ continue;
236
+ definitions.push(freeze({ version: definitions.length + 1, digest: acceptanceDigest({ objective: native.objective }), objective: native.objective }));
237
+ }
238
+ return definitions;
239
+ }
240
+ function checkpointInput(value) {
241
+ if (!plain(value))
242
+ fail('invalid-input');
243
+ const names = Object.getOwnPropertyNames(value);
244
+ const expected = ['nextStep', 'blockers', 'assumptions', 'evidenceRefs', 'dependencies'];
245
+ if (!same(names.sort(), (names.includes('dependencyBindings') ? [...expected, 'dependencyBindings'] : expected).sort()))
246
+ fail('invalid-input');
247
+ for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value)))
248
+ if (!('value' in descriptor) || !descriptor.enumerable)
249
+ fail('invalid-input');
250
+ const input = value;
251
+ const blockers = array(input.blockers, 16).map(item => text(item, 2000));
252
+ const assumptions = array(input.assumptions, 16).map(item => {
253
+ const assumption = object(item, ['statement', 'expiresAt']);
254
+ return freeze({ statement: text(assumption.statement, 2000), expiresAt: integer(assumption.expiresAt, 0) });
255
+ });
256
+ const evidenceRefs = array(input.evidenceRefs, 32).map(item => text(item, 512));
257
+ const dependencies = array(input.dependencies, 16).map(item => text(item, 512));
258
+ if (new Set(dependencies).size !== dependencies.length)
259
+ fail('invalid-input');
260
+ let dependencyBindings;
261
+ if (input.dependencyBindings !== undefined) {
262
+ dependencyBindings = array(input.dependencyBindings, 16).map(item => {
263
+ const binding = object(item, ['goalId', 'definitionVersion', 'definitionDigest']);
264
+ const definitionDigest = text(binding.definitionDigest, 64);
265
+ if (!/^[a-f0-9]{64}$/u.test(definitionDigest))
266
+ fail('invalid-input');
267
+ return freeze({ goalId: text(binding.goalId, 512), definitionVersion: integer(binding.definitionVersion, 1), definitionDigest });
268
+ });
269
+ if (new Set(dependencyBindings.map(binding => binding.goalId)).size !== dependencyBindings.length
270
+ || !same(dependencyBindings.map(binding => binding.goalId), dependencies))
271
+ fail('invalid-input');
272
+ }
273
+ return freeze({ nextStep: text(input.nextStep, 4000, 0), blockers, assumptions, evidenceRefs, dependencies,
274
+ ...(dependencyBindings === undefined ? {} : { dependencyBindings }) });
275
+ }
276
+ function freeze(value) {
277
+ if (value && typeof value === 'object') {
278
+ for (const child of Object.values(value))
279
+ freeze(child);
280
+ Object.freeze(value);
281
+ }
282
+ return value;
283
+ }
284
+ function parse(json) { try {
285
+ return JSON.parse(json);
286
+ }
287
+ catch {
288
+ return fail('schema');
289
+ } }
290
+ function idFor(native) { return createHash('sha256').update(native.sessionId).update('\0').update(native.goalId).digest('hex'); }
291
+ function emptyCheckpoint() { return freeze({ nextStep: '', blockers: [], assumptions: [], evidenceRefs: [], dependencies: [] }); }
292
+ function validateStoredPayloads(database) {
293
+ try {
294
+ const records = database.prepare('SELECT id, scope_json, original_objective, definition_json, native_json, checkpoint_json, version, created_at, updated_at FROM goal_records').all();
295
+ const byId = new Map();
296
+ for (const row of records) {
297
+ const native = nativeInput(parse(row.native_json));
298
+ const scope = scopeInput(parse(row.scope_json));
299
+ const checkpoint = checkpointInput(parse(row.checkpoint_json));
300
+ const definition = definitionInput(parse(row.definition_json));
301
+ if (idFor(native) !== row.id || typeof row.original_objective !== 'string' || row.original_objective.length === 0 || row.original_objective.length > 16_384
302
+ || !Number.isSafeInteger(row.version) || row.version < 1 || !Number.isSafeInteger(row.created_at) || row.created_at < 0 || !Number.isSafeInteger(row.updated_at) || row.updated_at < row.created_at)
303
+ fail('schema');
304
+ byId.set(row.id, { row, scope, native, checkpoint, definition });
305
+ }
306
+ const history = database.prepare('SELECT record_id, sequence, kind, payload_json, recorded_at FROM goal_history ORDER BY record_id, sequence').all();
307
+ const historyById = new Map();
308
+ for (const row of history) {
309
+ if (typeof row.record_id !== 'string' || !Number.isSafeInteger(row.sequence) || row.sequence < 1 || !Number.isSafeInteger(row.recorded_at) || row.recorded_at < 0)
310
+ fail('schema');
311
+ if (!byId.has(row.record_id))
312
+ fail('schema');
313
+ const entries = historyById.get(row.record_id) ?? [];
314
+ entries.push(row);
315
+ historyById.set(row.record_id, entries);
316
+ }
317
+ for (const [id, stored] of byId) {
318
+ const events = historyById.get(id);
319
+ if (!events || events.length !== stored.row.version + 1 || events[0]?.kind !== 'native' || events[1]?.kind !== 'checkpoint')
320
+ throw new GoalStoreError('schema');
321
+ const auditEvents = events;
322
+ let currentNative;
323
+ let currentCheckpoint;
324
+ let previousNative;
325
+ let recordedAt = -1;
326
+ for (const [index, event] of auditEvents.entries()) {
327
+ if (event.sequence !== index + 1 || event.recorded_at < recordedAt)
328
+ fail('schema');
329
+ recordedAt = event.recorded_at;
330
+ if (event.kind === 'native') {
331
+ const native = nativeInput(parse(event.payload_json));
332
+ if (idFor(native) !== id)
333
+ fail('schema');
334
+ if (previousNative && (native.revision < previousNative.revision || native.roundsStarted < previousNative.roundsStarted
335
+ || (native.revision === previousNative.revision && (native.sessionId !== previousNative.sessionId || native.goalId !== previousNative.goalId || native.objective !== previousNative.objective || native.phase !== previousNative.phase || native.maxGoalRounds !== previousNative.maxGoalRounds))))
336
+ fail('schema');
337
+ currentNative = native;
338
+ previousNative = native;
339
+ }
340
+ else if (event.kind === 'checkpoint') {
341
+ const checkpoint = checkpointInput(parse(event.payload_json));
342
+ if (index === 1 && !same(checkpoint, emptyCheckpoint()))
343
+ fail('schema');
344
+ currentCheckpoint = checkpoint;
345
+ }
346
+ else
347
+ fail('schema');
348
+ }
349
+ const initialNative = nativeInput(parse(auditEvents[0].payload_json));
350
+ const historyDefinition = definitionFromHistory(auditEvents.filter(event => event.kind === 'native').map(event => nativeInput(parse(event.payload_json))));
351
+ if (!currentNative || !currentCheckpoint || initialNative.objective !== stored.row.original_objective || stored.row.created_at !== auditEvents[0].recorded_at
352
+ || stored.row.updated_at !== recordedAt || !same(currentNative, stored.native) || !same(currentCheckpoint, stored.checkpoint)
353
+ || !same(historyDefinition, stored.definition))
354
+ fail('schema');
355
+ }
356
+ for (const [id, stored] of byId) {
357
+ for (const dependencyId of stored.checkpoint.dependencies) {
358
+ const dependency = byId.get(dependencyId);
359
+ if (!dependency || !same(dependency.scope, stored.scope) || dependencyId === id)
360
+ fail('schema');
361
+ }
362
+ const walksTo = (current, seen) => {
363
+ if (current === id)
364
+ return true;
365
+ if (seen.has(current))
366
+ return false;
367
+ seen.add(current);
368
+ return (byId.get(current)?.checkpoint.dependencies ?? []).some(next => walksTo(next, seen));
369
+ };
370
+ if (stored.checkpoint.dependencies.some(dependency => walksTo(dependency, new Set())))
371
+ fail('schema');
372
+ for (const binding of stored.checkpoint.dependencyBindings ?? []) {
373
+ const events = historyById.get(binding.goalId) ?? [];
374
+ const definitions = definitionsFromHistory(events.filter(event => event.kind === 'native').map(event => nativeInput(parse(event.payload_json))));
375
+ if (!definitions.some(definition => definition.version === binding.definitionVersion && definition.digest === binding.definitionDigest))
376
+ fail('schema');
377
+ }
378
+ }
379
+ const focus = database.prepare('SELECT scope_json, session_id, record_id FROM goal_focus').all();
380
+ for (const row of focus) {
381
+ const focusScope = scopeInput(parse(row.scope_json));
382
+ const sessionId = text(row.session_id, 512);
383
+ const recordId = text(row.record_id, 512);
384
+ const stored = byId.get(recordId);
385
+ if (!stored || !same(stored.scope, focusScope) || sessionId.length === 0)
386
+ fail('schema');
387
+ }
388
+ }
389
+ catch (error) {
390
+ if (error instanceof GoalStoreError)
391
+ fail('schema');
392
+ throw error;
393
+ }
394
+ }
395
+ export class GoalStore {
396
+ #database;
397
+ constructor(path) { this.#database = openDatabase(path); }
398
+ #transaction(operation) {
399
+ try {
400
+ this.#database.exec('BEGIN IMMEDIATE');
401
+ }
402
+ catch {
403
+ fail('conflict');
404
+ }
405
+ try {
406
+ const result = operation();
407
+ this.#database.exec('COMMIT');
408
+ return result;
409
+ }
410
+ catch (error) {
411
+ this.#database.exec('ROLLBACK');
412
+ throw error;
413
+ }
414
+ }
415
+ #read(id) {
416
+ const row = this.#database.prepare('SELECT id, scope_json, original_objective, definition_json, native_json, checkpoint_json, version, created_at, updated_at FROM goal_records WHERE id = ?').get(id);
417
+ if (!row)
418
+ return undefined;
419
+ const scope = scopeInput(parse(row.scope_json));
420
+ const native = nativeInput(parse(row.native_json));
421
+ const checkpoint = checkpointInput(parse(row.checkpoint_json));
422
+ const definition = definitionInput(parse(row.definition_json));
423
+ if (row.id !== id || !Number.isSafeInteger(row.version) || row.version < 1 || !Number.isSafeInteger(row.created_at) || row.created_at < 0 || !Number.isSafeInteger(row.updated_at) || row.updated_at < row.created_at || row.original_objective.length === 0 || row.original_objective.length > 16_384)
424
+ fail('schema');
425
+ if (idFor(native) !== id)
426
+ fail('schema');
427
+ return freeze({ id, scope, originalObjective: row.original_objective, definition, native, checkpoint, version: row.version, createdAt: row.created_at, updatedAt: row.updated_at });
428
+ }
429
+ #history(id, kind, payload, recordedAt) {
430
+ const sequence = this.#database.prepare('SELECT COALESCE(MAX(sequence), 0) AS sequence FROM goal_history WHERE record_id = ?').get(id).sequence + 1;
431
+ this.#database.prepare('INSERT INTO goal_history(record_id, sequence, kind, payload_json, recorded_at) VALUES (?, ?, ?, ?, ?)').run(id, sequence, kind, JSON.stringify(payload), recordedAt);
432
+ }
433
+ #validateDependencies(scope, id, checkpoint) {
434
+ if (checkpoint.dependencies.includes(id))
435
+ fail('invalid-input');
436
+ const records = this.#database.prepare('SELECT id FROM goal_records WHERE scope_json = ?').all(JSON.stringify(scope));
437
+ const byId = new Map(records.map(row => [row.id, this.#read(row.id)]));
438
+ for (const dependency of checkpoint.dependencies)
439
+ if (!byId.get(dependency) || !same(byId.get(dependency)?.scope, scope))
440
+ fail('not-found');
441
+ const walksTo = (current, seen) => {
442
+ if (current === id)
443
+ return true;
444
+ if (seen.has(current))
445
+ return false;
446
+ seen.add(current);
447
+ return (byId.get(current)?.checkpoint.dependencies ?? []).some(next => walksTo(next, seen));
448
+ };
449
+ if (checkpoint.dependencies.some(dependency => walksTo(dependency, new Set())))
450
+ fail('invalid-input');
451
+ }
452
+ #bindDependencies(scope, checkpoint) {
453
+ const bindings = checkpoint.dependencies.map(goalId => {
454
+ const dependency = this.#read(goalId);
455
+ if (!dependency)
456
+ fail('not-found');
457
+ const current = dependency;
458
+ if (!same(current.scope, scope))
459
+ fail('not-found');
460
+ const definition = current.definition;
461
+ return freeze({ goalId, definitionVersion: definition.version, definitionDigest: definition.digest });
462
+ });
463
+ return freeze({ ...checkpoint, dependencyBindings: bindings });
464
+ }
465
+ observe(scopeValue, nativeValue, allowCreate) {
466
+ const scope = scopeInput(scopeValue);
467
+ const native = nativeInput(nativeValue);
468
+ const id = idFor(native);
469
+ return this.#transaction(() => {
470
+ const existing = this.#read(id);
471
+ if (!existing) {
472
+ if (!allowCreate)
473
+ return undefined;
474
+ const checkpoint = emptyCheckpoint();
475
+ const createdAt = native.updatedAt;
476
+ const definition = definitionFromHistory([native]);
477
+ this.#database.prepare('INSERT INTO goal_records(id, scope_json, original_objective, definition_json, native_json, checkpoint_json, version, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)')
478
+ .run(id, JSON.stringify(scope), native.objective, JSON.stringify(definition), JSON.stringify(native), JSON.stringify(checkpoint), 1, createdAt, createdAt);
479
+ this.#history(id, 'native', native, createdAt);
480
+ this.#history(id, 'checkpoint', checkpoint, createdAt);
481
+ return this.#read(id);
482
+ }
483
+ if (!same(existing.scope, scope))
484
+ fail('not-found');
485
+ if (native.revision < existing.native.revision || (native.revision === existing.native.revision && native.roundsStarted < existing.native.roundsStarted))
486
+ return existing;
487
+ if (native.revision === existing.native.revision) {
488
+ const current = existing.native;
489
+ if (native.sessionId !== current.sessionId || native.goalId !== current.goalId || native.objective !== current.objective || native.phase !== current.phase || native.maxGoalRounds !== current.maxGoalRounds)
490
+ fail('conflict');
491
+ if (same(native, current))
492
+ return existing;
493
+ }
494
+ if (native.roundsStarted < existing.native.roundsStarted)
495
+ fail('conflict');
496
+ const updatedAt = Math.max(existing.updatedAt, native.updatedAt, Date.now());
497
+ const definition = native.objective === existing.native.objective ? existing.definition
498
+ : freeze({ version: existing.definition.version + 1, objective: native.objective, digest: acceptanceDigest({ objective: native.objective }) });
499
+ const next = freeze({ ...existing, definition, native, version: existing.version + 1, updatedAt });
500
+ this.#database.prepare('UPDATE goal_records SET definition_json = ?, native_json = ?, version = ?, updated_at = ? WHERE id = ?').run(JSON.stringify(definition), JSON.stringify(native), next.version, updatedAt, id);
501
+ this.#history(id, 'native', native, updatedAt);
502
+ return next;
503
+ });
504
+ }
505
+ get(scopeValue, id) {
506
+ const scope = scopeInput(scopeValue);
507
+ const record = this.#read(text(id, 512));
508
+ return record && same(record.scope, scope) ? record : undefined;
509
+ }
510
+ findNative(scopeValue, sessionIdValue, goalIdValue) {
511
+ const scope = scopeInput(scopeValue);
512
+ const sessionId = text(sessionIdValue, 512);
513
+ const goalId = text(goalIdValue, 512);
514
+ const id = createHash('sha256').update(sessionId).update('\0').update(goalId).digest('hex');
515
+ const record = this.#read(id);
516
+ return record && same(record.scope, scope) ? record : undefined;
517
+ }
518
+ setFocus(scopeValue, sessionIdValue, recordIdValue) {
519
+ const scope = scopeInput(scopeValue);
520
+ const sessionId = text(sessionIdValue, 512);
521
+ const recordId = text(recordIdValue, 512);
522
+ this.#transaction(() => {
523
+ const record = this.get(scope, recordId);
524
+ if (!record)
525
+ throw new GoalStoreError('not-found');
526
+ this.#database.prepare('INSERT INTO goal_focus(scope_json, session_id, record_id) VALUES (?, ?, ?) ON CONFLICT(scope_json, session_id) DO UPDATE SET record_id = excluded.record_id')
527
+ .run(JSON.stringify(scope), sessionId, record.id);
528
+ });
529
+ }
530
+ focused(scopeValue, sessionIdValue) {
531
+ const scope = scopeInput(scopeValue);
532
+ const sessionId = text(sessionIdValue, 512);
533
+ const row = this.#database.prepare('SELECT record_id FROM goal_focus WHERE scope_json = ? AND session_id = ?').get(JSON.stringify(scope), sessionId);
534
+ if (!row)
535
+ return undefined;
536
+ return this.get(scope, text(row.record_id, 512));
537
+ }
538
+ list(scopeValue, limit = 50) {
539
+ const scope = scopeInput(scopeValue);
540
+ integer(limit, 1);
541
+ if (limit > 50)
542
+ fail('invalid-input');
543
+ const rows = this.#database.prepare('SELECT id FROM goal_records WHERE scope_json = ? ORDER BY updated_at DESC, id ASC LIMIT ?').all(JSON.stringify(scope), limit);
544
+ return freeze(rows.map(row => this.#read(row.id)));
545
+ }
546
+ checkpoint(scopeValue, idValue, expectedVersion, checkpointValue) {
547
+ const scope = scopeInput(scopeValue);
548
+ const id = text(idValue, 512);
549
+ integer(expectedVersion, 1);
550
+ const requested = checkpointInput(checkpointValue);
551
+ return this.#transaction(() => {
552
+ const found = this.#read(id);
553
+ if (!found)
554
+ throw new GoalStoreError('not-found');
555
+ if (!same(found.scope, scope))
556
+ throw new GoalStoreError('not-found');
557
+ const existing = found;
558
+ if (existing.version !== expectedVersion)
559
+ fail('conflict');
560
+ this.#validateDependencies(scope, id, requested);
561
+ const checkpoint = this.#bindDependencies(scope, requested);
562
+ const updatedAt = Math.max(existing.updatedAt, Date.now());
563
+ const next = freeze({ ...existing, checkpoint, version: existing.version + 1, updatedAt });
564
+ this.#database.prepare('UPDATE goal_records SET checkpoint_json = ?, version = ?, updated_at = ? WHERE id = ?').run(JSON.stringify(checkpoint), next.version, updatedAt, id);
565
+ this.#history(id, 'checkpoint', checkpoint, updatedAt);
566
+ return next;
567
+ });
568
+ }
569
+ health() {
570
+ const rows = this.#database.prepare('SELECT id FROM goal_records').all();
571
+ const records = rows.map(row => this.#read(row.id));
572
+ return freeze({ goals: records.length, awaitingVerification: records.filter(record => record.native.phase === 'complete').length });
573
+ }
574
+ close() { this.#database.close(); }
575
+ }
576
+ export { message };
577
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}