@spotpatch/vite 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -51,7 +51,7 @@ var import_dev_server = require("@spotpatch/dev-server");
51
51
  // package.json
52
52
  var package_default = {
53
53
  name: "@spotpatch/vite",
54
- version: "1.11.0",
54
+ version: "1.12.0",
55
55
  description: "Vite development plugin for SpotPatch.",
56
56
  license: "MIT",
57
57
  repository: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/runtime/runtime-injection-plugin.ts","../package.json","../../runtime/src/ui/brand-mark-content.ts","../src/server/server-plugin.ts","../src/transform/transform-plugin.ts","../src/transform/transform-filter.ts","../src/options.ts"],"sourcesContent":["export { spotPatch } from \"./plugin.js\";\nexport {\n DEFAULT_OPTIONS,\n resolveOptions,\n type ResolvedSpotPatchOptions,\n type SimpleAiOptions,\n type SpotPatchAiOptions,\n type SpotPatchDataFlowOptions,\n type SpotPatchOptions,\n type ViteSpotPatchOptions,\n} from \"./options.js\";\nexport {\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCheckDefinition,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type ContextBudget,\n type OpenAICompatibleProviderOptions,\n type SpotPatchEditorPreference,\n} from \"@spotpatch/shared\";\n","import path from \"node:path\";\n\nimport {\n createSession,\n createSourceRegistry,\n resolveCredentialEnvironment,\n resolveEnvironmentAiConfiguration,\n resolveOptions,\n resolveProjectOptions,\n} from \"@spotpatch/dev-server\";\nimport { loadEnv, type ConfigEnv, type Plugin, type UserConfig } from \"vite\";\n\nimport type { ViteSpotPatchOptions } from \"./options.js\";\nimport type { SpotPatchPluginContext } from \"./plugin-context.js\";\nimport { createRuntimeInjectionPlugin } from \"./runtime/runtime-injection-plugin.js\";\nimport { createServerPlugin } from \"./server/server-plugin.js\";\nimport { createTransformPlugin } from \"./transform/transform-plugin.js\";\n\nexport function spotPatch(userOptions: ViteSpotPatchOptions = {}): Plugin[] {\n let options = resolveOptions(userOptions);\n let credentialEnvironment: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n if (!options.enabled) {\n return [];\n }\n\n const registry = createSourceRegistry();\n const session = createSession();\n const context = Object.freeze({\n getCredentialEnvironment: () => credentialEnvironment,\n getOptions: () => options,\n } satisfies SpotPatchPluginContext);\n const configure = async (\n config: UserConfig,\n environment: ConfigEnv,\n ): Promise<void> => {\n const root = path.resolve(process.cwd(), config.root ?? \".\");\n const loadedEnvironment =\n config.envDir === false\n ? process.env\n : loadEnv(environment.mode, path.resolve(root, config.envDir ?? \".\"), \"\");\n const environmentAi =\n userOptions.ai === undefined\n ? resolveEnvironmentAiConfiguration(loadedEnvironment).ai\n : false;\n\n options = await resolveProjectOptions({\n appRoot: root,\n environmentAi,\n options: userOptions,\n });\n\n credentialEnvironment = resolveCredentialEnvironment(options, loadedEnvironment);\n };\n\n return [\n createTransformPlugin({ configure, context, registry }),\n createRuntimeInjectionPlugin({ context, session }),\n createServerPlugin({ context, registry, session }),\n ];\n}\n","import { createRequire } from \"node:module\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { BRAND_MARK_CONTENT } from \"./brand-mark-content.js\";\n\nexport const SPOTPATCH_CLIENT_MODULE_ID = \"virtual:spotpatch/client\";\nexport const RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\\0${SPOTPATCH_CLIENT_MODULE_ID}`;\nexport const SPOTPATCH_REACT_ADAPTER_MODULE_ID = \"virtual:spotpatch/react-adapter\";\nexport const RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_MODULE_ID = \"virtual:spotpatch/data-flow-runtime\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = \"virtual:spotpatch/data-flow-panel\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;\nexport const SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID =\n \"virtual:spotpatch/external-handoff-panel\";\nexport const RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;\n\ninterface RuntimeInjectionPluginInput {\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createDataFlowPreludeModule(\n input: RuntimeInjectionPluginInput,\n bundle: string,\n): string {\n return [\n `const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,\n bundle,\n ].join(\"\\n\");\n}\n\nfunction readRuntimeBundle(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n const bundlePath = path.join(path.dirname(packageEntry), fileName);\n return readFileSync(bundlePath, \"utf8\");\n}\n\nfunction readConsumerViteVersion(root: string): string {\n try {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const manifestPath = resolveFromProject.resolve(\"vite/package.json\");\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as unknown;\n\n if (\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ) {\n return manifest.version;\n }\n } catch {\n // Vite itself remains the safe fallback if package metadata is not exported.\n }\n\n return VITE_VERSION;\n}\n\nfunction createClientModule(\n input: RuntimeInjectionPluginInput,\n clientBundle: string,\n viteVersion: string,\n): string {\n const options = input.context.getOptions();\n const runtimeConfig = {\n ai: createRuntimeAiConfig(options.ai),\n budget: options.budget,\n dataFlow: createRuntimeDataFlowConfig(options.dataFlow),\n debug: options.debug,\n editor: options.editor,\n externalAgent: options.externalAgent,\n framework: \"vite\" as const,\n frameworkVersion: viteVersion,\n locale: options.locale,\n maxTargets: options.maxTargets,\n redact: options.redact,\n sessionId: input.session.id,\n sessionToken: input.session.token,\n shortcut: options.shortcut,\n spotPatchVersion: packageMetadata.version,\n };\n\n return [\n ...(options.dataFlow.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`]\n : []),\n ...(options.externalAgent.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`]\n : []),\n `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,\n `const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,\n clientBundle,\n ].join(\"\\n\");\n}\n\nexport function createRuntimeInjectionPlugin(\n input: RuntimeInjectionPluginInput,\n): Plugin {\n let root = process.cwd();\n let clientBundle = input.clientBundle;\n let dataFlowPreludeBundle = input.dataFlowPreludeBundle;\n let dataFlowPanelBundle = input.dataFlowPanelBundle;\n let externalHandoffPanelBundle = input.externalHandoffPanelBundle;\n let viteVersion = VITE_VERSION;\n\n return {\n name: \"spotpatch:runtime-injection\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(config) {\n root = path.resolve(config.root);\n viteVersion = readConsumerViteVersion(root);\n },\n\n resolveId(id, importer) {\n if (id === SPOTPATCH_CLIENT_MODULE_ID) {\n return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;\n }\n\n if (\n id === \"@spotpatch/react-adapter\" &&\n importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID\n ) {\n return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;\n }\n\n if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;\n }\n\n return null;\n },\n\n load(id) {\n if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {\n clientBundle ??= readRuntimeBundle(root, \"runtime-client.js\");\n return createClientModule(input, clientBundle, viteVersion);\n }\n\n if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {\n return (\n input.reactAdapterBundle ??\n readRuntimeBundle(root, \"runtime-react-adapter.js\")\n );\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPreludeBundle ??= readRuntimeBundle(\n root,\n \"runtime-data-flow-prelude.js\",\n );\n return createDataFlowPreludeModule(input, dataFlowPreludeBundle);\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPanelBundle ??= readRuntimeBundle(root, \"runtime-data-flow-panel.js\");\n return dataFlowPanelBundle;\n }\n\n if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n if (!input.context.getOptions().externalAgent.enabled) return null;\n externalHandoffPanelBundle ??= readRuntimeBundle(\n root,\n \"runtime-external-handoff-panel.js\",\n );\n return externalHandoffPanelBundle;\n }\n\n return null;\n },\n\n transformIndexHtml() {\n const client = {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`,\n },\n injectTo: \"head\" as const,\n };\n if (!input.context.getOptions().dataFlow.enabled) {\n return [client];\n }\n\n return [\n {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_DATA_FLOW_MODULE_ID}`,\n },\n injectTo: \"head-prepend\" as const,\n },\n client,\n ];\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.11.0\",\n \"description\": \"Vite development plugin for SpotPatch.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/huanglvjing/spotpatch.git\",\n \"directory\": \"packages/vite\"\n },\n \"homepage\": \"https://github.com/huanglvjing/spotpatch#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/huanglvjing/spotpatch/issues\"\n },\n \"keywords\": [\n \"spotpatch\",\n \"vite\",\n \"react\",\n \"developer-tools\",\n \"ai-agent\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"spotpatch-vite\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts && tsup --config tsup.runtime-data-flow-prelude.config.ts && tsup --config tsup.runtime-data-flow-panel.config.ts && tsup --config tsup.runtime-external-handoff-panel.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n },\n \"dependencies\": {\n \"@spotpatch/bridge\": \"workspace:^\",\n \"@spotpatch/compiler\": \"workspace:^\",\n \"@spotpatch/dev-server\": \"workspace:^\",\n \"@spotpatch/react-adapter\": \"workspace:^\",\n \"@spotpatch/runtime\": \"workspace:^\",\n \"@spotpatch/shared\": \"workspace:^\",\n \"magic-string\": \"1.1.0\",\n \"oxc-parser\": \"0.143.0\"\n },\n \"peerDependencies\": {\n \"vite\": \"^5.0.0 || ^6.0.0 || ^7.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Canonical SpotPatch mark from docs/assets/spotpatch-logo-mark.svg.\n *\n * The Vite development injector consumes this trusted asset separately from\n * the core browser bundle so the Runtime gzip budget remains enforceable.\n */\nexport const BRAND_MARK_CONTENT = `\n <defs>\n <linearGradient id=\"locator-gradient\" x1=\"76\" y1=\"92\" x2=\"436\" y2=\"374\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#B61CFF\" />\n <stop offset=\"0.38\" stop-color=\"#6D35FF\" />\n <stop offset=\"0.72\" stop-color=\"#168EFF\" />\n <stop offset=\"1\" stop-color=\"#00D9E9\" />\n </linearGradient>\n <linearGradient id=\"left-code-gradient\" x1=\"165\" y1=\"166\" x2=\"236\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#A51EFF\" />\n <stop offset=\"1\" stop-color=\"#653BFF\" />\n </linearGradient>\n <linearGradient id=\"right-code-gradient\" x1=\"276\" y1=\"166\" x2=\"347\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#158DFF\" />\n <stop offset=\"1\" stop-color=\"#00D8E9\" />\n </linearGradient>\n <linearGradient id=\"bolt-gradient\" x1=\"270\" y1=\"111\" x2=\"252\" y2=\"365\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#6840FF\" />\n <stop offset=\"0.48\" stop-color=\"#257BFF\" />\n <stop offset=\"1\" stop-color=\"#00CBEF\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#locator-gradient)\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M256 52C345.47 52 418 124.53 418 214C418 267.55 391.98 316.24 354.04 348.02L256 468L157.96 348.02C120.02 316.24 94 267.55 94 214C94 124.53 166.53 52 256 52ZM256 88C186.41 88 130 144.41 130 214C130 258.2 152.76 297.08 187.2 319.57L256 403.8L324.8 319.57C359.24 297.08 382 258.2 382 214C382 144.41 325.59 88 256 88Z\"\n />\n <rect x=\"238\" y=\"20\" width=\"36\" height=\"84\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"62\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"366\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <path\n d=\"M213.5 160L158 211.5L213.5 263L238 236.5L211 211.5L238 186.5L213.5 160Z\"\n fill=\"url(#left-code-gradient)\"\n />\n <path\n d=\"M298.5 160L354 211.5L298.5 263L274 236.5L301 211.5L274 186.5L298.5 160Z\"\n fill=\"url(#right-code-gradient)\"\n />\n <path\n d=\"M283 108L232 212L266 253L238 369L302 237L267 198L283 108Z\"\n fill=\"url(#bolt-gradient)\"\n />\n`;\n","import path from \"node:path\";\n\nimport {\n createAgentJobManager,\n createExternalHandoffService,\n createSpotPatchMiddleware,\n resolveManagedExecutionValidation,\n type AgentJobManager,\n type ExternalHandoffService,\n type SourceRegistry,\n type SpotPatchSession,\n type SpotPatchMiddleware,\n} from \"@spotpatch/dev-server\";\nimport {\n createExternalAgentSupervisor,\n type ExternalAgentSupervisor,\n} from \"@spotpatch/bridge\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\n\ninterface ServerPluginInput {\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n readonly session: SpotPatchSession;\n}\n\nexport function createServerPlugin(input: ServerPluginInput): Plugin {\n let agentManager: AgentJobManager | undefined;\n let externalHandoffService: ExternalHandoffService | undefined;\n let externalAgentSupervisor: ExternalAgentSupervisor | undefined;\n let middleware: SpotPatchMiddleware | undefined;\n let config: ResolvedConfig | undefined;\n\n const closeResources = async (): Promise<void> => {\n input.registry.clear();\n middleware?.dispose();\n middleware = undefined;\n await externalAgentSupervisor?.dispose();\n externalAgentSupervisor = undefined;\n await externalHandoffService?.close();\n externalHandoffService = undefined;\n await agentManager?.close();\n agentManager = undefined;\n };\n\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n\n async configureServer(server) {\n if (config === undefined) {\n throw new Error(\"SpotPatch server initialized before Vite config resolution.\");\n }\n\n const root = path.resolve(config.root);\n const options = input.context.getOptions();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n });\n externalHandoffService = options.externalAgent.enabled\n ? createExternalHandoffService({\n framework: \"vite\",\n root,\n sessionId: input.session.id,\n })\n : undefined;\n\n if (externalHandoffService !== undefined) {\n try {\n await externalHandoffService.start();\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active.\",\n );\n }\n\n if (externalHandoffService.capability().brokerReady) {\n try {\n const validation = await resolveManagedExecutionValidation({\n ai: options.ai,\n appRoot: root,\n });\n externalAgentSupervisor = await createExternalAgentSupervisor({\n bridgeAdapter: \"vite\",\n checks: validation.checks,\n limits: validation.limits,\n root,\n sessionId: input.session.id,\n projectLabel: path.basename(root),\n });\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] Managed Agent control is unavailable; Inbox remains active.\",\n );\n }\n }\n }\n\n middleware = createSpotPatchMiddleware({\n ...(agentManager === undefined ? {} : { agentManager }),\n ...(externalAgentSupervisor === undefined\n ? {}\n : { externalAgentControl: externalAgentSupervisor }),\n ...(externalHandoffService === undefined ? {} : { externalHandoffService }),\n options,\n registry: input.registry,\n root,\n session: input.session,\n logger: config.logger,\n });\n server.middlewares.use(middleware);\n\n server.httpServer?.once(\"close\", () => {\n void closeResources();\n });\n\n config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n\n async closeBundle() {\n await closeResources();\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\n\nimport type { ConfigEnv, Plugin, ResolvedConfig, UserConfig } from \"vite\";\nimport { injectSourceMarkers } from \"@spotpatch/compiler\";\nimport type { SourceRegistry } from \"@spotpatch/dev-server\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { SPOTPATCH_DATA_FLOW_MODULE_ID } from \"../runtime/runtime-injection-plugin.js\";\nimport { createTransformFilter, stripViteQuery } from \"./transform-filter.js\";\n\ninterface TransformPluginInput {\n readonly configure?: (\n config: UserConfig,\n environment: ConfigEnv,\n ) => void | Promise<void>;\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n}\n\ninterface ViteTransformOutput {\n readonly code: string;\n readonly map: string;\n}\n\nfunction createCacheKey(id: string, code: string): string {\n const hash = createHash(\"sha256\").update(code).digest(\"base64url\");\n return `${id}\\0${hash}`;\n}\n\nfunction getDisplayPath(root: string, id: string): string {\n const relative = path.relative(root, stripViteQuery(id));\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function createTransformPlugin(input: TransformPluginInput): Plugin {\n let root = process.cwd();\n let filter = createTransformFilter(root, input.context.getOptions());\n let logger: ResolvedConfig[\"logger\"] | undefined;\n const warnedFiles = new Set<string>();\n const warnedDataFlowDiagnostics = new Set<string>();\n const cache = new Map<string, ViteTransformOutput | null>();\n\n return {\n name: \"spotpatch:transform\",\n apply: \"serve\",\n enforce: \"pre\",\n\n async config(config, environment) {\n await input.configure?.(config, environment);\n },\n\n configResolved(config) {\n root = path.resolve(config.root);\n filter = createTransformFilter(root, input.context.getOptions());\n logger = config.logger;\n },\n\n transform(code, id) {\n if (!filter.shouldTransform(id, code)) {\n return null;\n }\n\n const cleanId = path.resolve(stripViteQuery(id));\n const cacheKey = createCacheKey(cleanId, code);\n\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey) ?? null;\n }\n\n const startedAt = performance.now();\n const options = input.context.getOptions();\n\n try {\n const result = injectSourceMarkers({\n code,\n absolutePath: cleanId,\n root,\n fileId: input.registry.register(cleanId),\n ...(options.dataFlow.enabled\n ? { dataFlow: { helperModule: SPOTPATCH_DATA_FLOW_MODULE_ID } }\n : {}),\n onWarning(warning) {\n logger?.warn(\n `[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`,\n );\n },\n });\n\n if (result?.dataFlow !== undefined) {\n input.registry.registerDataFlowComponents(\n cleanId,\n result.dataFlow.sourceVersion,\n result.dataFlow.anchors.flatMap((anchor) =>\n anchor.kind === \"component\"\n ? [\n {\n componentSourceId: anchor.id,\n line: anchor.line,\n column: anchor.column,\n },\n ]\n : [],\n ),\n );\n for (const diagnostic of result.dataFlow.diagnostics) {\n const warningKey = `${cleanId}:${diagnostic.code}:${String(diagnostic.line)}:${String(diagnostic.column)}`;\n if (warnedDataFlowDiagnostics.has(warningKey)) continue;\n warnedDataFlowDiagnostics.add(warningKey);\n logger?.warn(\n `[spotpatch:data-flow] ${diagnostic.code} at ${getDisplayPath(root, id)}:${String(diagnostic.line)}:${String(diagnostic.column)}; keeping this adapter evidence partial.`,\n );\n }\n }\n\n const output =\n result === undefined\n ? null\n : Object.freeze({\n code: result.code,\n map: result.map.toString(),\n });\n cache.set(cacheKey, output);\n\n if (options.debug) {\n const elapsed = performance.now() - startedAt;\n logger?.info(\n `[spotpatch:transform] ${getDisplayPath(root, id)} ${elapsed.toFixed(2)}ms`,\n );\n }\n\n return output;\n } catch (error: unknown) {\n if (!warnedFiles.has(cleanId)) {\n warnedFiles.add(cleanId);\n const detail =\n options.debug && error instanceof Error ? `: ${error.message}` : \"\";\n logger?.warn(\n `[spotpatch:transform] Failed to transform ${getDisplayPath(root, id)}; using original module${detail}`,\n );\n }\n\n return null;\n }\n },\n };\n}\n","import path from \"node:path\";\n\nimport { createDataFlowSourceFilter, createSourceFilter } from \"@spotpatch/compiler\";\nimport type { ResolvedSpotPatchOptions } from \"@spotpatch/dev-server\";\n\nexport function stripViteQuery(id: string): string {\n const queryIndex = id.indexOf(\"?\");\n return queryIndex === -1 ? id : id.slice(0, queryIndex);\n}\n\nexport { isInsideRoot } from \"@spotpatch/compiler\";\n\nexport interface TransformFilter {\n shouldTransform(id: string, code: string): boolean;\n}\n\nexport function createTransformFilter(\n root: string,\n options: ResolvedSpotPatchOptions,\n): TransformFilter {\n const sourceFilter = createSourceFilter(root, options);\n const dataFlowFilter = createDataFlowSourceFilter(root, {\n include: options.include,\n exclude: options.exclude,\n });\n\n return Object.freeze({\n shouldTransform(id: string, code: string): boolean {\n if (\n id.startsWith(\"\\0\") ||\n id.includes(\"virtual:spotpatch\") ||\n id.includes(\"/packages/vite/\") ||\n id.includes(\"\\\\packages\\\\vite\\\\\")\n ) {\n return false;\n }\n\n const cleanId = stripViteQuery(id);\n const absolutePath = path.resolve(cleanId);\n return (\n sourceFilter.shouldTransform(absolutePath, code) ||\n (options.dataFlow.enabled && dataFlowFilter.shouldTransform(absolutePath, code))\n );\n },\n });\n}\n","export {\n createRuntimeAiConfig,\n DEFAULT_EXCLUDE,\n DEFAULT_OPTIONS,\n resolveOptions,\n} from \"@spotpatch/dev-server\";\nexport type {\n FilterEntry,\n ResolvedSpotPatchOptions,\n SimpleAiOptions,\n SpotPatchAiOptions,\n SpotPatchDataFlowOptions,\n SpotPatchOptions,\n} from \"@spotpatch/dev-server\";\n\nexport type ViteSpotPatchOptions = SharedSpotPatchOptions;\nimport type { SpotPatchOptions as SharedSpotPatchOptions } from \"@spotpatch/dev-server\";\n"],"mappings":"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","names":["import_node_path","import_dev_server","import_vite","path","VITE_VERSION","import_node_path","import_dev_server","path","import_node_path","import_compiler","import_node_path","import_compiler","path","path","path","import_dev_server"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/runtime/runtime-injection-plugin.ts","../package.json","../../runtime/src/ui/brand-mark-content.ts","../src/server/server-plugin.ts","../src/transform/transform-plugin.ts","../src/transform/transform-filter.ts","../src/options.ts"],"sourcesContent":["export { spotPatch } from \"./plugin.js\";\nexport {\n DEFAULT_OPTIONS,\n resolveOptions,\n type ResolvedSpotPatchOptions,\n type SimpleAiOptions,\n type SpotPatchAiOptions,\n type SpotPatchDataFlowOptions,\n type SpotPatchOptions,\n type ViteSpotPatchOptions,\n} from \"./options.js\";\nexport {\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCheckDefinition,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type ContextBudget,\n type OpenAICompatibleProviderOptions,\n type SpotPatchEditorPreference,\n} from \"@spotpatch/shared\";\n","import path from \"node:path\";\n\nimport {\n createSession,\n createSourceRegistry,\n resolveCredentialEnvironment,\n resolveEnvironmentAiConfiguration,\n resolveOptions,\n resolveProjectOptions,\n} from \"@spotpatch/dev-server\";\nimport { loadEnv, type ConfigEnv, type Plugin, type UserConfig } from \"vite\";\n\nimport type { ViteSpotPatchOptions } from \"./options.js\";\nimport type { SpotPatchPluginContext } from \"./plugin-context.js\";\nimport { createRuntimeInjectionPlugin } from \"./runtime/runtime-injection-plugin.js\";\nimport { createServerPlugin } from \"./server/server-plugin.js\";\nimport { createTransformPlugin } from \"./transform/transform-plugin.js\";\n\nexport function spotPatch(userOptions: ViteSpotPatchOptions = {}): Plugin[] {\n let options = resolveOptions(userOptions);\n let credentialEnvironment: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n if (!options.enabled) {\n return [];\n }\n\n const registry = createSourceRegistry();\n const session = createSession();\n const context = Object.freeze({\n getCredentialEnvironment: () => credentialEnvironment,\n getOptions: () => options,\n } satisfies SpotPatchPluginContext);\n const configure = async (\n config: UserConfig,\n environment: ConfigEnv,\n ): Promise<void> => {\n const root = path.resolve(process.cwd(), config.root ?? \".\");\n const loadedEnvironment =\n config.envDir === false\n ? process.env\n : loadEnv(environment.mode, path.resolve(root, config.envDir ?? \".\"), \"\");\n const environmentAi =\n userOptions.ai === undefined\n ? resolveEnvironmentAiConfiguration(loadedEnvironment).ai\n : false;\n\n options = await resolveProjectOptions({\n appRoot: root,\n environmentAi,\n options: userOptions,\n });\n\n credentialEnvironment = resolveCredentialEnvironment(options, loadedEnvironment);\n };\n\n return [\n createTransformPlugin({ configure, context, registry }),\n createRuntimeInjectionPlugin({ context, session }),\n createServerPlugin({ context, registry, session }),\n ];\n}\n","import { createRequire } from \"node:module\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { BRAND_MARK_CONTENT } from \"./brand-mark-content.js\";\n\nexport const SPOTPATCH_CLIENT_MODULE_ID = \"virtual:spotpatch/client\";\nexport const RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\\0${SPOTPATCH_CLIENT_MODULE_ID}`;\nexport const SPOTPATCH_REACT_ADAPTER_MODULE_ID = \"virtual:spotpatch/react-adapter\";\nexport const RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_MODULE_ID = \"virtual:spotpatch/data-flow-runtime\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = \"virtual:spotpatch/data-flow-panel\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;\nexport const SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID =\n \"virtual:spotpatch/external-handoff-panel\";\nexport const RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;\n\ninterface RuntimeInjectionPluginInput {\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createDataFlowPreludeModule(\n input: RuntimeInjectionPluginInput,\n bundle: string,\n): string {\n return [\n `const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,\n bundle,\n ].join(\"\\n\");\n}\n\nfunction readRuntimeBundle(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n const bundlePath = path.join(path.dirname(packageEntry), fileName);\n return readFileSync(bundlePath, \"utf8\");\n}\n\nfunction readConsumerViteVersion(root: string): string {\n try {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const manifestPath = resolveFromProject.resolve(\"vite/package.json\");\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as unknown;\n\n if (\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ) {\n return manifest.version;\n }\n } catch {\n // Vite itself remains the safe fallback if package metadata is not exported.\n }\n\n return VITE_VERSION;\n}\n\nfunction createClientModule(\n input: RuntimeInjectionPluginInput,\n clientBundle: string,\n viteVersion: string,\n): string {\n const options = input.context.getOptions();\n const runtimeConfig = {\n ai: createRuntimeAiConfig(options.ai),\n budget: options.budget,\n dataFlow: createRuntimeDataFlowConfig(options.dataFlow),\n debug: options.debug,\n editor: options.editor,\n externalAgent: options.externalAgent,\n framework: \"vite\" as const,\n frameworkVersion: viteVersion,\n locale: options.locale,\n maxTargets: options.maxTargets,\n redact: options.redact,\n sessionId: input.session.id,\n sessionToken: input.session.token,\n shortcut: options.shortcut,\n spotPatchVersion: packageMetadata.version,\n };\n\n return [\n ...(options.dataFlow.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`]\n : []),\n ...(options.externalAgent.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`]\n : []),\n `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,\n `const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,\n clientBundle,\n ].join(\"\\n\");\n}\n\nexport function createRuntimeInjectionPlugin(\n input: RuntimeInjectionPluginInput,\n): Plugin {\n let root = process.cwd();\n let clientBundle = input.clientBundle;\n let dataFlowPreludeBundle = input.dataFlowPreludeBundle;\n let dataFlowPanelBundle = input.dataFlowPanelBundle;\n let externalHandoffPanelBundle = input.externalHandoffPanelBundle;\n let viteVersion = VITE_VERSION;\n\n return {\n name: \"spotpatch:runtime-injection\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(config) {\n root = path.resolve(config.root);\n viteVersion = readConsumerViteVersion(root);\n },\n\n resolveId(id, importer) {\n if (id === SPOTPATCH_CLIENT_MODULE_ID) {\n return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;\n }\n\n if (\n id === \"@spotpatch/react-adapter\" &&\n importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID\n ) {\n return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;\n }\n\n if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;\n }\n\n return null;\n },\n\n load(id) {\n if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {\n clientBundle ??= readRuntimeBundle(root, \"runtime-client.js\");\n return createClientModule(input, clientBundle, viteVersion);\n }\n\n if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {\n return (\n input.reactAdapterBundle ??\n readRuntimeBundle(root, \"runtime-react-adapter.js\")\n );\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPreludeBundle ??= readRuntimeBundle(\n root,\n \"runtime-data-flow-prelude.js\",\n );\n return createDataFlowPreludeModule(input, dataFlowPreludeBundle);\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPanelBundle ??= readRuntimeBundle(root, \"runtime-data-flow-panel.js\");\n return dataFlowPanelBundle;\n }\n\n if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n if (!input.context.getOptions().externalAgent.enabled) return null;\n externalHandoffPanelBundle ??= readRuntimeBundle(\n root,\n \"runtime-external-handoff-panel.js\",\n );\n return externalHandoffPanelBundle;\n }\n\n return null;\n },\n\n transformIndexHtml() {\n const client = {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`,\n },\n injectTo: \"head\" as const,\n };\n if (!input.context.getOptions().dataFlow.enabled) {\n return [client];\n }\n\n return [\n {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_DATA_FLOW_MODULE_ID}`,\n },\n injectTo: \"head-prepend\" as const,\n },\n client,\n ];\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.12.0\",\n \"description\": \"Vite development plugin for SpotPatch.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/huanglvjing/spotpatch.git\",\n \"directory\": \"packages/vite\"\n },\n \"homepage\": \"https://github.com/huanglvjing/spotpatch#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/huanglvjing/spotpatch/issues\"\n },\n \"keywords\": [\n \"spotpatch\",\n \"vite\",\n \"react\",\n \"developer-tools\",\n \"ai-agent\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"spotpatch-vite\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts && tsup --config tsup.runtime-data-flow-prelude.config.ts && tsup --config tsup.runtime-data-flow-panel.config.ts && tsup --config tsup.runtime-external-handoff-panel.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n },\n \"dependencies\": {\n \"@spotpatch/bridge\": \"workspace:^\",\n \"@spotpatch/compiler\": \"workspace:^\",\n \"@spotpatch/dev-server\": \"workspace:^\",\n \"@spotpatch/react-adapter\": \"workspace:^\",\n \"@spotpatch/runtime\": \"workspace:^\",\n \"@spotpatch/shared\": \"workspace:^\",\n \"magic-string\": \"1.1.0\",\n \"oxc-parser\": \"0.143.0\"\n },\n \"peerDependencies\": {\n \"vite\": \"^5.0.0 || ^6.0.0 || ^7.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Canonical SpotPatch mark from docs/assets/spotpatch-logo-mark.svg.\n *\n * The Vite development injector consumes this trusted asset separately from\n * the core browser bundle so the Runtime gzip budget remains enforceable.\n */\nexport const BRAND_MARK_CONTENT = `\n <defs>\n <linearGradient id=\"locator-gradient\" x1=\"76\" y1=\"92\" x2=\"436\" y2=\"374\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#B61CFF\" />\n <stop offset=\"0.38\" stop-color=\"#6D35FF\" />\n <stop offset=\"0.72\" stop-color=\"#168EFF\" />\n <stop offset=\"1\" stop-color=\"#00D9E9\" />\n </linearGradient>\n <linearGradient id=\"left-code-gradient\" x1=\"165\" y1=\"166\" x2=\"236\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#A51EFF\" />\n <stop offset=\"1\" stop-color=\"#653BFF\" />\n </linearGradient>\n <linearGradient id=\"right-code-gradient\" x1=\"276\" y1=\"166\" x2=\"347\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#158DFF\" />\n <stop offset=\"1\" stop-color=\"#00D8E9\" />\n </linearGradient>\n <linearGradient id=\"bolt-gradient\" x1=\"270\" y1=\"111\" x2=\"252\" y2=\"365\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#6840FF\" />\n <stop offset=\"0.48\" stop-color=\"#257BFF\" />\n <stop offset=\"1\" stop-color=\"#00CBEF\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#locator-gradient)\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M256 52C345.47 52 418 124.53 418 214C418 267.55 391.98 316.24 354.04 348.02L256 468L157.96 348.02C120.02 316.24 94 267.55 94 214C94 124.53 166.53 52 256 52ZM256 88C186.41 88 130 144.41 130 214C130 258.2 152.76 297.08 187.2 319.57L256 403.8L324.8 319.57C359.24 297.08 382 258.2 382 214C382 144.41 325.59 88 256 88Z\"\n />\n <rect x=\"238\" y=\"20\" width=\"36\" height=\"84\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"62\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"366\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <path\n d=\"M213.5 160L158 211.5L213.5 263L238 236.5L211 211.5L238 186.5L213.5 160Z\"\n fill=\"url(#left-code-gradient)\"\n />\n <path\n d=\"M298.5 160L354 211.5L298.5 263L274 236.5L301 211.5L274 186.5L298.5 160Z\"\n fill=\"url(#right-code-gradient)\"\n />\n <path\n d=\"M283 108L232 212L266 253L238 369L302 237L267 198L283 108Z\"\n fill=\"url(#bolt-gradient)\"\n />\n`;\n","import path from \"node:path\";\n\nimport {\n createAgentJobManager,\n createExternalHandoffService,\n createSpotPatchMiddleware,\n resolveManagedExecutionValidation,\n type AgentJobManager,\n type ExternalHandoffService,\n type SourceRegistry,\n type SpotPatchSession,\n type SpotPatchMiddleware,\n} from \"@spotpatch/dev-server\";\nimport {\n createExternalAgentSupervisor,\n type ExternalAgentSupervisor,\n} from \"@spotpatch/bridge\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\n\ninterface ServerPluginInput {\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n readonly session: SpotPatchSession;\n}\n\nexport function createServerPlugin(input: ServerPluginInput): Plugin {\n let agentManager: AgentJobManager | undefined;\n let externalHandoffService: ExternalHandoffService | undefined;\n let externalAgentSupervisor: ExternalAgentSupervisor | undefined;\n let middleware: SpotPatchMiddleware | undefined;\n let config: ResolvedConfig | undefined;\n\n const closeResources = async (): Promise<void> => {\n input.registry.clear();\n middleware?.dispose();\n middleware = undefined;\n await externalAgentSupervisor?.dispose();\n externalAgentSupervisor = undefined;\n await externalHandoffService?.close();\n externalHandoffService = undefined;\n await agentManager?.close();\n agentManager = undefined;\n };\n\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n\n async configureServer(server) {\n if (config === undefined) {\n throw new Error(\"SpotPatch server initialized before Vite config resolution.\");\n }\n\n const root = path.resolve(config.root);\n const options = input.context.getOptions();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n });\n externalHandoffService = options.externalAgent.enabled\n ? createExternalHandoffService({\n framework: \"vite\",\n root,\n sessionId: input.session.id,\n })\n : undefined;\n\n if (externalHandoffService !== undefined) {\n try {\n await externalHandoffService.start();\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active.\",\n );\n }\n\n if (externalHandoffService.capability().brokerReady) {\n try {\n const validation = await resolveManagedExecutionValidation({\n ai: options.ai,\n appRoot: root,\n });\n externalAgentSupervisor = await createExternalAgentSupervisor({\n bridgeAdapter: \"vite\",\n checks: validation.checks,\n limits: validation.limits,\n root,\n sessionId: input.session.id,\n projectLabel: path.basename(root),\n });\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] Managed Agent control is unavailable; Inbox remains active.\",\n );\n }\n }\n }\n\n middleware = createSpotPatchMiddleware({\n ...(agentManager === undefined ? {} : { agentManager }),\n ...(externalAgentSupervisor === undefined\n ? {}\n : { externalAgentControl: externalAgentSupervisor }),\n ...(externalHandoffService === undefined ? {} : { externalHandoffService }),\n options,\n registry: input.registry,\n root,\n session: input.session,\n logger: config.logger,\n });\n server.middlewares.use(middleware);\n\n server.httpServer?.once(\"close\", () => {\n void closeResources();\n });\n\n config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n\n async closeBundle() {\n await closeResources();\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\n\nimport type { ConfigEnv, Plugin, ResolvedConfig, UserConfig } from \"vite\";\nimport { injectSourceMarkers } from \"@spotpatch/compiler\";\nimport type { SourceRegistry } from \"@spotpatch/dev-server\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { SPOTPATCH_DATA_FLOW_MODULE_ID } from \"../runtime/runtime-injection-plugin.js\";\nimport { createTransformFilter, stripViteQuery } from \"./transform-filter.js\";\n\ninterface TransformPluginInput {\n readonly configure?: (\n config: UserConfig,\n environment: ConfigEnv,\n ) => void | Promise<void>;\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n}\n\ninterface ViteTransformOutput {\n readonly code: string;\n readonly map: string;\n}\n\nfunction createCacheKey(id: string, code: string): string {\n const hash = createHash(\"sha256\").update(code).digest(\"base64url\");\n return `${id}\\0${hash}`;\n}\n\nfunction getDisplayPath(root: string, id: string): string {\n const relative = path.relative(root, stripViteQuery(id));\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function createTransformPlugin(input: TransformPluginInput): Plugin {\n let root = process.cwd();\n let filter = createTransformFilter(root, input.context.getOptions());\n let logger: ResolvedConfig[\"logger\"] | undefined;\n const warnedFiles = new Set<string>();\n const warnedDataFlowDiagnostics = new Set<string>();\n const cache = new Map<string, ViteTransformOutput | null>();\n\n return {\n name: \"spotpatch:transform\",\n apply: \"serve\",\n enforce: \"pre\",\n\n async config(config, environment) {\n await input.configure?.(config, environment);\n },\n\n configResolved(config) {\n root = path.resolve(config.root);\n filter = createTransformFilter(root, input.context.getOptions());\n logger = config.logger;\n },\n\n transform(code, id) {\n if (!filter.shouldTransform(id, code)) {\n return null;\n }\n\n const cleanId = path.resolve(stripViteQuery(id));\n const cacheKey = createCacheKey(cleanId, code);\n\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey) ?? null;\n }\n\n const startedAt = performance.now();\n const options = input.context.getOptions();\n\n try {\n const result = injectSourceMarkers({\n code,\n absolutePath: cleanId,\n root,\n fileId: input.registry.register(cleanId),\n ...(options.dataFlow.enabled\n ? { dataFlow: { helperModule: SPOTPATCH_DATA_FLOW_MODULE_ID } }\n : {}),\n onWarning(warning) {\n logger?.warn(\n `[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`,\n );\n },\n });\n\n if (result?.dataFlow !== undefined) {\n input.registry.registerDataFlowComponents(\n cleanId,\n result.dataFlow.sourceVersion,\n result.dataFlow.anchors.flatMap((anchor) =>\n anchor.kind === \"component\"\n ? [\n {\n componentSourceId: anchor.id,\n line: anchor.line,\n column: anchor.column,\n },\n ]\n : [],\n ),\n );\n for (const diagnostic of result.dataFlow.diagnostics) {\n const warningKey = `${cleanId}:${diagnostic.code}:${String(diagnostic.line)}:${String(diagnostic.column)}`;\n if (warnedDataFlowDiagnostics.has(warningKey)) continue;\n warnedDataFlowDiagnostics.add(warningKey);\n logger?.warn(\n `[spotpatch:data-flow] ${diagnostic.code} at ${getDisplayPath(root, id)}:${String(diagnostic.line)}:${String(diagnostic.column)}; keeping this adapter evidence partial.`,\n );\n }\n }\n\n const output =\n result === undefined\n ? null\n : Object.freeze({\n code: result.code,\n map: result.map.toString(),\n });\n cache.set(cacheKey, output);\n\n if (options.debug) {\n const elapsed = performance.now() - startedAt;\n logger?.info(\n `[spotpatch:transform] ${getDisplayPath(root, id)} ${elapsed.toFixed(2)}ms`,\n );\n }\n\n return output;\n } catch (error: unknown) {\n if (!warnedFiles.has(cleanId)) {\n warnedFiles.add(cleanId);\n const detail =\n options.debug && error instanceof Error ? `: ${error.message}` : \"\";\n logger?.warn(\n `[spotpatch:transform] Failed to transform ${getDisplayPath(root, id)}; using original module${detail}`,\n );\n }\n\n return null;\n }\n },\n };\n}\n","import path from \"node:path\";\n\nimport { createDataFlowSourceFilter, createSourceFilter } from \"@spotpatch/compiler\";\nimport type { ResolvedSpotPatchOptions } from \"@spotpatch/dev-server\";\n\nexport function stripViteQuery(id: string): string {\n const queryIndex = id.indexOf(\"?\");\n return queryIndex === -1 ? id : id.slice(0, queryIndex);\n}\n\nexport { isInsideRoot } from \"@spotpatch/compiler\";\n\nexport interface TransformFilter {\n shouldTransform(id: string, code: string): boolean;\n}\n\nexport function createTransformFilter(\n root: string,\n options: ResolvedSpotPatchOptions,\n): TransformFilter {\n const sourceFilter = createSourceFilter(root, options);\n const dataFlowFilter = createDataFlowSourceFilter(root, {\n include: options.include,\n exclude: options.exclude,\n });\n\n return Object.freeze({\n shouldTransform(id: string, code: string): boolean {\n if (\n id.startsWith(\"\\0\") ||\n id.includes(\"virtual:spotpatch\") ||\n id.includes(\"/packages/vite/\") ||\n id.includes(\"\\\\packages\\\\vite\\\\\")\n ) {\n return false;\n }\n\n const cleanId = stripViteQuery(id);\n const absolutePath = path.resolve(cleanId);\n return (\n sourceFilter.shouldTransform(absolutePath, code) ||\n (options.dataFlow.enabled && dataFlowFilter.shouldTransform(absolutePath, code))\n );\n },\n });\n}\n","export {\n createRuntimeAiConfig,\n DEFAULT_EXCLUDE,\n DEFAULT_OPTIONS,\n resolveOptions,\n} from \"@spotpatch/dev-server\";\nexport type {\n FilterEntry,\n ResolvedSpotPatchOptions,\n SimpleAiOptions,\n SpotPatchAiOptions,\n SpotPatchDataFlowOptions,\n SpotPatchOptions,\n} from \"@spotpatch/dev-server\";\n\nexport type ViteSpotPatchOptions = SharedSpotPatchOptions;\nimport type { SpotPatchOptions as SharedSpotPatchOptions } from \"@spotpatch/dev-server\";\n"],"mappings":"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","names":["import_node_path","import_dev_server","import_vite","path","VITE_VERSION","import_node_path","import_dev_server","path","import_node_path","import_compiler","import_node_path","import_compiler","path","path","path","import_dev_server"]}
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  // package.json
23
23
  var package_default = {
24
24
  name: "@spotpatch/vite",
25
- version: "1.11.0",
25
+ version: "1.12.0",
26
26
  description: "Vite development plugin for SpotPatch.",
27
27
  license: "MIT",
28
28
  repository: {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin.ts","../src/runtime/runtime-injection-plugin.ts","../package.json","../../runtime/src/ui/brand-mark-content.ts","../src/server/server-plugin.ts","../src/transform/transform-plugin.ts","../src/transform/transform-filter.ts","../src/options.ts","../src/index.ts"],"sourcesContent":["import path from \"node:path\";\n\nimport {\n createSession,\n createSourceRegistry,\n resolveCredentialEnvironment,\n resolveEnvironmentAiConfiguration,\n resolveOptions,\n resolveProjectOptions,\n} from \"@spotpatch/dev-server\";\nimport { loadEnv, type ConfigEnv, type Plugin, type UserConfig } from \"vite\";\n\nimport type { ViteSpotPatchOptions } from \"./options.js\";\nimport type { SpotPatchPluginContext } from \"./plugin-context.js\";\nimport { createRuntimeInjectionPlugin } from \"./runtime/runtime-injection-plugin.js\";\nimport { createServerPlugin } from \"./server/server-plugin.js\";\nimport { createTransformPlugin } from \"./transform/transform-plugin.js\";\n\nexport function spotPatch(userOptions: ViteSpotPatchOptions = {}): Plugin[] {\n let options = resolveOptions(userOptions);\n let credentialEnvironment: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n if (!options.enabled) {\n return [];\n }\n\n const registry = createSourceRegistry();\n const session = createSession();\n const context = Object.freeze({\n getCredentialEnvironment: () => credentialEnvironment,\n getOptions: () => options,\n } satisfies SpotPatchPluginContext);\n const configure = async (\n config: UserConfig,\n environment: ConfigEnv,\n ): Promise<void> => {\n const root = path.resolve(process.cwd(), config.root ?? \".\");\n const loadedEnvironment =\n config.envDir === false\n ? process.env\n : loadEnv(environment.mode, path.resolve(root, config.envDir ?? \".\"), \"\");\n const environmentAi =\n userOptions.ai === undefined\n ? resolveEnvironmentAiConfiguration(loadedEnvironment).ai\n : false;\n\n options = await resolveProjectOptions({\n appRoot: root,\n environmentAi,\n options: userOptions,\n });\n\n credentialEnvironment = resolveCredentialEnvironment(options, loadedEnvironment);\n };\n\n return [\n createTransformPlugin({ configure, context, registry }),\n createRuntimeInjectionPlugin({ context, session }),\n createServerPlugin({ context, registry, session }),\n ];\n}\n","import { createRequire } from \"node:module\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { BRAND_MARK_CONTENT } from \"./brand-mark-content.js\";\n\nexport const SPOTPATCH_CLIENT_MODULE_ID = \"virtual:spotpatch/client\";\nexport const RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\\0${SPOTPATCH_CLIENT_MODULE_ID}`;\nexport const SPOTPATCH_REACT_ADAPTER_MODULE_ID = \"virtual:spotpatch/react-adapter\";\nexport const RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_MODULE_ID = \"virtual:spotpatch/data-flow-runtime\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = \"virtual:spotpatch/data-flow-panel\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;\nexport const SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID =\n \"virtual:spotpatch/external-handoff-panel\";\nexport const RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;\n\ninterface RuntimeInjectionPluginInput {\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createDataFlowPreludeModule(\n input: RuntimeInjectionPluginInput,\n bundle: string,\n): string {\n return [\n `const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,\n bundle,\n ].join(\"\\n\");\n}\n\nfunction readRuntimeBundle(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n const bundlePath = path.join(path.dirname(packageEntry), fileName);\n return readFileSync(bundlePath, \"utf8\");\n}\n\nfunction readConsumerViteVersion(root: string): string {\n try {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const manifestPath = resolveFromProject.resolve(\"vite/package.json\");\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as unknown;\n\n if (\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ) {\n return manifest.version;\n }\n } catch {\n // Vite itself remains the safe fallback if package metadata is not exported.\n }\n\n return VITE_VERSION;\n}\n\nfunction createClientModule(\n input: RuntimeInjectionPluginInput,\n clientBundle: string,\n viteVersion: string,\n): string {\n const options = input.context.getOptions();\n const runtimeConfig = {\n ai: createRuntimeAiConfig(options.ai),\n budget: options.budget,\n dataFlow: createRuntimeDataFlowConfig(options.dataFlow),\n debug: options.debug,\n editor: options.editor,\n externalAgent: options.externalAgent,\n framework: \"vite\" as const,\n frameworkVersion: viteVersion,\n locale: options.locale,\n maxTargets: options.maxTargets,\n redact: options.redact,\n sessionId: input.session.id,\n sessionToken: input.session.token,\n shortcut: options.shortcut,\n spotPatchVersion: packageMetadata.version,\n };\n\n return [\n ...(options.dataFlow.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`]\n : []),\n ...(options.externalAgent.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`]\n : []),\n `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,\n `const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,\n clientBundle,\n ].join(\"\\n\");\n}\n\nexport function createRuntimeInjectionPlugin(\n input: RuntimeInjectionPluginInput,\n): Plugin {\n let root = process.cwd();\n let clientBundle = input.clientBundle;\n let dataFlowPreludeBundle = input.dataFlowPreludeBundle;\n let dataFlowPanelBundle = input.dataFlowPanelBundle;\n let externalHandoffPanelBundle = input.externalHandoffPanelBundle;\n let viteVersion = VITE_VERSION;\n\n return {\n name: \"spotpatch:runtime-injection\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(config) {\n root = path.resolve(config.root);\n viteVersion = readConsumerViteVersion(root);\n },\n\n resolveId(id, importer) {\n if (id === SPOTPATCH_CLIENT_MODULE_ID) {\n return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;\n }\n\n if (\n id === \"@spotpatch/react-adapter\" &&\n importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID\n ) {\n return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;\n }\n\n if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;\n }\n\n return null;\n },\n\n load(id) {\n if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {\n clientBundle ??= readRuntimeBundle(root, \"runtime-client.js\");\n return createClientModule(input, clientBundle, viteVersion);\n }\n\n if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {\n return (\n input.reactAdapterBundle ??\n readRuntimeBundle(root, \"runtime-react-adapter.js\")\n );\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPreludeBundle ??= readRuntimeBundle(\n root,\n \"runtime-data-flow-prelude.js\",\n );\n return createDataFlowPreludeModule(input, dataFlowPreludeBundle);\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPanelBundle ??= readRuntimeBundle(root, \"runtime-data-flow-panel.js\");\n return dataFlowPanelBundle;\n }\n\n if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n if (!input.context.getOptions().externalAgent.enabled) return null;\n externalHandoffPanelBundle ??= readRuntimeBundle(\n root,\n \"runtime-external-handoff-panel.js\",\n );\n return externalHandoffPanelBundle;\n }\n\n return null;\n },\n\n transformIndexHtml() {\n const client = {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`,\n },\n injectTo: \"head\" as const,\n };\n if (!input.context.getOptions().dataFlow.enabled) {\n return [client];\n }\n\n return [\n {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_DATA_FLOW_MODULE_ID}`,\n },\n injectTo: \"head-prepend\" as const,\n },\n client,\n ];\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.11.0\",\n \"description\": \"Vite development plugin for SpotPatch.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/huanglvjing/spotpatch.git\",\n \"directory\": \"packages/vite\"\n },\n \"homepage\": \"https://github.com/huanglvjing/spotpatch#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/huanglvjing/spotpatch/issues\"\n },\n \"keywords\": [\n \"spotpatch\",\n \"vite\",\n \"react\",\n \"developer-tools\",\n \"ai-agent\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"spotpatch-vite\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts && tsup --config tsup.runtime-data-flow-prelude.config.ts && tsup --config tsup.runtime-data-flow-panel.config.ts && tsup --config tsup.runtime-external-handoff-panel.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n },\n \"dependencies\": {\n \"@spotpatch/bridge\": \"workspace:^\",\n \"@spotpatch/compiler\": \"workspace:^\",\n \"@spotpatch/dev-server\": \"workspace:^\",\n \"@spotpatch/react-adapter\": \"workspace:^\",\n \"@spotpatch/runtime\": \"workspace:^\",\n \"@spotpatch/shared\": \"workspace:^\",\n \"magic-string\": \"1.1.0\",\n \"oxc-parser\": \"0.143.0\"\n },\n \"peerDependencies\": {\n \"vite\": \"^5.0.0 || ^6.0.0 || ^7.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Canonical SpotPatch mark from docs/assets/spotpatch-logo-mark.svg.\n *\n * The Vite development injector consumes this trusted asset separately from\n * the core browser bundle so the Runtime gzip budget remains enforceable.\n */\nexport const BRAND_MARK_CONTENT = `\n <defs>\n <linearGradient id=\"locator-gradient\" x1=\"76\" y1=\"92\" x2=\"436\" y2=\"374\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#B61CFF\" />\n <stop offset=\"0.38\" stop-color=\"#6D35FF\" />\n <stop offset=\"0.72\" stop-color=\"#168EFF\" />\n <stop offset=\"1\" stop-color=\"#00D9E9\" />\n </linearGradient>\n <linearGradient id=\"left-code-gradient\" x1=\"165\" y1=\"166\" x2=\"236\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#A51EFF\" />\n <stop offset=\"1\" stop-color=\"#653BFF\" />\n </linearGradient>\n <linearGradient id=\"right-code-gradient\" x1=\"276\" y1=\"166\" x2=\"347\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#158DFF\" />\n <stop offset=\"1\" stop-color=\"#00D8E9\" />\n </linearGradient>\n <linearGradient id=\"bolt-gradient\" x1=\"270\" y1=\"111\" x2=\"252\" y2=\"365\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#6840FF\" />\n <stop offset=\"0.48\" stop-color=\"#257BFF\" />\n <stop offset=\"1\" stop-color=\"#00CBEF\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#locator-gradient)\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M256 52C345.47 52 418 124.53 418 214C418 267.55 391.98 316.24 354.04 348.02L256 468L157.96 348.02C120.02 316.24 94 267.55 94 214C94 124.53 166.53 52 256 52ZM256 88C186.41 88 130 144.41 130 214C130 258.2 152.76 297.08 187.2 319.57L256 403.8L324.8 319.57C359.24 297.08 382 258.2 382 214C382 144.41 325.59 88 256 88Z\"\n />\n <rect x=\"238\" y=\"20\" width=\"36\" height=\"84\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"62\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"366\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <path\n d=\"M213.5 160L158 211.5L213.5 263L238 236.5L211 211.5L238 186.5L213.5 160Z\"\n fill=\"url(#left-code-gradient)\"\n />\n <path\n d=\"M298.5 160L354 211.5L298.5 263L274 236.5L301 211.5L274 186.5L298.5 160Z\"\n fill=\"url(#right-code-gradient)\"\n />\n <path\n d=\"M283 108L232 212L266 253L238 369L302 237L267 198L283 108Z\"\n fill=\"url(#bolt-gradient)\"\n />\n`;\n","import path from \"node:path\";\n\nimport {\n createAgentJobManager,\n createExternalHandoffService,\n createSpotPatchMiddleware,\n resolveManagedExecutionValidation,\n type AgentJobManager,\n type ExternalHandoffService,\n type SourceRegistry,\n type SpotPatchSession,\n type SpotPatchMiddleware,\n} from \"@spotpatch/dev-server\";\nimport {\n createExternalAgentSupervisor,\n type ExternalAgentSupervisor,\n} from \"@spotpatch/bridge\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\n\ninterface ServerPluginInput {\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n readonly session: SpotPatchSession;\n}\n\nexport function createServerPlugin(input: ServerPluginInput): Plugin {\n let agentManager: AgentJobManager | undefined;\n let externalHandoffService: ExternalHandoffService | undefined;\n let externalAgentSupervisor: ExternalAgentSupervisor | undefined;\n let middleware: SpotPatchMiddleware | undefined;\n let config: ResolvedConfig | undefined;\n\n const closeResources = async (): Promise<void> => {\n input.registry.clear();\n middleware?.dispose();\n middleware = undefined;\n await externalAgentSupervisor?.dispose();\n externalAgentSupervisor = undefined;\n await externalHandoffService?.close();\n externalHandoffService = undefined;\n await agentManager?.close();\n agentManager = undefined;\n };\n\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n\n async configureServer(server) {\n if (config === undefined) {\n throw new Error(\"SpotPatch server initialized before Vite config resolution.\");\n }\n\n const root = path.resolve(config.root);\n const options = input.context.getOptions();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n });\n externalHandoffService = options.externalAgent.enabled\n ? createExternalHandoffService({\n framework: \"vite\",\n root,\n sessionId: input.session.id,\n })\n : undefined;\n\n if (externalHandoffService !== undefined) {\n try {\n await externalHandoffService.start();\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active.\",\n );\n }\n\n if (externalHandoffService.capability().brokerReady) {\n try {\n const validation = await resolveManagedExecutionValidation({\n ai: options.ai,\n appRoot: root,\n });\n externalAgentSupervisor = await createExternalAgentSupervisor({\n bridgeAdapter: \"vite\",\n checks: validation.checks,\n limits: validation.limits,\n root,\n sessionId: input.session.id,\n projectLabel: path.basename(root),\n });\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] Managed Agent control is unavailable; Inbox remains active.\",\n );\n }\n }\n }\n\n middleware = createSpotPatchMiddleware({\n ...(agentManager === undefined ? {} : { agentManager }),\n ...(externalAgentSupervisor === undefined\n ? {}\n : { externalAgentControl: externalAgentSupervisor }),\n ...(externalHandoffService === undefined ? {} : { externalHandoffService }),\n options,\n registry: input.registry,\n root,\n session: input.session,\n logger: config.logger,\n });\n server.middlewares.use(middleware);\n\n server.httpServer?.once(\"close\", () => {\n void closeResources();\n });\n\n config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n\n async closeBundle() {\n await closeResources();\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\n\nimport type { ConfigEnv, Plugin, ResolvedConfig, UserConfig } from \"vite\";\nimport { injectSourceMarkers } from \"@spotpatch/compiler\";\nimport type { SourceRegistry } from \"@spotpatch/dev-server\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { SPOTPATCH_DATA_FLOW_MODULE_ID } from \"../runtime/runtime-injection-plugin.js\";\nimport { createTransformFilter, stripViteQuery } from \"./transform-filter.js\";\n\ninterface TransformPluginInput {\n readonly configure?: (\n config: UserConfig,\n environment: ConfigEnv,\n ) => void | Promise<void>;\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n}\n\ninterface ViteTransformOutput {\n readonly code: string;\n readonly map: string;\n}\n\nfunction createCacheKey(id: string, code: string): string {\n const hash = createHash(\"sha256\").update(code).digest(\"base64url\");\n return `${id}\\0${hash}`;\n}\n\nfunction getDisplayPath(root: string, id: string): string {\n const relative = path.relative(root, stripViteQuery(id));\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function createTransformPlugin(input: TransformPluginInput): Plugin {\n let root = process.cwd();\n let filter = createTransformFilter(root, input.context.getOptions());\n let logger: ResolvedConfig[\"logger\"] | undefined;\n const warnedFiles = new Set<string>();\n const warnedDataFlowDiagnostics = new Set<string>();\n const cache = new Map<string, ViteTransformOutput | null>();\n\n return {\n name: \"spotpatch:transform\",\n apply: \"serve\",\n enforce: \"pre\",\n\n async config(config, environment) {\n await input.configure?.(config, environment);\n },\n\n configResolved(config) {\n root = path.resolve(config.root);\n filter = createTransformFilter(root, input.context.getOptions());\n logger = config.logger;\n },\n\n transform(code, id) {\n if (!filter.shouldTransform(id, code)) {\n return null;\n }\n\n const cleanId = path.resolve(stripViteQuery(id));\n const cacheKey = createCacheKey(cleanId, code);\n\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey) ?? null;\n }\n\n const startedAt = performance.now();\n const options = input.context.getOptions();\n\n try {\n const result = injectSourceMarkers({\n code,\n absolutePath: cleanId,\n root,\n fileId: input.registry.register(cleanId),\n ...(options.dataFlow.enabled\n ? { dataFlow: { helperModule: SPOTPATCH_DATA_FLOW_MODULE_ID } }\n : {}),\n onWarning(warning) {\n logger?.warn(\n `[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`,\n );\n },\n });\n\n if (result?.dataFlow !== undefined) {\n input.registry.registerDataFlowComponents(\n cleanId,\n result.dataFlow.sourceVersion,\n result.dataFlow.anchors.flatMap((anchor) =>\n anchor.kind === \"component\"\n ? [\n {\n componentSourceId: anchor.id,\n line: anchor.line,\n column: anchor.column,\n },\n ]\n : [],\n ),\n );\n for (const diagnostic of result.dataFlow.diagnostics) {\n const warningKey = `${cleanId}:${diagnostic.code}:${String(diagnostic.line)}:${String(diagnostic.column)}`;\n if (warnedDataFlowDiagnostics.has(warningKey)) continue;\n warnedDataFlowDiagnostics.add(warningKey);\n logger?.warn(\n `[spotpatch:data-flow] ${diagnostic.code} at ${getDisplayPath(root, id)}:${String(diagnostic.line)}:${String(diagnostic.column)}; keeping this adapter evidence partial.`,\n );\n }\n }\n\n const output =\n result === undefined\n ? null\n : Object.freeze({\n code: result.code,\n map: result.map.toString(),\n });\n cache.set(cacheKey, output);\n\n if (options.debug) {\n const elapsed = performance.now() - startedAt;\n logger?.info(\n `[spotpatch:transform] ${getDisplayPath(root, id)} ${elapsed.toFixed(2)}ms`,\n );\n }\n\n return output;\n } catch (error: unknown) {\n if (!warnedFiles.has(cleanId)) {\n warnedFiles.add(cleanId);\n const detail =\n options.debug && error instanceof Error ? `: ${error.message}` : \"\";\n logger?.warn(\n `[spotpatch:transform] Failed to transform ${getDisplayPath(root, id)}; using original module${detail}`,\n );\n }\n\n return null;\n }\n },\n };\n}\n","import path from \"node:path\";\n\nimport { createDataFlowSourceFilter, createSourceFilter } from \"@spotpatch/compiler\";\nimport type { ResolvedSpotPatchOptions } from \"@spotpatch/dev-server\";\n\nexport function stripViteQuery(id: string): string {\n const queryIndex = id.indexOf(\"?\");\n return queryIndex === -1 ? id : id.slice(0, queryIndex);\n}\n\nexport { isInsideRoot } from \"@spotpatch/compiler\";\n\nexport interface TransformFilter {\n shouldTransform(id: string, code: string): boolean;\n}\n\nexport function createTransformFilter(\n root: string,\n options: ResolvedSpotPatchOptions,\n): TransformFilter {\n const sourceFilter = createSourceFilter(root, options);\n const dataFlowFilter = createDataFlowSourceFilter(root, {\n include: options.include,\n exclude: options.exclude,\n });\n\n return Object.freeze({\n shouldTransform(id: string, code: string): boolean {\n if (\n id.startsWith(\"\\0\") ||\n id.includes(\"virtual:spotpatch\") ||\n id.includes(\"/packages/vite/\") ||\n id.includes(\"\\\\packages\\\\vite\\\\\")\n ) {\n return false;\n }\n\n const cleanId = stripViteQuery(id);\n const absolutePath = path.resolve(cleanId);\n return (\n sourceFilter.shouldTransform(absolutePath, code) ||\n (options.dataFlow.enabled && dataFlowFilter.shouldTransform(absolutePath, code))\n );\n },\n });\n}\n","export {\n createRuntimeAiConfig,\n DEFAULT_EXCLUDE,\n DEFAULT_OPTIONS,\n resolveOptions,\n} from \"@spotpatch/dev-server\";\nexport type {\n FilterEntry,\n ResolvedSpotPatchOptions,\n SimpleAiOptions,\n SpotPatchAiOptions,\n SpotPatchDataFlowOptions,\n SpotPatchOptions,\n} from \"@spotpatch/dev-server\";\n\nexport type ViteSpotPatchOptions = SharedSpotPatchOptions;\nimport type { SpotPatchOptions as SharedSpotPatchOptions } from \"@spotpatch/dev-server\";\n","export { spotPatch } from \"./plugin.js\";\nexport {\n DEFAULT_OPTIONS,\n resolveOptions,\n type ResolvedSpotPatchOptions,\n type SimpleAiOptions,\n type SpotPatchAiOptions,\n type SpotPatchDataFlowOptions,\n type SpotPatchOptions,\n type ViteSpotPatchOptions,\n} from \"./options.js\";\nexport {\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCheckDefinition,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type ContextBudget,\n type OpenAICompatibleProviderOptions,\n type SpotPatchEditorPreference,\n} from \"@spotpatch/shared\";\n"],"mappings":";AAAA,OAAOA,WAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAA6D;;;ACVtE,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,OAEK;;;ACRP;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACf;AAAA,EACA,UAAY;AAAA,EACZ,MAAQ;AAAA,IACN,KAAO;AAAA,EACT;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAQ;AAAA,EACR,aAAe;AAAA,EACf,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,OAAS;AAAA,EACT,KAAO;AAAA,IACL,kBAAkB;AAAA,EACpB;AAAA,EACA,SAAW;AAAA,IACT,KAAK;AAAA,MACH,QAAU;AAAA,QACR,OAAS;AAAA,QACT,SAAW;AAAA,MACb;AAAA,MACA,SAAW;AAAA,QACT,OAAS;AAAA,QACT,SAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,OAAS;AAAA,IACT,WAAa;AAAA,EACf;AAAA,EACA,cAAgB;AAAA,IACd,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,4BAA4B;AAAA,IAC5B,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB;AAAA,EACA,kBAAoB;AAAA,IAClB,MAAQ;AAAA,EACV;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,IACV,UAAY;AAAA,EACd;AACF;;;AD3DA,SAAS,WAAW,oBAAiC;;;AEJ9C,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AFS3B,IAAM,6BAA6B;AACnC,IAAM,sCAAsC,KAAK,0BAA0B;AAC3E,IAAM,oCAAoC;AAC1C,IAAM,6CAA6C,KAAK,iCAAiC;AACzF,IAAM,gCAAgC;AACtC,IAAM,yCAAyC,KAAK,6BAA6B;AACjF,IAAM,sCAAsC;AAC5C,IAAM,+CAA+C,KAAK,mCAAmC;AAC7F,IAAM,6CACX;AACK,IAAM,sDAAsD,KAAK,0CAA0C;AAYlH,SAAS,4BACP,OACA,QACQ;AACR,SAAO;AAAA,IACL,0CAA0C,KAAK,UAAU,MAAM,QAAQ,WAAW,EAAE,QAAQ,CAAC;AAAA,IAC7F;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,kBAAkB,MAAc,UAA0B;AACjE,QAAM,qBAAqB,cAAc,KAAK,KAAK,MAAM,cAAc,CAAC;AACxE,QAAM,eAAe,mBAAmB,QAAQ,iBAAiB;AACjE,QAAM,aAAa,KAAK,KAAK,KAAK,QAAQ,YAAY,GAAG,QAAQ;AACjE,SAAO,aAAa,YAAY,MAAM;AACxC;AAEA,SAAS,wBAAwB,MAAsB;AACrD,MAAI;AACF,UAAM,qBAAqB,cAAc,KAAK,KAAK,MAAM,cAAc,CAAC;AACxE,UAAM,eAAe,mBAAmB,QAAQ,mBAAmB;AACnE,UAAM,WAAW,KAAK,MAAM,aAAa,cAAc,MAAM,CAAC;AAE9D,QACE,OAAO,aAAa,YACpB,aAAa,QACb,aAAa,YACb,OAAO,SAAS,YAAY,UAC5B;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAEA,SAAS,mBACP,OACA,cACA,aACQ;AACR,QAAM,UAAU,MAAM,QAAQ,WAAW;AACzC,QAAM,gBAAgB;AAAA,IACpB,IAAI,sBAAsB,QAAQ,EAAE;AAAA,IACpC,QAAQ,QAAQ;AAAA,IAChB,UAAU,4BAA4B,QAAQ,QAAQ;AAAA,IACtD,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,eAAe,QAAQ;AAAA,IACvB,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ,QAAQ;AAAA,IAChB,YAAY,QAAQ;AAAA,IACpB,QAAQ,QAAQ;AAAA,IAChB,WAAW,MAAM,QAAQ;AAAA,IACzB,cAAc,MAAM,QAAQ;AAAA,IAC5B,UAAU,QAAQ;AAAA,IAClB,kBAAkB,gBAAgB;AAAA,EACpC;AAEA,SAAO;AAAA,IACL,GAAI,QAAQ,SAAS,UACjB,CAAC,UAAU,KAAK,UAAU,mCAAmC,CAAC,GAAG,IACjE,CAAC;AAAA,IACL,GAAI,QAAQ,cAAc,UACtB,CAAC,UAAU,KAAK,UAAU,0CAA0C,CAAC,GAAG,IACxE,CAAC;AAAA,IACL,4CAA4C,KAAK,UAAU,kBAAkB,CAAC;AAAA,IAC9E,wCAAwC,KAAK,UAAU,aAAa,CAAC;AAAA,IACrE;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,6BACd,OACQ;AACR,MAAI,OAAO,QAAQ,IAAI;AACvB,MAAI,eAAe,MAAM;AACzB,MAAI,wBAAwB,MAAM;AAClC,MAAI,sBAAsB,MAAM;AAChC,MAAI,6BAA6B,MAAM;AACvC,MAAI,cAAc;AAElB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,eAAe,QAAQ;AACrB,aAAO,KAAK,QAAQ,OAAO,IAAI;AAC/B,oBAAc,wBAAwB,IAAI;AAAA,IAC5C;AAAA,IAEA,UAAU,IAAI,UAAU;AACtB,UAAI,OAAO,4BAA4B;AACrC,eAAO;AAAA,MACT;AAEA,UACE,OAAO,8BACP,aAAa,qCACb;AACA,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,+BAA+B;AACxC,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,qCAAqC;AAC9C,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,4CAA4C;AACrD,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,IAAI;AACP,UAAI,OAAO,qCAAqC;AAC9C,yBAAiB,kBAAkB,MAAM,mBAAmB;AAC5D,eAAO,mBAAmB,OAAO,cAAc,WAAW;AAAA,MAC5D;AAEA,UAAI,OAAO,4CAA4C;AACrD,eACE,MAAM,sBACN,kBAAkB,MAAM,0BAA0B;AAAA,MAEtD;AAEA,UAAI,OAAO,wCAAwC;AACjD,YAAI,CAAC,MAAM,QAAQ,WAAW,EAAE,SAAS,QAAS,QAAO;AACzD,kCAA0B;AAAA,UACxB;AAAA,UACA;AAAA,QACF;AACA,eAAO,4BAA4B,OAAO,qBAAqB;AAAA,MACjE;AAEA,UAAI,OAAO,8CAA8C;AACvD,YAAI,CAAC,MAAM,QAAQ,WAAW,EAAE,SAAS,QAAS,QAAO;AACzD,gCAAwB,kBAAkB,MAAM,4BAA4B;AAC5E,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,qDAAqD;AAC9D,YAAI,CAAC,MAAM,QAAQ,WAAW,EAAE,cAAc,QAAS,QAAO;AAC9D,uCAA+B;AAAA,UAC7B;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB;AACnB,YAAM,SAAS;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK,QAAQ,0BAA0B;AAAA,QACzC;AAAA,QACA,UAAU;AAAA,MACZ;AACA,UAAI,CAAC,MAAM,QAAQ,WAAW,EAAE,SAAS,SAAS;AAChD,eAAO,CAAC,MAAM;AAAA,MAChB;AAEA,aAAO;AAAA,QACL;AAAA,UACE,KAAK;AAAA,UACL,OAAO;AAAA,YACL,MAAM;AAAA,YACN,KAAK,QAAQ,6BAA6B;AAAA,UAC5C;AAAA,UACA,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AGjOA,OAAOC,WAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AACP;AAAA,EACE;AAAA,OAEK;AAWA,SAAS,mBAAmB,OAAkC;AACnE,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,iBAAiB,YAA2B;AAChD,UAAM,SAAS,MAAM;AACrB,gBAAY,QAAQ;AACpB,iBAAa;AACb,UAAM,yBAAyB,QAAQ;AACvC,8BAA0B;AAC1B,UAAM,wBAAwB,MAAM;AACpC,6BAAyB;AACzB,UAAM,cAAc,MAAM;AAC1B,mBAAe;AAAA,EACjB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,eAAe,gBAAgB;AAC7B,eAAS;AAAA,IACX;AAAA,IAEA,MAAM,gBAAgB,QAAQ;AAC5B,UAAI,WAAW,QAAW;AACxB,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AAEA,YAAM,OAAOA,MAAK,QAAQ,OAAO,IAAI;AACrC,YAAM,UAAU,MAAM,QAAQ,WAAW;AACzC,qBACE,QAAQ,OAAO,QACX,SACA,sBAAsB;AAAA,QACpB,IAAI,QAAQ;AAAA,QACZ,aAAa,MAAM,QAAQ,yBAAyB;AAAA,QACpD;AAAA,MACF,CAAC;AACP,+BAAyB,QAAQ,cAAc,UAC3C,6BAA6B;AAAA,QAC3B,WAAW;AAAA,QACX;AAAA,QACA,WAAW,MAAM,QAAQ;AAAA,MAC3B,CAAC,IACD;AAEJ,UAAI,2BAA2B,QAAW;AACxC,YAAI;AACF,gBAAM,uBAAuB,MAAM;AAAA,QACrC,QAAQ;AACN,iBAAO,OAAO;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAEA,YAAI,uBAAuB,WAAW,EAAE,aAAa;AACnD,cAAI;AACF,kBAAM,aAAa,MAAM,kCAAkC;AAAA,cACzD,IAAI,QAAQ;AAAA,cACZ,SAAS;AAAA,YACX,CAAC;AACD,sCAA0B,MAAM,8BAA8B;AAAA,cAC5D,eAAe;AAAA,cACf,QAAQ,WAAW;AAAA,cACnB,QAAQ,WAAW;AAAA,cACnB;AAAA,cACA,WAAW,MAAM,QAAQ;AAAA,cACzB,cAAcA,MAAK,SAAS,IAAI;AAAA,YAClC,CAAC;AAAA,UACH,QAAQ;AACN,mBAAO,OAAO;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,mBAAa,0BAA0B;AAAA,QACrC,GAAI,iBAAiB,SAAY,CAAC,IAAI,EAAE,aAAa;AAAA,QACrD,GAAI,4BAA4B,SAC5B,CAAC,IACD,EAAE,sBAAsB,wBAAwB;AAAA,QACpD,GAAI,2BAA2B,SAAY,CAAC,IAAI,EAAE,uBAAuB;AAAA,QACzE;AAAA,QACA,UAAU,MAAM;AAAA,QAChB;AAAA,QACA,SAAS,MAAM;AAAA,QACf,QAAQ,OAAO;AAAA,MACjB,CAAC;AACD,aAAO,YAAY,IAAI,UAAU;AAEjC,aAAO,YAAY,KAAK,SAAS,MAAM;AACrC,aAAK,eAAe;AAAA,MACtB,CAAC;AAED,aAAO,OAAO;AAAA,QACZ,8CAA8C,QAAQ,QAAQ;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,MAAM,cAAc;AAClB,YAAM,eAAe;AAAA,IACvB;AAAA,EACF;AACF;;;ACxIA,SAAS,kBAAkB;AAC3B,OAAOC,WAAU;AAGjB,SAAS,2BAA2B;;;ACJpC,OAAOC,WAAU;AAEjB,SAAS,4BAA4B,0BAA0B;AAQ/D,SAAS,oBAAoB;AALtB,SAAS,eAAe,IAAoB;AACjD,QAAM,aAAa,GAAG,QAAQ,GAAG;AACjC,SAAO,eAAe,KAAK,KAAK,GAAG,MAAM,GAAG,UAAU;AACxD;AAQO,SAAS,sBACd,MACA,SACiB;AACjB,QAAM,eAAe,mBAAmB,MAAM,OAAO;AACrD,QAAM,iBAAiB,2BAA2B,MAAM;AAAA,IACtD,SAAS,QAAQ;AAAA,IACjB,SAAS,QAAQ;AAAA,EACnB,CAAC;AAED,SAAO,OAAO,OAAO;AAAA,IACnB,gBAAgB,IAAY,MAAuB;AACjD,UACE,GAAG,WAAW,IAAI,KAClB,GAAG,SAAS,mBAAmB,KAC/B,GAAG,SAAS,iBAAiB,KAC7B,GAAG,SAAS,oBAAoB,GAChC;AACA,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,eAAe,EAAE;AACjC,YAAM,eAAeA,MAAK,QAAQ,OAAO;AACzC,aACE,aAAa,gBAAgB,cAAc,IAAI,KAC9C,QAAQ,SAAS,WAAW,eAAe,gBAAgB,cAAc,IAAI;AAAA,IAElF;AAAA,EACF,CAAC;AACH;;;ADpBA,SAAS,eAAe,IAAY,MAAsB;AACxD,QAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,WAAW;AACjE,SAAO,GAAG,EAAE,KAAK,IAAI;AACvB;AAEA,SAAS,eAAe,MAAc,IAAoB;AACxD,QAAM,WAAWC,MAAK,SAAS,MAAM,eAAe,EAAE,CAAC;AACvD,SAAO,SAAS,MAAMA,MAAK,GAAG,EAAE,KAAK,GAAG;AAC1C;AAEO,SAAS,sBAAsB,OAAqC;AACzE,MAAI,OAAO,QAAQ,IAAI;AACvB,MAAI,SAAS,sBAAsB,MAAM,MAAM,QAAQ,WAAW,CAAC;AACnE,MAAI;AACJ,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,4BAA4B,oBAAI,IAAY;AAClD,QAAM,QAAQ,oBAAI,IAAwC;AAE1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,MAAM,OAAO,QAAQ,aAAa;AAChC,YAAM,MAAM,YAAY,QAAQ,WAAW;AAAA,IAC7C;AAAA,IAEA,eAAe,QAAQ;AACrB,aAAOA,MAAK,QAAQ,OAAO,IAAI;AAC/B,eAAS,sBAAsB,MAAM,MAAM,QAAQ,WAAW,CAAC;AAC/D,eAAS,OAAO;AAAA,IAClB;AAAA,IAEA,UAAU,MAAM,IAAI;AAClB,UAAI,CAAC,OAAO,gBAAgB,IAAI,IAAI,GAAG;AACrC,eAAO;AAAA,MACT;AAEA,YAAM,UAAUA,MAAK,QAAQ,eAAe,EAAE,CAAC;AAC/C,YAAM,WAAW,eAAe,SAAS,IAAI;AAE7C,UAAI,MAAM,IAAI,QAAQ,GAAG;AACvB,eAAO,MAAM,IAAI,QAAQ,KAAK;AAAA,MAChC;AAEA,YAAM,YAAY,YAAY,IAAI;AAClC,YAAM,UAAU,MAAM,QAAQ,WAAW;AAEzC,UAAI;AACF,cAAM,SAAS,oBAAoB;AAAA,UACjC;AAAA,UACA,cAAc;AAAA,UACd;AAAA,UACA,QAAQ,MAAM,SAAS,SAAS,OAAO;AAAA,UACvC,GAAI,QAAQ,SAAS,UACjB,EAAE,UAAU,EAAE,cAAc,8BAA8B,EAAE,IAC5D,CAAC;AAAA,UACL,UAAU,SAAS;AACjB,oBAAQ;AAAA,cACN,mDAAmD,eAAe,MAAM,EAAE,CAAC,IAAI,OAAO,QAAQ,IAAI,CAAC,IAAI,OAAO,QAAQ,MAAM,CAAC;AAAA,YAC/H;AAAA,UACF;AAAA,QACF,CAAC;AAED,YAAI,QAAQ,aAAa,QAAW;AAClC,gBAAM,SAAS;AAAA,YACb;AAAA,YACA,OAAO,SAAS;AAAA,YAChB,OAAO,SAAS,QAAQ;AAAA,cAAQ,CAAC,WAC/B,OAAO,SAAS,cACZ;AAAA,gBACE;AAAA,kBACE,mBAAmB,OAAO;AAAA,kBAC1B,MAAM,OAAO;AAAA,kBACb,QAAQ,OAAO;AAAA,gBACjB;AAAA,cACF,IACA,CAAC;AAAA,YACP;AAAA,UACF;AACA,qBAAW,cAAc,OAAO,SAAS,aAAa;AACpD,kBAAM,aAAa,GAAG,OAAO,IAAI,WAAW,IAAI,IAAI,OAAO,WAAW,IAAI,CAAC,IAAI,OAAO,WAAW,MAAM,CAAC;AACxG,gBAAI,0BAA0B,IAAI,UAAU,EAAG;AAC/C,sCAA0B,IAAI,UAAU;AACxC,oBAAQ;AAAA,cACN,yBAAyB,WAAW,IAAI,OAAO,eAAe,MAAM,EAAE,CAAC,IAAI,OAAO,WAAW,IAAI,CAAC,IAAI,OAAO,WAAW,MAAM,CAAC;AAAA,YACjI;AAAA,UACF;AAAA,QACF;AAEA,cAAM,SACJ,WAAW,SACP,OACA,OAAO,OAAO;AAAA,UACZ,MAAM,OAAO;AAAA,UACb,KAAK,OAAO,IAAI,SAAS;AAAA,QAC3B,CAAC;AACP,cAAM,IAAI,UAAU,MAAM;AAE1B,YAAI,QAAQ,OAAO;AACjB,gBAAM,UAAU,YAAY,IAAI,IAAI;AACpC,kBAAQ;AAAA,YACN,yBAAyB,eAAe,MAAM,EAAE,CAAC,IAAI,QAAQ,QAAQ,CAAC,CAAC;AAAA,UACzE;AAAA,QACF;AAEA,eAAO;AAAA,MACT,SAAS,OAAgB;AACvB,YAAI,CAAC,YAAY,IAAI,OAAO,GAAG;AAC7B,sBAAY,IAAI,OAAO;AACvB,gBAAM,SACJ,QAAQ,SAAS,iBAAiB,QAAQ,KAAK,MAAM,OAAO,KAAK;AACnE,kBAAQ;AAAA,YACN,6CAA6C,eAAe,MAAM,EAAE,CAAC,0BAA0B,MAAM;AAAA,UACvG;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;ALhIO,SAAS,UAAU,cAAoC,CAAC,GAAa;AAC1E,MAAI,UAAU,eAAe,WAAW;AACxC,MAAI,wBACF,OAAO,OAAO,CAAC,CAAC;AAElB,MAAI,CAAC,QAAQ,SAAS;AACpB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAW,qBAAqB;AACtC,QAAM,UAAU,cAAc;AAC9B,QAAM,UAAU,OAAO,OAAO;AAAA,IAC5B,0BAA0B,MAAM;AAAA,IAChC,YAAY,MAAM;AAAA,EACpB,CAAkC;AAClC,QAAM,YAAY,OAChB,QACA,gBACkB;AAClB,UAAM,OAAOC,MAAK,QAAQ,QAAQ,IAAI,GAAG,OAAO,QAAQ,GAAG;AAC3D,UAAM,oBACJ,OAAO,WAAW,QACd,QAAQ,MACR,QAAQ,YAAY,MAAMA,MAAK,QAAQ,MAAM,OAAO,UAAU,GAAG,GAAG,EAAE;AAC5E,UAAM,gBACJ,YAAY,OAAO,SACf,kCAAkC,iBAAiB,EAAE,KACrD;AAEN,cAAU,MAAM,sBAAsB;AAAA,MACpC,SAAS;AAAA,MACT;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,4BAAwB,6BAA6B,SAAS,iBAAiB;AAAA,EACjF;AAEA,SAAO;AAAA,IACL,sBAAsB,EAAE,WAAW,SAAS,SAAS,CAAC;AAAA,IACtD,6BAA6B,EAAE,SAAS,QAAQ,CAAC;AAAA,IACjD,mBAAmB,EAAE,SAAS,UAAU,QAAQ,CAAC;AAAA,EACnD;AACF;;;AO7DA;AAAA,EACE,yBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,OACK;;;ACMP;AAAA,EACE;AAAA,OAYK;","names":["path","path","path","path","path","path","createRuntimeAiConfig","resolveOptions"]}
