@agentlensai/server 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/db/anonymous-id-manager.d.ts +44 -0
  2. package/dist/db/anonymous-id-manager.d.ts.map +1 -0
  3. package/dist/db/anonymous-id-manager.js +90 -0
  4. package/dist/db/anonymous-id-manager.js.map +1 -0
  5. package/dist/db/capability-store.d.ts +78 -0
  6. package/dist/db/capability-store.d.ts.map +1 -0
  7. package/dist/db/capability-store.js +201 -0
  8. package/dist/db/capability-store.js.map +1 -0
  9. package/dist/db/guardrail-store.d.ts +34 -0
  10. package/dist/db/guardrail-store.d.ts.map +1 -0
  11. package/dist/db/guardrail-store.js +221 -0
  12. package/dist/db/guardrail-store.js.map +1 -0
  13. package/dist/db/migrate.d.ts.map +1 -1
  14. package/dist/db/migrate.js +200 -0
  15. package/dist/db/migrate.js.map +1 -1
  16. package/dist/db/schema.sqlite.d.ts +1719 -1
  17. package/dist/db/schema.sqlite.d.ts.map +1 -1
  18. package/dist/db/schema.sqlite.js +141 -1
  19. package/dist/db/schema.sqlite.js.map +1 -1
  20. package/dist/db/sqlite-store.d.ts +12 -0
  21. package/dist/db/sqlite-store.d.ts.map +1 -1
  22. package/dist/db/sqlite-store.js +47 -0
  23. package/dist/db/sqlite-store.js.map +1 -1
  24. package/dist/db/tenant-scoped-store.d.ts +1 -0
  25. package/dist/db/tenant-scoped-store.d.ts.map +1 -1
  26. package/dist/db/tenant-scoped-store.js +3 -0
  27. package/dist/db/tenant-scoped-store.js.map +1 -1
  28. package/dist/index.d.ts +8 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +52 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/guardrails/actions.d.ts +28 -0
  33. package/dist/lib/guardrails/actions.d.ts.map +1 -0
  34. package/dist/lib/guardrails/actions.js +126 -0
  35. package/dist/lib/guardrails/actions.js.map +1 -0
  36. package/dist/lib/guardrails/conditions.d.ts +13 -0
  37. package/dist/lib/guardrails/conditions.d.ts.map +1 -0
  38. package/dist/lib/guardrails/conditions.js +188 -0
  39. package/dist/lib/guardrails/conditions.js.map +1 -0
  40. package/dist/lib/guardrails/engine.d.ts +24 -0
  41. package/dist/lib/guardrails/engine.d.ts.map +1 -0
  42. package/dist/lib/guardrails/engine.js +122 -0
  43. package/dist/lib/guardrails/engine.js.map +1 -0
  44. package/dist/lib/redaction/human-review-layer.d.ts +37 -0
  45. package/dist/lib/redaction/human-review-layer.d.ts.map +1 -0
  46. package/dist/lib/redaction/human-review-layer.js +62 -0
  47. package/dist/lib/redaction/human-review-layer.js.map +1 -0
  48. package/dist/lib/redaction/index.d.ts +12 -0
  49. package/dist/lib/redaction/index.d.ts.map +1 -0
  50. package/dist/lib/redaction/index.js +12 -0
  51. package/dist/lib/redaction/index.js.map +1 -0
  52. package/dist/lib/redaction/pii-detection-layer.d.ts +30 -0
  53. package/dist/lib/redaction/pii-detection-layer.d.ts.map +1 -0
  54. package/dist/lib/redaction/pii-detection-layer.js +183 -0
  55. package/dist/lib/redaction/pii-detection-layer.js.map +1 -0
  56. package/dist/lib/redaction/pipeline.d.ts +26 -0
  57. package/dist/lib/redaction/pipeline.d.ts.map +1 -0
  58. package/dist/lib/redaction/pipeline.js +91 -0
  59. package/dist/lib/redaction/pipeline.js.map +1 -0
  60. package/dist/lib/redaction/secret-detection-layer.d.ts +10 -0
  61. package/dist/lib/redaction/secret-detection-layer.d.ts.map +1 -0
  62. package/dist/lib/redaction/secret-detection-layer.js +79 -0
  63. package/dist/lib/redaction/secret-detection-layer.js.map +1 -0
  64. package/dist/lib/redaction/secret-patterns.d.ts +29 -0
  65. package/dist/lib/redaction/secret-patterns.d.ts.map +1 -0
  66. package/dist/lib/redaction/secret-patterns.js +133 -0
  67. package/dist/lib/redaction/secret-patterns.js.map +1 -0
  68. package/dist/lib/redaction/semantic-denylist-layer.d.ts +10 -0
  69. package/dist/lib/redaction/semantic-denylist-layer.d.ts.map +1 -0
  70. package/dist/lib/redaction/semantic-denylist-layer.js +64 -0
  71. package/dist/lib/redaction/semantic-denylist-layer.js.map +1 -0
  72. package/dist/lib/redaction/tenant-deidentification-layer.d.ts +10 -0
  73. package/dist/lib/redaction/tenant-deidentification-layer.d.ts.map +1 -0
  74. package/dist/lib/redaction/tenant-deidentification-layer.js +64 -0
  75. package/dist/lib/redaction/tenant-deidentification-layer.js.map +1 -0
  76. package/dist/lib/redaction/url-path-scrubbing-layer.d.ts +14 -0
  77. package/dist/lib/redaction/url-path-scrubbing-layer.d.ts.map +1 -0
  78. package/dist/lib/redaction/url-path-scrubbing-layer.js +156 -0
  79. package/dist/lib/redaction/url-path-scrubbing-layer.js.map +1 -0
  80. package/dist/routes/agents.d.ts +4 -3
  81. package/dist/routes/agents.d.ts.map +1 -1
  82. package/dist/routes/agents.js +31 -12
  83. package/dist/routes/agents.js.map +1 -1
  84. package/dist/routes/audit.d.ts +15 -0
  85. package/dist/routes/audit.d.ts.map +1 -0
  86. package/dist/routes/audit.js +177 -0
  87. package/dist/routes/audit.js.map +1 -0
  88. package/dist/routes/capabilities.d.ts +15 -0
  89. package/dist/routes/capabilities.d.ts.map +1 -0
  90. package/dist/routes/capabilities.js +86 -0
  91. package/dist/routes/capabilities.js.map +1 -0
  92. package/dist/routes/community.d.ts +24 -0
  93. package/dist/routes/community.d.ts.map +1 -0
  94. package/dist/routes/community.js +190 -0
  95. package/dist/routes/community.js.map +1 -0
  96. package/dist/routes/delegation.d.ts +20 -0
  97. package/dist/routes/delegation.d.ts.map +1 -0
  98. package/dist/routes/delegation.js +108 -0
  99. package/dist/routes/delegation.js.map +1 -0
  100. package/dist/routes/discovery.d.ts +19 -0
  101. package/dist/routes/discovery.d.ts.map +1 -0
  102. package/dist/routes/discovery.js +96 -0
  103. package/dist/routes/discovery.js.map +1 -0
  104. package/dist/routes/guardrails.d.ts +18 -0
  105. package/dist/routes/guardrails.d.ts.map +1 -0
  106. package/dist/routes/guardrails.js +184 -0
  107. package/dist/routes/guardrails.js.map +1 -0
  108. package/dist/routes/redaction-test.d.ts +14 -0
  109. package/dist/routes/redaction-test.d.ts.map +1 -0
  110. package/dist/routes/redaction-test.js +33 -0
  111. package/dist/routes/redaction-test.js.map +1 -0
  112. package/dist/routes/trust.d.ts +16 -0
  113. package/dist/routes/trust.d.ts.map +1 -0
  114. package/dist/routes/trust.js +23 -0
  115. package/dist/routes/trust.js.map +1 -0
  116. package/dist/services/community-service.d.ts +277 -0
  117. package/dist/services/community-service.d.ts.map +1 -0
  118. package/dist/services/community-service.js +785 -0
  119. package/dist/services/community-service.js.map +1 -0
  120. package/dist/services/delegation-service.d.ts +149 -0
  121. package/dist/services/delegation-service.d.ts.map +1 -0
  122. package/dist/services/delegation-service.js +605 -0
  123. package/dist/services/delegation-service.js.map +1 -0
  124. package/dist/services/discovery-service.d.ts +39 -0
  125. package/dist/services/discovery-service.d.ts.map +1 -0
  126. package/dist/services/discovery-service.js +186 -0
  127. package/dist/services/discovery-service.js.map +1 -0
  128. package/dist/services/trust-service.d.ts +59 -0
  129. package/dist/services/trust-service.d.ts.map +1 -0
  130. package/dist/services/trust-service.js +139 -0
  131. package/dist/services/trust-service.js.map +1 -0
  132. package/package.json +2 -2
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Guardrail Store (v0.8.0 — Story 1.2)
3
+ *
4
+ * CRUD operations for guardrail rules, runtime state, and trigger history.
5
+ * All operations are tenant-scoped.
6
+ */
7
+ import { sql } from 'drizzle-orm';
8
+ export class GuardrailStore {
9
+ db;
10
+ constructor(db) {
11
+ this.db = db;
12
+ }
13
+ // ─── Rules ───────────────────────────────────────────────
14
+ createRule(rule) {
15
+ this.db.run(sql `
16
+ INSERT INTO guardrail_rules (
17
+ id, tenant_id, name, description, enabled,
18
+ condition_type, condition_config, action_type, action_config,
19
+ agent_id, cooldown_minutes, dry_run, created_at, updated_at
20
+ ) VALUES (
21
+ ${rule.id}, ${rule.tenantId}, ${rule.name}, ${rule.description ?? null},
22
+ ${rule.enabled ? 1 : 0},
23
+ ${rule.conditionType}, ${JSON.stringify(rule.conditionConfig)},
24
+ ${rule.actionType}, ${JSON.stringify(rule.actionConfig)},
25
+ ${rule.agentId ?? null}, ${rule.cooldownMinutes},
26
+ ${rule.dryRun ? 1 : 0},
27
+ ${rule.createdAt}, ${rule.updatedAt}
28
+ )
29
+ `);
30
+ }
31
+ getRule(tenantId, ruleId) {
32
+ const row = this.db.get(sql `
33
+ SELECT * FROM guardrail_rules WHERE id = ${ruleId} AND tenant_id = ${tenantId}
34
+ `);
35
+ return row ? this._mapRule(row) : null;
36
+ }
37
+ listRules(tenantId, agentId) {
38
+ if (agentId) {
39
+ const rows = this.db.all(sql `
40
+ SELECT * FROM guardrail_rules WHERE tenant_id = ${tenantId} AND agent_id = ${agentId} ORDER BY created_at DESC
41
+ `);
42
+ return rows.map((r) => this._mapRule(r));
43
+ }
44
+ const rows = this.db.all(sql `
45
+ SELECT * FROM guardrail_rules WHERE tenant_id = ${tenantId} ORDER BY created_at DESC
46
+ `);
47
+ return rows.map((r) => this._mapRule(r));
48
+ }
49
+ listEnabledRules(tenantId, agentId) {
50
+ if (agentId) {
51
+ const rows = this.db.all(sql `
52
+ SELECT * FROM guardrail_rules
53
+ WHERE tenant_id = ${tenantId} AND enabled = 1
54
+ AND (agent_id IS NULL OR agent_id = ${agentId})
55
+ ORDER BY created_at ASC
56
+ `);
57
+ return rows.map((r) => this._mapRule(r));
58
+ }
59
+ const rows = this.db.all(sql `
60
+ SELECT * FROM guardrail_rules
61
+ WHERE tenant_id = ${tenantId} AND enabled = 1
62
+ ORDER BY created_at ASC
63
+ `);
64
+ return rows.map((r) => this._mapRule(r));
65
+ }
66
+ updateRule(tenantId, ruleId, updates) {
67
+ const existing = this.getRule(tenantId, ruleId);
68
+ if (!existing)
69
+ return false;
70
+ const merged = { ...existing, ...updates, updatedAt: new Date().toISOString() };
71
+ this.db.run(sql `
72
+ UPDATE guardrail_rules SET
73
+ name = ${merged.name},
74
+ description = ${merged.description ?? null},
75
+ enabled = ${merged.enabled ? 1 : 0},
76
+ condition_type = ${merged.conditionType},
77
+ condition_config = ${JSON.stringify(merged.conditionConfig)},
78
+ action_type = ${merged.actionType},
79
+ action_config = ${JSON.stringify(merged.actionConfig)},
80
+ agent_id = ${merged.agentId ?? null},
81
+ cooldown_minutes = ${merged.cooldownMinutes},
82
+ dry_run = ${merged.dryRun ? 1 : 0},
83
+ updated_at = ${merged.updatedAt}
84
+ WHERE id = ${ruleId} AND tenant_id = ${tenantId}
85
+ `);
86
+ return true;
87
+ }
88
+ deleteRule(tenantId, ruleId) {
89
+ const existing = this.getRule(tenantId, ruleId);
90
+ if (!existing)
91
+ return false;
92
+ this.db.run(sql `DELETE FROM guardrail_rules WHERE id = ${ruleId} AND tenant_id = ${tenantId}`);
93
+ // Also clean up state and history
94
+ this.db.run(sql `DELETE FROM guardrail_state WHERE rule_id = ${ruleId} AND tenant_id = ${tenantId}`);
95
+ this.db.run(sql `DELETE FROM guardrail_trigger_history WHERE rule_id = ${ruleId} AND tenant_id = ${tenantId}`);
96
+ return true;
97
+ }
98
+ // ─── State ───────────────────────────────────────────────
99
+ getState(tenantId, ruleId) {
100
+ const row = this.db.get(sql `
101
+ SELECT * FROM guardrail_state WHERE rule_id = ${ruleId} AND tenant_id = ${tenantId}
102
+ `);
103
+ return row ? this._mapState(row) : null;
104
+ }
105
+ upsertState(state) {
106
+ this.db.run(sql `
107
+ INSERT INTO guardrail_state (rule_id, tenant_id, last_triggered_at, trigger_count, last_evaluated_at, current_value)
108
+ VALUES (${state.ruleId}, ${state.tenantId}, ${state.lastTriggeredAt ?? null},
109
+ ${state.triggerCount}, ${state.lastEvaluatedAt ?? null}, ${state.currentValue ?? null})
110
+ ON CONFLICT (rule_id, tenant_id) DO UPDATE SET
111
+ last_triggered_at = ${state.lastTriggeredAt ?? null},
112
+ trigger_count = ${state.triggerCount},
113
+ last_evaluated_at = ${state.lastEvaluatedAt ?? null},
114
+ current_value = ${state.currentValue ?? null}
115
+ `);
116
+ }
117
+ // ─── Trigger History ─────────────────────────────────────
118
+ insertTrigger(trigger) {
119
+ this.db.run(sql `
120
+ INSERT INTO guardrail_trigger_history (
121
+ id, rule_id, tenant_id, triggered_at, condition_value, condition_threshold,
122
+ action_executed, action_result, metadata
123
+ ) VALUES (
124
+ ${trigger.id}, ${trigger.ruleId}, ${trigger.tenantId}, ${trigger.triggeredAt},
125
+ ${trigger.conditionValue}, ${trigger.conditionThreshold},
126
+ ${trigger.actionExecuted ? 1 : 0}, ${trigger.actionResult ?? null},
127
+ ${JSON.stringify(trigger.metadata)}
128
+ )
129
+ `);
130
+ }
131
+ listTriggerHistory(tenantId, opts) {
132
+ const limit = opts?.limit ?? 50;
133
+ const offset = opts?.offset ?? 0;
134
+ let triggers;
135
+ let total;
136
+ if (opts?.ruleId) {
137
+ triggers = this.db
138
+ .all(sql `
139
+ SELECT * FROM guardrail_trigger_history
140
+ WHERE tenant_id = ${tenantId} AND rule_id = ${opts.ruleId}
141
+ ORDER BY triggered_at DESC
142
+ LIMIT ${limit} OFFSET ${offset}
143
+ `)
144
+ .map((r) => this._mapTrigger(r));
145
+ const countRow = this.db.get(sql `
146
+ SELECT COUNT(*) as count FROM guardrail_trigger_history
147
+ WHERE tenant_id = ${tenantId} AND rule_id = ${opts.ruleId}
148
+ `);
149
+ total = countRow?.count ?? 0;
150
+ }
151
+ else {
152
+ triggers = this.db
153
+ .all(sql `
154
+ SELECT * FROM guardrail_trigger_history
155
+ WHERE tenant_id = ${tenantId}
156
+ ORDER BY triggered_at DESC
157
+ LIMIT ${limit} OFFSET ${offset}
158
+ `)
159
+ .map((r) => this._mapTrigger(r));
160
+ const countRow = this.db.get(sql `
161
+ SELECT COUNT(*) as count FROM guardrail_trigger_history
162
+ WHERE tenant_id = ${tenantId}
163
+ `);
164
+ total = countRow?.count ?? 0;
165
+ }
166
+ return { triggers, total };
167
+ }
168
+ getRecentTriggers(tenantId, ruleId, limit = 5) {
169
+ return this.db
170
+ .all(sql `
171
+ SELECT * FROM guardrail_trigger_history
172
+ WHERE tenant_id = ${tenantId} AND rule_id = ${ruleId}
173
+ ORDER BY triggered_at DESC
174
+ LIMIT ${limit}
175
+ `)
176
+ .map((r) => this._mapTrigger(r));
177
+ }
178
+ // ─── Mappers ─────────────────────────────────────────────
179
+ _mapRule(row) {
180
+ return {
181
+ id: row['id'],
182
+ tenantId: row['tenant_id'],
183
+ name: row['name'],
184
+ description: row['description'] || undefined,
185
+ enabled: row['enabled'] === 1 || row['enabled'] === true,
186
+ conditionType: row['condition_type'],
187
+ conditionConfig: JSON.parse(row['condition_config'] || '{}'),
188
+ actionType: row['action_type'],
189
+ actionConfig: JSON.parse(row['action_config'] || '{}'),
190
+ agentId: row['agent_id'] || undefined,
191
+ cooldownMinutes: row['cooldown_minutes'] ?? 15,
192
+ dryRun: row['dry_run'] === 1 || row['dry_run'] === true,
193
+ createdAt: row['created_at'],
194
+ updatedAt: row['updated_at'],
195
+ };
196
+ }
197
+ _mapState(row) {
198
+ return {
199
+ ruleId: row['rule_id'],
200
+ tenantId: row['tenant_id'],
201
+ lastTriggeredAt: row['last_triggered_at'] || undefined,
202
+ triggerCount: row['trigger_count'] ?? 0,
203
+ lastEvaluatedAt: row['last_evaluated_at'] || undefined,
204
+ currentValue: row['current_value'] != null ? row['current_value'] : undefined,
205
+ };
206
+ }
207
+ _mapTrigger(row) {
208
+ return {
209
+ id: row['id'],
210
+ ruleId: row['rule_id'],
211
+ tenantId: row['tenant_id'],
212
+ triggeredAt: row['triggered_at'],
213
+ conditionValue: row['condition_value'],
214
+ conditionThreshold: row['condition_threshold'],
215
+ actionExecuted: row['action_executed'] === 1 || row['action_executed'] === true,
216
+ actionResult: row['action_result'] || undefined,
217
+ metadata: JSON.parse(row['metadata'] || '{}'),
218
+ };
219
+ }
220
+ }
221
+ //# sourceMappingURL=guardrail-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrail-store.js","sourceRoot":"","sources":["../../src/db/guardrail-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAgchD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAoBA"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAypBhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAoBA"}
@@ -417,6 +417,206 @@ export function runMigrations(db) {
417
417
  db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_variants_tenant_tag ON benchmark_variants(tenant_id, tag)`);
418
418
  db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_results_benchmark_id ON benchmark_results(benchmark_id)`);
