@securecode-ai/mcp 0.5.8 → 0.6.1

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 (45) hide show
  1. package/README.md +2 -1
  2. package/dist/api/client.d.ts +11 -1
  3. package/dist/api/client.js +93 -8
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/types.d.ts +24 -0
  6. package/dist/approval/policy.js +5 -0
  7. package/dist/approval/policy.js.map +1 -1
  8. package/dist/attack/agentScanBatchProtocol.d.ts +98 -0
  9. package/dist/attack/agentScanBatchProtocol.js +125 -0
  10. package/dist/attack/agentScanBatchProtocol.js.map +1 -0
  11. package/dist/attack/agentScanBatchSelection.d.ts +38 -0
  12. package/dist/attack/agentScanBatchSelection.js +167 -0
  13. package/dist/attack/agentScanBatchSelection.js.map +1 -0
  14. package/dist/attack/agentScanCoordinator.d.ts +33 -0
  15. package/dist/attack/agentScanCoordinator.js +116 -0
  16. package/dist/attack/agentScanCoordinator.js.map +1 -0
  17. package/dist/attack/agentScanCreditPlan.d.ts +40 -0
  18. package/dist/attack/agentScanCreditPlan.js +50 -0
  19. package/dist/attack/agentScanCreditPlan.js.map +1 -0
  20. package/dist/attack/agentScanLoop.js +205 -111
  21. package/dist/attack/agentScanLoop.js.map +1 -1
  22. package/dist/attack/agentScanProtocol.d.ts +2 -2
  23. package/dist/attack/agentScanProtocol.js.map +1 -1
  24. package/dist/attack/investigationState.d.ts +1 -0
  25. package/dist/attack/investigationState.js +20 -7
  26. package/dist/attack/investigationState.js.map +1 -1
  27. package/dist/attack/scanScheduler.d.ts +5 -0
  28. package/dist/attack/scanScheduler.js +37 -2
  29. package/dist/attack/scanScheduler.js.map +1 -1
  30. package/dist/attack/scanState.d.ts +6 -0
  31. package/dist/attack/scanState.js +5 -0
  32. package/dist/attack/scanState.js.map +1 -1
  33. package/dist/mcp/server.js +2 -0
  34. package/dist/mcp/server.js.map +1 -1
  35. package/dist/mcp/tools.js +35 -0
  36. package/dist/mcp/tools.js.map +1 -1
  37. package/dist/project-map/scanCache.d.ts +4 -1
  38. package/dist/project-map/scanCache.js +15 -0
  39. package/dist/project-map/scanCache.js.map +1 -1
  40. package/dist/tools/agentScan.js +10 -1
  41. package/dist/tools/agentScan.js.map +1 -1
  42. package/dist/tools/agentScanBatch.d.ts +18 -0
  43. package/dist/tools/agentScanBatch.js +178 -0
  44. package/dist/tools/agentScanBatch.js.map +1 -0
  45. package/package.json +1 -1
package/README.md CHANGED
@@ -100,7 +100,7 @@ Or if installed globally:
100
100
  claude mcp add securecode -s user -- securecode-mcp serve --workspace /path/to/your/project