1
+ {"version":3,"sources":["../src/plugin.ts","../src/runtime/runtime-injection-plugin.ts","../package.json","../../runtime/src/ui/brand-mark-content.ts","../src/server/server-plugin.ts","../src/transform/transform-plugin.ts","../src/transform/transform-filter.ts","../src/options.ts","../src/index.ts"],"sourcesContent":["import path from \"node:path\";\n\nimport {\n createSession,\n createSourceRegistry,\n resolveCredentialEnvironment,\n resolveEnvironmentAiConfiguration,\n resolveOptions,\n resolveProjectOptions,\n} from \"@spotpatch/dev-server\";\nimport { loadEnv, type ConfigEnv, type Plugin, type UserConfig } from \"vite\";\n\nimport type { ViteSpotPatchOptions } from \"./options.js\";\nimport type { SpotPatchPluginContext } from \"./plugin-context.js\";\nimport { createRuntimeInjectionPlugin } from \"./runtime/runtime-injection-plugin.js\";\nimport { createServerPlugin } from \"./server/server-plugin.js\";\nimport { createTransformPlugin } from \"./transform/transform-plugin.js\";\n\nexport function spotPatch(userOptions: ViteSpotPatchOptions = {}): Plugin[] {\n let options = resolveOptions(userOptions);\n let credentialEnvironment: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n if (!options.enabled) {\n return [];\n }\n\n const registry = createSourceRegistry();\n const session = createSession();\n const context = Object.freeze({\n getCredentialEnvironment: () => credentialEnvironment,\n getOptions: () => options,\n } satisfies SpotPatchPluginContext);\n const configure = async (\n config: UserConfig,\n environment: ConfigEnv,\n ): Promise<void> => {\n const root = path.resolve(process.cwd(), config.root ?? \".\");\n const loadedEnvironment =\n config.envDir === false\n ? process.env\n : loadEnv(environment.mode, path.resolve(root, config.envDir ?? \".\"), \"\");\n const environmentAi =\n userOptions.ai === undefined\n ? resolveEnvironmentAiConfiguration(loadedEnvironment).ai\n : false;\n\n options = await resolveProjectOptions({\n appRoot: root,\n environmentAi,\n options: userOptions,\n });\n\n credentialEnvironment = resolveCredentialEnvironment(options, loadedEnvironment);\n };\n\n return [\n createTransformPlugin({ configure, context, registry }),\n createRuntimeInjectionPlugin({ context, session }),\n createServerPlugin({ context, registry, session }),\n ];\n}\n","import { createRequire } from \"node:module\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { BRAND_MARK_CONTENT } from \"./brand-mark-content.js\";\n\nexport const SPOTPATCH_CLIENT_MODULE_ID = \"virtual:spotpatch/client\";\nexport const RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\\0${SPOTPATCH_CLIENT_MODULE_ID}`;\nexport const SPOTPATCH_REACT_ADAPTER_MODULE_ID = \"virtual:spotpatch/react-adapter\";\nexport const RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_MODULE_ID = \"virtual:spotpatch/data-flow-runtime\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = \"virtual:spotpatch/data-flow-panel\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;\nexport const SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID =\n \"virtual:spotpatch/external-handoff-panel\";\nexport const RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;\n\ninterface RuntimeInjectionPluginInput {\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createDataFlowPreludeModule(\n input: RuntimeInjectionPluginInput,\n bundle: string,\n): string {\n return [\n `const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,\n bundle,\n ].join(\"\\n\");\n}\n\nfunction readRuntimeBundle(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n const bundlePath = path.join(path.dirname(packageEntry), fileName);\n return readFileSync(bundlePath, \"utf8\");\n}\n\nfunction readConsumerViteVersion(root: string): string {\n try {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const manifestPath = resolveFromProject.resolve(\"vite/package.json\");\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as unknown;\n\n if (\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ) {\n return manifest.version;\n }\n } catch {\n // Vite itself remains the safe fallback if package metadata is not exported.\n }\n\n return VITE_VERSION;\n}\n\nfunction createClientModule(\n input: RuntimeInjectionPluginInput,\n clientBundle: string,\n viteVersion: string,\n): string {\n const options = input.context.getOptions();\n const runtimeConfig = {\n ai: createRuntimeAiConfig(options.ai),\n budget: options.budget,\n dataFlow: createRuntimeDataFlowConfig(options.dataFlow),\n debug: options.debug,\n editor: options.editor,\n externalAgent: options.externalAgent,\n framework: \"vite\" as const,\n frameworkVersion: viteVersion,\n locale: options.locale,\n maxTargets: options.maxTargets,\n redact: options.redact,\n sessionId: input.session.id,\n sessionToken: input.session.token,\n shortcut: options.shortcut,\n spotPatchVersion: packageMetadata.version,\n };\n\n return [\n ...(options.dataFlow.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`]\n : []),\n ...(options.externalAgent.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`]\n : []),\n `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,\n `const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,\n clientBundle,\n ].join(\"\\n\");\n}\n\nexport function createRuntimeInjectionPlugin(\n input: RuntimeInjectionPluginInput,\n): Plugin {\n let root = process.cwd();\n let clientBundle = input.clientBundle;\n let dataFlowPreludeBundle = input.dataFlowPreludeBundle;\n let dataFlowPanelBundle = input.dataFlowPanelBundle;\n let externalHandoffPanelBundle = input.externalHandoffPanelBundle;\n let viteVersion = VITE_VERSION;\n\n return {\n name: \"spotpatch:runtime-injection\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(config) {\n root = path.resolve(config.root);\n viteVersion = readConsumerViteVersion(root);\n },\n\n resolveId(id, importer) {\n if (id === SPOTPATCH_CLIENT_MODULE_ID) {\n return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;\n }\n\n if (\n id === \"@spotpatch/react-adapter\" &&\n importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID\n ) {\n return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;\n }\n\n if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;\n }\n\n return null;\n },\n\n load(id) {\n if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {\n clientBundle ??= readRuntimeBundle(root, \"runtime-client.js\");\n return createClientModule(input, clientBundle, viteVersion);\n }\n\n if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {\n return (\n input.reactAdapterBundle ??\n readRuntimeBundle(root, \"runtime-react-adapter.js\")\n );\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPreludeBundle ??= readRuntimeBundle(\n root,\n \"runtime-data-flow-prelude.js\",\n );\n return createDataFlowPreludeModule(input, dataFlowPreludeBundle);\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPanelBundle ??= readRuntimeBundle(root, \"runtime-data-flow-panel.js\");\n return dataFlowPanelBundle;\n }\n\n if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n if (!input.context.getOptions().externalAgent.enabled) return null;\n externalHandoffPanelBundle ??= readRuntimeBundle(\n root,\n \"runtime-external-handoff-panel.js\",\n );\n return externalHandoffPanelBundle;\n }\n\n return null;\n },\n\n transformIndexHtml() {\n const client = {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`,\n },\n injectTo: \"head\" as const,\n };\n if (!input.context.getOptions().dataFlow.enabled) {\n return [client];\n }\n\n return [\n {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_DATA_FLOW_MODULE_ID}`,\n },\n injectTo: \"head-prepend\" as const,\n },\n client,\n ];\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.12.0\",\n \"description\": \"Vite development plugin for SpotPatch.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/huanglvjing/spotpatch.git\",\n \"directory\": \"packages/vite\"\n },\n \"homepage\": \"https://github.com/huanglvjing/spotpatch#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/huanglvjing/spotpatch/issues\"\n },\n \"keywords\": [\n \"spotpatch\",\n \"vite\",\n \"react\",\n \"developer-tools\",\n \"ai-agent\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"spotpatch-vite\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts && tsup --config tsup.runtime-data-flow-prelude.config.ts && tsup --config tsup.runtime-data-flow-panel.config.ts && tsup --config tsup.runtime-external-handoff-panel.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n },\n \"dependencies\": {\n \"@spotpatch/bridge\": \"workspace:^\",\n \"@spotpatch/compiler\": \"workspace:^\",\n \"@spotpatch/dev-server\": \"workspace:^\",\n \"@spotpatch/react-adapter\": \"workspace:^\",\n \"@spotpatch/runtime\": \"workspace:^\",\n \"@spotpatch/shared\": \"workspace:^\",\n \"magic-string\": \"1.1.0\",\n \"oxc-parser\": \"0.143.0\"\n },\n \"peerDependencies\": {\n \"vite\": \"^5.0.0 || ^6.0.0 || ^7.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Canonical SpotPatch mark from docs/assets/spotpatch-logo-mark.svg.\n *\n * The Vite development injector consumes this trusted asset separately from\n * the core browser bundle so the Runtime gzip budget remains enforceable.\n */\nexport const BRAND_MARK_CONTENT = `\n <defs>\n <linearGradient id=\"locator-gradient\" x1=\"76\" y1=\"92\" x2=\"436\" y2=\"374\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#B61CFF\" />\n <stop offset=\"0.38\" stop-color=\"#6D35FF\" />\n <stop offset=\"0.72\" stop-color=\"#168EFF\" />\n <stop offset=\"1\" stop-color=\"#00D9E9\" />\n </linearGradient>\n <linearGradient id=\"left-code-gradient\" x1=\"165\" y1=\"166\" x2=\"236\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#A51EFF\" />\n <stop offset=\"1\" stop-color=\"#653BFF\" />\n </linearGradient>\n <linearGradient id=\"right-code-gradient\" x1=\"276\" y1=\"166\" x2=\"347\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#158DFF\" />\n <stop offset=\"1\" stop-color=\"#00D8E9\" />\n </linearGradient>\n <linearGradient id=\"bolt-gradient\" x1=\"270\" y1=\"111\" x2=\"252\" y2=\"365\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#6840FF\" />\n <stop offset=\"0.48\" stop-color=\"#257BFF\" />\n <stop offset=\"1\" stop-color=\"#00CBEF\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#locator-gradient)\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M256 52C345.47 52 418 124.53 418 214C418 267.55 391.98 316.24 354.04 348.02L256 468L157.96 348.02C120.02 316.24 94 267.55 94 214C94 124.53 166.53 52 256 52ZM256 88C186.41 88 130 144.41 130 214C130 258.2 152.76 297.08 187.2 319.57L256 403.8L324.8 319.57C359.24 297.08 382 258.2 382 214C382 144.41 325.59 88 256 88Z\"\n />\n <rect x=\"238\" y=\"20\" width=\"36\" height=\"84\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"62\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"366\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <path\n d=\"M213.5 160L158 211.5L213.5 263L238 236.5L211 211.5L238 186.5L213.5 160Z\"\n fill=\"url(#left-code-gradient)\"\n />\n <path\n d=\"M298.5 160L354 211.5L298.5 263L274 236.5L301 211.5L274 186.5L298.5 160Z\"\n fill=\"url(#right-code-gradient)\"\n />\n <path\n d=\"M283 108L232 212L266 253L238 369L302 237L267 198L283 108Z\"\n fill=\"url(#bolt-gradient)\"\n />\n`;\n","import path from \"node:path\";\n\nimport {\n createAgentJobManager,\n createExternalHandoffService,\n createSpotPatchMiddleware,\n resolveManagedExecutionValidation,\n type AgentJobManager,\n type ExternalHandoffService,\n type SourceRegistry,\n type SpotPatchSession,\n type SpotPatchMiddleware,\n} from \"@spotpatch/dev-server\";\nimport {\n createExternalAgentSupervisor,\n type ExternalAgentSupervisor,\n} from \"@spotpatch/bridge\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\n\ninterface ServerPluginInput {\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n readonly session: SpotPatchSession;\n}\n\nexport function createServerPlugin(input: ServerPluginInput): Plugin {\n let agentManager: AgentJobManager | undefined;\n let externalHandoffService: ExternalHandoffService | undefined;\n let externalAgentSupervisor: ExternalAgentSupervisor | undefined;\n let middleware: SpotPatchMiddleware | undefined;\n let config: ResolvedConfig | undefined;\n\n const closeResources = async (): Promise<void> => {\n input.registry.clear();\n middleware?.dispose();\n middleware = undefined;\n await externalAgentSupervisor?.dispose();\n externalAgentSupervisor = undefined;\n await externalHandoffService?.close();\n externalHandoffService = undefined;\n await agentManager?.close();\n agentManager = undefined;\n };\n\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n\n async configureServer(server) {\n if (config === undefined) {\n throw new Error(\"SpotPatch server initialized before Vite config resolution.\");\n }\n\n const root = path.resolve(config.root);\n const options = input.context.getOptions();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n });\n externalHandoffService = options.externalAgent.enabled\n ? createExternalHandoffService({\n framework: \"vite\",\n root,\n sessionId: input.session.id,\n })\n : undefined;\n\n if (externalHandoffService !== undefined) {\n try {\n await externalHandoffService.start();\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active.\",\n );\n }\n\n if (externalHandoffService.capability().brokerReady) {\n try {\n const validation = await resolveManagedExecutionValidation({\n ai: options.ai,\n appRoot: root,\n });\n externalAgentSupervisor = await createExternalAgentSupervisor({\n bridgeAdapter: \"vite\",\n checks: validation.checks,\n limits: validation.limits,\n root,\n sessionId: input.session.id,\n projectLabel: path.basename(root),\n });\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] Managed Agent control is unavailable; Inbox remains active.\",\n );\n }\n }\n }\n\n middleware = createSpotPatchMiddleware({\n ...(agentManager === undefined ? {} : { agentManager }),\n ...(externalAgentSupervisor === undefined\n ? {}\n : { externalAgentControl: externalAgentSupervisor }),\n ...(externalHandoffService === undefined ? {} : { externalHandoffService }),\n options,\n registry: input.registry,\n root,\n session: input.session,\n logger: config.logger,\n });\n server.middlewares.use(middleware);\n\n server.httpServer?.once(\"close\", () => {\n void closeResources();\n });\n\n config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n\n async closeBundle() {\n await closeResources();\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\n\nimport type { ConfigEnv, Plugin, ResolvedConfig, UserConfig } from \"vite\";\nimport { injectSourceMarkers } from \"@spotpatch/compiler\";\nimport type { SourceRegistry } from \"@spotpatch/dev-server\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { SPOTPATCH_DATA_FLOW_MODULE_ID } from \"../runtime/runtime-injection-plugin.js\";\nimport { createTransformFilter, stripViteQuery } from \"./transform-filter.js\";\n\ninterface TransformPluginInput {\n readonly configure?: (\n config: UserConfig,\n environment: ConfigEnv,\n ) => void | Promise<void>;\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n}\n\ninterface ViteTransformOutput {\n readonly code: string;\n readonly map: string;\n}\n\nfunction createCacheKey(id: string, code: string): string {\n const hash = createHash(\"sha256\").update(code).digest(\"base64url\");\n return `${id}\\0${hash}`;\n}\n\nfunction getDisplayPath(root: string, id: string): string {\n const relative = path.relative(root, stripViteQuery(id));\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function createTransformPlugin(input: TransformPluginInput): Plugin {\n let root = process.cwd();\n let filter = createTransformFilter(root, input.context.getOptions());\n let logger: ResolvedConfig[\"logger\"] | undefined;\n const warnedFiles = new Set<string>();\n const warnedDataFlowDiagnostics = new Set<string>();\n const cache = new Map<string, ViteTransformOutput | null>();\n\n return {\n name: \"spotpatch:transform\",\n apply: \"serve\",\n enforce: \"pre\",\n\n async config(config, environment) {\n await input.configure?.(config, environment);\n },\n\n configResolved(config) {\n root = path.resolve(config.root);\n filter = createTransformFilter(root, input.context.getOptions());\n logger = config.logger;\n },\n\n transform(code, id) {\n if (!filter.shouldTransform(id, code)) {\n return null;\n }\n\n const cleanId = path.resolve(stripViteQuery(id));\n const cacheKey = createCacheKey(cleanId, code);\n\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey) ?? null;\n }\n\n const startedAt = performance.now();\n const options = input.context.getOptions();\n\n try {\n const result = injectSourceMarkers({\n code,\n absolutePath: cleanId,\n root,\n fileId: input.registry.register(cleanId),\n ...(options.dataFlow.enabled\n ? { dataFlow: { helperModule: SPOTPATCH_DATA_FLOW_MODULE_ID } }\n : {}),\n onWarning(warning) {\n logger?.warn(\n `[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`,\n );\n },\n });\n\n if (result?.dataFlow !== undefined) {\n input.registry.registerDataFlowComponents(\n cleanId,\n result.dataFlow.sourceVersion,\n result.dataFlow.anchors.flatMap((anchor) =>\n anchor.kind === \"component\"\n ? [\n {\n componentSourceId: anchor.id,\n line: anchor.line,\n column: anchor.column,\n },\n ]\n : [],\n ),\n );\n for (const diagnostic of result.dataFlow.diagnostics) {\n const warningKey = `${cleanId}:${diagnostic.code}:${String(diagnostic.line)}:${String(diagnostic.column)}`;\n if (warnedDataFlowDiagnostics.has(warningKey)) continue;\n warnedDataFlowDiagnostics.add(warningKey);\n logger?.warn(\n `[spotpatch:data-flow] ${diagnostic.code} at ${getDisplayPath(root, id)}:${String(diagnostic.line)}:${String(diagnostic.column)}; keeping this adapter evidence partial.`,\n );\n }\n }\n\n const output =\n result === undefined\n ? null\n : Object.freeze({\n code: result.code,\n map: result.map.toString(),\n });\n cache.set(cacheKey, output);\n\n if (options.debug) {\n const elapsed = performance.now() - startedAt;\n logger?.info(\n `[spotpatch:transform] ${getDisplayPath(root, id)} ${elapsed.toFixed(2)}ms`,\n );\n }\n\n return output;\n } catch (error: unknown) {\n if (!warnedFiles.has(cleanId)) {\n warnedFiles.add(cleanId);\n const detail =\n options.debug && error instanceof Error ? `: ${error.message}` : \"\";\n logger?.warn(\n `[spotpatch:transform] Failed to transform ${getDisplayPath(root, id)}; using original module${detail}`,\n );\n }\n\n return null;\n }\n },\n };\n}\n","import path from \"node:path\";\n\nimport { createDataFlowSourceFilter, createSourceFilter } from \"@spotpatch/compiler\";\nimport type { ResolvedSpotPatchOptions } from \"@spotpatch/dev-server\";\n\nexport function stripViteQuery(id: string): string {\n const queryIndex = id.indexOf(\"?\");\n return queryIndex === -1 ? id : id.slice(0, queryIndex);\n}\n\nexport { isInsideRoot } from \"@spotpatch/compiler\";\n\nexport interface TransformFilter {\n shouldTransform(id: string, code: string): boolean;\n}\n\nexport function createTransformFilter(\n root: string,\n options: ResolvedSpotPatchOptions,\n): TransformFilter {\n const sourceFilter = createSourceFilter(root, options);\n const dataFlowFilter = createDataFlowSourceFilter(root, {\n include: options.include,\n exclude: options.exclude,\n });\n\n return Object.freeze({\n shouldTransform(id: string, code: string): boolean {\n if (\n id.startsWith(\"\\0\") ||\n id.includes(\"virtual:spotpatch\") ||\n id.includes(\"/packages/vite/\") ||\n id.includes(\"\\\\packages\\\\vite\\\\\")\n ) {\n return false;\n }\n\n const cleanId = stripViteQuery(id);\n const absolutePath = path.resolve(cleanId);\n return (\n sourceFilter.shouldTransform(absolutePath, code) ||\n (options.dataFlow.enabled && dataFlowFilter.shouldTransform(absolutePath, code))\n );\n },\n });\n}\n","export {\n createRuntimeAiConfig,\n DEFAULT_EXCLUDE,\n DEFAULT_OPTIONS,\n resolveOptions,\n} from \"@spotpatch/dev-server\";\nexport type {\n FilterEntry,\n ResolvedSpotPatchOptions,\n SimpleAiOptions,\n SpotPatchAiOptions,\n SpotPatchDataFlowOptions,\n SpotPatchOptions,\n} from \"@spotpatch/dev-server\";\n\nexport type ViteSpotPatchOptions = SharedSpotPatchOptions;\nimport type { SpotPatchOptions as SharedSpotPatchOptions } from \"@spotpatch/dev-server\";\n","export { spotPatch } from \"./plugin.js\";\nexport {\n DEFAULT_OPTIONS,\n resolveOptions,\n type ResolvedSpotPatchOptions,\n type SimpleAiOptions,\n type SpotPatchAiOptions,\n type SpotPatchDataFlowOptions,\n type SpotPatchOptions,\n type ViteSpotPatchOptions,\n} from \"./options.js\";\nexport {\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCheckDefinition,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type ContextBudget,\n type OpenAICompatibleProviderOptions,\n type SpotPatchEditorPreference,\n} from \"@spotpatch/shared\";\n"],"mappings":"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","names":["path","path","path","path","path","path","createRuntimeAiConfig","resolveOptions"]}
@@ -1,5 +1,5 @@
1
- var z="data-spotpatch-ui",ae=Object.freeze({highlight:2147483646,controls:2147483647});function u(e,t){let n=e.createElement(t);return n.setAttribute(z,""),n}function _(e,t,n=""){let o=u(e,"button");return o.type="button",o.className=n,o.textContent=t,o}var q=Object.freeze({"zh-CN":Object.freeze({bindings:"数据去向",changes:"修改说明",componentEmpty:"当前组件没有找到可证明的接口。未找到不等于没有请求。",componentTab:"数据链路",componentTitle:"组件数据链路",consumed:"读取字段",declared:"代码声明,尚未在本次页面会话中观测",diagnostics:"诊断",disabled:"数据链路能力未启用,请在插件配置中设置 dataFlow: {}。",error:"数据链路报告加载失败",evidence:"证据",loading:"正在分析源码并合并运行时证据…",logicalObserved:"本次会话已进入 tRPC 调用链",noParameters:"未提取到可证明的参数键",observed:"本次会话已实际请求",pageEmpty:"当前已选页面范围内没有静态接口或运行时网络记录。",pageTab:"页面接口",pageTitle:"页面接口",parameters:"请求参数",refresh:"刷新证据",unknown:"未知"}),"en-US":Object.freeze({bindings:"Data destinations",changes:"Changes",componentEmpty:"No proven interface was found for this component. This does not prove that no request exists.",componentTab:"Data flow",componentTitle:"Component data flow",consumed:"Consumed fields",declared:"Declared in code, not observed in this page session",diagnostics:"Diagnostics",disabled:"Data flow is disabled. Set dataFlow: {} in the plugin options.",error:"Failed to load the data-flow report",evidence:"Evidence",loading:"Analyzing source and merging runtime evidence…",logicalObserved:"Dispatched through the tRPC link in this session",noParameters:"No proven parameter keys were extracted",observed:"Actually requested in this session",pageEmpty:"No static interface or runtime traffic is available for the selected page scope.",pageTab:"Page APIs",pageTitle:"Page interfaces",parameters:"Request parameters",refresh:"Refresh evidence",unknown:"Unknown"})});function C(e,t,n){let o=u(e,"span");return o.className="spotpatch-data-flow-badge",o.dataset.tone=n,o.textContent=t,o}function v(e,t,n){let o=u(e,"div");o.className="spotpatch-data-flow-detail";let a=u(e,"span");a.textContent=t;let s=u(e,"code");return s.textContent=n,o.append(a,s),o}function V(e,t,n){let o=u(e,"article");o.className="spotpatch-data-flow-card";let a=u(e,"div");a.className="spotpatch-data-flow-card-head";let s=u(e,"div");s.className="spotpatch-data-flow-endpoint";let r=u(e,"strong");r.textContent=t.method??n.unknown;let f=u(e,"code");f.textContent=t.url===void 0?t.operation??n.unknown:`${t.url.origin??""}${t.url.pathname}`,s.append(r,f);let c=u(e,"div");c.className="spotpatch-data-flow-badges",c.append(C(e,t.execution==="observed"?t.kind==="rpc"?n.logicalObserved:n.observed:n.declared,t.execution==="observed"?"success":"neutral"),C(e,t.proof,t.proof==="proven"?"proof":"warning"),C(e,t.association,"neutral")),a.append(s,c);let m=t.parameters.length===0?n.noParameters:t.parameters.map(g=>`${g.position}.${g.path}${g.type===void 0?"":`: ${g.type}`}${g.sensitive?" [sensitive]":""}${g.condition===void 0?"":` [when ${g.condition}]`}`).join(`
2
- `),b=t.response.consumedFields.length===0?n.unknown:t.response.consumedFields.join(", "),w=t.suppliedBindings.length===0?n.unknown:t.suppliedBindings.join(", "),h=u(e,"div");h.className="spotpatch-data-flow-card-body";let E=new Set(t.observationIds),T=t.evidenceIds.filter(g=>!E.has(g)).length;return h.append(v(e,n.parameters,m),v(e,n.consumed,b),v(e,n.bindings,w),v(e,n.evidence,`${String(T)} static · ${String(t.observationIds.length)} runtime`)),o.append(a,h),o}function H(e,t){let n=u(e,"section");n.className="spotpatch-data-flow-panel";let o=u(e,"h3");o.textContent=t;let a=u(e,"p");a.className="spotpatch-data-flow-status";let s=u(e,"div");return s.className="spotpatch-data-flow-list",n.append(o,a,s),Object.freeze({root:n,status:a,list:s})}function I(e,t,n,o,a,s){let r=q[n()],f=H(e,r.componentTitle),c=H(e,r.pageTitle),m=_(e,r.refresh),b=e.createElement("style");b.textContent=X,m.classList.add("spotpatch-data-flow-refresh"),f.root.prepend(m);let w=u(e,"div"),h=u(e,"nav");h.className="spotpatch-view-tabs",h.setAttribute("aria-label","SpotPatch views"),h.setAttribute("role","tablist");let E=new Map([["changes",o],["component-data",f.root],["page-data",c.root],["diagnostics",a]]),T=new Map,g="changes";for(let i of E.keys()){let l=_(e,"");l.dataset.viewId=i,l.id=`spotpatch-view-${i}-tab`,l.setAttribute("role","tab"),l.setAttribute("aria-selected",String(i===g));let d=E.get(i);d?.setAttribute("aria-labelledby",l.id),d?.setAttribute("role","tabpanel"),!t&&(i==="component-data"||i==="page-data")&&(l.hidden=!0),T.set(i,l),h.append(l)}w.append(h,...E.values());function S(i){if(E.has(i)){g=i;for(let[l,d]of E){d.hidden=l!==i;let y=T.get(l);y?.setAttribute("aria-selected",String(l===i)),y!==void 0&&(y.tabIndex=l===i?0:-1)}s()}}function D(i){if(!(i.target instanceof HTMLButtonElement))return;let l=i.target.dataset.viewId;l!==void 0&&S(l)}h.addEventListener("click",D),S(g);function A(i,l,d){if(i.list.replaceChildren(),i.status.dataset.state=l.status,!t||l.status==="disabled"){i.status.textContent=r.disabled;return}if(l.status==="loading"){i.status.textContent=r.loading;return}if(l.status==="error"){i.status.textContent=l.message??r.error;return}let y=l.report,k=y===void 0?"":[...new Set(y.diagnostics.map(({code:x})=>x))].join(", "),j=k.length===0?"":` · ${r.diagnostics}: ${k}`;if(y===void 0||y.dependencies.length===0){i.status.textContent=`${d}${j}`;return}i.status.textContent=`${String(y.dependencies.length)} · ${y.completeness.complete?"complete":"partial"}${j}`,i.list.append(...y.dependencies.map(x=>V(e,x,r)))}return Object.freeze({root:w,refreshButton:m,styles:b,dispose(){h.removeEventListener("click",D)},render(i){r=q[n()];let l=[r.changes,r.componentTab,r.pageTab,r.diagnostics];[...T.values()].forEach((d,y)=>{d.textContent=l[y]??""}),m.textContent=`${r.refresh} · ${String(i.observationCount)}`,m.disabled=!t||i.component.status==="loading",A(f,i.component,r.componentEmpty),A(c,i.page,r.pageEmpty)},resetView(){S("changes")}})}var X=`
1
+ var k="data-spotpatch-ui",re=Object.freeze({highlight:2147483646,controls:2147483647});function u(e,t){let n=e.createElement(t);return n.setAttribute(k,""),n}function _(e,t,n=""){let o=u(e,"button");return o.type="button",o.className=n,o.textContent=t,o}var j=Object.freeze({"zh-CN":Object.freeze({bindings:"数据去向",changes:"修改说明",componentEmpty:"当前组件没有找到可证明的接口。未找到不等于没有请求。",componentTab:"数据链路",componentTitle:"组件数据链路",consumed:"读取字段",declared:"代码声明,尚未在本次页面会话中观测",diagnostics:"诊断",disabled:"数据链路能力未启用,请在插件配置中设置 dataFlow: {}。",error:"数据链路报告加载失败",evidence:"证据",loading:"正在分析源码并合并运行时证据…",logicalObserved:"本次会话已进入 tRPC 调用链",noParameters:"未提取到可证明的参数键",observed:"本次会话已实际请求",pageEmpty:"当前已选页面范围内没有静态接口或运行时网络记录。",pageTab:"页面接口",pageTitle:"页面接口",parameters:"请求参数",refresh:"刷新证据",unknown:"未知"}),"en-US":Object.freeze({bindings:"Data destinations",changes:"Changes",componentEmpty:"No proven interface was found for this component. This does not prove that no request exists.",componentTab:"Data flow",componentTitle:"Component data flow",consumed:"Consumed fields",declared:"Declared in code, not observed in this page session",diagnostics:"Diagnostics",disabled:"Data flow is disabled. Set dataFlow: {} in the plugin options.",error:"Failed to load the data-flow report",evidence:"Evidence",loading:"Analyzing source and merging runtime evidence…",logicalObserved:"Dispatched through the tRPC link in this session",noParameters:"No proven parameter keys were extracted",observed:"Actually requested in this session",pageEmpty:"No static interface or runtime traffic is available for the selected page scope.",pageTab:"Page APIs",pageTitle:"Page interfaces",parameters:"Request parameters",refresh:"Refresh evidence",unknown:"Unknown"})});function C(e,t,n){let o=u(e,"span");return o.className="spotpatch-data-flow-badge",o.dataset.tone=n,o.textContent=t,o}function v(e,t,n){let o=u(e,"div");o.className="spotpatch-data-flow-detail";let a=u(e,"span");a.textContent=t;let s=u(e,"code");return s.textContent=n,o.append(a,s),o}function X(e,t,n){let o=u(e,"article");o.className="spotpatch-data-flow-card";let a=u(e,"div");a.className="spotpatch-data-flow-card-head";let s=u(e,"div");s.className="spotpatch-data-flow-endpoint";let r=u(e,"strong");r.textContent=t.method??n.unknown;let f=u(e,"code");f.textContent=t.url===void 0?t.operation??n.unknown:`${t.url.origin??""}${t.url.pathname}`,s.append(r,f);let c=u(e,"div");c.className="spotpatch-data-flow-badges",c.append(C(e,t.execution==="observed"?t.kind==="rpc"?n.logicalObserved:n.observed:n.declared,t.execution==="observed"?"success":"neutral"),C(e,t.proof,t.proof==="proven"?"proof":"warning"),C(e,t.association,"neutral")),a.append(s,c);let m=t.parameters.length===0?n.noParameters:t.parameters.map(g=>`${g.position}.${g.path}${g.type===void 0?"":`: ${g.type}`}${g.sensitive?" [sensitive]":""}${g.condition===void 0?"":` [when ${g.condition}]`}`).join(`
2
+ `),b=t.response.consumedFields.length===0?n.unknown:t.response.consumedFields.join(", "),T=t.suppliedBindings.length===0?n.unknown:t.suppliedBindings.join(", "),y=u(e,"div");y.className="spotpatch-data-flow-card-body";let E=new Set(t.observationIds),w=t.evidenceIds.filter(g=>!E.has(g)).length;return y.append(v(e,n.parameters,m),v(e,n.consumed,b),v(e,n.bindings,T),v(e,n.evidence,`${String(w)} static · ${String(t.observationIds.length)} runtime`)),o.append(a,y),o}function z(e,t){let n=u(e,"section");n.className="spotpatch-data-flow-panel";let o=u(e,"h3");o.textContent=t;let a=u(e,"p");a.className="spotpatch-data-flow-status";let s=u(e,"div");return s.className="spotpatch-data-flow-list",n.append(o,a,s),Object.freeze({root:n,status:a,list:s})}function q(e,t,n,o,a,s){let r=j[n()],f=z(e,r.componentTitle),c=z(e,r.pageTitle),m=_(e,r.refresh),b=e.createElement("style");b.textContent=G,m.classList.add("spotpatch-data-flow-refresh"),f.root.prepend(m);let T=u(e,"div"),y=u(e,"nav");y.className="spotpatch-view-tabs",y.setAttribute("aria-label","SpotPatch views"),y.setAttribute("role","tablist");let E=new Map([["changes",o],["component-data",f.root],["page-data",c.root],["diagnostics",a]]),w=new Map,g="changes";for(let i of E.keys()){let l=_(e,"");l.dataset.viewId=i,l.id=`spotpatch-view-${i}-tab`,l.setAttribute("role","tab"),l.setAttribute("aria-selected",String(i===g));let d=E.get(i);d?.setAttribute("aria-labelledby",l.id),d?.setAttribute("role","tabpanel"),!t&&(i==="component-data"||i==="page-data")&&(l.hidden=!0),w.set(i,l),y.append(l)}T.append(y,...E.values());function A(i){if(E.has(i)){g=i;for(let[l,d]of E){d.hidden=l!==i;let h=w.get(l);h?.setAttribute("aria-selected",String(l===i)),h!==void 0&&(h.tabIndex=l===i?0:-1)}s()}}function S(i){if(!(i.target instanceof HTMLButtonElement))return;let l=i.target.dataset.viewId;l!==void 0&&A(l)}y.addEventListener("click",S),A(g);function D(i,l,d){if(i.list.replaceChildren(),i.status.dataset.state=l.status,!t||l.status==="disabled"){i.status.textContent=r.disabled;return}if(l.status==="loading"){i.status.textContent=r.loading;return}if(l.status==="error"){i.status.textContent=l.message??r.error;return}let h=l.report,N=h===void 0?"":[...new Set(h.diagnostics.map(({code:x})=>x))].join(", "),M=N.length===0?"":` · ${r.diagnostics}: ${N}`;if(h===void 0||h.dependencies.length===0){i.status.textContent=`${d}${M}`;return}i.status.textContent=`${String(h.dependencies.length)} · ${h.completeness.complete?"complete":"partial"}${M}`,i.list.append(...h.dependencies.map(x=>X(e,x,r)))}return Object.freeze({root:T,refreshButton:m,styles:b,dispose(){y.removeEventListener("click",S)},render(i){r=j[n()];let l=[r.changes,r.componentTab,r.pageTab,r.diagnostics];[...w.values()].forEach((d,h)=>{d.textContent=l[h]??""}),m.textContent=`${r.refresh} · ${String(i.observationCount)}`,m.disabled=!t||i.component.status==="loading",D(f,i.component,r.componentEmpty),D(c,i.page,r.pageEmpty)},resetView(){A("changes")}})}var G=`
3
3
  .spotpatch-view-tabs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px; margin-bottom: 12px; padding: 3px; border: 1px solid rgb(255 255 255 / 7%); border-radius: 9px; background: rgb(3 7 18 / 42%); }
