@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 +10 -12
- package/dist/index.cjs +188 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +193 -53
- package/dist/index.js.map +1 -1
- package/dist/runtime-client.js +57 -157
- package/dist/runtime-contextual-ask-panel.js +62 -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/dist/runtime-motion.js +461 -0
- package/package.json +7 -6
package/README.md
CHANGED
|
@@ -122,25 +122,24 @@ Enable the development-only UI explicitly:
|
|
|
122
122
|
spotPatch({ externalAgent: true });
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
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.
|
|
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: "
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
if (
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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,
|
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 { 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;AAEjB,IAAAC,qBAeO;AACP,oBAIO;AAWA,SAAS,mBAAmB,OAAkC;AACnE,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,iBAAiB,YAA2B;AAChD,gBAAY,QAAQ;AACpB,iBAAa;AACb,UAAM,yBAAyB,QAAQ;AACvC,8BAA0B;AAC1B,UAAM,wBAAwB,MAAM;AACpC,6BAAyB;AACzB,UAAM,cAAc,MAAM;AAC1B,mBAAe;AACf,UAAM,sBAAsB,MAAM;AAClC,2BAAuB;AACvB,UAAM,SAAS,MAAM;AAAA,EACvB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,eAAe,gBAAgB;AAC7B,eAAS;AAAA,IACX;AAAA,IAEA,MAAM,gBAAgB,QAAQ;AAC5B,UAAI,WAAW,QAAW;AACxB,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AAEA,YAAM,OAAO,kBAAAC,QAAK,QAAQ,OAAO,IAAI;AACrC,YAAM,UAAU,MAAM,QAAQ,WAAW;AACzC,YAAM,kBAAc,uDAAmC;AACvD,qBACE,QAAQ,OAAO,QACX,aACA,0CAAsB;AAAA,QACpB,IAAI,QAAQ;AAAA,QACZ,aAAa,MAAM,QAAQ,yBAAyB;AAAA,QACpD;AAAA,QACA;AAAA,MACF,CAAC;AACP,6BAAuB,QAAQ,cAAc,cACzC,+CAA2B;AAAA,QACzB;AAAA,QACA,SAAS;AAAA,QACT,eAAW,kDAA8B;AAAA,UACvC,eACE,QAAQ,OAAO,QACX,CAAC,QACD,oDAAgC;AAAA,YAC9B,IAAI,QAAQ;AAAA,YACZ,aAAa,MAAM,QAAQ,yBAAyB;AAAA,YACpD,GAAI,QAAQ,cAAc,oBAAoB,SAC1C,CAAC,IACD;AAAA,cACE,iBAAiB,QAAQ,cAAc;AAAA,YACzC;AAAA,UACN,CAAC;AAAA,UACP,kBAAc,6CAA8B,EAAE,aAAa,KAAK,CAAC;AAAA,UACjE,GAAI,QAAQ,cAAc,oBAAoB,SAC1C,CAAC,IACD,EAAE,iBAAiB,QAAQ,cAAc,gBAAgB;AAAA,QAC/D,CAAC;AAAA,QACD,UAAU,MAAM;AAAA,QAChB;AAAA,MACF,CAAC,IACD;AACJ,+BAAyB,QAAQ,cAAc,cAC3C,iDAA6B;AAAA,QAC3B,WAAW;AAAA,QACX;AAAA,QACA,WAAW,MAAM,QAAQ;AAAA,MAC3B,CAAC,IACD;AAEJ,UAAI,2BAA2B,QAAW;AACxC,YAAI;AACF,gBAAM,uBAAuB,MAAM;AAAA,QACrC,QAAQ;AACN,iBAAO,OAAO;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAEA,YAAI,uBAAuB,WAAW,EAAE,aAAa;AACnD,cAAI;AACF,kBAAM,aAAa,UAAM,sDAAkC;AAAA,cACzD,IAAI,QAAQ;AAAA,cACZ,SAAS;AAAA,YACX,CAAC;AACD,sCAA0B,UAAM,6CAA8B;AAAA,cAC5D,eAAe;AAAA,cACf,QAAQ,WAAW;AAAA,cACnB,QAAQ,WAAW;AAAA,cACnB;AAAA,cACA,WAAW,MAAM,QAAQ;AAAA,cACzB,cAAc,kBAAAA,QAAK,SAAS,IAAI;AAAA,YAClC,CAAC;AAAA,UACH,QAAQ;AACN,mBAAO,OAAO;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,uBAAa,8CAA0B;AAAA,QACrC,GAAI,iBAAiB,SAAY,CAAC,IAAI,EAAE,aAAa;AAAA,QACrD,GAAI,yBAAyB,SAAY,CAAC,IAAI,EAAE,qBAAqB;AAAA,QACrE,GAAI,4BAA4B,SAC5B,CAAC,IACD,EAAE,sBAAsB,wBAAwB;AAAA,QACpD,GAAI,2BAA2B,SAAY,CAAC,IAAI,EAAE,uBAAuB;AAAA,QACzE;AAAA,QACA,UAAU,MAAM;AAAA,QAChB;AAAA,QACA,SAAS,MAAM;AAAA,QACf,QAAQ,OAAO;AAAA,MACjB,CAAC;AACD,aAAO,YAAY,IAAI,UAAU;AAEjC,aAAO,YAAY,KAAK,SAAS,MAAM;AACrC,aAAK,eAAe;AAAA,MACtB,CAAC;AAED,aAAO,OAAO;AAAA,QACZ,8CAA8C,QAAQ,QAAQ;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,MAAM,cAAc;AAClB,YAAM,eAAe;AAAA,IACvB;AAAA,EACF;AACF;;;AC9KA,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"]}
|