* feat(browser): trace captured website module imports Compose verified exported scripts, inert native import syntax and a narrow Chromium resolution port. Preserve query/fragment identity, import-map context, all reported capture candidates and explicit unknown execution. Share named CLI/MCP contracts and retain native reports, diagnostics and cleanup failures. Add focused boundary regressions and a real module-loading oracle to the existing conditional Chrome lane. No captured application code is executed by module tracing, and no selected website asset is refetched. Refs #851, #774 Assisted-by: Yukari (gensokyo-skills:yukari-boundary-analysis) Assisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing) * fix(browser): preserve module contexts and source bindings Keep capture completeness inline, validate actual source text against its digest, and separate unsupported URL contexts from malformed input. Use the importer origin for native module resolution and the selected map base independently, including mixed HTTP/HTTPS and escaped HTML attributes. Refs #851, #774 Assisted-by: Yukari (gensokyo-skills:yukari-boundary-analysis) Assisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)
166 lines
6.1 KiB
TypeScript
166 lines
6.1 KiB
TypeScript
/** Canonical names used by every one-shot CLI command registration. */
|
|
export const CLI_COMMANDS = Object.freeze({
|
|
traceWebModuleImports: "trace-web-module-imports",
|
|
analyze: "analyze",
|
|
inspect: "inspect",
|
|
decompile: "decompile",
|
|
setup: "setup",
|
|
doctor: "doctor",
|
|
uninstall: "uninstall",
|
|
update: "update",
|
|
xrefs: "xrefs",
|
|
trace: "trace",
|
|
traceNativeUiAction: "trace-native-ui-action",
|
|
inspectNativeDispatchMetadata: "inspect-native-dispatch-metadata",
|
|
capabilities: "capabilities",
|
|
providers: "providers",
|
|
function: "function",
|
|
annotateNativeFunction: "annotate-native-function",
|
|
inspectNativeApi: "inspect-native-api",
|
|
instructions: "instructions",
|
|
search: "search",
|
|
importReferenceSource: "import-reference-source",
|
|
inspectArtifact: "inspect-artifact",
|
|
extractArtifact: "extract-artifact",
|
|
decodeInterfaceBuilder: "decode-interface-builder",
|
|
inspectKeyedArchive: "inspect-keyed-archive",
|
|
inspectNativeDataType: "inspect-native-data-type",
|
|
inspectNativeLoadImage: "inspect-native-load-image",
|
|
readBytes: "read-bytes",
|
|
addressToFileOffset: "address-to-file-offset",
|
|
traceNativeValues: "trace-native-values",
|
|
inspectNativeInstruction: "inspect-native-instruction",
|
|
resolveNativeCallTargets: "resolve-native-call-targets",
|
|
inspectAssetCatalog: "inspect-asset-catalog",
|
|
inspectManagedArtifact: "inspect-managed-artifact",
|
|
inspectFirmwareRegions: "inspect-firmware-regions",
|
|
extractFirmware: "extract-firmware",
|
|
inspectAndroidPackage: "inspect-android-package",
|
|
searchAndroidClasses: "search-android-classes",
|
|
inspectAndroidClass: "inspect-android-class",
|
|
inspectAndroidMethod: "inspect-android-method",
|
|
traceAndroidReferences: "trace-android-references",
|
|
inspectManagedMembers: "inspect-managed-members",
|
|
inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
|
|
compareManagedMembers: "compare-managed-members",
|
|
verifyManagedNativeBoundaries: "verify-managed-native-boundaries",
|
|
importManagedReconstruction: "import-managed-reconstruction",
|
|
projectManagedApplicationGraph: "project-managed-application-graph",
|
|
observeNativeUi: "observe-native-ui",
|
|
captureNativeUiScenario: "capture-native-ui-scenario",
|
|
inspectMacho: "inspect-macho",
|
|
inspectSignature: "inspect-signature",
|
|
listArchitectures: "list-architectures",
|
|
inspectPlist: "inspect-plist",
|
|
demangleSwift: "demangle-swift",
|
|
evidenceImport: "evidence-import",
|
|
evidenceExport: "evidence-export",
|
|
compare: "compare",
|
|
captureProcess: "capture-process",
|
|
compareProcessCaptures: "compare-process-captures",
|
|
listBrowserTargets: "list-browser-targets",
|
|
inspectWebPage: "inspect-web-page",
|
|
analyzeWebBundle: "analyze-web-bundle",
|
|
exportWebScripts: "export-web-scripts",
|
|
recoverJavaScriptSources: "recover-javascript-sources",
|
|
observeWebSession: "observe-web-session",
|
|
discoverWebMcpTools: "discover-webmcp-tools",
|
|
compareWebCaptures: "compare-web-captures",
|
|
captureWebScreenshot: "capture-web-screenshot",
|
|
compareWebScreenshots: "compare-web-screenshots",
|
|
captureBrowserScenario: "capture-browser-scenario",
|
|
listElectronTargets: "list-electron-targets",
|
|
inspectElectronPage: "inspect-electron-page",
|
|
captureElectronScenario: "capture-electron-scenario",
|
|
listJavaScriptRuntimeTargets: "list-javascript-runtime-targets",
|
|
observeJavaScriptRuntime: "observe-javascript-runtime",
|
|
analyzeJavaScriptApplication: "analyze-javascript-application",
|
|
reconcileJavaScriptRuntime: "reconcile-javascript-runtime",
|
|
traceApplicationFeature: "trace-application-feature",
|
|
traceJavaScriptSemantics: "trace-javascript-semantics",
|
|
compareApplicationVersions: "compare-application-versions",
|
|
compareSourceToBundle: "compare-source-to-bundle",
|
|
compareJavaScriptExportShapes: "compare-javascript-export-shapes",
|
|
buildReconstructionObligationLedger: "build-reconstruction-obligation-ledger",
|
|
evaluateReconstructionCoverage: "evaluate-reconstruction-coverage",
|
|
projectAndroidApplicationGraph: "project-android-application-graph",
|
|
projectAppleApplicationGraph: "project-apple-application-graph",
|
|
});
|
|
|
|
/** Ordered primary CLI inventory; aliases are intentionally excluded. */
|
|
export const CLI_COMMAND_NAMES = Object.freeze(Object.values(CLI_COMMANDS));
|
|
|
|
/** Command aliases registered on top of the primary CLI command inventory. */
|
|
export const CLI_COMMAND_ALIASES = Object.freeze(["compare-bundles"]);
|
|
|
|
/** Canonical MCP operations reached by CLI commands with different names. */
|
|
export const CLI_COMMAND_TOOL_ALIASES = Object.freeze({
|
|
analyze: ["binary_overview"],
|
|
inspect: ["binary_overview"],
|
|
decompile: ["procedure_pseudo_code"],
|
|
function: ["analyze_function"],
|
|
instructions: ["read_function_instructions"],
|
|
trace: ["trace_feature"],
|
|
search: ["search_strings", "search_procedures"],
|
|
"capture-process": ["capture_process_scenario"],
|
|
"compare-bundles": ["compare_bundles"],
|
|
});
|
|
|
|
/** MCP operations without a dedicated CLI command or direct command alias. */
|
|
export const MCP_TOOLS_WITHOUT_DEDICATED_CLI = Object.freeze([
|
|
"address_name",
|
|
"comment",
|
|
"current_address",
|
|
"current_procedure",
|
|
"current_document",
|
|
"goto_address",
|
|
"inline_comment",
|
|
"list_bookmarks",
|
|
"list_documents",
|
|
"list_names",
|
|
"list_procedures",
|
|
"list_segments",
|
|
"list_strings",
|
|
"next_address",
|
|
"prev_address",
|
|
"procedure_address",
|
|
"procedure_assembly",
|
|
"procedure_callees",
|
|
"procedure_callers",
|
|
"procedure_info",
|
|
"procedure_references",
|
|
"resolve_containing_procedure",
|
|
"set_address_name",
|
|
"set_addresses_names",
|
|
"set_bookmark",
|
|
"set_comment",
|
|
"set_current_document",
|
|
"set_inline_comment",
|
|
"unset_bookmark",
|
|
"get_objc_classes",
|
|
"get_objc_protocols",
|
|
"batch_decompile",
|
|
"get_call_graph",
|
|
"analyze_swift_types",
|
|
"find_xrefs_to_name",
|
|
"trace_call_path",
|
|
"open_binary",
|
|
"close_binary",
|
|
"binary_session",
|
|
"export_evidence_bundle",
|
|
"import_evidence_bundle",
|
|
"compare_artifacts",
|
|
"compare_functions",
|
|
"find_changed_behavior",
|
|
"build_call_path",
|
|
"correlate_static_and_runtime",
|
|
"verify_reconstruction",
|
|
"list_unknowns",
|
|
"record_unknown",
|
|
"update_unknown",
|
|
"verify_unknown_resolution",
|
|
"get_evidence_bundle",
|
|
"get_navigation_context",
|
|
"inspect_address_context",
|
|
]);
|