@phenx-inc/ctlsurf 0.14.2 → 0.15.1

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.
Files changed (40) hide show
  1. package/THIRD-PARTY-NOTICES.md +82 -0
  2. package/out/headless/index.mjs +91 -72
  3. package/out/headless/index.mjs.map +3 -3
  4. package/out/main/index.js +117 -72
  5. package/out/preload/index.js +6 -1
  6. package/out/renderer/assets/{cssMode-bQYoCKra.js → cssMode-B77M9HlN.js} +3 -3
  7. package/out/renderer/assets/{freemarker2-BS1ERQl_.js → freemarker2-oUT2zvyQ.js} +1 -1
  8. package/out/renderer/assets/{handlebars-B-ZEHRLr.js → handlebars-jCckoi5j.js} +1 -1
  9. package/out/renderer/assets/{html-lk9e1Lkl.js → html-kAgrAaKW.js} +1 -1
  10. package/out/renderer/assets/{htmlMode-Ds1eMYgM.js → htmlMode-DIWkIawy.js} +3 -3
  11. package/out/renderer/assets/{index-BpCORklm.css → index-3sFJEz7i.css} +787 -399
  12. package/out/renderer/assets/{index-BJNR4hRK.js → index-CN3UN7Tm.js} +431 -104
  13. package/out/renderer/assets/{javascript-D6OeziKX.js → javascript-B9GYUE-I.js} +2 -2
  14. package/out/renderer/assets/{jsonMode-t5SESE75.js → jsonMode-BzFKTZjJ.js} +3 -3
  15. package/out/renderer/assets/{liquid-B5Wjh0p_.js → liquid-Ccw-S_Y6.js} +1 -1
  16. package/out/renderer/assets/{lspLanguageFeatures-BEgiDCIW.js → lspLanguageFeatures-BE0g7ubH.js} +1 -1
  17. package/out/renderer/assets/{mdx-ByNAXh8t.js → mdx-oXeAA0qU.js} +1 -1
  18. package/out/renderer/assets/{python-CIFO0XQW.js → python-DlSX3TvA.js} +1 -1
  19. package/out/renderer/assets/{razor-LXHhGcNO.js → razor-ButO9S7r.js} +1 -1
  20. package/out/renderer/assets/{tsMode-WiO8CDaI.js → tsMode-CTCpE-67.js} +1 -1
  21. package/out/renderer/assets/{typescript-ZBQlq256.js → typescript-9o62WOnS.js} +1 -1
  22. package/out/renderer/assets/{xml-DBaLJlQU.js → xml-C4nOH2_D.js} +1 -1
  23. package/out/renderer/assets/{yaml-CId9skah.js → yaml-mXYgKoWW.js} +1 -1
  24. package/out/renderer/index.html +60 -3
  25. package/package.json +5 -4
  26. package/src/main/index.ts +54 -3
  27. package/src/main/orchestrator.ts +10 -2
  28. package/src/main/ticketStore.ts +100 -66
  29. package/src/preload/index.ts +13 -3
  30. package/src/renderer/App.tsx +4 -2
  31. package/src/renderer/components/CtlsurfPanel.tsx +1 -1
  32. package/src/renderer/components/EditorPanel.tsx +29 -1
  33. package/src/renderer/components/ObserverPanel.tsx +13 -6
  34. package/src/renderer/components/SettingsDialog.tsx +82 -0
  35. package/src/renderer/components/TerminalPanel.tsx +12 -22
  36. package/src/renderer/components/TicketPanel.tsx +33 -15
  37. package/src/renderer/index.html +58 -1
  38. package/src/renderer/lib/theme.ts +173 -0
  39. package/src/renderer/lib/themes.ts +126 -0
  40. package/src/renderer/styles.css +787 -399
