shieldcortex 2.2.0 → 2.4.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 (104) hide show
  1. package/README.md +20 -5
  2. package/dist/api/events.d.ts +11 -1
  3. package/dist/api/events.d.ts.map +1 -1
  4. package/dist/api/events.js +3 -0
  5. package/dist/api/events.js.map +1 -1
  6. package/dist/api/visualization-server.d.ts.map +1 -1
  7. package/dist/api/visualization-server.js +60 -4
  8. package/dist/api/visualization-server.js.map +1 -1
  9. package/dist/database/init.d.ts.map +1 -1
  10. package/dist/database/init.js +44 -0
  11. package/dist/database/init.js.map +1 -1
  12. package/dist/defence/__tests__/access-control.test.d.ts +5 -0
  13. package/dist/defence/__tests__/access-control.test.d.ts.map +1 -0
  14. package/dist/defence/__tests__/access-control.test.js +89 -0
  15. package/dist/defence/__tests__/access-control.test.js.map +1 -0
  16. package/dist/defence/__tests__/agent-scorer.test.d.ts +5 -0
  17. package/dist/defence/__tests__/agent-scorer.test.d.ts.map +1 -0
  18. package/dist/defence/__tests__/agent-scorer.test.js +75 -0
  19. package/dist/defence/__tests__/agent-scorer.test.js.map +1 -0
  20. package/dist/defence/__tests__/env-detector.test.d.ts +5 -0
  21. package/dist/defence/__tests__/env-detector.test.d.ts.map +1 -0
  22. package/dist/defence/__tests__/env-detector.test.js +99 -0
  23. package/dist/defence/__tests__/env-detector.test.js.map +1 -0
  24. package/dist/defence/__tests__/pipeline.test.js +1 -0
  25. package/dist/defence/__tests__/pipeline.test.js.map +1 -1
  26. package/dist/defence/__tests__/trust.test.js +3 -2
  27. package/dist/defence/__tests__/trust.test.js.map +1 -1
  28. package/dist/defence/audit/index.d.ts +2 -2
  29. package/dist/defence/audit/index.d.ts.map +1 -1
  30. package/dist/defence/audit/index.js +1 -1
  31. package/dist/defence/audit/index.js.map +1 -1
  32. package/dist/defence/audit/logger.d.ts.map +1 -1
  33. package/dist/defence/audit/logger.js +3 -2
  34. package/dist/defence/audit/logger.js.map +1 -1
  35. package/dist/defence/audit/queries.d.ts +35 -1
  36. package/dist/defence/audit/queries.d.ts.map +1 -1
  37. package/dist/defence/audit/queries.js +93 -21
  38. package/dist/defence/audit/queries.js.map +1 -1
  39. package/dist/defence/pipeline.d.ts +1 -1
  40. package/dist/defence/pipeline.d.ts.map +1 -1
  41. package/dist/defence/pipeline.js +22 -1
  42. package/dist/defence/pipeline.js.map +1 -1
  43. package/dist/defence/quarantine/auto-expire.d.ts +15 -0
  44. package/dist/defence/quarantine/auto-expire.d.ts.map +1 -0
  45. package/dist/defence/quarantine/auto-expire.js +38 -0
  46. package/dist/defence/quarantine/auto-expire.js.map +1 -0
  47. package/dist/defence/trust/access-control.d.ts +29 -0
  48. package/dist/defence/trust/access-control.d.ts.map +1 -0
  49. package/dist/defence/trust/access-control.js +64 -0
  50. package/dist/defence/trust/access-control.js.map +1 -0
  51. package/dist/defence/trust/agent-scorer.d.ts +33 -0
  52. package/dist/defence/trust/agent-scorer.d.ts.map +1 -0
  53. package/dist/defence/trust/agent-scorer.js +55 -0
  54. package/dist/defence/trust/agent-scorer.js.map +1 -0
  55. package/dist/defence/trust/env-detector.d.ts +43 -0
  56. package/dist/defence/trust/env-detector.d.ts.map +1 -0
  57. package/dist/defence/trust/env-detector.js +99 -0
  58. package/dist/defence/trust/env-detector.js.map +1 -0
  59. package/dist/defence/trust/index.d.ts +6 -0
  60. package/dist/defence/trust/index.d.ts.map +1 -1
  61. package/dist/defence/trust/index.js +3 -0
  62. package/dist/defence/trust/index.js.map +1 -1
  63. package/dist/defence/trust/source-scorer.d.ts.map +1 -1
  64. package/dist/defence/trust/source-scorer.js +33 -15
  65. package/dist/defence/trust/source-scorer.js.map +1 -1
  66. package/dist/defence/types.d.ts +3 -0
  67. package/dist/defence/types.d.ts.map +1 -1
  68. package/dist/defence/types.js +1 -0
  69. package/dist/defence/types.js.map +1 -1
  70. package/dist/memory/consolidate.d.ts +1 -0
  71. package/dist/memory/consolidate.d.ts.map +1 -1
  72. package/dist/memory/consolidate.js +8 -1
  73. package/dist/memory/consolidate.js.map +1 -1
  74. package/dist/memory/store.d.ts +6 -6
  75. package/dist/memory/store.d.ts.map +1 -1
  76. package/dist/memory/store.js +139 -16
  77. package/dist/memory/store.js.map +1 -1
  78. package/dist/server.d.ts.map +1 -1
  79. package/dist/server.js +82 -11
  80. package/dist/server.js.map +1 -1
  81. package/dist/setup/claude-md.d.ts +3 -1
  82. package/dist/setup/claude-md.d.ts.map +1 -1
  83. package/dist/setup/claude-md.js +47 -3
  84. package/dist/setup/claude-md.js.map +1 -1
  85. package/dist/setup/doctor.d.ts.map +1 -1
  86. package/dist/setup/doctor.js +7 -4
  87. package/dist/setup/doctor.js.map +1 -1
  88. package/dist/setup/uninstall.d.ts.map +1 -1
  89. package/dist/setup/uninstall.js +27 -0
  90. package/dist/setup/uninstall.js.map +1 -1
  91. package/dist/tools/context.d.ts +18 -0
  92. package/dist/tools/context.d.ts.map +1 -1
  93. package/dist/tools/context.js +4 -0
  94. package/dist/tools/context.js.map +1 -1
  95. package/dist/tools/forget.d.ts +18 -0
  96. package/dist/tools/forget.d.ts.map +1 -1
  97. package/dist/tools/forget.js +12 -1
  98. package/dist/tools/forget.js.map +1 -1
  99. package/dist/tools/recall.d.ts +38 -0
  100. package/dist/tools/recall.d.ts.map +1 -1
  101. package/dist/tools/recall.js +12 -5
  102. package/dist/tools/recall.js.map +1 -1
  103. package/dist/tools/remember.d.ts +2 -2
  104. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Access Control Tests
