@agent-deck/backend 1.10.0 → 1.10.2

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 (97) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli-runtime.d.ts +9 -0
  3. package/dist/cli-runtime.d.ts.map +1 -1
  4. package/dist/cli-runtime.js +30 -0
  5. package/dist/cli-runtime.js.map +1 -1
  6. package/dist/execution-authority/bearer.d.ts +15 -0
  7. package/dist/execution-authority/bearer.d.ts.map +1 -0
  8. package/dist/execution-authority/bearer.js +35 -0
  9. package/dist/execution-authority/bearer.js.map +1 -0
  10. package/dist/execution-authority/index.d.ts +6 -0
  11. package/dist/execution-authority/index.d.ts.map +1 -0
  12. package/dist/execution-authority/index.js +8 -0
  13. package/dist/execution-authority/index.js.map +1 -0
  14. package/dist/execution-authority/ledger.d.ts +85 -0
  15. package/dist/execution-authority/ledger.d.ts.map +1 -0
  16. package/dist/execution-authority/ledger.js +507 -0
  17. package/dist/execution-authority/ledger.js.map +1 -0
  18. package/dist/execution-authority/store.d.ts +55 -0
  19. package/dist/execution-authority/store.d.ts.map +1 -0
  20. package/dist/execution-authority/store.js +256 -0
  21. package/dist/execution-authority/store.js.map +1 -0
  22. package/dist/execution-authority/types.d.ts +119 -0
  23. package/dist/execution-authority/types.d.ts.map +1 -0
  24. package/dist/execution-authority/types.js +9 -0
  25. package/dist/execution-authority/types.js.map +1 -0
  26. package/dist/index.js +20 -12
  27. package/dist/index.js.map +1 -1
  28. package/dist/lib/execution-authority-http.d.ts +23 -0
  29. package/dist/lib/execution-authority-http.d.ts.map +1 -0
  30. package/dist/lib/execution-authority-http.js +101 -0
  31. package/dist/lib/execution-authority-http.js.map +1 -0
  32. package/dist/lib/fatal.d.ts +28 -0
  33. package/dist/lib/fatal.d.ts.map +1 -0
  34. package/dist/lib/fatal.js +122 -0
  35. package/dist/lib/fatal.js.map +1 -0
  36. package/dist/mcp-index.js +21 -15
  37. package/dist/mcp-index.js.map +1 -1
  38. package/dist/mcp-server.d.ts +4 -3
  39. package/dist/mcp-server.d.ts.map +1 -1
  40. package/dist/mcp-server.js +30 -13
  41. package/dist/mcp-server.js.map +1 -1
  42. package/dist/mcp-session-binding.d.ts +4 -0
  43. package/dist/mcp-session-binding.d.ts.map +1 -1
  44. package/dist/mcp-session-binding.js +14 -0
  45. package/dist/mcp-session-binding.js.map +1 -1
  46. package/dist/mcp-stdio.d.ts +2 -0
  47. package/dist/mcp-stdio.d.ts.map +1 -0
  48. package/dist/mcp-stdio.js.map +1 -0
  49. package/dist/mcp-tools/register.d.ts +3 -0
  50. package/dist/mcp-tools/register.d.ts.map +1 -1
  51. package/dist/mcp-tools/register.js +20 -0
  52. package/dist/mcp-tools/register.js.map +1 -1
  53. package/dist/mcp-unassigned.d.ts +14 -0
  54. package/dist/mcp-unassigned.d.ts.map +1 -0
  55. package/dist/mcp-unassigned.js +23 -0
  56. package/dist/mcp-unassigned.js.map +1 -0
  57. package/dist/models/database.d.ts +1 -0
  58. package/dist/models/database.d.ts.map +1 -1
  59. package/dist/models/database.js +2 -1
  60. package/dist/models/database.js.map +1 -1
  61. package/dist/playbooks/playbook-parser.d.ts +8 -0
  62. package/dist/playbooks/playbook-parser.d.ts.map +1 -0
  63. package/dist/playbooks/playbook-parser.js +76 -0
  64. package/dist/playbooks/playbook-parser.js.map +1 -0
  65. package/dist/playbooks/playbook-service.d.ts +9 -0
  66. package/dist/playbooks/playbook-service.d.ts.map +1 -0
  67. package/dist/playbooks/playbook-service.js +107 -0
  68. package/dist/playbooks/playbook-service.js.map +1 -0
  69. package/dist/routes/execution-authority.d.ts +8 -0
  70. package/dist/routes/execution-authority.d.ts.map +1 -0
  71. package/dist/routes/execution-authority.js +498 -0
  72. package/dist/routes/execution-authority.js.map +1 -0
  73. package/dist/scope/bindings-sidecar.d.ts +9 -0
  74. package/dist/scope/bindings-sidecar.d.ts.map +1 -0
  75. package/dist/scope/bindings-sidecar.js +57 -0
  76. package/dist/scope/bindings-sidecar.js.map +1 -0
  77. package/dist/scope/repo-deck.d.ts +10 -0
  78. package/dist/scope/repo-deck.d.ts.map +1 -0
  79. package/dist/scope/repo-deck.js +63 -0
  80. package/dist/scope/repo-deck.js.map +1 -0
  81. package/dist/store/reindex.d.ts +18 -0
  82. package/dist/store/reindex.d.ts.map +1 -1
  83. package/dist/store/reindex.js +132 -19
  84. package/dist/store/reindex.js.map +1 -1
  85. package/dist/store/startup.d.ts.map +1 -1
  86. package/dist/store/startup.js +6 -1
  87. package/dist/store/startup.js.map +1 -1
  88. package/dist/test-local-mcp-e2e.d.ts +3 -0
  89. package/dist/test-local-mcp-e2e.d.ts.map +1 -0
  90. package/dist/test-local-mcp-e2e.js +104 -0
  91. package/dist/test-local-mcp-e2e.js.map +1 -0
  92. package/package.json +2 -2
  93. package/static-ui/favicon.png +0 -0
  94. package/dist/config/mcp-endpoint.d.ts +0 -6
  95. package/dist/config/mcp-endpoint.d.ts.map +0 -1
  96. package/dist/config/mcp-endpoint.js +0 -19
  97. package/dist/config/mcp-endpoint.js.map +0 -1
