@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 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/types/skill.ts"],"names":[],"mappings":";;;AAuDA,8CAEC;AAKD,sDASC;AA7BD;;GAEG;AACU,QAAA,kBAAkB,GAAoB;IACjD,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,MAAM;IACZ,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAoB;IACpD,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,OAAO,CACL,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;QACxB,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACjC,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate SHA256 hash of a string
|
|
3
|
+
*/
|
|
4
|
+
export declare function sha256(content: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Calculate SHA256 hash of a file
|
|
7
|
+
*/
|
|
8
|
+
export declare function hashFile(filePath: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Calculate SHA256 hash of a directory (deterministic)
|
|
11
|
+
*/
|
|
12
|
+
export declare function hashDirectory(dirPath: string): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Generate a short hash for display
|
|
15
|
+
*/
|
|
16
|
+
export declare function shortHash(hash: string, length?: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Verify a hash matches content
|
|
19
|
+
*/
|
|
20
|
+
export declare function verifyHash(content: string, expectedHash: string): boolean;
|
|
21
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAGlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAIzE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.sha256 = sha256;
|
|
37
|
+
exports.hashFile = hashFile;
|
|
38
|
+
exports.hashDirectory = hashDirectory;
|
|
39
|
+
exports.shortHash = shortHash;
|
|
40
|
+
exports.verifyHash = verifyHash;
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
42
|
+
const fs = __importStar(require("fs/promises"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
/**
|
|
45
|
+
* Calculate SHA256 hash of a string
|
|
46
|
+
*/
|
|
47
|
+
function sha256(content) {
|
|
48
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Calculate SHA256 hash of a file
|
|
52
|
+
*/
|
|
53
|
+
async function hashFile(filePath) {
|
|
54
|
+
const content = await fs.readFile(filePath);
|
|
55
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Calculate SHA256 hash of a directory (deterministic)
|
|
59
|
+
*/
|
|
60
|
+
async function hashDirectory(dirPath) {
|
|
61
|
+
const hash = crypto.createHash('sha256');
|
|
62
|
+
const files = [];
|
|
63
|
+
// Recursively collect all files
|
|
64
|
+
async function collectFiles(dir) {
|
|
65
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
const fullPath = path.join(dir, entry.name);
|
|
68
|
+
// Skip common non-content directories
|
|
69
|
+
if (entry.name === 'node_modules' ||
|
|
70
|
+
entry.name === '.git' ||
|
|
71
|
+
entry.name === 'dist' ||
|
|
72
|
+
entry.name === '__pycache__') {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (entry.isDirectory()) {
|
|
76
|
+
await collectFiles(fullPath);
|
|
77
|
+
}
|
|
78
|
+
else if (entry.isFile()) {
|
|
79
|
+
const content = await fs.readFile(fullPath);
|
|
80
|
+
files.push({
|
|
81
|
+
path: path.relative(dirPath, fullPath),
|
|
82
|
+
content,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
await collectFiles(dirPath);
|
|
88
|
+
// Sort files by path for deterministic hashing
|
|
89
|
+
files.sort((a, b) => a.path.localeCompare(b.path));
|
|
90
|
+
// Hash each file path and content
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
hash.update(file.path);
|
|
93
|
+
hash.update(file.content);
|
|
94
|
+
}
|
|
95
|
+
return `sha256:${hash.digest('hex')}`;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate a short hash for display
|
|
99
|
+
*/
|
|
100
|
+
function shortHash(hash, length = 8) {
|
|
101
|
+
const cleanHash = hash.replace(/^sha256:/, '');
|
|
102
|
+
return cleanHash.slice(0, length);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Verify a hash matches content
|
|
106
|
+
*/
|
|
107
|
+
function verifyHash(content, expectedHash) {
|
|
108
|
+
const actualHash = sha256(content);
|
|
109
|
+
const cleanExpected = expectedHash.replace(/^sha256:/, '');
|
|
110
|
+
return actualHash === cleanExpected;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitive data patterns for detection
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Sensitive data patterns
|
|
6
|
+
*/
|
|
7
|
+
export declare const SENSITIVE_PATTERNS: {
|
|
8
|
+
/**
|
|
9
|
+
* Ethereum private key (64 hex characters with 0x prefix)
|
|
10
|
+
*/
|
|
11
|
+
PRIVATE_KEY: RegExp;
|
|
12
|
+
/**
|
|
13
|
+
* Mnemonic/seed phrase (12, 15, 18, 21, or 24 words)
|
|
14
|
+
*/
|
|
15
|
+
MNEMONIC: RegExp;
|
|
16
|
+
/**
|
|
17
|
+
* API key/secret patterns
|
|
18
|
+
*/
|
|
19
|
+
API_SECRET: RegExp;
|
|
20
|
+
/**
|
|
21
|
+
* SSH private key
|
|
22
|
+
*/
|
|
23
|
+
SSH_KEY: RegExp;
|
|
24
|
+
/**
|
|
25
|
+
* JWT/Bearer token
|
|
26
|
+
*/
|
|
27
|
+
BEARER_TOKEN: RegExp;
|
|
28
|
+
/**
|
|
29
|
+
* AWS credentials
|
|
30
|
+
*/
|
|
31
|
+
AWS_KEY: RegExp;
|
|
32
|
+
AWS_SECRET: RegExp;
|
|
33
|
+
/**
|
|
34
|
+
* GitHub token
|
|
35
|
+
*/
|
|
36
|
+
GITHUB_TOKEN: RegExp;
|
|
37
|
+
/**
|
|
38
|
+
* Generic password in config
|
|
39
|
+
*/
|
|
40
|
+
PASSWORD_CONFIG: RegExp;
|
|
41
|
+
/**
|
|
42
|
+
* Database connection string
|
|
43
|
+
*/
|
|
44
|
+
DB_CONNECTION: RegExp;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Check if content contains sensitive data
|
|
48
|
+
*/
|
|
49
|
+
export declare function containsSensitiveData(content: string): {
|
|
50
|
+
found: boolean;
|
|
51
|
+
types: string[];
|
|
52
|
+
matches: {
|
|
53
|
+
type: string;
|
|
54
|
+
match: string;
|
|
55
|
+
truncated: string;
|
|
56
|
+
}[];
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Mask sensitive data in content
|
|
60
|
+
*/
|
|
61
|
+
export declare function maskSensitiveData(content: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Extract domain from URL
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractDomain(url: string): string | null;
|
|
66
|
+
/**
|
|
67
|
+
* Check if domain matches a pattern (supports wildcards)
|
|
68
|
+
*/
|
|
69
|
+
export declare function domainMatchesPattern(domain: string, pattern: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Check if domain is in allowlist
|
|
72
|
+
*/
|
|
73
|
+
export declare function isDomainAllowed(domain: string, allowlist: string[]): boolean;
|
|
74
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/utils/patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B;;OAEG;;IAGH;;OAEG;;IAMH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;;IAIH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;CAEJ,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IACtD,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/D,CA6BA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAczD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAET"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sensitive data patterns for detection
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SENSITIVE_PATTERNS = void 0;
|
|
7
|
+
exports.containsSensitiveData = containsSensitiveData;
|
|
8
|
+
exports.maskSensitiveData = maskSensitiveData;
|
|
9
|
+
exports.extractDomain = extractDomain;
|
|
10
|
+
exports.domainMatchesPattern = domainMatchesPattern;
|
|
11
|
+
exports.isDomainAllowed = isDomainAllowed;
|
|
12
|
+
// BIP-39 English wordlist (first 100 words for pattern matching)
|
|
13
|
+
const BIP39_WORDS = [
|
|
14
|
+
'abandon', 'ability', 'able', 'about', 'above', 'absent', 'absorb', 'abstract',
|
|
15
|
+
'absurd', 'abuse', 'access', 'accident', 'account', 'accuse', 'achieve', 'acid',
|
|
16
|
+
'acoustic', 'acquire', 'across', 'act', 'action', 'actor', 'actress', 'actual',
|
|
17
|
+
'adapt', 'add', 'addict', 'address', 'adjust', 'admit', 'adult', 'advance',
|
|
18
|
+
'advice', 'aerobic', 'affair', 'afford', 'afraid', 'again', 'age', 'agent',
|
|
19
|
+
'agree', 'ahead', 'aim', 'air', 'airport', 'aisle', 'alarm', 'album',
|
|
20
|
+
'alcohol', 'alert', 'alien', 'all', 'alley', 'allow', 'almost', 'alone',
|
|
21
|
+
'alpha', 'already', 'also', 'alter', 'always', 'amateur', 'amazing', 'among',
|
|
22
|
+
'amount', 'amused', 'analyst', 'anchor', 'ancient', 'anger', 'angle', 'angry',
|
|
23
|
+
'animal', 'ankle', 'announce', 'annual', 'another', 'answer', 'antenna', 'antique',
|
|
24
|
+
'anxiety', 'any', 'apart', 'apology', 'appear', 'apple', 'approve', 'april',
|
|
25
|
+
'arch', 'arctic', 'area', 'arena', 'argue', 'arm', 'armed', 'armor',
|
|
26
|
+
'army', 'around', 'arrange', 'arrest', 'arrive', 'arrow', 'art', 'artefact',
|
|
27
|
+
'artist', 'artwork', 'ask', 'aspect', 'assault', 'asset', 'assist', 'assume',
|
|
28
|
+
'asthma', 'athlete', 'atom', 'attack', 'attend', 'attitude', 'attract', 'auction',
|
|
29
|
+
'audit', 'august', 'aunt', 'author', 'auto', 'autumn', 'average', 'avocado',
|
|
30
|
+
'avoid', 'awake', 'aware', 'away', 'awesome', 'awful', 'awkward', 'axis',
|
|
31
|
+
'baby', 'bachelor', 'bacon', 'badge', 'bag', 'balance', 'balcony', 'ball',
|
|
32
|
+
'bamboo', 'banana', 'banner', 'bar', 'barely', 'bargain', 'barrel', 'base',
|
|
33
|
+
'basic', 'basket', 'battle', 'beach', 'bean', 'beauty', 'because', 'become',
|
|
34
|
+
'beef', 'before', 'begin', 'behave', 'behind', 'believe', 'below', 'belt',
|
|
35
|
+
'bench', 'benefit', 'best', 'betray', 'better', 'between', 'beyond', 'bicycle',
|
|
36
|
+
'bid', 'bike', 'bind', 'biology', 'bird', 'birth', 'bitter', 'black',
|
|
37
|
+
'blade', 'blame', 'blanket', 'blast', 'bleak', 'bless', 'blind', 'blood',
|
|
38
|
+
'blossom', 'blouse', 'blue', 'blur', 'blush', 'board', 'boat', 'body',
|
|
39
|
+
].join('|');
|
|
40
|
+
/**
|
|
41
|
+
* Sensitive data patterns
|
|
42
|
+
*/
|
|
43
|
+
exports.SENSITIVE_PATTERNS = {
|
|
44
|
+
/**
|
|
45
|
+
* Ethereum private key (64 hex characters with 0x prefix)
|
|
46
|
+
*/
|
|
47
|
+
PRIVATE_KEY: /0x[a-fA-F0-9]{64}/g,
|
|
48
|
+
/**
|
|
49
|
+
* Mnemonic/seed phrase (12, 15, 18, 21, or 24 words)
|
|
50
|
+
*/
|
|
51
|
+
MNEMONIC: new RegExp(`\\b(${BIP39_WORDS})\\b(\\s+\\b(${BIP39_WORDS})\\b){11,23}`, 'gi'),
|
|
52
|
+
/**
|
|
53
|
+
* API key/secret patterns
|
|
54
|
+
*/
|
|
55
|
+
API_SECRET: /(api[_\-]?secret|secret[_\-]?key|api[_\-]?key)\s*[:=]\s*['"]?[A-Za-z0-9\-_]{20,}['"]?/gi,
|
|
56
|
+
/**
|
|
57
|
+
* SSH private key
|
|
58
|
+
*/
|
|
59
|
+
SSH_KEY: /-----BEGIN (OPENSSH|RSA|DSA|EC|PGP) PRIVATE KEY-----/g,
|
|
60
|
+
/**
|
|
61
|
+
* JWT/Bearer token
|
|
62
|
+
*/
|
|
63
|
+
BEARER_TOKEN: /Bearer\s+[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]*/g,
|
|
64
|
+
/**
|
|
65
|
+
* AWS credentials
|
|
66
|
+
*/
|
|
67
|
+
AWS_KEY: /(AKIA|ABIA|ACCA|ASIA)[0-9A-Z]{16}/g,
|
|
68
|
+
AWS_SECRET: /aws[_\-]?secret[_\-]?access[_\-]?key\s*[:=]\s*['"]?[A-Za-z0-9/+=]{40}['"]?/gi,
|
|
69
|
+
/**
|
|
70
|
+
* GitHub token
|
|
71
|
+
*/
|
|
72
|
+
GITHUB_TOKEN: /gh[pousr]_[A-Za-z0-9_]{36,}/g,
|
|
73
|
+
/**
|
|
74
|
+
* Generic password in config
|
|
75
|
+
*/
|
|
76
|
+
PASSWORD_CONFIG: /(password|passwd|pwd)\s*[:=]\s*['"][^'"]{8,}['"]/gi,
|
|
77
|
+
/**
|
|
78
|
+
* Database connection string
|
|
79
|
+
*/
|
|
80
|
+
DB_CONNECTION: /(mongodb|postgres|mysql|redis):\/\/[^\s'"]+/gi,
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Check if content contains sensitive data
|
|
84
|
+
*/
|
|
85
|
+
function containsSensitiveData(content) {
|
|
86
|
+
const matches = [];
|
|
87
|
+
const types = new Set();
|
|
88
|
+
for (const [type, pattern] of Object.entries(exports.SENSITIVE_PATTERNS)) {
|
|
89
|
+
// Reset lastIndex for global patterns
|
|
90
|
+
pattern.lastIndex = 0;
|
|
91
|
+
let match;
|
|
92
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
93
|
+
types.add(type);
|
|
94
|
+
matches.push({
|
|
95
|
+
type,
|
|
96
|
+
match: match[0],
|
|
97
|
+
truncated: match[0].slice(0, 20) + (match[0].length > 20 ? '...' : ''),
|
|
98
|
+
});
|
|
99
|
+
// Prevent infinite loop for zero-length matches
|
|
100
|
+
if (match.index === pattern.lastIndex) {
|
|
101
|
+
pattern.lastIndex++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
found: types.size > 0,
|
|
107
|
+
types: Array.from(types),
|
|
108
|
+
matches,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Mask sensitive data in content
|
|
113
|
+
*/
|
|
114
|
+
function maskSensitiveData(content) {
|
|
115
|
+
let masked = content;
|
|
116
|
+
for (const pattern of Object.values(exports.SENSITIVE_PATTERNS)) {
|
|
117
|
+
pattern.lastIndex = 0;
|
|
118
|
+
masked = masked.replace(pattern, (match) => {
|
|
119
|
+
if (match.length <= 8) {
|
|
120
|
+
return '*'.repeat(match.length);
|
|
121
|
+
}
|
|
122
|
+
return match.slice(0, 4) + '*'.repeat(match.length - 8) + match.slice(-4);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return masked;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Extract domain from URL
|
|
129
|
+
*/
|
|
130
|
+
function extractDomain(url) {
|
|
131
|
+
try {
|
|
132
|
+
const parsed = new URL(url);
|
|
133
|
+
return parsed.hostname;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Check if domain matches a pattern (supports wildcards)
|
|
141
|
+
*/
|
|
142
|
+
function domainMatchesPattern(domain, pattern) {
|
|
143
|
+
if (pattern === '*')
|
|
144
|
+
return true;
|
|
145
|
+
if (pattern.startsWith('*.')) {
|
|
146
|
+
const suffix = pattern.slice(2);
|
|
147
|
+
return domain === suffix || domain.endsWith('.' + suffix);
|
|
148
|
+
}
|
|
149
|
+
return domain === pattern;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check if domain is in allowlist
|
|
153
|
+
*/
|
|
154
|
+
function isDomainAllowed(domain, allowlist) {
|
|
155
|
+
return allowlist.some((pattern) => domainMatchesPattern(domain, pattern));
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/utils/patterns.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@goplus/agentguard",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "GoPlus AgentGuard — Security guard for AI agents. Blocks dangerous commands, prevents data leaks, protects secrets. 20 detection rules, runtime action evaluation, trust registry.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"agentguard": "./dist/mcp-server.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/mcp-server.js",
|
|
13
|
+
"dev": "tsc -w",
|
|
14
|
+
"test": "node --test dist/tests/*.test.js",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"claude-code-skill",
|
|
19
|
+
"agent-skills",
|
|
20
|
+
"mcp",
|
|
21
|
+
"security",
|
|
22
|
+
"ai-agent",
|
|
23
|
+
"web3",
|
|
24
|
+
"goplus",
|
|
25
|
+
"claude-code",
|
|
26
|
+
"codex",
|
|
27
|
+
"scanner",
|
|
28
|
+
"trust-registry",
|
|
29
|
+
"hooks"
|
|
30
|
+
],
|
|
31
|
+
"author": "GoPlusSecurity",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/GoPlusSecurity/agentguard.git"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
42
|
+
"axios": "^1.6.7",
|
|
43
|
+
"commander": "^12.0.0",
|
|
44
|
+
"glob": "^10.3.10",
|
|
45
|
+
"zod": "^3.25.32"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^20.11.24",
|
|
49
|
+
"typescript": "^5.3.3"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/GoPlusSecurity/agentguard#readme",
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/GoPlusSecurity/agentguard/issues"
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"dist",
|
|
57
|
+
"README.md",
|
|
58
|
+
"LICENSE"
|
|
59
|
+
]
|
|
60
|
+
}
|