@attested-intelligence/aga-mcp-server 2.2.0 → 2.2.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/README.md +77 -65
- package/dist/adapters/openclaw.d.ts +0 -1
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +0 -1
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/proxy/evaluator.d.ts +0 -1
- package/dist/proxy/evaluator.d.ts.map +1 -1
- package/dist/proxy/evaluator.js +0 -1
- package/dist/proxy/evaluator.js.map +1 -1
- package/dist/proxy/index.d.ts +0 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +0 -1
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/profiles.d.ts +0 -1
- package/dist/proxy/profiles.d.ts.map +1 -1
- package/dist/proxy/profiles.js +0 -1
- package/dist/proxy/profiles.js.map +1 -1
- package/dist/proxy/server.d.ts +0 -1
- package/dist/proxy/server.d.ts.map +1 -1
- package/dist/proxy/server.js +0 -1
- package/dist/proxy/server.js.map +1 -1
- package/dist/proxy/stdio-bridge.d.ts +0 -1
- package/dist/proxy/stdio-bridge.d.ts.map +1 -1
- package/dist/proxy/stdio-bridge.js +0 -1
- package/dist/proxy/stdio-bridge.js.map +1 -1
- package/dist/proxy/types.d.ts +0 -1
- package/dist/proxy/types.d.ts.map +1 -1
- package/dist/proxy/types.js +0 -1
- package/dist/proxy/types.js.map +1 -1
- package/dist/proxy/verify.d.ts +0 -1
- package/dist/proxy/verify.d.ts.map +1 -1
- package/dist/proxy/verify.js +0 -1
- package/dist/proxy/verify.js.map +1 -1
- package/package.json +92 -97
- package/SECURITY.md +0 -59
- package/independent-verifier/README.md +0 -31
- package/independent-verifier/package.json +0 -18
- package/independent-verifier/verify.ts +0 -211
- package/src/adapters/openclaw.ts +0 -125
- package/src/core/artifact.ts +0 -45
- package/src/core/attestation.ts +0 -33
- package/src/core/behavioral.ts +0 -132
- package/src/core/bundle.ts +0 -45
- package/src/core/chain.ts +0 -72
- package/src/core/checkpoint.ts +0 -22
- package/src/core/delegation.ts +0 -146
- package/src/core/disclosure.ts +0 -32
- package/src/core/identity.ts +0 -62
- package/src/core/index.ts +0 -14
- package/src/core/portal.ts +0 -117
- package/src/core/quarantine.ts +0 -16
- package/src/core/receipt.ts +0 -33
- package/src/core/subject.ts +0 -11
- package/src/core/types.ts +0 -285
- package/src/crypto/hash.ts +0 -33
- package/src/crypto/index.ts +0 -5
- package/src/crypto/merkle.ts +0 -43
- package/src/crypto/salt.ts +0 -18
- package/src/crypto/sign.ts +0 -42
- package/src/crypto/types.ts +0 -19
- package/src/index.ts +0 -12
- package/src/middleware/governance.ts +0 -95
- package/src/middleware/index.ts +0 -1
- package/src/proxy/evaluator.ts +0 -176
- package/src/proxy/index.ts +0 -259
- package/src/proxy/profiles.ts +0 -48
- package/src/proxy/server.ts +0 -499
- package/src/proxy/stdio-bridge.ts +0 -171
- package/src/proxy/types.ts +0 -40
- package/src/proxy/verify.ts +0 -202
- package/src/server.ts +0 -435
- package/src/storage/index.ts +0 -3
- package/src/storage/interface.ts +0 -21
- package/src/storage/memory.ts +0 -27
- package/src/storage/sqlite.ts +0 -45
- package/src/tools/README.md +0 -13
- package/src/utils/canonical.ts +0 -14
- package/src/utils/constants.ts +0 -3
- package/src/utils/timestamp.ts +0 -12
- package/src/utils/uuid.ts +0 -2
package/src/storage/memory.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { AGAStorage } from './interface.js';
|
|
2
|
-
import type { PolicyArtifact, ContinuityEvent, SignedReceipt, CheckpointReference } from '../core/types.js';
|
|
3
|
-
|
|
4
|
-
export class MemoryStorage implements AGAStorage {
|
|
5
|
-
private artifacts = new Map<string, PolicyArtifact>();
|
|
6
|
-
private events: ContinuityEvent[] = [];
|
|
7
|
-
private receipts = new Map<string, SignedReceipt>();
|
|
8
|
-
private checkpoints: CheckpointReference[] = [];
|
|
9
|
-
|
|
10
|
-
async initialize() {}
|
|
11
|
-
async close() {}
|
|
12
|
-
async storeArtifact(a: PolicyArtifact) { this.artifacts.set(a.sealed_hash, a); }
|
|
13
|
-
async getArtifact(h: string) { return this.artifacts.get(h) ?? null; }
|
|
14
|
-
async getLatestArtifact() { const a = [...this.artifacts.values()]; return a.length ? a[a.length - 1] : null; }
|
|
15
|
-
async storeEvent(e: ContinuityEvent) { this.events.push(e); }
|
|
16
|
-
async getEvent(seq: number) { return this.events.find(e => e.sequence_number === seq) ?? null; }
|
|
17
|
-
async getEvents(s: number, e: number) { return this.events.filter(ev => ev.sequence_number >= s && ev.sequence_number <= e); }
|
|
18
|
-
async getLatestEvent() { return this.events.length ? this.events[this.events.length - 1] : null; }
|
|
19
|
-
async getAllEvents() { return [...this.events]; }
|
|
20
|
-
async storeReceipt(r: SignedReceipt) { this.receipts.set(r.receipt_id, r); }
|
|
21
|
-
async getReceipt(id: string) { return this.receipts.get(id) ?? null; }
|
|
22
|
-
async getReceiptsByArtifact(ref: string) { return [...this.receipts.values()].filter(r => r.artifact_reference === ref); }
|
|
23
|
-
async getAllReceipts() { return [...this.receipts.values()]; }
|
|
24
|
-
async storeCheckpoint(c: CheckpointReference) { this.checkpoints.push(c); }
|
|
25
|
-
async getLatestCheckpoint() { return this.checkpoints.length ? this.checkpoints[this.checkpoints.length - 1] : null; }
|
|
26
|
-
async getCheckpoints() { return [...this.checkpoints]; }
|
|
27
|
-
}
|
package/src/storage/sqlite.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { AGAStorage } from './interface.js';
|
|
2
|
-
import type { PolicyArtifact, ContinuityEvent, SignedReceipt, CheckpointReference } from '../core/types.js';
|
|
3
|
-
|
|
4
|
-
// Dynamic import - better-sqlite3 is optional (requires native build tools)
|
|
5
|
-
let Database: any;
|
|
6
|
-
try {
|
|
7
|
-
Database = (await import('better-sqlite3')).default;
|
|
8
|
-
} catch {
|
|
9
|
-
// Will throw at construction time if better-sqlite3 is not available
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export class SQLiteStorage implements AGAStorage {
|
|
13
|
-
private db: any;
|
|
14
|
-
constructor(path = 'aga.sqlite') {
|
|
15
|
-
if (!Database) throw new Error('better-sqlite3 is not installed. Install Visual Studio Build Tools and run: npm install better-sqlite3');
|
|
16
|
-
this.db = new Database(path);
|
|
17
|
-
this.db.pragma('journal_mode = WAL');
|
|
18
|
-
}
|
|
19
|
-
async initialize() {
|
|
20
|
-
this.db.exec(`
|
|
21
|
-
CREATE TABLE IF NOT EXISTS artifacts (sealed_hash TEXT PRIMARY KEY, data TEXT NOT NULL, created_at TEXT DEFAULT (datetime('now')));
|
|
22
|
-
CREATE TABLE IF NOT EXISTS chain_events (sequence_number INTEGER PRIMARY KEY, event_id TEXT UNIQUE, event_type TEXT, leaf_hash TEXT, data TEXT NOT NULL);
|
|
23
|
-
CREATE TABLE IF NOT EXISTS receipts (receipt_id TEXT PRIMARY KEY, artifact_reference TEXT, sequence_number INTEGER, data TEXT NOT NULL);
|
|
24
|
-
CREATE TABLE IF NOT EXISTS checkpoints (id INTEGER PRIMARY KEY AUTOINCREMENT, merkle_root TEXT, batch_start INTEGER, batch_end INTEGER, data TEXT NOT NULL);
|
|
25
|
-
CREATE INDEX IF NOT EXISTS idx_receipts_artifact ON receipts(artifact_reference);
|
|
26
|
-
`);
|
|
27
|
-
}
|
|
28
|
-
async close() { this.db.close(); }
|
|
29
|
-
private p<T>(row: any): T | null { return row ? JSON.parse(row.data) : null; }
|
|
30
|
-
async storeArtifact(a: PolicyArtifact) { this.db.prepare('INSERT OR REPLACE INTO artifacts (sealed_hash,data) VALUES (?,?)').run(a.sealed_hash, JSON.stringify(a)); }
|
|
31
|
-
async getArtifact(h: string) { return this.p<PolicyArtifact>(this.db.prepare('SELECT data FROM artifacts WHERE sealed_hash=?').get(h)); }
|
|
32
|
-
async getLatestArtifact() { return this.p<PolicyArtifact>(this.db.prepare('SELECT data FROM artifacts ORDER BY created_at DESC LIMIT 1').get()); }
|
|
33
|
-
async storeEvent(e: ContinuityEvent) { this.db.prepare('INSERT INTO chain_events (sequence_number,event_id,event_type,leaf_hash,data) VALUES (?,?,?,?,?)').run(e.sequence_number, e.event_id, e.event_type, e.leaf_hash, JSON.stringify(e)); }
|
|
34
|
-
async getEvent(seq: number) { return this.p<ContinuityEvent>(this.db.prepare('SELECT data FROM chain_events WHERE sequence_number=?').get(seq)); }
|
|
35
|
-
async getEvents(s: number, e: number) { return (this.db.prepare('SELECT data FROM chain_events WHERE sequence_number>=? AND sequence_number<=? ORDER BY sequence_number').all(s, e) as any[]).map((r: any) => JSON.parse(r.data)); }
|
|
36
|
-
async getLatestEvent() { return this.p<ContinuityEvent>(this.db.prepare('SELECT data FROM chain_events ORDER BY sequence_number DESC LIMIT 1').get()); }
|
|
37
|
-
async getAllEvents() { return (this.db.prepare('SELECT data FROM chain_events ORDER BY sequence_number').all() as any[]).map((r: any) => JSON.parse(r.data)); }
|
|
38
|
-
async storeReceipt(r: SignedReceipt) { this.db.prepare('INSERT INTO receipts (receipt_id,artifact_reference,sequence_number,data) VALUES (?,?,?,?)').run(r.receipt_id, r.artifact_reference, r.sequence_number, JSON.stringify(r)); }
|
|
39
|
-
async getReceipt(id: string) { return this.p<SignedReceipt>(this.db.prepare('SELECT data FROM receipts WHERE receipt_id=?').get(id)); }
|
|
40
|
-
async getReceiptsByArtifact(ref: string) { return (this.db.prepare('SELECT data FROM receipts WHERE artifact_reference=? ORDER BY sequence_number').all(ref) as any[]).map((r: any) => JSON.parse(r.data)); }
|
|
41
|
-
async getAllReceipts() { return (this.db.prepare('SELECT data FROM receipts ORDER BY sequence_number').all() as any[]).map((r: any) => JSON.parse(r.data)); }
|
|
42
|
-
async storeCheckpoint(c: CheckpointReference) { this.db.prepare('INSERT INTO checkpoints (merkle_root,batch_start,batch_end,data) VALUES (?,?,?,?)').run(c.merkle_root, c.batch_start_sequence, c.batch_end_sequence, JSON.stringify(c)); }
|
|
43
|
-
async getLatestCheckpoint() { return this.p<CheckpointReference>(this.db.prepare('SELECT data FROM checkpoints ORDER BY id DESC LIMIT 1').get()); }
|
|
44
|
-
async getCheckpoints() { return (this.db.prepare('SELECT data FROM checkpoints ORDER BY id').all() as any[]).map((r: any) => JSON.parse(r.data)); }
|
|
45
|
-
}
|
package/src/tools/README.md
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Tools Directory
|
|
2
|
-
|
|
3
|
-
All MCP tool handlers are defined inline in `src/server.ts`.
|
|
4
|
-
This keeps the server as a single-file reference implementation.
|
|
5
|
-
|
|
6
|
-
For production use, refactor tools into individual files here:
|
|
7
|
-
- attestation-tools.ts (attest_subject)
|
|
8
|
-
- enforcement-tools.ts (measure_integrity, revoke_artifact)
|
|
9
|
-
- chain-tools.ts (init_chain, verify_chain, get_chain_events)
|
|
10
|
-
- checkpoint-tools.ts (create_checkpoint)
|
|
11
|
-
- bundle-tools.ts (generate_evidence_bundle, verify_bundle_offline)
|
|
12
|
-
- disclosure-tools.ts (request_claim, list_claims)
|
|
13
|
-
- portal-tools.ts (get_server_info, get_portal_state, get_receipts)
|
package/src/utils/canonical.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export function deepSortKeys(obj: unknown): unknown {
|
|
2
|
-
if (obj === null || obj === undefined || typeof obj !== 'object') return obj;
|
|
3
|
-
if (Array.isArray(obj)) return obj.map(deepSortKeys);
|
|
4
|
-
if (obj instanceof Uint8Array) return obj;
|
|
5
|
-
const sorted: Record<string, unknown> = {};
|
|
6
|
-
for (const key of Object.keys(obj as Record<string, unknown>).sort()) {
|
|
7
|
-
sorted[key] = deepSortKeys((obj as Record<string, unknown>)[key]);
|
|
8
|
-
}
|
|
9
|
-
return sorted;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function canonicalize(obj: unknown): string {
|
|
13
|
-
return JSON.stringify(deepSortKeys(obj));
|
|
14
|
-
}
|
package/src/utils/constants.ts
DELETED
package/src/utils/timestamp.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export function utcNow(): string { return new Date().toISOString(); }
|
|
2
|
-
|
|
3
|
-
export function isWithinPeriod(now: string, effective: string, expiration?: string | null): boolean {
|
|
4
|
-
const n = Date.parse(now);
|
|
5
|
-
if (n < Date.parse(effective)) return false;
|
|
6
|
-
if (expiration && n > Date.parse(expiration)) return false;
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function isExpired(issuedAt: string, ttlSeconds: number): boolean {
|
|
11
|
-
return Date.now() > Date.parse(issuedAt) + ttlSeconds * 1000;
|
|
12
|
-
}
|
package/src/utils/uuid.ts
DELETED