package/out/main/index.js CHANGED
@@ -11002,11 +11002,11 @@ function isSameLocalDay(a, b2) {
11002
11002
  function log$4(...args) {
11003
11003
  log$5("[time-tracker]", ...args);
11004
11004
  }
11005
- function findPageByTitle$2(pages, title) {
11005
+ function findPageByTitle$1(pages, title) {
11006
11006
  for (const p2 of pages) {
11007
11007
  if (p2?.title === title) return p2;
11008
11008
  if (p2?.children?.length) {
11009
- const c = findPageByTitle$2(p2.children, title);
11009
+ const c = findPageByTitle$1(p2.children, title);
11010
11010
  if (c) return c;
11011
11011
  }
11012
11012
  }
@@ -11184,7 +11184,7 @@ class TimeTracker {
11184
11184
  }
11185
11185
  if (!folder?.id) return null;
11186
11186
  const folderDetail = await this.api.getFolder(folder.id);
11187
- const agentPage = findPageByTitle$2(folderDetail?.pages || [], AGENT_DATASTORE_PAGE_TITLE$2);
11187
+ const agentPage = findPageByTitle$1(folderDetail?.pages || [], AGENT_DATASTORE_PAGE_TITLE$2);
11188
11188
  if (!agentPage?.id) return null;
11189
11189
  const blockId = await this.findOrAdoptBlock(agentPage.id);
11190
11190
  if (blockId) {
@@ -11289,21 +11289,19 @@ const COLUMNS$1 = [
11289
11289
  function log$3(...args) {
11290
11290
  log$5("[ticket-store]", ...args);
11291
11291
  }
11292
- function findPageByTitle$1(pages, title) {
11292
+ function findPagesByTitle(pages, title) {
11293
+ const found = [];
11293
11294
  for (const p2 of pages) {
11294
- if (p2?.title === title) return p2;
11295
- if (p2?.children?.length) {
11296
- const c = findPageByTitle$1(p2.children, title);
11297
- if (c) return c;
11298
- }
11295
+ if (p2?.title === title) found.push(p2);
11296
+ if (p2?.children?.length) found.push(...findPagesByTitle(p2.children, title));
11299
11297
  }
11300
- return null;
11298
+ return found;
11301
11299
  }
11302
11300
  class TicketStore {
11303
11301
  api;
11304
- // Per-cwd cache of the resolved Tickets datastore: the block (the datastore
11305
- // element) and the Agent Datastore page it lives on. Both ids are handed to
11306
- // the coding agent so it can read/update tickets via the ctlsurf MCP tools.
11302
+ // Per-cwd cache of every resolved Tickets datastore. `primary` is where new
11303
+ // tickets are written and what gets handed to the coding agent; `all` covers
11304
+ // duplicate Agent Datastore pages so listing misses nothing.
11307
11305
  dsCache = /* @__PURE__ */ new Map();
11308
11306
  constructor(api) {
11309
11307
  this.api = api;
@@ -11313,11 +11311,11 @@ class TicketStore {
11313
11311
  const title = input.title?.trim();
11314
11312
  if (!title) return { ok: false, error: "Title is required" };
11315
11313
  try {
11316
- const ds = await this.ensureDatastore(cwd, true);
11317
- if (!ds) {
11314
+ const stores = await this.resolveStores(cwd, true);
11315
+ if (!stores) {
11318
11316
  return { ok: false, error: "No ctlsurf project found for this folder" };
11319
11317
  }
11320
- await this.api.addRow(ds.blockId, {
11318
+ await this.api.addRow(stores.primary.blockId, {
11321
11319
  Title: title,
11322
11320
  Description: input.description?.trim() || "",
11323
11321
  Status: input.status || "Open",
@@ -11331,14 +11329,15 @@ class TicketStore {
11331
11329
  return { ok: false, error: err?.message || String(err) };
11332
11330
  }
11333
11331
  }
11334
- /** Updates an existing ticket row in the project's Tickets datastore. */
11335
- async updateTicket(cwd, rowId, input) {
11332
+ /** Updates an existing ticket row. `blockId` names the store the row lives
11333
+ * in (from listTickets); without it the primary store is assumed. */
11334
+ async updateTicket(cwd, rowId, input, blockId) {
11336
11335
  const title = input.title?.trim();
11337
11336
  if (!title) return { ok: false, error: "Title is required" };
11338
11337
  try {
11339
- const ds = await this.ensureDatastore(cwd, false);
11340
- if (!ds) return { ok: false, error: "No Tickets datastore for this project" };
11341
- await this.api.updateRow(ds.blockId, rowId, {
11338
+ const stores = await this.resolveStores(cwd, false);
11339
+ if (!stores) return { ok: false, error: "No Tickets datastore for this project" };
11340
+ await this.api.updateRow(blockId || stores.primary.blockId, rowId, {
11342
11341
  Title: title,
11343
11342
  Description: input.description?.trim() || "",
11344
11343
  Status: input.status || "Open",
@@ -11351,28 +11350,39 @@ class TicketStore {
11351
11350
  return { ok: false, error: err?.message || String(err) };
11352
11351
  }
11353
11352
  }
11354
- /** Lists existing tickets for the project, newest first. Does not create the
11355
- * datastore — an unconfigured project simply has no tickets yet. */
11353
+ /** Lists existing tickets across every Tickets store in the project's
11354
+ * folder, newest first. Does not create the datastore — an unconfigured
11355
+ * project simply has no tickets yet. */
11356
11356
  async listTickets(cwd) {
11357
11357
  try {
11358
- const ds = await this.ensureDatastore(cwd, false);
11359
- if (!ds) return { ok: true, tickets: [] };
11360
- const res = await this.api.queryRows(ds.blockId, { orderBy: "Created", order: "desc", limit: 200 });
11361
- const tickets = (res?.rows || []).map((r) => ({
11362
- id: r.id,
11363
- title: String(r.data?.Title ?? ""),
11364
- description: String(r.data?.Description ?? ""),
11365
- status: String(r.data?.Status ?? "Open"),
11366
- priority: String(r.data?.Priority ?? "Med"),
11367
- created: r.data?.Created ?? r.created_at ?? null
11368
- }));
11369
- return { ok: true, tickets, blockId: ds.blockId, pageId: ds.pageId };
11358
+ const stores = await this.resolveStores(cwd, false);
11359
+ if (!stores) return { ok: true, tickets: [] };
11360
+ const tickets = [];
11361
+ for (const ds of stores.all) {
11362
+ const res = await this.api.queryRows(ds.blockId, { orderBy: "Created", order: "desc", limit: 200 });
11363
+ for (const r of res?.rows || []) {
11364
+ tickets.push({
11365
+ id: r.id,
11366
+ title: String(r.data?.Title ?? ""),
11367
+ description: String(r.data?.Description ?? ""),
11368
+ status: String(r.data?.Status ?? "Open"),
11369
+ priority: String(r.data?.Priority ?? "Med"),
11370
+ created: r.data?.Created ?? r.created_at ?? null,
11371
+ blockId: ds.blockId,
11372
+ pageId: ds.pageId
11373
+ });
11374
+ }
11375
+ }
11376
+ if (stores.all.length > 1) {
11377
+ tickets.sort((a, b2) => (b2.created || "").localeCompare(a.created || ""));
11378
+ }
11379
+ return { ok: true, tickets, blockId: stores.primary.blockId, pageId: stores.primary.pageId };
11370
11380
  } catch (err) {
11371
11381
  log$3(`listTickets failed for ${cwd}: ${err?.message || err}`);
11372
11382
  return { ok: false, tickets: [], error: err?.message || String(err) };
11373
11383
  }
11374
11384
  }
11375
- async ensureDatastore(cwd, create) {
11385
+ async resolveStores(cwd, create) {
11376
11386
  const cached = this.dsCache.get(cwd);
11377
11387
  if (cached) return cached;
11378
11388
  let folder = null;
@@ -11383,17 +11393,27 @@ class TicketStore {
11383
11393
  }
11384
11394
  if (!folder?.id) return null;
11385
11395
  const folderDetail = await this.api.getFolder(folder.id);
11386
- const agentPage = findPageByTitle$1(folderDetail?.pages || [], AGENT_DATASTORE_PAGE_TITLE$1);
11387
- if (!agentPage?.id) return null;
11388
- const pageId = agentPage.id;
11389
- const blockId = await this.findOrAdoptBlock(pageId);
11390
- if (blockId) {
11391
- await this.ensureColumns(blockId);
11392
- const ds = { blockId, pageId };
11393
- this.dsCache.set(cwd, ds);
11394
- return ds;
11396
+ const agentPages = findPagesByTitle(folderDetail?.pages || [], AGENT_DATASTORE_PAGE_TITLE$1);
11397
+ if (agentPages.length === 0) return null;
11398
+ const rootPath = folder.root_path || cwd;
11399
+ agentPages.sort((a, b2) => Number(b2?.root_path === rootPath) - Number(a?.root_path === rootPath));
11400
+ if (agentPages.length > 1) {
11401
+ log$3(`Found ${agentPages.length} "Agent Datastore" pages for ${cwd}; aggregating tickets across all of them`);
11402
+ }
11403
+ const all = [];
11404
+ for (const page of agentPages) {
11405
+ for (const blockId of await this.findTicketBlocks(page.id)) {
11406
+ all.push({ blockId, pageId: page.id });
11407
+ }
11408
+ }
11409
+ if (all.length > 0) {
11410
+ for (const ds of all) await this.ensureColumns(ds.blockId);
11411
+ const stores = { primary: all[0], all };
11412
+ this.dsCache.set(cwd, stores);
11413
+ return stores;
11395
11414
  }
11396
11415
  if (!create) return null;
11416
+ const pageId = agentPages[0].id;
11397
11417
  const columns = COLUMNS$1.map((c, i) => ({
11398
11418
  id: `col_${i}`,
11399
11419
  name: c.name,
@@ -11408,47 +11428,45 @@ class TicketStore {
11408
11428
  if (created?.id) {
11409
11429
  log$3(`Created "${DATASTORE_TITLE}" datastore on Agent Datastore page for ${cwd}`);
11410
11430
  const ds = { blockId: created.id, pageId };
11411
- this.dsCache.set(cwd, ds);
11412
- return ds;
11431
+ const stores = { primary: ds, all: [ds] };
11432
+ this.dsCache.set(cwd, stores);
11433
+ return stores;
11413
11434
  }
11414
11435
  return null;
11415
11436
  }
11416
- /** Finds an existing Tickets block on the page. Prefers a system_key match
11417
- * (which survives title renames). Falls back to title match for legacy blocks
11418
- * and backfills system_key on the way out. */
11419
- async findOrAdoptBlock(pageId) {
11437
+ /** Finds every Tickets block on the page: system_key matches first, then
11438
+ * title matches for legacy blocks. When no system_key block exists, the
11439
+ * first legacy block is adopted (system_key backfilled so it survives a
11440
+ * later rename); extra title matches are still listed but left unstamped so
11441
+ * the primary can't flip between sessions. */
11442
+ async findTicketBlocks(pageId) {
11420
11443
  const summaries = await this.api.getPageBlockSummaries(pageId) || [];
11421
11444
  const datastoreSummaries = summaries.filter((b2) => b2?.type === "datastore" && b2?.id);
11422
- if (datastoreSummaries.length === 0) return null;
11423
- let titleFallbackId = null;
11424
- let titleFallbackProps = null;
11445
+ if (datastoreSummaries.length === 0) return [];
11446
+ const keyed = [];
11447
+ const legacy = [];
11425
11448
  for (const s of datastoreSummaries) {
11426
11449
  try {
11427
11450
  const block = await this.api.getBlock(s.id);
11428
11451
  const props = block?.props || {};
11429
- if (props.system_key === SYSTEM_KEY) {
11430
- return s.id;
11431
- }
11432
- if (s.title === DATASTORE_TITLE && titleFallbackId === null) {
11433
- titleFallbackId = s.id;
11434
- titleFallbackProps = props;
11435
- }
11452
+ if (props.system_key === SYSTEM_KEY) keyed.push(s.id);
11453
+ else if (s.title === DATASTORE_TITLE) legacy.push({ id: s.id, props });
11436
11454
  } catch (err) {
11437
11455
  log$3(`getBlock(${s.id}) failed during lookup: ${err?.message || err}`);
11438
11456
  }
11439
11457
  }
11440
- if (titleFallbackId) {
11458
+ if (keyed.length === 0 && legacy.length > 0) {
11459
+ const adopt = legacy[0];
11441
11460
  try {
11442
- await this.api.updateBlock(titleFallbackId, {
11443
- props: { ...titleFallbackProps || {}, system_key: SYSTEM_KEY }
11461
+ await this.api.updateBlock(adopt.id, {
11462
+ props: { ...adopt.props, system_key: SYSTEM_KEY }
11444
11463
  });
11445
- log$3(`Backfilled system_key on legacy Tickets block ${titleFallbackId}`);
11464
+ log$3(`Backfilled system_key on legacy Tickets block ${adopt.id}`);
11446
11465
  } catch (err) {
11447
- log$3(`backfill system_key failed on ${titleFallbackId}: ${err?.message || err}`);
11466
+ log$3(`backfill system_key failed on ${adopt.id}: ${err?.message || err}`);
11448
11467
  }
11449
- return titleFallbackId;
11450
11468
  }
11451
- return null;
11469
+ return [...keyed, ...legacy.map((l) => l.id)];
11452
11470
  }
11453
11471
  async ensureColumns(blockId) {
11454
11472
  try {
@@ -23328,13 +23346,13 @@ class Orchestrator {
23328
23346
  }
23329
23347
  return this.ticketStore.addTicket(cwd, input);
23330
23348
  }
23331
- async updateTicketForActiveTab(rowId, input) {
23349
+ async updateTicketForActiveTab(rowId, input, blockId) {
23332
23350
  const cwd = this.getActiveTabProjectPath();
23333
23351
  if (!cwd) return { ok: false, error: "No active terminal tab" };
23334
23352
  if (!this.ctlsurfApi.getApiKey()) {
23335
23353
  return { ok: false, error: "ctlsurf API key not configured" };
23336
23354
  }
23337
- return this.ticketStore.updateTicket(cwd, rowId, input);
23355
+ return this.ticketStore.updateTicket(cwd, rowId, input, blockId);
23338
23356
  }
23339
23357
  async listTicketsForActiveTab() {
23340
23358
  const cwd = this.getActiveTabProjectPath();
@@ -23626,12 +23644,18 @@ const orchestrator = new Orchestrator(
23626
23644
  }
23627
23645
  );
23628
23646
  function createWindow() {
23647
+ const saved = orchestrator.settingsData;
23648
+ if (saved.themeSource === "light" || saved.themeSource === "dark" || saved.themeSource === "system") {
23649
+ electron.nativeTheme.themeSource = saved.themeSource;
23650
+ }
23651
+ const savedBg = typeof saved.themeBackground === "string" && /^#[0-9a-fA-F]{6}$/.test(saved.themeBackground) ? saved.themeBackground : null;
23629
23652
  mainWindow = new electron.BrowserWindow({
23630
23653
  width: 1400,
23631
23654
  height: 900,
23632
23655
  minWidth: 600,
23633
23656
  minHeight: 400,
23634
23657
  title: "ctlsurf-worker",
23658
+ backgroundColor: savedBg ?? (electron.nativeTheme.shouldUseDarkColors ? "#1a1b26" : "#e9eaef"),
23635
23659
  titleBarStyle: "hiddenInset",
23636
23660
  icon: path$1.join(__dirname, "../../resources/icon.png"),
23637
23661
  webPreferences: {
@@ -23729,6 +23753,27 @@ electron.ipcMain.handle(
23729
23753
  electron.ipcMain.handle("app:homePath", () => electron.app.getPath("home"));
23730
23754
  electron.ipcMain.handle("app:cwd", () => process.env.CTLSURF_WORKER_CWD || process.cwd());
23731
23755
  electron.ipcMain.handle("app:projectName", () => orchestrator.projectName);
23756
+ electron.ipcMain.handle("app:getAppearance", () => ({
23757
+ pref: orchestrator.settingsData.appearance ?? null
23758
+ }));
23759
+ electron.ipcMain.handle("app:setAppearance", (_e, data) => {
23760
+ const source = data?.source;
23761
+ if (source !== "system" && source !== "light" && source !== "dark") return { ok: false };
23762
+ electron.nativeTheme.themeSource = source;
23763
+ const settings = orchestrator.settingsData;
23764
+ if (data.pref && typeof data.pref === "object") {
23765
+ settings.appearance = data.pref;
23766
+ }
23767
+ settings.themeSource = source;
23768
+ if (typeof data.background === "string" && /^#[0-9a-fA-F]{6}$/.test(data.background)) {
23769
+ settings.themeBackground = data.background;
23770
+ if (mainWindow && !mainWindow.isDestroyed()) {
23771
+ mainWindow.setBackgroundColor(data.background);
23772
+ }
23773
+ }
23774
+ orchestrator.saveSettings();
23775
+ return { ok: true };
23776
+ });
23732
23777
  electron.ipcMain.handle("app:browseCwd", async () => {
23733
23778
  if (!mainWindow) return null;
23734
23779
  const result = await electron.dialog.showOpenDialog(mainWindow, {
@@ -23933,8 +23978,8 @@ electron.ipcMain.handle("tickets:project", () => {
23933
23978
  electron.ipcMain.handle("tickets:add", async (_event, input) => {
23934
23979
  return orchestrator.addTicketForActiveTab(input);
23935
23980
  });
23936
- electron.ipcMain.handle("tickets:update", async (_event, rowId, input) => {
23937
- return orchestrator.updateTicketForActiveTab(rowId, input);
23981
+ electron.ipcMain.handle("tickets:update", async (_event, rowId, input, blockId) => {
23982
+ return orchestrator.updateTicketForActiveTab(rowId, input, blockId);
23938
23983
  });
23939
23984
  electron.ipcMain.handle("tickets:list", async () => {
23940
23985
  return orchestrator.listTicketsForActiveTab();
@@ -40,6 +40,11 @@ const api = {
40
40
  return () => electron.ipcRenderer.removeListener("app:projectChanged", listener);
41
41
  },
42
42
  browseCwd: () => electron.ipcRenderer.invoke("app:browseCwd"),
43
+ // Mirror the renderer's appearance preference onto Chromium's nativeTheme and
44
+ // persist it. localStorage stays the source of truth (see renderer/lib/theme.ts);
45
+ // this copy backs the pre-load window background and localStorage recovery.
46
+ setAppearance: (data) => electron.ipcRenderer.invoke("app:setAppearance", data),
47
+ getAppearance: () => electron.ipcRenderer.invoke("app:getAppearance"),
43
48
  // Clipboard — write a rich-HTML table (+ plain-text fallback) for email paste.
44
49
  // `ok` reflects a read-back verification in the main process, not just that the
45
50
  // call was made; `error` is set when the write threw.
@@ -68,7 +73,7 @@ const api = {
68
73
  // Tickets (active tab)
69
74
  getTicketProject: () => electron.ipcRenderer.invoke("tickets:project"),
70
75
  addTicket: (input) => electron.ipcRenderer.invoke("tickets:add", input),
71
- updateTicket: (rowId, input) => electron.ipcRenderer.invoke("tickets:update", rowId, input),
76
+ updateTicket: (rowId, input, blockId) => electron.ipcRenderer.invoke("tickets:update", rowId, input, blockId),
72
77
  listTickets: () => electron.ipcRenderer.invoke("tickets:list"),
73
78
  // Chat logging (global)
74
79
  getLogChat: () => electron.ipcRenderer.invoke("logchat:get"),
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-BJNR4hRK.js";
2
- import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-BEgiDCIW.js";
3
- import { h, i, j, t, k } from "./lspLanguageFeatures-BEgiDCIW.js";
1
+ import { c as createWebWorker, l as languages } from "./index-CN3UN7Tm.js";
2
+ import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-BE0g7ubH.js";
3
+ import { h, i, j, t, k } from "./lspLanguageFeatures-BE0g7ubH.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BJNR4hRK.js";
1
+ import { l as languages } from "./index-CN3UN7Tm.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "assign",
4
4
  "flush",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BJNR4hRK.js";
1
+ import { l as languages } from "./index-CN3UN7Tm.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BJNR4hRK.js";
1
+ import { l as languages } from "./index-CN3UN7Tm.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-BJNR4hRK.js";
2
- import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-BEgiDCIW.js";
3
- import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-BEgiDCIW.js";
1
+ import { c as createWebWorker, l as languages } from "./index-CN3UN7Tm.js";
2
+ import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-BE0g7ubH.js";
3
+ import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-BE0g7ubH.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {