@goplus/agentguard 1.0.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/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/action/detectors/exec.d.ts +21 -0
- package/dist/action/detectors/exec.d.ts.map +1 -0
- package/dist/action/detectors/exec.js +201 -0
- package/dist/action/detectors/exec.js.map +1 -0
- package/dist/action/detectors/index.d.ts +4 -0
- package/dist/action/detectors/index.d.ts.map +1 -0
- package/dist/action/detectors/index.js +20 -0
- package/dist/action/detectors/index.js.map +1 -0
- package/dist/action/detectors/network.d.ts +21 -0
- package/dist/action/detectors/network.d.ts.map +1 -0
- package/dist/action/detectors/network.js +152 -0
- package/dist/action/detectors/network.js.map +1 -0
- package/dist/action/detectors/secret-leak.d.ts +28 -0
- package/dist/action/detectors/secret-leak.d.ts.map +1 -0
- package/dist/action/detectors/secret-leak.js +94 -0
- package/dist/action/detectors/secret-leak.js.map +1 -0
- package/dist/action/goplus/client.d.ts +151 -0
- package/dist/action/goplus/client.d.ts.map +1 -0
- package/dist/action/goplus/client.js +187 -0
- package/dist/action/goplus/client.js.map +1 -0
- package/dist/action/index.d.ts +61 -0
- package/dist/action/index.d.ts.map +1 -0
- package/dist/action/index.js +643 -0
- package/dist/action/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +410 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/policy/default.d.ts +77 -0
- package/dist/policy/default.d.ts.map +1 -0
- package/dist/policy/default.js +94 -0
- package/dist/policy/default.js.map +1 -0
- package/dist/registry/index.d.ts +93 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +280 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/storage.d.ts +69 -0
- package/dist/registry/storage.d.ts.map +1 -0
- package/dist/registry/storage.js +208 -0
- package/dist/registry/storage.js.map +1 -0
- package/dist/registry/trust.d.ts +41 -0
- package/dist/registry/trust.d.ts.map +1 -0
- package/dist/registry/trust.js +139 -0
- package/dist/registry/trust.js.map +1 -0
- package/dist/scanner/file-walker.d.ts +34 -0
- package/dist/scanner/file-walker.d.ts.map +1 -0
- package/dist/scanner/file-walker.js +134 -0
- package/dist/scanner/file-walker.js.map +1 -0
- package/dist/scanner/index.d.ts +67 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +349 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/rules/exfiltration.d.ts +6 -0
- package/dist/scanner/rules/exfiltration.d.ts.map +1 -0
- package/dist/scanner/rules/exfiltration.js +48 -0
- package/dist/scanner/rules/exfiltration.js.map +1 -0
- package/dist/scanner/rules/index.d.ts +18 -0
- package/dist/scanner/rules/index.d.ts.map +1 -0
- package/dist/scanner/rules/index.js +54 -0
- package/dist/scanner/rules/index.js.map +1 -0
- package/dist/scanner/rules/obfuscation.d.ts +6 -0
- package/dist/scanner/rules/obfuscation.d.ts.map +1 -0
- package/dist/scanner/rules/obfuscation.js +37 -0
- package/dist/scanner/rules/obfuscation.js.map +1 -0
- package/dist/scanner/rules/prompt-injection.d.ts +6 -0
- package/dist/scanner/rules/prompt-injection.d.ts.map +1 -0
- package/dist/scanner/rules/prompt-injection.js +38 -0
- package/dist/scanner/rules/prompt-injection.js.map +1 -0
- package/dist/scanner/rules/remote-loader.d.ts +6 -0
- package/dist/scanner/rules/remote-loader.d.ts.map +1 -0
- package/dist/scanner/rules/remote-loader.js +31 -0
- package/dist/scanner/rules/remote-loader.js.map +1 -0
- package/dist/scanner/rules/secrets.d.ts +6 -0
- package/dist/scanner/rules/secrets.d.ts.map +1 -0
- package/dist/scanner/rules/secrets.js +68 -0
- package/dist/scanner/rules/secrets.js.map +1 -0
- package/dist/scanner/rules/shell-exec.d.ts +6 -0
- package/dist/scanner/rules/shell-exec.d.ts.map +1 -0
- package/dist/scanner/rules/shell-exec.js +52 -0
- package/dist/scanner/rules/shell-exec.js.map +1 -0
- package/dist/scanner/rules/web3.d.ts +6 -0
- package/dist/scanner/rules/web3.d.ts.map +1 -0
- package/dist/scanner/rules/web3.js +139 -0
- package/dist/scanner/rules/web3.js.map +1 -0
- package/dist/tests/action.test.d.ts +2 -0
- package/dist/tests/action.test.d.ts.map +1 -0
- package/dist/tests/action.test.js +127 -0
- package/dist/tests/action.test.js.map +1 -0
- package/dist/tests/registry.test.d.ts +2 -0
- package/dist/tests/registry.test.d.ts.map +1 -0
- package/dist/tests/registry.test.js +109 -0
- package/dist/tests/registry.test.js.map +1 -0
- package/dist/tests/scanner.test.d.ts +2 -0
- package/dist/tests/scanner.test.d.ts.map +1 -0
- package/dist/tests/scanner.test.js +57 -0
- package/dist/tests/scanner.test.js.map +1 -0
- package/dist/types/action.d.ts +198 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +3 -0
- package/dist/types/action.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +22 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/registry.d.ts +104 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +21 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/scanner.d.ts +88 -0
- package/dist/types/scanner.d.ts.map +1 -0
- package/dist/types/scanner.js +20 -0
- package/dist/types/scanner.js.map +1 -0
- package/dist/types/skill.d.ts +52 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +33 -0
- package/dist/types/skill.js.map +1 -0
- package/dist/utils/hash.d.ts +21 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +112 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/patterns.d.ts +74 -0
- package/dist/utils/patterns.d.ts.map +1 -0
- package/dist/utils/patterns.js +157 -0
- package/dist/utils/patterns.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CAPABILITY_PRESETS = exports.PERMISSIVE_CAPABILITY = exports.RESTRICTIVE_CAPABILITY = exports.DEFAULT_POLICIES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default policies - most restrictive
|
|
6
|
+
*/
|
|
7
|
+
exports.DEFAULT_POLICIES = {
|
|
8
|
+
// Private key and mnemonic exfiltration is always blocked
|
|
9
|
+
secret_exfil: {
|
|
10
|
+
private_key: 'deny',
|
|
11
|
+
mnemonic: 'deny',
|
|
12
|
+
api_secret: 'confirm',
|
|
13
|
+
},
|
|
14
|
+
// Command execution is denied by default
|
|
15
|
+
exec_command: 'deny',
|
|
16
|
+
// Web3 transactions
|
|
17
|
+
web3: {
|
|
18
|
+
unlimited_approval: 'confirm',
|
|
19
|
+
unknown_spender: 'confirm',
|
|
20
|
+
user_not_present: 'confirm',
|
|
21
|
+
},
|
|
22
|
+
// Network requests
|
|
23
|
+
network: {
|
|
24
|
+
untrusted_domain: 'confirm',
|
|
25
|
+
body_contains_secret: 'deny',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Restrictive capability model
|
|
30
|
+
*/
|
|
31
|
+
exports.RESTRICTIVE_CAPABILITY = {
|
|
32
|
+
network_allowlist: [],
|
|
33
|
+
filesystem_allowlist: [],
|
|
34
|
+
exec: 'deny',
|
|
35
|
+
secrets_allowlist: [],
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Permissive capability model (for trusted skills)
|
|
39
|
+
*/
|
|
40
|
+
exports.PERMISSIVE_CAPABILITY = {
|
|
41
|
+
network_allowlist: ['*'],
|
|
42
|
+
filesystem_allowlist: ['./**'],
|
|
43
|
+
exec: 'allow',
|
|
44
|
+
secrets_allowlist: ['*'],
|
|
45
|
+
web3: {
|
|
46
|
+
chains_allowlist: [1, 56, 137, 42161, 10, 8453], // Major chains
|
|
47
|
+
rpc_allowlist: ['*'],
|
|
48
|
+
tx_policy: 'allow',
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Common capability presets
|
|
53
|
+
*/
|
|
54
|
+
exports.CAPABILITY_PRESETS = {
|
|
55
|
+
/** No capabilities */
|
|
56
|
+
none: exports.RESTRICTIVE_CAPABILITY,
|
|
57
|
+
/** Read-only local access */
|
|
58
|
+
read_only: {
|
|
59
|
+
...exports.RESTRICTIVE_CAPABILITY,
|
|
60
|
+
filesystem_allowlist: ['./**'],
|
|
61
|
+
},
|
|
62
|
+
/** Trading bot preset */
|
|
63
|
+
trading_bot: {
|
|
64
|
+
network_allowlist: [
|
|
65
|
+
'api.binance.com',
|
|
66
|
+
'api.bybit.com',
|
|
67
|
+
'api.okx.com',
|
|
68
|
+
'api.coinbase.com',
|
|
69
|
+
'*.dextools.io',
|
|
70
|
+
'*.coingecko.com',
|
|
71
|
+
],
|
|
72
|
+
filesystem_allowlist: ['./config/**', './logs/**'],
|
|
73
|
+
exec: 'deny',
|
|
74
|
+
secrets_allowlist: ['*_API_KEY', '*_API_SECRET'],
|
|
75
|
+
web3: {
|
|
76
|
+
chains_allowlist: [1, 56, 137, 42161],
|
|
77
|
+
rpc_allowlist: ['*'],
|
|
78
|
+
tx_policy: 'confirm_high_risk',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
/** DeFi interaction preset */
|
|
82
|
+
defi: {
|
|
83
|
+
network_allowlist: ['*'],
|
|
84
|
+
filesystem_allowlist: [],
|
|
85
|
+
exec: 'deny',
|
|
86
|
+
secrets_allowlist: [],
|
|
87
|
+
web3: {
|
|
88
|
+
chains_allowlist: [1, 56, 137, 42161, 10, 8453, 43114],
|
|
89
|
+
rpc_allowlist: ['*'],
|
|
90
|
+
tx_policy: 'confirm_high_risk',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/policy/default.ts"],"names":[],"mappings":";;;AA2BA;;GAEG;AACU,QAAA,gBAAgB,GAAiB;IAC5C,0DAA0D;IAC1D,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,SAAS;KACtB;IAED,yCAAyC;IACzC,YAAY,EAAE,MAAM;IAEpB,oBAAoB;IACpB,IAAI,EAAE;QACJ,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,SAAS;QAC1B,gBAAgB,EAAE,SAAS;KAC5B;IAED,mBAAmB;IACnB,OAAO,EAAE;QACP,gBAAgB,EAAE,SAAS;QAC3B,oBAAoB,EAAE,MAAM;KAC7B;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,sBAAsB,GAAoB;IACrD,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,MAAM;IACZ,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAoB;IACpD,iBAAiB,EAAE,CAAC,GAAG,CAAC;IACxB,oBAAoB,EAAE,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,OAAO;IACb,iBAAiB,EAAE,CAAC,GAAG,CAAC;IACxB,IAAI,EAAE;QACJ,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,eAAe;QAChE,aAAa,EAAE,CAAC,GAAG,CAAC;QACpB,SAAS,EAAE,OAAO;KACnB;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAG;IAChC,sBAAsB;IACtB,IAAI,EAAE,8BAAsB;IAE5B,6BAA6B;IAC7B,SAAS,EAAE;QACT,GAAG,8BAAsB;QACzB,oBAAoB,EAAE,CAAC,MAAM,CAAC;KAC/B;IAED,yBAAyB;IACzB,WAAW,EAAE;QACX,iBAAiB,EAAE;YACjB,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,kBAAkB;YAClB,eAAe;YACf,iBAAiB;SAClB;QACD,oBAAoB,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;QAClD,IAAI,EAAE,MAAe;QACrB,iBAAiB,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;QAChD,IAAI,EAAE;YACJ,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;YACrC,aAAa,EAAE,CAAC,GAAG,CAAC;YACpB,SAAS,EAAE,mBAA4B;SACxC;KACF;IAED,8BAA8B;IAC9B,IAAI,EAAE;QACJ,iBAAiB,EAAE,CAAC,GAAG,CAAC;QACxB,oBAAoB,EAAE,EAAE;QACxB,IAAI,EAAE,MAAe;QACrB,iBAAiB,EAAE,EAAE;QACrB,IAAI,EAAE;YACJ,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC;YACtD,aAAa,EAAE,CAAC,GAAG,CAAC;YACpB,SAAS,EAAE,mBAA4B;SACxC;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { TrustRecord, TrustLevel, AttestRequest, RevokeMatch, ListFilters } from '../types/registry.js';
|
|
2
|
+
import type { SkillIdentity, CapabilityModel } from '../types/skill.js';
|
|
3
|
+
import { type StorageOptions } from './storage.js';
|
|
4
|
+
/**
|
|
5
|
+
* Registry options
|
|
6
|
+
*/
|
|
7
|
+
export interface RegistryOptions extends StorageOptions {
|
|
8
|
+
/** Auto-downgrade on hash/version change */
|
|
9
|
+
autoDowngrade?: boolean;
|
|
10
|
+
/** Require confirmation for trust upgrades */
|
|
11
|
+
requireConfirmForUpgrade?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Lookup result
|
|
15
|
+
*/
|
|
16
|
+
export interface LookupResult {
|
|
17
|
+
/** Found record (if any) */
|
|
18
|
+
record: TrustRecord | null;
|
|
19
|
+
/** Effective trust level (considering expiry, hash changes) */
|
|
20
|
+
effective_trust_level: TrustLevel;
|
|
21
|
+
/** Effective capabilities */
|
|
22
|
+
effective_capabilities: CapabilityModel;
|
|
23
|
+
/** Reason if trust was modified */
|
|
24
|
+
modification_reason?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Attest result
|
|
28
|
+
*/
|
|
29
|
+
export interface AttestResult {
|
|
30
|
+
/** Success */
|
|
31
|
+
success: boolean;
|
|
32
|
+
/** Record key */
|
|
33
|
+
record_key: string;
|
|
34
|
+
/** Requires confirmation */
|
|
35
|
+
requires_confirmation: boolean;
|
|
36
|
+
/** Confirmation reasons */
|
|
37
|
+
confirmation_reasons?: string[];
|
|
38
|
+
/** Created or updated */
|
|
39
|
+
action: 'created' | 'updated';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Skill Registry - Module B
|
|
43
|
+
* Manages trusted/restricted/untrusted skill records
|
|
44
|
+
*/
|
|
45
|
+
export declare class SkillRegistry {
|
|
46
|
+
private storage;
|
|
47
|
+
private options;
|
|
48
|
+
constructor(options?: RegistryOptions);
|
|
49
|
+
/**
|
|
50
|
+
* Look up a skill's trust record
|
|
51
|
+
*/
|
|
52
|
+
lookup(skill: SkillIdentity): Promise<LookupResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Attest (add/update) a trust record
|
|
55
|
+
*/
|
|
56
|
+
attest(request: AttestRequest): Promise<AttestResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Force attest (skip confirmation)
|
|
59
|
+
*/
|
|
60
|
+
forceAttest(request: AttestRequest): Promise<AttestResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Revoke trust records
|
|
63
|
+
*/
|
|
64
|
+
revoke(match: RevokeMatch, reason: string): Promise<number>;
|
|
65
|
+
/**
|
|
66
|
+
* List trust records
|
|
67
|
+
*/
|
|
68
|
+
list(filters?: ListFilters): Promise<TrustRecord[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Get a single record by key
|
|
71
|
+
*/
|
|
72
|
+
get(recordKey: string): Promise<TrustRecord | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a record (hard delete)
|
|
75
|
+
*/
|
|
76
|
+
delete(recordKey: string): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Export registry
|
|
79
|
+
*/
|
|
80
|
+
export(): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* Import registry
|
|
83
|
+
*/
|
|
84
|
+
import(jsonData: string, merge?: boolean): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Clear all records
|
|
87
|
+
*/
|
|
88
|
+
clear(): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
export declare const registry: SkillRegistry;
|
|
91
|
+
export * from './storage.js';
|
|
92
|
+
export * from './trust.js';
|
|
93
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAQpE;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,qBAAqB,EAAE,UAAU,CAAC;IAClC,6BAA6B;IAC7B,sBAAsB,EAAE,eAAe,CAAC;IACxC,mCAAmC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,2BAA2B;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,yBAAyB;IACzB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,GAAE,eAAoB;IASzC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA8EzD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqE3D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BhE;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgDjE;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgCzD;;OAEG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAIzD;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAGD,eAAO,MAAM,QAAQ,eAAsB,CAAC;AAG5C,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.registry = exports.SkillRegistry = void 0;
|
|
18
|
+
const skill_js_1 = require("../types/skill.js");
|
|
19
|
+
const registry_js_1 = require("../types/registry.js");
|
|
20
|
+
const storage_js_1 = require("./storage.js");
|
|
21
|
+
const trust_js_1 = require("./trust.js");
|
|
22
|
+
/**
|
|
23
|
+
* Skill Registry - Module B
|
|
24
|
+
* Manages trusted/restricted/untrusted skill records
|
|
25
|
+
*/
|
|
26
|
+
class SkillRegistry {
|
|
27
|
+
storage;
|
|
28
|
+
options;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.options = {
|
|
31
|
+
autoDowngrade: true,
|
|
32
|
+
requireConfirmForUpgrade: true,
|
|
33
|
+
...options,
|
|
34
|
+
};
|
|
35
|
+
this.storage = new storage_js_1.RegistryStorage(options);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Look up a skill's trust record
|
|
39
|
+
*/
|
|
40
|
+
async lookup(skill) {
|
|
41
|
+
const recordKey = (0, skill_js_1.generateRecordKey)(skill);
|
|
42
|
+
// Try exact match first
|
|
43
|
+
let record = await this.storage.findByKey(recordKey);
|
|
44
|
+
// If not found, check for records with same source but different hash/version
|
|
45
|
+
if (!record) {
|
|
46
|
+
const sourceRecords = await this.storage.findBySource(skill.source);
|
|
47
|
+
// Find best matching record
|
|
48
|
+
for (const r of sourceRecords) {
|
|
49
|
+
if (r.skill.version_ref === skill.version_ref) {
|
|
50
|
+
record = r;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// If still not found, use any record from same source
|
|
55
|
+
if (!record && sourceRecords.length > 0) {
|
|
56
|
+
record = sourceRecords[0];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// No record found - return untrusted
|
|
60
|
+
if (!record) {
|
|
61
|
+
return {
|
|
62
|
+
record: null,
|
|
63
|
+
effective_trust_level: 'untrusted',
|
|
64
|
+
effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Check if record matches exactly
|
|
68
|
+
const exactMatch = (0, registry_js_1.skillMatchesRecord)(skill, record);
|
|
69
|
+
// Check expiry
|
|
70
|
+
if ((0, registry_js_1.isRecordExpired)(record)) {
|
|
71
|
+
return {
|
|
72
|
+
record,
|
|
73
|
+
effective_trust_level: 'untrusted',
|
|
74
|
+
effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
|
|
75
|
+
modification_reason: 'record_expired',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Check for hash/version changes
|
|
79
|
+
if (!exactMatch && this.options.autoDowngrade) {
|
|
80
|
+
const evaluation = (0, trust_js_1.needsReevaluation)(record, skill);
|
|
81
|
+
if (evaluation.needsReevaluation) {
|
|
82
|
+
return {
|
|
83
|
+
record,
|
|
84
|
+
effective_trust_level: 'untrusted',
|
|
85
|
+
effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
|
|
86
|
+
modification_reason: evaluation.reason,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Check if revoked
|
|
91
|
+
if (record.status === 'revoked') {
|
|
92
|
+
return {
|
|
93
|
+
record,
|
|
94
|
+
effective_trust_level: 'untrusted',
|
|
95
|
+
effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
|
|
96
|
+
modification_reason: 'record_revoked',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Return the record's trust level and capabilities
|
|
100
|
+
return {
|
|
101
|
+
record,
|
|
102
|
+
effective_trust_level: record.trust_level,
|
|
103
|
+
effective_capabilities: record.capabilities,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Attest (add/update) a trust record
|
|
108
|
+
*/
|
|
109
|
+
async attest(request) {
|
|
110
|
+
const { skill, trust_level, capabilities, expires_at, review } = request;
|
|
111
|
+
const recordKey = (0, skill_js_1.generateRecordKey)(skill);
|
|
112
|
+
// Check for existing record
|
|
113
|
+
const existingRecord = await this.storage.findByKey(recordKey);
|
|
114
|
+
let requiresConfirmation = false;
|
|
115
|
+
const confirmationReasons = [];
|
|
116
|
+
if (existingRecord) {
|
|
117
|
+
// Check for trust upgrade
|
|
118
|
+
if (this.options.requireConfirmForUpgrade &&
|
|
119
|
+
(0, trust_js_1.isTrustUpgrade)(existingRecord.trust_level, trust_level)) {
|
|
120
|
+
requiresConfirmation = true;
|
|
121
|
+
confirmationReasons.push(`Trust upgrade: ${existingRecord.trust_level} -> ${trust_level}`);
|
|
122
|
+
}
|
|
123
|
+
// Check for capability escalation
|
|
124
|
+
const escalation = (0, trust_js_1.isCapabilityEscalation)(existingRecord.capabilities, capabilities);
|
|
125
|
+
if (escalation.isEscalation && this.options.requireConfirmForUpgrade) {
|
|
126
|
+
requiresConfirmation = true;
|
|
127
|
+
confirmationReasons.push(...escalation.escalations);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Create new record
|
|
131
|
+
const newRecord = (0, trust_js_1.createTrustRecord)(skill, trust_level, capabilities, {
|
|
132
|
+
reviewed_by: review.reviewed_by,
|
|
133
|
+
evidence_refs: review.evidence_refs,
|
|
134
|
+
notes: review.notes,
|
|
135
|
+
}, expires_at);
|
|
136
|
+
// If confirmation is required, return without saving
|
|
137
|
+
if (requiresConfirmation) {
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
record_key: recordKey,
|
|
141
|
+
requires_confirmation: true,
|
|
142
|
+
confirmation_reasons: confirmationReasons,
|
|
143
|
+
action: existingRecord ? 'updated' : 'created',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// Save the record
|
|
147
|
+
await this.storage.upsert(newRecord);
|
|
148
|
+
return {
|
|
149
|
+
success: true,
|
|
150
|
+
record_key: recordKey,
|
|
151
|
+
requires_confirmation: false,
|
|
152
|
+
action: existingRecord ? 'updated' : 'created',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Force attest (skip confirmation)
|
|
157
|
+
*/
|
|
158
|
+
async forceAttest(request) {
|
|
159
|
+
const { skill, trust_level, capabilities, expires_at, review } = request;
|
|
160
|
+
const recordKey = (0, skill_js_1.generateRecordKey)(skill);
|
|
161
|
+
const existingRecord = await this.storage.findByKey(recordKey);
|
|
162
|
+
const newRecord = (0, trust_js_1.createTrustRecord)(skill, trust_level, capabilities, {
|
|
163
|
+
reviewed_by: review.reviewed_by,
|
|
164
|
+
evidence_refs: review.evidence_refs,
|
|
165
|
+
notes: review.notes,
|
|
166
|
+
}, expires_at);
|
|
167
|
+
await this.storage.upsert(newRecord);
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
record_key: recordKey,
|
|
171
|
+
requires_confirmation: false,
|
|
172
|
+
action: existingRecord ? 'updated' : 'created',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Revoke trust records
|
|
177
|
+
*/
|
|
178
|
+
async revoke(match, reason) {
|
|
179
|
+
let revokedCount = 0;
|
|
180
|
+
const records = await this.storage.getRecords();
|
|
181
|
+
for (const record of records) {
|
|
182
|
+
let shouldRevoke = false;
|
|
183
|
+
// Match by record_key
|
|
184
|
+
if (match.record_key && record.record_key === match.record_key) {
|
|
185
|
+
shouldRevoke = true;
|
|
186
|
+
}
|
|
187
|
+
// Match by source
|
|
188
|
+
if (match.source) {
|
|
189
|
+
if (match.source.includes('*')) {
|
|
190
|
+
// Wildcard match
|
|
191
|
+
const pattern = new RegExp(`^${match.source.replace(/\*/g, '.*')}$`);
|
|
192
|
+
if (pattern.test(record.skill.source)) {
|
|
193
|
+
shouldRevoke = true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else if (record.skill.source === match.source) {
|
|
197
|
+
shouldRevoke = true;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Match by version
|
|
201
|
+
if (match.version_ref && record.skill.version_ref === match.version_ref) {
|
|
202
|
+
// Only revoke if source also matches (or not specified)
|
|
203
|
+
if (!match.source || shouldRevoke) {
|
|
204
|
+
shouldRevoke = true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (shouldRevoke && record.status !== 'revoked') {
|
|
208
|
+
record.status = 'revoked';
|
|
209
|
+
record.updated_at = new Date().toISOString();
|
|
210
|
+
record.review.notes += `\n[REVOKED] ${reason}`;
|
|
211
|
+
await this.storage.upsert(record);
|
|
212
|
+
revokedCount++;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return revokedCount;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* List trust records
|
|
219
|
+
*/
|
|
220
|
+
async list(filters) {
|
|
221
|
+
let records = await this.storage.getRecords();
|
|
222
|
+
if (filters) {
|
|
223
|
+
// Filter by trust level
|
|
224
|
+
if (filters.trust_level) {
|
|
225
|
+
records = records.filter((r) => r.trust_level === filters.trust_level);
|
|
226
|
+
}
|
|
227
|
+
// Filter by status
|
|
228
|
+
if (filters.status) {
|
|
229
|
+
records = records.filter((r) => r.status === filters.status);
|
|
230
|
+
}
|
|
231
|
+
// Filter by source pattern
|
|
232
|
+
if (filters.source_pattern) {
|
|
233
|
+
const pattern = new RegExp(filters.source_pattern.replace(/\*/g, '.*'), 'i');
|
|
234
|
+
records = records.filter((r) => pattern.test(r.skill.source));
|
|
235
|
+
}
|
|
236
|
+
// Filter expired
|
|
237
|
+
if (!filters.include_expired) {
|
|
238
|
+
records = records.filter((r) => !(0, registry_js_1.isRecordExpired)(r));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return records;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get a single record by key
|
|
245
|
+
*/
|
|
246
|
+
async get(recordKey) {
|
|
247
|
+
return this.storage.findByKey(recordKey);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Delete a record (hard delete)
|
|
251
|
+
*/
|
|
252
|
+
async delete(recordKey) {
|
|
253
|
+
return this.storage.remove(recordKey);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Export registry
|
|
257
|
+
*/
|
|
258
|
+
async export() {
|
|
259
|
+
return this.storage.export();
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Import registry
|
|
263
|
+
*/
|
|
264
|
+
async import(jsonData, merge = false) {
|
|
265
|
+
return this.storage.import(jsonData, merge);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Clear all records
|
|
269
|
+
*/
|
|
270
|
+
async clear() {
|
|
271
|
+
return this.storage.clear();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.SkillRegistry = SkillRegistry;
|
|
275
|
+
// Export singleton instance
|
|
276
|
+
exports.registry = new SkillRegistry();
|
|
277
|
+
// Re-export types
|
|
278
|
+
__exportStar(require("./storage.js"), exports);
|
|
279
|
+
__exportStar(require("./trust.js"), exports);
|
|
280
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { RegistryData, TrustRecord } from '../types/registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Storage options
|
|
4
|
+
*/
|
|
5
|
+
export interface StorageOptions {
|
|
6
|
+
/** Path to registry file */
|
|
7
|
+
filePath?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* JSON-based storage for registry
|
|
11
|
+
*/
|
|
12
|
+
export declare class RegistryStorage {
|
|
13
|
+
private filePath;
|
|
14
|
+
private data;
|
|
15
|
+
constructor(options?: StorageOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Ensure data directory exists
|
|
18
|
+
*/
|
|
19
|
+
private ensureDirectory;
|
|
20
|
+
/**
|
|
21
|
+
* Load registry data from file
|
|
22
|
+
*/
|
|
23
|
+
load(): Promise<RegistryData>;
|
|
24
|
+
/**
|
|
25
|
+
* Save registry data to file
|
|
26
|
+
*/
|
|
27
|
+
save(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Get all records
|
|
30
|
+
*/
|
|
31
|
+
getRecords(): Promise<TrustRecord[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Find record by key
|
|
34
|
+
*/
|
|
35
|
+
findByKey(recordKey: string): Promise<TrustRecord | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Find records by source
|
|
38
|
+
*/
|
|
39
|
+
findBySource(source: string): Promise<TrustRecord[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Add or update a record
|
|
42
|
+
*/
|
|
43
|
+
upsert(record: TrustRecord): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Remove a record by key
|
|
46
|
+
*/
|
|
47
|
+
remove(recordKey: string): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Update record status
|
|
50
|
+
*/
|
|
51
|
+
updateStatus(recordKey: string, status: 'active' | 'revoked'): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Export registry to JSON string
|
|
54
|
+
*/
|
|
55
|
+
export(): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Import registry from JSON string
|
|
58
|
+
*/
|
|
59
|
+
import(jsonData: string, merge?: boolean): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Clear all records
|
|
62
|
+
*/
|
|
63
|
+
clear(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Get registry file path
|
|
66
|
+
*/
|
|
67
|
+
getFilePath(): string;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/registry/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAWtE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAA6B;gBAE7B,OAAO,GAAE,cAAmB;IAMxC;;OAEG;YACW,eAAe;IAK7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IA0BnC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAK1C;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK/D;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAK1D;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhD;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcjD;;OAEG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAC3B,OAAO,CAAC,OAAO,CAAC;IAcnB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAK/B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}
|