@spotpatch/vite 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/cli.js +8 -8
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +34 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +36 -76
- package/dist/index.js.map +1 -1
- package/dist/runtime-client.js +35 -35
- package/dist/runtime-contextual-ask-panel.js +63 -0
- package/dist/runtime-data-flow-panel.js +3 -3
- package/dist/runtime-data-flow-prelude.js +1 -1
- package/dist/runtime-external-handoff-panel.js +5 -5
- package/package.json +6 -6
package/dist/index.cjs.map
CHANGED
|
@@ -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 { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type ResolvedSpotPatchOptions,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin, type ViteDevServer } 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}`;\nexport const SPOTPATCH_MOTION_MODULE_ID = \"virtual:spotpatch/motion\";\nexport const RESOLVED_SPOTPATCH_MOTION_MODULE_ID = `\\0${SPOTPATCH_MOTION_MODULE_ID}`;\n\nconst RUNTIME_BUNDLE_NAMES = [\n \"client\",\n \"dataFlowPanel\",\n \"dataFlowPrelude\",\n \"externalHandoffPanel\",\n \"motion\",\n \"reactAdapter\",\n] as const;\n\ntype RuntimeBundleName = (typeof RUNTIME_BUNDLE_NAMES)[number];\n\ninterface RuntimeBundleDefinition {\n readonly enabled: (options: ResolvedSpotPatchOptions) => boolean;\n readonly fileName: string;\n readonly importer?: string;\n readonly publicId: string;\n readonly resolvedId: string;\n}\n\ninterface RuntimeBundleState {\n cached?: string;\n readonly injected?: string;\n path?: string;\n}\n\nconst RUNTIME_BUNDLE_DEFINITIONS: Readonly<\n Record<RuntimeBundleName, RuntimeBundleDefinition>\n> = Object.freeze({\n client: {\n enabled: () => true,\n fileName: \"runtime-client.js\",\n publicId: SPOTPATCH_CLIENT_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID,\n },\n dataFlowPanel: {\n enabled: (options) => options.dataFlow.enabled,\n fileName: \"runtime-data-flow-panel.js\",\n publicId: SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID,\n },\n dataFlowPrelude: {\n enabled: (options) => options.dataFlow.enabled,\n fileName: \"runtime-data-flow-prelude.js\",\n publicId: SPOTPATCH_DATA_FLOW_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID,\n },\n externalHandoffPanel: {\n enabled: (options) => options.externalAgent.enabled,\n fileName: \"runtime-external-handoff-panel.js\",\n publicId: SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID,\n },\n motion: {\n enabled: () => true,\n fileName: \"runtime-motion.js\",\n publicId: SPOTPATCH_MOTION_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_MOTION_MODULE_ID,\n },\n reactAdapter: {\n enabled: () => true,\n fileName: \"runtime-react-adapter.js\",\n importer: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID,\n publicId: \"@spotpatch/react-adapter\",\n resolvedId: RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID,\n },\n});\n\ninterface RuntimeInjectionPluginInput {\n readonly bundlePaths?: Partial<Readonly<Record<RuntimeBundleName, string>>>;\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly motionBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createBundleState(injected: string | undefined): RuntimeBundleState {\n return injected === undefined ? {} : { injected };\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 resolveRuntimeBundlePath(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n return path.join(path.dirname(packageEntry), fileName);\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 `import ${JSON.stringify(SPOTPATCH_MOTION_MODULE_ID)};`,\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 viteVersion = VITE_VERSION;\n let disposeWatcher: (() => void) | undefined;\n const bundleStates: Record<RuntimeBundleName, RuntimeBundleState> = {\n client: createBundleState(input.clientBundle),\n dataFlowPanel: createBundleState(input.dataFlowPanelBundle),\n dataFlowPrelude: createBundleState(input.dataFlowPreludeBundle),\n externalHandoffPanel: createBundleState(input.externalHandoffPanelBundle),\n motion: createBundleState(input.motionBundle),\n reactAdapter: createBundleState(input.reactAdapterBundle),\n };\n\n function getBundlePath(name: RuntimeBundleName): string {\n const state = bundleStates[name];\n state.path ??= path.resolve(\n input.bundlePaths?.[name] ??\n resolveRuntimeBundlePath(root, RUNTIME_BUNDLE_DEFINITIONS[name].fileName),\n );\n return state.path;\n }\n\n function loadBundle(name: RuntimeBundleName): string {\n const state = bundleStates[name];\n if (state.injected !== undefined) return state.injected;\n state.cached ??= readFileSync(getBundlePath(name), \"utf8\");\n return state.cached;\n }\n\n function stopWatching(): void {\n disposeWatcher?.();\n }\n\n function watchRuntimeBundles(server: ViteDevServer): void {\n stopWatching();\n const options = input.context.getOptions();\n const bundleNameByPath = new Map<string, RuntimeBundleName>();\n\n for (const name of RUNTIME_BUNDLE_NAMES) {\n if (\n RUNTIME_BUNDLE_DEFINITIONS[name].enabled(options) &&\n bundleStates[name].injected === undefined\n ) {\n bundleNameByPath.set(getBundlePath(name), name);\n }\n }\n\n const bundlePaths = [...bundleNameByPath.keys()];\n if (bundlePaths.length === 0) return;\n\n let reloadHandle: NodeJS.Immediate | undefined;\n const scheduleReload = (): void => {\n reloadHandle ??= setImmediate(() => {\n reloadHandle = undefined;\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n });\n };\n\n const handleChange = (changedPath: string): void => {\n const name = bundleNameByPath.get(path.resolve(changedPath));\n if (name === undefined) return;\n\n delete bundleStates[name].cached;\n const module = server.moduleGraph.getModuleById(\n RUNTIME_BUNDLE_DEFINITIONS[name].resolvedId,\n );\n if (module !== undefined) {\n server.moduleGraph.invalidateModule(module);\n }\n scheduleReload();\n };\n const dispose = (): void => {\n if (reloadHandle !== undefined) {\n clearImmediate(reloadHandle);\n reloadHandle = undefined;\n }\n server.watcher.off(\"change\", handleChange);\n server.httpServer?.off(\"close\", dispose);\n if (disposeWatcher === dispose) disposeWatcher = undefined;\n };\n\n server.watcher.add(bundlePaths);\n server.watcher.on(\"change\", handleChange);\n server.httpServer?.once(\"close\", dispose);\n disposeWatcher = dispose;\n }\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 configureServer(server) {\n watchRuntimeBundles(server);\n },\n\n resolveId(id, importer) {\n for (const name of RUNTIME_BUNDLE_NAMES) {\n const definition = RUNTIME_BUNDLE_DEFINITIONS[name];\n if (\n id === definition.publicId &&\n (definition.importer === undefined || importer === definition.importer)\n ) {\n return definition.resolvedId;\n }\n }\n return null;\n },\n\n load(id) {\n for (const name of RUNTIME_BUNDLE_NAMES) {\n const definition = RUNTIME_BUNDLE_DEFINITIONS[name];\n if (id !== definition.resolvedId) continue;\n if (!definition.enabled(input.context.getOptions())) return null;\n\n const bundle = loadBundle(name);\n if (name === \"client\") {\n return createClientModule(input, bundle, viteVersion);\n }\n if (name === \"dataFlowPrelude\") {\n return createDataFlowPreludeModule(input, bundle);\n }\n return bundle;\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 closeBundle() {\n stopWatching();\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.13.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\": \"pnpm clean && tsup --config tsup.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"dev\": \"tsup --config tsup.config.ts --watch src --watch tsup.config.ts --watch ../runtime/dist/index.js --watch ../react-adapter/dist/index.js --watch ../shared/dist/index.js\",\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","module","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 { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type ResolvedSpotPatchOptions,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin, type ViteDevServer } 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}`;\nexport const SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID =\n \"virtual:spotpatch/contextual-ask-panel\";\nexport const RESOLVED_SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID = `\\0${SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID}`;\nexport const SPOTPATCH_MOTION_MODULE_ID = \"virtual:spotpatch/motion\";\nexport const RESOLVED_SPOTPATCH_MOTION_MODULE_ID = `\\0${SPOTPATCH_MOTION_MODULE_ID}`;\n\nconst RUNTIME_BUNDLE_NAMES = [\n \"client\",\n \"contextualAskPanel\",\n \"dataFlowPanel\",\n \"dataFlowPrelude\",\n \"externalHandoffPanel\",\n \"motion\",\n \"reactAdapter\",\n] as const;\n\ntype RuntimeBundleName = (typeof RUNTIME_BUNDLE_NAMES)[number];\n\ninterface RuntimeBundleDefinition {\n readonly enabled: (options: ResolvedSpotPatchOptions) => boolean;\n readonly fileName: string;\n readonly importer?: string;\n readonly publicId: string;\n readonly resolvedId: string;\n}\n\ninterface RuntimeBundleState {\n cached?: string;\n readonly injected?: string;\n path?: string;\n}\n\nconst RUNTIME_BUNDLE_DEFINITIONS: Readonly<\n Record<RuntimeBundleName, RuntimeBundleDefinition>\n> = Object.freeze({\n client: {\n enabled: () => true,\n fileName: \"runtime-client.js\",\n publicId: SPOTPATCH_CLIENT_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID,\n },\n contextualAskPanel: {\n enabled: (options) => options.contextualAsk.enabled,\n fileName: \"runtime-contextual-ask-panel.js\",\n publicId: SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID,\n },\n dataFlowPanel: {\n enabled: (options) => options.dataFlow.enabled,\n fileName: \"runtime-data-flow-panel.js\",\n publicId: SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID,\n },\n dataFlowPrelude: {\n enabled: (options) => options.dataFlow.enabled,\n fileName: \"runtime-data-flow-prelude.js\",\n publicId: SPOTPATCH_DATA_FLOW_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID,\n },\n externalHandoffPanel: {\n enabled: (options) => options.externalAgent.enabled,\n fileName: \"runtime-external-handoff-panel.js\",\n publicId: SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID,\n },\n motion: {\n enabled: () => true,\n fileName: \"runtime-motion.js\",\n publicId: SPOTPATCH_MOTION_MODULE_ID,\n resolvedId: RESOLVED_SPOTPATCH_MOTION_MODULE_ID,\n },\n reactAdapter: {\n enabled: () => true,\n fileName: \"runtime-react-adapter.js\",\n importer: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID,\n publicId: \"@spotpatch/react-adapter\",\n resolvedId: RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID,\n },\n});\n\ninterface RuntimeInjectionPluginInput {\n readonly bundlePaths?: Partial<Readonly<Record<RuntimeBundleName, string>>>;\n readonly clientBundle?: string;\n readonly contextualAskPanelBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly motionBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createBundleState(injected: string | undefined): RuntimeBundleState {\n return injected === undefined ? {} : { injected };\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 resolveRuntimeBundlePath(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n return path.join(path.dirname(packageEntry), fileName);\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 contextualAsk: Object.freeze({ enabled: options.contextualAsk.enabled }),\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 `import ${JSON.stringify(SPOTPATCH_MOTION_MODULE_ID)};`,\n ...(options.contextualAsk.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID)};`]\n : []),\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 viteVersion = VITE_VERSION;\n let disposeWatcher: (() => void) | undefined;\n const bundleStates: Record<RuntimeBundleName, RuntimeBundleState> = {\n client: createBundleState(input.clientBundle),\n contextualAskPanel: createBundleState(input.contextualAskPanelBundle),\n dataFlowPanel: createBundleState(input.dataFlowPanelBundle),\n dataFlowPrelude: createBundleState(input.dataFlowPreludeBundle),\n externalHandoffPanel: createBundleState(input.externalHandoffPanelBundle),\n motion: createBundleState(input.motionBundle),\n reactAdapter: createBundleState(input.reactAdapterBundle),\n };\n\n function getBundlePath(name: RuntimeBundleName): string {\n const state = bundleStates[name];\n state.path ??= path.resolve(\n input.bundlePaths?.[name] ??\n resolveRuntimeBundlePath(root, RUNTIME_BUNDLE_DEFINITIONS[name].fileName),\n );\n return state.path;\n }\n\n function loadBundle(name: RuntimeBundleName): string {\n const state = bundleStates[name];\n if (state.injected !== undefined) return state.injected;\n state.cached ??= readFileSync(getBundlePath(name), \"utf8\");\n return state.cached;\n }\n\n function stopWatching(): void {\n disposeWatcher?.();\n }\n\n function watchRuntimeBundles(server: ViteDevServer): void {\n stopWatching();\n const options = input.context.getOptions();\n const bundleNameByPath = new Map<string, RuntimeBundleName>();\n\n for (const name of RUNTIME_BUNDLE_NAMES) {\n if (\n RUNTIME_BUNDLE_DEFINITIONS[name].enabled(options) &&\n bundleStates[name].injected === undefined\n ) {\n bundleNameByPath.set(getBundlePath(name), name);\n }\n }\n\n const bundlePaths = [...bundleNameByPath.keys()];\n if (bundlePaths.length === 0) return;\n\n let reloadHandle: NodeJS.Immediate | undefined;\n const scheduleReload = (): void => {\n reloadHandle ??= setImmediate(() => {\n reloadHandle = undefined;\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n });\n };\n\n const handleChange = (changedPath: string): void => {\n const name = bundleNameByPath.get(path.resolve(changedPath));\n if (name === undefined) return;\n\n delete bundleStates[name].cached;\n const module = server.moduleGraph.getModuleById(\n RUNTIME_BUNDLE_DEFINITIONS[name].resolvedId,\n );\n if (module !== undefined) {\n server.moduleGraph.invalidateModule(module);\n }\n scheduleReload();\n };\n const dispose = (): void => {\n if (reloadHandle !== undefined) {\n clearImmediate(reloadHandle);\n reloadHandle = undefined;\n }\n server.watcher.off(\"change\", handleChange);\n server.httpServer?.off(\"close\", dispose);\n if (disposeWatcher === dispose) disposeWatcher = undefined;\n };\n\n server.watcher.add(bundlePaths);\n server.watcher.on(\"change\", handleChange);\n server.httpServer?.once(\"close\", dispose);\n disposeWatcher = dispose;\n }\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 configureServer(server) {\n watchRuntimeBundles(server);\n },\n\n resolveId(id, importer) {\n for (const name of RUNTIME_BUNDLE_NAMES) {\n const definition = RUNTIME_BUNDLE_DEFINITIONS[name];\n if (\n id === definition.publicId &&\n (definition.importer === undefined || importer === definition.importer)\n ) {\n return definition.resolvedId;\n }\n }\n return null;\n },\n\n load(id) {\n for (const name of RUNTIME_BUNDLE_NAMES) {\n const definition = RUNTIME_BUNDLE_DEFINITIONS[name];\n if (id !== definition.resolvedId) continue;\n if (!definition.enabled(input.context.getOptions())) return null;\n\n const bundle = loadBundle(name);\n if (name === \"client\") {\n return createClientModule(input, bundle, viteVersion);\n }\n if (name === \"dataFlowPrelude\") {\n return createDataFlowPreludeModule(input, bundle);\n }\n return bundle;\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 closeBundle() {\n stopWatching();\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.15.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\": \"pnpm clean && tsup --config tsup.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"dev\": \"tsup --config tsup.config.ts --watch src --watch tsup.config.ts --watch ../runtime/dist/index.js --watch ../react-adapter/dist/index.js --watch ../shared/dist/index.js\",\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\";\nimport {\n createDevelopmentSession,\n type DevelopmentSession,\n type SourceRegistry,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport {\n createManagedCodexAskExecutor,\n createExternalAgentSupervisor,\n} from \"@spotpatch/bridge\";\nimport type { Plugin } from \"vite\";\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 services: DevelopmentSession | undefined;\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n async configureServer(server) {\n const root = path.resolve(server.config.root);\n const options = input.context.getOptions();\n const active = await createDevelopmentSession({\n root,\n options,\n registry: input.registry,\n session: input.session,\n framework: \"vite\",\n environment: input.context.getCredentialEnvironment(),\n logger: server.config.logger,\n createManagedAskExecutor: () =>\n createManagedCodexAskExecutor({ projectRoot: root }),\n createExternalAgentControl: (validation) =>\n createExternalAgentSupervisor({\n bridgeAdapter: \"vite\",\n ...validation,\n root,\n sessionId: input.session.id,\n projectLabel: path.basename(root),\n }),\n });\n services = active;\n server.middlewares.use(active.middleware);\n server.httpServer?.once(\"close\", () => {\n void active.close().catch(() => {\n server.config.logger.warn(\"[spotpatch:vite] Service cleanup failed.\");\n });\n });\n server.config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n async closeBundle() {\n await services?.close();\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,oBAAiB;AAEjB,IAAAC,qBAOO;AACP,IAAAC,eAAsE;;;ACVtE,qBAA6B;AAC7B,yBAA8B;AAC9B,uBAAiB;AAEjB,wBAKO;;;ACTP;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,KAAO;AAAA,IACP,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,kBAAyE;;;AELlE,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;;;AFU3B,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;AAC3G,IAAM,2CACX;AACK,IAAM,oDAAoD,KAAK,wCAAwC;AACvG,IAAM,6BAA6B;AACnC,IAAM,sCAAsC,KAAK,0BAA0B;AAElF,IAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAkBA,IAAM,6BAEF,OAAO,OAAO;AAAA,EAChB,QAAQ;AAAA,IACN,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,oBAAoB;AAAA,IAClB,SAAS,CAAC,YAAY,QAAQ,cAAc;AAAA,IAC5C,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,SAAS,CAAC,YAAY,QAAQ,SAAS;AAAA,IACvC,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS,CAAC,YAAY,QAAQ,SAAS;AAAA,IACvC,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS,CAAC,YAAY,QAAQ,cAAc;AAAA,IAC5C,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF,CAAC;AAeD,SAAS,kBAAkB,UAAkD;AAC3E,SAAO,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAClD;AAEA,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,yBAAyB,MAAc,UAA0B;AACxE,QAAM,yBAAqB,kCAAc,iBAAAC,QAAK,KAAK,MAAM,cAAc,CAAC;AACxE,QAAM,eAAe,mBAAmB,QAAQ,iBAAiB;AACjE,SAAO,iBAAAA,QAAK,KAAK,iBAAAA,QAAK,QAAQ,YAAY,GAAG,QAAQ;AACvD;AAEA,SAAS,wBAAwB,MAAsB;AACrD,MAAI;AACF,UAAM,yBAAqB,kCAAc,iBAAAA,QAAK,KAAK,MAAM,cAAc,CAAC;AACxE,UAAM,eAAe,mBAAmB,QAAQ,mBAAmB;AACnE,UAAM,WAAW,KAAK,UAAM,6BAAa,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,YAAAC;AACT;AAEA,SAAS,mBACP,OACA,cACA,aACQ;AACR,QAAM,UAAU,MAAM,QAAQ,WAAW;AACzC,QAAM,gBAAgB;AAAA,IACpB,QAAI,yCAAsB,QAAQ,EAAE;AAAA,IACpC,QAAQ,QAAQ;AAAA,IAChB,eAAe,OAAO,OAAO,EAAE,SAAS,QAAQ,cAAc,QAAQ,CAAC;AAAA,IACvE,cAAU,+CAA4B,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,UAAU,KAAK,UAAU,0BAA0B,CAAC;AAAA,IACpD,GAAI,QAAQ,cAAc,UACtB,CAAC,UAAU,KAAK,UAAU,wCAAwC,CAAC,GAAG,IACtE,CAAC;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,cAAc,YAAAA;AAClB,MAAI;AACJ,QAAM,eAA8D;AAAA,IAClE,QAAQ,kBAAkB,MAAM,YAAY;AAAA,IAC5C,oBAAoB,kBAAkB,MAAM,wBAAwB;AAAA,IACpE,eAAe,kBAAkB,MAAM,mBAAmB;AAAA,IAC1D,iBAAiB,kBAAkB,MAAM,qBAAqB;AAAA,IAC9D,sBAAsB,kBAAkB,MAAM,0BAA0B;AAAA,IACxE,QAAQ,kBAAkB,MAAM,YAAY;AAAA,IAC5C,cAAc,kBAAkB,MAAM,kBAAkB;AAAA,EAC1D;AAEA,WAAS,cAAc,MAAiC;AACtD,UAAM,QAAQ,aAAa,IAAI;AAC/B,UAAM,SAAS,iBAAAD,QAAK;AAAA,MAClB,MAAM,cAAc,IAAI,KACtB,yBAAyB,MAAM,2BAA2B,IAAI,EAAE,QAAQ;AAAA,IAC5E;AACA,WAAO,MAAM;AAAA,EACf;AAEA,WAAS,WAAW,MAAiC;AACnD,UAAM,QAAQ,aAAa,IAAI;AAC/B,QAAI,MAAM,aAAa,OAAW,QAAO,MAAM;AAC/C,UAAM,eAAW,6BAAa,cAAc,IAAI,GAAG,MAAM;AACzD,WAAO,MAAM;AAAA,EACf;AAEA,WAAS,eAAqB;AAC5B,qBAAiB;AAAA,EACnB;AAEA,WAAS,oBAAoB,QAA6B;AACxD,iBAAa;AACb,UAAM,UAAU,MAAM,QAAQ,WAAW;AACzC,UAAM,mBAAmB,oBAAI,IAA+B;AAE5D,eAAW,QAAQ,sBAAsB;AACvC,UACE,2BAA2B,IAAI,EAAE,QAAQ,OAAO,KAChD,aAAa,IAAI,EAAE,aAAa,QAChC;AACA,yBAAiB,IAAI,cAAc,IAAI,GAAG,IAAI;AAAA,MAChD;AAAA,IACF;AAEA,UAAM,cAAc,CAAC,GAAG,iBAAiB,KAAK,CAAC;AAC/C,QAAI,YAAY,WAAW,EAAG;AAE9B,QAAI;AACJ,UAAM,iBAAiB,MAAY;AACjC,uBAAiB,aAAa,MAAM;AAClC,uBAAe;AACf,eAAO,GAAG,KAAK,EAAE,MAAM,eAAe,MAAM,IAAI,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,CAAC,gBAA8B;AAClD,YAAM,OAAO,iBAAiB,IAAI,iBAAAA,QAAK,QAAQ,WAAW,CAAC;AAC3D,UAAI,SAAS,OAAW;AAExB,aAAO,aAAa,IAAI,EAAE;AAC1B,YAAME,UAAS,OAAO,YAAY;AAAA,QAChC,2BAA2B,IAAI,EAAE;AAAA,MACnC;AACA,UAAIA,YAAW,QAAW;AACxB,eAAO,YAAY,iBAAiBA,OAAM;AAAA,MAC5C;AACA,qBAAe;AAAA,IACjB;AACA,UAAM,UAAU,MAAY;AAC1B,UAAI,iBAAiB,QAAW;AAC9B,uBAAe,YAAY;AAC3B,uBAAe;AAAA,MACjB;AACA,aAAO,QAAQ,IAAI,UAAU,YAAY;AACzC,aAAO,YAAY,IAAI,SAAS,OAAO;AACvC,UAAI,mBAAmB,QAAS,kBAAiB;AAAA,IACnD;AAEA,WAAO,QAAQ,IAAI,WAAW;AAC9B,WAAO,QAAQ,GAAG,UAAU,YAAY;AACxC,WAAO,YAAY,KAAK,SAAS,OAAO;AACxC,qBAAiB;AAAA,EACnB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,eAAe,QAAQ;AACrB,aAAO,iBAAAF,QAAK,QAAQ,OAAO,IAAI;AAC/B,oBAAc,wBAAwB,IAAI;AAAA,IAC5C;AAAA,IAEA,gBAAgB,QAAQ;AACtB,0BAAoB,MAAM;AAAA,IAC5B;AAAA,IAEA,UAAU,IAAI,UAAU;AACtB,iBAAW,QAAQ,sBAAsB;AACvC,cAAM,aAAa,2BAA2B,IAAI;AAClD,YACE,OAAO,WAAW,aACjB,WAAW,aAAa,UAAa,aAAa,WAAW,WAC9D;AACA,iBAAO,WAAW;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,IAAI;AACP,iBAAW,QAAQ,sBAAsB;AACvC,cAAM,aAAa,2BAA2B,IAAI;AAClD,YAAI,OAAO,WAAW,WAAY;AAClC,YAAI,CAAC,WAAW,QAAQ,MAAM,QAAQ,WAAW,CAAC,EAAG,QAAO;AAE5D,cAAM,SAAS,WAAW,IAAI;AAC9B,YAAI,SAAS,UAAU;AACrB,iBAAO,mBAAmB,OAAO,QAAQ,WAAW;AAAA,QACtD;AACA,YAAI,SAAS,mBAAmB;AAC9B,iBAAO,4BAA4B,OAAO,MAAM;AAAA,QAClD;AACA,eAAO;AAAA,MACT;AACA,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,IAEA,cAAc;AACZ,mBAAa;AAAA,IACf;AAAA,EACF;AACF;;;AGhXA,IAAAG,oBAAiB;AACjB,IAAAC,qBAKO;AACP,oBAGO;AAUA,SAAS,mBAAmB,OAAkC;AACnE,MAAI;AACJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM,gBAAgB,QAAQ;AAC5B,YAAM,OAAO,kBAAAC,QAAK,QAAQ,OAAO,OAAO,IAAI;AAC5C,YAAM,UAAU,MAAM,QAAQ,WAAW;AACzC,YAAM,SAAS,UAAM,6CAAyB;AAAA,QAC5C;AAAA,QACA;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,SAAS,MAAM;AAAA,QACf,WAAW;AAAA,QACX,aAAa,MAAM,QAAQ,yBAAyB;AAAA,QACpD,QAAQ,OAAO,OAAO;AAAA,QACtB,0BAA0B,UACxB,6CAA8B,EAAE,aAAa,KAAK,CAAC;AAAA,QACrD,4BAA4B,CAAC,mBAC3B,6CAA8B;AAAA,UAC5B,eAAe;AAAA,UACf,GAAG;AAAA,UACH;AAAA,UACA,WAAW,MAAM,QAAQ;AAAA,UACzB,cAAc,kBAAAA,QAAK,SAAS,IAAI;AAAA,QAClC,CAAC;AAAA,MACL,CAAC;AACD,iBAAW;AACX,aAAO,YAAY,IAAI,OAAO,UAAU;AACxC,aAAO,YAAY,KAAK,SAAS,MAAM;AACrC,aAAK,OAAO,MAAM,EAAE,MAAM,MAAM;AAC9B,iBAAO,OAAO,OAAO,KAAK,0CAA0C;AAAA,QACtE,CAAC;AAAA,MACH,CAAC;AACD,aAAO,OAAO,OAAO;AAAA,QACnB,8CAA8C,QAAQ,QAAQ;AAAA,MAChE;AAAA,IACF;AAAA,IACA,MAAM,cAAc;AAClB,YAAM,UAAU,MAAM;AAAA,IACxB;AAAA,EACF;AACF;;;AC/DA,yBAA2B;AAC3B,IAAAC,oBAAiB;AAGjB,IAAAC,mBAAoC;;;ACJpC,IAAAC,oBAAiB;AAEjB,sBAA+D;AAQ/D,IAAAC,mBAA6B;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,mBAAe,oCAAmB,MAAM,OAAO;AACrD,QAAM,qBAAiB,4CAA2B,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,eAAe,kBAAAC,QAAK,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,WAAO,+BAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,WAAW;AACjE,SAAO,GAAG,EAAE,KAAK,IAAI;AACvB;AAEA,SAAS,eAAe,MAAc,IAAoB;AACxD,QAAM,WAAW,kBAAAC,QAAK,SAAS,MAAM,eAAe,EAAE,CAAC;AACvD,SAAO,SAAS,MAAM,kBAAAA,QAAK,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,aAAO,kBAAAA,QAAK,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,UAAU,kBAAAA,QAAK,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,aAAS,sCAAoB;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,cAAU,mCAAe,WAAW;AACxC,MAAI,wBACF,OAAO,OAAO,CAAC,CAAC;AAElB,MAAI,CAAC,QAAQ,SAAS;AACpB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,eAAW,yCAAqB;AACtC,QAAM,cAAU,kCAAc;AAC9B,QAAM,UAAU,OAAO,OAAO;AAAA,IAC5B,0BAA0B,MAAM;AAAA,IAChC,YAAY,MAAM;AAAA,EACpB,CAAkC;AAClC,QAAM,YAAY,OAChB,QACA,gBACkB;AAClB,UAAM,OAAO,kBAAAC,QAAK,QAAQ,QAAQ,IAAI,GAAG,OAAO,QAAQ,GAAG;AAC3D,UAAM,oBACJ,OAAO,WAAW,QACd,QAAQ,UACR,sBAAQ,YAAY,MAAM,kBAAAA,QAAK,QAAQ,MAAM,OAAO,UAAU,GAAG,GAAG,EAAE;AAC5E,UAAM,gBACJ,YAAY,OAAO,aACf,sDAAkC,iBAAiB,EAAE,KACrD;AAEN,cAAU,UAAM,0CAAsB;AAAA,MACpC,SAAS;AAAA,MACT;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,gCAAwB,iDAA6B,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,IAAAC,qBAKO;;;ARMP,oBAaO;","names":["import_node_path","import_dev_server","import_vite","path","VITE_VERSION","module","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.
|
|
25
|
+
version: "1.15.0",
|
|
26
26
|
description: "Vite development plugin for SpotPatch.",
|
|
27
27
|
license: "MIT",
|
|
28
28
|
repository: {
|
|
@@ -152,10 +152,13 @@ var SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = "virtual:spotpatch/data-flow-panel";
|
|
|
152
152
|
var RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;
|
|
153
153
|
var SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = "virtual:spotpatch/external-handoff-panel";
|
|
154
154
|
var RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;
|
|
155
|
+
var SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID = "virtual:spotpatch/contextual-ask-panel";
|
|
156
|
+
var RESOLVED_SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID = `\0${SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID}`;
|
|
155
157
|
var SPOTPATCH_MOTION_MODULE_ID = "virtual:spotpatch/motion";
|
|
156
158
|
var RESOLVED_SPOTPATCH_MOTION_MODULE_ID = `\0${SPOTPATCH_MOTION_MODULE_ID}`;
|
|
157
159
|
var RUNTIME_BUNDLE_NAMES = [
|
|
158
160
|
"client",
|
|
161
|
+
"contextualAskPanel",
|
|
159
162
|
"dataFlowPanel",
|
|
160
163
|
"dataFlowPrelude",
|
|
161
164
|
"externalHandoffPanel",
|
|
@@ -169,6 +172,12 @@ var RUNTIME_BUNDLE_DEFINITIONS = Object.freeze({
|
|
|
169
172
|
publicId: SPOTPATCH_CLIENT_MODULE_ID,
|
|
170
173
|
resolvedId: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID
|
|
171
174
|
},
|
|
175
|
+
contextualAskPanel: {
|
|
176
|
+
enabled: (options) => options.contextualAsk.enabled,
|
|
177
|
+
fileName: "runtime-contextual-ask-panel.js",
|
|
178
|
+
publicId: SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID,
|
|
179
|
+
resolvedId: RESOLVED_SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID
|
|
180
|
+
},
|
|
172
181
|
dataFlowPanel: {
|
|
173
182
|
enabled: (options) => options.dataFlow.enabled,
|
|
174
183
|
fileName: "runtime-data-flow-panel.js",
|
|
@@ -232,6 +241,7 @@ function createClientModule(input, clientBundle, viteVersion) {
|
|
|
232
241
|
const runtimeConfig = {
|
|
233
242
|
ai: createRuntimeAiConfig(options.ai),
|
|
234
243
|
budget: options.budget,
|
|
244
|
+
contextualAsk: Object.freeze({ enabled: options.contextualAsk.enabled }),
|
|
235
245
|
dataFlow: createRuntimeDataFlowConfig(options.dataFlow),
|
|
236
246
|
debug: options.debug,
|
|
237
247
|
editor: options.editor,
|
|
@@ -248,6 +258,7 @@ function createClientModule(input, clientBundle, viteVersion) {
|
|
|
248
258
|
};
|
|
249
259
|
return [
|
|
250
260
|
`import ${JSON.stringify(SPOTPATCH_MOTION_MODULE_ID)};`,
|
|
261
|
+
...options.contextualAsk.enabled ? [`import ${JSON.stringify(SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID)};`] : [],
|
|
251
262
|
...options.dataFlow.enabled ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`] : [],
|
|
252
263
|
...options.externalAgent.enabled ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`] : [],
|
|
253
264
|
`const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,
|
|
@@ -261,6 +272,7 @@ function createRuntimeInjectionPlugin(input) {
|
|
|
261
272
|
let disposeWatcher;
|
|
262
273
|
const bundleStates = {
|
|
263
274
|
client: createBundleState(input.clientBundle),
|
|
275
|
+
contextualAskPanel: createBundleState(input.contextualAskPanelBundle),
|
|
264
276
|
dataFlowPanel: createBundleState(input.dataFlowPanelBundle),
|
|
265
277
|
dataFlowPrelude: createBundleState(input.dataFlowPreludeBundle),
|
|
266
278
|
externalHandoffPanel: createBundleState(input.externalHandoffPanelBundle),
|
|
@@ -396,103 +408,51 @@ function createRuntimeInjectionPlugin(input) {
|
|
|
396
408
|
// src/server/server-plugin.ts
|
|
397
409
|
import path2 from "path";
|
|
398
410
|
import {
|
|
399
|
-
|
|
400
|
-
createExternalHandoffService,
|
|
401
|
-
createSpotPatchMiddleware,
|
|
402
|
-
resolveManagedExecutionValidation
|
|
411
|
+
createDevelopmentSession
|
|
403
412
|
} from "@spotpatch/dev-server";
|
|
404
413
|
import {
|
|
414
|
+
createManagedCodexAskExecutor,
|
|
405
415
|
createExternalAgentSupervisor
|
|
406
416
|
} from "@spotpatch/bridge";
|
|
407
417
|
function createServerPlugin(input) {
|
|
408
|
-
let
|
|
409
|
-
let externalHandoffService;
|
|
410
|
-
let externalAgentSupervisor;
|
|
411
|
-
let middleware;
|
|
412
|
-
let config;
|
|
413
|
-
const closeResources = async () => {
|
|
414
|
-
input.registry.clear();
|
|
415
|
-
middleware?.dispose();
|
|
416
|
-
middleware = void 0;
|
|
417
|
-
await externalAgentSupervisor?.dispose();
|
|
418
|
-
externalAgentSupervisor = void 0;
|
|
419
|
-
await externalHandoffService?.close();
|
|
420
|
-
externalHandoffService = void 0;
|
|
421
|
-
await agentManager?.close();
|
|
422
|
-
agentManager = void 0;
|
|
423
|
-
};
|
|
418
|
+
let services;
|
|
424
419
|
return {
|
|
425
420
|
name: "spotpatch:server",
|
|
426
421
|
apply: "serve",
|
|
427
422
|
enforce: "pre",
|
|
428
|
-
configResolved(resolvedConfig) {
|
|
429
|
-
config = resolvedConfig;
|
|
430
|
-
},
|
|
431
423
|
async configureServer(server) {
|
|
432
|
-
|
|
433
|
-
throw new Error("SpotPatch server initialized before Vite config resolution.");
|
|
434
|
-
}
|
|
435
|
-
const root = path2.resolve(config.root);
|
|
424
|
+
const root = path2.resolve(server.config.root);
|
|
436
425
|
const options = input.context.getOptions();
|
|
437
|
-
|
|
438
|
-
ai: options.ai,
|
|
439
|
-
environment: input.context.getCredentialEnvironment(),
|
|
440
|
-
root
|
|
441
|
-
});
|
|
442
|
-
externalHandoffService = options.externalAgent.enabled ? createExternalHandoffService({
|
|
443
|
-
framework: "vite",
|
|
426
|
+
const active = await createDevelopmentSession({
|
|
444
427
|
root,
|
|
445
|
-
sessionId: input.session.id
|
|
446
|
-
}) : void 0;
|
|
447
|
-
if (externalHandoffService !== void 0) {
|
|
448
|
-
try {
|
|
449
|
-
await externalHandoffService.start();
|
|
450
|
-
} catch {
|
|
451
|
-
config.logger.warn(
|
|
452
|
-
"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active."
|
|
453
|
-
);
|
|
454
|
-
}
|
|
455
|
-
if (externalHandoffService.capability().brokerReady) {
|
|
456
|
-
try {
|
|
457
|
-
const validation = await resolveManagedExecutionValidation({
|
|
458
|
-
ai: options.ai,
|
|
459
|
-
appRoot: root
|
|
460
|
-
});
|
|
461
|
-
externalAgentSupervisor = await createExternalAgentSupervisor({
|
|
462
|
-
bridgeAdapter: "vite",
|
|
463
|
-
checks: validation.checks,
|
|
464
|
-
limits: validation.limits,
|
|
465
|
-
root,
|
|
466
|
-
sessionId: input.session.id,
|
|
467
|
-
projectLabel: path2.basename(root)
|
|
468
|
-
});
|
|
469
|
-
} catch {
|
|
470
|
-
config.logger.warn(
|
|
471
|
-
"[spotpatch:vite] Managed Agent control is unavailable; Inbox remains active."
|
|
472
|
-
);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
middleware = createSpotPatchMiddleware({
|
|
477
|
-
...agentManager === void 0 ? {} : { agentManager },
|
|
478
|
-
...externalAgentSupervisor === void 0 ? {} : { externalAgentControl: externalAgentSupervisor },
|
|
479
|
-
...externalHandoffService === void 0 ? {} : { externalHandoffService },
|
|
480
428
|
options,
|
|
481
429
|
registry: input.registry,
|
|
482
|
-
root,
|
|
483
430
|
session: input.session,
|
|
484
|
-
|
|
431
|
+
framework: "vite",
|
|
432
|
+
environment: input.context.getCredentialEnvironment(),
|
|
433
|
+
logger: server.config.logger,
|
|
434
|
+
createManagedAskExecutor: () => createManagedCodexAskExecutor({ projectRoot: root }),
|
|
435
|
+
createExternalAgentControl: (validation) => createExternalAgentSupervisor({
|
|
436
|
+
bridgeAdapter: "vite",
|
|
437
|
+
...validation,
|
|
438
|
+
root,
|
|
439
|
+
sessionId: input.session.id,
|
|
440
|
+
projectLabel: path2.basename(root)
|
|
441
|
+
})
|
|
485
442
|
});
|
|
486
|
-
|
|
443
|
+
services = active;
|
|
444
|
+
server.middlewares.use(active.middleware);
|
|
487
445
|
server.httpServer?.once("close", () => {
|
|
488
|
-
void
|
|
446
|
+
void active.close().catch(() => {
|
|
447
|
+
server.config.logger.warn("[spotpatch:vite] Service cleanup failed.");
|
|
448
|
+
});
|
|
489
449
|
});
|
|
490
|
-
config.logger.info(
|
|
450
|
+
server.config.logger.info(
|
|
491
451
|
`[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`
|
|
492
452
|
);
|
|
493
453
|
},
|
|
494
454
|
async closeBundle() {
|
|
495
|
-
await
|
|
455
|
+
await services?.close();
|
|
496
456
|
}
|
|
497
457
|
};
|
|
498
458
|
}
|