@@ -0,0 +1,507 @@
1
+ "use strict";
2
+ /**
3
+ * In-memory execution-authority ledger (NOT-85 logic engine).
4
+ * Durable SQLite wrapper: `ExecutionAuthorityStore` (NOT-86).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ExecutionAuthorityLedger = void 0;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const shared_1 = require("@agent-deck/shared");
10
+ const store_1 = require("../trusted-session/store");
11
+ function newId(kind) {
12
+ return (0, shared_1.prefixTrustedId)(kind, (0, node_crypto_1.randomUUID)());
13
+ }
14
+ function cloneAuthority(authority) {
15
+ return {
16
+ ...authority,
17
+ allowedServices: [...authority.allowedServices],
18
+ allowedTools: authority.allowedTools.map((t) => ({ ...t })),
19
+ };
20
+ }
21
+ function toolsEqual(a, b) {
22
+ if (a.length !== b.length)
23
+ return false;
24
+ const key = (t) => `${t.serviceId}\0${t.toolName}`;
25
+ const sortedA = [...a].map(key).sort();
26
+ const sortedB = [...b].map(key).sort();
27
+ return sortedA.every((v, i) => v === sortedB[i]);
28
+ }
29
+ function mintParamsMatch(existing, input) {
30
+ const storedTtlMs = Date.parse(existing.expiresAt) - Date.parse(existing.issuedAt);
31
+ return (existing.runId === input.runId &&
32
+ existing.attemptId === input.attemptId &&
33
+ existing.deckId === input.deckId &&
34
+ existing.audience === input.audience &&
35
+ storedTtlMs === input.ttlMs &&
36
+ existing.allowedServices.length === input.allowedServices.length &&
37
+ existing.allowedServices.every((s) => input.allowedServices.includes(s)) &&
38
+ toolsEqual(existing.allowedTools, input.allowedTools));
39
+ }
40
+ /**
41
+ * Deck-side authorization ledger (skeleton). Authoritative for enrollment and
42
+ * execution authority; does not model Dealer run lifecycle.
43
+ */
44
+ class ExecutionAuthorityLedger {
45
+ enrollments = new Map();
46
+ enrollmentSecretHashes = new Map();
47
+ authorities = new Map();
48
+ secretHashes = new Map();
49
+ mintIndex = new Map(); // enrollmentId\0idempotencyKey -> authorityId
50
+ audit = [];
51
+ now;
52
+ constructor(options = {}) {
53
+ this.now = options.now ?? (() => new Date());
54
+ }
55
+ exportState() {
56
+ return {
57
+ enrollments: [...this.enrollments.values()].map((e) => ({
58
+ ...e,
59
+ allowedDeckIds: [...e.allowedDeckIds],
60
+ })),
61
+ enrollmentSecretHashes: [...this.enrollmentSecretHashes.entries()].map(([enrollmentId, secretHash]) => ({ enrollmentId, secretHash })),
62
+ authorities: [...this.authorities.values()].map(cloneAuthority),
63
+ secretHashes: [...this.secretHashes.entries()].map(([authorityId, secretHash]) => ({
64
+ authorityId,
65
+ secretHash,
66
+ })),
67
+ mintIndex: [...this.mintIndex.entries()].map(([key, authorityId]) => {
68
+ const [enrollmentId, idempotencyKey] = key.split('\0');
69
+ return { enrollmentId, idempotencyKey, authorityId };
70
+ }),
71
+ audit: this.audit.map((event) => ({
72
+ ...event,
73
+ correlation: { ...event.correlation },
74
+ detail: event.detail ? { ...event.detail } : undefined,
75
+ })),
76
+ };
77
+ }
78
+ replaceState(state) {
79
+ this.enrollments.clear();
80
+ this.enrollmentSecretHashes.clear();
81
+ this.authorities.clear();
82
+ this.secretHashes.clear();
83
+ this.mintIndex.clear();
84
+ this.audit.length = 0;
85
+ for (const enrollment of state.enrollments) {
86
+ this.enrollments.set(enrollment.enrollmentId, {
87
+ ...enrollment,
88
+ allowedDeckIds: [...enrollment.allowedDeckIds],
89
+ });
90
+ }
91
+ for (const row of state.enrollmentSecretHashes) {
92
+ this.enrollmentSecretHashes.set(row.enrollmentId, row.secretHash);
93
+ }
94
+ for (const authority of state.authorities) {
95
+ this.authorities.set(authority.authorityId, cloneAuthority(authority));
96
+ }
97
+ for (const row of state.secretHashes) {
98
+ this.secretHashes.set(row.authorityId, row.secretHash);
99
+ }
100
+ for (const row of state.mintIndex) {
101
+ this.mintIndex.set(`${row.enrollmentId}\0${row.idempotencyKey}`, row.authorityId);
102
+ }
103
+ for (const event of state.audit) {
104
+ this.audit.push({
105
+ ...event,
106
+ correlation: { ...event.correlation },
107
+ detail: event.detail ? { ...event.detail } : undefined,
108
+ });
109
+ }
110
+ }
111
+ getEnrollment(enrollmentId) {
112
+ const enrollment = this.enrollments.get(enrollmentId);
113
+ if (!enrollment)
114
+ return undefined;
115
+ return { ...enrollment, allowedDeckIds: [...enrollment.allowedDeckIds] };
116
+ }
117
+ listEnrollments() {
118
+ return [...this.enrollments.values()].map((e) => ({
119
+ ...e,
120
+ allowedDeckIds: [...e.allowedDeckIds],
121
+ }));
122
+ }
123
+ verifyEnrollmentSecret(enrollmentId, secret) {
124
+ const hash = this.enrollmentSecretHashes.get(enrollmentId);
125
+ if (!hash)
126
+ return false;
127
+ return (0, store_1.verifyGrantSecret)(secret, hash);
128
+ }
129
+ verifyAuthoritySecret(authorityId, secret) {
130
+ const hash = this.secretHashes.get(authorityId);
131
+ if (!hash)
132
+ return false;
133
+ return (0, store_1.verifyGrantSecret)(secret, hash);
134
+ }
135
+ enrollCoordinator(input) {
136
+ const enrollment = {
137
+ enrollmentId: newId('enr'),
138
+ coordinatorId: input.coordinatorId,
139
+ status: 'active',
140
+ allowedDeckIds: [...input.allowedDeckIds],
141
+ createdAt: this.now().toISOString(),
142
+ revokedAt: null,
143
+ };
144
+ const enrollmentSecret = `enrs_${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}`;
145
+ this.enrollments.set(enrollment.enrollmentId, enrollment);
146
+ this.enrollmentSecretHashes.set(enrollment.enrollmentId, (0, store_1.hashGrantSecret)(enrollmentSecret));
147
+ this.pushAudit('enrollment_created', {
148
+ enrollmentId: enrollment.enrollmentId,
149
+ }, { coordinatorId: input.coordinatorId });
150
+ return {
151
+ ok: true,
152
+ data: {
153
+ enrollment: {
154
+ ...enrollment,
155
+ allowedDeckIds: [...enrollment.allowedDeckIds],
156
+ },
157
+ enrollmentSecret,
158
+ },
159
+ };
160
+ }
161
+ revokeEnrollment(enrollmentId) {
162
+ const enrollment = this.enrollments.get(enrollmentId);
163
+ if (!enrollment) {
164
+ return {
165
+ ok: false,
166
+ error_code: 'COORDINATOR_NOT_ENROLLED',
167
+ message: 'Unknown enrollment',
168
+ correlation: { enrollmentId },
169
+ };
170
+ }
171
+ if (enrollment.status === 'revoked') {
172
+ return { ok: true, data: { enrollmentId } };
173
+ }
174
+ enrollment.status = 'revoked';
175
+ enrollment.revokedAt = this.now().toISOString();
176
+ this.pushAudit('enrollment_revoked', { enrollmentId });
177
+ for (const stored of this.authorities.values()) {
178
+ if (stored.enrollmentId !== enrollmentId)
179
+ continue;
180
+ const authority = this.refreshAuthorityStatus(stored.authorityId);
181
+ if (!authority || authority.status !== 'live')
182
+ continue;
183
+ authority.status = 'revoked';
184
+ this.pushAudit('authority_revoked', {
185
+ enrollmentId,
186
+ authorityId: authority.authorityId,
187
+ runId: authority.runId,
188
+ attemptId: authority.attemptId,
189
+ deckId: authority.deckId,
190
+ }, { reason: 'enrollment_revoked' });
191
+ }
192
+ return { ok: true, data: { enrollmentId } };
193
+ }
194
+ mintAuthority(input) {
195
+ if (!(input.ttlMs > 0)) {
196
+ return {
197
+ ok: false,
198
+ error_code: 'INVALID_MINT_REQUEST',
199
+ message: 'ttlMs must be positive',
200
+ reason: 'ttl_non_positive',
201
+ correlation: { enrollmentId: input.enrollmentId },
202
+ };
203
+ }
204
+ const enrollment = this.enrollments.get(input.enrollmentId);
205
+ if (!enrollment) {
206
+ return {
207
+ ok: false,
208
+ error_code: 'COORDINATOR_NOT_ENROLLED',
209
+ message: 'Unknown enrollment',
210
+ correlation: { enrollmentId: input.enrollmentId },
211
+ };
212
+ }
213
+ if (enrollment.status !== 'active') {
214
+ return {
215
+ ok: false,
216
+ error_code: 'ENROLLMENT_REVOKED',
217
+ message: 'Enrollment is revoked',
218
+ correlation: { enrollmentId: input.enrollmentId },
219
+ };
220
+ }
221
+ if (!enrollment.allowedDeckIds.includes(input.deckId)) {
222
+ return {
223
+ ok: false,
224
+ error_code: 'RESOURCE_OUT_OF_SCOPE',
225
+ message: 'Deck not permitted for this enrollment',
226
+ reason: 'deck_not_permitted',
227
+ correlation: { enrollmentId: input.enrollmentId, deckId: input.deckId },
228
+ };
229
+ }
230
+ const mintKey = `${input.enrollmentId}\0${input.idempotencyKey}`;
231
+ const existingId = this.mintIndex.get(mintKey);
232
+ if (existingId) {
233
+ const existing = this.refreshAuthorityStatus(existingId);
234
+ if (!mintParamsMatch(existing, input)) {
235
+ return {
236
+ ok: false,
237
+ error_code: 'IDEMPOTENCY_KEY_CONFLICT',
238
+ message: 'Idempotency key reused with different mint parameters',
239
+ reason: 'params_mismatch',
240
+ correlation: {
241
+ enrollmentId: existing.enrollmentId,
242
+ authorityId: existing.authorityId,
243
+ runId: existing.runId,
244
+ attemptId: existing.attemptId,
245
+ deckId: existing.deckId,
246
+ },
247
+ };
248
+ }
249
+ if (existing.status === 'live') {
250
+ // Idempotent remint does not re-issue the secret (Dealer must retain launcher handle).
251
+ return {
252
+ ok: true,
253
+ data: {
254
+ authority: cloneAuthority(existing),
255
+ authoritySecret: null,
256
+ secretIssued: false,
257
+ },
258
+ };
259
+ }
260
+ return {
261
+ ok: false,
262
+ error_code: existing.status === 'expired' ? 'AUTHORITY_EXPIRED' : 'AUTHORITY_REVOKED',
263
+ message: `Authority already ${existing.status}`,
264
+ reason: existing.status === 'revoked' ? 'explicit_revoke' : undefined,
265
+ correlation: {
266
+ enrollmentId: existing.enrollmentId,
267
+ authorityId: existing.authorityId,
268
+ runId: existing.runId,
269
+ attemptId: existing.attemptId,
270
+ deckId: existing.deckId,
271
+ },
272
+ };
273
+ }
274
+ const issuedAt = this.now();
275
+ const authority = {
276
+ authorityId: newId('authz'),
277
+ enrollmentId: input.enrollmentId,
278
+ runId: input.runId,
279
+ attemptId: input.attemptId,
280
+ deckId: input.deckId,
281
+ audience: input.audience,
282
+ allowedServices: [...input.allowedServices],
283
+ allowedTools: input.allowedTools.map((t) => ({ ...t })),
284
+ issuedAt: issuedAt.toISOString(),
285
+ expiresAt: new Date(issuedAt.getTime() + input.ttlMs).toISOString(),
286
+ status: 'live',
287
+ idempotencyKey: input.idempotencyKey,
288
+ };
289
+ const authoritySecret = `seas_${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}`;
290
+ this.authorities.set(authority.authorityId, authority);
291
+ this.secretHashes.set(authority.authorityId, (0, store_1.hashGrantSecret)(authoritySecret));
292
+ this.mintIndex.set(mintKey, authority.authorityId);
293
+ this.pushAudit('authority_minted', {
294
+ enrollmentId: authority.enrollmentId,
295
+ authorityId: authority.authorityId,
296
+ runId: authority.runId,
297
+ attemptId: authority.attemptId,
298
+ deckId: authority.deckId,
299
+ });
300
+ return {
301
+ ok: true,
302
+ data: {
303
+ authority: cloneAuthority(authority),
304
+ authoritySecret,
305
+ secretIssued: true,
306
+ },
307
+ };
308
+ }
309
+ /**
310
+ * Non-auditing lookup for ownership / existence checks.
311
+ * Does not refresh expiry (avoids authority_expired side effects during probes).
312
+ */
313
+ peekAuthority(authorityId) {
314
+ const authority = this.authorities.get(authorityId);
315
+ return authority ? cloneAuthority(authority) : undefined;
316
+ }
317
+ inspectAuthority(authorityId) {
318
+ const authority = this.refreshAuthorityStatus(authorityId);
319
+ if (!authority) {
320
+ return {
321
+ ok: false,
322
+ error_code: 'AUTHORITY_UNKNOWN',
323
+ message: 'Unknown authority',
324
+ correlation: { authorityId },
325
+ };
326
+ }
327
+ this.pushAudit('authority_inspected', {
328
+ enrollmentId: authority.enrollmentId,
329
+ authorityId: authority.authorityId,
330
+ runId: authority.runId,
331
+ attemptId: authority.attemptId,
332
+ deckId: authority.deckId,
333
+ });
334
+ return { ok: true, data: cloneAuthority(authority) };
335
+ }
336
+ revokeAuthority(authorityId) {
337
+ const authority = this.authorities.get(authorityId);
338
+ if (!authority) {
339
+ return {
340
+ ok: false,
341
+ error_code: 'AUTHORITY_UNKNOWN',
342
+ message: 'Unknown authority',
343
+ correlation: { authorityId },
344
+ };
345
+ }
346
+ if (authority.status !== 'revoked') {
347
+ authority.status = 'revoked';
348
+ this.pushAudit('authority_revoked', {
349
+ enrollmentId: authority.enrollmentId,
350
+ authorityId: authority.authorityId,
351
+ runId: authority.runId,
352
+ attemptId: authority.attemptId,
353
+ deckId: authority.deckId,
354
+ }, { reason: 'explicit_revoke' });
355
+ }
356
+ return { ok: true, data: { authorityId } };
357
+ }
358
+ /**
359
+ * Simulate one authorized Deck tool call under execution authority.
360
+ * Never waits for human approval — returns INTERACTION_REQUIRED immediately.
361
+ */
362
+ invokeAuthorizedCall(input) {
363
+ const authority = this.refreshAuthorityStatus(input.authorityId);
364
+ const correlation = {
365
+ authorityId: input.authorityId,
366
+ };
367
+ if (!authority) {
368
+ return {
369
+ ok: false,
370
+ error_code: 'AUTHORITY_UNKNOWN',
371
+ message: 'Unknown authority',
372
+ correlation,
373
+ };
374
+ }
375
+ correlation.enrollmentId = authority.enrollmentId;
376
+ correlation.runId = authority.runId;
377
+ correlation.attemptId = authority.attemptId;
378
+ correlation.deckId = authority.deckId;
379
+ const expectedHash = this.secretHashes.get(authority.authorityId);
380
+ if (!expectedHash || !(0, store_1.verifyGrantSecret)(input.authoritySecret, expectedHash)) {
381
+ this.pushAudit('call_denied', correlation, { reason: 'bad_secret' });
382
+ return {
383
+ ok: false,
384
+ error_code: 'AUTHORITY_SECRET_INVALID',
385
+ message: 'Invalid authority secret',
386
+ correlation,
387
+ };
388
+ }
389
+ if (input.audience !== authority.audience) {
390
+ this.pushAudit('call_denied', correlation, {
391
+ reason: 'audience_mismatch',
392
+ expected: authority.audience,
393
+ actual: input.audience,
394
+ });
395
+ return {
396
+ ok: false,
397
+ error_code: 'AUDIENCE_MISMATCH',
398
+ message: 'Caller audience does not match authority audience',
399
+ correlation,
400
+ };
401
+ }
402
+ if (authority.status === 'expired') {
403
+ this.pushAudit('call_denied', correlation, { reason: 'expired' });
404
+ return {
405
+ ok: false,
406
+ error_code: 'AUTHORITY_EXPIRED',
407
+ message: 'Authority expired',
408
+ correlation,
409
+ };
410
+ }
411
+ if (authority.status === 'revoked') {
412
+ this.pushAudit('call_denied', correlation, { reason: 'revoked' });
413
+ return {
414
+ ok: false,
415
+ error_code: 'AUTHORITY_REVOKED',
416
+ message: 'Authority revoked',
417
+ reason: 'explicit_revoke',
418
+ correlation,
419
+ };
420
+ }
421
+ if (input.requiresInteraction) {
422
+ const requestId = newId('req');
423
+ correlation.requestId = requestId;
424
+ this.pushAudit('call_denied', correlation, { reason: 'interaction_required' });
425
+ return {
426
+ ok: false,
427
+ error_code: 'INTERACTION_REQUIRED',
428
+ message: 'Control-plane decision required; do not hold the worker',
429
+ correlation,
430
+ };
431
+ }
432
+ if (!this.toolAllowed(authority, input.serviceId, input.toolName)) {
433
+ this.pushAudit('call_denied', correlation, {
434
+ reason: 'tool_not_in_snapshot',
435
+ serviceId: input.serviceId,
436
+ toolName: input.toolName,
437
+ });
438
+ return {
439
+ ok: false,
440
+ error_code: 'RESOURCE_OUT_OF_SCOPE',
441
+ message: 'Tool not in authority snapshot',
442
+ reason: 'tool_not_in_snapshot',
443
+ correlation,
444
+ };
445
+ }
446
+ this.pushAudit('call_allowed', correlation, {
447
+ serviceId: input.serviceId,
448
+ toolName: input.toolName,
449
+ });
450
+ return {
451
+ ok: true,
452
+ data: {
453
+ serviceId: input.serviceId,
454
+ toolName: input.toolName,
455
+ result: 'ok',
456
+ },
457
+ };
458
+ }
459
+ listAuditEvents(filter = {}) {
460
+ return this.audit.filter((event) => {
461
+ const c = event.correlation;
462
+ if (filter.runId && c.runId !== filter.runId)
463
+ return false;
464
+ if (filter.attemptId && c.attemptId !== filter.attemptId)
465
+ return false;
466
+ if (filter.authorityId && c.authorityId !== filter.authorityId)
467
+ return false;
468
+ if (filter.enrollmentId && c.enrollmentId !== filter.enrollmentId)
469
+ return false;
470
+ if (filter.requestId && c.requestId !== filter.requestId)
471
+ return false;
472
+ return true;
473
+ });
474
+ }
475
+ toolAllowed(authority, serviceId, toolName) {
476
+ if (!authority.allowedServices.includes(serviceId))
477
+ return false;
478
+ return authority.allowedTools.some((t) => t.serviceId === serviceId && t.toolName === toolName);
479
+ }
480
+ refreshAuthorityStatus(authorityId) {
481
+ const authority = this.authorities.get(authorityId);
482
+ if (!authority)
483
+ return undefined;
484
+ if (authority.status === 'live' && Date.parse(authority.expiresAt) <= this.now().getTime()) {
485
+ authority.status = 'expired';
486
+ this.pushAudit('authority_expired', {
487
+ enrollmentId: authority.enrollmentId,
488
+ authorityId: authority.authorityId,
489
+ runId: authority.runId,
490
+ attemptId: authority.attemptId,
491
+ deckId: authority.deckId,
492
+ });
493
+ }
494
+ return authority;
495
+ }
496
+ pushAudit(kind, correlation, detail) {
497
+ this.audit.push({
498
+ eventId: newId('evt'),
499
+ at: this.now().toISOString(),
500
+ kind,
501
+ correlation: { ...correlation },
502
+ detail,
503
+ });
504
+ }
505
+ }
506
+ exports.ExecutionAuthorityLedger = ExecutionAuthorityLedger;
507
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/execution-authority/ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Durable SQLite-backed execution-authority store (NOT-86).
3
+ * Logic lives in ExecutionAuthorityLedger; this module hydrates/persists snapshots.
4
+ */
5
+ import type Database from 'better-sqlite3';
6
+ import type { AuthorizedCallInput, ContractResult, CoordinatorEnrollment, EnrollCoordinatorResult, ExecutionAuthority, MintAuthorityInput, MintAuthorityResult, AuditEvent } from './types';
7
+ export type ExecutionAuthorityStoreOptions = {
8
+ now?: () => Date;
9
+ };
10
+ export declare class ExecutionAuthorityStore {
11
+ private readonly db;
12
+ private readonly ledger;
13
+ constructor(db: Database.Database, options?: ExecutionAuthorityStoreOptions);
14
+ /** Test helper: replace clock without losing durable state. */
15
+ withNow(now: () => Date): ExecutionAuthorityStore;
16
+ private ensureTables;
17
+ private hydrate;
18
+ private persist;
19
+ private runMutating;
20
+ enrollCoordinator(input: {
21
+ coordinatorId: string;
22
+ allowedDeckIds: string[];
23
+ }): ContractResult<EnrollCoordinatorResult>;
24
+ revokeEnrollment(enrollmentId: string): ContractResult<{
25
+ enrollmentId: string;
26
+ }>;
27
+ mintAuthority(input: MintAuthorityInput): ContractResult<MintAuthorityResult>;
28
+ /** Non-auditing existence/ownership lookup (see ledger.peekAuthority). */
29
+ peekAuthority(authorityId: string): ExecutionAuthority | undefined;
30
+ inspectAuthority(authorityId: string): ContractResult<ExecutionAuthority>;
31
+ revokeAuthority(authorityId: string): ContractResult<{
32
+ authorityId: string;
33
+ }>;
34
+ invokeAuthorizedCall(input: AuthorizedCallInput): ContractResult<{
35
+ serviceId: string;
36
+ toolName: string;
37
+ result: string;
38
+ }>;
39
+ listAuditEvents(filter?: {
40
+ runId?: string;
41
+ attemptId?: string;
42
+ authorityId?: string;
43
+ enrollmentId?: string;
44
+ requestId?: string;
45
+ }): AuditEvent[];
46
+ getEnrollment(enrollmentId: string): CoordinatorEnrollment | undefined;
47
+ listEnrollments(): CoordinatorEnrollment[];
48
+ verifyEnrollmentSecret(enrollmentId: string, secret: string): boolean;
49
+ verifyAuthoritySecret(authorityId: string, secret: string): boolean;
50
+ /**
51
+ * Validate authority id+secret and return current authority (may transition to expired).
52
+ */
53
+ authenticateAuthority(authorityId: string, authoritySecret: string): ContractResult<ExecutionAuthority>;
54
+ }
55
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/execution-authority/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,8BAA8B,GAAG;IAC3C,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,qBAAa,uBAAuB;IAIhC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAHrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAG/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACtC,OAAO,GAAE,8BAAmC;IAO9C,+DAA+D;IAC/D,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,uBAAuB;IAKjD,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,OAAO;IAiGf,OAAO,CAAC,OAAO;IA+Ef,OAAO,CAAC,WAAW;IAMnB,iBAAiB,CAAC,KAAK,EAAE;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,GAAG,cAAc,CAAC,uBAAuB,CAAC;IAI3C,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAMhF,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,CAAC,mBAAmB,CAAC;IAI7E,0EAA0E;IAC1E,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIlE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,kBAAkB,CAAC;IAIzE,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAM7E,oBAAoB,CAClB,KAAK,EAAE,mBAAmB,GACzB,cAAc,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ1E,eAAe,CAAC,MAAM,GAAE;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,UAAU,EAAE;IAIrB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAItE,eAAe,IAAI,qBAAqB,EAAE;IAI1C,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIrE,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAInE;;OAEG;IACH,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,cAAc,CAAC,kBAAkB,CAAC;CA6CtC"}