shieldcortex 2.1.4 → 2.3.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.
- package/README.md +8 -1
- package/dist/api/visualization-server.d.ts.map +1 -1
- package/dist/api/visualization-server.js +16 -3
- package/dist/api/visualization-server.js.map +1 -1
- package/dist/database/init.d.ts.map +1 -1
- package/dist/database/init.js +44 -0
- package/dist/database/init.js.map +1 -1
- package/dist/defence/__tests__/access-control.test.d.ts +5 -0
- package/dist/defence/__tests__/access-control.test.d.ts.map +1 -0
- package/dist/defence/__tests__/access-control.test.js +89 -0
- package/dist/defence/__tests__/access-control.test.js.map +1 -0
- package/dist/defence/__tests__/agent-scorer.test.d.ts +5 -0
- package/dist/defence/__tests__/agent-scorer.test.d.ts.map +1 -0
- package/dist/defence/__tests__/agent-scorer.test.js +75 -0
- package/dist/defence/__tests__/agent-scorer.test.js.map +1 -0
- package/dist/defence/__tests__/env-detector.test.d.ts +5 -0
- package/dist/defence/__tests__/env-detector.test.d.ts.map +1 -0
- package/dist/defence/__tests__/env-detector.test.js +99 -0
- package/dist/defence/__tests__/env-detector.test.js.map +1 -0
- package/dist/defence/__tests__/pipeline.test.js +1 -0
- package/dist/defence/__tests__/pipeline.test.js.map +1 -1
- package/dist/defence/__tests__/trust.test.js +3 -2
- package/dist/defence/__tests__/trust.test.js.map +1 -1
- package/dist/defence/audit/logger.d.ts.map +1 -1
- package/dist/defence/audit/logger.js +3 -2
- package/dist/defence/audit/logger.js.map +1 -1
- package/dist/defence/audit/queries.d.ts +2 -1
- package/dist/defence/audit/queries.d.ts.map +1 -1
- package/dist/defence/audit/queries.js +27 -21
- package/dist/defence/audit/queries.js.map +1 -1
- package/dist/defence/pipeline.d.ts +1 -1
- package/dist/defence/pipeline.d.ts.map +1 -1
- package/dist/defence/pipeline.js +3 -1
- package/dist/defence/pipeline.js.map +1 -1
- package/dist/defence/quarantine/auto-expire.d.ts +15 -0
- package/dist/defence/quarantine/auto-expire.d.ts.map +1 -0
- package/dist/defence/quarantine/auto-expire.js +38 -0
- package/dist/defence/quarantine/auto-expire.js.map +1 -0
- package/dist/defence/trust/access-control.d.ts +29 -0
- package/dist/defence/trust/access-control.d.ts.map +1 -0
- package/dist/defence/trust/access-control.js +64 -0
- package/dist/defence/trust/access-control.js.map +1 -0
- package/dist/defence/trust/agent-scorer.d.ts +33 -0
- package/dist/defence/trust/agent-scorer.d.ts.map +1 -0
- package/dist/defence/trust/agent-scorer.js +55 -0
- package/dist/defence/trust/agent-scorer.js.map +1 -0
- package/dist/defence/trust/env-detector.d.ts +43 -0
- package/dist/defence/trust/env-detector.d.ts.map +1 -0
- package/dist/defence/trust/env-detector.js +99 -0
- package/dist/defence/trust/env-detector.js.map +1 -0
- package/dist/defence/trust/index.d.ts +6 -0
- package/dist/defence/trust/index.d.ts.map +1 -1
- package/dist/defence/trust/index.js +3 -0
- package/dist/defence/trust/index.js.map +1 -1
- package/dist/defence/trust/source-scorer.d.ts.map +1 -1
- package/dist/defence/trust/source-scorer.js +37 -17
- package/dist/defence/trust/source-scorer.js.map +1 -1
- package/dist/defence/types.d.ts +4 -1
- package/dist/defence/types.d.ts.map +1 -1
- package/dist/defence/types.js +1 -0
- package/dist/defence/types.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/memory/consolidate.d.ts +1 -0
- package/dist/memory/consolidate.d.ts.map +1 -1
- package/dist/memory/consolidate.js +8 -1
- package/dist/memory/consolidate.js.map +1 -1
- package/dist/memory/store.d.ts +6 -6
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +139 -16
- package/dist/memory/store.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +82 -11
- package/dist/server.js.map +1 -1
- package/dist/setup/claude-md.d.ts +3 -1
- package/dist/setup/claude-md.d.ts.map +1 -1
- package/dist/setup/claude-md.js +47 -3
- package/dist/setup/claude-md.js.map +1 -1
- package/dist/setup/doctor.d.ts.map +1 -1
- package/dist/setup/doctor.js +7 -4
- package/dist/setup/doctor.js.map +1 -1
- package/dist/setup/uninstall.d.ts.map +1 -1
- package/dist/setup/uninstall.js +27 -0
- package/dist/setup/uninstall.js.map +1 -1
- package/dist/tools/context.d.ts +18 -0
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +4 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/forget.d.ts +18 -0
- package/dist/tools/forget.d.ts.map +1 -1
- package/dist/tools/forget.js +12 -1
- package/dist/tools/forget.js.map +1 -1
- package/dist/tools/recall.d.ts +38 -0
- package/dist/tools/recall.d.ts.map +1 -1
- package/dist/tools/recall.js +12 -5
- package/dist/tools/recall.js.map +1 -1
- package/dist/tools/remember.d.ts +2 -2
- package/dist/tools/remember.js +1 -1
- package/dist/tools/remember.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 @@
|
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAErF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,8BAA8B;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,uBAAuB;QACvB,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC;YAC3C,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,UAAU,CAAC;YAChD,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC;YAC9C,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,MAAM,CAAC;YAC1C,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,2BAA2B,CAAC;YACpE,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,YAAY,CAAC;YACrD,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;YAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,iBAAiB,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,UAAU,CAAC;YAChD,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;YAC/E,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC;YAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,wBAAwB;YACxB,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC/E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC;YAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9C,sCAAsC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/pipeline.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGrE,kEAAkE;AAClE,mEAAmE;AACnE,iDAAiD;AACjD,MAAM,UAAU,GAAkB;IAChC,IAAI,EAAE,UAAU;IAChB,4BAA4B,EAAE,KAAK;IACnC,wBAAwB,EAAE,EAAE;IAC5B,wBAAwB,EAAE,GAAG;IAC7B,uBAAuB,EAAE,GAAG;IAC5B,aAAa,EAAE,GAAG;
|
|
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
|
|
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.
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"trust.test.js","sourceRoot":"","sources":["../../../src/defence/__tests__/trust.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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"}
|
|
@@ -9,6 +9,7 @@ export interface AuditQueryOptions {
|
|
|
9
9
|
source?: string;
|
|
10
10
|
firewallResult?: FirewallResult;
|
|
11
11
|
memoryId?: number;
|
|
12
|
+
project?: string;
|
|
12
13
|
limit?: number;
|
|
13
14
|
}
|
|
14
15
|
export interface AuditStats {
|
|
@@ -29,5 +30,5 @@ export declare function queryAuditLogs(options?: AuditQueryOptions): AuditEntry[
|
|
|
29
30
|
/**
|
|
30
31
|
* Get aggregate audit statistics for a time range.
|
|
31
32
|
*/
|
|
32
|
-
export declare function getAuditStats(timeRange: '24h' | '7d' | '30d'): AuditStats;
|
|
33
|
+
export declare function getAuditStats(timeRange: '24h' | '7d' | '30d', project?: string): AuditStats;
|
|
33
34
|
//# 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,
|
|
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,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"}
|
|
@@ -11,46 +11,52 @@ export function queryAuditLogs(options = {}) {
|
|
|
11
11
|
const conditions = [];
|
|
12
12
|
const params = {};
|
|
13
13
|
if (options.startTime) {
|
|
14
|
-
conditions.push('timestamp >= @startTime');
|
|
14
|
+
conditions.push('da.timestamp >= @startTime');
|
|
15
15
|
params.startTime = options.startTime;
|
|
16
16
|
}
|
|
17
17
|
if (options.endTime) {
|
|
18
|
-
conditions.push('timestamp <= @endTime');
|
|
18
|
+
conditions.push('da.timestamp <= @endTime');
|
|
19
19
|
params.endTime = options.endTime;
|
|
20
20
|
}
|
|
21
21
|
if (options.firewallResult) {
|
|
22
|
-
conditions.push('firewall_result = @firewallResult');
|
|
22
|
+
conditions.push('da.firewall_result = @firewallResult');
|
|
23
23
|
params.firewallResult = options.firewallResult;
|
|
24
24
|
}
|
|
25
25
|
if (options.source) {
|
|
26
|
-
conditions.push('source_type = @source');
|
|
26
|
+
conditions.push('da.source_type = @source');
|
|
27
27
|
params.source = options.source;
|
|
28
28
|
}
|
|
29
29
|
if (options.memoryId !== undefined) {
|
|
30
|
-
conditions.push('memory_id = @memoryId');
|
|
30
|
+
conditions.push('da.memory_id = @memoryId');
|
|
31
31
|
params.memoryId = options.memoryId;
|
|
32
32
|
}
|
|
33
|
+
if (options.project) {
|
|
34
|
+
conditions.push('da.project = @project');
|
|
35
|
+
params.project = options.project;
|
|
36
|
+
}
|
|
33
37
|
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
34
38
|
const limit = options.limit ?? 50;
|
|
35
|
-
const sql = `SELECT
|
|
39
|
+
const sql = `SELECT da.* FROM defence_audit da ${where} ORDER BY da.timestamp DESC LIMIT @limit`;
|
|
36
40
|
params.limit = limit;
|
|
37
41
|
return db.prepare(sql).all(params);
|
|
38
42
|
}
|
|
39
43
|
/**
|
|
40
44
|
* Get aggregate audit statistics for a time range.
|
|
41
45
|
*/
|
|
42
|
-
export function getAuditStats(timeRange) {
|
|
46
|
+
export function getAuditStats(timeRange, project) {
|
|
43
47
|
const db = getDatabase();
|
|
44
48
|
const hoursMap = { '24h': 24, '7d': 168, '30d': 720 };
|
|
45
49
|
const hours = hoursMap[timeRange];
|
|
46
50
|
const since = new Date(Date.now() - hours * 3600_000).toISOString();
|
|
51
|
+
const projectCond = project ? 'AND da.project = ?' : '';
|
|
52
|
+
const baseParams = project ? [since, project] : [since];
|
|
47
53
|
// Counts by firewall result
|
|
48
54
|
const counts = db.prepare(`
|
|
49
|
-
SELECT firewall_result, COUNT(*) as cnt
|
|
50
|
-
FROM defence_audit
|
|
51
|
-
WHERE timestamp >= ?
|
|
52
|
-
GROUP BY firewall_result
|
|
53
|
-
`).all(
|
|
55
|
+
SELECT da.firewall_result, COUNT(*) as cnt
|
|
56
|
+
FROM defence_audit da
|
|
57
|
+
WHERE da.timestamp >= ? ${projectCond}
|
|
58
|
+
GROUP BY da.firewall_result
|
|
59
|
+
`).all(...baseParams);
|
|
54
60
|
let totalOperations = 0;
|
|
55
61
|
let allowedCount = 0;
|
|
56
62
|
let blockedCount = 0;
|
|
@@ -66,19 +72,19 @@ export function getAuditStats(timeRange) {
|
|
|
66
72
|
}
|
|
67
73
|
// Top sources
|
|
68
74
|
const topSources = db.prepare(`
|
|
69
|
-
SELECT source_type as source, COUNT(*) as count
|
|
70
|
-
FROM defence_audit
|
|
71
|
-
WHERE timestamp >= ?
|
|
72
|
-
GROUP BY source_type
|
|
75
|
+
SELECT da.source_type as source, COUNT(*) as count
|
|
76
|
+
FROM defence_audit da
|
|
77
|
+
WHERE da.timestamp >= ? ${projectCond}
|
|
78
|
+
GROUP BY da.source_type
|
|
73
79
|
ORDER BY count DESC
|
|
74
80
|
LIMIT 10
|
|
75
|
-
`).all(
|
|
81
|
+
`).all(...baseParams);
|
|
76
82
|
// Threat indicator breakdown
|
|
77
83
|
const rows = db.prepare(`
|
|
78
|
-
SELECT threat_indicators
|
|
79
|
-
FROM defence_audit
|
|
80
|
-
WHERE timestamp >= ? AND threat_indicators != '[]'
|
|
81
|
-
`).all(
|
|
84
|
+
SELECT da.threat_indicators
|
|
85
|
+
FROM defence_audit da
|
|
86
|
+
WHERE da.timestamp >= ? ${projectCond} AND da.threat_indicators != '[]'
|
|
87
|
+
`).all(...baseParams);
|
|
82
88
|
const threatBreakdown = {};
|
|
83
89
|
for (const row of rows) {
|
|
84
90
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/defence/audit/queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/defence/audit/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* Fail-open: if any layer throws, the pipeline defaults to ALLOW with a warning.
|
|
6
6
|
*/
|
|
7
7
|
import type { DefenceConfig, DefencePipelineResult, DefenceSource } from './types.js';
|
|
8
|
-
export declare function runDefencePipeline(content: string, title: string, source: DefenceSource, config?: DefenceConfig): DefencePipelineResult;
|
|
8
|
+
export declare function runDefencePipeline(content: string, title: string, source: DefenceSource, config?: DefenceConfig, project?: string): DefencePipelineResult;
|
|
9
9
|
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/defence/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,aAAa,EAKd,MAAM,YAAY,CAAC;AASpB,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/defence/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,aAAa,EAKd,MAAM,YAAY,CAAC;AASpB,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,MAAM,GACf,qBAAqB,CA6HvB"}
|
package/dist/defence/pipeline.js
CHANGED
|
@@ -10,7 +10,7 @@ import { analyzeFirewall } from './firewall/index.js';
|
|
|
10
10
|
import { classifySensitivity } from './sensitivity/index.js';
|
|
11
11
|
import { analyzeFragmentation } from './fragmentation/index.js';
|
|
12
12
|
import { logAudit, createContentHash } from './audit/index.js';
|
|
13
|
-
export function runDefencePipeline(content, title, source, config) {
|
|
13
|
+
export function runDefencePipeline(content, title, source, config, project) {
|
|
14
14
|
const cfg = config ?? DEFAULT_DEFENCE_CONFIG;
|
|
15
15
|
const startTime = performance.now();
|
|
16
16
|
try {
|
|
@@ -54,6 +54,7 @@ export function runDefencePipeline(content, title, source, config) {
|
|
|
54
54
|
const _contentHash = createContentHash(content);
|
|
55
55
|
const auditId = logAudit({
|
|
56
56
|
memory_id: null,
|
|
57
|
+
project: project ?? null,
|
|
57
58
|
timestamp: new Date().toISOString(),
|
|
58
59
|
source_type: source.type,
|
|
59
60
|
source_identifier: source.identifier,
|
|
@@ -82,6 +83,7 @@ export function runDefencePipeline(content, title, source, config) {
|
|
|
82
83
|
console.error('[defence] Pipeline error, failing open:', err);
|
|
83
84
|
const auditId = logAudit({
|
|
84
85
|
memory_id: null,
|
|
86
|
+
project: project ?? null,
|
|
85
87
|
timestamp: new Date().toISOString(),
|
|
86
88
|
source_type: source.type,
|
|
87
89
|
source_identifier: source.identifier,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/defence/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,KAAa,EACb,MAAqB,EACrB,MAAsB;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/defence/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quarantine auto-expiry — rejects unreviewed items after a TTL.
|
|
3
|
+
*
|
|
4
|
+
* Safer default: expired items are rejected (discarded), not promoted.
|
|
5
|
+
* A memory that sat in quarantine for 7 days with nobody reviewing it
|
|
6
|
+
* shouldn't be promoted to the memory store.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Set expires_at on quarantine items that don't have one,
|
|
10
|
+
* then reject any expired items.
|
|
11
|
+
*
|
|
12
|
+
* @returns Number of items expired (rejected)
|
|
13
|
+
*/
|
|
14
|
+
export declare function expireQuarantineItems(ttlDays?: number): number;
|
|
15
|
+
//# sourceMappingURL=auto-expire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-expire.d.ts","sourceRoot":"","sources":["../../../src/defence/quarantine/auto-expire.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,MAAU,GAAG,MAAM,CA0BjE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quarantine auto-expiry — rejects unreviewed items after a TTL.
|
|
3
|
+
*
|
|
4
|
+
* Safer default: expired items are rejected (discarded), not promoted.
|
|
5
|
+
* A memory that sat in quarantine for 7 days with nobody reviewing it
|
|
6
|
+
* shouldn't be promoted to the memory store.
|
|
7
|
+
*/
|
|
8
|
+
import { getDatabase } from '../../database/init.js';
|
|
9
|
+
/**
|
|
10
|
+
* Set expires_at on quarantine items that don't have one,
|
|
11
|
+
* then reject any expired items.
|
|
12
|
+
*
|
|
13
|
+
* @returns Number of items expired (rejected)
|
|
14
|
+
*/
|
|
15
|
+
export function expireQuarantineItems(ttlDays = 7) {
|
|
16
|
+
const db = getDatabase();
|
|
17
|
+
// Set expires_at on new items that don't have one
|
|
18
|
+
db.prepare(`
|
|
19
|
+
UPDATE quarantine
|
|
20
|
+
SET expires_at = datetime(created_at, '+' || ? || ' days')
|
|
21
|
+
WHERE expires_at IS NULL AND status = 'pending'
|
|
22
|
+
`).run(ttlDays);
|
|
23
|
+
// Reject expired items
|
|
24
|
+
const result = db.prepare(`
|
|
25
|
+
UPDATE quarantine
|
|
26
|
+
SET status = 'expired',
|
|
27
|
+
reviewed_by = 'auto-expire',
|
|
28
|
+
reviewed_at = CURRENT_TIMESTAMP
|
|
29
|
+
WHERE status = 'pending'
|
|
30
|
+
AND expires_at IS NOT NULL
|
|
31
|
+
AND expires_at < datetime('now')
|
|
32
|
+
`).run();
|
|
33
|
+
if (result.changes > 0) {
|
|
34
|
+
console.error(`[quarantine] Auto-expired ${result.changes} item(s) after ${ttlDays} days`);
|
|
35
|
+
}
|
|
36
|
+
return result.changes;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=auto-expire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-expire.js","sourceRoot":"","sources":["../../../src/defence/quarantine/auto-expire.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB,CAAC;IACvD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,kDAAkD;IAClD,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhB,uBAAuB;IACvB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;GAQzB,CAAC,CAAC,GAAG,EAAE,CAAC;IAET,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,OAAO,kBAAkB,OAAO,OAAO,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory access control — enforces read/write/delete policies based on trust.
|
|
3
|
+
*
|
|
4
|
+
* Access rules:
|
|
5
|
+
* Trust ≥ 0.7 → Read all, write direct, delete own
|
|
6
|
+
* Trust 0.5–0.7 → Read own + non-restricted, write quarantine, delete own
|
|
7
|
+
* Trust < 0.5 → Read own only, write quarantine, delete none
|
|
8
|
+
*
|
|
9
|
+
* RESTRICTED memories are always blocked below trust 0.7 (credential isolation).
|
|
10
|
+
*/
|
|
11
|
+
import type { DefenceSource } from '../types.js';
|
|
12
|
+
export interface AccessPolicy {
|
|
13
|
+
canRead: boolean;
|
|
14
|
+
canWrite: boolean;
|
|
15
|
+
canDelete: boolean;
|
|
16
|
+
writeRequiresQuarantine: boolean;
|
|
17
|
+
reason: string;
|
|
18
|
+
}
|
|
19
|
+
/** Minimal memory shape needed for access checks */
|
|
20
|
+
export interface AccessCheckMemory {
|
|
21
|
+
id: number;
|
|
22
|
+
source?: string | null;
|
|
23
|
+
sensitivity_level?: string | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check whether a source has access to a memory for a given operation.
|
|
27
|
+
*/
|
|
28
|
+
export declare function checkAccess(memory: AccessCheckMemory, source: DefenceSource, operation: 'read' | 'write' | 'delete'): AccessPolicy;
|
|
29
|
+
//# sourceMappingURL=access-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../../src/defence/trust/access-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,uBAAuB,EAAE,OAAO,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GACrC,YAAY,CA+Cd"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory access control — enforces read/write/delete policies based on trust.
|
|
3
|
+
*
|
|
4
|
+
* Access rules:
|
|
5
|
+
* Trust ≥ 0.7 → Read all, write direct, delete own
|
|
6
|
+
* Trust 0.5–0.7 → Read own + non-restricted, write quarantine, delete own
|
|
7
|
+
* Trust < 0.5 → Read own only, write quarantine, delete none
|
|
8
|
+
*
|
|
9
|
+
* RESTRICTED memories are always blocked below trust 0.7 (credential isolation).
|
|
10
|
+
*/
|
|
11
|
+
import { scoreSource } from './source-scorer.js';
|
|
12
|
+
/**
|
|
13
|
+
* Check whether a source has access to a memory for a given operation.
|
|
14
|
+
*/
|
|
15
|
+
export function checkAccess(memory, source, operation) {
|
|
16
|
+
const trust = scoreSource(source).score;
|
|
17
|
+
const memorySource = memory.source || 'user:direct';
|
|
18
|
+
const callerKey = `${source.type}:${source.identifier}`;
|
|
19
|
+
const isOwner = memorySource === callerKey;
|
|
20
|
+
const isRestricted = memory.sensitivity_level === 'RESTRICTED';
|
|
21
|
+
if (operation === 'read') {
|
|
22
|
+
// RESTRICTED memories: credential isolation
|
|
23
|
+
if (isRestricted && trust < 0.7) {
|
|
24
|
+
return deny('Credential isolation: insufficient trust for RESTRICTED data');
|
|
25
|
+
}
|
|
26
|
+
// Owner always reads own
|
|
27
|
+
if (isOwner) {
|
|
28
|
+
return allow('Owner access');
|
|
29
|
+
}
|
|
30
|
+
// High trust: read all
|
|
31
|
+
if (trust >= 0.7) {
|
|
32
|
+
return allow('High-trust read access');
|
|
33
|
+
}
|
|
34
|
+
// Medium trust: read non-restricted
|
|
35
|
+
if (trust >= 0.5) {
|
|
36
|
+
return allow('Shared read access');
|
|
37
|
+
}
|
|
38
|
+
// Low trust: own only (already checked above)
|
|
39
|
+
return deny('Insufficient trust for shared memories (need ≥0.5)');
|
|
40
|
+
}
|
|
41
|
+
if (operation === 'write') {
|
|
42
|
+
if (trust >= 0.7) {
|
|
43
|
+
return allow('Direct write allowed (high trust)');
|
|
44
|
+
}
|
|
45
|
+
return quarantine(`Sub-agent write requires quarantine (trust=${trust.toFixed(3)})`);
|
|
46
|
+
}
|
|
47
|
+
if (operation === 'delete') {
|
|
48
|
+
if (isOwner && trust >= 0.5) {
|
|
49
|
+
return { canRead: true, canWrite: false, canDelete: true, writeRequiresQuarantine: false, reason: 'Owner deletion' };
|
|
50
|
+
}
|
|
51
|
+
return deny('Can only delete own memories (trust ≥0.5)');
|
|
52
|
+
}
|
|
53
|
+
return deny('Unknown operation');
|
|
54
|
+
}
|
|
55
|
+
function allow(reason) {
|
|
56
|
+
return { canRead: true, canWrite: true, canDelete: false, writeRequiresQuarantine: false, reason };
|
|
57
|
+
}
|
|
58
|
+
function deny(reason) {
|
|
59
|
+
return { canRead: false, canWrite: false, canDelete: false, writeRequiresQuarantine: false, reason };
|
|
60
|
+
}
|
|
61
|
+
function quarantine(reason) {
|
|
62
|
+
return { canRead: true, canWrite: false, canDelete: false, writeRequiresQuarantine: true, reason };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=access-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../../src/defence/trust/access-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiBjD;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,MAAyB,EACzB,MAAqB,EACrB,SAAsC;IAEtC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC;IACpD,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,YAAY,KAAK,SAAS,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,KAAK,YAAY,CAAC;IAE/D,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,4CAA4C;QAC5C,IAAI,YAAY,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC9E,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QAED,uBAAuB;QACvB,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACzC,CAAC;QAED,oCAAoC;QACpC,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACrC,CAAC;QAED,8CAA8C;QAC9C,OAAO,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,UAAU,CAAC,8CAA8C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACvH,CAAC;QACD,OAAO,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,KAAK,CAAC,MAAc;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,IAAI,CAAC,MAAc;IAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent trust scorer — hierarchical trust decay for sub-agents.
|
|
3
|
+
*
|
|
4
|
+
* Agents encode their lineage in the identifier using '>' separators:
|
|
5
|
+
* "user-spawned" → base trust 0.9
|
|
6
|
+
* "user-spawned>task-1" → 0.9 × 0.7 = 0.63
|
|
7
|
+
* "user-spawned>task-1>subtask-2" → 0.9 × 0.7² = 0.44
|
|
8
|
+
* "cron" → base trust 0.5
|
|
9
|
+
* "agent-spawned" → base trust 0.3
|
|
10
|
+
*/
|
|
11
|
+
export interface AgentTrustConfig {
|
|
12
|
+
/** Base trust scores by spawn origin (first segment of identifier) */
|
|
13
|
+
originScores: Record<string, number>;
|
|
14
|
+
/** Multiplier applied per hierarchy depth level */
|
|
15
|
+
decayFactor: number;
|
|
16
|
+
/** Maximum allowed depth — agents beyond this get score 0 */
|
|
17
|
+
maxDepth: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const DEFAULT_AGENT_CONFIG: AgentTrustConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Score an agent based on its hierarchy identifier.
|
|
22
|
+
* Returns a trust score between 0.0 and 1.0.
|
|
23
|
+
*/
|
|
24
|
+
export declare function scoreAgent(identifier: string, config?: AgentTrustConfig): number;
|
|
25
|
+
/**
|
|
26
|
+
* Get the depth of an agent in its hierarchy (0 = parent).
|
|
27
|
+
*/
|
|
28
|
+
export declare function getAgentDepth(identifier: string): number;
|
|
29
|
+
/**
|
|
30
|
+
* Build a human-readable hierarchy showing trust at each level.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildAgentHierarchy(identifier: string, config?: AgentTrustConfig): string[];
|
|
33
|
+
//# sourceMappingURL=agent-scorer.d.ts.map
|