@devflow-tools/database 0.16.27 → 0.16.29
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/CHANGELOG.md +19 -0
- package/__tests__/database.retrieval-ledger.test.ts +53 -0
- package/dist/database.d.ts +45 -0
- package/dist/database.js +149 -9
- package/dist/index.d.ts +2 -1
- package/dist/retrieval-ledger.d.ts +24 -0
- package/dist/retrieval-ledger.js +2 -0
- package/dist/work-queue.d.ts +1 -1
- package/package.json +2 -2
- package/src/database.ts +200 -8
- package/src/index.ts +6 -0
- package/src/retrieval-ledger.ts +28 -0
- package/src/work-queue.ts +1 -0
- package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.16.29](https://github.com/shilongfeicool/dev-flow/compare/v0.16.28...v0.16.29) (2026-07-29)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **retrieval:** enforce actions and track verified outcomes ([5e2756a](https://github.com/shilongfeicool/dev-flow/commit/5e2756ababaa246cd78ea7bc6877f59e5972e5db))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [0.16.28](https://github.com/shilongfeicool/dev-flow/compare/v0.16.27...v0.16.28) (2026-07-29)
|
|
18
|
+
|
|
19
|
+
**Note:** Version bump only for package @devflow-tools/database
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
## [0.16.27](https://github.com/shilongfeicool/dev-flow/compare/v0.16.26...v0.16.27) (2026-07-29)
|
|
7
26
|
|
|
8
27
|
**Note:** Version bump only for package @devflow-tools/database
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { DevFlowDatabase, type RetrievalLedgerEventRecord } from '../src/index.js';
|
|
6
|
+
|
|
7
|
+
describe('retrieval ledger', () => {
|
|
8
|
+
const directories: string[] = [];
|
|
9
|
+
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
for (const directory of directories.splice(0)) rmSync(directory, { recursive: true, force: true });
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('is append-only and idempotent per immutable event identity', () => {
|
|
15
|
+
const database = createDatabase();
|
|
16
|
+
const selected = event({ id: 'selected-a', stage: 'selected' });
|
|
17
|
+
expect(database.appendRetrievalLedgerEvent(selected)).toBe(true);
|
|
18
|
+
expect(database.appendRetrievalLedgerEvent({ ...selected, reason: 'changed' })).toBe(false);
|
|
19
|
+
expect(database.appendRetrievalLedgerEvent(event({ id: 'exposed-a', stage: 'exposed' }))).toBe(true);
|
|
20
|
+
expect(database.listRetrievalLedgerEvents({ projectRoot: '/project' })).toEqual(expect.arrayContaining([
|
|
21
|
+
expect.objectContaining({ id: 'selected-a', stage: 'selected', reason: undefined }),
|
|
22
|
+
expect.objectContaining({ id: 'exposed-a', stage: 'exposed' }),
|
|
23
|
+
]));
|
|
24
|
+
database.close();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('rejects score loss between returned evidence and persisted selected evidence', () => {
|
|
28
|
+
const database = createDatabase();
|
|
29
|
+
expect(() => database.appendRetrievalLedgerEvent(event({
|
|
30
|
+
id: 'score-loss',
|
|
31
|
+
stage: 'selected',
|
|
32
|
+
finalScore: 0,
|
|
33
|
+
payload: { returnedFinalScore: 0.81 },
|
|
34
|
+
}))).toThrow('RETRIEVAL_LEDGER_INVALID_FINAL_SCORE');
|
|
35
|
+
database.close();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
function createDatabase(): DevFlowDatabase {
|
|
39
|
+
const directory = mkdtempSync(join(tmpdir(), 'devflow-retrieval-ledger-'));
|
|
40
|
+
directories.push(directory);
|
|
41
|
+
return new DevFlowDatabase(join(directory, 'devflow.db'));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function event(overrides: Partial<RetrievalLedgerEventRecord>): RetrievalLedgerEventRecord {
|
|
45
|
+
return {
|
|
46
|
+
id: 'event-a', projectRoot: '/project', sessionId: 'session-a', executionId: 'execution-a',
|
|
47
|
+
requestId: 'request-a', contextReceipt: 'context-a', sourceType: 'memory', sourceId: 'memory-a',
|
|
48
|
+
stage: 'candidate', rank: 1, rawScore: 0.7, normalizedScore: 0.75, finalScore: 0.8,
|
|
49
|
+
applicability: ['formatting'], toolEvidence: [], payload: { returnedFinalScore: 0.8 }, createdAt: 100,
|
|
50
|
+
...overrides,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
});
|
package/dist/database.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type FailHostActionInput, type HostActionRecord, type ReportHostActionI
|
|
|
4
4
|
import { type AppendRetrievalCycleInput, type CreateRetrievalSessionInput, type RetrievalCycleRecord, type RetrievalSessionRecord, type RetrievalSessionState } from './retrieval-sessions';
|
|
5
5
|
import { type AddLearningCandidateEvidenceInput, type LearningCandidateEvidenceRecord, type LearningCandidateRecord, type LearningCandidateState, type LearningCandidateVersionRecord, type TransitionLearningCandidateInput, type UpsertLearningCandidateInput } from './learning-candidates';
|
|
6
6
|
import { type CreateWorkflowWorkerInput, type EnqueueWorkflowMergeInput, type TransitionWorkflowWorkerInput, type WorkflowMergeRecord, type WorkflowMergeState, type WorkflowWorkerEventRecord, type WorkflowWorkerRecord } from './workflow-workers';
|
|
7
|
+
import type { RetrievalLedgerEventRecord } from './retrieval-ledger';
|
|
7
8
|
export interface BenchmarkReportRecord {
|
|
8
9
|
runId: string;
|
|
9
10
|
suiteId: string;
|
|
@@ -82,6 +83,33 @@ export interface ContextReceiptRecord {
|
|
|
82
83
|
selectedFiles?: string[];
|
|
83
84
|
memoryIds?: string[];
|
|
84
85
|
canonicalNextAction?: string;
|
|
86
|
+
canonicalAction?: {
|
|
87
|
+
tool: string;
|
|
88
|
+
input: Record<string, unknown>;
|
|
89
|
+
status: 'required' | 'recommended' | 'unsupported' | 'degraded';
|
|
90
|
+
required: boolean;
|
|
91
|
+
reason?: string;
|
|
92
|
+
binding: Record<string, unknown> & {
|
|
93
|
+
requiredContextReceipt: string;
|
|
94
|
+
};
|
|
95
|
+
verificationPlan: Array<Record<string, unknown>>;
|
|
96
|
+
};
|
|
97
|
+
actionAttempts?: Array<{
|
|
98
|
+
id: string;
|
|
99
|
+
tool: string;
|
|
100
|
+
status: 'succeeded' | 'failed' | 'timeout' | 'unavailable';
|
|
101
|
+
attemptedAt: number;
|
|
102
|
+
toolUseId?: string;
|
|
103
|
+
reason?: string;
|
|
104
|
+
}>;
|
|
105
|
+
actionSatisfiedAt?: number;
|
|
106
|
+
actionDegradation?: {
|
|
107
|
+
missedTool: string;
|
|
108
|
+
failedAttemptCount: number;
|
|
109
|
+
reason: string;
|
|
110
|
+
authorizedByContextReceipt: string;
|
|
111
|
+
authorizedAt: number;
|
|
112
|
+
};
|
|
85
113
|
requestId?: string;
|
|
86
114
|
}
|
|
87
115
|
export interface ContextSelectionEventRecord {
|
|
@@ -96,6 +124,14 @@ export interface ContextSelectionEventRecord {
|
|
|
96
124
|
toolUseId?: string;
|
|
97
125
|
selectedAt: number;
|
|
98
126
|
}
|
|
127
|
+
export interface PolicyVerificationBaselineRecord {
|
|
128
|
+
projectRoot: string;
|
|
129
|
+
kind: string;
|
|
130
|
+
commandHash: string;
|
|
131
|
+
diagnosticHashes: string[];
|
|
132
|
+
sourceRevision?: string;
|
|
133
|
+
updatedAt: number;
|
|
134
|
+
}
|
|
99
135
|
export interface MemoryDistillCheckpointRecord {
|
|
100
136
|
id: string;
|
|
101
137
|
projectRoot: string;
|
|
@@ -383,6 +419,13 @@ export declare class DevFlowDatabase {
|
|
|
383
419
|
getContextReceipt(projectRoot: string, sessionId: string, executionId: string): ContextReceiptRecord | null;
|
|
384
420
|
getActiveContextReceipt(projectRoot: string, sessionId: string, executionId?: string, now?: number): ContextReceiptRecord | null;
|
|
385
421
|
recordContextSelectionEvent(event: ContextSelectionEventRecord): boolean;
|
|
422
|
+
appendRetrievalLedgerEvent(event: RetrievalLedgerEventRecord): boolean;
|
|
423
|
+
listRetrievalLedgerEvents(options: {
|
|
424
|
+
projectRoot: string;
|
|
425
|
+
sessionId?: string;
|
|
426
|
+
executionId?: string;
|
|
427
|
+
requestId?: string;
|
|
428
|
+
}): RetrievalLedgerEventRecord[];
|
|
386
429
|
listContextSelectionEvents(options: {
|
|
387
430
|
projectRoot: string;
|
|
388
431
|
sessionId?: string;
|
|
@@ -390,6 +433,8 @@ export declare class DevFlowDatabase {
|
|
|
390
433
|
requestId?: string;
|
|
391
434
|
}): ContextSelectionEventRecord[];
|
|
392
435
|
deleteContextReceipt(projectRoot: string, sessionId: string, executionId?: string): number;
|
|
436
|
+
getPolicyVerificationBaseline(projectRoot: string, kind: string, commandHash: string): PolicyVerificationBaselineRecord | null;
|
|
437
|
+
upsertPolicyVerificationBaseline(record: PolicyVerificationBaselineRecord): void;
|
|
393
438
|
purgeExpiredContextReceipts(now?: number): number;
|
|
394
439
|
beginMemoryTurn(input: Omit<MemoryTurnRecord, 'status' | 'memoryIds'>): MemoryTurnRecord;
|
|
395
440
|
upsertSessionObligation(record: SessionObligationRecord): SessionObligationRecord;
|
package/dist/database.js
CHANGED
|
@@ -289,6 +289,10 @@ class DevFlowDatabase {
|
|
|
289
289
|
selected_files TEXT NOT NULL DEFAULT '[]',
|
|
290
290
|
memory_ids TEXT NOT NULL DEFAULT '[]',
|
|
291
291
|
canonical_next_action TEXT,
|
|
292
|
+
canonical_action_json TEXT,
|
|
293
|
+
action_attempts TEXT NOT NULL DEFAULT '[]',
|
|
294
|
+
action_satisfied_at INTEGER,
|
|
295
|
+
action_degradation_json TEXT,
|
|
292
296
|
request_id TEXT,
|
|
293
297
|
PRIMARY KEY (project_root, session_id, execution_id)
|
|
294
298
|
);
|
|
@@ -312,6 +316,29 @@ class DevFlowDatabase {
|
|
|
312
316
|
CREATE INDEX IF NOT EXISTS idx_context_selection_identity
|
|
313
317
|
ON devflow_context_selection_events(project_root, session_id, execution_id, request_id);
|
|
314
318
|
|
|
319
|
+
CREATE TABLE IF NOT EXISTS devflow_retrieval_ledger (
|
|
320
|
+
id TEXT PRIMARY KEY,
|
|
321
|
+
project_root TEXT NOT NULL, session_id TEXT NOT NULL, execution_id TEXT, turn_id TEXT,
|
|
322
|
+
request_id TEXT NOT NULL, context_receipt TEXT NOT NULL, source_type TEXT NOT NULL,
|
|
323
|
+
source_id TEXT NOT NULL, stage TEXT NOT NULL, rank INTEGER, raw_score REAL,
|
|
324
|
+
normalized_score REAL, final_score REAL, applicability TEXT NOT NULL DEFAULT '[]',
|
|
325
|
+
reason TEXT, tool_evidence TEXT NOT NULL DEFAULT '[]', verification_receipt TEXT,
|
|
326
|
+
payload TEXT NOT NULL DEFAULT '{}', created_at INTEGER NOT NULL
|
|
327
|
+
);
|
|
328
|
+
CREATE INDEX IF NOT EXISTS idx_retrieval_ledger_identity ON devflow_retrieval_ledger(
|
|
329
|
+
project_root, session_id, execution_id, request_id, context_receipt, source_type, source_id, created_at
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
CREATE TABLE IF NOT EXISTS devflow_policy_verification_baselines (
|
|
333
|
+
project_root TEXT NOT NULL,
|
|
334
|
+
kind TEXT NOT NULL,
|
|
335
|
+
command_hash TEXT NOT NULL,
|
|
336
|
+
diagnostic_hashes TEXT NOT NULL DEFAULT '[]',
|
|
337
|
+
source_revision TEXT,
|
|
338
|
+
updated_at INTEGER NOT NULL,
|
|
339
|
+
PRIMARY KEY (project_root, kind, command_hash)
|
|
340
|
+
);
|
|
341
|
+
|
|
315
342
|
CREATE TABLE IF NOT EXISTS devflow_retrieval_sessions (
|
|
316
343
|
id TEXT PRIMARY KEY,
|
|
317
344
|
request_id TEXT NOT NULL UNIQUE,
|
|
@@ -785,6 +812,22 @@ class DevFlowDatabase {
|
|
|
785
812
|
this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN canonical_next_action TEXT');
|
|
786
813
|
}
|
|
787
814
|
catch { }
|
|
815
|
+
try {
|
|
816
|
+
this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN canonical_action_json TEXT');
|
|
817
|
+
}
|
|
818
|
+
catch { }
|
|
819
|
+
try {
|
|
820
|
+
this.db.exec("ALTER TABLE devflow_context_receipts ADD COLUMN action_attempts TEXT NOT NULL DEFAULT '[]'");
|
|
821
|
+
}
|
|
822
|
+
catch { }
|
|
823
|
+
try {
|
|
824
|
+
this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN action_satisfied_at INTEGER');
|
|
825
|
+
}
|
|
826
|
+
catch { }
|
|
827
|
+
try {
|
|
828
|
+
this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN action_degradation_json TEXT');
|
|
829
|
+
}
|
|
830
|
+
catch { }
|
|
788
831
|
try {
|
|
789
832
|
this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN request_id TEXT');
|
|
790
833
|
}
|
|
@@ -1475,12 +1518,20 @@ class DevFlowDatabase {
|
|
|
1475
1518
|
const fallbackReasons = [...new Set([
|
|
1476
1519
|
...directFallbacks.map(() => 'direct_tool_during_context'),
|
|
1477
1520
|
...hookFallbacks.map(fallback => `daemon_${fallback.reason}`),
|
|
1521
|
+
...(execution?.fallbackReasons ?? []),
|
|
1478
1522
|
])];
|
|
1479
1523
|
const eventReceiptIds = collectCanonicalReceiptIds(events.map(event => event.output));
|
|
1480
1524
|
const existingMetadata = execution?.metadata && typeof execution.metadata === 'object'
|
|
1481
1525
|
? execution.metadata
|
|
1482
1526
|
: {};
|
|
1483
1527
|
const mergedMetadata = mergeExecutionMetadata(existingMetadata, metadata ?? {});
|
|
1528
|
+
const requiredActionDegradations = Array.isArray(mergedMetadata.requiredActionDegradations)
|
|
1529
|
+
? mergedMetadata.requiredActionDegradations
|
|
1530
|
+
: [];
|
|
1531
|
+
const degradedRequiredTools = requiredActionDegradations
|
|
1532
|
+
.map(item => item.missedTool)
|
|
1533
|
+
.filter((tool) => typeof tool === 'string');
|
|
1534
|
+
const requiredActionFailureCount = requiredActionDegradations.reduce((count, item) => (Math.max(count, typeof item.failedAttemptCount === 'number' ? item.failedAttemptCount : 0)), 0);
|
|
1484
1535
|
const suppliedMemoryReceiptIds = [existingMetadata.memoryReceiptIds, metadata?.memoryReceiptIds]
|
|
1485
1536
|
.flatMap(value => Array.isArray(value) ? value : [])
|
|
1486
1537
|
.filter((id) => typeof id === 'string');
|
|
@@ -1506,8 +1557,8 @@ class DevFlowDatabase {
|
|
|
1506
1557
|
? Math.max(0, finishedAt - execution.startedAt)
|
|
1507
1558
|
: row?.first_at != null && row?.last_at != null ? row.last_at - row.first_at : 0,
|
|
1508
1559
|
mcpComplianceRate: obligation.rate,
|
|
1509
|
-
missedMcpTools: obligation.missedTools,
|
|
1510
|
-
failedToolCalls: failures.length,
|
|
1560
|
+
missedMcpTools: [...new Set([...obligation.missedTools, ...degradedRequiredTools])],
|
|
1561
|
+
failedToolCalls: Math.max(failures.length, requiredActionFailureCount),
|
|
1511
1562
|
blockedToolCalls: blocked.length,
|
|
1512
1563
|
fallbackCount: directFallbacks.length + hookFallbacks.length,
|
|
1513
1564
|
fallbackReasons,
|
|
@@ -1515,8 +1566,8 @@ class DevFlowDatabase {
|
|
|
1515
1566
|
...mergedMetadata,
|
|
1516
1567
|
applicableObligations: obligation.applicable,
|
|
1517
1568
|
satisfiedObligations: obligation.satisfied,
|
|
1518
|
-
missedTools: obligation.missedTools,
|
|
1519
|
-
actualFailureCount: failures.length,
|
|
1569
|
+
missedTools: [...new Set([...obligation.missedTools, ...degradedRequiredTools])],
|
|
1570
|
+
actualFailureCount: Math.max(failures.length, requiredActionFailureCount),
|
|
1520
1571
|
blockedCount: blocked.length,
|
|
1521
1572
|
fallbackCount: directFallbacks.length + hookFallbacks.length,
|
|
1522
1573
|
fallbackReasons,
|
|
@@ -2803,8 +2854,9 @@ class DevFlowDatabase {
|
|
|
2803
2854
|
this.db.prepare(`
|
|
2804
2855
|
INSERT INTO devflow_context_receipts
|
|
2805
2856
|
(project_root, session_id, execution_id, context_hash, issued_at, expires_at,
|
|
2806
|
-
selected_files, memory_ids, canonical_next_action,
|
|
2807
|
-
|
|
2857
|
+
selected_files, memory_ids, canonical_next_action, canonical_action_json,
|
|
2858
|
+
action_attempts, action_satisfied_at, action_degradation_json, request_id)
|
|
2859
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
2808
2860
|
ON CONFLICT(project_root, session_id, execution_id) DO UPDATE SET
|
|
2809
2861
|
context_hash = excluded.context_hash,
|
|
2810
2862
|
issued_at = excluded.issued_at,
|
|
@@ -2812,13 +2864,18 @@ class DevFlowDatabase {
|
|
|
2812
2864
|
selected_files = excluded.selected_files,
|
|
2813
2865
|
memory_ids = excluded.memory_ids,
|
|
2814
2866
|
canonical_next_action = excluded.canonical_next_action,
|
|
2867
|
+
canonical_action_json = excluded.canonical_action_json,
|
|
2868
|
+
action_attempts = excluded.action_attempts,
|
|
2869
|
+
action_satisfied_at = excluded.action_satisfied_at,
|
|
2870
|
+
action_degradation_json = excluded.action_degradation_json,
|
|
2815
2871
|
request_id = excluded.request_id
|
|
2816
|
-
`).run(receipt.projectRoot, receipt.sessionId, receipt.executionId, receipt.contextHash, receipt.issuedAt, receipt.expiresAt, JSON.stringify(receipt.selectedFiles ?? []), JSON.stringify(receipt.memoryIds ?? []), receipt.canonicalNextAction ?? null, receipt.requestId ?? null);
|
|
2872
|
+
`).run(receipt.projectRoot, receipt.sessionId, receipt.executionId, receipt.contextHash, receipt.issuedAt, receipt.expiresAt, JSON.stringify(receipt.selectedFiles ?? []), JSON.stringify(receipt.memoryIds ?? []), receipt.canonicalNextAction ?? null, receipt.canonicalAction ? JSON.stringify(receipt.canonicalAction) : null, JSON.stringify(receipt.actionAttempts ?? []), receipt.actionSatisfiedAt ?? null, receipt.actionDegradation ? JSON.stringify(receipt.actionDegradation) : null, receipt.requestId ?? null);
|
|
2817
2873
|
}
|
|
2818
2874
|
getContextReceipt(projectRoot, sessionId, executionId) {
|
|
2819
2875
|
const row = this.db.prepare(`
|
|
2820
2876
|
SELECT project_root, session_id, execution_id, context_hash, issued_at, expires_at,
|
|
2821
|
-
selected_files, memory_ids, canonical_next_action,
|
|
2877
|
+
selected_files, memory_ids, canonical_next_action, canonical_action_json,
|
|
2878
|
+
action_attempts, action_satisfied_at, action_degradation_json, request_id
|
|
2822
2879
|
FROM devflow_context_receipts
|
|
2823
2880
|
WHERE project_root = ? AND session_id = ? AND execution_id = ?
|
|
2824
2881
|
`).get(projectRoot, sessionId, executionId);
|
|
@@ -2832,6 +2889,10 @@ class DevFlowDatabase {
|
|
|
2832
2889
|
selectedFiles: parseJsonStringArray(row.selected_files),
|
|
2833
2890
|
memoryIds: parseJsonStringArray(row.memory_ids),
|
|
2834
2891
|
canonicalNextAction: row.canonical_next_action ?? undefined,
|
|
2892
|
+
canonicalAction: parseJsonObject(row.canonical_action_json),
|
|
2893
|
+
actionAttempts: parseJsonArray(row.action_attempts),
|
|
2894
|
+
actionSatisfiedAt: row.action_satisfied_at ?? undefined,
|
|
2895
|
+
actionDegradation: parseJsonObject(row.action_degradation_json),
|
|
2835
2896
|
requestId: row.request_id ?? undefined,
|
|
2836
2897
|
} : null;
|
|
2837
2898
|
}
|
|
@@ -2842,7 +2903,8 @@ class DevFlowDatabase {
|
|
|
2842
2903
|
: [projectRoot, sessionId, now];
|
|
2843
2904
|
const row = this.db.prepare(`
|
|
2844
2905
|
SELECT project_root, session_id, execution_id, context_hash, issued_at, expires_at,
|
|
2845
|
-
selected_files, memory_ids, canonical_next_action,
|
|
2906
|
+
selected_files, memory_ids, canonical_next_action, canonical_action_json,
|
|
2907
|
+
action_attempts, action_satisfied_at, action_degradation_json, request_id
|
|
2846
2908
|
FROM devflow_context_receipts
|
|
2847
2909
|
WHERE project_root = ? AND session_id = ? ${executionClause} AND expires_at > ?
|
|
2848
2910
|
ORDER BY issued_at DESC
|
|
@@ -2858,6 +2920,10 @@ class DevFlowDatabase {
|
|
|
2858
2920
|
selectedFiles: parseJsonStringArray(row.selected_files),
|
|
2859
2921
|
memoryIds: parseJsonStringArray(row.memory_ids),
|
|
2860
2922
|
canonicalNextAction: row.canonical_next_action ?? undefined,
|
|
2923
|
+
canonicalAction: parseJsonObject(row.canonical_action_json),
|
|
2924
|
+
actionAttempts: parseJsonArray(row.action_attempts),
|
|
2925
|
+
actionSatisfiedAt: row.action_satisfied_at ?? undefined,
|
|
2926
|
+
actionDegradation: parseJsonObject(row.action_degradation_json),
|
|
2861
2927
|
requestId: row.request_id ?? undefined,
|
|
2862
2928
|
} : null;
|
|
2863
2929
|
}
|
|
@@ -2869,6 +2935,47 @@ class DevFlowDatabase {
|
|
|
2869
2935
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
2870
2936
|
`).run(event.id, event.projectRoot, event.sessionId, event.executionId, event.requestId ?? null, event.selectionType, event.candidateId, event.toolName, event.toolUseId ?? null, event.selectedAt).changes > 0;
|
|
2871
2937
|
}
|
|
2938
|
+
appendRetrievalLedgerEvent(event) {
|
|
2939
|
+
if ((event.stage === 'selected' || event.stage === 'exposed')
|
|
2940
|
+
&& typeof event.payload.returnedFinalScore === 'number'
|
|
2941
|
+
&& event.payload.returnedFinalScore > 0
|
|
2942
|
+
&& event.finalScore === 0) {
|
|
2943
|
+
throw new Error(`RETRIEVAL_LEDGER_INVALID_FINAL_SCORE:${event.sourceType}:${event.sourceId}`);
|
|
2944
|
+
}
|
|
2945
|
+
return this.db.prepare(`
|
|
2946
|
+
INSERT OR IGNORE INTO devflow_retrieval_ledger (
|
|
2947
|
+
id, project_root, session_id, execution_id, turn_id, request_id, context_receipt,
|
|
2948
|
+
source_type, source_id, stage, rank, raw_score, normalized_score, final_score,
|
|
2949
|
+
applicability, reason, tool_evidence, verification_receipt, payload, created_at
|
|
2950
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
2951
|
+
`).run(event.id, event.projectRoot, event.sessionId, event.executionId ?? null, event.turnId ?? null, event.requestId, event.contextReceipt, event.sourceType, event.sourceId, event.stage, event.rank ?? null, event.rawScore ?? null, event.normalizedScore ?? null, event.finalScore ?? null, JSON.stringify(event.applicability), event.reason ?? null, JSON.stringify(event.toolEvidence), event.verificationReceipt ?? null, JSON.stringify(event.payload), event.createdAt).changes > 0;
|
|
2952
|
+
}
|
|
2953
|
+
listRetrievalLedgerEvents(options) {
|
|
2954
|
+
const predicates = ['project_root = ?'];
|
|
2955
|
+
const params = [options.projectRoot];
|
|
2956
|
+
for (const [column, value] of [
|
|
2957
|
+
['session_id', options.sessionId], ['execution_id', options.executionId], ['request_id', options.requestId],
|
|
2958
|
+
]) {
|
|
2959
|
+
if (value) {
|
|
2960
|
+
predicates.push(`${column} = ?`);
|
|
2961
|
+
params.push(value);
|
|
2962
|
+
}
|
|
2963
|
+
}
|
|
2964
|
+
return this.db.prepare(`SELECT * FROM devflow_retrieval_ledger
|
|
2965
|
+
WHERE ${predicates.join(' AND ')} ORDER BY created_at ASC, id ASC`).all(...params)
|
|
2966
|
+
.map(row => ({
|
|
2967
|
+
id: row.id, projectRoot: row.project_root, sessionId: row.session_id,
|
|
2968
|
+
executionId: row.execution_id ?? undefined, turnId: row.turn_id ?? undefined,
|
|
2969
|
+
requestId: row.request_id, contextReceipt: row.context_receipt,
|
|
2970
|
+
sourceType: row.source_type, sourceId: row.source_id, stage: row.stage,
|
|
2971
|
+
rank: row.rank ?? undefined, rawScore: row.raw_score ?? undefined,
|
|
2972
|
+
normalizedScore: row.normalized_score ?? undefined, finalScore: row.final_score ?? undefined,
|
|
2973
|
+
applicability: parseJsonStringArray(row.applicability), reason: row.reason ?? undefined,
|
|
2974
|
+
toolEvidence: parseJsonStringArray(row.tool_evidence),
|
|
2975
|
+
verificationReceipt: row.verification_receipt ?? undefined,
|
|
2976
|
+
payload: parseJsonObject(row.payload) ?? {}, createdAt: row.created_at,
|
|
2977
|
+
}));
|
|
2978
|
+
}
|
|
2872
2979
|
listContextSelectionEvents(options) {
|
|
2873
2980
|
const predicates = ['project_root = ?'];
|
|
2874
2981
|
const params = [options.projectRoot];
|
|
@@ -2909,6 +3016,31 @@ class DevFlowDatabase {
|
|
|
2909
3016
|
WHERE project_root = ? AND session_id = ?`)
|
|
2910
3017
|
.run(projectRoot, sessionId).changes;
|
|
2911
3018
|
}
|
|
3019
|
+
getPolicyVerificationBaseline(projectRoot, kind, commandHash) {
|
|
3020
|
+
const row = this.db.prepare(`
|
|
3021
|
+
SELECT * FROM devflow_policy_verification_baselines
|
|
3022
|
+
WHERE project_root = ? AND kind = ? AND command_hash = ?
|
|
3023
|
+
`).get(projectRoot, kind, commandHash);
|
|
3024
|
+
return row ? {
|
|
3025
|
+
projectRoot: String(row.project_root),
|
|
3026
|
+
kind: String(row.kind),
|
|
3027
|
+
commandHash: String(row.command_hash),
|
|
3028
|
+
diagnosticHashes: parseJsonStringArray(row.diagnostic_hashes),
|
|
3029
|
+
sourceRevision: typeof row.source_revision === 'string' ? row.source_revision : undefined,
|
|
3030
|
+
updatedAt: Number(row.updated_at),
|
|
3031
|
+
} : null;
|
|
3032
|
+
}
|
|
3033
|
+
upsertPolicyVerificationBaseline(record) {
|
|
3034
|
+
this.db.prepare(`
|
|
3035
|
+
INSERT INTO devflow_policy_verification_baselines
|
|
3036
|
+
(project_root, kind, command_hash, diagnostic_hashes, source_revision, updated_at)
|
|
3037
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
3038
|
+
ON CONFLICT(project_root, kind, command_hash) DO UPDATE SET
|
|
3039
|
+
diagnostic_hashes = excluded.diagnostic_hashes,
|
|
3040
|
+
source_revision = excluded.source_revision,
|
|
3041
|
+
updated_at = excluded.updated_at
|
|
3042
|
+
`).run(record.projectRoot, record.kind, record.commandHash, JSON.stringify([...new Set(record.diagnosticHashes)].sort()), record.sourceRevision ?? null, record.updatedAt);
|
|
3043
|
+
}
|
|
2912
3044
|
purgeExpiredContextReceipts(now = Date.now()) {
|
|
2913
3045
|
return this.db.prepare('DELETE FROM devflow_context_receipts WHERE expires_at <= ?')
|
|
2914
3046
|
.run(now).changes;
|
|
@@ -3662,6 +3794,14 @@ function parseJsonStringArray(value) {
|
|
|
3662
3794
|
? parsed.filter((item) => typeof item === 'string')
|
|
3663
3795
|
: [];
|
|
3664
3796
|
}
|
|
3797
|
+
function parseJsonObject(value) {
|
|
3798
|
+
const parsed = parseJson(value);
|
|
3799
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : undefined;
|
|
3800
|
+
}
|
|
3801
|
+
function parseJsonArray(value) {
|
|
3802
|
+
const parsed = parseJson(value);
|
|
3803
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
3804
|
+
}
|
|
3665
3805
|
function deriveQuery(input) {
|
|
3666
3806
|
if (!input || typeof input !== 'object')
|
|
3667
3807
|
return null;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { DevFlowDatabase, getGlobalDevFlowDbPath, openGlobalDevFlowDatabase, } from './database';
|
|
2
|
-
export type { BenchmarkReportMetaRecord, BenchmarkReportRecord, FeedbackRecord, GovernanceAuditRecord, GovernanceRuleRecord, HookFallbackRecord, HookReceiptRecord, ContextReceiptRecord, ContextSelectionEventRecord, MemoryDistillCheckpointRecord, MemoryTurnRecord, MemoryTurnStatus, TelemetryFailureRecord, } from './database';
|
|
2
|
+
export type { BenchmarkReportMetaRecord, BenchmarkReportRecord, FeedbackRecord, GovernanceAuditRecord, GovernanceRuleRecord, HookFallbackRecord, HookReceiptRecord, ContextReceiptRecord, ContextSelectionEventRecord, PolicyVerificationBaselineRecord, MemoryDistillCheckpointRecord, MemoryTurnRecord, MemoryTurnStatus, TelemetryFailureRecord, } from './database';
|
|
3
3
|
export type { EnqueueWorkInput, LeaseWorkInput, RequestSessionClosureInput, SessionClosureRecord, SessionClosureState, WorkError, WorkItemRecord, WorkKind, WorkQueueHealth, WorkState, } from './work-queue';
|
|
4
|
+
export type { RetrievalLedgerEventRecord, RetrievalLedgerSourceType, RetrievalLedgerStage, } from './retrieval-ledger';
|
|
4
5
|
export { hostActionReportsEqual, isHostActionState, mapHostActionRow, serializeHostActionReport, } from './host-actions';
|
|
5
6
|
export { RETRIEVAL_MAX_CYCLES, isRetrievalSessionState } from './retrieval-sessions';
|
|
6
7
|
export type { AppendRetrievalCycleInput, CreateRetrievalSessionInput, RetrievalCycleRecord, RetrievalGapKind, RetrievalGapRecord, RetrievalSessionRecord, RetrievalSessionState, } from './retrieval-sessions';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type RetrievalLedgerStage = 'eligible' | 'candidate' | 'selected' | 'exposed' | 'adopted' | 'positive_outcome' | 'negative_outcome' | 'unknown' | 'rejected';
|
|
2
|
+
export type RetrievalLedgerSourceType = 'code' | 'memory' | 'knowledge' | 'action';
|
|
3
|
+
export interface RetrievalLedgerEventRecord {
|
|
4
|
+
id: string;
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
sessionId: string;
|
|
7
|
+
executionId?: string;
|
|
8
|
+
turnId?: string;
|
|
9
|
+
requestId: string;
|
|
10
|
+
contextReceipt: string;
|
|
11
|
+
sourceType: RetrievalLedgerSourceType;
|
|
12
|
+
sourceId: string;
|
|
13
|
+
stage: RetrievalLedgerStage;
|
|
14
|
+
rank?: number;
|
|
15
|
+
rawScore?: number;
|
|
16
|
+
normalizedScore?: number;
|
|
17
|
+
finalScore?: number;
|
|
18
|
+
applicability: string[];
|
|
19
|
+
reason?: string;
|
|
20
|
+
toolEvidence: string[];
|
|
21
|
+
verificationReceipt?: string;
|
|
22
|
+
payload: Record<string, unknown>;
|
|
23
|
+
createdAt: number;
|
|
24
|
+
}
|
package/dist/work-queue.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type WorkKind = 'memory.explicit_commit' | 'memory.explicit_enrichment' | 'memory.turn_capture' | 'memory.turn_distill' | 'memory.vector_backfill' | 'context.prefetch' | 'learning.analyze_session' | 'workflow.worker_start' | 'workflow.worker_monitor' | 'workflow.worker_verify' | 'workflow.worker_merge' | 'workflow.worker_cleanup' | 'session.bootstrap' | 'session.finalize' | 'telemetry.reconcile';
|
|
1
|
+
export type WorkKind = 'memory.explicit_commit' | 'memory.explicit_enrichment' | 'memory.turn_capture' | 'memory.turn_distill' | 'memory.vector_backfill' | 'context.prefetch' | 'verification.policy' | 'learning.analyze_session' | 'workflow.worker_start' | 'workflow.worker_monitor' | 'workflow.worker_verify' | 'workflow.worker_merge' | 'workflow.worker_cleanup' | 'session.bootstrap' | 'session.finalize' | 'telemetry.reconcile';
|
|
2
2
|
export type WorkState = 'pending' | 'leased' | 'completed' | 'failed' | 'dead_letter';
|
|
3
3
|
export interface WorkError {
|
|
4
4
|
category: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/database",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.29",
|
|
4
4
|
"description": "DevFlow SQLite database package",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
"typescript": "^5.5.0",
|
|
14
14
|
"vitest": "^2.0.0"
|
|
15
15
|
},
|
|
16
|
-
"gitHead": "
|
|
16
|
+
"gitHead": "7a0def7e75bdc9462308824e450f1a33e5e75b34"
|
|
17
17
|
}
|
package/src/database.ts
CHANGED
|
@@ -69,6 +69,7 @@ import {
|
|
|
69
69
|
type WorkflowWorkerEventRecord,
|
|
70
70
|
type WorkflowWorkerRecord,
|
|
71
71
|
} from './workflow-workers';
|
|
72
|
+
import type { RetrievalLedgerEventRecord } from './retrieval-ledger';
|
|
72
73
|
|
|
73
74
|
export interface BenchmarkReportRecord {
|
|
74
75
|
runId: string;
|
|
@@ -191,6 +192,31 @@ export interface ContextReceiptRecord {
|
|
|
191
192
|
selectedFiles?: string[];
|
|
192
193
|
memoryIds?: string[];
|
|
193
194
|
canonicalNextAction?: string;
|
|
195
|
+
canonicalAction?: {
|
|
196
|
+
tool: string;
|
|
197
|
+
input: Record<string, unknown>;
|
|
198
|
+
status: 'required' | 'recommended' | 'unsupported' | 'degraded';
|
|
199
|
+
required: boolean;
|
|
200
|
+
reason?: string;
|
|
201
|
+
binding: Record<string, unknown> & { requiredContextReceipt: string };
|
|
202
|
+
verificationPlan: Array<Record<string, unknown>>;
|
|
203
|
+
};
|
|
204
|
+
actionAttempts?: Array<{
|
|
205
|
+
id: string;
|
|
206
|
+
tool: string;
|
|
207
|
+
status: 'succeeded' | 'failed' | 'timeout' | 'unavailable';
|
|
208
|
+
attemptedAt: number;
|
|
209
|
+
toolUseId?: string;
|
|
210
|
+
reason?: string;
|
|
211
|
+
}>;
|
|
212
|
+
actionSatisfiedAt?: number;
|
|
213
|
+
actionDegradation?: {
|
|
214
|
+
missedTool: string;
|
|
215
|
+
failedAttemptCount: number;
|
|
216
|
+
reason: string;
|
|
217
|
+
authorizedByContextReceipt: string;
|
|
218
|
+
authorizedAt: number;
|
|
219
|
+
};
|
|
194
220
|
requestId?: string;
|
|
195
221
|
}
|
|
196
222
|
|
|
@@ -207,6 +233,15 @@ export interface ContextSelectionEventRecord {
|
|
|
207
233
|
selectedAt: number;
|
|
208
234
|
}
|
|
209
235
|
|
|
236
|
+
export interface PolicyVerificationBaselineRecord {
|
|
237
|
+
projectRoot: string;
|
|
238
|
+
kind: string;
|
|
239
|
+
commandHash: string;
|
|
240
|
+
diagnosticHashes: string[];
|
|
241
|
+
sourceRevision?: string;
|
|
242
|
+
updatedAt: number;
|
|
243
|
+
}
|
|
244
|
+
|
|
210
245
|
export interface MemoryDistillCheckpointRecord {
|
|
211
246
|
id: string;
|
|
212
247
|
projectRoot: string;
|
|
@@ -492,6 +527,10 @@ export class DevFlowDatabase {
|
|
|
492
527
|
selected_files TEXT NOT NULL DEFAULT '[]',
|
|
493
528
|
memory_ids TEXT NOT NULL DEFAULT '[]',
|
|
494
529
|
canonical_next_action TEXT,
|
|
530
|
+
canonical_action_json TEXT,
|
|
531
|
+
action_attempts TEXT NOT NULL DEFAULT '[]',
|
|
532
|
+
action_satisfied_at INTEGER,
|
|
533
|
+
action_degradation_json TEXT,
|
|
495
534
|
request_id TEXT,
|
|
496
535
|
PRIMARY KEY (project_root, session_id, execution_id)
|
|
497
536
|
);
|
|
@@ -515,6 +554,29 @@ export class DevFlowDatabase {
|
|
|
515
554
|
CREATE INDEX IF NOT EXISTS idx_context_selection_identity
|
|
516
555
|
ON devflow_context_selection_events(project_root, session_id, execution_id, request_id);
|
|
517
556
|
|
|
557
|
+
CREATE TABLE IF NOT EXISTS devflow_retrieval_ledger (
|
|
558
|
+
id TEXT PRIMARY KEY,
|
|
559
|
+
project_root TEXT NOT NULL, session_id TEXT NOT NULL, execution_id TEXT, turn_id TEXT,
|
|
560
|
+
request_id TEXT NOT NULL, context_receipt TEXT NOT NULL, source_type TEXT NOT NULL,
|
|
561
|
+
source_id TEXT NOT NULL, stage TEXT NOT NULL, rank INTEGER, raw_score REAL,
|
|
562
|
+
normalized_score REAL, final_score REAL, applicability TEXT NOT NULL DEFAULT '[]',
|
|
563
|
+
reason TEXT, tool_evidence TEXT NOT NULL DEFAULT '[]', verification_receipt TEXT,
|
|
564
|
+
payload TEXT NOT NULL DEFAULT '{}', created_at INTEGER NOT NULL
|
|
565
|
+
);
|
|
566
|
+
CREATE INDEX IF NOT EXISTS idx_retrieval_ledger_identity ON devflow_retrieval_ledger(
|
|
567
|
+
project_root, session_id, execution_id, request_id, context_receipt, source_type, source_id, created_at
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
CREATE TABLE IF NOT EXISTS devflow_policy_verification_baselines (
|
|
571
|
+
project_root TEXT NOT NULL,
|
|
572
|
+
kind TEXT NOT NULL,
|
|
573
|
+
command_hash TEXT NOT NULL,
|
|
574
|
+
diagnostic_hashes TEXT NOT NULL DEFAULT '[]',
|
|
575
|
+
source_revision TEXT,
|
|
576
|
+
updated_at INTEGER NOT NULL,
|
|
577
|
+
PRIMARY KEY (project_root, kind, command_hash)
|
|
578
|
+
);
|
|
579
|
+
|
|
518
580
|
CREATE TABLE IF NOT EXISTS devflow_retrieval_sessions (
|
|
519
581
|
id TEXT PRIMARY KEY,
|
|
520
582
|
request_id TEXT NOT NULL UNIQUE,
|
|
@@ -931,6 +993,10 @@ export class DevFlowDatabase {
|
|
|
931
993
|
try { this.db.exec("ALTER TABLE devflow_context_receipts ADD COLUMN selected_files TEXT NOT NULL DEFAULT '[]'"); } catch {}
|
|
932
994
|
try { this.db.exec("ALTER TABLE devflow_context_receipts ADD COLUMN memory_ids TEXT NOT NULL DEFAULT '[]'"); } catch {}
|
|
933
995
|
try { this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN canonical_next_action TEXT'); } catch {}
|
|
996
|
+
try { this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN canonical_action_json TEXT'); } catch {}
|
|
997
|
+
try { this.db.exec("ALTER TABLE devflow_context_receipts ADD COLUMN action_attempts TEXT NOT NULL DEFAULT '[]'"); } catch {}
|
|
998
|
+
try { this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN action_satisfied_at INTEGER'); } catch {}
|
|
999
|
+
try { this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN action_degradation_json TEXT'); } catch {}
|
|
934
1000
|
try { this.db.exec('ALTER TABLE devflow_context_receipts ADD COLUMN request_id TEXT'); } catch {}
|
|
935
1001
|
this.db.exec('UPDATE devflow_rules SET updated_at = created_at WHERE updated_at IS NULL');
|
|
936
1002
|
this.db.exec('CREATE INDEX IF NOT EXISTS idx_devflow_rules_gate ON devflow_rules(gate, enabled)');
|
|
@@ -1786,12 +1852,22 @@ export class DevFlowDatabase {
|
|
|
1786
1852
|
const fallbackReasons = [...new Set([
|
|
1787
1853
|
...directFallbacks.map(() => 'direct_tool_during_context'),
|
|
1788
1854
|
...hookFallbacks.map(fallback => `daemon_${fallback.reason}`),
|
|
1855
|
+
...(execution?.fallbackReasons ?? []),
|
|
1789
1856
|
])];
|
|
1790
1857
|
const eventReceiptIds = collectCanonicalReceiptIds(events.map(event => event.output));
|
|
1791
1858
|
const existingMetadata = execution?.metadata && typeof execution.metadata === 'object'
|
|
1792
1859
|
? execution.metadata as Record<string, unknown>
|
|
1793
1860
|
: {};
|
|
1794
1861
|
const mergedMetadata = mergeExecutionMetadata(existingMetadata, metadata ?? {});
|
|
1862
|
+
const requiredActionDegradations = Array.isArray(mergedMetadata.requiredActionDegradations)
|
|
1863
|
+
? mergedMetadata.requiredActionDegradations as Array<Record<string, unknown>>
|
|
1864
|
+
: [];
|
|
1865
|
+
const degradedRequiredTools = requiredActionDegradations
|
|
1866
|
+
.map(item => item.missedTool)
|
|
1867
|
+
.filter((tool): tool is string => typeof tool === 'string');
|
|
1868
|
+
const requiredActionFailureCount = requiredActionDegradations.reduce((count, item) => (
|
|
1869
|
+
Math.max(count, typeof item.failedAttemptCount === 'number' ? item.failedAttemptCount : 0)
|
|
1870
|
+
), 0);
|
|
1795
1871
|
const suppliedMemoryReceiptIds = [existingMetadata.memoryReceiptIds, metadata?.memoryReceiptIds]
|
|
1796
1872
|
.flatMap(value => Array.isArray(value) ? value : [])
|
|
1797
1873
|
.filter((id): id is string => typeof id === 'string');
|
|
@@ -1817,8 +1893,8 @@ export class DevFlowDatabase {
|
|
|
1817
1893
|
? Math.max(0, finishedAt - execution.startedAt)
|
|
1818
1894
|
: row?.first_at != null && row?.last_at != null ? row.last_at - row.first_at : 0,
|
|
1819
1895
|
mcpComplianceRate: obligation.rate,
|
|
1820
|
-
missedMcpTools: obligation.missedTools,
|
|
1821
|
-
failedToolCalls: failures.length,
|
|
1896
|
+
missedMcpTools: [...new Set([...obligation.missedTools, ...degradedRequiredTools])],
|
|
1897
|
+
failedToolCalls: Math.max(failures.length, requiredActionFailureCount),
|
|
1822
1898
|
blockedToolCalls: blocked.length,
|
|
1823
1899
|
fallbackCount: directFallbacks.length + hookFallbacks.length,
|
|
1824
1900
|
fallbackReasons,
|
|
@@ -1826,8 +1902,8 @@ export class DevFlowDatabase {
|
|
|
1826
1902
|
...mergedMetadata,
|
|
1827
1903
|
applicableObligations: obligation.applicable,
|
|
1828
1904
|
satisfiedObligations: obligation.satisfied,
|
|
1829
|
-
missedTools: obligation.missedTools,
|
|
1830
|
-
actualFailureCount: failures.length,
|
|
1905
|
+
missedTools: [...new Set([...obligation.missedTools, ...degradedRequiredTools])],
|
|
1906
|
+
actualFailureCount: Math.max(failures.length, requiredActionFailureCount),
|
|
1831
1907
|
blockedCount: blocked.length,
|
|
1832
1908
|
fallbackCount: directFallbacks.length + hookFallbacks.length,
|
|
1833
1909
|
fallbackReasons,
|
|
@@ -3466,8 +3542,9 @@ export class DevFlowDatabase {
|
|
|
3466
3542
|
this.db.prepare(`
|
|
3467
3543
|
INSERT INTO devflow_context_receipts
|
|
3468
3544
|
(project_root, session_id, execution_id, context_hash, issued_at, expires_at,
|
|
3469
|
-
selected_files, memory_ids, canonical_next_action,
|
|
3470
|
-
|
|
3545
|
+
selected_files, memory_ids, canonical_next_action, canonical_action_json,
|
|
3546
|
+
action_attempts, action_satisfied_at, action_degradation_json, request_id)
|
|
3547
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3471
3548
|
ON CONFLICT(project_root, session_id, execution_id) DO UPDATE SET
|
|
3472
3549
|
context_hash = excluded.context_hash,
|
|
3473
3550
|
issued_at = excluded.issued_at,
|
|
@@ -3475,6 +3552,10 @@ export class DevFlowDatabase {
|
|
|
3475
3552
|
selected_files = excluded.selected_files,
|
|
3476
3553
|
memory_ids = excluded.memory_ids,
|
|
3477
3554
|
canonical_next_action = excluded.canonical_next_action,
|
|
3555
|
+
canonical_action_json = excluded.canonical_action_json,
|
|
3556
|
+
action_attempts = excluded.action_attempts,
|
|
3557
|
+
action_satisfied_at = excluded.action_satisfied_at,
|
|
3558
|
+
action_degradation_json = excluded.action_degradation_json,
|
|
3478
3559
|
request_id = excluded.request_id
|
|
3479
3560
|
`).run(
|
|
3480
3561
|
receipt.projectRoot,
|
|
@@ -3486,6 +3567,10 @@ export class DevFlowDatabase {
|
|
|
3486
3567
|
JSON.stringify(receipt.selectedFiles ?? []),
|
|
3487
3568
|
JSON.stringify(receipt.memoryIds ?? []),
|
|
3488
3569
|
receipt.canonicalNextAction ?? null,
|
|
3570
|
+
receipt.canonicalAction ? JSON.stringify(receipt.canonicalAction) : null,
|
|
3571
|
+
JSON.stringify(receipt.actionAttempts ?? []),
|
|
3572
|
+
receipt.actionSatisfiedAt ?? null,
|
|
3573
|
+
receipt.actionDegradation ? JSON.stringify(receipt.actionDegradation) : null,
|
|
3489
3574
|
receipt.requestId ?? null,
|
|
3490
3575
|
);
|
|
3491
3576
|
}
|
|
@@ -3497,7 +3582,8 @@ export class DevFlowDatabase {
|
|
|
3497
3582
|
): ContextReceiptRecord | null {
|
|
3498
3583
|
const row = this.db.prepare(`
|
|
3499
3584
|
SELECT project_root, session_id, execution_id, context_hash, issued_at, expires_at,
|
|
3500
|
-
selected_files, memory_ids, canonical_next_action,
|
|
3585
|
+
selected_files, memory_ids, canonical_next_action, canonical_action_json,
|
|
3586
|
+
action_attempts, action_satisfied_at, action_degradation_json, request_id
|
|
3501
3587
|
FROM devflow_context_receipts
|
|
3502
3588
|
WHERE project_root = ? AND session_id = ? AND execution_id = ?
|
|
3503
3589
|
`).get(projectRoot, sessionId, executionId) as any;
|
|
@@ -3511,6 +3597,10 @@ export class DevFlowDatabase {
|
|
|
3511
3597
|
selectedFiles: parseJsonStringArray(row.selected_files),
|
|
3512
3598
|
memoryIds: parseJsonStringArray(row.memory_ids),
|
|
3513
3599
|
canonicalNextAction: row.canonical_next_action ?? undefined,
|
|
3600
|
+
canonicalAction: parseJsonObject(row.canonical_action_json),
|
|
3601
|
+
actionAttempts: parseJsonArray(row.action_attempts),
|
|
3602
|
+
actionSatisfiedAt: row.action_satisfied_at ?? undefined,
|
|
3603
|
+
actionDegradation: parseJsonObject(row.action_degradation_json),
|
|
3514
3604
|
requestId: row.request_id ?? undefined,
|
|
3515
3605
|
} : null;
|
|
3516
3606
|
}
|
|
@@ -3527,7 +3617,8 @@ export class DevFlowDatabase {
|
|
|
3527
3617
|
: [projectRoot, sessionId, now];
|
|
3528
3618
|
const row = this.db.prepare(`
|
|
3529
3619
|
SELECT project_root, session_id, execution_id, context_hash, issued_at, expires_at,
|
|
3530
|
-
selected_files, memory_ids, canonical_next_action,
|
|
3620
|
+
selected_files, memory_ids, canonical_next_action, canonical_action_json,
|
|
3621
|
+
action_attempts, action_satisfied_at, action_degradation_json, request_id
|
|
3531
3622
|
FROM devflow_context_receipts
|
|
3532
3623
|
WHERE project_root = ? AND session_id = ? ${executionClause} AND expires_at > ?
|
|
3533
3624
|
ORDER BY issued_at DESC
|
|
@@ -3543,6 +3634,10 @@ export class DevFlowDatabase {
|
|
|
3543
3634
|
selectedFiles: parseJsonStringArray(row.selected_files),
|
|
3544
3635
|
memoryIds: parseJsonStringArray(row.memory_ids),
|
|
3545
3636
|
canonicalNextAction: row.canonical_next_action ?? undefined,
|
|
3637
|
+
canonicalAction: parseJsonObject(row.canonical_action_json),
|
|
3638
|
+
actionAttempts: parseJsonArray(row.action_attempts),
|
|
3639
|
+
actionSatisfiedAt: row.action_satisfied_at ?? undefined,
|
|
3640
|
+
actionDegradation: parseJsonObject(row.action_degradation_json),
|
|
3546
3641
|
requestId: row.request_id ?? undefined,
|
|
3547
3642
|
} : null;
|
|
3548
3643
|
}
|
|
@@ -3567,6 +3662,55 @@ export class DevFlowDatabase {
|
|
|
3567
3662
|
).changes > 0;
|
|
3568
3663
|
}
|
|
3569
3664
|
|
|
3665
|
+
appendRetrievalLedgerEvent(event: RetrievalLedgerEventRecord): boolean {
|
|
3666
|
+
if ((event.stage === 'selected' || event.stage === 'exposed')
|
|
3667
|
+
&& typeof event.payload.returnedFinalScore === 'number'
|
|
3668
|
+
&& event.payload.returnedFinalScore > 0
|
|
3669
|
+
&& event.finalScore === 0) {
|
|
3670
|
+
throw new Error(`RETRIEVAL_LEDGER_INVALID_FINAL_SCORE:${event.sourceType}:${event.sourceId}`);
|
|
3671
|
+
}
|
|
3672
|
+
return this.db.prepare(`
|
|
3673
|
+
INSERT OR IGNORE INTO devflow_retrieval_ledger (
|
|
3674
|
+
id, project_root, session_id, execution_id, turn_id, request_id, context_receipt,
|
|
3675
|
+
source_type, source_id, stage, rank, raw_score, normalized_score, final_score,
|
|
3676
|
+
applicability, reason, tool_evidence, verification_receipt, payload, created_at
|
|
3677
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3678
|
+
`).run(
|
|
3679
|
+
event.id, event.projectRoot, event.sessionId, event.executionId ?? null, event.turnId ?? null,
|
|
3680
|
+
event.requestId, event.contextReceipt, event.sourceType, event.sourceId, event.stage,
|
|
3681
|
+
event.rank ?? null, event.rawScore ?? null, event.normalizedScore ?? null,
|
|
3682
|
+
event.finalScore ?? null, JSON.stringify(event.applicability), event.reason ?? null,
|
|
3683
|
+
JSON.stringify(event.toolEvidence), event.verificationReceipt ?? null,
|
|
3684
|
+
JSON.stringify(event.payload), event.createdAt,
|
|
3685
|
+
).changes > 0;
|
|
3686
|
+
}
|
|
3687
|
+
|
|
3688
|
+
listRetrievalLedgerEvents(options: {
|
|
3689
|
+
projectRoot: string; sessionId?: string; executionId?: string; requestId?: string;
|
|
3690
|
+
}): RetrievalLedgerEventRecord[] {
|
|
3691
|
+
const predicates = ['project_root = ?'];
|
|
3692
|
+
const params: unknown[] = [options.projectRoot];
|
|
3693
|
+
for (const [column, value] of [
|
|
3694
|
+
['session_id', options.sessionId], ['execution_id', options.executionId], ['request_id', options.requestId],
|
|
3695
|
+
] as const) {
|
|
3696
|
+
if (value) { predicates.push(`${column} = ?`); params.push(value); }
|
|
3697
|
+
}
|
|
3698
|
+
return (this.db.prepare(`SELECT * FROM devflow_retrieval_ledger
|
|
3699
|
+
WHERE ${predicates.join(' AND ')} ORDER BY created_at ASC, id ASC`).all(...params) as any[])
|
|
3700
|
+
.map(row => ({
|
|
3701
|
+
id: row.id, projectRoot: row.project_root, sessionId: row.session_id,
|
|
3702
|
+
executionId: row.execution_id ?? undefined, turnId: row.turn_id ?? undefined,
|
|
3703
|
+
requestId: row.request_id, contextReceipt: row.context_receipt,
|
|
3704
|
+
sourceType: row.source_type, sourceId: row.source_id, stage: row.stage,
|
|
3705
|
+
rank: row.rank ?? undefined, rawScore: row.raw_score ?? undefined,
|
|
3706
|
+
normalizedScore: row.normalized_score ?? undefined, finalScore: row.final_score ?? undefined,
|
|
3707
|
+
applicability: parseJsonStringArray(row.applicability), reason: row.reason ?? undefined,
|
|
3708
|
+
toolEvidence: parseJsonStringArray(row.tool_evidence),
|
|
3709
|
+
verificationReceipt: row.verification_receipt ?? undefined,
|
|
3710
|
+
payload: parseJsonObject(row.payload) ?? {}, createdAt: row.created_at,
|
|
3711
|
+
}));
|
|
3712
|
+
}
|
|
3713
|
+
|
|
3570
3714
|
listContextSelectionEvents(options: {
|
|
3571
3715
|
projectRoot: string;
|
|
3572
3716
|
sessionId?: string;
|
|
@@ -3613,6 +3757,44 @@ export class DevFlowDatabase {
|
|
|
3613
3757
|
.run(projectRoot, sessionId).changes;
|
|
3614
3758
|
}
|
|
3615
3759
|
|
|
3760
|
+
getPolicyVerificationBaseline(
|
|
3761
|
+
projectRoot: string,
|
|
3762
|
+
kind: string,
|
|
3763
|
+
commandHash: string,
|
|
3764
|
+
): PolicyVerificationBaselineRecord | null {
|
|
3765
|
+
const row = this.db.prepare(`
|
|
3766
|
+
SELECT * FROM devflow_policy_verification_baselines
|
|
3767
|
+
WHERE project_root = ? AND kind = ? AND command_hash = ?
|
|
3768
|
+
`).get(projectRoot, kind, commandHash) as Record<string, unknown> | undefined;
|
|
3769
|
+
return row ? {
|
|
3770
|
+
projectRoot: String(row.project_root),
|
|
3771
|
+
kind: String(row.kind),
|
|
3772
|
+
commandHash: String(row.command_hash),
|
|
3773
|
+
diagnosticHashes: parseJsonStringArray(row.diagnostic_hashes),
|
|
3774
|
+
sourceRevision: typeof row.source_revision === 'string' ? row.source_revision : undefined,
|
|
3775
|
+
updatedAt: Number(row.updated_at),
|
|
3776
|
+
} : null;
|
|
3777
|
+
}
|
|
3778
|
+
|
|
3779
|
+
upsertPolicyVerificationBaseline(record: PolicyVerificationBaselineRecord): void {
|
|
3780
|
+
this.db.prepare(`
|
|
3781
|
+
INSERT INTO devflow_policy_verification_baselines
|
|
3782
|
+
(project_root, kind, command_hash, diagnostic_hashes, source_revision, updated_at)
|
|
3783
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
3784
|
+
ON CONFLICT(project_root, kind, command_hash) DO UPDATE SET
|
|
3785
|
+
diagnostic_hashes = excluded.diagnostic_hashes,
|
|
3786
|
+
source_revision = excluded.source_revision,
|
|
3787
|
+
updated_at = excluded.updated_at
|
|
3788
|
+
`).run(
|
|
3789
|
+
record.projectRoot,
|
|
3790
|
+
record.kind,
|
|
3791
|
+
record.commandHash,
|
|
3792
|
+
JSON.stringify([...new Set(record.diagnosticHashes)].sort()),
|
|
3793
|
+
record.sourceRevision ?? null,
|
|
3794
|
+
record.updatedAt,
|
|
3795
|
+
);
|
|
3796
|
+
}
|
|
3797
|
+
|
|
3616
3798
|
purgeExpiredContextReceipts(now = Date.now()): number {
|
|
3617
3799
|
return this.db.prepare('DELETE FROM devflow_context_receipts WHERE expires_at <= ?')
|
|
3618
3800
|
.run(now).changes;
|
|
@@ -4626,6 +4808,16 @@ function parseJsonStringArray(value: unknown): string[] {
|
|
|
4626
4808
|
: [];
|
|
4627
4809
|
}
|
|
4628
4810
|
|
|
4811
|
+
function parseJsonObject<T>(value: unknown): T | undefined {
|
|
4812
|
+
const parsed = parseJson(value);
|
|
4813
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed as T : undefined;
|
|
4814
|
+
}
|
|
4815
|
+
|
|
4816
|
+
function parseJsonArray<T>(value: unknown): T[] {
|
|
4817
|
+
const parsed = parseJson(value);
|
|
4818
|
+
return Array.isArray(parsed) ? parsed as T[] : [];
|
|
4819
|
+
}
|
|
4820
|
+
|
|
4629
4821
|
function deriveQuery(input: unknown): string | null {
|
|
4630
4822
|
if (!input || typeof input !== 'object') return null;
|
|
4631
4823
|
const record = input as Record<string, unknown>;
|
package/src/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ export type {
|
|
|
13
13
|
HookReceiptRecord,
|
|
14
14
|
ContextReceiptRecord,
|
|
15
15
|
ContextSelectionEventRecord,
|
|
16
|
+
PolicyVerificationBaselineRecord,
|
|
16
17
|
MemoryDistillCheckpointRecord,
|
|
17
18
|
MemoryTurnRecord,
|
|
18
19
|
MemoryTurnStatus,
|
|
@@ -30,6 +31,11 @@ export type {
|
|
|
30
31
|
WorkQueueHealth,
|
|
31
32
|
WorkState,
|
|
32
33
|
} from './work-queue';
|
|
34
|
+
export type {
|
|
35
|
+
RetrievalLedgerEventRecord,
|
|
36
|
+
RetrievalLedgerSourceType,
|
|
37
|
+
RetrievalLedgerStage,
|
|
38
|
+
} from './retrieval-ledger';
|
|
33
39
|
export {
|
|
34
40
|
hostActionReportsEqual,
|
|
35
41
|
isHostActionState,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type RetrievalLedgerStage =
|
|
2
|
+
| 'eligible' | 'candidate' | 'selected' | 'exposed' | 'adopted'
|
|
3
|
+
| 'positive_outcome' | 'negative_outcome' | 'unknown' | 'rejected';
|
|
4
|
+
|
|
5
|
+
export type RetrievalLedgerSourceType = 'code' | 'memory' | 'knowledge' | 'action';
|
|
6
|
+
|
|
7
|
+
export interface RetrievalLedgerEventRecord {
|
|
8
|
+
id: string;
|
|
9
|
+
projectRoot: string;
|
|
10
|
+
sessionId: string;
|
|
11
|
+
executionId?: string;
|
|
12
|
+
turnId?: string;
|
|
13
|
+
requestId: string;
|
|
14
|
+
contextReceipt: string;
|
|
15
|
+
sourceType: RetrievalLedgerSourceType;
|
|
16
|
+
sourceId: string;
|
|
17
|
+
stage: RetrievalLedgerStage;
|
|
18
|
+
rank?: number;
|
|
19
|
+
rawScore?: number;
|
|
20
|
+
normalizedScore?: number;
|
|
21
|
+
finalScore?: number;
|
|
22
|
+
applicability: string[];
|
|
23
|
+
reason?: string;
|
|
24
|
+
toolEvidence: string[];
|
|
25
|
+
verificationReceipt?: string;
|
|
26
|
+
payload: Record<string, unknown>;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
}
|
package/src/work-queue.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/types.ts","./src/node-sqlite.ts","./src/work-queue.ts","./src/obligation-ledger.ts","./src/host-actions.ts","./src/retrieval-sessions.ts","./src/learning-candidates.ts","./src/workflow-workers.ts","./src/retrieval-ledger.ts","./src/database.ts","./src/index.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","../../node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","../../node_modules/@types/better-sqlite3/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/dagre/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/long/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/turndown/index.d.ts","../../node_modules/@types/validator/lib/isboolean.d.ts","../../node_modules/@types/validator/lib/isemail.d.ts","../../node_modules/@types/validator/lib/isfqdn.d.ts","../../node_modules/@types/validator/lib/isiban.d.ts","../../node_modules/@types/validator/lib/isiso31661alpha2.d.ts","../../node_modules/@types/validator/lib/isiso4217.d.ts","../../node_modules/@types/validator/lib/isiso6391.d.ts","../../node_modules/@types/validator/lib/istaxid.d.ts","../../node_modules/@types/validator/lib/isurl.d.ts","../../node_modules/@types/validator/index.d.ts","../../../../node_modules/@types/html-minifier-terser/index.d.ts","../../../../node_modules/@types/json-schema/index.d.ts","../../../../node_modules/@types/q/index.d.ts","../../../../node_modules/@types/source-list-map/index.d.ts","../../../../node_modules/@types/tapable/index.d.ts","../../../../node_modules/@types/uglify-js/node_modules/source-map/source-map.d.ts","../../../../node_modules/@types/uglify-js/index.d.ts","../../../../node_modules/anymatch/index.d.ts","../../../../node_modules/@types/webpack/node_modules/source-map/source-map.d.ts","../../../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../../../node_modules/@types/webpack-sources/lib/source.d.ts","../../../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../../../node_modules/@types/webpack-sources/lib/index.d.ts","../../../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../../../node_modules/@types/webpack-sources/index.d.ts","../../../../node_modules/@types/webpack/index.d.ts"],"fileIdsList":[[62,112,129,130,162],[62,112,129,130],[62,112,129,130,166,175],[62,112,129,130,165],[62,112,129,130,171],[62,112,129,130,170],[62,112,129,130,166,169,175],[62,112,129,130,187],[62,112,129,130,184,185,186],[62,112,129,130,190,191,192,193,194,195,196,197,198],[62,109,110,112,129,130],[62,111,112,129,130],[112,129,130],[62,112,117,129,130,147],[62,112,113,118,123,129,130,132,144,155],[62,112,113,114,123,129,130,132],[57,58,59,62,112,129,130],[62,112,115,129,130,156],[62,112,116,117,124,129,130,133],[62,112,117,129,130,144,152],[62,112,118,120,123,129,130,132],[62,111,112,119,129,130],[62,112,120,121,129,130],[62,112,122,123,129,130],[62,111,112,123,129,130],[62,112,123,124,125,129,130,144,155],[62,112,123,124,125,129,130,139,144,147],[62,104,112,120,123,126,129,130,132,144,155],[62,112,123,124,126,127,129,130,132,144,152,155],[62,112,126,128,129,130,144,152,155],[60,61,62,63,64,65,66,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161],[62,112,123,129,130],[62,112,129,130,131,155],[62,112,120,123,129,130,132,144],[62,112,129,130,133],[62,112,129,130,134],[62,111,112,129,130,135],[62,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161],[62,112,129,130,137],[62,112,129,130,138],[62,112,123,129,130,139,140],[62,112,129,130,139,141,156,158],[62,112,124,129,130],[62,112,123,129,130,144,145,147],[62,112,129,130,146,147],[62,112,129,130,144,145],[62,112,129,130,147],[62,112,129,130,148],[62,109,112,129,130,144,149,155],[62,112,123,129,130,150,151],[62,112,129,130,150,151],[62,112,117,129,130,132,144,152],[62,112,129,130,153],[62,112,129,130,132,154],[62,112,126,129,130,138,155],[62,112,117,129,130,156],[62,112,129,130,144,157],[62,112,129,130,131,158],[62,112,129,130,159],[62,104,112,129,130],[62,104,112,123,125,129,130,135,144,147,155,157,158,160],[62,112,129,130,144,161],[62,76,80,112,129,130,155],[62,76,112,129,130,144,155],[62,71,112,129,130],[62,73,76,112,129,130,152,155],[62,112,129,130,132,152],[62,71,112,129,130,162],[62,73,76,112,129,130,132,155],[62,68,69,72,75,112,123,129,130,144,155],[62,76,83,112,129,130],[62,68,74,112,129,130],[62,76,97,98,112,129,130],[62,72,76,112,129,130,147,155,162],[62,97,112,129,130,162],[62,70,71,112,129,130,162],[62,76,112,129,130],[62,70,71,72,73,74,75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,112,129,130],[62,76,91,112,129,130],[62,76,83,84,112,129,130],[62,74,76,84,85,112,129,130],[62,75,112,129,130],[62,68,71,76,112,129,130],[62,76,80,84,85,112,129,130],[62,80,112,129,130],[62,74,76,79,112,129,130,155],[62,68,73,76,83,112,129,130],[62,112,129,130,144],[62,71,76,97,112,129,130,160,162],[47,48,49,50,51,52,53,54,62,112,117,124,129,130,133,134],[48,49,50,51,52,53,54,55,62,112,129,130],[46,62,112,129,130,143],[62,112,129,130,205],[62,112,129,130,162,210,211,212,213,214,215,216,217,218,219,220],[62,112,129,130,209,210,219],[62,112,129,130,210,219],[62,112,129,130,203,209,210,219],[62,112,129,130,209,210,211,212,213,214,215,216,217,218,220],[62,112,129,130,210],[62,112,117,129,130,209,219],[62,112,117,129,130,162,204,205,206,207,221]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f0b1a4ab354a2e47e1396af5bc2663a77cd9f91eb857b9f0fdfcd77cc95c8d0","signature":"651a6436cc80d726a120b278fcef7487a66061442629a7c83b27977438c3ed36"},{"version":"b9d331dfe00d6d48dc659913e8df3e13e7e62fc256a6257b5b124dc3ed2ef800","signature":"0feb10f692fd32988f9dd8a9ffec4b9fb63dab713b60e0e8731f2492bced488e"},{"version":"77257e880d0cd2fd16e58a0a450113771bf37d672df82cd4e548482a3e8b6d65","signature":"19710d137cac1d8a698d0e66d5146df3ebeaec35b4b31c4ae8d676387e03bb01"},{"version":"b490ef6391f64aa28bc452b907462163b63d412d8984630e0777970aed7fa8d5","signature":"27311437b7dae1bcf4f30ac52f5c7527f265438d3ad7184b46daf2f8f5417307"},{"version":"e04476f981a2bff5bc302e1776f5ece8eece3801e1188fb07126e661aa79e907","signature":"ba77c208cf696473912bd2f84cb93c2b61f7faf108712db69c838e23bb77bac1"},{"version":"16f19f92edb90e4ab2d034e856179a1a581bbd45e3fb25ab2531eb2d9315718d","signature":"060aada36f7239e7c8ae86b2164bb1b0e5c83c997eaae2dfcd120db7698f2406"},{"version":"f03144cf63c05642505945e36379d05b2dea254c4f9c2ba70085f3ffcea3e9f9","signature":"6766c9a574d2c656494cb8beb29fcb1701e6719366f7255d56cf723267ffd585"},{"version":"fcfa8c24b48dc6922c4b46daa657bfab22cdc2f610b4608174ddbd69fcea3085","signature":"dc34d797db0f2b3b97a86c8e9e7d5b1d55faa42d203759a08b080f2dce805274"},{"version":"ae976a4b78fd8b40976dcb9bc38fac906e2dad058cec80c2ca76c65a14b1625f","signature":"4f852c68971f8fb51de7d0fb0e5ba5e6fb9b7f2a9b1f6587ed076214161ebb64"},{"version":"1e76bd310c84f2eb59d186490787fbdcb7837158c82df72e4989215fec9f0a84","signature":"cc96aed3f1121465b6044253238c567496828eee0dc0c6697abb18c284785864"},{"version":"ef68e013559c22166722e8c14949bd55d48b1cd13d8db6cc00c52d033905301c","signature":"b96a9c690212ba6a1ae40609308299a132d1cca51f195f46ff917e19ed5a654d"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"d61e0a64cd175208ac0b83670151a9a6b5916f0d1ffcdc5c29c90b1cebfc5045","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"b1538a92b9bae8d230267210c5db38c2eb6bdb352128a3ce3aa8c6acf9fc9622","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"9b048390bcffe88c023a4cd742a720b41d4cd7df83bc9270e6f2339bf38de278","affectsGlobalScope":true,"impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"443d1020635af05e3cb8c45974bc76f03a8b11f95563774b26afb51b1a8666d7","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","impliedFormat":1},{"version":"8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","impliedFormat":1},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"09ddcfcfbe77a8232d155ca1030005106b1328f6210df43629d0be750da07c16","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"f80cb0ced191be0a08767ee613ec61b89d193ab698c7c0c8133b49a183c5ea26","impliedFormat":1},{"version":"c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","impliedFormat":1},{"version":"3dc633586d48fcd04a4f8acdbf7631b8e4a334632f252d5707e04b299069721e","impliedFormat":1},{"version":"3322858f01c0349ee7968a5ce93a1ca0c154c4692aa8f1721dc5192a9191a168","impliedFormat":1},{"version":"6dde0a77adad4173a49e6de4edd6ef70f5598cbebb5c80d76c111943854636ca","impliedFormat":1},{"version":"09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","impliedFormat":1},{"version":"f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","impliedFormat":1},{"version":"99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","impliedFormat":1},{"version":"f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","impliedFormat":1},{"version":"9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","impliedFormat":1},{"version":"159d95163a0ed369175ae7838fa21a9e9e703de5fdb0f978721293dd403d9f4a","impliedFormat":1},{"version":"6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d","impliedFormat":1},{"version":"3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27","impliedFormat":1},{"version":"f9a2dd6a6084665f093ed0e9664b8e673be2a45e342a59dd4e0e4e552e68a9ad","impliedFormat":1},{"version":"67fc055eb86a0632e2e072838f889ffe1754083cb13c8c80a06a7d895d877aae","impliedFormat":1},{"version":"d558a0fe921ebcc88d3212c2c42108abf9f0d694d67ebdeba37d7728c044f579","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"bee79f5862fe1278d2ba275298862bce3f7abf1e59d9c669c4b9a4b2bba96956","impliedFormat":1},{"version":"4fb0b7d532aa6fb850b6cd2f1ee4f00802d877b5c66a51903bc1fb0624126349","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"8560a87b2e9f8e2c3808c8f6172c9b7eb6c9b08cb9f937db71c285ecf292c81d","impliedFormat":1},{"version":"ffe3931ff864f28d80ae2f33bd11123ad3d7bad9896b910a1e61504cc093e1f5","impliedFormat":1},{"version":"083c1bd82f8dc3a1ed6fc9e8eaddf141f7c05df418eca386598821e045253af9","impliedFormat":1},{"version":"274ebe605bd7f71ce161f9f5328febc7d547a2929f803f04b44ec4a7d8729517","impliedFormat":1},{"version":"6ca0207e70d985a24396583f55836b10dc181063ab6069733561bfde404d1bad","impliedFormat":1},{"version":"5908142efeaab38ffdf43927ee0af681ae77e0d7672b956dfb8b6c705dbfe106","impliedFormat":1},{"version":"f772b188b943549b5c5eb803133314b8aa7689eced80eed0b70e2f30ca07ab9c","impliedFormat":1},{"version":"0026b816ef05cfbf290e8585820eef0f13250438669107dfc44482bac007b14f","impliedFormat":1},{"version":"8ef5aad624890acfe0fa48230edce255f00934016d16acb8de0edac0ea5b21bb","impliedFormat":1},{"version":"9af6248ff4baf0c1ddc62bb0bc43197437bd5fb2c95ff8e10e4cf2e699ea45c1","impliedFormat":1},{"version":"d84398556ba4595ee6be554671da142cfe964cbdebb2f0c517a10f76f2b016c0","impliedFormat":1},{"version":"89b42f8ee5d387a39db85ee2c7123a391c3ede266a2bcd502c85ad55626c3b2b","impliedFormat":1},{"version":"99c7f3bbc03f6eb3e663c26c104d639617620c2925e76fc284f7bedf1877fa2b","impliedFormat":1}],"root":[[46,56]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[163,1],[164,2],[165,2],[167,3],[168,2],[169,4],[170,2],[172,5],[166,2],[173,6],[171,2],[174,2],[175,3],[176,7],[177,2],[178,2],[179,2],[180,2],[181,2],[182,2],[183,2],[184,2],[188,8],[185,2],[187,9],[189,2],[199,10],[190,2],[191,2],[192,2],[193,2],[194,2],[195,2],[196,2],[197,2],[198,2],[67,2],[186,2],[44,2],[45,2],[9,2],[8,2],[2,2],[10,2],[11,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[3,2],[18,2],[19,2],[4,2],[20,2],[24,2],[21,2],[22,2],[23,2],[25,2],[26,2],[27,2],[5,2],[28,2],[29,2],[30,2],[31,2],[6,2],[35,2],[32,2],[33,2],[34,2],[36,2],[7,2],[37,2],[42,2],[43,2],[38,2],[39,2],[40,2],[41,2],[1,2],[109,11],[110,11],[111,12],[62,13],[112,14],[113,15],[114,16],[57,2],[60,17],[58,2],[59,2],[115,18],[116,19],[117,20],[118,21],[119,22],[120,23],[121,23],[122,24],[123,25],[124,26],[125,27],[63,2],[61,2],[126,28],[127,29],[128,30],[162,31],[129,32],[130,2],[131,33],[132,34],[133,35],[134,36],[135,37],[136,38],[137,39],[138,40],[139,41],[140,41],[141,42],[142,2],[143,43],[144,44],[146,45],[145,46],[147,47],[148,48],[149,49],[150,50],[151,51],[152,52],[153,53],[154,54],[155,55],[156,56],[157,57],[158,58],[159,59],[64,2],[65,2],[66,2],[105,60],[106,2],[107,2],[108,47],[160,61],[161,62],[83,63],[93,64],[82,63],[103,65],[74,66],[73,67],[102,1],[96,68],[101,69],[76,70],[90,71],[75,72],[99,73],[71,74],[70,1],[100,75],[72,76],[77,77],[78,2],[81,77],[68,2],[104,78],[94,79],[85,80],[86,81],[88,82],[84,83],[87,84],[97,1],[79,85],[80,86],[89,87],[69,88],[92,79],[91,77],[95,2],[98,89],[55,90],[50,2],[56,91],[52,2],[47,92],[49,2],[54,2],[51,2],[46,2],[48,2],[53,2],[200,2],[201,2],[202,2],[203,2],[204,2],[206,93],[205,2],[221,94],[220,95],[211,96],[212,97],[219,98],[213,97],[214,96],[215,96],[216,96],[217,99],[210,100],[218,95],[209,2],[222,101],[208,2],[207,2]],"latestChangedDtsFile":"./dist/database.d.ts","version":"5.9.3"}
|