From d98dcfa8c2e46a7cc918aeb01058c26c4a84060c Mon Sep 17 00:00:00 2001 From: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:05:58 -0700 Subject: [PATCH 1/9] fix(dotnet): inspect native boundaries of non-managed and malformed PEs `inspect_managed_native_boundaries` wrote the PE classification (`not-managed` or `malformed`) into `coverage.state`, which accepts only `complete`, `partial`, or `unavailable`. Its own result validation then threw, so every native DLL and every PE with unreadable CLI metadata failed as a generic execution failure advising a retry. The sibling artifact and member inspectors succeed on the same files. Report these files with `unavailable` coverage, as the member inspector does, keeping the metadata status and parse issues. Co-Authored-By: Claude Opus 5.5 --- .../ManagedNativeBoundaryInspector.test.ts | 28 +++++++++++++++++++ src/dotnet/ManagedNativeBoundaryInspector.ts | 10 +++---- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/dotnet/ManagedNativeBoundaryInspector.test.ts b/src/dotnet/ManagedNativeBoundaryInspector.test.ts index a33c803bf..978110590 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.test.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.test.ts @@ -101,4 +101,32 @@ describe("managed native boundaries", () => { expect.objectContaining({ code: "invalid-metadata-root" }), ]); }); + + it("reports unavailable boundaries for native and malformed PE files", () => { + const nativeBytes = buildNativePeFixture(); + const native = inspectManagedNativeBoundariesBytes( + nativeBytes, + managedPeFixtureTarget(nativeBytes), + ); + expect(native).toMatchObject({ + metadata: { status: "absent" }, + pinvoke_imports: [], + coverage: { state: "unavailable", issues: [] }, + }); + + const malformedBytes = buildManagedPeFixture({ + corruptMetadataSignature: true, + }); + const malformed = inspectManagedNativeBoundariesBytes( + malformedBytes, + managedPeFixtureTarget(malformedBytes), + ); + expect(malformed).toMatchObject({ + metadata: { status: "malformed" }, + coverage: { + state: "unavailable", + issues: [expect.objectContaining({ code: "invalid-metadata-root" })], + }, + }); + }); }); diff --git a/src/dotnet/ManagedNativeBoundaryInspector.ts b/src/dotnet/ManagedNativeBoundaryInspector.ts index 9fd96790b..e3f82c7cb 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.ts @@ -29,10 +29,11 @@ import { type Inventory = ReturnType; +/** Report a PE whose CLI data is absent or cannot be admitted. */ const emptyInspection = ( target: BinaryTarget, bytes: Buffer, - classification: "not-managed" | "malformed" | "not-available" | "managed", + classification: "not-managed" | "malformed", issues: readonly ManagedParseIssue[] = [], ): ManagedNativeBoundaryInspection => managedNativeBoundaryInspectionSchema.parse({ @@ -44,10 +45,7 @@ const emptyInspection = ( }, module: null, metadata: { - status: - classification === "malformed" || classification === "not-available" - ? "malformed" - : "absent", + status: classification === "malformed" ? "malformed" : "absent", version: null, table_row_counts: {}, }, @@ -75,7 +73,7 @@ const emptyInspection = ( ready_to_run: false, mixed_mode_or_native_header: false, }, - coverage: { state: classification, issues }, + coverage: { state: "unavailable", issues }, limitations: [ "No CLI data was admitted; native boundary declarations are unavailable.", "Static inspection does not load or execute target code, so native export resolution is not performed.", From e5ba6934e4ff819c09077ca70bd2417d37f85bc0 Mon Sep 17 00:00:00 2001 From: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Date: Wed, 7 Oct 2026 07:47:44 +0000 Subject: [PATCH 2/9] fix(dotnet): keep admitted CLI header facts when metadata is unreadable When the CLI header parsed but its metadata could not be admitted, the native-boundary fallback reported hard-coded false flags and zero header values. A corrupt-metadata ReadyToRun image therefore appeared IL-free and non-native. The fallback now reports the parsed CLI header and derives the summary from it as the full inspection does. When the CLI header itself is unreadable, a limitation says the values are defaults. Co-Authored-By: Claude Opus 5.5 --- src/dotnet/ManagedNativeBoundaryHelpers.ts | 47 ++++++++++------ .../ManagedNativeBoundaryInspector.test.ts | 28 ++++++++++ src/dotnet/ManagedNativeBoundaryInspector.ts | 56 ++++++++++++------- 3 files changed, 93 insertions(+), 38 deletions(-) diff --git a/src/dotnet/ManagedNativeBoundaryHelpers.ts b/src/dotnet/ManagedNativeBoundaryHelpers.ts index 3dafe5dac..1e9908f42 100644 --- a/src/dotnet/ManagedNativeBoundaryHelpers.ts +++ b/src/dotnet/ManagedNativeBoundaryHelpers.ts @@ -320,19 +320,21 @@ const boundaryKind = ( return "mixed-or-unknown"; }; +/** CLI header facets of a PE without an admitted CLI header. */ +export const NO_CLI_NATIVE: ManagedNativeBoundaryInspection["cli_native"] = { + il_only: false, + requires_32bit: false, + strong_name_signed: false, + native_entry_point: false, + ready_to_run_signature: false, + managed_native_header_rva: 0, + managed_native_header_size: 0, +}; + export const cliNative = ( pe: ManagedPeLayout, ): ManagedNativeBoundaryInspection["cli_native"] => { - if (pe.cli === null) - return { - il_only: false, - requires_32bit: false, - strong_name_signed: false, - native_entry_point: false, - ready_to_run_signature: false, - managed_native_header_rva: 0, - managed_native_header_size: 0, - }; + if (pe.cli === null) return NO_CLI_NATIVE; return { il_only: (pe.cli.flags & 0x0000_0001) !== 0, requires_32bit: (pe.cli.flags & 0x0000_0002) !== 0, @@ -344,6 +346,22 @@ export const cliNative = ( }; }; +/** Summarize declaration counts with the native facets of the CLI header. */ +export const nativeBoundarySummary = ( + native: ManagedNativeBoundaryInspection["cli_native"], + counts: Pick< + ManagedNativeBoundaryInspection["summary"], + "module_ref_count" | "pinvoke_import_count" | "native_implementation_count" + >, +): ManagedNativeBoundaryInspection["summary"] => ({ + ...counts, + ready_to_run: native.ready_to_run_signature, + mixed_mode_or_native_header: + native.managed_native_header_rva !== 0 || + native.managed_native_header_size !== 0 || + native.native_entry_point, +}); + interface BoundaryInspectionContext { readonly target: BinaryTarget; readonly bytes: Buffer; @@ -390,16 +408,11 @@ export const buildNativeBoundaryInspection = ({ module_refs: moduleRefs, pinvoke_imports: imports, native_implementations: implementations, - summary: { + summary: nativeBoundarySummary(native, { module_ref_count: moduleRefs.length, pinvoke_import_count: imports.length, native_implementation_count: implementations.length, - ready_to_run: native.ready_to_run_signature, - mixed_mode_or_native_header: - native.managed_native_header_rva !== 0 || - native.managed_native_header_size !== 0 || - native.native_entry_point, - }, + }), coverage: { state: issues.length === 0 ? "complete" : "partial", issues, diff --git a/src/dotnet/ManagedNativeBoundaryInspector.test.ts b/src/dotnet/ManagedNativeBoundaryInspector.test.ts index 978110590..70c49248d 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.test.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.test.ts @@ -116,6 +116,7 @@ describe("managed native boundaries", () => { const malformedBytes = buildManagedPeFixture({ corruptMetadataSignature: true, + readyToRun: true, }); const malformed = inspectManagedNativeBoundariesBytes( malformedBytes, @@ -123,10 +124,37 @@ describe("managed native boundaries", () => { ); expect(malformed).toMatchObject({ metadata: { status: "malformed" }, + cli_native: { + il_only: true, + ready_to_run_signature: true, + managed_native_header_rva: 0x2700, + managed_native_header_size: 4, + }, + summary: { ready_to_run: true, mixed_mode_or_native_header: true }, coverage: { state: "unavailable", issues: [expect.objectContaining({ code: "invalid-metadata-root" })], }, }); + expect(malformed.limitations).not.toContainEqual( + expect.stringContaining("CLI header was not admitted"), + ); + }); + + it("marks CLI header facets as defaults when the CLI header is unreadable", () => { + const bytes = buildManagedPeFixture(); + bytes.writeUInt32LE(0x7fff_0000, 0x84 + 20 + 96 + 14 * 8); + const result = inspectManagedNativeBoundariesBytes( + bytes, + managedPeFixtureTarget(bytes), + ); + expect(result).toMatchObject({ + metadata: { status: "malformed" }, + cli_native: { il_only: false }, + coverage: { state: "unavailable", issues: [expect.anything()] }, + }); + expect(result.limitations).toContainEqual( + expect.stringContaining("CLI header was not admitted"), + ); }); }); diff --git a/src/dotnet/ManagedNativeBoundaryInspector.ts b/src/dotnet/ManagedNativeBoundaryInspector.ts index e3f82c7cb..b9d519ee7 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.ts @@ -20,6 +20,8 @@ import { ManagedReaderFailure } from "./ManagedReaderFailure.js"; import { buildNativeBoundaryInspection, cliNative, + NO_CLI_NATIVE, + nativeBoundarySummary, nativeImplementations, parseFields, parseImplMaps, @@ -29,14 +31,25 @@ import { type Inventory = ReturnType; -/** Report a PE whose CLI data is absent or cannot be admitted. */ +/** + * Report a PE whose CLI metadata is absent or cannot be admitted. `native` + * holds the CLI header facts when the header itself was admitted; otherwise + * the header is absent (`not-managed`) or unreadable (`malformed`). + */ const emptyInspection = ( target: BinaryTarget, bytes: Buffer, classification: "not-managed" | "malformed", - issues: readonly ManagedParseIssue[] = [], -): ManagedNativeBoundaryInspection => - managedNativeBoundaryInspectionSchema.parse({ + { + native = null, + issues = [], + }: { + readonly native?: ManagedNativeBoundaryInspection["cli_native"] | null; + readonly issues?: readonly ManagedParseIssue[]; + } = {}, +): ManagedNativeBoundaryInspection => { + const header = native ?? NO_CLI_NATIVE; + return managedNativeBoundaryInspectionSchema.parse({ artifact: { path: target.path, sha256: target.sha256, @@ -54,31 +67,27 @@ const emptyInspection = ( requires_artifact_sha256: target.sha256, requires_mvid: null, }, - cli_native: { - il_only: false, - requires_32bit: false, - strong_name_signed: false, - native_entry_point: false, - ready_to_run_signature: false, - managed_native_header_rva: 0, - managed_native_header_size: 0, - }, + cli_native: header, module_refs: [], pinvoke_imports: [], native_implementations: [], - summary: { + summary: nativeBoundarySummary(header, { module_ref_count: 0, pinvoke_import_count: 0, native_implementation_count: 0, - ready_to_run: false, - mixed_mode_or_native_header: false, - }, + }), coverage: { state: "unavailable", issues }, limitations: [ - "No CLI data was admitted; native boundary declarations are unavailable.", + "No CLI metadata was admitted; native boundary declarations are unavailable.", + ...(native === null && classification === "malformed" + ? [ + "The CLI header was not admitted, so cli_native and the summary's ready_to_run and mixed_mode_or_native_header values are defaults, not observations.", + ] + : []), "Static inspection does not load or execute target code, so native export resolution is not performed.", ], }); +}; const readBoundaryInventory = ( bytes: Buffer, @@ -124,14 +133,16 @@ export const inspectManagedNativeBoundariesBytes = ( pe = readManagedPeLayout(bytes); } catch (cause: unknown) { if (!(cause instanceof ManagedReaderFailure)) throw cause; - return emptyInspection(target, bytes, "malformed", [cause.issue]); + return emptyInspection(target, bytes, "malformed", { + issues: [cause.issue], + }); } if (pe.cli === null) return emptyInspection( target, bytes, pe.cliDirectoryPresent ? "malformed" : "not-managed", - pe.cliIssue === null ? [] : [pe.cliIssue], + { issues: pe.cliIssue === null ? [] : [pe.cliIssue] }, ); let layout: ManagedMetadataLayout; let inventory: Inventory; @@ -139,7 +150,10 @@ export const inspectManagedNativeBoundariesBytes = ( ({ layout, inventory } = readBoundaryInventory(bytes, pe, pe.cli)); } catch (cause: unknown) { if (!(cause instanceof ManagedReaderFailure)) throw cause; - return emptyInspection(target, bytes, "malformed", [cause.issue]); + return emptyInspection(target, bytes, "malformed", { + native: cliNative(pe), + issues: [cause.issue], + }); } const heapExtent = Math.max(layout.strings.size, layout.blob.size); const moduleRefs = parseModuleRefs(bytes, layout, heapExtent); From 6729ee7636889a0a2ebc9fca8e35860476f8ca34 Mon Sep 17 00:00:00 2001 From: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Date: Wed, 7 Oct 2026 07:51:37 +0000 Subject: [PATCH 3/9] fix(plist): report omitted __proto__ entries in signatures and Interface Builder #885 decodes XML plists that contain a __proto__ key by omitting those entries, but signature entitlements and Interface Builder plists dropped the omission count. inspect_signature returned an entitlement set that looked complete, and archive_decode stayed complete. Both now report the omission: a signature limitation, and a partial archive_decode facet with reason dictionary_entries_omitted and a per-document limitation. The placeholder that stands in for __proto__ was reserved against the raw XML text, so an entity-encoded key such as __rea_prototype_key__ decoded to the placeholder and was omitted as if it were __proto__. The placeholder is now reserved against the decoded text. Co-Authored-By: Claude Opus 5.5 --- src/application/InterfaceBuilderAnalysis.ts | 48 ++++++++++++++----- src/domain/propertyListKeys.test.ts | 10 ++++ src/domain/propertyListKeys.ts | 5 +- src/native/NativeMacOSProvider.ts | 27 ++++++++--- .../filesystem/interfaceBuilderBundle.test.ts | 28 +++++++++++ .../providers/native/nativeProvider.test.ts | 35 ++++++++++++++ 6 files changed, 133 insertions(+), 20 deletions(-) diff --git a/src/application/InterfaceBuilderAnalysis.ts b/src/application/InterfaceBuilderAnalysis.ts index 697a1fd8f..3d2631394 100644 --- a/src/application/InterfaceBuilderAnalysis.ts +++ b/src/application/InterfaceBuilderAnalysis.ts @@ -2,7 +2,10 @@ import { createHash } from "node:crypto"; import { parseBinary } from "plist"; import { DirectoryArtifactReader } from "../artifacts/DirectoryArtifactReader.js"; -import { parseXmlPropertyList } from "../domain/propertyListKeys.js"; +import { + omittedPrototypeKeysLimitation, + parseXmlPropertyList, +} from "../domain/propertyListKeys.js"; import { decodeNibArchive, type NibArchiveDocument, @@ -34,6 +37,7 @@ export const analyzeInterfaceBuilderBundle = async (input: { const documents: InterfaceBuilderDocumentInput[] = []; const invalid: string[] = []; const incompleteHierarchies = new Map(); + const prototypeKeyOmissions = new Map(); let omitted = 0; let attempted = 0; try { @@ -51,9 +55,14 @@ export const analyzeInterfaceBuilderBundle = async (input: { bytes.subarray(0, 10).toString("ascii") === "NIBArchive" ? projectNibArchive(decodeNibArchive(bytes)) : null; - const raw = nib === null ? decodePlist(bytes) : nib.raw; + const { value: raw, omittedPrototypeKeys } = + nib === null + ? decodePlist(bytes) + : { value: nib.raw, omittedPrototypeKeys: 0 }; if (nib !== null && nib.omitted > 0) incompleteHierarchies.set(entry.path, nib.omitted); + if (omittedPrototypeKeys > 0) + prototypeKeyOmissions.set(entry.path, omittedPrototypeKeys); const documentHash = createHash("sha256").update(bytes).digest("hex"); documents.push({ relativePath: entry.path, @@ -81,6 +90,7 @@ export const analyzeInterfaceBuilderBundle = async (input: { }); return finalizeHierarchyCoverage(result, { incompleteHierarchies, + prototypeKeyOmissions, invalid, attempted, omitted, @@ -91,12 +101,15 @@ const finalizeHierarchyCoverage = ( result: ReturnType, counts: { incompleteHierarchies: ReadonlyMap; + prototypeKeyOmissions: ReadonlyMap; invalid: readonly string[]; attempted: number; omitted: number; }, ) => { - const { incompleteHierarchies, invalid } = counts; + const { incompleteHierarchies, prototypeKeyOmissions, invalid } = counts; + const archiveDecodePartial = + invalid.length > 0 || prototypeKeyOmissions.size > 0; return { ...result, documents: result.documents.map((document) => ({ @@ -123,9 +136,15 @@ const finalizeHierarchyCoverage = ( }), { facet: "archive_decode", - status: - invalid.length > 0 ? ("partial" as const) : ("complete" as const), - reason: invalid.length > 0 ? "one_or_more_archives_invalid" : null, + status: archiveDecodePartial + ? ("partial" as const) + : ("complete" as const), + reason: + invalid.length > 0 + ? "one_or_more_archives_invalid" + : prototypeKeyOmissions.size > 0 + ? "dictionary_entries_omitted" + : null, examined: counts.attempted, omitted: counts.omitted, }, @@ -133,7 +152,7 @@ const finalizeHierarchyCoverage = ( truncated: result.graph.truncated || counts.omitted > 0 || - invalid.length > 0 || + archiveDecodePartial || incompleteHierarchies.size > 0, }, limitations: [ @@ -149,6 +168,9 @@ const finalizeHierarchyCoverage = ( : [ `Some Interface Builder archives could not be decoded: ${invalid.slice(0, 16).join("; ")}`, ]), + ...[...prototypeKeyOmissions].map( + ([path, count]) => `${path}: ${omittedPrototypeKeysLimitation(count)}`, + ), ], }; }; @@ -370,10 +392,12 @@ const readEntry = async ( return Buffer.concat(chunks, length); }; -const decodePlist = (bytes: Buffer): JsonValue => { - const parsed = +const decodePlist = ( + bytes: Buffer, +): { readonly value: JsonValue; readonly omittedPrototypeKeys: number } => { + const { value, omittedPrototypeKeys } = bytes.subarray(0, 8).toString("ascii") === "bplist00" - ? parseBinary(bytes) - : parseXmlPropertyList(bytes.toString("utf8")).value; - return jsonValueSchema.parse(parsed); + ? { value: parseBinary(bytes), omittedPrototypeKeys: 0 } + : parseXmlPropertyList(bytes.toString("utf8")); + return { value: jsonValueSchema.parse(value), omittedPrototypeKeys }; }; diff --git a/src/domain/propertyListKeys.test.ts b/src/domain/propertyListKeys.test.ts index e54e57472..759c3e454 100644 --- a/src/domain/propertyListKeys.test.ts +++ b/src/domain/propertyListKeys.test.ts @@ -39,6 +39,16 @@ it("keeps __proto__ text in strings, comments, and similar keys", () => { }); }); +it("keeps an entity-encoded key that decodes to the placeholder", () => { + const text = plist( + "__rea_prototype_key__kept__proto__x", + ); + expect(parseXmlPropertyList(text)).toEqual({ + value: { __rea_prototype_key__: "kept" }, + omittedPrototypeKeys: 1, + }); +}); + it("omits own __proto__ entries that JSON decoding creates", () => { const decoded: unknown = JSON.parse( '{"__proto__":{"x":1},"a":[{"__proto__":2,"b":3}]}', diff --git a/src/domain/propertyListKeys.ts b/src/domain/propertyListKeys.ts index bd09fd44b..c2192f00b 100644 --- a/src/domain/propertyListKeys.ts +++ b/src/domain/propertyListKeys.ts @@ -75,8 +75,11 @@ const decodeXmlText = (text: string): string => export const parseXmlPropertyList = ( text: string, ): PropertyListWithoutPrototypeKeys => { + // The decoded text holds every key the decoder can produce, including + // entity-encoded spellings of the placeholder, so no source key aliases it. + const decoded = decodeXmlText(text); let placeholder = "__rea_prototype_key__"; - while (text.includes(placeholder)) placeholder = `_${placeholder}`; + while (decoded.includes(placeholder)) placeholder = `_${placeholder}`; const substituted = text.replace( KEY_TOKEN, (token, plain?: string, cdata?: string) => diff --git a/src/native/NativeMacOSProvider.ts b/src/native/NativeMacOSProvider.ts index 78d0b2bb7..7d365151d 100644 --- a/src/native/NativeMacOSProvider.ts +++ b/src/native/NativeMacOSProvider.ts @@ -34,7 +34,10 @@ import { BinaryTargetError } from "../domain/configurationErrors.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; import { AnalysisError } from "../domain/analysisErrorBase.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; -import { parseXmlPropertyList } from "../domain/propertyListKeys.js"; +import { + omittedPrototypeKeysLimitation, + parseXmlPropertyList, +} from "../domain/propertyListKeys.js"; import { demangleSwiftSchema, inspectPlistSchema, @@ -333,7 +336,14 @@ class NativeMacOSClient implements AnalysisClient { // Entitlements XML is printed to stdout; stderr echoes the path. const entitlementValue = parseEntitlements(entitlements.value.stdout); const captures = [display.value, requirements.value, entitlements.value]; - const limitations = [...parsed.limitations]; + const limitations = [ + ...parsed.limitations, + ...(entitlementValue.omittedPrototypeKeys === 0 + ? [] + : [ + `Entitlements: ${omittedPrototypeKeysLimitation(entitlementValue.omittedPrototypeKeys)}`, + ]), + ]; const mixedSigning = !unsigned && (isNonzeroUnsignedObservation(requirements.value) || @@ -355,7 +365,7 @@ class NativeMacOSClient implements AnalysisClient { const result = inspectSignatureSchema.parse({ ...parsed, designated_requirement: requirementText, - entitlements: entitlementValue, + entitlements: entitlementValue.value, provenance, limitations, }); @@ -640,13 +650,16 @@ const invocation = ( stderr_bytes: capture.stderrBytes, }); -const parseEntitlements = (output: string): JsonValue | null => { +const parseEntitlements = ( + output: string, +): { readonly value: JsonValue; readonly omittedPrototypeKeys: number } => { const start = output.indexOf(""); - if (start < 0 || end < start) return null; - return jsonValueSchema.parse( - parseXmlPropertyList(output.slice(start, end + "".length)).value, + if (start < 0 || end < start) return { value: null, omittedPrototypeKeys: 0 }; + const { value, omittedPrototypeKeys } = parseXmlPropertyList( + output.slice(start, end + "".length), ); + return { value: jsonValueSchema.parse(value), omittedPrototypeKeys }; }; /** diff --git a/tests/boundary/filesystem/interfaceBuilderBundle.test.ts b/tests/boundary/filesystem/interfaceBuilderBundle.test.ts index 77c8ef7aa..01e14f262 100644 --- a/tests/boundary/filesystem/interfaceBuilderBundle.test.ts +++ b/tests/boundary/filesystem/interfaceBuilderBundle.test.ts @@ -111,6 +111,34 @@ describe("bounded Interface Builder archive decoding", () => { expect(result.graph.truncated).toBe(true); }); + it("marks archive decoding partial when __proto__ entries are omitted", async () => { + const root = await createTestTempDirectory("rea-ib-test-"); + const bundle = join(root, "Example.app"); + const resources = join(bundle, "Contents", "Resources"); + await mkdir(resources, { recursive: true }); + await writeFile( + join(resources, "Prototype.nib"), + '$archiverNSKeyedArchiver__proto__hidden$objects$null$top', + ); + + const result = await analyzeInterfaceBuilderBundle({ + bundlePath: bundle, + targetSha256: "f".repeat(64), + }); + + expect(result.graph.coverage).toContainEqual( + expect.objectContaining({ + facet: "archive_decode", + status: "partial", + reason: "dictionary_entries_omitted", + }), + ); + expect(result.graph.truncated).toBe(true); + expect(result.limitations).toContain( + "Contents/Resources/Prototype.nib: 1 dictionary entry keyed __proto__ was omitted because REA results cannot represent that key.", + ); + }); + it.skipIf(process.platform !== "darwin" || !existsSync("/usr/bin/ibtool"))( "decodes an Xcode-compiled storyboard NIB and recovers its UI routes", async () => { diff --git a/tests/boundary/providers/native/nativeProvider.test.ts b/tests/boundary/providers/native/nativeProvider.test.ts index 53027135a..fd265d048 100644 --- a/tests/boundary/providers/native/nativeProvider.test.ts +++ b/tests/boundary/providers/native/nativeProvider.test.ts @@ -278,6 +278,41 @@ describe("native macOS provider inspection", () => { }); }); +/** Emit entitlements whose dictionary also holds a legal `__proto__` key. */ +class PrototypeEntitlementsRunner extends FixtureRunner { + override async run(tool: string, arguments_: readonly string[]) { + const result = await super.run(tool, arguments_); + if (!result.ok || !arguments_.includes("--entitlements")) return result; + const stdout = + 'com.apple.security.app-sandbox__proto__com.apple.security.get-task-allow'; + return ok({ + ...result.value, + stdout, + stdoutBytes: Buffer.byteLength(stdout), + }); + } +} + +describe("native signature entitlements", () => { + it("reports entitlement entries keyed __proto__ that the result omits", async () => { + const client = new NativeMacOSProvider( + new PrototypeEntitlementsRunner(), + "darwin", + ).createClient(machoTarget("/private/fixture")); + + const signature = await client.execute("inspect_signature", {}); + + expect(signature.ok).toBe(true); + if (!signature.ok) return; + expect(signature.value.result).toMatchObject({ + entitlements: { "com.apple.security.app-sandbox": true }, + }); + expect(signature.value.limitations).toContain( + "Entitlements: 1 dictionary entry keyed __proto__ was omitted because REA results cannot represent that key.", + ); + }); +}); + describe("native dispatch metadata error results", () => { it("preserves tagged cancellation and integrity failures", async () => { directory = await createTestTempDirectory("rea-dispatch-errors-"); From 5afd8a850b2ebd62e3400a5e2ece1a1cfa98bab6 Mon Sep 17 00:00:00 2001 From: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Date: Wed, 7 Oct 2026 08:12:59 +0000 Subject: [PATCH 4/9] fix(plist): keep character references beyond Unicode literal Reserving the __proto__ placeholder decodes the whole document, so or a comment with an out-of-range reference threw a RangeError, and every XML plist reader failed on a valid document. References beyond U+10FFFF now stay as written. The XML decoder still rejects them outside comments and CDATA. Co-Authored-By: Claude Opus 5.5 --- src/domain/propertyListKeys.test.ts | 10 ++++++++++ src/domain/propertyListKeys.ts | 17 ++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/domain/propertyListKeys.test.ts b/src/domain/propertyListKeys.test.ts index 759c3e454..e15fcb27e 100644 --- a/src/domain/propertyListKeys.test.ts +++ b/src/domain/propertyListKeys.test.ts @@ -49,6 +49,16 @@ it("keeps an entity-encoded key that decodes to the placeholder", () => { }); }); +it("keeps entity-like text beyond Unicode in comments and CDATA", () => { + const text = plist( + "raw__proto__x", + ); + expect(parseXmlPropertyList(text)).toEqual({ + value: { raw: "�" }, + omittedPrototypeKeys: 1, + }); +}); + it("omits own __proto__ entries that JSON decoding creates", () => { const decoded: unknown = JSON.parse( '{"__proto__":{"x":1},"a":[{"__proto__":2,"b":3}]}', diff --git a/src/domain/propertyListKeys.ts b/src/domain/propertyListKeys.ts index c2192f00b..0007e1e5e 100644 --- a/src/domain/propertyListKeys.ts +++ b/src/domain/propertyListKeys.ts @@ -56,13 +56,23 @@ const XML_ENTITIES: Readonly> = { quot: '"', }; +/** + * Expand XML character and predefined entity references. A reference beyond + * Unicode stays as written: comments and CDATA may hold such text literally, + * and the XML decoder rejects it anywhere else. + */ const decodeXmlText = (text: string): string => text.replace( /&(?:#x([\da-f]+)|#(\d+)|([a-z]+));/giu, (entity, hex?: string, decimal?: string, name?: string) => { - if (hex !== undefined) return String.fromCodePoint(parseInt(hex, 16)); - if (decimal !== undefined) - return String.fromCodePoint(parseInt(decimal, 10)); + const codePoint = + hex !== undefined + ? parseInt(hex, 16) + : decimal !== undefined + ? parseInt(decimal, 10) + : undefined; + if (codePoint !== undefined) + return codePoint <= 0x10ffff ? String.fromCodePoint(codePoint) : entity; return (name === undefined ? undefined : XML_ENTITIES[name]) ?? entity; }, ); @@ -77,6 +87,7 @@ export const parseXmlPropertyList = ( ): PropertyListWithoutPrototypeKeys => { // The decoded text holds every key the decoder can produce, including // entity-encoded spellings of the placeholder, so no source key aliases it. + // Decoding comment or CDATA text too can only lengthen the placeholder. const decoded = decodeXmlText(text); let placeholder = "__rea_prototype_key__"; while (decoded.includes(placeholder)) placeholder = `_${placeholder}`; From c78fe6990bcface6853ac5c11c90df6bc0df562d Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Wed, 7 Oct 2026 16:57:39 +0800 Subject: [PATCH 5/9] docs: publish VitePress documentation on GitHub Pages --- .github/workflows/pages.yml | 63 + .gitignore | 1 + CONTRIBUTING.md | 16 + README.md | 2 +- docs/.vitepress/config.ts | 83 + ...rovider-selection-and-analysis-profiles.md | 12 +- docs/android-analysis.md | 2 +- docs/firmware-analysis.md | 2 +- docs/index.md | 46 + docs/installation.md | 4 +- docs/managed-code-analysis.md | 2 +- docs/native-investigation.md | 4 +- docs/windows-ghidra-p0.md | 2 +- knip.json | 3 + package-lock.json | 2580 ++++++++++++++++- package.json | 9 + tsconfig.json | 7 +- 17 files changed, 2817 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/pages.yml create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/index.md diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 000000000..dde66fcf4 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,63 @@ +name: Documentation site + +on: + push: + branches: [main] + paths: + - "docs/**" + - "package.json" + - "package-lock.json" + - ".nvmrc" + - ".github/workflows/pages.yml" + pull_request: + branches: [main] + paths: + - "docs/**" + - "package.json" + - "package-lock.json" + - ".nvmrc" + - ".github/workflows/pages.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: pages-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +env: + HUSKY: "0" + +jobs: + build: + name: Build documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: npm + - run: npm ci + - run: npm run docs:build + - uses: actions/upload-pages-artifact@v4 + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + with: + path: docs/.vitepress/dist + + deploy: + name: Publish documentation + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + needs: build + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/configure-pages@v5 + - uses: actions/deploy-pages@v4 + id: deployment diff --git a/.gitignore b/.gitignore index 8396bc653..e699d15fd 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ coverage/ test-results.xml .turbo/ .cache/ +docs/.vitepress/cache/ # OS .DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 731cd2cdc..07b182bd2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,6 +26,22 @@ worktrees. After a package, lockfile, or managed-skill version change, run Keep dependencies flowing inward through the existing domain, contracts, provider, application, server, and adapter layers. Parse unknown values at process and protocol boundaries, model expected failures with `Result`, and preserve the canonical tool inventory defined by `TOOL_CONTRACTS` unless a deliberate contract change updates every verifier, generated catalog artifact, and snapshot. Keep tool discovery complete and report capability- and session-scoped availability through `binary_session`. +## Documentation website + +The VitePress site uses the Markdown files in `docs/` and deploys to +. Run `npm run docs:dev` for live editing, +`npm run docs:build` to check the production build and links, and +`npm run docs:preview` to preview that build at `/rea/`. + +Site navigation lives in `docs/.vitepress/config.ts`. Keep links to guides +relative so they work on GitHub and the website; link to repository files +outside `docs/` using their full GitHub URLs. Generated reference documents +still use `npm run docs:generate`; `docs:build` only builds the website. + +The documentation workflow builds pull requests and deploys changes on `main`. +The repository's **Settings → Pages → Build and deployment → Source** must be +set to **GitHub Actions** before the first deployment. + ## Development feedback and PR verification For an ordinary edit, run the relevant regression and cached static checks: diff --git a/README.md b/README.md index 97936ae5b..2bf765f54 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ morluto%2Frea | Trendshift -[Quick start](#quick-start) · [Current status](#current-status) · [Investigation model](#the-investigation-model) · [Tool catalog](#tool-catalog-for-investigation) · [Roadmap](#roadmap) · [How it works](#how-it-works) +[Documentation](https://morluto.github.io/rea/) · [Quick start](#quick-start) · [Current status](#current-status) · [Investigation model](#the-investigation-model) · [Tool catalog](#tool-catalog-for-investigation) · [Roadmap](#roadmap) · [How it works](#how-it-works) npx rea-agents setup diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 000000000..8d25bfc85 --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,83 @@ +import { defineConfig } from "vitepress"; + +export default defineConfig({ + title: "REA", + description: + "Reverse engineer binaries, applications, and runtime behavior with one CLI and MCP server.", + lang: "en-US", + base: "/rea/", + themeConfig: { + nav: [ + { text: "Get started", link: "/installation" }, + { text: "Reference", link: "/mcp-contracts" }, + { text: "Roadmap", link: "/roadmap" }, + ], + sidebar: [ + { + text: "Getting started", + items: [ + { text: "Installation and setup", link: "/installation" }, + { text: "Agent prompts", link: "/mcp-prompts" }, + { text: "Roadmap", link: "/roadmap" }, + ], + }, + { + text: "Investigation guides", + items: [ + { text: "Native binaries", link: "/native-investigation" }, + { + text: "JavaScript and Electron", + link: "/javascript-artifact-reconstruction", + }, + { + text: "JavaScript workflows", + link: "/javascript-application-workflows", + }, + { text: "Browser observation", link: "/browser-observation" }, + { text: "Electron observation", link: "/electron-observation" }, + { text: "Process capture", link: "/process-capture" }, + { text: ".NET assemblies", link: "/managed-code-analysis" }, + { text: "Android applications", link: "/android-analysis" }, + { text: "Apple applications", link: "/apple-application-analysis" }, + { text: "Firmware", link: "/firmware-analysis" }, + { + text: "Reconstruction readiness", + link: "/reconstruction-readiness", + }, + ], + }, + { + text: "Provider guides", + collapsed: true, + items: [ + { text: "IDA", link: "/ida-provider" }, + { text: "Ghidra on Windows", link: "/windows-ghidra-p0" }, + { text: "Ghidra DOS analysis", link: "/ghidra-dos" }, + { text: "Ghidra NativeAOT", link: "/ghidra-nativeaot" }, + { text: "Provider evaluation", link: "/provider-evaluation" }, + ], + }, + { + text: "Reference and development", + collapsed: true, + items: [ + { text: "MCP contracts", link: "/mcp-contracts" }, + { text: "Tool design", link: "/tool-design" }, + { text: "Testing", link: "/testing" }, + { text: "Architecture decisions", link: "/adr/README" }, + ], + }, + ], + search: { provider: "local" }, + socialLinks: [ + { icon: "github", link: "https://github.com/morluto/rea" }, + { icon: "discord", link: "https://discord.gg/GkcryMnJDM" }, + ], + editLink: { + pattern: "https://github.com/morluto/rea/edit/main/docs/:path", + }, + footer: { + message: "Released under the MIT License.", + }, + }, +}); diff --git a/docs/adr/0001-provider-selection-and-analysis-profiles.md b/docs/adr/0001-provider-selection-and-analysis-profiles.md index 9430f1d8e..dfcc7f86a 100644 --- a/docs/adr/0001-provider-selection-and-analysis-profiles.md +++ b/docs/adr/0001-provider-selection-and-analysis-profiles.md @@ -29,12 +29,12 @@ same bytes could therefore disagree because of language, compiler, loader, analyzer, or provider-version differences while appearing target-compatible. The decision addressed the earlier representations of -[`CompositeProvider`](../../src/application/binary/CompositeProvider.ts), -[runtime composition](../../src/application/runtime.ts), -[`BinarySession`](../../src/application/binary/BinarySession.ts), -[`BinaryTarget`](../../src/domain/binaryTarget.ts), -[analysis snapshot](../../src/domain/analysisSnapshot.ts), and -[session lifecycle inputs](../../src/contracts/sessionLifecycleInputs.ts). +[`CompositeProvider`](https://github.com/morluto/rea/blob/main/src/application/binary/CompositeProvider.ts), +[runtime composition](https://github.com/morluto/rea/blob/main/src/application/runtime.ts), +[`BinarySession`](https://github.com/morluto/rea/blob/main/src/application/binary/BinarySession.ts), +[`BinaryTarget`](https://github.com/morluto/rea/blob/main/src/domain/binaryTarget.ts), +[analysis snapshot](https://github.com/morluto/rea/blob/main/src/domain/analysisSnapshot.ts), and +[session lifecycle inputs](https://github.com/morluto/rea/blob/main/src/contracts/sessionLifecycleInputs.ts). The next deep provider must not weaken the existing product invariants: diff --git a/docs/android-analysis.md b/docs/android-analysis.md index 5092b5245..a1f6d27a9 100644 --- a/docs/android-analysis.md +++ b/docs/android-analysis.md @@ -2,7 +2,7 @@ REA wraps an existing headless JADX engine through `src/android/`. Its source is kept as an unmodified, commit-pinned Git submodule; see -[upstream provenance](../third_party/README.md). CLI and MCP use the same +[upstream provenance](https://github.com/morluto/rea/blob/main/third_party/README.md). CLI and MCP use the same application workflow and return artifact-bound Evidence inline. This family is present on repository main and in npm 4.1.0. Check the diff --git a/docs/firmware-analysis.md b/docs/firmware-analysis.md index b585affd8..1796ef43a 100644 --- a/docs/firmware-analysis.md +++ b/docs/firmware-analysis.md @@ -38,7 +38,7 @@ git submodule update --init third_party/binwalk third_party/unblob ``` Normal REA builds and npm packages do not include or build these sources or -engine binaries. See [upstream provenance](../third_party/README.md). +engine binaries. See [upstream provenance](https://github.com/morluto/rea/blob/main/third_party/README.md). ## CLI and MCP diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..42ae8f680 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,46 @@ +--- +layout: home + +hero: + name: REA + text: Reverse Engineer Anything + tagline: Understand binaries, applications, and runtime behavior with one CLI and MCP server. + actions: + - theme: brand + text: Get started + link: /installation + - theme: alt + text: View on GitHub + link: https://github.com/morluto/rea + +features: + - title: Investigate with your agent + details: Connect REA to your coding agent, describe the app or feature you want to understand, and follow the evidence. + link: /mcp-prompts + - title: Inspect across formats + details: Explore native binaries, JavaScript and Electron apps, .NET assemblies, Android packages, firmware, and websites. + link: /installation + - title: Keep the evidence + details: Analysis runs locally and returns observations, limitations, and unknowns through the CLI and MCP. + link: /mcp-contracts +--- + +## Start with one command + +```bash +npx rea-agents setup +``` + +Choose your agent, review the planned changes, and approve setup. Native binary +analysis can use an existing Hopper, Ghidra, or IDA installation; static +JavaScript analysis needs no native analysis engine. + +For a first result from an extracted JavaScript application or ASAR: + +```bash +npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json +``` + +See [installation and setup](./installation.md) for requirements and configuration. + +![REA inspecting a native binary in Hopper](./assets/rea-hopper-analysis.png) diff --git a/docs/installation.md b/docs/installation.md index 231d7c22d..9caa72c65 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -90,7 +90,7 @@ npx skills add morluto/rea --skill reverse-engineer-anything This installs agent instructions and bundled references, not REA MCP registration or analysis engines. Follow the skill's -[conditional connection guide](../skills/reverse-engineer-anything/SKILL.md#connect-only-when-needed). +[conditional connection guide](https://github.com/morluto/rea/blob/main/skills/reverse-engineer-anything/SKILL.md#connect-only-when-needed). Working tools can be used immediately. If tools are missing, inspect the current client's registration with `doctor --client codex --json` (substitute its client ID), then plan repairs with `setup --client codex --dry-run --json`. Show and @@ -110,7 +110,7 @@ npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app -- It returns the complete Evidence record directly and requires no native engine. Provider failures in doctor do not prevent unrelated target-free tools. To check readiness for one task instead of auditing every integration, see -[Check readiness for the task at hand](../README.md#check-readiness-for-the-task-at-hand). +[Check readiness for the task at hand](https://github.com/morluto/rea/blob/main/README.md#check-readiness-for-the-task-at-hand). ## Supported agents diff --git a/docs/managed-code-analysis.md b/docs/managed-code-analysis.md index 13bdd7bfd..2b7cd745f 100644 --- a/docs/managed-code-analysis.md +++ b/docs/managed-code-analysis.md @@ -25,7 +25,7 @@ part of the current tool set. This guide describes the implementation and verification of [ADR-0003](adr/0003-managed-code-evidence-and-provider-boundary.md). The canonical -tool inventory is [`product-catalog.json`](product-catalog.json). +tool inventory is [`product-catalog.json`](https://github.com/morluto/rea/blob/main/docs/product-catalog.json). ## Shipped scope diff --git a/docs/native-investigation.md b/docs/native-investigation.md index 9fc7e6043..01aaa83c5 100644 --- a/docs/native-investigation.md +++ b/docs/native-investigation.md @@ -30,8 +30,8 @@ explicit limitation; architecture inventory locations remain available. connections and controller/class names. `verify:interface-builder` compiles a source-owned AppKit XIB with `ibtool`. Storyboards require an installed iOS platform; unsupported archive forms remain explicit. -- `inspect_native_dispatch_metadata` / `rea inspect-native-dispatch-metadata - ` prefers a validated macOS Mach-O byte reader. It decodes +- `inspect_native_dispatch_metadata` / + `rea inspect-native-dispatch-metadata ` prefers a validated macOS Mach-O byte reader. It decodes 64-bit little-endian Objective-C class/metaclass records, superclass pointers, absolute/relative method entries, ivar offsets/sizes/alignment and protocol declarations. It also decodes simple Swift conformances, static synchronous diff --git a/docs/windows-ghidra-p0.md b/docs/windows-ghidra-p0.md index 676107072..f837bae09 100644 --- a/docs/windows-ghidra-p0.md +++ b/docs/windows-ghidra-p0.md @@ -148,7 +148,7 @@ private runtime files; crash-time transactional deletion is not claimed. ## Verification -See [native controls](../native/windows/README.md) for the separate artifact +See [native controls](https://github.com/morluto/rea/blob/main/native/windows/README.md) for the separate artifact build lane and native boundary checks. Development tarballs without the built artifact report native controls unavailable; publishing requires the verified artifact and manifest. diff --git a/knip.json b/knip.json index c1b3d14b2..9ce07cf8e 100644 --- a/knip.json +++ b/knip.json @@ -2,6 +2,9 @@ "$schema": "./node_modules/knip/schema.json", "entry": ["src/main.ts", "src/cli.ts", "src/contracts/errorSchemas.ts"], "project": ["src/**/*.ts", "tests/**/*.ts", "scripts/**/*.mjs"], + "vitepress": { + "entry": ["docs/.vitepress/config.ts"] + }, "ignoreDependencies": ["electron", "esbuild", "webpack"], "ignoreExportsUsedInFile": true, "rules": { diff --git a/package-lock.json b/package-lock.json index 75bf41da3..f1c2520dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,7 @@ "oxlint": "1.87.0", "turbo": "2.11.7", "typescript": "7.0.2", + "vitepress": "1.6.4", "vitest": "5.0.3", "yaml": "2.9.0" }, @@ -64,6 +65,264 @@ "node": "^22.19.0 || ^24.11.0 || >=26.0.0" } }, + "node_modules/@algolia/abtesting": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.25.0.tgz", + "integrity": "sha512-rSTin9Uta23uaewYVQEp8XI9T3iA/zrg0/1G2vhf8oFFDxFL5vybnZ5IQwsVAg4JpKxPX4/WYNKdcfWrZymk7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.59.0.tgz", + "integrity": "sha512-bm2XN0hCSMYwStSsCBT0/PUB2BDxoyR1Lnub3c392HMEy9bi8PUSW8vR6zltVEKWG2t4PQFWMD5C07bmJxGgPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.59.0.tgz", + "integrity": "sha512-XOFPOTa69WuqHR6c5tMgnUUwwqQgNSzMpxmhrgA9KmxRf8WIqEa0cokHJvohk5CYb7CZx0xeSL6Bk2IUJ7Lv7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.59.0.tgz", + "integrity": "sha512-PC8ipLOYFKRTfIUY1J3FJxS6ryzWziaXmIX9/sNMoUR8L+XhF7hX2QAeUI87YVl5zujvlYTSOb+HAIqKXDjyHQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.59.0.tgz", + "integrity": "sha512-yFNcCMM5fHiyoR0HuxMrzy+VjDcmhFUZTm2IJ2DHwGsVH3B5SEob4zTmeEZ3j/AZqNnmrJOCKl/tJnBg7+84bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.59.0.tgz", + "integrity": "sha512-GYja6HkDt2VrQhWmB2cLx3Z5fDwI9no7q+xwCWcFrTPm5CLH9QZvK0XLO9co1FcNIDxxkMaP3AXM39/XcecEOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.59.0.tgz", + "integrity": "sha512-Wofg7bMpWh8N5qDDZs0wy6whc+KMmdNsxgrIGp9Ug2s1Bka0uq7AjyckdxReKPHLA0Q1qH8X/SNh0wn2t2X2Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.59.0.tgz", + "integrity": "sha512-fHnALZfbEnODczGk14Y/1YBRApp6UEpZUTexGcMUPzY7RDc7q4HN2Y6jh0KUG8Jo9B+q+wOoQEc3ziR0ErbuFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.59.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.59.0.tgz", + "integrity": "sha512-Fa38s1mHgoaLCT117sfJ6P78rtxUt93CYxBYpq1VOIcslaF+cH+1h5uikAPsKfxLnsuEDZHiBiaI6eNPTsQMRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.59.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.59.0.tgz", + "integrity": "sha512-NyNsRSqM2tF1MX7ZGw/j4rduoEJiQ5wfvbSo/CFVdEzYCjyxbGFRPOZyS/GETJG9rk1TdHOq8NZqKqk/u1fm4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.59.0.tgz", + "integrity": "sha512-nXBK2uygWtvbCOffMWqqfjjcEtp9enDKY5/2Pw/Hhw8VVaOyK2ThbGK04bNX/Le+qoK1VHYkodWGVTKfw0Otkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.59.0.tgz", + "integrity": "sha512-yb+4afX/zja8QwX0KmV4/ae2kyYkRknsE79CRusYS2U5D8qwn2wq0cn1x12f3tm3F3+5FgmDdbuGdQTuCLSKMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.59.0.tgz", + "integrity": "sha512-Lp52TmpA1QtNmdHzs505Xwf4tgII7RAapkDSF9AAtWIBETcGaTIaXci4Rd9nS6SdaWK1BWTSqAPp5wzh6UN3Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.59.0.tgz", + "integrity": "sha512-YYHLEs5rC6oRTFwT7bJaKBR9NSFzikeVHGAT1ffATmUQzR8XqyhHXjoieAUoR7fBU6I5cfy1FVeh5GoRgriuzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", @@ -154,6 +413,57 @@ "node": ">= 20.12.0" } }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, "node_modules/@electron/asar": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-4.2.0.tgz", @@ -237,6 +547,23 @@ "vitest": "^4.1.0 || ^5.0.0" } }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.99", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.99.tgz", + "integrity": "sha512-kouZhqvUoNdxEe+lZksbJJZMCZv4b4Ob62O1GW3fcpz/I0mVPzM+9/Qf/DUuv5ns8l6c46D8M/ubhJjjbLp9HQ==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -397,6 +724,26 @@ "node": ">=20" } }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.5.tgz", @@ -2044,6 +2391,395 @@ "license": "MIT", "peer": true }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.1.tgz", + "integrity": "sha512-QRU7UpoS9hd8Ij5I6fCVBxZ0UpdfAbZ5y7BWG5STFGMoM9jGzUP464yYAa3CzZxvG+jBwq1kI8L07xx0ReAdGA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.1.tgz", + "integrity": "sha512-ttQF6Rp4MrNy9/2AOPmHmMXbNE8kIlNPYoGC3ksid9tonleMQALfrhTFJiQxobBvXYKG5Wcc8VGcHWTHR0ik8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.1.tgz", + "integrity": "sha512-MvzZ+qbBi5jrafURHsASUF1qW/58tOJFt/gFVJo2znQWrKX4CSf/Lt/qGONtoA4yHsNL5QzgdXMuITZxAs62Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.1.tgz", + "integrity": "sha512-9uj1VBuiPK5ij/+g0mCK17X+V/4SbErvRQMXIQjZAtbl4VcUhv63RhPZsFSWHrCRkTd3FKDtaVTrtT0+8bIhhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.1.tgz", + "integrity": "sha512-FCoXm836IqcXWhWPRkqlLx3Hjnv9S7c8tg5MFwsgHB3aFCz1JjUy6b1ssrxEjEbqaHpnvRmNjUUHxsXuU85NYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.1.tgz", + "integrity": "sha512-Xa6Oxo86Ilx1hq1vNb69541NOuUyhGEH3Sc0g7eGkfsfRblWh4hAa4Lj2GWwZyfUVYL+Z4xK3TxhwIuZ3fNPLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.1.tgz", + "integrity": "sha512-Nkw7cVMu1yrczpzr42Mh1BZ5Ai5A4Fsz2Je/frbwHmazpQTJzP+qo7pNjdxHrxVj56ivKTJihNoN90OD1hGxBA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.1.tgz", + "integrity": "sha512-JONaLM9mZPXbSetxMzYG3496qoJuWvG2ERCTrrVptfw/Fwe4UzrQoEx/mYEeZCRv/Xz0RldOLFeqDfqmH75/Zg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.1.tgz", + "integrity": "sha512-OfimHma+prmdoobHI3tfYud2enQ2LXYaMu+iMUQH7IjJkykJ6qUmAs1M/scdQaEKRWysiKwTctsDa2LXvaO0xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.1.tgz", + "integrity": "sha512-X5fwh2HM8EHbgfFwpf4m2x2pG/AHdQ2aPDPk+JCDwV4DPeM8yxYmKG1vvm123JSc9gBSu8tu9NECA99wHPztsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.1.tgz", + "integrity": "sha512-8dp2TxKdjiX/4f7Da9gF7BR29hygxOQlHxKNa8qxJHoqZ13ytrogFTpMPhtVEFrgFu9MSOabAn006PeoygavjA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.1.tgz", + "integrity": "sha512-YuYDpRSZnU9qLf6sqyhiBdMRCw5ImECGLNqRjM2hZrJIEwAckameWkRJ3SUnn0oxSewZIib/4iLwyEXj40QqQQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.1.tgz", + "integrity": "sha512-gGj3v7YYkysy7IbfclMI4PDtHaa6YX4nU1D5NR1fyvXAGqM4TDk28ZWvrpOkkK92eoQRryAludWz6jNjsm77Qg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.1.tgz", + "integrity": "sha512-DTZVwvS94FUYpP0CjCfz2iT0XTmBfQGc/arx9IdwUbDImpe9h8dWuMT/oPUvcGiwLKMQoNmuFBx3AVajm+FNjA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.1.tgz", + "integrity": "sha512-NWnyiq2moc8iEHGyTjIFadJTy8VCvCU/rUBfor+3l30JOQKAifpmKdxX4ZxRRPSPE/rLhFpLADdzNjS3Ldctdw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.1.tgz", + "integrity": "sha512-yIz+7L37g7bVOGLaUQmGqiYADH262krL4dtf5zU6QGldPgOairLEgW1FTs5pP0UFkHq5uf2qxDttOFsVAX6kxg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.1.tgz", + "integrity": "sha512-sRK+GWovJZV6ijyV/k1Ft3FL5+4DscF5OYsJolTbhVTTLFxKOPVjS0wxUUHakvL0vRw/cbFxZNeZLfM/EzuQhA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.1.tgz", + "integrity": "sha512-T2C0NXqqD063yJdm8UGdcoudBATDODdphEXWS7rEoh0jOITfoEBv7LHfRBYVsy+pI7wwxgScoZpkFiQOf40ryQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.1.tgz", + "integrity": "sha512-05wl8uRZMkcobB6YZrzskr2SiM0VOdzlFw3bAxOjKKTt3M6o3O0X/hE/8xk15u8oQY17xUCdTKcNMMg45ZAFog==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.1.tgz", + "integrity": "sha512-NoRZK1VclOgn9x3b9vPJ3sTxwvQ/F+Hf93xurRKSFJKiwNZyQZnLxVpqlCejhDvesMLMF8VNN+Y4jHTFddV/Xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.1.tgz", + "integrity": "sha512-SDkX4OkZBePUPf0/XsXVJLwS+O61CmkDKuIyk5CeWddK3vkE8AZjmWK+p1ILRez4wnbS5rTK+U9YmcbRyx2dHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.1.tgz", + "integrity": "sha512-JQ7el/Plr3juYFxIVu9YXDPNl57XR2L8WIc87JX9wj0L3goV8fXQPQXb3DaHVXq61X/WCGWsTCQsQHo6/Mz5UQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.1.tgz", + "integrity": "sha512-oZSlQ2H3ZDOz3ce1jEyuOZKuD0tPY/D2cKGMcMl0jhHQauBvkHHKAGR1OeRiMluvu3itzLRU2xCTUZptLayObA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.1.tgz", + "integrity": "sha512-Do2m3jUeVAvUDpee/yVZYRqhO8Ecx4x5sX3EVGalqLx+OxecLDGx3sIwPEm1Nq+MFK2FV3pgdpwWP4624b85Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.1.tgz", + "integrity": "sha512-KpxCwRn1Qh3tmBHAqIAF4HtUCVKqZd0w57TsItWblx3QVeJLtXaSgeBFAj1WAvBSpBo+Mh9iZCjj6YW/HaBVMw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@scalar/openapi-types": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.8.0.tgz", @@ -2053,6 +2789,93 @@ "node": ">=22" } }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@toon-format/toon": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@toon-format/toon/-/toon-2.3.1.tgz", @@ -2191,6 +3014,51 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz", + "integrity": "sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "26.6.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", @@ -2208,6 +3076,20 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/write-file-atomic": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-4.0.3.tgz", @@ -2568,6 +3450,13 @@ "node": ">=16.20.0" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", + "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@vitest/coverage-v8": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-5.0.3.tgz", @@ -2658,6 +3547,379 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vue/compiler-core": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz", + "integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.43", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz", + "integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz", + "integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.43", + "@vue/compiler-dom": "3.5.43", + "@vue/compiler-ssr": "3.5.43", + "@vue/shared": "3.5.43", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.28", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-sfc/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz", + "integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.10", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.10.tgz", + "integrity": "sha512-KxtEpUOOpFz/qOGRrAwA36QF7DqIA+FXgCYit9mk9wjbaZt0sXOFz81ElOZtKA4HbWHUdwNjZHBFsFFyp5BZiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.10" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.10", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.10.tgz", + "integrity": "sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.10", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.10", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.10.tgz", + "integrity": "sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.43.tgz", + "integrity": "sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.43.tgz", + "integrity": "sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.43.tgz", + "integrity": "sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.43", + "@vue/runtime-core": "3.5.43", + "@vue/shared": "3.5.43", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.43.tgz", + "integrity": "sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.43", + "@vue/runtime-dom": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz", + "integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.9.12", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.12.tgz", @@ -2722,6 +3984,32 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/algoliasearch": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.59.0.tgz", + "integrity": "sha512-wUXzaeI7B526W4y1gFg3lcxgDZ67XSgRJIiellYWOas/pLpO7rOtxm9Gr2E/C8aiSDXIgx1q5TdSsvK67Uakqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.25.0", + "@algolia/client-abtesting": "5.59.0", + "@algolia/client-analytics": "5.59.0", + "@algolia/client-common": "5.59.0", + "@algolia/client-insights": "5.59.0", + "@algolia/client-personalization": "5.59.0", + "@algolia/client-query-suggestions": "5.59.0", + "@algolia/client-search": "5.59.0", + "@algolia/ingestion": "1.59.0", + "@algolia/monitoring": "1.59.0", + "@algolia/recommend": "5.59.0", + "@algolia/requester-browser-xhr": "5.59.0", + "@algolia/requester-fetch": "5.59.0", + "@algolia/requester-node-http": "5.59.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ansi-escapes": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", @@ -2845,6 +4133,16 @@ ], "license": "MIT" }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/brace-expansion": { "version": "5.0.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", @@ -2940,6 +4238,17 @@ "node": ">=18" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", @@ -2950,6 +4259,28 @@ "node": ">=18" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/clean-git-ref": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", @@ -2996,6 +4327,17 @@ "dev": true, "license": "MIT" }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", @@ -3006,6 +4348,19 @@ "node": ">=20" } }, + "node_modules/copy-anything": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.1.5.tgz", + "integrity": "sha512-vePst2VLTSqPglW7Q98VwFpGiGpOHTyXIo81MO5VyLecA5zMbZw/P/V1vmwD1jksa2iJpn/YkDrJ3XhTfzUyhQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -3032,6 +4387,13 @@ "node": ">= 8" } }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -3064,6 +4426,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -3075,6 +4447,20 @@ "node": ">=8" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diff": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", @@ -3111,6 +4497,26 @@ "dev": true, "license": "MIT" }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/environment": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", @@ -3326,6 +4732,16 @@ } } }, + "node_modules/focus-trap": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", + "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.4.0" + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -3369,7 +4785,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -3526,6 +4941,62 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", @@ -4353,6 +5824,13 @@ "node": ">=6.9.0" } }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4362,6 +5840,122 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.3.tgz", + "integrity": "sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/mimic-function": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", @@ -4429,6 +6023,20 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", @@ -4441,7 +6049,6 @@ } ], "license": "MIT", - "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -4497,6 +6104,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, "node_modules/oxc-parser": { "version": "0.150.0", "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.150.0.tgz", @@ -4714,13 +6333,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.7", @@ -4844,7 +6469,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.19", "picocolors": "^1.1.1", @@ -4854,6 +6478,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.29.8", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz", + "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact-render-to-string": ">=5" + }, + "peerDependenciesMeta": { + "preact-render-to-string": { + "optional": true + } + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -4879,6 +6522,17 @@ ], "license": "MIT" }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/pure-rand": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.2.tgz", @@ -4924,6 +6578,33 @@ "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==", "license": "MIT" }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -5003,6 +6684,52 @@ "@rolldown/binding-win32-x64-msvc": "1.2.12" } }, + "node_modules/rollup": { + "version": "4.64.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.1.tgz", + "integrity": "sha512-7s4V+3J8ux75WNj9qwSJnrWmlCmZ2YHr2fojtHy5RiIMvhJv6DGe7HKKz7L6G1sq1Eg1fLC8SjYtAtDis1F4CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.64.1", + "@rollup/rollup-android-arm64": "4.64.1", + "@rollup/rollup-darwin-arm64": "4.64.1", + "@rollup/rollup-darwin-x64": "4.64.1", + "@rollup/rollup-freebsd-arm64": "4.64.1", + "@rollup/rollup-freebsd-x64": "4.64.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.64.1", + "@rollup/rollup-linux-arm-musleabihf": "4.64.1", + "@rollup/rollup-linux-arm64-gnu": "4.64.1", + "@rollup/rollup-linux-arm64-musl": "4.64.1", + "@rollup/rollup-linux-loong64-gnu": "4.64.1", + "@rollup/rollup-linux-loong64-musl": "4.64.1", + "@rollup/rollup-linux-ppc64-gnu": "4.64.1", + "@rollup/rollup-linux-ppc64-musl": "4.64.1", + "@rollup/rollup-linux-riscv64-gnu": "4.64.1", + "@rollup/rollup-linux-riscv64-musl": "4.64.1", + "@rollup/rollup-linux-s390x-gnu": "4.64.1", + "@rollup/rollup-linux-x64-gnu": "4.64.1", + "@rollup/rollup-linux-x64-musl": "4.64.1", + "@rollup/rollup-openbsd-x64": "4.64.1", + "@rollup/rollup-openharmony-arm64": "4.64.1", + "@rollup/rollup-win32-arm64-msvc": "4.64.1", + "@rollup/rollup-win32-ia32-msvc": "4.64.1", + "@rollup/rollup-win32-x64-gnu": "4.64.1", + "@rollup/rollup-win32-x64-msvc": "4.64.1", + "fsevents": "~2.3.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5032,6 +6759,14 @@ "node": ">=10" } }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", @@ -5102,6 +6837,23 @@ "node": ">=8" } }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -5213,6 +6965,27 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -5265,6 +7038,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", @@ -5294,6 +7082,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", + "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", + "dev": true, + "license": "MIT" + }, "node_modules/thread-stream": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz", @@ -5383,6 +7191,17 @@ "integrity": "sha512-NLdXTEZkKiO0gZuLtMoZKjCXTREXeZZt8nnnNeyoXtNZAfG/GKGSbQtLU5STspc0rMSwcA+UJfWZkbNU01iKmQ==", "license": "MIT" }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -5475,6 +7294,109 @@ "dev": true, "license": "MIT" }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz", @@ -5554,6 +7476,621 @@ } } }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vitepress/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitepress/node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/vitepress/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/vitepress/node_modules/vite": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.4.tgz", + "integrity": "sha512-xGjU/SyjeNyb0E4KxXBvYz/1C+3JXuujvf2hXNOtnlcE+58o5ajd9N2/n2VhkiJvpCP2qQasnUpx5PXNeI+p1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/vitest": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.3.tgz", @@ -5637,6 +8174,28 @@ } } }, + "node_modules/vue": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.43.tgz", + "integrity": "sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.43", + "@vue/compiler-sfc": "3.5.43", + "@vue/runtime-dom": "3.5.43", + "@vue/server-renderer": "3.5.43", + "@vue/shared": "3.5.43" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/walk-up-path": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", @@ -5804,6 +8363,17 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 5a566d523..706820230 100644 --- a/package.json +++ b/package.json @@ -159,6 +159,9 @@ "config:print": "node scripts/print-mcp-config.mjs", "evidence:generate": "npm run build:cached && node scripts/generate-completion-ledger.mjs", "evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs", "docs:generate": "node scripts/run-exclusive.mjs docs npm run docs:generate:unlocked", "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 && node scripts/generate-error-schema.mjs", "docs:check": "node scripts/run-exclusive.mjs docs turbo run docs:check:built", @@ -219,6 +222,11 @@ "ws": "8.21.0", "zod": "4.4.3" }, + "overrides": { + "vitepress": { + "vite": "6.4.4" + } + }, "devDependencies": { "@fast-check/vitest": "0.5.0", "@types/cross-spawn": "6.0.6", @@ -236,6 +244,7 @@ "oxlint": "1.87.0", "turbo": "2.11.7", "typescript": "7.0.2", + "vitepress": "1.6.4", "vitest": "5.0.3", "yaml": "2.9.0" } diff --git a/tsconfig.json b/tsconfig.json index 3b0d6c682..1648ac8d4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,11 @@ "types": ["node"], "verbatimModuleSyntax": true }, - "include": ["src/**/*.ts", "tests/**/*.ts", "vitest.config.ts"], + "include": [ + "src/**/*.ts", + "tests/**/*.ts", + "vitest.config.ts", + "docs/.vitepress/config.ts" + ], "exclude": ["dist", "node_modules"] } From e52fe9719fec03f2aa79b1a1b9e11b38c229903c Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:03:44 +0800 Subject: [PATCH 6/9] perf(call-path): prune dead ends and enumerate without recursion (#909) --- src/domain/callPath.test.ts | 99 ++++++++++++++++++++++++++++++ src/domain/callPath.ts | 116 ++++++++++++++++++++---------------- 2 files changed, 163 insertions(+), 52 deletions(-) diff --git a/src/domain/callPath.test.ts b/src/domain/callPath.test.ts index b10c053a9..433a1ac3a 100644 --- a/src/domain/callPath.test.ts +++ b/src/domain/callPath.test.ts @@ -130,7 +130,106 @@ describe("call path reconstruction", () => { "0x3000", ]); }); +}); +describe("call path topology and capacity", () => { + it("retains every shortest path through merging branches and cycles", () => { + const result = run([ + observe("0x1000", ["0x3000", "0x2000", "0x1000"]), + observe("0x2000", ["0x3000", "0x5000", "0x6000"]), + observe("0x3000", ["0x6000", "0x5000"]), + observe("0x5000", ["0x4000", "0x1000"]), + observe("0x6000", ["0x4000"]), + ]); + expect( + result.paths.map(({ nodes }) => nodes.map(({ address }) => address)), + ).toEqual([ + ["0x1000", "0x2000", "0x5000", "0x4000"], + ["0x1000", "0x2000", "0x6000", "0x4000"], + ["0x1000", "0x3000", "0x5000", "0x4000"], + ["0x1000", "0x3000", "0x6000", "0x4000"], + ]); + }); + + it("keeps uncovered dead ends in search limitations when a path is found", () => { + const result = run([ + observe("0x1000", ["0x2000", "0x5000"]), + observe("0x2000", ["0x4000"]), + ]); + expect(result).toMatchObject({ + status: "found", + shortest_hops: 2, + search_scope: { exhaustive: false }, + explored: { nodes: 4, edges: 3, depth_reached: 2 }, + }); + expect(result.limitations).toContain( + "No analyze_function Evidence covers reachable function 0x5000", + ); + }); + + it("returns a zero-hop path when start and goal are the same function", () => { + const result = run([observe("0x1000", ["0x2000"])], { + goal: { address: "0x1000" }, + }); + expect(result).toMatchObject({ + status: "found", + shortest_hops: 0, + search_scope: { exhaustive: true }, + }); + expect( + result.paths.map(({ nodes }) => nodes.map(({ address }) => address)), + ).toEqual([["0x1000"]]); + }); + + it("reconstructs a deep function chain without exhausting the call stack", () => { + const length = 20_000; + const address = (index: number) => `0x${index.toString(16)}`; + const functions = Array.from({ length }, (_, index) => + observe(address(index + 1), [address(index + 2)]), + ); + const result = run(functions, { + start: { address: address(1) }, + goal: { address: address(length + 1) }, + }); + expect(result).toMatchObject({ status: "found", shortest_hops: length }); + expect(result.paths).toHaveLength(1); + expect(result.paths[0]?.nodes).toHaveLength(length + 1); + expect(result.paths[0]?.edges).toHaveLength(length); + expect(result.paths[0]?.nodes.at(-1)?.address).toBe(address(length + 1)); + }); + + it("returns the sole shortest path alongside a deep merging dead-end graph", () => { + const stages = 28; + const address = (index: number) => `0x${index.toString(16)}`; + const functions = [observe("0x1", ["0x2", "0x1000"])]; + for (let index = 2; index < stages + 2; index += 1) + functions.push(observe(address(index), [address(index + 1)])); + for (let index = 0; index < stages; index += 1) { + const base = 0x1000 + index * 2; + const next = [address(base + 2), address(base + 3)]; + functions.push(observe(address(base), next)); + functions.push(observe(address(base + 1), next)); + } + functions.push(observe(address(0x1000 + stages * 2), [])); + functions.push(observe(address(0x1001 + stages * 2), [])); + const result = run(functions, { + start: { address: "0x1" }, + goal: { address: address(stages + 2) }, + }); + expect(result).toMatchObject({ + status: "found", + shortest_hops: stages + 1, + search_scope: { exhaustive: true }, + }); + expect( + result.paths.map(({ nodes }) => nodes.map(({ address }) => address)), + ).toEqual([ + Array.from({ length: stages + 2 }, (_, index) => address(index + 1)), + ]); + }); +}); + +describe("call path evidence admission", () => { it("normalizes hex addresses and rejects duplicates and mixed providers", () => { expect( run([observe("0x001000", [])], { diff --git a/src/domain/callPath.ts b/src/domain/callPath.ts index 0363eb2d7..0f31d69c8 100644 --- a/src/domain/callPath.ts +++ b/src/domain/callPath.ts @@ -17,15 +17,18 @@ export type { CallPathInput, CallPathResult }; /** Minimal directed caller-to-callee adjacency for call-path search. */ class CallGraph { private readonly successors = new Map>(); + private readonly predecessors = new Map>(); mergeNode(node: string): void { if (!this.successors.has(node)) this.successors.set(node, new Set()); + if (!this.predecessors.has(node)) this.predecessors.set(node, new Set()); } mergeDirectedEdge(source: string, target: string): void { this.mergeNode(source); this.mergeNode(target); this.successors.get(source)?.add(target); + this.predecessors.get(target)?.add(source); } hasNode(node: string): boolean { @@ -39,29 +42,31 @@ class CallGraph { outNeighbors(node: string): string[] { return [...(this.successors.get(node) ?? [])]; } + + inNeighbors(node: string): string[] { + return [...(this.predecessors.get(node) ?? [])]; + } } -/** Breadth-first shortest depth from start to goal, or null when unreachable. */ -const shortestPathDepth = ( +/** Shortest remaining distance for every node that can reach the goal. */ +const distancesToGoal = ( graph: CallGraph, - start: string, goal: string, -): number | null => { - if (start === goal) return 0; - const depth = new Map([[start, 0]]); - const queue = [start]; +): ReadonlyMap => { + if (!graph.hasNode(goal)) return new Map(); + const depth = new Map([[goal, 0]]); + const queue = [goal]; for (let index = 0; index < queue.length; index += 1) { const node = queue[index] ?? ""; const next = (depth.get(node) ?? 0) + 1; - for (const neighbor of graph.outNeighbors(node)) { - if (neighbor === goal) return next; + for (const neighbor of graph.inNeighbors(node)) { if (!depth.has(neighbor)) { depth.set(neighbor, next); queue.push(neighbor); } } } - return null; + return depth; }; interface SearchState { @@ -82,10 +87,8 @@ export const buildCallPath = (input: CallPathInput): CallPathResult => { start: parsed.start.address, goal: parsed.goal.address, }); - const shortestDepth = - graph.hasNode(parsed.start.address) && graph.hasNode(parsed.goal.address) - ? shortestPathDepth(graph, parsed.start.address, parsed.goal.address) - : null; + const goalDistances = distancesToGoal(graph, parsed.goal.address); + const shortestDepth = goalDistances.get(parsed.start.address) ?? null; const paths = shortestDepth === null ? [] @@ -93,7 +96,7 @@ export const buildCallPath = (input: CallPathInput): CallPathResult => { graph, start: parsed.start.address, goal: parsed.goal.address, - shortestDepth, + goalDistances, }).paths.map((path) => citePath(path, snapshots)); const shortestHops = paths[0]?.hops; const found = shortestHops !== undefined; @@ -135,7 +138,10 @@ const summarizeSearch = ( (count, node) => count + (graph.hasNode(node) ? graph.outDegree(node) : 0), 0, ), - depth_reached: Math.max(0, ...reached.values()), + depth_reached: [...reached.values()].reduce( + (maximum, depth) => Math.max(maximum, depth), + 0, + ), }); const prepareCallGraph = (input: CallPathInput) => { @@ -261,58 +267,64 @@ interface EnumerationInput { readonly graph: CallGraph; readonly start: string; readonly goal: string; - readonly shortestDepth: number; + readonly goalDistances: ReadonlyMap; } const enumeratePaths = ({ graph, start, goal, - shortestDepth, + goalDistances, }: EnumerationInput): { readonly paths: string[][]; } => { const output: string[][] = []; - const state: EnumerationState = { - graph, - goal, - path: [start], - visited: new Set([start]), - output, + const path = [start]; + const neighbors = new Map(); + const frame = (node: string): EnumerationFrame => { + let candidates = neighbors.get(node); + if (candidates === undefined) { + const distance = goalDistances.get(node); + candidates = graph + .outNeighbors(node) + .filter( + (neighbor) => + distance !== undefined && + goalDistances.get(neighbor) === distance - 1, + ) + .sort((left, right) => left.localeCompare(right)); + neighbors.set(node, candidates); + } + return { neighbors: candidates, nextIndex: 0 }; }; - enumerateAtDepth(state, shortestDepth); + const pending = [frame(start)]; + while (pending.length > 0) { + const current = pending.at(-1); + if (current === undefined) break; + if (path.at(-1) === goal) { + output.push([...path]); + pending.pop(); + path.pop(); + continue; + } + const neighbor = current.neighbors[current.nextIndex]; + if (neighbor === undefined) { + pending.pop(); + path.pop(); + continue; + } + current.nextIndex += 1; + path.push(neighbor); + pending.push(frame(neighbor)); + } return { paths: output }; }; -interface EnumerationState { - readonly graph: CallGraph; - readonly goal: string; - readonly path: string[]; - readonly visited: Set; - readonly output: string[][]; +interface EnumerationFrame { + readonly neighbors: readonly string[]; + nextIndex: number; } -const enumerateAtDepth = (state: EnumerationState, remaining: number): void => { - const { graph, goal, path, visited, output } = state; - const current = path.at(-1); - if (current === undefined) return; - if (remaining === 0) { - if (current === goal) output.push([...path]); - return; - } - if (current === goal) return; - for (const neighbor of graph - .outNeighbors(current) - .sort((left, right) => left.localeCompare(right))) { - if (visited.has(neighbor)) continue; - visited.add(neighbor); - path.push(neighbor); - enumerateAtDepth(state, remaining - 1); - path.pop(); - visited.delete(neighbor); - } -}; - const citePath = ( addresses: readonly string[], snapshots: ReadonlyMap, From df7151ba305eab3a33a9261a023705b29862b308 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:07:00 +0800 Subject: [PATCH 7/9] perf(providers): assemble fragmented responses once per line (#911) --- src/ghidra/GhidraResponseBuffer.test.ts | 49 ++++++++++++++++ src/ghidra/GhidraResponseBuffer.ts | 7 ++- src/hopper/HopperResponseStream.test.ts | 74 +++++++++++++++++++++++++ src/hopper/HopperResponseStream.ts | 7 ++- 4 files changed, 135 insertions(+), 2 deletions(-) diff --git a/src/ghidra/GhidraResponseBuffer.test.ts b/src/ghidra/GhidraResponseBuffer.test.ts index 931ca6846..ccae6d051 100644 --- a/src/ghidra/GhidraResponseBuffer.test.ts +++ b/src/ghidra/GhidraResponseBuffer.test.ts @@ -3,6 +3,55 @@ import { describe, expect, it } from "vitest"; import { GhidraResponseBuffer } from "./GhidraResponseBuffer.js"; describe("Ghidra response buffer", () => { + it("preserves fragmented lines, whitespace and a trailing partial response", () => { + const lines: string[] = []; + const buffer = new GhidraResponseBuffer({ + onLine: (line) => lines.push(line), + }); + buffer.push(' {"result":"雪'); + buffer.push('🦊"}\r'); + buffer.push('\n\n {"result":2}\n{"res'); + expect(lines).toEqual(['{"result":"雪🦊"}', '{"result":2}']); + buffer.push('ult":3}'); + expect(lines).toHaveLength(2); + buffer.push("\n"); + expect(lines).toEqual([ + '{"result":"雪🦊"}', + '{"result":2}', + '{"result":3}', + ]); + }); + + it("drops both pending fragments and remaining lines when reset during delivery", () => { + const lines: string[] = []; + const buffer = new GhidraResponseBuffer({ + onLine: (line) => { + lines.push(line); + buffer.reset(); + }, + }); + buffer.push("discarded partial"); + buffer.reset(); + buffer.push("first\nsecond\npartial"); + buffer.push("discarded"); + buffer.reset(); + buffer.push("next\n"); + expect(lines).toEqual(["first", "next"]); + }); + + it("accepts a large response arriving in many small socket fragments", () => { + const lines: string[] = []; + const buffer = new GhidraResponseBuffer({ + onLine: (line) => lines.push(line), + }); + const response = `{"result":"${"x".repeat(8 * 1024 * 1024)}"}`; + for (let offset = 0; offset < response.length; offset += 4096) + buffer.push(response.slice(offset, offset + 4096)); + expect(lines).toEqual([]); + buffer.push("\n"); + expect(lines).toEqual([response]); + }); + it("accepts complete responses larger than the former 64 MiB ceiling", () => { const lines: string[] = []; const buffer = new GhidraResponseBuffer({ diff --git a/src/ghidra/GhidraResponseBuffer.ts b/src/ghidra/GhidraResponseBuffer.ts index 6b35a4fc0..1d48c76db 100644 --- a/src/ghidra/GhidraResponseBuffer.ts +++ b/src/ghidra/GhidraResponseBuffer.ts @@ -7,6 +7,7 @@ export interface GhidraResponseBufferOptions { export class GhidraResponseBuffer { readonly #options: GhidraResponseBufferOptions; #buffer = ""; + #fragments: string[] = []; constructor(options: GhidraResponseBufferOptions) { this.#options = options; @@ -14,7 +15,10 @@ export class GhidraResponseBuffer { /** Consume one decoded socket chunk. */ push(chunk: string): void { - this.#buffer += chunk; + this.#fragments.push(chunk); + if (!chunk.includes("\n")) return; + this.#buffer += this.#fragments.join(""); + this.#fragments = []; let newline = this.#buffer.indexOf("\n"); while (newline >= 0) { const encodedLine = this.#buffer.slice(0, newline); @@ -28,5 +32,6 @@ export class GhidraResponseBuffer { /** Drop any incomplete line when a session closes. */ reset(): void { this.#buffer = ""; + this.#fragments = []; } } diff --git a/src/hopper/HopperResponseStream.test.ts b/src/hopper/HopperResponseStream.test.ts index 5b1983a8c..fe3bd7ab6 100644 --- a/src/hopper/HopperResponseStream.test.ts +++ b/src/hopper/HopperResponseStream.test.ts @@ -3,6 +3,80 @@ import { describe, expect, it } from "vitest"; import { HopperResponseStream } from "./HopperResponseStream.js"; describe("Hopper response stream", () => { + it("preserves fragmented messages and drops partial bytes on reset", () => { + const messages: unknown[] = []; + const stream = new HopperResponseStream({ + accept: (message) => { + messages.push(message); + return true; + }, + hasQueued: () => false, + nextRequestId: () => 4, + abort: (message) => { + throw new Error(message); + }, + }); + stream.push("discarded"); + stream.reset(); + stream.push(' {"id":1,"result":"雪'); + stream.push('🦊"}\r'); + stream.push('\n\n{"id":2,"result":null}\n{"id":'); + stream.push('3,"result":true}'); + expect(messages).toEqual([ + { id: 1, result: "雪🦊" }, + { id: 2, result: null }, + ]); + stream.push("\n"); + expect(messages).toEqual([ + { id: 1, result: "雪🦊" }, + { id: 2, result: null }, + { id: 3, result: true }, + ]); + }); + + it("stops delivering queued lines when validation aborts and resets the stream", () => { + const messages: unknown[] = []; + const failures: string[] = []; + const stream = new HopperResponseStream({ + accept: (message) => { + messages.push(message); + return true; + }, + hasQueued: () => false, + nextRequestId: () => 2, + abort: (message) => { + failures.push(message); + stream.reset(); + }, + }); + stream.push('malformed\n{"id":1,"result":true}\n'); + expect(messages).toEqual([]); + expect(failures).toHaveLength(1); + stream.push('{"id":1,"result":false}\n'); + expect(messages).toEqual([{ id: 1, result: false }]); + }); + + it("accepts a large response arriving in many small socket fragments", () => { + const messages: unknown[] = []; + const stream = new HopperResponseStream({ + accept: (message) => { + messages.push(message); + return true; + }, + hasQueued: () => false, + nextRequestId: () => 2, + abort: (message) => { + throw new Error(message); + }, + }); + const response = `{"id":1,"result":"${"x".repeat(8 * 1024 * 1024)}"}`; + for (let offset = 0; offset < response.length; offset += 4096) + stream.push(response.slice(offset, offset + 4096)); + expect(messages).toEqual([]); + stream.push("\n"); + expect(messages).toEqual([JSON.parse(response)]); + }); + it("accepts complete responses larger than the former 10 MiB ceiling", () => { const messages: unknown[] = []; const failures: string[] = []; diff --git a/src/hopper/HopperResponseStream.ts b/src/hopper/HopperResponseStream.ts index c4410580e..0f3c294ea 100644 --- a/src/hopper/HopperResponseStream.ts +++ b/src/hopper/HopperResponseStream.ts @@ -13,11 +13,15 @@ export interface HopperResponseStreamOptions { /** Incrementally validates Hopper NDJSON response frames. */ export class HopperResponseStream { #buffer = ""; + #fragments: string[] = []; constructor(readonly options: HopperResponseStreamOptions) {} push(chunk: string): void { - this.#buffer += chunk; + this.#fragments.push(chunk); + if (!chunk.includes("\n")) return; + this.#buffer += this.#fragments.join(""); + this.#fragments = []; let newline = this.#buffer.indexOf("\n"); while (newline >= 0) { const line = this.#buffer.slice(0, newline).trim(); @@ -29,6 +33,7 @@ export class HopperResponseStream { reset(): void { this.#buffer = ""; + this.#fragments = []; } #acceptLine(line: string): boolean { From 4e3953cc45ce9c21786a7a6fc495d2350aa85d24 Mon Sep 17 00:00:00 2001 From: ysopwnable <161784452+N0zoM1z0@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:11:06 +0800 Subject: [PATCH 8/9] feat(website): introduce REA and the DX-Ball reconstruction (#906) * feat(website): add local introduction and DX-Ball showcase * feat(website): illustrate REA and DX-Ball reconstruction Add two explanatory figures and an interactive comparison of recorded DX-Ball x86 instructions with maintained C. Preserve the full instruction listing, caller excerpt, constant reads, figure prompts and evidence provenance. Validation: Chrome preview at local root and /rea/; five comparison steps; 22 clipboard checks; keyboard navigation; responsive widths 1440, 768, 390 and 320. Verify assembly against saved REA Evidence and C against the pinned public source. Existing execution and compiler results are cited, not rerun. * docs(website): show the REA queries behind source recovery Present compact function, caller and byte-read request excerpts alongside recorded evidence. Keep the overview and case narrative focused on REA, with provider provenance in contributor notes. Replace raster references with maintained SVG source diagrams while retaining the established layout and image-generation prompts. Validation: local and /rea/ Chrome previews, five comparison steps, 22 clipboard checks, responsive widths and keyboard navigation passed. SVG XML and all 41 local links/assets passed checks. --- .github/workflows/website-pages.yml | 44 + website/README.md | 63 ++ website/evidence/dx-ball-sound-pan.md | 116 +++ website/figures.md | 99 ++ website/public/assets/favicon.svg | 1 + .../dx-ball-sound-pan-investigation.svg | 58 ++ .../assets/figures/rea-investigation-flow.svg | 43 + website/public/assets/main.js | 57 ++ website/public/assets/styles.css | 857 ++++++++++++++++++ website/public/get-started/index.html | 310 +++++++ website/public/index.html | 232 +++++ website/public/showcase/dx-ball/index.html | 607 +++++++++++++ 12 files changed, 2487 insertions(+) create mode 100644 .github/workflows/website-pages.yml create mode 100644 website/README.md create mode 100644 website/evidence/dx-ball-sound-pan.md create mode 100644 website/figures.md create mode 100644 website/public/assets/favicon.svg create mode 100644 website/public/assets/figures/dx-ball-sound-pan-investigation.svg create mode 100644 website/public/assets/figures/rea-investigation-flow.svg create mode 100644 website/public/assets/main.js create mode 100644 website/public/assets/styles.css create mode 100644 website/public/get-started/index.html create mode 100644 website/public/index.html create mode 100644 website/public/showcase/dx-ball/index.html diff --git a/.github/workflows/website-pages.yml b/.github/workflows/website-pages.yml new file mode 100644 index 000000000..3967a89e4 --- /dev/null +++ b/.github/workflows/website-pages.yml @@ -0,0 +1,44 @@ +name: Publish REA website + +on: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: website-pages + cancel-in-progress: false + +jobs: + prepare: + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + contents: read + pages: read + steps: + - name: Check out the repository + uses: actions/checkout@v4 + - name: Configure Pages + uses: actions/configure-pages@v5 + - name: Upload the website + uses: actions/upload-pages-artifact@v4 + with: + path: website/public + + deploy: + needs: prepare + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Publish to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/website/README.md b/website/README.md new file mode 100644 index 000000000..edb950181 --- /dev/null +++ b/website/README.md @@ -0,0 +1,63 @@ +# REA website + +An English static website with explanatory figures and a DX-Ball investigation. +The public files are in `website/public/`. The site uses HTML, CSS and a small +script for copying code and following the assembly-to-C comparison; it has no +build step or npm dependencies. + +## Local preview + +From the repository root: + +```sh +python3 -m http.server 4173 --bind 127.0.0.1 --directory website/public +``` + +Open . Refresh the browser after editing a file. + +## Pages + +- `public/index.html`: product introduction and DX-Ball overview. +- `public/showcase/dx-ball/index.html`: sound-pan investigation and project status. +- `public/get-started/index.html`: agent setup, first CLI result and provider guides. +- `public/assets/`: shared styles, interactions, favicon and explanatory figures. + +Navigation and assets use relative paths, so the same files work at the local +root and a GitHub Pages project path such as `/rea/`. + +## Content + +Keep the copy direct and specific. Explain the task and the result before listing +tool names. Setup commands and runtime requirements should match the released +package. + +DX-Ball figures and findings refer to the linked 7 October 2026 checkpoint, +commit `a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4`. Update those links and figures +together when moving to another checkpoint. Case-study source excerpts come +from the MIT-licensed DX-Ball reconstruction repository. + +The assembly excerpts were transcribed from the project's saved REA/Ghidra +Evidence. [evidence/dx-ball-sound-pan.md](evidence/dx-ball-sound-pan.md) records +their provenance and the scope of the validation claims. The original executable +and complete private Evidence records are not website assets. + +The diagrams are maintained as SVG source. Initial layout references were +created with the built-in image generation tool; [figures.md](figures.md) retains +their prompts and the current asset notes. Figures provide an overview; +REA requests, assembly and C remain selectable HTML text. On narrow +screens, the diagrams scroll horizontally and can also be opened at full size. + +## GitHub Pages + +`.github/workflows/website-pages.yml` prepares and deploys only `website/public`. +It is manually triggered and restricted to `main`; ordinary pushes and pull +requests do not publish the site. + +After the site is approved and merged, select **GitHub Actions** under the +repository's **Settings → Pages → Build and deployment**. Then run **Publish REA +website** from the Actions tab on `main`. The workflow uses the `github-pages` +environment and the official Pages actions. + +Local development does not change Pages settings or run the deployment workflow. +Any environment protection rules are configured separately when publication is +approved. diff --git a/website/evidence/dx-ball-sound-pan.md b/website/evidence/dx-ball-sound-pan.md new file mode 100644 index 000000000..60b7e0e61 --- /dev/null +++ b/website/evidence/dx-ball-sound-pan.md @@ -0,0 +1,116 @@ +# DX-Ball sound-pan evidence + +The website presents one function from the English DX-Ball 1.07 Windows i386 +executable. Project progress and validation claims are pinned to reconstruction +commit `a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4` (7 October 2026). + +## Artifact and provider + +- Target: `DXBALL.EXE`, 158,208 bytes, PE i386. +- SHA-256: `756da1ba09edce716d5bf8770320ca0d5ed4e525672b6bb605b9bdb4b88972ba`. +- Function: `0x406400` through `0x40643e`, inclusive, 63 bytes. +- Recorded analysis: REA 4.1.0, Ghidra 12.1.4, Linux x64 host. +- Pan dossier: `ev_ddca58134d89a2eb0aba5bf5694bb06ce7b5cb28aac0eb847891506244e70490`. +- Caller dossier: `ev_d09866ff22dc07f3ac28ef1d992c5876c1e58e1796dbe0f0c5c2814544aa27eb`. +- Constants read: `ev_6a56fda997bcda2df677257601da0174ff8041d44c8c83c48356df31edf0f7ae`. +- Scale read: `ev_64752f4ecf1ec74384ce01083c21fcfffb716931f6c31a7dac351a136df7979e`. + +The website update reused the matching saved REA results and verified the local +target digest. It did not start a new provider session or repeat the project's +execution/compiler checks. Complete dossiers, snapshots, the original +executable and compiler products remain in the reconstruction project. + +## Observations and interpretation + +| Saved observation | Interpretation used by the reconstruction | +| --------------------------------------------------------------------- | ------------------------------------------------- | +| Stack load from `[EBP+8]`, then `FILD` | An integer parameter, named `x` | +| Brick-hit caller multiplies its coordinate by 30, adds 20, pushes EAX | The input is a brick's horizontal screen position | +| `FMUL [0x420068]`; byte read decodes to 1.5625 | `pan = pan * 1.5625` | +| `FSUB [0x420070]`; byte read decodes to 500.0 | `pan = pan - 500.0` | +| `FMUL [0x4210a0]`; initial double is 1.0 | A stored scale, named `dxball_pan_scale` | +| Call to `__ftol` at 0x41678c | Convert the calculation to an integer | + +The names `dxball_screen_pan`, `x` and `dxball_pan_scale` belong to the maintained +source. The executable's instruction view supplies addresses and operations. +The original decompiler result reports `FUN_00406400(void)` and a conversion +call, omitting the stack input and x87 expression. The website's pseudocode +excerpt preserves that body and omits only its leading provider warning/comment +and blank lines. + +## Displayed REA requests + +The page shows the actual tool names with compact input excerpts: + +- `analyze_function` at procedure `0x406400` returns the pan dossier, including + its instruction view and the caller entry at `0x411f40`. +- `analyze_function` at procedure `0x411f40` returns the brick-hit dossier. + The visible caller excerpt preserves the ADD/PUSH/CALL instructions verbatim; + the full supporting excerpt also shows the preceding ×30 calculation. +- `read_bytes` at `0x420068`, length 16, returns + `000000000000f93f0000000000407f40`. +- `read_bytes` at `0x4210a0`, length 8, returns `000000000000f03f`. + +The page splits the first byte read into two eight-byte values and shows their +little-endian double interpretations beside the observed hex. These are decoded +values, not additional fields in the raw REA result. Query groups present the +reasoning sequence rather than reproducing an entire chronological session. +Provider details are recorded here; the product narrative uses REA to describe +the CLI/MCP operations the agent called. + +## Complete recorded instruction listing + +Transcribed verbatim from the pan dossier's normalized assembly facet: + +```asm +0x406400: PUSH EBP +0x406401: MOV EBP, ESP +0x406403: SUB ESP, 0xc +0x406406: PUSH EBX +0x406407: PUSH ESI +0x406408: PUSH EDI +0x406409: MOV EAX, dword ptr [EBP + 0x8] +0x40640c: MOV dword ptr [EBP + -0xc], EAX +0x40640f: FILD dword ptr [EBP + -0xc] +0x406412: FST double ptr [EBP + -0x8] +0x406415: FMUL double ptr [0x00420068] +0x40641b: FST double ptr [EBP + -0x8] +0x40641e: FSUB double ptr [0x00420070] +0x406424: FST double ptr [EBP + -0x8] +0x406427: FMUL double ptr [0x004210a0] +0x40642d: FST double ptr [EBP + -0x8] +0x406430: CALL 0x0041678c +0x406435: JMP 0x0040643a +0x40643a: POP EDI +0x40643b: POP ESI +0x40643c: POP EBX +0x40643d: LEAVE +0x40643e: RET +``` + +The interactive website excerpt selects eight instructions from this listing. +It omits setup/cleanup, intermediate `FST` stores and the epilogue jump to keep +the calculation visible. The expandable listing retains all 23 instructions. +Copying the C panel copies the complete maintained function, including its +signature, declaration and return. + +## Validation scope + +The reconstruction project's recorded checks establish: + +- 3,205 direct original-x86 differential cases: integer positions 0–640 at + scales 0, 0.5, 1, 20 and −1. +- 63 matching bytes for the complete VC4.0-compiled function, after applying + every reviewed relocation and checking referenced constants. + +These claims apply to this function at the linked checkpoint. The figure shows +execution comparison and compiler replay as separate branches. Game-level +integration remains a separate project task. + +## Public sources + +- [Gameplay observations and Evidence IDs](https://github.com/N0zoM1z0/dx-ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/GAMEPLAY_OWNER.md) +- [Maintained function](https://github.com/N0zoM1z0/dx-ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/src/gameplay.c#L41) +- [Semantic acceptance ledger](https://github.com/N0zoM1z0/dx-ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/config/semantic-acceptance.csv) +- [Complete function units and relocation mappings](https://github.com/N0zoM1z0/dx-ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/config/match-units.toml) +- [Compiler replay method](https://github.com/N0zoM1z0/dx-ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/BUILD_MATCHING.md) diff --git a/website/figures.md b/website/figures.md new file mode 100644 index 000000000..20bda270e --- /dev/null +++ b/website/figures.md @@ -0,0 +1,99 @@ +# REA website figures + +The published diagrams are SVG source assets: + +- `public/assets/figures/rea-investigation-flow.svg` — 1774 × 887 viewBox. +- `public/assets/figures/dx-ball-sound-pan-investigation.svg` — 1774 × 887 viewBox. + +Two original layout references were generated with the built-in image generation +tool and reviewed visually. Their prompts are retained below. The final SVGs +preserve the white background, charcoal/slate/blue palette and layout while +using REA as the reader-facing subject. Provider details remain in configuration +guides and the evidence provenance document. The SVGs keep text sharp when +zoomed and can be maintained without committing raster binaries. + +The REA figure shows the agent's question, inspection through REA, evidence and +follow-up work. The DX-Ball figure shows the ordered input/arithmetic evidence, +the maintained C and separate execution/compiler checks. Recorded tool requests, +instruction excerpts and decoded byte reads appear as HTML text in the case +study; source reconstruction is the agent's work informed by REA results. + +## Review + +Check spelling, arithmetic order, arrow directions and the separate verification +branches when changing these figures. Match progress claims to the pinned +reconstruction checkpoint. Validate the SVG as XML and inspect its browser +rendering at desktop and mobile widths. + +## Original image generation prompts + +## Prompt 1 + +Use case: scientific-educational +Asset type: project-bound raster diagram for the REA website, readable at 1080px display width. +Primary request: Make one exceptionally clear, publication-style flow figure explaining how an analyst and their agent use REA to investigate a local target. The reader should understand the roles and sequence in one glance. +Canvas: wide landscape 2:1 aspect ratio, approximately 2048 × 1024 pixels. Plain pure-white background. Generous clear outer margin. Flat vector-like graphic rendered as raster. +Style: restrained technical-paper figure. Crisp large sans-serif type. Charcoal #20252b text, slate #5b6570 secondary text, thin gray connecting lines, one muted blue #294f82 accent for REA and meaningful connections. No decorative illustration. + +Layout and exact labels: +A short title at the top left: "REA investigation flow". +Four clear evenly spaced stages along a single left-to-right horizontal baseline. Each stage has a prominent numbered heading, concise centered labels, and ample whitespace. Main connectors are right-pointing arrows between adjacent stages. +Stage 1: +"1. Ask" +"Your agent + local target" +"App / binary / browser" +Stage 2: +"2. Inspect & trace" +A large blue label "REA" +"CLI / MCP" +Stage 3: +"3. Read the evidence" +"Code / references / unknowns" +Stage 4: +"4. Use what you learn" +A large label "Your agent" +"Explain / implement / test" + +Below stage 2 only, put a supporting box and a thin vertical connector to REA. Box labels verbatim: +"Analysis tools" +"Ghidra / Hopper / IDA / other adapters" +It is a set of available adapters, not a requirement that all engines be used. Do not put this box under other stages. +Add exactly one subtle feedback arrow above the main row: from stage 4 back to stage 2, pointing into REA. Its label is "Follow-up question". Do not cross text. +Semantics: REA provides inspection and analysis evidence via CLI/MCP. The user's agent uses that evidence to explain, implement, or test. Never imply REA automatically clones a program. +Text: Render every supplied English label verbatim with correct spelling. Keep type large and dark enough to read when image is displayed at 1080px wide. Do not add additional captions, claims, legends, text, code, logos, icons, or numbers. +Avoid: screenshots, assembly or source code, watermarks, shadows, gradients, 3D, cute icons, bold marketing banners, ornate borders, dense text, tiny labels, decorative arrows. + +## Prompt 2 + +Use case: scientific-educational +Asset type: project-bound raster figure for a restrained REA technical case-study web page, readable at 1080px display width. +Primary request: Draw one accurate, instantly understandable publication-style diagram of the DX-Ball sound-pan function investigation. Show the original executable feeding REA/Ghidra analysis, the ordered arithmetic evidence, the maintained C reconstruction, and two separate verification checks. This concerns ONE FUNCTION, not the entire game. +Canvas: wide landscape 2:1 aspect ratio, approximately 2048 × 1024 pixels. Pure-white background, generous outer margins. Flat vector-like diagram rendered as raster. +Style: crisp large sans-serif, charcoal #20252b primary text, slate #5b6570 secondary text and thin outlines, one restrained blue #294f82 accent. Only boxes, simple lines, arrows and typography. No shadows, gradients, 3D, icons or screenshots. + +Composition: +At top left, a concise title "DX-Ball sound-pan investigation". +The main upper row proceeds from left to right across three clearly separated regions: a compact source box on the far left, a wide central analysis region, then a compact implementation box on the right. Use meaningful arrows connecting them. Reserve lower space for a caller input on the lower left and verification checks on the lower right, with no crossing connectors or cramped text. + +Exact labels and relationships: +SOURCE: box text "DXBALL.EXE" with "0x00406400" underneath. +Arrow from SOURCE into the first node of the central region. + +CENTRAL EVIDENCE REGION: heading "REA + Ghidra". +Five little arithmetic nodes in exactly this order, joined by right-pointing arrows: +"Stack input x" → "× 1.5625" → "− 500.0" → "× pan_scale" → "Integer return" +The last node connects to the maintained C box on the right. +The operations MUST remain in this order; these are arithmetic evidence labels, not source code. Use the true multiplication symbol × and minus symbol −, never a plus. +Put a supporting caller box below the first input, connected by a single arrow ONLY to "Stack input x". Its exact labels are "Brick-hit caller" and "20 + 30 × tile_x". This supplies the input position. Do not connect the caller to the multiplier or to later operations. + +IMPLEMENTATION REGION on the right: small heading "Reconstructed function" with prominent box text "Maintained C". +Below this output, draw a fork into TWO distinct verification boxes; both receive a connector from Maintained C, and neither receives a connector from the other check. These checks are independent branches, never a single serial validation. +First check labels verbatim: +"Original-x86 comparison" +"3,205 cases" +Second check labels verbatim: +"VC4.0 compiler replay" +"63 matching bytes" +Use enough horizontal space for clear check names and generous typography. A two-line label is fine where needed. + +Text constraints: render every supplied English label and number verbatim with correct spelling. No extra claims, no additional labels, no footnotes, no source code or assembly, no logos or watermarks. Keep all connectors complete and directed correctly. Large legible labels matter more than decorative density. Never say full reconstruction, exact game clone, all bytes, or automatic source recovery. diff --git a/website/public/assets/favicon.svg b/website/public/assets/favicon.svg new file mode 100644 index 000000000..78512ef98 --- /dev/null +++ b/website/public/assets/favicon.svg @@ -0,0 +1 @@ + diff --git a/website/public/assets/figures/dx-ball-sound-pan-investigation.svg b/website/public/assets/figures/dx-ball-sound-pan-investigation.svg new file mode 100644 index 000000000..103bd751b --- /dev/null +++ b/website/public/assets/figures/dx-ball-sound-pan-investigation.svg @@ -0,0 +1,58 @@ + + DX-Ball sound-pan investigation + REA provides the instruction, caller and byte-read evidence for one DX-Ball function. A stack input is multiplied by 1.5625, offset by 500, scaled, and converted to an integer. Maintained C is checked in 3,205 original-x86 cases and a separate 63-byte compiler replay. + + + + + + DX-Ball sound-pan investigation + + + + + + + + + + + + + + + + DXBALL.EXE + 0x00406400 + REA + Stack + input x + × 1.5625 + − 500.0 + × pan_scale + Integer + return + Reconstructed function + Maintained C + Brick-hit caller + 20 + 30 × tile_x + Original-x86 + comparison + 3,205 cases + VC4.0 compiler + replay + 63 matching bytes + + + + + + + + + + + + + + diff --git a/website/public/assets/figures/rea-investigation-flow.svg b/website/public/assets/figures/rea-investigation-flow.svg new file mode 100644 index 000000000..8bf59be66 --- /dev/null +++ b/website/public/assets/figures/rea-investigation-flow.svg @@ -0,0 +1,43 @@ + + REA investigation flow + Ask a question about a local target. REA inspects and traces through local analysis adapters, returns evidence, and supports follow-up questions as your agent explains, implements and tests. + + + + + + + REA investigation flow + + + + + + + + + 1. Ask + Your agent + local target + App / binary / browser + 2. Inspect & trace + REA + CLI / MCP + 3. Read the evidence + Code / references / + unknowns + 4. Use what you learn + Your agent + Explain / implement / test + Analysis tools + Local analysis adapters + Follow-up question + + + + + + + + + + diff --git a/website/public/assets/main.js b/website/public/assets/main.js new file mode 100644 index 000000000..45e6adc98 --- /dev/null +++ b/website/public/assets/main.js @@ -0,0 +1,57 @@ +function initializeCopyButtons() { + document.querySelectorAll("[data-copy]").forEach((button) => { + button.addEventListener("click", async () => { + const target = document.getElementById(button.getAttribute("data-copy")); + if (target === null) return; + + const status = document.getElementById("copy-status"); + try { + await navigator.clipboard.writeText(target.textContent.trim()); + button.textContent = "Copied"; + if (status !== null) status.textContent = "Code copied to clipboard."; + } catch { + const range = document.createRange(); + range.selectNodeContents(target); + const selection = window.getSelection(); + if (selection !== null) { + selection.removeAllRanges(); + selection.addRange(range); + } + button.textContent = "Selected"; + if (status !== null) + status.textContent = "Code selected. Use your keyboard to copy it."; + } + + window.setTimeout(() => { + button.textContent = "Copy"; + }, 2000); + }); + }); +} + +initializeCopyButtons(); + +function initializeStepComparisons() { + document.querySelectorAll("[data-step-comparison]").forEach((comparison) => { + const buttons = comparison.querySelectorAll("[data-select-step]"); + buttons.forEach((button) => { + button.addEventListener("click", () => { + const selected = button.getAttribute("data-select-step"); + buttons.forEach((candidate) => { + candidate.setAttribute("aria-pressed", String(candidate === button)); + }); + comparison.querySelectorAll("[data-step]").forEach((fragment) => { + fragment.classList.toggle( + "is-active", + fragment.getAttribute("data-step") === selected, + ); + }); + comparison.querySelectorAll("[data-step-note]").forEach((note) => { + note.hidden = note.getAttribute("data-step-note") !== selected; + }); + }); + }); + }); +} + +initializeStepComparisons(); diff --git a/website/public/assets/styles.css b/website/public/assets/styles.css new file mode 100644 index 000000000..fde289bf7 --- /dev/null +++ b/website/public/assets/styles.css @@ -0,0 +1,857 @@ +:root { + color-scheme: light; + --ink: #20252b; + --muted: #5b6570; + --line: #e0e5e9; + --soft: #f4f6f8; + --accent: #294f82; + --page: #ffffff; + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; + font-synthesis: none; + text-rendering: optimizeLegibility; +} + +* { + box-sizing: border-box; +} +body { + margin: 0; + background: var(--page); + color: var(--ink); + line-height: 1.65; +} +a { + color: var(--accent); + text-underline-offset: 0.2em; +} +a:hover { + text-decoration-thickness: 2px; +} +button, +input { + font: inherit; +} +button { + cursor: pointer; +} +::selection { + background: #dce8f6; +} +:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 5px; +} +code, +pre { + font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; +} +code { + font-size: 0.9em; + overflow-wrap: anywhere; +} +p { + margin: 0 0 1.2rem; +} +h1, +h2, +h3 { + line-height: 1.14; + font-weight: 650; + letter-spacing: -0.035em; +} +h1 { + margin: 0 0 1.5rem; + font-size: clamp(2.75rem, 6.5vw, 5.4rem); +} +h2 { + margin: 0 0 1.2rem; + font-size: clamp(1.75rem, 3vw, 2.4rem); +} +h3 { + margin: 0 0 0.65rem; + font-size: 1.2rem; + letter-spacing: -0.02em; +} +ul, +ol { + padding-left: 1.3rem; +} +li + li { + margin-top: 0.45rem; +} +section[id] { + scroll-margin-top: 2rem; +} +.container { + width: min(1080px, calc(100% - 3.5rem)); + margin-inline: auto; +} +.skip-link { + position: absolute; + left: 1rem; + top: -5rem; + padding: 0.6rem 1rem; + background: var(--ink); + color: white; + z-index: 10; +} +.skip-link:focus { + top: 0.75rem; +} +.site-header { + border-bottom: 1px solid var(--line); +} +.header-inner { + min-height: 88px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 2rem; +} +.brand { + display: flex; + align-items: baseline; + gap: 0.9rem; + color: var(--ink); + text-decoration: none; +} +.brand-name { + font-size: 1.45rem; + font-weight: 750; + letter-spacing: -0.065em; +} +.brand-caption { + color: var(--muted); + font-size: 0.875rem; +} +.navigation { + display: flex; + align-items: center; + gap: 1.8rem; + font-size: 0.9rem; +} +.navigation a { + color: var(--muted); + text-decoration: none; + white-space: nowrap; +} +.navigation a:hover, +.navigation a[aria-current="page"] { + color: var(--ink); +} +.navigation a[aria-current="page"] { + text-decoration: underline; +} +.navigation .nav-start { + color: var(--ink); +} +.eyebrow { + margin-bottom: 1.2rem; + font-size: 0.875rem; + color: var(--muted); +} +.hero { + padding-block: 5.8rem 4.6rem; +} +.hero h1 { + max-width: 900px; +} +.hero .lede { + max-width: 710px; +} +.lede { + font-size: 1.2rem; + color: var(--muted); + line-height: 1.7; +} +.actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 1.6rem; + margin-top: 2rem; +} +.button { + display: inline-flex; + justify-content: center; + align-items: center; + padding: 0.7rem 1.25rem; + border: 1px solid var(--ink); + border-radius: 5px; + background: var(--ink); + color: white; + font-size: 0.95rem; + font-weight: 500; + text-decoration: none; +} +.button:hover { + background: #38424e; + text-decoration: none; +} +.text-link { + font-size: 0.95rem; + font-weight: 500; +} +.hero-command { + max-width: 680px; + margin-top: 2.25rem; +} +.code-block { + margin-block: 1.3rem; + border: 1px solid var(--line); + border-radius: 5px; + overflow: hidden; + background: var(--soft); +} +.code-header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 1rem; + padding: 0.6rem 1rem; + border-bottom: 1px solid var(--line); + color: var(--muted); + font-size: 0.875rem; +} +.copy-button { + padding: 0.15rem 0.45rem; + color: var(--muted); + background: transparent; + border: 0; + border-radius: 3px; + font-size: 0.875rem; +} +.copy-button:hover { + background: #e5e9ee; + color: var(--ink); +} +pre { + margin: 0; + padding: 1.15rem; + overflow-x: auto; + font-size: 0.875rem; + line-height: 1.75; +} +pre code { + font-size: inherit; + overflow-wrap: normal; +} +.code-inline { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 0.95rem 1.1rem; +} +.code-inline code { + min-width: 0; + font-size: 0.875rem; +} +.section { + padding-block: 3.8rem; + border-top: 1px solid var(--line); +} +.section-heading { + max-width: 650px; + margin-bottom: 2rem; +} +.section-heading p { + color: var(--muted); +} +.feature-case { + display: grid; + grid-template-columns: 1.55fr 1fr; + gap: 4.5rem; + align-items: start; +} +.feature-case p { + max-width: 630px; + color: var(--muted); +} +.case-note { + font-size: 0.875rem; +} +.stats { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; +} +.stats dt { + font-size: 2rem; + font-weight: 600; + line-height: 1.2; + letter-spacing: -0.04em; +} +.stats dd { + margin: 0.5rem 0 0; + color: var(--muted); + font-size: 0.875rem; + line-height: 1.5; +} +.case-stats { + grid-template-columns: 1fr; + margin: 0; + padding-left: 2rem; + border-left: 1px solid var(--line); +} +.case-stats > div + div { + border-top: 1px solid var(--line); + padding-top: 1.1rem; +} +.case-stats dt { + font-size: 1.7rem; +} +.workflows { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 2.8rem; +} +.workflows p { + margin-bottom: 0.8rem; + color: var(--muted); +} +.workflows a { + font-size: 0.9rem; +} +.start-row { + display: flex; + justify-content: space-between; + align-items: center; + gap: 2rem; +} +.start-row h2 { + margin-bottom: 0.65rem; +} +.start-row p { + margin: 0; + color: var(--muted); +} +.site-footer { + margin-top: 1.5rem; + padding-block: 2rem; + border-top: 1px solid var(--line); + color: var(--muted); + font-size: 0.875rem; +} +.footer-inner { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 1rem 2rem; +} +.footer-inner p { + margin: 0; +} +.footer-links { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; +} +.footer-links a { + color: var(--muted); +} +.page-heading { + padding-block: 4.3rem 2.7rem; +} +.page-heading h1 { + max-width: 850px; + font-size: clamp(2.6rem, 5.5vw, 4.25rem); +} +.page-heading .lede { + max-width: 730px; +} +.breadcrumb { + margin-bottom: 2rem; + color: var(--muted); + font-size: 0.875rem; +} +.breadcrumb a { + color: var(--muted); +} +.page-meta { + color: var(--muted); + font-size: 0.875rem; +} +.article-layout { + display: grid; + grid-template-columns: 190px minmax(0, 1fr); + gap: 4rem; + padding-bottom: 3.5rem; +} +.contents { + align-self: start; + position: sticky; + top: 2rem; + padding-top: 2.4rem; + font-size: 0.875rem; +} +.contents p { + font-weight: 600; + color: var(--ink); + margin-bottom: 0.8rem; +} +.contents ul { + margin: 0; + padding: 0; + list-style: none; +} +.contents li + li { + margin-top: 0.75rem; +} +.contents a { + color: var(--muted); + text-decoration: none; +} +.contents a:hover { + color: var(--ink); + text-decoration: underline; +} +.article { + max-width: 760px; + min-width: 0; +} +.article-section { + padding-block: 2.4rem; + border-top: 1px solid var(--line); +} +.article-section h2 { + font-size: 1.8rem; +} +.article p, +.article li { + color: #414b55; +} +.article .stats { + margin: 0 0 1.6rem; +} +.article .stats dt { + color: var(--ink); +} +.article .stats dd { + color: var(--muted); +} +.caption { + font-size: 0.875rem; + color: var(--muted); +} +.explanatory-figure { + margin: 0; +} +.figure-viewport { + overflow-x: auto; + border: 1px solid var(--line); + border-radius: 5px; +} +.explanatory-figure img { + display: block; + width: 100%; + min-width: 880px; + height: auto; +} +.explanatory-figure figcaption { + max-width: 800px; + margin-top: 1rem; + color: var(--muted); + font-size: 0.875rem; +} +.explanatory-figure figcaption a { + white-space: nowrap; +} +.case-figure { + margin-bottom: 3.2rem; +} +.step-selector { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 0.5rem; + margin-block: 1.5rem 0.9rem; +} +.step-selector button { + padding: 0.55rem 0.3rem; + border: 1px solid var(--line); + border-radius: 4px; + background: var(--page); + color: var(--muted); + font-size: 0.85rem; +} +.step-selector button span { + font-size: 0.75rem; + margin-right: 0.3rem; + font-variant-numeric: tabular-nums; +} +.step-selector button[aria-pressed="true"] { + border-color: var(--accent); + background: #edf2f8; + color: var(--accent); +} +.code-comparison { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.9rem; +} +.code-comparison .code-block { + margin: 0; + min-width: 0; +} +.code-comparison .code-header { + padding-inline: 0.8rem; + font-size: 0.8rem; +} +.code-comparison pre { + padding: 1rem 0.8rem; + font-size: 0.75rem; + line-height: 1.95; + white-space: pre-wrap; + overflow-wrap: anywhere; +} +.step-comparison .is-active { + background: #dce8f6; + color: #173a67; + border-radius: 2px; + box-decoration-break: clone; + -webkit-box-decoration-break: clone; +} +.step-detail { + margin-block: 1.1rem; + padding-left: 1rem; + border-left: 2px solid var(--accent); +} +.step-detail p { + margin: 0; + font-size: 0.9rem; +} +.evidence-details { + margin-block: 1.5rem; +} +.evidence-details summary { + cursor: pointer; + color: var(--accent); + font-size: 0.95rem; +} +.evidence-details[open] summary { + margin-bottom: 1.2rem; +} +.evidence-details h3 { + margin-top: 1.5rem; + font-size: 1.1rem; +} +.evidence-table-wrap { + overflow-x: auto; + margin-block: 1rem; +} +.evidence-table { + width: 100%; + border-collapse: collapse; + font-size: 0.875rem; +} +.evidence-table caption { + text-align: left; + color: var(--muted); + margin-bottom: 0.6rem; +} +.evidence-table th, +.evidence-table td { + text-align: left; + padding: 0.6rem 0.7rem; + border-bottom: 1px solid var(--line); +} +.rea-queries { + margin-block: 1.5rem 1.8rem; + padding: 0; + list-style: none; + counter-reset: query; +} +.rea-queries li { + position: relative; + padding: 1.2rem 0 1.2rem 2.4rem; + border-top: 1px solid var(--line); + counter-increment: query; +} +.rea-queries li + li { + margin-top: 0; +} +.rea-queries li::before { + content: counter(query, decimal-leading-zero); + position: absolute; + top: 1.2rem; + left: 0; + color: var(--muted); + font-size: 0.875rem; +} +.rea-queries h4 { + margin: 0 0 0.6rem; + color: var(--ink); + font-size: 1.05rem; + font-weight: 600; + line-height: 1.4; +} +.rea-queries .query-call { + margin-bottom: 0.8rem; + color: var(--muted); + font-size: 0.875rem; +} +.rea-query-pair { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.9rem; + margin-block: 0.9rem; +} +.rea-query-pair .code-block { + margin: 0; + min-width: 0; +} +.rea-query-pair .code-header { + padding-inline: 0.8rem; + font-size: 0.75rem; +} +.rea-query-pair pre { + padding: 0.8rem; + font-size: 0.75rem; + line-height: 1.8; + white-space: pre-wrap; + overflow-wrap: anywhere; +} +.rea-queries p:last-child { + margin: 0; + font-size: 0.9rem; +} +.numbered-notes { + list-style: none; + padding: 0; + margin: 1.75rem 0 0; + counter-reset: note; +} +.numbered-notes li { + position: relative; + padding-left: 2.4rem; + counter-increment: note; +} +.numbered-notes li + li { + margin-top: 1.7rem; +} +.numbered-notes li::before { + content: counter(note, decimal-leading-zero); + position: absolute; + left: 0; + top: 0; + color: var(--muted); + font-size: 0.875rem; + font-variant-numeric: tabular-nums; +} +.numbered-notes h3 { + color: var(--ink); +} +.verification { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; + margin-top: 1.7rem; +} +.verification h3 { + font-size: 1.1rem; +} +.verification p { + margin: 0; +} +.reading-list { + list-style: none; + padding: 0; + margin-bottom: 0; +} +.reading-list li { + padding-block: 1rem; + border-top: 1px solid var(--line); +} +.reading-list span { + display: block; + color: var(--muted); + font-size: 0.875rem; + margin-top: 0.2rem; +} +.requirements { + margin-top: 1.5rem; + padding-bottom: 0.25rem; + font-size: 0.9rem; + color: var(--muted); +} +.prompt { + margin: 1.2rem 0; + padding: 1rem 1.2rem; + background: var(--soft); + border-left: 2px solid #97a6b7; +} +.prompt p { + margin: 0; +} +.provider-list { + margin-top: 1.5rem; +} +.provider { + display: grid; + grid-template-columns: 105px 1fr; + gap: 1.3rem; + padding-block: 1.2rem; + border-top: 1px solid var(--line); +} +.provider h3 { + font-size: 1rem; + margin-top: 0.2rem; +} +.provider p { + margin-bottom: 0.5rem; +} +.provider a { + font-size: 0.9rem; +} +.small-heading { + margin-top: 1.8rem; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; + border: 0; +} + +@media (max-width: 850px) { + .brand-caption { + display: none; + } + .feature-case { + gap: 2.4rem; + } + .workflows { + gap: 1.8rem; + } + .article-layout { + grid-template-columns: 150px minmax(0, 1fr); + gap: 2rem; + } + .code-comparison, + .rea-query-pair { + grid-template-columns: 1fr; + } +} + +@media (max-width: 640px) { + .container { + width: calc(100% - 2.5rem); + } + .header-inner { + min-height: 78px; + gap: 1rem; + } + .navigation { + gap: 1rem; + font-size: 0.875rem; + } + .hero { + padding-block: 3.5rem 3rem; + } + .hero h1 { + font-size: clamp(2.55rem, 10vw, 3.75rem); + } + .lede { + font-size: 1.075rem; + } + .actions { + gap: 1.2rem; + } + .section { + padding-block: 2.6rem; + } + .feature-case, + .workflows, + .verification { + grid-template-columns: 1fr; + } + .case-stats { + grid-template-columns: repeat(3, 1fr); + border-left: 0; + padding: 1.5rem 0 0; + border-top: 1px solid var(--line); + gap: 1rem; + } + .case-stats > div + div { + border: 0; + padding-top: 0; + } + .stats dt { + font-size: 1.65rem; + } + .stats dd { + font-size: 0.875rem; + } + .start-row { + align-items: flex-start; + flex-direction: column; + } + .page-heading { + padding-block: 3rem 2rem; + } + .page-heading h1 { + font-size: clamp(2.45rem, 9vw, 3.4rem); + } + .article-layout { + display: block; + } + .contents { + position: static; + padding-top: 0; + padding-bottom: 1.7rem; + } + .contents p { + display: none; + } + .contents ul { + display: flex; + flex-wrap: wrap; + gap: 0.65rem 1.3rem; + } + .contents li + li { + margin: 0; + } + .article-section { + padding-block: 2rem; + } + .article .stats { + gap: 1rem; + } + .provider { + grid-template-columns: 1fr; + gap: 0.25rem; + } + .step-selector { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + pre { + padding: 1rem; + } + .code-inline { + align-items: flex-start; + padding: 0.9rem; + } +} + +@media (max-width: 360px) { + .header-inner { + flex-wrap: wrap; + justify-content: flex-start; + gap: 0.3rem; + padding-block: 0.65rem; + } + .navigation { + width: 100%; + justify-content: space-between; + } + .stats, + .case-stats { + grid-template-columns: 1fr; + } +} diff --git a/website/public/get-started/index.html b/website/public/get-started/index.html new file mode 100644 index 000000000..26ba6a21f --- /dev/null +++ b/website/public/get-started/index.html @@ -0,0 +1,310 @@ + + + + + + Get started — REA + + + + + + + + + +
+
+ +

Start with a question.

+

+ Connect REA to your coding agent, or inspect a local app from your + terminal. +

+

+ You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+, and npm. + Full installation guide +

+
+
+ +
+
+

With your agent

+

+ Run setup to connect REA to Claude Code, Codex, Cursor or another + supported client. +

+
+
+ Terminal +
+
npx rea-agents@latest setup
+
+

+ Choose your client and review the setup plan. REA adds its MCP + connection and the matching investigation skill, keeping a backup + of existing configuration. It asks before applying the changes. +

+

+ Restart your client when setup finishes. Give your agent a target + path and a specific question. For a JavaScript or Electron app, + you might start with: +

+
+

+ Look at /absolute/path/to/app and find how it + exports data. Show the entry points, calls and dependencies + involved, with the source locations for your findings. +

+
+

+ Replace the path with your local target. Read the findings, then + ask a narrower follow-up about a function or connection you want + to understand. +

+
+ +
+

From the terminal

+

+ You can start with a JavaScript or Electron application folder or + ASAR archive. This path uses Node.js and npm and reads the app + without running it. +

+
+
+ Static application analysis +
+
npx -y rea-agents@latest analyze-javascript-application \
+  /absolute/path/to/app --json
+
+

+ Replace the path with your extracted app directory or + .asar file. On Windows, a path such as + "D:/apps/example" works here. +

+

+ The result includes the application's identity, recovered module + relationships and evidence locations. It also records + relationships that remain unresolved. Use those findings to choose + where to investigate next. +

+

+ If you'd like a permanent rea command in your shell: +

+
+
+ Install the CLI +
+
npm install --global rea-agents
+
+

+ Continue with the JavaScript application guide +

+
+ +
+

Working with native binaries

+

+ Choose a deep-analysis provider for your target and host. If you + already use one of these tools, start with its connection guide. +

+
+
+

Ghidra

+
+

+ Use an existing Ghidra installation and JDK. Setup checks + their paths and records them for your selected clients. +

+ Ghidra setup and supported hosts +
+
+
+

Hopper

+
+

+ Connect Hopper on macOS or Linux. Setup can also install it + after you review and approve the installation plan. +

+ Hopper installation +
+
+
+

IDA

+
+

+ Reuse an existing IDA MCP registration for read-only + analysis through an attached GUI or headless database. +

+ IDA connection guide +
+
+
+

+ For an existing Ghidra setup, inspect a function with: +

+
+
+ Function analysis +
+
rea function /absolute/path/to/program main \
+  --provider ghidra --json
+
+

+ Replace main with the function name or address you + want to inspect. The first query imports and analyzes the target, + so it can take longer than later requests. +

+
+ +
+

Getting help

+

If your agent doesn't see REA

+

+ Restart or reconnect the client after setup. To check its + registration, use a client-scoped report; for Codex: +

+
+
+ Check one client +
+
npx -y rea-agents@latest doctor --client codex --json
+
+

If a provider needs attention

+

Check the provider you're using. For Ghidra:

+
+
+ Check one provider +
+
npx -y rea-agents@latest doctor --provider ghidra --json
+
+

The report gives the failed check and a suggested next step.

+ +
+
+
+
+ +

+ + diff --git a/website/public/index.html b/website/public/index.html new file mode 100644 index 000000000..4acb31035 --- /dev/null +++ b/website/public/index.html @@ -0,0 +1,232 @@ + + + + + + REA — Reverse Engineer Anything + + + + + + + + + +
+
+

Software analysis · CLI & MCP

+

Find out how
software works.

+

+ REA gives your coding agent tools to inspect apps, binaries and + runtime behavior. Ask a question, follow the code, and use what you + learn in your own project. +

+ +
+
+ npx rea-agents@latest setup + +
+

+ Connects REA to your agent and installs its investigation workflow. +

+
+
+ +
+
+
+
+ Ask a question about a local app, binary or browser. Your agent uses REA through CLI or MCP to inspect and trace with analysis tools. REA returns code, references and unknowns. Your agent uses the evidence to explain, implement and test, and can ask follow-up questions. +
+
+ REA connects your agent to analysis tools. The findings guide the + next question, explanation or implementation. + Open figure +
+
+
+
+ +
+
+
+

Case study

+

Rebuilding DX-Ball

+

+ DX-Ball is a 1996 Windows game. The project is reconstructing it + in C, using REA to inspect the executable and independent tests to + check the recovered behavior. +

+

+ To recover a sound-pan calculation, the agent used REA to inspect + the instructions, follow a caller and read the constants. Those + findings led to a C function checked against the original behavior + and all 63 compiled bytes. +

+

+ Follow the investigation +

+

+ Work so far covers boards, resources, brick hits, animations, + particles and bonus production. The playable game is still in + progress. +

+
+
+
+
55
+
functions in maintained C
+
+
+
45,380
+
original-x86 differential cases
+
+
+
33
+
complete functions with matching compiled bytes
+
+
+
+
+ +
+
+
+

Bring a target. Ask a question.

+

+ Start with a local app or file, then narrow the investigation to + the feature or behavior you want to understand. +

+
+
+
+

Native applications

+

+ Inspect functions, strings, references and call relationships in + executables and libraries. +

+ Native analysis guide +
+
+

JavaScript & Electron

+

+ Map modules, routes, IPC and native dependencies from an + application folder or ASAR archive. +

+ Application workflows +
+
+

Runtime behavior

+

+ Capture selected browser or process activity, then compare the + results across runs. +

+ Browser observation guide +
+
+
+
+ +
+
+
+

Keep the investigation in your workflow.

+

+ Use REA from your terminal or through your agent's MCP connection. + Analysis runs locally, and results include the source locations, + evidence and open questions you need to continue. +

+
+
+

Use your analysis tools

+

+ Connect a local analysis provider for native binaries. Static + JavaScript analysis runs with Node.js and npm. +

+ Choose a native provider +
+
+
+ +
+
+
+

What would you like to understand?

+

+ Connect your agent, or get your first result from the terminal. +

+
+ Get started +
+
+
+ +

+ + diff --git a/website/public/showcase/dx-ball/index.html b/website/public/showcase/dx-ball/index.html new file mode 100644 index 000000000..6d4bfdf0f --- /dev/null +++ b/website/public/showcase/dx-ball/index.html @@ -0,0 +1,607 @@ + + + + + + Rebuilding DX-Ball — REA + + + + + + + + + +
+
+ +

Case study · DX-Ball 1.07

+

Rebuilding DX-Ball
from its executable.

+

+ The goal is a maintainable C version of the 1996 Windows game. REA + helps the agent inspect the original, one function at a time. +

+

Windows i386 · C · REA

+
+
+
+ DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, subtract 500.0, apply pan_scale and return an integer. The maintained C is checked independently against the original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes. +
+
+ One function, from executable to checked C. REA supplies the + instructions, callers and data reads; the reconstruction project + implements and tests the result. + Open figure +
+
+
+ +
+
+
+
+
55
+
maintained C functions
+
+
+
45,380
+
original-x86 differential cases
+
+
+
33
+
byte-exact functions
+
+
+

+ Project checkpoint: 7 October 2026. + Progress ledger + · + Test coverage +

+

The project so far

+

+ The recovered code covers board and resource handling, brick hits, + animations, particles and bonus production. Current builds provide + inspection utilities and an analysis library. Work on the playable + game continues with ball and paddle physics, power-up handling and + Windows integration. +

+

+ The analysis starts from the DX-Ball 1.07 executable. REA returns + function code, instructions, callers and state references. These + findings guide the C implementation; execution of the original x86 + functions and compiler replay check the result. +

+
+ +
+

Finding the sound-pan calculation

+

+ When a brick is hit, its horizontal position is passed to the + sound code. The investigation needed to recover how that screen + coordinate becomes a left/right panning value. +

+

+ The agent used REA to inspect the function, follow its brick-hit + caller and read the constants from the executable. Those results + supplied the input and arithmetic needed to write the C function + below. +

+

+ The first function result for 0x406400 included + pseudocode declaring FUN_00406400(void) and calling + __ftol(). Its instruction view showed a stack input + and floating-point operations. That discrepancy gave the agent a + concrete reason to keep investigating. +

+
+ The first decompiler view +
+
+ REA result · pseudocode excerpt +
+
longlong FUN_00406400(void)
+{
+  longlong lVar1;
+
+  lVar1 = __ftol();
+  return lVar1;
+}
+
+

+ The output shows a conversion call. Reading the instructions + below reveals the input and the calculation feeding that call. +

+
+ +

Three questions answered through REA

+
    +
  1. +

    Recover the missing input

    +
    +
    +
    + Agent → REA · analyze_function +
    +
    {"procedure": "0x406400"}
    +
    +
    +
    + REA → agent · instruction excerpt +
    +
    0x406409: MOV EAX, dword ptr [EBP + 0x8]
    +0x40640c: MOV dword ptr [EBP + -0xc], EAX
    +0x40640f: FILD dword ptr [EBP + -0xc]
    +
    +
    +

    + The function result includes instructions alongside pseudocode + and callers. Here, [EBP+8] exposes the integer + input missing from the decompiler view. +

    +
  2. +
  3. +

    Follow the caller to understand the input

    +
    +
    +
    + Agent → REA · analyze_function +
    +
    {"procedure": "0x411f40"}
    +
    +
    +
    + REA → agent · caller excerpt +
    +
    0x411f5b: ADD EAX, 0x14
    +0x411f5e: PUSH EAX
    +0x411f5f: CALL 0x00406400
    +
    +
    +

    + REA identified this caller in the first result. Its preceding + instructions scale tile_x by 30; adding 20 gives + the brick's screen coordinate, 20 + 30 × tile_x. +

    +
  4. +
  5. +

    Read the values behind the memory addresses

    +
    +
    +
    + Agent → REA · two + read_bytes requests +
    +
    {"address": "0x420068", "length": 16}
    +{"address": "0x4210a0", "length": 8}
    +
    +
    +
    + REA byte results · decoded as doubles +
    +
    000000000000f93f → 1.5625
    +0000000000407f40 → 500.0
    +000000000000f03f → 1.0
    +
    +
    +

    + The returned bytes establish the two arithmetic constants and + initial pan scale. The agent now has the values needed for the + C expression. +

    +
  6. +
+

+ REA exposes these operations through CLI and MCP, with target + identity and Evidence IDs in the results. The agent can follow up + on a caller or data address directly, then use the findings to + write maintained C. +

+ +

From REA's findings to C

+

+ Follow the five steps below. Each selection highlights the + original instructions and the C lines they informed. +

+
+
+ + + + + +
+
+
+
+ Original x86 · excerpt +
+
0x406409: MOV EAX, dword ptr [EBP + 0x8]
+0x40640c: MOV dword ptr [EBP + -0xc], EAX
+0x40640f: FILD dword ptr [EBP + -0xc]
+0x406415: FMUL double ptr [0x00420068]
+0x40641e: FSUB double ptr [0x00420070]
+0x406427: FMUL double ptr [0x004210a0]
+0x406430: CALL 0x0041678c
+0x40643e: RET
+
+
+
+ Reconstructed C +
+
DxBallInt dxball_screen_pan(DxBallInt x)
+{
+    double pan;
+    pan = (double)x;
+    pan = pan * 1.5625;
+    pan = pan - 500.0;
+    pan = pan * dxball_pan_scale;
+    return (DxBallInt)pan;
+}
+
+
+
+

+ 01 · Read the input. + The instruction view in REA's function result reads + [EBP+8] and uses FILD to load the + integer. Following its caller through REA establishes the + screen-coordinate meaning of the C parameter x. +

+ + + + +
+
+

+ The assembly excerpt selects the input, arithmetic and return + instructions. The full listing below also includes the intervening + stores and function setup and cleanup. +

+
+ Full assembly and supporting evidence +
+
+ REA result · 0x406400–0x40643e +
+
0x406400: PUSH EBP
+0x406401: MOV EBP, ESP
+0x406403: SUB ESP, 0xc
+0x406406: PUSH EBX
+0x406407: PUSH ESI
+0x406408: PUSH EDI
+0x406409: MOV EAX, dword ptr [EBP + 0x8]
+0x40640c: MOV dword ptr [EBP + -0xc], EAX
+0x40640f: FILD dword ptr [EBP + -0xc]
+0x406412: FST double ptr [EBP + -0x8]
+0x406415: FMUL double ptr [0x00420068]
+0x40641b: FST double ptr [EBP + -0x8]
+0x40641e: FSUB double ptr [0x00420070]
+0x406424: FST double ptr [EBP + -0x8]
+0x406427: FMUL double ptr [0x004210a0]
+0x40642d: FST double ptr [EBP + -0x8]
+0x406430: CALL 0x0041678c
+0x406435: JMP 0x0040643a
+0x40643a: POP EDI
+0x40643b: POP ESI
+0x40643c: POP EBX
+0x40643d: LEAVE
+0x40643e: RET
+
+

What the caller supplies

+

+ The brick-hit function at 0x411f40 scales its tile + coordinate by 30, adds 20, then pushes it before the call: +

+
+
0x411f50: MOV EAX, dword ptr [EBP + 0x8]
+0x411f53: ADD EAX, EAX
+0x411f55: LEA EAX, [EAX + EAX*0x2]
+0x411f58: LEA EAX, [EAX + EAX*0x4]
+0x411f5b: ADD EAX, 0x14
+0x411f5e: PUSH EAX
+0x411f5f: CALL 0x00406400
+0x411f64: ADD ESP, 0x4
+
+

What the data reads establish

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ REA byte reads, decoded as little-endian doubles +
AddressValueUsed for
0x4200681.5625First multiplication
0x420070500.0Subtraction
0x4210a01.0 initiallyStored pan scale
+
+

+ Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. + The linked investigation notes retain the Evidence IDs. +

+
+

+ Maintained source + · + Investigation notes and evidence references +

+
+ +
+

Checking the recovered function

+

+ The input, caller context and constant values returned through REA + guided the maintained C implementation. The project then checked + it against the original x86 function and the pinned compiler. For + this function, both checks pass. +

+
+
+

3,205 behavior cases

+

+ The tests execute the original x86 function and compare its + return value with the maintained C. They cover every integer + position from 0 to 640 at five pan scales: 0, 0.5, 1, 20 and + −1. +

+
+
+

63 matching bytes

+

+ The C function is compiled with the pinned VC4.0 toolchain. + Compiler replay matches the complete function after applying + the reviewed relocations and checking the referenced + constants. +

+
+
+

+ At a scale of 1, the recovered calculation returns −500 at the + left edge, 0 at the center and 500 at the right edge. The next + part of the audio work is integrating that value with the game's + sound backend. +

+

+ Read the compiler replay details +

+
+ +
+

Continue the investigation

+

+ The same approach is being used for particle updates, explosion + queues and bonus generation: inspect the relevant functions, + recover their state and dependencies, then compare the + implementation with the original. +

+

+ To inspect the sound-pan function yourself, follow the DX-Ball + project's setup instructions and supply its matching original + target. Then run: +

+
+
+ In the DX-Ball checkout +
+
scripts/rea function original/DXBALL.EXE 0x00406400 \
+  --snapshot .analysis/rea/dxball.snapshot.json --json
+
+ + +
+
+
+
+ +

+ + From f6a58f10629614fb7a6970421218b73d41bce6a5 Mon Sep 17 00:00:00 2001 From: ysopwnable <161784452+N0zoM1z0@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:16:58 +0800 Subject: [PATCH 9/9] refactor(javascript): group domain semantics and contracts (#907) --- .../workflows/real-javascript-recovery.yml | 4 +-- docs/capability-migration.md | 15 +++++++++ .../lib/browser-script-export-assertions.mjs | 2 +- scripts/lib/catalog-core.mjs | 33 +++++++++++-------- scripts/verify-real-electron.mjs | 2 +- .../javascript/application-workflows.mjs | 6 ++-- scripts/verify/javascript/recovery.mjs | 2 +- src/application/EvidenceInputResolver.test.ts | 2 +- ...ReconstructionObligationCandidates.test.ts | 4 +-- .../javascript/ElectronActiveEvidence.ts | 2 +- .../ElectronActiveObservationPort.ts | 2 +- .../ElectronActiveObservationService.ts | 2 +- .../javascript/ElectronBoundaryAnalysis.ts | 4 +-- .../ElectronBoundaryGraphContext.ts | 6 ++-- .../javascript/ElectronBoundaryGraphIpc.ts | 4 +-- .../javascript/ElectronBoundaryGraphNative.ts | 2 +- .../ElectronBoundaryGraphWindows.ts | 4 +-- .../javascript/ElectronEvidence.ts | 2 +- .../javascript/ElectronObservationPort.ts | 2 +- .../javascript/ElectronObservationService.ts | 2 +- ...JavaScriptApplicationEmptyLiterals.test.ts | 8 ++--- .../JavaScriptApplicationEvidence.ts | 2 +- .../JavaScriptApplicationEvidenceGraph.ts | 8 ++--- .../JavaScriptApplicationService.ts | 2 +- ...aScriptApplicationTemplateLiterals.test.ts | 2 +- .../JavaScriptApplicationWorkflowEvidence.ts | 10 +++--- .../JavaScriptApplicationWorkflowService.ts | 16 ++++----- .../javascript/JavaScriptArtifactAnalysis.ts | 10 +++--- .../JavaScriptArtifactAnalysisTypes.ts | 4 +-- .../JavaScriptArtifactGraphAccumulator.ts | 2 +- .../JavaScriptArtifactGraphBuilder.ts | 4 +-- .../JavaScriptArtifactGraphBundlers.ts | 4 +-- .../JavaScriptArtifactGraphContext.ts | 6 ++-- .../JavaScriptArtifactGraphDocuments.ts | 2 +- .../JavaScriptArtifactGraphEvidence.ts | 4 +-- .../JavaScriptArtifactGraphFindings.ts | 4 +-- .../JavaScriptArtifactGraphStructure.ts | 4 +-- .../JavaScriptArtifactPathResolution.test.ts | 4 +-- .../JavaScriptArtifactReconstruction.ts | 6 ++-- .../javascript/JavaScriptFileUrlPaths.test.ts | 4 +-- .../JavaScriptModuleRelationships.ts | 6 ++-- .../javascript/JavaScriptRecoveryPort.ts | 2 +- .../JavaScriptRecoveryService.test.ts | 2 +- .../javascript/JavaScriptRecoveryService.ts | 2 +- .../JavaScriptReturnShapeProjection.test.ts | 4 +-- .../JavaScriptReturnShapeProjection.ts | 8 ++--- .../JavaScriptRuntimeObservationEvidence.ts | 2 +- .../JavaScriptRuntimeObservationPort.ts | 2 +- .../JavaScriptRuntimeObservationService.ts | 2 +- ...JavaScriptRuntimeReconciliationEvidence.ts | 2 +- .../JavaScriptRuntimeReconciliationService.ts | 4 +-- .../JavaScriptSemanticGraphAsyncProjection.ts | 6 ++-- .../JavaScriptSemanticGraphBuilder.test.ts | 4 +-- .../JavaScriptSemanticGraphBuilder.ts | 10 +++--- ...riptSemanticGraphChildProcessProjection.ts | 6 ++-- .../JavaScriptSemanticGraphConstruction.ts | 12 +++---- .../JavaScriptSemanticGraphDataProjection.ts | 6 ++-- .../JavaScriptSemanticGraphEvidence.ts | 6 ++-- ...criptSemanticGraphFingerprintProjection.ts | 4 +-- .../JavaScriptSemanticGraphFlowProjection.ts | 10 +++--- ...JavaScriptSemanticGraphObjectProjection.ts | 6 ++-- .../JavaScriptSemanticGraphProjection.ts | 8 ++--- ...vaScriptSemanticGraphResourceProjection.ts | 6 ++-- .../JavaScriptSemanticGraphResources.test.ts | 4 +-- .../JavaScriptSemanticGraphScope.test.ts | 4 +-- .../JavaScriptSemanticGraphValueProjection.ts | 2 +- .../JavaScriptSemanticTraceService.ts | 4 +-- src/browser/CdpElectronInspection.ts | 2 +- src/browser/CdpElectronProvider.ts | 2 +- src/browser/CdpElectronScripts.ts | 2 +- src/browser/CdpElectronWorkers.ts | 2 +- .../PlaywrightElectronActiveActions.test.ts | 4 +-- .../PlaywrightElectronActiveActions.ts | 2 +- .../PlaywrightElectronActiveProvider.ts | 2 +- src/browser/WebSourceMapFetcher.ts | 4 +-- src/cli/applicationCommands.ts | 10 +++--- src/cli/electronCommands.ts | 4 +-- src/cliJavaScriptRuntimeCommands.ts | 2 +- src/contracts/applicationToolContracts.ts | 14 ++++---- src/contracts/contractSnapshot.test.ts | 6 ++-- .../applicationWorkflowInputContracts.ts | 12 +++---- .../{ => javascript}/electronToolContracts.ts | 14 ++++---- .../javascriptApplicationWorkflowExamples.ts | 6 ++-- .../javascriptRecoveryToolContracts.ts | 8 ++--- ...vascriptRuntimeObservationToolContracts.ts | 8 ++--- .../javascriptRuntimeReconciliationExample.ts | 10 +++--- src/contracts/toolContracts.test.ts | 6 ++-- src/contracts/toolContracts.ts | 6 ++-- src/contracts/workflowInputContracts.test.ts | 4 +-- .../electronActiveObservation.fixture.ts | 0 .../electronActiveObservation.ts | 0 .../electronNativeLoaderPaths.test.ts | 0 .../{ => javascript}/electronObservation.ts | 10 +++--- .../electronStaticAnalysis.ts | 0 .../electronStaticAnalysisBrowser.ts | 2 +- .../electronStaticAnalysisIpc.ts | 0 .../electronStaticAnalysisNative.ts | 4 +-- .../electronStaticAnalysisOptions.test.ts | 0 .../electronStaticAnalysisTypes.ts | 0 .../electronStaticAnalysisValues.ts | 2 +- .../javascriptApplicationAnalysis.ts | 4 +-- .../javascriptApplicationChangeGraph.ts | 2 +- .../javascriptApplicationEvidenceSchemas.ts | 4 +-- .../javascriptApplicationGraph.fixture.ts | 0 .../javascriptApplicationGraph.test.ts | 0 .../javascriptApplicationGraph.ts | 4 +-- .../javascriptApplicationGraphSchemas.ts | 4 +-- .../javascriptApplicationVersionComparison.ts | 6 ++-- ...riptApplicationVersionComparisonSchemas.ts | 6 ++-- .../javascriptApplicationVersionItems.ts | 6 ++-- .../javascriptApplicationVersionKeys.ts | 4 +-- .../javascriptAstFingerprint.test.ts | 2 +- .../javascriptAstFingerprint.ts | 2 +- .../{ => javascript}/javascriptAstValues.ts | 0 .../javascriptExportShapeComparison.ts | 2 +- ...javascriptExportShapeComparisonIdentity.ts | 0 ...scriptExportShapeComparisonSchemas.test.ts | 0 .../javascriptExportShapeComparisonSchemas.ts | 4 +-- .../javascriptExportShapeSelection.ts | 2 +- .../javascriptExportShapeVariants.ts | 2 +- ...avascriptFeatureSeed.array_members.test.ts | 2 +- .../javascriptFeatureSeed.test.ts | 2 +- .../{ => javascript}/javascriptFeatureSeed.ts | 4 +-- .../javascriptFeatureTrace.ts | 6 ++-- .../javascriptFeatureTraceSchemas.ts | 6 ++-- .../javascriptFeatureTraversal.ts | 2 +- .../javascriptNativeHandoff.ts | 4 +-- .../javascriptRecovery.test.ts | 0 .../{ => javascript}/javascriptRecovery.ts | 2 +- .../javascriptRuntimeLoadState.ts | 2 +- .../javascriptRuntimeObservation.ts | 4 +-- .../javascriptRuntimeReconciliation.ts | 0 .../javascriptRuntimeReconciliationActive.ts | 8 ++--- .../javascriptRuntimeReconciliationGraph.ts | 2 +- ...javascriptRuntimeReconciliationMatching.ts | 4 +-- .../javascriptRuntimeReconciliationParsing.ts | 10 +++--- .../javascriptRuntimeReconciliationResult.ts | 4 +-- .../javascriptRuntimeReconciliationRuntime.ts | 2 +- .../javascriptRuntimeReconciliationSchemas.ts | 8 ++--- .../javascriptRuntimeStaticCandidates.ts | 2 +- ...tSemanticAnalysis.builtin_defaults.test.ts | 0 .../javascriptSemanticAnalysis.calls.test.ts | 0 ...avascriptSemanticAnalysis.dataflow.test.ts | 0 ...ascriptSemanticAnalysis.empty_keys.test.ts | 0 .../javascriptSemanticAnalysis.fixture.ts | 0 ...iptSemanticAnalysis.function_names.test.ts | 0 ...tSemanticAnalysis.member_mutations.test.ts | 0 ...ptSemanticAnalysis.native_bindings.test.ts | 0 ...SemanticAnalysis.promise_ownership.test.ts | 0 ...vascriptSemanticAnalysis.rejection.test.ts | 0 ...emanticAnalysis.runtime_boundaries.test.ts | 0 ...vascriptSemanticAnalysis.structure.test.ts | 0 .../javascriptSemanticAnalysis.ts | 0 .../javascriptSemanticAnalysis.unions.test.ts | 0 .../javascriptSemanticAsyncEffects.ts | 0 .../javascriptSemanticCallResolution.ts | 2 +- .../javascriptSemanticCalls.ts | 0 .../javascriptSemanticChildProcesses.ts | 2 +- .../javascriptSemanticCoverage.ts | 0 .../javascriptSemanticDataEffectHelpers.ts | 0 .../javascriptSemanticDataEffects.ts | 2 +- .../javascriptSemanticDerivedAnalysis.ts | 0 .../javascriptSemanticFingerprints.ts | 2 +- .../javascriptSemanticGraph.ts | 4 +-- .../javascriptSemanticGraphQuery.test.ts | 0 .../javascriptSemanticGraphSchemas.ts | 6 ++-- .../javascriptSemanticGraphSerialization.ts | 0 .../javascriptSemanticGraphTraversal.test.ts | 2 +- .../{ => javascript}/javascriptSemanticIr.ts | 0 .../javascriptSemanticMemberMutations.ts | 0 .../javascriptSemanticMutationValues.ts | 0 .../javascriptSemanticObjects.ts | 0 .../javascriptSemanticPrimitives.ts | 2 +- .../javascriptSemanticProjection.ts | 2 +- .../javascriptSemanticPromises.ts | 2 +- .../javascriptSemanticProvenance.ts | 2 +- .../javascriptSemanticQuery.ts | 2 +- .../javascriptSemanticQueryAssessment.ts | 2 +- .../javascriptSemanticQueryIdentity.ts | 2 +- .../javascriptSemanticQueryRelations.ts | 0 .../javascriptSemanticQuerySchemas.test.ts | 0 .../javascriptSemanticQuerySchemas.ts | 6 ++-- .../javascriptSemanticResources.ts | 0 .../javascriptSemanticReturns.ts | 2 +- .../javascriptSemanticState.ts | 0 .../javascriptSemanticTraceSchemas.ts | 4 +-- .../javascriptSemanticTraversal.ts | 0 .../javascriptSemanticValueTypes.ts | 0 .../javascriptSemanticValues.ts | 2 +- .../javascriptSourceParser.ts | 0 ...riptStaticAnalysis.no_finding_caps.test.ts | 0 .../javascriptStaticAnalysis.ts | 0 .../javascriptStaticAnalysisBundler.ts | 2 +- .../javascriptStaticAnalysisCalls.ts | 2 +- .../javascriptStaticAnalysisFindings.ts | 0 .../javascriptStaticAnalysisHelpers.ts | 2 +- .../javascriptStaticAnalysisLocations.test.ts | 0 ...javascriptStaticAnalysisSourceMaps.test.ts | 0 .../javascriptStaticAnalysisState.ts | 0 .../javascriptStaticAnalysisTypes.ts | 0 .../javascriptStaticPathResolution.test.ts | 0 .../sourceToBundleComparison.test.ts | 2 +- .../sourceToBundleComparison.ts | 6 ++-- .../sourceToBundleComparisonSchemas.ts | 8 ++--- .../{ => javascript}/sourceToBundleSignals.ts | 6 ++-- src/domain/managedApplicationGraph.ts | 2 +- src/domain/managedApplicationGraphCoverage.ts | 2 +- src/domain/managedApplicationGraphNodes.ts | 2 +- src/domain/webBundleAnalyzerAst.ts | 2 +- src/domain/webBundleAnalyzerInspection.ts | 4 +-- src/domain/webModuleImports.ts | 2 +- src/inspector/JavaScriptRuntimeScope.ts | 2 +- src/inspector/V8InspectorCaptureProjection.ts | 2 +- src/inspector/V8InspectorEndpoint.ts | 2 +- src/inspector/V8InspectorProvider.ts | 2 +- src/javascript/recovery/WakaruExecution.ts | 2 +- src/javascript/recovery/WakaruProvider.ts | 2 +- src/javascript/recovery/WakaruPublication.ts | 2 +- src/javascript/recovery/WakaruReport.ts | 2 +- .../compareExportShapes.ts | 2 +- .../compareSourceToBundle.ts | 2 +- .../compareVersions.ts | 2 +- src/server/registerElectronTools.ts | 2 +- ...gisterJavaScriptRuntimeObservationTools.ts | 2 +- .../applicationEvidenceMcp.test.ts | 2 +- .../applicationExportShapeMcp.test.ts | 2 +- .../applicationWorkflowCli.test.ts | 4 +-- .../javascriptApplicationWorkflows.test.ts | 20 +++++------ .../javascriptBuiltinDefaultsCli.test.ts | 2 +- .../javascriptFunctionNameCli.test.ts | 2 +- .../browser/cdpCleanupCancellation.test.ts | 2 +- .../browser/cdpElectronProvider.test.ts | 2 +- tests/boundary/cli/electronCli.test.ts | 2 +- .../javascriptRuntimeObservationCli.test.ts | 2 +- .../javascriptExportContainerCoverage.test.ts | 2 +- .../javascriptExportShapeComparison.test.ts | 6 ++-- .../javascriptRequireLiteralPaths.test.ts | 2 +- .../filesystem/sourceToBundlePaths.test.ts | 2 +- .../filesystem/webScriptExport.test.ts | 2 +- .../javascriptRuntimeObservation.test.ts | 8 ++--- .../javascriptRuntimeUnresolvedTarget.test.ts | 2 +- .../wakaruIntegration.test.ts | 2 +- tests/boundary/mcp/browserMcp.test.ts | 2 +- tests/boundary/mcp/electronMcp.test.ts | 2 +- .../javascriptRuntimeObservationMcp.test.ts | 2 +- .../retainedApplicationEvidenceMcp.test.ts | 2 +- ...riptRuntimeReconciliationAmbiguity.test.ts | 4 +-- .../managedApplicationGraph.test.ts | 2 +- .../electronApplicationAnalysis.test.ts | 4 +-- .../javascriptArtifactReconstruction.test.ts | 8 ++--- .../javascriptRuntimeReconciliation.test.ts | 10 +++--- tests/fixtures/contractPresentation.mjs | 4 +-- tests/support/javascriptApplicationFixture.ts | 2 +- 253 files changed, 432 insertions(+), 410 deletions(-) rename src/contracts/{ => javascript}/applicationWorkflowInputContracts.ts (77%) rename src/contracts/{ => javascript}/electronToolContracts.ts (92%) rename src/contracts/{ => javascript}/javascriptApplicationWorkflowExamples.ts (93%) rename src/contracts/{ => javascript}/javascriptRecoveryToolContracts.ts (84%) rename src/contracts/{ => javascript}/javascriptRuntimeObservationToolContracts.ts (90%) rename src/contracts/{ => javascript}/javascriptRuntimeReconciliationExample.ts (94%) rename src/domain/{ => javascript}/electronActiveObservation.fixture.ts (100%) rename src/domain/{ => javascript}/electronActiveObservation.ts (100%) rename src/domain/{ => javascript}/electronNativeLoaderPaths.test.ts (100%) rename src/domain/{ => javascript}/electronObservation.ts (92%) rename src/domain/{ => javascript}/electronStaticAnalysis.ts (100%) rename src/domain/{ => javascript}/electronStaticAnalysisBrowser.ts (99%) rename src/domain/{ => javascript}/electronStaticAnalysisIpc.ts (100%) rename src/domain/{ => javascript}/electronStaticAnalysisNative.ts (98%) rename src/domain/{ => javascript}/electronStaticAnalysisOptions.test.ts (100%) rename src/domain/{ => javascript}/electronStaticAnalysisTypes.ts (100%) rename src/domain/{ => javascript}/electronStaticAnalysisValues.ts (98%) rename src/domain/{ => javascript}/javascriptApplicationAnalysis.ts (97%) rename src/domain/{ => javascript}/javascriptApplicationChangeGraph.ts (99%) rename src/domain/{ => javascript}/javascriptApplicationEvidenceSchemas.ts (99%) rename src/domain/{ => javascript}/javascriptApplicationGraph.fixture.ts (100%) rename src/domain/{ => javascript}/javascriptApplicationGraph.test.ts (100%) rename src/domain/{ => javascript}/javascriptApplicationGraph.ts (98%) rename src/domain/{ => javascript}/javascriptApplicationGraphSchemas.ts (97%) rename src/domain/{ => javascript}/javascriptApplicationVersionComparison.ts (97%) rename src/domain/{ => javascript}/javascriptApplicationVersionComparisonSchemas.ts (97%) rename src/domain/{ => javascript}/javascriptApplicationVersionItems.ts (98%) rename src/domain/{ => javascript}/javascriptApplicationVersionKeys.ts (98%) rename src/domain/{ => javascript}/javascriptAstFingerprint.test.ts (85%) rename src/domain/{ => javascript}/javascriptAstFingerprint.ts (98%) rename src/domain/{ => javascript}/javascriptAstValues.ts (100%) rename src/domain/{ => javascript}/javascriptExportShapeComparison.ts (99%) rename src/domain/{ => javascript}/javascriptExportShapeComparisonIdentity.ts (100%) rename src/domain/{ => javascript}/javascriptExportShapeComparisonSchemas.test.ts (100%) rename src/domain/{ => javascript}/javascriptExportShapeComparisonSchemas.ts (98%) rename src/domain/{ => javascript}/javascriptExportShapeSelection.ts (99%) rename src/domain/{ => javascript}/javascriptExportShapeVariants.ts (99%) rename src/domain/{ => javascript}/javascriptFeatureSeed.array_members.test.ts (99%) rename src/domain/{ => javascript}/javascriptFeatureSeed.test.ts (97%) rename src/domain/{ => javascript}/javascriptFeatureSeed.ts (98%) rename src/domain/{ => javascript}/javascriptFeatureTrace.ts (97%) rename src/domain/{ => javascript}/javascriptFeatureTraceSchemas.ts (96%) rename src/domain/{ => javascript}/javascriptFeatureTraversal.ts (98%) rename src/domain/{ => javascript}/javascriptNativeHandoff.ts (97%) rename src/domain/{ => javascript}/javascriptRecovery.test.ts (100%) rename src/domain/{ => javascript}/javascriptRecovery.ts (98%) rename src/domain/{ => javascript}/javascriptRuntimeLoadState.ts (99%) rename src/domain/{ => javascript}/javascriptRuntimeObservation.ts (97%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliation.ts (100%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationActive.ts (94%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationGraph.ts (99%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationMatching.ts (99%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationParsing.ts (98%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationResult.ts (98%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationRuntime.ts (99%) rename src/domain/{ => javascript}/javascriptRuntimeReconciliationSchemas.ts (97%) rename src/domain/{ => javascript}/javascriptRuntimeStaticCandidates.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.builtin_defaults.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.calls.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.dataflow.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.empty_keys.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.fixture.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.function_names.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.member_mutations.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.native_bindings.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.promise_ownership.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.rejection.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.runtime_boundaries.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.structure.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAnalysis.unions.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticAsyncEffects.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticCallResolution.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticCalls.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticChildProcesses.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticCoverage.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticDataEffectHelpers.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticDataEffects.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticDerivedAnalysis.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticFingerprints.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticGraph.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticGraphQuery.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticGraphSchemas.ts (98%) rename src/domain/{ => javascript}/javascriptSemanticGraphSerialization.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticGraphTraversal.test.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticIr.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticMemberMutations.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticMutationValues.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticObjects.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticPrimitives.ts (96%) rename src/domain/{ => javascript}/javascriptSemanticProjection.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticPromises.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticProvenance.ts (97%) rename src/domain/{ => javascript}/javascriptSemanticQuery.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticQueryAssessment.ts (98%) rename src/domain/{ => javascript}/javascriptSemanticQueryIdentity.ts (97%) rename src/domain/{ => javascript}/javascriptSemanticQueryRelations.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticQuerySchemas.test.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticQuerySchemas.ts (95%) rename src/domain/{ => javascript}/javascriptSemanticResources.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticReturns.ts (99%) rename src/domain/{ => javascript}/javascriptSemanticState.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticTraceSchemas.ts (88%) rename src/domain/{ => javascript}/javascriptSemanticTraversal.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticValueTypes.ts (100%) rename src/domain/{ => javascript}/javascriptSemanticValues.ts (99%) rename src/domain/{ => javascript}/javascriptSourceParser.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysis.no_finding_caps.test.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysis.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysisBundler.ts (99%) rename src/domain/{ => javascript}/javascriptStaticAnalysisCalls.ts (99%) rename src/domain/{ => javascript}/javascriptStaticAnalysisFindings.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysisHelpers.ts (99%) rename src/domain/{ => javascript}/javascriptStaticAnalysisLocations.test.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysisSourceMaps.test.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysisState.ts (100%) rename src/domain/{ => javascript}/javascriptStaticAnalysisTypes.ts (100%) rename src/domain/{ => javascript}/javascriptStaticPathResolution.test.ts (100%) rename src/domain/{ => javascript}/sourceToBundleComparison.test.ts (99%) rename src/domain/{ => javascript}/sourceToBundleComparison.ts (98%) rename src/domain/{ => javascript}/sourceToBundleComparisonSchemas.ts (94%) rename src/domain/{ => javascript}/sourceToBundleSignals.ts (98%) diff --git a/.github/workflows/real-javascript-recovery.yml b/.github/workflows/real-javascript-recovery.yml index df3f7edec..7076a29cd 100644 --- a/.github/workflows/real-javascript-recovery.yml +++ b/.github/workflows/real-javascript-recovery.yml @@ -5,10 +5,10 @@ on: paths: - ".github/workflows/real-javascript-recovery.yml" - "src/javascript/recovery/**" - - "src/domain/javascript*.ts" + - "src/domain/javascript/**" - "src/application/javascript/JavaScriptRecovery*.ts" - "src/composition/javascriptRecovery.ts" - - "src/contracts/javascriptRecoveryToolContracts.ts" + - "src/contracts/javascript/javascriptRecoveryToolContracts.ts" - "src/cli/javascriptRecoveryCommands.ts" - "src/cli/javascriptApplicationAnalysis.ts" - "src/server/registerJavaScriptRecoveryTool.ts" diff --git a/docs/capability-migration.md b/docs/capability-migration.md index dd8acb47c..4e4960fb4 100644 --- a/docs/capability-migration.md +++ b/docs/capability-migration.md @@ -255,6 +255,21 @@ analysis and public schemas keep their existing domain/contract ownership; shared artifact inventory, investigation records and execution types remain shared. CLI, MCP and production factories import the owning workflow directly. +`src/domain/javascript/` owns static parsing and semantic IR, application and +semantic graphs, Electron facts, runtime reconciliation, recovery result +semantics, and source-to-bundle comparisons. Shared Evidence, digests, ordering, +comparison semantics and historical-source graphs stay at their existing owners. +Native handoffs link exact-subject Evidence without selecting or executing a +provider. + +`src/contracts/javascript/` owns the JavaScript/Electron observation and recovery +contracts, JavaScript-specific workflow requests, and their examples. The shared +`applicationToolContracts.ts` aggregate stays at the contract root because it also +owns reconstruction and Android/Apple projection operations. Canonical tool +aggregation, named handler binding and SDK schema presentation remain unchanged. +Catalog source paths, compiled verifier/SDK fixtures and recovery CI filters +follow the domain/contract owners. + `scripts/verify/javascript/` groups application-workflow, runtime-reconciliation, large-digest and real-recovery entrypoints. Their existing npm commands retain their invocation semantics. Recovery fixture compilation lives beside its diff --git a/scripts/lib/browser-script-export-assertions.mjs b/scripts/lib/browser-script-export-assertions.mjs index 1238880a7..0db4eb294 100644 --- a/scripts/lib/browser-script-export-assertions.mjs +++ b/scripts/lib/browser-script-export-assertions.mjs @@ -3,7 +3,7 @@ import { createHash } from "node:crypto"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; import { webScriptExportResultSchema } from "../../dist/domain/webScriptExport.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../dist/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../dist/domain/javascript/javascriptApplicationAnalysis.js"; /** Verify exact exported bytes and the independently authored source manifest. */ export const assertWebScriptExport = async (evidence, capture, assets) => { diff --git a/scripts/lib/catalog-core.mjs b/scripts/lib/catalog-core.mjs index 91e357241..a1559d4c8 100644 --- a/scripts/lib/catalog-core.mjs +++ b/scripts/lib/catalog-core.mjs @@ -50,13 +50,13 @@ const SOURCE_PATHS = { managedWorkflowContracts: "dist/contracts/managedWorkflowToolContracts.js", browserContracts: "dist/contracts/browserToolContracts.js", browserScenarioContracts: "dist/contracts/browserScenarioToolContracts.js", - electronContracts: "dist/contracts/electronToolContracts.js", + electronContracts: "dist/contracts/javascript/electronToolContracts.js", javascriptRuntimeObservationContracts: - "dist/contracts/javascriptRuntimeObservationToolContracts.js", + "dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js", applicationContracts: "dist/contracts/applicationToolContracts.js", webScriptContracts: "dist/contracts/webScriptToolContracts.js", javascriptRecoveryContracts: - "dist/contracts/javascriptRecoveryToolContracts.js", + "dist/contracts/javascript/javascriptRecoveryToolContracts.js", javascriptRecoveryProvider: "dist/javascript/recovery/WakaruRelease.js", supportedClients: "dist/application/SupportedClients.js", hopperProvider: "dist/hopper/HopperProviderCapabilities.js", @@ -81,9 +81,11 @@ const SOURCE_PATHS = { browserScenarioCapture: "dist/domain/browserScenarioCapture.js", browserScenarioDiff: "dist/domain/browserScenarioDiff.js", browserSession: "dist/domain/browserSession.js", - electronObservation: "dist/domain/electronObservation.js", - electronActiveObservation: "dist/domain/electronActiveObservation.js", - javascriptRuntimeObservation: "dist/domain/javascriptRuntimeObservation.js", + electronObservation: "dist/domain/javascript/electronObservation.js", + electronActiveObservation: + "dist/domain/javascript/electronActiveObservation.js", + javascriptRuntimeObservation: + "dist/domain/javascript/javascriptRuntimeObservation.js", webBundleAnalysis: "dist/domain/webBundleAnalysis.js", webCaptureDiff: "dist/domain/webCaptureDiff.js", managedArtifact: "dist/domain/managedArtifact.js", @@ -91,14 +93,19 @@ const SOURCE_PATHS = { managedNativeVerification: "dist/domain/managedNativeVerification.js", webMcpDiscovery: "dist/domain/webMcpDiscovery.js", webScreenshot: "dist/domain/webScreenshot.js", - javascriptApplicationGraph: "dist/domain/javascriptApplicationGraph.js", - javascriptApplicationAnalysis: "dist/domain/javascriptApplicationAnalysis.js", - javascriptSemanticGraph: "dist/domain/javascriptSemanticGraph.js", - javascriptSemanticQuery: "dist/domain/javascriptSemanticQuerySchemas.js", - javascriptSemanticTrace: "dist/domain/javascriptSemanticTraceSchemas.js", - javascriptFeatureTrace: "dist/domain/javascriptFeatureTraceSchemas.js", + javascriptApplicationGraph: + "dist/domain/javascript/javascriptApplicationGraph.js", + javascriptApplicationAnalysis: + "dist/domain/javascript/javascriptApplicationAnalysis.js", + javascriptSemanticGraph: "dist/domain/javascript/javascriptSemanticGraph.js", + javascriptSemanticQuery: + "dist/domain/javascript/javascriptSemanticQuerySchemas.js", + javascriptSemanticTrace: + "dist/domain/javascript/javascriptSemanticTraceSchemas.js", + javascriptFeatureTrace: + "dist/domain/javascript/javascriptFeatureTraceSchemas.js", javascriptVersionComparison: - "dist/domain/javascriptApplicationVersionComparisonSchemas.js", + "dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js", reconstructionVerification: "dist/domain/reconstructionVerificationSchemas.js", residualUnknown: "dist/domain/residualUnknown.js", diff --git a/scripts/verify-real-electron.mjs b/scripts/verify-real-electron.mjs index f94028d91..bf6f2a169 100644 --- a/scripts/verify-real-electron.mjs +++ b/scripts/verify-real-electron.mjs @@ -4,7 +4,7 @@ import { join } from "node:path"; import { fileURLToPath } from "node:url"; import { PlaywrightElectronActiveProvider } from "../dist/browser/PlaywrightElectronActiveProvider.js"; -import { electronActiveObservationInputSchema } from "../dist/domain/electronActiveObservation.js"; +import { electronActiveObservationInputSchema } from "../dist/domain/javascript/electronActiveObservation.js"; import { completeVerifierRun, createVerifierRun } from "./lib/verifier-run.mjs"; const executable = process.env.REA_ELECTRON_EXECUTABLE; diff --git a/scripts/verify/javascript/application-workflows.mjs b/scripts/verify/javascript/application-workflows.mjs index 4ca259c57..2c4680871 100644 --- a/scripts/verify/javascript/application-workflows.mjs +++ b/scripts/verify/javascript/application-workflows.mjs @@ -9,9 +9,9 @@ import { compareJavaScriptExportShapesEvidence, traceApplicationFeatureEvidence, } from "../../../dist/application/javascript/JavaScriptApplicationWorkflowService.js"; -import { applicationVersionComparisonResultSchema } from "../../../dist/domain/javascriptApplicationVersionComparisonSchemas.js"; -import { applicationFeatureTraceResultSchema } from "../../../dist/domain/javascriptFeatureTraceSchemas.js"; -import { javaScriptExportShapeComparisonResultSchema } from "../../../dist/domain/javascriptExportShapeComparisonSchemas.js"; +import { applicationVersionComparisonResultSchema } from "../../../dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import { applicationFeatureTraceResultSchema } from "../../../dist/domain/javascript/javascriptFeatureTraceSchemas.js"; +import { javaScriptExportShapeComparisonResultSchema } from "../../../dist/domain/javascript/javascriptExportShapeComparisonSchemas.js"; import { completeVerifierRun, createVerifierRun, diff --git a/scripts/verify/javascript/recovery.mjs b/scripts/verify/javascript/recovery.mjs index 7ec31abe9..f200b355a 100644 --- a/scripts/verify/javascript/recovery.mjs +++ b/scripts/verify/javascript/recovery.mjs @@ -10,7 +10,7 @@ import { promisify } from "node:util"; import { Client } from "@modelcontextprotocol/client"; import { StdioClientTransport } from "@modelcontextprotocol/client/stdio"; import { parseEvidence } from "../../../dist/domain/evidence.js"; -import { javascriptRecoveryResultSchema } from "../../../dist/domain/javascriptRecovery.js"; +import { javascriptRecoveryResultSchema } from "../../../dist/domain/javascript/javascriptRecovery.js"; import { buildRecoveryFixtures } from "../../fixtures/javascript-recovery/build.mjs"; import { mcpTextValue } from "../../lib/mcp-verifier-results.mjs"; diff --git a/src/application/EvidenceInputResolver.test.ts b/src/application/EvidenceInputResolver.test.ts index 11491b1d2..9fa0750a5 100644 --- a/src/application/EvidenceInputResolver.test.ts +++ b/src/application/EvidenceInputResolver.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import { evidenceInputSchema } from "../contracts/evidenceInputContracts.js"; -import { JAVASCRIPT_FEATURE_TRACE_EXAMPLE } from "../contracts/javascriptApplicationWorkflowExamples.js"; +import { JAVASCRIPT_FEATURE_TRACE_EXAMPLE } from "../contracts/javascript/javascriptApplicationWorkflowExamples.js"; import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import { EvidenceLedger } from "./investigation/EvidenceLedger.js"; import { resolveEvidenceInput } from "./EvidenceInputResolver.js"; diff --git a/src/application/ReconstructionObligationCandidates.test.ts b/src/application/ReconstructionObligationCandidates.test.ts index ea96c3527..d3ddc3224 100644 --- a/src/application/ReconstructionObligationCandidates.test.ts +++ b/src/application/ReconstructionObligationCandidates.test.ts @@ -7,11 +7,11 @@ import { artifactEvidence, buildSyntheticJavaScriptApplicationGraph, completeCoverage, -} from "../domain/javascriptApplicationGraph.fixture.js"; +} from "../domain/javascript/javascriptApplicationGraph.fixture.js"; import { createJavaScriptApplicationGraph, createJavaScriptApplicationNode, -} from "../domain/javascriptApplicationGraph.js"; +} from "../domain/javascript/javascriptApplicationGraph.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { MANAGED_WORKFLOW_PROVIDER } from "./InvestigationProviders.js"; import { deriveReconstructionObligationCandidates } from "./ReconstructionObligationCandidates.js"; diff --git a/src/application/javascript/ElectronActiveEvidence.ts b/src/application/javascript/ElectronActiveEvidence.ts index 192b2f2d4..6b77dd28c 100644 --- a/src/application/javascript/ElectronActiveEvidence.ts +++ b/src/application/javascript/ElectronActiveEvidence.ts @@ -5,7 +5,7 @@ import { createEvidence } from "../../domain/evidence.js"; import type { ElectronActiveObservationInput, ElectronActiveObservationResult, -} from "../../domain/electronActiveObservation.js"; +} from "../../domain/javascript/electronActiveObservation.js"; import { jsonValueSchema } from "../../domain/jsonValue.js"; type CanonicalElectronActiveObservationInput = diff --git a/src/application/javascript/ElectronActiveObservationPort.ts b/src/application/javascript/ElectronActiveObservationPort.ts index 884f23c05..56083c25e 100644 --- a/src/application/javascript/ElectronActiveObservationPort.ts +++ b/src/application/javascript/ElectronActiveObservationPort.ts @@ -6,7 +6,7 @@ import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import type { ElectronActiveObservationInput, ElectronActiveObservationResult, -} from "../../domain/electronActiveObservation.js"; +} from "../../domain/javascript/electronActiveObservation.js"; import type { Result } from "../../domain/result.js"; /** Provider-neutral boundary for owned Electron runtime experiments. */ diff --git a/src/application/javascript/ElectronActiveObservationService.ts b/src/application/javascript/ElectronActiveObservationService.ts index feaa000d8..276dc5c17 100644 --- a/src/application/javascript/ElectronActiveObservationService.ts +++ b/src/application/javascript/ElectronActiveObservationService.ts @@ -9,7 +9,7 @@ import { } from "../../domain/analysisErrorCore.js"; import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; -import type { ElectronActiveObservationInput } from "../../domain/electronActiveObservation.js"; +import type { ElectronActiveObservationInput } from "../../domain/javascript/electronActiveObservation.js"; import { err, type Result } from "../../domain/result.js"; import { createElectronActiveEvidence } from "./ElectronActiveEvidence.js"; diff --git a/src/application/javascript/ElectronBoundaryAnalysis.ts b/src/application/javascript/ElectronBoundaryAnalysis.ts index f2de1746c..eff377b71 100644 --- a/src/application/javascript/ElectronBoundaryAnalysis.ts +++ b/src/application/javascript/ElectronBoundaryAnalysis.ts @@ -1,6 +1,6 @@ import { compareCodePoints } from "../../domain/canonicalOrdering.js"; -import type { ElectronIpcFinding } from "../../domain/electronStaticAnalysisTypes.js"; -import type { ElectronBoundarySummary } from "../../domain/javascriptApplicationAnalysis.js"; +import type { ElectronIpcFinding } from "../../domain/javascript/electronStaticAnalysisTypes.js"; +import type { ElectronBoundarySummary } from "../../domain/javascript/javascriptApplicationAnalysis.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js"; diff --git a/src/application/javascript/ElectronBoundaryGraphContext.ts b/src/application/javascript/ElectronBoundaryGraphContext.ts index 47c5ac7bd..78e59d74b 100644 --- a/src/application/javascript/ElectronBoundaryGraphContext.ts +++ b/src/application/javascript/ElectronBoundaryGraphContext.ts @@ -1,6 +1,6 @@ -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; -import { sha256Text } from "../../domain/javascriptStaticAnalysisHelpers.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; +import { sha256Text } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import type { JavaScriptArtifactGraphContext, diff --git a/src/application/javascript/ElectronBoundaryGraphIpc.ts b/src/application/javascript/ElectronBoundaryGraphIpc.ts index a15081e68..51139b6d4 100644 --- a/src/application/javascript/ElectronBoundaryGraphIpc.ts +++ b/src/application/javascript/ElectronBoundaryGraphIpc.ts @@ -1,5 +1,5 @@ -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; -import type { ElectronSenderValidationFinding } from "../../domain/electronStaticAnalysisTypes.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; +import type { ElectronSenderValidationFinding } from "../../domain/javascript/electronStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { artifactLocalIdentity, diff --git a/src/application/javascript/ElectronBoundaryGraphNative.ts b/src/application/javascript/ElectronBoundaryGraphNative.ts index 3e5db27d8..27e628428 100644 --- a/src/application/javascript/ElectronBoundaryGraphNative.ts +++ b/src/application/javascript/ElectronBoundaryGraphNative.ts @@ -1,4 +1,4 @@ -import type { ElectronNativeAddonBindingFinding } from "../../domain/electronStaticAnalysisTypes.js"; +import type { ElectronNativeAddonBindingFinding } from "../../domain/javascript/electronStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { javascriptAnalysisCoverage, diff --git a/src/application/javascript/ElectronBoundaryGraphWindows.ts b/src/application/javascript/ElectronBoundaryGraphWindows.ts index dae3f4b4d..2bce47d24 100644 --- a/src/application/javascript/ElectronBoundaryGraphWindows.ts +++ b/src/application/javascript/ElectronBoundaryGraphWindows.ts @@ -1,9 +1,9 @@ -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; import type { ElectronBrowserWindowFinding, ElectronContextBridgeFinding, ElectronUtilityProcessFinding, -} from "../../domain/electronStaticAnalysisTypes.js"; +} from "../../domain/javascript/electronStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { artifactLocalIdentity, diff --git a/src/application/javascript/ElectronEvidence.ts b/src/application/javascript/ElectronEvidence.ts index 0608828ae..056bb085d 100644 --- a/src/application/javascript/ElectronEvidence.ts +++ b/src/application/javascript/ElectronEvidence.ts @@ -10,7 +10,7 @@ import type { ElectronTargetList, InspectElectronPageInput, ListElectronTargetsInput, -} from "../../domain/electronObservation.js"; +} from "../../domain/javascript/electronObservation.js"; type ElectronOperation = "list_electron_targets" | "inspect_electron_page"; diff --git a/src/application/javascript/ElectronObservationPort.ts b/src/application/javascript/ElectronObservationPort.ts index 85b9e2574..9e1722570 100644 --- a/src/application/javascript/ElectronObservationPort.ts +++ b/src/application/javascript/ElectronObservationPort.ts @@ -8,7 +8,7 @@ import type { ElectronTargetList, InspectElectronPageInput, ListElectronTargetsInput, -} from "../../domain/electronObservation.js"; +} from "../../domain/javascript/electronObservation.js"; import type { Result } from "../../domain/result.js"; /** Provider-neutral boundary for root-confined Electron file-page observation. */ diff --git a/src/application/javascript/ElectronObservationService.ts b/src/application/javascript/ElectronObservationService.ts index 4542302a1..4149db187 100644 --- a/src/application/javascript/ElectronObservationService.ts +++ b/src/application/javascript/ElectronObservationService.ts @@ -4,7 +4,7 @@ import type { Evidence } from "../../domain/evidence.js"; import type { InspectElectronPageInput, ListElectronTargetsInput, -} from "../../domain/electronObservation.js"; +} from "../../domain/javascript/electronObservation.js"; import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js"; import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import { err, ok, type Result } from "../../domain/result.js"; diff --git a/src/application/javascript/JavaScriptApplicationEmptyLiterals.test.ts b/src/application/javascript/JavaScriptApplicationEmptyLiterals.test.ts index 01b223f32..a3a425bf9 100644 --- a/src/application/javascript/JavaScriptApplicationEmptyLiterals.test.ts +++ b/src/application/javascript/JavaScriptApplicationEmptyLiterals.test.ts @@ -6,10 +6,10 @@ import { expect, it } from "vitest"; import { z } from "zod"; import { createTestTempDirectory } from "../../../tests/fixtures/temporaryDirectory.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../domain/javascriptApplicationAnalysis.js"; -import { matchJavaScriptApplicationVersions } from "../../domain/javascriptApplicationVersionKeys.js"; -import { findApplicationFeatureSeeds } from "../../domain/javascriptFeatureSeed.js"; -import { traceApplicationFeatureInputSchema } from "../../domain/javascriptFeatureTraceSchemas.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../domain/javascript/javascriptApplicationAnalysis.js"; +import { matchJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionKeys.js"; +import { findApplicationFeatureSeeds } from "../../domain/javascript/javascriptFeatureSeed.js"; +import { traceApplicationFeatureInputSchema } from "../../domain/javascript/javascriptFeatureTraceSchemas.js"; import { analyzeJavaScriptApplication } from "./JavaScriptApplicationService.js"; const analyzeSource = async ( diff --git a/src/application/javascript/JavaScriptApplicationEvidence.ts b/src/application/javascript/JavaScriptApplicationEvidence.ts index a0d23348f..c0ae7551c 100644 --- a/src/application/javascript/JavaScriptApplicationEvidence.ts +++ b/src/application/javascript/JavaScriptApplicationEvidence.ts @@ -6,7 +6,7 @@ import { import type { AnalyzeJavaScriptApplicationInput, JavaScriptApplicationAnalysisResult, -} from "../../domain/javascriptApplicationAnalysis.js"; +} from "../../domain/javascript/javascriptApplicationAnalysis.js"; import { jsonValueSchema } from "../../domain/jsonValue.js"; import { JAVASCRIPT_APPLICATION_PROVIDER } from "../InvestigationProviders.js"; diff --git a/src/application/javascript/JavaScriptApplicationEvidenceGraph.ts b/src/application/javascript/JavaScriptApplicationEvidenceGraph.ts index 712bb9eb3..622e5f028 100644 --- a/src/application/javascript/JavaScriptApplicationEvidenceGraph.ts +++ b/src/application/javascript/JavaScriptApplicationEvidenceGraph.ts @@ -8,10 +8,10 @@ import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, type JavaScriptApplicationAnalysisResult, -} from "../../domain/javascriptApplicationAnalysis.js"; -import type { JavaScriptApplicationGraph } from "../../domain/javascriptApplicationGraph.js"; -import type { JavaScriptSemanticGraph } from "../../domain/javascriptSemanticGraph.js"; -import { javascriptRuntimeReconciliationResultSchema } from "../../domain/javascriptRuntimeReconciliationSchemas.js"; +} from "../../domain/javascript/javascriptApplicationAnalysis.js"; +import type { JavaScriptApplicationGraph } from "../../domain/javascript/javascriptApplicationGraph.js"; +import type { JavaScriptSemanticGraph } from "../../domain/javascript/javascriptSemanticGraph.js"; +import { javascriptRuntimeReconciliationResultSchema } from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js"; import { managedApplicationGraphResultSchema } from "../../domain/managedApplicationGraph.js"; /** Supported immutable source for an application-level graph workflow. */ diff --git a/src/application/javascript/JavaScriptApplicationService.ts b/src/application/javascript/JavaScriptApplicationService.ts index 58095d984..6339379db 100644 --- a/src/application/javascript/JavaScriptApplicationService.ts +++ b/src/application/javascript/JavaScriptApplicationService.ts @@ -4,7 +4,7 @@ import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js"; import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, -} from "../../domain/javascriptApplicationAnalysis.js"; +} from "../../domain/javascript/javascriptApplicationAnalysis.js"; import { AnalysisInputError, AnalysisOutputError, diff --git a/src/application/javascript/JavaScriptApplicationTemplateLiterals.test.ts b/src/application/javascript/JavaScriptApplicationTemplateLiterals.test.ts index 7f3de11f3..468fdbcb5 100644 --- a/src/application/javascript/JavaScriptApplicationTemplateLiterals.test.ts +++ b/src/application/javascript/JavaScriptApplicationTemplateLiterals.test.ts @@ -4,7 +4,7 @@ import { join } from "node:path"; import { expect, it } from "vitest"; import { createTestTempDirectory } from "../../../tests/fixtures/temporaryDirectory.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../domain/javascript/javascriptApplicationAnalysis.js"; import { analyzeJavaScriptApplication } from "./JavaScriptApplicationService.js"; const graphIdentities = async (source: string) => { diff --git a/src/application/javascript/JavaScriptApplicationWorkflowEvidence.ts b/src/application/javascript/JavaScriptApplicationWorkflowEvidence.ts index baa6cd50b..294fe48c8 100644 --- a/src/application/javascript/JavaScriptApplicationWorkflowEvidence.ts +++ b/src/application/javascript/JavaScriptApplicationWorkflowEvidence.ts @@ -3,12 +3,12 @@ import { type Evidence, type EvidenceObservation, } from "../../domain/evidence.js"; -import type { ApplicationVersionComparisonResult } from "../../domain/javascriptApplicationVersionComparisonSchemas.js"; -import type { JavaScriptExportShapeComparisonResult } from "../../domain/javascriptExportShapeComparisonSchemas.js"; -import type { ApplicationFeatureTraceResult } from "../../domain/javascriptFeatureTraceSchemas.js"; -import type { JavaScriptSemanticTraceResult } from "../../domain/javascriptSemanticTraceSchemas.js"; +import type { ApplicationVersionComparisonResult } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import type { JavaScriptExportShapeComparisonResult } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js"; +import type { ApplicationFeatureTraceResult } from "../../domain/javascript/javascriptFeatureTraceSchemas.js"; +import type { JavaScriptSemanticTraceResult } from "../../domain/javascript/javascriptSemanticTraceSchemas.js"; import { jsonValueSchema } from "../../domain/jsonValue.js"; -import type { SourceToBundleComparisonResult } from "../../domain/sourceToBundleComparisonSchemas.js"; +import type { SourceToBundleComparisonResult } from "../../domain/javascript/sourceToBundleComparisonSchemas.js"; import { JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER } from "../InvestigationProviders.js"; /** Create derived Evidence for one bounded application-graph feature trace. */ diff --git a/src/application/javascript/JavaScriptApplicationWorkflowService.ts b/src/application/javascript/JavaScriptApplicationWorkflowService.ts index ec32320c9..e41ec5bfb 100644 --- a/src/application/javascript/JavaScriptApplicationWorkflowService.ts +++ b/src/application/javascript/JavaScriptApplicationWorkflowService.ts @@ -7,15 +7,15 @@ import { import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; import { projectInputIssues } from "../../domain/inputIssueProjection.js"; -import { compareJavaScriptApplicationVersions } from "../../domain/javascriptApplicationVersionComparison.js"; -import { compareApplicationVersionsInputSchema } from "../../domain/javascriptApplicationVersionComparisonSchemas.js"; -import { compareJavaScriptExportShapes } from "../../domain/javascriptExportShapeComparison.js"; -import { compareJavaScriptExportShapesInputSchema } from "../../domain/javascriptExportShapeComparisonSchemas.js"; -import { traceApplicationFeature } from "../../domain/javascriptFeatureTrace.js"; -import { traceApplicationFeatureInputSchema } from "../../domain/javascriptFeatureTraceSchemas.js"; +import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js"; +import { compareApplicationVersionsInputSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import { compareJavaScriptExportShapes } from "../../domain/javascript/javascriptExportShapeComparison.js"; +import { compareJavaScriptExportShapesInputSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js"; +import { traceApplicationFeature } from "../../domain/javascript/javascriptFeatureTrace.js"; +import { traceApplicationFeatureInputSchema } from "../../domain/javascript/javascriptFeatureTraceSchemas.js"; import { err, ok, type Result } from "../../domain/result.js"; -import { compareSourceToBundle } from "../../domain/sourceToBundleComparison.js"; -import { compareSourceToBundleInputSchema } from "../../domain/sourceToBundleComparisonSchemas.js"; +import { compareSourceToBundle } from "../../domain/javascript/sourceToBundleComparison.js"; +import { compareSourceToBundleInputSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js"; import { parseApplicationGraphEvidence, parseNativeApplicationEvidence, diff --git a/src/application/javascript/JavaScriptArtifactAnalysis.ts b/src/application/javascript/JavaScriptArtifactAnalysis.ts index 0090099ec..b7ef2ad69 100644 --- a/src/application/javascript/JavaScriptArtifactAnalysis.ts +++ b/src/application/javascript/JavaScriptArtifactAnalysis.ts @@ -1,16 +1,16 @@ import { createHash } from "node:crypto"; -import { analyzeParsedJavaScriptStaticSource } from "../../domain/javascriptStaticAnalysis.js"; -import { analyzeParsedJavaScriptSemantics } from "../../domain/javascriptSemanticAnalysis.js"; -import { parseJavaScriptSource } from "../../domain/javascriptSourceParser.js"; +import { analyzeParsedJavaScriptStaticSource } from "../../domain/javascript/javascriptStaticAnalysis.js"; +import { analyzeParsedJavaScriptSemantics } from "../../domain/javascript/javascriptSemanticAnalysis.js"; +import { parseJavaScriptSource } from "../../domain/javascript/javascriptSourceParser.js"; import { hasValidSourceMapContents } from "../../domain/sourceMapContents.js"; import { flattenSourceMapLeaves } from "../../domain/sourceMapEnvelope.js"; import type { JavaScriptSourceRange, JavaScriptSourcePoint, JavaScriptStaticAnalysis, -} from "../../domain/javascriptStaticAnalysisTypes.js"; -import { failedJavaScriptStaticAnalysis } from "../../domain/javascriptStaticAnalysisHelpers.js"; +} from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; +import { failedJavaScriptStaticAnalysis } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js"; import type { JavaScriptArtifactFile, JavaScriptArtifactFileSet, diff --git a/src/application/javascript/JavaScriptArtifactAnalysisTypes.ts b/src/application/javascript/JavaScriptArtifactAnalysisTypes.ts index 72112410d..df46f721b 100644 --- a/src/application/javascript/JavaScriptArtifactAnalysisTypes.ts +++ b/src/application/javascript/JavaScriptArtifactAnalysisTypes.ts @@ -1,8 +1,8 @@ import type { JavaScriptSourceRange, JavaScriptStaticAnalysis, -} from "../../domain/javascriptStaticAnalysisTypes.js"; -import type { JavaScriptSemanticIr } from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; +import type { JavaScriptSemanticIr } from "../../domain/javascript/javascriptSemanticIr.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; interface JavaScriptStructuredObservation { diff --git a/src/application/javascript/JavaScriptArtifactGraphAccumulator.ts b/src/application/javascript/JavaScriptArtifactGraphAccumulator.ts index e096f70ee..b15743ca8 100644 --- a/src/application/javascript/JavaScriptArtifactGraphAccumulator.ts +++ b/src/application/javascript/JavaScriptArtifactGraphAccumulator.ts @@ -3,7 +3,7 @@ import { createJavaScriptApplicationNode, type ApplicationEdge, type ApplicationNode, -} from "../../domain/javascriptApplicationGraph.js"; +} from "../../domain/javascript/javascriptApplicationGraph.js"; /** Deduplicate graph entities while retaining distinct evidence observations. */ export class JavaScriptArtifactGraphAccumulator { diff --git a/src/application/javascript/JavaScriptArtifactGraphBuilder.ts b/src/application/javascript/JavaScriptArtifactGraphBuilder.ts index 8c187e581..096adb50b 100644 --- a/src/application/javascript/JavaScriptArtifactGraphBuilder.ts +++ b/src/application/javascript/JavaScriptArtifactGraphBuilder.ts @@ -2,7 +2,7 @@ import type { ArtifactInventorySnapshot } from "../ArtifactInventory.js"; import { createJavaScriptApplicationGraph, type JavaScriptApplicationGraph, -} from "../../domain/javascriptApplicationGraph.js"; +} from "../../domain/javascript/javascriptApplicationGraph.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFileSet } from "./JavaScriptArtifactFiles.js"; import { JavaScriptArtifactGraphAccumulator } from "./JavaScriptArtifactGraphAccumulator.js"; @@ -19,7 +19,7 @@ import { import { completeApplicationCoverage, partialApplicationCoverage, -} from "../../domain/javascriptApplicationEvidenceSchemas.js"; +} from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import { addJavaScriptArtifactContainers, addJavaScriptArtifactFiles, diff --git a/src/application/javascript/JavaScriptArtifactGraphBundlers.ts b/src/application/javascript/JavaScriptArtifactGraphBundlers.ts index b2288551b..49810f6c6 100644 --- a/src/application/javascript/JavaScriptArtifactGraphBundlers.ts +++ b/src/application/javascript/JavaScriptArtifactGraphBundlers.ts @@ -1,5 +1,5 @@ -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; -import type { JavaScriptBundlerRegistration } from "../../domain/javascriptStaticAnalysisTypes.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; +import type { JavaScriptBundlerRegistration } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { addAstContainsEdge, diff --git a/src/application/javascript/JavaScriptArtifactGraphContext.ts b/src/application/javascript/JavaScriptArtifactGraphContext.ts index 3a98a6f1f..945dd4714 100644 --- a/src/application/javascript/JavaScriptArtifactGraphContext.ts +++ b/src/application/javascript/JavaScriptArtifactGraphContext.ts @@ -3,9 +3,9 @@ import { completeApplicationCoverage, partialApplicationCoverage, type ApplicationGraphEvidence, -} from "../../domain/javascriptApplicationEvidenceSchemas.js"; -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +} from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFile, diff --git a/src/application/javascript/JavaScriptArtifactGraphDocuments.ts b/src/application/javascript/JavaScriptArtifactGraphDocuments.ts index 6a5142349..18258ef13 100644 --- a/src/application/javascript/JavaScriptArtifactGraphDocuments.ts +++ b/src/application/javascript/JavaScriptArtifactGraphDocuments.ts @@ -6,7 +6,7 @@ import { type JavaScriptArtifactGraphContext, } from "./JavaScriptArtifactGraphContext.js"; import { artifactObservationEvidence } from "./JavaScriptArtifactGraphEvidence.js"; -import { completeApplicationCoverage } from "../../domain/javascriptApplicationEvidenceSchemas.js"; +import { completeApplicationCoverage } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js"; /** Project HTML renderer entrypoints and their local script assets. */ diff --git a/src/application/javascript/JavaScriptArtifactGraphEvidence.ts b/src/application/javascript/JavaScriptArtifactGraphEvidence.ts index 262c3a9aa..43821a3fb 100644 --- a/src/application/javascript/JavaScriptArtifactGraphEvidence.ts +++ b/src/application/javascript/JavaScriptArtifactGraphEvidence.ts @@ -1,5 +1,5 @@ -import type { ApplicationGraphEvidence } from "../../domain/javascriptApplicationEvidenceSchemas.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +import type { ApplicationGraphEvidence } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; const EXTRACTOR = { name: "rea-javascript-artifact-reconstruction", diff --git a/src/application/javascript/JavaScriptArtifactGraphFindings.ts b/src/application/javascript/JavaScriptArtifactGraphFindings.ts index e210a9490..abce52827 100644 --- a/src/application/javascript/JavaScriptArtifactGraphFindings.ts +++ b/src/application/javascript/JavaScriptArtifactGraphFindings.ts @@ -1,5 +1,5 @@ -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; -import type { JavaScriptStaticAnalysis } from "../../domain/javascriptStaticAnalysisTypes.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; +import type { JavaScriptStaticAnalysis } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { addStaticInferenceEdge, diff --git a/src/application/javascript/JavaScriptArtifactGraphStructure.ts b/src/application/javascript/JavaScriptArtifactGraphStructure.ts index 7e95f255d..b2a197936 100644 --- a/src/application/javascript/JavaScriptArtifactGraphStructure.ts +++ b/src/application/javascript/JavaScriptArtifactGraphStructure.ts @@ -1,6 +1,6 @@ import type { ArtifactInventorySnapshot } from "../ArtifactInventory.js"; -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; -import { completeApplicationCoverage } from "../../domain/javascriptApplicationEvidenceSchemas.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; +import { completeApplicationCoverage } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactContainer, diff --git a/src/application/javascript/JavaScriptArtifactPathResolution.test.ts b/src/application/javascript/JavaScriptArtifactPathResolution.test.ts index d1e20058e..1536e3252 100644 --- a/src/application/javascript/JavaScriptArtifactPathResolution.test.ts +++ b/src/application/javascript/JavaScriptArtifactPathResolution.test.ts @@ -6,8 +6,8 @@ import { } from "./JavaScriptArtifactPathResolution.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { artifactLocalIdentity } from "./JavaScriptArtifactGraphContext.js"; -import { applicationNodeIdentitySchema } from "../../domain/javascriptApplicationEvidenceSchemas.js"; -import { analyzeJavaScriptStaticSource } from "../../domain/javascriptStaticAnalysis.js"; +import { applicationNodeIdentitySchema } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; +import { analyzeJavaScriptStaticSource } from "../../domain/javascript/javascriptStaticAnalysis.js"; describe("artifact-local graph identity", () => { it("preserves complete long namespace and key values", () => { diff --git a/src/application/javascript/JavaScriptArtifactReconstruction.ts b/src/application/javascript/JavaScriptArtifactReconstruction.ts index 7ec370e4f..e5871c2b3 100644 --- a/src/application/javascript/JavaScriptArtifactReconstruction.ts +++ b/src/application/javascript/JavaScriptArtifactReconstruction.ts @@ -6,9 +6,9 @@ import { type ArtifactReader, } from "../../artifacts/ArtifactReader.js"; import { DirectoryArtifactReader } from "../../artifacts/DirectoryArtifactReader.js"; -import type { JavaScriptApplicationGraph } from "../../domain/javascriptApplicationGraph.js"; -import type { JavaScriptSemanticGraph } from "../../domain/javascriptSemanticGraph.js"; -import type { ElectronBoundarySummary } from "../../domain/javascriptApplicationAnalysis.js"; +import type { JavaScriptApplicationGraph } from "../../domain/javascript/javascriptApplicationGraph.js"; +import type { JavaScriptSemanticGraph } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { ElectronBoundarySummary } from "../../domain/javascript/javascriptApplicationAnalysis.js"; import { analyzeJavaScriptArtifactFiles } from "./JavaScriptArtifactAnalysis.js"; import { readJavaScriptArtifactFiles } from "./JavaScriptArtifactFiles.js"; import { buildJavaScriptArtifactGraph } from "./JavaScriptArtifactGraphBuilder.js"; diff --git a/src/application/javascript/JavaScriptFileUrlPaths.test.ts b/src/application/javascript/JavaScriptFileUrlPaths.test.ts index e24bd0616..fcb63d7da 100644 --- a/src/application/javascript/JavaScriptFileUrlPaths.test.ts +++ b/src/application/javascript/JavaScriptFileUrlPaths.test.ts @@ -6,8 +6,8 @@ import { parseExpression } from "@babel/parser"; import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../../tests/fixtures/temporaryDirectory.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../domain/javascriptApplicationAnalysis.js"; -import { staticPath } from "../../domain/javascriptStaticAnalysisHelpers.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../domain/javascript/javascriptApplicationAnalysis.js"; +import { staticPath } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js"; import { analyzeJavaScriptApplication } from "./JavaScriptApplicationService.js"; const urlCases = [ diff --git a/src/application/javascript/JavaScriptModuleRelationships.ts b/src/application/javascript/JavaScriptModuleRelationships.ts index d10a9dd70..c3f4ed5e9 100644 --- a/src/application/javascript/JavaScriptModuleRelationships.ts +++ b/src/application/javascript/JavaScriptModuleRelationships.ts @@ -1,16 +1,16 @@ import { posix } from "node:path"; import { compareCodePoints } from "../../domain/canonicalOrdering.js"; -import type { ApplicationNode } from "../../domain/javascriptApplicationGraph.js"; +import type { ApplicationNode } from "../../domain/javascript/javascriptApplicationGraph.js"; import { completeApplicationCoverage, partialApplicationCoverage, -} from "../../domain/javascriptApplicationEvidenceSchemas.js"; +} from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import type { JavaScriptModuleOrigin, JavaScriptSemanticIr, JavaScriptSemanticModuleLink, -} from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { addAstContainsEdge, diff --git a/src/application/javascript/JavaScriptRecoveryPort.ts b/src/application/javascript/JavaScriptRecoveryPort.ts index baf018610..a1975e167 100644 --- a/src/application/javascript/JavaScriptRecoveryPort.ts +++ b/src/application/javascript/JavaScriptRecoveryPort.ts @@ -1,5 +1,5 @@ import type { AnalysisError } from "../../domain/analysisErrorBase.js"; -import type { JavaScriptRecoveryInput } from "../../domain/javascriptRecovery.js"; +import type { JavaScriptRecoveryInput } from "../../domain/javascript/javascriptRecovery.js"; import type { Result } from "../../domain/result.js"; import type { AnalysisExecution, diff --git a/src/application/javascript/JavaScriptRecoveryService.test.ts b/src/application/javascript/JavaScriptRecoveryService.test.ts index 7acef4dc2..f8ed97653 100644 --- a/src/application/javascript/JavaScriptRecoveryService.test.ts +++ b/src/application/javascript/JavaScriptRecoveryService.test.ts @@ -4,7 +4,7 @@ import { err, ok } from "../../domain/result.js"; import type { JavaScriptRecoveryInput, JavaScriptRecoveryResult, -} from "../../domain/javascriptRecovery.js"; +} from "../../domain/javascript/javascriptRecovery.js"; import { createAnalysisExecution } from "../AnalysisProvider.js"; import { JavaScriptRecoveryService } from "./JavaScriptRecoveryService.js"; diff --git a/src/application/javascript/JavaScriptRecoveryService.ts b/src/application/javascript/JavaScriptRecoveryService.ts index 78c08c930..16a536c64 100644 --- a/src/application/javascript/JavaScriptRecoveryService.ts +++ b/src/application/javascript/JavaScriptRecoveryService.ts @@ -10,7 +10,7 @@ import { createEvidence, type Evidence } from "../../domain/evidence.js"; import { javascriptRecoveryInputSchema, javascriptRecoveryResultSchema, -} from "../../domain/javascriptRecovery.js"; +} from "../../domain/javascript/javascriptRecovery.js"; import { jsonObjectSchema } from "../../domain/jsonValue.js"; import { projectInputIssues } from "../../domain/inputIssueProjection.js"; import { err, ok, type Result } from "../../domain/result.js"; diff --git a/src/application/javascript/JavaScriptReturnShapeProjection.test.ts b/src/application/javascript/JavaScriptReturnShapeProjection.test.ts index b62577283..11d91c02f 100644 --- a/src/application/javascript/JavaScriptReturnShapeProjection.test.ts +++ b/src/application/javascript/JavaScriptReturnShapeProjection.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { analyzeJavaScriptSemantics } from "../../domain/javascriptSemanticAnalysis.js"; -import { completeApplicationCoverage } from "../../domain/javascriptApplicationEvidenceSchemas.js"; +import { analyzeJavaScriptSemantics } from "../../domain/javascript/javascriptSemanticAnalysis.js"; +import { completeApplicationCoverage } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import { projectJavaScriptExportReturnShapes } from "./JavaScriptReturnShapeProjection.js"; const projectReturns = (body: string) => { diff --git a/src/application/javascript/JavaScriptReturnShapeProjection.ts b/src/application/javascript/JavaScriptReturnShapeProjection.ts index f8f25ae3d..dcd806ef8 100644 --- a/src/application/javascript/JavaScriptReturnShapeProjection.ts +++ b/src/application/javascript/JavaScriptReturnShapeProjection.ts @@ -2,14 +2,14 @@ import { jsonObjectSchema, jsonValueSchema } from "../../domain/jsonValue.js"; import { partialApplicationCoverage, truncatedApplicationCoverage, -} from "../../domain/javascriptApplicationEvidenceSchemas.js"; +} from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import type { JavaScriptSemanticIr, JavaScriptSemanticCallable, JavaScriptSemanticModuleLink, -} from "../../domain/javascriptSemanticIr.js"; -import { flattenSemanticReturnValue } from "../../domain/javascriptSemanticReturns.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; +import { flattenSemanticReturnValue } from "../../domain/javascript/javascriptSemanticReturns.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactGraphCoverage } from "./JavaScriptArtifactGraphContext.js"; export interface JavaScriptReturnShapeProjection { diff --git a/src/application/javascript/JavaScriptRuntimeObservationEvidence.ts b/src/application/javascript/JavaScriptRuntimeObservationEvidence.ts index 94589a22e..24041bec3 100644 --- a/src/application/javascript/JavaScriptRuntimeObservationEvidence.ts +++ b/src/application/javascript/JavaScriptRuntimeObservationEvidence.ts @@ -10,7 +10,7 @@ import type { JavaScriptRuntimeTargetList, ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, -} from "../../domain/javascriptRuntimeObservation.js"; +} from "../../domain/javascript/javascriptRuntimeObservation.js"; type RuntimeObservationOperation = | "list_javascript_runtime_targets" diff --git a/src/application/javascript/JavaScriptRuntimeObservationPort.ts b/src/application/javascript/JavaScriptRuntimeObservationPort.ts index 5c730d75c..44aa9afc2 100644 --- a/src/application/javascript/JavaScriptRuntimeObservationPort.ts +++ b/src/application/javascript/JavaScriptRuntimeObservationPort.ts @@ -7,7 +7,7 @@ import type { JavaScriptRuntimeTargetList, ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, -} from "../../domain/javascriptRuntimeObservation.js"; +} from "../../domain/javascript/javascriptRuntimeObservation.js"; import type { AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Result } from "../../domain/result.js"; diff --git a/src/application/javascript/JavaScriptRuntimeObservationService.ts b/src/application/javascript/JavaScriptRuntimeObservationService.ts index 51eb6e4c3..cfbdbb05e 100644 --- a/src/application/javascript/JavaScriptRuntimeObservationService.ts +++ b/src/application/javascript/JavaScriptRuntimeObservationService.ts @@ -7,7 +7,7 @@ import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import type { ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, -} from "../../domain/javascriptRuntimeObservation.js"; +} from "../../domain/javascript/javascriptRuntimeObservation.js"; import { err, ok, type Result } from "../../domain/result.js"; /** List targets exposed by the explicitly selected loopback Inspector. */ diff --git a/src/application/javascript/JavaScriptRuntimeReconciliationEvidence.ts b/src/application/javascript/JavaScriptRuntimeReconciliationEvidence.ts index 76f1046bc..afbc2d07c 100644 --- a/src/application/javascript/JavaScriptRuntimeReconciliationEvidence.ts +++ b/src/application/javascript/JavaScriptRuntimeReconciliationEvidence.ts @@ -6,7 +6,7 @@ import { import type { JavaScriptRuntimeReconciliationResult, ReconcileJavaScriptRuntimeInput, -} from "../../domain/javascriptRuntimeReconciliationSchemas.js"; +} from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js"; import { jsonValueSchema } from "../../domain/jsonValue.js"; import { JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER } from "../InvestigationProviders.js"; diff --git a/src/application/javascript/JavaScriptRuntimeReconciliationService.ts b/src/application/javascript/JavaScriptRuntimeReconciliationService.ts index 0bf0338a4..b7e8ef166 100644 --- a/src/application/javascript/JavaScriptRuntimeReconciliationService.ts +++ b/src/application/javascript/JavaScriptRuntimeReconciliationService.ts @@ -8,8 +8,8 @@ import { import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; import { projectInputIssues } from "../../domain/inputIssueProjection.js"; -import { reconcileJavaScriptRuntime } from "../../domain/javascriptRuntimeReconciliation.js"; -import { reconcileJavaScriptRuntimeInputSchema } from "../../domain/javascriptRuntimeReconciliationSchemas.js"; +import { reconcileJavaScriptRuntime } from "../../domain/javascript/javascriptRuntimeReconciliation.js"; +import { reconcileJavaScriptRuntimeInputSchema } from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js"; import { err, ok, type Result } from "../../domain/result.js"; import { createJavaScriptRuntimeReconciliationEvidence } from "./JavaScriptRuntimeReconciliationEvidence.js"; diff --git a/src/application/javascript/JavaScriptSemanticGraphAsyncProjection.ts b/src/application/javascript/JavaScriptSemanticGraphAsyncProjection.ts index 0b13f61f9..c44b1cc5a 100644 --- a/src/application/javascript/JavaScriptSemanticGraphAsyncProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphAsyncProjection.ts @@ -1,9 +1,9 @@ -import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; +import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; import type { JavaScriptSemanticEventOperation, JavaScriptSemanticTimerOperation, -} from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; import { addSemanticGraphNode, addSemanticGraphRelation, diff --git a/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts b/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts index 1575d3bd5..90a61aeb1 100644 --- a/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts +++ b/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts @@ -3,8 +3,8 @@ import { expect, it } from "vitest"; import { buildJavaScriptSemanticGraph } from "./JavaScriptSemanticGraphBuilder.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; -import { queryJavaScriptSemanticGraph } from "../../domain/javascriptSemanticQuery.js"; -import { analyzeJavaScriptSemantics } from "../../domain/javascriptSemanticAnalysis.js"; +import { queryJavaScriptSemanticGraph } from "../../domain/javascript/javascriptSemanticQuery.js"; +import { analyzeJavaScriptSemantics } from "../../domain/javascript/javascriptSemanticAnalysis.js"; const SHA256 = "a".repeat(64); const GRAPH_ID = `jag_${"b".repeat(64)}`; diff --git a/src/application/javascript/JavaScriptSemanticGraphBuilder.ts b/src/application/javascript/JavaScriptSemanticGraphBuilder.ts index 7f36a77d1..c81418eed 100644 --- a/src/application/javascript/JavaScriptSemanticGraphBuilder.ts +++ b/src/application/javascript/JavaScriptSemanticGraphBuilder.ts @@ -2,17 +2,17 @@ import { createJavaScriptSemanticGraph, type JavaScriptSemanticGraph, type JavaScriptSemanticGraphNode, -} from "../../domain/javascriptSemanticGraph.js"; +} from "../../domain/javascript/javascriptSemanticGraph.js"; import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, JAVASCRIPT_SEMANTIC_RELATION_FAMILY, -} from "../../domain/javascriptSemanticGraphSchemas.js"; +} from "../../domain/javascript/javascriptSemanticGraphSchemas.js"; import type { JavaScriptSemanticCallArgument, JavaScriptSemanticIr, -} from "../../domain/javascriptSemanticIr.js"; -import { sourceRangesEqual as rangesEqual } from "../../domain/javascriptStaticAnalysisHelpers.js"; -import type { JavaScriptApplicationGraph } from "../../domain/javascriptApplicationGraph.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; +import { sourceRangesEqual as rangesEqual } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js"; +import type { JavaScriptApplicationGraph } from "../../domain/javascript/javascriptApplicationGraph.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { diff --git a/src/application/javascript/JavaScriptSemanticGraphChildProcessProjection.ts b/src/application/javascript/JavaScriptSemanticGraphChildProcessProjection.ts index 79f848c0d..450ecff56 100644 --- a/src/application/javascript/JavaScriptSemanticGraphChildProcessProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphChildProcessProjection.ts @@ -1,9 +1,9 @@ -import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; +import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; import type { JavaScriptSemanticChildProcessInteraction, JavaScriptSemanticChildProcessSpawn, -} from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; import { addSemanticGraphNode, addSemanticGraphRelation, diff --git a/src/application/javascript/JavaScriptSemanticGraphConstruction.ts b/src/application/javascript/JavaScriptSemanticGraphConstruction.ts index 9e859162d..faa46e7ee 100644 --- a/src/application/javascript/JavaScriptSemanticGraphConstruction.ts +++ b/src/application/javascript/JavaScriptSemanticGraphConstruction.ts @@ -1,17 +1,17 @@ -import type { JavaScriptApplicationGraph } from "../../domain/javascriptApplicationGraph.js"; +import type { JavaScriptApplicationGraph } from "../../domain/javascript/javascriptApplicationGraph.js"; import type { JsonValue } from "../../domain/jsonValue.js"; -import { javascriptDisplayText } from "../../domain/javascriptAstValues.js"; +import { javascriptDisplayText } from "../../domain/javascript/javascriptAstValues.js"; import { createJavaScriptSemanticGraphNode, createJavaScriptSemanticGraphRelation, type JavaScriptSemanticGraphNode, -} from "../../domain/javascriptSemanticGraph.js"; -import type { ApplicationGraphEvidence } from "../../domain/javascriptApplicationEvidenceSchemas.js"; +} from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { ApplicationGraphEvidence } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; import type { JavaScriptSemanticGraphRelation, JavaScriptSemanticGraphUnknown, -} from "../../domain/javascriptSemanticGraphSchemas.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +} from "../../domain/javascript/javascriptSemanticGraphSchemas.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { inferredSemanticEvidence, diff --git a/src/application/javascript/JavaScriptSemanticGraphDataProjection.ts b/src/application/javascript/JavaScriptSemanticGraphDataProjection.ts index 916b4e350..8ebd024b8 100644 --- a/src/application/javascript/JavaScriptSemanticGraphDataProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphDataProjection.ts @@ -1,10 +1,10 @@ -import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; +import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; import type { JavaScriptSemanticBoundaryOperation, JavaScriptSemanticConfigurationOperation, JavaScriptSemanticRequestOperation, -} from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; import { addSemanticGraphNode, addSemanticGraphRelation, diff --git a/src/application/javascript/JavaScriptSemanticGraphEvidence.ts b/src/application/javascript/JavaScriptSemanticGraphEvidence.ts index 901e8e5a4..9cfaa88b4 100644 --- a/src/application/javascript/JavaScriptSemanticGraphEvidence.ts +++ b/src/application/javascript/JavaScriptSemanticGraphEvidence.ts @@ -1,6 +1,6 @@ -import type { ApplicationGraphEvidence } from "../../domain/javascriptApplicationEvidenceSchemas.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +import type { ApplicationGraphEvidence } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; const INFERENCE_LIMITATION = diff --git a/src/application/javascript/JavaScriptSemanticGraphFingerprintProjection.ts b/src/application/javascript/JavaScriptSemanticGraphFingerprintProjection.ts index 1d32e1527..0634b341e 100644 --- a/src/application/javascript/JavaScriptSemanticGraphFingerprintProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphFingerprintProjection.ts @@ -2,8 +2,8 @@ import { createJavaScriptSemanticFingerprint, type JavaScriptSemanticGraph, type JavaScriptSemanticGraphNode, -} from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticIr } from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticIr } from "../../domain/javascript/javascriptSemanticIr.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { observedSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js"; diff --git a/src/application/javascript/JavaScriptSemanticGraphFlowProjection.ts b/src/application/javascript/JavaScriptSemanticGraphFlowProjection.ts index 425c58940..c31aef320 100644 --- a/src/application/javascript/JavaScriptSemanticGraphFlowProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphFlowProjection.ts @@ -1,8 +1,8 @@ -import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticIr } from "../../domain/javascriptSemanticIr.js"; -import { sourceRangesEqual } from "../../domain/javascriptStaticAnalysisHelpers.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticIr } from "../../domain/javascript/javascriptSemanticIr.js"; +import { sourceRangesEqual } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; import { addSemanticGraphNode, diff --git a/src/application/javascript/JavaScriptSemanticGraphObjectProjection.ts b/src/application/javascript/JavaScriptSemanticGraphObjectProjection.ts index 971c66a30..e0a5d8890 100644 --- a/src/application/javascript/JavaScriptSemanticGraphObjectProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphObjectProjection.ts @@ -1,6 +1,6 @@ -import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticObjectOperation } from "../../domain/javascriptSemanticIr.js"; +import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticObjectOperation } from "../../domain/javascript/javascriptSemanticIr.js"; import { addSemanticGraphNode, addSemanticGraphRelation, diff --git a/src/application/javascript/JavaScriptSemanticGraphProjection.ts b/src/application/javascript/JavaScriptSemanticGraphProjection.ts index b421f9b86..4d09591e4 100644 --- a/src/application/javascript/JavaScriptSemanticGraphProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphProjection.ts @@ -1,8 +1,8 @@ import { compareCodePoints } from "../../domain/canonicalOrdering.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; -import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../../domain/javascriptSemanticGraphSchemas.js"; -import type { JavaScriptSemanticIr } from "../../domain/javascriptSemanticIr.js"; -import type { JavaScriptSourceRange } from "../../domain/javascriptStaticAnalysisTypes.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; +import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../../domain/javascript/javascriptSemanticGraphSchemas.js"; +import type { JavaScriptSemanticIr } from "../../domain/javascript/javascriptSemanticIr.js"; +import type { JavaScriptSourceRange } from "../../domain/javascript/javascriptStaticAnalysisTypes.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; /** Find the innermost callable that contains one exact source range. */ diff --git a/src/application/javascript/JavaScriptSemanticGraphResourceProjection.ts b/src/application/javascript/JavaScriptSemanticGraphResourceProjection.ts index e3d6212c5..22ca8aff6 100644 --- a/src/application/javascript/JavaScriptSemanticGraphResourceProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphResourceProjection.ts @@ -1,6 +1,6 @@ -import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticGraphNode } from "../../domain/javascriptSemanticGraph.js"; -import type { JavaScriptSemanticResourceOperation } from "../../domain/javascriptSemanticIr.js"; +import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticGraphNode } from "../../domain/javascript/javascriptSemanticGraph.js"; +import type { JavaScriptSemanticResourceOperation } from "../../domain/javascript/javascriptSemanticIr.js"; import { addSemanticGraphNode, addSemanticGraphRelation, diff --git a/src/application/javascript/JavaScriptSemanticGraphResources.test.ts b/src/application/javascript/JavaScriptSemanticGraphResources.test.ts index d7d667f02..fd14ef93c 100644 --- a/src/application/javascript/JavaScriptSemanticGraphResources.test.ts +++ b/src/application/javascript/JavaScriptSemanticGraphResources.test.ts @@ -3,8 +3,8 @@ import { expect, it } from "vitest"; import { buildJavaScriptSemanticGraph } from "./JavaScriptSemanticGraphBuilder.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; -import { queryJavaScriptSemanticGraph } from "../../domain/javascriptSemanticQuery.js"; -import { analyzeJavaScriptSemantics } from "../../domain/javascriptSemanticAnalysis.js"; +import { queryJavaScriptSemanticGraph } from "../../domain/javascript/javascriptSemanticQuery.js"; +import { analyzeJavaScriptSemantics } from "../../domain/javascript/javascriptSemanticAnalysis.js"; const SHA256 = "a".repeat(64); const GRAPH_ID = `jag_${"b".repeat(64)}`; diff --git a/src/application/javascript/JavaScriptSemanticGraphScope.test.ts b/src/application/javascript/JavaScriptSemanticGraphScope.test.ts index cece02eee..ec7b0341e 100644 --- a/src/application/javascript/JavaScriptSemanticGraphScope.test.ts +++ b/src/application/javascript/JavaScriptSemanticGraphScope.test.ts @@ -3,8 +3,8 @@ import { expect, it } from "vitest"; import { buildJavaScriptSemanticGraph } from "./JavaScriptSemanticGraphBuilder.js"; import type { JavaScriptArtifactAnalysis } from "./JavaScriptArtifactAnalysisTypes.js"; import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js"; -import { analyzeJavaScriptSemantics } from "../../domain/javascriptSemanticAnalysis.js"; -import { topLevelBinding } from "../../domain/javascriptSemanticAnalysis.fixture.js"; +import { analyzeJavaScriptSemantics } from "../../domain/javascript/javascriptSemanticAnalysis.js"; +import { topLevelBinding } from "../../domain/javascript/javascriptSemanticAnalysis.fixture.js"; const SHA256 = "a".repeat(64); const GRAPH_ID = `jag_${"b".repeat(64)}`; diff --git a/src/application/javascript/JavaScriptSemanticGraphValueProjection.ts b/src/application/javascript/JavaScriptSemanticGraphValueProjection.ts index 86da42883..96298f349 100644 --- a/src/application/javascript/JavaScriptSemanticGraphValueProjection.ts +++ b/src/application/javascript/JavaScriptSemanticGraphValueProjection.ts @@ -2,7 +2,7 @@ import type { JsonValue } from "../../domain/jsonValue.js"; import type { JavaScriptSemanticBinding, JavaScriptSemanticValue, -} from "../../domain/javascriptSemanticIr.js"; +} from "../../domain/javascript/javascriptSemanticIr.js"; import { addSemanticGraphNode, addSemanticGraphRelation, diff --git a/src/application/javascript/JavaScriptSemanticTraceService.ts b/src/application/javascript/JavaScriptSemanticTraceService.ts index 0d37b19d0..98dfb12c0 100644 --- a/src/application/javascript/JavaScriptSemanticTraceService.ts +++ b/src/application/javascript/JavaScriptSemanticTraceService.ts @@ -7,11 +7,11 @@ import { import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import type { Evidence } from "../../domain/evidence.js"; import { jsonValueSchema } from "../../domain/jsonValue.js"; -import { queryJavaScriptSemanticGraph } from "../../domain/javascriptSemanticQuery.js"; +import { queryJavaScriptSemanticGraph } from "../../domain/javascript/javascriptSemanticQuery.js"; import { javaScriptSemanticTraceResultSchema, traceJavaScriptSemanticsInputSchema, -} from "../../domain/javascriptSemanticTraceSchemas.js"; +} from "../../domain/javascript/javascriptSemanticTraceSchemas.js"; import { err, ok, type Result } from "../../domain/result.js"; import { parseApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js"; import { createJavaScriptSemanticTraceEvidence } from "./JavaScriptApplicationWorkflowEvidence.js"; diff --git a/src/browser/CdpElectronInspection.ts b/src/browser/CdpElectronInspection.ts index 8fb8e7a3a..646ddf233 100644 --- a/src/browser/CdpElectronInspection.ts +++ b/src/browser/CdpElectronInspection.ts @@ -3,7 +3,7 @@ import type { ProgressReporter } from "../application/ProgressReporter.js"; import type { ElectronPageInspection, InspectElectronPageInput, -} from "../domain/electronObservation.js"; +} from "../domain/javascript/electronObservation.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { CdpConnection, CdpEvent } from "./CdpConnection.js"; import type { CdpEndpointDiscovery, CdpEndpointTarget } from "./CdpEndpoint.js"; diff --git a/src/browser/CdpElectronProvider.ts b/src/browser/CdpElectronProvider.ts index 2f0a00f50..daac1efe2 100644 --- a/src/browser/CdpElectronProvider.ts +++ b/src/browser/CdpElectronProvider.ts @@ -10,7 +10,7 @@ import { type ElectronTargetList, type InspectElectronPageInput, type ListElectronTargetsInput, -} from "../domain/electronObservation.js"; +} from "../domain/javascript/electronObservation.js"; import { AnalysisError } from "../domain/analysisErrorBase.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; diff --git a/src/browser/CdpElectronScripts.ts b/src/browser/CdpElectronScripts.ts index 3d51cef9e..8349125d3 100644 --- a/src/browser/CdpElectronScripts.ts +++ b/src/browser/CdpElectronScripts.ts @@ -1,7 +1,7 @@ import type { ElectronPageInspection, InspectElectronPageInput, -} from "../domain/electronObservation.js"; +} from "../domain/javascript/electronObservation.js"; import { canonicalDigest } from "../domain/comparisonSemantics.js"; import { createWebTextArtifact } from "../domain/webContentArtifact.js"; import type { CdpConnection } from "./CdpConnection.js"; diff --git a/src/browser/CdpElectronWorkers.ts b/src/browser/CdpElectronWorkers.ts index 63a622490..080e1e46a 100644 --- a/src/browser/CdpElectronWorkers.ts +++ b/src/browser/CdpElectronWorkers.ts @@ -1,7 +1,7 @@ import type { ElectronPageInspection, InspectElectronPageInput, -} from "../domain/electronObservation.js"; +} from "../domain/javascript/electronObservation.js"; import type { CdpConnection } from "./CdpConnection.js"; import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js"; import { diff --git a/src/browser/PlaywrightElectronActiveActions.test.ts b/src/browser/PlaywrightElectronActiveActions.test.ts index f2d5b1414..c8890cd45 100644 --- a/src/browser/PlaywrightElectronActiveActions.test.ts +++ b/src/browser/PlaywrightElectronActiveActions.test.ts @@ -5,8 +5,8 @@ import { expect, it } from "vitest"; import { electronActiveObservationInputSchema, electronActiveObservationResultSchema, -} from "../domain/electronActiveObservation.js"; -import { createElectronActiveObservationFixtureResult } from "../domain/electronActiveObservation.fixture.js"; +} from "../domain/javascript/electronActiveObservation.js"; +import { createElectronActiveObservationFixtureResult } from "../domain/javascript/electronActiveObservation.fixture.js"; import { runElectronActions } from "./PlaywrightElectronActiveActions.js"; it("parses window, renderer, and deep-link actions for agents", () => { diff --git a/src/browser/PlaywrightElectronActiveActions.ts b/src/browser/PlaywrightElectronActiveActions.ts index 7f4a953ff..2c4a71183 100644 --- a/src/browser/PlaywrightElectronActiveActions.ts +++ b/src/browser/PlaywrightElectronActiveActions.ts @@ -6,7 +6,7 @@ import { BrowserObservationError } from "../domain/browserObservationError.js"; import type { ElectronActiveObservationInput, ElectronActiveObservationResult, -} from "../domain/electronActiveObservation.js"; +} from "../domain/javascript/electronActiveObservation.js"; const OPERATION = "capture_electron_scenario" as const; diff --git a/src/browser/PlaywrightElectronActiveProvider.ts b/src/browser/PlaywrightElectronActiveProvider.ts index de81adccd..903136908 100644 --- a/src/browser/PlaywrightElectronActiveProvider.ts +++ b/src/browser/PlaywrightElectronActiveProvider.ts @@ -14,7 +14,7 @@ import { electronActiveObservationResultSchema, type ElectronActiveObservationInput, type ElectronActiveObservationResult, -} from "../domain/electronActiveObservation.js"; +} from "../domain/javascript/electronActiveObservation.js"; import { AnalysisError } from "../domain/analysisErrorBase.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; diff --git a/src/browser/WebSourceMapFetcher.ts b/src/browser/WebSourceMapFetcher.ts index e8a84f761..adbbd0771 100644 --- a/src/browser/WebSourceMapFetcher.ts +++ b/src/browser/WebSourceMapFetcher.ts @@ -3,8 +3,8 @@ import { AnyMap, eachMapping } from "@jridgewell/trace-mapping"; import { sanitizeBrowserUrl } from "../domain/browserObservation.js"; import { isUrlLikeModuleSpecifier } from "../domain/webBundleAnalyzerAst.js"; -import { analyzeParsedJavaScriptSemantics } from "../domain/javascriptSemanticAnalysis.js"; -import { parseJavaScriptSource } from "../domain/javascriptSourceParser.js"; +import { analyzeParsedJavaScriptSemantics } from "../domain/javascript/javascriptSemanticAnalysis.js"; +import { parseJavaScriptSource } from "../domain/javascript/javascriptSourceParser.js"; import { hasValidSourceMapContents } from "../domain/sourceMapContents.js"; import type { AnalyzeWebBundleInput, diff --git a/src/cli/applicationCommands.ts b/src/cli/applicationCommands.ts index 7c8b0c05c..15e8ebcd2 100644 --- a/src/cli/applicationCommands.ts +++ b/src/cli/applicationCommands.ts @@ -22,11 +22,11 @@ import { androidApplicationProjectionInputSchema } from "../domain/android/andro import { appleApplicationProjectionInputSchema } from "../domain/appleApplication.js"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import type { Logger } from "../logger.js"; -import { traceApplicationFeatureInputSchema } from "../domain/javascriptFeatureTraceSchemas.js"; -import { traceJavaScriptSemanticsInputSchema } from "../domain/javascriptSemanticTraceSchemas.js"; -import { compareApplicationVersionsInputSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js"; -import { compareSourceToBundleInputSchema } from "../domain/sourceToBundleComparisonSchemas.js"; -import { compareJavaScriptExportShapesInputSchema } from "../domain/javascriptExportShapeComparisonSchemas.js"; +import { traceApplicationFeatureInputSchema } from "../domain/javascript/javascriptFeatureTraceSchemas.js"; +import { traceJavaScriptSemanticsInputSchema } from "../domain/javascript/javascriptSemanticTraceSchemas.js"; +import { compareApplicationVersionsInputSchema } from "../domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import { compareSourceToBundleInputSchema } from "../domain/javascript/sourceToBundleComparisonSchemas.js"; +import { compareJavaScriptExportShapesInputSchema } from "../domain/javascript/javascriptExportShapeComparisonSchemas.js"; import { projectInputIssues } from "../domain/inputIssueProjection.js"; import { reconstructionObligationLedgerInputSchema } from "../domain/reconstructionObligationLedgerSchemas.js"; diff --git a/src/cli/electronCommands.ts b/src/cli/electronCommands.ts index b11975e5f..f89b1e518 100644 --- a/src/cli/electronCommands.ts +++ b/src/cli/electronCommands.ts @@ -10,8 +10,8 @@ import { logCliCommand } from "../cliLogging.js"; import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, -} from "../domain/electronObservation.js"; -import { electronActiveObservationInputSchema } from "../domain/electronActiveObservation.js"; +} from "../domain/javascript/electronObservation.js"; +import { electronActiveObservationInputSchema } from "../domain/javascript/electronActiveObservation.js"; import { AnalysisInputError } from "../domain/analysisErrorCore.js"; import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; import type { JsonValue } from "../domain/jsonValue.js"; diff --git a/src/cliJavaScriptRuntimeCommands.ts b/src/cliJavaScriptRuntimeCommands.ts index f577c3f3a..89eac7e53 100644 --- a/src/cliJavaScriptRuntimeCommands.ts +++ b/src/cliJavaScriptRuntimeCommands.ts @@ -11,7 +11,7 @@ import { javascriptRuntimeKindSchema, listJavaScriptRuntimeTargetsInputSchema, observeJavaScriptRuntimeInputSchema, -} from "./domain/javascriptRuntimeObservation.js"; +} from "./domain/javascript/javascriptRuntimeObservation.js"; import { AnalysisInputError } from "./domain/analysisErrorCore.js"; import { projectAnalysisError } from "./domain/analysisErrorProjection.js"; import type { JsonValue } from "./domain/jsonValue.js"; diff --git a/src/contracts/applicationToolContracts.ts b/src/contracts/applicationToolContracts.ts index 7e8c38156..e95bf7b03 100644 --- a/src/contracts/applicationToolContracts.ts +++ b/src/contracts/applicationToolContracts.ts @@ -1,15 +1,15 @@ -import { applicationVersionComparisonResultSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js"; -import { applicationFeatureTraceResultSchema } from "../domain/javascriptFeatureTraceSchemas.js"; -import { javaScriptSemanticTraceResultSchema } from "../domain/javascriptSemanticTraceSchemas.js"; -import { javaScriptExportShapeComparisonResultSchema } from "../domain/javascriptExportShapeComparisonSchemas.js"; -import { sourceToBundleComparisonResultSchema } from "../domain/sourceToBundleComparisonSchemas.js"; +import { applicationVersionComparisonResultSchema } from "../domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import { applicationFeatureTraceResultSchema } from "../domain/javascript/javascriptFeatureTraceSchemas.js"; +import { javaScriptSemanticTraceResultSchema } from "../domain/javascript/javascriptSemanticTraceSchemas.js"; +import { javaScriptExportShapeComparisonResultSchema } from "../domain/javascript/javascriptExportShapeComparisonSchemas.js"; +import { sourceToBundleComparisonResultSchema } from "../domain/javascript/sourceToBundleComparisonSchemas.js"; import { compareApplicationVersionsRequestSchema, compareJavaScriptExportShapesRequestSchema, compareSourceToBundleRequestSchema, traceApplicationFeatureRequestSchema, traceJavaScriptSemanticsRequestSchema, -} from "./applicationWorkflowInputContracts.js"; +} from "./javascript/applicationWorkflowInputContracts.js"; import { reconstructionCoverageEvaluationInputSchema } from "../domain/reconstructionCoverageInput.js"; import { reconstructionClosureResultSchema } from "../domain/reconstructionCoverage.js"; import { @@ -32,7 +32,7 @@ import { JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE, JAVASCRIPT_FEATURE_TRACE_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, -} from "./javascriptApplicationWorkflowExamples.js"; +} from "./javascript/javascriptApplicationWorkflowExamples.js"; import { ANDROID_APPLICATION_GRAPH_EXAMPLE, APPLE_APPLICATION_GRAPH_EXAMPLE, diff --git a/src/contracts/contractSnapshot.test.ts b/src/contracts/contractSnapshot.test.ts index 7b9346e8e..f0bbe69a6 100644 --- a/src/contracts/contractSnapshot.test.ts +++ b/src/contracts/contractSnapshot.test.ts @@ -12,11 +12,11 @@ import { MANAGED_TOOL_CONTRACTS } from "./managedToolContracts.js"; import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "./managedWorkflowToolContracts.js"; import { BROWSER_TOOL_CONTRACTS } from "./browserToolContracts.js"; import { BROWSER_SCENARIO_TOOL_CONTRACTS } from "./browserScenarioToolContracts.js"; -import { ELECTRON_TOOL_CONTRACTS } from "./electronToolContracts.js"; -import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascriptRuntimeObservationToolContracts.js"; +import { ELECTRON_TOOL_CONTRACTS } from "./javascript/electronToolContracts.js"; +import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascript/javascriptRuntimeObservationToolContracts.js"; import { APPLICATION_TOOL_CONTRACTS } from "./applicationToolContracts.js"; import { WEB_SCRIPT_TOOL_CONTRACTS } from "./webScriptToolContracts.js"; -import { JAVASCRIPT_RECOVERY_TOOL_CONTRACTS } from "./javascriptRecoveryToolContracts.js"; +import { JAVASCRIPT_RECOVERY_TOOL_CONTRACTS } from "./javascript/javascriptRecoveryToolContracts.js"; import { TOOL_EFFECTS } from "./toolEffects.js"; import { toolContract } from "./toolContracts.js"; const contractJsonSchema = (schema: z.ZodType) => diff --git a/src/contracts/applicationWorkflowInputContracts.ts b/src/contracts/javascript/applicationWorkflowInputContracts.ts similarity index 77% rename from src/contracts/applicationWorkflowInputContracts.ts rename to src/contracts/javascript/applicationWorkflowInputContracts.ts index 7a33c9169..4b50621ed 100644 --- a/src/contracts/applicationWorkflowInputContracts.ts +++ b/src/contracts/javascript/applicationWorkflowInputContracts.ts @@ -1,11 +1,11 @@ import { z } from "zod"; -import { evidenceInputSchema } from "./evidenceInputContracts.js"; -import { compareApplicationVersionsInputSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js"; -import { compareJavaScriptExportShapesInputSchema } from "../domain/javascriptExportShapeComparisonSchemas.js"; -import { traceApplicationFeatureInputSchema } from "../domain/javascriptFeatureTraceSchemas.js"; -import { javaScriptSemanticQueryInputSchema } from "../domain/javascriptSemanticQuerySchemas.js"; -import { compareSourceToBundleInputSchema } from "../domain/sourceToBundleComparisonSchemas.js"; +import { evidenceInputSchema } from "../evidenceInputContracts.js"; +import { compareApplicationVersionsInputSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import { compareJavaScriptExportShapesInputSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js"; +import { traceApplicationFeatureInputSchema } from "../../domain/javascript/javascriptFeatureTraceSchemas.js"; +import { javaScriptSemanticQueryInputSchema } from "../../domain/javascript/javascriptSemanticQuerySchemas.js"; +import { compareSourceToBundleInputSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js"; const traceApplicationFeatureFacts = { native_observations: diff --git a/src/contracts/electronToolContracts.ts b/src/contracts/javascript/electronToolContracts.ts similarity index 92% rename from src/contracts/electronToolContracts.ts rename to src/contracts/javascript/electronToolContracts.ts index 09d7de176..7c6897689 100644 --- a/src/contracts/electronToolContracts.ts +++ b/src/contracts/javascript/electronToolContracts.ts @@ -1,24 +1,24 @@ -import type { ToolContract } from "./toolContracts.js"; -import { toolContractMetadata } from "./toolEffects.js"; -import { evidenceResultOf } from "./toolOutputSchemas.js"; +import type { ToolContract } from "../toolContracts.js"; +import { toolContractMetadata } from "../toolEffects.js"; +import { evidenceResultOf } from "../toolOutputSchemas.js"; import { electronPageInspectionSchema, electronTargetListSchema, inspectElectronPageInputSchema, listElectronTargetsInputSchema, -} from "../domain/electronObservation.js"; +} from "../../domain/javascript/electronObservation.js"; import { electronActiveObservationInputSchema, electronActiveObservationResultSchema, -} from "../domain/electronActiveObservation.js"; +} from "../../domain/javascript/electronActiveObservation.js"; import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, -} from "../domain/javascriptApplicationAnalysis.js"; +} from "../../domain/javascript/javascriptApplicationAnalysis.js"; import { javascriptRuntimeReconciliationResultSchema, reconcileJavaScriptRuntimeInputSchema, -} from "../domain/javascriptRuntimeReconciliationSchemas.js"; +} from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js"; import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "./javascriptRuntimeReconciliationExample.js"; const listOutputSchema = evidenceResultOf(electronTargetListSchema); diff --git a/src/contracts/javascriptApplicationWorkflowExamples.ts b/src/contracts/javascript/javascriptApplicationWorkflowExamples.ts similarity index 93% rename from src/contracts/javascriptApplicationWorkflowExamples.ts rename to src/contracts/javascript/javascriptApplicationWorkflowExamples.ts index d94a2fcc0..7cd7c25d5 100644 --- a/src/contracts/javascriptApplicationWorkflowExamples.ts +++ b/src/contracts/javascript/javascriptApplicationWorkflowExamples.ts @@ -1,10 +1,10 @@ -import { createEvidence } from "../domain/evidence.js"; -import { reconcileJavaScriptRuntime } from "../domain/javascriptRuntimeReconciliation.js"; +import { createEvidence } from "../../domain/evidence.js"; +import { reconcileJavaScriptRuntime } from "../../domain/javascript/javascriptRuntimeReconciliation.js"; import { JAVASCRIPT_APPLICATION_EVIDENCE_EXAMPLE, JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE, } from "./javascriptRuntimeReconciliationExample.js"; -import { createHistoricalSourceGraph } from "../domain/referenceSourceGraph.js"; +import { createHistoricalSourceGraph } from "../../domain/referenceSourceGraph.js"; const reconciliation = reconcileJavaScriptRuntime( JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE, diff --git a/src/contracts/javascriptRecoveryToolContracts.ts b/src/contracts/javascript/javascriptRecoveryToolContracts.ts similarity index 84% rename from src/contracts/javascriptRecoveryToolContracts.ts rename to src/contracts/javascript/javascriptRecoveryToolContracts.ts index a9ba47c66..e085440e4 100644 --- a/src/contracts/javascriptRecoveryToolContracts.ts +++ b/src/contracts/javascript/javascriptRecoveryToolContracts.ts @@ -1,10 +1,10 @@ import { javascriptRecoveryInputSchema, javascriptRecoveryResultSchema, -} from "../domain/javascriptRecovery.js"; -import { toolContractMetadata } from "./toolEffects.js"; -import { evidenceResultOf } from "./toolOutputSchemaPrimitives.js"; -import type { ToolContract } from "./toolContractTypes.js"; +} from "../../domain/javascript/javascriptRecovery.js"; +import { toolContractMetadata } from "../toolEffects.js"; +import { evidenceResultOf } from "../toolOutputSchemaPrimitives.js"; +import type { ToolContract } from "../toolContractTypes.js"; /** Derived script artifacts from optional upstream recovery adapters. */ export const JAVASCRIPT_RECOVERY_TOOL_CONTRACTS = [ diff --git a/src/contracts/javascriptRuntimeObservationToolContracts.ts b/src/contracts/javascript/javascriptRuntimeObservationToolContracts.ts similarity index 90% rename from src/contracts/javascriptRuntimeObservationToolContracts.ts rename to src/contracts/javascript/javascriptRuntimeObservationToolContracts.ts index 92e661962..2af7a7cbe 100644 --- a/src/contracts/javascriptRuntimeObservationToolContracts.ts +++ b/src/contracts/javascript/javascriptRuntimeObservationToolContracts.ts @@ -1,12 +1,12 @@ -import type { ToolContract } from "./toolContracts.js"; -import { toolContractMetadata } from "./toolEffects.js"; -import { evidenceResultOf } from "./toolOutputSchemas.js"; +import type { ToolContract } from "../toolContracts.js"; +import { toolContractMetadata } from "../toolEffects.js"; +import { evidenceResultOf } from "../toolOutputSchemas.js"; import { javascriptRuntimeObservationSchema, javascriptRuntimeTargetListSchema, listJavaScriptRuntimeTargetsInputSchema, observeJavaScriptRuntimeInputSchema, -} from "../domain/javascriptRuntimeObservation.js"; +} from "../../domain/javascript/javascriptRuntimeObservation.js"; const endpoint = "http://127.0.0.1:9229"; diff --git a/src/contracts/javascriptRuntimeReconciliationExample.ts b/src/contracts/javascript/javascriptRuntimeReconciliationExample.ts similarity index 94% rename from src/contracts/javascriptRuntimeReconciliationExample.ts rename to src/contracts/javascript/javascriptRuntimeReconciliationExample.ts index 6b71eba2b..6f7f3bd0f 100644 --- a/src/contracts/javascriptRuntimeReconciliationExample.ts +++ b/src/contracts/javascript/javascriptRuntimeReconciliationExample.ts @@ -1,14 +1,14 @@ -import { createEvidence } from "../domain/evidence.js"; +import { createEvidence } from "../../domain/evidence.js"; import { createJavaScriptApplicationGraph, createJavaScriptApplicationNode, -} from "../domain/javascriptApplicationGraph.js"; -import { createWebTextArtifact } from "../domain/webContentArtifact.js"; +} from "../../domain/javascript/javascriptApplicationGraph.js"; +import { createWebTextArtifact } from "../../domain/webContentArtifact.js"; import { createJavaScriptSemanticGraph, createJavaScriptSemanticGraphNode, -} from "../domain/javascriptSemanticGraph.js"; -import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../domain/javascriptSemanticGraphSchemas.js"; +} from "../../domain/javascript/javascriptSemanticGraph.js"; +import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../../domain/javascript/javascriptSemanticGraphSchemas.js"; const applicationSha256 = "1".repeat(64); const script = createWebTextArtifact( diff --git a/src/contracts/toolContracts.test.ts b/src/contracts/toolContracts.test.ts index 948cc59fb..b73588cb0 100644 --- a/src/contracts/toolContracts.test.ts +++ b/src/contracts/toolContracts.test.ts @@ -11,10 +11,10 @@ import { ANDROID_TOOL_CONTRACTS } from "./android/androidToolContracts.js"; import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "./managedWorkflowToolContracts.js"; import { NATIVE_TOOL_CONTRACTS } from "./nativeToolContracts.js"; import { BROWSER_PROVIDER_TOOL_CONTRACTS } from "./browserProviderToolContracts.js"; -import { ELECTRON_TOOL_CONTRACTS } from "./electronToolContracts.js"; -import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascriptRuntimeObservationToolContracts.js"; +import { ELECTRON_TOOL_CONTRACTS } from "./javascript/electronToolContracts.js"; +import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascript/javascriptRuntimeObservationToolContracts.js"; import { APPLICATION_TOOL_CONTRACTS } from "./applicationToolContracts.js"; -import { JAVASCRIPT_RECOVERY_TOOL_CONTRACTS } from "./javascriptRecoveryToolContracts.js"; +import { JAVASCRIPT_RECOVERY_TOOL_CONTRACTS } from "./javascript/javascriptRecoveryToolContracts.js"; import { WEB_SCRIPT_TOOL_CONTRACTS } from "./webScriptToolContracts.js"; const GROUPS = { diff --git a/src/contracts/toolContracts.ts b/src/contracts/toolContracts.ts index c5de12fd2..3966c2f56 100644 --- a/src/contracts/toolContracts.ts +++ b/src/contracts/toolContracts.ts @@ -5,11 +5,11 @@ import { FIRMWARE_TOOL_CONTRACTS } from "./firmware/firmwareToolContracts.js"; import { ANDROID_TOOL_CONTRACTS } from "./android/androidToolContracts.js"; import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "./managedWorkflowToolContracts.js"; import { BROWSER_PROVIDER_TOOL_CONTRACTS } from "./browserProviderToolContracts.js"; -import { ELECTRON_TOOL_CONTRACTS } from "./electronToolContracts.js"; -import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascriptRuntimeObservationToolContracts.js"; +import { ELECTRON_TOOL_CONTRACTS } from "./javascript/electronToolContracts.js"; +import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "./javascript/javascriptRuntimeObservationToolContracts.js"; import { APPLICATION_TOOL_CONTRACTS } from "./applicationToolContracts.js"; import { WEB_SCRIPT_TOOL_CONTRACTS } from "./webScriptToolContracts.js"; -import { JAVASCRIPT_RECOVERY_TOOL_CONTRACTS } from "./javascriptRecoveryToolContracts.js"; +import { JAVASCRIPT_RECOVERY_TOOL_CONTRACTS } from "./javascript/javascriptRecoveryToolContracts.js"; import { OFFICIAL_TOOL_CONTRACTS } from "./officialToolContracts.js"; import { ENHANCED_TOOL_CONTRACTS } from "./enhancedToolContracts.js"; import { SESSION_TOOL_CONTRACTS } from "./sessionToolContracts.js"; diff --git a/src/contracts/workflowInputContracts.test.ts b/src/contracts/workflowInputContracts.test.ts index 508529737..291d3dded 100644 --- a/src/contracts/workflowInputContracts.test.ts +++ b/src/contracts/workflowInputContracts.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from "vitest"; -import { traceJavaScriptSemanticsRequestSchema } from "./applicationWorkflowInputContracts.js"; +import { traceJavaScriptSemanticsRequestSchema } from "./javascript/applicationWorkflowInputContracts.js"; import { ARTIFACT_TOOL_CONTRACTS } from "./artifactToolContracts.js"; -import { JAVASCRIPT_FEATURE_TRACE_FULL_EVIDENCE_EXAMPLE } from "./javascriptApplicationWorkflowExamples.js"; +import { JAVASCRIPT_FEATURE_TRACE_FULL_EVIDENCE_EXAMPLE } from "./javascript/javascriptApplicationWorkflowExamples.js"; import { MANAGED_APPLICATION_GRAPH_EXAMPLE, MANAGED_MEMBER_COMPARISON_EXAMPLE, diff --git a/src/domain/electronActiveObservation.fixture.ts b/src/domain/javascript/electronActiveObservation.fixture.ts similarity index 100% rename from src/domain/electronActiveObservation.fixture.ts rename to src/domain/javascript/electronActiveObservation.fixture.ts diff --git a/src/domain/electronActiveObservation.ts b/src/domain/javascript/electronActiveObservation.ts similarity index 100% rename from src/domain/electronActiveObservation.ts rename to src/domain/javascript/electronActiveObservation.ts diff --git a/src/domain/electronNativeLoaderPaths.test.ts b/src/domain/javascript/electronNativeLoaderPaths.test.ts similarity index 100% rename from src/domain/electronNativeLoaderPaths.test.ts rename to src/domain/javascript/electronNativeLoaderPaths.test.ts diff --git a/src/domain/electronObservation.ts b/src/domain/javascript/electronObservation.ts similarity index 92% rename from src/domain/electronObservation.ts rename to src/domain/javascript/electronObservation.ts index 538e2872f..735bbcf84 100644 --- a/src/domain/electronObservation.ts +++ b/src/domain/javascript/electronObservation.ts @@ -1,10 +1,10 @@ import { z } from "zod"; -import { browserCompletenessSchema } from "./browserCompleteness.js"; -import { browserEndpointSchema } from "./browserObservation.js"; -import { browserVersionSchema } from "./browserObservationSchemas.js"; -import { webTextArtifactSchema } from "./webContentArtifact.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { browserCompletenessSchema } from "../browserCompleteness.js"; +import { browserEndpointSchema } from "../browserObservation.js"; +import { browserVersionSchema } from "../browserObservationSchemas.js"; +import { webTextArtifactSchema } from "../webContentArtifact.js"; +import { prefixedDigestSchema } from "../digests.js"; const approvedElectronInput = { cdp_endpoint: browserEndpointSchema, diff --git a/src/domain/electronStaticAnalysis.ts b/src/domain/javascript/electronStaticAnalysis.ts similarity index 100% rename from src/domain/electronStaticAnalysis.ts rename to src/domain/javascript/electronStaticAnalysis.ts diff --git a/src/domain/electronStaticAnalysisBrowser.ts b/src/domain/javascript/electronStaticAnalysisBrowser.ts similarity index 99% rename from src/domain/electronStaticAnalysisBrowser.ts rename to src/domain/javascript/electronStaticAnalysisBrowser.ts index ff28c0ed2..3439e1a6c 100644 --- a/src/domain/electronStaticAnalysisBrowser.ts +++ b/src/domain/javascript/electronStaticAnalysisBrowser.ts @@ -15,7 +15,7 @@ import { electronStaticValue, objectProperty, } from "./electronStaticAnalysisValues.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js"; import { argumentNode, diff --git a/src/domain/electronStaticAnalysisIpc.ts b/src/domain/javascript/electronStaticAnalysisIpc.ts similarity index 100% rename from src/domain/electronStaticAnalysisIpc.ts rename to src/domain/javascript/electronStaticAnalysisIpc.ts diff --git a/src/domain/electronStaticAnalysisNative.ts b/src/domain/javascript/electronStaticAnalysisNative.ts similarity index 98% rename from src/domain/electronStaticAnalysisNative.ts rename to src/domain/javascript/electronStaticAnalysisNative.ts index 6e6c75e0e..e292596dc 100644 --- a/src/domain/electronStaticAnalysisNative.ts +++ b/src/domain/javascript/electronStaticAnalysisNative.ts @@ -1,7 +1,7 @@ import * as t from "@babel/types"; -import { compareCodePoints } from "./canonicalOrdering.js"; -import { stripQueryAndFragment } from "./artifactPathSyntax.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; +import { stripQueryAndFragment } from "../artifactPathSyntax.js"; import type { ElectronNativeAddonBindingFinding } from "./electronStaticAnalysisTypes.js"; import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js"; import { diff --git a/src/domain/electronStaticAnalysisOptions.test.ts b/src/domain/javascript/electronStaticAnalysisOptions.test.ts similarity index 100% rename from src/domain/electronStaticAnalysisOptions.test.ts rename to src/domain/javascript/electronStaticAnalysisOptions.test.ts diff --git a/src/domain/electronStaticAnalysisTypes.ts b/src/domain/javascript/electronStaticAnalysisTypes.ts similarity index 100% rename from src/domain/electronStaticAnalysisTypes.ts rename to src/domain/javascript/electronStaticAnalysisTypes.ts diff --git a/src/domain/electronStaticAnalysisValues.ts b/src/domain/javascript/electronStaticAnalysisValues.ts similarity index 98% rename from src/domain/electronStaticAnalysisValues.ts rename to src/domain/javascript/electronStaticAnalysisValues.ts index 2ed6551fd..d6d9636c0 100644 --- a/src/domain/electronStaticAnalysisValues.ts +++ b/src/domain/javascript/electronStaticAnalysisValues.ts @@ -1,6 +1,6 @@ import * as t from "@babel/types"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { ElectronStaticValue } from "./electronStaticAnalysisTypes.js"; import { semanticStaticPropertyName } from "./javascriptAstValues.js"; import { sourceSlice } from "./javascriptStaticAnalysisHelpers.js"; diff --git a/src/domain/javascriptApplicationAnalysis.ts b/src/domain/javascript/javascriptApplicationAnalysis.ts similarity index 97% rename from src/domain/javascriptApplicationAnalysis.ts rename to src/domain/javascript/javascriptApplicationAnalysis.ts index 966f2b31c..10e17f745 100644 --- a/src/domain/javascriptApplicationAnalysis.ts +++ b/src/domain/javascript/javascriptApplicationAnalysis.ts @@ -2,8 +2,8 @@ import { z } from "zod"; import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js"; import { javaScriptSemanticGraphSchema } from "./javascriptSemanticGraph.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const countSchema = z.number().int().min(0); diff --git a/src/domain/javascriptApplicationChangeGraph.ts b/src/domain/javascript/javascriptApplicationChangeGraph.ts similarity index 99% rename from src/domain/javascriptApplicationChangeGraph.ts rename to src/domain/javascript/javascriptApplicationChangeGraph.ts index dd52f6f90..c5b2d0d07 100644 --- a/src/domain/javascriptApplicationChangeGraph.ts +++ b/src/domain/javascript/javascriptApplicationChangeGraph.ts @@ -7,7 +7,7 @@ import { type ApplicationNode, type JavaScriptApplicationGraph, } from "./javascriptApplicationGraph.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { ApplicationVersionComparisonItem } from "./javascriptApplicationVersionComparisonSchemas.js"; interface ChangeGraphInput { diff --git a/src/domain/javascriptApplicationEvidenceSchemas.ts b/src/domain/javascript/javascriptApplicationEvidenceSchemas.ts similarity index 99% rename from src/domain/javascriptApplicationEvidenceSchemas.ts rename to src/domain/javascript/javascriptApplicationEvidenceSchemas.ts index 72bbf74a3..9cbe043a9 100644 --- a/src/domain/javascriptApplicationEvidenceSchemas.ts +++ b/src/domain/javascript/javascriptApplicationEvidenceSchemas.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const boundedTextSchema = z.string().min(1); const boundedKeySchema = z.string().min(1); diff --git a/src/domain/javascriptApplicationGraph.fixture.ts b/src/domain/javascript/javascriptApplicationGraph.fixture.ts similarity index 100% rename from src/domain/javascriptApplicationGraph.fixture.ts rename to src/domain/javascript/javascriptApplicationGraph.fixture.ts diff --git a/src/domain/javascriptApplicationGraph.test.ts b/src/domain/javascript/javascriptApplicationGraph.test.ts similarity index 100% rename from src/domain/javascriptApplicationGraph.test.ts rename to src/domain/javascript/javascriptApplicationGraph.test.ts diff --git a/src/domain/javascriptApplicationGraph.ts b/src/domain/javascript/javascriptApplicationGraph.ts similarity index 98% rename from src/domain/javascriptApplicationGraph.ts rename to src/domain/javascript/javascriptApplicationGraph.ts index ef82887c7..cfb8181b5 100644 --- a/src/domain/javascriptApplicationGraph.ts +++ b/src/domain/javascript/javascriptApplicationGraph.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { canonicalDigest, canonicalJson } from "./comparisonSemantics.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { canonicalDigest, canonicalJson } from "../comparisonSemantics.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { ApplicationGraphEvidence, diff --git a/src/domain/javascriptApplicationGraphSchemas.ts b/src/domain/javascript/javascriptApplicationGraphSchemas.ts similarity index 97% rename from src/domain/javascriptApplicationGraphSchemas.ts rename to src/domain/javascript/javascriptApplicationGraphSchemas.ts index 93a36b54b..0836664a3 100644 --- a/src/domain/javascriptApplicationGraphSchemas.ts +++ b/src/domain/javascript/javascriptApplicationGraphSchemas.ts @@ -5,8 +5,8 @@ import { applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js"; -import { jsonValueSchema } from "./jsonValue.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { jsonValueSchema } from "../jsonValue.js"; +import { prefixedDigestSchema } from "../digests.js"; const boundedTextSchema = z.string().min(1); diff --git a/src/domain/javascriptApplicationVersionComparison.ts b/src/domain/javascript/javascriptApplicationVersionComparison.ts similarity index 97% rename from src/domain/javascriptApplicationVersionComparison.ts rename to src/domain/javascript/javascriptApplicationVersionComparison.ts index 4358565ca..dd340c298 100644 --- a/src/domain/javascriptApplicationVersionComparison.ts +++ b/src/domain/javascript/javascriptApplicationVersionComparison.ts @@ -1,6 +1,6 @@ -import { canonicalDigest } from "./comparisonSemantics.js"; -import { uniqueSorted } from "./canonicalOrdering.js"; -import type { Evidence } from "./evidence.js"; +import { canonicalDigest } from "../comparisonSemantics.js"; +import { uniqueSorted } from "../canonicalOrdering.js"; +import type { Evidence } from "../evidence.js"; import { buildJavaScriptApplicationChangeGraph } from "./javascriptApplicationChangeGraph.js"; import { applicationVersionComparisonResultSchema, diff --git a/src/domain/javascriptApplicationVersionComparisonSchemas.ts b/src/domain/javascript/javascriptApplicationVersionComparisonSchemas.ts similarity index 97% rename from src/domain/javascriptApplicationVersionComparisonSchemas.ts rename to src/domain/javascript/javascriptApplicationVersionComparisonSchemas.ts index 1fcd2ac43..49488de51 100644 --- a/src/domain/javascriptApplicationVersionComparisonSchemas.ts +++ b/src/domain/javascript/javascriptApplicationVersionComparisonSchemas.ts @@ -1,10 +1,10 @@ import { z } from "zod"; -import { emptyArraySchema } from "./emptyArraySchema.js"; -import { evidenceSchema } from "./evidence.js"; +import { emptyArraySchema } from "../emptyArraySchema.js"; +import { evidenceSchema } from "../evidence.js"; import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js"; import { JAVASCRIPT_APPLICATION_NODE_KINDS } from "./javascriptApplicationGraphSchemas.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const nodeIdSchema = prefixedDigestSchema("jag_node"); diff --git a/src/domain/javascriptApplicationVersionItems.ts b/src/domain/javascript/javascriptApplicationVersionItems.ts similarity index 98% rename from src/domain/javascriptApplicationVersionItems.ts rename to src/domain/javascript/javascriptApplicationVersionItems.ts index a47a4ffc1..2a3deac86 100644 --- a/src/domain/javascriptApplicationVersionItems.ts +++ b/src/domain/javascript/javascriptApplicationVersionItems.ts @@ -2,9 +2,9 @@ import { absenceClaimable, canonicalDigest, canonicalJson, -} from "./comparisonSemantics.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; -import type { Evidence } from "./evidence.js"; +} from "../comparisonSemantics.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; +import type { Evidence } from "../evidence.js"; import { type ApplicationEdge, type ApplicationNode, diff --git a/src/domain/javascriptApplicationVersionKeys.ts b/src/domain/javascript/javascriptApplicationVersionKeys.ts similarity index 98% rename from src/domain/javascriptApplicationVersionKeys.ts rename to src/domain/javascript/javascriptApplicationVersionKeys.ts index c8dd81359..9b7917158 100644 --- a/src/domain/javascriptApplicationVersionKeys.ts +++ b/src/domain/javascript/javascriptApplicationVersionKeys.ts @@ -1,6 +1,6 @@ -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { ApplicationNode } from "./javascriptApplicationGraph.js"; -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; /** One deterministic one-to-one match between two graph versions. */ type ApplicationVersionPairMatch = diff --git a/src/domain/javascriptAstFingerprint.test.ts b/src/domain/javascript/javascriptAstFingerprint.test.ts similarity index 85% rename from src/domain/javascriptAstFingerprint.test.ts rename to src/domain/javascript/javascriptAstFingerprint.test.ts index 94eafeb82..ddbb85ade 100644 --- a/src/domain/javascriptAstFingerprint.test.ts +++ b/src/domain/javascript/javascriptAstFingerprint.test.ts @@ -1,7 +1,7 @@ import { parse } from "@babel/parser"; import { describe, expect, it } from "vitest"; -import { fingerprintJavaScriptAst } from "../../src/domain/javascriptAstFingerprint.js"; +import { fingerprintJavaScriptAst } from "./javascriptAstFingerprint.js"; describe("JavaScript AST fingerprints", () => { it("includes complete literal values in the fingerprint", () => { diff --git a/src/domain/javascriptAstFingerprint.ts b/src/domain/javascript/javascriptAstFingerprint.ts similarity index 98% rename from src/domain/javascriptAstFingerprint.ts rename to src/domain/javascript/javascriptAstFingerprint.ts index deda5e330..569a4895d 100644 --- a/src/domain/javascriptAstFingerprint.ts +++ b/src/domain/javascript/javascriptAstFingerprint.ts @@ -2,7 +2,7 @@ import { createHash } from "node:crypto"; import * as t from "@babel/types"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { propertyName } from "./javascriptAstValues.js"; import { stringValue } from "./javascriptStaticAnalysisHelpers.js"; diff --git a/src/domain/javascriptAstValues.ts b/src/domain/javascript/javascriptAstValues.ts similarity index 100% rename from src/domain/javascriptAstValues.ts rename to src/domain/javascript/javascriptAstValues.ts diff --git a/src/domain/javascriptExportShapeComparison.ts b/src/domain/javascript/javascriptExportShapeComparison.ts similarity index 99% rename from src/domain/javascriptExportShapeComparison.ts rename to src/domain/javascript/javascriptExportShapeComparison.ts index af6f0afc8..d8c8620fa 100644 --- a/src/domain/javascriptExportShapeComparison.ts +++ b/src/domain/javascript/javascriptExportShapeComparison.ts @@ -1,4 +1,4 @@ -import { uniqueSorted } from "./canonicalOrdering.js"; +import { uniqueSorted } from "../canonicalOrdering.js"; import { digestExportShapeValue } from "./javascriptExportShapeComparisonIdentity.js"; import { javaScriptExportShapeComparisonResultSchema, diff --git a/src/domain/javascriptExportShapeComparisonIdentity.ts b/src/domain/javascript/javascriptExportShapeComparisonIdentity.ts similarity index 100% rename from src/domain/javascriptExportShapeComparisonIdentity.ts rename to src/domain/javascript/javascriptExportShapeComparisonIdentity.ts diff --git a/src/domain/javascriptExportShapeComparisonSchemas.test.ts b/src/domain/javascript/javascriptExportShapeComparisonSchemas.test.ts similarity index 100% rename from src/domain/javascriptExportShapeComparisonSchemas.test.ts rename to src/domain/javascript/javascriptExportShapeComparisonSchemas.test.ts diff --git a/src/domain/javascriptExportShapeComparisonSchemas.ts b/src/domain/javascript/javascriptExportShapeComparisonSchemas.ts similarity index 98% rename from src/domain/javascriptExportShapeComparisonSchemas.ts rename to src/domain/javascript/javascriptExportShapeComparisonSchemas.ts index 4048eda7d..1e0d47795 100644 --- a/src/domain/javascriptExportShapeComparisonSchemas.ts +++ b/src/domain/javascript/javascriptExportShapeComparisonSchemas.ts @@ -1,7 +1,7 @@ import { z } from "zod"; -import { evidenceSchema } from "./evidence.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { evidenceSchema } from "../evidence.js"; +import { prefixedDigestSchema } from "../digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const graphIdSchema = prefixedDigestSchema("jag"); diff --git a/src/domain/javascriptExportShapeSelection.ts b/src/domain/javascript/javascriptExportShapeSelection.ts similarity index 99% rename from src/domain/javascriptExportShapeSelection.ts rename to src/domain/javascript/javascriptExportShapeSelection.ts index 24609e5d6..10c706780 100644 --- a/src/domain/javascriptExportShapeSelection.ts +++ b/src/domain/javascript/javascriptExportShapeSelection.ts @@ -7,7 +7,7 @@ import { type JavaScriptExportShapeComparisonResult, type ProjectedExportReturnShapes, } from "./javascriptExportShapeComparisonSchemas.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; type Shape = ProjectedExportReturnShapes["static_return_shapes"][number]; type SelectorResult = JavaScriptExportShapeComparisonResult["left"]; diff --git a/src/domain/javascriptExportShapeVariants.ts b/src/domain/javascript/javascriptExportShapeVariants.ts similarity index 99% rename from src/domain/javascriptExportShapeVariants.ts rename to src/domain/javascript/javascriptExportShapeVariants.ts index a34018ae7..00c420c44 100644 --- a/src/domain/javascriptExportShapeVariants.ts +++ b/src/domain/javascript/javascriptExportShapeVariants.ts @@ -7,7 +7,7 @@ import type { JavaScriptExportShapeComparisonResult, ProjectedExportReturnShapes, } from "./javascriptExportShapeComparisonSchemas.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { SelectedJavaScriptExport } from "./javascriptExportShapeSelection.js"; type Primitive = string | number | boolean | null; diff --git a/src/domain/javascriptFeatureSeed.array_members.test.ts b/src/domain/javascript/javascriptFeatureSeed.array_members.test.ts similarity index 99% rename from src/domain/javascriptFeatureSeed.array_members.test.ts rename to src/domain/javascript/javascriptFeatureSeed.array_members.test.ts index 3eccb17ec..bc3828fb5 100644 --- a/src/domain/javascriptFeatureSeed.array_members.test.ts +++ b/src/domain/javascript/javascriptFeatureSeed.array_members.test.ts @@ -13,7 +13,7 @@ import { findApplicationFeatureSeeds } from "./javascriptFeatureSeed.js"; import { traceApplicationFeature } from "./javascriptFeatureTrace.js"; import type { ApplicationFeatureSeed } from "./javascriptFeatureTraceSchemas.js"; import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js"; -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; const memberFields = [ { kind: "api", nodeKind: "context-bridge-api", field: "members" }, diff --git a/src/domain/javascriptFeatureSeed.test.ts b/src/domain/javascript/javascriptFeatureSeed.test.ts similarity index 97% rename from src/domain/javascriptFeatureSeed.test.ts rename to src/domain/javascript/javascriptFeatureSeed.test.ts index 746808340..d7f69b871 100644 --- a/src/domain/javascriptFeatureSeed.test.ts +++ b/src/domain/javascript/javascriptFeatureSeed.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; import { buildSyntheticJavaScriptApplicationGraph } from "./javascriptApplicationGraph.fixture.js"; -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; import { findApplicationFeatureSeeds } from "./javascriptFeatureSeed.js"; describe("application feature seed property matching", () => { diff --git a/src/domain/javascriptFeatureSeed.ts b/src/domain/javascript/javascriptFeatureSeed.ts similarity index 98% rename from src/domain/javascriptFeatureSeed.ts rename to src/domain/javascript/javascriptFeatureSeed.ts index 819bb7577..9a836a2cd 100644 --- a/src/domain/javascriptFeatureSeed.ts +++ b/src/domain/javascript/javascriptFeatureSeed.ts @@ -1,10 +1,10 @@ -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { ApplicationNode } from "./javascriptApplicationGraph.js"; import { featureSeedMatchMode, type ApplicationFeatureSeed, } from "./javascriptFeatureTraceSchemas.js"; -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; /** One explicit field that matched a feature seed. */ export interface ApplicationFeatureSeedMatch { diff --git a/src/domain/javascriptFeatureTrace.ts b/src/domain/javascript/javascriptFeatureTrace.ts similarity index 97% rename from src/domain/javascriptFeatureTrace.ts rename to src/domain/javascript/javascriptFeatureTrace.ts index 2435486d6..c10b2bd25 100644 --- a/src/domain/javascriptFeatureTrace.ts +++ b/src/domain/javascript/javascriptFeatureTrace.ts @@ -1,6 +1,6 @@ -import { canonicalDigest } from "./comparisonSemantics.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; -import type { Evidence } from "./evidence.js"; +import { canonicalDigest } from "../comparisonSemantics.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; +import type { Evidence } from "../evidence.js"; import { createJavaScriptApplicationGraph, type ApplicationEdge, diff --git a/src/domain/javascriptFeatureTraceSchemas.ts b/src/domain/javascript/javascriptFeatureTraceSchemas.ts similarity index 96% rename from src/domain/javascriptFeatureTraceSchemas.ts rename to src/domain/javascript/javascriptFeatureTraceSchemas.ts index 5ee879a7c..517d7c9ad 100644 --- a/src/domain/javascriptFeatureTraceSchemas.ts +++ b/src/domain/javascript/javascriptFeatureTraceSchemas.ts @@ -1,9 +1,9 @@ import { z } from "zod"; -import { evidenceSchema, providerSchema } from "./evidence.js"; +import { evidenceSchema, providerSchema } from "../evidence.js"; import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const nodeIdSchema = prefixedDigestSchema("jag_node"); diff --git a/src/domain/javascriptFeatureTraversal.ts b/src/domain/javascript/javascriptFeatureTraversal.ts similarity index 98% rename from src/domain/javascriptFeatureTraversal.ts rename to src/domain/javascript/javascriptFeatureTraversal.ts index 234ef66dc..8935fe11e 100644 --- a/src/domain/javascriptFeatureTraversal.ts +++ b/src/domain/javascript/javascriptFeatureTraversal.ts @@ -3,7 +3,7 @@ import { type ApplicationNode, type JavaScriptApplicationGraph, } from "./javascriptApplicationGraph.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; interface AdjacencyEntry { readonly edge: ApplicationEdge; diff --git a/src/domain/javascriptNativeHandoff.ts b/src/domain/javascript/javascriptNativeHandoff.ts similarity index 97% rename from src/domain/javascriptNativeHandoff.ts rename to src/domain/javascript/javascriptNativeHandoff.ts index 646fbc0d7..4ea721566 100644 --- a/src/domain/javascriptNativeHandoff.ts +++ b/src/domain/javascript/javascriptNativeHandoff.ts @@ -1,5 +1,5 @@ -import { compareCodePoints } from "./canonicalOrdering.js"; -import type { Evidence } from "./evidence.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; +import type { Evidence } from "../evidence.js"; import { type ApplicationEdge, type ApplicationNode, diff --git a/src/domain/javascriptRecovery.test.ts b/src/domain/javascript/javascriptRecovery.test.ts similarity index 100% rename from src/domain/javascriptRecovery.test.ts rename to src/domain/javascript/javascriptRecovery.test.ts diff --git a/src/domain/javascriptRecovery.ts b/src/domain/javascript/javascriptRecovery.ts similarity index 98% rename from src/domain/javascriptRecovery.ts rename to src/domain/javascript/javascriptRecovery.ts index 759a73ac7..90c1f5df1 100644 --- a/src/domain/javascriptRecovery.ts +++ b/src/domain/javascript/javascriptRecovery.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { digestSchema } from "./digests.js"; +import { digestSchema } from "../digests.js"; import { analyzeJavaScriptApplicationInputSchema } from "./javascriptApplicationAnalysis.js"; /** Recover derived readable modules from one explicitly selected local script. */ diff --git a/src/domain/javascriptRuntimeLoadState.ts b/src/domain/javascript/javascriptRuntimeLoadState.ts similarity index 99% rename from src/domain/javascriptRuntimeLoadState.ts rename to src/domain/javascript/javascriptRuntimeLoadState.ts index c8949061b..5c9996871 100644 --- a/src/domain/javascriptRuntimeLoadState.ts +++ b/src/domain/javascript/javascriptRuntimeLoadState.ts @@ -1,5 +1,5 @@ import { type ApplicationNode } from "./javascriptApplicationGraph.js"; -import { uniqueSorted } from "./canonicalOrdering.js"; +import { uniqueSorted } from "../canonicalOrdering.js"; import type { ParsedStaticLayer } from "./javascriptRuntimeReconciliationParsing.js"; import type { JavaScriptRuntimeReconciliationItem, diff --git a/src/domain/javascriptRuntimeObservation.ts b/src/domain/javascript/javascriptRuntimeObservation.ts similarity index 97% rename from src/domain/javascriptRuntimeObservation.ts rename to src/domain/javascript/javascriptRuntimeObservation.ts index cbed67155..7ae9fb93d 100644 --- a/src/domain/javascriptRuntimeObservation.ts +++ b/src/domain/javascript/javascriptRuntimeObservation.ts @@ -1,7 +1,7 @@ import { z } from "zod"; -import { browserEndpointSchema } from "./browserObservation.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { browserEndpointSchema } from "../browserObservation.js"; +import { prefixedDigestSchema } from "../digests.js"; const observationTextSchema = z.string().min(1); diff --git a/src/domain/javascriptRuntimeReconciliation.ts b/src/domain/javascript/javascriptRuntimeReconciliation.ts similarity index 100% rename from src/domain/javascriptRuntimeReconciliation.ts rename to src/domain/javascript/javascriptRuntimeReconciliation.ts diff --git a/src/domain/javascriptRuntimeReconciliationActive.ts b/src/domain/javascript/javascriptRuntimeReconciliationActive.ts similarity index 94% rename from src/domain/javascriptRuntimeReconciliationActive.ts rename to src/domain/javascript/javascriptRuntimeReconciliationActive.ts index 2c6fbf742..3dbd073c6 100644 --- a/src/domain/javascriptRuntimeReconciliationActive.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationActive.ts @@ -1,18 +1,18 @@ import { isAbsolute } from "node:path"; -import { canonicalDigest } from "./comparisonSemantics.js"; -import { isPathWithinRoot } from "./localPath.js"; +import { canonicalDigest } from "../comparisonSemantics.js"; +import { isPathWithinRoot } from "../localPath.js"; import { z } from "zod"; import { classifyBrowserCompleteness, type BrowserCompleteness, -} from "./browserCompleteness.js"; +} from "../browserCompleteness.js"; import { electronActiveObservationResultSchema, type ElectronActiveObservationResult, } from "./electronActiveObservation.js"; -import type { Evidence } from "./evidence.js"; +import type { Evidence } from "../evidence.js"; import type { ParsedRuntimeCapture } from "./javascriptRuntimeReconciliationParsing.js"; /** Parse active Electron Evidence as a bounded, target-only runtime capture. */ diff --git a/src/domain/javascriptRuntimeReconciliationGraph.ts b/src/domain/javascript/javascriptRuntimeReconciliationGraph.ts similarity index 99% rename from src/domain/javascriptRuntimeReconciliationGraph.ts rename to src/domain/javascript/javascriptRuntimeReconciliationGraph.ts index 65b3d0bf6..32f16469d 100644 --- a/src/domain/javascriptRuntimeReconciliationGraph.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationGraph.ts @@ -9,7 +9,7 @@ import type { ParsedRuntimeCapture, ParsedStaticLayer, } from "./javascriptRuntimeReconciliationParsing.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { RuntimeProjection } from "./javascriptRuntimeReconciliationRuntime.js"; interface ReconciledGraphInput { diff --git a/src/domain/javascriptRuntimeReconciliationMatching.ts b/src/domain/javascript/javascriptRuntimeReconciliationMatching.ts similarity index 99% rename from src/domain/javascriptRuntimeReconciliationMatching.ts rename to src/domain/javascript/javascriptRuntimeReconciliationMatching.ts index 22b13d9a9..4bc31c1c0 100644 --- a/src/domain/javascriptRuntimeReconciliationMatching.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationMatching.ts @@ -3,9 +3,9 @@ import { type ApplicationEdge, type ApplicationGraphEvidence, } from "./javascriptApplicationGraph.js"; -import { canonicalDigest } from "./comparisonSemantics.js"; +import { canonicalDigest } from "../comparisonSemantics.js"; import type { ParsedStaticLayer } from "./javascriptRuntimeReconciliationParsing.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { JavaScriptRuntimeReconciliationItem } from "./javascriptRuntimeReconciliationSchemas.js"; import type { RuntimeReconciliationEntity } from "./javascriptRuntimeReconciliationRuntime.js"; import { diff --git a/src/domain/javascriptRuntimeReconciliationParsing.ts b/src/domain/javascript/javascriptRuntimeReconciliationParsing.ts similarity index 98% rename from src/domain/javascriptRuntimeReconciliationParsing.ts rename to src/domain/javascript/javascriptRuntimeReconciliationParsing.ts index 3fc8f074b..0d9b64657 100644 --- a/src/domain/javascriptRuntimeReconciliationParsing.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationParsing.ts @@ -5,11 +5,11 @@ import { browserEndpointSchema, webPageInspectionSchema, type WebPageInspection, -} from "./browserObservation.js"; +} from "../browserObservation.js"; import { classifyBrowserCompleteness, type BrowserCompleteness, -} from "./browserCompleteness.js"; +} from "../browserCompleteness.js"; import { electronPageInspectionSchema, type ElectronPageInspection, @@ -20,9 +20,9 @@ import { type JavaScriptRuntimeObservation, type JavaScriptRuntimeLocation, } from "./javascriptRuntimeObservation.js"; -import { canonicalDigest } from "./comparisonSemantics.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; -import { parseEvidence, type Evidence } from "./evidence.js"; +import { canonicalDigest } from "../comparisonSemantics.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; +import { parseEvidence, type Evidence } from "../evidence.js"; import { javascriptApplicationAnalysisResultSchema, type JavaScriptApplicationAnalysisResult, diff --git a/src/domain/javascriptRuntimeReconciliationResult.ts b/src/domain/javascript/javascriptRuntimeReconciliationResult.ts similarity index 98% rename from src/domain/javascriptRuntimeReconciliationResult.ts rename to src/domain/javascript/javascriptRuntimeReconciliationResult.ts index 483224873..e39166d81 100644 --- a/src/domain/javascriptRuntimeReconciliationResult.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationResult.ts @@ -1,6 +1,6 @@ import { type JavaScriptApplicationGraph } from "./javascriptApplicationGraph.js"; -import { canonicalDigest } from "./comparisonSemantics.js"; -import { uniqueSorted } from "./canonicalOrdering.js"; +import { canonicalDigest } from "../comparisonSemantics.js"; +import { uniqueSorted } from "../canonicalOrdering.js"; import type { StaticLoadStateProjection } from "./javascriptRuntimeLoadState.js"; import type { RuntimeMatchingProjection } from "./javascriptRuntimeReconciliationMatching.js"; import type { diff --git a/src/domain/javascriptRuntimeReconciliationRuntime.ts b/src/domain/javascript/javascriptRuntimeReconciliationRuntime.ts similarity index 99% rename from src/domain/javascriptRuntimeReconciliationRuntime.ts rename to src/domain/javascript/javascriptRuntimeReconciliationRuntime.ts index 7c220ca79..64b7b5cb1 100644 --- a/src/domain/javascriptRuntimeReconciliationRuntime.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationRuntime.ts @@ -1,4 +1,4 @@ -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; import { createJavaScriptApplicationEdge, createJavaScriptApplicationNode, diff --git a/src/domain/javascriptRuntimeReconciliationSchemas.ts b/src/domain/javascript/javascriptRuntimeReconciliationSchemas.ts similarity index 97% rename from src/domain/javascriptRuntimeReconciliationSchemas.ts rename to src/domain/javascript/javascriptRuntimeReconciliationSchemas.ts index 454fc7c51..38f606b4d 100644 --- a/src/domain/javascriptRuntimeReconciliationSchemas.ts +++ b/src/domain/javascript/javascriptRuntimeReconciliationSchemas.ts @@ -1,11 +1,11 @@ import { z } from "zod"; -import { compareCodePoints } from "./canonicalOrdering.js"; -import { evidenceSchema } from "./evidence.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; +import { evidenceSchema } from "../evidence.js"; import { javascriptRuntimeUnresolvedLocationSchema } from "./javascriptRuntimeObservation.js"; import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const nodeIdSchema = prefixedDigestSchema("jag_node"); diff --git a/src/domain/javascriptRuntimeStaticCandidates.ts b/src/domain/javascript/javascriptRuntimeStaticCandidates.ts similarity index 99% rename from src/domain/javascriptRuntimeStaticCandidates.ts rename to src/domain/javascript/javascriptRuntimeStaticCandidates.ts index 6f72a6610..cca3c2d77 100644 --- a/src/domain/javascriptRuntimeStaticCandidates.ts +++ b/src/domain/javascript/javascriptRuntimeStaticCandidates.ts @@ -4,7 +4,7 @@ import { type ApplicationNode, type JavaScriptApplicationGraph, } from "./javascriptApplicationGraph.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { ParsedStaticLayer } from "./javascriptRuntimeReconciliationParsing.js"; import type { RuntimeReconciliationEntity } from "./javascriptRuntimeReconciliationRuntime.js"; diff --git a/src/domain/javascriptSemanticAnalysis.builtin_defaults.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.builtin_defaults.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.builtin_defaults.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.builtin_defaults.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.calls.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.calls.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.calls.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.calls.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.dataflow.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.dataflow.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.dataflow.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.dataflow.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.empty_keys.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.empty_keys.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.empty_keys.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.empty_keys.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.fixture.ts b/src/domain/javascript/javascriptSemanticAnalysis.fixture.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.fixture.ts rename to src/domain/javascript/javascriptSemanticAnalysis.fixture.ts diff --git a/src/domain/javascriptSemanticAnalysis.function_names.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.function_names.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.function_names.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.function_names.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.member_mutations.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.member_mutations.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.member_mutations.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.member_mutations.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.native_bindings.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.native_bindings.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.native_bindings.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.native_bindings.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.promise_ownership.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.promise_ownership.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.promise_ownership.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.promise_ownership.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.rejection.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.rejection.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.rejection.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.rejection.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.runtime_boundaries.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.runtime_boundaries.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.runtime_boundaries.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.runtime_boundaries.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.structure.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.structure.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.structure.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.structure.test.ts diff --git a/src/domain/javascriptSemanticAnalysis.ts b/src/domain/javascript/javascriptSemanticAnalysis.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.ts rename to src/domain/javascript/javascriptSemanticAnalysis.ts diff --git a/src/domain/javascriptSemanticAnalysis.unions.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.unions.test.ts similarity index 100% rename from src/domain/javascriptSemanticAnalysis.unions.test.ts rename to src/domain/javascript/javascriptSemanticAnalysis.unions.test.ts diff --git a/src/domain/javascriptSemanticAsyncEffects.ts b/src/domain/javascript/javascriptSemanticAsyncEffects.ts similarity index 100% rename from src/domain/javascriptSemanticAsyncEffects.ts rename to src/domain/javascript/javascriptSemanticAsyncEffects.ts diff --git a/src/domain/javascriptSemanticCallResolution.ts b/src/domain/javascript/javascriptSemanticCallResolution.ts similarity index 99% rename from src/domain/javascriptSemanticCallResolution.ts rename to src/domain/javascript/javascriptSemanticCallResolution.ts index 4ffcc48e0..26b270ab1 100644 --- a/src/domain/javascriptSemanticCallResolution.ts +++ b/src/domain/javascript/javascriptSemanticCallResolution.ts @@ -4,7 +4,7 @@ import type { JavaScriptSemanticArgumentFlow, JavaScriptSemanticCallable, } from "./javascriptSemanticIr.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js"; import { resolveSemanticBindingState, diff --git a/src/domain/javascriptSemanticCalls.ts b/src/domain/javascript/javascriptSemanticCalls.ts similarity index 100% rename from src/domain/javascriptSemanticCalls.ts rename to src/domain/javascript/javascriptSemanticCalls.ts diff --git a/src/domain/javascriptSemanticChildProcesses.ts b/src/domain/javascript/javascriptSemanticChildProcesses.ts similarity index 99% rename from src/domain/javascriptSemanticChildProcesses.ts rename to src/domain/javascript/javascriptSemanticChildProcesses.ts index cdc127b1a..d470c55c7 100644 --- a/src/domain/javascriptSemanticChildProcesses.ts +++ b/src/domain/javascript/javascriptSemanticChildProcesses.ts @@ -16,7 +16,7 @@ import { type JavaScriptSemanticAnalysisState, type JavaScriptSemanticBindingState, } from "./javascriptSemanticState.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js"; import { range } from "./javascriptStaticAnalysisHelpers.js"; import { diff --git a/src/domain/javascriptSemanticCoverage.ts b/src/domain/javascript/javascriptSemanticCoverage.ts similarity index 100% rename from src/domain/javascriptSemanticCoverage.ts rename to src/domain/javascript/javascriptSemanticCoverage.ts diff --git a/src/domain/javascriptSemanticDataEffectHelpers.ts b/src/domain/javascript/javascriptSemanticDataEffectHelpers.ts similarity index 100% rename from src/domain/javascriptSemanticDataEffectHelpers.ts rename to src/domain/javascript/javascriptSemanticDataEffectHelpers.ts diff --git a/src/domain/javascriptSemanticDataEffects.ts b/src/domain/javascript/javascriptSemanticDataEffects.ts similarity index 99% rename from src/domain/javascriptSemanticDataEffects.ts rename to src/domain/javascript/javascriptSemanticDataEffects.ts index e3874fd52..6dad44bf0 100644 --- a/src/domain/javascriptSemanticDataEffects.ts +++ b/src/domain/javascript/javascriptSemanticDataEffects.ts @@ -8,7 +8,7 @@ import type { JavaScriptSemanticConfigurationOperation, JavaScriptSemanticRequestOperation, } from "./javascriptSemanticIr.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { semanticStaticPropertyKey, semanticStaticPropertyName, diff --git a/src/domain/javascriptSemanticDerivedAnalysis.ts b/src/domain/javascript/javascriptSemanticDerivedAnalysis.ts similarity index 100% rename from src/domain/javascriptSemanticDerivedAnalysis.ts rename to src/domain/javascript/javascriptSemanticDerivedAnalysis.ts diff --git a/src/domain/javascriptSemanticFingerprints.ts b/src/domain/javascript/javascriptSemanticFingerprints.ts similarity index 99% rename from src/domain/javascriptSemanticFingerprints.ts rename to src/domain/javascript/javascriptSemanticFingerprints.ts index e630bbe5f..260f8bd9c 100644 --- a/src/domain/javascriptSemanticFingerprints.ts +++ b/src/domain/javascript/javascriptSemanticFingerprints.ts @@ -2,7 +2,7 @@ import { createHash } from "node:crypto"; import * as t from "@babel/types"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { JavaScriptSemanticCallAnalysis } from "./javascriptSemanticCalls.js"; import type { JavaScriptSemanticCallable, diff --git a/src/domain/javascriptSemanticGraph.ts b/src/domain/javascript/javascriptSemanticGraph.ts similarity index 99% rename from src/domain/javascriptSemanticGraph.ts rename to src/domain/javascript/javascriptSemanticGraph.ts index 510ffe008..a7af45a99 100644 --- a/src/domain/javascriptSemanticGraph.ts +++ b/src/domain/javascript/javascriptSemanticGraph.ts @@ -1,7 +1,7 @@ import { z } from "zod"; -import { canonicalDigest, canonicalJson } from "./comparisonSemantics.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { canonicalDigest, canonicalJson } from "../comparisonSemantics.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { ApplicationGraphEvidence } from "./javascriptApplicationEvidenceSchemas.js"; import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, diff --git a/src/domain/javascriptSemanticGraphQuery.test.ts b/src/domain/javascript/javascriptSemanticGraphQuery.test.ts similarity index 100% rename from src/domain/javascriptSemanticGraphQuery.test.ts rename to src/domain/javascript/javascriptSemanticGraphQuery.test.ts diff --git a/src/domain/javascriptSemanticGraphSchemas.ts b/src/domain/javascript/javascriptSemanticGraphSchemas.ts similarity index 98% rename from src/domain/javascriptSemanticGraphSchemas.ts rename to src/domain/javascript/javascriptSemanticGraphSchemas.ts index 9ecd62a3c..945bc05de 100644 --- a/src/domain/javascriptSemanticGraphSchemas.ts +++ b/src/domain/javascript/javascriptSemanticGraphSchemas.ts @@ -1,9 +1,9 @@ import { z } from "zod"; import { applicationGraphEvidenceSchema } from "./javascriptApplicationEvidenceSchemas.js"; -import { jsonValueSchema } from "./jsonValue.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { jsonValueSchema } from "../jsonValue.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const boundedTextSchema = z.string().min(1); const semanticNodeIdSchema = prefixedDigestSchema("jsrg_node"); diff --git a/src/domain/javascriptSemanticGraphSerialization.ts b/src/domain/javascript/javascriptSemanticGraphSerialization.ts similarity index 100% rename from src/domain/javascriptSemanticGraphSerialization.ts rename to src/domain/javascript/javascriptSemanticGraphSerialization.ts diff --git a/src/domain/javascriptSemanticGraphTraversal.test.ts b/src/domain/javascript/javascriptSemanticGraphTraversal.test.ts similarity index 99% rename from src/domain/javascriptSemanticGraphTraversal.test.ts rename to src/domain/javascript/javascriptSemanticGraphTraversal.test.ts index d782dc61d..be9e57675 100644 --- a/src/domain/javascriptSemanticGraphTraversal.test.ts +++ b/src/domain/javascript/javascriptSemanticGraphTraversal.test.ts @@ -17,7 +17,7 @@ import { type JavaScriptSemanticGraphRelation, } from "./javascriptSemanticGraph.js"; import { queryJavaScriptSemanticGraph } from "./javascriptSemanticQuery.js"; -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; const SHA = "a".repeat(64); const JAG_ID = `jag_${"b".repeat(64)}`; diff --git a/src/domain/javascriptSemanticIr.ts b/src/domain/javascript/javascriptSemanticIr.ts similarity index 100% rename from src/domain/javascriptSemanticIr.ts rename to src/domain/javascript/javascriptSemanticIr.ts diff --git a/src/domain/javascriptSemanticMemberMutations.ts b/src/domain/javascript/javascriptSemanticMemberMutations.ts similarity index 100% rename from src/domain/javascriptSemanticMemberMutations.ts rename to src/domain/javascript/javascriptSemanticMemberMutations.ts diff --git a/src/domain/javascriptSemanticMutationValues.ts b/src/domain/javascript/javascriptSemanticMutationValues.ts similarity index 100% rename from src/domain/javascriptSemanticMutationValues.ts rename to src/domain/javascript/javascriptSemanticMutationValues.ts diff --git a/src/domain/javascriptSemanticObjects.ts b/src/domain/javascript/javascriptSemanticObjects.ts similarity index 100% rename from src/domain/javascriptSemanticObjects.ts rename to src/domain/javascript/javascriptSemanticObjects.ts diff --git a/src/domain/javascriptSemanticPrimitives.ts b/src/domain/javascript/javascriptSemanticPrimitives.ts similarity index 96% rename from src/domain/javascriptSemanticPrimitives.ts rename to src/domain/javascript/javascriptSemanticPrimitives.ts index caaad0e5c..9015ec234 100644 --- a/src/domain/javascriptSemanticPrimitives.ts +++ b/src/domain/javascript/javascriptSemanticPrimitives.ts @@ -4,7 +4,7 @@ import type { JavaScriptSemanticPrimitive, JavaScriptSemanticValue, } from "./javascriptSemanticIr.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { semanticPrimitiveKey } from "./javascriptSemanticProvenance.js"; /** Normalize one bounded collection of possible primitive values. */ diff --git a/src/domain/javascriptSemanticProjection.ts b/src/domain/javascript/javascriptSemanticProjection.ts similarity index 99% rename from src/domain/javascriptSemanticProjection.ts rename to src/domain/javascript/javascriptSemanticProjection.ts index 4db6d9bf8..7df1464b6 100644 --- a/src/domain/javascriptSemanticProjection.ts +++ b/src/domain/javascript/javascriptSemanticProjection.ts @@ -14,7 +14,7 @@ import { type JavaScriptSemanticAnalysisState, type JavaScriptSemanticScopeState, } from "./javascriptSemanticState.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js"; import { evaluateSemanticBinding, diff --git a/src/domain/javascriptSemanticPromises.ts b/src/domain/javascript/javascriptSemanticPromises.ts similarity index 99% rename from src/domain/javascriptSemanticPromises.ts rename to src/domain/javascript/javascriptSemanticPromises.ts index 3c99e90d5..873d3491e 100644 --- a/src/domain/javascriptSemanticPromises.ts +++ b/src/domain/javascript/javascriptSemanticPromises.ts @@ -13,7 +13,7 @@ import { semanticResolutionBlocked, type JavaScriptSemanticAnalysisState, } from "./javascriptSemanticState.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js"; import { range, sourceRangesEqual } from "./javascriptStaticAnalysisHelpers.js"; import { diff --git a/src/domain/javascriptSemanticProvenance.ts b/src/domain/javascript/javascriptSemanticProvenance.ts similarity index 97% rename from src/domain/javascriptSemanticProvenance.ts rename to src/domain/javascript/javascriptSemanticProvenance.ts index 824c76414..0639c0262 100644 --- a/src/domain/javascriptSemanticProvenance.ts +++ b/src/domain/javascript/javascriptSemanticProvenance.ts @@ -3,7 +3,7 @@ import type { JavaScriptModuleOrigin, JavaScriptSemanticPrimitive, } from "./javascriptSemanticIr.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; /** Construct exact local provenance without inventing module origins. */ export const semanticLocalProvenance = (): JavaScriptBindingProvenance => ({ diff --git a/src/domain/javascriptSemanticQuery.ts b/src/domain/javascript/javascriptSemanticQuery.ts similarity index 99% rename from src/domain/javascriptSemanticQuery.ts rename to src/domain/javascript/javascriptSemanticQuery.ts index d77b10d3a..8f4ea146e 100644 --- a/src/domain/javascriptSemanticQuery.ts +++ b/src/domain/javascript/javascriptSemanticQuery.ts @@ -3,7 +3,7 @@ import type { JavaScriptSemanticGraphNode, JavaScriptSemanticGraphRelation, } from "./javascriptSemanticGraph.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { JavaScriptSemanticGraphUnknown } from "./javascriptSemanticGraphSchemas.js"; import { isJavaScriptSemanticOwnershipRelation as ownershipRelation } from "./javascriptSemanticQueryRelations.js"; import { diff --git a/src/domain/javascriptSemanticQueryAssessment.ts b/src/domain/javascript/javascriptSemanticQueryAssessment.ts similarity index 98% rename from src/domain/javascriptSemanticQueryAssessment.ts rename to src/domain/javascript/javascriptSemanticQueryAssessment.ts index db9499ecb..001f38f95 100644 --- a/src/domain/javascriptSemanticQueryAssessment.ts +++ b/src/domain/javascript/javascriptSemanticQueryAssessment.ts @@ -1,4 +1,4 @@ -import { uniqueSorted } from "./canonicalOrdering.js"; +import { uniqueSorted } from "../canonicalOrdering.js"; import type { JavaScriptSemanticGraph } from "./javascriptSemanticGraph.js"; import type { JavaScriptSemanticGraphUnknown } from "./javascriptSemanticGraphSchemas.js"; import type { JavaScriptSemanticQueryResult } from "./javascriptSemanticQuerySchemas.js"; diff --git a/src/domain/javascriptSemanticQueryIdentity.ts b/src/domain/javascript/javascriptSemanticQueryIdentity.ts similarity index 97% rename from src/domain/javascriptSemanticQueryIdentity.ts rename to src/domain/javascript/javascriptSemanticQueryIdentity.ts index 92ec930d7..d28ca8491 100644 --- a/src/domain/javascriptSemanticQueryIdentity.ts +++ b/src/domain/javascript/javascriptSemanticQueryIdentity.ts @@ -6,7 +6,7 @@ import type { JavaScriptSemanticGraph, JavaScriptSemanticGraphNode, } from "./javascriptSemanticGraph.js"; -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; import type { JavaScriptSemanticQueryInput } from "./javascriptSemanticQuerySchemas.js"; /** Canonical JSON used by semantic query commitments and ordering. */ diff --git a/src/domain/javascriptSemanticQueryRelations.ts b/src/domain/javascript/javascriptSemanticQueryRelations.ts similarity index 100% rename from src/domain/javascriptSemanticQueryRelations.ts rename to src/domain/javascript/javascriptSemanticQueryRelations.ts diff --git a/src/domain/javascriptSemanticQuerySchemas.test.ts b/src/domain/javascript/javascriptSemanticQuerySchemas.test.ts similarity index 100% rename from src/domain/javascriptSemanticQuerySchemas.test.ts rename to src/domain/javascript/javascriptSemanticQuerySchemas.test.ts diff --git a/src/domain/javascriptSemanticQuerySchemas.ts b/src/domain/javascript/javascriptSemanticQuerySchemas.ts similarity index 95% rename from src/domain/javascriptSemanticQuerySchemas.ts rename to src/domain/javascript/javascriptSemanticQuerySchemas.ts index b6fe13607..0e9faf4f6 100644 --- a/src/domain/javascriptSemanticQuerySchemas.ts +++ b/src/domain/javascript/javascriptSemanticQuerySchemas.ts @@ -7,9 +7,9 @@ import { javaScriptSemanticRelationSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js"; -import { jsonValueSchema } from "./jsonValue.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { jsonValueSchema } from "../jsonValue.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const semanticNodeIdSchema = prefixedDigestSchema("jsrg_node"); const literalSeedSchema = z.strictObject({ diff --git a/src/domain/javascriptSemanticResources.ts b/src/domain/javascript/javascriptSemanticResources.ts similarity index 100% rename from src/domain/javascriptSemanticResources.ts rename to src/domain/javascript/javascriptSemanticResources.ts diff --git a/src/domain/javascriptSemanticReturns.ts b/src/domain/javascript/javascriptSemanticReturns.ts similarity index 99% rename from src/domain/javascriptSemanticReturns.ts rename to src/domain/javascript/javascriptSemanticReturns.ts index c24e0f67c..0e63527ca 100644 --- a/src/domain/javascriptSemanticReturns.ts +++ b/src/domain/javascript/javascriptSemanticReturns.ts @@ -10,7 +10,7 @@ import type { ProjectedPropertyCoverage, ProjectedReturnField, } from "./javascriptExportShapeComparisonSchemas.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js"; import { resolveSemanticBindingState, diff --git a/src/domain/javascriptSemanticState.ts b/src/domain/javascript/javascriptSemanticState.ts similarity index 100% rename from src/domain/javascriptSemanticState.ts rename to src/domain/javascript/javascriptSemanticState.ts diff --git a/src/domain/javascriptSemanticTraceSchemas.ts b/src/domain/javascript/javascriptSemanticTraceSchemas.ts similarity index 88% rename from src/domain/javascriptSemanticTraceSchemas.ts rename to src/domain/javascript/javascriptSemanticTraceSchemas.ts index 147c7362b..aecfbe3bc 100644 --- a/src/domain/javascriptSemanticTraceSchemas.ts +++ b/src/domain/javascript/javascriptSemanticTraceSchemas.ts @@ -1,11 +1,11 @@ import { z } from "zod"; -import { evidenceSchema } from "./evidence.js"; +import { evidenceSchema } from "../evidence.js"; import { javaScriptSemanticQueryInputSchema, javaScriptSemanticQueryResultSchema, } from "./javascriptSemanticQuerySchemas.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); diff --git a/src/domain/javascriptSemanticTraversal.ts b/src/domain/javascript/javascriptSemanticTraversal.ts similarity index 100% rename from src/domain/javascriptSemanticTraversal.ts rename to src/domain/javascript/javascriptSemanticTraversal.ts diff --git a/src/domain/javascriptSemanticValueTypes.ts b/src/domain/javascript/javascriptSemanticValueTypes.ts similarity index 100% rename from src/domain/javascriptSemanticValueTypes.ts rename to src/domain/javascript/javascriptSemanticValueTypes.ts diff --git a/src/domain/javascriptSemanticValues.ts b/src/domain/javascript/javascriptSemanticValues.ts similarity index 99% rename from src/domain/javascriptSemanticValues.ts rename to src/domain/javascript/javascriptSemanticValues.ts index 655c41ba7..8a55b74d4 100644 --- a/src/domain/javascriptSemanticValues.ts +++ b/src/domain/javascript/javascriptSemanticValues.ts @@ -15,7 +15,7 @@ import { type JavaScriptSemanticBindingState, } from "./javascriptSemanticState.js"; import { stringValue } from "./javascriptStaticAnalysisHelpers.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { semanticStaticPropertyKey } from "./javascriptAstValues.js"; import { semanticAmbiguousProvenance, diff --git a/src/domain/javascriptSourceParser.ts b/src/domain/javascript/javascriptSourceParser.ts similarity index 100% rename from src/domain/javascriptSourceParser.ts rename to src/domain/javascript/javascriptSourceParser.ts diff --git a/src/domain/javascriptStaticAnalysis.no_finding_caps.test.ts b/src/domain/javascript/javascriptStaticAnalysis.no_finding_caps.test.ts similarity index 100% rename from src/domain/javascriptStaticAnalysis.no_finding_caps.test.ts rename to src/domain/javascript/javascriptStaticAnalysis.no_finding_caps.test.ts diff --git a/src/domain/javascriptStaticAnalysis.ts b/src/domain/javascript/javascriptStaticAnalysis.ts similarity index 100% rename from src/domain/javascriptStaticAnalysis.ts rename to src/domain/javascript/javascriptStaticAnalysis.ts diff --git a/src/domain/javascriptStaticAnalysisBundler.ts b/src/domain/javascript/javascriptStaticAnalysisBundler.ts similarity index 99% rename from src/domain/javascriptStaticAnalysisBundler.ts rename to src/domain/javascript/javascriptStaticAnalysisBundler.ts index b63a229c3..d5fb29558 100644 --- a/src/domain/javascriptStaticAnalysisBundler.ts +++ b/src/domain/javascript/javascriptStaticAnalysisBundler.ts @@ -4,7 +4,7 @@ import { collectJavaScriptExports, fingerprintJavaScriptAst, } from "./javascriptAstFingerprint.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import { addFindingOnce } from "./javascriptStaticAnalysisFindings.js"; import { argumentValue, diff --git a/src/domain/javascriptStaticAnalysisCalls.ts b/src/domain/javascript/javascriptStaticAnalysisCalls.ts similarity index 99% rename from src/domain/javascriptStaticAnalysisCalls.ts rename to src/domain/javascript/javascriptStaticAnalysisCalls.ts index 4208307b1..984be0840 100644 --- a/src/domain/javascriptStaticAnalysisCalls.ts +++ b/src/domain/javascript/javascriptStaticAnalysisCalls.ts @@ -1,6 +1,6 @@ import * as t from "@babel/types"; -import { sanitizeEndpointCandidate } from "./browserObservation.js"; +import { sanitizeEndpointCandidate } from "../browserObservation.js"; import { addFindingOnce, addLocatedFinding, diff --git a/src/domain/javascriptStaticAnalysisFindings.ts b/src/domain/javascript/javascriptStaticAnalysisFindings.ts similarity index 100% rename from src/domain/javascriptStaticAnalysisFindings.ts rename to src/domain/javascript/javascriptStaticAnalysisFindings.ts diff --git a/src/domain/javascriptStaticAnalysisHelpers.ts b/src/domain/javascript/javascriptStaticAnalysisHelpers.ts similarity index 99% rename from src/domain/javascriptStaticAnalysisHelpers.ts rename to src/domain/javascript/javascriptStaticAnalysisHelpers.ts index bd9b27615..b25b0f926 100644 --- a/src/domain/javascriptStaticAnalysisHelpers.ts +++ b/src/domain/javascript/javascriptStaticAnalysisHelpers.ts @@ -12,7 +12,7 @@ import type { JavaScriptStaticStorage, } from "./javascriptStaticAnalysisTypes.js"; import { semanticStaticPropertyName } from "./javascriptAstValues.js"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; export { propertyName, diff --git a/src/domain/javascriptStaticAnalysisLocations.test.ts b/src/domain/javascript/javascriptStaticAnalysisLocations.test.ts similarity index 100% rename from src/domain/javascriptStaticAnalysisLocations.test.ts rename to src/domain/javascript/javascriptStaticAnalysisLocations.test.ts diff --git a/src/domain/javascriptStaticAnalysisSourceMaps.test.ts b/src/domain/javascript/javascriptStaticAnalysisSourceMaps.test.ts similarity index 100% rename from src/domain/javascriptStaticAnalysisSourceMaps.test.ts rename to src/domain/javascript/javascriptStaticAnalysisSourceMaps.test.ts diff --git a/src/domain/javascriptStaticAnalysisState.ts b/src/domain/javascript/javascriptStaticAnalysisState.ts similarity index 100% rename from src/domain/javascriptStaticAnalysisState.ts rename to src/domain/javascript/javascriptStaticAnalysisState.ts diff --git a/src/domain/javascriptStaticAnalysisTypes.ts b/src/domain/javascript/javascriptStaticAnalysisTypes.ts similarity index 100% rename from src/domain/javascriptStaticAnalysisTypes.ts rename to src/domain/javascript/javascriptStaticAnalysisTypes.ts diff --git a/src/domain/javascriptStaticPathResolution.test.ts b/src/domain/javascript/javascriptStaticPathResolution.test.ts similarity index 100% rename from src/domain/javascriptStaticPathResolution.test.ts rename to src/domain/javascript/javascriptStaticPathResolution.test.ts diff --git a/src/domain/sourceToBundleComparison.test.ts b/src/domain/javascript/sourceToBundleComparison.test.ts similarity index 99% rename from src/domain/sourceToBundleComparison.test.ts rename to src/domain/javascript/sourceToBundleComparison.test.ts index ee5a59fd7..644af26e3 100644 --- a/src/domain/sourceToBundleComparison.test.ts +++ b/src/domain/javascript/sourceToBundleComparison.test.ts @@ -4,7 +4,7 @@ import { createJavaScriptApplicationGraph, createJavaScriptApplicationNode, } from "./javascriptApplicationGraph.js"; -import { createHistoricalSourceGraph } from "./referenceSourceGraph.js"; +import { createHistoricalSourceGraph } from "../referenceSourceGraph.js"; import { compareSourceToBundle } from "./sourceToBundleComparison.js"; import { SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS, diff --git a/src/domain/sourceToBundleComparison.ts b/src/domain/javascript/sourceToBundleComparison.ts similarity index 98% rename from src/domain/sourceToBundleComparison.ts rename to src/domain/javascript/sourceToBundleComparison.ts index 076b6ad3f..4b08ba6d4 100644 --- a/src/domain/sourceToBundleComparison.ts +++ b/src/domain/javascript/sourceToBundleComparison.ts @@ -1,8 +1,8 @@ -import { compareCodePoints, uniqueSorted } from "./canonicalOrdering.js"; -import { absenceClaimable, canonicalDigest } from "./comparisonSemantics.js"; +import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js"; +import { absenceClaimable, canonicalDigest } from "../comparisonSemantics.js"; import type { JavaScriptApplicationGraph } from "./javascriptApplicationGraph.js"; -import type { HistoricalSourceGraph } from "./referenceSourceGraph.js"; +import type { HistoricalSourceGraph } from "../referenceSourceGraph.js"; import { SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS, sourceToBundleComparisonResultSchema, diff --git a/src/domain/sourceToBundleComparisonSchemas.ts b/src/domain/javascript/sourceToBundleComparisonSchemas.ts similarity index 94% rename from src/domain/sourceToBundleComparisonSchemas.ts rename to src/domain/javascript/sourceToBundleComparisonSchemas.ts index 82b194cbc..2e27cadb3 100644 --- a/src/domain/sourceToBundleComparisonSchemas.ts +++ b/src/domain/javascript/sourceToBundleComparisonSchemas.ts @@ -1,10 +1,10 @@ import { z } from "zod"; -import { evidenceSchema } from "./evidence.js"; +import { evidenceSchema } from "../evidence.js"; import { JAVASCRIPT_APPLICATION_NODE_KINDS } from "./javascriptApplicationGraphSchemas.js"; -import { historicalSourceGraphSchema } from "./referenceSourceGraph.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; +import { historicalSourceGraphSchema } from "../referenceSourceGraph.js"; +import { digestSchema } from "../digests.js"; +import { prefixedDigestSchema } from "../digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const nodeIdSchema = prefixedDigestSchema("jag_node"); diff --git a/src/domain/sourceToBundleSignals.ts b/src/domain/javascript/sourceToBundleSignals.ts similarity index 98% rename from src/domain/sourceToBundleSignals.ts rename to src/domain/javascript/sourceToBundleSignals.ts index 5caac70d1..c22bb6f3d 100644 --- a/src/domain/sourceToBundleSignals.ts +++ b/src/domain/javascript/sourceToBundleSignals.ts @@ -1,14 +1,14 @@ import { posix } from "node:path"; -import { compareCodePoints } from "./canonicalOrdering.js"; +import { compareCodePoints } from "../canonicalOrdering.js"; import type { ApplicationNode } from "./javascriptApplicationGraphSchemas.js"; -import type { HistoricalSourceGraph } from "./referenceSourceGraph.js"; +import type { HistoricalSourceGraph } from "../referenceSourceGraph.js"; import { SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS, type SourceToBundleCandidate, type SourceToBundleSignal, } from "./sourceToBundleComparisonSchemas.js"; -import { isDigest } from "./digests.js"; +import { isDigest } from "../digests.js"; type SourceFile = Extract< HistoricalSourceGraph["entries"][number], diff --git a/src/domain/managedApplicationGraph.ts b/src/domain/managedApplicationGraph.ts index f584dca63..63be9cf23 100644 --- a/src/domain/managedApplicationGraph.ts +++ b/src/domain/managedApplicationGraph.ts @@ -9,7 +9,7 @@ import { javascriptApplicationGraphSchema, type ApplicationEdge, type ApplicationNode, -} from "./javascriptApplicationGraph.js"; +} from "./javascript/javascriptApplicationGraph.js"; import { managedArtifactInspectionSchema, managedMemberInspectionSchema, diff --git a/src/domain/managedApplicationGraphCoverage.ts b/src/domain/managedApplicationGraphCoverage.ts index 683226a30..cd60391b2 100644 --- a/src/domain/managedApplicationGraphCoverage.ts +++ b/src/domain/managedApplicationGraphCoverage.ts @@ -1,4 +1,4 @@ -import type { ApplicationGraphEvidence } from "./javascriptApplicationGraph.js"; +import type { ApplicationGraphEvidence } from "./javascript/javascriptApplicationGraph.js"; import type { ManagedArtifactInspection, ManagedMemberInspection, diff --git a/src/domain/managedApplicationGraphNodes.ts b/src/domain/managedApplicationGraphNodes.ts index 99ee067e2..33062d005 100644 --- a/src/domain/managedApplicationGraphNodes.ts +++ b/src/domain/managedApplicationGraphNodes.ts @@ -4,7 +4,7 @@ import { createJavaScriptApplicationNode, type ApplicationGraphEvidence, type ApplicationNode, -} from "./javascriptApplicationGraph.js"; +} from "./javascript/javascriptApplicationGraph.js"; import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js"; import { type ManagedMemberInspection, diff --git a/src/domain/webBundleAnalyzerAst.ts b/src/domain/webBundleAnalyzerAst.ts index 70b1b1ebf..0decf4370 100644 --- a/src/domain/webBundleAnalyzerAst.ts +++ b/src/domain/webBundleAnalyzerAst.ts @@ -1,7 +1,7 @@ import * as t from "@babel/types"; import { sanitizeBrowserUrl } from "./browserObservation.js"; -import { semanticStaticPropertyName } from "./javascriptAstValues.js"; +import { semanticStaticPropertyName } from "./javascript/javascriptAstValues.js"; /** Pick the endpoint argument for common network-call patterns. */ diff --git a/src/domain/webBundleAnalyzerInspection.ts b/src/domain/webBundleAnalyzerInspection.ts index 4f8451181..3260f9b98 100644 --- a/src/domain/webBundleAnalyzerInspection.ts +++ b/src/domain/webBundleAnalyzerInspection.ts @@ -4,12 +4,12 @@ import * as t from "@babel/types"; import { sanitizeEndpointCandidate } from "./browserObservation.js"; import type { WebPageInspection } from "./browserObservation.js"; import type { WebBundleAnalysis } from "./webBundleAnalysis.js"; -import { semanticStaticPropertyName } from "./javascriptAstValues.js"; +import { semanticStaticPropertyName } from "./javascript/javascriptAstValues.js"; import { calleeName, endpointArgument, stringValue, -} from "./javascriptStaticAnalysisHelpers.js"; +} from "./javascript/javascriptStaticAnalysisHelpers.js"; import { location, locationFields, diff --git a/src/domain/webModuleImports.ts b/src/domain/webModuleImports.ts index 2e7c3e473..58dcd82d7 100644 --- a/src/domain/webModuleImports.ts +++ b/src/domain/webModuleImports.ts @@ -1,6 +1,6 @@ import { traverseFast, isStringLiteral, isTemplateLiteral } from "@babel/types"; import type { Node } from "@babel/types"; -import { parseJavaScriptSource } from "./javascriptSourceParser.js"; +import { parseJavaScriptSource } from "./javascript/javascriptSourceParser.js"; import type { WebModuleImport } from "./webModuleTrace.js"; import type { ExportedWebScript } from "./webScriptExport.js"; diff --git a/src/inspector/JavaScriptRuntimeScope.ts b/src/inspector/JavaScriptRuntimeScope.ts index 0b13b7804..4396d7fe5 100644 --- a/src/inspector/JavaScriptRuntimeScope.ts +++ b/src/inspector/JavaScriptRuntimeScope.ts @@ -8,7 +8,7 @@ import type { BrowserExclusionReason } from "../domain/browserCompleteness.js"; import type { JavaScriptRuntimeLocation, JavaScriptRuntimeTargetLocation, -} from "../domain/javascriptRuntimeObservation.js"; +} from "../domain/javascript/javascriptRuntimeObservation.js"; import { authorizedElectronFile } from "../browser/ElectronFileScope.js"; export type RuntimeLocationDecision = diff --git a/src/inspector/V8InspectorCaptureProjection.ts b/src/inspector/V8InspectorCaptureProjection.ts index 663664d90..84d1e00af 100644 --- a/src/inspector/V8InspectorCaptureProjection.ts +++ b/src/inspector/V8InspectorCaptureProjection.ts @@ -5,7 +5,7 @@ import type { JavaScriptRuntimeObservation, JavaScriptRuntimeTargetList, ObserveJavaScriptRuntimeInput, -} from "../domain/javascriptRuntimeObservation.js"; +} from "../domain/javascript/javascriptRuntimeObservation.js"; import { authorizeRuntimeLocation, inspectorExclusionKey, diff --git a/src/inspector/V8InspectorEndpoint.ts b/src/inspector/V8InspectorEndpoint.ts index 384b6e216..24146d469 100644 --- a/src/inspector/V8InspectorEndpoint.ts +++ b/src/inspector/V8InspectorEndpoint.ts @@ -3,7 +3,7 @@ import { z } from "zod"; import type { JavaScriptRuntimeTargetList, JavaScriptRuntimeTargetLocation, -} from "../domain/javascriptRuntimeObservation.js"; +} from "../domain/javascript/javascriptRuntimeObservation.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import { type BrowserObservationOperation } from "../domain/browserObservationErrors.js"; import { parseCdpEndpointValue, readCdpJson } from "../browser/CdpEndpoint.js"; diff --git a/src/inspector/V8InspectorProvider.ts b/src/inspector/V8InspectorProvider.ts index 442b0b9f6..01189ec79 100644 --- a/src/inspector/V8InspectorProvider.ts +++ b/src/inspector/V8InspectorProvider.ts @@ -10,7 +10,7 @@ import { type JavaScriptRuntimeTargetList, type ListJavaScriptRuntimeTargetsInput, type ObserveJavaScriptRuntimeInput, -} from "../domain/javascriptRuntimeObservation.js"; +} from "../domain/javascript/javascriptRuntimeObservation.js"; import { AnalysisError } from "../domain/analysisErrorBase.js"; import { BrowserObservationError } from "../domain/browserObservationError.js"; import { ProviderAdapterError } from "../domain/providerAdapterError.js"; diff --git a/src/javascript/recovery/WakaruExecution.ts b/src/javascript/recovery/WakaruExecution.ts index d7b7dda17..ff82b5c47 100644 --- a/src/javascript/recovery/WakaruExecution.ts +++ b/src/javascript/recovery/WakaruExecution.ts @@ -8,7 +8,7 @@ import { AnalysisCapabilityUnavailableError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js"; -import type { JavaScriptRecoveryInput } from "../../domain/javascriptRecovery.js"; +import type { JavaScriptRecoveryInput } from "../../domain/javascript/javascriptRecovery.js"; import { jsonValueSchema } from "../../domain/jsonValue.js"; import { fingerprintRecoveryFile, diff --git a/src/javascript/recovery/WakaruProvider.ts b/src/javascript/recovery/WakaruProvider.ts index 4bf5c31e5..1273b26ed 100644 --- a/src/javascript/recovery/WakaruProvider.ts +++ b/src/javascript/recovery/WakaruProvider.ts @@ -9,7 +9,7 @@ import { import { SafeOutputTree } from "../../artifacts/SafeOutputTree.js"; import { AnalysisError } from "../../domain/analysisErrorBase.js"; import { AnalysisOutputError } from "../../domain/analysisErrorCore.js"; -import type { JavaScriptRecoveryInput } from "../../domain/javascriptRecovery.js"; +import type { JavaScriptRecoveryInput } from "../../domain/javascript/javascriptRecovery.js"; import { ProviderAdapterError } from "../../domain/providerAdapterError.js"; import { ProviderCleanupError } from "../../domain/providerCleanupError.js"; import { err, ok, type Result } from "../../domain/result.js"; diff --git a/src/javascript/recovery/WakaruPublication.ts b/src/javascript/recovery/WakaruPublication.ts index 006b0f80a..40a0586cd 100644 --- a/src/javascript/recovery/WakaruPublication.ts +++ b/src/javascript/recovery/WakaruPublication.ts @@ -6,7 +6,7 @@ import { javascriptRecoveryResultSchema, type JavaScriptRecoveryInput, type JavaScriptRecoveryResult, -} from "../../domain/javascriptRecovery.js"; +} from "../../domain/javascript/javascriptRecovery.js"; import { readRecoveryFile, recoveryDigest } from "./RecoveryFiles.js"; import { recoveryRanges, diff --git a/src/javascript/recovery/WakaruReport.ts b/src/javascript/recovery/WakaruReport.ts index a23fa6a67..ab7f4474b 100644 --- a/src/javascript/recovery/WakaruReport.ts +++ b/src/javascript/recovery/WakaruReport.ts @@ -5,7 +5,7 @@ import { } from "../../artifacts/ArtifactPaths.js"; import { AnalysisOutputError } from "../../domain/analysisErrorCore.js"; import { ProviderAdapterError } from "../../domain/providerAdapterError.js"; -import type { JavaScriptRecoveryResult } from "../../domain/javascriptRecovery.js"; +import type { JavaScriptRecoveryResult } from "../../domain/javascript/javascriptRecovery.js"; import { readRecoveryFile, recoveryFailureMessage } from "./RecoveryFiles.js"; import { RECOVERY_LIMITS } from "./WakaruRelease.js"; import type { runWakaruCommand } from "./WakaruCommand.js"; diff --git a/src/server/registerApplicationTools/compareExportShapes.ts b/src/server/registerApplicationTools/compareExportShapes.ts index 55ed01518..606242ef6 100644 --- a/src/server/registerApplicationTools/compareExportShapes.ts +++ b/src/server/registerApplicationTools/compareExportShapes.ts @@ -4,7 +4,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascriptExportShapeComparisonSchemas.js"; +import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js"; import { logToolExecution } from "../toolLogging.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; diff --git a/src/server/registerApplicationTools/compareSourceToBundle.ts b/src/server/registerApplicationTools/compareSourceToBundle.ts index 090f424de..dc76e5738 100644 --- a/src/server/registerApplicationTools/compareSourceToBundle.ts +++ b/src/server/registerApplicationTools/compareSourceToBundle.ts @@ -4,7 +4,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { compareSourceToBundleEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { sourceToBundleComparisonResultSchema } from "../../domain/sourceToBundleComparisonSchemas.js"; +import { sourceToBundleComparisonResultSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js"; import { logToolExecution } from "../toolLogging.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; diff --git a/src/server/registerApplicationTools/compareVersions.ts b/src/server/registerApplicationTools/compareVersions.ts index a5f28c2c4..b529d9a91 100644 --- a/src/server/registerApplicationTools/compareVersions.ts +++ b/src/server/registerApplicationTools/compareVersions.ts @@ -4,7 +4,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { compareApplicationVersionsEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { applicationVersionComparisonResultSchema } from "../../domain/javascriptApplicationVersionComparisonSchemas.js"; +import { applicationVersionComparisonResultSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; import { logToolExecution } from "../toolLogging.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; diff --git a/src/server/registerElectronTools.ts b/src/server/registerElectronTools.ts index 028a3fe1c..c7766feb7 100644 --- a/src/server/registerElectronTools.ts +++ b/src/server/registerElectronTools.ts @@ -20,7 +20,7 @@ import { toolContract, type ToolContract } from "../contracts/toolContracts.js"; import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { Result } from "../domain/result.js"; -import { inspectElectronPageInputSchema } from "../domain/electronObservation.js"; +import { inspectElectronPageInputSchema } from "../domain/javascript/electronObservation.js"; import type { Logger } from "../logger.js"; import { mcpProgressReporter } from "./mcpProgress.js"; import { logToolExecution } from "./toolLogging.js"; diff --git a/src/server/registerJavaScriptRuntimeObservationTools.ts b/src/server/registerJavaScriptRuntimeObservationTools.ts index 50d1a1162..6581ce75b 100644 --- a/src/server/registerJavaScriptRuntimeObservationTools.ts +++ b/src/server/registerJavaScriptRuntimeObservationTools.ts @@ -15,7 +15,7 @@ import { toolContract, type ToolContract } from "../contracts/toolContracts.js"; import type { AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; import type { Result } from "../domain/result.js"; -import { observeJavaScriptRuntimeInputSchema } from "../domain/javascriptRuntimeObservation.js"; +import { observeJavaScriptRuntimeInputSchema } from "../domain/javascript/javascriptRuntimeObservation.js"; import type { Logger } from "../logger.js"; import { logToolExecution } from "./toolLogging.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; diff --git a/tests/acceptance/applications/applicationEvidenceMcp.test.ts b/tests/acceptance/applications/applicationEvidenceMcp.test.ts index ce3859a40..3fdba32f4 100644 --- a/tests/acceptance/applications/applicationEvidenceMcp.test.ts +++ b/tests/acceptance/applications/applicationEvidenceMcp.test.ts @@ -9,7 +9,7 @@ import { JAVASCRIPT_FEATURE_TRACE_EXAMPLE, JAVASCRIPT_VERSION_COMPARISON_FULL_EVIDENCE_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, -} from "../../../src/contracts/javascriptApplicationWorkflowExamples.js"; +} from "../../../src/contracts/javascript/javascriptApplicationWorkflowExamples.js"; import { createEvidence } from "../../../src/domain/evidence.js"; import { observed } from "../../fixtures/analysisExecution.js"; diff --git a/tests/acceptance/applications/applicationExportShapeMcp.test.ts b/tests/acceptance/applications/applicationExportShapeMcp.test.ts index a6ab45518..c104c8012 100644 --- a/tests/acceptance/applications/applicationExportShapeMcp.test.ts +++ b/tests/acceptance/applications/applicationExportShapeMcp.test.ts @@ -9,7 +9,7 @@ import { createTestBinarySession } from "../../fixtures/binarySession.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; describe("application workflow MCP parity", () => { it("compares exact parser export shapes with inline Evidence", async () => { diff --git a/tests/acceptance/applications/applicationWorkflowCli.test.ts b/tests/acceptance/applications/applicationWorkflowCli.test.ts index 5845fe97e..56bee2d95 100644 --- a/tests/acceptance/applications/applicationWorkflowCli.test.ts +++ b/tests/acceptance/applications/applicationWorkflowCli.test.ts @@ -11,9 +11,9 @@ import { JAVASCRIPT_FEATURE_TRACE_FULL_EVIDENCE_EXAMPLE, JAVASCRIPT_VERSION_COMPARISON_FULL_EVIDENCE_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, -} from "../../../src/contracts/javascriptApplicationWorkflowExamples.js"; +} from "../../../src/contracts/javascript/javascriptApplicationWorkflowExamples.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; const execute = promisify(execFile); const temporary: string[] = []; diff --git a/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts b/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts index 08135fc44..c3f72a195 100644 --- a/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts +++ b/tests/acceptance/applications/javascriptApplicationWorkflows.test.ts @@ -5,7 +5,7 @@ import { afterEach, describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; -import { compareApplicationVersionsRequestSchema } from "../../../src/contracts/applicationWorkflowInputContracts.js"; +import { compareApplicationVersionsRequestSchema } from "../../../src/contracts/javascript/applicationWorkflowInputContracts.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; import { compareApplicationVersionsEvidence, @@ -15,23 +15,23 @@ import { reconcileJavaScriptRuntimeEvidence } from "../../../src/application/jav import { createEvidence } from "../../../src/domain/evidence.js"; import { AnalysisInputError } from "../../../src/domain/analysisErrorCore.js"; import { jsonValueSchema } from "../../../src/domain/jsonValue.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; import { applicationVersionComparisonResultSchema, type ApplicationVersionComparisonResult, -} from "../../../src/domain/javascriptApplicationVersionComparisonSchemas.js"; -import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascriptRuntimeReconciliationSchemas.js"; -import { compareJavaScriptApplicationVersions } from "../../../src/domain/javascriptApplicationVersionComparison.js"; -import { createJavaScriptApplicationGraph } from "../../../src/domain/javascriptApplicationGraph.js"; -import { traceApplicationFeature } from "../../../src/domain/javascriptFeatureTrace.js"; -import { applicationFeatureTraceResultSchema } from "../../../src/domain/javascriptFeatureTraceSchemas.js"; +} from "../../../src/domain/javascript/javascriptApplicationVersionComparisonSchemas.js"; +import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascript/javascriptRuntimeReconciliationSchemas.js"; +import { compareJavaScriptApplicationVersions } from "../../../src/domain/javascript/javascriptApplicationVersionComparison.js"; +import { createJavaScriptApplicationGraph } from "../../../src/domain/javascript/javascriptApplicationGraph.js"; +import { traceApplicationFeature } from "../../../src/domain/javascript/javascriptFeatureTrace.js"; +import { applicationFeatureTraceResultSchema } from "../../../src/domain/javascript/javascriptFeatureTraceSchemas.js"; import { APPLICATION_GRAPH_DIGESTS, buildSyntheticJavaScriptApplicationGraph, -} from "../../../src/domain/javascriptApplicationGraph.fixture.js"; +} from "../../../src/domain/javascript/javascriptApplicationGraph.fixture.js"; import { writeVersionedJavaScriptApplicationFixtures } from "../../fixtures/javascriptArtifactApplication.js"; import { JAVASCRIPT_APPLICATION_PROVIDER } from "../../../src/application/InvestigationProviders.js"; -import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascriptRuntimeReconciliationExample.js"; +import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascript/javascriptRuntimeReconciliationExample.js"; const temporary: string[] = []; diff --git a/tests/acceptance/applications/javascriptBuiltinDefaultsCli.test.ts b/tests/acceptance/applications/javascriptBuiltinDefaultsCli.test.ts index ad8890f53..729a504fc 100644 --- a/tests/acceptance/applications/javascriptBuiltinDefaultsCli.test.ts +++ b/tests/acceptance/applications/javascriptBuiltinDefaultsCli.test.ts @@ -6,7 +6,7 @@ import { promisify } from "node:util"; import { expect, it } from "vitest"; import { parseEvidence } from "../../../src/domain/evidence.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; const execute = promisify(execFile); diff --git a/tests/acceptance/applications/javascriptFunctionNameCli.test.ts b/tests/acceptance/applications/javascriptFunctionNameCli.test.ts index 5f688f0ed..9887373c0 100644 --- a/tests/acceptance/applications/javascriptFunctionNameCli.test.ts +++ b/tests/acceptance/applications/javascriptFunctionNameCli.test.ts @@ -6,7 +6,7 @@ import { promisify } from "node:util"; import { expect, it } from "vitest"; import { parseEvidence } from "../../../src/domain/evidence.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; const execute = promisify(execFile); diff --git a/tests/boundary/browser/cdpCleanupCancellation.test.ts b/tests/boundary/browser/cdpCleanupCancellation.test.ts index d7102ddaf..e9508297b 100644 --- a/tests/boundary/browser/cdpCleanupCancellation.test.ts +++ b/tests/boundary/browser/cdpCleanupCancellation.test.ts @@ -7,7 +7,7 @@ import { expect, it, onTestFinished, vi } from "vitest"; import { CdpBrowserProvider } from "../../../src/browser/CdpBrowserProvider.js"; import { CdpElectronProvider } from "../../../src/browser/CdpElectronProvider.js"; import { observeWebSessionInputSchema } from "../../../src/domain/browserSession.js"; -import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; +import { inspectElectronPageInputSchema } from "../../../src/domain/javascript/electronObservation.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { startFakeCdpBrowser } from "../../fixtures/fakeCdpBrowser.js"; diff --git a/tests/boundary/browser/cdpElectronProvider.test.ts b/tests/boundary/browser/cdpElectronProvider.test.ts index 0218df2ba..b15ffaa43 100644 --- a/tests/boundary/browser/cdpElectronProvider.test.ts +++ b/tests/boundary/browser/cdpElectronProvider.test.ts @@ -10,7 +10,7 @@ import { CdpElectronProvider } from "../../../src/browser/CdpElectronProvider.js import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, -} from "../../../src/domain/electronObservation.js"; +} from "../../../src/domain/javascript/electronObservation.js"; import { startFakeCdpBrowser, type FakeCdpBrowser, diff --git a/tests/boundary/cli/electronCli.test.ts b/tests/boundary/cli/electronCli.test.ts index 8f0307264..3e1e06ac4 100644 --- a/tests/boundary/cli/electronCli.test.ts +++ b/tests/boundary/cli/electronCli.test.ts @@ -13,7 +13,7 @@ import { type FakeCdpBrowser, } from "../../fixtures/fakeCdpBrowser.js"; import { writeElectronBoundaryFixture } from "../../fixtures/electronBoundaryApplication.js"; -import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascriptRuntimeReconciliationExample.js"; +import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascript/javascriptRuntimeReconciliationExample.js"; const execute = promisify(execFile); const INTEGRATION_TEST_TIMEOUT_MS = 20_000; diff --git a/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts b/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts index aecde2412..0ce317f65 100644 --- a/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts +++ b/tests/boundary/cli/javascriptRuntimeObservationCli.test.ts @@ -8,7 +8,7 @@ import { afterEach, describe, expect, test } from "vitest"; import { observeJavaScriptRuntime } from "../../../src/application/javascript/JavaScriptRuntimeObservationService.js"; import { V8InspectorProvider } from "../../../src/inspector/V8InspectorProvider.js"; -import { observeJavaScriptRuntimeInputSchema } from "../../../src/domain/javascriptRuntimeObservation.js"; +import { observeJavaScriptRuntimeInputSchema } from "../../../src/domain/javascript/javascriptRuntimeObservation.js"; import { startFakeV8Inspector } from "../../fixtures/inspector/fakeV8Inspector.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; diff --git a/tests/boundary/filesystem/javascriptExportContainerCoverage.test.ts b/tests/boundary/filesystem/javascriptExportContainerCoverage.test.ts index b75454554..660eaa38c 100644 --- a/tests/boundary/filesystem/javascriptExportContainerCoverage.test.ts +++ b/tests/boundary/filesystem/javascriptExportContainerCoverage.test.ts @@ -9,7 +9,7 @@ import { parseEvidence } from "../../../src/domain/evidence.js"; import { javaScriptExportShapeComparisonResultSchema, projectedExportReturnShapesSchema, -} from "../../../src/domain/javascriptExportShapeComparisonSchemas.js"; +} from "../../../src/domain/javascript/javascriptExportShapeComparisonSchemas.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { writeFixtureFiles } from "../../support/javascriptApplicationFixture.js"; diff --git a/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts b/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts index 8188c9f49..aab5fb66b 100644 --- a/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts +++ b/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts @@ -7,12 +7,12 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; import { parseApplicationGraphEvidence } from "../../../src/application/javascript/JavaScriptApplicationEvidenceGraph.js"; -import { compareJavaScriptExportShapes } from "../../../src/domain/javascriptExportShapeComparison.js"; -import { javaScriptExportShapeComparisonResultSchema } from "../../../src/domain/javascriptExportShapeComparisonSchemas.js"; +import { compareJavaScriptExportShapes } from "../../../src/domain/javascript/javascriptExportShapeComparison.js"; +import { javaScriptExportShapeComparisonResultSchema } from "../../../src/domain/javascript/javascriptExportShapeComparisonSchemas.js"; import { createJavaScriptApplicationGraph, createJavaScriptApplicationNode, -} from "../../../src/domain/javascriptApplicationGraph.js"; +} from "../../../src/domain/javascript/javascriptApplicationGraph.js"; describe("JavaScript export return-shape comparison", () => { it("reports exactly the heading depth addition from source-owned parser fixtures", async () => { diff --git a/tests/boundary/filesystem/javascriptRequireLiteralPaths.test.ts b/tests/boundary/filesystem/javascriptRequireLiteralPaths.test.ts index d38ea9ef7..eccc05883 100644 --- a/tests/boundary/filesystem/javascriptRequireLiteralPaths.test.ts +++ b/tests/boundary/filesystem/javascriptRequireLiteralPaths.test.ts @@ -6,7 +6,7 @@ import { describe, expect, it } from "vitest"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; import { parseApplicationGraphEvidence } from "../../../src/application/javascript/JavaScriptApplicationEvidenceGraph.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; const analyze = async (root: string) => { diff --git a/tests/boundary/filesystem/sourceToBundlePaths.test.ts b/tests/boundary/filesystem/sourceToBundlePaths.test.ts index c8d860519..fffd7bf05 100644 --- a/tests/boundary/filesystem/sourceToBundlePaths.test.ts +++ b/tests/boundary/filesystem/sourceToBundlePaths.test.ts @@ -5,7 +5,7 @@ import { expect, it } from "vitest"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; import { parseApplicationGraphEvidence } from "../../../src/application/javascript/JavaScriptApplicationEvidenceGraph.js"; import { importReferenceSource } from "../../../src/application/ReferenceSourceImport.js"; -import { compareSourceToBundle } from "../../../src/domain/sourceToBundleComparison.js"; +import { compareSourceToBundle } from "../../../src/domain/javascript/sourceToBundleComparison.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; it("keeps literal hash characters in historical/current filesystem paths", async () => { diff --git a/tests/boundary/filesystem/webScriptExport.test.ts b/tests/boundary/filesystem/webScriptExport.test.ts index 37299a351..2ae9062f8 100644 --- a/tests/boundary/filesystem/webScriptExport.test.ts +++ b/tests/boundary/filesystem/webScriptExport.test.ts @@ -14,7 +14,7 @@ import { analyzeJavaScriptApplication } from "../../../src/application/javascrip import { exportWebScripts } from "../../../src/application/WebScriptExportService.js"; import { publishWebScripts } from "../../../src/browser/assets/PublishWebScripts.js"; import { selectScriptCapture } from "../../../src/browser/assets/ScriptCaptureAdapters.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; import { webScriptExportResultSchema } from "../../../src/domain/webScriptExport.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { diff --git a/tests/boundary/inspector/javascriptRuntimeObservation.test.ts b/tests/boundary/inspector/javascriptRuntimeObservation.test.ts index 9b597b48f..ed43e6d1e 100644 --- a/tests/boundary/inspector/javascriptRuntimeObservation.test.ts +++ b/tests/boundary/inspector/javascriptRuntimeObservation.test.ts @@ -12,13 +12,13 @@ import { import { reconcileJavaScriptRuntimeEvidence } from "../../../src/application/javascript/JavaScriptRuntimeReconciliationService.js"; import { V8_INSPECTOR_PROVIDER_IDENTITY } from "../../../src/inspector/V8InspectorProvider.js"; import { V8InspectorProvider } from "../../../src/inspector/V8InspectorProvider.js"; -import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascriptRuntimeReconciliationExample.js"; +import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascript/javascriptRuntimeReconciliationExample.js"; import type { JavaScriptRuntimeObservation, ObserveJavaScriptRuntimeInput, -} from "../../../src/domain/javascriptRuntimeObservation.js"; -import { observeJavaScriptRuntimeInputSchema } from "../../../src/domain/javascriptRuntimeObservation.js"; -import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascriptRuntimeReconciliationSchemas.js"; +} from "../../../src/domain/javascript/javascriptRuntimeObservation.js"; +import { observeJavaScriptRuntimeInputSchema } from "../../../src/domain/javascript/javascriptRuntimeObservation.js"; +import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascript/javascriptRuntimeReconciliationSchemas.js"; import { startFakeV8Inspector } from "../../fixtures/inspector/fakeV8Inspector.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; diff --git a/tests/boundary/inspector/javascriptRuntimeUnresolvedTarget.test.ts b/tests/boundary/inspector/javascriptRuntimeUnresolvedTarget.test.ts index 22a942853..e08027d4f 100644 --- a/tests/boundary/inspector/javascriptRuntimeUnresolvedTarget.test.ts +++ b/tests/boundary/inspector/javascriptRuntimeUnresolvedTarget.test.ts @@ -7,7 +7,7 @@ import { expect, test } from "vitest"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; import { createJavaScriptRuntimeObservationEvidence } from "../../../src/application/javascript/JavaScriptRuntimeObservationEvidence.js"; import { V8InspectorProvider } from "../../../src/inspector/V8InspectorProvider.js"; -import { reconcileJavaScriptRuntime } from "../../../src/domain/javascriptRuntimeReconciliation.js"; +import { reconcileJavaScriptRuntime } from "../../../src/domain/javascript/javascriptRuntimeReconciliation.js"; import { startFakeV8Inspector } from "../../fixtures/inspector/fakeV8Inspector.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; diff --git a/tests/boundary/javascript-recovery/wakaruIntegration.test.ts b/tests/boundary/javascript-recovery/wakaruIntegration.test.ts index 29ce3b648..8acb6ecaa 100644 --- a/tests/boundary/javascript-recovery/wakaruIntegration.test.ts +++ b/tests/boundary/javascript-recovery/wakaruIntegration.test.ts @@ -1,7 +1,7 @@ import { access, mkdir, readFile, writeFile } from "node:fs/promises"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; -import { javascriptRecoveryResultSchema } from "../../../src/domain/javascriptRecovery.js"; +import { javascriptRecoveryResultSchema } from "../../../src/domain/javascript/javascriptRecovery.js"; import { parseEvidence } from "../../../src/domain/evidence.js"; import { projectAnalysisError } from "../../../src/domain/analysisErrorProjection.js"; import { diff --git a/tests/boundary/mcp/browserMcp.test.ts b/tests/boundary/mcp/browserMcp.test.ts index fb0d59e6d..21e615e62 100644 --- a/tests/boundary/mcp/browserMcp.test.ts +++ b/tests/boundary/mcp/browserMcp.test.ts @@ -4,7 +4,7 @@ import { z } from "zod"; import { createTestBinarySession } from "../../fixtures/binarySession.js"; import { CdpBrowserProvider } from "../../../src/browser/CdpBrowserProvider.js"; -import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascriptRuntimeReconciliationExample.js"; +import { JAVASCRIPT_RUNTIME_RECONCILIATION_EXAMPLE } from "../../../src/contracts/javascript/javascriptRuntimeReconciliationExample.js"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; diff --git a/tests/boundary/mcp/electronMcp.test.ts b/tests/boundary/mcp/electronMcp.test.ts index ebbb66be1..72d8892ed 100644 --- a/tests/boundary/mcp/electronMcp.test.ts +++ b/tests/boundary/mcp/electronMcp.test.ts @@ -18,7 +18,7 @@ import { type FakeCdpBrowser, } from "../../fixtures/fakeCdpBrowser.js"; import { writeElectronBoundaryFixture } from "../../fixtures/electronBoundaryApplication.js"; -import { createElectronActiveObservationFixtureResult } from "../../../src/domain/electronActiveObservation.fixture.js"; +import { createElectronActiveObservationFixtureResult } from "../../../src/domain/javascript/electronActiveObservation.fixture.js"; const browsers: FakeCdpBrowser[] = []; const resources: Array<{ close(): Promise }> = []; diff --git a/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts b/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts index 36e72f8ed..c5d1d34fa 100644 --- a/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts +++ b/tests/boundary/mcp/javascriptRuntimeObservationMcp.test.ts @@ -12,7 +12,7 @@ import { javascriptRuntimeObservationSchema, javascriptRuntimeTargetListSchema, observeJavaScriptRuntimeInputSchema, -} from "../../../src/domain/javascriptRuntimeObservation.js"; +} from "../../../src/domain/javascript/javascriptRuntimeObservation.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; import { startFakeV8Inspector } from "../../fixtures/inspector/fakeV8Inspector.js"; diff --git a/tests/boundary/mcp/retainedApplicationEvidenceMcp.test.ts b/tests/boundary/mcp/retainedApplicationEvidenceMcp.test.ts index c29983003..304bc9b14 100644 --- a/tests/boundary/mcp/retainedApplicationEvidenceMcp.test.ts +++ b/tests/boundary/mcp/retainedApplicationEvidenceMcp.test.ts @@ -8,7 +8,7 @@ import { JAVASCRIPT_APPLICATION_VERSION_COMPARISON_EXAMPLE, JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, -} from "../../../src/contracts/javascriptApplicationWorkflowExamples.js"; +} from "../../../src/contracts/javascript/javascriptApplicationWorkflowExamples.js"; import { createEvidence, parseEvidence } from "../../../src/domain/evidence.js"; const resources: Array<{ close(): Promise }> = []; diff --git a/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts b/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts index 38c78a587..7d61829ae 100644 --- a/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts +++ b/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts @@ -9,8 +9,8 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { createElectronEvidence } from "../../../src/application/javascript/ElectronEvidence.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; -import { reconcileJavaScriptRuntime } from "../../../src/domain/javascriptRuntimeReconciliation.js"; -import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; +import { reconcileJavaScriptRuntime } from "../../../src/domain/javascript/javascriptRuntimeReconciliation.js"; +import { inspectElectronPageInputSchema } from "../../../src/domain/javascript/electronObservation.js"; import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js"; const SOURCE = `const worker = new Worker("./worker.js");\nexport const observed = worker;\n`; diff --git a/tests/composition/analysis-sessions/managedApplicationGraph.test.ts b/tests/composition/analysis-sessions/managedApplicationGraph.test.ts index 80edb5b9a..0607fea21 100644 --- a/tests/composition/analysis-sessions/managedApplicationGraph.test.ts +++ b/tests/composition/analysis-sessions/managedApplicationGraph.test.ts @@ -6,7 +6,7 @@ import { MANAGED_APPLICATION_GRAPH_EXAMPLE } from "../../../src/contracts/manage import { traceApplicationFeatureEvidence } from "../../../src/application/javascript/JavaScriptApplicationWorkflowService.js"; import { MANAGED_STATIC_PROVIDER } from "../../../src/application/InvestigationProviders.js"; import { createEvidence, parseEvidence } from "../../../src/domain/evidence.js"; -import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascriptApplicationGraph.js"; +import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascript/javascriptApplicationGraph.js"; import { managedApplicationGraphResultSchema } from "../../../src/domain/managedApplicationGraph.js"; import { inspectManagedArtifactBytes } from "../../../src/dotnet/ManagedArtifactInspector.js"; import { inspectManagedMembersBytes } from "../../../src/dotnet/ManagedMemberInspector.js"; diff --git a/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts b/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts index ac86261cf..3484f98a2 100644 --- a/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts +++ b/tests/composition/javascript-applications/electronApplicationAnalysis.test.ts @@ -8,8 +8,8 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; import { reconstructJavaScriptArtifact } from "../../../src/application/javascript/JavaScriptArtifactReconstruction.js"; import { parseEvidence } from "../../../src/domain/evidence.js"; -import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascriptApplicationGraph.js"; -import { analyzeJavaScriptApplicationInputSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; +import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascript/javascriptApplicationGraph.js"; +import { analyzeJavaScriptApplicationInputSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; import { writeElectronBoundaryFixture } from "../../fixtures/electronBoundaryApplication.js"; describe("static Electron application analysis", () => { diff --git a/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts b/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts index 0bd98d6f5..d4d60e83b 100644 --- a/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts +++ b/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts @@ -8,10 +8,10 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { reconstructJavaScriptArtifact } from "../../../src/application/javascript/JavaScriptArtifactReconstruction.js"; import { scanArtifactInventory } from "../../../src/application/ArtifactInventory.js"; -import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascriptApplicationGraph.js"; -import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; -import { createJavaScriptSemanticGraph } from "../../../src/domain/javascriptSemanticGraph.js"; -import { parseJavaScriptSemanticGraph } from "../../../src/domain/javascriptSemanticGraphSerialization.js"; +import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascript/javascriptApplicationGraph.js"; +import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js"; +import { createJavaScriptSemanticGraph } from "../../../src/domain/javascript/javascriptSemanticGraph.js"; +import { parseJavaScriptSemanticGraph } from "../../../src/domain/javascript/javascriptSemanticGraphSerialization.js"; import { writeJavaScriptArtifactFixture } from "../../fixtures/javascriptArtifactApplication.js"; it("reconstructs package, Electron roles, Webpack/Rspack modules, and cross-layer facts without execution", async () => { diff --git a/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts b/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts index b0d1e1591..a66c3240b 100644 --- a/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts +++ b/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts @@ -8,12 +8,12 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { createElectronEvidence } from "../../../src/application/javascript/ElectronEvidence.js"; import { createElectronActiveEvidence } from "../../../src/application/javascript/ElectronActiveEvidence.js"; import { analyzeJavaScriptApplication } from "../../../src/application/javascript/JavaScriptApplicationService.js"; -import { reconcileJavaScriptRuntime } from "../../../src/domain/javascriptRuntimeReconciliation.js"; -import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascriptRuntimeReconciliationSchemas.js"; -import { electronActiveObservationInputSchema } from "../../../src/domain/electronActiveObservation.js"; -import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; +import { reconcileJavaScriptRuntime } from "../../../src/domain/javascript/javascriptRuntimeReconciliation.js"; +import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascript/javascriptRuntimeReconciliationSchemas.js"; +import { electronActiveObservationInputSchema } from "../../../src/domain/javascript/electronActiveObservation.js"; +import { inspectElectronPageInputSchema } from "../../../src/domain/javascript/electronObservation.js"; import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js"; -import { createElectronActiveObservationFixtureResult } from "../../../src/domain/electronActiveObservation.fixture.js"; +import { createElectronActiveObservationFixtureResult } from "../../../src/domain/javascript/electronActiveObservation.fixture.js"; const SOURCE = `const worker = new Worker("./worker.js");\nexport const observed = worker;\n`; diff --git a/tests/fixtures/contractPresentation.mjs b/tests/fixtures/contractPresentation.mjs index 3670f1b1b..6eab97d88 100644 --- a/tests/fixtures/contractPresentation.mjs +++ b/tests/fixtures/contractPresentation.mjs @@ -2,8 +2,8 @@ import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; import { BROWSER_TOOL_CONTRACTS } from "../../dist/contracts/browserToolContracts.js"; import { BROWSER_SCENARIO_TOOL_CONTRACTS } from "../../dist/contracts/browserScenarioToolContracts.js"; -import { ELECTRON_TOOL_CONTRACTS } from "../../dist/contracts/electronToolContracts.js"; -import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "../../dist/contracts/javascriptRuntimeObservationToolContracts.js"; +import { ELECTRON_TOOL_CONTRACTS } from "../../dist/contracts/javascript/electronToolContracts.js"; +import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "../../dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js"; import { TOOL_CONTRACTS } from "../../dist/contracts/toolContracts.js"; import { parseConfig } from "../../dist/config.js"; import { createBinarySession } from "../../dist/application/runtime.js"; diff --git a/tests/support/javascriptApplicationFixture.ts b/tests/support/javascriptApplicationFixture.ts index dc4b87e40..4c60b99ea 100644 --- a/tests/support/javascriptApplicationFixture.ts +++ b/tests/support/javascriptApplicationFixture.ts @@ -6,7 +6,7 @@ import type { ApplicationEdge, ApplicationNode, JavaScriptApplicationGraph, -} from "../../src/domain/javascriptApplicationGraph.js"; +} from "../../src/domain/javascript/javascriptApplicationGraph.js"; /** Write text fixture files, creating parent directories as needed. */ export const writeFixtureFiles = async (