@securecode-ai/mcp 0.5.4 → 0.5.6

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 (188) hide show
  1. package/dist/api/types.d.ts +7 -0
  2. package/dist/approval/auditLog.d.ts +1 -1
  3. package/dist/approval/auditLog.js +11 -3
  4. package/dist/approval/auditLog.js.map +1 -1
  5. package/dist/approval/broker.d.ts +7 -2
  6. package/dist/approval/broker.js +239 -110
  7. package/dist/approval/broker.js.map +1 -1
  8. package/dist/approval/policy.d.ts +10 -0
  9. package/dist/approval/policy.js +104 -0
  10. package/dist/approval/policy.js.map +1 -0
  11. package/dist/approval/types.d.ts +11 -2
  12. package/dist/approval/types.js +10 -1
  13. package/dist/approval/types.js.map +1 -1
  14. package/dist/attack/agentScanExecutor.d.ts +35 -1
  15. package/dist/attack/agentScanExecutor.js +405 -76
  16. package/dist/attack/agentScanExecutor.js.map +1 -1
  17. package/dist/attack/agentScanLoop.d.ts +20 -0
  18. package/dist/attack/agentScanLoop.js +1264 -60
  19. package/dist/attack/agentScanLoop.js.map +1 -1
  20. package/dist/attack/agentScanProtocol.d.ts +382 -6
  21. package/dist/attack/agentScanProtocol.js +110 -4
  22. package/dist/attack/agentScanProtocol.js.map +1 -1
  23. package/dist/attack/agentTrace.d.ts +73 -0
  24. package/dist/attack/agentTrace.js +228 -0
  25. package/dist/attack/agentTrace.js.map +1 -0
  26. package/dist/attack/architectureScoutExecutor.d.ts +18 -0
  27. package/dist/attack/architectureScoutExecutor.js +211 -0
  28. package/dist/attack/architectureScoutExecutor.js.map +1 -0
  29. package/dist/attack/architectureScoutLoop.d.ts +36 -0
  30. package/dist/attack/architectureScoutLoop.js +403 -0
  31. package/dist/attack/architectureScoutLoop.js.map +1 -0
  32. package/dist/attack/architectureScoutProtocol.d.ts +209 -0
  33. package/dist/attack/architectureScoutProtocol.js +47 -0
  34. package/dist/attack/architectureScoutProtocol.js.map +1 -0
  35. package/dist/attack/candidateStore.d.ts +95 -0
  36. package/dist/attack/candidateStore.js +231 -0
  37. package/dist/attack/candidateStore.js.map +1 -0
  38. package/dist/attack/evidenceLedger.d.ts +67 -0
  39. package/dist/attack/evidenceLedger.js +192 -0
  40. package/dist/attack/evidenceLedger.js.map +1 -0
  41. package/dist/attack/finishGate.d.ts +62 -0
  42. package/dist/attack/finishGate.js +209 -0
  43. package/dist/attack/finishGate.js.map +1 -0
  44. package/dist/attack/fixCodeMerge.d.ts +27 -0
  45. package/dist/attack/fixCodeMerge.js +42 -0
  46. package/dist/attack/fixCodeMerge.js.map +1 -0
  47. package/dist/attack/fixVerifyLoop.d.ts +55 -0
  48. package/dist/attack/fixVerifyLoop.js +187 -0
  49. package/dist/attack/fixVerifyLoop.js.map +1 -0
  50. package/dist/attack/investigationProfiles.d.ts +36 -0
  51. package/dist/attack/investigationProfiles.js +144 -0
  52. package/dist/attack/investigationProfiles.js.map +1 -0
  53. package/dist/attack/investigationState.d.ts +227 -0
  54. package/dist/attack/investigationState.js +666 -0
  55. package/dist/attack/investigationState.js.map +1 -0
  56. package/dist/attack/mutationOperators.d.ts +22 -0
  57. package/dist/attack/mutationOperators.js +170 -0
  58. package/dist/attack/mutationOperators.js.map +1 -0
  59. package/dist/attack/mutationTest.d.ts +33 -0
  60. package/dist/attack/mutationTest.js +110 -0
  61. package/dist/attack/mutationTest.js.map +1 -0
  62. package/dist/attack/proofGate.d.ts +20 -0
  63. package/dist/attack/proofGate.js +104 -0
  64. package/dist/attack/proofGate.js.map +1 -0
  65. package/dist/attack/proofTypes.d.ts +57 -0
  66. package/dist/attack/proofTypes.js +32 -0
  67. package/dist/attack/proofTypes.js.map +1 -0
  68. package/dist/attack/protocolValidator.d.ts +50 -0
  69. package/dist/attack/protocolValidator.js +427 -0
  70. package/dist/attack/protocolValidator.js.map +1 -0
  71. package/dist/attack/qualityMetrics.d.ts +133 -0
  72. package/dist/attack/qualityMetrics.js +226 -0
  73. package/dist/attack/qualityMetrics.js.map +1 -0
  74. package/dist/attack/scanScheduler.d.ts +52 -0
  75. package/dist/attack/scanScheduler.js +265 -0
  76. package/dist/attack/scanScheduler.js.map +1 -0
  77. package/dist/attack/scanState.d.ts +58 -0
  78. package/dist/attack/scanState.js +102 -0
  79. package/dist/attack/scanState.js.map +1 -0
  80. package/dist/attack/searchIntent.d.ts +16 -0
  81. package/dist/attack/searchIntent.js +57 -0
  82. package/dist/attack/searchIntent.js.map +1 -0
  83. package/dist/attack/verifyLoop.d.ts +43 -0
  84. package/dist/attack/verifyLoop.js +329 -15
  85. package/dist/attack/verifyLoop.js.map +1 -1
  86. package/dist/attack/workItem.d.ts +57 -0
  87. package/dist/attack/workItem.js +225 -0
  88. package/dist/attack/workItem.js.map +1 -0
  89. package/dist/audit/findingReviewQueue.d.ts +109 -0
  90. package/dist/audit/findingReviewQueue.js +335 -0
  91. package/dist/audit/findingReviewQueue.js.map +1 -0
  92. package/dist/audit/scanAuditLog.d.ts +160 -0
  93. package/dist/audit/scanAuditLog.js +404 -0
  94. package/dist/audit/scanAuditLog.js.map +1 -0
  95. package/dist/dependency/dependencyChecker.js +35 -9
  96. package/dist/dependency/dependencyChecker.js.map +1 -1
  97. package/dist/dependency/exploitPriority.d.ts +33 -0
  98. package/dist/dependency/exploitPriority.js +78 -0
  99. package/dist/dependency/exploitPriority.js.map +1 -0
  100. package/dist/dependency/finding.d.ts +16 -0
  101. package/dist/dependency/osvClient.js +2 -0
  102. package/dist/dependency/osvClient.js.map +1 -1
  103. package/dist/dependency/types.d.ts +12 -1
  104. package/dist/mcp/server.js +13 -2
  105. package/dist/mcp/server.js.map +1 -1
  106. package/dist/mcp/tools.d.ts +1 -0
  107. package/dist/mcp/tools.js +127 -6
  108. package/dist/mcp/tools.js.map +1 -1
  109. package/dist/project-map/agentMemory.d.ts +83 -1
  110. package/dist/project-map/agentMemory.js +197 -7
  111. package/dist/project-map/agentMemory.js.map +1 -1
  112. package/dist/project-map/architectureContext.d.ts +202 -0
  113. package/dist/project-map/architectureContext.js +421 -0
  114. package/dist/project-map/architectureContext.js.map +1 -0
  115. package/dist/project-map/blastRadius.d.ts +54 -0
  116. package/dist/project-map/blastRadius.js +196 -0
  117. package/dist/project-map/blastRadius.js.map +1 -0
  118. package/dist/project-map/callGraphExtractor.d.ts +13 -0
  119. package/dist/project-map/callGraphExtractor.js +222 -0
  120. package/dist/project-map/callGraphExtractor.js.map +1 -0
  121. package/dist/project-map/capabilityRegistry.d.ts +46 -0
  122. package/dist/project-map/capabilityRegistry.js +91 -0
  123. package/dist/project-map/capabilityRegistry.js.map +1 -0
  124. package/dist/project-map/findTests.d.ts +29 -0
  125. package/dist/project-map/findTests.js +236 -0
  126. package/dist/project-map/findTests.js.map +1 -0
  127. package/dist/project-map/handlerInventory.d.ts +112 -0
  128. package/dist/project-map/handlerInventory.js +184 -0
  129. package/dist/project-map/handlerInventory.js.map +1 -0
  130. package/dist/project-map/implementationResolver.d.ts +43 -0
  131. package/dist/project-map/implementationResolver.js +217 -0
  132. package/dist/project-map/implementationResolver.js.map +1 -0
  133. package/dist/project-map/mapContext.d.ts +6 -1
  134. package/dist/project-map/mapContext.js +1 -0
  135. package/dist/project-map/mapContext.js.map +1 -1
  136. package/dist/project-map/scanCache.d.ts +57 -3
  137. package/dist/project-map/scanCache.js +61 -2
  138. package/dist/project-map/scanCache.js.map +1 -1
  139. package/dist/project-map/symbolIndex.d.ts +39 -0
  140. package/dist/project-map/symbolIndex.js +385 -0
  141. package/dist/project-map/symbolIndex.js.map +1 -0
  142. package/dist/tooling/agentEvalScoring.d.ts +77 -0
  143. package/dist/tooling/agentEvalScoring.js +140 -0
  144. package/dist/tooling/agentEvalScoring.js.map +1 -0
  145. package/dist/tooling/agentRegression.d.ts +53 -0
  146. package/dist/tooling/agentRegression.js +99 -0
  147. package/dist/tooling/agentRegression.js.map +1 -0
  148. package/dist/tools/agentScan.d.ts +69 -0
  149. package/dist/tools/agentScan.js +702 -43
  150. package/dist/tools/agentScan.js.map +1 -1
  151. package/dist/tools/findingReviewTools.d.ts +22 -0
  152. package/dist/tools/findingReviewTools.js +121 -0
  153. package/dist/tools/findingReviewTools.js.map +1 -0
  154. package/dist/tools/fix.js +1 -1
  155. package/dist/tools/fix.js.map +1 -1
  156. package/dist/tools/map.js +191 -1
  157. package/dist/tools/map.js.map +1 -1
  158. package/dist/tools/runTests.d.ts +2 -0
  159. package/dist/tools/runTests.js +29 -0
  160. package/dist/tools/runTests.js.map +1 -0
  161. package/dist/utils/effectMock.d.ts +1 -0
  162. package/dist/utils/effectMock.js +162 -0
  163. package/dist/utils/effectMock.js.map +1 -0
  164. package/dist/utils/gitContext.d.ts +26 -0
  165. package/dist/utils/gitContext.js +317 -0
  166. package/dist/utils/gitContext.js.map +1 -0
  167. package/dist/utils/localTestRunner.d.ts +57 -2
  168. package/dist/utils/localTestRunner.js +122 -101
  169. package/dist/utils/localTestRunner.js.map +1 -1
  170. package/dist/utils/runtimeDetect.d.ts +12 -2
  171. package/dist/utils/runtimeDetect.js +247 -10
  172. package/dist/utils/runtimeDetect.js.map +1 -1
  173. package/dist/utils/securityConfig.d.ts +17 -0
  174. package/dist/utils/securityConfig.js +192 -0
  175. package/dist/utils/securityConfig.js.map +1 -0
  176. package/dist/utils/testCommandPolicy.d.ts +36 -0
  177. package/dist/utils/testCommandPolicy.js +252 -0
  178. package/dist/utils/testCommandPolicy.js.map +1 -0
  179. package/dist/utils/testRunner.d.ts +56 -0
  180. package/dist/utils/testRunner.js +246 -0
  181. package/dist/utils/testRunner.js.map +1 -0
  182. package/dist/utils/testSafety.d.ts +40 -2
  183. package/dist/utils/testSafety.js +205 -26
  184. package/dist/utils/testSafety.js.map +1 -1
  185. package/dist/utils/verificationSandbox.d.ts +113 -0
  186. package/dist/utils/verificationSandbox.js +656 -0
  187. package/dist/utils/verificationSandbox.js.map +1 -0
  188. 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":";AAAA;;;;;GAKG;;;AAkEH,8DAKC;AA0nBD,kDAQC;AAoED,wDAQC;AAnxBY,QAAA,mBAAmB,GAAG;IAC/B,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,OAAO;IACpB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,wBAAwB,EAAE,CAAC;CACrB,CAAC;AAEX,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AAE3D,QAAA,2BAA2B,GAAG,CAAC,CAAC;AAEhC,QAAA,4BAA4B,GAA0B;IAC/D,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB;IACjE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc;IAC9D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU;IAClE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW;IACpG,QAAQ;CACX,CAAC;AA+BF,SAAgB,yBAAyB;IACrC,OAAO;QACH,eAAe,EAAE,mCAA2B;QAC5C,gBAAgB,EAAE,oCAA4B;KACjD,CAAC;AACN,CAAC;AAknBY,QAAA,eAAe,GAAG;IAC3B,WAAW,EAAE,EAAE;IACf,mBAAmB,EAAE,EAAE;IACvB,WAAW,EAAE,EAAE,EAAW,+DAA+D;IACzF,cAAc,EAAE,EAAE,GAAG,MAAM,EAAE,aAAa;IAC1C,UAAU,EAAE,IAAI;CACV,CAAC;AAEX,SAAgB,mBAAmB,CAAC,SAAiC;IACjE,OAAO;QACH,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,uBAAe,CAAC,WAAW;QAClE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,IAAI,uBAAe,CAAC,mBAAmB;QAC1F,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,uBAAe,CAAC,WAAW;QAClE,cAAc,EAAE,SAAS,EAAE,cAAc,IAAI,uBAAe,CAAC,cAAc;QAC3E,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,uBAAe,CAAC,UAAU;KAClE,CAAC;AACN,CAAC;AAED,yEAAyE;AACzE,MAAa,mBAAmB;IAC5B,iBAAiB,GAAG,CAAC,CAAC;IACtB,UAAU,GAAG,CAAC,CAAC;IACf,YAAY,GAAG,CAAC,CAAC;IACjB,YAAY,GAAG,CAAC,CAAC;IACR,WAAW,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,CAAe;IAE9B,YAAY,MAAoB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,kBAAkB,KAAa,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1E,iBAAiB;QACb,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QACpE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QACxE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,CAAC,0BAA0B;QAC7F,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QACxE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gFAAgF;IAChF,oBAAoB;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChF,CAAC;IAED,aAAa,CAAC,OAAe;QACzB,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC;IACjC,CAAC;CACJ;AAtCD,kDAsCC;AAmBY,QAAA,mBAAmB,GAAG;IAC/B,WAAW,EAAE,CAAC;IACd,mBAAmB,EAAE,CAAC;IACtB,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,OAAO;IACvB,UAAU,EAAE,IAAI;CACV,CAAC;AAEX,SAAgB,sBAAsB,CAAC,SAAiC;IACpE,OAAO;QACH,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,2BAAmB,CAAC,WAAW;QACtE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,IAAI,2BAAmB,CAAC,mBAAmB;QAC9F,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,2BAAmB,CAAC,WAAW;QACtE,cAAc,EAAE,SAAS,EAAE,cAAc,IAAI,2BAAmB,CAAC,cAAc;QAC/E,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,2BAAmB,CAAC,UAAU;KACtE,CAAC;AACN,CAAC"}
@@ -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>;