@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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -0
  3. package/dist/action/detectors/exec.d.ts +21 -0
  4. package/dist/action/detectors/exec.d.ts.map +1 -0
  5. package/dist/action/detectors/exec.js +201 -0
  6. package/dist/action/detectors/exec.js.map +1 -0
  7. package/dist/action/detectors/index.d.ts +4 -0
  8. package/dist/action/detectors/index.d.ts.map +1 -0
  9. package/dist/action/detectors/index.js +20 -0
  10. package/dist/action/detectors/index.js.map +1 -0
  11. package/dist/action/detectors/network.d.ts +21 -0
  12. package/dist/action/detectors/network.d.ts.map +1 -0
  13. package/dist/action/detectors/network.js +152 -0
  14. package/dist/action/detectors/network.js.map +1 -0
  15. package/dist/action/detectors/secret-leak.d.ts +28 -0
  16. package/dist/action/detectors/secret-leak.d.ts.map +1 -0
  17. package/dist/action/detectors/secret-leak.js +94 -0
  18. package/dist/action/detectors/secret-leak.js.map +1 -0
  19. package/dist/action/goplus/client.d.ts +151 -0
  20. package/dist/action/goplus/client.d.ts.map +1 -0
  21. package/dist/action/goplus/client.js +187 -0
  22. package/dist/action/goplus/client.js.map +1 -0
  23. package/dist/action/index.d.ts +61 -0
  24. package/dist/action/index.d.ts.map +1 -0
  25. package/dist/action/index.js +643 -0
  26. package/dist/action/index.js.map +1 -0
  27. package/dist/index.d.ts +31 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +77 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/mcp-server.d.ts +3 -0
  32. package/dist/mcp-server.d.ts.map +1 -0
  33. package/dist/mcp-server.js +410 -0
  34. package/dist/mcp-server.js.map +1 -0
  35. package/dist/policy/default.d.ts +77 -0
  36. package/dist/policy/default.d.ts.map +1 -0
  37. package/dist/policy/default.js +94 -0
  38. package/dist/policy/default.js.map +1 -0
  39. package/dist/registry/index.d.ts +93 -0
  40. package/dist/registry/index.d.ts.map +1 -0
  41. package/dist/registry/index.js +280 -0
  42. package/dist/registry/index.js.map +1 -0
  43. package/dist/registry/storage.d.ts +69 -0
  44. package/dist/registry/storage.d.ts.map +1 -0
  45. package/dist/registry/storage.js +208 -0
  46. package/dist/registry/storage.js.map +1 -0
  47. package/dist/registry/trust.d.ts +41 -0
  48. package/dist/registry/trust.d.ts.map +1 -0
  49. package/dist/registry/trust.js +139 -0
  50. package/dist/registry/trust.js.map +1 -0
  51. package/dist/scanner/file-walker.d.ts +34 -0
  52. package/dist/scanner/file-walker.d.ts.map +1 -0
  53. package/dist/scanner/file-walker.js +134 -0
  54. package/dist/scanner/file-walker.js.map +1 -0
  55. package/dist/scanner/index.d.ts +67 -0
  56. package/dist/scanner/index.d.ts.map +1 -0
  57. package/dist/scanner/index.js +349 -0
  58. package/dist/scanner/index.js.map +1 -0
  59. package/dist/scanner/rules/exfiltration.d.ts +6 -0
  60. package/dist/scanner/rules/exfiltration.d.ts.map +1 -0
  61. package/dist/scanner/rules/exfiltration.js +48 -0
  62. package/dist/scanner/rules/exfiltration.js.map +1 -0
  63. package/dist/scanner/rules/index.d.ts +18 -0
  64. package/dist/scanner/rules/index.d.ts.map +1 -0
  65. package/dist/scanner/rules/index.js +54 -0
  66. package/dist/scanner/rules/index.js.map +1 -0
  67. package/dist/scanner/rules/obfuscation.d.ts +6 -0
  68. package/dist/scanner/rules/obfuscation.d.ts.map +1 -0
  69. package/dist/scanner/rules/obfuscation.js +37 -0
  70. package/dist/scanner/rules/obfuscation.js.map +1 -0
  71. package/dist/scanner/rules/prompt-injection.d.ts +6 -0
  72. package/dist/scanner/rules/prompt-injection.d.ts.map +1 -0
  73. package/dist/scanner/rules/prompt-injection.js +38 -0
  74. package/dist/scanner/rules/prompt-injection.js.map +1 -0
  75. package/dist/scanner/rules/remote-loader.d.ts +6 -0
  76. package/dist/scanner/rules/remote-loader.d.ts.map +1 -0
  77. package/dist/scanner/rules/remote-loader.js +31 -0
  78. package/dist/scanner/rules/remote-loader.js.map +1 -0
  79. package/dist/scanner/rules/secrets.d.ts +6 -0
  80. package/dist/scanner/rules/secrets.d.ts.map +1 -0
  81. package/dist/scanner/rules/secrets.js +68 -0
  82. package/dist/scanner/rules/secrets.js.map +1 -0
  83. package/dist/scanner/rules/shell-exec.d.ts +6 -0
  84. package/dist/scanner/rules/shell-exec.d.ts.map +1 -0
  85. package/dist/scanner/rules/shell-exec.js +52 -0
  86. package/dist/scanner/rules/shell-exec.js.map +1 -0
  87. package/dist/scanner/rules/web3.d.ts +6 -0
  88. package/dist/scanner/rules/web3.d.ts.map +1 -0
  89. package/dist/scanner/rules/web3.js +139 -0
  90. package/dist/scanner/rules/web3.js.map +1 -0
  91. package/dist/tests/action.test.d.ts +2 -0
  92. package/dist/tests/action.test.d.ts.map +1 -0
  93. package/dist/tests/action.test.js +127 -0
  94. package/dist/tests/action.test.js.map +1 -0
  95. package/dist/tests/registry.test.d.ts +2 -0
  96. package/dist/tests/registry.test.d.ts.map +1 -0
  97. package/dist/tests/registry.test.js +109 -0
  98. package/dist/tests/registry.test.js.map +1 -0
  99. package/dist/tests/scanner.test.d.ts +2 -0
  100. package/dist/tests/scanner.test.d.ts.map +1 -0
  101. package/dist/tests/scanner.test.js +57 -0
  102. package/dist/tests/scanner.test.js.map +1 -0
  103. package/dist/types/action.d.ts +198 -0
  104. package/dist/types/action.d.ts.map +1 -0
  105. package/dist/types/action.js +3 -0
  106. package/dist/types/action.js.map +1 -0
  107. package/dist/types/index.d.ts +5 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +22 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/registry.d.ts +104 -0
  112. package/dist/types/registry.d.ts.map +1 -0
  113. package/dist/types/registry.js +21 -0
  114. package/dist/types/registry.js.map +1 -0
  115. package/dist/types/scanner.d.ts +88 -0
  116. package/dist/types/scanner.d.ts.map +1 -0
  117. package/dist/types/scanner.js +20 -0
  118. package/dist/types/scanner.js.map +1 -0
  119. package/dist/types/skill.d.ts +52 -0
  120. package/dist/types/skill.d.ts.map +1 -0
  121. package/dist/types/skill.js +33 -0
  122. package/dist/types/skill.js.map +1 -0
  123. package/dist/utils/hash.d.ts +21 -0
  124. package/dist/utils/hash.d.ts.map +1 -0
  125. package/dist/utils/hash.js +112 -0
  126. package/dist/utils/hash.js.map +1 -0
  127. package/dist/utils/patterns.d.ts +74 -0
  128. package/dist/utils/patterns.d.ts.map +1 -0
  129. package/dist/utils/patterns.js +157 -0
  130. package/dist/utils/patterns.js.map +1 -0
  131. package/package.json +60 -0
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const strict_1 = __importDefault(require("node:assert/strict"));
8
+ const index_js_1 = require("../scanner/rules/index.js");
9
+ (0, node_test_1.describe)('Scanner Rules', () => {
10
+ (0, node_test_1.it)('should have 20 detection rules', () => {
11
+ // Each RiskTag should map to at least one rule
12
+ const ruleIds = new Set(index_js_1.ALL_RULES.map((r) => r.id));
13
+ strict_1.default.ok(ruleIds.size >= 20, `Expected at least 20 unique rules, got ${ruleIds.size}`);
14
+ });
15
+ (0, node_test_1.it)('should find rule by ID', () => {
16
+ const rule = (0, index_js_1.getRuleById)('SHELL_EXEC');
17
+ strict_1.default.ok(rule, 'SHELL_EXEC rule should exist');
18
+ strict_1.default.equal(rule.severity, 'high');
19
+ });
20
+ (0, node_test_1.it)('should filter rules by severity', () => {
21
+ const critical = (0, index_js_1.getRulesBySeverity)('critical');
22
+ strict_1.default.ok(critical.length > 0, 'Should have critical rules');
23
+ strict_1.default.ok(critical.every((r) => r.severity === 'critical'));
24
+ const high = (0, index_js_1.getRulesBySeverity)('high');
25
+ strict_1.default.ok(high.length > 0, 'Should have high rules');
26
+ strict_1.default.ok(high.every((r) => r.severity === 'high'));
27
+ });
28
+ (0, node_test_1.it)('should filter rules for .ts extension', () => {
29
+ const tsRules = (0, index_js_1.getRulesForExtension)('.ts');
30
+ strict_1.default.ok(tsRules.length > 0, 'Should have rules for .ts files');
31
+ });
32
+ (0, node_test_1.it)('should filter rules for .sol extension', () => {
33
+ const solRules = (0, index_js_1.getRulesForExtension)('.sol');
34
+ strict_1.default.ok(solRules.length > 0, 'Should have rules for .sol files');
35
+ const solRuleIds = solRules.map((r) => r.id);
36
+ strict_1.default.ok(solRuleIds.includes('WALLET_DRAINING') || solRuleIds.includes('REENTRANCY_PATTERN'), 'Solidity rules should include Web3-specific rules');
37
+ });
38
+ (0, node_test_1.it)('should have CRITICAL rules for key security threats', () => {
39
+ const criticalIds = ['AUTO_UPDATE', 'REMOTE_LOADER', 'READ_SSH_KEYS', 'READ_KEYCHAIN',
40
+ 'PRIVATE_KEY_PATTERN', 'MNEMONIC_PATTERN', 'WALLET_DRAINING', 'PROMPT_INJECTION', 'WEBHOOK_EXFIL'];
41
+ for (const id of criticalIds) {
42
+ const rule = (0, index_js_1.getRuleById)(id);
43
+ strict_1.default.ok(rule, `Rule ${id} should exist`);
44
+ strict_1.default.equal(rule.severity, 'critical', `Rule ${id} should be CRITICAL`);
45
+ }
46
+ });
47
+ (0, node_test_1.it)('all rules should have required fields', () => {
48
+ for (const rule of index_js_1.ALL_RULES) {
49
+ strict_1.default.ok(rule.id, `Rule should have an id`);
50
+ strict_1.default.ok(rule.severity, `Rule ${rule.id} should have severity`);
51
+ strict_1.default.ok(rule.patterns && rule.patterns.length > 0, `Rule ${rule.id} should have patterns`);
52
+ strict_1.default.ok(rule.file_patterns && rule.file_patterns.length > 0, `Rule ${rule.id} should have file_patterns`);
53
+ strict_1.default.ok(rule.description, `Rule ${rule.id} should have description`);
54
+ }
55
+ });
56
+ });
57
+ //# sourceMappingURL=scanner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.test.js","sourceRoot":"","sources":["../../src/tests/scanner.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import type { SkillIdentity, CapabilityModel } from './skill.js';
2
+ import type { RiskLevel } from './scanner.js';
3
+ /**
4
+ * Action types that can be scanned
5
+ */
6
+ export type ActionType = 'network_request' | 'exec_command' | 'read_file' | 'write_file' | 'secret_access' | 'web3_tx' | 'web3_sign';
7
+ /**
8
+ * Policy decision
9
+ */
10
+ export type Decision = 'allow' | 'deny' | 'confirm';
11
+ /**
12
+ * Evidence for action decisions
13
+ */
14
+ export interface ActionEvidence {
15
+ /** Evidence type */
16
+ type: string;
17
+ /** Field that triggered */
18
+ field?: string;
19
+ /** Matched pattern */
20
+ match?: string;
21
+ /** Description */
22
+ description: string;
23
+ }
24
+ /**
25
+ * Policy decision result
26
+ */
27
+ export interface PolicyDecision {
28
+ /** Decision: allow, deny, or confirm */
29
+ decision: Decision;
30
+ /** Risk level */
31
+ risk_level: RiskLevel;
32
+ /** Risk tags that contributed to decision */
33
+ risk_tags: string[];
34
+ /** Evidence supporting the decision */
35
+ evidence: ActionEvidence[];
36
+ /** Effective capabilities (if modified) */
37
+ effective_capabilities?: Partial<CapabilityModel>;
38
+ /** Human-readable explanation */
39
+ explanation?: string;
40
+ }
41
+ /**
42
+ * Network request action data
43
+ */
44
+ export interface NetworkRequestData {
45
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
46
+ url: string;
47
+ headers?: Record<string, string>;
48
+ body_preview?: string;
49
+ }
50
+ /**
51
+ * Command execution action data
52
+ */
53
+ export interface ExecCommandData {
54
+ command: string;
55
+ args?: string[];
56
+ cwd?: string;
57
+ env?: Record<string, string>;
58
+ }
59
+ /**
60
+ * File operation action data
61
+ */
62
+ export interface FileOperationData {
63
+ path: string;
64
+ content_preview?: string;
65
+ }
66
+ /**
67
+ * Secret access action data
68
+ */
69
+ export interface SecretAccessData {
70
+ secret_name: string;
71
+ access_type: 'read' | 'write';
72
+ }
73
+ /**
74
+ * Web3 transaction action data
75
+ */
76
+ export interface Web3TxData {
77
+ chain_id: number;
78
+ from: string;
79
+ to: string;
80
+ value: string;
81
+ data?: string;
82
+ gas_limit?: string;
83
+ origin?: string;
84
+ }
85
+ /**
86
+ * Web3 signature action data
87
+ */
88
+ export interface Web3SignData {
89
+ chain_id: number;
90
+ signer: string;
91
+ message?: string;
92
+ typed_data?: unknown;
93
+ origin?: string;
94
+ }
95
+ /**
96
+ * Union type for all action data
97
+ */
98
+ export type ActionData = NetworkRequestData | ExecCommandData | FileOperationData | SecretAccessData | Web3TxData | Web3SignData;
99
+ /**
100
+ * Action context
101
+ */
102
+ export interface ActionContext {
103
+ /** Session identifier */
104
+ session_id: string;
105
+ /** Whether user is present/active */
106
+ user_present: boolean;
107
+ /** Environment */
108
+ env: 'prod' | 'dev' | 'test';
109
+ /** Action timestamp */
110
+ time: string;
111
+ }
112
+ /**
113
+ * Action envelope - the complete action request
114
+ */
115
+ export interface ActionEnvelope {
116
+ /** Actor information */
117
+ actor: {
118
+ skill: SkillIdentity;
119
+ record_key?: string;
120
+ };
121
+ /** Action details */
122
+ action: {
123
+ type: ActionType;
124
+ data: ActionData;
125
+ };
126
+ /** Action context */
127
+ context: ActionContext;
128
+ }
129
+ /**
130
+ * Web3 intent for simulation
131
+ */
132
+ export interface Web3Intent {
133
+ chain_id: number;
134
+ from: string;
135
+ to: string;
136
+ value: string;
137
+ data?: string;
138
+ origin?: string;
139
+ kind: 'tx' | 'sign';
140
+ }
141
+ /**
142
+ * Asset change from simulation
143
+ */
144
+ export interface AssetChange {
145
+ asset_type: 'native' | 'erc20' | 'erc721' | 'erc1155';
146
+ token_address?: string;
147
+ token_id?: string;
148
+ amount: string;
149
+ direction: 'in' | 'out';
150
+ }
151
+ /**
152
+ * Approval change from simulation
153
+ */
154
+ export interface ApprovalChange {
155
+ token_address: string;
156
+ spender: string;
157
+ amount: string;
158
+ is_unlimited: boolean;
159
+ }
160
+ /**
161
+ * Web3 simulation result
162
+ */
163
+ export interface Web3SimulationResult {
164
+ /** Decision */
165
+ decision: Decision;
166
+ /** Risk level */
167
+ risk_level: RiskLevel;
168
+ /** Risk tags */
169
+ risk_tags: string[];
170
+ /** Human-readable explanation */
171
+ explanation: string;
172
+ /** GoPlus raw response */
173
+ goplus?: {
174
+ simulation?: {
175
+ success: boolean;
176
+ balance_changes: AssetChange[];
177
+ approval_changes: ApprovalChange[];
178
+ };
179
+ address_risk?: {
180
+ is_malicious: boolean;
181
+ is_phishing: boolean;
182
+ risk_type?: string[];
183
+ };
184
+ token_risk?: {
185
+ is_honeypot: boolean;
186
+ has_hidden_tax: boolean;
187
+ buy_tax?: string;
188
+ sell_tax?: string;
189
+ };
190
+ };
191
+ /** Guardrail recommendations */
192
+ guardrail?: {
193
+ require_user_confirmation: boolean;
194
+ suggested_change?: string;
195
+ capabilities_patch?: Partial<CapabilityModel>;
196
+ };
197
+ }
198
+ //# sourceMappingURL=action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/types/action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/types/action.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export * from './skill.js';
2
+ export * from './scanner.js';
3
+ export * from './registry.js';
4
+ export * from './action.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,22 @@
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
+ // Re-export all types
18
+ __exportStar(require("./skill.js"), exports);
19
+ __exportStar(require("./scanner.js"), exports);
20
+ __exportStar(require("./registry.js"), exports);
21
+ __exportStar(require("./action.js"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sBAAsB;AACtB,6CAA2B;AAC3B,+CAA6B;AAC7B,gDAA8B;AAC9B,8CAA4B"}
@@ -0,0 +1,104 @@
1
+ import type { SkillIdentity, CapabilityModel } from './skill.js';
2
+ /**
3
+ * Trust levels for skills
4
+ */
5
+ export type TrustLevel = 'untrusted' | 'restricted' | 'trusted';
6
+ /**
7
+ * Record status
8
+ */
9
+ export type RecordStatus = 'active' | 'revoked';
10
+ /**
11
+ * Review information
12
+ */
13
+ export interface ReviewInfo {
14
+ /** Who reviewed this skill */
15
+ reviewed_by: string;
16
+ /** When the review happened */
17
+ reviewed_at: string;
18
+ /** References to evidence (e.g., scan IDs) */
19
+ evidence_refs: string[];
20
+ /** Review notes */
21
+ notes: string;
22
+ }
23
+ /**
24
+ * Trust record in the registry
25
+ */
26
+ export interface TrustRecord {
27
+ /** Unique key: source@version#hash */
28
+ record_key: string;
29
+ /** Skill identity */
30
+ skill: SkillIdentity;
31
+ /** Trust level */
32
+ trust_level: TrustLevel;
33
+ /** Capability snapshot */
34
+ capabilities: CapabilityModel;
35
+ /** Expiration time (ISO 8601) */
36
+ expires_at?: string;
37
+ /** Review information */
38
+ review: ReviewInfo;
39
+ /** Record status */
40
+ status: RecordStatus;
41
+ /** Created timestamp */
42
+ created_at: string;
43
+ /** Updated timestamp */
44
+ updated_at: string;
45
+ }
46
+ /**
47
+ * Request to attest (add/update) a trust record
48
+ */
49
+ export interface AttestRequest {
50
+ /** Skill identity */
51
+ skill: SkillIdentity;
52
+ /** Trust level to assign */
53
+ trust_level: TrustLevel;
54
+ /** Capabilities to grant */
55
+ capabilities: CapabilityModel;
56
+ /** Optional expiration */
57
+ expires_at?: string;
58
+ /** Review information */
59
+ review: Omit<ReviewInfo, 'reviewed_at'>;
60
+ }
61
+ /**
62
+ * Match criteria for revocation
63
+ */
64
+ export interface RevokeMatch {
65
+ /** Source pattern (exact or wildcard) */
66
+ source?: string;
67
+ /** Version pattern */
68
+ version_ref?: string;
69
+ /** Specific record key */
70
+ record_key?: string;
71
+ }
72
+ /**
73
+ * Filters for listing records
74
+ */
75
+ export interface ListFilters {
76
+ /** Filter by trust level */
77
+ trust_level?: TrustLevel;
78
+ /** Filter by status */
79
+ status?: RecordStatus;
80
+ /** Filter by source pattern */
81
+ source_pattern?: string;
82
+ /** Include expired records */
83
+ include_expired?: boolean;
84
+ }
85
+ /**
86
+ * Registry storage format
87
+ */
88
+ export interface RegistryData {
89
+ /** Schema version */
90
+ version: number;
91
+ /** Last updated timestamp */
92
+ updated_at: string;
93
+ /** Trust records */
94
+ records: TrustRecord[];
95
+ }
96
+ /**
97
+ * Check if a record is expired
98
+ */
99
+ export declare function isRecordExpired(record: TrustRecord): boolean;
100
+ /**
101
+ * Check if skill matches a record (considering hash)
102
+ */
103
+ export declare function skillMatchesRecord(skill: SkillIdentity, record: TrustRecord): boolean;
104
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,kBAAkB;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,0BAA0B;IAC1B,YAAY,EAAE,eAAe,CAAC;IAC9B,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,UAAU,CAAC;IACxB,4BAA4B;IAC5B,YAAY,EAAE,eAAe,CAAC;IAC9B,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,uBAAuB;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAG5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAMrF"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRecordExpired = isRecordExpired;
4
+ exports.skillMatchesRecord = skillMatchesRecord;
5
+ /**
6
+ * Check if a record is expired
7
+ */
8
+ function isRecordExpired(record) {
9
+ if (!record.expires_at)
10
+ return false;
11
+ return new Date(record.expires_at) < new Date();
12
+ }
13
+ /**
14
+ * Check if skill matches a record (considering hash)
15
+ */
16
+ function skillMatchesRecord(skill, record) {
17
+ return (skill.source === record.skill.source &&
18
+ skill.version_ref === record.skill.version_ref &&
19
+ skill.artifact_hash === record.skill.artifact_hash);
20
+ }
21
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":";;AA2GA,0CAGC;AAKD,gDAMC;AAjBD;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAmB;IACjD,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,KAAoB,EAAE,MAAmB;IAC1E,OAAO,CACL,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM;QACpC,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW;QAC9C,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK,CAAC,aAAa,CACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,88 @@
1
+ import type { SkillIdentity } from './skill.js';
2
+ /**
3
+ * Risk levels for scan results
4
+ */
5
+ export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
6
+ /**
7
+ * Risk tag identifiers
8
+ */
9
+ export type RiskTag = 'SHELL_EXEC' | 'REMOTE_LOADER' | 'AUTO_UPDATE' | 'READ_ENV_SECRETS' | 'READ_SSH_KEYS' | 'READ_KEYCHAIN' | 'NET_EXFIL_UNRESTRICTED' | 'WEBHOOK_EXFIL' | 'OBFUSCATION' | 'PROMPT_INJECTION' | 'PRIVATE_KEY_PATTERN' | 'MNEMONIC_PATTERN' | 'WALLET_DRAINING' | 'UNLIMITED_APPROVAL' | 'DANGEROUS_SELFDESTRUCT' | 'HIDDEN_TRANSFER' | 'PROXY_UPGRADE' | 'FLASH_LOAN_RISK' | 'REENTRANCY_PATTERN' | 'SIGNATURE_REPLAY';
10
+ /**
11
+ * Evidence of a detected risk
12
+ */
13
+ export interface ScanEvidence {
14
+ /** Risk tag that was triggered */
15
+ tag: RiskTag;
16
+ /** File path relative to scan root */
17
+ file: string;
18
+ /** Line number (1-indexed) */
19
+ line: number;
20
+ /** Matched content (truncated if too long) */
21
+ match: string;
22
+ /** Additional context */
23
+ context?: string;
24
+ }
25
+ /**
26
+ * Scan payload types
27
+ */
28
+ export type ScanPayloadType = 'dir' | 'zip' | 'repo_url';
29
+ /**
30
+ * Scan request payload
31
+ */
32
+ export interface ScanPayload {
33
+ /** Skill identity */
34
+ skill: SkillIdentity;
35
+ /** Payload to scan */
36
+ payload: {
37
+ type: ScanPayloadType;
38
+ ref: string;
39
+ };
40
+ /** Scan options */
41
+ options?: {
42
+ /** Hint for languages to scan */
43
+ language_hint?: string[];
44
+ /** Enable deep analysis (slower) */
45
+ deep?: boolean;
46
+ };
47
+ }
48
+ /**
49
+ * Scan result
50
+ */
51
+ export interface ScanResult {
52
+ /** Overall risk level */
53
+ risk_level: RiskLevel;
54
+ /** All detected risk tags */
55
+ risk_tags: RiskTag[];
56
+ /** Detailed evidence for each finding */
57
+ evidence: ScanEvidence[];
58
+ /** Human-readable summary */
59
+ summary: string;
60
+ /** Scan metadata */
61
+ metadata?: {
62
+ files_scanned: number;
63
+ scan_duration_ms: number;
64
+ scan_time: string;
65
+ };
66
+ }
67
+ /**
68
+ * Rule definition for the scanner
69
+ */
70
+ export interface ScanRule {
71
+ /** Rule identifier */
72
+ id: RiskTag;
73
+ /** Rule description */
74
+ description: string;
75
+ /** Risk level when triggered */
76
+ severity: RiskLevel;
77
+ /** File patterns to scan (glob) */
78
+ file_patterns: string[];
79
+ /** Detection patterns (regex) */
80
+ patterns: RegExp[];
81
+ /** Optional validator function for complex rules */
82
+ validator?: (content: string, match: RegExpMatchArray) => boolean;
83
+ }
84
+ /**
85
+ * Calculate overall risk level from tags
86
+ */
87
+ export declare function calculateRiskLevel(tags: RiskTag[], rules: ScanRule[]): RiskLevel;
88
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/types/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,OAAO,GAEf,YAAY,GACZ,eAAe,GACf,aAAa,GAEb,kBAAkB,GAClB,eAAe,GACf,eAAe,GAEf,wBAAwB,GACxB,eAAe,GAEf,aAAa,GAEb,kBAAkB,GAElB,qBAAqB,GACrB,kBAAkB,GAClB,iBAAiB,GACjB,oBAAoB,GACpB,wBAAwB,GACxB,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,sBAAsB;IACtB,OAAO,EAAE;QACP,IAAI,EAAE,eAAe,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,mBAAmB;IACnB,OAAO,CAAC,EAAE;QACR,iCAAiC;QACjC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,oCAAoC;QACpC,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,UAAU,EAAE,SAAS,CAAC;IACtB,6BAA6B;IAC7B,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,CAAC,EAAE;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC;CACnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,CAUhF"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateRiskLevel = calculateRiskLevel;
4
+ /**
5
+ * Calculate overall risk level from tags
6
+ */
7
+ function calculateRiskLevel(tags, rules) {
8
+ const severities = tags.map((tag) => {
9
+ const rule = rules.find((r) => r.id === tag);
10
+ return rule?.severity ?? 'low';
11
+ });
12
+ if (severities.includes('critical'))
13
+ return 'critical';
14
+ if (severities.includes('high'))
15
+ return 'high';
16
+ if (severities.includes('medium'))
17
+ return 'medium';
18
+ return 'low';
19
+ }
20
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/types/scanner.ts"],"names":[],"mappings":";;AAwHA,gDAUC;AAbD;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAe,EAAE,KAAiB;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Skill Identity - Strong binding to source + version + hash
3
+ */
4
+ export interface SkillIdentity {
5
+ /** Skill name identifier */
6
+ id: string;
7
+ /** Source repository (e.g., github.com/org/repo) */
8
+ source: string;
9
+ /** Version reference (e.g., v1.0.0) */
10
+ version_ref: string;
11
+ /** Artifact hash (e.g., sha256:abc...) */
12
+ artifact_hash: string;
13
+ }
14
+ /**
15
+ * Web3 capability configuration
16
+ */
17
+ export interface Web3Capability {
18
+ /** Allowed chain IDs */
19
+ chains_allowlist: number[];
20
+ /** Allowed RPC endpoints */
21
+ rpc_allowlist: string[];
22
+ /** Transaction policy */
23
+ tx_policy: 'allow' | 'confirm_high_risk' | 'deny';
24
+ }
25
+ /**
26
+ * Capability Model - Minimum privilege snapshot
27
+ */
28
+ export interface CapabilityModel {
29
+ /** Allowed network domains (supports wildcards like *.example.com) */
30
+ network_allowlist: string[];
31
+ /** Allowed filesystem paths */
32
+ filesystem_allowlist: string[];
33
+ /** Command execution permission */
34
+ exec: 'allow' | 'deny';
35
+ /** Allowed secrets (env var names) */
36
+ secrets_allowlist: string[];
37
+ /** Web3 specific capabilities */
38
+ web3?: Web3Capability;
39
+ }
40
+ /**
41
+ * Default capability model - most restrictive
42
+ */
43
+ export declare const DEFAULT_CAPABILITY: CapabilityModel;
44
+ /**
45
+ * Generate record key from skill identity
46
+ */
47
+ export declare function generateRecordKey(skill: SkillIdentity): string;
48
+ /**
49
+ * Validate skill identity
50
+ */
51
+ export declare function validateSkillIdentity(skill: unknown): skill is SkillIdentity;
52
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/types/skill.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,4BAA4B;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB;IACzB,SAAS,EAAE,OAAO,GAAG,mBAAmB,GAAG,MAAM,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mCAAmC;IACnC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,sCAAsC;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iCAAiC;IACjC,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAKhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAS5E"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CAPABILITY = void 0;
4
+ exports.generateRecordKey = generateRecordKey;
5
+ exports.validateSkillIdentity = validateSkillIdentity;
6
+ /**
7
+ * Default capability model - most restrictive
8
+ */
9
+ exports.DEFAULT_CAPABILITY = {
10
+ network_allowlist: [],
11
+ filesystem_allowlist: [],
12
+ exec: 'deny',
13
+ secrets_allowlist: [],
14
+ };
15
+ /**
16
+ * Generate record key from skill identity
17
+ */
18
+ function generateRecordKey(skill) {
19
+ return `${skill.source}@${skill.version_ref}#${skill.artifact_hash}`;
20
+ }
21
+ /**
22
+ * Validate skill identity
23
+ */
24
+ function validateSkillIdentity(skill) {
25
+ if (!skill || typeof skill !== 'object')
26
+ return false;
27
+ const s = skill;
28
+ return (typeof s.id === 'string' &&
29
+ typeof s.source === 'string' &&
30
+ typeof s.version_ref === 'string' &&
31
+ typeof s.artifact_hash === 'string');
32
+ }
33
+ //# sourceMappingURL=skill.js.map