@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.
- package/README.md +52 -12
- 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 +314 -14
- 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 -115
- package/dist/utils/localTestRunner.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
|
@@ -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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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;;;
|
|
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":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoJH,0CAWC;AAED,wCAmCC;AAED,oDAgDC;AApPD,uCAAyB;AACzB,2CAA6B;AA+C7B,MAAM,QAAQ,GAAG,aAAa,CAAC;AAC/B,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/C,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,SAAS,cAAc,CAAC,aAAqB,EAAE,KAAa;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,aAAqB,EAAE,KAAa;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAa,gBAAgB;IACjB,aAAa,CAAS;IACtB,KAAK,CAAS;IACd,SAAS,GAAW,CAAC,CAAC;IACtB,MAAM,GAAsB,EAAE,CAAC;IAEvC,YAAY,aAAqB,EAAE,KAAa;QAC5C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,KAAiE;QACjE,MAAM,SAAS,GAAoB;YAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,KAAK;SACX,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC;YACD,EAAE,CAAC,cAAc,CACb,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,EAC9C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,EAChC,MAAM,CACT,CAAC;QACN,CAAC;QAAC,MAAM,CAAC,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,aAAa;QACT,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,gBAAgB,CAAC,KAAc,EAAE,MAAe,EAAE,OAAgB,EAAE,SAAkB;QAClF,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,iBAAiB,CAAC,UAAkB,EAAE,KAAc,EAAE,aAAuB;QACzE,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,gBAAgB,CAAC,UAAkB,EAAE,WAAmB,EAAE,SAAkB;QACxE,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,cAAc,CAAC,UAAkB,EAAE,MAAc;QAC7C,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,aAAa,CAAC,KAAa;QACvB,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,oBAAoB,CAAC,OAAe,EAAE,MAAc;QAChD,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,UAAU,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,OAAe;QACzC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,mBAAmB,CACf,IAAY,EAAE,IAAY,EAAE,UAAkB,EAAE,MAAc,EAAE,aAAsB;QAEtF,IAAI,CAAC,GAAG,CAAC;YACL,SAAS,EAAE,mBAAmB;YAC9B,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU;YACnE,aAAa,EAAE,MAAM,EAAE,oBAAoB,EAAE,aAAa;SAC7D,CAAC,CAAC;IACP,CAAC;IAED,eAAe,CAAC,MAAc;QAC1B,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,SAAS;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACJ;AAlFD,4CAkFC;AAED,SAAgB,eAAe,CAAC,aAAqB,EAAE,KAAa;IAChE,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,OAAO;aACT,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAAC,aAAqB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,OAAO,GAA+D,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAEvC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC;gBAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACtF,SAAS;QACb,CAAC;QAED,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,GAAG;YACV,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;YAC/C,UAAU,EAAE,SAAS;SACxB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC;gBAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QAC9F,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAyB;IAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAEtD,MAAM,KAAK,GAAa,CAAC,qBAAqB,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;IACxE,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IAErB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;YAClB,KAAK,aAAa;gBACd,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC1C,MAAM;YACV,KAAK,gBAAgB;gBACjB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,KAAK,IAAI,GAAG,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5I,MAAM;YACV,KAAK,iBAAiB;gBAClB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,WAAW,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjH,MAAM;YACV,KAAK,gBAAgB;gBACjB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7F,MAAM;YACV,KAAK,cAAc;gBACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;gBACpE,MAAM;YACV,KAAK,aAAa;gBACd,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzC,MAAM;YACV,KAAK,oBAAoB;gBACrB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChD,MAAM;YACV,KAAK,cAAc;gBACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC3E,MAAM;YACV,KAAK,mBAAmB;gBACpB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,SAAS,CAAC,CAAC,iBAAiB,WAAW,CAAC,CAAC,aAAa,aAAa,CAAC,CAAC,oBAAoB,IAAI,GAAG,EAAE,CAAC,CAAC;gBACvK,MAAM;YACV,KAAK,eAAe;gBAChB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;gBACtD,MAAM;QACd,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -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>;
|