@securecode-ai/mcp 0.5.5 → 0.5.7

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 (186) hide show
  1. package/README.md +52 -12
  2. package/dist/api/types.d.ts +7 -0
  3. package/dist/approval/auditLog.d.ts +1 -1
  4. package/dist/approval/auditLog.js +11 -3
  5. package/dist/approval/auditLog.js.map +1 -1
  6. package/dist/approval/broker.d.ts +7 -2
  7. package/dist/approval/broker.js +239 -110
  8. package/dist/approval/broker.js.map +1 -1
  9. package/dist/approval/policy.d.ts +10 -0
  10. package/dist/approval/policy.js +104 -0
  11. package/dist/approval/policy.js.map +1 -0
  12. package/dist/approval/types.d.ts +11 -2
  13. package/dist/approval/types.js +10 -1
  14. package/dist/approval/types.js.map +1 -1
  15. package/dist/attack/agentScanExecutor.d.ts +35 -1
  16. package/dist/attack/agentScanExecutor.js +405 -76
  17. package/dist/attack/agentScanExecutor.js.map +1 -1
  18. package/dist/attack/agentScanLoop.d.ts +20 -0
  19. package/dist/attack/agentScanLoop.js +1264 -60
  20. package/dist/attack/agentScanLoop.js.map +1 -1
  21. package/dist/attack/agentScanProtocol.d.ts +382 -6
  22. package/dist/attack/agentScanProtocol.js +110 -4
  23. package/dist/attack/agentScanProtocol.js.map +1 -1
  24. package/dist/attack/agentTrace.d.ts +73 -0
  25. package/dist/attack/agentTrace.js +228 -0
  26. package/dist/attack/agentTrace.js.map +1 -0
  27. package/dist/attack/architectureScoutExecutor.d.ts +18 -0
  28. package/dist/attack/architectureScoutExecutor.js +211 -0
  29. package/dist/attack/architectureScoutExecutor.js.map +1 -0
  30. package/dist/attack/architectureScoutLoop.d.ts +36 -0
  31. package/dist/attack/architectureScoutLoop.js +403 -0
  32. package/dist/attack/architectureScoutLoop.js.map +1 -0
  33. package/dist/attack/architectureScoutProtocol.d.ts +209 -0
  34. package/dist/attack/architectureScoutProtocol.js +47 -0
  35. package/dist/attack/architectureScoutProtocol.js.map +1 -0
  36. package/dist/attack/candidateStore.d.ts +95 -0
  37. package/dist/attack/candidateStore.js +231 -0
  38. package/dist/attack/candidateStore.js.map +1 -0
  39. package/dist/attack/evidenceLedger.d.ts +67 -0
  40. package/dist/attack/evidenceLedger.js +192 -0
  41. package/dist/attack/evidenceLedger.js.map +1 -0
  42. package/dist/attack/finishGate.d.ts +62 -0
  43. package/dist/attack/finishGate.js +209 -0
  44. package/dist/attack/finishGate.js.map +1 -0
  45. package/dist/attack/fixCodeMerge.d.ts +27 -0
  46. package/dist/attack/fixCodeMerge.js +42 -0
  47. package/dist/attack/fixCodeMerge.js.map +1 -0
  48. package/dist/attack/fixVerifyLoop.d.ts +55 -0
  49. package/dist/attack/fixVerifyLoop.js +187 -0
  50. package/dist/attack/fixVerifyLoop.js.map +1 -0
  51. package/dist/attack/investigationProfiles.d.ts +36 -0
  52. package/dist/attack/investigationProfiles.js +144 -0
  53. package/dist/attack/investigationProfiles.js.map +1 -0
  54. package/dist/attack/investigationState.d.ts +227 -0
  55. package/dist/attack/investigationState.js +666 -0
  56. package/dist/attack/investigationState.js.map +1 -0
  57. package/dist/attack/mutationOperators.d.ts +22 -0
  58. package/dist/attack/mutationOperators.js +170 -0
  59. package/dist/attack/mutationOperators.js.map +1 -0
  60. package/dist/attack/mutationTest.d.ts +33 -0
  61. package/dist/attack/mutationTest.js +110 -0
  62. package/dist/attack/mutationTest.js.map +1 -0
  63. package/dist/attack/proofGate.d.ts +20 -0
  64. package/dist/attack/proofGate.js +104 -0
  65. package/dist/attack/proofGate.js.map +1 -0
  66. package/dist/attack/proofTypes.d.ts +57 -0
  67. package/dist/attack/proofTypes.js +32 -0
  68. package/dist/attack/proofTypes.js.map +1 -0
  69. package/dist/attack/protocolValidator.d.ts +50 -0
  70. package/dist/attack/protocolValidator.js +427 -0
  71. package/dist/attack/protocolValidator.js.map +1 -0
  72. package/dist/attack/qualityMetrics.d.ts +133 -0
  73. package/dist/attack/qualityMetrics.js +226 -0
  74. package/dist/attack/qualityMetrics.js.map +1 -0
  75. package/dist/attack/scanScheduler.d.ts +52 -0
  76. package/dist/attack/scanScheduler.js +265 -0
  77. package/dist/attack/scanScheduler.js.map +1 -0
  78. package/dist/attack/scanState.d.ts +58 -0
  79. package/dist/attack/scanState.js +102 -0
  80. package/dist/attack/scanState.js.map +1 -0
  81. package/dist/attack/searchIntent.d.ts +16 -0
  82. package/dist/attack/searchIntent.js +57 -0
  83. package/dist/attack/searchIntent.js.map +1 -0
  84. package/dist/attack/verifyLoop.d.ts +43 -0
  85. package/dist/attack/verifyLoop.js +314 -14
  86. package/dist/attack/verifyLoop.js.map +1 -1
  87. package/dist/attack/workItem.d.ts +57 -0
  88. package/dist/attack/workItem.js +225 -0
  89. package/dist/attack/workItem.js.map +1 -0
  90. package/dist/audit/findingReviewQueue.d.ts +109 -0
  91. package/dist/audit/findingReviewQueue.js +335 -0
  92. package/dist/audit/findingReviewQueue.js.map +1 -0
  93. package/dist/audit/scanAuditLog.d.ts +160 -0
  94. package/dist/audit/scanAuditLog.js +404 -0
  95. package/dist/audit/scanAuditLog.js.map +1 -0
  96. package/dist/dependency/dependencyChecker.js +35 -9
  97. package/dist/dependency/dependencyChecker.js.map +1 -1
  98. package/dist/dependency/exploitPriority.d.ts +33 -0
  99. package/dist/dependency/exploitPriority.js +78 -0
  100. package/dist/dependency/exploitPriority.js.map +1 -0
  101. package/dist/dependency/finding.d.ts +16 -0
  102. package/dist/dependency/osvClient.js +2 -0
  103. package/dist/dependency/osvClient.js.map +1 -1
  104. package/dist/dependency/types.d.ts +12 -1
  105. package/dist/mcp/server.js +13 -2
  106. package/dist/mcp/server.js.map +1 -1
  107. package/dist/mcp/tools.d.ts +1 -0
  108. package/dist/mcp/tools.js +127 -6
  109. package/dist/mcp/tools.js.map +1 -1
  110. package/dist/project-map/agentMemory.d.ts +83 -1
  111. package/dist/project-map/agentMemory.js +197 -7
  112. package/dist/project-map/agentMemory.js.map +1 -1
  113. package/dist/project-map/architectureContext.d.ts +202 -0
  114. package/dist/project-map/architectureContext.js +421 -0
  115. package/dist/project-map/architectureContext.js.map +1 -0
  116. package/dist/project-map/blastRadius.d.ts +54 -0
  117. package/dist/project-map/blastRadius.js +196 -0
  118. package/dist/project-map/blastRadius.js.map +1 -0
  119. package/dist/project-map/callGraphExtractor.d.ts +13 -0
  120. package/dist/project-map/callGraphExtractor.js +222 -0
  121. package/dist/project-map/callGraphExtractor.js.map +1 -0
  122. package/dist/project-map/capabilityRegistry.d.ts +46 -0
  123. package/dist/project-map/capabilityRegistry.js +91 -0
  124. package/dist/project-map/capabilityRegistry.js.map +1 -0
  125. package/dist/project-map/findTests.d.ts +29 -0
  126. package/dist/project-map/findTests.js +236 -0
  127. package/dist/project-map/findTests.js.map +1 -0
  128. package/dist/project-map/handlerInventory.d.ts +112 -0
  129. package/dist/project-map/handlerInventory.js +184 -0
  130. package/dist/project-map/handlerInventory.js.map +1 -0
  131. package/dist/project-map/implementationResolver.d.ts +43 -0
  132. package/dist/project-map/implementationResolver.js +217 -0
  133. package/dist/project-map/implementationResolver.js.map +1 -0
  134. package/dist/project-map/mapContext.d.ts +6 -1
  135. package/dist/project-map/mapContext.js +1 -0
  136. package/dist/project-map/mapContext.js.map +1 -1
  137. package/dist/project-map/scanCache.d.ts +57 -3
  138. package/dist/project-map/scanCache.js +61 -2
  139. package/dist/project-map/scanCache.js.map +1 -1
  140. package/dist/project-map/symbolIndex.d.ts +39 -0
  141. package/dist/project-map/symbolIndex.js +385 -0
  142. package/dist/project-map/symbolIndex.js.map +1 -0
  143. package/dist/tooling/agentEvalScoring.d.ts +77 -0
  144. package/dist/tooling/agentEvalScoring.js +140 -0
  145. package/dist/tooling/agentEvalScoring.js.map +1 -0
  146. package/dist/tooling/agentRegression.d.ts +53 -0
  147. package/dist/tooling/agentRegression.js +99 -0
  148. package/dist/tooling/agentRegression.js.map +1 -0
  149. package/dist/tools/agentScan.d.ts +69 -0
  150. package/dist/tools/agentScan.js +702 -43
  151. package/dist/tools/agentScan.js.map +1 -1
  152. package/dist/tools/findingReviewTools.d.ts +22 -0
  153. package/dist/tools/findingReviewTools.js +121 -0
  154. package/dist/tools/findingReviewTools.js.map +1 -0
  155. package/dist/tools/fix.js +1 -1
  156. package/dist/tools/fix.js.map +1 -1
  157. package/dist/tools/map.js +191 -1
  158. package/dist/tools/map.js.map +1 -1
  159. package/dist/tools/runTests.d.ts +2 -0
  160. package/dist/tools/runTests.js +29 -0
  161. package/dist/tools/runTests.js.map +1 -0
  162. package/dist/utils/effectMock.d.ts +1 -0
  163. package/dist/utils/effectMock.js +162 -0
  164. package/dist/utils/effectMock.js.map +1 -0
  165. package/dist/utils/gitContext.d.ts +26 -0
  166. package/dist/utils/gitContext.js +317 -0
  167. package/dist/utils/gitContext.js.map +1 -0
  168. package/dist/utils/localTestRunner.d.ts +57 -2
  169. package/dist/utils/localTestRunner.js +122 -115
  170. package/dist/utils/localTestRunner.js.map +1 -1
  171. package/dist/utils/securityConfig.d.ts +17 -0
  172. package/dist/utils/securityConfig.js +192 -0
  173. package/dist/utils/securityConfig.js.map +1 -0
  174. package/dist/utils/testCommandPolicy.d.ts +36 -0
  175. package/dist/utils/testCommandPolicy.js +252 -0
  176. package/dist/utils/testCommandPolicy.js.map +1 -0
  177. package/dist/utils/testRunner.d.ts +56 -0
  178. package/dist/utils/testRunner.js +246 -0
  179. package/dist/utils/testRunner.js.map +1 -0
  180. package/dist/utils/testSafety.d.ts +40 -2
  181. package/dist/utils/testSafety.js +205 -26
  182. package/dist/utils/testSafety.js.map +1 -1
  183. package/dist/utils/verificationSandbox.d.ts +113 -0
  184. package/dist/utils/verificationSandbox.js +656 -0
  185. package/dist/utils/verificationSandbox.js.map +1 -0
  186. package/package.json +1 -1
