@dsh-enhanced/assistant-verifier 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/lib/store.d.ts ADDED
@@ -0,0 +1,84 @@
1
+ import type { AcceptanceTaskIdentity, TaskAcceptanceContract, TaskVerificationReceipt } from '@dsh-enhanced/task-acceptance-contract';
2
+ export declare class AcceptanceStoreError extends Error {
3
+ readonly code: 'invalid-input' | 'conflict' | 'corrupt';
4
+ constructor(code: 'invalid-input' | 'conflict' | 'corrupt', message: string);
5
+ }
6
+ export type ExecutionStatus = 'succeeded' | 'failed' | 'timed-out' | 'cancelled' | 'unknown';
7
+ export interface Execution {
8
+ readonly status: ExecutionStatus;
9
+ readonly quiescent: boolean;
10
+ readonly completedAt: number;
11
+ readonly executionRef: string;
12
+ }
13
+ export interface AcceptanceState {
14
+ readonly state: 'awaiting-execution' | 'pending' | 'verifying' | 'done' | 'needs-attention';
15
+ readonly attempts: number;
16
+ readonly reason: string | null;
17
+ readonly receipt: TaskVerificationReceipt | null;
18
+ readonly execution: Execution | null;
19
+ }
20
+ export interface AttentionState extends AcceptanceState {
21
+ readonly contract: TaskAcceptanceContract;
22
+ }
23
+ export interface ClaimedVerification {
24
+ readonly contract: TaskAcceptanceContract;
25
+ readonly job: Readonly<{
26
+ contractId: string;
27
+ attempt: number;
28
+ fencingToken: number;
29
+ workerId: string;
30
+ leaseUntil: number;
31
+ }>;
32
+ readonly execution: Execution;
33
+ }
34
+ export declare class AcceptanceStore {
35
+ #private;
36
+ constructor(path: string);
37
+ close(): void;
38
+ accept(input: TaskAcceptanceContract): TaskAcceptanceContract;
39
+ getContract(id: string): TaskAcceptanceContract | null;
40
+ getTaskContract(identity: {
41
+ scope: {
42
+ workspace: string;
43
+ preset: string;
44
+ };
45
+ owner: {
46
+ principalRecordId: string;
47
+ principalVersion: number;
48
+ };
49
+ task: AcceptanceTaskIdentity;
50
+ }): TaskAcceptanceContract | null;
51
+ markExecutionFinished(contractId: string, input: Execution): void;
52
+ claimDue(input: {
53
+ workerId: string;
54
+ now: number;
55
+ leaseMs: number;
56
+ }): ClaimedVerification | null;
57
+ finish(input: {
58
+ contractId: string;
59
+ workerId: string;
60
+ fencingToken: number;
61
+ now: number;
62
+ receipt: TaskVerificationReceipt | null;
63
+ reason: string;
64
+ retryAt?: number;
65
+ }): void;
66
+ getState(contractId: string): AcceptanceState | null;
67
+ counts(now: number): Readonly<{
68
+ awaitingExecution: number;
69
+ pendingVerification: number;
70
+ pendingReceipts: number;
71
+ expiredReceipts: number;
72
+ needsAttention: number;
73
+ }>;
74
+ awaitingExecution(limit?: number, afterId?: string): readonly TaskAcceptanceContract[];
75
+ /** Bounds recovery work while making missing terminal execution evidence actionable. */
76
+ expireAwaiting(now: number): number;
77
+ listAttention(limit?: number): readonly AttentionState[];
78
+ pendingReceipts(limit?: number, afterId?: string): readonly {
79
+ contract: TaskAcceptanceContract;
80
+ receipt: TaskVerificationReceipt;
81
+ }[];
82
+ acknowledgeReceipt(receiptId: string, digest: string): void;
83
+ }
84
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/lib/store.js ADDED
@@ -0,0 +1,386 @@
1
+ import { chmodSync, existsSync, lstatSync, mkdirSync } from 'node:fs';
2
+ import { dirname, isAbsolute, normalize } from 'node:path';
3
+ import { DatabaseSync } from 'node:sqlite';
4
+ import { acceptanceCanonicalJson, validateTaskAcceptanceContract, validateTaskVerificationReceipt, } from '@dsh-enhanced/task-acceptance-contract';
5
+ export class AcceptanceStoreError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.code = code;
10
+ this.name = 'AcceptanceStoreError';
11
+ }
12
+ }
13
+ const MAX_ATTEMPTS = 3;
14
+ const IDENTIFIER = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/u;
15
+ function fail(code, message) { throw new AcceptanceStoreError(code, message); }
16
+ function safeTime(value, label) { if (!Number.isSafeInteger(value) || value < 0)
17
+ fail('invalid-input', `${label} is invalid`); }
18
+ function safeId(value, label) { if (typeof value !== 'string' || !IDENTIFIER.test(value))
19
+ fail('invalid-input', `${label} is invalid`); }
20
+ function reason(value) { if (typeof value !== 'string' || value.length === 0 || value.length > 256 || value !== value.normalize('NFC').trim() || [...value].some(character => character.codePointAt(0) < 32 || character.codePointAt(0) === 127))
21
+ fail('invalid-input', 'reason is invalid'); }
22
+ function execution(value) {
23
+ if (value === null || typeof value !== 'object' || !['succeeded', 'failed', 'timed-out', 'cancelled', 'unknown'].includes(value.status) || typeof value.quiescent !== 'boolean')
24
+ fail('invalid-input', 'execution is invalid');
25
+ safeTime(value.completedAt, 'execution completedAt');
26
+ safeId(value.executionRef, 'executionRef');
27
+ return Object.freeze({ status: value.status, quiescent: value.quiescent, completedAt: value.completedAt, executionRef: value.executionRef });
28
+ }
29
+ function parseJson(value, label) { try {
30
+ return JSON.parse(value);
31
+ }
32
+ catch {
33
+ return fail('corrupt', `${label} is invalid JSON`);
34
+ } }
35
+ function parseContract(value) { try {
36
+ return validateTaskAcceptanceContract(parseJson(value, 'contract'));
37
+ }
38
+ catch {
39
+ return fail('corrupt', 'stored contract is invalid');
40
+ } }
41
+ function parseReceipt(contract, value) { try {
42
+ return validateTaskVerificationReceipt(contract, parseJson(value, 'receipt'));
43
+ }
44
+ catch {
45
+ return fail('corrupt', 'stored receipt is invalid');
46
+ } }
47
+ function parseExecution(value) { return execution(parseJson(value, 'execution')); }
48
+ function checkedJob(row) {
49
+ if (typeof row.contract_id !== 'string' || !IDENTIFIER.test(row.contract_id) || !['awaiting-execution', 'pending', 'verifying', 'done', 'needs-attention'].includes(row.state) || !Number.isSafeInteger(row.attempts) || row.attempts < 0 || row.attempts > MAX_ATTEMPTS || !Number.isSafeInteger(row.fencing_token) || row.fencing_token < 0 || row.fencing_token !== row.attempts || (row.worker_id !== null && (typeof row.worker_id !== 'string' || !IDENTIFIER.test(row.worker_id))) || (row.lease_until !== null && (!Number.isSafeInteger(row.lease_until) || row.lease_until < 0)) || (row.retry_at !== null && (!Number.isSafeInteger(row.retry_at) || row.retry_at < 0)) || (row.execution !== null && typeof row.execution !== 'string') || (row.receipt !== null && typeof row.receipt !== 'string') || (row.reason !== null && typeof row.reason !== 'string'))
50
+ fail('corrupt', 'stored job metadata is invalid');
51
+ if ((row.state === 'verifying') !== (row.worker_id !== null && row.lease_until !== null))
52
+ fail('corrupt', 'stored job lease/state is invalid');
53
+ return row;
54
+ }
55
+ function validatedJob(contract, row) {
56
+ checkedJob(row);
57
+ if (row.contract_id !== contract.id)
58
+ fail('corrupt', 'stored job does not bind its contract');
59
+ const actual = row.execution === null ? null : parseExecution(row.execution);
60
+ const proof = row.receipt === null ? null : parseReceipt(contract, row.receipt);
61
+ if (actual !== null && actual.completedAt < contract.issuedAt)
62
+ fail('corrupt', 'stored execution predates contract');
63
+ if (proof !== null && (actual === null || proof.startedAt < actual.completedAt))
64
+ fail('corrupt', 'stored receipt predates execution');
65
+ if (row.reason !== null) {
66
+ try {
67
+ reason(row.reason);
68
+ }
69
+ catch {
70
+ fail('corrupt', 'stored job reason is invalid');
71
+ }
72
+ }
73
+ if (row.state === 'awaiting-execution') {
74
+ if (row.attempts !== 0 || actual !== null || proof !== null || row.reason !== null || row.retry_at !== null)
75
+ fail('corrupt', 'awaiting job has terminal metadata');
76
+ }
77
+ else if (row.state === 'pending') {
78
+ if (actual === null || row.retry_at === null || row.retry_at >= contract.expiresAt || (proof !== null && proof.objectiveStatus !== 'unknown'))
79
+ fail('corrupt', 'pending job metadata is invalid');
80
+ }
81
+ else if (row.state === 'verifying') {
82
+ if (actual === null || row.attempts < 1 || (proof !== null && proof.objectiveStatus !== 'unknown'))
83
+ fail('corrupt', 'verifying job metadata is invalid');
84
+ }
85
+ else if (row.state === 'done') {
86
+ if (actual === null || proof === null || proof.objectiveStatus === 'unknown' || row.reason === null || row.retry_at !== null)
87
+ fail('corrupt', 'done job lacks a known receipt');
88
+ }
89
+ else if (actual === null) {
90
+ if (row.attempts !== 0 || proof !== null || row.reason !== 'execution-unconfirmed' || row.retry_at !== null)
91
+ fail('corrupt', 'unconfirmed attention job is invalid');
92
+ }
93
+ else if (row.reason === null || row.retry_at !== null || (proof !== null && proof.objectiveStatus !== 'unknown'))
94
+ fail('corrupt', 'attention job metadata is invalid');
95
+ return { row, execution: actual, receipt: proof };
96
+ }
97
+ function privateDatabase(path, existing) {
98
+ const stat = lstatSync(path);
99
+ const uid = process.getuid?.();
100
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1 || (uid !== undefined && stat.uid !== uid))
101
+ fail('corrupt', 'database path is not a private regular file');
102
+ if (existing && (stat.mode & 0o077) !== 0)
103
+ fail('corrupt', 'database permissions are not private');
104
+ if (!existing)
105
+ chmodSync(path, 0o600);
106
+ }
107
+ function identifier(value) { return `"${value.replaceAll('"', '""')}"`; }
108
+ function schemaColumns(database, table) {
109
+ return database.prepare(`PRAGMA table_info(${identifier(table)})`).all().map(row => row.name);
110
+ }
111
+ function indexedColumns(database, table) {
112
+ const indexes = database.prepare(`PRAGMA index_list(${identifier(table)})`).all();
113
+ return indexes.filter(index => index.unique === 1).map(index => database.prepare(`PRAGMA index_info(${identifier(index.name)})`).all().map(row => row.name));
114
+ }
115
+ function sameColumns(actual, expected) { return actual.length === expected.length && actual.every((value, index) => value === expected[index]); }
116
+ function hasForeignKey(database, table, from, target) {
117
+ return database.prepare(`PRAGMA foreign_key_list(${identifier(table)})`).all().some(row => row.table === target && row.from === from && row.to === 'id');
118
+ }
119
+ function verifySchema(database) {
120
+ const definitions = {
121
+ acceptance_contracts: ['id', 'scope', 'owner', 'task_kind', 'task_ref', 'payload'],
122
+ acceptance_jobs: ['contract_id', 'state', 'attempts', 'fencing_token', 'worker_id', 'lease_until', 'execution', 'receipt', 'reason', 'retry_at'],
123
+ acceptance_receipts: ['id', 'contract_id', 'payload', 'digest'],
124
+ acceptance_outbox: ['receipt_id', 'digest', 'contract_id', 'acknowledged'],
125
+ };
126
+ for (const [table, columns] of Object.entries(definitions))
127
+ if (!sameColumns(schemaColumns(database, table), columns))
128
+ fail('corrupt', `database schema is missing or changes ${table}`);
129
+ const contractsIndexes = indexedColumns(database, 'acceptance_contracts');
130
+ const jobIndexes = indexedColumns(database, 'acceptance_jobs');
131
+ const receiptIndexes = indexedColumns(database, 'acceptance_receipts');
132
+ const outboxIndexes = indexedColumns(database, 'acceptance_outbox');
133
+ if (!contractsIndexes.some(columns => sameColumns(columns, ['id'])) || !contractsIndexes.some(columns => sameColumns(columns, ['scope', 'owner', 'task_kind', 'task_ref'])) || !jobIndexes.some(columns => sameColumns(columns, ['contract_id'])) || !receiptIndexes.some(columns => sameColumns(columns, ['id'])) || !receiptIndexes.some(columns => sameColumns(columns, ['contract_id', 'digest'])) || !outboxIndexes.some(columns => sameColumns(columns, ['receipt_id'])) || !hasForeignKey(database, 'acceptance_jobs', 'contract_id', 'acceptance_contracts') || !hasForeignKey(database, 'acceptance_receipts', 'contract_id', 'acceptance_contracts') || !hasForeignKey(database, 'acceptance_outbox', 'receipt_id', 'acceptance_receipts') || !hasForeignKey(database, 'acceptance_outbox', 'contract_id', 'acceptance_contracts'))
134
+ fail('corrupt', 'database schema lacks required index or foreign key');
135
+ }
136
+ export class AcceptanceStore {
137
+ #database;
138
+ #closed = false;
139
+ constructor(path) {
140
+ if (path !== ':memory:' && !isAbsolute(path))
141
+ fail('invalid-input', 'database path must be absolute');
142
+ const existing = path !== ':memory:' && existsSync(path);
143
+ if (path !== ':memory:') {
144
+ if (existing)
145
+ privateDatabase(path, true);
146
+ else
147
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
148
+ }
149
+ this.#database = new DatabaseSync(path);
150
+ try {
151
+ this.#database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 5000; PRAGMA synchronous = FULL;');
152
+ if (path !== ':memory:') {
153
+ privateDatabase(path, existing);
154
+ const mode = this.#database.prepare('PRAGMA journal_mode = WAL').get();
155
+ if (mode.journal_mode.toLowerCase() !== 'wal')
156
+ fail('corrupt', 'database refused WAL mode');
157
+ }
158
+ const version = this.#database.prepare('PRAGMA user_version').get().user_version;
159
+ if (!Number.isSafeInteger(version) || version < 0 || version > 1)
160
+ fail('corrupt', 'database schema version is unsupported');
161
+ if (version === 0 && this.#database.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' LIMIT 1").get() !== undefined)
162
+ fail('corrupt', 'unversioned database is not an acceptance ledger');
163
+ if (version === 0)
164
+ this.#database.exec(`CREATE TABLE acceptance_contracts (
165
+ id TEXT PRIMARY KEY NOT NULL, scope TEXT NOT NULL, owner TEXT NOT NULL, task_kind TEXT NOT NULL, task_ref TEXT NOT NULL,
166
+ payload TEXT NOT NULL, UNIQUE(scope, owner, task_kind, task_ref));
167
+ CREATE TABLE IF NOT EXISTS acceptance_jobs (
168
+ contract_id TEXT PRIMARY KEY NOT NULL REFERENCES acceptance_contracts(id), state TEXT NOT NULL CHECK(state IN ('awaiting-execution','pending','verifying','done','needs-attention')),
169
+ attempts INTEGER NOT NULL DEFAULT 0, fencing_token INTEGER NOT NULL DEFAULT 0, worker_id TEXT, lease_until INTEGER, execution TEXT, receipt TEXT, reason TEXT, retry_at INTEGER);
170
+ CREATE TABLE IF NOT EXISTS acceptance_receipts (id TEXT PRIMARY KEY NOT NULL, contract_id TEXT NOT NULL REFERENCES acceptance_contracts(id), payload TEXT NOT NULL, digest TEXT NOT NULL, UNIQUE(contract_id, digest));
171
+ CREATE TABLE IF NOT EXISTS acceptance_outbox (receipt_id TEXT PRIMARY KEY NOT NULL REFERENCES acceptance_receipts(id), digest TEXT NOT NULL, contract_id TEXT NOT NULL REFERENCES acceptance_contracts(id), acknowledged INTEGER NOT NULL DEFAULT 0 CHECK(acknowledged IN (0,1)));
172
+ PRAGMA user_version = 1;`);
173
+ verifySchema(this.#database);
174
+ }
175
+ catch (error) {
176
+ this.#database.close();
177
+ throw error;
178
+ }
179
+ }
180
+ close() { if (!this.#closed) {
181
+ this.#closed = true;
182
+ this.#database.close();
183
+ } }
184
+ accept(input) {
185
+ const contract = validateTaskAcceptanceContract(input);
186
+ const payload = acceptanceCanonicalJson(contract);
187
+ this.#transaction(() => {
188
+ const byId = this.#database.prepare('SELECT id, payload FROM acceptance_contracts WHERE id = ?').get(contract.id);
189
+ const byTask = this.#database.prepare('SELECT id, payload FROM acceptance_contracts WHERE scope = ? AND owner = ? AND task_kind = ? AND task_ref = ?').get(contract.scope.workspace + '\0' + contract.scope.preset, contract.owner.principalRecordId + '\0' + contract.owner.principalVersion, contract.task.kind, contract.task.ref);
190
+ if (byId !== undefined || byTask !== undefined) {
191
+ const existing = byId ?? byTask;
192
+ if (existing.id !== undefined && existing.id !== contract.id || existing.payload !== payload)
193
+ fail('conflict', 'contract id or task identity is immutable');
194
+ return;
195
+ }
196
+ this.#database.prepare('INSERT INTO acceptance_contracts (id, scope, owner, task_kind, task_ref, payload) VALUES (?, ?, ?, ?, ?, ?)').run(contract.id, contract.scope.workspace + '\0' + contract.scope.preset, contract.owner.principalRecordId + '\0' + contract.owner.principalVersion, contract.task.kind, contract.task.ref, payload);
197
+ this.#database.prepare("INSERT INTO acceptance_jobs (contract_id, state) VALUES (?, 'awaiting-execution')").run(contract.id);
198
+ });
199
+ return contract;
200
+ }
201
+ getContract(id) { safeId(id, 'contractId'); const row = this.#database.prepare('SELECT payload FROM acceptance_contracts WHERE id = ?').get(id); return row === undefined ? null : parseContract(row.payload); }
202
+ getTaskContract(identity) {
203
+ if (typeof identity.scope?.workspace !== 'string' || !isAbsolute(identity.scope.workspace) || normalize(identity.scope.workspace) !== identity.scope.workspace || typeof identity.scope.preset !== 'string' || !IDENTIFIER.test(identity.scope.preset))
204
+ fail('invalid-input', 'scope is invalid');
205
+ safeId(identity.owner?.principalRecordId, 'owner principalRecordId');
206
+ if (!Number.isSafeInteger(identity.owner.principalVersion) || identity.owner.principalVersion < 1)
207
+ fail('invalid-input', 'owner principalVersion is invalid');
208
+ if (identity.task.kind !== 'automation-run' && identity.task.kind !== 'foreground-turn' && identity.task.kind !== 'goal-step' && identity.task.kind !== 'goal-outcome')
209
+ fail('invalid-input', 'task kind is invalid');
210
+ safeId(identity.task.ref, 'task ref');
211
+ const row = this.#database.prepare('SELECT payload FROM acceptance_contracts WHERE scope = ? AND owner = ? AND task_kind = ? AND task_ref = ?').get(identity.scope.workspace + '\0' + identity.scope.preset, identity.owner.principalRecordId + '\0' + identity.owner.principalVersion, identity.task.kind, identity.task.ref);
212
+ if (row === undefined)
213
+ return null;
214
+ const contract = parseContract(row.payload);
215
+ // v2 goal work shares the SQL lookup key with its producer-provided ref,
216
+ // but its immutable full binding is part of the durable identity.
217
+ if (acceptanceCanonicalJson(contract.task) !== acceptanceCanonicalJson(identity.task))
218
+ fail('conflict', 'task binding differs');
219
+ return contract;
220
+ }
221
+ markExecutionFinished(contractId, input) {
222
+ safeId(contractId, 'contractId');
223
+ const item = execution(input);
224
+ this.#transaction(() => {
225
+ const contract = this.#requireContract(contractId);
226
+ const job = this.#job(contract);
227
+ if (item.completedAt < contract.issuedAt)
228
+ fail('invalid-input', 'execution completedAt predates contract');
229
+ const serialized = acceptanceCanonicalJson(item);
230
+ if (job.execution !== null) {
231
+ if (job.execution !== serialized)
232
+ fail('conflict', 'execution is immutable');
233
+ return;
234
+ }
235
+ const state = item.completedAt >= contract.expiresAt ? 'needs-attention' : 'pending';
236
+ this.#database.prepare('UPDATE acceptance_jobs SET execution = ?, state = ?, reason = ?, retry_at = ? WHERE contract_id = ?').run(serialized, state, state === 'pending' ? null : 'contract-expired', state === 'pending' ? item.completedAt : null, contractId);
237
+ });
238
+ }
239
+ claimDue(input) {
240
+ safeId(input.workerId, 'workerId');
241
+ safeTime(input.now, 'now');
242
+ if (!Number.isSafeInteger(input.leaseMs) || input.leaseMs < 1 || input.leaseMs > 305_000 || input.now > Number.MAX_SAFE_INTEGER - input.leaseMs)
243
+ fail('invalid-input', 'leaseMs is invalid');
244
+ return this.#transaction(() => {
245
+ const row = this.#database.prepare("SELECT j.contract_id, j.state, j.attempts, j.fencing_token, j.worker_id, j.lease_until, j.execution, j.receipt, j.reason, j.retry_at, c.payload FROM acceptance_jobs j JOIN acceptance_contracts c ON c.id = j.contract_id WHERE (j.state = 'pending' AND j.retry_at <= ?) OR (j.state = 'verifying' AND j.lease_until < ?) ORDER BY j.contract_id LIMIT 1").get(input.now, input.now);
246
+ if (row !== undefined) {
247
+ const contract = parseContract(row.payload);
248
+ validatedJob(contract, row);
249
+ if (contract.expiresAt <= input.now || row.attempts >= MAX_ATTEMPTS) {
250
+ this.#database.prepare("UPDATE acceptance_jobs SET state = 'needs-attention', worker_id = NULL, lease_until = NULL, retry_at = NULL, reason = ? WHERE contract_id = ?").run(contract.expiresAt <= input.now ? 'contract-expired' : 'attempt-limit', row.contract_id);
251
+ return null;
252
+ }
253
+ if (input.leaseMs < contract.bounds.maxDurationMs + 5_000)
254
+ fail('invalid-input', 'leaseMs must cover contract duration plus grace');
255
+ if (row.execution === null)
256
+ fail('corrupt', 'claimable job lacks execution');
257
+ const attempts = row.attempts + 1;
258
+ const fence = row.fencing_token + 1;
259
+ const leaseUntil = input.now + input.leaseMs;
260
+ this.#database.prepare("UPDATE acceptance_jobs SET state = 'verifying', attempts = ?, fencing_token = ?, worker_id = ?, lease_until = ? WHERE contract_id = ?").run(attempts, fence, input.workerId, leaseUntil, row.contract_id);
261
+ return Object.freeze({ contract, job: Object.freeze({ contractId: row.contract_id, attempt: attempts, fencingToken: fence, workerId: input.workerId, leaseUntil }), execution: parseExecution(row.execution) });
262
+ }
263
+ return null;
264
+ });
265
+ }
266
+ finish(input) {
267
+ safeId(input.contractId, 'contractId');
268
+ safeId(input.workerId, 'workerId');
269
+ safeTime(input.now, 'now');
270
+ if (!Number.isSafeInteger(input.fencingToken) || input.fencingToken < 1)
271
+ fail('invalid-input', 'fencingToken is invalid');
272
+ reason(input.reason);
273
+ if (input.retryAt !== undefined)
274
+ safeTime(input.retryAt, 'retryAt');
275
+ this.#transaction(() => {
276
+ const contract = this.#requireContract(input.contractId);
277
+ const job = this.#job(contract);
278
+ const receipt = input.receipt === null ? null : validateTaskVerificationReceipt(contract, input.receipt);
279
+ const serialized = receipt === null ? null : acceptanceCanonicalJson(receipt);
280
+ if (job.state !== 'verifying' || job.worker_id !== input.workerId || job.fencing_token !== input.fencingToken || job.lease_until === null || job.lease_until < input.now)
281
+ fail('conflict', 'verification lease is no longer live');
282
+ const actual = job.execution === null ? fail('corrupt', 'verifying job lacks execution') : parseExecution(job.execution);
283
+ if (receipt !== null && (receipt.startedAt < actual.completedAt || receipt.completedAt > input.now || (receipt.objectiveStatus !== 'unknown' && receipt.validUntil <= input.now)))
284
+ fail('invalid-input', 'receipt is outside live execution evidence');
285
+ if (receipt !== null)
286
+ this.#recordReceipt(contract, receipt, serialized);
287
+ const terminalKnown = receipt !== null && receipt.objectiveStatus !== 'unknown';
288
+ const retry = !terminalKnown && input.retryAt !== undefined && input.retryAt >= input.now && input.retryAt < contract.expiresAt && job.attempts < MAX_ATTEMPTS && input.now < contract.expiresAt;
289
+ const state = terminalKnown ? 'done' : retry ? 'pending' : 'needs-attention';
290
+ const nextReason = terminalKnown ? input.reason : retry ? input.reason : input.now >= contract.expiresAt || (input.retryAt !== undefined && input.retryAt > contract.expiresAt) ? 'contract-expired' : job.attempts >= MAX_ATTEMPTS ? 'attempt-limit' : input.reason;
291
+ this.#database.prepare('UPDATE acceptance_jobs SET state = ?, worker_id = NULL, lease_until = NULL, receipt = ?, reason = ?, retry_at = ? WHERE contract_id = ?').run(state, serialized, nextReason, retry ? input.retryAt : null, input.contractId);
292
+ if (receipt !== null)
293
+ this.#database.prepare('INSERT OR IGNORE INTO acceptance_outbox (receipt_id, digest, contract_id) VALUES (?, ?, ?)').run(receipt.id, receipt.digest, contract.id);
294
+ });
295
+ }
296
+ getState(contractId) {
297
+ safeId(contractId, 'contractId');
298
+ const row = this.#database.prepare('SELECT contract_id, state, attempts, fencing_token, worker_id, lease_until, execution, receipt, reason, retry_at FROM acceptance_jobs WHERE contract_id = ?').get(contractId);
299
+ if (row === undefined)
300
+ return null;
301
+ const contract = this.#requireContract(contractId);
302
+ const checked = validatedJob(contract, row);
303
+ return Object.freeze({ state: row.state, attempts: row.attempts, reason: row.reason, receipt: checked.receipt, execution: checked.execution });
304
+ }
305
+ counts(now) {
306
+ safeTime(now, 'now');
307
+ const jobs = this.#database.prepare(`SELECT
308
+ count(*) FILTER (WHERE state = 'awaiting-execution') AS awaitingExecution,
309
+ count(*) FILTER (WHERE state IN ('pending', 'verifying')) AS pendingVerification,
310
+ count(*) FILTER (WHERE state = 'needs-attention') AS needsAttention
311
+ FROM acceptance_jobs`).get();
312
+ const receipts = this.#database.prepare(`SELECT count(*) AS pendingReceipts,
313
+ count(*) FILTER (WHERE json_extract(r.payload, '$.validUntil') <= ?) AS expiredReceipts
314
+ FROM acceptance_outbox o JOIN acceptance_receipts r ON r.id = o.receipt_id
315
+ WHERE o.acknowledged = 0`).get(now);
316
+ return Object.freeze({ ...jobs, ...receipts });
317
+ }
318
+ awaitingExecution(limit = 100, afterId = '') {
319
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100)
320
+ fail('invalid-input', 'limit is invalid');
321
+ if (afterId !== '')
322
+ safeId(afterId, 'afterId');
323
+ const rows = this.#database.prepare("SELECT j.contract_id, j.state, j.attempts, j.fencing_token, j.worker_id, j.lease_until, j.execution, j.receipt, j.reason, j.retry_at, c.payload FROM acceptance_jobs j JOIN acceptance_contracts c ON c.id = j.contract_id WHERE j.state = 'awaiting-execution' AND j.contract_id > ? ORDER BY j.contract_id LIMIT ?").all(afterId, limit);
324
+ return Object.freeze(rows.map(row => { const contract = parseContract(row.payload); validatedJob(contract, row); return contract; }));
325
+ }
326
+ /** Bounds recovery work while making missing terminal execution evidence actionable. */
327
+ expireAwaiting(now) {
328
+ safeTime(now, 'now');
329
+ return this.#transaction(() => {
330
+ const rows = this.#database.prepare("SELECT j.contract_id, j.state, j.attempts, j.fencing_token, j.worker_id, j.lease_until, j.execution, j.receipt, j.reason, j.retry_at, c.payload FROM acceptance_jobs j JOIN acceptance_contracts c ON c.id = j.contract_id WHERE j.state = 'awaiting-execution' AND json_extract(c.payload, '$.expiresAt') <= ? ORDER BY j.contract_id LIMIT 100").all(now);
331
+ let expired = 0;
332
+ for (const row of rows) {
333
+ const contract = parseContract(row.payload);
334
+ validatedJob(contract, row);
335
+ if (contract.expiresAt <= now) {
336
+ const result = this.#database.prepare("UPDATE acceptance_jobs SET state = 'needs-attention', reason = 'execution-unconfirmed' WHERE contract_id = ? AND state = 'awaiting-execution'").run(row.contract_id);
337
+ expired += Number(result.changes);
338
+ }
339
+ }
340
+ return expired;
341
+ });
342
+ }
343
+ listAttention(limit = 100) {
344
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100)
345
+ fail('invalid-input', 'limit is invalid');
346
+ const rows = this.#database.prepare("SELECT j.contract_id, j.state, j.attempts, j.fencing_token, j.worker_id, j.lease_until, j.execution, j.receipt, j.reason, j.retry_at, c.payload FROM acceptance_jobs j JOIN acceptance_contracts c ON c.id = j.contract_id WHERE j.state = 'needs-attention' ORDER BY j.contract_id LIMIT ?").all(limit);
347
+ return Object.freeze(rows.map(row => {
348
+ const contract = parseContract(row.payload);
349
+ const checked = validatedJob(contract, row);
350
+ return Object.freeze({ contract, state: row.state, attempts: row.attempts, reason: row.reason, receipt: checked.receipt, execution: checked.execution });
351
+ }));
352
+ }
353
+ pendingReceipts(limit = 100, afterId = '') {
354
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100)
355
+ fail('invalid-input', 'limit is invalid');
356
+ if (afterId !== '')
357
+ safeId(afterId, 'afterId');
358
+ const rows = this.#database.prepare('SELECT c.payload AS contract, r.payload AS receipt FROM acceptance_outbox o JOIN acceptance_contracts c ON c.id = o.contract_id JOIN acceptance_receipts r ON r.id = o.receipt_id WHERE o.acknowledged = 0 AND o.receipt_id > ? ORDER BY o.receipt_id LIMIT ?').all(afterId, limit);
359
+ return Object.freeze(rows.map(row => { const contract = parseContract(row.contract); return Object.freeze({ contract, receipt: parseReceipt(contract, row.receipt) }); }));
360
+ }
361
+ acknowledgeReceipt(receiptId, digest) { safeId(receiptId, 'receiptId'); if (!/^[a-f0-9]{64}$/u.test(digest))
362
+ fail('invalid-input', 'digest is invalid'); this.#transaction(() => { const row = this.#database.prepare('SELECT digest FROM acceptance_outbox WHERE receipt_id = ?').get(receiptId); if (row === undefined)
363
+ fail('conflict', 'outbox receipt is absent'); if (row.digest !== digest)
364
+ fail('conflict', 'outbox receipt digest differs'); this.#database.prepare('UPDATE acceptance_outbox SET acknowledged = 1 WHERE receipt_id = ?').run(receiptId); }); }
365
+ #requireContract(id) { const row = this.#database.prepare('SELECT payload FROM acceptance_contracts WHERE id = ?').get(id); if (row === undefined)
366
+ fail('conflict', 'contract is absent'); return parseContract(row.payload); }
367
+ #job(contract) { const row = this.#database.prepare('SELECT contract_id, state, attempts, fencing_token, worker_id, lease_until, execution, receipt, reason, retry_at FROM acceptance_jobs WHERE contract_id = ?').get(contract.id); if (row === undefined)
368
+ fail('corrupt', 'contract lacks job'); return validatedJob(contract, row).row; }
369
+ #recordReceipt(contract, receipt, serialized) { const previous = this.#database.prepare('SELECT payload FROM acceptance_receipts WHERE id = ?').get(receipt.id); if (previous !== undefined && previous.payload !== serialized)
370
+ fail('conflict', 'receipt id is immutable'); if (previous === undefined)
371
+ this.#database.prepare('INSERT INTO acceptance_receipts (id, contract_id, payload, digest) VALUES (?, ?, ?, ?)').run(receipt.id, contract.id, serialized, receipt.digest); }
372
+ #transaction(body) { if (this.#closed)
373
+ fail('conflict', 'store is closed'); this.#database.exec('BEGIN IMMEDIATE'); try {
374
+ const result = body();
375
+ this.#database.exec('COMMIT');
376
+ return result;
377
+ }
378
+ catch (error) {
379
+ try {
380
+ this.#database.exec('ROLLBACK');
381
+ }
382
+ catch { }
383
+ throw error;
384
+ } }
385
+ }
386
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const version = "0.1.30";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"}
package/lib/version.js ADDED
@@ -0,0 +1,2 @@
1
+ export const version = '0.1.30';
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}