rea-agents 2.4.0 → 3.0.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 +91 -19
- package/bridge/ghidra/ReaGhidraBridge.java +524 -4
- package/bridge/hopper_bridge.py +313 -28
- package/dist/application/AnalysisClientCleanup.js +14 -0
- package/dist/application/AnalysisContextQueries.js +130 -0
- package/dist/application/AnalysisSnapshotCache.js +4 -2
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +31 -13
- package/dist/application/ArtifactInventory/scanCanonical.js +1 -1
- package/dist/application/BinarySession.js +20 -8
- package/dist/application/BinarySessionComposition.js +21 -0
- package/dist/application/BinarySessionRecords.js +79 -9
- package/dist/application/BinarySessionStatus.js +31 -1
- package/dist/application/BrowserEvidence.js +14 -0
- package/dist/application/BrowserScenarioCapturePort.js +1 -0
- package/dist/application/BrowserScenarioCaptureService.js +53 -0
- package/dist/application/BrowserScenarioEvidence.js +40 -0
- package/dist/application/CallPathTracing.js +160 -0
- package/dist/application/CapabilityInventory.js +84 -14
- package/dist/application/ClientRegistrationStatus.js +4 -1
- package/dist/application/CompositeProvider.js +10 -1
- package/dist/application/DirectAnalysis.js +13 -4
- package/dist/application/EnhancedLiteralTracing.js +118 -0
- package/dist/application/EnhancedTools.js +71 -127
- package/dist/application/EvidenceLedger.js +45 -16
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +13 -0
- package/dist/application/JavaScriptApplicationWorkflowService.js +27 -1
- package/dist/application/JavaScriptArtifactAnalysis.js +13 -4
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +34 -0
- package/dist/application/JavaScriptRuntimeObservationPort.js +1 -0
- package/dist/application/JavaScriptRuntimeObservationService.js +46 -0
- package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +147 -0
- package/dist/application/JavaScriptSemanticGraphBuilder.js +34 -6
- package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +156 -0
- package/dist/application/JavaScriptSemanticGraphConstruction.js +2 -2
- package/dist/application/JavaScriptSemanticGraphDataProjection.js +203 -0
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +25 -0
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +129 -8
- package/dist/application/JavaScriptSemanticGraphObjectProjection.js +81 -0
- package/dist/application/JavaScriptSemanticGraphProjection.js +14 -7
- package/dist/application/JavaScriptSemanticGraphResourceProjection.js +59 -0
- package/dist/application/JavaScriptSemanticGraphValueProjection.js +77 -0
- package/dist/application/LazyAnalysisProvider.js +77 -0
- package/dist/application/LoopbackReplay.js +1 -1
- package/dist/application/NativeApiInspection.js +80 -0
- package/dist/application/ProcessReactiveEffects.js +6 -0
- package/dist/application/ProcessReactiveHarness.js +16 -1
- package/dist/application/ProjectPermissionStore.js +1 -0
- package/dist/application/ReconstructionObligationAuthority.js +72 -0
- package/dist/application/ReconstructionObligationCandidates.js +265 -0
- package/dist/application/ReconstructionObligationLedgerDiagnostics.js +47 -0
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +263 -0
- package/dist/application/ReconstructionObligationLedgerProjection.js +86 -0
- package/dist/application/ReconstructionObligationLedgerService.js +72 -0
- package/dist/application/ReconstructionObligationOriginalCases.js +33 -0
- package/dist/application/ReconstructionObligationPolicies.js +132 -0
- package/dist/application/ReconstructionReadinessService.js +48 -0
- package/dist/application/SessionProviderRouter.js +6 -6
- package/dist/application/SetupClientConfiguration.js +4 -2
- package/dist/application/runtime.js +26 -9
- package/dist/artifacts/ArtifactProvider.js +87 -22
- package/dist/browser/BrowserScenarioSecrets.js +53 -0
- package/dist/browser/BrowserScenarioSessionPort.js +1 -0
- package/dist/browser/CdpBrowserProvider.js +2 -2
- package/dist/browser/CdpCaptureDocuments.js +57 -0
- package/dist/browser/CdpCaptureStorage.js +71 -29
- package/dist/browser/CdpCaptureStorageFingerprints.js +328 -0
- package/dist/browser/CdpEndpoint.js +8 -6
- package/dist/browser/CdpPageCapture.js +2 -0
- package/dist/browser/JavaScriptRuntimeScope.js +38 -0
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +259 -0
- package/dist/browser/PlaywrightExecutionBoundary.js +42 -0
- package/dist/browser/PlaywrightScenarioActions.js +62 -0
- package/dist/browser/PlaywrightScenarioArtifacts.js +238 -0
- package/dist/browser/PlaywrightScenarioBrowser.js +144 -0
- package/dist/browser/PlaywrightScenarioEvents.js +301 -0
- package/dist/browser/PlaywrightScenarioSession.js +300 -0
- package/dist/browser/V8InspectorCaptureProjection.js +110 -0
- package/dist/browser/V8InspectorEndpoint.js +72 -0
- package/dist/browser/V8InspectorProvider.js +267 -0
- package/dist/catalogIdentity.js +11 -3
- package/dist/cli/artifactCommands.js +44 -3
- package/dist/cli/coreAnalysisCommands.js +78 -0
- package/dist/cli.js +4 -0
- package/dist/cliApplicationCommands.js +30 -2
- package/dist/cliBrowserAdvancedCommands.js +17 -5
- package/dist/cliBrowserCommands.js +1 -0
- package/dist/cliBrowserScenarioCommands.js +43 -0
- package/dist/cliCommandNames.js +9 -0
- package/dist/cliJavaScriptRuntimeCommands.js +164 -0
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliPolicyCommands.js +1 -0
- package/dist/config/environment.js +12 -0
- package/dist/config/parseConfig.js +88 -17
- package/dist/contracts/analysisSearchContract.js +14 -0
- package/dist/contracts/applicationToolContracts.js +86 -2
- package/dist/contracts/applicationWorkflowInputContracts.js +18 -0
- package/dist/contracts/artifactToolContracts.js +29 -2
- package/dist/contracts/browserProviderToolContracts.js +7 -0
- package/dist/contracts/browserScenarioToolContracts.js +81 -0
- package/dist/contracts/browserToolContracts.js +88 -98
- package/dist/contracts/enhancedInputs.js +35 -6
- package/dist/contracts/functionInstructionContract.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +30 -0
- package/dist/contracts/hopperMemoryContracts.js +22 -0
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +42 -0
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +58 -0
- package/dist/contracts/promptContracts.js +14 -15
- package/dist/contracts/reconstructionReadinessExample.js +436 -0
- package/dist/contracts/toolContractExamples.js +8 -0
- package/dist/contracts/toolContractTypes.js +1 -0
- package/dist/contracts/toolContracts.js +34 -25
- package/dist/contracts/toolEffects.js +25 -0
- package/dist/contracts/toolOutputSchemaGroups.js +120 -30
- package/dist/contracts/toolOutputSchemaPrimitives.js +37 -0
- package/dist/domain/analysisErrorPresentation.js +8 -2
- package/dist/domain/analysisErrorProjection.js +9 -0
- package/dist/domain/artifactInspection.js +347 -0
- package/dist/domain/browserCaptureComparison.js +82 -0
- package/dist/domain/browserObservation.js +8 -1
- package/dist/domain/browserObservationErrors.js +1 -0
- package/dist/domain/browserObservationSchemas.js +26 -0
- package/dist/domain/browserScenario.js +165 -0
- package/dist/domain/browserScenarioCapture.js +57 -0
- package/dist/domain/browserScenarioCaptureValues.js +204 -0
- package/dist/domain/browserScenarioDiff.js +324 -0
- package/dist/domain/browserScenarioDiffValues.js +157 -0
- package/dist/domain/browserScenarioNormalization.js +45 -0
- package/dist/domain/browserScenarioValues.js +372 -0
- package/dist/domain/bytecodeProvider.js +179 -0
- package/dist/domain/conformancePackage.js +169 -0
- package/dist/domain/conformanceReplay.js +104 -0
- package/dist/domain/conformanceTrustGate.js +193 -0
- package/dist/domain/customProtocolCapture.js +137 -0
- package/dist/domain/eventProcessTree.js +214 -0
- package/dist/domain/evidenceBundle.js +47 -0
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +14 -1
- package/dist/domain/inputIssueProjection.js +7 -1
- package/dist/domain/javascriptRuntimeObservation.js +170 -0
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +120 -2
- package/dist/domain/javascriptRuntimeReconciliationResult.js +3 -3
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +2 -2
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +1 -1
- package/dist/domain/javascriptSemanticAnalysis.js +13 -16
- package/dist/domain/javascriptSemanticAsyncEffects.js +253 -0
- package/dist/domain/javascriptSemanticChildProcesses.js +237 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +125 -0
- package/dist/domain/javascriptSemanticDataEffects.js +284 -0
- package/dist/domain/javascriptSemanticDerivedAnalysis.js +41 -0
- package/dist/domain/javascriptSemanticFingerprints.js +174 -0
- package/dist/domain/javascriptSemanticIr.js +21 -1
- package/dist/domain/javascriptSemanticObjects.js +115 -0
- package/dist/domain/javascriptSemanticPromises.js +290 -0
- package/dist/domain/javascriptSemanticResources.js +136 -0
- package/dist/domain/javascriptSourceParser.js +15 -0
- package/dist/domain/javascriptStaticAnalysis.js +12 -15
- package/dist/domain/javascriptStaticAnalysisBundler.js +38 -0
- package/dist/domain/javascriptStaticAnalysisCalls.js +23 -1
- package/dist/domain/javascriptStaticAnalysisHelpers.js +8 -0
- package/dist/domain/mobileApplicationInvestigation.js +159 -0
- package/dist/domain/nativeApiBoundary.js +130 -0
- package/dist/domain/objcSwiftMetadata.js +150 -0
- package/dist/domain/packageAnalysis.js +123 -0
- package/dist/domain/peInspection.js +196 -0
- package/dist/domain/processCapture.js +8 -2
- package/dist/domain/processReactiveScenario.js +1 -0
- package/dist/domain/processReactiveTransition.js +9 -4
- package/dist/domain/protocolCapture.js +243 -0
- package/dist/domain/providerCleanupError.js +11 -0
- package/dist/domain/reconstructionObligationLedgerSchemas.js +278 -0
- package/dist/domain/reconstructionReadiness.js +121 -0
- package/dist/domain/reconstructionReadinessFindingHelpers.js +17 -0
- package/dist/domain/reconstructionReadinessIntegrityFindings.js +118 -0
- package/dist/domain/reconstructionReadinessJourneyFindings.js +193 -0
- package/dist/domain/reconstructionReadinessSchemas.js +240 -0
- package/dist/domain/sourceToBundleComparison.js +335 -0
- package/dist/domain/sourceToBundleComparisonSchemas.js +133 -0
- package/dist/domain/sourceToBundleSignals.js +202 -0
- package/dist/domain/webCaptureDiff.js +141 -27
- package/dist/domain/webScreenshot.js +1 -1
- package/dist/dotnet/ManagedStaticProvider.js +34 -5
- package/dist/generatedMcpToolCatalog.js +37 -0
- package/dist/generatedPackageMetadata.js +4 -4
- package/dist/ghidra/GhidraDefaults.js +1 -1
- package/dist/ghidra/GhidraFunctionValues.js +40 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +47 -38
- package/dist/hopper/HopperCleanup.js +158 -0
- package/dist/hopper/HopperClient.js +93 -99
- package/dist/hopper/HopperProvider.js +61 -30
- package/dist/hopper/HopperRequestQueue.js +215 -0
- package/dist/hopper/HopperResponseStream.js +46 -0
- package/dist/hopper/protocol.js +63 -20
- package/dist/main/transport.js +24 -27
- package/dist/main.js +14 -6
- package/dist/mcpDoctor.js +27 -4
- package/dist/mcpStartupPolicy.js +14 -0
- package/dist/process/ProcessCommandIdentity.js +19 -0
- package/dist/process/ProcessOwnership.js +11 -8
- package/dist/server/DynamicToolAvailability.js +70 -0
- package/dist/server/LazyToolCatalog.js +134 -0
- package/dist/server/createServer.js +92 -154
- package/dist/server/hydrateServerTools.js +191 -0
- package/dist/server/lifecycleProgress.js +10 -0
- package/dist/server/permissionFailure.js +12 -0
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +35 -0
- package/dist/server/registerApplicationTools/helpers.js +11 -7
- package/dist/server/registerApplicationTools/obligationLedger.js +27 -0
- package/dist/server/registerApplicationTools/readiness.js +55 -0
- package/dist/server/registerApplicationTools.js +6 -0
- package/dist/server/registerArtifactTools.js +9 -1
- package/dist/server/registerBrowserScenarioTool.js +25 -0
- package/dist/server/registerBrowserTools.js +2 -2
- package/dist/server/registerCloseLifecycleTool.js +57 -0
- package/dist/server/registerEnhancedTools.js +28 -7
- package/dist/server/registerEvidenceResources.js +54 -101
- package/dist/server/registerEvidenceTools.js +9 -2
- package/dist/server/registerInvestigationTools.js +1 -2
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -4
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +37 -0
- package/dist/server/registerReconstructionObligationLedgerResource.js +32 -0
- package/dist/server/registerReconstructionReadinessResource.js +32 -0
- package/dist/server/registerSessionRecordTools.js +82 -12
- package/dist/server/registerSessionStatusTool.js +11 -8
- package/dist/server/registerSessionTools.js +32 -58
- package/dist/server/sessionAvailabilityPolicy.js +10 -8
- package/dist/server/toolRegistrationOptions.js +21 -6
- package/dist/server/toolResult.js +12 -0
- package/package.json +28 -11
- package/scripts/package-runner-bootstrap.mjs +72 -0
- package/scripts/rea.mjs +11 -1
- package/skills/reverse-engineer-anything/SKILL.md +10 -3
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
import { createEvidence } from "../domain/evidence.js";
|
|
2
|
+
import { createEvidenceBundle } from "../domain/evidenceBundle.js";
|
|
3
|
+
import { READINESS_REQUIRED_CHECKS, READINESS_STAGE_IDS, } from "../domain/reconstructionReadinessJourneyFindings.js";
|
|
4
|
+
const HASH = "a".repeat(64);
|
|
5
|
+
const sourceEvidence = (variant) => createEvidence(undefined, {
|
|
6
|
+
id: "rea-readiness-fixture",
|
|
7
|
+
name: "REA readiness fixture",
|
|
8
|
+
version: "1",
|
|
9
|
+
}, {
|
|
10
|
+
predicateType: "rea.reconstruction-readiness-fixture/v1",
|
|
11
|
+
operation: "run_reconstruction_readiness_fixture",
|
|
12
|
+
parameters: { variant },
|
|
13
|
+
result: { passed: true, variant },
|
|
14
|
+
confidence: "observed",
|
|
15
|
+
authority: "controlled-replay",
|
|
16
|
+
});
|
|
17
|
+
const SOURCE = sourceEvidence("authority");
|
|
18
|
+
const CONTRADICTING_SOURCE = sourceEvidence("contradiction");
|
|
19
|
+
const EVIDENCE_ID = SOURCE.evidence_id;
|
|
20
|
+
const CASES = [
|
|
21
|
+
"positive",
|
|
22
|
+
"negative",
|
|
23
|
+
"malformed",
|
|
24
|
+
"cancellation",
|
|
25
|
+
"teardown",
|
|
26
|
+
];
|
|
27
|
+
const FIXTURES = [
|
|
28
|
+
"native",
|
|
29
|
+
"javascript-cli",
|
|
30
|
+
"electron",
|
|
31
|
+
"incomplete-reconstruction",
|
|
32
|
+
"broken-runtime",
|
|
33
|
+
];
|
|
34
|
+
const STATUSES = [
|
|
35
|
+
"unowned",
|
|
36
|
+
"characterized",
|
|
37
|
+
"implemented",
|
|
38
|
+
"verified",
|
|
39
|
+
"contradicted",
|
|
40
|
+
"blocked",
|
|
41
|
+
"out-of-scope",
|
|
42
|
+
"unknown",
|
|
43
|
+
];
|
|
44
|
+
const LAYERS = [
|
|
45
|
+
"cli",
|
|
46
|
+
"protocol",
|
|
47
|
+
"electron",
|
|
48
|
+
"persistence",
|
|
49
|
+
"process",
|
|
50
|
+
"runtime",
|
|
51
|
+
"packaging",
|
|
52
|
+
"native-abi",
|
|
53
|
+
"application",
|
|
54
|
+
"other",
|
|
55
|
+
];
|
|
56
|
+
const EVIDENCE_STATES = [
|
|
57
|
+
"candidate",
|
|
58
|
+
"observed",
|
|
59
|
+
"reviewed",
|
|
60
|
+
"unknown",
|
|
61
|
+
];
|
|
62
|
+
/** Complete synthetic input shared by docs, tests, CLI, MCP, and verifier. */
|
|
63
|
+
export const RECONSTRUCTION_READINESS_EXAMPLE = {
|
|
64
|
+
schema_version: 1,
|
|
65
|
+
identity: {
|
|
66
|
+
cli_version: "2.4.0",
|
|
67
|
+
server_version: "2.4.0",
|
|
68
|
+
catalog_digest: HASH,
|
|
69
|
+
skill_digest: HASH,
|
|
70
|
+
versions: [
|
|
71
|
+
{
|
|
72
|
+
component: "rea-cli",
|
|
73
|
+
version: "2.4.0",
|
|
74
|
+
digest: HASH,
|
|
75
|
+
state: "current",
|
|
76
|
+
remediation: null,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
component: "rea-server",
|
|
80
|
+
version: "2.3.0",
|
|
81
|
+
digest: "b".repeat(64),
|
|
82
|
+
state: "stale",
|
|
83
|
+
remediation: "Restart the connected MCP server.",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
component: "rea-server",
|
|
87
|
+
version: "2.4.0",
|
|
88
|
+
digest: HASH,
|
|
89
|
+
state: "current",
|
|
90
|
+
remediation: null,
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
providers: [
|
|
94
|
+
{
|
|
95
|
+
provider_id: "javascript-application",
|
|
96
|
+
version: "1",
|
|
97
|
+
digest: HASH,
|
|
98
|
+
state: "available",
|
|
99
|
+
reason_code: null,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
provider_id: "broken-runtime-probe",
|
|
103
|
+
version: null,
|
|
104
|
+
digest: null,
|
|
105
|
+
state: "broken-host",
|
|
106
|
+
reason_code: "host-runtime-linker-failure",
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
client: {
|
|
111
|
+
name: "synthetic-mcp-client",
|
|
112
|
+
version: "1",
|
|
113
|
+
negotiated_capabilities: ["elicitation", "progress", "resources"],
|
|
114
|
+
},
|
|
115
|
+
capabilities: [
|
|
116
|
+
{
|
|
117
|
+
capability_id: "analyze-javascript-application",
|
|
118
|
+
available: true,
|
|
119
|
+
bounded: true,
|
|
120
|
+
side_effect: "reads-target",
|
|
121
|
+
authority_scopes: ["investigation-input"],
|
|
122
|
+
limits: [{ name: "max-ast-nodes", value: 2_000_000, unit: "count" }],
|
|
123
|
+
unavailable_reason: null,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
fixtures: FIXTURES.map((kind) => ({
|
|
127
|
+
fixture_id: `fixture.${kind}`,
|
|
128
|
+
kind,
|
|
129
|
+
artifact_sha256: HASH,
|
|
130
|
+
environment_id: "environment.synthetic",
|
|
131
|
+
deliberate_faults: [`fault.${kind}`],
|
|
132
|
+
})),
|
|
133
|
+
workflow_candidates: FIXTURES.map((kind) => ({
|
|
134
|
+
fixture_id: `fixture.${kind}`,
|
|
135
|
+
workflow_id: `workflow.${kind}`,
|
|
136
|
+
provider_id: kind === "broken-runtime" ? null : `provider.${kind}`,
|
|
137
|
+
selected: true,
|
|
138
|
+
invoked: true,
|
|
139
|
+
compatibility: "compatible",
|
|
140
|
+
reason_code: "compatible-artifact-family",
|
|
141
|
+
})),
|
|
142
|
+
grants: [
|
|
143
|
+
{
|
|
144
|
+
grant_id: "grant.denied",
|
|
145
|
+
scope: "process-capture",
|
|
146
|
+
decision: "denied",
|
|
147
|
+
launched_process: false,
|
|
148
|
+
evidence_ids: [EVIDENCE_ID],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
grant_id: "grant.session",
|
|
152
|
+
scope: "process-capture",
|
|
153
|
+
decision: "granted",
|
|
154
|
+
launched_process: true,
|
|
155
|
+
evidence_ids: [EVIDENCE_ID],
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
evidence_bundle: createEvidenceBundle([SOURCE, CONTRADICTING_SOURCE]),
|
|
159
|
+
comparisons: [
|
|
160
|
+
{
|
|
161
|
+
comparison_id: "comparison.concurrent",
|
|
162
|
+
verdict: "equivalent",
|
|
163
|
+
schedule_semantics: "partial-order",
|
|
164
|
+
concurrent: true,
|
|
165
|
+
truncated: false,
|
|
166
|
+
unavailable_authority: false,
|
|
167
|
+
unstable: false,
|
|
168
|
+
deliberate_divergence_ref: null,
|
|
169
|
+
divergence_refs: [],
|
|
170
|
+
contradiction_ids: [],
|
|
171
|
+
evidence_ids: [EVIDENCE_ID],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
comparison_id: "comparison.divergence",
|
|
175
|
+
verdict: "different",
|
|
176
|
+
schedule_semantics: "finite-traces",
|
|
177
|
+
concurrent: true,
|
|
178
|
+
truncated: false,
|
|
179
|
+
unavailable_authority: false,
|
|
180
|
+
unstable: false,
|
|
181
|
+
deliberate_divergence_ref: "/events/primary",
|
|
182
|
+
divergence_refs: ["/events/primary"],
|
|
183
|
+
contradiction_ids: [],
|
|
184
|
+
evidence_ids: [EVIDENCE_ID],
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
comparison_id: "comparison.contradicted",
|
|
188
|
+
verdict: "unknown",
|
|
189
|
+
schedule_semantics: "finite-traces",
|
|
190
|
+
concurrent: false,
|
|
191
|
+
truncated: false,
|
|
192
|
+
unavailable_authority: false,
|
|
193
|
+
unstable: false,
|
|
194
|
+
deliberate_divergence_ref: null,
|
|
195
|
+
divergence_refs: [],
|
|
196
|
+
contradiction_ids: ["contradiction.artifact"],
|
|
197
|
+
evidence_ids: [EVIDENCE_ID],
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
contradictions: [
|
|
201
|
+
{
|
|
202
|
+
contradiction_id: "contradiction.artifact",
|
|
203
|
+
declared_sha256: HASH,
|
|
204
|
+
observed_sha256: "b".repeat(64),
|
|
205
|
+
policy: "record-and-continue",
|
|
206
|
+
affected_comparison_ids: ["comparison.contradicted"],
|
|
207
|
+
evidence_ids: [EVIDENCE_ID, CONTRADICTING_SOURCE.evidence_id],
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
obligation_ledger: {
|
|
211
|
+
schema: "ReconstructionObligationLedger",
|
|
212
|
+
schema_version: 1,
|
|
213
|
+
ledger_id: `rol_${HASH}`,
|
|
214
|
+
closure_digest: HASH,
|
|
215
|
+
status: "ready",
|
|
216
|
+
coverage: {
|
|
217
|
+
status: "complete",
|
|
218
|
+
truncated: false,
|
|
219
|
+
omitted_count: 0,
|
|
220
|
+
max_obligations: 100,
|
|
221
|
+
},
|
|
222
|
+
summary: {
|
|
223
|
+
total: 1,
|
|
224
|
+
required: 1,
|
|
225
|
+
verified: 1,
|
|
226
|
+
required_open: 0,
|
|
227
|
+
by_status: STATUSES.map((key) => ({
|
|
228
|
+
key,
|
|
229
|
+
count: key === "verified" ? 1 : 0,
|
|
230
|
+
})),
|
|
231
|
+
by_application_layer: LAYERS.map((key) => ({
|
|
232
|
+
key,
|
|
233
|
+
count: key === "process" ? 1 : 0,
|
|
234
|
+
})),
|
|
235
|
+
by_evidence_authority: EVIDENCE_STATES.map((key) => ({
|
|
236
|
+
key,
|
|
237
|
+
count: key === "observed" ? 1 : 0,
|
|
238
|
+
})),
|
|
239
|
+
},
|
|
240
|
+
reports: {
|
|
241
|
+
missing_owner_obligation_ids: [],
|
|
242
|
+
missing_verifier_obligation_ids: [],
|
|
243
|
+
contradicted_obligation_ids: [],
|
|
244
|
+
residual_unknown_ids: [],
|
|
245
|
+
},
|
|
246
|
+
ownership_graph: [
|
|
247
|
+
{
|
|
248
|
+
obligation_id: "obl.readiness",
|
|
249
|
+
module_path: "src/readiness.ts",
|
|
250
|
+
symbol: "runReadiness",
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
dependency_graph: [],
|
|
254
|
+
obligations: [
|
|
255
|
+
{
|
|
256
|
+
obligation_id: "obl.readiness",
|
|
257
|
+
obligation_version: 1,
|
|
258
|
+
title: "Preserve the packaged readiness fixture lifecycle",
|
|
259
|
+
origin: "reviewed",
|
|
260
|
+
application_layer: "process",
|
|
261
|
+
family: "packaged-process-lifecycle",
|
|
262
|
+
target: {
|
|
263
|
+
artifact_sha256: HASH,
|
|
264
|
+
application_node_id: null,
|
|
265
|
+
semantic_node_id: null,
|
|
266
|
+
location: "/fixture",
|
|
267
|
+
},
|
|
268
|
+
authority_references: [
|
|
269
|
+
{
|
|
270
|
+
evidence_id: EVIDENCE_ID,
|
|
271
|
+
authority: "controlled-replay",
|
|
272
|
+
state: "observed",
|
|
273
|
+
location: "/fixture",
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
source_state: "observed",
|
|
277
|
+
observed_cases: CASES.map((kind) => ({
|
|
278
|
+
kind,
|
|
279
|
+
evidence_id: EVIDENCE_ID,
|
|
280
|
+
location: `/original/${kind}`,
|
|
281
|
+
})),
|
|
282
|
+
required: true,
|
|
283
|
+
required_case_kinds: [...CASES],
|
|
284
|
+
required_original_authority: "process",
|
|
285
|
+
required_fixture_authority: "packaged-process",
|
|
286
|
+
required_verifier_authority: "packaged-process",
|
|
287
|
+
requires_parser_type: false,
|
|
288
|
+
dependency_obligation_ids: [],
|
|
289
|
+
residual_unknown_ids: [],
|
|
290
|
+
unavailable_authority: [],
|
|
291
|
+
required_next_evidence: [],
|
|
292
|
+
binding: {
|
|
293
|
+
obligation_id: "obl.readiness",
|
|
294
|
+
owner: {
|
|
295
|
+
module_path: "src/readiness.ts",
|
|
296
|
+
symbol: "runReadiness",
|
|
297
|
+
owner_sha256: HASH,
|
|
298
|
+
},
|
|
299
|
+
parser_type: null,
|
|
300
|
+
original_cases: CASES.map((kind) => ({
|
|
301
|
+
kind,
|
|
302
|
+
evidence_id: EVIDENCE_ID,
|
|
303
|
+
location: `/original/${kind}`,
|
|
304
|
+
})),
|
|
305
|
+
fixtures: CASES.map((kind) => ({
|
|
306
|
+
fixture_id: `fixture.${kind}`,
|
|
307
|
+
case_kind: kind,
|
|
308
|
+
authority: "packaged-process",
|
|
309
|
+
evidence_ids: [EVIDENCE_ID],
|
|
310
|
+
})),
|
|
311
|
+
verifier: {
|
|
312
|
+
verifier_id: "verifier.readiness",
|
|
313
|
+
claim_id: "claim.readiness",
|
|
314
|
+
command: "npm run verify:readiness",
|
|
315
|
+
authority: "packaged-process",
|
|
316
|
+
status: "pass",
|
|
317
|
+
result_evidence_id: EVIDENCE_ID,
|
|
318
|
+
enumerated_obligation_ids: ["obl.readiness"],
|
|
319
|
+
nondeterminism: {
|
|
320
|
+
mode: "partial-order",
|
|
321
|
+
specification: "Startup precedes teardown.",
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
status: "verified",
|
|
326
|
+
diagnostics: [],
|
|
327
|
+
},
|
|
328
|
+
],
|
|
329
|
+
evidence_links: [EVIDENCE_ID],
|
|
330
|
+
limitations: [],
|
|
331
|
+
},
|
|
332
|
+
operation_outcomes: [
|
|
333
|
+
{
|
|
334
|
+
sequence: 0,
|
|
335
|
+
operation: "inspect-artifact",
|
|
336
|
+
surface: "cli",
|
|
337
|
+
call_kind: "valid",
|
|
338
|
+
expected_success: true,
|
|
339
|
+
cli_exit_code: 0,
|
|
340
|
+
mcp_status: null,
|
|
341
|
+
error_code: null,
|
|
342
|
+
recovered: false,
|
|
343
|
+
evidence_ids: [EVIDENCE_ID],
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
sequence: 1,
|
|
347
|
+
operation: "inspect-artifact",
|
|
348
|
+
surface: "mcp",
|
|
349
|
+
call_kind: "valid",
|
|
350
|
+
expected_success: true,
|
|
351
|
+
cli_exit_code: null,
|
|
352
|
+
mcp_status: "success",
|
|
353
|
+
error_code: null,
|
|
354
|
+
recovered: false,
|
|
355
|
+
evidence_ids: [EVIDENCE_ID],
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
sequence: 2,
|
|
359
|
+
operation: "capture-process",
|
|
360
|
+
surface: "cli",
|
|
361
|
+
call_kind: "permission",
|
|
362
|
+
expected_success: false,
|
|
363
|
+
cli_exit_code: 2,
|
|
364
|
+
mcp_status: null,
|
|
365
|
+
error_code: "permission-required",
|
|
366
|
+
recovered: true,
|
|
367
|
+
evidence_ids: [EVIDENCE_ID],
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
sequence: 3,
|
|
371
|
+
operation: "capture-process",
|
|
372
|
+
surface: "mcp",
|
|
373
|
+
call_kind: "permission",
|
|
374
|
+
expected_success: false,
|
|
375
|
+
cli_exit_code: null,
|
|
376
|
+
mcp_status: "non-success",
|
|
377
|
+
error_code: "permission-required",
|
|
378
|
+
recovered: true,
|
|
379
|
+
evidence_ids: [EVIDENCE_ID],
|
|
380
|
+
},
|
|
381
|
+
],
|
|
382
|
+
cleanup: [
|
|
383
|
+
{
|
|
384
|
+
run_id: "run.cancelled",
|
|
385
|
+
cancelled: true,
|
|
386
|
+
owned_resources_remaining: 0,
|
|
387
|
+
diagnostic_evidence_ids: [EVIDENCE_ID],
|
|
388
|
+
},
|
|
389
|
+
],
|
|
390
|
+
closure_history: [
|
|
391
|
+
{
|
|
392
|
+
sequence: 0,
|
|
393
|
+
ledger_digest: "b".repeat(64),
|
|
394
|
+
status: "open",
|
|
395
|
+
required_open: 1,
|
|
396
|
+
newly_verified_obligation_ids: [],
|
|
397
|
+
evidence_ids: [EVIDENCE_ID],
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
sequence: 1,
|
|
401
|
+
ledger_digest: HASH,
|
|
402
|
+
status: "ready",
|
|
403
|
+
required_open: 0,
|
|
404
|
+
newly_verified_obligation_ids: ["obl.readiness"],
|
|
405
|
+
evidence_ids: [EVIDENCE_ID],
|
|
406
|
+
},
|
|
407
|
+
],
|
|
408
|
+
delegation_checks: [
|
|
409
|
+
{
|
|
410
|
+
candidate_id: "candidate.reconstructed",
|
|
411
|
+
delegates_to_authority: false,
|
|
412
|
+
evidence_ids: [EVIDENCE_ID],
|
|
413
|
+
},
|
|
414
|
+
],
|
|
415
|
+
replay: {
|
|
416
|
+
expected_source_digest: null,
|
|
417
|
+
deterministic: true,
|
|
418
|
+
tamper_detected: true,
|
|
419
|
+
stale_input_detected: true,
|
|
420
|
+
evidence_ids: [EVIDENCE_ID],
|
|
421
|
+
},
|
|
422
|
+
stages: READINESS_STAGE_IDS.map((stageId) => ({
|
|
423
|
+
stage_id: stageId,
|
|
424
|
+
required: true,
|
|
425
|
+
status: "pass",
|
|
426
|
+
capability_issue: null,
|
|
427
|
+
next_action: null,
|
|
428
|
+
evidence_ids: [EVIDENCE_ID],
|
|
429
|
+
checks: READINESS_REQUIRED_CHECKS[stageId].map((checkId) => ({
|
|
430
|
+
check_id: checkId,
|
|
431
|
+
status: "pass",
|
|
432
|
+
detail: `Synthetic conformance proved ${checkId}.`,
|
|
433
|
+
evidence_ids: [EVIDENCE_ID],
|
|
434
|
+
})),
|
|
435
|
+
})),
|
|
436
|
+
};
|
|
@@ -13,6 +13,9 @@ export const TOOL_EXAMPLE_OVERRIDES = {
|
|
|
13
13
|
procedure_callees: { procedure: "main" },
|
|
14
14
|
procedure_callers: { procedure: "main" },
|
|
15
15
|
procedure_info: { procedure: "main" },
|
|
16
|
+
read_function_instructions: { procedure: "main" },
|
|
17
|
+
read_bytes: { address: "0x1000", length: 16 },
|
|
18
|
+
address_to_file_offset: { address: "0x1000" },
|
|
16
19
|
procedure_references: { procedure: "main" },
|
|
17
20
|
procedure_pseudo_code: { procedure: "main" },
|
|
18
21
|
resolve_containing_procedure: { address: "0x1000" },
|
|
@@ -28,8 +31,13 @@ export const TOOL_EXAMPLE_OVERRIDES = {
|
|
|
28
31
|
get_call_graph: { address: "0x1000" },
|
|
29
32
|
find_xrefs_to_name: { name: "malloc" },
|
|
30
33
|
analyze_function: { procedure: "main" },
|
|
34
|
+
inspect_native_api: { procedure: "main" },
|
|
31
35
|
trace_feature: { query: "license" },
|
|
36
|
+
find_code_for_string: { query: "authorization failed" },
|
|
37
|
+
trace_call_path: { start: "0x1000", goal: "0x1100" },
|
|
32
38
|
open_binary: { path: "/tmp/fixture" },
|
|
39
|
+
export_evidence_bundle: { path: "/tmp/evidence.json" },
|
|
40
|
+
inspect_address_context: { address: "0x1000" },
|
|
33
41
|
import_evidence_bundle: { path: "evidence.json" },
|
|
34
42
|
capture_process_scenario: {
|
|
35
43
|
approved: true,
|
|
@@ -18,12 +18,17 @@ import { NATIVE_TOOL_CONTRACTS } from "./nativeToolContracts.js";
|
|
|
18
18
|
import { ARTIFACT_TOOL_CONTRACTS } from "./artifactToolContracts.js";
|
|
19
19
|
import { MANAGED_TOOL_CONTRACTS } from "./managedToolContracts.js";
|
|
20
20
|
import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "./managedWorkflowToolContracts.js";
|
|
21
|
-
import {
|
|
21
|
+
import { BROWSER_PROVIDER_TOOL_CONTRACTS } from "./browserProviderToolContracts.js";
|
|
22
22
|
import { ELECTRON_TOOL_CONTRACTS } from "./electronToolContracts.js";
|
|
23
|
+
import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascriptRuntimeObservationToolContracts.js";
|
|
23
24
|
import { APPLICATION_TOOL_CONTRACTS } from "./applicationToolContracts.js";
|
|
24
25
|
import { closeBinaryInputSchema, openBinaryInputSchema, } from "./sessionLifecycleInputs.js";
|
|
25
26
|
import { toolContractMetadata } from "./toolEffects.js";
|
|
26
27
|
import { binarySessionInputSchema } from "./sessionStatusContract.js";
|
|
28
|
+
import { functionInstructionInputSchema } from "./functionInstructionContract.js";
|
|
29
|
+
import { HOPPER_MEMORY_TOOL_DEFINITIONS } from "./hopperMemoryContracts.js";
|
|
30
|
+
import { analysisSearchInput } from "./analysisSearchContract.js";
|
|
31
|
+
import { FUNCTION_WORKFLOW_TOOL_CONTRACTS } from "./functionWorkflowToolContracts.js";
|
|
27
32
|
export { binarySessionInputSchema } from "./sessionStatusContract.js";
|
|
28
33
|
const document = z.string().optional().describe("The document name");
|
|
29
34
|
const address = z
|
|
@@ -31,27 +36,10 @@ const address = z
|
|
|
31
36
|
.describe("A provider-normalized address; default memory uses 0x-prefixed hexadecimal");
|
|
32
37
|
const optionalAddress = address.optional();
|
|
33
38
|
const procedure = z.string().describe("The procedure name or address");
|
|
34
|
-
const searchPattern = z
|
|
35
|
-
.string()
|
|
36
|
-
.min(1)
|
|
37
|
-
.max(256)
|
|
38
|
-
.describe("The literal text or bounded regex pattern to search for");
|
|
39
|
-
const caseSensitive = z
|
|
40
|
-
.boolean()
|
|
41
|
-
.default(false)
|
|
42
|
-
.describe("Whether to match case");
|
|
43
39
|
const pagination = {
|
|
44
40
|
offset: z.number().int().min(0).default(0),
|
|
45
41
|
limit: z.number().int().min(1).max(500).default(100),
|
|
46
42
|
};
|
|
47
|
-
const searchInput = {
|
|
48
|
-
pattern: searchPattern,
|
|
49
|
-
mode: z.enum(["literal", "regex"]).default("literal"),
|
|
50
|
-
case_sensitive: caseSensitive,
|
|
51
|
-
offset: z.number().int().min(0).default(0),
|
|
52
|
-
limit: z.number().int().min(1).max(100).default(100),
|
|
53
|
-
document,
|
|
54
|
-
};
|
|
55
43
|
const exampleInputSchema = z.record(z.string(), jsonValueSchema);
|
|
56
44
|
const examplesFor = (name, inputSchema) => {
|
|
57
45
|
const parsed = inputSchema.parse(TOOL_EXAMPLE_OVERRIDES[name] ?? {});
|
|
@@ -119,6 +107,8 @@ export const OFFICIAL_TOOL_CONTRACTS = [
|
|
|
119
107
|
official("procedure_callees", "Return the provider's resolved direct callees for one procedure identified by symbol or address. Unresolved indirect calls may be absent; use analyze_function and typed references to preserve available edge uncertainty.", z.object({ procedure, document })),
|
|
120
108
|
official("procedure_callers", "Return the provider's resolved direct callers for one procedure identified by symbol or address. Results reflect completed static analysis and may omit unresolved indirect references.", z.object({ procedure, document })),
|
|
121
109
|
official("procedure_info", "Return bounded metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, and block count. Follow with decompilation or assembly for behavior.", z.object({ procedure, document })),
|
|
110
|
+
official("read_function_instructions", "Read one offset-paginated window of raw instructions for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. Use this fast path for instruction-level orientation; follow next_offset when truncated.", functionInstructionInputSchema),
|
|
111
|
+
...HOPPER_MEMORY_TOOL_DEFINITIONS.map(({ name, description, inputSchema }) => official(name, description, inputSchema)),
|
|
122
112
|
official("procedure_references", "Return a bounded set of raw incoming or outgoing reference edges for one procedure. Endpoint procedures are resolved only from provider containment; Ghidra preserves observed reference kinds while providers without kind authority mark them unavailable.", z.object({
|
|
123
113
|
procedure,
|
|
124
114
|
direction: z.enum(["incoming", "outgoing"]).default("outgoing"),
|
|
@@ -129,8 +119,8 @@ export const OFFICIAL_TOOL_CONTRACTS = [
|
|
|
129
119
|
})),
|
|
130
120
|
official("procedure_pseudo_code", "Decompile one analyzed procedure by symbol name or provider-normalized address. Returns provider-specific pseudocode, never original source or cross-provider text equivalence, and may return null; request procedure_assembly when instruction precision matters.", z.object({ procedure, document })),
|
|
131
121
|
official("resolve_containing_procedure", "Resolve an arbitrary address, including an interior instruction or exact external entry, to its provider-analyzed containing procedure. A negative result distinguishes outside segments from not in a procedure and is never guessed from nearby symbols.", z.object({ address, document })),
|
|
132
|
-
official("search_procedures", "Search analyzed procedure names using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic and offset-paginated.", z.object(
|
|
133
|
-
official("search_strings", "Search analyzed strings using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.", z.object(
|
|
122
|
+
official("search_procedures", "Search analyzed procedure names using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic and offset-paginated.", z.object(analysisSearchInput)),
|
|
123
|
+
official("search_strings", "Search analyzed strings using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.", z.object(analysisSearchInput)),
|
|
134
124
|
official("set_address_name", "Assign an analyst name to one hexadecimal address and report Hopper's boolean result. This mutates analysis metadata; read it back with address_name before relying on it.", z.object({ address, name: z.string(), document })),
|
|
135
125
|
official("set_addresses_names", "Assign analyst names to an address/name map and return per-address success booleans. This mutates analysis metadata; use for bounded batches and verify failures individually.", z.object({ names: z.record(z.string(), z.string()), document })),
|
|
136
126
|
official("set_bookmark", "Create or replace a bookmark at a hexadecimal address. This mutates navigation metadata; verify with list_bookmarks and do not treat bookmarks as binary evidence.", z.object({ address, name: z.string().optional(), document })),
|
|
@@ -150,14 +140,27 @@ export const ENHANCED_TOOL_CONTRACTS = [
|
|
|
150
140
|
enhanced("analyze_swift_types", "Categorize exhaustively paged procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Scans at most 5,000 names and returns at most 50 entries per category.", enhancedInputSchemas.analyze_swift_types),
|
|
151
141
|
enhanced("find_xrefs_to_name", "Resolve an exact name through the bound provider's exhaustively paged name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this compact xref workflow returns address-only projections.", enhancedInputSchemas.find_xrefs_to_name),
|
|
152
142
|
enhanced("binary_overview", "Use immediately after opening a target to summarize document, exhaustive procedure/string counts, and a bounded segment sample. detail controls segment fields and limit controls only the returned segment sample.", enhancedInputSchemas.binary_overview),
|
|
153
|
-
|
|
143
|
+
...FUNCTION_WORKFLOW_TOOL_CONTRACTS,
|
|
154
144
|
enhanced("trace_feature", "Trace a bounded literal feature query through matching strings and procedures, xrefs, and truthful containing-procedure resolution. Returns the operation budget, truncation, and residual unknowns; unknown_registry_approved: true records them durably without inferring reference kinds.", enhancedInputSchemas.trace_feature),
|
|
145
|
+
enhanced("find_code_for_string", "Resolve one literal string query to bounded analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns an Evidence ID, exact operation budget, truncation, and residual unknowns; it never infers reference kinds or runtime reachability.", enhancedInputSchemas.find_code_for_string),
|
|
146
|
+
enhanced("trace_call_path", "Trace a deterministic bounded caller or callee path from one exact procedure address, optionally stopping at a goal. Returns visited nodes, direct-call edges, one shortest traversal path, failures, frontier, consumed limits, an Evidence ID, and explicit residual unknowns without claiming unresolved indirect calls are absent.", enhancedInputSchemas.trace_call_path),
|
|
155
147
|
];
|
|
156
148
|
/** Session-owned Evidence bundle export options. */
|
|
157
149
|
export const exportEvidenceBundleInputSchema = z.strictObject({
|
|
158
|
-
path: z.string().min(1)
|
|
150
|
+
path: z.string().min(1),
|
|
159
151
|
overwrite: z.boolean().default(false),
|
|
160
152
|
});
|
|
153
|
+
/** Retain the current canonical Evidence bundle as a session resource. */
|
|
154
|
+
export const snapshotEvidenceBundleInputSchema = z.strictObject({});
|
|
155
|
+
/** Optional document selection for volatile navigation context. */
|
|
156
|
+
export const navigationContextInputSchema = z.strictObject({
|
|
157
|
+
document: z.string().min(1).optional(),
|
|
158
|
+
});
|
|
159
|
+
/** Explicit reproducible address context query. */
|
|
160
|
+
export const addressContextInputSchema = z.strictObject({
|
|
161
|
+
address: z.string().min(1),
|
|
162
|
+
document: z.string().min(1).optional(),
|
|
163
|
+
});
|
|
161
164
|
/** Session-owned Evidence bundle import options. */
|
|
162
165
|
export const importEvidenceBundleInputSchema = z.strictObject({
|
|
163
166
|
path: z.string().min(1),
|
|
@@ -180,6 +183,8 @@ export const listUnknownsInputSchema = z.strictObject({
|
|
|
180
183
|
.optional(),
|
|
181
184
|
severity: z.enum(["low", "medium", "high", "critical"]).optional(),
|
|
182
185
|
domain: z.string().trim().min(1).max(100).optional(),
|
|
186
|
+
offset: z.number().int().min(0).default(0),
|
|
187
|
+
limit: z.number().int().min(1).max(500).default(100),
|
|
183
188
|
});
|
|
184
189
|
/** Exact residual-unknown identity to revalidate. */
|
|
185
190
|
export const verifyUnknownResolutionInputSchema = z.strictObject({
|
|
@@ -190,7 +195,7 @@ export const SESSION_TOOL_CONTRACTS = [
|
|
|
190
195
|
session("open_binary", "Open a local executable, application bundle, archive, JavaScript, source map, plist, or analysis database after validation. provider_id selects one deep provider or deterministic auto selection; the binding remains stable until close or an explicit switch, with no failure fallback. An optional snapshot v2 is imported atomically and must match the binary identity, concrete provider, and canonical analysis profile exactly.", openBinaryInputSchema),
|
|
191
196
|
session("close_binary", "Optionally write a provider-neutral analysis snapshot atomically, then close the active target and every provider resource started for it. Snapshot files require an operator-approved root and explicit overwrite; a failed save leaves the session open so cached analysis is not lost.", closeBinaryInputSchema),
|
|
192
197
|
session("binary_session", "Report compact target, provider, and alignment state without starting analysis. The default summary is the routing check agents should use; detail=capabilities returns one family-filtered availability page, while detail=full is reserved for complete provider diagnostics.", binarySessionInputSchema),
|
|
193
|
-
session("export_evidence_bundle", "
|
|
198
|
+
session("export_evidence_bundle", "Atomically write the session's deterministic Evidence v2 bundle beneath an operator-approved root. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering. For an in-session read, use snapshot_evidence_bundle and read its exact resource URI instead.", exportEvidenceBundleInputSchema),
|
|
194
199
|
session("import_evidence_bundle", "Read a bounded local JSON bundle beneath an operator-approved root, validate every Evidence v2 ID and canonical manifest, then atomically merge it. Imported content is data only and is never executed.", importEvidenceBundleInputSchema),
|
|
195
200
|
session("capture_process_scenario", "Run one bounded process under a PTY using operator-approved executable and working roots. Produces Process Capture v4; legacy v3 captures cannot be upgraded and must be recaptured with this tool. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.", processScenarioSchema),
|
|
196
201
|
session("compare_process_captures", "Compare two compatible Process Capture v4 observations across terminal, interaction, lifecycle, process, filesystem, command-shim, HTTP, and WebSocket evidence. Optional trace_spec validates exact events against an explicit partial order or finite trace language; concurrency is never inferred from timestamps or broad sorting. Missing, journal-free, or truncated observations are never treated as equivalent.", processComparisonInputSchema),
|
|
@@ -201,11 +206,14 @@ export const SESSION_TOOL_CONTRACTS = [
|
|
|
201
206
|
session("build_call_path", "Build bounded shortest-first direct-callee paths from explicit analyze_function Evidence groups using exact canonical addresses. Missing dossiers, incomplete callee pages, provider mixing, and depth frontiers remain unknown; every node and edge cites source Evidence.", callPathInputSchema),
|
|
202
207
|
session("correlate_static_and_runtime", "Evaluate explicit caller-declared hypotheses between exact static comparison findings and runtime comparison dimensions. Similar names or paths are never auto-matched, consistent cochange never proves causality, and unknown or truncated inputs remain unresolved.", staticRuntimeCorrelationInputSchema),
|
|
203
208
|
session("verify_reconstruction", "Verify a finite typed behavioral and structural specification against a canonical Evidence bundle. Pass means every declared claim has complete comparable authority—not global source equivalence; changed claims fail and missing, limited, or unresolved evidence stays unknown.", reconstructionVerificationInputSchema),
|
|
204
|
-
session("list_unknowns", "List current residual-unknown heads in deterministic ID order, with optional exact status, severity, and domain filters. This is read-only; unresolved, contradicted, and non-truth dispositions remain distinct.", listUnknownsInputSchema),
|
|
209
|
+
session("list_unknowns", "List current residual-unknown heads in deterministic ID order, with optional exact status, severity, and domain filters. Pages default to 100 items; while has_more is true, pass next_offset as offset and continue until false. This is read-only; unresolved, contradicted, and non-truth dispositions remain distinct.", listUnknownsInputSchema),
|
|
205
210
|
session("record_unknown", "Create one deterministic residual unknown and immutable mutation evidence. Requires approved: true, validates all evidence and relationship references, and rejects duplicate stable identity.", recordUnknownInputSchema),
|
|
206
211
|
session("update_unknown", "Append one immutable full-state revision and mutation evidence. Requires approved: true and exact expected_revision; stale concurrent writers fail instead of overwriting newer analysis.", updateUnknownInputSchema),
|
|
207
212
|
session("verify_unknown_resolution", "Revalidate the current residual-unknown head against live bundled evidence, exact authority/confidence/environment requirements, and revision integrity. Withdrawn and out-of-scope dispositions are not truth claims.", verifyUnknownResolutionInputSchema),
|
|
208
213
|
session("run_replay_machine", "Evaluate ordered HTTP and WebSocket events directly against one validated finite replay machine without opening sockets or launching a target. Returns every decision, a capture-value-free transition journal, one redacted action table entry per used transition, captured aliases, final state, and exact configured and consumed limits.", replayMachineRunInputSchema),
|
|
214
|
+
session("snapshot_evidence_bundle", "Retain the current canonical Evidence v2 bundle as an immutable session resource. Returns a compact digest summary and exact opaque URI; copy that URI unchanged and call MCP resources/read (Codex: read_mcp_resource) for the full bundle. Repeating an unchanged snapshot is idempotent.", snapshotEvidenceBundleInputSchema),
|
|
215
|
+
session("get_navigation_context", "Return the selected document, current address, and containing/current procedure in one coherent provider-neutral request. A cursor outside any procedure returns procedure: null. Scalar navigation getters remain available for evaluation and compatibility.", navigationContextInputSchema),
|
|
216
|
+
session("inspect_address_context", "Inspect one explicit reproducible address for its analyzed name, containing procedure, regular and inline comments, and matching bookmarks. Each unsupported facet returns a typed unavailable outcome; xrefs, assembly, and pseudocode remain separate bounded follow-ups.", addressContextInputSchema),
|
|
209
217
|
];
|
|
210
218
|
/** Complete ordered public inventory used by registration and verification. */
|
|
211
219
|
export const TOOL_CONTRACTS = [
|
|
@@ -215,8 +223,9 @@ export const TOOL_CONTRACTS = [
|
|
|
215
223
|
...ARTIFACT_TOOL_CONTRACTS,
|
|
216
224
|
...MANAGED_TOOL_CONTRACTS,
|
|
217
225
|
...MANAGED_WORKFLOW_TOOL_CONTRACTS,
|
|
218
|
-
...
|
|
226
|
+
...BROWSER_PROVIDER_TOOL_CONTRACTS,
|
|
219
227
|
...ELECTRON_TOOL_CONTRACTS,
|
|
228
|
+
...JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS,
|
|
220
229
|
...APPLICATION_TOOL_CONTRACTS,
|
|
221
230
|
...SESSION_TOOL_CONTRACTS,
|
|
222
231
|
];
|