@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.
- package/LICENSE +21 -0
- package/README.md +274 -0
- package/cordis.patch.yml +3 -0
- package/lib/budget-store.d.ts +73 -0
- package/lib/budget-store.d.ts.map +1 -0
- package/lib/budget-store.js +345 -0
- package/lib/budget-store.js.map +1 -0
- package/lib/budget.d.ts +78 -0
- package/lib/budget.d.ts.map +1 -0
- package/lib/budget.js +344 -0
- package/lib/budget.js.map +1 -0
- package/lib/dependency.d.ts +11 -0
- package/lib/dependency.d.ts.map +1 -0
- package/lib/dependency.js +34 -0
- package/lib/dependency.js.map +1 -0
- package/lib/event-wait-store.d.ts +56 -0
- package/lib/event-wait-store.d.ts.map +1 -0
- package/lib/event-wait-store.js +189 -0
- package/lib/event-wait-store.js.map +1 -0
- package/lib/event-wait.d.ts +47 -0
- package/lib/event-wait.d.ts.map +1 -0
- package/lib/event-wait.js +372 -0
- package/lib/event-wait.js.map +1 -0
- package/lib/execution-store.d.ts +23 -0
- package/lib/execution-store.d.ts.map +1 -0
- package/lib/execution-store.js +207 -0
- package/lib/execution-store.js.map +1 -0
- package/lib/execution.d.ts +49 -0
- package/lib/execution.d.ts.map +1 -0
- package/lib/execution.js +438 -0
- package/lib/execution.js.map +1 -0
- package/lib/feedback.d.ts +63 -0
- package/lib/feedback.d.ts.map +1 -0
- package/lib/feedback.js +134 -0
- package/lib/feedback.js.map +1 -0
- package/lib/index.d.ts +27 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/index.js.map +1 -0
- package/lib/outcome-store.d.ts +47 -0
- package/lib/outcome-store.d.ts.map +1 -0
- package/lib/outcome-store.js +271 -0
- package/lib/outcome-store.js.map +1 -0
- package/lib/outcome.d.ts +77 -0
- package/lib/outcome.d.ts.map +1 -0
- package/lib/outcome.js +417 -0
- package/lib/outcome.js.map +1 -0
- package/lib/service.d.ts +363 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +1839 -0
- package/lib/service.js.map +1 -0
- package/lib/store.d.ts +21 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +577 -0
- package/lib/store.js.map +1 -0
- package/lib/strategy-feedback.d.ts +29 -0
- package/lib/strategy-feedback.d.ts.map +1 -0
- package/lib/strategy-feedback.js +53 -0
- package/lib/strategy-feedback.js.map +1 -0
- package/lib/strategy-identity.d.ts +11 -0
- package/lib/strategy-identity.d.ts.map +1 -0
- package/lib/strategy-identity.js +10 -0
- package/lib/strategy-identity.js.map +1 -0
- package/lib/strategy-store.d.ts +76 -0
- package/lib/strategy-store.d.ts.map +1 -0
- package/lib/strategy-store.js +277 -0
- package/lib/strategy-store.js.map +1 -0
- package/lib/strategy.d.ts +56 -0
- package/lib/strategy.d.ts.map +1 -0
- package/lib/strategy.js +478 -0
- package/lib/strategy.js.map +1 -0
- package/lib/tools.d.ts +4 -0
- package/lib/tools.d.ts.map +1 -0
- package/lib/tools.js +130 -0
- package/lib/tools.js.map +1 -0
- package/lib/types.d.ts +285 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +10 -0
- package/lib/types.js.map +1 -0
- package/lib/verified-artifact.d.ts +72 -0
- package/lib/verified-artifact.d.ts.map +1 -0
- package/lib/verified-artifact.js +142 -0
- package/lib/verified-artifact.js.map +1 -0
- package/lib/verified-workflow.d.ts +120 -0
- package/lib/verified-workflow.d.ts.map +1 -0
- package/lib/verified-workflow.js +253 -0
- package/lib/verified-workflow.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/lib/wake-store.d.ts +38 -0
- package/lib/wake-store.d.ts.map +1 -0
- package/lib/wake-store.js +177 -0
- package/lib/wake-store.js.map +1 -0
- package/lib/wake.d.ts +45 -0
- package/lib/wake.d.ts.map +1 -0
- package/lib/wake.js +327 -0
- package/lib/wake.js.map +1 -0
- 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
|
package/lib/store.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|