@spotpatch/vite 1.12.0 → 1.14.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 CHANGED
@@ -122,25 +122,24 @@ Enable the development-only UI explicitly:
122
122
  spotPatch({ externalAgent: true });
123
123
  ```
124
124
 
125
- Run setup and active commands from the exact canonical project root that owns the running Vite development session. Setup is a dry run without `--write`:
125
+ Managed Codex is owned by the ordinary Vite development server. Choose **Codex · managed**, click **Connect Codex**, and confirm the first project grant in the same `pnpm dev` terminal; no second connector command is part of the normal path. If compatibility or a required safety preflight fails, the UI remains on the Inbox fallback.
126
+
127
+ Run Claude attached and Inbox setup commands from the exact canonical project root that owns the running Vite development session. Setup is a dry run without `--write`:
126
128
 
127
129
  ```bash
128
130
  pnpm exec spotpatch-vite bridge setup --client claude --scope project --mode active --write
129
131
  MCP_PROTOCOL_NEGOTIATION=legacy claude --dangerously-load-development-channels server:spotpatch
130
132
 
131
- pnpm exec spotpatch-vite connect codex --allow-workspace-write
132
-
133
133
  pnpm exec spotpatch-vite bridge setup --client cursor --scope project --write
134
134
  ```
135
135
 
136
- The active command forms support an explicit session when `bridge sessions --json` reports multiple sessions for that exact root:
136
+ The attached command supports an explicit session when `bridge sessions --json` reports multiple sessions for that exact root:
137
137
 
138
138
  ```text
139
139
  spotpatch-vite bridge channel claude [--session <opaque-id>]
140
- spotpatch-vite connect codex --allow-workspace-write [--session <opaque-id>]
141
140
  ```
142
141
 
143
- The Claude legacy environment belongs on the Claude host process. Claude Channels are a Research Preview, work only while the Channel-enabled session is running, and provide no completion acknowledgement; completion depends on Claude calling the SpotPatch result tool. Codex active mode is zero-setup: the Connector injects the project-local SpotPatch MCP entry into its App Server thread and does not create or modify `.codex/config.toml`. Codex can still load other MCP servers already enabled by the user's normal Codex configuration. The Connector accepts exactly `codex-cli 0.149.0`. `bridge setup --client codex ...` remains available only for optional Inbox use; Cursor and all generic MCP hosts remain Inbox-only.
142
+ The Claude legacy environment belongs on the Claude host process. Claude Channels are a Research Preview, work only while the Channel-enabled session is running, and provide no completion acknowledgement; completion depends on Claude calling the SpotPatch result tool. The older `spotpatch-vite connect codex --allow-workspace-write [--session <opaque-id>]` command remains only as an advanced migration/diagnostic fallback. Codex stable versions from `0.149.0` onward are capability-checked against the schema generated by that exact CLI before the live protocol and security preflight; SpotPatch does not manage the Codex installation. Its attached direct-write behavior is not equivalent to managed isolation or validation. `bridge setup --client codex ...` remains available only for optional Inbox use; Cursor and all generic MCP hosts remain Inbox-only.
144
143
 
145
144
  This path is `local-validation`, not stable support. Automated fake-host and two-handoff tests exist, and a consecutive two-revision Codex flow has been manually validated on the recorded macOS/Next.js/Codex 0.149.0 environment. Real Claude Code consecutive delivery, repeatable real-host automation, and Windows process-tree cleanup remain `not-tested`; Cursor remains Inbox-only. See the [external Agent design and exact status](https://github.com/huanglvjing/spotpatch/blob/main/docs/%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88/%E5%A4%96%E9%83%A8Agent%E8%BF%9E%E6%8E%A5/00-%E7%B4%A2%E5%BC%95%E4%B8%8E%E5%86%B3%E7%AD%96%E6%91%98%E8%A6%81.md).
146
145
 
@@ -320,25 +319,24 @@ spotPatch({
320
319
  spotPatch({ externalAgent: true });
321
320
  ```
322
321
 
323
- 必须在当前 Vite dev Session 所属的精确 canonical 项目根执行 setup 和主动命令。setup 不带 `--write` 时只是 dry-run:
322
+ Codex managed 正常路径由普通 Vite 开发服务托管。在页面选择 **Codex · managed** 并点击 **连接 Codex**,首次项目授权在同一个 `pnpm dev` 终端确认;正常路径不需要第二条 Connector 命令。兼容性或必需安全预检不通过时,UI 保持 Inbox 降级,不会削弱权限配置。
323
+
324
+ Claude attached 与 Inbox setup 命令必须在当前 Vite dev Session 所属的精确 canonical 项目根执行。setup 不带 `--write` 时只是 dry-run:
324
325
 
325
326
  ```bash
326
327
  pnpm exec spotpatch-vite bridge setup --client claude --scope project --mode active --write
327
328
  MCP_PROTOCOL_NEGOTIATION=legacy claude --dangerously-load-development-channels server:spotpatch
328
329
 
329
- pnpm exec spotpatch-vite connect codex --allow-workspace-write
330
-
331
330
  pnpm exec spotpatch-vite bridge setup --client cursor --scope project --write
332
331
  ```
333
332
 
334
- 若 `bridge sessions --json` 报告该精确项目根有多个 Session,主动子命令支持显式选择:
333
+ 若 `bridge sessions --json` 报告该精确项目根有多个 Session,attached 子命令支持显式选择:
335
334
 
336
335
  ```text
337
336
  spotpatch-vite bridge channel claude [--session <opaque-id>]
338
- spotpatch-vite connect codex --allow-workspace-write [--session <opaque-id>]
339
337
  ```
340
338
 
341
- Claude legacy 环境变量必须设置在 Claude 宿主进程。Claude Channels 仍是 Research Preview,只在已启用 Channel 的会话运行时工作,且没有 completion ACK;完成状态依赖 Claude 调用 SpotPatch 结果 tool。Codex 主动模式为零配置:Connector 只把当前项目的 SpotPatch MCP 配置注入它拥有的 App Server thread,不创建也不修改 `.codex/config.toml`;Codex 仍可能按用户既有配置启动其他已启用 MCP server。Connector 当前只接受 `codex-cli 0.149.0`。`bridge setup --client codex ...` 仅保留为可选 Inbox 配置;Cursor 和所有普通 MCP 宿主仍为 Inbox-only。
339
+ Claude legacy 环境变量必须设置在 Claude 宿主进程。Claude Channels 仍是 Research Preview,只在已启用 Channel 的会话运行时工作,且没有 completion ACK;完成状态依赖 Claude 调用 SpotPatch 结果 tool。旧 `spotpatch-vite connect codex --allow-workspace-write [--session <opaque-id>]` 只保留为高级迁移/诊断回退。Codex 从稳定版 `0.149.0` 起,先用当前 CLI 生成的 Schema 校验固定协议子集,再执行真实协议与安全 preflight;SpotPatch 不管理 Codex 的安装或升级。attached 直接写入行为不等同于 managed 隔离与验证。`bridge setup --client codex ...` 仅保留为可选 Inbox 配置;Cursor 和所有普通 MCP 宿主仍为 Inbox-only。
342
340
 