4
4
  .spotpatch-view-tabs button { min-width: 0; border: 0; border-radius: 7px; padding: 7px 5px; color: var(--spotpatch-text-muted); background: transparent; cursor: pointer; font-size: 10.5px; }
5
5
  .spotpatch-view-tabs button[aria-selected="true"] { color: #f8fafc; background: rgb(139 124 247 / 18%); }
@@ -23,4 +23,4 @@ var z="data-spotpatch-ui",ae=Object.freeze({highlight:2147483646,controls:214748
23
23
  .spotpatch-data-flow-detail { display: grid; grid-template-columns: 82px minmax(0, 1fr); gap: 8px; align-items: start; }
24
24
  .spotpatch-data-flow-detail > span { color: var(--spotpatch-text-muted); font-size: 10px; }
25
25
  .spotpatch-data-flow-detail > code { overflow-wrap: anywhere; color: #cbd5e1; font: 10px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }
26
- `;var G=Symbol.for("spotpatch.data-flow.extension.v1");function L(e,t=globalThis){t[G]=e}var p=Object.freeze({observationMaxEntries:100,observationMaxBytes:262144,observationTtlMs:3e5,protocolRequestMaxBytes:32768,reportMaxBytes:131072,reportMaxEvidence:200,reportMaxDiagnostics:256,capabilityMaxReasons:64,graphMaxDepth:5,graphMaxModules:50,graphMaxCallsites:100,analysisTimeoutMs:2e3,reportMaxFields:100}),ge=p.reportMaxFields,ye=Object.freeze({observationMaxEntries:p.observationMaxEntries,observationMaxBytes:p.observationMaxBytes,observationTtlMs:p.observationTtlMs,reportMaxBytes:p.reportMaxBytes});var W=Symbol.for("spotpatch.data-flow.runtime.v1");function O(e=globalThis){return e[W]}var K=new Set(["authorization","cookie","defaultvalue","password","setcookie","value"]);function $(e){return e.toLowerCase().replaceAll(/[-_:]/gu,"")}function N(e){let t=$(e);return K.has(t)||t.includes("apikey")||t.includes("authorization")||t.includes("secret")||t.includes("token")}function R(e,t){return Object.freeze(e.slice(0,Math.max(0,t)))}function Y(e){let t=e.url===void 0?void 0:R(e.url.queryKeys,p.reportMaxFields),n=R(e.parameters,p.reportMaxFields).map(m=>Object.freeze({...m,evidenceIds:R(m.evidenceIds,p.reportMaxEvidence)})),o=R(e.response.consumedFields,p.reportMaxFields),a=R(e.suppliedBindings,p.graphMaxCallsites),s=R(e.locationIds,p.graphMaxCallsites),r=R(e.evidenceIds,p.reportMaxEvidence),f=R(e.observationIds,p.observationMaxEntries);return t?.length!==e.url?.queryKeys.length||n.length!==e.parameters.length||n.some((m,b)=>m.evidenceIds.length!==e.parameters[b]?.evidenceIds.length)||o.length!==e.response.consumedFields.length||a.length!==e.suppliedBindings.length||s.length!==e.locationIds.length||r.length!==e.evidenceIds.length||f.length!==e.observationIds.length?Object.freeze({dependency:Object.freeze({...e,...e.url===void 0?{}:{url:Object.freeze({...e.url,queryKeys:t??Object.freeze([])})},parameters:Object.freeze(n),response:Object.freeze({consumedFields:o}),suppliedBindings:a,locationIds:s,evidenceIds:r,observationIds:f}),trimmed:!0}):Object.freeze({dependency:e,trimmed:!1})}function J(e,t){return Object.freeze([...new Set([...e.flatMap(n=>[...n.evidenceIds,...n.parameters.flatMap(o=>o.evidenceIds)]),...t.flatMap(n=>n.evidenceIds)])])}function Q(e,t,n){let o=new Map(e.map(r=>[r.id,r])),a=[],s=new Set;for(let r of t){let f=o.get(r);f!==void 0&&!s.has(r)&&(a.push(f),s.add(r))}if(n)for(let r of e)s.has(r.id)||a.push(r);return R(a,p.reportMaxEvidence)}function Z(e,t){return Object.freeze({...e,parameters:Object.freeze(e.parameters.map(n=>Object.freeze({...n,evidenceIds:Object.freeze(n.evidenceIds.filter(o=>t.has(o)))}))),evidenceIds:Object.freeze(e.evidenceIds.filter(n=>t.has(n)))})}function ee(e){return e==="analysis"?"DATA_FLOW_ANALYSIS_TRUNCATED":"DATA_FLOW_OBSERVATION_DROPPED"}function F(e,t={}){let n=Math.min(Math.max(0,t.maximumDependencies??p.graphMaxCallsites),p.graphMaxCallsites),o=R(e.dependencies,n).map(Y),a=o.map(({dependency:d})=>d),s=R(e.baseline.analyzedSourceVersions,p.graphMaxModules),r=e.dependencies.length>a.length||o.some(({trimmed:d})=>d)||e.baseline.analyzedSourceVersions.length>s.length||e.capability.reasons.length>p.capabilityMaxReasons||e.evidence.length>p.reportMaxEvidence||e.diagnostics.length>p.reportMaxDiagnostics;if(!(t.forceTruncation===!0||r))return e;let c=t.mode??"analysis",m=ee(c),b=`${e.reportId}_collection_${c}`,w=Object.freeze([...e.capability.reasons.filter(d=>d.code!==m).slice(0,p.capabilityMaxReasons-1),Object.freeze({code:m,retryable:!1})]),h=Object.freeze([...e.diagnostics.filter(d=>d.id!==b).slice(0,p.reportMaxDiagnostics-1),Object.freeze({id:b,code:m,severity:"warning",retryable:!1,evidenceIds:Object.freeze([])})]),E=J(a,h),T=Q(e.evidence,E,e.dependencies.length===a.length),g=new Set(T.map(({id:d})=>d)),S=Object.freeze(a.map(d=>Z(d,g))),D=Object.freeze(h.map(d=>Object.freeze({...d,evidenceIds:Object.freeze(d.evidenceIds.filter(y=>g.has(y)))}))),A=e.dependencies.length-a.length,i=e.baseline.analyzedSourceVersions.length-s.length,l=i>0&&A===0?"modules":"callsites";return Object.freeze({...e,baseline:Object.freeze({...e.baseline,analyzedSourceVersions:s}),capability:Object.freeze({...e.capability,...c==="analysis"&&e.capability.staticAnalysis==="available"?{staticAnalysis:"partial"}:{},reasons:w}),dependencies:S,evidence:T,diagnostics:D,...c==="analysis"?{completeness:Object.freeze({...e.completeness,complete:!1,frontierCount:e.completeness.frontierCount+A+i+(r&&A===0&&i===0?1:0),truncatedBy:t.truncatedBy??e.completeness.truncatedBy??l})}:{}})}function te(e,t){let n=t.origin;return!(t.kind==="rpc"?e.transport==="trpc"&&t.operation!==void 0&&e.operation===t.operation:t.kind==="http"?e.transport==="fetch"||e.transport==="xhr":!1)||e.freshness!=="current"||n===void 0||e.requestCallsiteId!==n.requestCallsiteId||e.sourceVersion!==n.sourceVersion||t.method!==void 0&&e.method.toUpperCase()!==t.method.toUpperCase()||t.url!==void 0&&e.url.pathname!==t.url.pathname||t.url?.origin!==void 0&&e.url.origin!==t.url.origin||n.componentSourceId!==void 0&&e.componentSourceId!==void 0&&e.componentSourceId!==n.componentSourceId||n.triggerCallsiteId!==void 0&&e.triggerCallsiteId!==void 0&&e.triggerCallsiteId!==n.triggerCallsiteId?!1:t.association!=="transitive"||e.componentSourceId===n.componentSourceId&&e.triggerCallsiteId===n.triggerCallsiteId}function ne(e){return Object.freeze({id:e.id,kind:"runtime-observation",summaryKey:"dataFlow.evidence.runtimeDispatch"})}function U(e,t){let n=new Set,o=e.map(a=>{let s=t.filter(c=>te(c,a));for(let c of s)n.add(c.id);if(s.length===0)return a;let r=[...new Set(s.flatMap(({url:c})=>c.origin===void 0?[]:[c.origin]))],f=r.length===1?r[0]:void 0;return Object.freeze({...a,...a.url===void 0||a.url.origin!==void 0||f===void 0?{}:{url:Object.freeze({...a.url,origin:f})},execution:"observed",observationIds:Object.freeze([...new Set([...a.observationIds,...s.map(({id:c})=>c)])]),evidenceIds:Object.freeze([...new Set([...a.evidenceIds,...s.map(({id:c})=>c)])])})});return Object.freeze({dependencies:Object.freeze(o),matchedObservationIds:n})}function B(e,t,n){let o=new Set(e.map(({id:a})=>a));return Object.freeze([...e,...t.flatMap(a=>n.has(a.id)&&!o.has(a.id)?[ne(a)]:[])])}function P(e,t){let n=t.filter(a=>a.componentSourceId===void 0||a.componentSourceId===e.component.componentSourceId),o=U(e.dependencies,n);return F(Object.freeze({...e,dependencies:o.dependencies,evidence:B(e.evidence,n,o.matchedObservationIds)}),{mode:"observation"})}function oe(e){let t=e.transport==="trpc";return Object.freeze({id:e.id,kind:t?"rpc":"http",direction:e.method==="GET"||e.method==="HEAD"||e.method==="QUERY"||e.method==="SUBSCRIPTION"?"read":"write",execution:"observed",proof:"unavailable",association:"unassigned",method:e.method,...t?e.operation===void 0?{}:{operation:e.operation}:{url:e.url},parameters:Object.freeze((t?[]:e.url.queryKeys).map(n=>Object.freeze({path:n,position:"query",sensitive:N(n),valueState:"not-collected",evidenceIds:Object.freeze([e.id])}))),response:Object.freeze({consumedFields:Object.freeze([])}),suppliedBindings:Object.freeze([]),locationIds:Object.freeze([]),evidenceIds:Object.freeze([e.id]),observationIds:Object.freeze([e.id])})}function M(e,t){let n=t.filter(({freshness:r})=>r==="current"),o=U(e.dependencies,n),a=n.filter(({id:r})=>!o.matchedObservationIds.has(r)).map(oe),s=new Set(n.map(({id:r})=>r));return F(Object.freeze({...e,dependencies:Object.freeze([...o.dependencies,...a]),evidence:B(e.evidence,n,s)}),{mode:"observation"})}L(Object.freeze({createPanel:I,getComponentRegistration(e){return O()?.getComponentRegistration(e)},observations(e){let t=O();return t?.updateRoute(e),t?.observations()??Object.freeze([])},mergeComponentReport:P,mergePageReport:M}));
26
+ `;var W=Symbol.for("spotpatch.data-flow.extension.v1");function H(e,t=globalThis){t[W]=e}var p=Object.freeze({observationMaxEntries:100,observationMaxBytes:262144,observationTtlMs:3e5,protocolRequestMaxBytes:32768,reportMaxBytes:131072,reportMaxEvidence:200,reportMaxDiagnostics:256,capabilityMaxReasons:64,graphMaxDepth:5,graphMaxModules:50,graphMaxCallsites:100,analysisTimeoutMs:2e3,reportMaxFields:100,sourceMaxComponents:256}),ue=p.reportMaxFields,fe=Object.freeze({observationMaxEntries:p.observationMaxEntries,observationMaxBytes:p.observationMaxBytes,observationTtlMs:p.observationTtlMs,reportMaxBytes:p.reportMaxBytes});var K=Symbol.for("spotpatch.data-flow.runtime.v1");function O(e=globalThis){return e[K]}var $=new Set(["authorization","cookie","defaultvalue","password","setcookie","value"]);function Y(e){return e.toLowerCase().replaceAll(/[-_:]/gu,"")}function I(e){let t=Y(e);return $.has(t)||t.includes("apikey")||t.includes("authorization")||t.includes("secret")||t.includes("token")}function R(e,t){return Object.freeze(e.slice(0,Math.max(0,t)))}function J(e){let t=e.url===void 0?void 0:R(e.url.queryKeys,p.reportMaxFields),n=R(e.parameters,p.reportMaxFields).map(m=>Object.freeze({...m,evidenceIds:R(m.evidenceIds,p.reportMaxEvidence)})),o=R(e.response.consumedFields,p.reportMaxFields),a=R(e.suppliedBindings,p.graphMaxCallsites),s=R(e.locationIds,p.graphMaxCallsites),r=R(e.evidenceIds,p.reportMaxEvidence),f=R(e.observationIds,p.observationMaxEntries);return t?.length!==e.url?.queryKeys.length||n.length!==e.parameters.length||n.some((m,b)=>m.evidenceIds.length!==e.parameters[b]?.evidenceIds.length)||o.length!==e.response.consumedFields.length||a.length!==e.suppliedBindings.length||s.length!==e.locationIds.length||r.length!==e.evidenceIds.length||f.length!==e.observationIds.length?Object.freeze({dependency:Object.freeze({...e,...e.url===void 0?{}:{url:Object.freeze({...e.url,queryKeys:t??Object.freeze([])})},parameters:Object.freeze(n),response:Object.freeze({consumedFields:o}),suppliedBindings:a,locationIds:s,evidenceIds:r,observationIds:f}),trimmed:!0}):Object.freeze({dependency:e,trimmed:!1})}function Q(e,t){return Object.freeze([...new Set([...e.flatMap(n=>[...n.evidenceIds,...n.parameters.flatMap(o=>o.evidenceIds)]),...t.flatMap(n=>n.evidenceIds)])])}function Z(e,t,n){let o=new Map(e.map(r=>[r.id,r])),a=[],s=new Set;for(let r of t){let f=o.get(r);f!==void 0&&!s.has(r)&&(a.push(f),s.add(r))}if(n)for(let r of e)s.has(r.id)||a.push(r);return R(a,p.reportMaxEvidence)}function ee(e,t){return Object.freeze({...e,parameters:Object.freeze(e.parameters.map(n=>Object.freeze({...n,evidenceIds:Object.freeze(n.evidenceIds.filter(o=>t.has(o)))}))),evidenceIds:Object.freeze(e.evidenceIds.filter(n=>t.has(n)))})}function te(e){return e==="analysis"?"DATA_FLOW_ANALYSIS_TRUNCATED":"DATA_FLOW_OBSERVATION_DROPPED"}function F(e,t={}){let n=Math.min(Math.max(0,t.maximumDependencies??p.graphMaxCallsites),p.graphMaxCallsites),o=R(e.dependencies,n).map(J),a=o.map(({dependency:d})=>d),s=R(e.baseline.analyzedSourceVersions,p.graphMaxModules),r=e.dependencies.length>a.length||o.some(({trimmed:d})=>d)||e.baseline.analyzedSourceVersions.length>s.length||e.capability.reasons.length>p.capabilityMaxReasons||e.evidence.length>p.reportMaxEvidence||e.diagnostics.length>p.reportMaxDiagnostics;if(!(t.forceTruncation===!0||r))return e;let c=t.mode??"analysis",m=te(c),b=`${e.reportId}_collection_${c}`,T=Object.freeze([...e.capability.reasons.filter(d=>d.code!==m).slice(0,p.capabilityMaxReasons-1),Object.freeze({code:m,retryable:!1})]),y=Object.freeze([...e.diagnostics.filter(d=>d.id!==b).slice(0,p.reportMaxDiagnostics-1),Object.freeze({id:b,code:m,severity:"warning",retryable:!1,evidenceIds:Object.freeze([])})]),E=Q(a,y),w=Z(e.evidence,E,e.dependencies.length===a.length),g=new Set(w.map(({id:d})=>d)),A=Object.freeze(a.map(d=>ee(d,g))),S=Object.freeze(y.map(d=>Object.freeze({...d,evidenceIds:Object.freeze(d.evidenceIds.filter(h=>g.has(h)))}))),D=e.dependencies.length-a.length,i=e.baseline.analyzedSourceVersions.length-s.length,l=i>0&&D===0?"modules":"callsites";return Object.freeze({...e,baseline:Object.freeze({...e.baseline,analyzedSourceVersions:s}),capability:Object.freeze({...e.capability,...c==="analysis"&&e.capability.staticAnalysis==="available"?{staticAnalysis:"partial"}:{},reasons:T}),dependencies:A,evidence:w,diagnostics:S,...c==="analysis"?{completeness:Object.freeze({...e.completeness,complete:!1,frontierCount:e.completeness.frontierCount+D+i+(r&&D===0&&i===0?1:0),truncatedBy:t.truncatedBy??e.completeness.truncatedBy??l})}:{}})}function ne(e,t){let n=t.origin;return!(t.kind==="rpc"?e.transport==="trpc"&&t.operation!==void 0&&e.operation===t.operation:t.kind==="http"?e.transport==="fetch"||e.transport==="xhr":!1)||e.freshness!=="current"||n===void 0||e.requestCallsiteId!==n.requestCallsiteId||e.sourceVersion!==n.sourceVersion||t.method!==void 0&&e.method.toUpperCase()!==t.method.toUpperCase()||t.url!==void 0&&e.url.pathname!==t.url.pathname||t.url?.origin!==void 0&&e.url.origin!==t.url.origin||n.componentSourceId!==void 0&&e.componentSourceId!==void 0&&e.componentSourceId!==n.componentSourceId||n.triggerCallsiteId!==void 0&&e.triggerCallsiteId!==void 0&&e.triggerCallsiteId!==n.triggerCallsiteId?!1:t.association!=="transitive"||e.componentSourceId===n.componentSourceId&&e.triggerCallsiteId===n.triggerCallsiteId}function oe(e){return Object.freeze({id:e.id,kind:"runtime-observation",summaryKey:"dataFlow.evidence.runtimeDispatch"})}function U(e,t){let n=new Set,o=e.map(a=>{let s=t.filter(c=>ne(c,a));for(let c of s)n.add(c.id);if(s.length===0)return a;let r=[...new Set(s.flatMap(({url:c})=>c.origin===void 0?[]:[c.origin]))],f=r.length===1?r[0]:void 0;return Object.freeze({...a,...a.url===void 0||a.url.origin!==void 0||f===void 0?{}:{url:Object.freeze({...a.url,origin:f})},execution:"observed",observationIds:Object.freeze([...new Set([...a.observationIds,...s.map(({id:c})=>c)])]),evidenceIds:Object.freeze([...new Set([...a.evidenceIds,...s.map(({id:c})=>c)])])})});return Object.freeze({dependencies:Object.freeze(o),matchedObservationIds:n})}function B(e,t,n){let o=new Set(e.map(({id:a})=>a));return Object.freeze([...e,...t.flatMap(a=>n.has(a.id)&&!o.has(a.id)?[oe(a)]:[])])}function L(e,t){let n=t.filter(a=>a.componentSourceId===void 0||a.componentSourceId===e.component.componentSourceId),o=U(e.dependencies,n);return F(Object.freeze({...e,dependencies:o.dependencies,evidence:B(e.evidence,n,o.matchedObservationIds)}),{mode:"observation"})}function ae(e){let t=e.transport==="trpc";return Object.freeze({id:e.id,kind:t?"rpc":"http",direction:e.method==="GET"||e.method==="HEAD"||e.method==="QUERY"||e.method==="SUBSCRIPTION"?"read":"write",execution:"observed",proof:"unavailable",association:"unassigned",method:e.method,...t?e.operation===void 0?{}:{operation:e.operation}:{url:e.url},parameters:Object.freeze((t?[]:e.url.queryKeys).map(n=>Object.freeze({path:n,position:"query",sensitive:I(n),valueState:"not-collected",evidenceIds:Object.freeze([e.id])}))),response:Object.freeze({consumedFields:Object.freeze([])}),suppliedBindings:Object.freeze([]),locationIds:Object.freeze([]),evidenceIds:Object.freeze([e.id]),observationIds:Object.freeze([e.id])})}function P(e,t){let n=t.filter(({freshness:r})=>r==="current"),o=U(e.dependencies,n),a=n.filter(({id:r})=>!o.matchedObservationIds.has(r)).map(ae),s=new Set(n.map(({id:r})=>r));return F(Object.freeze({...e,dependencies:Object.freeze([...o.dependencies,...a]),evidence:B(e.evidence,n,s)}),{mode:"observation"})}function V(){H(Object.freeze({createPanel:q,getComponentRegistration(e){return O()?.getComponentRegistration(e)},observations(e){let t=O();return t?.updateRoute(e),t?.observations()??Object.freeze([])},mergeComponentReport:L,mergePageReport:P}))}V();
@@ -1 +1 @@
1
- var F=Object.freeze({observationMaxEntries:100,observationMaxBytes:262144,observationTtlMs:3e5,protocolRequestMaxBytes:32768,reportMaxBytes:131072,reportMaxEvidence:200,reportMaxDiagnostics:256,capabilityMaxReasons:64,graphMaxDepth:5,graphMaxModules:50,graphMaxCallsites:100,analysisTimeoutMs:2e3,reportMaxFields:100}),k=F.reportMaxFields,te=Object.freeze({observationMaxEntries:F.observationMaxEntries,observationMaxBytes:F.observationMaxBytes,observationTtlMs:F.observationTtlMs,reportMaxBytes:F.reportMaxBytes});var l="/__spotpatch/v1";var oe=Object.freeze({bootstrap:`${l}/bootstrap`,sourceContext:`${l}/source-context`,openEditor:`${l}/open-editor`,dataFlowComponentReport:`${l}/data-flow/component-report`,dataFlowPageReport:`${l}/data-flow/page-report`,agentCapability:`${l}/agent/capability`,agentWorkspaceHealth:`${l}/agent/workspace-health`,agentJobs:`${l}/agent/jobs`,externalHandoffCapability:`${l}/external-handoff/capability`,externalHandoffPublish:`${l}/external-handoff/publish`,externalHandoffStatus:`${l}/external-handoff/status`,externalHandoffResolveDelivery:`${l}/external-handoff/resolve-delivery`,externalAgentControlStatus:`${l}/external-agent/control/status`,externalAgentControlConnect:`${l}/external-agent/control/connect`,externalAgentControlDisconnect:`${l}/external-agent/control/disconnect`,externalAgentControlCancel:`${l}/external-agent/control/cancel`,externalAgentEvents:`${l}/external-agent/events`,externalAgentResult:`${l}/external-agent/result`});var P=Symbol.for("spotpatch.data-flow.runtime.v1"),K=Symbol.for("react.memo"),X=Symbol.for("react.forward_ref");function j(e){return e.performance?.now()??Date.now()}function T(e){let n=0,o=(()=>{try{let i=new Uint8Array(8);return globalThis.crypto.getRandomValues(i),Array.from(i,d=>d.toString(36).padStart(2,"0")).join("")}catch{return"local"}})();return()=>(n+=1,`${e}_${o}_${n.toString(36)}`)}function q(e,n){try{let o=new URL(e,n);return Object.freeze({origin:o.origin,pathname:o.pathname,queryKeys:Object.freeze([...new Set(o.searchParams.keys())].sort().slice(0,k))})}catch{return Object.freeze({pathname:e.split(/[?#]/u,1)[0]??"{invalid}",queryKeys:Object.freeze([])})}}function Y(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}function J(e,n){return n?.method!==void 0?n.method.toUpperCase():typeof Request<"u"&&e instanceof Request?e.method.toUpperCase():"GET"}function U(e,n){try{let o=new URL(e,n).pathname;return o===l||o.startsWith(`${l}/`)}catch{return!1}}function Q(e){return new TextEncoder().encode(JSON.stringify(e)).byteLength}function Z(e,n){let o=[],i=0;function d(p){for(;o[0]!==void 0&&p-o[0].recordedAt>e.observationTtlMs;){let u=o.shift();u!==void 0&&(i-=u.bytes)}}return Object.freeze({add(p){let u=j(n);d(u);let y=Q(p);if(!(y>e.observationMaxBytes))for(o.push(Object.freeze({bytes:y,observation:p,recordedAt:u})),i+=y;o.length>e.observationMaxEntries||i>e.observationMaxBytes;){let b=o.shift();b!==void 0&&(i-=b.bytes)}},clear(){o.length=0,i=0},values(){return d(j(n)),Object.freeze(o.map(({observation:p})=>p))}})}function m(e,n){try{return Object.getOwnPropertyDescriptor(e,n)}catch{return}}function ee(e){let n=m(e,"$$typeof")?.value,o=n===K?"type":n===X?"render":void 0;if(o===void 0)return;let i=m(e,o)?.value;return typeof i=="object"&&i!==null||typeof i=="function"?i:void 0}function M(e,n,o,i=m(e,n)){if(!(i===void 0||!("value"in i)||!i.writable)){try{Object.defineProperty(e,n,{...i,value:o})}catch{return}return()=>{try{m(e,n)?.value===o&&Object.defineProperty(e,n,i)}catch{}}}}function x(e){try{e()}catch{}}function z(e,n=globalThis){let o=new WeakMap,i=new WeakMap,d=Z(e.limits,n),p=T("invocation"),u=T("observation"),y=T("page")(),b=T("route"),h=b(),v,D,g,L=!1,O=(()=>{try{return n.fetch}catch{return}})();function V(t,r){if(O===void 0)throw new TypeError("Fetch is unavailable.");let s=Reflect.apply(O,this,[t,r]);return x(()=>{let a=g,c=a?.invocationToken,w=Y(t);U(w,n.location?.href??"http://spotpatch.invalid/")||d.add(Object.freeze({schemaVersion:1,id:u(),pageEpoch:y,routeEpoch:h,...a===void 0?{}:{requestCallsiteId:a.requestCallsiteId,sourceVersion:a.sourceVersion},...c===void 0?{}:{invocationId:c.invocationId,componentSourceId:c.componentSourceId,triggerCallsiteId:c.triggerCallsiteId},transport:"fetch",method:J(t,r),url:q(w,n.location?.href??"http://spotpatch.invalid/"),outcome:"dispatched",freshness:"current",diagnosticIds:Object.freeze([])}))}),s}let H=O===void 0?void 0:M(n,"fetch",V),f=(()=>{try{return n.XMLHttpRequest?.prototype}catch{return}})(),C=f===void 0?void 0:m(f,"open"),_=f===void 0?void 0:m(f,"send");function W(t,r,...s){let a=C?.value;typeof a=="function"&&Reflect.apply(a,this,[t,r,...s]),x(()=>{i.set(this,Object.freeze({method:t,url:String(r)}))})}function N(t){let r=_?.value;typeof r=="function"&&Reflect.apply(r,this,[t]),x(()=>{let s=i.get(this);if(s===void 0||U(s.url,n.location?.href??"http://spotpatch.invalid/"))return;let a=g,c=a?.invocationToken;d.add(Object.freeze({schemaVersion:1,id:u(),pageEpoch:y,routeEpoch:h,...a===void 0?{}:{requestCallsiteId:a.requestCallsiteId,sourceVersion:a.sourceVersion},...c===void 0?{}:{invocationId:c.invocationId,componentSourceId:c.componentSourceId,triggerCallsiteId:c.triggerCallsiteId},transport:"xhr",method:s.method.toUpperCase(),url:q(s.url,n.location?.href??"http://spotpatch.invalid/"),outcome:"dispatched",freshness:"current",diagnosticIds:Object.freeze([])}))})}let B=f===void 0||typeof C?.value!="function"?void 0:M(f,"open",W,C),G=f===void 0||typeof _?.value!="function"?void 0:M(f,"send",N,_),I=Object.freeze({beginInvocation(t){return Object.freeze({invocationId:p(),componentSourceId:t.componentSourceId,triggerCallsiteId:t.triggerCallsiteId,sourceVersion:t.sourceVersion})},bindInvocation(t,r){return function(...a){return I.withInvocation(t,()=>Reflect.apply(r,this,a))}},bindTrigger(t,r){if(typeof r!="function")return r;let s=r;return function(...c){let w=I.beginInvocation(t);return I.withInvocation(w,()=>Reflect.apply(s,this,c))}},captureInvocation:()=>D,clear:d.clear,createTrpcLink(){return()=>t=>(x(()=>{let r=t.op.path,s=t.op.type;if(typeof r!="string"||r.length===0||r.length>512||s!=="query"&&s!=="mutation"&&s!=="subscription")return;let a=g,c=a?.invocationToken;d.add(Object.freeze({schemaVersion:1,id:u(),pageEpoch:y,routeEpoch:h,...a===void 0?{}:{requestCallsiteId:a.requestCallsiteId,sourceVersion:a.sourceVersion},...c===void 0?{}:{invocationId:c.invocationId,componentSourceId:c.componentSourceId,triggerCallsiteId:c.triggerCallsiteId},transport:"trpc",method:s.toUpperCase(),operation:r,url:Object.freeze({pathname:r,queryKeys:Object.freeze([])}),outcome:"dispatched",freshness:"current",diagnosticIds:Object.freeze([])}))}),t.next(t.op))},dispose(){L||(L=!0,d.clear(),H?.(),B?.(),G?.())},getComponentRegistration:t=>o.get(t),getCurrentRequestFrame:()=>g,observations:()=>Object.freeze(d.values().map(t=>t.routeEpoch===h?t:Object.freeze({...t,freshness:"stale-route"}))),registerComponent(t,r,s){let a=Object.freeze({componentSourceId:r,sourceVersion:s}),c=[t],w=new Set;for(;c.length>0;){let R=c.pop();if(R===void 0||w.has(R))continue;w.add(R),o.set(R,a);let E=ee(R);E!==void 0&&c.push(E)}},updateRoute(t){v===void 0?v=t:v!==t&&(v=t,h=b())},withInvocation(t,r){let s=D;D=t;try{return r()}finally{D=s}},withRequestFrame(t,r,s){let a=g;g=Object.freeze({requestCallsiteId:r.requestCallsiteId,sourceVersion:r.sourceVersion,...t===void 0?{}:{invocationToken:t}});try{return s()}finally{g=a}}});return I}function S(e,n=globalThis){if(!e.enabled)return;let o=n[P]??z(e,n);return n[P]=o,o}var $=S(__SPOTPATCH_DATA_FLOW_CONFIG__);if($===void 0)throw new Error("SpotPatch data-flow prelude was loaded while disabled.");var ye=$;export{ye as dataFlowRuntime};
1
+ var F=Object.freeze({observationMaxEntries:100,observationMaxBytes:262144,observationTtlMs:3e5,protocolRequestMaxBytes:32768,reportMaxBytes:131072,reportMaxEvidence:200,reportMaxDiagnostics:256,capabilityMaxReasons:64,graphMaxDepth:5,graphMaxModules:50,graphMaxCallsites:100,analysisTimeoutMs:2e3,reportMaxFields:100,sourceMaxComponents:256}),k=F.reportMaxFields,ne=Object.freeze({observationMaxEntries:F.observationMaxEntries,observationMaxBytes:F.observationMaxBytes,observationTtlMs:F.observationTtlMs,reportMaxBytes:F.reportMaxBytes});var l="/__spotpatch/v1";var re=Object.freeze({bootstrap:`${l}/bootstrap`,sourceContext:`${l}/source-context`,openEditor:`${l}/open-editor`,dataFlowComponentReport:`${l}/data-flow/component-report`,dataFlowPageReport:`${l}/data-flow/page-report`,agentCapability:`${l}/agent/capability`,agentWorkspaceHealth:`${l}/agent/workspace-health`,agentJobs:`${l}/agent/jobs`,externalHandoffCapability:`${l}/external-handoff/capability`,externalHandoffPublish:`${l}/external-handoff/publish`,externalHandoffStatus:`${l}/external-handoff/status`,externalHandoffResolveDelivery:`${l}/external-handoff/resolve-delivery`,externalAgentControlStatus:`${l}/external-agent/control/status`,externalAgentControlConnect:`${l}/external-agent/control/connect`,externalAgentControlDisconnect:`${l}/external-agent/control/disconnect`,externalAgentControlCancel:`${l}/external-agent/control/cancel`,externalAgentEvents:`${l}/external-agent/events`,externalAgentResult:`${l}/external-agent/result`});var q=Symbol.for("spotpatch.data-flow.runtime.v1"),K=Symbol.for("react.memo"),Y=Symbol.for("react.forward_ref");function j(e){return e.performance?.now()??Date.now()}function T(e){let n=0,o=(()=>{try{let a=new Uint8Array(8);return globalThis.crypto.getRandomValues(a),Array.from(a,p=>p.toString(36).padStart(2,"0")).join("")}catch{return"local"}})();return()=>(n+=1,`${e}_${o}_${n.toString(36)}`)}function U(e,n){try{let o=new URL(e,n);return Object.freeze({origin:o.origin,pathname:o.pathname,queryKeys:Object.freeze([...new Set(o.searchParams.keys())].sort().slice(0,k))})}catch{return Object.freeze({pathname:e.split(/[?#]/u,1)[0]??"{invalid}",queryKeys:Object.freeze([])})}}function J(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}function Q(e,n){return n?.method!==void 0?n.method.toUpperCase():typeof Request<"u"&&e instanceof Request?e.method.toUpperCase():"GET"}function z(e,n){try{let o=new URL(e,n).pathname;return o===l||o.startsWith(`${l}/`)}catch{return!1}}function Z(e){return new TextEncoder().encode(JSON.stringify(e)).byteLength}function ee(e,n){let o=[],a=0;function p(d){for(;o[0]!==void 0&&d-o[0].recordedAt>e.observationTtlMs;){let f=o.shift();f!==void 0&&(a-=f.bytes)}}return Object.freeze({add(d){let f=j(n);p(f);let y=Z(d);if(!(y>e.observationMaxBytes))for(o.push(Object.freeze({bytes:y,observation:d,recordedAt:f})),a+=y;o.length>e.observationMaxEntries||a>e.observationMaxBytes;){let h=o.shift();h!==void 0&&(a-=h.bytes)}},clear(){o.length=0,a=0},values(){return p(j(n)),Object.freeze(o.map(({observation:d})=>d))}})}function w(e,n){try{return Object.getOwnPropertyDescriptor(e,n)}catch{return}}function te(e){let n=w(e,"$$typeof")?.value,o=n===K?"type":n===Y?"render":void 0;if(o===void 0)return;let a=w(e,o)?.value;return typeof a=="object"&&a!==null||typeof a=="function"?a:void 0}function M(e,n,o,a=w(e,n)){if(!(a===void 0||!("value"in a)||!a.writable)){try{Object.defineProperty(e,n,{...a,value:o})}catch{return}return()=>{try{w(e,n)?.value===o&&Object.defineProperty(e,n,a)}catch{}}}}function O(e){try{e()}catch{}}function $(e,n=globalThis,o={}){let a=new WeakMap,p=new WeakMap,d=ee(e.limits,n),f=T("invocation"),y=T("observation"),h=T("page")(),L=T("route"),m=L(),v,D,g,P=!1,x=(()=>{try{return n.fetch}catch{return}})();function H(t,r){if(x===void 0)throw new TypeError("Fetch is unavailable.");let s=Reflect.apply(x,this,[t,r]);return O(()=>{let i=g,c=i?.invocationToken,b=J(t);z(b,n.location?.href??"http://spotpatch.invalid/")||o.shouldObserveFetch?.(t,r,n.location?.href??"http://spotpatch.invalid/")===!1||d.add(Object.freeze({schemaVersion:1,id:y(),pageEpoch:h,routeEpoch:m,...i===void 0?{}:{requestCallsiteId:i.requestCallsiteId,sourceVersion:i.sourceVersion},...c===void 0?{}:{invocationId:c.invocationId,componentSourceId:c.componentSourceId,triggerCallsiteId:c.triggerCallsiteId},transport:"fetch",method:Q(t,r),url:U(b,n.location?.href??"http://spotpatch.invalid/"),outcome:"dispatched",freshness:"current",diagnosticIds:Object.freeze([])}))}),s}let W=x===void 0?void 0:M(n,"fetch",H),u=(()=>{try{return n.XMLHttpRequest?.prototype}catch{return}})(),C=u===void 0?void 0:w(u,"open"),_=u===void 0?void 0:w(u,"send");function N(t,r,...s){let i=C?.value;typeof i=="function"&&Reflect.apply(i,this,[t,r,...s]),O(()=>{p.set(this,Object.freeze({method:t,url:String(r)}))})}function B(t){let r=_?.value;typeof r=="function"&&Reflect.apply(r,this,[t]),O(()=>{let s=p.get(this);if(s===void 0||z(s.url,n.location?.href??"http://spotpatch.invalid/")||o.shouldObserveXhr?.(s.url,n.location?.href??"http://spotpatch.invalid/")===!1)return;let i=g,c=i?.invocationToken;d.add(Object.freeze({schemaVersion:1,id:y(),pageEpoch:h,routeEpoch:m,...i===void 0?{}:{requestCallsiteId:i.requestCallsiteId,sourceVersion:i.sourceVersion},...c===void 0?{}:{invocationId:c.invocationId,componentSourceId:c.componentSourceId,triggerCallsiteId:c.triggerCallsiteId},transport:"xhr",method:s.method.toUpperCase(),url:U(s.url,n.location?.href??"http://spotpatch.invalid/"),outcome:"dispatched",freshness:"current",diagnosticIds:Object.freeze([])}))})}let G=u===void 0||typeof C?.value!="function"?void 0:M(u,"open",N,C),X=u===void 0||typeof _?.value!="function"?void 0:M(u,"send",B,_),I=Object.freeze({beginInvocation(t){return Object.freeze({invocationId:f(),componentSourceId:t.componentSourceId,triggerCallsiteId:t.triggerCallsiteId,sourceVersion:t.sourceVersion})},bindInvocation(t,r){return function(...i){return I.withInvocation(t,()=>Reflect.apply(r,this,i))}},bindTrigger(t,r){if(typeof r!="function")return r;let s=r;return function(...c){let b=I.beginInvocation(t);return I.withInvocation(b,()=>Reflect.apply(s,this,c))}},captureInvocation:()=>D,clear:d.clear,createTrpcLink(){return()=>t=>(O(()=>{let r=t.op.path,s=t.op.type;if(typeof r!="string"||r.length===0||r.length>512||s!=="query"&&s!=="mutation"&&s!=="subscription")return;let i=g,c=i?.invocationToken;d.add(Object.freeze({schemaVersion:1,id:y(),pageEpoch:h,routeEpoch:m,...i===void 0?{}:{requestCallsiteId:i.requestCallsiteId,sourceVersion:i.sourceVersion},...c===void 0?{}:{invocationId:c.invocationId,componentSourceId:c.componentSourceId,triggerCallsiteId:c.triggerCallsiteId},transport:"trpc",method:s.toUpperCase(),operation:r,url:Object.freeze({pathname:r,queryKeys:Object.freeze([])}),outcome:"dispatched",freshness:"current",diagnosticIds:Object.freeze([])}))}),t.next(t.op))},dispose(){P||(P=!0,d.clear(),W?.(),G?.(),X?.())},getComponentRegistration:t=>a.get(t),getCurrentRequestFrame:()=>g,observations:()=>Object.freeze(d.values().map(t=>t.routeEpoch===m?t:Object.freeze({...t,freshness:"stale-route"}))),registerComponent(t,r,s){let i=Object.freeze({componentSourceId:r,sourceVersion:s}),c=[t],b=new Set;for(;c.length>0;){let R=c.pop();if(R===void 0||b.has(R))continue;b.add(R),a.set(R,i);let E=te(R);E!==void 0&&c.push(E)}},updateRoute(t){v===void 0?v=t:v!==t&&(v=t,m=L())},withInvocation(t,r){let s=D;D=t;try{return r()}finally{D=s}},withRequestFrame(t,r,s){let i=g;g=Object.freeze({requestCallsiteId:r.requestCallsiteId,sourceVersion:r.sourceVersion,...t===void 0?{}:{invocationToken:t}});try{return s()}finally{g=i}}});return I}function S(e,n=globalThis,o={}){if(!e.enabled)return;let a=n[q]??$(e,n,o);return n[q]=a,a}var V=S(__SPOTPATCH_DATA_FLOW_CONFIG__);if(V===void 0)throw new Error("SpotPatch data-flow prelude was loaded while disabled.");var ge=V;export{ge as dataFlowRuntime};
@@ -1,4 +1,4 @@
1
- var O="0.6.1",T=`bippy-${O}`,w=Object.defineProperty,J=Object.prototype.hasOwnProperty,p=()=>{},k=e=>{try{Function.prototype.toString.call(e).indexOf("^_^")>-1&&setTimeout(()=>{throw Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")})}catch{}},F=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>!!(e&&"getFiberRoots"in e),B=!1,j,C=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>B?!0:(e&&typeof e.inject=="function"&&(j=e.inject.toString()),!!j?.includes("(injected)")),c=new Set,d=new Set;var E=e=>{e&&c.add(e);let t=new Map,n=0,r={_instrumentationIsActive:!1,_instrumentationSource:T,checkDCE:k,hasUnsupportedRendererAttached:!1,inject(o){let i=++n;return t.set(i,o),d.add(o),r._instrumentationIsActive||(r._instrumentationIsActive=!0,c.forEach(a=>a())),i},on:p,onCommitFiberRoot:p,onCommitFiberUnmount:p,onPostCommitFiberRoot:p,renderers:t,supportsFiber:!0,supportsFlight:!0};try{w(globalThis,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!0,enumerable:!0,get(){return r},set(a){if(a&&typeof a=="object"){let s=r.renderers;r=a,s.size>0&&(s.forEach((l,u)=>{d.add(l),a.renderers.set(u,l)}),b(e))}}});let o=window.hasOwnProperty,i=!1;w(window,"hasOwnProperty",{configurable:!0,value:function(...a){try{if(!i&&a[0]==="__REACT_DEVTOOLS_GLOBAL_HOOK__")return globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=void 0,i=!0,-0}catch{}return o.apply(this,a)},writable:!0})}catch{b(e)}return r},b=e=>{e&&c.add(e);try{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!t)return;if(!t._instrumentationSource){t.checkDCE=k,t.supportsFiber=!0,t.supportsFlight=!0,t.hasUnsupportedRendererAttached=!1,t._instrumentationSource=T,t._instrumentationIsActive=!1;let n=F(t);if(n||(t.on=p),t.renderers.size){t._instrumentationIsActive=!0,c.forEach(i=>i());return}let r=t.inject,o=C(t);o&&!n&&(B=!0,t.inject({scheduleRefresh(){}})&&(t._instrumentationIsActive=!0)),t.inject=i=>{let a=r(i);return d.add(i),o&&t.renderers.set(a,i),t._instrumentationIsActive=!0,c.forEach(s=>s()),a}}(t.renderers.size||t._instrumentationIsActive||C())&&e?.()}catch{}},_=()=>J.call(globalThis,"__REACT_DEVTOOLS_GLOBAL_HOOK__"),S=e=>_()?(b(e),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__):E(e),N=()=>!!(typeof window<"u"&&(window.document?.createElement||window.navigator?.product==="ReactNative")),h=()=>{try{N()&&S()}catch{}};h();var v=e=>{switch(e.tag){case 1:case 11:case 0:case 14:case 15:return!0;default:return!1}},z=e=>!e||typeof e!="object"?!1:"pendingProps"in e&&!("containerInfo"in e);var I=e=>{let t=[],n=e;for(;n.return;)t.push(n),n=n.return;return t};function Y(e,t,n=!1){if(!e)return null;let r=t(e);if(r instanceof Promise)return(async()=>{if(await r===!0)return e;let i=n?e.return:e.child;for(;i;){let a=await V(i,t,n);if(a)return a;i=n?null:i.sibling}return null})();if(r===!0)return e;let o=n?e.return:e.child;for(;o;){let i=U(o,t,n);if(i)return i;o=n?null:o.sibling}return null}var U=(e,t,n=!1)=>{if(!e)return null;if(t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let o=U(r,t,n);if(o)return o;r=n?null:r.sibling}return null},V=async(e,t,n=!1)=>{if(!e)return null;if(await t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let o=await V(r,t,n);if(o)return o;r=n?null:r.sibling}return null};var A=e=>{let t=e;return typeof t=="function"?t:typeof t=="object"&&t?A(t.type||t.render):null},L=e=>{let t=e;if(typeof t=="string")return t;if(typeof t!="function"&&!(typeof t=="object"&&t))return null;let n=t.displayName||t.name||null;if(n)return n;let r=A(t);return r&&(r.displayName||r.name)||null};var G=new Set;var ee=e=>{if(!_())return null;let t=e;for(;t.return;)t=t.return;let n=te.get(t.stateNode);return n===void 0?null:S().renderers?.get(n)??null};var te=new WeakMap;var x=new Set,ne=e=>e.startsWith("__reactContainer$")||e.startsWith("__reactInternalInstance$")||e.startsWith("__reactFiber"),D=e=>{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t?.renderers)for(let n of t.renderers.values())try{let r=n.findFiberByHostInstance?.(e);if(r)return r}catch{}if(typeof e=="object"&&e){if("_reactRootContainer"in e)return e._reactRootContainer?._internalRoot?.current?.child;let n=e.__internalInstanceHandle??e._internalInstanceHandle;if(z(n))return n;let r=e;for(let o of x){let i=r[o];if(i)return i}for(let o of Object.keys(r))if(ne(o))return x.add(o),r[o]||null;for(let o of G){if(ee(o.current)?.findFiberByHostInstance)continue;let i=Y(o.current,a=>a.stateNode===e);if(i)return i}}return null};function g(e){return typeof e=="object"&&e!==null?e:void 0}function W(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>0?e:void 0}function re(e){let t=e._debugSource;if(typeof t!="object"||t===null||!("fileName"in t)||typeof t.fileName!="string")return;let n="lineNumber"in t?W(t.lineNumber):void 0,r="columnNumber"in t?W(t.columnNumber):void 0;return Object.freeze({fileName:t.fileName,...n===void 0?{}:{line:n},...r===void 0?{}:{column:r}})}function oe(e){for(let n of d)try{let r=n.findFiberByHostInstance?.(e);if(r!=null)return Object.freeze({node:r,version:n.reconcilerVersion})}catch{}let t=D(e);return t===null?void 0:Object.freeze({node:t})}function K(){return Object.freeze({find:oe,getAncestors(e){let t=g(e);return t===void 0?[]:I(t)},isComposite(e){let t=g(e);return t!==void 0&&v(t)},getDisplayName(e){let t=g(e);return t===void 0?void 0:L(t.type)??void 0},getComponentType(e){let n=g(e)?.type;return typeof n=="object"&&n!==null||typeof n=="function"?n:void 0},getSource(e){let t=g(e);return t===void 0?void 0:re(t)}})}function ie(e){return e.split(/[?#]/,1)[0]??""}function $(e){return e.split("/").every(t=>t.length>0&&t!=="."&&t!=="..")}function H(e){let t=e.replaceAll("\\","/");return t.startsWith("node_modules/")||t.includes("/node_modules/")}function P(e){if(e.length===0||H(e))return;let t=e.replaceAll("\\","/");try{/^https?:\/\//i.test(t)&&(t=new URL(t).pathname)}catch{return}t=ie(t);let n=t.lastIndexOf("/src/");if(n>=0){let r=t.slice(n+1);return $(r)?r:void 0}if(t.startsWith("src/")&&$(t))return t}var ae=/^18\.(?:2|3)\./,se=new Set(["Fragment","StrictMode","Suspense","Context.Consumer","Context.Provider"]);function q(e){return e!==void 0&&ae.test(e)}function le(e){return se.has(e)||e.endsWith(".Provider")||e.endsWith(".Consumer")}function ue(e,t,n,r){let o=[],i,a,s;for(let u of e.getAncestors(t)){if(!e.isComposite(u))continue;let f=e.getDisplayName(u);if(f===void 0||f.length===0||le(f))continue;let m=e.getSource(u),M=e.getComponentType?.(u),R=M===void 0?void 0:r?.(M),y=Object.freeze({name:f,...m===void 0?{}:{source:m},...R===void 0?{}:{registration:R}});if(i??=y,o.length<n&&o.push(f),R!==void 0&&a===void 0&&(a=y),s===void 0&&m!==void 0&&!H(m.fileName)&&P(m.fileName)!==void 0&&(s=y),a!==void 0&&o.length>=n)break}let l=a??s;return Object.freeze({...l===void 0?{}:{businessComponent:l},...i===void 0?{}:{firstComponent:i},stack:Object.freeze(o)})}function ce(e){if(e===void 0)return;let t=P(e.fileName);if(t!==void 0)return Object.freeze({relativePath:t,...e.line===void 0?{}:{line:e.line},...e.column===void 0?{}:{column:e.column},origin:"react-fiber",confidence:"probable"})}function Q(e){if(!Number.isSafeInteger(e.maxComponentDepth)||e.maxComponentDepth<=0)throw new RangeError("React component depth must be a positive integer.");let t=e.bridge??K(),n=!1;function r(o){if(n)return Object.freeze({supported:!1,componentStack:[]});let i=t.find(o);if(i===void 0||!q(i.version))return Object.freeze({supported:!1,...i?.version===void 0?{}:{version:i.version},componentStack:[]});let a=ue(t,i.node,e.maxComponentDepth,e.getComponentRegistration),s=a.businessComponent?.name??a.firstComponent?.name,l=ce(a.businessComponent?.source),u=a.businessComponent?.registration;return Object.freeze({supported:!0,version:i.version,...s===void 0?{}:{componentName:s},...u??{},componentStack:a.stack,...l===void 0?{}:{source:l}})}return Object.freeze({name:"bippy-react-18",supports(o){return n?!1:q(t.find(o)?.version)},inspect:r,dispose(){n=!0}})}export{Q as createReact18Adapter};
1
+ var F="0.6.1",T=`bippy-${F}`,B=Object.defineProperty,ee=Object.prototype.hasOwnProperty,p=()=>{},z=e=>{try{Function.prototype.toString.call(e).indexOf("^_^")>-1&&setTimeout(()=>{throw Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")})}catch{}},E=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>!!(e&&"getFiberRoots"in e),Y=!1,x,_=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>Y?!0:(e&&typeof e.inject=="function"&&(x=e.inject.toString()),!!x?.includes("(injected)")),u=new Set,c=new Set;var v=e=>{e&&u.add(e);let t=new Map,n=0,r={_instrumentationIsActive:!1,_instrumentationSource:T,checkDCE:z,hasUnsupportedRendererAttached:!1,inject(i){let o=++n;return t.set(o,i),c.add(i),r._instrumentationIsActive||(r._instrumentationIsActive=!0,u.forEach(a=>a())),o},on:p,onCommitFiberRoot:p,onCommitFiberUnmount:p,onPostCommitFiberRoot:p,renderers:t,supportsFiber:!0,supportsFlight:!0};try{B(globalThis,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!0,enumerable:!0,get(){return r},set(a){if(a&&typeof a=="object"){let s=r.renderers;r=a,s.size>0&&(s.forEach((l,d)=>{c.add(l),a.renderers.set(d,l)}),b(e))}}});let i=window.hasOwnProperty,o=!1;B(window,"hasOwnProperty",{configurable:!0,value:function(...a){try{if(!o&&a[0]==="__REACT_DEVTOOLS_GLOBAL_HOOK__")return globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=void 0,o=!0,-0}catch{}return i.apply(this,a)},writable:!0})}catch{b(e)}return r},b=e=>{e&&u.add(e);try{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!t)return;if(!t._instrumentationSource){t.checkDCE=z,t.supportsFiber=!0,t.supportsFlight=!0,t.hasUnsupportedRendererAttached=!1,t._instrumentationSource=T,t._instrumentationIsActive=!1;let n=E(t);if(n||(t.on=p),t.renderers.size){t._instrumentationIsActive=!0,u.forEach(o=>o());return}let r=t.inject,i=_(t);i&&!n&&(Y=!0,t.inject({scheduleRefresh(){}})&&(t._instrumentationIsActive=!0)),t.inject=o=>{let a=r(o);return c.add(o),i&&t.renderers.set(a,o),t._instrumentationIsActive=!0,u.forEach(s=>s()),a}}(t.renderers.size||t._instrumentationIsActive||_())&&e?.()}catch{}},S=()=>ee.call(globalThis,"__REACT_DEVTOOLS_GLOBAL_HOOK__"),R=e=>S()?(b(e),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__):v(e),N=()=>!!(typeof window<"u"&&(window.document?.createElement||window.navigator?.product==="ReactNative")),h=()=>{try{N()&&R()}catch{}};h();var A=e=>{switch(e.tag){case 1:case 11:case 0:case 14:case 15:return!0;default:return!1}},V=e=>!e||typeof e!="object"?!1:"pendingProps"in e&&!("containerInfo"in e);var L=e=>{let t=[],n=e;for(;n.return;)t.push(n),n=n.return;return t};function G(e,t,n=!1){if(!e)return null;let r=t(e);if(r instanceof Promise)return(async()=>{if(await r===!0)return e;let o=n?e.return:e.child;for(;o;){let a=await K(o,t,n);if(a)return a;o=n?null:o.sibling}return null})();if(r===!0)return e;let i=n?e.return:e.child;for(;i;){let o=W(i,t,n);if(o)return o;i=n?null:i.sibling}return null}var W=(e,t,n=!1)=>{if(!e)return null;if(t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let i=W(r,t,n);if(i)return i;r=n?null:r.sibling}return null},K=async(e,t,n=!1)=>{if(!e)return null;if(await t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let i=await K(r,t,n);if(i)return i;r=n?null:r.sibling}return null};var I=e=>{let t=e;return typeof t=="function"?t:typeof t=="object"&&t?I(t.type||t.render):null},D=e=>{let t=e;if(typeof t=="string")return t;if(typeof t!="function"&&!(typeof t=="object"&&t))return null;let n=t.displayName||t.name||null;if(n)return n;let r=I(t);return r&&(r.displayName||r.name)||null};var $=new Set;var re=e=>{if(!S())return null;let t=e;for(;t.return;)t=t.return;let n=oe.get(t.stateNode);return n===void 0?null:R().renderers?.get(n)??null};var oe=new WeakMap;var U=new Set,ie=e=>e.startsWith("__reactContainer$")||e.startsWith("__reactInternalInstance$")||e.startsWith("__reactFiber"),H=e=>{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t?.renderers)for(let n of t.renderers.values())try{let r=n.findFiberByHostInstance?.(e);if(r)return r}catch{}if(typeof e=="object"&&e){if("_reactRootContainer"in e)return e._reactRootContainer?._internalRoot?.current?.child;let n=e.__internalInstanceHandle??e._internalInstanceHandle;if(V(n))return n;let r=e;for(let i of U){let o=r[i];if(o)return o}for(let i of Object.keys(r))if(ie(i))return U.add(i),r[i]||null;for(let i of $){if(re(i.current)?.findFiberByHostInstance)continue;let o=G(i.current,a=>a.stateNode===e);if(o)return o}}return null};function g(e){return typeof e=="object"&&e!==null?e:void 0}function q(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>0?e:void 0}function ae(e){let t=e._debugSource;if(typeof t!="object"||t===null||!("fileName"in t)||typeof t.fileName!="string")return;let n="lineNumber"in t?q(t.lineNumber):void 0,r="columnNumber"in t?q(t.columnNumber):void 0;return Object.freeze({fileName:t.fileName,...n===void 0?{}:{line:n},...r===void 0?{}:{column:r}})}function se(){let e=new Set(c),t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t?.renderers instanceof Map)for(let n of t.renderers.values())e.add(n);return[...e]}function le(e){for(let n of se())try{let r=n.findFiberByHostInstance?.(e);if(r!=null)return Object.freeze({node:r,version:n.reconcilerVersion})}catch{}let t=H(e);return t===null?void 0:Object.freeze({node:t})}function Q(){return Object.freeze({find:le,getAncestors(e){let t=g(e);return t===void 0?[]:L(t)},isComposite(e){let t=g(e);return t!==void 0&&A(t)},getDisplayName(e){let t=g(e);return t===void 0?void 0:D(t.type)??void 0},getComponentType(e){let n=g(e)?.type;return typeof n=="object"&&n!==null||typeof n=="function"?n:void 0},getSource(e){let t=g(e);return t===void 0?void 0:ae(t)}})}function ue(e){return e.split(/[?#]/,1)[0]??""}function J(e){return e.split("/").every(t=>t.length>0&&t!=="."&&t!=="..")}function M(e){let t=e.replaceAll("\\","/");return t.startsWith("node_modules/")||t.includes("/node_modules/")}function P(e){if(e.length===0||M(e))return;let t=e.replaceAll("\\","/");try{/^https?:\/\//i.test(t)&&(t=new URL(t).pathname)}catch{return}t=ue(t);let n=t.lastIndexOf("/src/");if(n>=0){let r=t.slice(n+1);return J(r)?r:void 0}if(t.startsWith("src/")&&J(t))return t}var ce=/^18\.(?:2|3)\./,de=new Set(["Fragment","StrictMode","Suspense","Context.Consumer","Context.Provider"]);function w(e){return e!==void 0&&ce.test(e)}function j(e){return e?.startsWith("19.")===!0}function fe(e){return de.has(e)||e.endsWith(".Provider")||e.endsWith(".Consumer")}function X(e,t,n,r,i){let o=[],a,s,l;for(let C of e.getAncestors(t)){if(!e.isComposite(C))continue;let f=e.getDisplayName(C);if(f===void 0||f.length===0||fe(f))continue;let m=r?e.getSource(C):void 0,k=e.getComponentType?.(C),y=k===void 0?void 0:i?.(k),O=Object.freeze({name:f,...m===void 0?{}:{source:m},...y===void 0?{}:{registration:y}});if(a??=O,o.length<n&&o.push(f),y!==void 0&&s===void 0&&(s=O),l===void 0&&m!==void 0&&!M(m.fileName)&&P(m.fileName)!==void 0&&(l=O),s!==void 0&&o.length>=n)break}let d=s??l;return Object.freeze({...d===void 0?{}:{businessComponent:d},...a===void 0?{}:{firstComponent:a},stack:Object.freeze(o)})}function me(e){if(e===void 0)return;let t=P(e.fileName);if(t!==void 0)return Object.freeze({relativePath:t,...e.line===void 0?{}:{line:e.line},...e.column===void 0?{}:{column:e.column},origin:"react-fiber",confidence:"probable"})}function Z(e){if(!Number.isSafeInteger(e.maxComponentDepth)||e.maxComponentDepth<=0)throw new RangeError("React component depth must be a positive integer.");let t=e.bridge??Q(),n=!1;function r(i){if(n)return Object.freeze({supported:!1,componentStack:[]});let o=t.find(i);if(o===void 0||!w(o.version)&&!j(o.version))return Object.freeze({supported:!1,...o?.version===void 0?{}:{version:o.version},componentStack:[]});let a=X(t,o.node,e.maxComponentDepth,w(o.version),e.getComponentRegistration);if(j(o.version)&&a.businessComponent?.registration===void 0)return Object.freeze({supported:!1,version:o.version,componentStack:[]});let s=a.businessComponent?.name??a.firstComponent?.name,l=me(a.businessComponent?.source),d=a.businessComponent?.registration;return Object.freeze({supported:!0,version:o.version,...s===void 0?{}:{componentName:s},...d??{},componentStack:a.stack,...l===void 0?{}:{source:l}})}return Object.freeze({name:"bippy-react-18",supports(i){if(n)return!1;let o=t.find(i);return o===void 0?!1:w(o.version)?!0:j(o.version)?X(t,o.node,e.maxComponentDepth,!1,e.getComponentRegistration).businessComponent?.registration!==void 0:!1},inspect:r,dispose(){n=!0}})}export{Z as createReact18Adapter};
2
2
  /*! Bundled license information:
3
3
 
4
4
  bippy/dist/rdt-hook.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spotpatch/vite",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "Vite development plugin for SpotPatch.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -49,11 +49,11 @@
49
49
  "magic-string": "1.1.0",
50
50
  "oxc-parser": "0.143.0",
51
51
  "@spotpatch/bridge": "^0.2.0",
52
- "@spotpatch/compiler": "^0.2.0",
53
- "@spotpatch/dev-server": "^0.7.0",
54
- "@spotpatch/react-adapter": "^1.1.0",
55
- "@spotpatch/runtime": "^1.11.0",
56
- "@spotpatch/shared": "^1.11.0"
52
+ "@spotpatch/compiler": "^0.3.0",
53
+ "@spotpatch/dev-server": "^0.8.0",
54
+ "@spotpatch/react-adapter": "^1.2.0",
55
+ "@spotpatch/runtime": "^1.12.0",
56
+ "@spotpatch/shared": "^1.12.0"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"