@trops/dash-core 0.1.502 → 0.1.504

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.
@@ -1,11 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var require$$0$1 = require('electron');
4
- var require$$1$1 = require('electron-store');
5
- var require$$1$2 = require('path');
4
+ var require$$1$1 = require('path');
6
5
  var require$$0$2 = require('fs');
7
6
  var require$$8$1 = require('objects-to-csv');
8
- var require$$1$3 = require('readline');
7
+ var require$$1$2 = require('readline');
9
8
  var require$$2 = require('xtreamer');
10
9
  var require$$3$1 = require('xml2js');
11
10
  var require$$4 = require('JSONStream');
@@ -14,27 +13,28 @@ var require$$6 = require('csv-parser');
14
13
  var require$$0$3 = require('quickjs-emscripten');
15
14
  var require$$10 = require('https');
16
15
  var require$$0$5 = require('@modelcontextprotocol/sdk/client/index.js');
17
- var require$$1$4 = require('@modelcontextprotocol/sdk/client/stdio.js');
16
+ var require$$1$3 = require('@modelcontextprotocol/sdk/client/stdio.js');
18
17
  var require$$0$4 = require('pkce-challenge');
19
18
  var require$$2$1 = require('os');
20
19
  var require$$12 = require('child_process');
20
+ var require$$0$6 = require('electron-store');
21
21
  var require$$3$2 = require('adm-zip');
22
22
  var require$$4$1 = require('url');
23
23
  var require$$2$2 = require('vm');
24
- var require$$1$5 = require('croner');
24
+ var require$$1$4 = require('croner');
25
25
  var require$$2$3 = require('algoliasearch');
26
26
  var require$$3$3 = require('node:path');
27
- var require$$0$6 = require('openai');
27
+ var require$$0$7 = require('openai');
28
28
  require('live-plugin-manager');
29
- var require$$0$9 = require('@anthropic-ai/sdk');
29
+ var require$$0$a = require('@anthropic-ai/sdk');
30
30
  var require$$3$4 = require('crypto');
31
31
  var require$$8$2 = require('zod');
32
- var require$$0$7 = require('http');
33
- var require$$1$6 = require('http2');
32
+ var require$$0$8 = require('http');
33
+ var require$$1$5 = require('http2');
34
34
  var require$$2$4 = require('node-forge');
35
- var require$$0$8 = require('css');
36
- var require$$1$7 = require('node-vibrant/node');
37
- var require$$0$a = require('ws');
35
+ var require$$0$9 = require('css');
36
+ var require$$1$6 = require('node-vibrant/node');
37
+ var require$$0$b = require('ws');
38
38
 
39
39
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
40
40
 
@@ -79,11 +79,11 @@ const SECURE_STORAGE_ENCRYPT_STRING_COMPLETE =
79
79
  const SECURE_STORAGE_ENCRYPT_STRING_ERROR =
80
80
  "secure-storage-encrypt-string-error";
81
81
 
82
- const SECURE_STORE_GET_DATA$1 = "secure-storage-get-data";
82
+ const SECURE_STORE_GET_DATA = "secure-storage-get-data";
83
83
  const SECURE_STORE_GET_DATA_COMPLETE = "secure-storage-get-data-complete";
84
84
  const SECURE_STORE_GET_DATA_ERROR = "secure-storage-get-data-error";
85
85
 
86
- const SECURE_STORE_SET_DATA$1 = "secure-storage-set-data";
86
+ const SECURE_STORE_SET_DATA = "secure-storage-set-data";
87
87
  const SECURE_STORE_SET_DATA_COMPLETE = "secure-storage-set-data-complete";
88
88
  const SECURE_STORE_SET_DATA_ERROR = "secure-storage-set-data-error";
89
89
 
