hackmyagent 0.10.0 → 0.11.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 (132) hide show
  1. package/README.md +111 -257
  2. package/dist/arp/index.d.ts +5 -1
  3. package/dist/arp/index.d.ts.map +1 -1
  4. package/dist/arp/index.js +38 -1
  5. package/dist/arp/index.js.map +1 -1
  6. package/dist/arp/monitors/skill-capability-monitor.d.ts +119 -0
  7. package/dist/arp/monitors/skill-capability-monitor.d.ts.map +1 -0
  8. package/dist/arp/monitors/skill-capability-monitor.js +258 -0
  9. package/dist/arp/monitors/skill-capability-monitor.js.map +1 -0
  10. package/dist/arp/telemetry/forwarder.d.ts +62 -0
  11. package/dist/arp/telemetry/forwarder.d.ts.map +1 -0
  12. package/dist/arp/telemetry/forwarder.js +106 -0
  13. package/dist/arp/telemetry/forwarder.js.map +1 -0
  14. package/dist/arp/telemetry/gtin.d.ts +87 -0
  15. package/dist/arp/telemetry/gtin.d.ts.map +1 -0
  16. package/dist/arp/telemetry/gtin.js +239 -0
  17. package/dist/arp/telemetry/gtin.js.map +1 -0
  18. package/dist/arp/telemetry/index.d.ts +6 -0
  19. package/dist/arp/telemetry/index.d.ts.map +1 -0
  20. package/dist/arp/telemetry/index.js +17 -0
  21. package/dist/arp/telemetry/index.js.map +1 -0
  22. package/dist/arp/types.d.ts +10 -0
  23. package/dist/arp/types.d.ts.map +1 -1
  24. package/dist/attack/index.d.ts +1 -1
  25. package/dist/attack/index.d.ts.map +1 -1
  26. package/dist/attack/index.js +5 -1
  27. package/dist/attack/index.js.map +1 -1
  28. package/dist/attack/payloads/context-window.d.ts +7 -0
  29. package/dist/attack/payloads/context-window.d.ts.map +1 -0
  30. package/dist/attack/payloads/context-window.js +110 -0
  31. package/dist/attack/payloads/context-window.js.map +1 -0
  32. package/dist/attack/payloads/index.d.ts +5 -1
  33. package/dist/attack/payloads/index.d.ts.map +1 -1
  34. package/dist/attack/payloads/index.js +17 -1
  35. package/dist/attack/payloads/index.js.map +1 -1
  36. package/dist/attack/payloads/memory-weaponization.d.ts +7 -0
  37. package/dist/attack/payloads/memory-weaponization.d.ts.map +1 -0
  38. package/dist/attack/payloads/memory-weaponization.js +110 -0
  39. package/dist/attack/payloads/memory-weaponization.js.map +1 -0
  40. package/dist/attack/payloads/supply-chain.d.ts +7 -0
  41. package/dist/attack/payloads/supply-chain.d.ts.map +1 -0
  42. package/dist/attack/payloads/supply-chain.js +110 -0
  43. package/dist/attack/payloads/supply-chain.js.map +1 -0
  44. package/dist/attack/payloads/tool-shadow.d.ts +8 -0
  45. package/dist/attack/payloads/tool-shadow.d.ts.map +1 -0
  46. package/dist/attack/payloads/tool-shadow.js +209 -0
  47. package/dist/attack/payloads/tool-shadow.js.map +1 -0
  48. package/dist/attack/scanner.d.ts.map +1 -1
  49. package/dist/attack/scanner.js +4 -0
  50. package/dist/attack/scanner.js.map +1 -1
  51. package/dist/attack/types.d.ts +1 -1
  52. package/dist/attack/types.d.ts.map +1 -1
  53. package/dist/attack/types.js +20 -0
  54. package/dist/attack/types.js.map +1 -1
  55. package/dist/checker/index.d.ts +2 -0
  56. package/dist/checker/index.d.ts.map +1 -1
  57. package/dist/checker/index.js +8 -1
  58. package/dist/checker/index.js.map +1 -1
  59. package/dist/checker/skill-dependency-graph.d.ts +55 -0
  60. package/dist/checker/skill-dependency-graph.d.ts.map +1 -0
  61. package/dist/checker/skill-dependency-graph.js +288 -0
  62. package/dist/checker/skill-dependency-graph.js.map +1 -0
  63. package/dist/cli.js +481 -66
  64. package/dist/cli.js.map +1 -1
  65. package/dist/hardening/index.d.ts +5 -0
  66. package/dist/hardening/index.d.ts.map +1 -1
  67. package/dist/hardening/index.js +11 -1
  68. package/dist/hardening/index.js.map +1 -1
  69. package/dist/hardening/scanner.d.ts +40 -0
  70. package/dist/hardening/scanner.d.ts.map +1 -1
  71. package/dist/hardening/scanner.js +988 -11
  72. package/dist/hardening/scanner.js.map +1 -1
  73. package/dist/hardening/security-check.d.ts +2 -0
  74. package/dist/hardening/security-check.d.ts.map +1 -1
  75. package/dist/hardening/skill-capability-validator.d.ts +31 -0
  76. package/dist/hardening/skill-capability-validator.d.ts.map +1 -0
  77. package/dist/hardening/skill-capability-validator.js +237 -0
  78. package/dist/hardening/skill-capability-validator.js.map +1 -0
  79. package/dist/hardening/skill-context.d.ts +22 -0
  80. package/dist/hardening/skill-context.d.ts.map +1 -0
  81. package/dist/hardening/skill-context.js +127 -0
  82. package/dist/hardening/skill-context.js.map +1 -0
  83. package/dist/hardening/taxonomy.d.ts +17 -0
  84. package/dist/hardening/taxonomy.d.ts.map +1 -0
  85. package/dist/hardening/taxonomy.js +152 -0
  86. package/dist/hardening/taxonomy.js.map +1 -0
  87. package/dist/index.d.ts +12 -4
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +36 -3
  90. package/dist/index.js.map +1 -1
  91. package/dist/plugins/credvault.js +2 -2
  92. package/dist/plugins/credvault.js.map +1 -1
  93. package/dist/plugins/secretless.d.ts +15 -0
  94. package/dist/plugins/secretless.d.ts.map +1 -0
  95. package/dist/plugins/secretless.js +199 -0
  96. package/dist/plugins/secretless.js.map +1 -0
  97. package/dist/plugins/signcrypt.js +2 -2
  98. package/dist/plugins/signcrypt.js.map +1 -1
  99. package/dist/plugins/skillguard.js +2 -2
  100. package/dist/plugins/skillguard.js.map +1 -1
  101. package/dist/registry/client.d.ts +1 -1
  102. package/dist/registry/client.d.ts.map +1 -1
  103. package/dist/registry/client.js +4 -1
  104. package/dist/registry/client.js.map +1 -1
  105. package/dist/registry/publish.d.ts.map +1 -1
  106. package/dist/registry/publish.js +7 -1
  107. package/dist/registry/publish.js.map +1 -1
  108. package/dist/resolve-mcp.d.ts +21 -0
  109. package/dist/resolve-mcp.d.ts.map +1 -0
  110. package/dist/resolve-mcp.js +42 -0
  111. package/dist/resolve-mcp.js.map +1 -0
  112. package/dist/scanner/external-scanner.d.ts.map +1 -1
  113. package/dist/scanner/external-scanner.js +48 -14
  114. package/dist/scanner/external-scanner.js.map +1 -1
  115. package/dist/scanner/types.d.ts +1 -0
  116. package/dist/scanner/types.d.ts.map +1 -1
  117. package/dist/soul/scanner.d.ts.map +1 -1
  118. package/dist/soul/scanner.js +2 -1
  119. package/dist/soul/scanner.js.map +1 -1
  120. package/dist/telemetry/contribute.d.ts +60 -0
  121. package/dist/telemetry/contribute.d.ts.map +1 -0
  122. package/dist/telemetry/contribute.js +169 -0
  123. package/dist/telemetry/contribute.js.map +1 -0
  124. package/dist/telemetry/index.d.ts +6 -0
  125. package/dist/telemetry/index.d.ts.map +1 -0
  126. package/dist/telemetry/index.js +18 -0
  127. package/dist/telemetry/index.js.map +1 -0
  128. package/dist/telemetry/opt-in.d.ts +46 -0
  129. package/dist/telemetry/opt-in.d.ts.map +1 -0
  130. package/dist/telemetry/opt-in.js +220 -0
  131. package/dist/telemetry/opt-in.js.map +1 -0
  132. package/package.json +9 -3
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * Skill Dependency Graph Analysis
4
+ *
5
+ * Parses SKILL.md files, builds a dependency graph, and detects:
6
+ * - SKILL-015: Circular dependencies
7
+ * - SKILL-016: Phantom dependencies (referenced but not found)
8
+ * - SKILL-017: Unpinned dependency versions
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.parseSkillFrontmatter = parseSkillFrontmatter;
45
+ exports.buildDependencyGraph = buildDependencyGraph;
46
+ exports.detectCircularDeps = detectCircularDeps;
47
+ exports.detectPhantomDeps = detectPhantomDeps;
48
+ exports.detectUnpinnedDeps = detectUnpinnedDeps;
49
+ exports.analyzeSkillDependencies = analyzeSkillDependencies;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ // --- Frontmatter Parsing ---
53
+ /**
54
+ * Parse YAML frontmatter from SKILL.md content.
55
+ * Extracts name, version, dependencies, and tools fields.
56
+ */
57
+ function parseSkillFrontmatter(content, filePath = '') {
58
+ const metadata = {
59
+ name: '',
60
+ version: undefined,
61
+ dependencies: [],
62
+ tools: [],
63
+ filePath,
64
+ };
65
+ // Extract frontmatter between --- delimiters
66
+ const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
67
+ if (!frontmatterMatch) {
68
+ // If no frontmatter, try to extract name from first heading
69
+ const headingMatch = content.match(/^#\s+(.+)/m);
70
+ if (headingMatch) {
71
+ metadata.name = headingMatch[1].trim();
72
+ }
73
+ return metadata;
74
+ }
75
+ const frontmatter = frontmatterMatch[1];
76
+ // Parse name
77
+ const nameMatch = frontmatter.match(/^name:\s*(.+)$/m);
78
+ if (nameMatch) {
79
+ metadata.name = nameMatch[1].trim().replace(/^["']|["']$/g, '');
80
+ }
81
+ // Parse version
82
+ const versionMatch = frontmatter.match(/^version:\s*(.+)$/m);
83
+ if (versionMatch) {
84
+ metadata.version = versionMatch[1].trim().replace(/^["']|["']$/g, '');
85
+ }
86
+ // Parse dependencies (YAML list)
87
+ metadata.dependencies = parseYamlList(frontmatter, 'dependencies');
88
+ // Parse tools (YAML list)
89
+ metadata.tools = parseYamlList(frontmatter, 'tools');
90
+ return metadata;
91
+ }
92
+ /**
93
+ * Parse a simple YAML list field from frontmatter content.
94
+ * Supports both inline [a, b] and block list formats.
95
+ */
96
+ function parseYamlList(frontmatter, field) {
97
+ // Try inline format: field: [a, b, c]
98
+ const inlineMatch = frontmatter.match(new RegExp(`^${field}:\\s*\\[([^\\]]*)]`, 'm'));
99
+ if (inlineMatch) {
100
+ return inlineMatch[1]
101
+ .split(',')
102
+ .map((item) => item.trim().replace(/^["']|["']$/g, ''))
103
+ .filter((item) => item.length > 0);
104
+ }
105
+ // Try block format:
106
+ // field:
107
+ // - item1
108
+ // - item2
109
+ const blockMatch = frontmatter.match(new RegExp(`^${field}:\\s*\\n((?:\\s+-\\s+.+\\n?)*)`, 'm'));
110
+ if (blockMatch) {
111
+ return blockMatch[1]
112
+ .split('\n')
113
+ .map((line) => {
114
+ const itemMatch = line.match(/^\s+-\s+(.+)/);
115
+ return itemMatch ? itemMatch[1].trim().replace(/^["']|["']$/g, '') : '';
116
+ })
117
+ .filter((item) => item.length > 0);
118
+ }
119
+ return [];
120
+ }
121
+ // --- Graph Construction ---
122
+ /**
123
+ * Recursively scan a directory for SKILL.md files and build a dependency graph.
124
+ */
125
+ function buildDependencyGraph(skillDir) {
126
+ const graph = {
127
+ nodes: new Map(),
128
+ edges: new Map(),
129
+ };
130
+ const skillFiles = findSkillFiles(skillDir);
131
+ for (const filePath of skillFiles) {
132
+ try {
133
+ const content = fs.readFileSync(filePath, 'utf-8');
134
+ const metadata = parseSkillFrontmatter(content, filePath);
135
+ // Use filename-based name as fallback
136
+ if (!metadata.name) {
137
+ const dirName = path.basename(path.dirname(filePath));
138
+ metadata.name = dirName !== '.' ? dirName : path.basename(filePath, '.md');
139
+ }
140
+ graph.nodes.set(metadata.name, metadata);
141
+ // Build edges from dependencies
142
+ const depNames = new Set();
143
+ for (const dep of metadata.dependencies) {
144
+ // Strip version from dependency reference (e.g., "skill-a@1.0.0" -> "skill-a")
145
+ const depName = dep.split('@')[0];
146
+ depNames.add(depName);
147
+ }
148
+ graph.edges.set(metadata.name, depNames);
149
+ }
150
+ catch {
151
+ // Skip files that cannot be read
152
+ }
153
+ }
154
+ return graph;
155
+ }
156
+ /**
157
+ * Recursively find all SKILL.md files in a directory.
158
+ */
159
+ function findSkillFiles(dir) {
160
+ const results = [];
161
+ try {
162
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
163
+ for (const entry of entries) {
164
+ const fullPath = path.join(dir, entry.name);
165
+ if (entry.isDirectory() && entry.name !== 'node_modules' && entry.name !== '.git') {
166
+ results.push(...findSkillFiles(fullPath));
167
+ }
168
+ else if (entry.isFile() && entry.name.toUpperCase() === 'SKILL.MD') {
169
+ results.push(fullPath);
170
+ }
171
+ }
172
+ }
173
+ catch {
174
+ // Directory not readable
175
+ }
176
+ return results;
177
+ }
178
+ // --- Detection Functions ---
179
+ /**
180
+ * Detect circular dependencies using DFS with a recursion stack.
181
+ */
182
+ function detectCircularDeps(graph) {
183
+ const findings = [];
184
+ const visited = new Set();
185
+ const inStack = new Set();
186
+ const cyclePaths = [];
187
+ function dfs(node, pathSoFar) {
188
+ if (inStack.has(node)) {
189
+ // Found a cycle — extract the cycle portion
190
+ const cycleStart = pathSoFar.indexOf(node);
191
+ const cycle = [...pathSoFar.slice(cycleStart), node];
192
+ cyclePaths.push(cycle);
193
+ return;
194
+ }
195
+ if (visited.has(node))
196
+ return;
197
+ visited.add(node);
198
+ inStack.add(node);
199
+ const deps = graph.edges.get(node);
200
+ if (deps) {
201
+ for (const dep of deps) {
202
+ dfs(dep, [...pathSoFar, node]);
203
+ }
204
+ }
205
+ inStack.delete(node);
206
+ }
207
+ for (const nodeName of graph.nodes.keys()) {
208
+ dfs(nodeName, []);
209
+ }
210
+ for (const cycle of cyclePaths) {
211
+ const cycleStr = cycle.join(' -> ');
212
+ const node = graph.nodes.get(cycle[0]);
213
+ findings.push({
214
+ id: 'SKILL-015',
215
+ title: 'Circular dependency detected',
216
+ description: `Circular dependency chain: ${cycleStr}`,
217
+ severity: 'high',
218
+ filePath: node?.filePath,
219
+ autoFixable: false,
220
+ });
221
+ }
222
+ return findings;
223
+ }
224
+ /**
225
+ * Detect phantom dependencies — referenced skills that do not exist in the graph.
226
+ */
227
+ function detectPhantomDeps(graph) {
228
+ const findings = [];
229
+ for (const [skillName, deps] of graph.edges.entries()) {
230
+ for (const dep of deps) {
231
+ if (!graph.nodes.has(dep)) {
232
+ const node = graph.nodes.get(skillName);
233
+ findings.push({
234
+ id: 'SKILL-016',
235
+ title: 'Phantom dependency',
236
+ description: `Skill "${skillName}" depends on "${dep}" which was not found in the scanned directory`,
237
+ severity: 'medium',
238
+ filePath: node?.filePath,
239
+ autoFixable: false,
240
+ });
241
+ }
242
+ }
243
+ }
244
+ return findings;
245
+ }
246
+ /**
247
+ * Detect unpinned dependency versions — dependencies without a version specifier.
248
+ */
249
+ function detectUnpinnedDeps(graph) {
250
+ const findings = [];
251
+ for (const [, metadata] of graph.nodes.entries()) {
252
+ for (const dep of metadata.dependencies) {
253
+ // Check if dep has a version pin (contains @version after the name)
254
+ // e.g., "skill-a@1.0.0" is pinned, "skill-a" is not
255
+ const hasVersion = dep.includes('@') && dep.split('@').length === 2 && dep.split('@')[1].length > 0;
256
+ if (!hasVersion) {
257
+ findings.push({
258
+ id: 'SKILL-017',
259
+ title: 'Unpinned dependency version',
260
+ description: `Skill "${metadata.name}" depends on "${dep}" without a pinned version. Pin to a specific version (e.g., "${dep}@1.0.0") to prevent supply chain attacks.`,
261
+ severity: 'low',
262
+ filePath: metadata.filePath,
263
+ autoFixable: false,
264
+ });
265
+ }
266
+ }
267
+ }
268
+ return findings;
269
+ }
270
+ // --- Main Entry Point ---
271
+ /**
272
+ * Analyze skill dependencies in a directory.
273
+ * Combines circular dependency detection, phantom dependency detection,
274
+ * and unpinned version detection.
275
+ */
276
+ function analyzeSkillDependencies(skillDir) {
277
+ const graph = buildDependencyGraph(skillDir);
278
+ if (graph.nodes.size === 0) {
279
+ return [];
280
+ }
281
+ const findings = [
282
+ ...detectCircularDeps(graph),
283
+ ...detectPhantomDeps(graph),
284
+ ...detectUnpinnedDeps(graph),
285
+ ];
286
+ return findings;
287
+ }
288
+ //# sourceMappingURL=skill-dependency-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-dependency-graph.js","sourceRoot":"","sources":["../../src/checker/skill-dependency-graph.ts"],"names":[],"mappings":"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"}