3
+ */
4
+ import { describe, it, expect } from '@jest/globals';
5
+ import { checkAccess } from '../trust/access-control.js';
6
+ describe('Access Control', () => {
7
+ const highTrustSource = { type: 'cli', identifier: 'mcp' }; // 0.9
8
+ const mediumTrustSource = { type: 'agent', identifier: 'user-spawned>task-1' }; // 0.63
9
+ const lowTrustSource = { type: 'agent', identifier: 'agent-spawned>deep>chain' }; // 0.3 * 0.7^2 = 0.147
10
+ const publicMemory = {
11
+ id: 1,
12
+ source: 'cli:mcp',
13
+ sensitivity_level: 'PUBLIC',
14
+ };
15
+ const restrictedMemory = {
16
+ id: 2,
17
+ source: 'user:direct',
18
+ sensitivity_level: 'RESTRICTED',
19
+ };
20
+ const ownedMemory = {
21
+ id: 3,
22
+ source: 'agent:user-spawned>task-1',
23
+ sensitivity_level: 'INTERNAL',
24
+ };
25
+ describe('read access', () => {
26
+ it('should allow high-trust to read all memories', () => {
27
+ const policy = checkAccess(publicMemory, highTrustSource, 'read');
28
+ expect(policy.canRead).toBe(true);
29
+ });
30
+ it('should allow high-trust to read RESTRICTED', () => {
31
+ const policy = checkAccess(restrictedMemory, highTrustSource, 'read');
32
+ expect(policy.canRead).toBe(true);
33
+ });
34
+ it('should block medium-trust from RESTRICTED (credential isolation)', () => {
35
+ const policy = checkAccess(restrictedMemory, mediumTrustSource, 'read');
36
+ expect(policy.canRead).toBe(false);
37
+ expect(policy.reason).toContain('Credential isolation');
38
+ });
39
+ it('should allow medium-trust to read non-restricted', () => {
40
+ const policy = checkAccess(publicMemory, mediumTrustSource, 'read');
41
+ expect(policy.canRead).toBe(true);
42
+ });
43
+ it('should block low-trust from shared memories', () => {
44
+ const policy = checkAccess(publicMemory, lowTrustSource, 'read');
45
+ expect(policy.canRead).toBe(false);
46
+ });
47
+ it('should allow owner to read own memory regardless of trust', () => {
48
+ const policy = checkAccess(ownedMemory, mediumTrustSource, 'read');
49
+ expect(policy.canRead).toBe(true);
50
+ expect(policy.reason).toContain('Owner');
51
+ });
52
+ });
53
+ describe('write access', () => {
54
+ it('should allow direct write for high-trust', () => {
55
+ const policy = checkAccess(publicMemory, highTrustSource, 'write');
56
+ expect(policy.canWrite).toBe(true);
57
+ expect(policy.writeRequiresQuarantine).toBe(false);
58
+ });
59
+ it('should require quarantine for medium-trust', () => {
60
+ const policy = checkAccess(publicMemory, mediumTrustSource, 'write');
61
+ expect(policy.canWrite).toBe(false);
62
+ expect(policy.writeRequiresQuarantine).toBe(true);
63
+ });
64
+ it('should require quarantine for low-trust', () => {
65
+ const policy = checkAccess(publicMemory, lowTrustSource, 'write');
66
+ expect(policy.writeRequiresQuarantine).toBe(true);
67
+ });
68
+ });
69
+ describe('delete access', () => {
70
+ it('should allow owner to delete own memory', () => {
71
+ const policy = checkAccess(ownedMemory, mediumTrustSource, 'delete');
72
+ expect(policy.canDelete).toBe(true);
73
+ });
74
+ it('should block non-owner deletion', () => {
75
+ const policy = checkAccess(publicMemory, mediumTrustSource, 'delete');
76
+ expect(policy.canDelete).toBe(false);
77
+ });
78
+ it('should block low-trust deletion even of own', () => {
79
+ const lowOwnedMemory = {
80
+ id: 4,
81
+ source: 'agent:agent-spawned>deep>chain',
82
+ sensitivity_level: 'INTERNAL',
83
+ };
84
+ const policy = checkAccess(lowOwnedMemory, lowTrustSource, 'delete');
85
+ expect(policy.canDelete).toBe(false); // trust < 0.5
86
+ });
87
+ });
88
+ });
89
+ //# sourceMappingURL=access-control.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-control.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/access-control.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Agent Trust Scorer Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=agent-scorer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-scorer.test.d.ts","sourceRoot":"","sources":["../../../src/defence/__tests__/agent-scorer.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Agent Trust Scorer Tests
3
+ */
4
+ import { describe, it, expect } from '@jest/globals';
5
+ import { scoreAgent, getAgentDepth, buildAgentHierarchy, DEFAULT_AGENT_CONFIG } from '../trust/agent-scorer.js';
6
+ describe('Agent Trust Scorer', () => {
7
+ describe('scoreAgent', () => {
8
+ it('should score user-spawned parent at 0.9', () => {
9
+ expect(scoreAgent('user-spawned')).toBe(0.9);
10
+ });
11
+ it('should decay by 0.7 per generation', () => {
12
+ expect(scoreAgent('user-spawned>task-1')).toBe(0.63);
13
+ expect(scoreAgent('user-spawned>task-1>subtask')).toBe(0.441);
14
+ });
15
+ it('should score cron origin at 0.5', () => {
16
+ expect(scoreAgent('cron')).toBe(0.5);
17
+ });
18
+ it('should score agent-spawned at 0.3', () => {
19
+ expect(scoreAgent('agent-spawned')).toBe(0.3);
20
+ });
21
+ it('should decay cron sub-agents', () => {
22
+ expect(scoreAgent('cron>job-1')).toBe(0.35);
23
+ });
24
+ it('should default unknown origins to 0.3', () => {
25
+ expect(scoreAgent('unknown-origin')).toBe(0.3);
26
+ });
27
+ it('should block agents beyond max depth', () => {
28
+ const deep = 'user-spawned>a>b>c>d>e>f'; // depth 6, max is 5
29
+ expect(scoreAgent(deep)).toBe(0);
30
+ });
31
+ it('should allow agents at max depth', () => {
32
+ const atMax = 'user-spawned>a>b>c>d>e'; // depth 5 = max
33
+ expect(scoreAgent(atMax)).toBeGreaterThan(0);
34
+ });
35
+ it('should accept custom config', () => {
36
+ const config = { ...DEFAULT_AGENT_CONFIG, decayFactor: 0.5 };
37
+ expect(scoreAgent('user-spawned>task', config)).toBe(0.45);
38
+ });
39
+ });
40
+ describe('getAgentDepth', () => {
41
+ it('should return 0 for parent agents', () => {
42
+ expect(getAgentDepth('user-spawned')).toBe(0);
43
+ });
44
+ it('should count hierarchy depth', () => {
45
+ expect(getAgentDepth('user-spawned>a>b>c')).toBe(3);
46
+ });
47
+ });
48
+ describe('buildAgentHierarchy', () => {
49
+ it('should build readable hierarchy', () => {
50
+ const hierarchy = buildAgentHierarchy('user-spawned>task-1');
51
+ expect(hierarchy).toHaveLength(2);
52
+ expect(hierarchy[0]).toContain('user-spawned');
53
+ expect(hierarchy[0]).toContain('0.900');
54
+ expect(hierarchy[1]).toContain('task-1');
55
+ expect(hierarchy[1]).toContain('0.630');
56
+ });
57
+ });
58
+ describe('integration with scoreSource', () => {
59
+ it('should use hierarchy scoring for agent sources', async () => {
60
+ const { scoreSource } = await import('../trust/source-scorer.js');
61
+ const parent = scoreSource({ type: 'agent', identifier: 'user-spawned' });
62
+ expect(parent.score).toBe(0.9);
63
+ const child = scoreSource({ type: 'agent', identifier: 'user-spawned>task-1' });
64
+ expect(child.score).toBe(0.63);
65
+ // Hierarchy should show agent chain
66
+ expect(child.hierarchy[0]).toContain('Agent Hierarchy');
67
+ });
68
+ it('should not affect non-agent sources', async () => {
69
+ const { scoreSource } = await import('../trust/source-scorer.js');
70
+ const cli = scoreSource({ type: 'cli', identifier: 'mcp' });
71
+ expect(cli.score).toBe(0.9);
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=agent-scorer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-scorer.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/agent-scorer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Environment-Based Source Inference Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=env-detector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-detector.test.d.ts","sourceRoot":"","sources":["../../../src/defence/__tests__/env-detector.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Environment-Based Source Inference Tests
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
5
+ import { inferSourceFromEnvironment, resolveSource } from '../trust/env-detector.js';
6
+ describe('Environment-Based Source Inference', () => {
7
+ const originalEnv = { ...process.env };
8
+ beforeEach(() => {
9
+ // Clear all relevant env vars
10
+ delete process.env.CLAUDE_CODE_ENTRYPOINT;
11
+ delete process.env.CLAUDE_AGENT_CONTEXT;
12
+ delete process.env.SHIELDCORTEX_AGENT_SOURCE;
13
+ });
14
+ afterEach(() => {
15
+ // Restore original env
16
+ process.env = { ...originalEnv };
17
+ });
18
+ describe('inferSourceFromEnvironment', () => {
19
+ it('should detect direct Claude Code CLI', () => {
20
+ process.env.CLAUDE_CODE_ENTRYPOINT = 'cli';
21
+ const result = inferSourceFromEnvironment();
22
+ expect(result.source).toEqual({ type: 'cli', identifier: 'mcp' });
23
+ expect(result.method).toBe('env:CLAUDE_CODE_ENTRYPOINT');
24
+ expect(result.confidence).toBe('high');
25
+ });
26
+ it('should detect Claude Code sub-agent', () => {
27
+ process.env.CLAUDE_CODE_ENTRYPOINT = 'subagent';
28
+ const result = inferSourceFromEnvironment();
29
+ expect(result.source).toEqual({ type: 'agent', identifier: 'agent-spawned' });
30
+ expect(result.confidence).toBe('high');
31
+ });
32
+ it('should detect CLAUDE_AGENT_CONTEXT=subagent', () => {
33
+ process.env.CLAUDE_AGENT_CONTEXT = 'subagent';
34
+ const result = inferSourceFromEnvironment();
35
+ expect(result.source.type).toBe('agent');
36
+ expect(result.source.identifier).toBe('agent-spawned');
37
+ expect(result.method).toBe('env:CLAUDE_AGENT_CONTEXT');
38
+ });
39
+ it('should detect CLAUDE_AGENT_CONTEXT=hook', () => {
40
+ process.env.CLAUDE_AGENT_CONTEXT = 'hook';
41
+ const result = inferSourceFromEnvironment();
42
+ expect(result.source.identifier).toBe('hook');
43
+ });
44
+ it('should parse SHIELDCORTEX_AGENT_SOURCE with type prefix', () => {
45
+ process.env.SHIELDCORTEX_AGENT_SOURCE = 'agent:user-spawned>task-1';
46
+ const result = inferSourceFromEnvironment();
47
+ expect(result.source).toEqual({ type: 'agent', identifier: 'user-spawned>task-1' });
48
+ expect(result.method).toBe('env:SHIELDCORTEX_AGENT_SOURCE');
49
+ expect(result.confidence).toBe('high');
50
+ });
51
+ it('should handle SHIELDCORTEX_AGENT_SOURCE without type prefix', () => {
52
+ process.env.SHIELDCORTEX_AGENT_SOURCE = 'some-agent';
53
+ const result = inferSourceFromEnvironment();
54
+ expect(result.source.type).toBe('agent'); // defaults to agent
55
+ expect(result.source.identifier).toBe('some-agent');
56
+ });
57
+ it('should prioritise SHIELDCORTEX_AGENT_SOURCE over CLAUDE_CODE_ENTRYPOINT', () => {
58
+ process.env.SHIELDCORTEX_AGENT_SOURCE = 'cli:custom-tool';
59
+ process.env.CLAUDE_CODE_ENTRYPOINT = 'subagent';
60
+ const result = inferSourceFromEnvironment();
61
+ expect(result.source).toEqual({ type: 'cli', identifier: 'custom-tool' });
62
+ });
63
+ it('should return unknown:default with low confidence when no env vars set', () => {
64
+ const result = inferSourceFromEnvironment();
65
+ expect(result.source).toEqual({ type: 'cli', identifier: 'unknown' });
66
+ expect(result.method).toBe('default');
67
+ expect(result.confidence).toBe('low');
68
+ });
69
+ });
70
+ describe('resolveSource', () => {
71
+ it('should use declared source when provided', () => {
72
+ const declared = { type: 'agent', identifier: 'user-spawned>task-1' };
73
+ const result = resolveSource(declared);
74
+ expect(result.source).toEqual(declared);
75
+ expect(result.inferred).toBe(false);
76
+ expect(result.detection).toBeUndefined();
77
+ });
78
+ it('should infer from environment when no source declared', () => {
79
+ process.env.CLAUDE_CODE_ENTRYPOINT = 'cli';
80
+ const result = resolveSource(undefined);
81
+ expect(result.source).toEqual({ type: 'cli', identifier: 'mcp' });
82
+ expect(result.inferred).toBe(true);
83
+ expect(result.detection).toBeDefined();
84
+ });
85
+ it('should downgrade unknown sources in strict mode', () => {
86
+ // No env vars → unknown
87
+ const result = resolveSource(undefined, true);
88
+ expect(result.source).toEqual({ type: 'agent', identifier: 'unknown:strict' });
89
+ expect(result.inferred).toBe(true);
90
+ });
91
+ it('should not downgrade env-detected sources in strict mode', () => {
92
+ process.env.CLAUDE_CODE_ENTRYPOINT = 'cli';
93
+ const result = resolveSource(undefined, true);
94
+ // Not default method, so no downgrade
95
+ expect(result.source).toEqual({ type: 'cli', identifier: 'mcp' });
96
+ });
97
+ });
98
+ });
99
+ //# sourceMappingURL=env-detector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-detector.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/env-detector.test.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ const testConfig = {
16
16
  trustThresholdForActions: 0.7,
17
17
  autoQuarantineThreshold: 0.3,
18
18
  flagThreshold: 0.5,
19
+ strictSourceMode: false,
19
20
  };
20
21
  beforeAll(() => {
21
22
  initDatabase(':memory:');
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/pipeline.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,11 @@ describe('Trust Source Scorer', () => {
20
20
  const result = scoreSource({ type: 'web', identifier: 'scraper' });
21
21
  expect(result.score).toBe(0.3);
22
22
  });
23
- it('should score agent source as 0.1', async () => {
23
+ it('should score agent source using hierarchy scorer', async () => {
24
24
  const { scoreSource } = await import('../trust/source-scorer.js');
25
+ // Unknown origin defaults to 0.3 base
25
26
  const result = scoreSource({ type: 'agent', identifier: 'assistant' });
26
- expect(result.score).toBe(0.1);
27
+ expect(result.score).toBe(0.3);
27
28
  });
28
29
  it('should score user:approved as 0.9', async () => {
29
30
  const { scoreSource } = await import('../trust/source-scorer.js');
@@ -1 +1 @@
1
- {"version":3,"file":"trust.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/trust.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trust.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/trust.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,sCAAsC;QACtC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnD,oDAAoD;QACpD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC/E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,OAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { logAudit, createContentHash } from './logger.js';
2
- export { queryAuditLogs, getAuditStats } from './queries.js';
3
- export type { AuditQueryOptions, AuditStats } from './queries.js';
2
+ export { queryAuditLogs, getAuditStats, queryAgentRegistry, queryAgentTimeline, queryAgentOperations } from './queries.js';
3
+ export type { AuditQueryOptions, AuditStats, AgentInfo, AgentTimelinePoint } from './queries.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defence/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defence/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC3H,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { logAudit, createContentHash } from './logger.js';
2
- export { queryAuditLogs, getAuditStats } from './queries.js';
2
+ export { queryAuditLogs, getAuditStats, queryAgentRegistry, queryAgentTimeline, queryAgentOperations } from './queries.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/defence/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/defence/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/defence/audit/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM,CAsC9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/defence/audit/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM,CAuC9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -12,12 +12,12 @@ export function logAudit(entry) {
12
12
  const db = getDatabase();
13
13
  const stmt = db.prepare(`
14
14
  INSERT INTO defence_audit (
15
- memory_id, timestamp, source_type, source_identifier,
15
+ memory_id, project, timestamp, source_type, source_identifier,
16
16
  trust_score, sensitivity_level, firewall_result,
17
17
  anomaly_score, threat_indicators, blocked_patterns,
18
18
  reason, fragmentation_score, pipeline_duration_ms
19
19
  ) VALUES (
20
- @memory_id, @timestamp, @source_type, @source_identifier,
20
+ @memory_id, @project, @timestamp, @source_type, @source_identifier,
21
21
  @trust_score, @sensitivity_level, @firewall_result,
22
22
  @anomaly_score, @threat_indicators, @blocked_patterns,
23
23
  @reason, @fragmentation_score, @pipeline_duration_ms
@@ -25,6 +25,7 @@ export function logAudit(entry) {
25
25
  `);
26
26
  const result = stmt.run({
27
27
  memory_id: entry.memory_id ?? null,
28
+ project: entry.project ?? null,
28
29
  timestamp: entry.timestamp ?? new Date().toISOString(),
29
30
  source_type: entry.source_type,
30
31
  source_identifier: entry.source_identifier,
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/defence/audit/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA6B;IACpD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAYvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtD,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;YACvC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,IAAI;YAClD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;YAC5B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,IAAI;YACtD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,IAAI;SACzD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/defence/audit/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA6B;IACpD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAYvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtD,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;YACvC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,IAAI;YAClD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;YAC5B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,IAAI;YACtD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,IAAI;SACzD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC"}
@@ -2,6 +2,22 @@
2
2
  * Forensic query helpers for the defence audit log
3
3
  */
4
4
  import type { AuditEntry, FirewallResult } from '../types.js';
5
+ export interface AgentInfo {
6
+ source_type: string;
7
+ source_identifier: string;
8
+ operation_count: number;
9
+ last_seen: string;
10
+ avg_trust_score: number;
11
+ min_trust_score: number;
12
+ max_trust_score: number;
13
+ flagged_count: number;
14
+ }
15
+ export interface AgentTimelinePoint {
16
+ timestamp: string;
17
+ trust_score: number;
18
+ firewall_result: string;
19
+ anomaly_score: number;
20
+ }
5
21
  export interface AuditQueryOptions {
6
22
  startTime?: string;
7
23
  endTime?: string;
@@ -9,6 +25,7 @@ export interface AuditQueryOptions {
9
25
  source?: string;
10
26
  firewallResult?: FirewallResult;
11
27
  memoryId?: number;
28
+ project?: string;
12
29
  limit?: number;
13
30
  }
14
31
  export interface AuditStats {
@@ -29,5 +46,22 @@ export declare function queryAuditLogs(options?: AuditQueryOptions): AuditEntry[
29
46
  /**
30
47
  * Get aggregate audit statistics for a time range.
31
48
  */
32
- export declare function getAuditStats(timeRange: '24h' | '7d' | '30d'): AuditStats;
49
+ export declare function getAuditStats(timeRange: '24h' | '7d' | '30d', project?: string): AuditStats;
50
+ /**
51
+ * Get distinct agents aggregated from audit logs.
52
+ */
53
+ export declare function queryAgentRegistry(timeRange?: '24h' | '7d' | '30d', project?: string): AgentInfo[];
54
+ /**
55
+ * Get trust score timeline for a specific agent.
56
+ */
57
+ export declare function queryAgentTimeline(identifier: string, timeRange?: '24h' | '7d' | '30d', project?: string): AgentTimelinePoint[];
58
+ /**
59
+ * Get paginated audit entries for a specific agent.
60
+ */
61
+ export declare function queryAgentOperations(identifier: string, options?: {
62
+ limit?: number;
63
+ offset?: number;
64
+ firewallResult?: FirewallResult;
65
+ project?: string;
66
+ }): AuditEntry[];
33
67
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/defence/audit/queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI9D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,EAAE,CAiC5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,UAAU,CAgEzE"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/defence/audit/queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI9D,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,EAAE,CAsC5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAmE3F;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,KAAK,GAAG,IAAI,GAAG,KAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAqBzG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,KAAK,GAAG,IAAI,GAAG,KAAa,EACvC,OAAO,CAAC,EAAE,MAAM,GACf,kBAAkB,EAAE,CActB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACnG,UAAU,EAAE,CAyBd"}