@@ -6,13 +6,119 @@
6
6
  * Types are duplicated (not shared) between the API and MCP repos.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.AGENT_SCAN_DEFAULTS = void 0;
9
+ exports.FIX_VERIFY_DEFAULTS = exports.VerifyBudgetTracker = exports.VERIFY_DEFAULTS = exports.AGENT_SCAN_SUPPORTED_ACTIONS = exports.AGENT_SCAN_PROTOCOL_VERSION = exports.AGENT_SCAN_DEFAULTS = void 0;
10
+ exports.defaultClientCapabilities = defaultClientCapabilities;
11
+ exports.defaultVerifyBudget = defaultVerifyBudget;
12
+ exports.defaultFixVerifyBudget = defaultFixVerifyBudget;
10
13
  exports.AGENT_SCAN_DEFAULTS = {
11
- maxSteps: 30,
12
- costCapUsd: 0.50,
13
- wallClockMs: 300_000,
14
+ initialSteps: 40,
15
+ extensionSize: 10,
16
+ hardMaxSteps: 80,
17
+ maxSteps: 80,
18
+ costCapUsd: 1.20,
19
+ wallClockMs: 720_000,
14
20
  perStepEstimateUsd: 0.08,
15
21
  creditsPerRun: 5,
16
22
  dailyRunLimit: 20,
23
+ blockedReadRecoveryLimit: 5,
17
24
  };
