@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,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 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/types/action.ts"],"names":[],"mappings":""}
|
|
@@ -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
|