@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.
Files changed (40) hide show
  1. package/dist/src/merge-queue/adapters/github-native.d.ts +8 -0
  2. package/dist/src/merge-queue/adapters/github-native.d.ts.map +1 -1
  3. package/dist/src/merge-queue/adapters/github-native.js +37 -7
  4. package/dist/src/merge-queue/adapters/github-native.test.js +71 -42
  5. package/dist/src/orchestrator/activity-emitter.d.ts +7 -0
  6. package/dist/src/orchestrator/activity-emitter.d.ts.map +1 -1
  7. package/dist/src/orchestrator/activity-emitter.js +19 -1
  8. package/dist/src/orchestrator/api-activity-emitter.d.ts +6 -0
  9. package/dist/src/orchestrator/api-activity-emitter.d.ts.map +1 -1
  10. package/dist/src/orchestrator/api-activity-emitter.js +35 -0
  11. package/dist/src/orchestrator/index.d.ts +2 -0
  12. package/dist/src/orchestrator/index.d.ts.map +1 -1
  13. package/dist/src/orchestrator/index.js +1 -0
  14. package/dist/src/orchestrator/issue-tracker-client.d.ts +2 -1
  15. package/dist/src/orchestrator/issue-tracker-client.d.ts.map +1 -1
  16. package/dist/src/orchestrator/orchestrator.d.ts.map +1 -1
  17. package/dist/src/orchestrator/orchestrator.js +42 -0
  18. package/dist/src/orchestrator/security-scan-event.d.ts +57 -0
  19. package/dist/src/orchestrator/security-scan-event.d.ts.map +1 -0
  20. package/dist/src/orchestrator/security-scan-event.js +192 -0
  21. package/dist/src/orchestrator/security-scan-event.test.d.ts +2 -0
  22. package/dist/src/orchestrator/security-scan-event.test.d.ts.map +1 -0
  23. package/dist/src/orchestrator/security-scan-event.test.js +219 -0
  24. package/dist/src/orchestrator/state-recovery.d.ts.map +1 -1
  25. package/dist/src/orchestrator/state-recovery.js +1 -0
  26. package/dist/src/orchestrator/work-types.d.ts +1 -1
  27. package/dist/src/orchestrator/work-types.d.ts.map +1 -1
  28. package/dist/src/providers/types.d.ts +1 -0
  29. package/dist/src/providers/types.d.ts.map +1 -1
  30. package/dist/src/templates/registry.test.js +3 -2
  31. package/dist/src/templates/types.d.ts +2 -0
  32. package/dist/src/templates/types.d.ts.map +1 -1
  33. package/dist/src/templates/types.js +1 -0
  34. package/dist/src/tools/index.d.ts +2 -0
  35. package/dist/src/tools/index.d.ts.map +1 -1
  36. package/dist/src/tools/index.js +1 -0
  37. package/dist/src/tools/tool-category.d.ts +16 -0
  38. package/dist/src/tools/tool-category.d.ts.map +1 -0
  39. package/dist/src/tools/tool-category.js +58 -0
  40. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=security-scan-event.test.d.ts.map
@@ -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":"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"}
1
+ {"version":3,"file":"state-recovery.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/state-recovery.ts"],"names":[],"mappings":"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"}
@@ -231,6 +231,7 @@ export function getTaskListId(issueIdentifier, workType) {
231
231
  'qa-coordination': 'QA-COORD',
232
232
  'acceptance-coordination': 'AC-COORD',
233
233
  merge: 'MRG',
234
+ security: 'SEC',
234
235
  };
235
236
  return `${issueIdentifier}-${suffixMap[workType]}`;
236
237
  }
@@ -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;AAEX;;;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
+ {"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"}
@@ -138,6 +138,7 @@ export interface AgentToolUseEvent {
138
138
  toolName: string;
139
139
  toolUseId?: string;
140
140
  input: Record<string, unknown>;
141
+ toolCategory?: import('../tools/tool-category.js').ToolCategory;
141
142
  raw: unknown;
142
143
  }
143
144
  /** Tool execution result */
@@ -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 13 base work types + 5 strategy templates
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(18);
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":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/templates/types.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ const WORK_TYPES = [
31
31
  'qa-coordination',
32
32
  'acceptance-coordination',
33
33
  'merge',
34
+ 'security',
34
35
  ];
35
36
  export const AgentWorkTypeSchema = z.enum(WORK_TYPES);
36
37
  export const ToolPermissionSchema = z.union([
@@ -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"}
@@ -1 +1,2 @@
1
1
  export { ToolRegistry } from './registry.js';
2
+ export { classifyTool } from './tool-category.js';
@@ -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"}