25
+ // ── Protocol versioning + capability negotiation ─────────────────────────────
26
+ //
27
+ // When the API adds a new agent action, old MCPs that don't know about it
28
+ // would crash trying to execute it. Capability negotiation lets the API
29
+ // filter the LLM's action enum to only include actions the connected MCP
30
+ // actually supports, preventing the mismatch.
31
+ //
32
+ // PROTOCOL_VERSION is bumped when the wire contract changes in a way that
33
+ // is not backward-compatible (e.g., a required field is added). Adding a
34
+ // new optional action type only requires adding it to SUPPORTED_ACTIONS
35
+ // and bumping the MCP version — the API filters its schema accordingly.
36
+ exports.AGENT_SCAN_PROTOCOL_VERSION = 5;
37
+ exports.AGENT_SCAN_SUPPORTED_ACTIONS = [
38
+ 'read_file', 'search_code', 'trace_flow', 'trace_flow_cross_file',
39
+ 'check_guard', 'check_policy', 'get_endpoints', 'list_imports',
40
+ 'list_files', 'call_graph', 'git_blame', 'git_history', 'git_diff',
41
+ 'check_dependencies', 'read_config', 'find_definition', 'find_references', 'find_tests', 'run_tests',
42
+ 'finish',
43
+ ];
44
+ function defaultClientCapabilities() {
45
+ return {
46
+ protocolVersion: exports.AGENT_SCAN_PROTOCOL_VERSION,
47
+ supportedActions: exports.AGENT_SCAN_SUPPORTED_ACTIONS,
48
+ };
49
+ }
50
+ exports.VERIFY_DEFAULTS = {
51
+ maxFindings: 10,
52
+ maxRoundsPerFinding: 12,
53
+ maxLlmCalls: 60, // 10 findings × 12 rounds × 2 calls = 240 max; default to ~25%
54
+ maxWallClockMs: 10 * 60_000, // 10 minutes
55
+ costCapUsd: 0.80,
56
+ };
57
+ function defaultVerifyBudget(overrides) {
58
+ return {
59
+ maxFindings: overrides?.maxFindings ?? exports.VERIFY_DEFAULTS.maxFindings,
60
+ maxRoundsPerFinding: overrides?.maxRoundsPerFinding ?? exports.VERIFY_DEFAULTS.maxRoundsPerFinding,
61
+ maxLlmCalls: overrides?.maxLlmCalls ?? exports.VERIFY_DEFAULTS.maxLlmCalls,
62
+ maxWallClockMs: overrides?.maxWallClockMs ?? exports.VERIFY_DEFAULTS.maxWallClockMs,
63
+ costCapUsd: overrides?.costCapUsd ?? exports.VERIFY_DEFAULTS.costCapUsd,
64
+ };
65
+ }
66
+ /** Mutable tracker used by the verify loop to enforce a VerifyBudget. */
67
+ class VerifyBudgetTracker {
68
+ findingsAttempted = 0;
69
+ roundsUsed = 0;
70
+ llmCallsUsed = 0;
71
+ costSpentUsd = 0;
72
+ startedAtMs = Date.now();
73
+ budget;
74
+ constructor(budget) {
75
+ this.budget = budget;
76
+ }
77
+ get wallClockElapsedMs() { return Date.now() - this.startedAtMs; }
78
+ canAttemptFinding() {
79
+ if (this.findingsAttempted >= this.budget.maxFindings)
80
+ return false;
81
+ if (this.llmCallsUsed >= this.budget.maxLlmCalls)
82
+ return false;
83
+ if (this.wallClockElapsedMs >= this.budget.maxWallClockMs)
84
+ return false;
85
+ if (this.costSpentUsd >= this.budget.costCapUsd)
86
+ return false;
87
+ return true;
88
+ }
89
+ canAttemptRound() {
90
+ if (this.llmCallsUsed + 2 > this.budget.maxLlmCalls)
91
+ return false; // need generate + analyze
92
+ if (this.wallClockElapsedMs >= this.budget.maxWallClockMs)
93
+ return false;
94
+ if (this.costSpentUsd >= this.budget.costCapUsd)
95
+ return false;
96
+ return true;
97
+ }
98
+ /** Remaining wall-clock in ms; floored at 1000 to avoid zero-timeout spawns. */
99
+ remainingWallClockMs() {
100
+ return Math.max(1000, this.budget.maxWallClockMs - this.wallClockElapsedMs);
101
+ }
102
+ recordLlmCall(costUsd) {
103
+ this.llmCallsUsed += 1;
104
+ this.costSpentUsd += costUsd;
105
+ }
106
+ }
107
+ exports.VerifyBudgetTracker = VerifyBudgetTracker;
108
+ exports.FIX_VERIFY_DEFAULTS = {
109
+ maxFindings: 1,
110
+ maxRoundsPerFinding: 3,
111
+ maxLlmCalls: 6,
112
+ maxWallClockMs: 120_000,
113
+ costCapUsd: 0.20,
114
+ };
115
+ function defaultFixVerifyBudget(overrides) {
116
+ return {
117
+ maxFindings: overrides?.maxFindings ?? exports.FIX_VERIFY_DEFAULTS.maxFindings,
118
+ maxRoundsPerFinding: overrides?.maxRoundsPerFinding ?? exports.FIX_VERIFY_DEFAULTS.maxRoundsPerFinding,
119
+ maxLlmCalls: overrides?.maxLlmCalls ?? exports.FIX_VERIFY_DEFAULTS.maxLlmCalls,
120
+ maxWallClockMs: overrides?.maxWallClockMs ?? exports.FIX_VERIFY_DEFAULTS.maxWallClockMs,
121
+ costCapUsd: overrides?.costCapUsd ?? exports.FIX_VERIFY_DEFAULTS.costCapUsd,
122
+ };
123
+ }
18
124
  //# sourceMappingURL=agentScanProtocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agentScanProtocol.js","sourceRoot":"","sources":["../../src/attack/agentScanProtocol.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,mBAAmB,GAAG;IAC/B,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,OAAO;IACpB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;CACX,CAAC"}