343
341
  该链路当前只是 `local-validation`,不是稳定支持。仓库有假宿主和连续两 Handoff 自动化测试,并已在记录的 macOS/Next.js/Codex 0.149.0 环境人工验证连续两个 revision。真实 Claude Code 连续投递、可重复真实宿主自动化和 Windows 进程树清理仍为 `not-tested`;Cursor 保持 Inbox-only。准确边界见[外部 Agent 方案与实现状态](https://github.com/huanglvjing/spotpatch/blob/main/docs/%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88/%E5%A4%96%E9%83%A8Agent%E8%BF%9E%E6%8E%A5/00-%E7%B4%A2%E5%BC%95%E4%B8%8E%E5%86%B3%E7%AD%96%E6%91%98%E8%A6%81.md)。
344
342
 
package/dist/index.cjs CHANGED
@@ -43,15 +43,15 @@ var import_dev_server3 = require("@spotpatch/dev-server");
43
43
  var import_vite2 = require("vite");
44
44
 
45
45
  // src/runtime/runtime-injection-plugin.ts
46
- var import_node_module = require("module");
47
46
  var import_node_fs = require("fs");
47
+ var import_node_module = require("module");
48
48
  var import_node_path = __toESM(require("path"), 1);
49
49
  var import_dev_server = require("@spotpatch/dev-server");
50
50
 
51
51
  // package.json
52
52
  var package_default = {
53
53
  name: "@spotpatch/vite",
54
- version: "1.12.0",
54
+ version: "1.14.0",
55
55
  description: "Vite development plugin for SpotPatch.",
56
56
  license: "MIT",
57
57
  repository: {
@@ -97,8 +97,9 @@ var package_default = {
97
97
  }
98
98
  },
99
99
  scripts: {
100
- 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",
100
+ build: "pnpm clean && tsup --config tsup.config.ts",
101
101
  clean: `node --input-type=module -e "import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })"`,
102
+ 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",
102
103
  typecheck: "tsc --noEmit -p tsconfig.json"
103
104
  },
104
105
  dependencies: {
@@ -180,17 +181,77 @@ var SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = "virtual:spotpatch/data-flow-panel";
180
181
  var RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;
181
182
  var SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = "virtual:spotpatch/external-handoff-panel";
182
183
  var RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;
184
+ var SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID = "virtual:spotpatch/contextual-ask-panel";
185
+ var RESOLVED_SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID = `\0${SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID}`;
186
+ var SPOTPATCH_MOTION_MODULE_ID = "virtual:spotpatch/motion";
187
+ var RESOLVED_SPOTPATCH_MOTION_MODULE_ID = `\0${SPOTPATCH_MOTION_MODULE_ID}`;
188
+ var RUNTIME_BUNDLE_NAMES = [
189
+ "client",
190
+ "contextualAskPanel",
191
+ "dataFlowPanel",
192
+ "dataFlowPrelude",
193
+ "externalHandoffPanel",
194
+ "motion",
195
+ "reactAdapter"
196
+ ];
197
+ var RUNTIME_BUNDLE_DEFINITIONS = Object.freeze({
198
+ client: {
199
+ enabled: () => true,
200
+ fileName: "runtime-client.js",
201
+ publicId: SPOTPATCH_CLIENT_MODULE_ID,
202
+ resolvedId: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID
203
+ },
204
+ contextualAskPanel: {
205
+ enabled: (options) => options.contextualAsk.enabled,
206
+ fileName: "runtime-contextual-ask-panel.js",
207
+ publicId: SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID,
208
+ resolvedId: RESOLVED_SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID
209
+ },
210
+ dataFlowPanel: {
211
+ enabled: (options) => options.dataFlow.enabled,
212
+ fileName: "runtime-data-flow-panel.js",
213
+ publicId: SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID,
214
+ resolvedId: RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID
215
+ },
216
+ dataFlowPrelude: {
217
+ enabled: (options) => options.dataFlow.enabled,
218
+ fileName: "runtime-data-flow-prelude.js",
219
+ publicId: SPOTPATCH_DATA_FLOW_MODULE_ID,
220
+ resolvedId: RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID
221
+ },
222
+ externalHandoffPanel: {
223
+ enabled: (options) => options.externalAgent.enabled,
224
+ fileName: "runtime-external-handoff-panel.js",
225
+ publicId: SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID,
226
+ resolvedId: RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID
227
+ },
228
+ motion: {
229
+ enabled: () => true,
230
+ fileName: "runtime-motion.js",
231
+ publicId: SPOTPATCH_MOTION_MODULE_ID,
232
+ resolvedId: RESOLVED_SPOTPATCH_MOTION_MODULE_ID
233
+ },
234
+ reactAdapter: {
235
+ enabled: () => true,
236
+ fileName: "runtime-react-adapter.js",
237
+ importer: RESOLVED_SPOTPATCH_CLIENT_MODULE_ID,
238
+ publicId: "@spotpatch/react-adapter",
239
+ resolvedId: RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID
240
+ }
241
+ });
242
+ function createBundleState(injected) {
243
+ return injected === void 0 ? {} : { injected };
244
+ }
183
245
  function createDataFlowPreludeModule(input, bundle) {
184
246
  return [
185
247
  `const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,
186
248
  bundle
187
249
  ].join("\n");
188
250
  }
189
- function readRuntimeBundle(root, fileName) {
251
+ function resolveRuntimeBundlePath(root, fileName) {
190
252
  const resolveFromProject = (0, import_node_module.createRequire)(import_node_path.default.join(root, "package.json"));
191
253
  const packageEntry = resolveFromProject.resolve("@spotpatch/vite");
192
- const bundlePath = import_node_path.default.join(import_node_path.default.dirname(packageEntry), fileName);
193
- return (0, import_node_fs.readFileSync)(bundlePath, "utf8");
254
+ return import_node_path.default.join(import_node_path.default.dirname(packageEntry), fileName);
194
255
  }
195
256
  function readConsumerViteVersion(root) {
196
257
  try {
@@ -209,6 +270,7 @@ function createClientModule(input, clientBundle, viteVersion) {
209
270
  const runtimeConfig = {
210
271
  ai: (0, import_dev_server.createRuntimeAiConfig)(options.ai),
211
272
  budget: options.budget,
273
+ contextualAsk: Object.freeze({ enabled: options.contextualAsk.enabled }),
212
274
  dataFlow: (0, import_dev_server.createRuntimeDataFlowConfig)(options.dataFlow),
213
275
  debug: options.debug,
214
276
  editor: options.editor,
@@ -224,6 +286,8 @@ function createClientModule(input, clientBundle, viteVersion) {
224
286
  spotPatchVersion: package_default.version
225
287
  };
226
288
  return [
289
+ `import ${JSON.stringify(SPOTPATCH_MOTION_MODULE_ID)};`,
290
+ ...options.contextualAsk.enabled ? [`import ${JSON.stringify(SPOTPATCH_CONTEXTUAL_ASK_PANEL_MODULE_ID)};`] : [],
227
291
  ...options.dataFlow.enabled ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`] : [],
228
292
  ...options.externalAgent.enabled ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`] : [],
229
293
  `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,
@@ -233,11 +297,77 @@ function createClientModule(input, clientBundle, viteVersion) {
233
297
  }
234
298
  function createRuntimeInjectionPlugin(input) {
235
299
  let root = process.cwd();
236
- let clientBundle = input.clientBundle;
237
- let dataFlowPreludeBundle = input.dataFlowPreludeBundle;
238
- let dataFlowPanelBundle = input.dataFlowPanelBundle;
239
- let externalHandoffPanelBundle = input.externalHandoffPanelBundle;
240
300
  let viteVersion = import_vite.version;
301
+ let disposeWatcher;
302
+ const bundleStates = {
303
+ client: createBundleState(input.clientBundle),
304
+ contextualAskPanel: createBundleState(input.contextualAskPanelBundle),
305
+ dataFlowPanel: createBundleState(input.dataFlowPanelBundle),
306
+ dataFlowPrelude: createBundleState(input.dataFlowPreludeBundle),
307
+ externalHandoffPanel: createBundleState(input.externalHandoffPanelBundle),
308
+ motion: createBundleState(input.motionBundle),
309
+ reactAdapter: createBundleState(input.reactAdapterBundle)
310
+ };
311
+ function getBundlePath(name) {
312
+ const state = bundleStates[name];
313
+ state.path ??= import_node_path.default.resolve(
314
+ input.bundlePaths?.[name] ?? resolveRuntimeBundlePath(root, RUNTIME_BUNDLE_DEFINITIONS[name].fileName)
315
+ );
316
+ return state.path;
317
+ }
318
+ function loadBundle(name) {
319
+ const state = bundleStates[name];
320
+ if (state.injected !== void 0) return state.injected;
321
+ state.cached ??= (0, import_node_fs.readFileSync)(getBundlePath(name), "utf8");
322
+ return state.cached;
323
+ }
324
+ function stopWatching() {
325
+ disposeWatcher?.();
326
+ }
327
+ function watchRuntimeBundles(server) {
328
+ stopWatching();
329
+ const options = input.context.getOptions();
330
+ const bundleNameByPath = /* @__PURE__ */ new Map();
331
+ for (const name of RUNTIME_BUNDLE_NAMES) {
332
+ if (RUNTIME_BUNDLE_DEFINITIONS[name].enabled(options) && bundleStates[name].injected === void 0) {
333
+ bundleNameByPath.set(getBundlePath(name), name);
334
+ }
335
+ }
336
+ const bundlePaths = [...bundleNameByPath.keys()];
337
+ if (bundlePaths.length === 0) return;
338
+ let reloadHandle;
339
+ const scheduleReload = () => {
340
+ reloadHandle ??= setImmediate(() => {
341
+ reloadHandle = void 0;
342
+ server.ws.send({ type: "full-reload", path: "*" });
343
+ });
344
+ };
345
+ const handleChange = (changedPath) => {
346
+ const name = bundleNameByPath.get(import_node_path.default.resolve(changedPath));
347
+ if (name === void 0) return;
348
+ delete bundleStates[name].cached;
349
+ const module2 = server.moduleGraph.getModuleById(
350
+ RUNTIME_BUNDLE_DEFINITIONS[name].resolvedId
351
+ );
352
+ if (module2 !== void 0) {
353
+ server.moduleGraph.invalidateModule(module2);
354
+ }
355
+ scheduleReload();
356
+ };
357
+ const dispose = () => {
358
+ if (reloadHandle !== void 0) {
359
+ clearImmediate(reloadHandle);
360
+ reloadHandle = void 0;
361
+ }
362
+ server.watcher.off("change", handleChange);
363
+ server.httpServer?.off("close", dispose);
364
+ if (disposeWatcher === dispose) disposeWatcher = void 0;
365
+ };
366
+ server.watcher.add(bundlePaths);
367
+ server.watcher.on("change", handleChange);
368
+ server.httpServer?.once("close", dispose);
369
+ disposeWatcher = dispose;
370
+ }
241
371
  return {
242
372
  name: "spotpatch:runtime-injection",
243
373
  apply: "serve",
@@ -246,52 +376,31 @@ function createRuntimeInjectionPlugin(input) {
246
376
  root = import_node_path.default.resolve(config.root);
247
377
  viteVersion = readConsumerViteVersion(root);
248
378
  },
379
+ configureServer(server) {
380
+ watchRuntimeBundles(server);
381
+ },
249
382
  resolveId(id, importer) {
250
- if (id === SPOTPATCH_CLIENT_MODULE_ID) {
251
- return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;
252
- }
253
- if (id === "@spotpatch/react-adapter" && importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {
254
- return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;
255
- }
256
- if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {
257
- return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;
258
- }
259
- if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {
260
- return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;
261
- }
262
- if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {
263
- return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;
383
+ for (const name of RUNTIME_BUNDLE_NAMES) {
384
+ const definition = RUNTIME_BUNDLE_DEFINITIONS[name];
385
+ if (id === definition.publicId && (definition.importer === void 0 || importer === definition.importer)) {
386
+ return definition.resolvedId;
387
+ }
264
388
  }
265
389
  return null;
266
390
  },
267
391
  load(id) {
268
- if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {
269
- clientBundle ??= readRuntimeBundle(root, "runtime-client.js");
270
- return createClientModule(input, clientBundle, viteVersion);
271
- }
272
- if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {
273
- return input.reactAdapterBundle ?? readRuntimeBundle(root, "runtime-react-adapter.js");
274
- }
275
- if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {
276
- if (!input.context.getOptions().dataFlow.enabled) return null;
277
- dataFlowPreludeBundle ??= readRuntimeBundle(
278
- root,
279
- "runtime-data-flow-prelude.js"
280
- );
281
- return createDataFlowPreludeModule(input, dataFlowPreludeBundle);
282
- }
283
- if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {
284
- if (!input.context.getOptions().dataFlow.enabled) return null;
285
- dataFlowPanelBundle ??= readRuntimeBundle(root, "runtime-data-flow-panel.js");
286
- return dataFlowPanelBundle;
287
- }
288
- if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {
289
- if (!input.context.getOptions().externalAgent.enabled) return null;
290
- externalHandoffPanelBundle ??= readRuntimeBundle(
291
- root,
292
- "runtime-external-handoff-panel.js"
293
- );
294
- return externalHandoffPanelBundle;
392
+ for (const name of RUNTIME_BUNDLE_NAMES) {
393
+ const definition = RUNTIME_BUNDLE_DEFINITIONS[name];
394
+ if (id !== definition.resolvedId) continue;
395
+ if (!definition.enabled(input.context.getOptions())) return null;
396
+ const bundle = loadBundle(name);
397
+ if (name === "client") {
398
+ return createClientModule(input, bundle, viteVersion);
399
+ }
400
+ if (name === "dataFlowPrelude") {
401
+ return createDataFlowPreludeModule(input, bundle);
402
+ }
403
+ return bundle;
295
404
  }
296
405
  return null;
297
406
  },
@@ -318,6 +427,9 @@ function createRuntimeInjectionPlugin(input) {
318
427
  },
319
428
  client
320
429
  ];
430
+ },
431
+ closeBundle() {
432
+ stopWatching();
321
433
  }
322
434
  };
323
435
  }
@@ -328,12 +440,12 @@ var import_dev_server2 = require("@spotpatch/dev-server");
328
440
  var import_bridge = require("@spotpatch/bridge");
329
441
  function createServerPlugin(input) {
330
442
  let agentManager;
443
+ let contextualAskManager;
331
444
  let externalHandoffService;
332
445
  let externalAgentSupervisor;
333
446
  let middleware;
334
447
  let config;
335
448
  const closeResources = async () => {
336
- input.registry.clear();
337
449
  middleware?.dispose();
338
450
  middleware = void 0;
339
451
  await externalAgentSupervisor?.dispose();
@@ -342,6 +454,9 @@ function createServerPlugin(input) {
342
454
  externalHandoffService = void 0;
343
455
  await agentManager?.close();
344
456
  agentManager = void 0;
457
+ await contextualAskManager?.close();
458
+ contextualAskManager = void 0;
459
+ input.registry.clear();
345
460
  };
346
461
  return {
347
462
  name: "spotpatch:server",
@@ -356,11 +471,30 @@ function createServerPlugin(input) {
356
471
  }
357
472
  const root = import_node_path2.default.resolve(config.root);
358
473
  const options = input.context.getOptions();
474
+ const coordinator = (0, import_dev_server2.createWorkspaceActivityCoordinator)();
359
475
  agentManager = options.ai === false ? void 0 : (0, import_dev_server2.createAgentJobManager)({
360
476
  ai: options.ai,
361
477
  environment: input.context.getCredentialEnvironment(),
362
- root
478
+ root,
479
+ coordinator
363
480
  });
481
+ contextualAskManager = options.contextualAsk.enabled ? (0, import_dev_server2.createContextualAskManager)({
482
+ coordinator,
483
+ enabled: true,
484
+ executors: (0, import_dev_server2.composeContextualAskExecutors)({
485
+ configuredKey: options.ai === false ? [] : (0, import_dev_server2.createConfiguredKeyAskExecutors)({
486
+ ai: options.ai,
487
+ environment: input.context.getCredentialEnvironment(),
488
+ ...options.contextualAsk.defaultExecutor === void 0 ? {} : {
489
+ defaultExecutor: options.contextualAsk.defaultExecutor
490
+ }
491
+ }),
492
+ managedCodex: (0, import_bridge.createManagedCodexAskExecutor)({ projectRoot: root }),
493
+ ...options.contextualAsk.defaultExecutor === void 0 ? {} : { defaultExecutor: options.contextualAsk.defaultExecutor }
494
+ }),
495
+ registry: input.registry,
496
+ root
497
+ }) : void 0;
364
498
  externalHandoffService = options.externalAgent.enabled ? (0, import_dev_server2.createExternalHandoffService)({
365
499
  framework: "vite",
366
500
  root,
@@ -397,6 +531,7 @@ function createServerPlugin(input) {
397
531
  }
398
532
  middleware = (0, import_dev_server2.createSpotPatchMiddleware)({
399
533
  ...agentManager === void 0 ? {} : { agentManager },
534
+ ...contextualAskManager === void 0 ? {} : { contextualAskManager },
400
535
  ...externalAgentSupervisor === void 0 ? {} : { externalAgentControl: externalAgentSupervisor },
401
536
  ...externalHandoffService === void 0 ? {} : { externalHandoffService },
402
537
  options,
@@ -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.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"]}
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.14.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 composeContextualAskExecutors,\n createAgentJobManager,\n createConfiguredKeyAskExecutors,\n createContextualAskManager,\n createExternalHandoffService,\n createWorkspaceActivityCoordinator,\n createSpotPatchMiddleware,\n resolveManagedExecutionValidation,\n type AgentJobManager,\n type ContextualAskManager,\n type ExternalHandoffService,\n type SourceRegistry,\n type SpotPatchSession,\n type SpotPatchMiddleware,\n} from \"@spotpatch/dev-server\";\nimport {\n createManagedCodexAskExecutor,\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 contextualAskManager: ContextualAskManager | 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 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 await contextualAskManager?.close();\n contextualAskManager = undefined;\n input.registry.clear();\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 const coordinator = createWorkspaceActivityCoordinator();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n coordinator,\n });\n contextualAskManager = options.contextualAsk.enabled\n ? createContextualAskManager({\n coordinator,\n enabled: true,\n executors: composeContextualAskExecutors({\n configuredKey:\n options.ai === false\n ? []\n : createConfiguredKeyAskExecutors({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n ...(options.contextualAsk.defaultExecutor === undefined\n ? {}\n : {\n defaultExecutor: options.contextualAsk.defaultExecutor,\n }),\n }),\n managedCodex: createManagedCodexAskExecutor({ projectRoot: root }),\n ...(options.contextualAsk.defaultExecutor === undefined\n ? {}\n : { defaultExecutor: options.contextualAsk.defaultExecutor }),\n }),\n registry: input.registry,\n root,\n })\n : undefined;\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 ...(contextualAskManager === undefined ? {} : { contextualAskManager }),\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"]}