101
101
  ```
102
102
 
103
- ## Tools (16)
103
+ ## Tools (17)
104
104
 
105
105
  ### Scanning
106
106
 
@@ -108,6 +108,7 @@ claude mcp add securecode -s user -- securecode-mcp serve --workspace /path/to/y
108
108
  |------|-------------|----------|
109
109
  | `securecode.scan` | Scan code for vulnerabilities (AI pipeline) | No |
110
110
  | `securecode.agent-scan` | Agent-mode deep scan with 20+ tools, structured proof, and sandbox verification | No |
111
+ | `securecode.agent-scan-batch` | Sequential batch scan: map + architecture scout + scan top N files one at a time | No |
111
112
  | `securecode.scan-batch` | Scan multiple files in one call | No |
112
113
  | `securecode.scan-secrets` | Scan for hardcoded secrets and PII (local, no AI) | No |
113
114
  | `securecode.scan-dependencies` | Scan lockfiles for known vulnerabilities (OSV/NVD) | No |
@@ -1,12 +1,21 @@
1
+ import type { ApiErrorDetails } from './types';
1
2
  export declare class ApiClientError extends Error {
2
3
  readonly status: number;
3
4
  readonly apiCode: string | undefined;
4
5
  readonly remaining: number | undefined;
5
- constructor(status: number, apiCode: string | undefined, message: string, remaining: number | undefined);
6
+ readonly creditType: string | undefined;
7
+ readonly requested: number | undefined;
8
+ readonly balance: number | undefined;
9
+ readonly required: number | undefined;
10
+ readonly available: number | undefined;
11
+ readonly retryable: boolean | undefined;
12
+ constructor(status: number, apiCode: string | undefined, message: string, remaining: number | undefined, details?: ApiErrorDetails);
6
13
  static isInsufficientCredits(err: unknown): boolean;
7
14
  static isAuthFailure(err: unknown): boolean;
8
15
  static isRateLimit(err: unknown): boolean;
9
16
  static isServerUnavailable(err: unknown): boolean;
17
+ static isAgentScanConflict(err: unknown): boolean;
18
+ static isCreditLockTimeout(err: unknown): boolean;
10
19
  }
11
20
  export interface ApiClientOptions {
12
21
  baseUrl: string;
@@ -19,6 +28,7 @@ export declare class ApiClient {
19
28
  private readonly timeoutMs;
20
29
  constructor(opts: ApiClientOptions);
21
30
  postJson<T>(path: string, body: unknown, signal?: AbortSignal): Promise<T>;
31
+ getJson<T>(path: string, signal?: AbortSignal): Promise<T>;
22
32
  /**
23
33
  * POST without an Authorization header — for login/OTP before a token exists.
24
34
  */
@@ -36,18 +36,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ApiClient = exports.ApiClientError = void 0;
37
37
  const http = __importStar(require("http"));
38
38
  const https = __importStar(require("https"));
39
- const DEFAULT_TIMEOUT_MS = 1_200_000; // 20 min — consensus mode with Kimi retries can take very long
39
+ const DEFAULT_TIMEOUT_MS = 1_200_000;
40
40
  const MAX_RESPONSE_BYTES = 10 * 1024 * 1024;
41
41
  class ApiClientError extends Error {
42
42
  status;
43
43
  apiCode;
44
44
  remaining;
45
- constructor(status, apiCode, message, remaining) {
45
+ creditType;
46
+ requested;
47
+ balance;
48
+ required;
49
+ available;
50
+ retryable;
51
+ constructor(status, apiCode, message, remaining, details) {
46
52
  super(message);
47
53
  this.status = status;
48
54
  this.apiCode = apiCode;
49
55
  this.remaining = remaining;
50
56
  this.name = 'ApiClientError';
57
+ this.creditType = details?.creditType;
58
+ this.requested = details?.requested;
59
+ this.balance = details?.balance;
60
+ this.required = details?.required;
61
+ this.available = details?.available;
62
+ this.retryable = details?.retryable;
51
63
  }
52
64
  static isInsufficientCredits(err) {
53
65
  return err instanceof ApiClientError && err.status === 402;
@@ -61,6 +73,14 @@ class ApiClientError extends Error {
61
73
  static isServerUnavailable(err) {
62
74
  return err instanceof ApiClientError && err.status === 503;
63
75
  }
76
+ static isAgentScanConflict(err) {
77
+ return err instanceof ApiClientError &&
78
+ (err.status === 409 || err.apiCode === 'AGENT_SCAN_ALREADY_RUNNING');
79
+ }
80
+ static isCreditLockTimeout(err) {
81
+ return err instanceof ApiClientError &&
82
+ err.apiCode === 'CREDIT_LOCK_TIMEOUT';
83
+ }
64
84
  }
65
85
  exports.ApiClientError = ApiClientError;
66
86
  class ApiClient {
@@ -116,13 +136,15 @@ class ApiClient {
116
136
  resolve(data);
117
137
  }
118
138
  else {
119
- const apiErr = {
120
- status,
121
- code: data.code || data.error_code,
122
- message: data.error || data.message || `HTTP ${status}`,
123
- remaining: data.remaining,
139
+ const details = {
140
+ creditType: data.creditType,
141
+ requested: data.requested,
142
+ balance: data.balance,
143
+ required: data.required,
144
+ available: data.available,
145
+ retryable: data.retryable,
124
146
  };
125
- reject(new ApiClientError(apiErr.status, apiErr.code, apiErr.message, apiErr.remaining));
147
+ reject(new ApiClientError(status, data.code || data.error_code, data.error || data.message || `HTTP ${status}`, data.remaining, details));
126
148
  }
127
149
  });
128
150
  });
@@ -137,6 +159,69 @@ class ApiClient {
137
159
  req.end();
138
160
  });
139
161
  }
162
+ async getJson(path, signal) {
163
+ const url = `${this.baseUrl}${path}`;
164
+ const parsed = new URL(url);
165
+ const lib = parsed.protocol === 'https:' ? https : http;
166
+ return new Promise((resolve, reject) => {
167
+ const req = lib.request({
168
+ hostname: parsed.hostname,
169
+ port: parsed.port || (parsed.protocol === 'https:' ? 443 : 80),
170
+ path: parsed.pathname + parsed.search,
171
+ method: 'GET',
172
+ headers: {
173
+ Authorization: `Bearer ${this.token}`,
174
+ },
175
+ signal,
176
+ }, (res) => {
177
+ let raw = '';
178
+ let aborted = false;
179
+ res.on('data', (chunk) => {
180
+ if (raw.length + chunk.length > MAX_RESPONSE_BYTES) {
181
+ aborted = true;
182
+ req.destroy();
183
+ reject(new ApiClientError(502, undefined, 'Response too large', undefined));
184
+ return;
185
+ }
186
+ raw += chunk.toString('utf8');
187
+ });
188
+ res.on('end', () => {
189
+ if (aborted)
190
+ return;
191
+ let data;
192
+ try {
193
+ data = raw ? JSON.parse(raw) : {};
194
+ }
195
+ catch {
196
+ data = { raw };
197
+ }
198
+ const status = res.statusCode ?? 0;
199
+ if (status >= 200 && status < 300) {
200
+ resolve(data);
201
+ }
202
+ else {
203
+ const details = {
204
+ creditType: data.creditType,
205
+ requested: data.requested,
206
+ balance: data.balance,
207
+ required: data.required,
208
+ available: data.available,
209
+ retryable: data.retryable,
210
+ };
211
+ reject(new ApiClientError(status, data.code || data.error_code, data.error || data.message || `HTTP ${status}`, data.remaining, details));
212
+ }
213
+ });
214
+ });
215
+ req.on('error', (err) => {
216
+ reject(new ApiClientError(0, undefined, `Network error: ${err.message}`, undefined));
217
+ });
218
+ req.setTimeout(this.timeoutMs, () => {
219
+ req.destroy();
220
+ reject(new ApiClientError(0, undefined, `Request timed out after ${this.timeoutMs}ms`, undefined));
221
+ });
222
+ req.end();
223
+ });
224
+ }
140
225
  /**
141
226
  * POST without an Authorization header — for login/OTP before a token exists.
142
227
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -141,6 +141,30 @@ export interface ApiError {
141
141
  message: string;
142
142
  remaining?: number;
143
143
  scanType?: string;
144
+ creditType?: 'scan' | 'attacker';
145
+ requested?: number;
146
+ balance?: number;
147
+ required?: number;
148
+ available?: number;
149
+ shortfall?: number;
150
+ retryable?: boolean;
151
+ }
152
+ export interface CreditBalanceResponse {
153
+ scanCredits: number;
154
+ attackerCredits: number;
155
+ scanCreditsExpiringSoon?: number;
156
+ reservedScanCredits?: number;
157
+ availableScanCredits?: number;
158
+ }
159
+ export interface ApiErrorDetails {
160
+ creditType?: 'scan' | 'attacker';
161
+ requested?: number;
162
+ balance?: number;
163
+ required?: number;
164
+ available?: number;
165
+ shortfall?: number;
166
+ stage?: string;
167
+ retryable?: boolean;
144
168
  }
145
169
  export interface EndpointContext {
146
170
  method: string;
@@ -35,6 +35,11 @@ exports.TOOL_POLICIES = {
35
35
  requiresApproval: false,
36
36
  approvalNote: 'Agent scan investigation is read-only. Fix generation within agent-scan requires its own approval prompt.',
37
37
  },
38
+ 'securecode.agent-scan-batch': {
39
+ name: 'securecode.agent-scan-batch',
40
+ category: 'read-only',
41
+ requiresApproval: false,
42
+ },
38
43
  'securecode.record-false-positive': {
39
44
  name: 'securecode.record-false-positive',
40
45
  category: 'read-only',
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/approval/policy.ts"],"names":[],"mappings":";;;AAgGA,sCAEC;AAED,oEAQC;AAnGY,QAAA,aAAa,GAA+B;IACrD,iBAAiB,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,gBAAgB,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,8BAA8B,EAAE;QAC5B,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,uBAAuB,EAAE;QACrB,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,yBAAyB,EAAE;QACvB,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,uBAAuB,EAAE;QACrB,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,2GAA2G;KAC5H;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,6BAA6B,EAAE;QAC3B,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,+BAA+B,EAAE;QAC7B,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,2BAA2B,EAAE;QACzB,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,4BAA4B,EAAE;QAC1B,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,2BAA2B,EAAE;QACzB,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,gBAAgB,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,0GAA0G;KAC3H;IACD,sBAAsB,EAAE;QACpB,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,4EAA4E;KAC7F;IACD,mBAAmB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,sHAAsH;KACvI;CACJ,CAAC;AAEF,SAAgB,aAAa,CAAC,QAAgB;IAC1C,OAAO,qBAAa,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,4BAA4B,CAAC,eAAyB;IAClE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/approval/policy.ts"],"names":[],"mappings":";;;AAqGA,sCAEC;AAED,oEAQC;AAxGY,QAAA,aAAa,GAA+B;IACrD,iBAAiB,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,gBAAgB,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,8BAA8B,EAAE;QAC5B,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,uBAAuB,EAAE;QACrB,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,yBAAyB,EAAE;QACvB,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,uBAAuB,EAAE;QACrB,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,2GAA2G;KAC5H;IACD,6BAA6B,EAAE;QAC3B,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,6BAA6B,EAAE;QAC3B,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,+BAA+B,EAAE;QAC7B,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,2BAA2B,EAAE;QACzB,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,4BAA4B,EAAE;QAC1B,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,2BAA2B,EAAE;QACzB,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,KAAK;KAC1B;IACD,gBAAgB,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,0GAA0G;KAC3H;IACD,sBAAsB,EAAE;QACpB,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,4EAA4E;KAC7F;IACD,mBAAmB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,sHAAsH;KACvI;CACJ,CAAC;AAEF,SAAgB,aAAa,CAAC,QAAgB;IAC1C,OAAO,qBAAa,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,4BAA4B,CAAC,eAAyB;IAClE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Agent scan batch protocol — types for the sequential batch scan tool.
3
+ *
4
+ * The batch tool maps the project, runs architecture scout, selects the top N
5
+ * security-relevant files, and scans them one at a time. It stops on the first
6
+ * incomplete or failed scan and reports remaining files as not-started.
7
+ *
8
+ * Status contract:
9
+ * completed — scan finished cleanly (agent_finish)
10
+ * incomplete — scan was cut short (budget, cost cap, blocked recovery)
11
+ * failed — operational failure (API error, restart, spawn failure)
12
+ * not-started — selected but never attempted (batch stopped before this file)
13
+ */
14
+ import type { ArchitectureDepth } from '../project-map/architectureContext';
15
+ import type { AgentScanResult, AgentScanFinding, InvestigationNote, CoverageGap, TerminationReason } from './agentScanProtocol';
16
+ export interface AgentScanBatchArgs {
17
+ /** Number of files to scan (default 3, clamped to 1..20). */
18
+ topN?: number;
19
+ /** Architecture scout depth (default 'standard'). */
20
+ architectureDepth?: ArchitectureDepth;
21
+ /** Which file list to prefer for selection (default 'recommendedScanOrder'). */
22
+ fileSelection?: 'recommendedScanOrder' | 'importantFiles';
23
+ /** Skip the scan cache for all files in the batch. */
24
+ noCache?: boolean;
25
+ /** Stop after the first incomplete scan (default true). */
26
+ stopOnIncomplete?: boolean;
27
+ /** Stop after the first failed scan (default true). */
28
+ stopOnFailure?: boolean;
29
+ /** Progress callback for batch-level events. */
30
+ _progress?: (current: number, total: number, message: string) => void;
31
+ /** Abort signal for cancellation. */
32
+ _signal?: AbortSignal;
33
+ }
34
+ export type AgentScanBatchFileStatus = 'completed' | 'incomplete' | 'failed' | 'not-started';
35
+ export interface AgentScanBatchFileError {
36
+ code?: string;
37
+ message: string;
38
+ httpStatus?: number;
39
+ retryable?: boolean;
40
+ }
41
+ export interface AgentScanBatchFileResult {
42
+ filePath: string;
43
+ rank: number;
44
+ role?: string;
45
+ importance?: number;
46
+ status: AgentScanBatchFileStatus;
47
+ scanStatus?: string;
48
+ terminationReason?: TerminationReason;
49
+ cached?: boolean;
50
+ findings: AgentScanFinding[];
51
+ investigationNotes: InvestigationNote[];
52
+ coverageGaps: CoverageGap[];
53
+ stepsUsed: number;
54
+ costSpentUsd: number;
55
+ error?: AgentScanBatchFileError;
56
+ }
57
+ export type AgentScanBatchStopReason = 'completed' | 'architecture-failed' | 'architecture-incomplete' | 'insufficient-credits' | 'scan-incomplete' | 'scan-failed' | 'cancelled';
58
+ export interface AgentScanBatchResult {
59
+ status: 'completed' | 'incomplete' | 'failed' | 'preflight-failed' | 'cancelled';
60
+ stopReason: AgentScanBatchStopReason;
61
+ requestedTopN: number;
62
+ selectedFiles: string[];
63
+ completed: AgentScanBatchFileResult[];
64
+ incomplete: AgentScanBatchFileResult[];
65
+ failed: AgentScanBatchFileResult[];
66
+ notStarted: AgentScanBatchFileResult[];
67
+ totals: {
68
+ selected: number;
69
+ completed: number;
70
+ incomplete: number;
71
+ failed: number;
72
+ notStarted: number;
73
+ findings: number;
74
+ stepsUsed: number;
75
+ costSpentUsd: number;
76
+ };
77
+ }
78
+ /**
79
+ * Classify a single agent scan result into a batch file status.
80
+ *
81
+ * - completed → completed
82
+ * - incomplete → incomplete
83
+ * - failed → failed
84
+ * - cancelled → incomplete (started but not finished)
85
+ */
86
+ export declare function classifyAgentScanResult(result: AgentScanResult): AgentScanBatchFileStatus;
87
+ /**
88
+ * Build a per-file result from an AgentScanResult.
89
+ */
90
+ export declare function buildBatchFileResult(filePath: string, rank: number, role: string | undefined, importance: number | undefined, result: AgentScanResult, cached?: boolean): AgentScanBatchFileResult;
91
+ /**
92
+ * Build a not-started file result placeholder.
93
+ */
94
+ export declare function buildNotStartedFileResult(filePath: string, rank: number, role: string | undefined, importance: number | undefined): AgentScanBatchFileResult;
95
+ /**
96
+ * Aggregate per-file results into a batch result with totals.
97
+ */
98
+ export declare function aggregateBatchResult(stopReason: AgentScanBatchStopReason, requestedTopN: number, selectedFiles: string[], fileResults: AgentScanBatchFileResult[]): AgentScanBatchResult;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * Agent scan batch protocol — types for the sequential batch scan tool.
4
+ *
5
+ * The batch tool maps the project, runs architecture scout, selects the top N
6
+ * security-relevant files, and scans them one at a time. It stops on the first
7
+ * incomplete or failed scan and reports remaining files as not-started.
8
+ *
9
+ * Status contract:
10
+ * completed — scan finished cleanly (agent_finish)
11
+ * incomplete — scan was cut short (budget, cost cap, blocked recovery)
12
+ * failed — operational failure (API error, restart, spawn failure)
13
+ * not-started — selected but never attempted (batch stopped before this file)
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.classifyAgentScanResult = classifyAgentScanResult;
17
+ exports.buildBatchFileResult = buildBatchFileResult;
18
+ exports.buildNotStartedFileResult = buildNotStartedFileResult;
19
+ exports.aggregateBatchResult = aggregateBatchResult;
20
+ /**
21
+ * Classify a single agent scan result into a batch file status.
22
+ *
23
+ * - completed → completed
24
+ * - incomplete → incomplete
25
+ * - failed → failed
26
+ * - cancelled → incomplete (started but not finished)
27
+ */
28
+ function classifyAgentScanResult(result) {
29
+ switch (result.status) {
30
+ case 'completed': return 'completed';
31
+ case 'incomplete': return 'incomplete';
32
+ case 'failed': return 'failed';
33
+ case 'cancelled': return 'incomplete';
34
+ default: return 'incomplete';
35
+ }
36
+ }
37
+ /**
38
+ * Build a per-file result from an AgentScanResult.
39
+ */
40
+ function buildBatchFileResult(filePath, rank, role, importance, result, cached) {
41
+ return {
42
+ filePath,
43
+ rank,
44
+ role,
45
+ importance,
46
+ status: classifyAgentScanResult(result),
47
+ scanStatus: result.status,
48
+ terminationReason: result.terminationReason,
49
+ cached,
50
+ findings: result.findings || [],
51
+ investigationNotes: result.investigationNotes || [],
52
+ coverageGaps: result.coverageGaps || [],
53
+ stepsUsed: result.stepsUsed,
54
+ costSpentUsd: result.costSpentUsd,
55
+ error: result.error ? { message: result.error } : undefined,
56
+ };
57
+ }
58
+ /**
59
+ * Build a not-started file result placeholder.
60
+ */
61
+ function buildNotStartedFileResult(filePath, rank, role, importance) {
62
+ return {
63
+ filePath,
64
+ rank,
65
+ role,
66
+ importance,
67
+ status: 'not-started',
68
+ findings: [],
69
+ investigationNotes: [],
70
+ coverageGaps: [],
71
+ stepsUsed: 0,
72
+ costSpentUsd: 0,
73
+ };
74
+ }
75
+ /**
76
+ * Aggregate per-file results into a batch result with totals.
77
+ */
78
+ function aggregateBatchResult(stopReason, requestedTopN, selectedFiles, fileResults) {
79
+ const completed = fileResults.filter(f => f.status === 'completed');
80
+ const incomplete = fileResults.filter(f => f.status === 'incomplete');
81
+ const failed = fileResults.filter(f => f.status === 'failed');
82
+ const notStarted = fileResults.filter(f => f.status === 'not-started');
83
+ const totalFindings = completed.length + incomplete.length > 0
84
+ ? fileResults.reduce((sum, f) => sum + (f.findings?.length || 0), 0)
85
+ : 0;
86
+ const totalSteps = fileResults.reduce((sum, f) => sum + f.stepsUsed, 0);
87
+ const totalCost = fileResults.reduce((sum, f) => sum + f.costSpentUsd, 0);
88
+ let status;
89
+ if (stopReason === 'completed') {
90
+ status = incomplete.length > 0 || failed.length > 0 ? 'incomplete' : 'completed';
91
+ }
92
+ else if (stopReason === 'cancelled') {
93
+ status = 'cancelled';
94
+ }
95
+ else if (stopReason === 'insufficient-credits' || stopReason === 'architecture-failed' || stopReason === 'architecture-incomplete') {
96
+ status = failed.length > 0 ? 'failed' : 'preflight-failed';
97
+ }
98
+ else if (stopReason === 'scan-failed') {
99
+ status = 'failed';
100
+ }
101
+ else {
102
+ status = incomplete.length > 0 || failed.length > 0 ? 'incomplete' : 'completed';
103
+ }
104
+ return {
105
+ status,
106
+ stopReason,
107
+ requestedTopN,
108
+ selectedFiles,
109
+ completed,
110
+ incomplete,
111
+ failed,
112
+ notStarted,
113
+ totals: {
114
+ selected: selectedFiles.length,
115
+ completed: completed.length,
116
+ incomplete: incomplete.length,
117
+ failed: failed.length,
118
+ notStarted: notStarted.length,
119
+ findings: totalFindings,
120
+ stepsUsed: totalSteps,
121
+ costSpentUsd: totalCost,
122
+ },
123
+ };
124
+ }
125
+ //# sourceMappingURL=agentScanBatchProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentScanBatchProtocol.js","sourceRoot":"","sources":["../../src/attack/agentScanBatchProtocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Deterministic file selection for the agent scan batch tool.
3
+ *
4
+ * Selects the top N security-relevant files from the architecture context,
5
+ * using either the recommended scan order or the important files list.
6
+ * Filters out missing, empty, binary, and oversized files before selection.
7
+ */
8
+ import type { ArchitectureContext } from '../project-map/architectureContext';
9
+ export interface SelectedBatchFile {
10
+ filePath: string;
11
+ rank: number;
12
+ role?: string;
13
+ importance?: number;
14
+ }
15
+ export interface SkippedBatchFile {
16
+ filePath: string;
17
+ reason: string;
18
+ }
19
+ export interface BatchFileSelection {
20
+ selected: SelectedBatchFile[];
21
+ skipped: SkippedBatchFile[];
22
+ }
23
+ /**
24
+ * Select the top N files for sequential agent scanning.
25
+ *
26
+ * Algorithm:
27
+ * 1. Start with recommendedScanOrder (or importantFiles if selected).
28
+ * 2. Normalize paths to forward-slash workspace-relative.
29
+ * 3. Remove duplicates.
30
+ * 4. Filter out missing, empty, binary, and oversized files.
31
+ * 5. Fill remaining slots from the other list if needed.
32
+ * 6. Clamp topN to 1..20.
33
+ * 7. Freeze the selection before returning.
34
+ */
35
+ export declare function selectAgentScanBatchFiles(workspaceRoot: string, architecture: ArchitectureContext | null, options: {
36
+ topN?: number;
37
+ fileSelection?: 'recommendedScanOrder' | 'importantFiles';
38
+ }): BatchFileSelection;