@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 @@
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
+ }