@devflow-tools/database 0.17.3 → 0.17.6
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/README.md +24 -48
- package/__tests__/database.semantic-resolution.test.ts +87 -0
- package/dist/database.d.ts +5 -0
- package/dist/database.js +101 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -1
- package/dist/semantic-resolution.d.ts +30 -0
- package/dist/semantic-resolution.js +156 -0
- package/package.json +2 -2
- package/src/database.ts +125 -0
- package/src/index.ts +10 -0
- package/src/semantic-resolution.ts +181 -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.17.6](https://github.com/shilongfeicool/dev-flow/compare/v0.17.5...v0.17.6) (2026-08-04)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @devflow-tools/database
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.17.4](https://github.com/shilongfeicool/dev-flow/compare/v0.17.3...v0.17.4) (2026-08-04)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **semantic:** persist resolution revisions ([cffa6ca](https://github.com/shilongfeicool/dev-flow/commit/cffa6ca24fb08b54bdd8e516167895e660c6eacc))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
## [0.17.3](https://github.com/shilongfeicool/dev-flow/compare/v0.17.2...v0.17.3) (2026-08-03)
|
|
7
26
|
|
|
8
27
|
|
package/README.md
CHANGED
|
@@ -1,67 +1,43 @@
|
|
|
1
1
|
# @devflow-tools/database
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 基于 better-sqlite3 的本地 SQLite/WAL 持久化层,承载运行、检索、记忆和遥测记录。(v0.17.6)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@devflow-tools/database)
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
10
|
npm install @devflow-tools/database
|
|
9
11
|
```
|
|
10
12
|
|
|
11
|
-
##
|
|
13
|
+
## 快速开始
|
|
12
14
|
|
|
13
15
|
```typescript
|
|
14
16
|
import { DevFlowDatabase } from '@devflow-tools/database';
|
|
15
17
|
|
|
16
|
-
const db = new DevFlowDatabase(
|
|
18
|
+
const db = new DevFlowDatabase(process.cwd());
|
|
19
|
+
console.log(db);
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 公共 API / 命令
|
|
17
23
|
|
|
18
|
-
|
|
19
|
-
db.insertToolCallEvent({
|
|
20
|
-
eventId: 'evt:123',
|
|
21
|
-
executionId: 'exec:456',
|
|
22
|
-
toolName: 'bash',
|
|
23
|
-
command: 'npm test',
|
|
24
|
-
exitCode: 0,
|
|
25
|
-
durationMs: 1200,
|
|
26
|
-
});
|
|
24
|
+
`DevFlowDatabase`、`openGlobalDevFlowDatabase`、`openGlobalDevFlowReadOnlyDatabase` 及 task runtime、work queue、retrieval ledger、workflow worker 类型/映射器。
|
|
27
25
|
|
|
28
|
-
// 查询事件
|
|
29
|
-
const events = db.listToolCallEvents('exec:456');
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
## 配置与运行时
|
|
28
|
+
|
|
29
|
+
需要 Node.js 原生 better-sqlite3 能力;数据库文件默认位于项目 `.devflow/` 目录或全局 DevFlow 数据目录。
|
|
30
|
+
|
|
31
|
+
## 版本与兼容性
|
|
32
|
+
|
|
33
|
+
- 当前包版本:`0.17.6`
|
|
34
|
+
- Node.js:未在 package manifest 声明更高版本时,使用 Node.js 18+;原生 SQLite/Playwright 能力请按对应依赖安装
|
|
35
|
+
- workspace 内部包应使用同一 DevFlow minor/patch 版本,避免类型和数据库 schema 不一致
|
|
36
|
+
|
|
37
|
+
## 相关链接
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
- **SQLite + WAL 模式** — 高并发读写的本地持久化存储
|
|
38
|
-
- **runs 表** — AI agent 执行运行记录
|
|
39
|
-
- **tool_call_events 表** — 每次 tool 调用的详细事件(exitCode、stderr、output、durationMs)
|
|
40
|
-
- **skill_executions 表** — skill 执行生命周期管理(start → running → completed/failed)
|
|
41
|
-
- **project_stats 表** — 项目维度的聚合统计
|
|
42
|
-
- **settings 表** — KV 配置存储
|
|
43
|
-
|
|
44
|
-
## Tables
|
|
45
|
-
|
|
46
|
-
| 表名 | 说明 |
|
|
47
|
-
|------|------|
|
|
48
|
-
| `runs` | Agent 运行记录(id、source、tool、status、token_used) |
|
|
49
|
-
| `tool_call_events` | Tool 调用事件(event_id、execution_id、tool_name、command、exit_code、stderr、output、is_mcp_tool) |
|
|
50
|
-
| `skill_executions` | Skill 执行记录(execution_id、skill_name、status、total_tool_calls、mcp_compliance_rate) |
|
|
51
|
-
| `project_stats` | 项目聚合统计(total_runs、successful_runs、total_tokens) |
|
|
52
|
-
| `settings` | KV 配置(key、value) |
|
|
53
|
-
|
|
54
|
-
## API
|
|
55
|
-
|
|
56
|
-
- `new DevFlowDatabase(projectRoot)` — 构造函数,自动创建 `.devflow/devflow.db` 并初始化 schema
|
|
57
|
-
- `.insertToolCallEvent(data)` — 记录工具调用事件
|
|
58
|
-
- `.updateToolCallEvent(eventId, updates)` — 更新事件(如回填 output)
|
|
59
|
-
- `.listToolCallEvents(executionId)` — 列出某次执行的所有事件
|
|
60
|
-
- `.insertSkillExecution(data)` — 创建 skill 执行记录
|
|
61
|
-
- `.updateSkillExecution(id, data)` — 更新 skill 执行状态
|
|
62
|
-
- `.getProjectStats(root)` — 获取项目统计
|
|
63
|
-
- `.upsertProjectStats(root, data)` — 更新或插入项目统计
|
|
64
|
-
- `.getSetting(key)` / `.setSetting(key, value)` — KV 配置读写
|
|
39
|
+
- [DevFlow 仓库](https://github.com/shilongfeicool/dev-flow)
|
|
40
|
+
- [问题反馈](https://github.com/shilongfeicool/dev-flow/issues)
|
|
65
41
|
|
|
66
42
|
## License
|
|
67
43
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { DevFlowDatabase } from '../src/database';
|
|
6
|
+
import type { SemanticResolutionRecord } from '../src/semantic-resolution';
|
|
7
|
+
|
|
8
|
+
describe('DevFlowDatabase semantic resolution persistence', () => {
|
|
9
|
+
let directory: string;
|
|
10
|
+
let database: DevFlowDatabase;
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
directory = mkdtempSync(join(tmpdir(), 'devflow-semantic-resolution-'));
|
|
14
|
+
database = new DevFlowDatabase(directory);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
database.close();
|
|
19
|
+
rmSync(directory, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('appends, lists, and returns the latest immutable revision', () => {
|
|
23
|
+
const provisional = resolution();
|
|
24
|
+
const resolved = resolution({
|
|
25
|
+
frameHash: 'b'.repeat(64),
|
|
26
|
+
artifactHash: 'artifact:2',
|
|
27
|
+
artifactRevision: 2,
|
|
28
|
+
supersedesFrameHash: provisional.frameHash,
|
|
29
|
+
state: 'resolved',
|
|
30
|
+
frame: { frameHash: 'b'.repeat(64), state: 'resolved' },
|
|
31
|
+
createdAt: 2,
|
|
32
|
+
});
|
|
33
|
+
expect(database.appendSemanticResolution(provisional)).toBe(true);
|
|
34
|
+
expect(database.appendSemanticResolution(resolved)).toBe(true);
|
|
35
|
+
expect(database.listSemanticResolutions('/project', 'session:1', 'turn:1'))
|
|
36
|
+
.toEqual([provisional, resolved]);
|
|
37
|
+
expect(database.getLatestSemanticResolution('/project', 'session:1', 'turn:1'))
|
|
38
|
+
.toEqual(resolved);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('makes identical replay idempotent and rejects hash conflicts', () => {
|
|
42
|
+
const record = resolution();
|
|
43
|
+
expect(database.appendSemanticResolution(record)).toBe(true);
|
|
44
|
+
expect(database.appendSemanticResolution(record)).toBe(false);
|
|
45
|
+
expect(() => database.appendSemanticResolution({
|
|
46
|
+
...record,
|
|
47
|
+
durationMs: 9,
|
|
48
|
+
})).toThrow(`SEMANTIC_RESOLUTION_HASH_CONFLICT:${record.frameHash}`);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('rejects another frame at the same artifact revision', () => {
|
|
52
|
+
const record = resolution();
|
|
53
|
+
database.appendSemanticResolution(record);
|
|
54
|
+
expect(() => database.appendSemanticResolution({
|
|
55
|
+
...record,
|
|
56
|
+
frameHash: 'c'.repeat(64),
|
|
57
|
+
frame: { frameHash: 'c'.repeat(64), state: 'provisional' },
|
|
58
|
+
})).toThrow('SEMANTIC_RESOLUTION_REVISION_CONFLICT:turn:1:1');
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
function resolution(overrides: Partial<SemanticResolutionRecord> = {}): SemanticResolutionRecord {
|
|
63
|
+
const frameHash = overrides.frameHash ?? 'a'.repeat(64);
|
|
64
|
+
return {
|
|
65
|
+
frameHash,
|
|
66
|
+
projectRoot: '/project',
|
|
67
|
+
projectId: 'project:1',
|
|
68
|
+
hostId: 'claude-code',
|
|
69
|
+
sessionId: 'session:1',
|
|
70
|
+
turnId: 'turn:1',
|
|
71
|
+
requestId: 'request:1',
|
|
72
|
+
sourceHash: 'source:1',
|
|
73
|
+
artifactHash: 'artifact:1',
|
|
74
|
+
artifactRevision: 1,
|
|
75
|
+
state: 'provisional',
|
|
76
|
+
generatedBy: 'deterministic',
|
|
77
|
+
routeCatalogVersion: 'catalog.v1',
|
|
78
|
+
thresholdVersion: 'threshold.v1',
|
|
79
|
+
route: { status: 'unavailable' },
|
|
80
|
+
sampling: { attempted: false, status: 'not_needed' },
|
|
81
|
+
conflicts: [],
|
|
82
|
+
frame: { frameHash, state: 'provisional' },
|
|
83
|
+
durationMs: 0,
|
|
84
|
+
createdAt: 1,
|
|
85
|
+
...overrides,
|
|
86
|
+
};
|
|
87
|
+
}
|
package/dist/database.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { type CreateWorkflowWorkerInput, type EnqueueWorkflowMergeInput, type Tr
|
|
|
7
7
|
import type { RetrievalLedgerEventRecord } from './retrieval-ledger';
|
|
8
8
|
import { type ChannelQueryPlanRecord, type TaskIntentArtifactRecord, type TerminalTransitionRecord, type ToolNameResolutionRecord, type TranscriptCheckpointRecord } from './task-semantic-control';
|
|
9
9
|
import { type TaskRuntimeEventRecord, type TaskRuntimeSnapshotRecord } from './task-runtime';
|
|
10
|
+
import { type SemanticResolutionRecord } from './semantic-resolution';
|
|
10
11
|
export interface BenchmarkReportRecord {
|
|
11
12
|
runId: string;
|
|
12
13
|
suiteId: string;
|
|
@@ -467,6 +468,10 @@ export declare class DevFlowDatabase {
|
|
|
467
468
|
sessionId: string;
|
|
468
469
|
sourceHash: string;
|
|
469
470
|
}): TaskIntentArtifactRecord | null;
|
|
471
|
+
appendSemanticResolution(record: SemanticResolutionRecord): boolean;
|
|
472
|
+
getSemanticResolution(frameHash: string): SemanticResolutionRecord | null;
|
|
473
|
+
getLatestSemanticResolution(projectRoot: string, sessionId: string, turnId: string): SemanticResolutionRecord | null;
|
|
474
|
+
listSemanticResolutions(projectRoot: string, sessionId: string, turnId: string): SemanticResolutionRecord[];
|
|
470
475
|
listLatestTaskIntentArtifacts(projectRoot: string, sessionId: string): TaskIntentArtifactRecord[];
|
|
471
476
|
appendChannelQueryPlan(record: ChannelQueryPlanRecord): ChannelQueryPlanRecord;
|
|
472
477
|
getChannelQueryPlan(planHash: string): ChannelQueryPlanRecord | null;
|
package/dist/database.js
CHANGED
|
@@ -16,6 +16,7 @@ const learning_candidates_1 = require("./learning-candidates");
|
|
|
16
16
|
const workflow_workers_1 = require("./workflow-workers");
|
|
17
17
|
const task_semantic_control_1 = require("./task-semantic-control");
|
|
18
18
|
const task_runtime_1 = require("./task-runtime");
|
|
19
|
+
const semantic_resolution_1 = require("./semantic-resolution");
|
|
19
20
|
const CONTEXT_REQUIRED_SKILLS = new Set([
|
|
20
21
|
'react', 'vue', 'nest', 'nextjs', 'graphql', 'typescript',
|
|
21
22
|
]);
|
|
@@ -399,6 +400,35 @@ class DevFlowDatabase {
|
|
|
399
400
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_task_intent_source
|
|
400
401
|
ON devflow_task_intent_artifacts(project_root, session_id, source_hash, version);
|
|
401
402
|
|
|
403
|
+
CREATE TABLE IF NOT EXISTS devflow_semantic_resolutions (
|
|
404
|
+
frame_hash TEXT PRIMARY KEY,
|
|
405
|
+
project_root TEXT NOT NULL,
|
|
406
|
+
project_id TEXT NOT NULL,
|
|
407
|
+
host_id TEXT NOT NULL,
|
|
408
|
+
session_id TEXT NOT NULL,
|
|
409
|
+
turn_id TEXT NOT NULL,
|
|
410
|
+
request_id TEXT NOT NULL,
|
|
411
|
+
source_hash TEXT NOT NULL,
|
|
412
|
+
artifact_hash TEXT NOT NULL,
|
|
413
|
+
artifact_revision INTEGER NOT NULL CHECK(artifact_revision > 0),
|
|
414
|
+
supersedes_frame_hash TEXT,
|
|
415
|
+
state TEXT NOT NULL CHECK(state IN ('provisional', 'resolved', 'abstained', 'unavailable')),
|
|
416
|
+
generated_by TEXT NOT NULL CHECK(generated_by IN ('deterministic', 'embedding_router', 'host_semantic', 'hybrid')),
|
|
417
|
+
model_id TEXT,
|
|
418
|
+
model_revision TEXT,
|
|
419
|
+
route_catalog_version TEXT NOT NULL,
|
|
420
|
+
threshold_version TEXT NOT NULL,
|
|
421
|
+
route_json TEXT NOT NULL,
|
|
422
|
+
sampling_json TEXT NOT NULL,
|
|
423
|
+
conflicts_json TEXT NOT NULL,
|
|
424
|
+
frame_json TEXT NOT NULL,
|
|
425
|
+
duration_ms INTEGER NOT NULL CHECK(duration_ms >= 0),
|
|
426
|
+
created_at INTEGER NOT NULL,
|
|
427
|
+
UNIQUE(project_root, session_id, turn_id, artifact_revision)
|
|
428
|
+
);
|
|
429
|
+
CREATE INDEX IF NOT EXISTS idx_semantic_resolution_latest
|
|
430
|
+
ON devflow_semantic_resolutions(project_root, session_id, turn_id, artifact_revision DESC);
|
|
431
|
+
|
|
402
432
|
CREATE TABLE IF NOT EXISTS devflow_channel_query_plans (
|
|
403
433
|
plan_hash TEXT PRIMARY KEY,
|
|
404
434
|
source_intent_hash TEXT NOT NULL,
|
|
@@ -3356,6 +3386,77 @@ class DevFlowDatabase {
|
|
|
3356
3386
|
`).get(input.projectRoot, input.sessionId, input.sourceHash);
|
|
3357
3387
|
return row ? (0, task_semantic_control_1.mapTaskIntentArtifactRow)(row) : null;
|
|
3358
3388
|
}
|
|
3389
|
+
appendSemanticResolution(record) {
|
|
3390
|
+
(0, semantic_resolution_1.assertSemanticResolutionRecord)(record);
|
|
3391
|
+
const existing = this.getSemanticResolution(record.frameHash);
|
|
3392
|
+
if (existing) {
|
|
3393
|
+
if ((0, semantic_resolution_1.stableSemanticResolutionJson)(existing) !== (0, semantic_resolution_1.stableSemanticResolutionJson)(record)) {
|
|
3394
|
+
throw new Error(`SEMANTIC_RESOLUTION_HASH_CONFLICT:${record.frameHash}`);
|
|
3395
|
+
}
|
|
3396
|
+
return false;
|
|
3397
|
+
}
|
|
3398
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
3399
|
+
try {
|
|
3400
|
+
const conflicting = this.db.prepare(`
|
|
3401
|
+
SELECT frame_hash FROM devflow_semantic_resolutions
|
|
3402
|
+
WHERE project_root = ? AND session_id = ? AND turn_id = ? AND artifact_revision = ?
|
|
3403
|
+
`).get(record.projectRoot, record.sessionId, record.turnId, record.artifactRevision);
|
|
3404
|
+
if (conflicting) {
|
|
3405
|
+
throw new Error(`SEMANTIC_RESOLUTION_REVISION_CONFLICT:${record.turnId}:${record.artifactRevision}`);
|
|
3406
|
+
}
|
|
3407
|
+
if (record.supersedesFrameHash) {
|
|
3408
|
+
const superseded = this.getSemanticResolution(record.supersedesFrameHash);
|
|
3409
|
+
if (!superseded) {
|
|
3410
|
+
throw new Error(`SEMANTIC_RESOLUTION_SUPERSEDED_NOT_FOUND:${record.supersedesFrameHash}`);
|
|
3411
|
+
}
|
|
3412
|
+
if (superseded.projectRoot !== record.projectRoot
|
|
3413
|
+
|| superseded.sessionId !== record.sessionId
|
|
3414
|
+
|| superseded.turnId !== record.turnId
|
|
3415
|
+
|| superseded.artifactRevision >= record.artifactRevision) {
|
|
3416
|
+
throw new Error('SEMANTIC_RESOLUTION_SUPERSEDES_INVALID');
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
this.db.prepare(`
|
|
3420
|
+
INSERT INTO devflow_semantic_resolutions (
|
|
3421
|
+
frame_hash, project_root, project_id, host_id, session_id, turn_id, request_id,
|
|
3422
|
+
source_hash, artifact_hash, artifact_revision, supersedes_frame_hash, state,
|
|
3423
|
+
generated_by, model_id, model_revision, route_catalog_version, threshold_version,
|
|
3424
|
+
route_json, sampling_json, conflicts_json, frame_json, duration_ms, created_at
|
|
3425
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3426
|
+
`).run(record.frameHash, record.projectRoot, record.projectId, record.hostId, record.sessionId, record.turnId, record.requestId, record.sourceHash, record.artifactHash, record.artifactRevision, record.supersedesFrameHash ?? null, record.state, record.generatedBy, record.modelId ?? null, record.modelRevision ?? null, record.routeCatalogVersion, record.thresholdVersion, (0, semantic_resolution_1.stableSemanticResolutionJson)(record.route), (0, semantic_resolution_1.stableSemanticResolutionJson)(record.sampling), (0, semantic_resolution_1.stableSemanticResolutionJson)(record.conflicts), (0, semantic_resolution_1.stableSemanticResolutionJson)(record.frame), record.durationMs, record.createdAt);
|
|
3427
|
+
this.db.exec('COMMIT');
|
|
3428
|
+
return true;
|
|
3429
|
+
}
|
|
3430
|
+
catch (error) {
|
|
3431
|
+
try {
|
|
3432
|
+
this.db.exec('ROLLBACK');
|
|
3433
|
+
}
|
|
3434
|
+
catch { }
|
|
3435
|
+
throw error;
|
|
3436
|
+
}
|
|
3437
|
+
}
|
|
3438
|
+
getSemanticResolution(frameHash) {
|
|
3439
|
+
const row = this.db.prepare(`
|
|
3440
|
+
SELECT * FROM devflow_semantic_resolutions WHERE frame_hash = ?
|
|
3441
|
+
`).get(frameHash);
|
|
3442
|
+
return row ? (0, semantic_resolution_1.mapSemanticResolutionRow)(row) : null;
|
|
3443
|
+
}
|
|
3444
|
+
getLatestSemanticResolution(projectRoot, sessionId, turnId) {
|
|
3445
|
+
const row = this.db.prepare(`
|
|
3446
|
+
SELECT * FROM devflow_semantic_resolutions
|
|
3447
|
+
WHERE project_root = ? AND session_id = ? AND turn_id = ?
|
|
3448
|
+
ORDER BY artifact_revision DESC, created_at DESC LIMIT 1
|
|
3449
|
+
`).get(projectRoot, sessionId, turnId);
|
|
3450
|
+
return row ? (0, semantic_resolution_1.mapSemanticResolutionRow)(row) : null;
|
|
3451
|
+
}
|
|
3452
|
+
listSemanticResolutions(projectRoot, sessionId, turnId) {
|
|
3453
|
+
return this.db.prepare(`
|
|
3454
|
+
SELECT * FROM devflow_semantic_resolutions
|
|
3455
|
+
WHERE project_root = ? AND session_id = ? AND turn_id = ?
|
|
3456
|
+
ORDER BY artifact_revision ASC, created_at ASC
|
|
3457
|
+
`).all(projectRoot, sessionId, turnId)
|
|
3458
|
+
.map(semantic_resolution_1.mapSemanticResolutionRow);
|
|
3459
|
+
}
|
|
3359
3460
|
listLatestTaskIntentArtifacts(projectRoot, sessionId) {
|
|
3360
3461
|
return this.db.prepare(`
|
|
3361
3462
|
SELECT artifact.* FROM devflow_task_intent_artifacts artifact
|
package/dist/index.d.ts
CHANGED
|
@@ -16,3 +16,5 @@ export type { CreateWorkflowWorkerInput, EnqueueWorkflowMergeInput, TransitionWo
|
|
|
16
16
|
export { mapLearningCandidateRow, mapLearningEvidenceRow, mapLearningVersionRow, stableLearningJson, } from './learning-candidates';
|
|
17
17
|
export type { AddLearningCandidateEvidenceInput, LearningCandidateEvidenceRecord, LearningCandidateKind, LearningCandidateRecord, LearningCandidateState, LearningCandidateVersionRecord, LearningEvidencePolarity, LearningOutcomeState, TransitionLearningCandidateInput, UpsertLearningCandidateInput, } from './learning-candidates';
|
|
18
18
|
export type { SessionObligationKind, SessionObligationRecord, SessionObligationState, } from './obligation-ledger';
|
|
19
|
+
export { assertSemanticResolutionRecord, mapSemanticResolutionRow, stableSemanticResolutionJson, } from './semantic-resolution';
|
|
20
|
+
export type { PersistedSemanticGeneratedBy, PersistedSemanticResolutionState, SemanticResolutionRecord, } from './semantic-resolution';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.stableLearningJson = exports.mapLearningVersionRow = exports.mapLearningEvidenceRow = exports.mapLearningCandidateRow = exports.mapWorkflowWorkerRow = exports.mapWorkflowWorkerEventRow = exports.mapWorkflowMergeRow = exports.TERMINAL_WORKFLOW_WORKER_STATES = exports.LEGAL_WORKFLOW_WORKER_TRANSITIONS = exports.stableTaskRuntimeJson = exports.stableTaskRuntimeHash = exports.mapTaskRuntimeSnapshotRow = exports.mapTaskRuntimeEventRow = exports.stableSemanticJson = exports.mapTranscriptCheckpointRow = exports.mapToolNameResolutionRow = exports.mapTerminalTransitionRow = exports.mapTaskIntentArtifactRow = exports.mapChannelQueryPlanRow = exports.assertTaskIdentity = exports.normalizeTurnId = exports.mapSessionObligationRow = exports.isRetrievalSessionState = exports.RETRIEVAL_MAX_CYCLES = exports.serializeHostActionReport = exports.mapHostActionRow = exports.isHostActionState = exports.hostActionReportsEqual = exports.openGlobalDevFlowReadOnlyDatabase = exports.openGlobalDevFlowDatabase = exports.getGlobalDevFlowDbPath = exports.DevFlowDatabase = void 0;
|
|
3
|
+
exports.stableSemanticResolutionJson = exports.mapSemanticResolutionRow = exports.assertSemanticResolutionRecord = exports.stableLearningJson = exports.mapLearningVersionRow = exports.mapLearningEvidenceRow = exports.mapLearningCandidateRow = exports.mapWorkflowWorkerRow = exports.mapWorkflowWorkerEventRow = exports.mapWorkflowMergeRow = exports.TERMINAL_WORKFLOW_WORKER_STATES = exports.LEGAL_WORKFLOW_WORKER_TRANSITIONS = exports.stableTaskRuntimeJson = exports.stableTaskRuntimeHash = exports.mapTaskRuntimeSnapshotRow = exports.mapTaskRuntimeEventRow = exports.stableSemanticJson = exports.mapTranscriptCheckpointRow = exports.mapToolNameResolutionRow = exports.mapTerminalTransitionRow = exports.mapTaskIntentArtifactRow = exports.mapChannelQueryPlanRow = exports.assertTaskIdentity = exports.normalizeTurnId = exports.mapSessionObligationRow = exports.isRetrievalSessionState = exports.RETRIEVAL_MAX_CYCLES = exports.serializeHostActionReport = exports.mapHostActionRow = exports.isHostActionState = exports.hostActionReportsEqual = exports.openGlobalDevFlowReadOnlyDatabase = exports.openGlobalDevFlowDatabase = exports.getGlobalDevFlowDbPath = exports.DevFlowDatabase = void 0;
|
|
4
4
|
var database_1 = require("./database");
|
|
5
5
|
Object.defineProperty(exports, "DevFlowDatabase", { enumerable: true, get: function () { return database_1.DevFlowDatabase; } });
|
|
6
6
|
Object.defineProperty(exports, "getGlobalDevFlowDbPath", { enumerable: true, get: function () { return database_1.getGlobalDevFlowDbPath; } });
|
|
@@ -41,3 +41,7 @@ Object.defineProperty(exports, "mapLearningCandidateRow", { enumerable: true, ge
|
|
|
41
41
|
Object.defineProperty(exports, "mapLearningEvidenceRow", { enumerable: true, get: function () { return learning_candidates_1.mapLearningEvidenceRow; } });
|
|
42
42
|
Object.defineProperty(exports, "mapLearningVersionRow", { enumerable: true, get: function () { return learning_candidates_1.mapLearningVersionRow; } });
|
|
43
43
|
Object.defineProperty(exports, "stableLearningJson", { enumerable: true, get: function () { return learning_candidates_1.stableLearningJson; } });
|
|
44
|
+
var semantic_resolution_1 = require("./semantic-resolution");
|
|
45
|
+
Object.defineProperty(exports, "assertSemanticResolutionRecord", { enumerable: true, get: function () { return semantic_resolution_1.assertSemanticResolutionRecord; } });
|
|
46
|
+
Object.defineProperty(exports, "mapSemanticResolutionRow", { enumerable: true, get: function () { return semantic_resolution_1.mapSemanticResolutionRow; } });
|
|
47
|
+
Object.defineProperty(exports, "stableSemanticResolutionJson", { enumerable: true, get: function () { return semantic_resolution_1.stableSemanticResolutionJson; } });
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type PersistedSemanticResolutionState = 'provisional' | 'resolved' | 'abstained' | 'unavailable';
|
|
2
|
+
export type PersistedSemanticGeneratedBy = 'deterministic' | 'embedding_router' | 'host_semantic' | 'hybrid';
|
|
3
|
+
export interface SemanticResolutionRecord {
|
|
4
|
+
frameHash: string;
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
projectId: string;
|
|
7
|
+
hostId: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
turnId: string;
|
|
10
|
+
requestId: string;
|
|
11
|
+
sourceHash: string;
|
|
12
|
+
artifactHash: string;
|
|
13
|
+
artifactRevision: number;
|
|
14
|
+
supersedesFrameHash?: string;
|
|
15
|
+
state: PersistedSemanticResolutionState;
|
|
16
|
+
generatedBy: PersistedSemanticGeneratedBy;
|
|
17
|
+
modelId?: string;
|
|
18
|
+
modelRevision?: string;
|
|
19
|
+
routeCatalogVersion: string;
|
|
20
|
+
thresholdVersion: string;
|
|
21
|
+
route: Record<string, unknown>;
|
|
22
|
+
sampling: Record<string, unknown>;
|
|
23
|
+
conflicts: Array<Record<string, unknown>>;
|
|
24
|
+
frame: Record<string, unknown>;
|
|
25
|
+
durationMs: number;
|
|
26
|
+
createdAt: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function assertSemanticResolutionRecord(record: SemanticResolutionRecord): void;
|
|
29
|
+
export declare function stableSemanticResolutionJson(value: unknown): string;
|
|
30
|
+
export declare function mapSemanticResolutionRow(row: Record<string, unknown>): SemanticResolutionRecord;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertSemanticResolutionRecord = assertSemanticResolutionRecord;
|
|
4
|
+
exports.stableSemanticResolutionJson = stableSemanticResolutionJson;
|
|
5
|
+
exports.mapSemanticResolutionRow = mapSemanticResolutionRow;
|
|
6
|
+
const STATES = new Set([
|
|
7
|
+
'provisional', 'resolved', 'abstained', 'unavailable',
|
|
8
|
+
]);
|
|
9
|
+
const GENERATORS = new Set([
|
|
10
|
+
'deterministic', 'embedding_router', 'host_semantic', 'hybrid',
|
|
11
|
+
]);
|
|
12
|
+
function assertSemanticResolutionRecord(record) {
|
|
13
|
+
for (const [field, value] of Object.entries({
|
|
14
|
+
frameHash: record.frameHash,
|
|
15
|
+
projectRoot: record.projectRoot,
|
|
16
|
+
projectId: record.projectId,
|
|
17
|
+
hostId: record.hostId,
|
|
18
|
+
sessionId: record.sessionId,
|
|
19
|
+
turnId: record.turnId,
|
|
20
|
+
requestId: record.requestId,
|
|
21
|
+
sourceHash: record.sourceHash,
|
|
22
|
+
artifactHash: record.artifactHash,
|
|
23
|
+
routeCatalogVersion: record.routeCatalogVersion,
|
|
24
|
+
thresholdVersion: record.thresholdVersion,
|
|
25
|
+
})) {
|
|
26
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
27
|
+
throw new Error(`SEMANTIC_RESOLUTION_INVALID:${field}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (!Number.isSafeInteger(record.artifactRevision) || record.artifactRevision < 1) {
|
|
31
|
+
throw new Error('SEMANTIC_RESOLUTION_INVALID:artifactRevision');
|
|
32
|
+
}
|
|
33
|
+
if (!Number.isSafeInteger(record.durationMs) || record.durationMs < 0
|
|
34
|
+
|| !Number.isSafeInteger(record.createdAt) || record.createdAt < 0) {
|
|
35
|
+
throw new Error('SEMANTIC_RESOLUTION_INVALID:timing');
|
|
36
|
+
}
|
|
37
|
+
if (!STATES.has(record.state) || !GENERATORS.has(record.generatedBy)) {
|
|
38
|
+
throw new Error('SEMANTIC_RESOLUTION_INVALID:enum');
|
|
39
|
+
}
|
|
40
|
+
if (record.frame.frameHash !== record.frameHash) {
|
|
41
|
+
throw new Error('SEMANTIC_RESOLUTION_FRAME_HASH_MISMATCH');
|
|
42
|
+
}
|
|
43
|
+
stableSemanticResolutionJson(record.route);
|
|
44
|
+
stableSemanticResolutionJson(record.sampling);
|
|
45
|
+
stableSemanticResolutionJson(record.conflicts);
|
|
46
|
+
stableSemanticResolutionJson(record.frame);
|
|
47
|
+
}
|
|
48
|
+
function stableSemanticResolutionJson(value) {
|
|
49
|
+
return JSON.stringify(canonicalize(value));
|
|
50
|
+
}
|
|
51
|
+
function mapSemanticResolutionRow(row) {
|
|
52
|
+
const state = requiredString(row.state, 'state');
|
|
53
|
+
const generatedBy = requiredString(row.generated_by, 'generated_by');
|
|
54
|
+
if (!STATES.has(state) || !GENERATORS.has(generatedBy)) {
|
|
55
|
+
throw new Error('SEMANTIC_RESOLUTION_ROW_INVALID:enum');
|
|
56
|
+
}
|
|
57
|
+
const result = {
|
|
58
|
+
frameHash: requiredString(row.frame_hash, 'frame_hash'),
|
|
59
|
+
projectRoot: requiredString(row.project_root, 'project_root'),
|
|
60
|
+
projectId: requiredString(row.project_id, 'project_id'),
|
|
61
|
+
hostId: requiredString(row.host_id, 'host_id'),
|
|
62
|
+
sessionId: requiredString(row.session_id, 'session_id'),
|
|
63
|
+
turnId: requiredString(row.turn_id, 'turn_id'),
|
|
64
|
+
requestId: requiredString(row.request_id, 'request_id'),
|
|
65
|
+
sourceHash: requiredString(row.source_hash, 'source_hash'),
|
|
66
|
+
artifactHash: requiredString(row.artifact_hash, 'artifact_hash'),
|
|
67
|
+
artifactRevision: requiredPositiveInteger(row.artifact_revision, 'artifact_revision'),
|
|
68
|
+
...(optionalString(row.supersedes_frame_hash)
|
|
69
|
+
? { supersedesFrameHash: optionalString(row.supersedes_frame_hash) }
|
|
70
|
+
: {}),
|
|
71
|
+
state,
|
|
72
|
+
generatedBy,
|
|
73
|
+
...(optionalString(row.model_id) ? { modelId: optionalString(row.model_id) } : {}),
|
|
74
|
+
...(optionalString(row.model_revision) ? { modelRevision: optionalString(row.model_revision) } : {}),
|
|
75
|
+
routeCatalogVersion: requiredString(row.route_catalog_version, 'route_catalog_version'),
|
|
76
|
+
thresholdVersion: requiredString(row.threshold_version, 'threshold_version'),
|
|
77
|
+
route: parseObject(row.route_json, 'route_json'),
|
|
78
|
+
sampling: parseObject(row.sampling_json, 'sampling_json'),
|
|
79
|
+
conflicts: parseObjectArray(row.conflicts_json, 'conflicts_json'),
|
|
80
|
+
frame: parseObject(row.frame_json, 'frame_json'),
|
|
81
|
+
durationMs: requiredNonNegativeInteger(row.duration_ms, 'duration_ms'),
|
|
82
|
+
createdAt: requiredNonNegativeInteger(row.created_at, 'created_at'),
|
|
83
|
+
};
|
|
84
|
+
assertSemanticResolutionRecord(result);
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
function canonicalize(value) {
|
|
88
|
+
if (value === undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
91
|
+
return value;
|
|
92
|
+
if (typeof value === 'number') {
|
|
93
|
+
if (!Number.isFinite(value) || Object.is(value, -0))
|
|
94
|
+
throw new Error('SEMANTIC_RESOLUTION_JSON_INVALID');
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
if (Array.isArray(value))
|
|
98
|
+
return value.map(item => {
|
|
99
|
+
if (item === undefined)
|
|
100
|
+
throw new Error('SEMANTIC_RESOLUTION_JSON_INVALID');
|
|
101
|
+
return canonicalize(item);
|
|
102
|
+
});
|
|
103
|
+
if (!value || typeof value !== 'object' || Object.getPrototypeOf(value) !== Object.prototype) {
|
|
104
|
+
throw new Error('SEMANTIC_RESOLUTION_JSON_INVALID');
|
|
105
|
+
}
|
|
106
|
+
const record = value;
|
|
107
|
+
return Object.fromEntries(Object.keys(record).sort()
|
|
108
|
+
.filter(key => record[key] !== undefined)
|
|
109
|
+
.map(key => [key, canonicalize(record[key])]));
|
|
110
|
+
}
|
|
111
|
+
function parseObject(value, field) {
|
|
112
|
+
const parsed = parseJson(value, field);
|
|
113
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
114
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
115
|
+
}
|
|
116
|
+
return parsed;
|
|
117
|
+
}
|
|
118
|
+
function parseObjectArray(value, field) {
|
|
119
|
+
const parsed = parseJson(value, field);
|
|
120
|
+
if (!Array.isArray(parsed) || parsed.some(item => !item || typeof item !== 'object' || Array.isArray(item))) {
|
|
121
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
122
|
+
}
|
|
123
|
+
return parsed;
|
|
124
|
+
}
|
|
125
|
+
function parseJson(value, field) {
|
|
126
|
+
if (typeof value !== 'string')
|
|
127
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
128
|
+
try {
|
|
129
|
+
return JSON.parse(value);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function requiredString(value, field) {
|
|
136
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
137
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
function optionalString(value) {
|
|
142
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
143
|
+
}
|
|
144
|
+
function requiredPositiveInteger(value, field) {
|
|
145
|
+
const result = requiredNonNegativeInteger(value, field);
|
|
146
|
+
if (result < 1)
|
|
147
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
function requiredNonNegativeInteger(value, field) {
|
|
151
|
+
const result = Number(value);
|
|
152
|
+
if (!Number.isSafeInteger(result) || result < 0) {
|
|
153
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/database",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.6",
|
|
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": "669fea3aa72aa3fde14ed50d24c1fec4dfac088f"
|
|
17
17
|
}
|
package/src/database.ts
CHANGED
|
@@ -92,6 +92,12 @@ import {
|
|
|
92
92
|
type TaskRuntimeEventRecord,
|
|
93
93
|
type TaskRuntimeSnapshotRecord,
|
|
94
94
|
} from './task-runtime';
|
|
95
|
+
import {
|
|
96
|
+
assertSemanticResolutionRecord,
|
|
97
|
+
mapSemanticResolutionRow,
|
|
98
|
+
stableSemanticResolutionJson,
|
|
99
|
+
type SemanticResolutionRecord,
|
|
100
|
+
} from './semantic-resolution';
|
|
95
101
|
|
|
96
102
|
export interface BenchmarkReportRecord {
|
|
97
103
|
runId: string;
|
|
@@ -662,6 +668,35 @@ export class DevFlowDatabase {
|
|
|
662
668
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_task_intent_source
|
|
663
669
|
ON devflow_task_intent_artifacts(project_root, session_id, source_hash, version);
|
|
664
670
|
|
|
671
|
+
CREATE TABLE IF NOT EXISTS devflow_semantic_resolutions (
|
|
672
|
+
frame_hash TEXT PRIMARY KEY,
|
|
673
|
+
project_root TEXT NOT NULL,
|
|
674
|
+
project_id TEXT NOT NULL,
|
|
675
|
+
host_id TEXT NOT NULL,
|
|
676
|
+
session_id TEXT NOT NULL,
|
|
677
|
+
turn_id TEXT NOT NULL,
|
|
678
|
+
request_id TEXT NOT NULL,
|
|
679
|
+
source_hash TEXT NOT NULL,
|
|
680
|
+
artifact_hash TEXT NOT NULL,
|
|
681
|
+
artifact_revision INTEGER NOT NULL CHECK(artifact_revision > 0),
|
|
682
|
+
supersedes_frame_hash TEXT,
|
|
683
|
+
state TEXT NOT NULL CHECK(state IN ('provisional', 'resolved', 'abstained', 'unavailable')),
|
|
684
|
+
generated_by TEXT NOT NULL CHECK(generated_by IN ('deterministic', 'embedding_router', 'host_semantic', 'hybrid')),
|
|
685
|
+
model_id TEXT,
|
|
686
|
+
model_revision TEXT,
|
|
687
|
+
route_catalog_version TEXT NOT NULL,
|
|
688
|
+
threshold_version TEXT NOT NULL,
|
|
689
|
+
route_json TEXT NOT NULL,
|
|
690
|
+
sampling_json TEXT NOT NULL,
|
|
691
|
+
conflicts_json TEXT NOT NULL,
|
|
692
|
+
frame_json TEXT NOT NULL,
|
|
693
|
+
duration_ms INTEGER NOT NULL CHECK(duration_ms >= 0),
|
|
694
|
+
created_at INTEGER NOT NULL,
|
|
695
|
+
UNIQUE(project_root, session_id, turn_id, artifact_revision)
|
|
696
|
+
);
|
|
697
|
+
CREATE INDEX IF NOT EXISTS idx_semantic_resolution_latest
|
|
698
|
+
ON devflow_semantic_resolutions(project_root, session_id, turn_id, artifact_revision DESC);
|
|
699
|
+
|
|
665
700
|
CREATE TABLE IF NOT EXISTS devflow_channel_query_plans (
|
|
666
701
|
plan_hash TEXT PRIMARY KEY,
|
|
667
702
|
source_intent_hash TEXT NOT NULL,
|
|
@@ -4106,6 +4141,96 @@ export class DevFlowDatabase {
|
|
|
4106
4141
|
return row ? mapTaskIntentArtifactRow(row) : null;
|
|
4107
4142
|
}
|
|
4108
4143
|
|
|
4144
|
+
appendSemanticResolution(record: SemanticResolutionRecord): boolean {
|
|
4145
|
+
assertSemanticResolutionRecord(record);
|
|
4146
|
+
const existing = this.getSemanticResolution(record.frameHash);
|
|
4147
|
+
if (existing) {
|
|
4148
|
+
if (stableSemanticResolutionJson(existing) !== stableSemanticResolutionJson(record)) {
|
|
4149
|
+
throw new Error(`SEMANTIC_RESOLUTION_HASH_CONFLICT:${record.frameHash}`);
|
|
4150
|
+
}
|
|
4151
|
+
return false;
|
|
4152
|
+
}
|
|
4153
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
4154
|
+
try {
|
|
4155
|
+
const conflicting = this.db.prepare(`
|
|
4156
|
+
SELECT frame_hash FROM devflow_semantic_resolutions
|
|
4157
|
+
WHERE project_root = ? AND session_id = ? AND turn_id = ? AND artifact_revision = ?
|
|
4158
|
+
`).get(
|
|
4159
|
+
record.projectRoot, record.sessionId, record.turnId, record.artifactRevision,
|
|
4160
|
+
) as Record<string, unknown> | undefined;
|
|
4161
|
+
if (conflicting) {
|
|
4162
|
+
throw new Error(`SEMANTIC_RESOLUTION_REVISION_CONFLICT:${record.turnId}:${record.artifactRevision}`);
|
|
4163
|
+
}
|
|
4164
|
+
if (record.supersedesFrameHash) {
|
|
4165
|
+
const superseded = this.getSemanticResolution(record.supersedesFrameHash);
|
|
4166
|
+
if (!superseded) {
|
|
4167
|
+
throw new Error(`SEMANTIC_RESOLUTION_SUPERSEDED_NOT_FOUND:${record.supersedesFrameHash}`);
|
|
4168
|
+
}
|
|
4169
|
+
if (superseded.projectRoot !== record.projectRoot
|
|
4170
|
+
|| superseded.sessionId !== record.sessionId
|
|
4171
|
+
|| superseded.turnId !== record.turnId
|
|
4172
|
+
|| superseded.artifactRevision >= record.artifactRevision) {
|
|
4173
|
+
throw new Error('SEMANTIC_RESOLUTION_SUPERSEDES_INVALID');
|
|
4174
|
+
}
|
|
4175
|
+
}
|
|
4176
|
+
this.db.prepare(`
|
|
4177
|
+
INSERT INTO devflow_semantic_resolutions (
|
|
4178
|
+
frame_hash, project_root, project_id, host_id, session_id, turn_id, request_id,
|
|
4179
|
+
source_hash, artifact_hash, artifact_revision, supersedes_frame_hash, state,
|
|
4180
|
+
generated_by, model_id, model_revision, route_catalog_version, threshold_version,
|
|
4181
|
+
route_json, sampling_json, conflicts_json, frame_json, duration_ms, created_at
|
|
4182
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
4183
|
+
`).run(
|
|
4184
|
+
record.frameHash, record.projectRoot, record.projectId, record.hostId,
|
|
4185
|
+
record.sessionId, record.turnId, record.requestId, record.sourceHash,
|
|
4186
|
+
record.artifactHash, record.artifactRevision, record.supersedesFrameHash ?? null,
|
|
4187
|
+
record.state, record.generatedBy, record.modelId ?? null, record.modelRevision ?? null,
|
|
4188
|
+
record.routeCatalogVersion, record.thresholdVersion,
|
|
4189
|
+
stableSemanticResolutionJson(record.route), stableSemanticResolutionJson(record.sampling),
|
|
4190
|
+
stableSemanticResolutionJson(record.conflicts), stableSemanticResolutionJson(record.frame),
|
|
4191
|
+
record.durationMs, record.createdAt,
|
|
4192
|
+
);
|
|
4193
|
+
this.db.exec('COMMIT');
|
|
4194
|
+
return true;
|
|
4195
|
+
} catch (error) {
|
|
4196
|
+
try { this.db.exec('ROLLBACK'); } catch {}
|
|
4197
|
+
throw error;
|
|
4198
|
+
}
|
|
4199
|
+
}
|
|
4200
|
+
|
|
4201
|
+
getSemanticResolution(frameHash: string): SemanticResolutionRecord | null {
|
|
4202
|
+
const row = this.db.prepare(`
|
|
4203
|
+
SELECT * FROM devflow_semantic_resolutions WHERE frame_hash = ?
|
|
4204
|
+
`).get(frameHash) as Record<string, unknown> | undefined;
|
|
4205
|
+
return row ? mapSemanticResolutionRow(row) : null;
|
|
4206
|
+
}
|
|
4207
|
+
|
|
4208
|
+
getLatestSemanticResolution(
|
|
4209
|
+
projectRoot: string,
|
|
4210
|
+
sessionId: string,
|
|
4211
|
+
turnId: string,
|
|
4212
|
+
): SemanticResolutionRecord | null {
|
|
4213
|
+
const row = this.db.prepare(`
|
|
4214
|
+
SELECT * FROM devflow_semantic_resolutions
|
|
4215
|
+
WHERE project_root = ? AND session_id = ? AND turn_id = ?
|
|
4216
|
+
ORDER BY artifact_revision DESC, created_at DESC LIMIT 1
|
|
4217
|
+
`).get(projectRoot, sessionId, turnId) as Record<string, unknown> | undefined;
|
|
4218
|
+
return row ? mapSemanticResolutionRow(row) : null;
|
|
4219
|
+
}
|
|
4220
|
+
|
|
4221
|
+
listSemanticResolutions(
|
|
4222
|
+
projectRoot: string,
|
|
4223
|
+
sessionId: string,
|
|
4224
|
+
turnId: string,
|
|
4225
|
+
): SemanticResolutionRecord[] {
|
|
4226
|
+
return (this.db.prepare(`
|
|
4227
|
+
SELECT * FROM devflow_semantic_resolutions
|
|
4228
|
+
WHERE project_root = ? AND session_id = ? AND turn_id = ?
|
|
4229
|
+
ORDER BY artifact_revision ASC, created_at ASC
|
|
4230
|
+
`).all(projectRoot, sessionId, turnId) as Array<Record<string, unknown>>)
|
|
4231
|
+
.map(mapSemanticResolutionRow);
|
|
4232
|
+
}
|
|
4233
|
+
|
|
4109
4234
|
listLatestTaskIntentArtifacts(projectRoot: string, sessionId: string): TaskIntentArtifactRecord[] {
|
|
4110
4235
|
return (this.db.prepare(`
|
|
4111
4236
|
SELECT artifact.* FROM devflow_task_intent_artifacts artifact
|
package/src/index.ts
CHANGED
|
@@ -141,3 +141,13 @@ export type {
|
|
|
141
141
|
SessionObligationRecord,
|
|
142
142
|
SessionObligationState,
|
|
143
143
|
} from './obligation-ledger';
|
|
144
|
+
export {
|
|
145
|
+
assertSemanticResolutionRecord,
|
|
146
|
+
mapSemanticResolutionRow,
|
|
147
|
+
stableSemanticResolutionJson,
|
|
148
|
+
} from './semantic-resolution';
|
|
149
|
+
export type {
|
|
150
|
+
PersistedSemanticGeneratedBy,
|
|
151
|
+
PersistedSemanticResolutionState,
|
|
152
|
+
SemanticResolutionRecord,
|
|
153
|
+
} from './semantic-resolution';
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
export type PersistedSemanticResolutionState = 'provisional' | 'resolved' | 'abstained' | 'unavailable';
|
|
2
|
+
export type PersistedSemanticGeneratedBy = 'deterministic' | 'embedding_router' | 'host_semantic' | 'hybrid';
|
|
3
|
+
|
|
4
|
+
export interface SemanticResolutionRecord {
|
|
5
|
+
frameHash: string;
|
|
6
|
+
projectRoot: string;
|
|
7
|
+
projectId: string;
|
|
8
|
+
hostId: string;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
turnId: string;
|
|
11
|
+
requestId: string;
|
|
12
|
+
sourceHash: string;
|
|
13
|
+
artifactHash: string;
|
|
14
|
+
artifactRevision: number;
|
|
15
|
+
supersedesFrameHash?: string;
|
|
16
|
+
state: PersistedSemanticResolutionState;
|
|
17
|
+
generatedBy: PersistedSemanticGeneratedBy;
|
|
18
|
+
modelId?: string;
|
|
19
|
+
modelRevision?: string;
|
|
20
|
+
routeCatalogVersion: string;
|
|
21
|
+
thresholdVersion: string;
|
|
22
|
+
route: Record<string, unknown>;
|
|
23
|
+
sampling: Record<string, unknown>;
|
|
24
|
+
conflicts: Array<Record<string, unknown>>;
|
|
25
|
+
frame: Record<string, unknown>;
|
|
26
|
+
durationMs: number;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const STATES = new Set<PersistedSemanticResolutionState>([
|
|
31
|
+
'provisional', 'resolved', 'abstained', 'unavailable',
|
|
32
|
+
]);
|
|
33
|
+
const GENERATORS = new Set<PersistedSemanticGeneratedBy>([
|
|
34
|
+
'deterministic', 'embedding_router', 'host_semantic', 'hybrid',
|
|
35
|
+
]);
|
|
36
|
+
|
|
37
|
+
export function assertSemanticResolutionRecord(record: SemanticResolutionRecord): void {
|
|
38
|
+
for (const [field, value] of Object.entries({
|
|
39
|
+
frameHash: record.frameHash,
|
|
40
|
+
projectRoot: record.projectRoot,
|
|
41
|
+
projectId: record.projectId,
|
|
42
|
+
hostId: record.hostId,
|
|
43
|
+
sessionId: record.sessionId,
|
|
44
|
+
turnId: record.turnId,
|
|
45
|
+
requestId: record.requestId,
|
|
46
|
+
sourceHash: record.sourceHash,
|
|
47
|
+
artifactHash: record.artifactHash,
|
|
48
|
+
routeCatalogVersion: record.routeCatalogVersion,
|
|
49
|
+
thresholdVersion: record.thresholdVersion,
|
|
50
|
+
})) {
|
|
51
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
52
|
+
throw new Error(`SEMANTIC_RESOLUTION_INVALID:${field}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!Number.isSafeInteger(record.artifactRevision) || record.artifactRevision < 1) {
|
|
56
|
+
throw new Error('SEMANTIC_RESOLUTION_INVALID:artifactRevision');
|
|
57
|
+
}
|
|
58
|
+
if (!Number.isSafeInteger(record.durationMs) || record.durationMs < 0
|
|
59
|
+
|| !Number.isSafeInteger(record.createdAt) || record.createdAt < 0) {
|
|
60
|
+
throw new Error('SEMANTIC_RESOLUTION_INVALID:timing');
|
|
61
|
+
}
|
|
62
|
+
if (!STATES.has(record.state) || !GENERATORS.has(record.generatedBy)) {
|
|
63
|
+
throw new Error('SEMANTIC_RESOLUTION_INVALID:enum');
|
|
64
|
+
}
|
|
65
|
+
if (record.frame.frameHash !== record.frameHash) {
|
|
66
|
+
throw new Error('SEMANTIC_RESOLUTION_FRAME_HASH_MISMATCH');
|
|
67
|
+
}
|
|
68
|
+
stableSemanticResolutionJson(record.route);
|
|
69
|
+
stableSemanticResolutionJson(record.sampling);
|
|
70
|
+
stableSemanticResolutionJson(record.conflicts);
|
|
71
|
+
stableSemanticResolutionJson(record.frame);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function stableSemanticResolutionJson(value: unknown): string {
|
|
75
|
+
return JSON.stringify(canonicalize(value));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function mapSemanticResolutionRow(row: Record<string, unknown>): SemanticResolutionRecord {
|
|
79
|
+
const state = requiredString(row.state, 'state') as PersistedSemanticResolutionState;
|
|
80
|
+
const generatedBy = requiredString(row.generated_by, 'generated_by') as PersistedSemanticGeneratedBy;
|
|
81
|
+
if (!STATES.has(state) || !GENERATORS.has(generatedBy)) {
|
|
82
|
+
throw new Error('SEMANTIC_RESOLUTION_ROW_INVALID:enum');
|
|
83
|
+
}
|
|
84
|
+
const result: SemanticResolutionRecord = {
|
|
85
|
+
frameHash: requiredString(row.frame_hash, 'frame_hash'),
|
|
86
|
+
projectRoot: requiredString(row.project_root, 'project_root'),
|
|
87
|
+
projectId: requiredString(row.project_id, 'project_id'),
|
|
88
|
+
hostId: requiredString(row.host_id, 'host_id'),
|
|
89
|
+
sessionId: requiredString(row.session_id, 'session_id'),
|
|
90
|
+
turnId: requiredString(row.turn_id, 'turn_id'),
|
|
91
|
+
requestId: requiredString(row.request_id, 'request_id'),
|
|
92
|
+
sourceHash: requiredString(row.source_hash, 'source_hash'),
|
|
93
|
+
artifactHash: requiredString(row.artifact_hash, 'artifact_hash'),
|
|
94
|
+
artifactRevision: requiredPositiveInteger(row.artifact_revision, 'artifact_revision'),
|
|
95
|
+
...(optionalString(row.supersedes_frame_hash)
|
|
96
|
+
? { supersedesFrameHash: optionalString(row.supersedes_frame_hash) }
|
|
97
|
+
: {}),
|
|
98
|
+
state,
|
|
99
|
+
generatedBy,
|
|
100
|
+
...(optionalString(row.model_id) ? { modelId: optionalString(row.model_id) } : {}),
|
|
101
|
+
...(optionalString(row.model_revision) ? { modelRevision: optionalString(row.model_revision) } : {}),
|
|
102
|
+
routeCatalogVersion: requiredString(row.route_catalog_version, 'route_catalog_version'),
|
|
103
|
+
thresholdVersion: requiredString(row.threshold_version, 'threshold_version'),
|
|
104
|
+
route: parseObject(row.route_json, 'route_json'),
|
|
105
|
+
sampling: parseObject(row.sampling_json, 'sampling_json'),
|
|
106
|
+
conflicts: parseObjectArray(row.conflicts_json, 'conflicts_json'),
|
|
107
|
+
frame: parseObject(row.frame_json, 'frame_json'),
|
|
108
|
+
durationMs: requiredNonNegativeInteger(row.duration_ms, 'duration_ms'),
|
|
109
|
+
createdAt: requiredNonNegativeInteger(row.created_at, 'created_at'),
|
|
110
|
+
};
|
|
111
|
+
assertSemanticResolutionRecord(result);
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function canonicalize(value: unknown): unknown {
|
|
116
|
+
if (value === undefined) return undefined;
|
|
117
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean') return value;
|
|
118
|
+
if (typeof value === 'number') {
|
|
119
|
+
if (!Number.isFinite(value) || Object.is(value, -0)) throw new Error('SEMANTIC_RESOLUTION_JSON_INVALID');
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
if (Array.isArray(value)) return value.map(item => {
|
|
123
|
+
if (item === undefined) throw new Error('SEMANTIC_RESOLUTION_JSON_INVALID');
|
|
124
|
+
return canonicalize(item);
|
|
125
|
+
});
|
|
126
|
+
if (!value || typeof value !== 'object' || Object.getPrototypeOf(value) !== Object.prototype) {
|
|
127
|
+
throw new Error('SEMANTIC_RESOLUTION_JSON_INVALID');
|
|
128
|
+
}
|
|
129
|
+
const record = value as Record<string, unknown>;
|
|
130
|
+
return Object.fromEntries(Object.keys(record).sort()
|
|
131
|
+
.filter(key => record[key] !== undefined)
|
|
132
|
+
.map(key => [key, canonicalize(record[key])]));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function parseObject(value: unknown, field: string): Record<string, unknown> {
|
|
136
|
+
const parsed = parseJson(value, field);
|
|
137
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
138
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
139
|
+
}
|
|
140
|
+
return parsed as Record<string, unknown>;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function parseObjectArray(value: unknown, field: string): Array<Record<string, unknown>> {
|
|
144
|
+
const parsed = parseJson(value, field);
|
|
145
|
+
if (!Array.isArray(parsed) || parsed.some(item => !item || typeof item !== 'object' || Array.isArray(item))) {
|
|
146
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
147
|
+
}
|
|
148
|
+
return parsed as Array<Record<string, unknown>>;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function parseJson(value: unknown, field: string): unknown {
|
|
152
|
+
if (typeof value !== 'string') throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
153
|
+
try { return JSON.parse(value) as unknown; } catch {
|
|
154
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function requiredString(value: unknown, field: string): string {
|
|
159
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
160
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
161
|
+
}
|
|
162
|
+
return value;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function optionalString(value: unknown): string | undefined {
|
|
166
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function requiredPositiveInteger(value: unknown, field: string): number {
|
|
170
|
+
const result = requiredNonNegativeInteger(value, field);
|
|
171
|
+
if (result < 1) throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function requiredNonNegativeInteger(value: unknown, field: string): number {
|
|
176
|
+
const result = Number(value);
|
|
177
|
+
if (!Number.isSafeInteger(result) || result < 0) {
|
|
178
|
+
throw new Error(`SEMANTIC_RESOLUTION_ROW_INVALID:${field}`);
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
@@ -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/task-semantic-control.ts","./src/task-runtime.ts","./src/semantic-resolution.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":[[65,115,132,133,165],[65,115,132,133],[65,115,132,133,169,178],[65,115,132,133,168],[65,115,132,133,174],[65,115,132,133,173],[65,115,132,133,169,172,178],[65,115,132,133,190],[65,115,132,133,187,188,189],[65,115,132,133,193,194,195,196,197,198,199,200,201],[65,112,113,115,132,133],[65,114,115,132,133],[115,132,133],[65,115,120,132,133,150],[65,115,116,121,126,132,133,135,147,158],[65,115,116,117,126,132,133,135],[60,61,62,65,115,132,133],[65,115,118,132,133,159],[65,115,119,120,127,132,133,136],[65,115,120,132,133,147,155],[65,115,121,123,126,132,133,135],[65,114,115,122,132,133],[65,115,123,124,132,133],[65,115,125,126,132,133],[65,114,115,126,132,133],[65,115,126,127,128,132,133,147,158],[65,115,126,127,128,132,133,142,147,150],[65,107,115,123,126,129,132,133,135,147,158],[65,115,126,127,129,130,132,133,135,147,155,158],[65,115,129,131,132,133,147,155,158],[63,64,65,66,67,68,69,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,162,163,164],[65,115,126,132,133],[65,115,132,133,134,158],[65,115,123,126,132,133,135,147],[65,115,132,133,136],[65,115,132,133,137],[65,114,115,132,133,138],[65,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,162,163,164],[65,115,132,133,140],[65,115,132,133,141],[65,115,126,132,133,142,143],[65,115,132,133,142,144,159,161],[65,115,127,132,133],[65,115,126,132,133,147,148,150],[65,115,132,133,149,150],[65,115,132,133,147,148],[65,115,132,133,150],[65,115,132,133,151],[65,112,115,132,133,147,152,158],[65,115,126,132,133,153,154],[65,115,132,133,153,154],[65,115,120,132,133,135,147,155],[65,115,132,133,156],[65,115,132,133,135,157],[65,115,129,132,133,141,158],[65,115,120,132,133,159],[65,115,132,133,147,160],[65,115,132,133,134,161],[65,115,132,133,162],[65,107,115,132,133],[65,107,115,126,128,132,133,138,147,150,158,160,161,163],[65,115,132,133,147,164],[65,79,83,115,132,133,158],[65,79,115,132,133,147,158],[65,74,115,132,133],[65,76,79,115,132,133,155,158],[65,115,132,133,135,155],[65,74,115,132,133,165],[65,76,79,115,132,133,135,158],[65,71,72,75,78,115,126,132,133,147,158],[65,79,86,115,132,133],[65,71,77,115,132,133],[65,79,100,101,115,132,133],[65,75,79,115,132,133,150,158,165],[65,100,115,132,133,165],[65,73,74,115,132,133,165],[65,79,115,132,133],[65,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,115,132,133],[65,79,94,115,132,133],[65,79,86,87,115,132,133],[65,77,79,87,88,115,132,133],[65,78,115,132,133],[65,71,74,79,115,132,133],[65,79,83,87,88,115,132,133],[65,83,115,132,133],[65,77,79,82,115,132,133,158],[65,71,76,79,86,115,132,133],[65,115,132,133,147],[65,74,79,100,115,132,133,163,165],[47,48,49,50,51,52,53,54,55,56,57,65,115,120,127,132,133,136,137],[48,49,50,51,52,53,54,55,56,57,58,65,115,132,133],[46,65,115,132,133,146],[65,115,120,132,133],[65,115,132,133,208],[65,115,132,133,165,213,214,215,216,217,218,219,220,221,222,223],[65,115,132,133,212,213,222],[65,115,132,133,213,222],[65,115,132,133,206,212,213,222],[65,115,132,133,212,213,214,215,216,217,218,219,220,221,223],[65,115,132,133,213],[65,115,120,132,133,212,222],[65,115,120,132,133,165,207,208,209,210,224]],"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":"3b1a7693bd66fad891038ad2b30e8eb06c8da4cbfc1f7691e857540c01ac3cdb","signature":"694767dca8e136df397deda49122af216f2d10dd6bd222a2b117d49882cc2f23"},{"version":"6ad3f1af299806a8d6c59a9ad57c16d06a4f05a927ce3b3139e5e1fad8bcccf3","signature":"f2ba0aba5a46f82efb98147e8de87272e209dbf31f2e4af527298be3a35c007a"},{"version":"b490ef6391f64aa28bc452b907462163b63d412d8984630e0777970aed7fa8d5","signature":"27311437b7dae1bcf4f30ac52f5c7527f265438d3ad7184b46daf2f8f5417307"},{"version":"e04476f981a2bff5bc302e1776f5ece8eece3801e1188fb07126e661aa79e907","signature":"ba77c208cf696473912bd2f84cb93c2b61f7faf108712db69c838e23bb77bac1"},{"version":"16f19f92edb90e4ab2d034e856179a1a581bbd45e3fb25ab2531eb2d9315718d","signature":"060aada36f7239e7c8ae86b2164bb1b0e5c83c997eaae2dfcd120db7698f2406"},{"version":"f03144cf63c05642505945e36379d05b2dea254c4f9c2ba70085f3ffcea3e9f9","signature":"6766c9a574d2c656494cb8beb29fcb1701e6719366f7255d56cf723267ffd585"},{"version":"fcfa8c24b48dc6922c4b46daa657bfab22cdc2f610b4608174ddbd69fcea3085","signature":"dc34d797db0f2b3b97a86c8e9e7d5b1d55faa42d203759a08b080f2dce805274"},{"version":"cb59de368f2b515addaeaa009c402bf6d91b9d9d0ce9886b7ac703913d0a64ee","signature":"568eb228f5f7148aea1d17c1e7a8efa74bfa5bfb2f8ef645b8cf1f1dc6f705b4"},{"version":"00c81a2115f918bd85e67ed2d041324ba890777c03a9b34ad7cc605797957662","signature":"23c6afab884f3d5f7e09985f82db3e6f79ec5c054241c72240662abe5f9a9815"},{"version":"7b754852c12d01199750cbde41ae0002d07f7b30e591cc425325835193c6afed","signature":"1e1397d8708101d9a32058edb64196e8a122740c381bbebab692ed5a5adb9be9"},{"version":"c0da0a246b87eb863d733cc4bf3c7f3866fcb5d6e1eaf12f4daee39c04b0ef88","signature":"68763c29aca77e676556c1e0e5f37d4e247a0e59a0ec7708eccc25ea33901215"},{"version":"2add065ff6cfabe6c798deec3c250588d73adc22706b2a45fdc7c2c3197a7629","signature":"d36a83bcd8c9596f292dbdd8d9f2f18809ca128cedc1faedceaf357e86fb631f"},{"version":"c3071f5cc5b21eb5359051cfb04bac9f6346cfa6cb7dd9bccc94b7fbd5b26a82","signature":"57551f72f98143e7d654ed981749f7de17d9c51638700b7a5f890231786f9b0c"},{"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,59]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[166,1],[167,2],[168,2],[170,3],[171,2],[172,4],[173,2],[175,5],[169,2],[176,6],[174,2],[177,2],[178,3],[179,7],[180,2],[181,2],[182,2],[183,2],[184,2],[185,2],[186,2],[187,2],[191,8],[188,2],[190,9],[192,2],[202,10],[193,2],[194,2],[195,2],[196,2],[197,2],[198,2],[199,2],[200,2],[201,2],[70,2],[189,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],[112,11],[113,11],[114,12],[65,13],[115,14],[116,15],[117,16],[60,2],[63,17],[61,2],[62,2],[118,18],[119,19],[120,20],[121,21],[122,22],[123,23],[124,23],[125,24],[126,25],[127,26],[128,27],[66,2],[64,2],[129,28],[130,29],[131,30],[165,31],[132,32],[133,2],[134,33],[135,34],[136,35],[137,36],[138,37],[139,38],[140,39],[141,40],[142,41],[143,41],[144,42],[145,2],[146,43],[147,44],[149,45],[148,46],[150,47],[151,48],[152,49],[153,50],[154,51],[155,52],[156,53],[157,54],[158,55],[159,56],[160,57],[161,58],[162,59],[67,2],[68,2],[69,2],[108,60],[109,2],[110,2],[111,47],[163,61],[164,62],[86,63],[96,64],[85,63],[106,65],[77,66],[76,67],[105,1],[99,68],[104,69],[79,70],[93,71],[78,72],[102,73],[74,74],[73,1],[103,75],[75,76],[80,77],[81,2],[84,77],[71,2],[107,78],[97,79],[88,80],[89,81],[91,82],[87,83],[90,84],[100,1],[82,85],[83,86],[92,87],[72,88],[95,79],[94,77],[98,2],[101,89],[58,90],[50,2],[59,91],[52,2],[47,92],[49,2],[54,2],[51,2],[57,2],[56,93],[55,2],[46,2],[48,2],[53,2],[203,2],[204,2],[205,2],[206,2],[207,2],[209,94],[208,2],[224,95],[223,96],[214,97],[215,98],[222,99],[216,98],[217,97],[218,97],[219,97],[220,100],[213,101],[221,96],[212,2],[225,102],[211,2],[210,2]],"latestChangedDtsFile":"./dist/database.d.ts","version":"5.9.3"}
|