@renseiai/agentfactory 0.8.17 → 0.8.18
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/dist/src/merge-queue/adapters/github-native.d.ts +8 -0
- package/dist/src/merge-queue/adapters/github-native.d.ts.map +1 -1
- package/dist/src/merge-queue/adapters/github-native.js +37 -7
- package/dist/src/merge-queue/adapters/github-native.test.js +71 -42
- package/dist/src/orchestrator/activity-emitter.d.ts +7 -0
- package/dist/src/orchestrator/activity-emitter.d.ts.map +1 -1
- package/dist/src/orchestrator/activity-emitter.js +19 -1
- package/dist/src/orchestrator/api-activity-emitter.d.ts +6 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts.map +1 -1
- package/dist/src/orchestrator/api-activity-emitter.js +35 -0
- package/dist/src/orchestrator/index.d.ts +2 -0
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +1 -0
- package/dist/src/orchestrator/issue-tracker-client.d.ts +2 -1
- package/dist/src/orchestrator/issue-tracker-client.d.ts.map +1 -1
- package/dist/src/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/src/orchestrator/orchestrator.js +42 -0
- package/dist/src/orchestrator/security-scan-event.d.ts +57 -0
- package/dist/src/orchestrator/security-scan-event.d.ts.map +1 -0
- package/dist/src/orchestrator/security-scan-event.js +192 -0
- package/dist/src/orchestrator/security-scan-event.test.d.ts +2 -0
- package/dist/src/orchestrator/security-scan-event.test.d.ts.map +1 -0
- package/dist/src/orchestrator/security-scan-event.test.js +219 -0
- package/dist/src/orchestrator/state-recovery.d.ts.map +1 -1
- package/dist/src/orchestrator/state-recovery.js +1 -0
- package/dist/src/orchestrator/work-types.d.ts +1 -1
- package/dist/src/orchestrator/work-types.d.ts.map +1 -1
- package/dist/src/providers/types.d.ts +1 -0
- package/dist/src/providers/types.d.ts.map +1 -1
- package/dist/src/templates/registry.test.js +3 -2
- package/dist/src/templates/types.d.ts +2 -0
- package/dist/src/templates/types.d.ts.map +1 -1
- package/dist/src/templates/types.js +1 -0
- package/dist/src/tools/index.d.ts +2 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +1 -0
- package/dist/src/tools/tool-category.d.ts +16 -0
- package/dist/src/tools/tool-category.d.ts.map +1 -0
- package/dist/src/tools/tool-category.js +58 -0
- package/package.json +2 -2
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Scan Event
|
|
3
|
+
*
|
|
4
|
+
* Defines the `SecurityScanEvent` type and parsers for extracting structured
|
|
5
|
+
* vulnerability data from security scanner output (semgrep JSON, npm-audit JSON, etc.).
|
|
6
|
+
*
|
|
7
|
+
* The security station template instructs agents to output structured JSON in
|
|
8
|
+
* fenced code blocks tagged `security-scan-result`. This module parses that output.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
export interface SecurityScanEvent {
|
|
12
|
+
type: 'agent.security-scan';
|
|
13
|
+
scanner: string;
|
|
14
|
+
severityCounts: {
|
|
15
|
+
critical: number;
|
|
16
|
+
high: number;
|
|
17
|
+
medium: number;
|
|
18
|
+
low: number;
|
|
19
|
+
};
|
|
20
|
+
totalFindings: number;
|
|
21
|
+
target: string;
|
|
22
|
+
scanDurationMs: number;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const SecurityScanEventSchema: z.ZodObject<{
|
|
26
|
+
type: z.ZodLiteral<"agent.security-scan">;
|
|
27
|
+
scanner: z.ZodString;
|
|
28
|
+
severityCounts: z.ZodObject<{
|
|
29
|
+
critical: z.ZodNumber;
|
|
30
|
+
high: z.ZodNumber;
|
|
31
|
+
medium: z.ZodNumber;
|
|
32
|
+
low: z.ZodNumber;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
totalFindings: z.ZodNumber;
|
|
35
|
+
target: z.ZodString;
|
|
36
|
+
scanDurationMs: z.ZodNumber;
|
|
37
|
+
timestamp: z.ZodString;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
/**
|
|
40
|
+
* Parse structured security scan results from agent output.
|
|
41
|
+
*
|
|
42
|
+
* Looks for fenced code blocks tagged `security-scan-result` and parses
|
|
43
|
+
* the JSON inside each block. Returns one `SecurityScanEvent` per block.
|
|
44
|
+
*
|
|
45
|
+
* Gracefully handles malformed output — returns partial data with zero counts
|
|
46
|
+
* rather than throwing.
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseSecurityScanOutput(rawOutput: string): SecurityScanEvent[];
|
|
49
|
+
/**
|
|
50
|
+
* Parse semgrep --json output into a SecurityScanEvent.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseSemgrepOutput(rawJson: string, target: string, durationMs: number): SecurityScanEvent;
|
|
53
|
+
/**
|
|
54
|
+
* Parse npm audit --json output into a SecurityScanEvent.
|
|
55
|
+
*/
|
|
56
|
+
export declare function parseNpmAuditOutput(rawJson: string, target: string, durationMs: number): SecurityScanEvent;
|
|
57
|
+
//# sourceMappingURL=security-scan-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-scan-event.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/security-scan-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/E,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;iBAalC,CAAA;AAYF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAkB9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CA2BzG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAoD1G"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Scan Event
|
|
3
|
+
*
|
|
4
|
+
* Defines the `SecurityScanEvent` type and parsers for extracting structured
|
|
5
|
+
* vulnerability data from security scanner output (semgrep JSON, npm-audit JSON, etc.).
|
|
6
|
+
*
|
|
7
|
+
* The security station template instructs agents to output structured JSON in
|
|
8
|
+
* fenced code blocks tagged `security-scan-result`. This module parses that output.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Zod Schema
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
export const SecurityScanEventSchema = z.object({
|
|
15
|
+
type: z.literal('agent.security-scan'),
|
|
16
|
+
scanner: z.string().min(1),
|
|
17
|
+
severityCounts: z.object({
|
|
18
|
+
critical: z.number().int().nonnegative(),
|
|
19
|
+
high: z.number().int().nonnegative(),
|
|
20
|
+
medium: z.number().int().nonnegative(),
|
|
21
|
+
low: z.number().int().nonnegative(),
|
|
22
|
+
}),
|
|
23
|
+
totalFindings: z.number().int().nonnegative(),
|
|
24
|
+
target: z.string().min(1),
|
|
25
|
+
scanDurationMs: z.number().nonnegative(),
|
|
26
|
+
timestamp: z.string().min(1),
|
|
27
|
+
});
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Structured output parser (from agent fenced code blocks)
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Regex to extract JSON from ```security-scan-result fenced code blocks.
|
|
33
|
+
* The agent outputs one block per scanner run.
|
|
34
|
+
*/
|
|
35
|
+
const FENCED_BLOCK_RE = /```security-scan-result\s*\n([\s\S]*?)```/g;
|
|
36
|
+
/**
|
|
37
|
+
* Parse structured security scan results from agent output.
|
|
38
|
+
*
|
|
39
|
+
* Looks for fenced code blocks tagged `security-scan-result` and parses
|
|
40
|
+
* the JSON inside each block. Returns one `SecurityScanEvent` per block.
|
|
41
|
+
*
|
|
42
|
+
* Gracefully handles malformed output — returns partial data with zero counts
|
|
43
|
+
* rather than throwing.
|
|
44
|
+
*/
|
|
45
|
+
export function parseSecurityScanOutput(rawOutput) {
|
|
46
|
+
const events = [];
|
|
47
|
+
const now = new Date().toISOString();
|
|
48
|
+
for (const match of rawOutput.matchAll(FENCED_BLOCK_RE)) {
|
|
49
|
+
const jsonStr = match[1]?.trim();
|
|
50
|
+
if (!jsonStr)
|
|
51
|
+
continue;
|
|
52
|
+
try {
|
|
53
|
+
const parsed = JSON.parse(jsonStr);
|
|
54
|
+
const event = buildEventFromParsed(parsed, now);
|
|
55
|
+
events.push(event);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Malformed JSON — skip this block
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return events;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse semgrep --json output into a SecurityScanEvent.
|
|
65
|
+
*/
|
|
66
|
+
export function parseSemgrepOutput(rawJson, target, durationMs) {
|
|
67
|
+
const now = new Date().toISOString();
|
|
68
|
+
try {
|
|
69
|
+
const parsed = JSON.parse(rawJson);
|
|
70
|
+
const results = Array.isArray(parsed.results) ? parsed.results : [];
|
|
71
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
72
|
+
for (const result of results) {
|
|
73
|
+
const severity = (result.extra?.severity ?? result.severity ?? '').toLowerCase();
|
|
74
|
+
if (severity === 'error' || severity === 'critical')
|
|
75
|
+
counts.critical++;
|
|
76
|
+
else if (severity === 'warning' || severity === 'high')
|
|
77
|
+
counts.high++;
|
|
78
|
+
else if (severity === 'medium' || severity === 'info')
|
|
79
|
+
counts.medium++;
|
|
80
|
+
else
|
|
81
|
+
counts.low++;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
type: 'agent.security-scan',
|
|
85
|
+
scanner: 'semgrep',
|
|
86
|
+
severityCounts: counts,
|
|
87
|
+
totalFindings: results.length,
|
|
88
|
+
target,
|
|
89
|
+
scanDurationMs: durationMs,
|
|
90
|
+
timestamp: now,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return emptyEvent('semgrep', target, durationMs, now);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Parse npm audit --json output into a SecurityScanEvent.
|
|
99
|
+
*/
|
|
100
|
+
export function parseNpmAuditOutput(rawJson, target, durationMs) {
|
|
101
|
+
const now = new Date().toISOString();
|
|
102
|
+
try {
|
|
103
|
+
const parsed = JSON.parse(rawJson);
|
|
104
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
105
|
+
let totalFindings = 0;
|
|
106
|
+
// npm audit v2 format (npm 7+)
|
|
107
|
+
if (parsed.vulnerabilities && typeof parsed.vulnerabilities === 'object') {
|
|
108
|
+
for (const vuln of Object.values(parsed.vulnerabilities)) {
|
|
109
|
+
const severity = (vuln.severity ?? '').toLowerCase();
|
|
110
|
+
if (severity === 'critical')
|
|
111
|
+
counts.critical++;
|
|
112
|
+
else if (severity === 'high')
|
|
113
|
+
counts.high++;
|
|
114
|
+
else if (severity === 'moderate' || severity === 'medium')
|
|
115
|
+
counts.medium++;
|
|
116
|
+
else if (severity === 'low')
|
|
117
|
+
counts.low++;
|
|
118
|
+
totalFindings++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// npm audit v1 format (npm 6)
|
|
122
|
+
else if (parsed.advisories && typeof parsed.advisories === 'object') {
|
|
123
|
+
for (const advisory of Object.values(parsed.advisories)) {
|
|
124
|
+
const severity = (advisory.severity ?? '').toLowerCase();
|
|
125
|
+
if (severity === 'critical')
|
|
126
|
+
counts.critical++;
|
|
127
|
+
else if (severity === 'high')
|
|
128
|
+
counts.high++;
|
|
129
|
+
else if (severity === 'moderate' || severity === 'medium')
|
|
130
|
+
counts.medium++;
|
|
131
|
+
else if (severity === 'low')
|
|
132
|
+
counts.low++;
|
|
133
|
+
totalFindings++;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// pnpm audit format (metadata.vulnerabilities summary)
|
|
137
|
+
else if (parsed.metadata?.vulnerabilities) {
|
|
138
|
+
const v = parsed.metadata.vulnerabilities;
|
|
139
|
+
counts.critical = v.critical ?? 0;
|
|
140
|
+
counts.high = v.high ?? 0;
|
|
141
|
+
counts.medium = v.moderate ?? v.medium ?? 0;
|
|
142
|
+
counts.low = v.low ?? 0;
|
|
143
|
+
totalFindings = counts.critical + counts.high + counts.medium + counts.low;
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
type: 'agent.security-scan',
|
|
147
|
+
scanner: 'npm-audit',
|
|
148
|
+
severityCounts: counts,
|
|
149
|
+
totalFindings,
|
|
150
|
+
target,
|
|
151
|
+
scanDurationMs: durationMs,
|
|
152
|
+
timestamp: now,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return emptyEvent('npm-audit', target, durationMs, now);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// Helpers
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
function buildEventFromParsed(parsed, timestamp) {
|
|
163
|
+
const obj = parsed;
|
|
164
|
+
const severityCounts = obj.severityCounts;
|
|
165
|
+
const counts = {
|
|
166
|
+
critical: Math.max(0, Number(severityCounts?.critical) || 0),
|
|
167
|
+
high: Math.max(0, Number(severityCounts?.high) || 0),
|
|
168
|
+
medium: Math.max(0, Number(severityCounts?.medium) || 0),
|
|
169
|
+
low: Math.max(0, Number(severityCounts?.low) || 0),
|
|
170
|
+
};
|
|
171
|
+
const total = counts.critical + counts.high + counts.medium + counts.low;
|
|
172
|
+
return {
|
|
173
|
+
type: 'agent.security-scan',
|
|
174
|
+
scanner: String(obj.scanner || 'unknown'),
|
|
175
|
+
severityCounts: counts,
|
|
176
|
+
totalFindings: Math.max(0, Number(obj.totalFindings) || total),
|
|
177
|
+
target: String(obj.target || 'unknown'),
|
|
178
|
+
scanDurationMs: Math.max(0, Number(obj.scanDurationMs) || 0),
|
|
179
|
+
timestamp,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function emptyEvent(scanner, target, durationMs, timestamp) {
|
|
183
|
+
return {
|
|
184
|
+
type: 'agent.security-scan',
|
|
185
|
+
scanner,
|
|
186
|
+
severityCounts: { critical: 0, high: 0, medium: 0, low: 0 },
|
|
187
|
+
totalFindings: 0,
|
|
188
|
+
target,
|
|
189
|
+
scanDurationMs: durationMs,
|
|
190
|
+
timestamp,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-scan-event.test.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/security-scan-event.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseSecurityScanOutput, parseSemgrepOutput, parseNpmAuditOutput, SecurityScanEventSchema, } from './security-scan-event.js';
|
|
3
|
+
describe('parseSecurityScanOutput', () => {
|
|
4
|
+
it('parses a single security-scan-result fenced block', () => {
|
|
5
|
+
const output = `
|
|
6
|
+
Some agent text here.
|
|
7
|
+
|
|
8
|
+
\`\`\`security-scan-result
|
|
9
|
+
{
|
|
10
|
+
"scanner": "semgrep",
|
|
11
|
+
"severityCounts": { "critical": 0, "high": 2, "medium": 5, "low": 12 },
|
|
12
|
+
"totalFindings": 19,
|
|
13
|
+
"target": "repo:org/project",
|
|
14
|
+
"scanDurationMs": 45000
|
|
15
|
+
}
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
More text after.
|
|
19
|
+
`;
|
|
20
|
+
const events = parseSecurityScanOutput(output);
|
|
21
|
+
expect(events).toHaveLength(1);
|
|
22
|
+
expect(events[0].type).toBe('agent.security-scan');
|
|
23
|
+
expect(events[0].scanner).toBe('semgrep');
|
|
24
|
+
expect(events[0].severityCounts.high).toBe(2);
|
|
25
|
+
expect(events[0].totalFindings).toBe(19);
|
|
26
|
+
expect(events[0].target).toBe('repo:org/project');
|
|
27
|
+
expect(events[0].scanDurationMs).toBe(45000);
|
|
28
|
+
expect(events[0].timestamp).toBeTruthy();
|
|
29
|
+
});
|
|
30
|
+
it('parses multiple security-scan-result blocks', () => {
|
|
31
|
+
const output = `
|
|
32
|
+
\`\`\`security-scan-result
|
|
33
|
+
{
|
|
34
|
+
"scanner": "semgrep",
|
|
35
|
+
"severityCounts": { "critical": 1, "high": 0, "medium": 0, "low": 0 },
|
|
36
|
+
"totalFindings": 1,
|
|
37
|
+
"target": "src/",
|
|
38
|
+
"scanDurationMs": 10000
|
|
39
|
+
}
|
|
40
|
+
\`\`\`
|
|
41
|
+
|
|
42
|
+
\`\`\`security-scan-result
|
|
43
|
+
{
|
|
44
|
+
"scanner": "npm-audit",
|
|
45
|
+
"severityCounts": { "critical": 0, "high": 3, "medium": 2, "low": 1 },
|
|
46
|
+
"totalFindings": 6,
|
|
47
|
+
"target": "package.json",
|
|
48
|
+
"scanDurationMs": 5000
|
|
49
|
+
}
|
|
50
|
+
\`\`\`
|
|
51
|
+
`;
|
|
52
|
+
const events = parseSecurityScanOutput(output);
|
|
53
|
+
expect(events).toHaveLength(2);
|
|
54
|
+
expect(events[0].scanner).toBe('semgrep');
|
|
55
|
+
expect(events[1].scanner).toBe('npm-audit');
|
|
56
|
+
});
|
|
57
|
+
it('returns empty array for output with no fenced blocks', () => {
|
|
58
|
+
const events = parseSecurityScanOutput('No security scan results here.');
|
|
59
|
+
expect(events).toHaveLength(0);
|
|
60
|
+
});
|
|
61
|
+
it('skips malformed JSON blocks gracefully', () => {
|
|
62
|
+
const output = `
|
|
63
|
+
\`\`\`security-scan-result
|
|
64
|
+
{ this is not valid json }
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
\`\`\`security-scan-result
|
|
68
|
+
{
|
|
69
|
+
"scanner": "semgrep",
|
|
70
|
+
"severityCounts": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
|
|
71
|
+
"totalFindings": 0,
|
|
72
|
+
"target": ".",
|
|
73
|
+
"scanDurationMs": 1000
|
|
74
|
+
}
|
|
75
|
+
\`\`\`
|
|
76
|
+
`;
|
|
77
|
+
const events = parseSecurityScanOutput(output);
|
|
78
|
+
expect(events).toHaveLength(1);
|
|
79
|
+
expect(events[0].scanner).toBe('semgrep');
|
|
80
|
+
});
|
|
81
|
+
it('handles missing fields with defaults', () => {
|
|
82
|
+
const output = `
|
|
83
|
+
\`\`\`security-scan-result
|
|
84
|
+
{
|
|
85
|
+
"scanner": "custom-tool"
|
|
86
|
+
}
|
|
87
|
+
\`\`\`
|
|
88
|
+
`;
|
|
89
|
+
const events = parseSecurityScanOutput(output);
|
|
90
|
+
expect(events).toHaveLength(1);
|
|
91
|
+
expect(events[0].scanner).toBe('custom-tool');
|
|
92
|
+
expect(events[0].severityCounts).toEqual({ critical: 0, high: 0, medium: 0, low: 0 });
|
|
93
|
+
expect(events[0].totalFindings).toBe(0);
|
|
94
|
+
expect(events[0].target).toBe('unknown');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('parseSemgrepOutput', () => {
|
|
98
|
+
it('parses semgrep --json output', () => {
|
|
99
|
+
const semgrepJson = JSON.stringify({
|
|
100
|
+
results: [
|
|
101
|
+
{ extra: { severity: 'ERROR' }, check_id: 'rule1' },
|
|
102
|
+
{ extra: { severity: 'WARNING' }, check_id: 'rule2' },
|
|
103
|
+
{ extra: { severity: 'WARNING' }, check_id: 'rule3' },
|
|
104
|
+
{ extra: { severity: 'INFO' }, check_id: 'rule4' },
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
const event = parseSemgrepOutput(semgrepJson, 'src/', 30000);
|
|
108
|
+
expect(event.type).toBe('agent.security-scan');
|
|
109
|
+
expect(event.scanner).toBe('semgrep');
|
|
110
|
+
expect(event.severityCounts.critical).toBe(1);
|
|
111
|
+
expect(event.severityCounts.high).toBe(2);
|
|
112
|
+
expect(event.severityCounts.medium).toBe(1);
|
|
113
|
+
expect(event.severityCounts.low).toBe(0);
|
|
114
|
+
expect(event.totalFindings).toBe(4);
|
|
115
|
+
expect(event.target).toBe('src/');
|
|
116
|
+
expect(event.scanDurationMs).toBe(30000);
|
|
117
|
+
});
|
|
118
|
+
it('handles empty results array', () => {
|
|
119
|
+
const event = parseSemgrepOutput(JSON.stringify({ results: [] }), '.', 0);
|
|
120
|
+
expect(event.totalFindings).toBe(0);
|
|
121
|
+
expect(event.severityCounts).toEqual({ critical: 0, high: 0, medium: 0, low: 0 });
|
|
122
|
+
});
|
|
123
|
+
it('returns empty event for malformed input', () => {
|
|
124
|
+
const event = parseSemgrepOutput('not json', '.', 0);
|
|
125
|
+
expect(event.scanner).toBe('semgrep');
|
|
126
|
+
expect(event.totalFindings).toBe(0);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('parseNpmAuditOutput', () => {
|
|
130
|
+
it('parses npm audit v2 format', () => {
|
|
131
|
+
const auditJson = JSON.stringify({
|
|
132
|
+
vulnerabilities: {
|
|
133
|
+
lodash: { severity: 'critical' },
|
|
134
|
+
express: { severity: 'high' },
|
|
135
|
+
debug: { severity: 'moderate' },
|
|
136
|
+
chalk: { severity: 'low' },
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
const event = parseNpmAuditOutput(auditJson, 'package.json', 5000);
|
|
140
|
+
expect(event.scanner).toBe('npm-audit');
|
|
141
|
+
expect(event.severityCounts.critical).toBe(1);
|
|
142
|
+
expect(event.severityCounts.high).toBe(1);
|
|
143
|
+
expect(event.severityCounts.medium).toBe(1);
|
|
144
|
+
expect(event.severityCounts.low).toBe(1);
|
|
145
|
+
expect(event.totalFindings).toBe(4);
|
|
146
|
+
});
|
|
147
|
+
it('parses npm audit v1 format (advisories)', () => {
|
|
148
|
+
const auditJson = JSON.stringify({
|
|
149
|
+
advisories: {
|
|
150
|
+
'1': { severity: 'high' },
|
|
151
|
+
'2': { severity: 'high' },
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
const event = parseNpmAuditOutput(auditJson, 'package.json', 3000);
|
|
155
|
+
expect(event.severityCounts.high).toBe(2);
|
|
156
|
+
expect(event.totalFindings).toBe(2);
|
|
157
|
+
});
|
|
158
|
+
it('parses pnpm audit metadata format', () => {
|
|
159
|
+
const auditJson = JSON.stringify({
|
|
160
|
+
metadata: {
|
|
161
|
+
vulnerabilities: {
|
|
162
|
+
critical: 0,
|
|
163
|
+
high: 1,
|
|
164
|
+
moderate: 3,
|
|
165
|
+
low: 5,
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
const event = parseNpmAuditOutput(auditJson, 'package.json', 2000);
|
|
170
|
+
expect(event.severityCounts.critical).toBe(0);
|
|
171
|
+
expect(event.severityCounts.high).toBe(1);
|
|
172
|
+
expect(event.severityCounts.medium).toBe(3);
|
|
173
|
+
expect(event.severityCounts.low).toBe(5);
|
|
174
|
+
expect(event.totalFindings).toBe(9);
|
|
175
|
+
});
|
|
176
|
+
it('returns empty event for malformed input', () => {
|
|
177
|
+
const event = parseNpmAuditOutput('not json', '.', 0);
|
|
178
|
+
expect(event.scanner).toBe('npm-audit');
|
|
179
|
+
expect(event.totalFindings).toBe(0);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe('SecurityScanEventSchema', () => {
|
|
183
|
+
it('validates a correct event', () => {
|
|
184
|
+
const event = {
|
|
185
|
+
type: 'agent.security-scan',
|
|
186
|
+
scanner: 'semgrep',
|
|
187
|
+
severityCounts: { critical: 0, high: 0, medium: 0, low: 0 },
|
|
188
|
+
totalFindings: 0,
|
|
189
|
+
target: '.',
|
|
190
|
+
scanDurationMs: 1000,
|
|
191
|
+
timestamp: new Date().toISOString(),
|
|
192
|
+
};
|
|
193
|
+
expect(() => SecurityScanEventSchema.parse(event)).not.toThrow();
|
|
194
|
+
});
|
|
195
|
+
it('rejects negative severity counts', () => {
|
|
196
|
+
const event = {
|
|
197
|
+
type: 'agent.security-scan',
|
|
198
|
+
scanner: 'semgrep',
|
|
199
|
+
severityCounts: { critical: -1, high: 0, medium: 0, low: 0 },
|
|
200
|
+
totalFindings: 0,
|
|
201
|
+
target: '.',
|
|
202
|
+
scanDurationMs: 1000,
|
|
203
|
+
timestamp: new Date().toISOString(),
|
|
204
|
+
};
|
|
205
|
+
expect(() => SecurityScanEventSchema.parse(event)).toThrow();
|
|
206
|
+
});
|
|
207
|
+
it('rejects missing scanner', () => {
|
|
208
|
+
const event = {
|
|
209
|
+
type: 'agent.security-scan',
|
|
210
|
+
scanner: '',
|
|
211
|
+
severityCounts: { critical: 0, high: 0, medium: 0, low: 0 },
|
|
212
|
+
totalFindings: 0,
|
|
213
|
+
target: '.',
|
|
214
|
+
scanDurationMs: 1000,
|
|
215
|
+
timestamp: new Date().toISOString(),
|
|
216
|
+
};
|
|
217
|
+
expect(() => SecurityScanEventSchema.parse(event)).toThrow();
|
|
218
|
+
});
|
|
219
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-recovery.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/state-recovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,mBAAmB,EAEnB,iBAAiB,EAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAQpD;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAeD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,GAAG,IAAI,EAChC,SAAS,GAAE,MAAqC,GAC/C,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAE5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CACxB,GACL,mBAAmB,CA2ErB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAK7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAI3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,aAAa,GAAG,IAAI,CAWtB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAIxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,GAAG,aAAa,CAmBhB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,aAAa,GACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"state-recovery.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/state-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Agent work type — determines prompt template, status transitions,
|
|
10
10
|
* and whether a git worktree is needed.
|
|
11
11
|
*/
|
|
12
|
-
export type AgentWorkType = 'research' | 'backlog-creation' | 'development' | 'inflight' | 'inflight-coordination' | 'qa' | 'acceptance' | 'refinement' | 'refinement-coordination' | 'coordination' | 'qa-coordination' | 'acceptance-coordination' | 'merge';
|
|
12
|
+
export type AgentWorkType = 'research' | 'backlog-creation' | 'development' | 'inflight' | 'inflight-coordination' | 'qa' | 'acceptance' | 'refinement' | 'refinement-coordination' | 'coordination' | 'qa-coordination' | 'acceptance-coordination' | 'merge' | 'security';
|
|
13
13
|
/**
|
|
14
14
|
* Workflow status — platform-agnostic string (e.g., 'Started', 'Finished').
|
|
15
15
|
* Concrete values are defined by the issue tracker plugin.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-types.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/work-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,IAAI,GACJ,YAAY,GACZ,YAAY,GACZ,yBAAyB,GACzB,cAAc,GACd,iBAAiB,GACjB,yBAAyB,GACzB,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"work-types.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/work-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,IAAI,GACJ,YAAY,GACZ,YAAY,GACZ,yBAAyB,GACzB,cAAc,GACd,iBAAiB,GACjB,yBAAyB,GACzB,OAAO,GACP,UAAU,CAAA;AAEd;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AAEnC;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC/C,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IACzD,sEAAsE;IACtE,sBAAsB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IAC5D,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IACxD,oEAAoE;IACpE,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,6CAA6C;IAC7C,0BAA0B,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;CACvD;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;CAS1B,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,OAAO,uBAAuB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,12 +127,13 @@ describe('TemplateRegistry', () => {
|
|
|
127
127
|
describe('built-in defaults', () => {
|
|
128
128
|
it('loads built-in default templates when useBuiltinDefaults is true', () => {
|
|
129
129
|
const fullRegistry = TemplateRegistry.create({ useBuiltinDefaults: true });
|
|
130
|
-
// Should have loaded templates for all
|
|
130
|
+
// Should have loaded templates for all 14 base work types + 5 strategy templates
|
|
131
131
|
const workTypes = fullRegistry.getRegisteredWorkTypes();
|
|
132
|
-
expect(workTypes.length).toBe(
|
|
132
|
+
expect(workTypes.length).toBe(19);
|
|
133
133
|
expect(workTypes).toContain('development');
|
|
134
134
|
expect(workTypes).toContain('qa');
|
|
135
135
|
expect(workTypes).toContain('coordination');
|
|
136
|
+
expect(workTypes).toContain('security');
|
|
136
137
|
// Strategy-specific templates
|
|
137
138
|
expect(workTypes).toContain('refinement-context-enriched');
|
|
138
139
|
expect(workTypes).toContain('refinement-decompose');
|
|
@@ -157,6 +157,7 @@ export declare const AgentWorkTypeSchema: z.ZodEnum<{
|
|
|
157
157
|
"qa-coordination": "qa-coordination";
|
|
158
158
|
"acceptance-coordination": "acceptance-coordination";
|
|
159
159
|
merge: "merge";
|
|
160
|
+
security: "security";
|
|
160
161
|
}>;
|
|
161
162
|
export declare const ToolPermissionSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
162
163
|
shell: z.ZodString;
|
|
@@ -181,6 +182,7 @@ export declare const WorkflowTemplateSchema: z.ZodObject<{
|
|
|
181
182
|
"qa-coordination": "qa-coordination";
|
|
182
183
|
"acceptance-coordination": "acceptance-coordination";
|
|
183
184
|
merge: "merge";
|
|
185
|
+
security: "security";
|
|
184
186
|
}>;
|
|
185
187
|
}, z.core.$strip>;
|
|
186
188
|
tools: z.ZodOptional<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAGlE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAMlE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB,YAAY,GACZ,MAAM,CAAA;AAMV;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,IAAI,CAAA;IAChB,IAAI,EAAE,kBAAkB,CAAA;IACxB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,aAAa,CAAA;KACxB,CAAA;IACD,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;QACxB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;KAC5B,CAAA;IACD,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;CACf;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,IAAI,CAAA;IAChB,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,0EAA0E;QAC1E,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IAGb,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IAGnB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IAGtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAA;IAGxB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kGAAkG;IAClG,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAA;IAGxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAGtD,iGAAiG;IACjG,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAMD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAAA;CAC9D;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC/F,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/templates/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { ToolRegistry } from './registry.js';
|
|
2
2
|
export type { CreateServersResult } from './registry.js';
|
|
3
3
|
export type { ToolPlugin, ToolPluginContext } from './types.js';
|
|
4
|
+
export { classifyTool } from './tool-category.js';
|
|
5
|
+
export type { ToolCategory } from './tool-category.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/src/tools/index.js
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool category classification based on tool name pattern matching.
|
|
3
|
+
*
|
|
4
|
+
* Classifies tools into functional categories for dashboard and analytics use.
|
|
5
|
+
*/
|
|
6
|
+
export type ToolCategory = 'security' | 'testing' | 'build' | 'deploy' | 'research' | 'general';
|
|
7
|
+
/**
|
|
8
|
+
* Classify a tool into a functional category based on its name.
|
|
9
|
+
*
|
|
10
|
+
* Handles both simple tool names (e.g. `Read`, `Bash`) and
|
|
11
|
+
* MCP-qualified names (e.g. `mcp__af-linear__af_linear_create_issue`).
|
|
12
|
+
*
|
|
13
|
+
* Returns `'general'` for tools that don't match any specific category.
|
|
14
|
+
*/
|
|
15
|
+
export declare function classifyTool(toolName: string): ToolCategory;
|
|
16
|
+
//# sourceMappingURL=tool-category.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-category.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-category.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;AAwC/F;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAU3D"}
|