@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 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
- DevFlow 数据库层 — 基于 better-sqlite3 SQLite + WAL 模式持久化存储,管理 runs、tool call events、skill executions、project stats 和 settings。
3
+ > 基于 better-sqlite3 的本地 SQLite/WAL 持久化层,承载运行、检索、记忆和遥测记录。(v0.17.6)
4
4
 
5
- ## Installation
5
+ [![npm version](https://img.shields.io/npm/v/%40devflow-tools%2Fdatabase.svg)](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
- ## Usage
13
+ ## 快速开始
12
14
 
13
15
  ```typescript
14
16
  import { DevFlowDatabase } from '@devflow-tools/database';
15
17
 
16
- const db = new DevFlowDatabase('/path/to/project');
18
+ const db = new DevFlowDatabase(process.cwd());
19
+ console.log(db);
20
+ ```
21
+
22
+ ## 公共 API / 命令
17
23
 
18
- // 记录 tool call 事件
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
- const stats = db.getProjectStats('/path/to/project');
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
- ## Features
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
+ }
@@ -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",
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": "964af33767bf232606e63d973b3a29d7d53c8119"
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"}