@trops/dash-core 0.1.506 → 0.1.508

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.
@@ -25,7 +25,6 @@ var require$$1$4 = require('croner');
25
25
  var require$$2$3 = require('algoliasearch');
26
26
  var require$$3$3 = require('node:path');
27
27
  var require$$0$7 = require('openai');
28
- require('live-plugin-manager');
29
28
  var require$$0$a = require('@anthropic-ai/sdk');
30
29
  var require$$3$4 = require('crypto');
31
30
  var require$$8$1 = require('zod');
@@ -1054,7 +1053,7 @@ var secureStoreController$1 = {
1054
1053
  decryptString,
1055
1054
  };
1056
1055
 
1057
- const path$n = require$$1$1;
1056
+ const path$m = require$$1$1;
1058
1057
  const {
1059
1058
  readFileSync,
1060
1059
  writeFileSync: writeFileSync$3,
@@ -1072,7 +1071,7 @@ const {
1072
1071
  function ensureDirectoryExistence$1(filePath) {
1073
1072
  try {
1074
1073
  // isDirectory
1075
- var dirname = path$n.dirname(filePath);
1074
+ var dirname = path$m.dirname(filePath);
1076
1075
  // check if the directory exists...return true
1077
1076
  // if not, we can pass in the dirname as the filepath
1078
1077
  // and check each directory recursively.
@@ -1187,7 +1186,7 @@ function removeFilesFromDirectory(directory, excludeFiles = []) {
1187
1186
 
1188
1187
  for (const file of files) {
1189
1188
  if (!excludeFiles.includes(file)) {
1190
- unlinkSync(path$n.join(directory, file), (err) => {
1189
+ unlinkSync(path$m.join(directory, file), (err) => {
1191
1190
  if (err) throw err;
1192
1191
  });
1193
1192
  }
@@ -1204,8 +1203,8 @@ var file = {
1204
1203
  checkDirectory: checkDirectory$1,
1205
1204
  };
1206
1205
 
1207
- const { app: app$f } = require$$0$1;
1208
- const path$m = require$$1$1;
1206
+ const { app: app$e } = require$$0$1;
1207
+ const path$l = require$$1$1;
1209
1208
  const { writeFileSync: writeFileSync$2 } = require$$0$2;
1210
1209
  const { getFileContents: getFileContents$7 } = file;
1211
1210
 
@@ -1252,8 +1251,8 @@ const workspaceController$3 = {
1252
1251
  saveWorkspaceForApplication: (win, appId, workspaceObject) => {
1253
1252
  try {
1254
1253
  // filename to the pages file (live pages)
1255
- const filename = path$m.join(
1256
- app$f.getPath("userData"),
1254
+ const filename = path$l.join(
1255
+ app$e.getPath("userData"),
1257
1256
  appName$7,
1258
1257
  appId,
1259
1258
  configFilename$5,
@@ -1301,8 +1300,8 @@ const workspaceController$3 = {
1301
1300
  saveMenuItemsForApplication: (win, appId, menuItems) => {
1302
1301
  try {
1303
1302
  // filename to the workspaces file
1304
- const filename = path$m.join(
1305
- app$f.getPath("userData"),
1303
+ const filename = path$l.join(
1304
+ app$e.getPath("userData"),
1306
1305
  appName$7,
1307
1306
  appId,
1308
1307
  configFilename$5,
@@ -1350,8 +1349,8 @@ const workspaceController$3 = {
1350
1349
  */
1351
1350
  deleteWorkspaceForApplication: (win, appId, workspaceId) => {
1352
1351
  try {
1353
- const filename = path$m.join(
1354
- app$f.getPath("userData"),
1352
+ const filename = path$l.join(
1353
+ app$e.getPath("userData"),
1355
1354
  appName$7,
1356
1355
  appId,
1357
1356
  configFilename$5,
@@ -1384,8 +1383,8 @@ const workspaceController$3 = {
1384
1383
 
1385
1384
  listWorkspacesForApplication: (win, appId) => {
1386
1385
  try {
1387
- const filename = path$m.join(
1388
- app$f.getPath("userData"),
1386
+ const filename = path$l.join(
1387
+ app$e.getPath("userData"),
1389
1388
  appName$7,
1390
1389
  appId,
1391
1390
  configFilename$5,
@@ -1412,8 +1411,8 @@ const workspaceController$3 = {
1412
1411
 
1413
1412
  listMenuItemsForApplication: (win, appId) => {
1414
1413
  try {
1415
- const filename = path$m.join(
1416
- app$f.getPath("userData"),
1414
+ const filename = path$l.join(
1415
+ app$e.getPath("userData"),
1417
1416
  appName$7,
1418
1417
  appId,
1419
1418
  configFilename$5,
@@ -1456,8 +1455,8 @@ const workspaceController$3 = {
1456
1455
 
1457
1456
  var workspaceController_1 = workspaceController$3;
1458
1457
 
1459
- const { app: app$e } = require$$0$1;
1460
- const path$l = require$$1$1;
1458
+ const { app: app$d } = require$$0$1;
1459
+ const path$k = require$$1$1;
1461
1460
  const { writeFileSync: writeFileSync$1 } = require$$0$2;
1462
1461
  const { getFileContents: getFileContents$6 } = file;
1463
1462
 
@@ -1477,8 +1476,8 @@ const themeController$5 = {
1477
1476
  saveThemeForApplication: (win, appId, name, obj) => {
1478
1477
  try {
1479
1478
  // filename to the pages file (live pages)
1480
- const filename = path$l.join(
1481
- app$e.getPath("userData"),
1479
+ const filename = path$k.join(
1480
+ app$d.getPath("userData"),
1482
1481
  appName$6,
1483
1482
  appId,
1484
1483
  configFilename$4,
@@ -1523,8 +1522,8 @@ const themeController$5 = {
1523
1522
  */
1524
1523
  listThemesForApplication: (win, appId) => {
1525
1524
  try {
1526
- const filename = path$l.join(
1527
- app$e.getPath("userData"),
1525
+ const filename = path$k.join(
1526
+ app$d.getPath("userData"),
1528
1527
  appName$6,
1529
1528
  appId,
1530
1529
  configFilename$4,
@@ -1565,8 +1564,8 @@ const themeController$5 = {
1565
1564
  */
1566
1565
  deleteThemeForApplication: (win, appId, themeKey) => {
1567
1566
  try {
1568
- const filename = path$l.join(
1569
- app$e.getPath("userData"),
1567
+ const filename = path$k.join(
1568
+ app$d.getPath("userData"),
1570
1569
  appName$6,
1571
1570
  appId,
1572
1571
  configFilename$4,
@@ -1642,9 +1641,9 @@ var themeController_1 = themeController$5;
1642
1641
  * `/data/`.
1643
1642
  */
1644
1643
 
1645
- const path$k = require$$1$1;
1644
+ const path$j = require$$1$1;
1646
1645
  const fs$f = require$$0$2;
1647
- const { app: app$d } = require$$0$1;
1646
+ const { app: app$c } = require$$0$1;
1648
1647
 
1649
1648
  const APP_NAME = "Dashboard";
1650
1649
 
@@ -1653,10 +1652,10 @@ const APP_NAME = "Dashboard";
1653
1652
  * @returns {string[]} ordered allowed roots for that category
1654
1653
  */
1655
1654
  function getAllowedRoots$2(category) {
1656
- const userData = app$d.getPath("userData");
1655
+ const userData = app$c.getPath("userData");
1657
1656
  switch (category) {
1658
1657
  case "data": {
1659
- const def = path$k.join(userData, APP_NAME, "data");
1658
+ const def = path$j.join(userData, APP_NAME, "data");
1660
1659
  // The user can configure a custom data directory in
1661
1660
  // Settings → General → Data Directory. If set, that
1662
1661
  // location is ALSO an allowed root. We don't replace the
@@ -1666,13 +1665,13 @@ function getAllowedRoots$2(category) {
1666
1665
  return override ? [def, override] : [def];
1667
1666
  }
1668
1667
  case "themes":
1669
- return [path$k.join(userData, APP_NAME, "themes")];
1668
+ return [path$j.join(userData, APP_NAME, "themes")];
1670
1669
  case "widgets":
1671
- return [path$k.join(userData, "widgets")];
1670
+ return [path$j.join(userData, "widgets")];
1672
1671
  case "plugins":
1673
- return [path$k.join(userData, "plugins")];
1672
+ return [path$j.join(userData, "plugins")];
1674
1673
  case "downloads":
1675
- return [app$d.getPath("downloads")];
1674
+ return [app$c.getPath("downloads")];
1676
1675
  default:
1677
1676
  throw new Error("safePath: unknown allowed-roots category: " + category);
1678
1677
  }
@@ -1687,8 +1686,8 @@ function getAllowedRoots$2(category) {
1687
1686
  */
1688
1687
  function readDataDirectoryFromSettings() {
1689
1688
  try {
1690
- const settingsPath = path$k.join(
1691
- app$d.getPath("userData"),
1689
+ const settingsPath = path$j.join(
1690
+ app$c.getPath("userData"),
1692
1691
  APP_NAME,
1693
1692
  "settings.json",
1694
1693
  );
@@ -1719,7 +1718,7 @@ function safePath$3(requested, allowedRoots) {
1719
1718
  throw new Error("safePath: allowedRoots must be a non-empty array");
1720
1719
  }
1721
1720
 
1722
- const resolved = path$k.resolve(requested);
1721
+ const resolved = path$j.resolve(requested);
1723
1722
 
1724
1723
  // Real-path through symlinks. If the file doesn't exist yet (a
1725
1724
  // create-new operation), real-path the parent so a symlink in the
@@ -1729,8 +1728,8 @@ function safePath$3(requested, allowedRoots) {
1729
1728
  real = fs$f.realpathSync(resolved);
1730
1729
  } catch (_e) {
1731
1730
  try {
1732
- const parent = fs$f.realpathSync(path$k.dirname(resolved));
1733
- real = path$k.join(parent, path$k.basename(resolved));
1731
+ const parent = fs$f.realpathSync(path$j.dirname(resolved));
1732
+ real = path$j.join(parent, path$j.basename(resolved));
1734
1733
  } catch (_e2) {
1735
1734
  // Parent doesn't exist either. Use the resolved-but-not-
1736
1735
  // real path; the caller's mkdirSync will happen inside the
@@ -1749,7 +1748,7 @@ function safePath$3(requested, allowedRoots) {
1749
1748
  }
1750
1749
  // Exact match OR strictly-inside (with separator to prevent
1751
1750
  // /data-evil/ matching /data/).
1752
- if (real === realRoot || real.startsWith(realRoot + path$k.sep)) {
1751
+ if (real === realRoot || real.startsWith(realRoot + path$j.sep)) {
1753
1752
  return real;
1754
1753
  }
1755
1754
  }
@@ -1811,8 +1810,8 @@ var safePath_1 = {
1811
1810
  */
1812
1811
 
1813
1812
  const fs$e = require$$0$2;
1814
- const path$j = require$$1$1;
1815
- const { app: app$c } = require$$0$1;
1813
+ const path$i = require$$1$1;
1814
+ const { app: app$b } = require$$0$1;
1816
1815
 
1817
1816
  const FILE_NAME = "widgetMcpGrants.json";
1818
1817
 
@@ -1821,7 +1820,7 @@ const FILE_NAME = "widgetMcpGrants.json";
1821
1820
  let _cache$1 = null;
1822
1821
 
1823
1822
  function grantsFilePath() {
1824
- return path$j.join(app$c.getPath("userData"), FILE_NAME);
1823
+ return path$i.join(app$b.getPath("userData"), FILE_NAME);
1825
1824
  }
1826
1825
 
1827
1826
  function loadFromDisk() {
@@ -1848,7 +1847,7 @@ function writeToDisk(data) {
1848
1847
  const tmp = p + ".tmp";
1849
1848
  // Ensure parent dir exists (userData should already, but be defensive
1850
1849
  // for first-launch / freshly-cleared profile cases).
1851
- fs$e.mkdirSync(path$j.dirname(p), { recursive: true });
1850
+ fs$e.mkdirSync(path$i.dirname(p), { recursive: true });
1852
1851
  fs$e.writeFileSync(tmp, JSON.stringify(data, null, 2), "utf8");
1853
1852
  fs$e.renameSync(tmp, p);
1854
1853
  }
@@ -2587,9 +2586,23 @@ function _hostMatches(host, allowedList) {
2587
2586
  if (!Array.isArray(allowedList) || allowedList.length === 0) return false;
2588
2587
  if (allowedList.includes("*")) return true;
2589
2588
  const lower = host.toLowerCase();
2590
- return allowedList.some(
2591
- (h) => typeof h === "string" && h.toLowerCase() === lower,
2592
- );
2589
+ for (const entry of allowedList) {
2590
+ if (typeof entry !== "string") continue;
2591
+ const entryLower = entry.toLowerCase();
2592
+ // Exact match.
2593
+ if (entryLower === lower) return true;
2594
+ // Subdomain wildcard: "*.example.com" matches "example.com" and
2595
+ // any host ending in ".example.com". The leading dot on the
2596
+ // suffix-test is required — otherwise "*.example.com" would also
2597
+ // match "attackerexample.com", which is the kind of confusion
2598
+ // this feature is meant to avoid.
2599
+ if (entryLower.startsWith("*.")) {
2600
+ const base = entryLower.slice(2); // "example.com"
2601
+ if (lower === base) return true;
2602
+ if (lower.endsWith("." + base)) return true;
2603
+ }
2604
+ }
2605
+ return false;
2593
2606
  }
2594
2607
 
2595
2608
  function _parseHost(url) {
@@ -3490,9 +3503,9 @@ function requireTransform () {
3490
3503
  return transform;
3491
3504
  }
3492
3505
 
3493
- const { app: app$b } = require$$0$1;
3506
+ const { app: app$a } = require$$0$1;
3494
3507
  var fs$d = require$$0$2;
3495
- const path$i = require$$1$1;
3508
+ const path$h = require$$1$1;
3496
3509
  const events$5 = events$8;
3497
3510
  const { getFileContents: getFileContents$5, writeToFile: writeToFile$2 } = file;
3498
3511
  const { safePath: safePath$2, getAllowedRoots: getAllowedRoots$1 } = safePath_1;
@@ -3509,8 +3522,8 @@ const { readEnforceFlag: readEnforceFlag$2, readJitFlag: readJitFlag$2 } = secur
3509
3522
  // domain-neutral name is a separate slice).
3510
3523
  function _loadFlags$1() {
3511
3524
  try {
3512
- const settingsPath = path$i.join(
3513
- app$b.getPath("userData"),
3525
+ const settingsPath = path$h.join(
3526
+ app$a.getPath("userData"),
3514
3527
  appName$5,
3515
3528
  "settings.json",
3516
3529
  );
@@ -3589,8 +3602,8 @@ const dataController$1 = {
3589
3602
  // Validate the renderer-supplied filename is contained within
3590
3603
  // the data directory. path.join doesn't reject `..` segments;
3591
3604
  // safePath does.
3592
- const candidate = path$i.join(
3593
- app$b.getPath("userData"),
3605
+ const candidate = path$h.join(
3606
+ app$a.getPath("userData"),
3594
3607
  appName$5,
3595
3608
  appId,
3596
3609
  "data",
@@ -3941,8 +3954,8 @@ const dataController$1 = {
3941
3954
  if (data) {
3942
3955
  // Validate filename is contained within the data directory.
3943
3956
  // path.join doesn't reject `..` segments; safePath does.
3944
- const candidate = path$i.join(
3945
- app$b.getPath("userData"),
3957
+ const candidate = path$h.join(
3958
+ app$a.getPath("userData"),
3946
3959
  appName$5,
3947
3960
  "data",
3948
3961
  filename,
@@ -4043,8 +4056,8 @@ const dataController$1 = {
4043
4056
  try {
4044
4057
  if (filename) {
4045
4058
  // filename to the pages file (live pages)
4046
- const fromFilename = path$i.join(
4047
- app$b.getPath("userData"),
4059
+ const fromFilename = path$h.join(
4060
+ app$a.getPath("userData"),
4048
4061
  appName$5,
4049
4062
  "data",
4050
4063
  filename,
@@ -4124,8 +4137,8 @@ var dataController_1 = dataController$1;
4124
4137
  * settingsController
4125
4138
  */
4126
4139
 
4127
- const { app: app$a } = require$$0$1;
4128
- const path$h = require$$1$1;
4140
+ const { app: app$9 } = require$$0$1;
4141
+ const path$g = require$$1$1;
4129
4142
  const fs$c = require$$0$2;
4130
4143
  const { getFileContents: getFileContents$4, writeToFile: writeToFile$1 } = file;
4131
4144
 
@@ -4140,8 +4153,8 @@ function copyDirectory(source, destination) {
4140
4153
 
4141
4154
  const files = fs$c.readdirSync(source);
4142
4155
  for (const file of files) {
4143
- const srcPath = path$h.join(source, file);
4144
- const destPath = path$h.join(destination, file);
4156
+ const srcPath = path$g.join(source, file);
4157
+ const destPath = path$g.join(destination, file);
4145
4158
  const stat = fs$c.lstatSync(srcPath);
4146
4159
 
4147
4160
  // Skip symlinks to prevent following links to sensitive files
@@ -4169,8 +4182,8 @@ const settingsController$4 = {
4169
4182
  try {
4170
4183
  if (data) {
4171
4184
  // <appId>/settings.json
4172
- const filename = path$h.join(
4173
- app$a.getPath("userData"),
4185
+ const filename = path$g.join(
4186
+ app$9.getPath("userData"),
4174
4187
  appName$4,
4175
4188
  configFilename$3,
4176
4189
  );
@@ -4205,8 +4218,8 @@ const settingsController$4 = {
4205
4218
  getSettingsForApplication: (win) => {
4206
4219
  try {
4207
4220
  // <appId>/settings.json
4208
- const filename = path$h.join(
4209
- app$a.getPath("userData"),
4221
+ const filename = path$g.join(
4222
+ app$9.getPath("userData"),
4210
4223
  appName$4,
4211
4224
  configFilename$3,
4212
4225
  );
@@ -4236,15 +4249,15 @@ const settingsController$4 = {
4236
4249
  */
4237
4250
  getDataDirectory: (win) => {
4238
4251
  try {
4239
- const settingsPath = path$h.join(
4240
- app$a.getPath("userData"),
4252
+ const settingsPath = path$g.join(
4253
+ app$9.getPath("userData"),
4241
4254
  appName$4,
4242
4255
  configFilename$3,
4243
4256
  );
4244
4257
  const settings = getFileContents$4(settingsPath, {});
4245
4258
  const userDataDir =
4246
4259
  settings.userDataDirectory ||
4247
- path$h.join(app$a.getPath("userData"), appName$4);
4260
+ path$g.join(app$9.getPath("userData"), appName$4);
4248
4261
 
4249
4262
  console.log("[settingsController] Data directory retrieved successfully");
4250
4263
  // Return the data for ipcMain.handle() - modern promise-based approach
@@ -4281,8 +4294,8 @@ const settingsController$4 = {
4281
4294
  }
4282
4295
 
4283
4296
  // Update settings
4284
- const settingsPath = path$h.join(
4285
- app$a.getPath("userData"),
4297
+ const settingsPath = path$g.join(
4298
+ app$9.getPath("userData"),
4286
4299
  appName$4,
4287
4300
  configFilename$3,
4288
4301
  );
@@ -4315,20 +4328,20 @@ const settingsController$4 = {
4315
4328
  migrateDataDirectory: (win, oldPath, newPath) => {
4316
4329
  try {
4317
4330
  // Resolve paths to prevent traversal
4318
- const resolvedOldPath = path$h.resolve(oldPath);
4319
- const resolvedNewPath = path$h.resolve(newPath);
4331
+ const resolvedOldPath = path$g.resolve(oldPath);
4332
+ const resolvedNewPath = path$g.resolve(newPath);
4320
4333
 
4321
4334
  // Validate oldPath is the current configured data directory
4322
- const settingsCheckPath = path$h.join(
4323
- app$a.getPath("userData"),
4335
+ const settingsCheckPath = path$g.join(
4336
+ app$9.getPath("userData"),
4324
4337
  appName$4,
4325
4338
  configFilename$3,
4326
4339
  );
4327
4340
  const currentSettings = getFileContents$4(settingsCheckPath, {});
4328
4341
  const currentDataDir =
4329
4342
  currentSettings.userDataDirectory ||
4330
- path$h.join(app$a.getPath("userData"), appName$4);
4331
- if (resolvedOldPath !== path$h.resolve(currentDataDir)) {
4343
+ path$g.join(app$9.getPath("userData"), appName$4);
4344
+ if (resolvedOldPath !== path$g.resolve(currentDataDir)) {
4332
4345
  throw new Error("Source path must be the current data directory");
4333
4346
  }
4334
4347
 
@@ -4364,8 +4377,8 @@ const settingsController$4 = {
4364
4377
  copyDirectory(resolvedOldPath, resolvedNewPath);
4365
4378
 
4366
4379
  // Update settings to use new path
4367
- const settingsPath = path$h.join(
4368
- app$a.getPath("userData"),
4380
+ const settingsPath = path$g.join(
4381
+ app$9.getPath("userData"),
4369
4382
  appName$4,
4370
4383
  configFilename$3,
4371
4384
  );
@@ -5029,8 +5042,8 @@ function requireProviderController () {
5029
5042
  return providerController_1;
5030
5043
  }
5031
5044
 
5032
- const { app: app$9 } = require$$0$1;
5033
- const path$g = require$$1$1;
5045
+ const { app: app$8 } = require$$0$1;
5046
+ const path$f = require$$1$1;
5034
5047
  const events$4 = events$8;
5035
5048
  const { getFileContents: getFileContents$3 } = file;
5036
5049
 
@@ -5046,8 +5059,8 @@ const layoutController$1 = {
5046
5059
  */
5047
5060
  listLayoutsForApplication: (win, appId) => {
5048
5061
  try {
5049
- const filename = path$g.join(
5050
- app$9.getPath("userData"),
5062
+ const filename = path$f.join(
5063
+ app$8.getPath("userData"),
5051
5064
  appName$3,
5052
5065
  appId,
5053
5066
  configFilename$2,
@@ -22710,7 +22723,7 @@ const {
22710
22723
  const {
22711
22724
  StreamableHTTPClientTransport,
22712
22725
  } = streamableHttp$1;
22713
- const path$f = require$$1$1;
22726
+ const path$e = require$$1$1;
22714
22727
  const fs$b = require$$0$2;
22715
22728
  const os$2 = require$$2$1;
22716
22729
  const responseCache$2 = responseCache_1;
@@ -22718,7 +22731,7 @@ const { gateToolCall, gateToolCallWithJit } = permissionGate;
22718
22731
  const { serverKey, parseServerKey } = mcpServerKey;
22719
22732
  const { applyPathScopeToCredentials } = mcpScopeResolver;
22720
22733
  const { readEnforceFlag: readEnforceFlag$1, readJitFlag: readJitFlag$1 } = securityFlags;
22721
- const { app: app$8 } = require$$0$1;
22734
+ const { app: app$7 } = require$$0$1;
22722
22735
 
22723
22736
  /**
22724
22737
  * Load the user's settings.json (or null on absence/parse error). The
@@ -22727,8 +22740,8 @@ const { app: app$8 } = require$$0$1;
22727
22740
  */
22728
22741
  function loadSettingsForFlags() {
22729
22742
  try {
22730
- const settingsPath = path$f.join(
22731
- app$8.getPath("userData"),
22743
+ const settingsPath = path$e.join(
22744
+ app$7.getPath("userData"),
22732
22745
  "Dashboard",
22733
22746
  "settings.json",
22734
22747
  );
@@ -23300,7 +23313,7 @@ const mcpController$3 = {
23300
23313
  }
23301
23314
 
23302
23315
  // Interpolate {{MCP_DIR}} in args to resolve local MCP server scripts
23303
- const mcpDir = path$f.join(__dirname, "..", "mcp");
23316
+ const mcpDir = path$e.join(__dirname, "..", "mcp");
23304
23317
  for (let i = 0; i < args.length; i++) {
23305
23318
  if (
23306
23319
  typeof args[i] === "string" &&
@@ -23751,7 +23764,7 @@ const mcpController$3 = {
23751
23764
  */
23752
23765
  getCatalog: (win) => {
23753
23766
  try {
23754
- const catalogPath = path$f.join(
23767
+ const catalogPath = path$e.join(
23755
23768
  __dirname,
23756
23769
  "..",
23757
23770
  "mcp",
@@ -23792,7 +23805,7 @@ const mcpController$3 = {
23792
23805
  */
23793
23806
  getKnownExternalCatalog: () => {
23794
23807
  try {
23795
- const catalogPath = path$f.join(
23808
+ const catalogPath = path$e.join(
23796
23809
  __dirname,
23797
23810
  "..",
23798
23811
  "mcp",
@@ -23905,7 +23918,7 @@ const mcpController$3 = {
23905
23918
  }
23906
23919
 
23907
23920
  // Interpolate {{MCP_DIR}} in authCommand args (same as startServer)
23908
- const mcpDir = path$f.join(__dirname, "..", "mcp");
23921
+ const mcpDir = path$e.join(__dirname, "..", "mcp");
23909
23922
  const resolvedArgs = (authCommand.args || []).map((arg) =>
23910
23923
  typeof arg === "string" && arg.includes("{{MCP_DIR}}")
23911
23924
  ? arg.replace(/\{\{MCP_DIR\}\}/g, mcpDir)
@@ -24454,7 +24467,7 @@ function commonjsRequire(path) {
24454
24467
  */
24455
24468
 
24456
24469
  const fs$a = require$$0$2;
24457
- const path$e = require$$1$1;
24470
+ const path$d = require$$1$1;
24458
24471
 
24459
24472
  /**
24460
24473
  * Structured error thrown by compileWidget() when the underlying
@@ -24489,7 +24502,7 @@ function getEsbuildDiagnostics() {
24489
24502
 
24490
24503
  try {
24491
24504
  const pkgJsonPath = require.resolve("esbuild/package.json");
24492
- diagnostics.esbuildPackageDir = path$e.dirname(pkgJsonPath);
24505
+ diagnostics.esbuildPackageDir = path$d.dirname(pkgJsonPath);
24493
24506
  diagnostics.esbuildVersion = commonjsRequire(pkgJsonPath).version;
24494
24507
  } catch (err) {
24495
24508
  diagnostics.esbuildResolveError = err.message;
@@ -24499,13 +24512,13 @@ function getEsbuildDiagnostics() {
24499
24512
  const archPkgJson = require.resolve(
24500
24513
  `${diagnostics.archPackage}/package.json`,
24501
24514
  );
24502
- const archDir = path$e.dirname(archPkgJson);
24515
+ const archDir = path$d.dirname(archPkgJson);
24503
24516
  // esbuild's native binary on macOS/Linux is bin/esbuild;
24504
24517
  // on Windows it's esbuild.exe at the package root.
24505
24518
  const candidate =
24506
24519
  process.platform === "win32"
24507
- ? path$e.join(archDir, "esbuild.exe")
24508
- : path$e.join(archDir, "bin", "esbuild");
24520
+ ? path$d.join(archDir, "esbuild.exe")
24521
+ : path$d.join(archDir, "bin", "esbuild");
24509
24522
  diagnostics.nativeBinaryPath = candidate;
24510
24523
  diagnostics.nativeBinaryExists = fs$a.existsSync(candidate);
24511
24524
  } catch (err) {
@@ -24553,19 +24566,19 @@ async function healthCheck() {
24553
24566
  * @returns {string|null} Path to the widgets/ directory, or null
24554
24567
  */
24555
24568
  function findWidgetsDir$2(widgetPath) {
24556
- const direct = path$e.join(widgetPath, "widgets");
24569
+ const direct = path$d.join(widgetPath, "widgets");
24557
24570
  if (fs$a.existsSync(direct)) {
24558
24571
  return direct;
24559
24572
  }
24560
24573
 
24561
24574
  // Check configs/widgets/ (packageZip.js nests .dash.js files here)
24562
- const configsWidgets = path$e.join(widgetPath, "configs", "widgets");
24575
+ const configsWidgets = path$d.join(widgetPath, "configs", "widgets");
24563
24576
  if (fs$a.existsSync(configsWidgets)) {
24564
24577
  return configsWidgets;
24565
24578
  }
24566
24579
 
24567
24580
  // Check configs/ directory (used by packageZip.js for distributed widgets)
24568
- const configs = path$e.join(widgetPath, "configs");
24581
+ const configs = path$d.join(widgetPath, "configs");
24569
24582
  if (fs$a.existsSync(configs)) {
24570
24583
  return configs;
24571
24584
  }
@@ -24582,7 +24595,7 @@ function findWidgetsDir$2(widgetPath) {
24582
24595
  );
24583
24596
 
24584
24597
  for (const subdir of subdirs) {
24585
- const nested = path$e.join(widgetPath, subdir.name, "widgets");
24598
+ const nested = path$d.join(widgetPath, subdir.name, "widgets");
24586
24599
  if (fs$a.existsSync(nested)) {
24587
24600
  console.log(`[WidgetCompiler] Found nested widgets/ at ${nested}`);
24588
24601
  return nested;
@@ -24631,14 +24644,14 @@ async function compileWidget$1(widgetPath) {
24631
24644
  // Compute relative path from the entry file (in widgetPath) to widgetsDir,
24632
24645
  // since widgetsDir may be nested (e.g., ./weather-widget/widgets/).
24633
24646
  const relWidgetsDir =
24634
- "./" + path$e.relative(widgetPath, widgetsDir).split(path$e.sep).join("/");
24647
+ "./" + path$d.relative(widgetPath, widgetsDir).split(path$d.sep).join("/");
24635
24648
  const imports = [];
24636
24649
  const exportParts = [];
24637
24650
 
24638
24651
  for (const dashFile of dashFiles) {
24639
24652
  const componentName = dashFile.replace(".dash.js", "");
24640
24653
  const componentFile = `${componentName}.js`;
24641
- const componentFilePath = path$e.join(widgetsDir, componentFile);
24654
+ const componentFilePath = path$d.join(widgetsDir, componentFile);
24642
24655
  const hasComponent = fs$a.existsSync(componentFilePath);
24643
24656
 
24644
24657
  // Import the config (always)
@@ -24671,9 +24684,9 @@ async function compileWidget$1(widgetPath) {
24671
24684
  const entryContent = [...imports, "", ...exportParts, ""].join("\n");
24672
24685
 
24673
24686
  // Write temporary entry file in the widget root
24674
- const entryPath = path$e.join(widgetPath, "__compile_entry.js");
24675
- const distDir = path$e.join(widgetPath, "dist");
24676
- const outPath = path$e.join(distDir, "index.cjs.js");
24687
+ const entryPath = path$d.join(widgetPath, "__compile_entry.js");
24688
+ const distDir = path$d.join(widgetPath, "dist");
24689
+ const outPath = path$d.join(distDir, "index.cjs.js");
24677
24690
 
24678
24691
  try {
24679
24692
  // Ensure dist/ directory exists
@@ -24771,7 +24784,7 @@ var widgetCompiler$1 = {
24771
24784
  */
24772
24785
 
24773
24786
  const fs$9 = require$$0$2;
24774
- const path$d = require$$1$1;
24787
+ const path$c = require$$1$1;
24775
24788
  const vm = require$$2$2;
24776
24789
  const { findWidgetsDir: findWidgetsDir$1 } = widgetCompiler$1;
24777
24790
 
@@ -24859,9 +24872,9 @@ class DynamicWidgetLoader {
24859
24872
  );
24860
24873
 
24861
24874
  const widgetsDir =
24862
- findWidgetsDir$1(widgetPath) || path$d.join(widgetPath, "widgets");
24863
- const componentPath = path$d.join(widgetsDir, `${componentName}.js`);
24864
- const configPath = path$d.join(widgetsDir, `${componentName}.dash.js`);
24875
+ findWidgetsDir$1(widgetPath) || path$c.join(widgetPath, "widgets");
24876
+ const componentPath = path$c.join(widgetsDir, `${componentName}.js`);
24877
+ const configPath = path$c.join(widgetsDir, `${componentName}.dash.js`);
24865
24878
 
24866
24879
  if (!fs$9.existsSync(componentPath)) {
24867
24880
  throw new Error(`Component file not found: ${componentPath}`);
@@ -25062,9 +25075,9 @@ var dynamicWidgetLoaderExports = dynamicWidgetLoader$3.exports;
25062
25075
  */
25063
25076
 
25064
25077
  const fs$8 = require$$0$2;
25065
- const path$c = require$$1$1;
25078
+ const path$b = require$$1$1;
25066
25079
  const os$1 = require$$2$1;
25067
- const { app: app$7 } = require$$0$1;
25080
+ const { app: app$6 } = require$$0$1;
25068
25081
 
25069
25082
  // Cache: widgetId → permissions | null. Populated lazily on first
25070
25083
  // lookup; invalidated when a widget is installed/uninstalled (the
@@ -25079,7 +25092,7 @@ function expandHome(p) {
25079
25092
  if (typeof p !== "string" || !p) return p;
25080
25093
  if (p === "~") return os$1.homedir();
25081
25094
  if (p.startsWith("~/") || p.startsWith("~\\")) {
25082
- return path$c.join(os$1.homedir(), p.slice(2));
25095
+ return path$b.join(os$1.homedir(), p.slice(2));
25083
25096
  }
25084
25097
  return p;
25085
25098
  }
@@ -25119,10 +25132,10 @@ function parseManifestPermissions(packageJson) {
25119
25132
  */
25120
25133
  function resolveWidgetPackagePath(widgetId) {
25121
25134
  if (typeof widgetId !== "string" || !widgetId) return null;
25122
- const widgetsRoot = path$c.join(app$7.getPath("userData"), "widgets");
25135
+ const widgetsRoot = path$b.join(app$6.getPath("userData"), "widgets");
25123
25136
  // Split scope from name for "@scope/name" form.
25124
25137
  const parts = widgetId.startsWith("@") ? widgetId.split("/") : [widgetId];
25125
- return path$c.join(widgetsRoot, ...parts, "package.json");
25138
+ return path$b.join(widgetsRoot, ...parts, "package.json");
25126
25139
  }
25127
25140
 
25128
25141
  /**
@@ -25191,7 +25204,7 @@ var widgetPermissions = {
25191
25204
  */
25192
25205
 
25193
25206
  const fs$7 = require$$0$2;
25194
- const path$b = require$$1$1;
25207
+ const path$a = require$$1$1;
25195
25208
 
25196
25209
  const SOURCE_EXTENSIONS = new Set([
25197
25210
  ".js",
@@ -25249,13 +25262,13 @@ function readSourceFiles(dir) {
25249
25262
  return;
25250
25263
  }
25251
25264
  for (const entry of entries) {
25252
- const abs = path$b.join(current, entry.name);
25253
- const rel = relBase ? path$b.join(relBase, entry.name) : entry.name;
25265
+ const abs = path$a.join(current, entry.name);
25266
+ const rel = relBase ? path$a.join(relBase, entry.name) : entry.name;
25254
25267
  if (entry.isDirectory()) {
25255
25268
  if (skipDirs.has(entry.name)) continue;
25256
25269
  walk(abs, rel);
25257
25270
  } else if (entry.isFile()) {
25258
- const ext = path$b.extname(entry.name).toLowerCase();
25271
+ const ext = path$a.extname(entry.name).toLowerCase();
25259
25272
  if (!SOURCE_EXTENSIONS.has(ext)) continue;
25260
25273
  if (result.length >= SCAN_FILE_LIMIT) return;
25261
25274
  try {
@@ -25281,7 +25294,7 @@ function scanForMcpUsage(input) {
25281
25294
  let fileList = [];
25282
25295
  if (input.files && typeof input.files === "object") {
25283
25296
  for (const [relPath, source] of Object.entries(input.files)) {
25284
- const ext = path$b.extname(relPath).toLowerCase();
25297
+ const ext = path$a.extname(relPath).toLowerCase();
25285
25298
  if (!SOURCE_EXTENSIONS.has(ext)) continue;
25286
25299
  if (typeof source !== "string") continue;
25287
25300
  fileList.push({ relPath, source });
@@ -27417,7 +27430,7 @@ var widgetRegistryExports = widgetRegistry$1.exports;
27417
27430
  * - Support two-level browsing: packages (bundles) and widgets within packages
27418
27431
  */
27419
27432
 
27420
- const path$a = require$$1$1;
27433
+ const path$9 = require$$1$1;
27421
27434
  const fs$6 = require$$0$2;
27422
27435
  const os = require$$2$1;
27423
27436
  const { toPackageId } = packageId;
@@ -27454,7 +27467,7 @@ function getCacheKey() {
27454
27467
  * Get the local test registry path for dev mode
27455
27468
  */
27456
27469
  function getTestRegistryPath() {
27457
- return path$a.join(__dirname, "..", "registry", "test-registry-index.json");
27470
+ return path$9.join(__dirname, "..", "registry", "test-registry-index.json");
27458
27471
  }
27459
27472
 
27460
27473
  /**
@@ -27912,7 +27925,7 @@ async function fetchPackageSource(packageName, componentName = null) {
27912
27925
 
27913
27926
  const zip = new AdmZip(buffer);
27914
27927
  const safeName = (pkg.name || "pkg").replace(/[^a-zA-Z0-9-_]/g, "_");
27915
- const tempDir = path$a.join(
27928
+ const tempDir = path$9.join(
27916
27929
  os.tmpdir(),
27917
27930
  `dash-registry-preview-${safeName}-${Date.now()}`,
27918
27931
  );
@@ -27921,7 +27934,7 @@ async function fetchPackageSource(packageName, componentName = null) {
27921
27934
  validateZipEntries(zip, tempDir);
27922
27935
  zip.extractAllTo(tempDir, true);
27923
27936
 
27924
- const widgetsDir = path$a.join(tempDir, "widgets");
27937
+ const widgetsDir = path$9.join(tempDir, "widgets");
27925
27938
  let componentCode = "";
27926
27939
  let configCode = "";
27927
27940
  let widgetName = null;
@@ -27949,7 +27962,7 @@ async function fetchPackageSource(packageName, componentName = null) {
27949
27962
  if (!configFile) configFile = dashFiles[0];
27950
27963
 
27951
27964
  if (configFile) {
27952
- configCode = fs$6.readFileSync(path$a.join(widgetsDir, configFile), "utf8");
27965
+ configCode = fs$6.readFileSync(path$9.join(widgetsDir, configFile), "utf8");
27953
27966
  widgetName = configFile.replace(/\.dash\.js$/, "");
27954
27967
  }
27955
27968
 
@@ -27964,7 +27977,7 @@ async function fetchPackageSource(packageName, componentName = null) {
27964
27977
 
27965
27978
  if (componentFile) {
27966
27979
  componentCode = fs$6.readFileSync(
27967
- path$a.join(widgetsDir, componentFile),
27980
+ path$9.join(widgetsDir, componentFile),
27968
27981
  "utf8",
27969
27982
  );
27970
27983
  if (!widgetName) widgetName = componentFile.replace(/\.js$/, "");
@@ -27972,13 +27985,13 @@ async function fetchPackageSource(packageName, componentName = null) {
27972
27985
  }
27973
27986
 
27974
27987
  let bundleSource = null;
27975
- const bundlePath = path$a.join(tempDir, "dist", "index.cjs.js");
27988
+ const bundlePath = path$9.join(tempDir, "dist", "index.cjs.js");
27976
27989
  if (fs$6.existsSync(bundlePath)) {
27977
27990
  bundleSource = fs$6.readFileSync(bundlePath, "utf8");
27978
27991
  }
27979
27992
 
27980
27993
  let dashMeta = {};
27981
- const dashPath = path$a.join(tempDir, "dash.json");
27994
+ const dashPath = path$9.join(tempDir, "dash.json");
27982
27995
  if (fs$6.existsSync(dashPath)) {
27983
27996
  try {
27984
27997
  dashMeta = JSON.parse(fs$6.readFileSync(dashPath, "utf8"));
@@ -28023,7 +28036,7 @@ var registryController$3 = {
28023
28036
  var fs$5 = require$$0$2;
28024
28037
  var JSONStream = require$$4;
28025
28038
  const algoliasearch$1 = require$$2$3;
28026
- const path$9 = require$$3$3;
28039
+ const path$8 = require$$3$3;
28027
28040
  const { ensureDirectoryExistence, checkDirectory } = file;
28028
28041
 
28029
28042
  let AlgoliaIndex$1 = class AlgoliaIndex {
@@ -28130,7 +28143,7 @@ let AlgoliaIndex$1 = class AlgoliaIndex {
28130
28143
  if (err) reject(err);
28131
28144
  if (files) {
28132
28145
  files.forEach((file) => {
28133
- fs$5.unlinkSync(path$9.join(directoryPath, file));
28146
+ fs$5.unlinkSync(path$8.join(directoryPath, file));
28134
28147
  });
28135
28148
  resolve();
28136
28149
  }
@@ -28153,7 +28166,7 @@ let AlgoliaIndex$1 = class AlgoliaIndex {
28153
28166
  let results = [];
28154
28167
  for (const fileIndex in files) {
28155
28168
  // for each file lets read the file and then push to algolia
28156
- const pathToBatch = path$9.join(batchFilepath, files[fileIndex]);
28169
+ const pathToBatch = path$8.join(batchFilepath, files[fileIndex]);
28157
28170
  const fileContents = await this.readFile(pathToBatch);
28158
28171
  if (fileContents) {
28159
28172
  if ("data" in fileContents && "filepath" in fileContents) {
@@ -28690,8 +28703,8 @@ function upsertMenuItem$1(items, menuItem) {
28690
28703
 
28691
28704
  var upsertMenuItem_1 = { upsertMenuItem: upsertMenuItem$1 };
28692
28705
 
28693
- const { app: app$6 } = require$$0$1;
28694
- const path$8 = require$$1$1;
28706
+ const { app: app$5 } = require$$0$1;
28707
+ const path$7 = require$$1$1;
28695
28708
  const { writeFileSync } = require$$0$2;
28696
28709
  const { getFileContents: getFileContents$2 } = file;
28697
28710
  const { upsertMenuItem } = upsertMenuItem_1;
@@ -28702,8 +28715,8 @@ const appName$2 = "Dashboard";
28702
28715
  const menuItemsController$1 = {
28703
28716
  saveMenuItemForApplication: (win, appId, menuItem) => {
28704
28717
  try {
28705
- const filename = path$8.join(
28706
- app$6.getPath("userData"),
28718
+ const filename = path$7.join(
28719
+ app$5.getPath("userData"),
28707
28720
  appName$2,
28708
28721
  appId,
28709
28722
  configFilename$1,
@@ -28721,8 +28734,8 @@ const menuItemsController$1 = {
28721
28734
 
28722
28735
  listMenuItemsForApplication: (win, appId) => {
28723
28736
  try {
28724
- const filename = path$8.join(
28725
- app$6.getPath("userData"),
28737
+ const filename = path$7.join(
28738
+ app$5.getPath("userData"),
28726
28739
  appName$2,
28727
28740
  appId,
28728
28741
  configFilename$1,
@@ -28747,25 +28760,6 @@ const menuItemsController$1 = {
28747
28760
 
28748
28761
  var menuItemsController_1 = menuItemsController$1;
28749
28762
 
28750
- const path$7 = require$$1$1;
28751
- const { app: app$5 } = require$$0$1;
28752
-
28753
- const pluginController$1 = {
28754
- install: (win, packageName, filepath) => {
28755
- try {
28756
- const rootPath = path$7.join(
28757
- app$5.getPath("userData"),
28758
- "plugins",
28759
- packageName,
28760
- );
28761
- } catch (e) {
28762
- win.webContents.send("plugin-install-error", { error: e.message });
28763
- }
28764
- },
28765
- };
28766
-
28767
- var pluginController_1 = pluginController$1;
28768
-
28769
28763
  var mcp = {};
28770
28764
 
28771
28765
  var server$1 = {};
@@ -34809,20 +34803,13 @@ boolean.parseBooleanDef = parseBooleanDef;
34809
34803
 
34810
34804
  var branded = {};
34811
34805
 
34812
- var hasRequiredBranded;
34813
-
34814
- function requireBranded () {
34815
- if (hasRequiredBranded) return branded;
34816
- hasRequiredBranded = 1;
34817
- Object.defineProperty(branded, "__esModule", { value: true });
34818
- branded.parseBrandedDef = void 0;
34819
- const parseDef_js_1 = requireParseDef();
34820
- function parseBrandedDef(_def, refs) {
34821
- return (0, parseDef_js_1.parseDef)(_def.type._def, refs);
34822
- }
34823
- branded.parseBrandedDef = parseBrandedDef;
34824
- return branded;
34806
+ Object.defineProperty(branded, "__esModule", { value: true });
34807
+ branded.parseBrandedDef = void 0;
34808
+ const parseDef_js_1$1 = requireParseDef();
34809
+ function parseBrandedDef(_def, refs) {
34810
+ return (0, parseDef_js_1$1.parseDef)(_def.type._def, refs);
34825
34811
  }
34812
+ branded.parseBrandedDef = parseBrandedDef;
34826
34813
 
34827
34814
  var _catch = {};
34828
34815
 
@@ -35405,7 +35392,7 @@ function requireRecord () {
35405
35392
  const v3_1 = v3;
35406
35393
  const parseDef_js_1 = requireParseDef();
35407
35394
  const string_js_1 = string;
35408
- const branded_js_1 = requireBranded();
35395
+ const branded_js_1 = branded;
35409
35396
  const any_js_1 = any;
35410
35397
  function parseRecordDef(def, refs) {
35411
35398
  if (refs.target === "openAi") {
@@ -36056,7 +36043,7 @@ function requireSelectParser () {
36056
36043
  const array_js_1 = requireArray();
36057
36044
  const bigint_js_1 = bigint;
36058
36045
  const boolean_js_1 = boolean;
36059
- const branded_js_1 = requireBranded();
36046
+ const branded_js_1 = branded;
36060
36047
  const catch_js_1 = require_catch();
36061
36048
  const date_js_1 = date;
36062
36049
  const default_js_1 = require_default();
@@ -36355,7 +36342,7 @@ zodToJsonSchema$1.zodToJsonSchema = zodToJsonSchema;
36355
36342
  __exportStar(requireArray(), exports);
36356
36343
  __exportStar(bigint, exports);
36357
36344
  __exportStar(boolean, exports);
36358
- __exportStar(requireBranded(), exports);
36345
+ __exportStar(branded, exports);
36359
36346
  __exportStar(require_catch(), exports);
36360
36347
  __exportStar(date, exports);
36361
36348
  __exportStar(require_default(), exports);
@@ -62743,7 +62730,6 @@ const {
62743
62730
  saveMenuItemForApplication,
62744
62731
  listMenuItemsForApplication,
62745
62732
  } = menuItemsController_1;
62746
- const { install: pluginInstall } = pluginController_1;
62747
62733
  const {
62748
62734
  exportDashboardConfig,
62749
62735
  selectDashboardFile,
@@ -62845,7 +62831,6 @@ var controller = {
62845
62831
  describeImage,
62846
62832
  saveMenuItemForApplication,
62847
62833
  listMenuItemsForApplication,
62848
- pluginInstall,
62849
62834
  searchIndex,
62850
62835
  exportDashboardConfig,
62851
62836
  selectDashboardFile,
@@ -62897,7 +62882,7 @@ var controller = {
62897
62882
  mcpDashServerController: mcpDashServerController$2,
62898
62883
  };
62899
62884
 
62900
- const { ipcRenderer: ipcRenderer$p } = require$$0$1;
62885
+ const { ipcRenderer: ipcRenderer$o } = require$$0$1;
62901
62886
  const { SECURE_STORE_ENCRYPTION_CHECK } = events$8;
62902
62887
  /**
62903
62888
  * secureStoreApi
@@ -62919,7 +62904,7 @@ const { SECURE_STORE_ENCRYPTION_CHECK } = events$8;
62919
62904
  */
62920
62905
  const secureStoreApi$2 = {
62921
62906
  isEncryptionAvailable: () =>
62922
- ipcRenderer$p.invoke(SECURE_STORE_ENCRYPTION_CHECK, {}),
62907
+ ipcRenderer$o.invoke(SECURE_STORE_ENCRYPTION_CHECK, {}),
62923
62908
  };
62924
62909
 
62925
62910
  var secureStoreApi_1 = secureStoreApi$2;
@@ -62930,7 +62915,7 @@ var secureStoreApi_1 = secureStoreApi$2;
62930
62915
  * Handle the workspace configuration file
62931
62916
  */
62932
62917
 
62933
- const { ipcRenderer: ipcRenderer$o } = require$$0$1;
62918
+ const { ipcRenderer: ipcRenderer$n } = require$$0$1;
62934
62919
  const {
62935
62920
  WORKSPACE_LIST,
62936
62921
  WORKSPACE_SAVE,
@@ -62947,7 +62932,7 @@ const workspaceApi$2 = {
62947
62932
  */
62948
62933
  listWorkspacesForApplication: (appId) => {
62949
62934
  console.log("listWorkspacesForApplication called with appId:", appId);
62950
- return ipcRenderer$o.invoke(WORKSPACE_LIST, { appId });
62935
+ return ipcRenderer$n.invoke(WORKSPACE_LIST, { appId });
62951
62936
  },
62952
62937
 
62953
62938
  /**
@@ -62958,7 +62943,7 @@ const workspaceApi$2 = {
62958
62943
  * @returns
62959
62944
  */
62960
62945
  saveWorkspaceForApplication: (appId, data) =>
62961
- ipcRenderer$o.invoke(WORKSPACE_SAVE, { appId, data }),
62946
+ ipcRenderer$n.invoke(WORKSPACE_SAVE, { appId, data }),
62962
62947
 
62963
62948
  /**
62964
62949
  * deleteWorkspaceForApplication
@@ -62968,7 +62953,7 @@ const workspaceApi$2 = {
62968
62953
  * @returns
62969
62954
  */
62970
62955
  deleteWorkspaceForApplication: (appId, workspaceId) =>
62971
- ipcRenderer$o.invoke(WORKSPACE_DELETE, { appId, workspaceId }),
62956
+ ipcRenderer$n.invoke(WORKSPACE_DELETE, { appId, workspaceId }),
62972
62957
  };
62973
62958
 
62974
62959
  var workspaceApi_1 = workspaceApi$2;
@@ -62980,13 +62965,13 @@ var workspaceApi_1 = workspaceApi$2;
62980
62965
  */
62981
62966
 
62982
62967
  // ipcRenderer that must be used to invoke the events
62983
- const { ipcRenderer: ipcRenderer$n } = require$$0$1;
62968
+ const { ipcRenderer: ipcRenderer$m } = require$$0$1;
62984
62969
 
62985
62970
  const { LAYOUT_LIST } = events$8;
62986
62971
 
62987
62972
  const layoutApi$2 = {
62988
62973
  listLayoutsForApplication: (appId) =>
62989
- ipcRenderer$n.invoke(LAYOUT_LIST, { appId }),
62974
+ ipcRenderer$m.invoke(LAYOUT_LIST, { appId }),
62990
62975
  };
62991
62976
 
62992
62977
  var layoutApi_1 = layoutApi$2;
@@ -62998,7 +62983,7 @@ var layoutApi_1 = layoutApi$2;
62998
62983
  */
62999
62984
 
63000
62985
  // ipcRenderer that must be used to invoke the events
63001
- const { ipcRenderer: ipcRenderer$m } = require$$0$1;
62986
+ const { ipcRenderer: ipcRenderer$l } = require$$0$1;
63002
62987
 
63003
62988
  const {
63004
62989
  DATA_JSON_TO_CSV_FILE,
@@ -63016,7 +63001,7 @@ const {
63016
63001
  const dataApi$2 = {
63017
63002
  // convert a json array of objects to a csv string and save to file
63018
63003
  convertJsonToCsvFile: (appId, jsonObject, filename) =>
63019
- ipcRenderer$m.invoke(DATA_JSON_TO_CSV_FILE, {
63004
+ ipcRenderer$l.invoke(DATA_JSON_TO_CSV_FILE, {
63020
63005
  appId,
63021
63006
  jsonObject,
63022
63007
  filename,
@@ -63024,10 +63009,10 @@ const dataApi$2 = {
63024
63009
 
63025
63010
  // convert a json array of objects to a csv string and return a string
63026
63011
  convertJsonToCsvString: (appId, jsonObject) =>
63027
- ipcRenderer$m.invoke(DATA_JSON_TO_CSV_STRING, { appId, jsonObject }),
63012
+ ipcRenderer$l.invoke(DATA_JSON_TO_CSV_STRING, { appId, jsonObject }),
63028
63013
 
63029
63014
  parseXMLStream: (filepath, outpath, start) =>
63030
- ipcRenderer$m.invoke(PARSE_XML_STREAM, {
63015
+ ipcRenderer$l.invoke(PARSE_XML_STREAM, {
63031
63016
  filepath,
63032
63017
  outpath,
63033
63018
  start,
@@ -63041,7 +63026,7 @@ const dataApi$2 = {
63041
63026
  headers = null,
63042
63027
  limit = null,
63043
63028
  ) => {
63044
- ipcRenderer$m.invoke(PARSE_CSV_STREAM, {
63029
+ ipcRenderer$l.invoke(PARSE_CSV_STREAM, {
63045
63030
  filepath,
63046
63031
  outpath,
63047
63032
  delimiter,
@@ -63052,15 +63037,15 @@ const dataApi$2 = {
63052
63037
  },
63053
63038
 
63054
63039
  readLinesFromFile: (filepath, lineCount) => {
63055
- ipcRenderer$m.invoke(READ_LINES, { filepath, lineCount });
63040
+ ipcRenderer$l.invoke(READ_LINES, { filepath, lineCount });
63056
63041
  },
63057
63042
 
63058
63043
  readJSONFromFile: (filepath, objectCount = null) => {
63059
- ipcRenderer$m.invoke(READ_JSON, { filepath, objectCount });
63044
+ ipcRenderer$l.invoke(READ_JSON, { filepath, objectCount });
63060
63045
  },
63061
63046
 
63062
63047
  readDataFromURL: (url, toFilepath, widgetId = null) => {
63063
- ipcRenderer$m.invoke(READ_DATA_URL, { url, toFilepath, widgetId });
63048
+ ipcRenderer$l.invoke(READ_DATA_URL, { url, toFilepath, widgetId });
63064
63049
  },
63065
63050
 
63066
63051
  /*
@@ -63069,7 +63054,7 @@ const dataApi$2 = {
63069
63054
  * @param {object} returnEmpty the return empty object
63070
63055
  */
63071
63056
  saveData: (data, filename, append, returnEmpty, widgetId = null) =>
63072
- ipcRenderer$m.invoke(DATA_SAVE_TO_FILE, {
63057
+ ipcRenderer$l.invoke(DATA_SAVE_TO_FILE, {
63073
63058
  data,
63074
63059
  filename,
63075
63060
  append,
@@ -63087,7 +63072,7 @@ const dataApi$2 = {
63087
63072
  * gates the gate itself).
63088
63073
  */
63089
63074
  readData: (filename, returnEmpty = [], widgetId = null) =>
63090
- ipcRenderer$m.invoke(DATA_READ_FROM_FILE, {
63075
+ ipcRenderer$l.invoke(DATA_READ_FROM_FILE, {
63091
63076
  filename,
63092
63077
  returnEmpty,
63093
63078
  widgetId,
@@ -63098,7 +63083,7 @@ const dataApi$2 = {
63098
63083
  * @returns
63099
63084
  */
63100
63085
  transformFile: (filepath, outFilepath, mappingFunctionBody, args) => {
63101
- ipcRenderer$m.invoke(TRANSFORM_FILE, {
63086
+ ipcRenderer$l.invoke(TRANSFORM_FILE, {
63102
63087
  filepath,
63103
63088
  outFilepath,
63104
63089
  mappingFunctionBody,
@@ -63116,7 +63101,7 @@ var dataApi_1 = dataApi$2;
63116
63101
  */
63117
63102
 
63118
63103
  // ipcRenderer that must be used to invoke the events
63119
- const { ipcRenderer: ipcRenderer$l } = require$$0$1;
63104
+ const { ipcRenderer: ipcRenderer$k } = require$$0$1;
63120
63105
 
63121
63106
  const {
63122
63107
  SETTINGS_GET,
@@ -63127,14 +63112,14 @@ const {
63127
63112
  } = events$8;
63128
63113
 
63129
63114
  const settingsApi$2 = {
63130
- getSettingsForApplication: () => ipcRenderer$l.invoke(SETTINGS_GET, {}),
63115
+ getSettingsForApplication: () => ipcRenderer$k.invoke(SETTINGS_GET, {}),
63131
63116
  saveSettingsForApplication: (data) =>
63132
- ipcRenderer$l.invoke(SETTINGS_SAVE, { data }),
63133
- getDataDirectory: () => ipcRenderer$l.invoke(SETTINGS_GET_DATA_DIR, {}),
63117
+ ipcRenderer$k.invoke(SETTINGS_SAVE, { data }),
63118
+ getDataDirectory: () => ipcRenderer$k.invoke(SETTINGS_GET_DATA_DIR, {}),
63134
63119
  setDataDirectory: (dataDirectory) =>
63135
- ipcRenderer$l.invoke(SETTINGS_SET_DATA_DIR, { dataDirectory }),
63120
+ ipcRenderer$k.invoke(SETTINGS_SET_DATA_DIR, { dataDirectory }),
63136
63121
  migrateDataDirectory: (oldDirectory, newDirectory) =>
63137
- ipcRenderer$l.invoke(SETTINGS_MIGRATE_DATA_DIR, {
63122
+ ipcRenderer$k.invoke(SETTINGS_MIGRATE_DATA_DIR, {
63138
63123
  oldDirectory,
63139
63124
  newDirectory,
63140
63125
  }),
@@ -63149,7 +63134,7 @@ var settingsApi_1 = settingsApi$2;
63149
63134
  * Provides file/folder chooser dialogs.
63150
63135
  */
63151
63136
 
63152
- const { ipcRenderer: ipcRenderer$k } = require$$0$1;
63137
+ const { ipcRenderer: ipcRenderer$j } = require$$0$1;
63153
63138
 
63154
63139
  const { CHOOSE_FILE } = events$8;
63155
63140
 
@@ -63162,7 +63147,7 @@ const dialogApi$2 = {
63162
63147
  * @returns {Promise<string|null>} selected file/folder path, or null if cancelled
63163
63148
  */
63164
63149
  chooseFile: (allowFile = true, extensions = ["*"]) => {
63165
- return ipcRenderer$k.invoke(CHOOSE_FILE, { allowFile, extensions });
63150
+ return ipcRenderer$j.invoke(CHOOSE_FILE, { allowFile, extensions });
63166
63151
  },
63167
63152
 
63168
63153
  /**
@@ -63187,7 +63172,7 @@ const dialogApi$2 = {
63187
63172
  typeof options.allowFile === "boolean" ? options.allowFile : allowFile;
63188
63173
  const resolvedExtensions = options.extensions || extensions;
63189
63174
 
63190
- const filePath = await ipcRenderer$k.invoke(CHOOSE_FILE, {
63175
+ const filePath = await ipcRenderer$j.invoke(CHOOSE_FILE, {
63191
63176
  allowFile: resolvedAllowFile,
63192
63177
  extensions: resolvedExtensions,
63193
63178
  });
@@ -63214,7 +63199,7 @@ var dialogApi_1 = dialogApi$2;
63214
63199
  * mainApi.widgets.uninstall('Weather')
63215
63200
  */
63216
63201
 
63217
- const { ipcRenderer: ipcRenderer$j } = require$$0$1;
63202
+ const { ipcRenderer: ipcRenderer$i } = require$$0$1;
63218
63203
 
63219
63204
  const widgetApi$2 = {
63220
63205
  /**
@@ -63223,7 +63208,7 @@ const widgetApi$2 = {
63223
63208
  */
63224
63209
  list: async () => {
63225
63210
  try {
63226
- return await ipcRenderer$j.invoke("widget:list");
63211
+ return await ipcRenderer$i.invoke("widget:list");
63227
63212
  } catch (error) {
63228
63213
  console.error("[WidgetApi] Error listing widgets:", error);
63229
63214
  throw error;
@@ -63237,7 +63222,7 @@ const widgetApi$2 = {
63237
63222
  */
63238
63223
  get: async (widgetName) => {
63239
63224
  try {
63240
- return await ipcRenderer$j.invoke("widget:get", widgetName);
63225
+ return await ipcRenderer$i.invoke("widget:get", widgetName);
63241
63226
  } catch (error) {
63242
63227
  console.error(`[WidgetApi] Error getting widget ${widgetName}:`, error);
63243
63228
  throw error;
@@ -63268,7 +63253,7 @@ const widgetApi$2 = {
63268
63253
  console.log(
63269
63254
  `[WidgetApi] Installing widget: ${widgetName} from ${downloadUrl}`,
63270
63255
  );
63271
- const config = await ipcRenderer$j.invoke(
63256
+ const config = await ipcRenderer$i.invoke(
63272
63257
  "widget:install",
63273
63258
  widgetName,
63274
63259
  downloadUrl,
@@ -63308,7 +63293,7 @@ const widgetApi$2 = {
63308
63293
  console.log(
63309
63294
  `[WidgetApi] Installing local widget: ${widgetName} from ${localPath}`,
63310
63295
  );
63311
- const config = await ipcRenderer$j.invoke(
63296
+ const config = await ipcRenderer$i.invoke(
63312
63297
  "widget:install-local",
63313
63298
  widgetName,
63314
63299
  localPath,
@@ -63339,7 +63324,7 @@ const widgetApi$2 = {
63339
63324
  loadFolder: async (folderPath) => {
63340
63325
  try {
63341
63326
  console.log(`[WidgetApi] Loading widgets from folder: ${folderPath}`);
63342
- const results = await ipcRenderer$j.invoke(
63327
+ const results = await ipcRenderer$i.invoke(
63343
63328
  "widget:load-folder",
63344
63329
  folderPath,
63345
63330
  );
@@ -63363,7 +63348,7 @@ const widgetApi$2 = {
63363
63348
  uninstall: async (widgetName) => {
63364
63349
  try {
63365
63350
  console.log(`[WidgetApi] Uninstalling widget: ${widgetName}`);
63366
- const success = await ipcRenderer$j.invoke("widget:uninstall", widgetName);
63351
+ const success = await ipcRenderer$i.invoke("widget:uninstall", widgetName);
63367
63352
  if (success) {
63368
63353
  console.log(`[WidgetApi] ✓ Widget ${widgetName} uninstalled`);
63369
63354
  } else {
@@ -63386,7 +63371,7 @@ const widgetApi$2 = {
63386
63371
  */
63387
63372
  getCachePath: async () => {
63388
63373
  try {
63389
- return await ipcRenderer$j.invoke("widget:cache-path");
63374
+ return await ipcRenderer$i.invoke("widget:cache-path");
63390
63375
  } catch (error) {
63391
63376
  console.error("[WidgetApi] Error getting cache path:", error);
63392
63377
  throw error;
@@ -63400,7 +63385,7 @@ const widgetApi$2 = {
63400
63385
  */
63401
63386
  getStoragePath: async () => {
63402
63387
  try {
63403
- return await ipcRenderer$j.invoke("widget:storage-path");
63388
+ return await ipcRenderer$i.invoke("widget:storage-path");
63404
63389
  } catch (error) {
63405
63390
  console.error("[WidgetApi] Error getting storage path:", error);
63406
63391
  throw error;
@@ -63417,7 +63402,7 @@ const widgetApi$2 = {
63417
63402
  setStoragePath: async (customPath) => {
63418
63403
  try {
63419
63404
  console.log(`[WidgetApi] Setting storage path to: ${customPath}`);
63420
- const result = await ipcRenderer$j.invoke(
63405
+ const result = await ipcRenderer$i.invoke(
63421
63406
  "widget:set-storage-path",
63422
63407
  customPath,
63423
63408
  );
@@ -63439,7 +63424,7 @@ const widgetApi$2 = {
63439
63424
  */
63440
63425
  getComponentConfigs: async () => {
63441
63426
  try {
63442
- return await ipcRenderer$j.invoke("widget:get-component-configs");
63427
+ return await ipcRenderer$i.invoke("widget:get-component-configs");
63443
63428
  } catch (error) {
63444
63429
  console.error("[WidgetApi] Error getting component configs:", error);
63445
63430
  return [];
@@ -63454,7 +63439,7 @@ const widgetApi$2 = {
63454
63439
  */
63455
63440
  readBundle: async (widgetName) => {
63456
63441
  try {
63457
- return await ipcRenderer$j.invoke("widget:read-bundle", widgetName);
63442
+ return await ipcRenderer$i.invoke("widget:read-bundle", widgetName);
63458
63443
  } catch (error) {
63459
63444
  console.error(
63460
63445
  `[WidgetApi] Error reading bundle for ${widgetName}:`,
@@ -63473,7 +63458,7 @@ const widgetApi$2 = {
63473
63458
  */
63474
63459
  readSources: async (widgetName, componentName) => {
63475
63460
  try {
63476
- return await ipcRenderer$j.invoke("widget:read-sources", {
63461
+ return await ipcRenderer$i.invoke("widget:read-sources", {
63477
63462
  widgetName,
63478
63463
  componentName,
63479
63464
  });
@@ -63493,7 +63478,7 @@ const widgetApi$2 = {
63493
63478
  */
63494
63479
  readAllBundles: async () => {
63495
63480
  try {
63496
- return await ipcRenderer$j.invoke("widget:read-all-bundles");
63481
+ return await ipcRenderer$i.invoke("widget:read-all-bundles");
63497
63482
  } catch (error) {
63498
63483
  console.error("[WidgetApi] Error reading all bundles:", error);
63499
63484
  return [];
@@ -63513,7 +63498,7 @@ const widgetApi$2 = {
63513
63498
  * });
63514
63499
  */
63515
63500
  onInstalled: (callback) => {
63516
- ipcRenderer$j.on("widget:installed", (event, data) => {
63501
+ ipcRenderer$i.on("widget:installed", (event, data) => {
63517
63502
  callback(data);
63518
63503
  });
63519
63504
  },
@@ -63530,7 +63515,7 @@ const widgetApi$2 = {
63530
63515
  * });
63531
63516
  */
63532
63517
  onUninstalled: (callback) => {
63533
- ipcRenderer$j.on("widget:uninstalled", (event, data) => {
63518
+ ipcRenderer$i.on("widget:uninstalled", (event, data) => {
63534
63519
  callback(data);
63535
63520
  });
63536
63521
  },
@@ -63548,7 +63533,7 @@ const widgetApi$2 = {
63548
63533
  * });
63549
63534
  */
63550
63535
  onLoaded: (callback) => {
63551
- ipcRenderer$j.on("widgets:loaded", (event, data) => {
63536
+ ipcRenderer$i.on("widgets:loaded", (event, data) => {
63552
63537
  callback(data);
63553
63538
  });
63554
63539
  },
@@ -63559,7 +63544,7 @@ const widgetApi$2 = {
63559
63544
  * @param {Function} callback - The callback to remove
63560
63545
  */
63561
63546
  removeInstalledListener: (callback) => {
63562
- ipcRenderer$j.removeListener("widget:installed", callback);
63547
+ ipcRenderer$i.removeListener("widget:installed", callback);
63563
63548
  },
63564
63549
 
63565
63550
  /**
@@ -63568,7 +63553,7 @@ const widgetApi$2 = {
63568
63553
  * @param {Function} callback - The callback to remove
63569
63554
  */
63570
63555
  removeUninstalledListener: (callback) => {
63571
- ipcRenderer$j.removeListener("widget:uninstalled", callback);
63556
+ ipcRenderer$i.removeListener("widget:uninstalled", callback);
63572
63557
  },
63573
63558
 
63574
63559
  /**
@@ -63577,7 +63562,7 @@ const widgetApi$2 = {
63577
63562
  * @param {Function} callback - The callback to remove
63578
63563
  */
63579
63564
  removeLoadedListener: (callback) => {
63580
- ipcRenderer$j.removeListener("widgets:loaded", callback);
63565
+ ipcRenderer$i.removeListener("widgets:loaded", callback);
63581
63566
  },
63582
63567
  };
63583
63568
 
@@ -63590,7 +63575,7 @@ var widgetApi_1 = widgetApi$2;
63590
63575
  * Communicates with main process via IPC to handle encryption and file storage
63591
63576
  */
63592
63577
 
63593
- const { ipcRenderer: ipcRenderer$i } = require$$0$1;
63578
+ const { ipcRenderer: ipcRenderer$h } = require$$0$1;
63594
63579
  const {
63595
63580
  PROVIDER_SAVE,
63596
63581
  PROVIDER_LIST,
@@ -63628,7 +63613,7 @@ const providerApi$2 = {
63628
63613
  // value, preserve what's on disk" from "caller explicitly unset it".
63629
63614
  isDefaultForType = undefined,
63630
63615
  ) =>
63631
- ipcRenderer$i.invoke(PROVIDER_SAVE, {
63616
+ ipcRenderer$h.invoke(PROVIDER_SAVE, {
63632
63617
  appId,
63633
63618
  providerName,
63634
63619
  providerType,
@@ -63648,7 +63633,7 @@ const providerApi$2 = {
63648
63633
  * @param {String} appId - the appId specified in the dash initialization
63649
63634
  * @returns {Promise<Array>} Array of provider objects with name, type, credentials
63650
63635
  */
63651
- listProviders: (appId) => ipcRenderer$i.invoke(PROVIDER_LIST, { appId }),
63636
+ listProviders: (appId) => ipcRenderer$h.invoke(PROVIDER_LIST, { appId }),
63652
63637
 
63653
63638
  /**
63654
63639
  * getProvider
@@ -63660,7 +63645,7 @@ const providerApi$2 = {
63660
63645
  * @returns {Promise<Object>} Provider object with name, type, credentials
63661
63646
  */
63662
63647
  getProvider: (appId, providerName) =>
63663
- ipcRenderer$i.invoke(PROVIDER_GET, { appId, providerName }),
63648
+ ipcRenderer$h.invoke(PROVIDER_GET, { appId, providerName }),
63664
63649
 
63665
63650
  /**
63666
63651
  * deleteProvider
@@ -63672,7 +63657,7 @@ const providerApi$2 = {
63672
63657
  * @returns {Promise}
63673
63658
  */
63674
63659
  deleteProvider: (appId, providerName) =>
63675
- ipcRenderer$i.invoke(PROVIDER_DELETE, { appId, providerName }),
63660
+ ipcRenderer$h.invoke(PROVIDER_DELETE, { appId, providerName }),
63676
63661
 
63677
63662
  /**
63678
63663
  * listProvidersForApplication
@@ -63682,14 +63667,14 @@ const providerApi$2 = {
63682
63667
  * @param {String} appId - the appId specified in the dash initialization
63683
63668
  */
63684
63669
  listProvidersForApplication: (appId) => {
63685
- ipcRenderer$i
63670
+ ipcRenderer$h
63686
63671
  .invoke(PROVIDER_LIST, { appId })
63687
63672
  .then((result) => {
63688
63673
  // Emit the event for ElectronDashboardApi to listen to
63689
- ipcRenderer$i.send("PROVIDER_LIST_COMPLETE", result);
63674
+ ipcRenderer$h.send("PROVIDER_LIST_COMPLETE", result);
63690
63675
  })
63691
63676
  .catch((error) => {
63692
- ipcRenderer$i.send("PROVIDER_LIST_ERROR", {
63677
+ ipcRenderer$h.send("PROVIDER_LIST_ERROR", {
63693
63678
  error: error.message,
63694
63679
  });
63695
63680
  });
@@ -63706,7 +63691,7 @@ const providerApi$2 = {
63706
63691
  providerType,
63707
63692
  credentials,
63708
63693
  ) => {
63709
- ipcRenderer$i
63694
+ ipcRenderer$h
63710
63695
  .invoke(PROVIDER_SAVE, {
63711
63696
  appId,
63712
63697
  providerName,
@@ -63714,10 +63699,10 @@ const providerApi$2 = {
63714
63699
  credentials,
63715
63700
  })
63716
63701
  .then((result) => {
63717
- ipcRenderer$i.send("PROVIDER_SAVE_COMPLETE", result);
63702
+ ipcRenderer$h.send("PROVIDER_SAVE_COMPLETE", result);
63718
63703
  })
63719
63704
  .catch((error) => {
63720
- ipcRenderer$i.send("PROVIDER_SAVE_ERROR", {
63705
+ ipcRenderer$h.send("PROVIDER_SAVE_ERROR", {
63721
63706
  error: error.message,
63722
63707
  });
63723
63708
  });
@@ -63729,13 +63714,13 @@ const providerApi$2 = {
63729
63714
  * Event-listener-based version for use with ElectronDashboardApi
63730
63715
  */
63731
63716
  getProviderForApplication: (appId, providerName) => {
63732
- ipcRenderer$i
63717
+ ipcRenderer$h
63733
63718
  .invoke(PROVIDER_GET, { appId, providerName })
63734
63719
  .then((result) => {
63735
- ipcRenderer$i.send("PROVIDER_GET_COMPLETE", result);
63720
+ ipcRenderer$h.send("PROVIDER_GET_COMPLETE", result);
63736
63721
  })
63737
63722
  .catch((error) => {
63738
- ipcRenderer$i.send("PROVIDER_GET_ERROR", {
63723
+ ipcRenderer$h.send("PROVIDER_GET_ERROR", {
63739
63724
  error: error.message,
63740
63725
  });
63741
63726
  });
@@ -63747,13 +63732,13 @@ const providerApi$2 = {
63747
63732
  * Event-listener-based version for use with ElectronDashboardApi
63748
63733
  */
63749
63734
  deleteProviderForApplication: (appId, providerName) => {
63750
- ipcRenderer$i
63735
+ ipcRenderer$h
63751
63736
  .invoke(PROVIDER_DELETE, { appId, providerName })
63752
63737
  .then((result) => {
63753
- ipcRenderer$i.send("PROVIDER_DELETE_COMPLETE", result);
63738
+ ipcRenderer$h.send("PROVIDER_DELETE_COMPLETE", result);
63754
63739
  })
63755
63740
  .catch((error) => {
63756
- ipcRenderer$i.send("PROVIDER_DELETE_ERROR", {
63741
+ ipcRenderer$h.send("PROVIDER_DELETE_ERROR", {
63757
63742
  error: error.message,
63758
63743
  });
63759
63744
  });
@@ -63769,7 +63754,7 @@ var providerApi_1 = providerApi$2;
63769
63754
  * Communicates with main process via IPC to manage MCP server lifecycle.
63770
63755
  */
63771
63756
 
63772
- const { ipcRenderer: ipcRenderer$h } = require$$0$1;
63757
+ const { ipcRenderer: ipcRenderer$g } = require$$0$1;
63773
63758
  const {
63774
63759
  MCP_START_SERVER,
63775
63760
  MCP_STOP_SERVER,
@@ -63808,7 +63793,7 @@ const mcpApi$2 = {
63808
63793
  workspaceId = null,
63809
63794
  pathScope = null,
63810
63795
  ) =>
63811
- ipcRenderer$h.invoke(MCP_START_SERVER, {
63796
+ ipcRenderer$g.invoke(MCP_START_SERVER, {
63812
63797
  serverName,
63813
63798
  mcpConfig,
63814
63799
  credentials,
@@ -63825,7 +63810,7 @@ const mcpApi$2 = {
63825
63810
  * @returns {Promise<{ success, serverName } | { error, message }>}
63826
63811
  */
63827
63812
  stopServer: (serverName, workspaceId = null) =>
63828
- ipcRenderer$h.invoke(MCP_STOP_SERVER, { serverName, workspaceId }),
63813
+ ipcRenderer$g.invoke(MCP_STOP_SERVER, { serverName, workspaceId }),
63829
63814
 
63830
63815
  /**
63831
63816
  * listTools
@@ -63836,7 +63821,7 @@ const mcpApi$2 = {
63836
63821
  * @returns {Promise<{ tools } | { error, message }>}
63837
63822
  */
63838
63823
  listTools: (serverName, workspaceId = null) =>
63839
- ipcRenderer$h.invoke(MCP_LIST_TOOLS, { serverName, workspaceId }),
63824
+ ipcRenderer$g.invoke(MCP_LIST_TOOLS, { serverName, workspaceId }),
63840
63825
 
63841
63826
  /**
63842
63827
  * callTool
@@ -63864,7 +63849,7 @@ const mcpApi$2 = {
63864
63849
  widgetId = null,
63865
63850
  workspaceId = null,
63866
63851
  ) =>
63867
- ipcRenderer$h.invoke(MCP_CALL_TOOL, {
63852
+ ipcRenderer$g.invoke(MCP_CALL_TOOL, {
63868
63853
  serverName,
63869
63854
  toolName,
63870
63855
  args,
@@ -63882,7 +63867,7 @@ const mcpApi$2 = {
63882
63867
  * @returns {Promise<{ resources } | { error, message }>}
63883
63868
  */
63884
63869
  listResources: (serverName, workspaceId = null) =>
63885
- ipcRenderer$h.invoke(MCP_LIST_RESOURCES, { serverName, workspaceId }),
63870
+ ipcRenderer$g.invoke(MCP_LIST_RESOURCES, { serverName, workspaceId }),
63886
63871
 
63887
63872
  /**
63888
63873
  * readResource
@@ -63894,7 +63879,7 @@ const mcpApi$2 = {
63894
63879
  * @returns {Promise<{ resource } | { error, message }>}
63895
63880
  */
63896
63881
  readResource: (serverName, uri, workspaceId = null) =>
63897
- ipcRenderer$h.invoke(MCP_READ_RESOURCE, { serverName, uri, workspaceId }),
63882
+ ipcRenderer$g.invoke(MCP_READ_RESOURCE, { serverName, uri, workspaceId }),
63898
63883
 
63899
63884
  /**
63900
63885
  * getServerStatus
@@ -63905,7 +63890,7 @@ const mcpApi$2 = {
63905
63890
  * @returns {Promise<{ status, tools, error }>}
63906
63891
  */
63907
63892
  getServerStatus: (serverName, workspaceId = null) =>
63908
- ipcRenderer$h.invoke(MCP_SERVER_STATUS, { serverName, workspaceId }),
63893
+ ipcRenderer$g.invoke(MCP_SERVER_STATUS, { serverName, workspaceId }),
63909
63894
 
63910
63895
  /**
63911
63896
  * getCatalog
@@ -63913,7 +63898,7 @@ const mcpApi$2 = {
63913
63898
  *
63914
63899
  * @returns {Promise<{ catalog } | { error, message }>}
63915
63900
  */
63916
- getCatalog: () => ipcRenderer$h.invoke(MCP_GET_CATALOG),
63901
+ getCatalog: () => ipcRenderer$g.invoke(MCP_GET_CATALOG),
63917
63902
 
63918
63903
  /**
63919
63904
  * getKnownExternalCatalog
@@ -63925,7 +63910,7 @@ const mcpApi$2 = {
63925
63910
  *
63926
63911
  * @returns {Promise<{ success, servers } | { error, message, servers }>}
63927
63912
  */
63928
- getKnownExternalCatalog: () => ipcRenderer$h.invoke(MCP_GET_KNOWN_EXTERNAL),
63913
+ getKnownExternalCatalog: () => ipcRenderer$g.invoke(MCP_GET_KNOWN_EXTERNAL),
63929
63914
 
63930
63915
  /**
63931
63916
  * onInstallKnownExternalConfirm
@@ -63939,9 +63924,9 @@ const mcpApi$2 = {
63939
63924
  */
63940
63925
  onInstallKnownExternalConfirm: (callback) => {
63941
63926
  const handler = (_e, data) => callback(data);
63942
- ipcRenderer$h.on(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63927
+ ipcRenderer$g.on(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63943
63928
  return () =>
63944
- ipcRenderer$h.removeListener(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63929
+ ipcRenderer$g.removeListener(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63945
63930
  },
63946
63931
 
63947
63932
  /**
@@ -63952,7 +63937,7 @@ const mcpApi$2 = {
63952
63937
  * @param {{ confirmed: boolean, credentials?: object, error?: string }} result
63953
63938
  */
63954
63939
  sendInstallKnownExternalResult: (requestId, result) =>
63955
- ipcRenderer$h.send(MCP_INSTALL_KNOWN_EXTERNAL_RESULT$1, { requestId, result }),
63940
+ ipcRenderer$g.send(MCP_INSTALL_KNOWN_EXTERNAL_RESULT$1, { requestId, result }),
63956
63941
 
63957
63942
  /**
63958
63943
  * runAuth
@@ -63964,7 +63949,7 @@ const mcpApi$2 = {
63964
63949
  * @returns {Promise<{ success } | { error, message }>}
63965
63950
  */
63966
63951
  runAuth: (mcpConfig, credentials, authCommand) =>
63967
- ipcRenderer$h.invoke(MCP_RUN_AUTH, { mcpConfig, credentials, authCommand }),
63952
+ ipcRenderer$g.invoke(MCP_RUN_AUTH, { mcpConfig, credentials, authCommand }),
63968
63953
  };
63969
63954
 
63970
63955
  var mcpApi_1 = mcpApi$2;
@@ -63982,7 +63967,7 @@ var mcpApi_1 = mcpApi$2;
63982
63967
  * mainApi.registry.checkUpdates([{ name: "weather-widgets", version: "1.0.0" }])
63983
63968
  */
63984
63969
 
63985
- const { ipcRenderer: ipcRenderer$g } = require$$0$1;
63970
+ const { ipcRenderer: ipcRenderer$f } = require$$0$1;
63986
63971
 
63987
63972
  const registryApi$2 = {
63988
63973
  /**
@@ -63992,7 +63977,7 @@ const registryApi$2 = {
63992
63977
  */
63993
63978
  fetchIndex: async (forceRefresh = false) => {
63994
63979
  try {
63995
- return await ipcRenderer$g.invoke("registry:fetch-index", forceRefresh);
63980
+ return await ipcRenderer$f.invoke("registry:fetch-index", forceRefresh);
63996
63981
  } catch (error) {
63997
63982
  console.error("[RegistryApi] Error fetching index:", error);
63998
63983
  throw error;
@@ -64007,7 +63992,7 @@ const registryApi$2 = {
64007
63992
  */
64008
63993
  search: async (query = "", filters = {}) => {
64009
63994
  try {
64010
- return await ipcRenderer$g.invoke("registry:search", query, filters);
63995
+ return await ipcRenderer$f.invoke("registry:search", query, filters);
64011
63996
  } catch (error) {
64012
63997
  console.error("[RegistryApi] Error searching registry:", error);
64013
63998
  throw error;
@@ -64021,7 +64006,7 @@ const registryApi$2 = {
64021
64006
  */
64022
64007
  getPackage: async (packageName) => {
64023
64008
  try {
64024
- return await ipcRenderer$g.invoke("registry:get-package", packageName);
64009
+ return await ipcRenderer$f.invoke("registry:get-package", packageName);
64025
64010
  } catch (error) {
64026
64011
  console.error(
64027
64012
  `[RegistryApi] Error getting package ${packageName}:`,
@@ -64038,7 +64023,7 @@ const registryApi$2 = {
64038
64023
  */
64039
64024
  checkUpdates: async (installedWidgets = []) => {
64040
64025
  try {
64041
- return await ipcRenderer$g.invoke(
64026
+ return await ipcRenderer$f.invoke(
64042
64027
  "registry:check-updates",
64043
64028
  installedWidgets,
64044
64029
  );
@@ -64056,7 +64041,7 @@ const registryApi$2 = {
64056
64041
  */
64057
64042
  searchDashboards: async (query = "", filters = {}) => {
64058
64043
  try {
64059
- return await ipcRenderer$g.invoke(
64044
+ return await ipcRenderer$f.invoke(
64060
64045
  "registry:search-dashboards",
64061
64046
  query,
64062
64047
  filters,
@@ -64075,7 +64060,7 @@ const registryApi$2 = {
64075
64060
  */
64076
64061
  searchThemes: async (query = "", filters = {}) => {
64077
64062
  try {
64078
- return await ipcRenderer$g.invoke("registry:search-themes", query, filters);
64063
+ return await ipcRenderer$f.invoke("registry:search-themes", query, filters);
64079
64064
  } catch (error) {
64080
64065
  console.error("[RegistryApi] Error searching themes:", error);
64081
64066
  throw error;
@@ -64097,7 +64082,7 @@ const registryApi$2 = {
64097
64082
  */
64098
64083
  publishWidget: async (appId, packageId, options = {}) => {
64099
64084
  try {
64100
- return await ipcRenderer$g.invoke("registry:publish-widget", {
64085
+ return await ipcRenderer$f.invoke("registry:publish-widget", {
64101
64086
  appId,
64102
64087
  packageId,
64103
64088
  options,
@@ -64118,7 +64103,7 @@ const registryApi$2 = {
64118
64103
  */
64119
64104
  inspectWidgetPackage: async (packageId) => {
64120
64105
  try {
64121
- return await ipcRenderer$g.invoke("registry:inspect-widget-package", {
64106
+ return await ipcRenderer$f.invoke("registry:inspect-widget-package", {
64122
64107
  packageId,
64123
64108
  });
64124
64109
  } catch (error) {
@@ -64139,7 +64124,7 @@ const registryApi$2 = {
64139
64124
  */
64140
64125
  scanWidgetDefaults: async (packageId) => {
64141
64126
  try {
64142
- return await ipcRenderer$g.invoke("registry:scan-widget-defaults", {
64127
+ return await ipcRenderer$f.invoke("registry:scan-widget-defaults", {
64143
64128
  packageId,
64144
64129
  });
64145
64130
  } catch (error) {
@@ -64162,7 +64147,7 @@ const registryApi$2 = {
64162
64147
  */
64163
64148
  previewFetch: async (packageName, componentName = null) => {
64164
64149
  try {
64165
- return await ipcRenderer$g.invoke(
64150
+ return await ipcRenderer$f.invoke(
64166
64151
  "registry:preview-fetch",
64167
64152
  packageName,
64168
64153
  componentName,
@@ -64185,7 +64170,7 @@ var registryApi_1 = registryApi$2;
64185
64170
  * Handle the theme configuration file
64186
64171
  */
64187
64172
 
64188
- const { ipcRenderer: ipcRenderer$f } = require$$0$1;
64173
+ const { ipcRenderer: ipcRenderer$e } = require$$0$1;
64189
64174
 
64190
64175
  const {
64191
64176
  THEME_LIST,
@@ -64198,17 +64183,17 @@ const {
64198
64183
 
64199
64184
  const themeApi$2 = {
64200
64185
  listThemesForApplication: (appId) =>
64201
- ipcRenderer$f.invoke(THEME_LIST, { appId }),
64186
+ ipcRenderer$e.invoke(THEME_LIST, { appId }),
64202
64187
  saveThemeForApplication: (appId, themeName, themeObject) =>
64203
- ipcRenderer$f.invoke(THEME_SAVE, { appId, themeName, themeObject }),
64188
+ ipcRenderer$e.invoke(THEME_SAVE, { appId, themeName, themeObject }),
64204
64189
  deleteThemeForApplication: (appId, themeKey) =>
64205
- ipcRenderer$f.invoke(THEME_DELETE, { appId, themeKey }),
64190
+ ipcRenderer$e.invoke(THEME_DELETE, { appId, themeKey }),
64206
64191
  publishTheme: (appId, themeKey, options) =>
64207
- ipcRenderer$f.invoke(THEME_PUBLISH, { appId, themeKey, options }),
64192
+ ipcRenderer$e.invoke(THEME_PUBLISH, { appId, themeKey, options }),
64208
64193
  installThemeFromRegistry: (appId, packageName) =>
64209
- ipcRenderer$f.invoke(THEME_INSTALL_FROM_REGISTRY, { appId, packageName }),
64194
+ ipcRenderer$e.invoke(THEME_INSTALL_FROM_REGISTRY, { appId, packageName }),
64210
64195
  getThemePublishPreview: (appId, themeKey) =>
64211
- ipcRenderer$f.invoke(THEME_PUBLISH_PREVIEW, { appId, themeKey }),
64196
+ ipcRenderer$e.invoke(THEME_PUBLISH_PREVIEW, { appId, themeKey }),
64212
64197
  };
64213
64198
 
64214
64199
  var themeApi_1 = themeApi$2;
@@ -64220,7 +64205,7 @@ var themeApi_1 = themeApi$2;
64220
64205
  */
64221
64206
 
64222
64207
  // ipcRenderer that must be used to invoke the events
64223
- const { ipcRenderer: ipcRenderer$e } = require$$0$1;
64208
+ const { ipcRenderer: ipcRenderer$d } = require$$0$1;
64224
64209
 
64225
64210
  const {
64226
64211
  ALGOLIA_LIST_INDICES,
@@ -64233,10 +64218,10 @@ const {
64233
64218
 
64234
64219
  const algoliaApi$2 = {
64235
64220
  listIndices: (application) =>
64236
- ipcRenderer$e.invoke(ALGOLIA_LIST_INDICES, application),
64221
+ ipcRenderer$d.invoke(ALGOLIA_LIST_INDICES, application),
64237
64222
 
64238
64223
  browseObjects: (appId, apiKey, indexName) => {
64239
- ipcRenderer$e.invoke(ALGOLIA_BROWSE_OBJECTS, {
64224
+ ipcRenderer$d.invoke(ALGOLIA_BROWSE_OBJECTS, {
64240
64225
  appId,
64241
64226
  apiKey,
64242
64227
  indexName,
@@ -64245,7 +64230,7 @@ const algoliaApi$2 = {
64245
64230
  },
64246
64231
 
64247
64232
  getAnalyticsForQuery: (application, indexName, query) =>
64248
- ipcRenderer$e.invoke(ALGOLIA_ANALYTICS_FOR_QUERY, {
64233
+ ipcRenderer$d.invoke(ALGOLIA_ANALYTICS_FOR_QUERY, {
64249
64234
  application,
64250
64235
  indexName,
64251
64236
  query,
@@ -64258,7 +64243,7 @@ const algoliaApi$2 = {
64258
64243
  dir,
64259
64244
  createIfNotExists = false,
64260
64245
  ) =>
64261
- ipcRenderer$e.invoke(ALGOLIA_PARTIAL_UPDATE_OBJECTS, {
64246
+ ipcRenderer$d.invoke(ALGOLIA_PARTIAL_UPDATE_OBJECTS, {
64262
64247
  appId,
64263
64248
  apiKey,
64264
64249
  indexName,
@@ -64267,7 +64252,7 @@ const algoliaApi$2 = {
64267
64252
  }),
64268
64253
 
64269
64254
  createBatchesFromFile: (filepath, batchFilepath, batchSize) => {
64270
- ipcRenderer$e.invoke(ALGOLIA_CREATE_BATCH, {
64255
+ ipcRenderer$d.invoke(ALGOLIA_CREATE_BATCH, {
64271
64256
  filepath,
64272
64257
  batchFilepath,
64273
64258
  batchSize,
@@ -64275,7 +64260,7 @@ const algoliaApi$2 = {
64275
64260
  },
64276
64261
 
64277
64262
  browseObjectsToFile: (appId, apiKey, indexName, toFilename, query = "") => {
64278
- ipcRenderer$e.invoke(ALGOLIA_BROWSE_OBJECTS, {
64263
+ ipcRenderer$d.invoke(ALGOLIA_BROWSE_OBJECTS, {
64279
64264
  appId,
64280
64265
  apiKey,
64281
64266
  indexName,
@@ -64285,7 +64270,7 @@ const algoliaApi$2 = {
64285
64270
  },
64286
64271
 
64287
64272
  search: (appId, apiKey, indexName, query = "", options = {}) =>
64288
- ipcRenderer$e.invoke(ALGOLIA_SEARCH, {
64273
+ ipcRenderer$d.invoke(ALGOLIA_SEARCH, {
64289
64274
  appId,
64290
64275
  apiKey,
64291
64276
  indexName,
@@ -64300,14 +64285,14 @@ var algoliaApi_1 = algoliaApi$2;
64300
64285
  * openAI
64301
64286
  */
64302
64287
 
64303
- const { ipcRenderer: ipcRenderer$d } = require$$0$1;
64288
+ const { ipcRenderer: ipcRenderer$c } = require$$0$1;
64304
64289
 
64305
64290
  const { OPENAI_DESCRIBE_IMAGE } = openaiEvents$1;
64306
64291
 
64307
64292
  const openaiApi$2 = {
64308
64293
  // convert a json array of objects to a csv string and save to file
64309
64294
  describeImage: (imageUrl, apiKey, prompt = "What's in this image?") =>
64310
- ipcRenderer$d.invoke(OPENAI_DESCRIBE_IMAGE, { imageUrl, apiKey, prompt }),
64295
+ ipcRenderer$c.invoke(OPENAI_DESCRIBE_IMAGE, { imageUrl, apiKey, prompt }),
64311
64296
  };
64312
64297
 
64313
64298
  var openaiApi_1 = openaiApi$2;
@@ -64318,35 +64303,18 @@ var openaiApi_1 = openaiApi$2;
64318
64303
  */
64319
64304
 
64320
64305
  // ipcRenderer that must be used to invoke the events
64321
- const { ipcRenderer: ipcRenderer$c } = require$$0$1;
64306
+ const { ipcRenderer: ipcRenderer$b } = require$$0$1;
64322
64307
 
64323
64308
  const { MENU_ITEMS_SAVE, MENU_ITEMS_LIST } = events$8;
64324
64309
 
64325
64310
  const menuItemsApi$2 = {
64326
64311
  saveMenuItem: (appId, menuItem) =>
64327
- ipcRenderer$c.invoke(MENU_ITEMS_SAVE, { appId, menuItem }),
64328
- listMenuItems: (appId) => ipcRenderer$c.invoke(MENU_ITEMS_LIST, { appId }),
64312
+ ipcRenderer$b.invoke(MENU_ITEMS_SAVE, { appId, menuItem }),
64313
+ listMenuItems: (appId) => ipcRenderer$b.invoke(MENU_ITEMS_LIST, { appId }),
64329
64314
  };
64330
64315
 
64331
64316
  var menuItemsApi_1 = menuItemsApi$2;
64332
64317
 
64333
- /**
64334
- * pluginApi.js
64335
- *
64336
- * Plugin management API for the renderer process.
64337
- */
64338
-
64339
- // ipcRenderer that must be used to invoke the events
64340
- const { ipcRenderer: ipcRenderer$b } = require$$0$1;
64341
-
64342
- const pluginApi$2 = {
64343
- install: (packageName, filepath) =>
64344
- ipcRenderer$b.invoke("plugin-install", { packageName, filepath }),
64345
- uninstall: (filepath) => ipcRenderer$b.invoke("plugin-uninstall", filepath),
64346
- };
64347
-
64348
- var pluginApi_1 = pluginApi$2;
64349
-
64350
64318
  /**
64351
64319
  * llmApi.js
64352
64320
  *
@@ -66439,7 +66407,6 @@ const themeApi$1 = themeApi_1;
66439
66407
  const algoliaApi$1 = algoliaApi_1;
66440
66408
  const openaiApi$1 = openaiApi_1;
66441
66409
  const menuItemsApi$1 = menuItemsApi_1;
66442
- const pluginApi$1 = pluginApi_1;
66443
66410
  const llmApi$1 = llmApi_1;
66444
66411
  const dashboardConfigApi$1 = dashboardConfigApi_1;
66445
66412
  const dashboardRatingsApi = dashboardRatingsApi_1;
@@ -66519,7 +66486,6 @@ function createMainApi$1(extensions = {}) {
66519
66486
  algolia: algoliaApi$1,
66520
66487
  openai: openaiApi$1,
66521
66488
  menuItems: menuItemsApi$1,
66522
- plugins: pluginApi$1,
66523
66489
  dashboardConfig: dashboardConfigApi$1,
66524
66490
  dashboardRatings: dashboardRatingsApi,
66525
66491
  registryAuth: registryAuthApi$1,
@@ -66572,7 +66538,6 @@ const registryController = registryController$3;
66572
66538
  const algoliaController = algoliaController_1;
66573
66539
  const openaiController = openaiController_1;
66574
66540
  const menuItemsController = menuItemsController_1;
66575
- const pluginController = pluginController_1;
66576
66541
  const llmController = llmController_1;
66577
66542
  const cliController = cliController_1;
66578
66543
  const dashboardConfigController = dashboardConfigController$1;
@@ -66615,7 +66580,6 @@ const themeApi = themeApi_1;
66615
66580
  const algoliaApi = algoliaApi_1;
66616
66581
  const openaiApi = openaiApi_1;
66617
66582
  const menuItemsApi = menuItemsApi_1;
66618
- const pluginApi = pluginApi_1;
66619
66583
  const llmApi = llmApi_1;
66620
66584
  const dashboardConfigApi = dashboardConfigApi_1;
66621
66585
  const registryAuthApi = registryAuthApi_1;
@@ -66677,7 +66641,6 @@ var electron = {
66677
66641
  algoliaController,
66678
66642
  openaiController,
66679
66643
  menuItemsController,
66680
- pluginController,
66681
66644
  llmController,
66682
66645
  cliController,
66683
66646
  dashboardConfigController,
@@ -66712,7 +66675,6 @@ var electron = {
66712
66675
  algoliaApi,
66713
66676
  openaiApi,
66714
66677
  menuItemsApi,
66715
- pluginApi,
66716
66678
  llmApi,
66717
66679
  dashboardConfigApi,
66718
66680
  registryAuthApi,