@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.
- package/dist/api/types.d.ts +7 -0
- package/dist/approval/auditLog.d.ts +1 -1
- package/dist/approval/auditLog.js +11 -3
- package/dist/approval/auditLog.js.map +1 -1
- package/dist/approval/broker.d.ts +7 -2
- package/dist/approval/broker.js +239 -110
- package/dist/approval/broker.js.map +1 -1
- package/dist/approval/policy.d.ts +10 -0
- package/dist/approval/policy.js +104 -0
- package/dist/approval/policy.js.map +1 -0
- package/dist/approval/types.d.ts +11 -2
- package/dist/approval/types.js +10 -1
- package/dist/approval/types.js.map +1 -1
- package/dist/attack/agentScanExecutor.d.ts +35 -1
- package/dist/attack/agentScanExecutor.js +405 -76
- package/dist/attack/agentScanExecutor.js.map +1 -1
- package/dist/attack/agentScanLoop.d.ts +20 -0
- package/dist/attack/agentScanLoop.js +1264 -60
- package/dist/attack/agentScanLoop.js.map +1 -1
- package/dist/attack/agentScanProtocol.d.ts +382 -6
- package/dist/attack/agentScanProtocol.js +110 -4
- package/dist/attack/agentScanProtocol.js.map +1 -1
- package/dist/attack/agentTrace.d.ts +73 -0
- package/dist/attack/agentTrace.js +228 -0
- package/dist/attack/agentTrace.js.map +1 -0
- package/dist/attack/architectureScoutExecutor.d.ts +18 -0
- package/dist/attack/architectureScoutExecutor.js +211 -0
- package/dist/attack/architectureScoutExecutor.js.map +1 -0
- package/dist/attack/architectureScoutLoop.d.ts +36 -0
- package/dist/attack/architectureScoutLoop.js +403 -0
- package/dist/attack/architectureScoutLoop.js.map +1 -0
- package/dist/attack/architectureScoutProtocol.d.ts +209 -0
- package/dist/attack/architectureScoutProtocol.js +47 -0
- package/dist/attack/architectureScoutProtocol.js.map +1 -0
- package/dist/attack/candidateStore.d.ts +95 -0
- package/dist/attack/candidateStore.js +231 -0
- package/dist/attack/candidateStore.js.map +1 -0
- package/dist/attack/evidenceLedger.d.ts +67 -0
- package/dist/attack/evidenceLedger.js +192 -0
- package/dist/attack/evidenceLedger.js.map +1 -0
- package/dist/attack/finishGate.d.ts +62 -0
- package/dist/attack/finishGate.js +209 -0
- package/dist/attack/finishGate.js.map +1 -0
- package/dist/attack/fixCodeMerge.d.ts +27 -0
- package/dist/attack/fixCodeMerge.js +42 -0
- package/dist/attack/fixCodeMerge.js.map +1 -0
- package/dist/attack/fixVerifyLoop.d.ts +55 -0
- package/dist/attack/fixVerifyLoop.js +187 -0
- package/dist/attack/fixVerifyLoop.js.map +1 -0
- package/dist/attack/investigationProfiles.d.ts +36 -0
- package/dist/attack/investigationProfiles.js +144 -0
- package/dist/attack/investigationProfiles.js.map +1 -0
- package/dist/attack/investigationState.d.ts +227 -0
- package/dist/attack/investigationState.js +666 -0
- package/dist/attack/investigationState.js.map +1 -0
- package/dist/attack/mutationOperators.d.ts +22 -0
- package/dist/attack/mutationOperators.js +170 -0
- package/dist/attack/mutationOperators.js.map +1 -0
- package/dist/attack/mutationTest.d.ts +33 -0
- package/dist/attack/mutationTest.js +110 -0
- package/dist/attack/mutationTest.js.map +1 -0
- package/dist/attack/proofGate.d.ts +20 -0
- package/dist/attack/proofGate.js +104 -0
- package/dist/attack/proofGate.js.map +1 -0
- package/dist/attack/proofTypes.d.ts +57 -0
- package/dist/attack/proofTypes.js +32 -0
- package/dist/attack/proofTypes.js.map +1 -0
- package/dist/attack/protocolValidator.d.ts +50 -0
- package/dist/attack/protocolValidator.js +427 -0
- package/dist/attack/protocolValidator.js.map +1 -0
- package/dist/attack/qualityMetrics.d.ts +133 -0
- package/dist/attack/qualityMetrics.js +226 -0
- package/dist/attack/qualityMetrics.js.map +1 -0
- package/dist/attack/scanScheduler.d.ts +52 -0
- package/dist/attack/scanScheduler.js +265 -0
- package/dist/attack/scanScheduler.js.map +1 -0
- package/dist/attack/scanState.d.ts +58 -0
- package/dist/attack/scanState.js +102 -0
- package/dist/attack/scanState.js.map +1 -0
- package/dist/attack/searchIntent.d.ts +16 -0
- package/dist/attack/searchIntent.js +57 -0
- package/dist/attack/searchIntent.js.map +1 -0
- package/dist/attack/verifyLoop.d.ts +43 -0
- package/dist/attack/verifyLoop.js +329 -15
- package/dist/attack/verifyLoop.js.map +1 -1
- package/dist/attack/workItem.d.ts +57 -0
- package/dist/attack/workItem.js +225 -0
- package/dist/attack/workItem.js.map +1 -0
- package/dist/audit/findingReviewQueue.d.ts +109 -0
- package/dist/audit/findingReviewQueue.js +335 -0
- package/dist/audit/findingReviewQueue.js.map +1 -0
- package/dist/audit/scanAuditLog.d.ts +160 -0
- package/dist/audit/scanAuditLog.js +404 -0
- package/dist/audit/scanAuditLog.js.map +1 -0
- package/dist/dependency/dependencyChecker.js +35 -9
- package/dist/dependency/dependencyChecker.js.map +1 -1
- package/dist/dependency/exploitPriority.d.ts +33 -0
- package/dist/dependency/exploitPriority.js +78 -0
- package/dist/dependency/exploitPriority.js.map +1 -0
- package/dist/dependency/finding.d.ts +16 -0
- package/dist/dependency/osvClient.js +2 -0
- package/dist/dependency/osvClient.js.map +1 -1
- package/dist/dependency/types.d.ts +12 -1
- package/dist/mcp/server.js +13 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.js +127 -6
- package/dist/mcp/tools.js.map +1 -1
- package/dist/project-map/agentMemory.d.ts +83 -1
- package/dist/project-map/agentMemory.js +197 -7
- package/dist/project-map/agentMemory.js.map +1 -1
- package/dist/project-map/architectureContext.d.ts +202 -0
- package/dist/project-map/architectureContext.js +421 -0
- package/dist/project-map/architectureContext.js.map +1 -0
- package/dist/project-map/blastRadius.d.ts +54 -0
- package/dist/project-map/blastRadius.js +196 -0
- package/dist/project-map/blastRadius.js.map +1 -0
- package/dist/project-map/callGraphExtractor.d.ts +13 -0
- package/dist/project-map/callGraphExtractor.js +222 -0
- package/dist/project-map/callGraphExtractor.js.map +1 -0
- package/dist/project-map/capabilityRegistry.d.ts +46 -0
- package/dist/project-map/capabilityRegistry.js +91 -0
- package/dist/project-map/capabilityRegistry.js.map +1 -0
- package/dist/project-map/findTests.d.ts +29 -0
- package/dist/project-map/findTests.js +236 -0
- package/dist/project-map/findTests.js.map +1 -0
- package/dist/project-map/handlerInventory.d.ts +112 -0
- package/dist/project-map/handlerInventory.js +184 -0
- package/dist/project-map/handlerInventory.js.map +1 -0
- package/dist/project-map/implementationResolver.d.ts +43 -0
- package/dist/project-map/implementationResolver.js +217 -0
- package/dist/project-map/implementationResolver.js.map +1 -0
- package/dist/project-map/mapContext.d.ts +6 -1
- package/dist/project-map/mapContext.js +1 -0
- package/dist/project-map/mapContext.js.map +1 -1
- package/dist/project-map/scanCache.d.ts +57 -3
- package/dist/project-map/scanCache.js +61 -2
- package/dist/project-map/scanCache.js.map +1 -1
- package/dist/project-map/symbolIndex.d.ts +39 -0
- package/dist/project-map/symbolIndex.js +385 -0
- package/dist/project-map/symbolIndex.js.map +1 -0
- package/dist/tooling/agentEvalScoring.d.ts +77 -0
- package/dist/tooling/agentEvalScoring.js +140 -0
- package/dist/tooling/agentEvalScoring.js.map +1 -0
- package/dist/tooling/agentRegression.d.ts +53 -0
- package/dist/tooling/agentRegression.js +99 -0
- package/dist/tooling/agentRegression.js.map +1 -0
- package/dist/tools/agentScan.d.ts +69 -0
- package/dist/tools/agentScan.js +702 -43
- package/dist/tools/agentScan.js.map +1 -1
- package/dist/tools/findingReviewTools.d.ts +22 -0
- package/dist/tools/findingReviewTools.js +121 -0
- package/dist/tools/findingReviewTools.js.map +1 -0
- package/dist/tools/fix.js +1 -1
- package/dist/tools/fix.js.map +1 -1
- package/dist/tools/map.js +191 -1
- package/dist/tools/map.js.map +1 -1
- package/dist/tools/runTests.d.ts +2 -0
- package/dist/tools/runTests.js +29 -0
- package/dist/tools/runTests.js.map +1 -0
- package/dist/utils/effectMock.d.ts +1 -0
- package/dist/utils/effectMock.js +162 -0
- package/dist/utils/effectMock.js.map +1 -0
- package/dist/utils/gitContext.d.ts +26 -0
- package/dist/utils/gitContext.js +317 -0
- package/dist/utils/gitContext.js.map +1 -0
- package/dist/utils/localTestRunner.d.ts +57 -2
- package/dist/utils/localTestRunner.js +122 -101
- package/dist/utils/localTestRunner.js.map +1 -1
- package/dist/utils/runtimeDetect.d.ts +12 -2
- package/dist/utils/runtimeDetect.js +247 -10
- package/dist/utils/runtimeDetect.js.map +1 -1
- package/dist/utils/securityConfig.d.ts +17 -0
- package/dist/utils/securityConfig.js +192 -0
- package/dist/utils/securityConfig.js.map +1 -0
- package/dist/utils/testCommandPolicy.d.ts +36 -0
- package/dist/utils/testCommandPolicy.js +252 -0
- package/dist/utils/testCommandPolicy.js.map +1 -0
- package/dist/utils/testRunner.d.ts +56 -0
- package/dist/utils/testRunner.js +246 -0
- package/dist/utils/testRunner.js.map +1 -0
- package/dist/utils/testSafety.d.ts +40 -2
- package/dist/utils/testSafety.js +205 -26
- package/dist/utils/testSafety.js.map +1 -1
- package/dist/utils/verificationSandbox.d.ts +113 -0
- package/dist/utils/verificationSandbox.js +656 -0
- package/dist/utils/verificationSandbox.js.map +1 -0
- 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"}
|
package/dist/approval/types.d.ts
CHANGED
|
@@ -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:
|
|
29
|
+
reason: AuditReason;
|
|
22
30
|
durationMs: number;
|
|
23
31
|
}
|
|
24
32
|
export declare function hashOperation(tool: string, ...parts: unknown[]): string;
|
|
25
|
-
export declare function
|
|
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;
|
package/dist/approval/types.js
CHANGED
|
@@ -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
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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>;
|