cognitive-kit 1.0.0-alpha.1
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/LICENSE +21 -0
- package/README.md +110 -0
- package/cli-wrapper.cjs +5 -0
- package/dist/Kit.d.ts +52 -0
- package/dist/Kit.js +250 -0
- package/dist/Kit.js.map +1 -0
- package/dist/agencies/AgencyOrchestrator.d.ts +24 -0
- package/dist/agencies/AgencyOrchestrator.js +219 -0
- package/dist/agencies/AgencyOrchestrator.js.map +1 -0
- package/dist/agencies/AgencyRegistry.d.ts +13 -0
- package/dist/agencies/AgencyRegistry.js +172 -0
- package/dist/agencies/AgencyRegistry.js.map +1 -0
- package/dist/agencies/AgentDefinition.d.ts +35 -0
- package/dist/agencies/AgentDefinition.js +2 -0
- package/dist/agencies/AgentDefinition.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +34 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/ConfigurationManager.d.ts +24 -0
- package/dist/config/ConfigurationManager.js +74 -0
- package/dist/config/ConfigurationManager.js.map +1 -0
- package/dist/federation/FederationClient.d.ts +20 -0
- package/dist/federation/FederationClient.js +122 -0
- package/dist/federation/FederationClient.js.map +1 -0
- package/dist/federation/FederationManager.d.ts +30 -0
- package/dist/federation/FederationManager.js +96 -0
- package/dist/federation/FederationManager.js.map +1 -0
- package/dist/federation/FederationProtocol.d.ts +45 -0
- package/dist/federation/FederationProtocol.js +18 -0
- package/dist/federation/FederationProtocol.js.map +1 -0
- package/dist/federation/FederationServer.d.ts +20 -0
- package/dist/federation/FederationServer.js +193 -0
- package/dist/federation/FederationServer.js.map +1 -0
- package/dist/forge/ForgeRegistry.d.ts +25 -0
- package/dist/forge/ForgeRegistry.js +60 -0
- package/dist/forge/ForgeRegistry.js.map +1 -0
- package/dist/forge/PatternDetector.d.ts +38 -0
- package/dist/forge/PatternDetector.js +75 -0
- package/dist/forge/PatternDetector.js.map +1 -0
- package/dist/forge/SkillForger.d.ts +12 -0
- package/dist/forge/SkillForger.js +78 -0
- package/dist/forge/SkillForger.js.map +1 -0
- package/dist/host/HostAdapter.d.ts +8 -0
- package/dist/host/HostAdapter.js +2 -0
- package/dist/host/HostAdapter.js.map +1 -0
- package/dist/host/adapters/VSCodeAdapter.d.ts +46 -0
- package/dist/host/adapters/VSCodeAdapter.js +158 -0
- package/dist/host/adapters/VSCodeAdapter.js.map +1 -0
- package/dist/identity/IdentityManager.d.ts +18 -0
- package/dist/identity/IdentityManager.js +94 -0
- package/dist/identity/IdentityManager.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/MCPServer.d.ts +25 -0
- package/dist/mcp/MCPServer.js +147 -0
- package/dist/mcp/MCPServer.js.map +1 -0
- package/dist/mcp/ToolRegistry.d.ts +12 -0
- package/dist/mcp/ToolRegistry.js +45 -0
- package/dist/mcp/ToolRegistry.js.map +1 -0
- package/dist/mcp/transports/DirectTransport.d.ts +12 -0
- package/dist/mcp/transports/DirectTransport.js +25 -0
- package/dist/mcp/transports/DirectTransport.js.map +1 -0
- package/dist/mcp/transports/SSETransport.d.ts +13 -0
- package/dist/mcp/transports/SSETransport.js +77 -0
- package/dist/mcp/transports/SSETransport.js.map +1 -0
- package/dist/mcp/transports/StdioTransport.d.ts +10 -0
- package/dist/mcp/transports/StdioTransport.js +45 -0
- package/dist/mcp/transports/StdioTransport.js.map +1 -0
- package/dist/mcp/transports/Transport.d.ts +11 -0
- package/dist/mcp/transports/Transport.js +2 -0
- package/dist/mcp/transports/Transport.js.map +1 -0
- package/dist/mcp/transports/index.d.ts +4 -0
- package/dist/mcp/transports/index.js +4 -0
- package/dist/mcp/transports/index.js.map +1 -0
- package/dist/memory/MemoryManager.d.ts +17 -0
- package/dist/memory/MemoryManager.js +62 -0
- package/dist/memory/MemoryManager.js.map +1 -0
- package/dist/memory/providers/InMemoryProvider.d.ts +13 -0
- package/dist/memory/providers/InMemoryProvider.js +52 -0
- package/dist/memory/providers/InMemoryProvider.js.map +1 -0
- package/dist/memory/providers/SQLiteProvider.d.ts +17 -0
- package/dist/memory/providers/SQLiteProvider.js +129 -0
- package/dist/memory/providers/SQLiteProvider.js.map +1 -0
- package/dist/security/GuardianGate.d.ts +24 -0
- package/dist/security/GuardianGate.js +105 -0
- package/dist/security/GuardianGate.js.map +1 -0
- package/dist/security/SovereigntyManager.d.ts +46 -0
- package/dist/security/SovereigntyManager.js +111 -0
- package/dist/security/SovereigntyManager.js.map +1 -0
- package/dist/security/StateGuardian.d.ts +40 -0
- package/dist/security/StateGuardian.js +76 -0
- package/dist/security/StateGuardian.js.map +1 -0
- package/dist/security/SynapticFirewall.d.ts +38 -0
- package/dist/security/SynapticFirewall.js +65 -0
- package/dist/security/SynapticFirewall.js.map +1 -0
- package/dist/skills/SkillRegistry.d.ts +15 -0
- package/dist/skills/SkillRegistry.js +135 -0
- package/dist/skills/SkillRegistry.js.map +1 -0
- package/dist/sql.js.d.ts +22 -0
- package/dist/tools/agency/agency_execute.d.ts +3 -0
- package/dist/tools/agency/agency_execute.js +75 -0
- package/dist/tools/agency/agency_execute.js.map +1 -0
- package/dist/tools/agency/meta_orchestrator.d.ts +2 -0
- package/dist/tools/agency/meta_orchestrator.js +118 -0
- package/dist/tools/agency/meta_orchestrator.js.map +1 -0
- package/dist/tools/agency/subagent_protocol.d.ts +2 -0
- package/dist/tools/agency/subagent_protocol.js +114 -0
- package/dist/tools/agency/subagent_protocol.js.map +1 -0
- package/dist/tools/agency/swarm_orchestrator.d.ts +2 -0
- package/dist/tools/agency/swarm_orchestrator.js +125 -0
- package/dist/tools/agency/swarm_orchestrator.js.map +1 -0
- package/dist/tools/analysis/code_archaeologist.d.ts +2 -0
- package/dist/tools/analysis/code_archaeologist.js +214 -0
- package/dist/tools/analysis/code_archaeologist.js.map +1 -0
- package/dist/tools/analysis/consensus_engine.d.ts +2 -0
- package/dist/tools/analysis/consensus_engine.js +178 -0
- package/dist/tools/analysis/consensus_engine.js.map +1 -0
- package/dist/tools/analysis/execution_flow.d.ts +2 -0
- package/dist/tools/analysis/execution_flow.js +204 -0
- package/dist/tools/analysis/execution_flow.js.map +1 -0
- package/dist/tools/analysis/sentiment_adapter.d.ts +2 -0
- package/dist/tools/analysis/sentiment_adapter.js +177 -0
- package/dist/tools/analysis/sentiment_adapter.js.map +1 -0
- package/dist/tools/cognitive/creativity.d.ts +2 -0
- package/dist/tools/cognitive/creativity.js +84 -0
- package/dist/tools/cognitive/creativity.js.map +1 -0
- package/dist/tools/cognitive/planning.d.ts +2 -0
- package/dist/tools/cognitive/planning.js +65 -0
- package/dist/tools/cognitive/planning.js.map +1 -0
- package/dist/tools/cognitive/reasoning.d.ts +2 -0
- package/dist/tools/cognitive/reasoning.js +124 -0
- package/dist/tools/cognitive/reasoning.js.map +1 -0
- package/dist/tools/cognitive/reflection.d.ts +2 -0
- package/dist/tools/cognitive/reflection.js +101 -0
- package/dist/tools/cognitive/reflection.js.map +1 -0
- package/dist/tools/cognitive/research.d.ts +2 -0
- package/dist/tools/cognitive/research.js +49 -0
- package/dist/tools/cognitive/research.js.map +1 -0
- package/dist/tools/federation_tools.d.ts +3 -0
- package/dist/tools/federation_tools.js +98 -0
- package/dist/tools/federation_tools.js.map +1 -0
- package/dist/tools/forge_tools.d.ts +4 -0
- package/dist/tools/forge_tools.js +71 -0
- package/dist/tools/forge_tools.js.map +1 -0
- package/dist/tools/knowledge/context_synth.d.ts +2 -0
- package/dist/tools/knowledge/context_synth.js +199 -0
- package/dist/tools/knowledge/context_synth.js.map +1 -0
- package/dist/tools/knowledge/knowledge_evolve.d.ts +2 -0
- package/dist/tools/knowledge/knowledge_evolve.js +223 -0
- package/dist/tools/knowledge/knowledge_evolve.js.map +1 -0
- package/dist/tools/knowledge/memory_vam.d.ts +2 -0
- package/dist/tools/knowledge/memory_vam.js +148 -0
- package/dist/tools/knowledge/memory_vam.js.map +1 -0
- package/dist/tools/registry.d.ts +24 -0
- package/dist/tools/registry.js +46 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/security/blast_radius.d.ts +2 -0
- package/dist/tools/security/blast_radius.js +106 -0
- package/dist/tools/security/blast_radius.js.map +1 -0
- package/dist/tools/security/ethics_audit.d.ts +2 -0
- package/dist/tools/security/ethics_audit.js +117 -0
- package/dist/tools/security/ethics_audit.js.map +1 -0
- package/dist/tools/security/guardian_tools.d.ts +5 -0
- package/dist/tools/security/guardian_tools.js +104 -0
- package/dist/tools/security/guardian_tools.js.map +1 -0
- package/dist/tools/security/integrity_ledger.d.ts +2 -0
- package/dist/tools/security/integrity_ledger.js +111 -0
- package/dist/tools/security/integrity_ledger.js.map +1 -0
- package/dist/tools/security/red_team.d.ts +2 -0
- package/dist/tools/security/red_team.js +101 -0
- package/dist/tools/security/red_team.js.map +1 -0
- package/dist/tools/security/security_gate.d.ts +2 -0
- package/dist/tools/security/security_gate.js +93 -0
- package/dist/tools/security/security_gate.js.map +1 -0
- package/dist/tools/security/threat_mapper.d.ts +2 -0
- package/dist/tools/security/threat_mapper.js +102 -0
- package/dist/tools/security/threat_mapper.js.map +1 -0
- package/dist/types.d.ts +125 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
- package/types/sql.js.d.ts +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryProvider.js","sourceRoot":"","sources":["../../../src/memory/providers/InMemoryProvider.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,WAAW,CAAC;IACpB,IAAI,GAAG,IAAI,GAAG,EAAwB,CAAC;IACvC,OAAO,GAAG,CAAC,CAAC;IAEpB,KAAK,CAAC,OAAO,KAAmB,CAAC;IAEjC,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAA8C;QACxD,MAAM,KAAK,GAAiB;YAC1B,GAAG,MAAM;YACT,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,GAAW;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAkB;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MemoryProvider } from '../../types.js';
|
|
2
|
+
import type { MemoryRecord, MemoryQuery } from '../../types.js';
|
|
3
|
+
export declare class SQLiteProvider implements MemoryProvider {
|
|
4
|
+
readonly name = "sqlite";
|
|
5
|
+
private db;
|
|
6
|
+
private dbPath;
|
|
7
|
+
private initPromise;
|
|
8
|
+
constructor(path?: string);
|
|
9
|
+
connect(): Promise<void>;
|
|
10
|
+
private init;
|
|
11
|
+
disconnect(): Promise<void>;
|
|
12
|
+
store(record: Omit<MemoryRecord, 'id' | 'timestamp'>): Promise<MemoryRecord>;
|
|
13
|
+
recall(query: MemoryQuery): Promise<MemoryRecord[]>;
|
|
14
|
+
delete(namespace: string, key: string): Promise<boolean>;
|
|
15
|
+
clear(namespace?: string): Promise<void>;
|
|
16
|
+
private ensureConnected;
|
|
17
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
let sqlJsInit = null;
|
|
2
|
+
export class SQLiteProvider {
|
|
3
|
+
name = 'sqlite';
|
|
4
|
+
db = null;
|
|
5
|
+
dbPath;
|
|
6
|
+
initPromise = null;
|
|
7
|
+
constructor(path) {
|
|
8
|
+
this.dbPath = path || ':memory:';
|
|
9
|
+
}
|
|
10
|
+
async connect() {
|
|
11
|
+
if (this.initPromise)
|
|
12
|
+
return this.initPromise;
|
|
13
|
+
this.initPromise = this.init();
|
|
14
|
+
return this.initPromise;
|
|
15
|
+
}
|
|
16
|
+
async init() {
|
|
17
|
+
if (!sqlJsInit) {
|
|
18
|
+
const mod = await import('sql.js');
|
|
19
|
+
sqlJsInit = mod.default || mod;
|
|
20
|
+
}
|
|
21
|
+
const SQL = await sqlJsInit();
|
|
22
|
+
if (this.dbPath === ':memory:') {
|
|
23
|
+
this.db = new SQL.Database();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const fs = await import('node:fs');
|
|
27
|
+
try {
|
|
28
|
+
const buffer = fs.readFileSync(this.dbPath);
|
|
29
|
+
this.db = new SQL.Database(buffer);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
this.db = new SQL.Database();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.db.run(`
|
|
36
|
+
CREATE TABLE IF NOT EXISTS memory (
|
|
37
|
+
id TEXT PRIMARY KEY,
|
|
38
|
+
namespace TEXT NOT NULL,
|
|
39
|
+
key TEXT NOT NULL,
|
|
40
|
+
value TEXT NOT NULL,
|
|
41
|
+
timestamp INTEGER NOT NULL,
|
|
42
|
+
metadata TEXT
|
|
43
|
+
)
|
|
44
|
+
`);
|
|
45
|
+
this.db.run('CREATE INDEX IF NOT EXISTS idx_memory_namespace ON memory(namespace)');
|
|
46
|
+
this.db.run('CREATE INDEX IF NOT EXISTS idx_memory_key ON memory(key)');
|
|
47
|
+
this.db.run('CREATE INDEX IF NOT EXISTS idx_memory_timestamp ON memory(timestamp DESC)');
|
|
48
|
+
}
|
|
49
|
+
async disconnect() {
|
|
50
|
+
if (this.db && this.dbPath !== ':memory:') {
|
|
51
|
+
const data = this.db.export();
|
|
52
|
+
const fs = await import('node:fs');
|
|
53
|
+
fs.writeFileSync(this.dbPath, Buffer.from(data));
|
|
54
|
+
}
|
|
55
|
+
this.db?.close();
|
|
56
|
+
this.db = null;
|
|
57
|
+
this.initPromise = null;
|
|
58
|
+
}
|
|
59
|
+
async store(record) {
|
|
60
|
+
this.ensureConnected();
|
|
61
|
+
const id = `mem-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
62
|
+
const timestamp = Date.now();
|
|
63
|
+
this.db.run(`INSERT OR REPLACE INTO memory (id, namespace, key, value, timestamp, metadata)
|
|
64
|
+
VALUES (?, ?, ?, ?, ?, ?)`, [id, record.namespace, record.key, JSON.stringify(record.value), timestamp,
|
|
65
|
+
record.metadata ? JSON.stringify(record.metadata) : null]);
|
|
66
|
+
return { ...record, id, timestamp };
|
|
67
|
+
}
|
|
68
|
+
async recall(query) {
|
|
69
|
+
this.ensureConnected();
|
|
70
|
+
let sql = 'SELECT * FROM memory WHERE 1=1';
|
|
71
|
+
const params = [];
|
|
72
|
+
if (query.namespace) {
|
|
73
|
+
sql += ' AND namespace = ?';
|
|
74
|
+
params.push(query.namespace);
|
|
75
|
+
}
|
|
76
|
+
if (query.key) {
|
|
77
|
+
sql += ' AND key = ?';
|
|
78
|
+
params.push(query.key);
|
|
79
|
+
}
|
|
80
|
+
if (query.search) {
|
|
81
|
+
sql += ' AND value LIKE ?';
|
|
82
|
+
params.push(`%${query.search}%`);
|
|
83
|
+
}
|
|
84
|
+
sql += ' ORDER BY timestamp DESC';
|
|
85
|
+
if (query.limit) {
|
|
86
|
+
sql += ' LIMIT ?';
|
|
87
|
+
params.push(query.limit);
|
|
88
|
+
}
|
|
89
|
+
if (query.offset) {
|
|
90
|
+
sql += ' OFFSET ?';
|
|
91
|
+
params.push(query.offset);
|
|
92
|
+
}
|
|
93
|
+
const stmt = this.db.prepare(sql);
|
|
94
|
+
if (params.length > 0)
|
|
95
|
+
stmt.bind(params);
|
|
96
|
+
const rows = [];
|
|
97
|
+
while (stmt.step()) {
|
|
98
|
+
rows.push(stmt.getAsObject());
|
|
99
|
+
}
|
|
100
|
+
stmt.free();
|
|
101
|
+
return rows.map((r) => ({
|
|
102
|
+
id: r.id,
|
|
103
|
+
namespace: r.namespace,
|
|
104
|
+
key: r.key,
|
|
105
|
+
value: JSON.parse(r.value),
|
|
106
|
+
timestamp: r.timestamp,
|
|
107
|
+
metadata: r.metadata ? JSON.parse(r.metadata) : undefined,
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
async delete(namespace, key) {
|
|
111
|
+
this.ensureConnected();
|
|
112
|
+
this.db.run('DELETE FROM memory WHERE namespace = ? AND key = ?', [namespace, key]);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
async clear(namespace) {
|
|
116
|
+
this.ensureConnected();
|
|
117
|
+
if (namespace) {
|
|
118
|
+
this.db.run('DELETE FROM memory WHERE namespace = ?', [namespace]);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.db.run('DELETE FROM memory');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
ensureConnected() {
|
|
125
|
+
if (!this.db)
|
|
126
|
+
throw new Error('SQLiteProvider not connected. Call connect() first.');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=SQLiteProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLiteProvider.js","sourceRoot":"","sources":["../../../src/memory/providers/SQLiteProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ToolRegistry } from '../mcp/ToolRegistry.js';
|
|
2
|
+
import type { ToolResult, ToolContext } from '../types.js';
|
|
3
|
+
import { SovereigntyManager } from './SovereigntyManager.js';
|
|
4
|
+
import { SynapticFirewall } from './SynapticFirewall.js';
|
|
5
|
+
import { StateGuardian } from './StateGuardian.js';
|
|
6
|
+
export interface GuardianConfig {
|
|
7
|
+
enableFirewall?: boolean;
|
|
8
|
+
enableSovereignty?: boolean;
|
|
9
|
+
enableStateGuardian?: boolean;
|
|
10
|
+
requiredSovereignty?: number;
|
|
11
|
+
riskThreshold?: 'low' | 'medium' | 'high';
|
|
12
|
+
}
|
|
13
|
+
export declare class GuardianGate {
|
|
14
|
+
private sovManager;
|
|
15
|
+
private firewall_;
|
|
16
|
+
private stateGuardian_;
|
|
17
|
+
private toolRegistry;
|
|
18
|
+
private config;
|
|
19
|
+
constructor(toolRegistry: ToolRegistry, sovereignty: SovereigntyManager, config?: GuardianConfig);
|
|
20
|
+
executeTool(toolId: string, params: Record<string, unknown>, context: ToolContext): Promise<ToolResult>;
|
|
21
|
+
get sovereigntyManager(): SovereigntyManager;
|
|
22
|
+
get firewall(): SynapticFirewall;
|
|
23
|
+
get stateGuardian(): StateGuardian;
|
|
24
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { SynapticFirewall } from './SynapticFirewall.js';
|
|
2
|
+
import { StateGuardian } from './StateGuardian.js';
|
|
3
|
+
export class GuardianGate {
|
|
4
|
+
sovManager;
|
|
5
|
+
firewall_;
|
|
6
|
+
stateGuardian_;
|
|
7
|
+
toolRegistry;
|
|
8
|
+
config;
|
|
9
|
+
constructor(toolRegistry, sovereignty, config) {
|
|
10
|
+
this.toolRegistry = toolRegistry;
|
|
11
|
+
this.sovManager = sovereignty;
|
|
12
|
+
this.firewall_ = new SynapticFirewall();
|
|
13
|
+
this.stateGuardian_ = new StateGuardian();
|
|
14
|
+
this.config = {
|
|
15
|
+
enableFirewall: config?.enableFirewall ?? true,
|
|
16
|
+
enableSovereignty: config?.enableSovereignty ?? true,
|
|
17
|
+
enableStateGuardian: config?.enableStateGuardian ?? true,
|
|
18
|
+
requiredSovereignty: config?.requiredSovereignty ?? 0.1,
|
|
19
|
+
riskThreshold: config?.riskThreshold ?? 'medium',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async executeTool(toolId, params, context) {
|
|
23
|
+
const startTime = Date.now();
|
|
24
|
+
const op = this.sovManager.createOperation(context.identity, `execute:${toolId}`, toolId);
|
|
25
|
+
// 1. State check
|
|
26
|
+
if (this.config.enableStateGuardian && this.stateGuardian_.isFrozen) {
|
|
27
|
+
this.sovManager.rejectOperation(op.operationId, `System frozen: ${this.stateGuardian_.freezeMessage}`);
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
data: null,
|
|
31
|
+
error: `GUARDIAN: System is frozen — ${this.stateGuardian_.freezeMessage}`,
|
|
32
|
+
metadata: { guardian: 'frozen', operationId: op.operationId },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// 2. Sovereignty check
|
|
36
|
+
if (this.config.enableSovereignty) {
|
|
37
|
+
const tool = this.toolRegistry.get(toolId);
|
|
38
|
+
const requiredSov = tool?.sovereignty ?? this.config.requiredSovereignty;
|
|
39
|
+
if (!this.sovManager.validateSovereignty(context.identity, requiredSov)) {
|
|
40
|
+
this.sovManager.rejectOperation(op.operationId, `Insufficient sovereignty: ${context.identity.sovereignty} < ${requiredSov}`);
|
|
41
|
+
this.stateGuardian_.recordSovereigntyViolation(context.identity.actorId, toolId);
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
data: null,
|
|
45
|
+
error: `GUARDIAN: Sovereignty violation — required ${requiredSov}, caller has ${context.identity.sovereignty}`,
|
|
46
|
+
metadata: { guardian: 'sovereignty-blocked', operationId: op.operationId },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// 3. Firewall check
|
|
51
|
+
if (this.config.enableFirewall) {
|
|
52
|
+
const inspection = this.firewall_.inspectParams(params, toolId);
|
|
53
|
+
if (!inspection.passed) {
|
|
54
|
+
this.sovManager.rejectOperation(op.operationId, `Firewall blocked: ${inspection.blocks.map(b => b.id).join(', ')}`);
|
|
55
|
+
for (const block of inspection.blocks) {
|
|
56
|
+
this.stateGuardian_.recordFirewallBlock(block.id, toolId);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
data: null,
|
|
61
|
+
error: `GUARDIAN: Firewall blocked — ${inspection.blocks.map(b => `${b.name} (${b.description})`).join('; ')}`,
|
|
62
|
+
metadata: {
|
|
63
|
+
guardian: 'firewall-blocked',
|
|
64
|
+
blocks: inspection.blocks.map(b => b.id),
|
|
65
|
+
flags: inspection.flags.map(f => f.id),
|
|
66
|
+
operationId: op.operationId,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 4. Execute tool
|
|
72
|
+
const toolResult = await this.toolRegistry.execute(toolId, params, {
|
|
73
|
+
...context,
|
|
74
|
+
identity: this.sovManager.delegate(context.identity, 0.1, op.operationId),
|
|
75
|
+
});
|
|
76
|
+
const elapsedMs = Date.now() - startTime;
|
|
77
|
+
// 5. Record
|
|
78
|
+
if (toolResult.success) {
|
|
79
|
+
this.sovManager.approveOperation(op.operationId);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.sovManager.rejectOperation(op.operationId, toolResult.error);
|
|
83
|
+
}
|
|
84
|
+
if (this.config.enableStateGuardian) {
|
|
85
|
+
this.stateGuardian_.recordToolCall(toolId, toolResult.success, elapsedMs);
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
...toolResult,
|
|
89
|
+
metadata: {
|
|
90
|
+
...toolResult.metadata,
|
|
91
|
+
guardian: {
|
|
92
|
+
operationId: op.operationId,
|
|
93
|
+
seal: op.seal,
|
|
94
|
+
sovereigntyChain: op.sovereigntyChain.length,
|
|
95
|
+
elapsedMs,
|
|
96
|
+
},
|
|
97
|
+
sovereignty: context.identity.sovereignty,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
get sovereigntyManager() { return this.sovManager; }
|
|
102
|
+
get firewall() { return this.firewall_; }
|
|
103
|
+
get stateGuardian() { return this.stateGuardian_; }
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=GuardianGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuardianGate.js","sourceRoot":"","sources":["../../src/security/GuardianGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { IdentityClaims, SovereigntyConfig } from '../types.js';
|
|
2
|
+
export interface SovereigntyRecord {
|
|
3
|
+
operationId: string;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
actor: IdentityClaims;
|
|
6
|
+
action: string;
|
|
7
|
+
resource: string;
|
|
8
|
+
parentOperation?: string;
|
|
9
|
+
sovereigntyChain: SovereigntyLink[];
|
|
10
|
+
seal: string;
|
|
11
|
+
status: 'pending' | 'approved' | 'rejected' | 'escalated';
|
|
12
|
+
}
|
|
13
|
+
export interface SovereigntyLink {
|
|
14
|
+
actorId: string;
|
|
15
|
+
actorType: string;
|
|
16
|
+
sovereignty: number;
|
|
17
|
+
action: string;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class SovereigntyManager {
|
|
21
|
+
private hostConfig;
|
|
22
|
+
private records;
|
|
23
|
+
private frozen;
|
|
24
|
+
constructor(config: SovereigntyConfig);
|
|
25
|
+
get hostId(): string;
|
|
26
|
+
get hostName(): string;
|
|
27
|
+
createOperation(actor: IdentityClaims, action: string, resource: string, parentOp?: string): SovereigntyRecord;
|
|
28
|
+
approveOperation(operationId: string): void;
|
|
29
|
+
rejectOperation(operationId: string, reason?: string): void;
|
|
30
|
+
validateSovereignty(actor: IdentityClaims, requiredSovereignty: number): boolean;
|
|
31
|
+
delegate(from: IdentityClaims, toSovereignty: number, operationId: string): IdentityClaims;
|
|
32
|
+
verifyChain(operationId: string): {
|
|
33
|
+
valid: boolean;
|
|
34
|
+
chainLength: number;
|
|
35
|
+
lastSeal: string;
|
|
36
|
+
};
|
|
37
|
+
getOperationHistory(resource?: string, limit?: number): SovereigntyRecord[];
|
|
38
|
+
freeze(): void;
|
|
39
|
+
unfreeze(): void;
|
|
40
|
+
get isFrozen(): boolean;
|
|
41
|
+
get totalOperations(): number;
|
|
42
|
+
freezeReason(): string | null;
|
|
43
|
+
private makeLink;
|
|
44
|
+
private generateSeal;
|
|
45
|
+
private log;
|
|
46
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export class SovereigntyManager {
|
|
2
|
+
hostConfig;
|
|
3
|
+
records = [];
|
|
4
|
+
frozen = false;
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.hostConfig = config;
|
|
7
|
+
}
|
|
8
|
+
get hostId() { return this.hostConfig.hostId; }
|
|
9
|
+
get hostName() { return this.hostConfig.hostName; }
|
|
10
|
+
createOperation(actor, action, resource, parentOp) {
|
|
11
|
+
const operationId = `op-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
12
|
+
const chain = parentOp
|
|
13
|
+
? [...(this.records.find(r => r.operationId === parentOp)?.sovereigntyChain ?? []), this.makeLink(actor, action)]
|
|
14
|
+
: [this.makeLink(actor, action)];
|
|
15
|
+
const record = {
|
|
16
|
+
operationId,
|
|
17
|
+
timestamp: Date.now(),
|
|
18
|
+
actor,
|
|
19
|
+
action,
|
|
20
|
+
resource,
|
|
21
|
+
parentOperation: parentOp,
|
|
22
|
+
sovereigntyChain: chain,
|
|
23
|
+
seal: this.generateSeal(chain),
|
|
24
|
+
status: 'pending',
|
|
25
|
+
};
|
|
26
|
+
this.records.push(record);
|
|
27
|
+
if (this.records.length > 1000)
|
|
28
|
+
this.records.shift();
|
|
29
|
+
return record;
|
|
30
|
+
}
|
|
31
|
+
approveOperation(operationId) {
|
|
32
|
+
const r = this.records.find(r => r.operationId === operationId);
|
|
33
|
+
if (r)
|
|
34
|
+
r.status = 'approved';
|
|
35
|
+
}
|
|
36
|
+
rejectOperation(operationId, reason) {
|
|
37
|
+
const r = this.records.find(r => r.operationId === operationId);
|
|
38
|
+
if (r) {
|
|
39
|
+
r.status = 'rejected';
|
|
40
|
+
this.log(`${reason ?? 'Rejected by sovereignty policy'}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
validateSovereignty(actor, requiredSovereignty) {
|
|
44
|
+
if (this.frozen)
|
|
45
|
+
return false;
|
|
46
|
+
if (actor.actorType === 'host')
|
|
47
|
+
return true;
|
|
48
|
+
return actor.sovereignty >= requiredSovereignty;
|
|
49
|
+
}
|
|
50
|
+
delegate(from, toSovereignty, operationId) {
|
|
51
|
+
const delegatedSovereignty = Math.min(from.sovereignty * 0.8, toSovereignty);
|
|
52
|
+
const record = this.records.find(r => r.operationId === operationId);
|
|
53
|
+
if (record) {
|
|
54
|
+
record.sovereigntyChain.push(this.makeLink(from, `delegate:${delegatedSovereignty.toFixed(2)}`));
|
|
55
|
+
record.seal = this.generateSeal(record.sovereigntyChain);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
actorId: `${from.actorId}-delegate`,
|
|
59
|
+
actorType: from.actorType,
|
|
60
|
+
sovereignty: delegatedSovereignty,
|
|
61
|
+
permissions: from.permissions,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
verifyChain(operationId) {
|
|
65
|
+
const record = this.records.find(r => r.operationId === operationId);
|
|
66
|
+
if (!record)
|
|
67
|
+
return { valid: false, chainLength: 0, lastSeal: '' };
|
|
68
|
+
const expectedSeal = this.generateSeal(record.sovereigntyChain);
|
|
69
|
+
const valid = expectedSeal === record.seal;
|
|
70
|
+
return { valid, chainLength: record.sovereigntyChain.length, lastSeal: record.seal };
|
|
71
|
+
}
|
|
72
|
+
getOperationHistory(resource, limit = 20) {
|
|
73
|
+
let result = this.records;
|
|
74
|
+
if (resource)
|
|
75
|
+
result = result.filter(r => r.resource === resource);
|
|
76
|
+
return result.slice(-limit).reverse();
|
|
77
|
+
}
|
|
78
|
+
freeze() {
|
|
79
|
+
this.frozen = true;
|
|
80
|
+
this.log('SYSTEM FROZEN — all operations blocked');
|
|
81
|
+
}
|
|
82
|
+
unfreeze() {
|
|
83
|
+
this.frozen = false;
|
|
84
|
+
this.log('SYSTEM UNFROZEN — operations resumed');
|
|
85
|
+
}
|
|
86
|
+
get isFrozen() { return this.frozen; }
|
|
87
|
+
get totalOperations() { return this.records.length; }
|
|
88
|
+
freezeReason() {
|
|
89
|
+
return this.frozen ? `Frozen at ${new Date(this.records[this.records.length - 1]?.timestamp).toISOString()}` : null;
|
|
90
|
+
}
|
|
91
|
+
makeLink(actor, action) {
|
|
92
|
+
return {
|
|
93
|
+
actorId: actor.actorId,
|
|
94
|
+
actorType: actor.actorType,
|
|
95
|
+
sovereignty: actor.sovereignty,
|
|
96
|
+
action,
|
|
97
|
+
timestamp: Date.now(),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
generateSeal(chain) {
|
|
101
|
+
const raw = chain.map(l => `${l.actorId}:${l.sovereignty}:${l.action}`).join('|');
|
|
102
|
+
let hash = 0;
|
|
103
|
+
for (let i = 0; i < raw.length; i++)
|
|
104
|
+
hash = ((hash << 5) - hash) + raw.charCodeAt(i) | 0;
|
|
105
|
+
return `sov:${Math.abs(hash).toString(16).padStart(12, '0')}:${chain.length}`;
|
|
106
|
+
}
|
|
107
|
+
log(msg) {
|
|
108
|
+
console.error(`[sovereignty] ${msg}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=SovereigntyManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SovereigntyManager.js","sourceRoot":"","sources":["../../src/security/SovereigntyManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface SystemMetrics {
|
|
2
|
+
totalToolCalls: number;
|
|
3
|
+
failedCalls: number;
|
|
4
|
+
errorRate: number;
|
|
5
|
+
sovereigntyViolations: number;
|
|
6
|
+
firewallBlocks: number;
|
|
7
|
+
avgResponseMs: number;
|
|
8
|
+
activeAgents: number;
|
|
9
|
+
memoryUsage: number;
|
|
10
|
+
uptimeMs: number;
|
|
11
|
+
}
|
|
12
|
+
type GuardianEventType = 'high-error-rate' | 'sovereignty-violation' | 'firewall-breach' | 'memory-pressure' | 'tool-failure' | 'anomaly-detected';
|
|
13
|
+
interface GuardianEvent {
|
|
14
|
+
type: GuardianEventType;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
severity: 'info' | 'warning' | 'critical';
|
|
17
|
+
message: string;
|
|
18
|
+
data?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export declare class StateGuardian {
|
|
21
|
+
private events;
|
|
22
|
+
private toolCallHistory;
|
|
23
|
+
private startTime;
|
|
24
|
+
private activeAgentCount;
|
|
25
|
+
private frozen;
|
|
26
|
+
private freezeReason;
|
|
27
|
+
recordToolCall(toolId: string, success: boolean, elapsedMs: number): void;
|
|
28
|
+
setMemoryPressure(usagePercent: number): void;
|
|
29
|
+
recordSovereigntyViolation(actorId: string, resource: string): void;
|
|
30
|
+
recordFirewallBlock(ruleId: string, toolId: string): void;
|
|
31
|
+
freeze(reason: string): void;
|
|
32
|
+
unfreeze(): void;
|
|
33
|
+
get isFrozen(): boolean;
|
|
34
|
+
get freezeMessage(): string | null;
|
|
35
|
+
setActiveAgentCount(count: number): void;
|
|
36
|
+
getMetrics(): SystemMetrics;
|
|
37
|
+
getRecentEvents(count?: number): GuardianEvent[];
|
|
38
|
+
private emit;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export class StateGuardian {
|
|
2
|
+
events = [];
|
|
3
|
+
toolCallHistory = [];
|
|
4
|
+
startTime = Date.now();
|
|
5
|
+
activeAgentCount = 0;
|
|
6
|
+
frozen = false;
|
|
7
|
+
freezeReason = null;
|
|
8
|
+
recordToolCall(toolId, success, elapsedMs) {
|
|
9
|
+
this.toolCallHistory.push({ toolId, success, elapsedMs, timestamp: Date.now() });
|
|
10
|
+
if (this.toolCallHistory.length > 500)
|
|
11
|
+
this.toolCallHistory.shift();
|
|
12
|
+
if (!success) {
|
|
13
|
+
this.emit('tool-failure', `Tool ${toolId} failed (${elapsedMs}ms)`, 'warning', { toolId, elapsedMs });
|
|
14
|
+
}
|
|
15
|
+
const recentCalls = this.toolCallHistory.slice(-50);
|
|
16
|
+
const failCount = recentCalls.filter(c => !c.success).length;
|
|
17
|
+
if (recentCalls.length >= 10 && failCount / recentCalls.length > 0.5) {
|
|
18
|
+
this.emit('high-error-rate', `Error rate ${(failCount / recentCalls.length * 100).toFixed(0)}% in last ${recentCalls.length} calls`, 'critical', { failCount, totalCalls: recentCalls.length });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
setMemoryPressure(usagePercent) {
|
|
22
|
+
if (usagePercent > 90) {
|
|
23
|
+
this.emit('memory-pressure', `Memory at ${usagePercent.toFixed(0)}%`, 'critical', { usagePercent });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
recordSovereigntyViolation(actorId, resource) {
|
|
27
|
+
this.emit('sovereignty-violation', `Sovereignty violation by ${actorId} on ${resource}`, 'warning', { actorId, resource });
|
|
28
|
+
}
|
|
29
|
+
recordFirewallBlock(ruleId, toolId) {
|
|
30
|
+
this.emit('firewall-breach', `Firewall rule ${ruleId} blocked on ${toolId}`, 'warning', { ruleId, toolId });
|
|
31
|
+
}
|
|
32
|
+
freeze(reason) {
|
|
33
|
+
this.frozen = true;
|
|
34
|
+
this.freezeReason = reason;
|
|
35
|
+
this.emit('anomaly-detected', `FREEZE: ${reason}`, 'critical', { reason });
|
|
36
|
+
}
|
|
37
|
+
unfreeze() {
|
|
38
|
+
this.frozen = false;
|
|
39
|
+
this.freezeReason = null;
|
|
40
|
+
}
|
|
41
|
+
get isFrozen() { return this.frozen; }
|
|
42
|
+
get freezeMessage() { return this.freezeReason; }
|
|
43
|
+
setActiveAgentCount(count) {
|
|
44
|
+
this.activeAgentCount = count;
|
|
45
|
+
}
|
|
46
|
+
getMetrics() {
|
|
47
|
+
const total = this.toolCallHistory.length;
|
|
48
|
+
const failed = this.toolCallHistory.filter(c => !c.success).length;
|
|
49
|
+
const recentCalls = this.toolCallHistory.slice(-20);
|
|
50
|
+
const avgMs = recentCalls.length > 0
|
|
51
|
+
? Math.round(recentCalls.reduce((s, c) => s + c.elapsedMs, 0) / recentCalls.length)
|
|
52
|
+
: 0;
|
|
53
|
+
return {
|
|
54
|
+
totalToolCalls: total,
|
|
55
|
+
failedCalls: failed,
|
|
56
|
+
errorRate: total > 0 ? parseFloat((failed / total).toFixed(3)) : 0,
|
|
57
|
+
sovereigntyViolations: this.events.filter(e => e.type === 'sovereignty-violation').length,
|
|
58
|
+
firewallBlocks: this.events.filter(e => e.type === 'firewall-breach').length,
|
|
59
|
+
avgResponseMs: avgMs,
|
|
60
|
+
activeAgents: this.activeAgentCount,
|
|
61
|
+
memoryUsage: process.memoryUsage?.()?.heapUsed ? Math.round(process.memoryUsage().heapUsed / 1024 / 1024) : 0,
|
|
62
|
+
uptimeMs: Date.now() - this.startTime,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
getRecentEvents(count = 20) {
|
|
66
|
+
return this.events.slice(-count).reverse();
|
|
67
|
+
}
|
|
68
|
+
emit(type, message, severity, data) {
|
|
69
|
+
this.events.push({ type, timestamp: Date.now(), severity, message, data });
|
|
70
|
+
if (this.events.length > 200)
|
|
71
|
+
this.events.shift();
|
|
72
|
+
const prefix = severity === 'critical' ? 'CRIT' : severity === 'warning' ? 'WARN' : 'INFO';
|
|
73
|
+
console.error(`[guardian][${prefix}] ${message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=StateGuardian.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateGuardian.js","sourceRoot":"","sources":["../../src/security/StateGuardian.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
interface FirewallRule {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
pattern: RegExp;
|
|
5
|
+
severity: 'block' | 'flag' | 'log';
|
|
6
|
+
category: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class SynapticFirewall {
|
|
10
|
+
private rules;
|
|
11
|
+
private blockedCount;
|
|
12
|
+
private flaggedCount;
|
|
13
|
+
private recentHits;
|
|
14
|
+
addRule(rule: FirewallRule): void;
|
|
15
|
+
inspect(input: string, context?: string): {
|
|
16
|
+
passed: boolean;
|
|
17
|
+
blocks: FirewallRule[];
|
|
18
|
+
flags: FirewallRule[];
|
|
19
|
+
};
|
|
20
|
+
inspectParams(params: Record<string, unknown>, toolId: string): {
|
|
21
|
+
passed: boolean;
|
|
22
|
+
blocks: FirewallRule[];
|
|
23
|
+
flags: FirewallRule[];
|
|
24
|
+
};
|
|
25
|
+
getStats(): {
|
|
26
|
+
blockedCount: number;
|
|
27
|
+
flaggedCount: number;
|
|
28
|
+
totalHits: number;
|
|
29
|
+
rulesActive: number;
|
|
30
|
+
};
|
|
31
|
+
getRecentHits(count?: number): Array<{
|
|
32
|
+
rule: string;
|
|
33
|
+
input: string;
|
|
34
|
+
timestamp: number;
|
|
35
|
+
}>;
|
|
36
|
+
clearStats(): void;
|
|
37
|
+
}
|
|
38
|
+
export {};
|