419
419
  db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_results_tenant_id ON benchmark_results(tenant_id)`);
420
+ // ─── Guardrail tables (v0.8.0 — Phase 3) ──────────────────
421
+ db.run(sql `
422
+ CREATE TABLE IF NOT EXISTS guardrail_rules (
423
+ id TEXT PRIMARY KEY,
424
+ tenant_id TEXT NOT NULL,
425
+ name TEXT NOT NULL,
426
+ description TEXT,
427
+ enabled INTEGER NOT NULL DEFAULT 1,
428
+ condition_type TEXT NOT NULL,
429
+ condition_config TEXT NOT NULL DEFAULT '{}',
430
+ action_type TEXT NOT NULL,
431
+ action_config TEXT NOT NULL DEFAULT '{}',
432
+ agent_id TEXT,
433
+ cooldown_minutes INTEGER NOT NULL DEFAULT 15,
434
+ dry_run INTEGER NOT NULL DEFAULT 0,
435
+ created_at TEXT NOT NULL,
436
+ updated_at TEXT NOT NULL
437
+ )
438
+ `);
439
+ db.run(sql `
440
+ CREATE TABLE IF NOT EXISTS guardrail_state (
441
+ rule_id TEXT NOT NULL,
442
+ tenant_id TEXT NOT NULL,
443
+ last_triggered_at TEXT,
444
+ trigger_count INTEGER NOT NULL DEFAULT 0,
445
+ last_evaluated_at TEXT,
446
+ current_value REAL,
447
+ PRIMARY KEY (rule_id, tenant_id)
448
+ )
449
+ `);
450
+ db.run(sql `
451
+ CREATE TABLE IF NOT EXISTS guardrail_trigger_history (
452
+ id TEXT PRIMARY KEY,
453
+ rule_id TEXT NOT NULL,
454
+ tenant_id TEXT NOT NULL,
455
+ triggered_at TEXT NOT NULL,
456
+ condition_value REAL NOT NULL,
457
+ condition_threshold REAL NOT NULL,
458
+ action_executed INTEGER NOT NULL DEFAULT 0,
459
+ action_result TEXT,
460
+ metadata TEXT NOT NULL DEFAULT '{}'
461
+ )
462
+ `);
463
+ // Guardrail indexes
464
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_guardrail_rules_tenant ON guardrail_rules(tenant_id)`);
465
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_guardrail_rules_tenant_enabled ON guardrail_rules(tenant_id, enabled)`);
466
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_guardrail_state_tenant ON guardrail_state(tenant_id)`);
467
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_guardrail_trigger_history_tenant ON guardrail_trigger_history(tenant_id)`);
468
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_guardrail_trigger_history_rule ON guardrail_trigger_history(rule_id, triggered_at)`);
469
+ // ─── Agent model override & pause columns (B1 — Story 1.2) ──────
470
+ // Idempotent: only adds columns if they don't already exist
471
+ const agentColsB1 = db.all(sql `PRAGMA table_info(agents)`);
472
+ const agentColNamesB1 = new Set(agentColsB1.map((c) => c.name));
473
+ if (!agentColNamesB1.has('model_override')) {
474
+ db.run(sql `ALTER TABLE agents ADD COLUMN model_override TEXT`);
475
+ }
476
+ if (!agentColNamesB1.has('paused_at')) {
477
+ db.run(sql `ALTER TABLE agents ADD COLUMN paused_at TEXT`);
478
+ }
479
+ if (!agentColNamesB1.has('pause_reason')) {
480
+ db.run(sql `ALTER TABLE agents ADD COLUMN pause_reason TEXT`);
481
+ }
482
+ // Partial index for finding paused agents efficiently
483
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_agents_paused ON agents(tenant_id, paused_at) WHERE paused_at IS NOT NULL`);
484
+ // ─── Phase 4: Sharing & Discovery tables (Stories 1.3) ──────────
485
+ db.run(sql `
486
+ CREATE TABLE IF NOT EXISTS sharing_config (
487
+ tenant_id TEXT PRIMARY KEY,
488
+ enabled INTEGER NOT NULL DEFAULT 0,
489
+ human_review_enabled INTEGER NOT NULL DEFAULT 0,
490
+ pool_endpoint TEXT,
491
+ anonymous_contributor_id TEXT,
492
+ purge_token TEXT,
493
+ rate_limit_per_hour INTEGER NOT NULL DEFAULT 50,
494
+ volume_alert_threshold INTEGER NOT NULL DEFAULT 100,
495
+ updated_at TEXT NOT NULL
496
+ )
497
+ `);
498
+ db.run(sql `
499
+ CREATE TABLE IF NOT EXISTS agent_sharing_config (
500
+ tenant_id TEXT NOT NULL,
501
+ agent_id TEXT NOT NULL,
502
+ enabled INTEGER NOT NULL DEFAULT 0,
503
+ categories TEXT NOT NULL DEFAULT '[]',
504
+ updated_at TEXT NOT NULL,
505
+ PRIMARY KEY (tenant_id, agent_id)
506
+ )
507
+ `);
508
+ db.run(sql `
509
+ CREATE TABLE IF NOT EXISTS deny_list_rules (
510
+ id TEXT PRIMARY KEY,
511
+ tenant_id TEXT NOT NULL,
512
+ pattern TEXT NOT NULL,
513
+ is_regex INTEGER NOT NULL DEFAULT 0,
514
+ reason TEXT NOT NULL,
515
+ created_at TEXT NOT NULL
516
+ )
517
+ `);
518
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_deny_list_rules_tenant ON deny_list_rules(tenant_id)`);
519
+ db.run(sql `
520
+ CREATE TABLE IF NOT EXISTS sharing_audit_log (
521
+ id TEXT PRIMARY KEY,
522
+ tenant_id TEXT NOT NULL,
523
+ event_type TEXT NOT NULL,
524
+ lesson_id TEXT,
525
+ anonymous_lesson_id TEXT,
526
+ lesson_hash TEXT,
527
+ redaction_findings TEXT,
528
+ query_text TEXT,
529
+ result_ids TEXT,
530
+ pool_endpoint TEXT,
531
+ initiated_by TEXT,
532
+ timestamp TEXT NOT NULL
533
+ )
534
+ `);
535
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_sharing_audit_tenant_ts ON sharing_audit_log(tenant_id, timestamp)`);
536
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_sharing_audit_type ON sharing_audit_log(tenant_id, event_type)`);
537
+ db.run(sql `
538
+ CREATE TABLE IF NOT EXISTS sharing_review_queue (
539
+ id TEXT PRIMARY KEY,
540
+ tenant_id TEXT NOT NULL,
541
+ lesson_id TEXT NOT NULL,
542
+ original_title TEXT NOT NULL,
543
+ original_content TEXT NOT NULL,
544
+ redacted_title TEXT NOT NULL,
545
+ redacted_content TEXT NOT NULL,
546
+ redaction_findings TEXT NOT NULL,
547
+ status TEXT NOT NULL DEFAULT 'pending',
548
+ reviewed_by TEXT,
549
+ reviewed_at TEXT,
550
+ created_at TEXT NOT NULL,
551
+ expires_at TEXT NOT NULL
552
+ )
553
+ `);
554
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_review_queue_tenant_status ON sharing_review_queue(tenant_id, status)`);
555
+ db.run(sql `
556
+ CREATE TABLE IF NOT EXISTS anonymous_id_map (
557
+ tenant_id TEXT NOT NULL,
558
+ agent_id TEXT NOT NULL,
559
+ anonymous_agent_id TEXT NOT NULL,
560
+ valid_from TEXT NOT NULL,
561
+ valid_until TEXT NOT NULL,
562
+ PRIMARY KEY (tenant_id, agent_id, valid_from)
563
+ )
564
+ `);
565
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_anon_map_anon_id ON anonymous_id_map(anonymous_agent_id)`);
566
+ db.run(sql `
567
+ CREATE TABLE IF NOT EXISTS capability_registry (
568
+ id TEXT PRIMARY KEY,
569
+ tenant_id TEXT NOT NULL,
570
+ agent_id TEXT NOT NULL,
571
+ task_type TEXT NOT NULL,
572
+ custom_type TEXT,
573
+ input_schema TEXT NOT NULL,
574
+ output_schema TEXT NOT NULL,
575
+ quality_metrics TEXT NOT NULL DEFAULT '{}',
576
+ estimated_latency_ms INTEGER,
577
+ estimated_cost_usd REAL,
578
+ max_input_bytes INTEGER,
579
+ scope TEXT NOT NULL DEFAULT 'internal',
580
+ enabled INTEGER NOT NULL DEFAULT 1,
581
+ accept_delegations INTEGER NOT NULL DEFAULT 0,
582
+ inbound_rate_limit INTEGER NOT NULL DEFAULT 10,
583
+ outbound_rate_limit INTEGER NOT NULL DEFAULT 20,
584
+ created_at TEXT NOT NULL,
585
+ updated_at TEXT NOT NULL
586
+ )
587
+ `);
588
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_capability_tenant_agent ON capability_registry(tenant_id, agent_id)`);
589
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_capability_task_type ON capability_registry(tenant_id, task_type)`);
590
+ db.run(sql `
591
+ CREATE TABLE IF NOT EXISTS delegation_log (
592
+ id TEXT PRIMARY KEY,
593
+ tenant_id TEXT NOT NULL,
594
+ direction TEXT NOT NULL,
595
+ agent_id TEXT NOT NULL,
596
+ anonymous_target_id TEXT,
597
+ anonymous_source_id TEXT,
598
+ task_type TEXT NOT NULL,
599
+ status TEXT NOT NULL,
600
+ request_size_bytes INTEGER,
601
+ response_size_bytes INTEGER,
602
+ execution_time_ms INTEGER,
603
+ cost_usd REAL,
604
+ created_at TEXT NOT NULL,
605
+ completed_at TEXT
606
+ )
607
+ `);
608
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_delegation_tenant_ts ON delegation_log(tenant_id, created_at)`);
609
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_delegation_agent ON delegation_log(tenant_id, agent_id)`);
610
+ db.run(sql `CREATE INDEX IF NOT EXISTS idx_delegation_status ON delegation_log(tenant_id, status)`);
611
+ // ─── Discovery Config (Story 5.4) ──────────────────────
612
+ db.run(sql `
613
+ CREATE TABLE IF NOT EXISTS discovery_config (
614
+ tenant_id TEXT PRIMARY KEY,
615
+ min_trust_threshold INTEGER NOT NULL DEFAULT 60,
616
+ delegation_enabled INTEGER NOT NULL DEFAULT 0,
617
+ updated_at TEXT NOT NULL
618
+ )
619
+ `);
420
620
  }
