rea-agents 3.0.0 → 3.1.0
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 +14 -16
- package/dist/application/AnalysisContextQueries.js +21 -9
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +19 -11
- package/dist/application/ArtifactInventory/policy.js +17 -0
- package/dist/application/ArtifactInventory/reader.js +1 -4
- package/dist/application/ArtifactInventory/scanCanonical.js +0 -3
- package/dist/application/ArtifactInventory/scanReader.js +7 -7
- package/dist/application/ArtifactInventory/types.js +1 -5
- package/dist/application/BinarySession.js +14 -16
- package/dist/application/BinarySessionRecords.js +31 -5
- package/dist/application/BinarySessionStatus.js +11 -5
- package/dist/application/BrowserEvidence.js +3 -5
- package/dist/application/CapabilityClientRequirements.js +26 -0
- package/dist/application/CapabilityInventory.js +134 -63
- package/dist/application/CrossVersionInventory.js +7 -6
- package/dist/application/ElectronActiveEvidence.js +55 -0
- package/dist/application/ElectronActiveObservationPort.js +1 -0
- package/dist/application/ElectronActiveObservationService.js +81 -0
- package/dist/application/EnhancedTools.js +22 -20
- package/dist/application/EvidenceBundleCommands.js +5 -1
- package/dist/application/EvidenceLedger.js +8 -1
- package/dist/application/JavaScriptReplayPermission.js +1 -1
- package/dist/application/JavaScriptReplayService.js +23 -15
- package/dist/application/ManagedRuntimeCorrelationService.js +9 -5
- package/dist/application/NodeRuntimeCharacterizationService.js +8 -9
- package/dist/application/ProcessCaptureLifecycle.js +5 -0
- package/dist/application/ProcessCli.js +2 -1
- package/dist/application/ProcessHarness.js +8 -3
- package/dist/application/ProcessNormalization.js +2 -1
- package/dist/application/ProjectPermissionStore.js +1 -0
- package/dist/application/ReferenceSourceImport.js +2 -2
- package/dist/application/SetupClientConfiguration.js +6 -1
- package/dist/application/WindowsCapabilities.js +5 -4
- package/dist/artifacts/ArtifactProvider.js +8 -10
- package/dist/artifacts/SafeOutputTree.js +7 -8
- package/dist/browser/CdpCaptureStorageFingerprints.js +10 -7
- package/dist/browser/CdpElectronInspection.js +3 -1
- package/dist/browser/JavaScriptRuntimeScope.js +5 -0
- package/dist/browser/PlaywrightElectronActiveActions.js +324 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +294 -0
- package/dist/browser/PlaywrightScenarioBrowser.js +4 -4
- package/dist/browser/PlaywrightScenarioSession.js +4 -4
- package/dist/browser/SensitiveTextCapture.js +1 -1
- package/dist/browser/V8InspectorCaptureProjection.js +1 -0
- package/dist/browser/V8InspectorProvider.js +3 -3
- package/dist/catalogIdentity.js +12 -6
- package/dist/cli/managedCommands.js +1 -1
- package/dist/cliApplicationCommands.js +2 -2
- package/dist/cliBrowserAdvancedCommands.js +11 -5
- package/dist/cliBrowserCommands.js +14 -7
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliElectronCommands.js +46 -4
- package/dist/cliJavaScriptRuntimeCommands.js +14 -6
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliPolicyCommands.js +1 -0
- package/dist/config/browserScenario.js +77 -0
- package/dist/config/electronAutomation.js +35 -0
- package/dist/config/environment.js +6 -0
- package/dist/config/javascriptReplay.js +41 -0
- package/dist/config/managedRuntime.js +25 -0
- package/dist/config/parseConfig.js +56 -200
- package/dist/config/parsers.js +10 -1
- package/dist/config/passiveObservation.js +157 -0
- package/dist/config/processCapture.js +47 -0
- package/dist/contracts/applicationToolContracts.js +2 -5
- package/dist/contracts/applicationWorkflowInputContracts.js +86 -96
- package/dist/contracts/artifactToolContracts.js +27 -34
- package/dist/contracts/browserToolContracts.js +2 -2
- package/dist/contracts/electronToolContracts.js +30 -1
- package/dist/contracts/enhancedInputs.js +13 -29
- package/dist/contracts/functionWorkflowToolContracts.js +2 -3
- package/dist/contracts/managedToolContracts.js +4 -9
- package/dist/contracts/managedWorkflowExamples.js +12 -9
- package/dist/contracts/managedWorkflowToolContracts.js +30 -27
- package/dist/contracts/nativeToolContracts.js +2 -3
- package/dist/contracts/sessionToolSchemas.js +61 -0
- package/dist/contracts/toolContractExamples.js +1 -0
- package/dist/contracts/toolContractHelpers.js +23 -0
- package/dist/contracts/toolContracts.js +5 -77
- package/dist/contracts/toolEffects.js +15 -0
- package/dist/contracts/toolOutputSchemaGroups.js +17 -2
- package/dist/contracts/toolOutputSchemaPrimitives.js +76 -26
- package/dist/contracts/toolSchemaMetadata.js +128 -0
- package/dist/doctorRuntime.js +1 -1
- package/dist/domain/androidApplication.js +2 -0
- package/dist/domain/appleApplication.js +2 -0
- package/dist/domain/binaryTarget.js +7 -5
- package/dist/domain/binaryTargetTypes.js +1 -0
- package/dist/domain/browserCaptureComparison.js +21 -69
- package/dist/domain/browserObservation.js +22 -9
- package/dist/domain/bytecodeProvider.js +33 -35
- package/dist/domain/callPath.js +3 -2
- package/dist/domain/conformanceReplay.js +3 -3
- package/dist/domain/conformanceTrustGate.js +151 -16
- package/dist/domain/customProtocolCapture.js +3 -3
- package/dist/domain/electronActiveObservation.js +277 -0
- package/dist/domain/electronObservation.js +15 -11
- package/dist/domain/electronStaticAnalysisValues.js +4 -1
- package/dist/domain/eventProcessTree.js +82 -79
- package/dist/domain/functionComparisonNormalization.js +15 -8
- package/dist/domain/functionDossierEvidence.js +9 -4
- package/dist/domain/hopperValues.js +68 -71
- package/dist/domain/inputIssueProjection.js +4 -1
- package/dist/domain/investigationWorkspace.js +16 -15
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +2 -2
- package/dist/domain/javascriptReplay.js +79 -63
- package/dist/domain/javascriptRuntimeObservation.js +1 -0
- package/dist/domain/javascriptRuntimeReconciliationActive.js +89 -0
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +11 -10
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +57 -49
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +5 -1
- package/dist/domain/javascriptRuntimeReconciliationResult.js +21 -14
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +1 -1
- package/dist/domain/knownPageCoverage.js +15 -7
- package/dist/domain/nativeApiBoundary.js +15 -7
- package/dist/domain/nodeRuntimeCharacterization.js +14 -13
- package/dist/domain/processCaptureReactiveValidation.js +8 -3
- package/dist/domain/processCaptureValidation.js +7 -3
- package/dist/domain/processComparison.js +12 -7
- package/dist/domain/processObservation.js +5 -6
- package/dist/domain/processReactiveMatching.js +14 -7
- package/dist/domain/processReactiveTransition.js +9 -3
- package/dist/domain/processScenario.js +6 -3
- package/dist/domain/processTraceComparison.js +3 -2
- package/dist/domain/protocolCapture.js +8 -6
- package/dist/domain/reconstructionReadinessSchemas.js +30 -2
- package/dist/domain/referenceSourceImportParsing.js +2 -2
- package/dist/domain/replayMachineRuntime.js +5 -3
- package/dist/domain/sourceToBundleComparison.js +2 -2
- package/dist/domain/sourceToBundleComparisonSchemas.js +8 -8
- package/dist/domain/sourceToBundleSignals.js +7 -1
- package/dist/domain/staticRuntimeCorrelation.js +7 -5
- package/dist/domain/webBundleAnalysis.js +14 -14
- package/dist/domain/webCaptureDiff.js +15 -12
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +2 -3
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraClient.js +1 -1
- package/dist/ghidra/GhidraClientStartup.js +1 -1
- package/dist/ghidra/GhidraFunctionValues.js +17 -15
- package/dist/ghidra/GhidraInventoryValues.js +57 -47
- package/dist/ghidra/GhidraProvider.js +18 -10
- package/dist/ghidra/GhidraProviderCapabilities.js +5 -1
- package/dist/ghidra/GhidraSocketConnection.js +1 -1
- package/dist/ghidra/protocol.js +19 -42
- package/dist/hopper/BridgeLauncher.js +3 -1
- package/dist/hopper/HopperAnalysisProfile.js +2 -4
- package/dist/hopper/HopperCleanup.js +5 -6
- package/dist/hopper/HopperClient.js +1 -1
- package/dist/hopper/HopperProvider.js +0 -14
- package/dist/hopper/LinuxPrivateDisplayProbe.js +16 -10
- package/dist/main/reload.js +1 -6
- package/dist/main/state.js +0 -14
- package/dist/main/transport.js +30 -37
- package/dist/main.js +17 -15
- package/dist/mcpDoctor.js +2 -24
- package/dist/process/PrivateRuntimeRoot.js +17 -0
- package/dist/process/ProcessOwnership.js +64 -128
- package/dist/process/ProcessOwnershipIdentity.js +13 -0
- package/dist/process/ProcessOwnershipObservation.js +88 -0
- package/dist/process/ProcessOwnershipProcessTree.js +22 -0
- package/dist/process/ProviderDeadline.js +8 -12
- package/dist/process/WindowsAuthority.js +32 -0
- package/dist/reference/ReferenceSourceReader.js +3 -3
- package/dist/reference/ReferenceSourceReaderEntries.js +2 -2
- package/dist/replay/JavaScriptReplayWorker.js +95 -11
- package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
- package/dist/replay/LinuxJavaScriptReplayRunner.js +10 -15
- package/dist/replay/ReplayOutcome.js +26 -15
- package/dist/replay/ReplayWorkerProtocol.js +34 -29
- package/dist/server/createServer.js +158 -94
- package/dist/server/mcpClientMetadata.js +32 -0
- package/dist/server/registerApplicationTools/characterization.js +6 -13
- package/dist/server/registerApplicationTools/compareExportShapes.js +2 -7
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +2 -7
- package/dist/server/registerApplicationTools/compareVersions.js +3 -8
- package/dist/server/registerApplicationTools/controlledReplay.js +6 -11
- package/dist/server/registerApplicationTools/coverage.js +13 -19
- package/dist/server/registerApplicationTools/obligationLedger.js +1 -6
- package/dist/server/registerApplicationTools/readiness.js +1 -6
- package/dist/server/registerApplicationTools/traceFeature.js +3 -8
- package/dist/server/registerApplicationTools/traceSemantics.js +1 -6
- package/dist/server/registerArtifactComparisonTool.js +12 -16
- package/dist/server/registerBrowserScenarioTool.js +1 -6
- package/dist/server/registerBrowserTools.js +37 -79
- package/dist/server/registerBundleComparisonTool.js +10 -14
- package/dist/server/registerCloseLifecycleTool.js +6 -14
- package/dist/server/registerElectronTools.js +30 -47
- package/dist/server/registerEnhancedTools.js +114 -122
- package/dist/server/registerEvidenceTools.js +5 -9
- package/dist/server/registerFunctionComparisonTool.js +11 -15
- package/dist/server/registerInvestigationTools.js +41 -57
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +13 -27
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -9
- package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +8 -13
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +4 -9
- package/dist/server/registerOfficialTools.js +8 -9
- package/dist/server/registerProcessComparisonTool.js +19 -24
- package/dist/server/registerReplayMachineTool.js +4 -10
- package/dist/server/registerSessionRecordTools.js +69 -40
- package/dist/server/registerSessionStatusTool.js +13 -28
- package/dist/server/registerSessionTools.js +36 -52
- package/dist/server/sessionAvailabilityPolicy.js +2 -1
- package/dist/server/sessionToolPolicies.js +1 -5
- package/dist/server/toolRegistrationOptions.js +4 -192
- package/dist/server/toolResult.js +2 -18
- package/package.json +22 -14
- package/scripts/electron-active-hook-boundaries.cjs +394 -0
- package/scripts/electron-active-hook.cjs +501 -0
- package/scripts/rea.mjs +1 -11
- package/skills/reverse-engineer-anything/SKILL.md +2 -2
- package/dist/server/DynamicToolAvailability.js +0 -70
- package/dist/server/LazyToolCatalog.js +0 -134
- package/dist/server/hydrateServerTools.js +0 -191
- package/dist/server/toolInputValidation.js +0 -77
- package/scripts/package-runner-bootstrap.mjs +0 -72
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { logToolExecution } from "./toolLogging.js";
|
|
5
|
-
import { ok } from "../domain/result.js";
|
|
6
|
-
import { processScenarioSchema } from "../domain/processCapture.js";
|
|
7
|
-
import { captureProcessScenario } from "../application/ProcessHarness.js";
|
|
8
|
-
import { processCapturePermissionRequest } from "../application/ProcessCapturePermission.js";
|
|
2
|
+
import { isInputRequiredResult } from "@modelcontextprotocol/server";
|
|
3
|
+
import { getNavigationContext, inspectAddressContext, } from "../application/AnalysisContextQueries.js";
|
|
9
4
|
import { readAnalysisSnapshot } from "../application/AnalysisSnapshotFiles.js";
|
|
10
|
-
import {
|
|
11
|
-
import { DENY_EVIDENCE_FILE_POLICY, DENY_PROCESS_POLICY, } from "./sessionToolPolicies.js";
|
|
5
|
+
import { processCapturePermissionRequest } from "../application/ProcessCapturePermission.js";
|
|
12
6
|
import { createProcessCaptureEvidence } from "../application/ProcessEvidence.js";
|
|
13
|
-
import {
|
|
7
|
+
import { captureProcessScenario } from "../application/ProcessHarness.js";
|
|
8
|
+
import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js";
|
|
9
|
+
import { UnknownRegistryError } from "../domain/errors.js";
|
|
10
|
+
import { ok } from "../domain/result.js";
|
|
11
|
+
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
12
|
+
import { permissionFailure } from "./permissionFailure.js";
|
|
13
|
+
import { authorizeProcessCaptureWithElicitation, } from "./ProcessCaptureElicitation.js";
|
|
14
14
|
import { registerArtifactComparisonTool } from "./registerArtifactComparisonTool.js";
|
|
15
|
-
import { registerFunctionComparisonTool } from "./registerFunctionComparisonTool.js";
|
|
16
|
-
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
17
|
-
import { safeParseToolInput } from "./toolInputValidation.js";
|
|
18
15
|
import { registerBundleComparisonTool } from "./registerBundleComparisonTool.js";
|
|
16
|
+
import { registerCloseLifecycleTool } from "./registerCloseLifecycleTool.js";
|
|
17
|
+
import { registerFunctionComparisonTool } from "./registerFunctionComparisonTool.js";
|
|
19
18
|
import { registerInvestigationTools } from "./registerInvestigationTools.js";
|
|
20
|
-
import {
|
|
21
|
-
import { registerSessionStatusTool } from "./registerSessionStatusTool.js";
|
|
22
|
-
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
23
|
-
import { authorizeProcessCaptureWithElicitation, } from "./ProcessCaptureElicitation.js";
|
|
24
|
-
import { isInputRequiredResult } from "@modelcontextprotocol/server";
|
|
25
|
-
import { registerEvidenceTools, registerUnknownTools, } from "./registerSessionRecordTools.js";
|
|
19
|
+
import { registerProcessComparisonTool } from "./registerProcessComparisonTool.js";
|
|
26
20
|
import { registerReplayMachineTool } from "./registerReplayMachineTool.js";
|
|
21
|
+
import { registerEvidenceTools, registerUnknownTools, } from "./registerSessionRecordTools.js";
|
|
22
|
+
import { registerSessionStatusTool } from "./registerSessionStatusTool.js";
|
|
27
23
|
import { sessionAvailabilityPolicy, } from "./sessionAvailabilityPolicy.js";
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
24
|
+
import { DENY_EVIDENCE_FILE_POLICY, DENY_PROCESS_POLICY, } from "./sessionToolPolicies.js";
|
|
25
|
+
import { logToolExecution } from "./toolLogging.js";
|
|
26
|
+
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
27
|
+
import { toCallToolResult } from "./toolResult.js";
|
|
31
28
|
const recordProcessResidualUnknowns = (session, scenario, evidence, residuals) => {
|
|
32
29
|
if (scenario.unknown_registry_approved !== true)
|
|
33
30
|
return ok(null);
|
|
@@ -59,10 +56,7 @@ const recordProcessResidualUnknowns = (session, scenario, evidence, residuals) =
|
|
|
59
56
|
};
|
|
60
57
|
const registerProcessTools = ({ server, session, logger, processPolicy, captureContract, permissionAuthority, processCaptureElicitation, }) => {
|
|
61
58
|
server.registerTool(captureContract.name, toolRegistrationOptions(captureContract), async (input, context) => {
|
|
62
|
-
const
|
|
63
|
-
if (!parsedInput.ok)
|
|
64
|
-
return toCallToolResult(parsedInput, captureContract);
|
|
65
|
-
const scenario = parsedInput.value;
|
|
59
|
+
const scenario = input;
|
|
66
60
|
if (permissionAuthority !== undefined) {
|
|
67
61
|
const request = processCapturePermissionRequest(scenario);
|
|
68
62
|
const authorized = processCaptureElicitation === undefined
|
|
@@ -80,7 +74,7 @@ const registerProcessTools = ({ server, session, logger, processPolicy, captureC
|
|
|
80
74
|
total: 1,
|
|
81
75
|
message: "started",
|
|
82
76
|
});
|
|
83
|
-
const captured = await logToolExecution(logger, captureContract.name, () => captureProcessScenario(scenario, processPolicy, context.mcpReq.signal));
|
|
77
|
+
const captured = await logToolExecution(logger, captureContract.name, () => captureProcessScenario(scenario, processPolicy(), context.mcpReq.signal));
|
|
84
78
|
await progress.report({
|
|
85
79
|
phase: captureContract.name,
|
|
86
80
|
completed: 1,
|
|
@@ -114,39 +108,33 @@ const registerLifecycleTools = (registration) => {
|
|
|
114
108
|
};
|
|
115
109
|
const registerOpenLifecycleTool = ({ server, session, logger, contracts: [openContract], snapshotFilePolicy, permissionAuthority, }) => {
|
|
116
110
|
server.registerTool(openContract.name, toolRegistrationOptions(openContract), async (input, context) => {
|
|
117
|
-
const parsedInput = safeParseToolInput(openBinaryInputSchema, input, openContract.name);
|
|
118
|
-
if (!parsedInput.ok)
|
|
119
|
-
return toCallToolResult(parsedInput, openContract);
|
|
120
|
-
const parsed = parsedInput.value;
|
|
121
111
|
let snapshot;
|
|
122
|
-
if (
|
|
112
|
+
if (input.snapshot_path !== undefined) {
|
|
123
113
|
if (permissionAuthority !== undefined) {
|
|
124
114
|
const authorized = await permissionAuthority.authorize({
|
|
125
115
|
capability: "snapshot_read",
|
|
126
|
-
roots: [
|
|
116
|
+
roots: [input.snapshot_path],
|
|
127
117
|
executables: [],
|
|
128
118
|
environment_names: [],
|
|
129
119
|
network: "none",
|
|
130
120
|
mount: false,
|
|
131
|
-
operation_identity: `open_binary:snapshot:${
|
|
121
|
+
operation_identity: `open_binary:snapshot:${input.snapshot_path}`,
|
|
132
122
|
}, "read");
|
|
133
123
|
if (!authorized.ok)
|
|
134
124
|
return toCallToolResult(permissionFailure(authorized), openContract);
|
|
135
125
|
}
|
|
136
|
-
const loaded = await readAnalysisSnapshot(
|
|
126
|
+
const loaded = await readAnalysisSnapshot(input.snapshot_path, snapshotFilePolicy);
|
|
137
127
|
if (!loaded.ok)
|
|
138
128
|
return toCallToolResult(loaded, openContract);
|
|
139
129
|
snapshot = loaded.value;
|
|
140
130
|
}
|
|
141
|
-
const opened = await logToolExecution(logger, openContract.name, () => session.open(
|
|
131
|
+
const opened = await logToolExecution(logger, openContract.name, () => session.open(input.path, {
|
|
142
132
|
signal: context.mcpReq.signal,
|
|
143
|
-
...(
|
|
133
|
+
...(input.provider_id === undefined
|
|
144
134
|
? {}
|
|
145
|
-
: { providerId:
|
|
135
|
+
: { providerId: input.provider_id }),
|
|
146
136
|
...(snapshot === undefined ? {} : { snapshot }),
|
|
147
137
|
}));
|
|
148
|
-
if (opened.ok)
|
|
149
|
-
server.sendToolListChanged();
|
|
150
138
|
return opened.ok
|
|
151
139
|
? toCallToolResult({
|
|
152
140
|
ok: true,
|
|
@@ -173,27 +161,22 @@ const registerRecordAndReplayTools = (server, session, logger) => {
|
|
|
173
161
|
registerReplayMachineTool(server, logger);
|
|
174
162
|
};
|
|
175
163
|
const registerContextTools = (server, session) => {
|
|
176
|
-
const navigationContract = SESSION_TOOL_CONTRACTS[
|
|
177
|
-
const addressContract = SESSION_TOOL_CONTRACTS[
|
|
164
|
+
const navigationContract = SESSION_TOOL_CONTRACTS[21];
|
|
165
|
+
const addressContract = SESSION_TOOL_CONTRACTS[22];
|
|
178
166
|
server.registerTool(navigationContract.name, toolRegistrationOptions(navigationContract), async (input, context) => {
|
|
179
|
-
|
|
180
|
-
if (!parsed.ok)
|
|
181
|
-
return toCallToolResult(parsed, navigationContract);
|
|
182
|
-
return toCallToolResult(await getNavigationContext(session, parsed.value, context.mcpReq.signal), navigationContract);
|
|
167
|
+
return toCallToolResult(await getNavigationContext(session, input, context.mcpReq.signal), navigationContract);
|
|
183
168
|
});
|
|
184
169
|
server.registerTool(addressContract.name, toolRegistrationOptions(addressContract), async (input, context) => {
|
|
185
|
-
|
|
186
|
-
if (!parsed.ok)
|
|
187
|
-
return toCallToolResult(parsed, addressContract);
|
|
188
|
-
return toCallToolResult(await inspectAddressContext(session, parsed.value, context.mcpReq.signal), addressContract);
|
|
170
|
+
return toCallToolResult(await inspectAddressContext(session, input, context.mcpReq.signal), addressContract);
|
|
189
171
|
});
|
|
190
172
|
};
|
|
191
173
|
export const registerSessionTools = (server, session, logger, options = {}) => {
|
|
192
|
-
const processPolicy = options.processPolicy ?? DENY_PROCESS_POLICY;
|
|
174
|
+
const processPolicy = options.processPolicy ?? (() => DENY_PROCESS_POLICY);
|
|
193
175
|
const evidenceFilePolicy = options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY;
|
|
194
176
|
const analysisSnapshotFilePolicy = options.analysisSnapshotFilePolicy ?? DENY_EVIDENCE_FILE_POLICY;
|
|
195
177
|
const [openContract, closeContract, statusContract, exportContract, importContract, captureContract, compareContract, compareArtifactsContract, compareFunctionsContract, compareBundlesContract, changedBehaviorContract, callPathContract, staticRuntimeContract, reconstructionContract,] = SESSION_TOOL_CONTRACTS;
|
|
196
178
|
const snapshotContract = SESSION_TOOL_CONTRACTS[19];
|
|
179
|
+
const releaseContract = SESSION_TOOL_CONTRACTS[20];
|
|
197
180
|
registerLifecycleTools({
|
|
198
181
|
server,
|
|
199
182
|
session,
|
|
@@ -202,7 +185,7 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
|
|
|
202
185
|
snapshotFilePolicy: analysisSnapshotFilePolicy,
|
|
203
186
|
startedAt: options.startedAt ?? new Date().toISOString(),
|
|
204
187
|
availabilityPolicy: sessionAvailabilityPolicy(options.availabilityPolicy, {
|
|
205
|
-
processPolicy,
|
|
188
|
+
processPolicy: processPolicy(),
|
|
206
189
|
evidenceFilePolicy,
|
|
207
190
|
investigationInputRoots: options.investigationInputRoots ?? [],
|
|
208
191
|
}),
|
|
@@ -216,6 +199,7 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
|
|
|
216
199
|
exportContract,
|
|
217
200
|
importContract,
|
|
218
201
|
snapshotContract,
|
|
202
|
+
releaseContract,
|
|
219
203
|
filePolicy: evidenceFilePolicy,
|
|
220
204
|
...(options.permissionAuthority === undefined
|
|
221
205
|
? {}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/** Select configured availability reporting or the target-free defaults. */
|
|
2
2
|
export const sessionAvailabilityPolicy = (configured, defaults) => configured ??
|
|
3
3
|
(() => ({
|
|
4
|
-
processCaptureEnabled: defaults.processPolicy.enabled,
|
|
4
|
+
processCaptureEnabled: defaults.processPolicy.status === "enabled",
|
|
5
5
|
evidenceFileRoots: defaults.evidenceFilePolicy.roots.length,
|
|
6
6
|
investigationInputRoots: defaults.investigationInputRoots.length,
|
|
7
7
|
browserObservationEnabled: defaults.optionalFeatures?.browserObservationEnabled ?? false,
|
|
8
8
|
browserScenarioEnabled: defaults.optionalFeatures?.browserScenarioEnabled ?? false,
|
|
9
9
|
electronObservationEnabled: defaults.optionalFeatures?.electronObservationEnabled ?? false,
|
|
10
|
+
electronAutomationEnabled: defaults.optionalFeatures?.electronAutomationEnabled ?? false,
|
|
10
11
|
v8InspectorObservationEnabled: defaults.optionalFeatures?.v8InspectorObservationEnabled ?? false,
|
|
11
12
|
javascriptReplayEnabled: defaults.optionalFeatures?.javascriptReplayEnabled ?? false,
|
|
12
13
|
managedRuntimeEnabled: defaults.optionalFeatures?.managedRuntimeEnabled ?? false,
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
/** Fail-closed process policy used when operator configuration is absent. */
|
|
2
2
|
export const DENY_PROCESS_POLICY = {
|
|
3
|
-
|
|
4
|
-
executableRoots: [],
|
|
5
|
-
workingRoots: [],
|
|
6
|
-
allowedEnvironment: [],
|
|
7
|
-
allowExternalNetwork: false,
|
|
3
|
+
status: "disabled",
|
|
8
4
|
};
|
|
9
5
|
/** Fail-closed evidence filesystem policy used without approved roots. */
|
|
10
6
|
export const DENY_EVIDENCE_FILE_POLICY = {
|
|
@@ -1,197 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const ADVERTISED_OUTPUT_SCHEMAS = new WeakMap();
|
|
4
|
-
/** Project the public contract fields accepted by MCP tool registration. */
|
|
1
|
+
import { toolInputSchemaWithMetadata } from "../contracts/toolSchemaMetadata.js";
|
|
2
|
+
/** Project the canonical Zod contracts directly into SDK registration. */
|
|
5
3
|
export const toolRegistrationOptions = (contract) => ({
|
|
6
4
|
title: contract.title,
|
|
7
5
|
description: contract.description,
|
|
8
|
-
inputSchema:
|
|
9
|
-
outputSchema:
|
|
6
|
+
inputSchema: toolInputSchemaWithMetadata(contract),
|
|
7
|
+
outputSchema: contract.outputSchema,
|
|
10
8
|
annotations: contract.annotations,
|
|
11
9
|
});
|
|
12
|
-
/**
|
|
13
|
-
* Advertise the exact Zod contract while leaving validation to REA's adapter.
|
|
14
|
-
* The SDK otherwise converts validation failures to text-only JSON-RPC errors
|
|
15
|
-
* before REA can return its stable structured error envelope.
|
|
16
|
-
*/
|
|
17
|
-
const advertisedInputSchema = (contract) => ({
|
|
18
|
-
"~standard": {
|
|
19
|
-
version: 1,
|
|
20
|
-
vendor: "rea",
|
|
21
|
-
validate: (input) => ({ value: input }),
|
|
22
|
-
jsonSchema: {
|
|
23
|
-
input: () => advertisedInputJsonSchema(contract),
|
|
24
|
-
output: () => advertisedInputJsonSchema(contract),
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
});
|
|
28
|
-
const advertisedOutputSchema = (schema) => {
|
|
29
|
-
const standard = schema["~standard"];
|
|
30
|
-
const converter = standard.jsonSchema?.output;
|
|
31
|
-
if (converter === undefined)
|
|
32
|
-
throw new TypeError("Tool output schema does not expose Standard JSON Schema");
|
|
33
|
-
return {
|
|
34
|
-
"~standard": {
|
|
35
|
-
...standard,
|
|
36
|
-
jsonSchema: {
|
|
37
|
-
input: () => advertisedOutputJsonSchema(schema, converter),
|
|
38
|
-
output: () => advertisedOutputJsonSchema(schema, converter),
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
const advertisedInputJsonSchema = (contract) => cachedJsonSchema(ADVERTISED_INPUT_SCHEMAS, contract.inputSchema, () => ({
|
|
44
|
-
...describeProperties(closeObjectSchemas(inputJsonSchema(contract.inputSchema))),
|
|
45
|
-
examples: contract.examples.map(({ input }) => input),
|
|
46
|
-
}));
|
|
47
|
-
const advertisedOutputJsonSchema = (schema, converter) => cachedJsonSchema(ADVERTISED_OUTPUT_SCHEMAS, schema, () => describeRootProperties(closeObjectSchemas(converter({ target: "draft-2020-12" }))));
|
|
48
|
-
const cachedJsonSchema = (cache, schema, create) => {
|
|
49
|
-
const cached = cache.get(schema);
|
|
50
|
-
if (cached !== undefined)
|
|
51
|
-
return cached;
|
|
52
|
-
const created = create();
|
|
53
|
-
cache.set(schema, created);
|
|
54
|
-
return created;
|
|
55
|
-
};
|
|
56
|
-
const inputJsonSchema = (schema) => {
|
|
57
|
-
const converter = schema["~standard"].jsonSchema?.input;
|
|
58
|
-
if (converter === undefined)
|
|
59
|
-
throw new TypeError("Tool input schema does not expose Standard JSON Schema");
|
|
60
|
-
return converter({ target: "draft-2020-12" });
|
|
61
|
-
};
|
|
62
|
-
/** Close fixed-shape JSON Schema objects while preserving explicit maps. */
|
|
63
|
-
export const closeObjectSchemas = (value) => {
|
|
64
|
-
const closed = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, closeSchemaValue(child)]));
|
|
65
|
-
return value.type === "object" &&
|
|
66
|
-
isObject(value.properties) &&
|
|
67
|
-
value.additionalProperties === undefined
|
|
68
|
-
? { ...closed, additionalProperties: false }
|
|
69
|
-
: closed;
|
|
70
|
-
};
|
|
71
|
-
const closeSchemaValue = (value) => {
|
|
72
|
-
if (Array.isArray(value))
|
|
73
|
-
return value.map(closeSchemaValue);
|
|
74
|
-
if (!isObject(value))
|
|
75
|
-
return value;
|
|
76
|
-
return closeObjectSchemas(value);
|
|
77
|
-
};
|
|
78
|
-
const describeProperties = (value) => Object.fromEntries(Object.entries(value).map(([key, child]) => {
|
|
79
|
-
if (key !== "properties" || typeof child !== "object" || child === null)
|
|
80
|
-
return [key, describeValue(child)];
|
|
81
|
-
return [
|
|
82
|
-
key,
|
|
83
|
-
Object.fromEntries(Object.entries(child).map(([property, schema]) => [
|
|
84
|
-
property,
|
|
85
|
-
isObject(schema) && typeof schema.description !== "string"
|
|
86
|
-
? {
|
|
87
|
-
...describeProperties(schema),
|
|
88
|
-
description: fallbackPropertyDescription(property),
|
|
89
|
-
}
|
|
90
|
-
: describeValue(schema),
|
|
91
|
-
])),
|
|
92
|
-
];
|
|
93
|
-
}));
|
|
94
|
-
const describeValue = (value) => {
|
|
95
|
-
if (Array.isArray(value))
|
|
96
|
-
return value.map(describeValue);
|
|
97
|
-
return isObject(value) ? describeProperties(value) : value;
|
|
98
|
-
};
|
|
99
|
-
const describeRootProperties = (value) => {
|
|
100
|
-
const properties = value.properties;
|
|
101
|
-
if (!isObject(properties))
|
|
102
|
-
return { ...value };
|
|
103
|
-
return {
|
|
104
|
-
...value,
|
|
105
|
-
properties: Object.fromEntries(Object.entries(properties).map(([property, schema]) => [
|
|
106
|
-
property,
|
|
107
|
-
isObject(schema) && typeof schema.description !== "string"
|
|
108
|
-
? {
|
|
109
|
-
...schema,
|
|
110
|
-
description: fallbackPropertyDescription(property),
|
|
111
|
-
}
|
|
112
|
-
: schema,
|
|
113
|
-
])),
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
const PROPERTY_DESCRIPTIONS = {
|
|
117
|
-
addresses: "Ordered provider-normalized procedure addresses to analyze.",
|
|
118
|
-
approved: "Explicit operator approval to perform this operation.",
|
|
119
|
-
after: "The later or right-hand observation to compare.",
|
|
120
|
-
before: "The earlier or left-hand observation to compare.",
|
|
121
|
-
boundary_id: "Exact reconstruction boundary identifier to evaluate.",
|
|
122
|
-
case_sensitive: "Whether text matching distinguishes uppercase and lowercase.",
|
|
123
|
-
cdp_endpoint: "Approved literal loopback Chrome DevTools Protocol endpoint.",
|
|
124
|
-
comment: "Exact analyst comment text to write.",
|
|
125
|
-
comparisons: "Validated comparison Evidence records to aggregate.",
|
|
126
|
-
coverage: "Exact reconstruction-coverage commitment to verify.",
|
|
127
|
-
detail: "Requested response detail level.",
|
|
128
|
-
direction: "Direction in which to traverse or compare relationships.",
|
|
129
|
-
document: "Exact provider document or program identity.",
|
|
130
|
-
error: "Structured, caller-actionable error when the operation fails.",
|
|
131
|
-
evidence: "Evidence v2 record produced by this operation.",
|
|
132
|
-
evidence_id: "Stable identifier of the recorded Evidence v2 observation.",
|
|
133
|
-
evidence_uri: "Session resource URI for the recorded Evidence v2 observation.",
|
|
134
|
-
executable: "Approved absolute path of the executable to run.",
|
|
135
|
-
format: "Declared input artifact format.",
|
|
136
|
-
name: "Exact name used by this operation.",
|
|
137
|
-
pattern: "Text or bounded pattern used to filter matching results.",
|
|
138
|
-
phase: "Current plan or execution phase of the operation.",
|
|
139
|
-
plan: "Content-bound execution plan and its approval commitment.",
|
|
140
|
-
query: "Non-empty feature or text query to investigate.",
|
|
141
|
-
question: "Concrete unresolved question to retain for later investigation.",
|
|
142
|
-
result: "Primary structured result returned by this operation.",
|
|
143
|
-
left: "Left-hand input used for comparison or differential execution.",
|
|
144
|
-
limit: "Maximum number of results to return in this page.",
|
|
145
|
-
limits: "Bounded resource-consumption and result-size limits for this operation.",
|
|
146
|
-
mode: "Operation mode that selects the requested behavior.",
|
|
147
|
-
offset: "Zero-based index of the first result to return.",
|
|
148
|
-
overwrite: "Whether an existing destination may be replaced.",
|
|
149
|
-
path: "Local filesystem path used by this operation.",
|
|
150
|
-
provider_id: "Exact deep-analysis provider ID, or automatic selection when omitted.",
|
|
151
|
-
right: "Right-hand input used for comparison or differential execution.",
|
|
152
|
-
schema_version: "Version of this structured result schema.",
|
|
153
|
-
source_evidence: "Evidence records supporting the prepared source transformation.",
|
|
154
|
-
status: "Current lifecycle or verification status.",
|
|
155
|
-
summary: "Concise evidence-backed summary of the result.",
|
|
156
|
-
symbols: "Ordered bounded Swift symbols to demangle.",
|
|
157
|
-
target_id: "Exact authorized CDP target identifier.",
|
|
158
|
-
unknown_id: "Exact residual-unknown identifier.",
|
|
159
|
-
unknown_registry_approved: "Explicit approval to record bounded residual uncertainty in the session registry.",
|
|
160
|
-
workspace_path: "Approved local path of the persistent investigation workspace.",
|
|
161
|
-
};
|
|
162
|
-
const fallbackPropertyDescription = (property) => {
|
|
163
|
-
const explicit = PROPERTY_DESCRIPTIONS[property];
|
|
164
|
-
if (explicit !== undefined)
|
|
165
|
-
return explicit;
|
|
166
|
-
const words = property.replaceAll("_", " ");
|
|
167
|
-
if (property.endsWith("_approved"))
|
|
168
|
-
return `Explicit operator approval for ${words.slice(0, -9)}.`;
|
|
169
|
-
if (property.endsWith("_offset"))
|
|
170
|
-
return `Zero-based index of the first ${words.slice(0, -7)} to return.`;
|
|
171
|
-
if (property.endsWith("_limit"))
|
|
172
|
-
return `Maximum number of ${words.slice(0, -6)} entries to return.`;
|
|
173
|
-
if (property.startsWith("max_"))
|
|
174
|
-
return `Maximum permitted ${words.slice(4)} for this operation.`;
|
|
175
|
-
if (property.startsWith("include_"))
|
|
176
|
-
return `Whether to include ${words.slice(8)} in the result.`;
|
|
177
|
-
if (property.startsWith("expected_"))
|
|
178
|
-
return `Expected ${words.slice(9)} used to reject stale or mismatched input.`;
|
|
179
|
-
if (property.endsWith("_sha256"))
|
|
180
|
-
return `Exact SHA-256 digest of ${words.slice(0, -7)}.`;
|
|
181
|
-
if (property.endsWith("_evidence_id"))
|
|
182
|
-
return `Exact Evidence v2 identifier for the ${words.slice(0, -12)} observation.`;
|
|
183
|
-
if (property.endsWith("_evidence_ids"))
|
|
184
|
-
return `Ordered Evidence v2 identifiers for the ${words.slice(0, -13)} observations.`;
|
|
185
|
-
if (property.endsWith("_path"))
|
|
186
|
-
return `Local filesystem path for ${words.slice(0, -5)}.`;
|
|
187
|
-
if (property.endsWith("_uri"))
|
|
188
|
-
return `Canonical URI for ${words.slice(0, -4)}.`;
|
|
189
|
-
if (property.endsWith("_bytes"))
|
|
190
|
-
return `Bounded byte count for ${words.slice(0, -6)}.`;
|
|
191
|
-
if (property.endsWith("_root") || property.endsWith("_roots"))
|
|
192
|
-
return `Approved canonical filesystem ${words}.`;
|
|
193
|
-
if (property.startsWith("is_") || property.startsWith("has_"))
|
|
194
|
-
return `Whether ${words}.`;
|
|
195
|
-
return `Value for ${words}.`;
|
|
196
|
-
};
|
|
197
|
-
const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { projectAnalysisError } from "../domain/errors.js";
|
|
2
2
|
/**
|
|
3
3
|
* Translate an application result into MCP text content.
|
|
4
4
|
* Error tags and safe messages remain visible while underlying causes, process
|
|
@@ -24,28 +24,12 @@ const errorResult = (error) => {
|
|
|
24
24
|
const successResult = (value, contract, options) => {
|
|
25
25
|
const candidate = compactEvidence(value, options.evidenceResultProjection) ??
|
|
26
26
|
(contract.kind === "session" ? { result: value } : value);
|
|
27
|
-
const parsed = contract.outputSchema.safeParse(candidate);
|
|
28
|
-
if (!parsed.success) {
|
|
29
|
-
const structuredContent = {
|
|
30
|
-
error: projectAnalysisError(new AnalysisOutputError(contract.name, "output does not match the tool contract")),
|
|
31
|
-
};
|
|
32
|
-
return {
|
|
33
|
-
content: [
|
|
34
|
-
{
|
|
35
|
-
type: "text",
|
|
36
|
-
text: JSON.stringify(structuredContent),
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
structuredContent,
|
|
40
|
-
isError: true,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
27
|
return {
|
|
44
28
|
content: [
|
|
45
29
|
{
|
|
46
30
|
type: "text",
|
|
47
31
|
text: JSON.stringify(options.evidenceTextProjection === undefined
|
|
48
|
-
?
|
|
32
|
+
? candidate
|
|
49
33
|
: (compactEvidence(value, options.evidenceTextProjection) ??
|
|
50
34
|
options.evidenceTextProjection)),
|
|
51
35
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rea-agents",
|
|
3
|
-
"
|
|
3
|
+
"mcpName": "io.github.morluto/rea",
|
|
4
|
+
"version": "3.1.0",
|
|
4
5
|
"description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"repository": {
|
|
@@ -43,7 +44,8 @@
|
|
|
43
44
|
"bridge/hopper_bridge.py",
|
|
44
45
|
"bridge/ghidra/ReaGhidraBridge.java",
|
|
45
46
|
"scripts/rea.mjs",
|
|
46
|
-
"scripts/
|
|
47
|
+
"scripts/electron-active-hook.cjs",
|
|
48
|
+
"scripts/electron-active-hook-boundaries.cjs",
|
|
47
49
|
"scripts/hopper-demo-x11.py",
|
|
48
50
|
"scripts/prepack.mjs",
|
|
49
51
|
"scripts/prepare.mjs",
|
|
@@ -55,9 +57,10 @@
|
|
|
55
57
|
"deps:check": "node scripts/check-dependency-install.mjs",
|
|
56
58
|
"metadata:generate": "node scripts/generate-package-metadata.mjs",
|
|
57
59
|
"metadata:check": "node scripts/generate-package-metadata.mjs --check",
|
|
60
|
+
"mcp-registry:check": "node scripts/verify-mcp-registry-metadata.mjs",
|
|
58
61
|
"mcp-catalog:generate": "npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs",
|
|
59
62
|
"mcp-catalog:check": "node scripts/generate-mcp-tool-catalog.mjs --check",
|
|
60
|
-
"prebuild": "npm run deps:check && npm run metadata:check",
|
|
63
|
+
"prebuild": "npm run deps:check && npm run metadata:check && node scripts/clean-build-output.mjs",
|
|
61
64
|
"build": "tsc -p tsconfig.build.json",
|
|
62
65
|
"precheck": "npm run deps:check",
|
|
63
66
|
"check": "turbo run typecheck lint format:check knip metadata:check",
|
|
@@ -68,7 +71,7 @@
|
|
|
68
71
|
"precheck:test": "npm run deps:check",
|
|
69
72
|
"check:test": "turbo run typecheck lint format:check knip metadata:check test:run",
|
|
70
73
|
"precheck:pr": "npm run deps:check",
|
|
71
|
-
"check:pr": "turbo run typecheck lint format:check knip metadata:check test:run docs:check
|
|
74
|
+
"check:pr": "turbo run typecheck lint format:check knip metadata:check test:run && npm run docs:check",
|
|
72
75
|
"precheck:ci": "npm run deps:check",
|
|
73
76
|
"check:ci": "turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
|
|
74
77
|
"build:cached": "turbo run build",
|
|
@@ -81,19 +84,22 @@
|
|
|
81
84
|
"jscpd": "jscpd src/ tests/",
|
|
82
85
|
"scan:todos": "node scripts/scan-todos.mjs",
|
|
83
86
|
"start": "node scripts/rea.mjs mcp",
|
|
84
|
-
"
|
|
85
|
-
"test": "vitest run",
|
|
86
|
-
"test:run": "vitest run",
|
|
87
|
+
"test": "node scripts/run-exclusive.mjs test npm run test:with-build",
|
|
88
|
+
"test:with-build": "npm run build:cached && vitest run",
|
|
89
|
+
"test:run": "node scripts/run-exclusive.mjs test vitest run",
|
|
90
|
+
"test:local": "node scripts/run-exclusive.mjs test vitest run --changed --passWithNoTests --maxWorkers=1",
|
|
87
91
|
"pretest:fast": "npm run build:cached",
|
|
88
|
-
"test:fast": "vitest run --project domain --project services --project adapters --project composition --project boundary --project conformance",
|
|
92
|
+
"test:fast": "vitest run --project domain --project services --project adapters --project composition --project boundary --project mcp-boundary --project conformance",
|
|
89
93
|
"pretest:boundary": "npm run build:cached",
|
|
90
|
-
"test:boundary": "vitest run --project boundary --project process-global",
|
|
94
|
+
"test:boundary": "vitest run --project boundary --project mcp-boundary --project process-global",
|
|
95
|
+
"pretest:mcp": "npm run build:cached",
|
|
96
|
+
"test:mcp": "vitest run --project mcp-boundary",
|
|
91
97
|
"pretest:acceptance": "npm run build:cached",
|
|
92
98
|
"test:acceptance": "vitest run --project acceptance",
|
|
93
99
|
"pretest:changed": "npm run build:cached",
|
|
94
|
-
"test:changed": "vitest run --project domain --project services --project adapters --project composition --project boundary --project conformance --project evaluation --changed",
|
|
100
|
+
"test:changed": "vitest run --project domain --project services --project adapters --project composition --project boundary --project mcp-boundary --project conformance --project evaluation --changed",
|
|
95
101
|
"pretest:integration": "npm run build:cached",
|
|
96
|
-
"test:integration": "vitest run --project boundary --project process-global --project acceptance",
|
|
102
|
+
"test:integration": "vitest run --project boundary --project mcp-boundary --project process-global --project acceptance",
|
|
97
103
|
"pretest:coverage": "npm run build:cached",
|
|
98
104
|
"test:coverage": "vitest run --coverage.enabled --coverage.provider=v8",
|
|
99
105
|
"test:ci": "npm run test:coverage -- --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
|
|
@@ -104,7 +110,7 @@
|
|
|
104
110
|
"pretest:verbose": "npm run build:cached",
|
|
105
111
|
"test:verbose": "vitest run --reporter=verbose",
|
|
106
112
|
"pretest:watch": "npm run build:cached",
|
|
107
|
-
"test:watch": "vitest --project domain --project services --project adapters --project composition --project boundary --project conformance --project evaluation --changed",
|
|
113
|
+
"test:watch": "vitest --project domain --project services --project adapters --project composition --project boundary --project mcp-boundary --project conformance --project evaluation --changed",
|
|
108
114
|
"pretest:watch:all": "npm run build:cached",
|
|
109
115
|
"test:watch:all": "vitest --changed",
|
|
110
116
|
"typecheck": "tsc --noEmit",
|
|
@@ -113,6 +119,7 @@
|
|
|
113
119
|
"verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
|
|
114
120
|
"verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
|
|
115
121
|
"verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
|
|
122
|
+
"verify:electron": "npm run build:cached && node scripts/verify-real-electron.mjs",
|
|
116
123
|
"verify:inspector": "npm run build:cached && node scripts/verify-real-javascript-runtime-observation.mjs",
|
|
117
124
|
"verify:javascript-runtime": "npm run build:cached && node scripts/verify-local-javascript-runtime.mjs",
|
|
118
125
|
"verify:application-workflows": "npm run build:cached && node scripts/verify-local-application-workflows.mjs",
|
|
@@ -134,8 +141,9 @@
|
|
|
134
141
|
"evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check",
|
|
135
142
|
"docs:api": "typedoc",
|
|
136
143
|
"docs:api:cached": "turbo run docs:api",
|
|
137
|
-
"docs:generate": "
|
|
138
|
-
"docs:
|
|
144
|
+
"docs:generate": "node scripts/run-exclusive.mjs docs npm run docs:generate:unlocked",
|
|
145
|
+
"docs:generate:unlocked": "npm run metadata:generate && npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && node scripts/generate-completion-ledger.mjs && npm run docs:api:cached && node scripts/generate-error-schema.mjs",
|
|
146
|
+
"docs:check": "node scripts/run-exclusive.mjs docs turbo run docs:check:built",
|
|
139
147
|
"docs:check:built": "node scripts/generate-package-metadata.mjs --check && node scripts/generate-mcp-tool-catalog.mjs --check && node scripts/generate-skill-metadata.mjs --check && node scripts/generate-product-catalog.mjs --check && node scripts/generate-completion-ledger.mjs --check && node scripts/check-doc-facts.mjs && node scripts/generate-error-schema.mjs --check",
|
|
140
148
|
"docs:error-schema": "npm run build:cached && node scripts/generate-error-schema.mjs",
|
|
141
149
|
"prepack": "node scripts/prepack.mjs",
|