@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
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOOL_POLICIES = void 0;
4
+ exports.getToolPolicy = getToolPolicy;
5
+ exports.validateAllToolsHavePolicies = validateAllToolsHavePolicies;
6
+ exports.TOOL_POLICIES = {
7
+ 'securecode.scan': {
8
+ name: 'securecode.scan',
9
+ category: 'read-only',
10
+ requiresApproval: false,
11
+ },
12
+ 'securecode.map': {
13
+ name: 'securecode.map',
14
+ category: 'read-only',
15
+ requiresApproval: false,
16
+ },
17
+ 'securecode.scan-dependencies': {
18
+ name: 'securecode.scan-dependencies',
19
+ category: 'read-only',
20
+ requiresApproval: false,
21
+ },
22
+ 'securecode.scan-batch': {
23
+ name: 'securecode.scan-batch',
24
+ category: 'read-only',
25
+ requiresApproval: false,
26
+ },
27
+ 'securecode.scan-secrets': {
28
+ name: 'securecode.scan-secrets',
29
+ category: 'read-only',
30
+ requiresApproval: false,
31
+ },
32
+ 'securecode.agent-scan': {
33
+ name: 'securecode.agent-scan',
34
+ category: 'read-only',
35
+ requiresApproval: false,
36
+ approvalNote: 'Agent scan investigation is read-only. Fix generation within agent-scan requires its own approval prompt.',
37
+ },
38
+ 'securecode.record-false-positive': {
39
+ name: 'securecode.record-false-positive',
40
+ category: 'read-only',
41
+ requiresApproval: false,
42
+ },
43
+ 'securecode.get-agent-memory': {
44
+ name: 'securecode.get-agent-memory',
45
+ category: 'read-only',
46
+ requiresApproval: false,
47
+ },
48
+ 'securecode.clear-agent-memory': {
49
+ name: 'securecode.clear-agent-memory',
50
+ category: 'read-only',
51
+ requiresApproval: false,
52
+ },
53
+ 'securecode.add-known-fact': {
54
+ name: 'securecode.add-known-fact',
55
+ category: 'read-only',
56
+ requiresApproval: false,
57
+ },
58
+ 'securecode.review-findings': {
59
+ name: 'securecode.review-findings',
60
+ category: 'read-only',
61
+ requiresApproval: false,
62
+ },
63
+ 'securecode.decide-finding': {
64
+ name: 'securecode.decide-finding',
65
+ category: 'read-only',
66
+ requiresApproval: false,
67
+ },
68
+ 'securecode.clear-finding-reviews': {
69
+ name: 'securecode.clear-finding-reviews',
70
+ category: 'read-only',
71
+ requiresApproval: false,
72
+ },
73
+ 'securecode.fix': {
74
+ name: 'securecode.fix',
75
+ category: 'paid-generation',
76
+ requiresApproval: true,
77
+ approvalNote: 'Fix generation calls /fix (consumes credits) and returns a patch. Approval required before the API call.',
78
+ },
79
+ 'securecode.run-tests': {
80
+ name: 'securecode.run-tests',
81
+ category: 'paid-generation',
82
+ requiresApproval: true,
83
+ approvalNote: 'Test execution runs code in a sandbox. Approval required before execution.',
84
+ },
85
+ 'securecode.attack': {
86
+ name: 'securecode.attack',
87
+ category: 'paid-generation',
88
+ requiresApproval: true,
89
+ approvalNote: 'Attack sends HTTP probes to a localhost server. Approval required. Currently disabled via SECURECODE_ATTACK_ENABLED.',
90
+ },
91
+ };
92
+ function getToolPolicy(toolName) {
93
+ return exports.TOOL_POLICIES[toolName];
94
+ }
95
+ function validateAllToolsHavePolicies(registeredTools) {
96
+ const missing = [];
97
+ for (const name of registeredTools) {
98
+ if (!exports.TOOL_POLICIES[name]) {
99
+ missing.push(name);
100
+ }
101
+ }
102
+ return missing;
103
+ }
104
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +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,3 +1,4 @@
1
+ export type OperationCategory = 'read-only' | 'sandboxed-verification' | 'paid-generation' | 'workspace-mutation';
1
2
  export interface ApprovalRequest {
2
3
  id: string;
3
4
  tool: string;
@@ -5,22 +6,30 @@ export interface ApprovalRequest {
5
6
  operationHash: string;
6
7
  createdAt: number;
7
8
  expiresAt: number;
9
+ decisionToken: string;
10
+ category: OperationCategory;
11
+ workspaceId: string | null;
8
12
  }
9
13
  export interface ApprovalResult {
10
14
  approved: boolean;
11
15
  reason: string;
12
16
  requestId: string;
13
17
  duration: number;
18
+ category?: OperationCategory;
14
19
  }
20
+ export type AuditReason = 'approved' | 'denied' | 'timeout' | 'cancelled' | 'expired' | 'invalid-token' | 'replayed' | 'shutdown';
15
21
  export interface AuditEntry {
16
22
  timestamp: string;
17
23
  requestId: string;
18
24
  tool: string;
19
25
  operationHash: string;
26
+ category: OperationCategory | 'unknown';
27
+ workspaceId: string | null;
20
28
  approved: boolean;
21
- reason: string;
29
+ reason: AuditReason;
22
30
  durationMs: number;
23
31
  }
24
32
  export declare function hashOperation(tool: string, ...parts: unknown[]): string;
25
- export declare function createApprovalRequest(tool: string, summary: string, operationParts: unknown[], timeoutMs?: number): ApprovalRequest;
33
+ export declare function workspaceIdFromRoot(workspaceRoot: string | null): string | null;
34
+ export declare function createApprovalRequest(tool: string, summary: string, operationParts: unknown[], timeoutMs?: number, category?: OperationCategory, workspaceRoot?: string | null): ApprovalRequest;
26
35
  export declare function isExpired(req: ApprovalRequest, now?: number): boolean;
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.hashOperation = hashOperation;
37
+ exports.workspaceIdFromRoot = workspaceIdFromRoot;
37
38
  exports.createApprovalRequest = createApprovalRequest;
38
39
  exports.isExpired = isExpired;
39
40
  const crypto = __importStar(require("crypto"));
@@ -41,7 +42,12 @@ function hashOperation(tool, ...parts) {
41
42
  const data = JSON.stringify({ tool, parts });
42
43
  return crypto.createHash('sha256').update(data).digest('hex').substring(0, 16);
43
44
  }
44
- function createApprovalRequest(tool, summary, operationParts, timeoutMs = 60_000) {
45
+ function workspaceIdFromRoot(workspaceRoot) {
46
+ if (!workspaceRoot)
47
+ return null;
48
+ return crypto.createHash('sha256').update(workspaceRoot).digest('hex').substring(0, 16);
49
+ }
50
+ function createApprovalRequest(tool, summary, operationParts, timeoutMs = 60_000, category = 'paid-generation', workspaceRoot = null) {
45
51
  const now = Date.now();
46
52
  return {
47
53
  id: crypto.randomUUID(),
@@ -50,6 +56,9 @@ function createApprovalRequest(tool, summary, operationParts, timeoutMs = 60_000
50
56
  operationHash: hashOperation(tool, ...operationParts),
51
57
  createdAt: now,
52
58
  expiresAt: now + timeoutMs,
59
+ decisionToken: crypto.randomBytes(16).toString('hex'),
60
+ category,
61
+ workspaceId: workspaceIdFromRoot(workspaceRoot),
53
62
  };
54
63
  }
55
64
  function isExpired(req, now = Date.now()) {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/approval/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,sCAGC;AAED,sDAeC;AAED,8BAEC;AApDD,+CAAiC;AA4BjC,SAAgB,aAAa,CAAC,IAAY,EAAE,GAAG,KAAgB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,qBAAqB,CACjC,IAAY,EACZ,OAAe,EACf,cAAyB,EACzB,YAAoB,MAAM;IAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACH,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,IAAI;QACJ,OAAO;QACP,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC;QACrD,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG,GAAG,SAAS;KAC7B,CAAC;AACN,CAAC;AAED,SAAgB,SAAS,CAAC,GAAoB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACpE,OAAO,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/approval/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,sCAGC;AAED,kDAGC;AAED,sDAoBC;AAED,8BAEC;AApFD,+CAAiC;AAkDjC,SAAgB,aAAa,CAAC,IAAY,EAAE,GAAG,KAAgB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,mBAAmB,CAAC,aAA4B;IAC5D,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,SAAgB,qBAAqB,CACjC,IAAY,EACZ,OAAe,EACf,cAAyB,EACzB,YAAoB,MAAM,EAC1B,WAA8B,iBAAiB,EAC/C,gBAA+B,IAAI;IAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACH,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,IAAI;QACJ,OAAO;QACP,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC;QACrD,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG,GAAG,SAAS;QAC1B,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrD,QAAQ;QACR,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC;KAClD,CAAC;AACN,CAAC;AAED,SAAgB,SAAS,CAAC,GAAoB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACpE,OAAO,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;AAC/B,CAAC"}
@@ -8,5 +8,39 @@
8
8
  */
9
9
  import { ApiClient } from '../api/client';
10
10
  import type { ServerContext } from '../mcp/types';
11
- import type { AgentScanAction, AgentScanTarget } from './agentScanProtocol';
11
+ import type { AgentScanAction, AgentScanTarget, ReadFileObservation, StructuredFlowResult } from './agentScanProtocol';
12
+ export declare const MAX_OBSERVATION_CHARS = 16000;
13
+ export declare const LARGE_FILE_THRESHOLD = 300;
14
+ export declare function truncate(text: string): string;
15
+ export declare function redact(text: string): string;
16
+ export declare function extractFunctionMap(content: string, relPath: string): Promise<string | null>;
17
+ export interface FunctionBoundary {
18
+ name: string;
19
+ startLine: number;
20
+ endLine: number;
21
+ kind: string;
22
+ }
23
+ export declare function extractFunctionBoundaries(content: string, relPath: string): Promise<FunctionBoundary[] | null>;
24
+ /**
25
+ * Execute a read_file action and return structured metadata alongside the
26
+ * redacted observation string.
27
+ *
28
+ * The loop uses `actualStart..actualEnd` to record coverage — this is the
29
+ * range the executor actually delivered, which may differ from the requested
30
+ * range in three ways:
31
+ *
32
+ * 1. Requested range clamped to file bounds (e.g., endLine=2000 on a 500-line
33
+ * file → actualEnd=500).
34
+ * 2. Large file (> LARGE_FILE_THRESHOLD) with no startLine/endLine → the
35
+ * executor returns a function map, not raw content. `truncated === true`
36
+ * and actualStart/actualEnd are 0 (no content lines delivered).
37
+ * 3. Small file with no startLine/endLine → full content returned,
38
+ * actualStart=1, actualEnd=totalLines, truncated=false.
39
+ */
40
+ export declare function executeReadFileAction(action: AgentScanAction, ctx: ServerContext): Promise<ReadFileObservation>;
12
41
  export declare function executeAction(action: AgentScanAction, ctx: ServerContext, runId: string, client: ApiClient, target: AgentScanTarget): Promise<string>;
42
+ export interface FlowActionResult {
43
+ observation: string;
44
+ flowResult: StructuredFlowResult;
45
+ }
46
+ export declare function executeFlowAction(action: AgentScanAction, ctx: ServerContext, runId: string, client: ApiClient, target: AgentScanTarget): Promise<FlowActionResult>;