421
621
  /**
422
622
  * Verify that WAL mode is enabled.
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAAY;IACxC,2DAA2D;IAC3D,gEAAgE;IAChE,oDAAoD;IACpD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;GAaT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;GAmBT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;GAWT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;GAaT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;GAUT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;GAWT,CAAC,CAAC;IAEH,iCAAiC;IACjC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,sEAAsE,CAAC,CAAC;IAClF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,wEAAwE,CAAC,CAAC;IACpF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oEAAoE,CAAC,CAAC;IAChF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,kEAAkE,CAAC,CAAC;IAC9E,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,mFAAmF,CAAC,CAAC;IAC/F,EAAE,CAAC,GAAG,CACJ,GAAG,CAAA,gGAAgG,CACpG,CAAC;IACF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,wEAAwE,CAAC,CAAC;IACpF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,4EAA4E,CAAC,CAAC;IACxF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oEAAoE,CAAC,CAAC;IAChF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oEAAoE,CAAC,CAAC;IAChF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,gFAAgF,CAAC,CAAC;IAE5F,2DAA2D;IAC3D,gDAAgD;IAChD,qEAAqE;IACrE,MAAM,cAAc,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,6BAA6B,CAAC,CAAC;IAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2EAA2E,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,+EAA+E,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,gFAAgF,CAAC,CAAC;IAC9F,CAAC;IAED,6DAA6D;IAC7D,4DAA4D;IAE5D,qBAAqB;IACrB,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,6BAA6B,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2EAA2E,CAAC,CAAC;IACzF,CAAC;IAED,mBAAmB;IACnB,MAAM,YAAY,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,2BAA2B,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yEAAyE,CAAC,CAAC;IACvF,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2EAA2E,CAAC,CAAC;IACzF,CAAC;IAED,mBAAmB;IACnB,MAAM,YAAY,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,2BAA2B,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yEAAyE,CAAC,CAAC;IACvF,CAAC;IAED,wBAAwB;IACxB,MAAM,gBAAgB,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,gCAAgC,CAAC,CAAC;IACvF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8EAA8E,CAAC,CAAC;IAC5F,CAAC;IAED,0BAA0B;IAC1B,MAAM,mBAAmB,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,kCAAkC,CAAC,CAAC;IAC5F,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,gFAAgF,CAAC,CAAC;IAC9F,CAAC;IAED,2BAA2B;IAC3B,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,sEAAsE,CAAC,CAAC;IAClF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,uFAAuF,CAAC,CAAC;IACnG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,iGAAiG,CAAC,CAAC;IAC7G,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,0EAA0E,CAAC,CAAC;IACtF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,uFAAuF,CAAC,CAAC;IACnG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2FAA2F,CAAC,CAAC;IACvG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,sEAAsE,CAAC,CAAC;IAElF,+DAA+D;IAC/D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;GAaT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2EAA2E,CAAC,CAAC;IACvF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,wFAAwF,CAAC,CAAC;IACpG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,+FAA+F,CAAC,CAAC;IAE3G,sEAAsE;IACtE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;GAaT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yFAAyF,CAAC,CAAC;IAErG,6DAA6D;IAC7D,mEAAmE;IACnE,kEAAkE;IAElE,qDAAqD;IACrD,2CAA2C;IAC3C,MAAM,cAAc,GAAG,EAAE,CAAC,GAAG,CAC3B,GAAG,CAAA,sEAAsE,CAC1E,CAAC;IACF,IAAI,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACzE,kEAAkE;QAClE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,4CAA4C,CAAC,CAAC;QACxD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8CAA8C,CAAC,CAAC;QAC1D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,0CAA0C,CAAC,CAAC;QACtD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,6CAA6C,CAAC,CAAC;QACzD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,gDAAgD,CAAC,CAAC;QAC5D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,kDAAkD,CAAC,CAAC;QAE9D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;KAmBT,CAAC,CAAC;QACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;KAOT,CAAC,CAAC;QACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,qBAAqB,CAAC,CAAC;QACjC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,6CAA6C,CAAC,CAAC;QAEzD,mBAAmB;QACnB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,0DAA0D,CAAC,CAAC;QACtE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8DAA8D,CAAC,CAAC;QAC1E,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,sDAAsD,CAAC,CAAC;QAClE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,4DAA4D,CAAC,CAAC;QACxE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yEAAyE,CAAC,CAAC;QACrF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,6EAA6E,CAAC,CAAC;IAC3F,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,EAAE,CAAC,GAAG,CACzB,GAAG,CAAA,oEAAoE,CACxE,CAAC;IACF,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2CAA2C,CAAC,CAAC;QAEvD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;KAWT,CAAC,CAAC;QACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;KAKT,CAAC,CAAC;QACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,mBAAmB,CAAC,CAAC;QAC/B,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yCAAyC,CAAC,CAAC;QAErD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,wDAAwD,CAAC,CAAC;IACtE,CAAC;IAED,4DAA4D;IAC5D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;GAmBT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,qEAAqE,CAAC,CAAC;IACjF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,qFAAqF,CAAC,CAAC;IACjG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,wFAAwF,CAAC,CAAC;IACpG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,4FAA4F,CAAC,CAAC;IAExG,2DAA2D;IAC3D,wEAAwE;IACxE,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAC1B,GAAG,CAAA,qEAAqE,CACzE,CAAC;IACF,IAAI,aAAa,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACvE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yCAAyC,CAAC,CAAC;QACrD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,+CAA+C,CAAC,CAAC;QAC3D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,kDAAkD,CAAC,CAAC;QAC9D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oDAAoD,CAAC,CAAC;QAEhE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;KAmBT,CAAC,CAAC;QACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;KAMT,CAAC,CAAC;QACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oBAAoB,CAAC,CAAC;QAChC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2CAA2C,CAAC,CAAC;QAEvD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,uDAAuD,CAAC,CAAC;QACnE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,uEAAuE,CAAC,CAAC;QACnF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,0EAA0E,CAAC,CAAC;QACtF,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8EAA8E,CAAC,CAAC;IAC5F,CAAC;IAED,oEAAoE;IACpE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,gHAAgH,CAAC,CAAC;IAE5H,qEAAqE;IACrE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;GAgBT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,2GAA2G,CAAC,CAAC;IAEvH,+DAA+D;IAC/D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;GAgBT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;GAWT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;GAUT,CAAC,CAAC;IAEH,oBAAoB;IACpB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8EAA8E,CAAC,CAAC;IAC1F,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,0FAA0F,CAAC,CAAC;IACtG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oGAAoG,CAAC,CAAC;IAChH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oGAAoG,CAAC,CAAC;IAChH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,kGAAkG,CAAC,CAAC;IAC9G,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,4FAA4F,CAAC,CAAC;IAExG,6DAA6D;IAC7D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;GAiBT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;GAUT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;GAYT,CAAC,CAAC;IAEH,oBAAoB;IACpB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,qFAAqF,CAAC,CAAC;IACjG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,sGAAsG,CAAC,CAAC;IAClH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,qFAAqF,CAAC,CAAC;IACjG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yGAAyG,CAAC,CAAC;IACrH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,mHAAmH,CAAC,CAAC;IAE/H,mEAAmE;IACnE,4DAA4D;IAC5D,MAAM,WAAW,GAAG,EAAE,CAAC,GAAG,CAAmB,GAAG,CAAA,2BAA2B,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3C,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,mDAAmD,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8CAA8C,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,iDAAiD,CAAC,CAAC;IAC/D,CAAC;IAED,sDAAsD;IACtD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,0GAA0G,CAAC,CAAC;IAEtH,mEAAmE;IAEnE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;GAYT,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;GAST,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;GAST,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,qFAAqF,CAAC,CAAC;IAEjG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;GAeT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,mGAAmG,CAAC,CAAC;IAC/G,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,+FAA+F,CAAC,CAAC;IAE3G,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;GAgBT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,sGAAsG,CAAC,CAAC;IAElH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;GAST,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,yFAAyF,CAAC,CAAC;IAErG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;GAqBT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,oGAAoG,CAAC,CAAC;IAChH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,kGAAkG,CAAC,CAAC;IAE9G,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;GAiBT,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,8FAA8F,CAAC,CAAC;IAC1G,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,wFAAwF,CAAC,CAAC;IACpG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,uFAAuF,CAAC,CAAC;IAEnG,0DAA0D;IAC1D,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA;;;;;;;GAOT,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAY;IAOxC,MAAM,WAAW,GACf,EAAE,CAAC,GAAG,CAA2B,GAAG,CAAA,qBAAqB,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC;IACjF,MAAM,WAAW,GAAG,EAAE,CAAC,GAAG,CAA0B,GAAG,CAAA,oBAAoB,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,CAAyB,GAAG,CAAA,mBAAmB,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;IAC1F,wDAAwD;IACxD,MAAM,WAAW,GAAG,EAAE,CAAC,GAAG,CAAsB,GAAG,CAAA,qBAAqB,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IACxF,MAAM,WAAW,GACf,EAAE,CAAC,GAAG,CAA2B,GAAG,CAAA,qBAAqB,CAAC,EAAE,YAAY,KAAK,CAAC,CAAC;IAEjF,gDAAgD;IAChD,MAAM,SAAS,GAA2B,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAE3F,OAAO;QACL,WAAW;QACX,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC;QAC1D,SAAS;QACT,WAAW;QACX,WAAW;KACZ,CAAC;AACJ,CAAC"}