@@ -91,10 +91,10 @@ var secureStorageEvents$1 = {
91
91
  SECURE_STORE_ENCRYPTION_CHECK: SECURE_STORE_ENCRYPTION_CHECK$1,
92
92
  SECURE_STORE_ENCRYPTION_CHECK_COMPLETE,
93
93
  SECURE_STORE_ENCRYPTION_CHECK_ERROR,
94
- SECURE_STORE_SET_DATA: SECURE_STORE_SET_DATA$1,
94
+ SECURE_STORE_SET_DATA,
95
95
  SECURE_STORE_SET_DATA_COMPLETE,
96
96
  SECURE_STORE_SET_DATA_ERROR,
97
- SECURE_STORE_GET_DATA: SECURE_STORE_GET_DATA$1,
97
+ SECURE_STORE_GET_DATA,
98
98
  SECURE_STORE_GET_DATA_COMPLETE,
99
99
  SECURE_STORE_GET_DATA_ERROR,
100
100
  SECURE_STORAGE_ENCRYPT_STRING,
@@ -142,17 +142,10 @@ const LAYOUT_LIST$1 = "layout-list";
142
142
  const LAYOUT_LIST_COMPLETE = "layout-list-complete";
143
143
  const LAYOUT_LIST_ERROR = "layout-list-error";
144
144
 
145
- const LAYOUT_SAVE$1 = "layout-save";
146
- const LAYOUT_SAVE_COMPLETE = "layout-save-complete";
147
- const LAYOUT_SAVE_ERROR = "layout-save-error";
148
-
149
145
  var layoutEvents$1 = {
150
146
  LAYOUT_LIST: LAYOUT_LIST$1,
151
147
  LAYOUT_LIST_COMPLETE,
152
148
  LAYOUT_LIST_ERROR,
153
- LAYOUT_SAVE: LAYOUT_SAVE$1,
154
- LAYOUT_SAVE_COMPLETE,
155
- LAYOUT_SAVE_ERROR,
156
149
  };
157
150
 
158
151
  /**
@@ -611,24 +604,6 @@ var llmEvents$1 = {
611
604
  LLM_CLI_END_SESSION: LLM_CLI_END_SESSION$1,
612
605
  };
613
606
 
614
- /**
615
- * Event Constants File - Client Cache Events
616
- *
617
- * This file contains event constants for client cache management IPC communication.
618
- */
619
-
620
- const CLIENT_CACHE_INVALIDATE$1 = "client-cache-invalidate";
621
- const CLIENT_CACHE_INVALIDATE_ALL$1 = "client-cache-invalidate-all";
622
- const RESPONSE_CACHE_CLEAR$1 = "response-cache-clear";
623
- const RESPONSE_CACHE_STATS$1 = "response-cache-stats";
624
-
625
- var clientCacheEvents$1 = {
626
- CLIENT_CACHE_INVALIDATE: CLIENT_CACHE_INVALIDATE$1,
627
- CLIENT_CACHE_INVALIDATE_ALL: CLIENT_CACHE_INVALIDATE_ALL$1,
628
- RESPONSE_CACHE_CLEAR: RESPONSE_CACHE_CLEAR$1,
629
- RESPONSE_CACHE_STATS: RESPONSE_CACHE_STATS$1,
630
- };
631
-
632
607
  /**
633
608
  * Dashboard Config Events
634
609
  *
@@ -941,7 +916,6 @@ const algoliaEvents = algoliaEvents$1;
941
916
  const menuItemEvents = menuItemEvents$1;
942
917
  const openaiEvents = openaiEvents$1;
943
918
  const llmEvents = llmEvents$1;
944
- const clientCacheEvents = clientCacheEvents$1;
945
919
  const dashboardConfigEvents = requireDashboardConfigEvents();
946
920
  const dashboardRatingsEvents = dashboardRatingsEvents$1;
947
921
  const registryAuthEvents = registryAuthEvents$1;
@@ -963,7 +937,6 @@ const publicEvents = {
963
937
  */
964
938
  const API_GROUPS = {
965
939
  algolia: Object.values(algoliaEvents),
966
- cache: Object.values(clientCacheEvents),
967
940
  "dashboard-config": Object.values(dashboardConfigEvents),
968
941
  "dashboard-ratings": Object.values(dashboardRatingsEvents),
969
942
  data: Object.values(dataEvents),
@@ -1004,7 +977,6 @@ var events$8 = {
1004
977
  ...menuItemEvents,
1005
978
  ...openaiEvents,
1006
979
  ...llmEvents,
1007
- ...clientCacheEvents,
1008
980
  ...dashboardConfigEvents,
1009
981
  ...dashboardRatingsEvents,
1010
982
  ...registryAuthEvents,
@@ -1044,22 +1016,23 @@ var dialogController$1 = {
1044
1016
  };
1045
1017
 
1046
1018
  /**
1047
- * secureStore
1019
+ * secureStoreController
1020
+ *
1021
+ * Thin wrapper around Electron's `safeStorage` for renderer-side
1022
+ * encryption checks. The `saveData` / `getData` helpers that previously
1023
+ * lived here were unwired (no IPC handler in dash-electron) and
1024
+ * lacked per-widget scoping; they were removed alongside their
1025
+ * widget-facing API entries. See `electron/api/secureStoreApi.js`
1026
+ * and the regression-pin in `secureStoreApi.test.js`.
1027
+ *
1028
+ * Provider credential encryption uses `safeStorage.encryptString` /
1029
+ * `decryptString` directly inside `providerController` — that's the
1030
+ * only internal caller and stays unchanged.
1048
1031
  */
1049
1032
 
1050
1033
  const { safeStorage } = require$$0$1;
1051
- const Store$2 = require$$1$1;
1052
1034
  const events$6 = events$8;
1053
1035
 
1054
- const schema$1 = {
1055
- appId: {
1056
- type: "string",
1057
- },
1058
- apiKey: {
1059
- type: "string",
1060
- },
1061
- };
1062
-
1063
1036
  const isEncryptionAvailable$1 = (win) => {
1064
1037
  const result = safeStorage.isEncryptionAvailable();
1065
1038
  win.webContents.send(events$6.SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, result);
@@ -1075,42 +1048,16 @@ const decryptString = (win, str) => {
1075
1048
  win.webContents.send("secure-storage-decrypt-string-complete", result);
1076
1049
  };
1077
1050
 
1078
- const saveData$1 = (key, value) => {
1079
- try {
1080
- const store = new Store$2({ schema: schema$1 });
1081
- store.set(key, value);
1082
- return getData$1(key);
1083
- } catch (e) {
1084
- return { data: null };
1085
- }
1086
- };
1087
-
1088
- const getData$1 = (key) => {
1089
- try {
1090
- const store = new Store$2({ schema: schema$1 });
1091
- const value = store.get(key);
1092
- if (value) {
1093
- return { [key]: value };
1094
- } else {
1095
- return null;
1096
- }
1097
- } catch (e) {
1098
- return null;
1099
- }
1100
- };
1101
-
1102
1051
  var secureStoreController$1 = {
1103
1052
  isEncryptionAvailable: isEncryptionAvailable$1,
1104
1053
  encryptString,
1105
1054
  decryptString,
1106
- saveData: saveData$1,
1107
- getData: getData$1,
1108
1055
  };
1109
1056
 
1110
- const path$m = require$$1$2;
1057
+ const path$m = require$$1$1;
1111
1058
  const {
1112
1059
  readFileSync,
1113
- writeFileSync: writeFileSync$4,
1060
+ writeFileSync: writeFileSync$3,
1114
1061
  existsSync,
1115
1062
  mkdirSync,
1116
1063
  openSync,
@@ -1201,13 +1148,13 @@ function getFileContents$8(filepath, defaultReturn = []) {
1201
1148
 
1202
1149
  // Reinitialize with default content
1203
1150
  fileContentsArray = defaultReturn;
1204
- writeFileSync$4(filepath, JSON.stringify(defaultReturn, null, 2));
1151
+ writeFileSync$3(filepath, JSON.stringify(defaultReturn, null, 2));
1205
1152
  console.log(`[File] Successfully reinitialized: ${filepath}`);
1206
1153
  }
1207
1154
  } else {
1208
1155
  // we should make the file with default content
1209
1156
  closeSync(openSync(filepath, "w"));
1210
- writeFileSync$4(filepath, JSON.stringify(defaultReturn, null, 2));
1157
+ writeFileSync$3(filepath, JSON.stringify(defaultReturn, null, 2));
1211
1158
  }
1212
1159
 
1213
1160
  return fileContentsArray;
@@ -1220,7 +1167,7 @@ function getFileContents$8(filepath, defaultReturn = []) {
1220
1167
  function writeToFile$3(filename, data) {
1221
1168
  try {
1222
1169
  // write the new pages configuration back to the file
1223
- return writeFileSync$4(filename, data);
1170
+ return writeFileSync$3(filename, data);
1224
1171
  } catch (e) {
1225
1172
  return false;
1226
1173
  }
@@ -1258,8 +1205,8 @@ var file = {
1258
1205
  };
1259
1206
 
1260
1207
  const { app: app$e } = require$$0$1;
1261
- const path$l = require$$1$2;
1262
- const { writeFileSync: writeFileSync$3 } = require$$0$2;
1208
+ const path$l = require$$1$1;
1209
+ const { writeFileSync: writeFileSync$2 } = require$$0$2;
1263
1210
  const { getFileContents: getFileContents$7 } = file;
1264
1211
 
1265
1212
  const configFilename$5 = "workspaces.json";
@@ -1331,7 +1278,7 @@ const workspaceController$3 = {
1331
1278
  }
1332
1279
 
1333
1280
  // write the new pages configuration back to the file
1334
- writeFileSync$3(filename, JSON.stringify(workspacesArray, null, 2));
1281
+ writeFileSync$2(filename, JSON.stringify(workspacesArray, null, 2));
1335
1282
 
1336
1283
  console.log("[workspaceController] Workspace saved successfully");
1337
1284
 
@@ -1374,7 +1321,7 @@ const workspaceController$3 = {
1374
1321
  }
1375
1322
 
1376
1323
  // write the updated workspaces configuration back to the file
1377
- writeFileSync$3(filename, JSON.stringify(workspacesArray, null, 2));
1324
+ writeFileSync$2(filename, JSON.stringify(workspacesArray, null, 2));
1378
1325
 
1379
1326
  console.log("[workspaceController] Menu items saved successfully");
1380
1327
 
@@ -1415,7 +1362,7 @@ const workspaceController$3 = {
1415
1362
  (workspace) => workspace.id !== workspaceId,
1416
1363
  );
1417
1364
 
1418
- writeFileSync$3(filename, JSON.stringify(filtered, null, 2));
1365
+ writeFileSync$2(filename, JSON.stringify(filtered, null, 2));
1419
1366
 
1420
1367
  console.log(
1421
1368
  `[workspaceController] Workspace ${workspaceId} deleted successfully`,
@@ -1510,8 +1457,8 @@ const workspaceController$3 = {
1510
1457
  var workspaceController_1 = workspaceController$3;
1511
1458
 
1512
1459
  const { app: app$d } = require$$0$1;
1513
- const path$k = require$$1$2;
1514
- const { writeFileSync: writeFileSync$2 } = require$$0$2;
1460
+ const path$k = require$$1$1;
1461
+ const { writeFileSync: writeFileSync$1 } = require$$0$2;
1515
1462
  const { getFileContents: getFileContents$6 } = file;
1516
1463
 
1517
1464
  const configFilename$4 = "themes.json";
@@ -1546,7 +1493,7 @@ const themeController$5 = {
1546
1493
  data[name] = obj;
1547
1494
 
1548
1495
  // write the new pages configuration back to the file
1549
- writeFileSync$2(filename, JSON.stringify(data, null, 2));
1496
+ writeFileSync$1(filename, JSON.stringify(data, null, 2));
1550
1497
 
1551
1498
  console.log("[themeController] Theme saved successfully");
1552
1499
 
@@ -1628,7 +1575,7 @@ const themeController$5 = {
1628
1575
 
1629
1576
  if (themeKey in data) {
1630
1577
  delete data[themeKey];
1631
- writeFileSync$2(filename, JSON.stringify(data, null, 2));
1578
+ writeFileSync$1(filename, JSON.stringify(data, null, 2));
1632
1579
  }
1633
1580
 
1634
1581
  console.log("[themeController] Theme deleted successfully:", themeKey);
@@ -1695,7 +1642,7 @@ var themeController_1 = themeController$5;
1695
1642
  * `/data/`.
1696
1643
  */
1697
1644
 
1698
- const path$j = require$$1$2;
1645
+ const path$j = require$$1$1;
1699
1646
  const fs$e = require$$0$2;
1700
1647
  const { app: app$c } = require$$0$1;
1701
1648
 
@@ -1864,7 +1811,7 @@ var safePath_1 = {
1864
1811
  */
1865
1812
 
1866
1813
  const fs$d = require$$0$2;
1867
- const path$i = require$$1$2;
1814
+ const path$i = require$$1$1;
1868
1815
  const { app: app$b } = require$$0$1;
1869
1816
 
1870
1817
  const FILE_NAME = "widgetMcpGrants.json";
@@ -2865,13 +2812,13 @@ function requireTransform () {
2865
2812
  if (hasRequiredTransform) return transform;
2866
2813
  hasRequiredTransform = 1;
2867
2814
  var fs = require$$0$2;
2868
- var readline = require$$1$3;
2815
+ var readline = require$$1$2;
2869
2816
  const xtreamer = require$$2;
2870
2817
  var xmlParser = require$$3$1;
2871
2818
  var JSONStream = require$$4;
2872
2819
  const stream = require$$5;
2873
2820
  var csv = require$$6;
2874
- const path = require$$1$2;
2821
+ const path = require$$1$1;
2875
2822
  const { app } = require$$0$1;
2876
2823
  const { ensureDirectoryExistence } = file;
2877
2824
  const safeJsExecutor = requireSafeJsExecutor();
@@ -3313,7 +3260,7 @@ function requireTransform () {
3313
3260
 
3314
3261
  const { app: app$a } = require$$0$1;
3315
3262
  var fs$c = require$$0$2;
3316
- const path$h = require$$1$2;
3263
+ const path$h = require$$1$1;
3317
3264
  const events$5 = events$8;
3318
3265
  const { getFileContents: getFileContents$5, writeToFile: writeToFile$2 } = file;
3319
3266
  const { safePath: safePath$2, getAllowedRoots: getAllowedRoots$1 } = safePath_1;
@@ -3907,7 +3854,7 @@ var dataController_1 = dataController$1;
3907
3854
  */
3908
3855
 
3909
3856
  const { app: app$9 } = require$$0$1;
3910
- const path$g = require$$1$2;
3857
+ const path$g = require$$1$1;
3911
3858
  const fs$b = require$$0$2;
3912
3859
  const { getFileContents: getFileContents$4, writeToFile: writeToFile$1 } = file;
3913
3860
 
@@ -4430,7 +4377,7 @@ function requireProviderController () {
4430
4377
  if (hasRequiredProviderController) return providerController_1;
4431
4378
  hasRequiredProviderController = 1;
4432
4379
  const { app, safeStorage } = require$$0$1;
4433
- const path = require$$1$2;
4380
+ const path = require$$1$1;
4434
4381
  const { writeFileSync, readFileSync, existsSync } = require$$0$2;
4435
4382
  const {
4436
4383
  ensureDirectoryExistence,
@@ -4812,8 +4759,7 @@ function requireProviderController () {
4812
4759
  }
4813
4760
 
4814
4761
  const { app: app$8 } = require$$0$1;
4815
- const path$f = require$$1$2;
4816
- const { writeFileSync: writeFileSync$1 } = require$$0$2;
4762
+ const path$f = require$$1$1;
4817
4763
  const events$4 = events$8;
4818
4764
  const { getFileContents: getFileContents$3 } = file;
4819
4765
 
@@ -4821,42 +4767,6 @@ const configFilename$2 = "layouts.json";
4821
4767
  const appName$3 = "Dashboard";
4822
4768
 
4823
4769
  const layoutController$1 = {
4824
- /**
4825
- * saveLayout
4826
- * Create a workspace from a json configuration object (no template)
4827
- *
4828
- * @param {BrowserWindow} win the main window
4829
- * @param {string} appId the application id
4830
- * @param {object} pageObject the page config object
4831
- */
4832
- saveLayoutForApplication: (win, appId, layoutObject) => {
4833
- try {
4834
- // filename to the pages file (live pages)
4835
- const filename = path$f.join(
4836
- app$8.getPath("userData"),
4837
- appName$3,
4838
- appId,
4839
- configFilename$2,
4840
- );
4841
- const layoutsArray = getFileContents$3(filename);
4842
-
4843
- // add the pageObject to the pages file
4844
- layoutsArray.push(layoutObject);
4845
-
4846
- // write the new pages configuration back to the file
4847
- writeFileSync$1(filename, JSON.stringify(layoutsArray, null, 2));
4848
-
4849
- // message the renderer
4850
- win.webContents.send(events$4.LAYOUT_SAVE_COMPLETE, {
4851
- layouts: layoutsArray,
4852
- });
4853
- } catch (e) {
4854
- win.webContents.send(events$4.LAYOUT_SAVE_ERROR, {
4855
- error: e.message,
4856
- });
4857
- }
4858
- },
4859
-
4860
4770
  /**
4861
4771
  *
4862
4772
  *
@@ -22525,11 +22435,11 @@ var mcpScopeResolver = {
22525
22435
  const { Client } = require$$0$5;
22526
22436
  const {
22527
22437
  StdioClientTransport,
22528
- } = require$$1$4;
22438
+ } = require$$1$3;
22529
22439
  const {
22530
22440
  StreamableHTTPClientTransport,
22531
22441
  } = streamableHttp$1;
22532
- const path$e = require$$1$2;
22442
+ const path$e = require$$1$1;
22533
22443
  const fs$a = require$$0$2;
22534
22444
  const os$2 = require$$2$1;
22535
22445
  const responseCache$2 = responseCache_1;
@@ -23685,7 +23595,7 @@ const mcpController$3 = {
23685
23595
  const sourcePath = credentials?.[from];
23686
23596
  if (sourcePath) {
23687
23597
  const destPath = to.replace(/^~/, os$2.homedir());
23688
- const destDir = require$$1$2.dirname(destPath);
23598
+ const destDir = require$$1$1.dirname(destPath);
23689
23599
  try {
23690
23600
  fs$a.mkdirSync(destDir, { recursive: true });
23691
23601
  fs$a.copyFileSync(sourcePath, destPath);
@@ -23905,7 +23815,7 @@ const REGISTRY_BASE_URL$1 =
23905
23815
  let store$3 = null;
23906
23816
  function getStore$1() {
23907
23817
  if (!store$3) {
23908
- const Store = require$$1$1;
23818
+ const Store = require$$0$6;
23909
23819
  store$3 = new Store({
23910
23820
  name: "dash-registry-auth",
23911
23821
  encryptionKey: "dash-registry-v1",
@@ -24273,7 +24183,7 @@ function commonjsRequire(path) {
24273
24183
  */
24274
24184
 
24275
24185
  const fs$9 = require$$0$2;
24276
- const path$d = require$$1$2;
24186
+ const path$d = require$$1$1;
24277
24187
 
24278
24188
  /**
24279
24189
  * Structured error thrown by compileWidget() when the underlying
@@ -24590,7 +24500,7 @@ var widgetCompiler$1 = {
24590
24500
  */
24591
24501
 
24592
24502
  const fs$8 = require$$0$2;
24593
- const path$c = require$$1$2;
24503
+ const path$c = require$$1$1;
24594
24504
  const vm = require$$2$2;
24595
24505
  const { findWidgetsDir: findWidgetsDir$1 } = widgetCompiler$1;
24596
24506
 
@@ -24881,7 +24791,7 @@ var dynamicWidgetLoaderExports = dynamicWidgetLoader$3.exports;
24881
24791
  */
24882
24792
 
24883
24793
  const fs$7 = require$$0$2;
24884
- const path$b = require$$1$2;
24794
+ const path$b = require$$1$1;
24885
24795
  const os$1 = require$$2$1;
24886
24796
  const { app: app$6 } = require$$0$1;
24887
24797
 
@@ -25010,7 +24920,7 @@ var widgetPermissions = {
25010
24920
  */
25011
24921
 
25012
24922
  const fs$6 = require$$0$2;
25013
- const path$a = require$$1$2;
24923
+ const path$a = require$$1$1;
25014
24924
 
25015
24925
  const SOURCE_EXTENSIONS = new Set([
25016
24926
  ".js",
@@ -25190,8 +25100,8 @@ var manifestScanner = {
25190
25100
  * and dispatching task-fired events to renderer windows.
25191
25101
  */
25192
25102
 
25193
- const Store$1 = require$$1$1;
25194
- const { Cron } = require$$1$5;
25103
+ const Store$1 = require$$0$6;
25104
+ const { Cron } = require$$1$4;
25195
25105
 
25196
25106
  const store$2 = new Store$1({ name: "dash-scheduler" });
25197
25107
 
@@ -25713,7 +25623,7 @@ var schedulerController_1 = schedulerController$2;
25713
25623
 
25714
25624
  (function (module) {
25715
25625
  const fs = require$$0$2;
25716
- const path = require$$1$2;
25626
+ const path = require$$1$1;
25717
25627
  const os = require$$2$1;
25718
25628
  const AdmZip = require$$3$2;
25719
25629
  const { fileURLToPath } = require$$4$1;
@@ -27236,7 +27146,7 @@ var widgetRegistryExports = widgetRegistry$1.exports;
27236
27146
  * - Support two-level browsing: packages (bundles) and widgets within packages
27237
27147
  */
27238
27148
 
27239
- const path$9 = require$$1$2;
27149
+ const path$9 = require$$1$1;
27240
27150
  const fs$5 = require$$0$2;
27241
27151
  const os = require$$2$1;
27242
27152
  const { toPackageId } = packageId;
@@ -28406,7 +28316,7 @@ const algoliaController$1 = {
28406
28316
 
28407
28317
  var algoliaController_1 = algoliaController$1;
28408
28318
 
28409
- const OpenAI = require$$0$6;
28319
+ const OpenAI = require$$0$7;
28410
28320
  const events$2 = events$8;
28411
28321
 
28412
28322
  const openaiController$1 = {
@@ -28510,7 +28420,7 @@ function upsertMenuItem$1(items, menuItem) {
28510
28420
  var upsertMenuItem_1 = { upsertMenuItem: upsertMenuItem$1 };
28511
28421
 
28512
28422
  const { app: app$5 } = require$$0$1;
28513
- const path$7 = require$$1$2;
28423
+ const path$7 = require$$1$1;
28514
28424
  const { writeFileSync } = require$$0$2;
28515
28425
  const { getFileContents: getFileContents$2 } = file;
28516
28426
  const { upsertMenuItem } = upsertMenuItem_1;
@@ -28566,7 +28476,7 @@ const menuItemsController$1 = {
28566
28476
 
28567
28477
  var menuItemsController_1 = menuItemsController$1;
28568
28478
 
28569
- const path$6 = require$$1$2;
28479
+ const path$6 = require$$1$1;
28570
28480
  const { app: app$4 } = require$$0$1;
28571
28481
 
28572
28482
  const pluginController$1 = {
@@ -46785,13 +46695,13 @@ __export(src_exports, {
46785
46695
  var dist = __toCommonJS(src_exports);
46786
46696
 
46787
46697
  // src/server.ts
46788
- var import_node_http = require$$0$7;
46698
+ var import_node_http = require$$0$8;
46789
46699
 
46790
46700
  // src/listener.ts
46791
- var import_node_http22 = require$$1$6;
46701
+ var import_node_http22 = require$$1$5;
46792
46702
 
46793
46703
  // src/request.ts
46794
- var import_node_http2 = require$$1$6;
46704
+ var import_node_http2 = require$$1$5;
46795
46705
  var import_node_stream = require$$5;
46796
46706
  var RequestError = class extends Error {
46797
46707
  constructor(message, options) {
@@ -48369,7 +48279,7 @@ streamableHttp.StreamableHTTPServerTransport = StreamableHTTPServerTransport$1;
48369
48279
  */
48370
48280
 
48371
48281
  const fs$2 = require$$0$2;
48372
- const path$5 = require$$1$2;
48282
+ const path$5 = require$$1$1;
48373
48283
  const forge = require$$2$4;
48374
48284
 
48375
48285
  /**
@@ -48768,7 +48678,7 @@ function saveMcpServerSettings(win, mcpSettings) {
48768
48678
  function resolveAppId() {
48769
48679
  const { app } = require$$0$1;
48770
48680
  const fs = require$$0$2;
48771
- const path = require$$1$2;
48681
+ const path = require$$1$1;
48772
48682
  const dashboardDir = path.join(app.getPath("userData"), "Dashboard");
48773
48683
  try {
48774
48684
  const entries = fs.readdirSync(dashboardDir, { withFileTypes: true });
@@ -50370,10 +50280,10 @@ var themeFromUrlErrors$1 = {
50370
50280
  * computed styles, and favicon/logo images (via node-vibrant).
50371
50281
  */
50372
50282
 
50373
- const css = require$$0$8;
50374
- const { Vibrant } = require$$1$7;
50283
+ const css = require$$0$9;
50284
+ const { Vibrant } = require$$1$6;
50375
50285
  const https = require$$10;
50376
- const http = require$$0$7;
50286
+ const http = require$$0$8;
50377
50287
  const { URL: URL$1 } = require$$4$1;
50378
50288
  const {
50379
50289
  UrlUnreachableError,
@@ -54933,7 +54843,7 @@ var toolHandlers$1 = {
54933
54843
  * per-request, receiving the full messages array each time.
54934
54844
  */
54935
54845
 
54936
- const Anthropic = require$$0$9;
54846
+ const Anthropic = require$$0$a;
54937
54847
  const mcpController$2 = mcpControllerExports;
54938
54848
  const cliController$1 = cliController_1;
54939
54849
  const toolDefinitions = toolDefinitions$1;
@@ -57114,7 +57024,7 @@ var dashboardConfigUtils$1 = {
57114
57024
  */
57115
57025
 
57116
57026
  const fs$1 = require$$0$2;
57117
- const path$4 = require$$1$2;
57027
+ const path$4 = require$$1$1;
57118
57028
  const { getStoredToken: getStoredToken$2 } = registryAuthController$2;
57119
57029
 
57120
57030
  const REGISTRY_BASE_URL =
@@ -57389,7 +57299,7 @@ function requireWidgetPublishManifest () {
57389
57299
  * Mirrors dashboardConfigController patterns for ZIP creation, manifest generation,
57390
57300
  * and registry interaction.
57391
57301
  */
57392
- const path$3 = require$$1$2;
57302
+ const path$3 = require$$1$1;
57393
57303
  const { app: app$3, dialog: dialog$1 } = require$$0$1;
57394
57304
  const AdmZip$2 = require$$3$2;
57395
57305
 
@@ -58129,7 +58039,7 @@ var themeRegistryController$1 = {
58129
58039
  */
58130
58040
 
58131
58041
  const { app: app$2, dialog } = require$$0$1;
58132
- const path$2 = require$$1$2;
58042
+ const path$2 = require$$1$1;
58133
58043
  const AdmZip$1 = require$$3$2;
58134
58044
  const { getFileContents: getFileContents$1 } = file;
58135
58045
  const {
@@ -60098,7 +60008,7 @@ var dashboardConfigController$1 = {
60098
60008
  */
60099
60009
 
60100
60010
  const { Notification } = require$$0$1;
60101
- const Store = require$$1$1;
60011
+ const Store = require$$0$6;
60102
60012
 
60103
60013
  const store$1 = new Store({ name: "dash-notifications" });
60104
60014
 
@@ -60351,7 +60261,7 @@ var notificationController_1 = notificationController$2;
60351
60261
  * Multiple widgets referencing the same provider share a single socket.
60352
60262
  */
60353
60263
 
60354
- const WebSocket = require$$0$a;
60264
+ const WebSocket = require$$0$b;
60355
60265
 
60356
60266
  /**
60357
60267
  * Active WebSocket connections
@@ -61341,7 +61251,7 @@ clientCache$1.registerFactory("algolia", (credentials) => {
61341
61251
 
61342
61252
  // --- OpenAI ---
61343
61253
  clientCache$1.registerFactory("openai", (credentials) => {
61344
- const OpenAI = require$$0$6;
61254
+ const OpenAI = require$$0$7;
61345
61255
  return new OpenAI({ apiKey: credentials.apiKey });
61346
61256
  });
61347
61257
 
@@ -61360,7 +61270,7 @@ const MAX_RECENTS = 20;
61360
61270
  let store = null;
61361
61271
  function getStore() {
61362
61272
  if (!store) {
61363
- const Store = require$$1$1;
61273
+ const Store = require$$0$6;
61364
61274
  store = new Store({ name: "dash-session" });
61365
61275
  }
61366
61276
  return store;
@@ -61545,7 +61455,7 @@ var dashboardRatingsUtils = {
61545
61455
  */
61546
61456
 
61547
61457
  const { app: app$1 } = require$$0$1;
61548
- const path$1 = require$$1$2;
61458
+ const path$1 = require$$1$1;
61549
61459
  const { getFileContents, writeToFile } = file;
61550
61460
  const {
61551
61461
  validateAndBuildRating,
@@ -61649,7 +61559,7 @@ var dashboardRatingsController = {
61649
61559
  */
61650
61560
 
61651
61561
  const fs = require$$0$2;
61652
- const path = require$$1$2;
61562
+ const path = require$$1$1;
61653
61563
  const AdmZip = require$$3$2;
61654
61564
  const { app } = require$$0$1;
61655
61565
 
@@ -62454,11 +62364,7 @@ var widgetRegistryController = {
62454
62364
  */
62455
62365
 
62456
62366
  const { showDialog, fileChosenError } = dialogController$1;
62457
- const {
62458
- isEncryptionAvailable,
62459
- saveData,
62460
- getData,
62461
- } = secureStoreController$1;
62367
+ const { isEncryptionAvailable } = secureStoreController$1;
62462
62368
  const {
62463
62369
  listWorkspacesForApplication,
62464
62370
  saveWorkspaceForApplication,
@@ -62576,8 +62482,6 @@ var controller = {
62576
62482
  showDialog,
62577
62483
  fileChosenError,
62578
62484
  isEncryptionAvailable,
62579
- saveData,
62580
- getData,
62581
62485
  listWorkspacesForApplication,
62582
62486
  saveWorkspaceForApplication,
62583
62487
  deleteWorkspaceForApplication,
@@ -62662,22 +62566,29 @@ var controller = {
62662
62566
  mcpDashServerController: mcpDashServerController$2,
62663
62567
  };
62664
62568
 
62665
- const { ipcRenderer: ipcRenderer$q } = require$$0$1;
62666
- const {
62667
- SECURE_STORE_ENCRYPTION_CHECK,
62668
- SECURE_STORE_SET_DATA,
62669
- SECURE_STORE_GET_DATA,
62670
- } = events$8;
62569
+ const { ipcRenderer: ipcRenderer$p } = require$$0$1;
62570
+ const { SECURE_STORE_ENCRYPTION_CHECK } = events$8;
62671
62571
  /**
62672
62572
  * secureStoreApi
62673
- * - for Apple, keychain methods
62573
+ *
62574
+ * Renderer-facing wrapper for the secure-store IPC channels. Currently
62575
+ * exposes only `isEncryptionAvailable` because that's the only channel
62576
+ * with a wired handler in dash-electron's main process.
62577
+ *
62578
+ * `saveData` / `getData` were removed in this slice — the IPC handlers
62579
+ * for `SECURE_STORE_SET_DATA` / `SECURE_STORE_GET_DATA` were never
62580
+ * registered, so the methods silently no-op'd. Worse, they appeared
62581
+ * usable on `mainApi.secureStore` but had no widgetId scoping, so
62582
+ * adding handlers later would have given every widget unscoped access
62583
+ * to every other widget's keys. If you need a widget-facing storage
62584
+ * API in the future, add a `widgetId` parameter and plumb it through a
62585
+ * per-widget gate (see `electron/security/fsGate.js` for the pattern).
62586
+ * The pin in `secureStoreApi.test.js` will fail loudly if the
62587
+ * unscoped methods reappear without a gate.
62674
62588
  */
62675
62589
  const secureStoreApi$2 = {
62676
62590
  isEncryptionAvailable: () =>
62677
- ipcRenderer$q.invoke(SECURE_STORE_ENCRYPTION_CHECK, {}),
62678
- saveData: (key, value) =>
62679
- ipcRenderer$q.invoke(SECURE_STORE_SET_DATA, { key, value }),
62680
- getData: (key) => ipcRenderer$q.invoke(SECURE_STORE_GET_DATA, { key }),
62591
+ ipcRenderer$p.invoke(SECURE_STORE_ENCRYPTION_CHECK, {}),
62681
62592
  };
62682
62593
 
62683
62594
  var secureStoreApi_1 = secureStoreApi$2;
@@ -62688,7 +62599,7 @@ var secureStoreApi_1 = secureStoreApi$2;
62688
62599
  * Handle the workspace configuration file
62689
62600
  */
62690
62601
 
62691
- const { ipcRenderer: ipcRenderer$p } = require$$0$1;
62602
+ const { ipcRenderer: ipcRenderer$o } = require$$0$1;
62692
62603
  const {
62693
62604
  WORKSPACE_LIST,
62694
62605
  WORKSPACE_SAVE,
@@ -62705,7 +62616,7 @@ const workspaceApi$2 = {
62705
62616
  */
62706
62617
  listWorkspacesForApplication: (appId) => {
62707
62618
  console.log("listWorkspacesForApplication called with appId:", appId);
62708
- return ipcRenderer$p.invoke(WORKSPACE_LIST, { appId });
62619
+ return ipcRenderer$o.invoke(WORKSPACE_LIST, { appId });
62709
62620
  },
62710
62621
 
62711
62622
  /**
@@ -62716,7 +62627,7 @@ const workspaceApi$2 = {
62716
62627
  * @returns
62717
62628
  */
62718
62629
  saveWorkspaceForApplication: (appId, data) =>
62719
- ipcRenderer$p.invoke(WORKSPACE_SAVE, { appId, data }),
62630
+ ipcRenderer$o.invoke(WORKSPACE_SAVE, { appId, data }),
62720
62631
 
62721
62632
  /**
62722
62633
  * deleteWorkspaceForApplication
@@ -62726,7 +62637,7 @@ const workspaceApi$2 = {
62726
62637
  * @returns
62727
62638
  */
62728
62639
  deleteWorkspaceForApplication: (appId, workspaceId) =>
62729
- ipcRenderer$p.invoke(WORKSPACE_DELETE, { appId, workspaceId }),
62640
+ ipcRenderer$o.invoke(WORKSPACE_DELETE, { appId, workspaceId }),
62730
62641
  };
62731
62642
 
62732
62643
  var workspaceApi_1 = workspaceApi$2;
@@ -62738,15 +62649,13 @@ var workspaceApi_1 = workspaceApi$2;
62738
62649
  */
62739
62650
 
62740
62651
  // ipcRenderer that must be used to invoke the events
62741
- const { ipcRenderer: ipcRenderer$o } = require$$0$1;
62652
+ const { ipcRenderer: ipcRenderer$n } = require$$0$1;
62742
62653
 
62743
- const { LAYOUT_LIST, LAYOUT_SAVE } = events$8;
62654
+ const { LAYOUT_LIST } = events$8;
62744
62655
 
62745
62656
  const layoutApi$2 = {
62746
62657
  listLayoutsForApplication: (appId) =>
62747
- ipcRenderer$o.invoke(LAYOUT_LIST, { appId }),
62748
- saveLayoutForApplication: (appId, data) =>
62749
- ipcRenderer$o.invoke(LAYOUT_SAVE, { appId, data }),
62658
+ ipcRenderer$n.invoke(LAYOUT_LIST, { appId }),
62750
62659
  };
62751
62660
 
62752
62661
  var layoutApi_1 = layoutApi$2;
@@ -62758,7 +62667,7 @@ var layoutApi_1 = layoutApi$2;
62758
62667
  */
62759
62668
 
62760
62669
  // ipcRenderer that must be used to invoke the events
62761
- const { ipcRenderer: ipcRenderer$n } = require$$0$1;
62670
+ const { ipcRenderer: ipcRenderer$m } = require$$0$1;
62762
62671
 
62763
62672
  const {
62764
62673
  DATA_JSON_TO_CSV_FILE,
@@ -62776,7 +62685,7 @@ const {
62776
62685
  const dataApi$2 = {
62777
62686
  // convert a json array of objects to a csv string and save to file
62778
62687
  convertJsonToCsvFile: (appId, jsonObject, filename) =>
62779
- ipcRenderer$n.invoke(DATA_JSON_TO_CSV_FILE, {
62688
+ ipcRenderer$m.invoke(DATA_JSON_TO_CSV_FILE, {
62780
62689
  appId,
62781
62690
  jsonObject,
62782
62691
  filename,
@@ -62784,10 +62693,10 @@ const dataApi$2 = {
62784
62693
 
62785
62694
  // convert a json array of objects to a csv string and return a string
62786
62695
  convertJsonToCsvString: (appId, jsonObject) =>
62787
- ipcRenderer$n.invoke(DATA_JSON_TO_CSV_STRING, { appId, jsonObject }),
62696
+ ipcRenderer$m.invoke(DATA_JSON_TO_CSV_STRING, { appId, jsonObject }),
62788
62697
 
62789
62698
  parseXMLStream: (filepath, outpath, start) =>
62790
- ipcRenderer$n.invoke(PARSE_XML_STREAM, {
62699
+ ipcRenderer$m.invoke(PARSE_XML_STREAM, {
62791
62700
  filepath,
62792
62701
  outpath,
62793
62702
  start,
@@ -62801,7 +62710,7 @@ const dataApi$2 = {
62801
62710
  headers = null,
62802
62711
  limit = null,
62803
62712
  ) => {
62804
- ipcRenderer$n.invoke(PARSE_CSV_STREAM, {
62713
+ ipcRenderer$m.invoke(PARSE_CSV_STREAM, {
62805
62714
  filepath,
62806
62715
  outpath,
62807
62716
  delimiter,
@@ -62812,15 +62721,15 @@ const dataApi$2 = {
62812
62721
  },
62813
62722
 
62814
62723
  readLinesFromFile: (filepath, lineCount) => {
62815
- ipcRenderer$n.invoke(READ_LINES, { filepath, lineCount });
62724
+ ipcRenderer$m.invoke(READ_LINES, { filepath, lineCount });
62816
62725
  },
62817
62726
 
62818
62727
  readJSONFromFile: (filepath, objectCount = null) => {
62819
- ipcRenderer$n.invoke(READ_JSON, { filepath, objectCount });
62728
+ ipcRenderer$m.invoke(READ_JSON, { filepath, objectCount });
62820
62729
  },
62821
62730
 
62822
62731
  readDataFromURL: (url, toFilepath) => {
62823
- ipcRenderer$n.invoke(READ_DATA_URL, { url, toFilepath });
62732
+ ipcRenderer$m.invoke(READ_DATA_URL, { url, toFilepath });
62824
62733
  },
62825
62734
 
62826
62735
  /*
@@ -62829,7 +62738,7 @@ const dataApi$2 = {
62829
62738
  * @param {object} returnEmpty the return empty object
62830
62739
  */
62831
62740
  saveData: (data, filename, append, returnEmpty, widgetId = null) =>
62832
- ipcRenderer$n.invoke(DATA_SAVE_TO_FILE, {
62741
+ ipcRenderer$m.invoke(DATA_SAVE_TO_FILE, {
62833
62742
  data,
62834
62743
  filename,
62835
62744
  append,
@@ -62847,7 +62756,7 @@ const dataApi$2 = {
62847
62756
  * gates the gate itself).
62848
62757
  */
62849
62758
  readData: (filename, returnEmpty = [], widgetId = null) =>
62850
- ipcRenderer$n.invoke(DATA_READ_FROM_FILE, {
62759
+ ipcRenderer$m.invoke(DATA_READ_FROM_FILE, {
62851
62760
  filename,
62852
62761
  returnEmpty,
62853
62762
  widgetId,
@@ -62858,7 +62767,7 @@ const dataApi$2 = {
62858
62767
  * @returns
62859
62768
  */
62860
62769
  transformFile: (filepath, outFilepath, mappingFunctionBody, args) => {
62861
- ipcRenderer$n.invoke(TRANSFORM_FILE, {
62770
+ ipcRenderer$m.invoke(TRANSFORM_FILE, {
62862
62771
  filepath,
62863
62772
  outFilepath,
62864
62773
  mappingFunctionBody,
@@ -62876,7 +62785,7 @@ var dataApi_1 = dataApi$2;
62876
62785
  */
62877
62786
 
62878
62787
  // ipcRenderer that must be used to invoke the events
62879
- const { ipcRenderer: ipcRenderer$m } = require$$0$1;
62788
+ const { ipcRenderer: ipcRenderer$l } = require$$0$1;
62880
62789
 
62881
62790
  const {
62882
62791
  SETTINGS_GET,
@@ -62887,14 +62796,14 @@ const {
62887
62796
  } = events$8;
62888
62797
 
62889
62798
  const settingsApi$2 = {
62890
- getSettingsForApplication: () => ipcRenderer$m.invoke(SETTINGS_GET, {}),
62799
+ getSettingsForApplication: () => ipcRenderer$l.invoke(SETTINGS_GET, {}),
62891
62800
  saveSettingsForApplication: (data) =>
62892
- ipcRenderer$m.invoke(SETTINGS_SAVE, { data }),
62893
- getDataDirectory: () => ipcRenderer$m.invoke(SETTINGS_GET_DATA_DIR, {}),
62801
+ ipcRenderer$l.invoke(SETTINGS_SAVE, { data }),
62802
+ getDataDirectory: () => ipcRenderer$l.invoke(SETTINGS_GET_DATA_DIR, {}),
62894
62803
  setDataDirectory: (dataDirectory) =>
62895
- ipcRenderer$m.invoke(SETTINGS_SET_DATA_DIR, { dataDirectory }),
62804
+ ipcRenderer$l.invoke(SETTINGS_SET_DATA_DIR, { dataDirectory }),
62896
62805
  migrateDataDirectory: (oldDirectory, newDirectory) =>
62897
- ipcRenderer$m.invoke(SETTINGS_MIGRATE_DATA_DIR, {
62806
+ ipcRenderer$l.invoke(SETTINGS_MIGRATE_DATA_DIR, {
62898
62807
  oldDirectory,
62899
62808
  newDirectory,
62900
62809
  }),
@@ -62909,7 +62818,7 @@ var settingsApi_1 = settingsApi$2;
62909
62818
  * Provides file/folder chooser dialogs.
62910
62819
  */
62911
62820
 
62912
- const { ipcRenderer: ipcRenderer$l } = require$$0$1;
62821
+ const { ipcRenderer: ipcRenderer$k } = require$$0$1;
62913
62822
 
62914
62823
  const { CHOOSE_FILE } = events$8;
62915
62824
 
@@ -62922,7 +62831,7 @@ const dialogApi$2 = {
62922
62831
  * @returns {Promise<string|null>} selected file/folder path, or null if cancelled
62923
62832
  */
62924
62833
  chooseFile: (allowFile = true, extensions = ["*"]) => {
62925
- return ipcRenderer$l.invoke(CHOOSE_FILE, { allowFile, extensions });
62834
+ return ipcRenderer$k.invoke(CHOOSE_FILE, { allowFile, extensions });
62926
62835
  },
62927
62836
 
62928
62837
  /**
@@ -62947,7 +62856,7 @@ const dialogApi$2 = {
62947
62856
  typeof options.allowFile === "boolean" ? options.allowFile : allowFile;
62948
62857
  const resolvedExtensions = options.extensions || extensions;
62949
62858
 
62950
- const filePath = await ipcRenderer$l.invoke(CHOOSE_FILE, {
62859
+ const filePath = await ipcRenderer$k.invoke(CHOOSE_FILE, {
62951
62860
  allowFile: resolvedAllowFile,
62952
62861
  extensions: resolvedExtensions,
62953
62862
  });
@@ -62974,7 +62883,7 @@ var dialogApi_1 = dialogApi$2;
62974
62883
  * mainApi.widgets.uninstall('Weather')
62975
62884
  */
62976
62885
 
62977
- const { ipcRenderer: ipcRenderer$k } = require$$0$1;
62886
+ const { ipcRenderer: ipcRenderer$j } = require$$0$1;
62978
62887
 
62979
62888
  const widgetApi$2 = {
62980
62889
  /**
@@ -62983,7 +62892,7 @@ const widgetApi$2 = {
62983
62892
  */
62984
62893
  list: async () => {
62985
62894
  try {
62986
- return await ipcRenderer$k.invoke("widget:list");
62895
+ return await ipcRenderer$j.invoke("widget:list");
62987
62896
  } catch (error) {
62988
62897
  console.error("[WidgetApi] Error listing widgets:", error);
62989
62898
  throw error;
@@ -62997,7 +62906,7 @@ const widgetApi$2 = {
62997
62906
  */
62998
62907
  get: async (widgetName) => {
62999
62908
  try {
63000
- return await ipcRenderer$k.invoke("widget:get", widgetName);
62909
+ return await ipcRenderer$j.invoke("widget:get", widgetName);
63001
62910
  } catch (error) {
63002
62911
  console.error(`[WidgetApi] Error getting widget ${widgetName}:`, error);
63003
62912
  throw error;
@@ -63028,7 +62937,7 @@ const widgetApi$2 = {
63028
62937
  console.log(
63029
62938
  `[WidgetApi] Installing widget: ${widgetName} from ${downloadUrl}`,
63030
62939
  );
63031
- const config = await ipcRenderer$k.invoke(
62940
+ const config = await ipcRenderer$j.invoke(
63032
62941
  "widget:install",
63033
62942
  widgetName,
63034
62943
  downloadUrl,
@@ -63068,7 +62977,7 @@ const widgetApi$2 = {
63068
62977
  console.log(
63069
62978
  `[WidgetApi] Installing local widget: ${widgetName} from ${localPath}`,
63070
62979
  );
63071
- const config = await ipcRenderer$k.invoke(
62980
+ const config = await ipcRenderer$j.invoke(
63072
62981
  "widget:install-local",
63073
62982
  widgetName,
63074
62983
  localPath,
@@ -63099,7 +63008,7 @@ const widgetApi$2 = {
63099
63008
  loadFolder: async (folderPath) => {
63100
63009
  try {
63101
63010
  console.log(`[WidgetApi] Loading widgets from folder: ${folderPath}`);
63102
- const results = await ipcRenderer$k.invoke(
63011
+ const results = await ipcRenderer$j.invoke(
63103
63012
  "widget:load-folder",
63104
63013
  folderPath,
63105
63014
  );
@@ -63123,7 +63032,7 @@ const widgetApi$2 = {
63123
63032
  uninstall: async (widgetName) => {
63124
63033
  try {
63125
63034
  console.log(`[WidgetApi] Uninstalling widget: ${widgetName}`);
63126
- const success = await ipcRenderer$k.invoke("widget:uninstall", widgetName);
63035
+ const success = await ipcRenderer$j.invoke("widget:uninstall", widgetName);
63127
63036
  if (success) {
63128
63037
  console.log(`[WidgetApi] ✓ Widget ${widgetName} uninstalled`);
63129
63038
  } else {
@@ -63146,7 +63055,7 @@ const widgetApi$2 = {
63146
63055
  */
63147
63056
  getCachePath: async () => {
63148
63057
  try {
63149
- return await ipcRenderer$k.invoke("widget:cache-path");
63058
+ return await ipcRenderer$j.invoke("widget:cache-path");
63150
63059
  } catch (error) {
63151
63060
  console.error("[WidgetApi] Error getting cache path:", error);
63152
63061
  throw error;
@@ -63160,7 +63069,7 @@ const widgetApi$2 = {
63160
63069
  */
63161
63070
  getStoragePath: async () => {
63162
63071
  try {
63163
- return await ipcRenderer$k.invoke("widget:storage-path");
63072
+ return await ipcRenderer$j.invoke("widget:storage-path");
63164
63073
  } catch (error) {
63165
63074
  console.error("[WidgetApi] Error getting storage path:", error);
63166
63075
  throw error;
@@ -63177,7 +63086,7 @@ const widgetApi$2 = {
63177
63086
  setStoragePath: async (customPath) => {
63178
63087
  try {
63179
63088
  console.log(`[WidgetApi] Setting storage path to: ${customPath}`);
63180
- const result = await ipcRenderer$k.invoke(
63089
+ const result = await ipcRenderer$j.invoke(
63181
63090
  "widget:set-storage-path",
63182
63091
  customPath,
63183
63092
  );
@@ -63199,7 +63108,7 @@ const widgetApi$2 = {
63199
63108
  */
63200
63109
  getComponentConfigs: async () => {
63201
63110
  try {
63202
- return await ipcRenderer$k.invoke("widget:get-component-configs");
63111
+ return await ipcRenderer$j.invoke("widget:get-component-configs");
63203
63112
  } catch (error) {
63204
63113
  console.error("[WidgetApi] Error getting component configs:", error);
63205
63114
  return [];
@@ -63214,7 +63123,7 @@ const widgetApi$2 = {
63214
63123
  */
63215
63124
  readBundle: async (widgetName) => {
63216
63125
  try {
63217
- return await ipcRenderer$k.invoke("widget:read-bundle", widgetName);
63126
+ return await ipcRenderer$j.invoke("widget:read-bundle", widgetName);
63218
63127
  } catch (error) {
63219
63128
  console.error(
63220
63129
  `[WidgetApi] Error reading bundle for ${widgetName}:`,
@@ -63233,7 +63142,7 @@ const widgetApi$2 = {
63233
63142
  */
63234
63143
  readSources: async (widgetName, componentName) => {
63235
63144
  try {
63236
- return await ipcRenderer$k.invoke("widget:read-sources", {
63145
+ return await ipcRenderer$j.invoke("widget:read-sources", {
63237
63146
  widgetName,
63238
63147
  componentName,
63239
63148
  });
@@ -63253,7 +63162,7 @@ const widgetApi$2 = {
63253
63162
  */
63254
63163
  readAllBundles: async () => {
63255
63164
  try {
63256
- return await ipcRenderer$k.invoke("widget:read-all-bundles");
63165
+ return await ipcRenderer$j.invoke("widget:read-all-bundles");
63257
63166
  } catch (error) {
63258
63167
  console.error("[WidgetApi] Error reading all bundles:", error);
63259
63168
  return [];
@@ -63273,7 +63182,7 @@ const widgetApi$2 = {
63273
63182
  * });
63274
63183
  */
63275
63184
  onInstalled: (callback) => {
63276
- ipcRenderer$k.on("widget:installed", (event, data) => {
63185
+ ipcRenderer$j.on("widget:installed", (event, data) => {
63277
63186
  callback(data);
63278
63187
  });
63279
63188
  },
@@ -63290,7 +63199,7 @@ const widgetApi$2 = {
63290
63199
  * });
63291
63200
  */
63292
63201
  onUninstalled: (callback) => {
63293
- ipcRenderer$k.on("widget:uninstalled", (event, data) => {
63202
+ ipcRenderer$j.on("widget:uninstalled", (event, data) => {
63294
63203
  callback(data);
63295
63204
  });
63296
63205
  },
@@ -63308,7 +63217,7 @@ const widgetApi$2 = {
63308
63217
  * });
63309
63218
  */
63310
63219
  onLoaded: (callback) => {
63311
- ipcRenderer$k.on("widgets:loaded", (event, data) => {
63220
+ ipcRenderer$j.on("widgets:loaded", (event, data) => {
63312
63221
  callback(data);
63313
63222
  });
63314
63223
  },
@@ -63319,7 +63228,7 @@ const widgetApi$2 = {
63319
63228
  * @param {Function} callback - The callback to remove
63320
63229
  */
63321
63230
  removeInstalledListener: (callback) => {
63322
- ipcRenderer$k.removeListener("widget:installed", callback);
63231
+ ipcRenderer$j.removeListener("widget:installed", callback);
63323
63232
  },
63324
63233
 
63325
63234
  /**
@@ -63328,7 +63237,7 @@ const widgetApi$2 = {
63328
63237
  * @param {Function} callback - The callback to remove
63329
63238
  */
63330
63239
  removeUninstalledListener: (callback) => {
63331
- ipcRenderer$k.removeListener("widget:uninstalled", callback);
63240
+ ipcRenderer$j.removeListener("widget:uninstalled", callback);
63332
63241
  },
63333
63242
 
63334
63243
  /**
@@ -63337,7 +63246,7 @@ const widgetApi$2 = {
63337
63246
  * @param {Function} callback - The callback to remove
63338
63247
  */
63339
63248
  removeLoadedListener: (callback) => {
63340
- ipcRenderer$k.removeListener("widgets:loaded", callback);
63249
+ ipcRenderer$j.removeListener("widgets:loaded", callback);
63341
63250
  },
63342
63251
  };
63343
63252
 
@@ -63350,7 +63259,7 @@ var widgetApi_1 = widgetApi$2;
63350
63259
  * Communicates with main process via IPC to handle encryption and file storage
63351
63260
  */
63352
63261
 
63353
- const { ipcRenderer: ipcRenderer$j } = require$$0$1;
63262
+ const { ipcRenderer: ipcRenderer$i } = require$$0$1;
63354
63263
  const {
63355
63264
  PROVIDER_SAVE,
63356
63265
  PROVIDER_LIST,
@@ -63388,7 +63297,7 @@ const providerApi$2 = {
63388
63297
  // value, preserve what's on disk" from "caller explicitly unset it".
63389
63298
  isDefaultForType = undefined,
63390
63299
  ) =>
63391
- ipcRenderer$j.invoke(PROVIDER_SAVE, {
63300
+ ipcRenderer$i.invoke(PROVIDER_SAVE, {
63392
63301
  appId,
63393
63302
  providerName,
63394
63303
  providerType,
@@ -63408,7 +63317,7 @@ const providerApi$2 = {
63408
63317
  * @param {String} appId - the appId specified in the dash initialization
63409
63318
  * @returns {Promise<Array>} Array of provider objects with name, type, credentials
63410
63319
  */
63411
- listProviders: (appId) => ipcRenderer$j.invoke(PROVIDER_LIST, { appId }),
63320
+ listProviders: (appId) => ipcRenderer$i.invoke(PROVIDER_LIST, { appId }),
63412
63321
 
63413
63322
  /**
63414
63323
  * getProvider
@@ -63420,7 +63329,7 @@ const providerApi$2 = {
63420
63329
  * @returns {Promise<Object>} Provider object with name, type, credentials
63421
63330
  */
63422
63331
  getProvider: (appId, providerName) =>
63423
- ipcRenderer$j.invoke(PROVIDER_GET, { appId, providerName }),
63332
+ ipcRenderer$i.invoke(PROVIDER_GET, { appId, providerName }),
63424
63333
 
63425
63334
  /**
63426
63335
  * deleteProvider
@@ -63432,7 +63341,7 @@ const providerApi$2 = {
63432
63341
  * @returns {Promise}
63433
63342
  */
63434
63343
  deleteProvider: (appId, providerName) =>
63435
- ipcRenderer$j.invoke(PROVIDER_DELETE, { appId, providerName }),
63344
+ ipcRenderer$i.invoke(PROVIDER_DELETE, { appId, providerName }),
63436
63345
 
63437
63346
  /**
63438
63347
  * listProvidersForApplication
@@ -63442,14 +63351,14 @@ const providerApi$2 = {
63442
63351
  * @param {String} appId - the appId specified in the dash initialization
63443
63352
  */
63444
63353
  listProvidersForApplication: (appId) => {
63445
- ipcRenderer$j
63354
+ ipcRenderer$i
63446
63355
  .invoke(PROVIDER_LIST, { appId })
63447
63356
  .then((result) => {
63448
63357
  // Emit the event for ElectronDashboardApi to listen to
63449
- ipcRenderer$j.send("PROVIDER_LIST_COMPLETE", result);
63358
+ ipcRenderer$i.send("PROVIDER_LIST_COMPLETE", result);
63450
63359
  })
63451
63360
  .catch((error) => {
63452
- ipcRenderer$j.send("PROVIDER_LIST_ERROR", {
63361
+ ipcRenderer$i.send("PROVIDER_LIST_ERROR", {
63453
63362
  error: error.message,
63454
63363
  });
63455
63364
  });
@@ -63466,7 +63375,7 @@ const providerApi$2 = {
63466
63375
  providerType,
63467
63376
  credentials,
63468
63377
  ) => {
63469
- ipcRenderer$j
63378
+ ipcRenderer$i
63470
63379
  .invoke(PROVIDER_SAVE, {
63471
63380
  appId,
63472
63381
  providerName,
@@ -63474,10 +63383,10 @@ const providerApi$2 = {
63474
63383
  credentials,
63475
63384
  })
63476
63385
  .then((result) => {
63477
- ipcRenderer$j.send("PROVIDER_SAVE_COMPLETE", result);
63386
+ ipcRenderer$i.send("PROVIDER_SAVE_COMPLETE", result);
63478
63387
  })
63479
63388
  .catch((error) => {
63480
- ipcRenderer$j.send("PROVIDER_SAVE_ERROR", {
63389
+ ipcRenderer$i.send("PROVIDER_SAVE_ERROR", {
63481
63390
  error: error.message,
63482
63391
  });
63483
63392
  });
@@ -63489,13 +63398,13 @@ const providerApi$2 = {
63489
63398
  * Event-listener-based version for use with ElectronDashboardApi
63490
63399
  */
63491
63400
  getProviderForApplication: (appId, providerName) => {
63492
- ipcRenderer$j
63401
+ ipcRenderer$i
63493
63402
  .invoke(PROVIDER_GET, { appId, providerName })
63494
63403
  .then((result) => {
63495
- ipcRenderer$j.send("PROVIDER_GET_COMPLETE", result);
63404
+ ipcRenderer$i.send("PROVIDER_GET_COMPLETE", result);
63496
63405
  })
63497
63406
  .catch((error) => {
63498
- ipcRenderer$j.send("PROVIDER_GET_ERROR", {
63407
+ ipcRenderer$i.send("PROVIDER_GET_ERROR", {
63499
63408
  error: error.message,
63500
63409
  });
63501
63410
  });
@@ -63507,13 +63416,13 @@ const providerApi$2 = {
63507
63416
  * Event-listener-based version for use with ElectronDashboardApi
63508
63417
  */
63509
63418
  deleteProviderForApplication: (appId, providerName) => {
63510
- ipcRenderer$j
63419
+ ipcRenderer$i
63511
63420
  .invoke(PROVIDER_DELETE, { appId, providerName })
63512
63421
  .then((result) => {
63513
- ipcRenderer$j.send("PROVIDER_DELETE_COMPLETE", result);
63422
+ ipcRenderer$i.send("PROVIDER_DELETE_COMPLETE", result);
63514
63423
  })
63515
63424
  .catch((error) => {
63516
- ipcRenderer$j.send("PROVIDER_DELETE_ERROR", {
63425
+ ipcRenderer$i.send("PROVIDER_DELETE_ERROR", {
63517
63426
  error: error.message,
63518
63427
  });
63519
63428
  });
@@ -63529,7 +63438,7 @@ var providerApi_1 = providerApi$2;
63529
63438
  * Communicates with main process via IPC to manage MCP server lifecycle.
63530
63439
  */
63531
63440
 
63532
- const { ipcRenderer: ipcRenderer$i } = require$$0$1;
63441
+ const { ipcRenderer: ipcRenderer$h } = require$$0$1;
63533
63442
  const {
63534
63443
  MCP_START_SERVER,
63535
63444
  MCP_STOP_SERVER,
@@ -63568,7 +63477,7 @@ const mcpApi$2 = {
63568
63477
  workspaceId = null,
63569
63478
  pathScope = null,
63570
63479
  ) =>
63571
- ipcRenderer$i.invoke(MCP_START_SERVER, {
63480
+ ipcRenderer$h.invoke(MCP_START_SERVER, {
63572
63481
  serverName,
63573
63482
  mcpConfig,
63574
63483
  credentials,
@@ -63585,7 +63494,7 @@ const mcpApi$2 = {
63585
63494
  * @returns {Promise<{ success, serverName } | { error, message }>}
63586
63495
  */
63587
63496
  stopServer: (serverName, workspaceId = null) =>
63588
- ipcRenderer$i.invoke(MCP_STOP_SERVER, { serverName, workspaceId }),
63497
+ ipcRenderer$h.invoke(MCP_STOP_SERVER, { serverName, workspaceId }),
63589
63498
 
63590
63499
  /**
63591
63500
  * listTools
@@ -63596,7 +63505,7 @@ const mcpApi$2 = {
63596
63505
  * @returns {Promise<{ tools } | { error, message }>}
63597
63506
  */
63598
63507
  listTools: (serverName, workspaceId = null) =>
63599
- ipcRenderer$i.invoke(MCP_LIST_TOOLS, { serverName, workspaceId }),
63508
+ ipcRenderer$h.invoke(MCP_LIST_TOOLS, { serverName, workspaceId }),
63600
63509
 
63601
63510
  /**
63602
63511
  * callTool
@@ -63624,7 +63533,7 @@ const mcpApi$2 = {
63624
63533
  widgetId = null,
63625
63534
  workspaceId = null,
63626
63535
  ) =>
63627
- ipcRenderer$i.invoke(MCP_CALL_TOOL, {
63536
+ ipcRenderer$h.invoke(MCP_CALL_TOOL, {
63628
63537
  serverName,
63629
63538
  toolName,
63630
63539
  args,
@@ -63642,7 +63551,7 @@ const mcpApi$2 = {
63642
63551
  * @returns {Promise<{ resources } | { error, message }>}
63643
63552
  */
63644
63553
  listResources: (serverName, workspaceId = null) =>
63645
- ipcRenderer$i.invoke(MCP_LIST_RESOURCES, { serverName, workspaceId }),
63554
+ ipcRenderer$h.invoke(MCP_LIST_RESOURCES, { serverName, workspaceId }),
63646
63555
 
63647
63556
  /**
63648
63557
  * readResource
@@ -63654,7 +63563,7 @@ const mcpApi$2 = {
63654
63563
  * @returns {Promise<{ resource } | { error, message }>}
63655
63564
  */
63656
63565
  readResource: (serverName, uri, workspaceId = null) =>
63657
- ipcRenderer$i.invoke(MCP_READ_RESOURCE, { serverName, uri, workspaceId }),
63566
+ ipcRenderer$h.invoke(MCP_READ_RESOURCE, { serverName, uri, workspaceId }),
63658
63567
 
63659
63568
  /**
63660
63569
  * getServerStatus
@@ -63665,7 +63574,7 @@ const mcpApi$2 = {
63665
63574
  * @returns {Promise<{ status, tools, error }>}
63666
63575
  */
63667
63576
  getServerStatus: (serverName, workspaceId = null) =>
63668
- ipcRenderer$i.invoke(MCP_SERVER_STATUS, { serverName, workspaceId }),
63577
+ ipcRenderer$h.invoke(MCP_SERVER_STATUS, { serverName, workspaceId }),
63669
63578
 
63670
63579
  /**
63671
63580
  * getCatalog
@@ -63673,7 +63582,7 @@ const mcpApi$2 = {
63673
63582
  *
63674
63583
  * @returns {Promise<{ catalog } | { error, message }>}
63675
63584
  */
63676
- getCatalog: () => ipcRenderer$i.invoke(MCP_GET_CATALOG),
63585
+ getCatalog: () => ipcRenderer$h.invoke(MCP_GET_CATALOG),
63677
63586
 
63678
63587
  /**
63679
63588
  * getKnownExternalCatalog
@@ -63685,7 +63594,7 @@ const mcpApi$2 = {
63685
63594
  *
63686
63595
  * @returns {Promise<{ success, servers } | { error, message, servers }>}
63687
63596
  */
63688
- getKnownExternalCatalog: () => ipcRenderer$i.invoke(MCP_GET_KNOWN_EXTERNAL),
63597
+ getKnownExternalCatalog: () => ipcRenderer$h.invoke(MCP_GET_KNOWN_EXTERNAL),
63689
63598
 
63690
63599
  /**
63691
63600
  * onInstallKnownExternalConfirm
@@ -63699,9 +63608,9 @@ const mcpApi$2 = {
63699
63608
  */
63700
63609
  onInstallKnownExternalConfirm: (callback) => {
63701
63610
  const handler = (_e, data) => callback(data);
63702
- ipcRenderer$i.on(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63611
+ ipcRenderer$h.on(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63703
63612
  return () =>
63704
- ipcRenderer$i.removeListener(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63613
+ ipcRenderer$h.removeListener(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
63705
63614
  },
63706
63615
 
63707
63616
  /**
@@ -63712,7 +63621,7 @@ const mcpApi$2 = {
63712
63621
  * @param {{ confirmed: boolean, credentials?: object, error?: string }} result
63713
63622
  */
63714
63623
  sendInstallKnownExternalResult: (requestId, result) =>
63715
- ipcRenderer$i.send(MCP_INSTALL_KNOWN_EXTERNAL_RESULT$1, { requestId, result }),
63624
+ ipcRenderer$h.send(MCP_INSTALL_KNOWN_EXTERNAL_RESULT$1, { requestId, result }),
63716
63625
 
63717
63626
  /**
63718
63627
  * runAuth
@@ -63724,7 +63633,7 @@ const mcpApi$2 = {
63724
63633
  * @returns {Promise<{ success } | { error, message }>}
63725
63634
  */
63726
63635
  runAuth: (mcpConfig, credentials, authCommand) =>
63727
- ipcRenderer$i.invoke(MCP_RUN_AUTH, { mcpConfig, credentials, authCommand }),
63636
+ ipcRenderer$h.invoke(MCP_RUN_AUTH, { mcpConfig, credentials, authCommand }),
63728
63637
  };
63729
63638
 
63730
63639
  var mcpApi_1 = mcpApi$2;
@@ -63742,7 +63651,7 @@ var mcpApi_1 = mcpApi$2;
63742
63651
  * mainApi.registry.checkUpdates([{ name: "weather-widgets", version: "1.0.0" }])
63743
63652
  */
63744
63653
 
63745
- const { ipcRenderer: ipcRenderer$h } = require$$0$1;
63654
+ const { ipcRenderer: ipcRenderer$g } = require$$0$1;
63746
63655
 
63747
63656
  const registryApi$2 = {
63748
63657
  /**
@@ -63752,7 +63661,7 @@ const registryApi$2 = {
63752
63661
  */
63753
63662
  fetchIndex: async (forceRefresh = false) => {
63754
63663
  try {
63755
- return await ipcRenderer$h.invoke("registry:fetch-index", forceRefresh);
63664
+ return await ipcRenderer$g.invoke("registry:fetch-index", forceRefresh);
63756
63665
  } catch (error) {
63757
63666
  console.error("[RegistryApi] Error fetching index:", error);
63758
63667
  throw error;
@@ -63767,7 +63676,7 @@ const registryApi$2 = {
63767
63676
  */
63768
63677
  search: async (query = "", filters = {}) => {
63769
63678
  try {
63770
- return await ipcRenderer$h.invoke("registry:search", query, filters);
63679
+ return await ipcRenderer$g.invoke("registry:search", query, filters);
63771
63680
  } catch (error) {
63772
63681
  console.error("[RegistryApi] Error searching registry:", error);
63773
63682
  throw error;
@@ -63781,7 +63690,7 @@ const registryApi$2 = {
63781
63690
  */
63782
63691
  getPackage: async (packageName) => {
63783
63692
  try {
63784
- return await ipcRenderer$h.invoke("registry:get-package", packageName);
63693
+ return await ipcRenderer$g.invoke("registry:get-package", packageName);
63785
63694
  } catch (error) {
63786
63695
  console.error(
63787
63696
  `[RegistryApi] Error getting package ${packageName}:`,
@@ -63798,7 +63707,7 @@ const registryApi$2 = {
63798
63707
  */
63799
63708
  checkUpdates: async (installedWidgets = []) => {
63800
63709
  try {
63801
- return await ipcRenderer$h.invoke(
63710
+ return await ipcRenderer$g.invoke(
63802
63711
  "registry:check-updates",
63803
63712
  installedWidgets,
63804
63713
  );
@@ -63816,7 +63725,7 @@ const registryApi$2 = {
63816
63725
  */
63817
63726
  searchDashboards: async (query = "", filters = {}) => {
63818
63727
  try {
63819
- return await ipcRenderer$h.invoke(
63728
+ return await ipcRenderer$g.invoke(
63820
63729
  "registry:search-dashboards",
63821
63730
  query,
63822
63731
  filters,
@@ -63835,7 +63744,7 @@ const registryApi$2 = {
63835
63744
  */
63836
63745
  searchThemes: async (query = "", filters = {}) => {
63837
63746
  try {
63838
- return await ipcRenderer$h.invoke("registry:search-themes", query, filters);
63747
+ return await ipcRenderer$g.invoke("registry:search-themes", query, filters);
63839
63748
  } catch (error) {
63840
63749
  console.error("[RegistryApi] Error searching themes:", error);
63841
63750
  throw error;
@@ -63857,7 +63766,7 @@ const registryApi$2 = {
63857
63766
  */
63858
63767
  publishWidget: async (appId, packageId, options = {}) => {
63859
63768
  try {
63860
- return await ipcRenderer$h.invoke("registry:publish-widget", {
63769
+ return await ipcRenderer$g.invoke("registry:publish-widget", {
63861
63770
  appId,
63862
63771
  packageId,
63863
63772
  options,
@@ -63878,7 +63787,7 @@ const registryApi$2 = {
63878
63787
  */
63879
63788
  inspectWidgetPackage: async (packageId) => {
63880
63789
  try {
63881
- return await ipcRenderer$h.invoke("registry:inspect-widget-package", {
63790
+ return await ipcRenderer$g.invoke("registry:inspect-widget-package", {
63882
63791
  packageId,
63883
63792
  });
63884
63793
  } catch (error) {
@@ -63899,7 +63808,7 @@ const registryApi$2 = {
63899
63808
  */
63900
63809
  scanWidgetDefaults: async (packageId) => {
63901
63810
  try {
63902
- return await ipcRenderer$h.invoke("registry:scan-widget-defaults", {
63811
+ return await ipcRenderer$g.invoke("registry:scan-widget-defaults", {
63903
63812
  packageId,
63904
63813
  });
63905
63814
  } catch (error) {
@@ -63922,7 +63831,7 @@ const registryApi$2 = {
63922
63831
  */
63923
63832
  previewFetch: async (packageName, componentName = null) => {
63924
63833
  try {
63925
- return await ipcRenderer$h.invoke(
63834
+ return await ipcRenderer$g.invoke(
63926
63835
  "registry:preview-fetch",
63927
63836
  packageName,
63928
63837
  componentName,
@@ -63945,7 +63854,7 @@ var registryApi_1 = registryApi$2;
63945
63854
  * Handle the theme configuration file
63946
63855
  */
63947
63856
 
63948
- const { ipcRenderer: ipcRenderer$g } = require$$0$1;
63857
+ const { ipcRenderer: ipcRenderer$f } = require$$0$1;
63949
63858
 
63950
63859
  const {
63951
63860
  THEME_LIST,
@@ -63958,17 +63867,17 @@ const {
63958
63867
 
63959
63868
  const themeApi$2 = {
63960
63869
  listThemesForApplication: (appId) =>
63961
- ipcRenderer$g.invoke(THEME_LIST, { appId }),
63870
+ ipcRenderer$f.invoke(THEME_LIST, { appId }),
63962
63871
  saveThemeForApplication: (appId, themeName, themeObject) =>
63963
- ipcRenderer$g.invoke(THEME_SAVE, { appId, themeName, themeObject }),
63872
+ ipcRenderer$f.invoke(THEME_SAVE, { appId, themeName, themeObject }),
63964
63873
  deleteThemeForApplication: (appId, themeKey) =>
63965
- ipcRenderer$g.invoke(THEME_DELETE, { appId, themeKey }),
63874
+ ipcRenderer$f.invoke(THEME_DELETE, { appId, themeKey }),
63966
63875
  publishTheme: (appId, themeKey, options) =>
63967
- ipcRenderer$g.invoke(THEME_PUBLISH, { appId, themeKey, options }),
63876
+ ipcRenderer$f.invoke(THEME_PUBLISH, { appId, themeKey, options }),
63968
63877
  installThemeFromRegistry: (appId, packageName) =>
63969
- ipcRenderer$g.invoke(THEME_INSTALL_FROM_REGISTRY, { appId, packageName }),
63878
+ ipcRenderer$f.invoke(THEME_INSTALL_FROM_REGISTRY, { appId, packageName }),
63970
63879
  getThemePublishPreview: (appId, themeKey) =>
63971
- ipcRenderer$g.invoke(THEME_PUBLISH_PREVIEW, { appId, themeKey }),
63880
+ ipcRenderer$f.invoke(THEME_PUBLISH_PREVIEW, { appId, themeKey }),
63972
63881
  };
63973
63882
 
63974
63883
  var themeApi_1 = themeApi$2;
@@ -63980,12 +63889,11 @@ var themeApi_1 = themeApi$2;
63980
63889
  */
63981
63890
 
63982
63891
  // ipcRenderer that must be used to invoke the events
63983
- const { ipcRenderer: ipcRenderer$f } = require$$0$1;
63892
+ const { ipcRenderer: ipcRenderer$e } = require$$0$1;
63984
63893
 
63985
63894
  const {
63986
63895
  ALGOLIA_LIST_INDICES,
63987
63896
  ALGOLIA_ANALYTICS_FOR_QUERY,
63988
- ALGOLIA_SAVE_SYNONYMS,
63989
63897
  ALGOLIA_PARTIAL_UPDATE_OBJECTS,
63990
63898
  ALGOLIA_CREATE_BATCH,
63991
63899
  ALGOLIA_BROWSE_OBJECTS,
@@ -63994,10 +63902,10 @@ const {
63994
63902
 
63995
63903
  const algoliaApi$2 = {
63996
63904
  listIndices: (application) =>
63997
- ipcRenderer$f.invoke(ALGOLIA_LIST_INDICES, application),
63905
+ ipcRenderer$e.invoke(ALGOLIA_LIST_INDICES, application),
63998
63906
 
63999
63907
  browseObjects: (appId, apiKey, indexName) => {
64000
- ipcRenderer$f.invoke(ALGOLIA_BROWSE_OBJECTS, {
63908
+ ipcRenderer$e.invoke(ALGOLIA_BROWSE_OBJECTS, {
64001
63909
  appId,
64002
63910
  apiKey,
64003
63911
  indexName,
@@ -64005,10 +63913,8 @@ const algoliaApi$2 = {
64005
63913
  });
64006
63914
  },
64007
63915
 
64008
- saveSynonyms: () => ipcRenderer$f.invoke(ALGOLIA_SAVE_SYNONYMS, {}),
64009
-
64010
63916
  getAnalyticsForQuery: (application, indexName, query) =>
64011
- ipcRenderer$f.invoke(ALGOLIA_ANALYTICS_FOR_QUERY, {
63917
+ ipcRenderer$e.invoke(ALGOLIA_ANALYTICS_FOR_QUERY, {
64012
63918
  application,
64013
63919
  indexName,
64014
63920
  query,
@@ -64021,7 +63927,7 @@ const algoliaApi$2 = {
64021
63927
  dir,
64022
63928
  createIfNotExists = false,
64023
63929
  ) =>
64024
- ipcRenderer$f.invoke(ALGOLIA_PARTIAL_UPDATE_OBJECTS, {
63930
+ ipcRenderer$e.invoke(ALGOLIA_PARTIAL_UPDATE_OBJECTS, {
64025
63931
  appId,
64026
63932
  apiKey,
64027
63933
  indexName,
@@ -64030,7 +63936,7 @@ const algoliaApi$2 = {
64030
63936
  }),
64031
63937
 
64032
63938
  createBatchesFromFile: (filepath, batchFilepath, batchSize) => {
64033
- ipcRenderer$f.invoke(ALGOLIA_CREATE_BATCH, {
63939
+ ipcRenderer$e.invoke(ALGOLIA_CREATE_BATCH, {
64034
63940
  filepath,
64035
63941
  batchFilepath,
64036
63942
  batchSize,
@@ -64038,7 +63944,7 @@ const algoliaApi$2 = {
64038
63944
  },
64039
63945
 
64040
63946
  browseObjectsToFile: (appId, apiKey, indexName, toFilename, query = "") => {
64041
- ipcRenderer$f.invoke(ALGOLIA_BROWSE_OBJECTS, {
63947
+ ipcRenderer$e.invoke(ALGOLIA_BROWSE_OBJECTS, {
64042
63948
  appId,
64043
63949
  apiKey,
64044
63950
  indexName,
@@ -64048,7 +63954,7 @@ const algoliaApi$2 = {
64048
63954
  },
64049
63955
 
64050
63956
  search: (appId, apiKey, indexName, query = "", options = {}) =>
64051
- ipcRenderer$f.invoke(ALGOLIA_SEARCH, {
63957
+ ipcRenderer$e.invoke(ALGOLIA_SEARCH, {
64052
63958
  appId,
64053
63959
  apiKey,
64054
63960
  indexName,
@@ -64063,14 +63969,14 @@ var algoliaApi_1 = algoliaApi$2;
64063
63969
  * openAI
64064
63970
  */
64065
63971
 
64066
- const { ipcRenderer: ipcRenderer$e } = require$$0$1;
63972
+ const { ipcRenderer: ipcRenderer$d } = require$$0$1;
64067
63973
 
64068
63974
  const { OPENAI_DESCRIBE_IMAGE } = openaiEvents$1;
64069
63975
 
64070
63976
  const openaiApi$2 = {
64071
63977
  // convert a json array of objects to a csv string and save to file
64072
63978
  describeImage: (imageUrl, apiKey, prompt = "What's in this image?") =>
64073
- ipcRenderer$e.invoke(OPENAI_DESCRIBE_IMAGE, { imageUrl, apiKey, prompt }),
63979
+ ipcRenderer$d.invoke(OPENAI_DESCRIBE_IMAGE, { imageUrl, apiKey, prompt }),
64074
63980
  };
64075
63981
 
64076
63982
  var openaiApi_1 = openaiApi$2;
@@ -64081,14 +63987,14 @@ var openaiApi_1 = openaiApi$2;
64081
63987
  */
64082
63988
 
64083
63989
  // ipcRenderer that must be used to invoke the events
64084
- const { ipcRenderer: ipcRenderer$d } = require$$0$1;
63990
+ const { ipcRenderer: ipcRenderer$c } = require$$0$1;
64085
63991
 
64086
63992
  const { MENU_ITEMS_SAVE, MENU_ITEMS_LIST } = events$8;
64087
63993
 
64088
63994
  const menuItemsApi$2 = {
64089
63995
  saveMenuItem: (appId, menuItem) =>
64090
- ipcRenderer$d.invoke(MENU_ITEMS_SAVE, { appId, menuItem }),
64091
- listMenuItems: (appId) => ipcRenderer$d.invoke(MENU_ITEMS_LIST, { appId }),
63996
+ ipcRenderer$c.invoke(MENU_ITEMS_SAVE, { appId, menuItem }),
63997
+ listMenuItems: (appId) => ipcRenderer$c.invoke(MENU_ITEMS_LIST, { appId }),
64092
63998
  };
64093
63999
 
64094
64000
  var menuItemsApi_1 = menuItemsApi$2;
@@ -64100,12 +64006,12 @@ var menuItemsApi_1 = menuItemsApi$2;
64100
64006
  */
64101
64007
 
64102
64008
  // ipcRenderer that must be used to invoke the events
64103
- const { ipcRenderer: ipcRenderer$c } = require$$0$1;
64009
+ const { ipcRenderer: ipcRenderer$b } = require$$0$1;
64104
64010
 
64105
64011
  const pluginApi$2 = {
64106
64012
  install: (packageName, filepath) =>
64107
- ipcRenderer$c.invoke("plugin-install", { packageName, filepath }),
64108
- uninstall: (filepath) => ipcRenderer$c.invoke("plugin-uninstall", filepath),
64013
+ ipcRenderer$b.invoke("plugin-install", { packageName, filepath }),
64014
+ uninstall: (filepath) => ipcRenderer$b.invoke("plugin-uninstall", filepath),
64109
64015
  };
64110
64016
 
64111
64017
  var pluginApi_1 = pluginApi$2;
@@ -64118,7 +64024,7 @@ var pluginApi_1 = pluginApi$2;
64118
64024
  * tool-use events, and request cancellation.
64119
64025
  */
64120
64026
 
64121
- const { ipcRenderer: ipcRenderer$b } = require$$0$1;
64027
+ const { ipcRenderer: ipcRenderer$a } = require$$0$1;
64122
64028
  const {
64123
64029
  LLM_SEND_MESSAGE,
64124
64030
  LLM_ABORT_REQUEST,
@@ -64140,7 +64046,7 @@ const _listenerMap = new Map();
64140
64046
  function _addListener(channel, callback) {
64141
64047
  const id = String(++_nextListenerId);
64142
64048
  const wrapped = (_event, data) => callback(data);
64143
- ipcRenderer$b.on(channel, wrapped);
64049
+ ipcRenderer$a.on(channel, wrapped);
64144
64050
  _listenerMap.set(id, { channel, wrapped });
64145
64051
  return id;
64146
64052
  }
@@ -64155,7 +64061,7 @@ const llmApi$2 = {
64155
64061
  * @returns {Promise<void>}
64156
64062
  */
64157
64063
  sendMessage: (requestId, params) =>
64158
- ipcRenderer$b.invoke(LLM_SEND_MESSAGE, { requestId, ...params }),
64064
+ ipcRenderer$a.invoke(LLM_SEND_MESSAGE, { requestId, ...params }),
64159
64065
 
64160
64066
  /**
64161
64067
  * abortRequest
@@ -64165,7 +64071,7 @@ const llmApi$2 = {
64165
64071
  * @returns {Promise<{ success: boolean }>}
64166
64072
  */
64167
64073
  abortRequest: (requestId) =>
64168
- ipcRenderer$b.invoke(LLM_ABORT_REQUEST, { requestId }),
64074
+ ipcRenderer$a.invoke(LLM_ABORT_REQUEST, { requestId }),
64169
64075
 
64170
64076
  /**
64171
64077
  * listConnectedTools
@@ -64173,7 +64079,7 @@ const llmApi$2 = {
64173
64079
  *
64174
64080
  * @returns {Promise<Array<{ serverName, tools, resources, status }>>}
64175
64081
  */
64176
- listConnectedTools: () => ipcRenderer$b.invoke(LLM_LIST_CONNECTED_TOOLS),
64082
+ listConnectedTools: () => ipcRenderer$a.invoke(LLM_LIST_CONNECTED_TOOLS),
64177
64083
 
64178
64084
  /**
64179
64085
  * checkCliAvailable
@@ -64181,7 +64087,7 @@ const llmApi$2 = {
64181
64087
  *
64182
64088
  * @returns {Promise<{ available: boolean, path?: string }>}
64183
64089
  */
64184
- checkCliAvailable: () => ipcRenderer$b.invoke(LLM_CHECK_CLI_AVAILABLE),
64090
+ checkCliAvailable: () => ipcRenderer$a.invoke(LLM_CHECK_CLI_AVAILABLE),
64185
64091
 
64186
64092
  /**
64187
64093
  * clearCliSession
@@ -64191,7 +64097,7 @@ const llmApi$2 = {
64191
64097
  * @returns {Promise<{ success: boolean }>}
64192
64098
  */
64193
64099
  clearCliSession: (widgetUuid) =>
64194
- ipcRenderer$b.invoke(LLM_CLEAR_CLI_SESSION, { widgetUuid }),
64100
+ ipcRenderer$a.invoke(LLM_CLEAR_CLI_SESSION, { widgetUuid }),
64195
64101
 
64196
64102
  /**
64197
64103
  * getCliSessionStatus
@@ -64201,7 +64107,7 @@ const llmApi$2 = {
64201
64107
  * @returns {Promise<{ hasSession: boolean, sessionId?: string, isProcessActive: boolean }>}
64202
64108
  */
64203
64109
  getCliSessionStatus: (widgetUuid) =>
64204
- ipcRenderer$b.invoke(LLM_CLI_SESSION_STATUS, { widgetUuid }),
64110
+ ipcRenderer$a.invoke(LLM_CLI_SESSION_STATUS, { widgetUuid }),
64205
64111
 
64206
64112
  /**
64207
64113
  * endCliSession
@@ -64211,7 +64117,7 @@ const llmApi$2 = {
64211
64117
  * @returns {Promise<{ success: boolean }>}
64212
64118
  */
64213
64119
  endCliSession: (widgetUuid) =>
64214
- ipcRenderer$b.invoke(LLM_CLI_END_SESSION, { widgetUuid }),
64120
+ ipcRenderer$a.invoke(LLM_CLI_END_SESSION, { widgetUuid }),
64215
64121
 
64216
64122
  // --- Stream event listeners ---
64217
64123
  // Each on* method returns an opaque string ID. Strings cross the
@@ -64245,7 +64151,7 @@ const llmApi$2 = {
64245
64151
  const listenerId = id !== undefined ? String(id) : String(idOrChannel);
64246
64152
  const entry = _listenerMap.get(listenerId);
64247
64153
  if (entry) {
64248
- ipcRenderer$b.removeListener(entry.channel, entry.wrapped);
64154
+ ipcRenderer$a.removeListener(entry.channel, entry.wrapped);
64249
64155
  _listenerMap.delete(listenerId);
64250
64156
  }
64251
64157
  },
@@ -64257,70 +64163,19 @@ const llmApi$2 = {
64257
64163
  */
64258
64164
  removeAllStreamListeners: () => {
64259
64165
  for (const [, entry] of _listenerMap) {
64260
- ipcRenderer$b.removeListener(entry.channel, entry.wrapped);
64166
+ ipcRenderer$a.removeListener(entry.channel, entry.wrapped);
64261
64167
  }
64262
64168
  _listenerMap.clear();
64263
- ipcRenderer$b.removeAllListeners(LLM_STREAM_DELTA);
64264
- ipcRenderer$b.removeAllListeners(LLM_STREAM_TOOL_CALL);
64265
- ipcRenderer$b.removeAllListeners(LLM_STREAM_TOOL_RESULT);
64266
- ipcRenderer$b.removeAllListeners(LLM_STREAM_COMPLETE);
64267
- ipcRenderer$b.removeAllListeners(LLM_STREAM_ERROR);
64169
+ ipcRenderer$a.removeAllListeners(LLM_STREAM_DELTA);
64170
+ ipcRenderer$a.removeAllListeners(LLM_STREAM_TOOL_CALL);
64171
+ ipcRenderer$a.removeAllListeners(LLM_STREAM_TOOL_RESULT);
64172
+ ipcRenderer$a.removeAllListeners(LLM_STREAM_COMPLETE);
64173
+ ipcRenderer$a.removeAllListeners(LLM_STREAM_ERROR);
64268
64174
  },
64269
64175
  };
64270
64176
 
64271
64177
  var llmApi_1 = llmApi$2;
64272
64178
 
64273
- /**
64274
- * clientCacheApi.js
64275
- *
64276
- * Renderer-side API for cache management.
64277
- * Communicates with main process via IPC to invalidate cached clients
64278
- * and manage the response cache.
64279
- */
64280
-
64281
- const { ipcRenderer: ipcRenderer$a } = require$$0$1;
64282
- const {
64283
- CLIENT_CACHE_INVALIDATE,
64284
- CLIENT_CACHE_INVALIDATE_ALL,
64285
- RESPONSE_CACHE_CLEAR,
64286
- RESPONSE_CACHE_STATS,
64287
- } = events$8;
64288
-
64289
- const clientCacheApi$2 = {
64290
- /**
64291
- * Invalidate a specific cached client by provider identity.
64292
- *
64293
- * @param {string} appId - the application id
64294
- * @param {string} providerName - the provider name to invalidate
64295
- * @returns {Promise<{success: boolean}>}
64296
- */
64297
- invalidate: (appId, providerName) =>
64298
- ipcRenderer$a.invoke(CLIENT_CACHE_INVALIDATE, { appId, providerName }),
64299
-
64300
- /**
64301
- * Invalidate all cached clients.
64302
- *
64303
- * @returns {Promise<{success: boolean}>}
64304
- */
64305
- invalidateAll: () => ipcRenderer$a.invoke(CLIENT_CACHE_INVALIDATE_ALL),
64306
-
64307
- /**
64308
- * Clear the response cache.
64309
- *
64310
- * @returns {Promise<{success: boolean}>}
64311
- */
64312
- clearResponseCache: () => ipcRenderer$a.invoke(RESPONSE_CACHE_CLEAR),
64313
-
64314
- /**
64315
- * Get response cache statistics.
64316
- *
64317
- * @returns {Promise<{entries: number, inflight: number, keys: string[]}>}
64318
- */
64319
- responseCacheStats: () => ipcRenderer$a.invoke(RESPONSE_CACHE_STATS),
64320
- };
64321
-
64322
- var clientCacheApi_1 = clientCacheApi$2;
64323
-
64324
64179
  /**
64325
64180
  * dashboardConfigApi.js
64326
64181
  *
@@ -66255,7 +66110,6 @@ const openaiApi$1 = openaiApi_1;
66255
66110
  const menuItemsApi$1 = menuItemsApi_1;
66256
66111
  const pluginApi$1 = pluginApi_1;
66257
66112
  const llmApi$1 = llmApi_1;
66258
- const clientCacheApi$1 = clientCacheApi_1;
66259
66113
  const dashboardConfigApi$1 = dashboardConfigApi_1;
66260
66114
  const dashboardRatingsApi = dashboardRatingsApi_1;
66261
66115
  const registryAuthApi$1 = registryAuthApi_1;
@@ -66335,7 +66189,6 @@ function createMainApi$1(extensions = {}) {
66335
66189
  openai: openaiApi$1,
66336
66190
  menuItems: menuItemsApi$1,
66337
66191
  plugins: pluginApi$1,
66338
- clientCache: clientCacheApi$1,
66339
66192
  dashboardConfig: dashboardConfigApi$1,
66340
66193
  dashboardRatings: dashboardRatingsApi,
66341
66194
  registryAuth: registryAuthApi$1,
@@ -66433,7 +66286,6 @@ const openaiApi = openaiApi_1;
66433
66286
  const menuItemsApi = menuItemsApi_1;
66434
66287
  const pluginApi = pluginApi_1;
66435
66288
  const llmApi = llmApi_1;
66436
- const clientCacheApi = clientCacheApi_1;
66437
66289
  const dashboardConfigApi = dashboardConfigApi_1;
66438
66290
  const registryAuthApi = registryAuthApi_1;
66439
66291
  const notificationApi = notificationApi_1;
@@ -66531,7 +66383,6 @@ var electron = {
66531
66383
  menuItemsApi,
66532
66384
  pluginApi,
66533
66385
  llmApi,
66534
- clientCacheApi,
66535
66386
  dashboardConfigApi,
66536
66387
  registryAuthApi,
66537
66388
  notificationApi,