1
+ {"version":3,"file":"agentScanProtocol.js","sourceRoot":"","sources":["../../src/attack/agentScanProtocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Agent trace — structured per-step event logging for agent scan runs.
3
+ *
4
+ * Every tool call, LLM call, blocked action, and verify round is recorded
5
+ * as a structured event correlated by runId + stepIndex. Events are stored
6
+ * locally in `.securecode/agent-runs/<runId>/events.jsonl` (one JSON per
7
+ * line) for replay and debugging.
8
+ *
9
+ * Privacy: local tool observations and source code NEVER leave the machine.
10
+ * The API logs metadata only (model, tokens, cost, latency, action type).
11
+ *
12
+ * Retention: 7 days or 20 runs per workspace, whichever is less.
13
+ */
14
+ export type AgentEventType = 'run_started' | 'step_requested' | 'action_selected' | 'tool_completed' | 'tool_blocked' | 'model_retry' | 'critique_completed' | 'verify_round' | 'finding_finalized' | 'run_completed';
15
+ export interface AgentTraceEvent {
16
+ timestamp: string;
17
+ runId: string;
18
+ stepIndex: number;
19
+ eventType: AgentEventType;
20
+ /** Action type selected by the LLM (action_selected, tool_completed, tool_blocked). */
21
+ actionType?: string;
22
+ /** Tool observation (tool_completed only) — redacted + truncated. */
23
+ observation?: string;
24
+ /** Blocked reason (tool_blocked only). */
25
+ blockedReason?: string;
26
+ /** LLM metadata (step_requested, action_selected, model_retry). */
27
+ model?: string;
28
+ provider?: string;
29
+ tokens?: number;
30
+ costUsd?: number;
31
+ latencyMs?: number;
32
+ fallbackFired?: boolean;
33
+ /** Verify round metadata (verify_round). */
34
+ verifyRound?: number;
35
+ verifyVerdict?: string;
36
+ /** Finding metadata (finding_finalized). */
37
+ findingType?: string;
38
+ findingLine?: number;
39
+ findingConfidence?: number;
40
+ findingProven?: string;
41
+ findingEvidenceLevel?: string;
42
+ /** Run status (run_started, run_completed). */
43
+ runStatus?: string;
44
+ /** Error message (any event type). */
45
+ error?: string;
46
+ }
47
+ export declare class AgentTraceLogger {
48
+ private workspaceRoot;
49
+ private runId;
50
+ private stepIndex;
51
+ private events;
52
+ constructor(workspaceRoot: string, runId: string);
53
+ log(event: Omit<AgentTraceEvent, 'timestamp' | 'runId' | 'stepIndex'>): void;
54
+ nextStep(): void;
55
+ logRunStarted(): void;
56
+ logStepRequested(model?: string, tokens?: number, costUsd?: number, latencyMs?: number): void;
57
+ logActionSelected(actionType: string, model?: string, fallbackFired?: boolean): void;
58
+ logToolCompleted(actionType: string, observation: string, latencyMs?: number): void;
59
+ logToolBlocked(actionType: string, reason: string): void;
60
+ logModelRetry(error: string): void;
61
+ logCritiqueCompleted(verdict: string, issues: number): void;
62
+ logVerifyRound(round: number, verdict: string): void;
63
+ logFindingFinalized(type: string, line: number, confidence: number, proven: string, evidenceLevel?: string): void;
64
+ logRunCompleted(status: string): void;
65
+ getEvents(): AgentTraceEvent[];
66
+ }
67
+ export declare function readTraceEvents(workspaceRoot: string, runId: string): AgentTraceEvent[];
68
+ export declare function listRecentRuns(workspaceRoot: string): {
69
+ runId: string;
70
+ createdAt: string;
71
+ eventCount: number;
72
+ }[];
73
+ export declare function formatTraceForReplay(events: AgentTraceEvent[]): string;
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * Agent trace — structured per-step event logging for agent scan runs.
4
+ *
5
+ * Every tool call, LLM call, blocked action, and verify round is recorded
6
+ * as a structured event correlated by runId + stepIndex. Events are stored
7
+ * locally in `.securecode/agent-runs/<runId>/events.jsonl` (one JSON per
8
+ * line) for replay and debugging.
9
+ *
10
+ * Privacy: local tool observations and source code NEVER leave the machine.
11
+ * The API logs metadata only (model, tokens, cost, latency, action type).
12
+ *
13
+ * Retention: 7 days or 20 runs per workspace, whichever is less.
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.AgentTraceLogger = void 0;
50
+ exports.readTraceEvents = readTraceEvents;
51
+ exports.listRecentRuns = listRecentRuns;
52
+ exports.formatTraceForReplay = formatTraceForReplay;
53
+ const fs = __importStar(require("fs"));
54
+ const path = __importStar(require("path"));
55
+ const RUNS_DIR = '.securecode';
56
+ const MAX_RUN_AGE_MS = 7 * 24 * 60 * 60 * 1000;
57
+ const MAX_RUNS_PER_WORKSPACE = 20;
58
+ function eventsFilePath(workspaceRoot, runId) {
59
+ return path.join(workspaceRoot, RUNS_DIR, 'agent-runs', runId, 'events.jsonl');
60
+ }
61
+ function ensureRunDir(workspaceRoot, runId) {
62
+ const dir = path.dirname(eventsFilePath(workspaceRoot, runId));
63
+ if (!fs.existsSync(dir))
64
+ fs.mkdirSync(dir, { recursive: true });
65
+ return dir;
66
+ }
67
+ class AgentTraceLogger {
68
+ workspaceRoot;
69
+ runId;
70
+ stepIndex = 0;
71
+ events = [];
72
+ constructor(workspaceRoot, runId) {
73
+ this.workspaceRoot = workspaceRoot;
74
+ this.runId = runId;
75
+ ensureRunDir(workspaceRoot, runId);
76
+ }
77
+ log(event) {
78
+ const fullEvent = {
79
+ timestamp: new Date().toISOString(),
80
+ runId: this.runId,
81
+ stepIndex: this.stepIndex,
82
+ ...event,
83
+ };
84
+ this.events.push(fullEvent);
85
+ try {
86
+ fs.appendFileSync(eventsFilePath(this.workspaceRoot, this.runId), JSON.stringify(fullEvent) + '\n', 'utf8');
87
+ }
88
+ catch { /* best-effort — tracing must never break the scan */ }
89
+ }
90
+ nextStep() {
91
+ this.stepIndex++;
92
+ }
93
+ logRunStarted() {
94
+ this.log({ eventType: 'run_started', runStatus: 'started' });
95
+ }
96
+ logStepRequested(model, tokens, costUsd, latencyMs) {
97
+ this.log({ eventType: 'step_requested', model, tokens, costUsd, latencyMs });
98
+ }
99
+ logActionSelected(actionType, model, fallbackFired) {
100
+ this.log({ eventType: 'action_selected', actionType, model, fallbackFired });
101
+ }
102
+ logToolCompleted(actionType, observation, latencyMs) {
103
+ this.log({ eventType: 'tool_completed', actionType, observation: observation.slice(0, 2000), latencyMs });
104
+ }
105
+ logToolBlocked(actionType, reason) {
106
+ this.log({ eventType: 'tool_blocked', actionType, blockedReason: reason });
107
+ }
108
+ logModelRetry(error) {
109
+ this.log({ eventType: 'model_retry', error });
110
+ }
111
+ logCritiqueCompleted(verdict, issues) {
112
+ this.log({ eventType: 'critique_completed', error: `${verdict} (${issues} issues)` });
113
+ }
114
+ logVerifyRound(round, verdict) {
115
+ this.log({ eventType: 'verify_round', verifyRound: round, verifyVerdict: verdict });
116
+ }
117
+ logFindingFinalized(type, line, confidence, proven, evidenceLevel) {
118
+ this.log({
119
+ eventType: 'finding_finalized',
120
+ findingType: type, findingLine: line, findingConfidence: confidence,
121
+ findingProven: proven, findingEvidenceLevel: evidenceLevel,
122
+ });
123
+ }
124
+ logRunCompleted(status) {
125
+ this.log({ eventType: 'run_completed', runStatus: status });
126
+ }
127
+ getEvents() {
128
+ return [...this.events];
129
+ }
130
+ }
131
+ exports.AgentTraceLogger = AgentTraceLogger;
132
+ function readTraceEvents(workspaceRoot, runId) {
133
+ const filePath = eventsFilePath(workspaceRoot, runId);
134
+ try {
135
+ const content = fs.readFileSync(filePath, 'utf8');
136
+ return content
137
+ .split('\n')
138
+ .filter(Boolean)
139
+ .map(line => JSON.parse(line));
140
+ }
141
+ catch {
142
+ return [];
143
+ }
144
+ }
145
+ function listRecentRuns(workspaceRoot) {
146
+ const runsDir = path.join(workspaceRoot, RUNS_DIR, 'agent-runs');
147
+ if (!fs.existsSync(runsDir))
148
+ return [];
149
+ const entries = [];
150
+ const now = Date.now();
151
+ for (const dir of fs.readdirSync(runsDir)) {
152
+ const filePath = path.join(runsDir, dir, 'events.jsonl');
153
+ if (!fs.existsSync(filePath))
154
+ continue;
155
+ const stat = fs.statSync(filePath);
156
+ const ageMs = now - stat.mtimeMs;
157
+ if (ageMs > MAX_RUN_AGE_MS) {
158
+ try {
159
+ fs.rmSync(path.join(runsDir, dir), { recursive: true, force: true });
160
+ }
161
+ catch { }
162
+ continue;
163
+ }
164
+ const lineCount = fs.readFileSync(filePath, 'utf8').split('\n').filter(Boolean).length;
165
+ entries.push({
166
+ runId: dir,
167
+ createdAt: new Date(stat.mtimeMs).toISOString(),
168
+ eventCount: lineCount,
169
+ });
170
+ }
171
+ entries.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
172
+ if (entries.length > MAX_RUNS_PER_WORKSPACE) {
173
+ for (const e of entries.slice(MAX_RUNS_PER_WORKSPACE)) {
174
+ try {
175
+ fs.rmSync(path.join(runsDir, e.runId), { recursive: true, force: true });
176
+ }
177
+ catch { }
178
+ }
179
+ }
180
+ return entries.slice(0, MAX_RUNS_PER_WORKSPACE);
181
+ }
182
+ function formatTraceForReplay(events) {
183
+ if (events.length === 0)
184
+ return 'No events recorded.';
185
+ const lines = [`Agent run replay (${events.length} events):`];
186
+ let currentStep = -1;
187
+ for (const e of events) {
188
+ if (e.stepIndex !== currentStep) {
189
+ currentStep = e.stepIndex;
190
+ lines.push('');
191
+ lines.push(`── Step ${currentStep} ──`);
192
+ }
193
+ switch (e.eventType) {
194
+ case 'run_started':
195
+ lines.push(` [run_started] run started`);
196
+ break;
197
+ case 'step_requested':
198
+ lines.push(` [step_requested] model=${e.model || '?'} tokens=${e.tokens || 0} cost=$${(e.costUsd || 0).toFixed(4)} ${e.latencyMs || 0}ms`);
199
+ break;
200
+ case 'action_selected':
201
+ lines.push(` [action_selected] ${e.actionType} (model=${e.model || '?'}${e.fallbackFired ? ' FALLBACK' : ''})`);
202
+ break;
203
+ case 'tool_completed':
204
+ lines.push(` [tool_completed] ${e.actionType} → ${(e.observation || '').slice(0, 100)}...`);
205
+ break;
206
+ case 'tool_blocked':
207
+ lines.push(` [tool_blocked] ${e.actionType} — ${e.blockedReason}`);
208
+ break;
209
+ case 'model_retry':
210
+ lines.push(` [model_retry] ${e.error}`);
211
+ break;
212
+ case 'critique_completed':
213
+ lines.push(` [critique_completed] ${e.error}`);
214
+ break;
215
+ case 'verify_round':
216
+ lines.push(` [verify_round] round ${e.verifyRound} → ${e.verifyVerdict}`);
217
+ break;
218
+ case 'finding_finalized':
219
+ lines.push(` [finding_finalized] ${e.findingType} L${e.findingLine} conf=${e.findingConfidence} proven=${e.findingProven} evidence=${e.findingEvidenceLevel || '?'}`);
220
+ break;
221
+ case 'run_completed':
222
+ lines.push(` [run_completed] status=${e.runStatus}`);
223
+ break;
224
+ }
225
+ }
226
+ return lines.join('\n');
227
+ }
228
+ //# sourceMappingURL=agentTrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTrace.js","sourceRoot":"","sources":["../../src/attack/agentTrace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Architecture scout executor — dispatches each scout action to the right
3
+ * tool and returns a redacted, truncated observation string.
4
+ *
5
+ * This is a SUBSET of the agent-scan executor: only the
6
+ * architecture-relevant tools (read_file, search_code, list_files,
7
+ * list_imports, get_endpoints, call_graph, read_config, check_dependencies,
8
+ * find_definition, find_references). Vulnerability-confirmation tools
9
+ * (trace_flow, check_guard, check_policy, git_*, find_tests, run_tests)
10
+ * are NOT available — the scout surveys architecture, it does not confirm
11
+ * vulnerabilities.
12
+ *
13
+ * All tools run locally (no API round-trip — the scout has no equivalent
14
+ * of the agent-scan check_policy that calls back to the API).
15
+ */
16
+ import type { ServerContext } from '../mcp/types';
17
+ import type { ArchitectureScoutAction } from './architectureScoutProtocol';
18
+ export declare function executeScoutAction(action: ArchitectureScoutAction, ctx: ServerContext): Promise<string>;