@trops/dash-core 0.1.597 → 0.1.599

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.
@@ -917,6 +917,23 @@ var publisherKeyEvents$1 = {
917
917
  PUBLISHER_KEY_REVOKE: PUBLISHER_KEY_REVOKE$1,
918
918
  };
919
919
 
920
+ /**
921
+ * Event Constants — Onboarding Events
922
+ *
923
+ * IPC event constants for the first-run onboarding flow (Phase 3A).
924
+ * The renderer calls these via `window.mainApi.onboarding.*`; the main
925
+ * process registers handlers in the host shell against the
926
+ * onboardingController.
927
+ */
928
+
929
+ const ONBOARDING_GET_STATUS$1 = "onboarding:get-status";
930
+ const ONBOARDING_MARK_COMPLETED$1 = "onboarding:mark-completed";
931
+
932
+ var onboardingEvents$1 = {
933
+ ONBOARDING_GET_STATUS: ONBOARDING_GET_STATUS$1,
934
+ ONBOARDING_MARK_COMPLETED: ONBOARDING_MARK_COMPLETED$1,
935
+ };
936
+
920
937
  /**
921
938
  * Events
922
939
  *
@@ -947,6 +964,7 @@ const themeFromUrlEvents = themeFromUrlEvents$1;
947
964
  const webSocketEvents = requireWebSocketEvents();
948
965
  const mcpDashServerEvents = mcpDashServerEvents$1;
949
966
  const publisherKeyEvents = publisherKeyEvents$1;
967
+ const onboardingEvents = onboardingEvents$1;
950
968
 
951
969
  const publicEvents = {
952
970
  ...dataEvents,
@@ -971,6 +989,7 @@ const API_GROUPS = {
971
989
  openai: Object.values(openaiEvents),
972
990
  providers: Object.values(providerEvents),
973
991
  "publisher-key": Object.values(publisherKeyEvents),
992
+ onboarding: Object.values(onboardingEvents),
974
993
  registry: Object.values(registryEvents),
975
994
  "registry-auth": Object.values(registryAuthEvents),
976
995
  scheduler: Object.values(schedulerEvents),
@@ -1010,6 +1029,7 @@ var events$8 = {
1010
1029
  ...webSocketEvents,
1011
1030
  ...mcpDashServerEvents,
1012
1031
  ...publisherKeyEvents,
1032
+ ...onboardingEvents,
1013
1033
  };
1014
1034
 
1015
1035
  /**
@@ -3203,16 +3223,16 @@ const REGISTRY_BASE_URL$2 =
3203
3223
  "https://main.d919rwhuzp7rj.amplifyapp.com";
3204
3224
 
3205
3225
  // Lazy-load electron-store to avoid issues when not installed
3206
- let store$4 = null;
3207
- function getStore$2() {
3208
- if (!store$4) {
3226
+ let store$5 = null;
3227
+ function getStore$3() {
3228
+ if (!store$5) {
3209
3229
  const Store = require$$0$5;
3210
- store$4 = new Store({
3230
+ store$5 = new Store({
3211
3231
  name: "dash-registry-auth",
3212
3232
  encryptionKey: "dash-registry-v1",
3213
3233
  });
3214
3234
  }
3215
- return store$4;
3235
+ return store$5;
3216
3236
  }
3217
3237
 
3218
3238
  /**
@@ -3270,7 +3290,7 @@ async function pollForToken$1(deviceCode) {
3270
3290
  const data = await response.json();
3271
3291
 
3272
3292
  // Store the token securely
3273
- const s = getStore$2();
3293
+ const s = getStore$3();
3274
3294
  s.set("accessToken", data.access_token);
3275
3295
  s.set("userId", data.user_id);
3276
3296
  s.set("tokenType", data.token_type);
@@ -3293,7 +3313,7 @@ async function pollForToken$1(deviceCode) {
3293
3313
  */
3294
3314
  function getStoredToken$5() {
3295
3315
  try {
3296
- const s = getStore$2();
3316
+ const s = getStore$3();
3297
3317
  const token = s.get("accessToken");
3298
3318
  if (!token) return null;
3299
3319
 
@@ -3360,7 +3380,7 @@ async function getRegistryProfile$3() {
3360
3380
  */
3361
3381
  function clearToken$2() {
3362
3382
  try {
3363
- const s = getStore$2();
3383
+ const s = getStore$3();
3364
3384
  s.clear();
3365
3385
  console.log("[RegistryAuthController] Token cleared");
3366
3386
  } catch (err) {
@@ -6792,7 +6812,7 @@ function requireVerifyRegistryInstall () {
6792
6812
  const Store$1 = require$$0$5;
6793
6813
  const { Cron } = require$$1$3;
6794
6814
 
6795
- const store$3 = new Store$1({ name: "dash-scheduler" });
6815
+ const store$4 = new Store$1({ name: "dash-scheduler" });
6796
6816
 
6797
6817
  // --- In-memory state ---
6798
6818
  const tasks = new Map(); // taskId -> task object
@@ -6953,7 +6973,7 @@ function persistNow() {
6953
6973
  for (const [taskId, task] of tasks) {
6954
6974
  data[taskId] = { ...task };
6955
6975
  }
6956
- store$3.set("tasks", data);
6976
+ store$4.set("tasks", data);
6957
6977
  } catch (err) {
6958
6978
  console.error("[schedulerController] Error persisting tasks:", err);
6959
6979
  }
@@ -6964,7 +6984,7 @@ function persistNow() {
6964
6984
  */
6965
6985
  function loadFromStore() {
6966
6986
  try {
6967
- const data = store$3.get("tasks", {});
6987
+ const data = store$4.get("tasks", {});
6968
6988
  const now = Date.now();
6969
6989
  for (const [taskId, task] of Object.entries(data)) {
6970
6990
  // Recompute nextFireAt if it's in the past
@@ -60445,11 +60465,11 @@ const REGISTRY_BASE_URL$1 =
60445
60465
 
60446
60466
  // Lazy-load electron-store so jest can mock it without booting the
60447
60467
  // app shell.
60448
- let store$2 = null;
60449
- function getStore$1() {
60450
- if (!store$2) {
60468
+ let store$3 = null;
60469
+ function getStore$2() {
60470
+ if (!store$3) {
60451
60471
  const Store = require$$0$5;
60452
- store$2 = new Store({
60472
+ store$3 = new Store({
60453
60473
  name: "dash-publisher-key",
60454
60474
  // encryptionKey is a defense-in-depth layer on the JSON file
60455
60475
  // itself — the private key inside is independently encrypted
@@ -60457,7 +60477,7 @@ function getStore$1() {
60457
60477
  encryptionKey: "dash-publisher-v1",
60458
60478
  });
60459
60479
  }
60460
- return store$2;
60480
+ return store$3;
60461
60481
  }
60462
60482
 
60463
60483
  // Serialize concurrent getOrCreate calls. Without this, two publishes
@@ -60466,15 +60486,15 @@ function getStore$1() {
60466
60486
  let inflightGetOrCreate = null;
60467
60487
 
60468
60488
  function readStored() {
60469
- return getStore$1().get("publisherKey") || null;
60489
+ return getStore$2().get("publisherKey") || null;
60470
60490
  }
60471
60491
 
60472
60492
  function writeStored(record) {
60473
- getStore$1().set("publisherKey", record);
60493
+ getStore$2().set("publisherKey", record);
60474
60494
  }
60475
60495
 
60476
60496
  function clearStored() {
60477
- getStore$1().delete("publisherKey");
60497
+ getStore$2().delete("publisherKey");
60478
60498
  }
60479
60499
 
60480
60500
  function buildMachineLabel() {
@@ -63892,6 +63912,109 @@ var dashboardConfigController$1 = {
63892
63912
  getDashboardPublishPreview: getDashboardPublishPreview$1,
63893
63913
  };
63894
63914
 
63915
+ /**
63916
+ * onboardingController.js
63917
+ *
63918
+ * First-run onboarding state (Phase 3A of the MVP launch audit).
63919
+ *
63920
+ * Owns a tiny `electron-store` JSON that pins whether the user has
63921
+ * already completed (or dismissed) the first-run flow. Persistence
63922
+ * lives in the main process so:
63923
+ * - it survives renderer reloads + Electron auto-update
63924
+ * - a compromised iframe can't reach it (no localStorage)
63925
+ * - the renderer reads it via read-only IPC, never via direct fs
63926
+ *
63927
+ * Storage layout (`dash-onboarding.json` in userData):
63928
+ * {
63929
+ * "onboarding": {
63930
+ * "completed": true,
63931
+ * "completedAt": "<ISO8601>",
63932
+ * "source": "kitchen-sink" | "dismissed"
63933
+ * }
63934
+ * }
63935
+ *
63936
+ * `source` is a freeform breadcrumb so future onboarding variants can
63937
+ * report which path the user took without needing a schema change.
63938
+ *
63939
+ * The controller exposes a get/mark pair; the modal-vs-not-modal
63940
+ * decision lives in the renderer (it also needs workspace + installed-
63941
+ * package counts) so this stays a flat state owner.
63942
+ */
63943
+
63944
+ // Lazy-load electron-store so the test suite can mock it without
63945
+ // booting an Electron shell. Same pattern as publisherKeyController.
63946
+ let store$2 = null;
63947
+ function getStore$1() {
63948
+ if (!store$2) {
63949
+ const Store = require$$0$5;
63950
+ store$2 = new Store({ name: "dash-onboarding" });
63951
+ }
63952
+ return store$2;
63953
+ }
63954
+
63955
+ function readRecord() {
63956
+ return getStore$1().get("onboarding") || null;
63957
+ }
63958
+
63959
+ function writeRecord(record) {
63960
+ getStore$1().set("onboarding", record);
63961
+ }
63962
+
63963
+ /**
63964
+ * Renderer-safe snapshot of the onboarding state.
63965
+ *
63966
+ * `completed:false` is returned for both "never seen" and "explicitly
63967
+ * not done" so the renderer never has to disambiguate. The first-run
63968
+ * detector treats both the same way.
63969
+ */
63970
+ function getOnboardingStatus$1() {
63971
+ const record = readRecord();
63972
+ if (!record || !record.completed) {
63973
+ return { completed: false, completedAt: null, source: null };
63974
+ }
63975
+ return {
63976
+ completed: true,
63977
+ completedAt: record.completedAt || null,
63978
+ source: record.source || null,
63979
+ };
63980
+ }
63981
+
63982
+ /**
63983
+ * Pin onboarding as completed. Idempotent — re-calling on a record
63984
+ * that's already completed keeps the original completedAt so the
63985
+ * audit trail stays accurate.
63986
+ *
63987
+ * @param {Object} [opts]
63988
+ * @param {string} [opts.source] - Breadcrumb identifying which path
63989
+ * completed the flow (e.g. "kitchen-sink", "dismissed").
63990
+ * @returns {{ completed: true, completedAt: string, source: string|null }}
63991
+ */
63992
+ function markOnboardingCompleted$1(opts = {}) {
63993
+ const existing = readRecord();
63994
+ if (existing && existing.completed && existing.completedAt) {
63995
+ return {
63996
+ completed: true,
63997
+ completedAt: existing.completedAt,
63998
+ source: existing.source || null,
63999
+ };
64000
+ }
64001
+ const record = {
64002
+ completed: true,
64003
+ completedAt: new Date().toISOString(),
64004
+ source: typeof opts.source === "string" ? opts.source : null,
64005
+ };
64006
+ writeRecord(record);
64007
+ return record;
64008
+ }
64009
+
64010
+ var onboardingController$1 = {
64011
+ getOnboardingStatus: getOnboardingStatus$1,
64012
+ markOnboardingCompleted: markOnboardingCompleted$1,
64013
+ // exposed for tests
64014
+ _readRecord: readRecord,
64015
+ _clearRecord: () => getStore$1().delete("onboarding"),
64016
+ };
64017
+
63895
64018
  /**
63896
64019
  * notificationController.js
63897
64020
  *
@@ -66717,6 +66840,10 @@ const {
66717
66840
  revokeLocalKey,
66718
66841
  describeLocalKey,
66719
66842
  } = publisherKeyController$1;
66843
+ const {
66844
+ getOnboardingStatus,
66845
+ markOnboardingCompleted,
66846
+ } = onboardingController$1;
66720
66847
  const {
66721
66848
  getRecentDashboards,
66722
66849
  addRecentDashboard,
@@ -66822,6 +66949,8 @@ var controller = {
66822
66949
  signZipBuffer,
66823
66950
  revokeLocalKey,
66824
66951
  describeLocalKey,
66952
+ getOnboardingStatus,
66953
+ markOnboardingCompleted,
66825
66954
  getRecentDashboards,
66826
66955
  addRecentDashboard,
66827
66956
  clearRecentDashboards,
@@ -66843,7 +66972,7 @@ var controller = {
66843
66972
  mcpDashServerController: mcpDashServerController$2,
66844
66973
  };
66845
66974
 
66846
- const { ipcRenderer: ipcRenderer$p } = require$$0$2;
66975
+ const { ipcRenderer: ipcRenderer$q } = require$$0$2;
66847
66976
  const { SECURE_STORE_ENCRYPTION_CHECK } = events$8;
66848
66977
  /**
66849
66978
  * secureStoreApi
@@ -66865,7 +66994,7 @@ const { SECURE_STORE_ENCRYPTION_CHECK } = events$8;
66865
66994
  */
66866
66995
  const secureStoreApi$2 = {
66867
66996
  isEncryptionAvailable: () =>
66868
- ipcRenderer$p.invoke(SECURE_STORE_ENCRYPTION_CHECK, {}),
66997
+ ipcRenderer$q.invoke(SECURE_STORE_ENCRYPTION_CHECK, {}),
66869
66998
  };
66870
66999
 
66871
67000
  var secureStoreApi_1 = secureStoreApi$2;
@@ -66876,7 +67005,7 @@ var secureStoreApi_1 = secureStoreApi$2;
66876
67005
  * Handle the workspace configuration file
66877
67006
  */
66878
67007
 
66879
- const { ipcRenderer: ipcRenderer$o } = require$$0$2;
67008
+ const { ipcRenderer: ipcRenderer$p } = require$$0$2;
66880
67009
  const {
66881
67010
  WORKSPACE_LIST,
66882
67011
  WORKSPACE_SAVE,
@@ -66893,7 +67022,7 @@ const workspaceApi$2 = {
66893
67022
  */
66894
67023
  listWorkspacesForApplication: (appId) => {
66895
67024
  console.log("listWorkspacesForApplication called with appId:", appId);
66896
- return ipcRenderer$o.invoke(WORKSPACE_LIST, { appId });
67025
+ return ipcRenderer$p.invoke(WORKSPACE_LIST, { appId });
66897
67026
  },
66898
67027
 
66899
67028
  /**
@@ -66904,7 +67033,7 @@ const workspaceApi$2 = {
66904
67033
  * @returns
66905
67034
  */
66906
67035
  saveWorkspaceForApplication: (appId, data) =>
66907
- ipcRenderer$o.invoke(WORKSPACE_SAVE, { appId, data }),
67036
+ ipcRenderer$p.invoke(WORKSPACE_SAVE, { appId, data }),
66908
67037
 
66909
67038
  /**
66910
67039
  * deleteWorkspaceForApplication
@@ -66914,7 +67043,7 @@ const workspaceApi$2 = {
66914
67043
  * @returns
66915
67044
  */
66916
67045
  deleteWorkspaceForApplication: (appId, workspaceId) =>
66917
- ipcRenderer$o.invoke(WORKSPACE_DELETE, { appId, workspaceId }),
67046
+ ipcRenderer$p.invoke(WORKSPACE_DELETE, { appId, workspaceId }),
66918
67047
  };
66919
67048
 
66920
67049
  var workspaceApi_1 = workspaceApi$2;
@@ -66926,13 +67055,13 @@ var workspaceApi_1 = workspaceApi$2;
66926
67055
  */
66927
67056
 
66928
67057
  // ipcRenderer that must be used to invoke the events
66929
- const { ipcRenderer: ipcRenderer$n } = require$$0$2;
67058
+ const { ipcRenderer: ipcRenderer$o } = require$$0$2;
66930
67059
 
66931
67060
  const { LAYOUT_LIST } = events$8;
66932
67061
 
66933
67062
  const layoutApi$2 = {
66934
67063
  listLayoutsForApplication: (appId) =>
66935
- ipcRenderer$n.invoke(LAYOUT_LIST, { appId }),
67064
+ ipcRenderer$o.invoke(LAYOUT_LIST, { appId }),
66936
67065
  };
66937
67066
 
66938
67067
  var layoutApi_1 = layoutApi$2;
@@ -66944,7 +67073,7 @@ var layoutApi_1 = layoutApi$2;
66944
67073
  */
66945
67074
 
66946
67075
  // ipcRenderer that must be used to invoke the events
66947
- const { ipcRenderer: ipcRenderer$m } = require$$0$2;
67076
+ const { ipcRenderer: ipcRenderer$n } = require$$0$2;
66948
67077
 
66949
67078
  const {
66950
67079
  DATA_JSON_TO_CSV_FILE,
@@ -66962,7 +67091,7 @@ const {
66962
67091
  const dataApi$2 = {
66963
67092
  // convert a json array of objects to a csv string and save to file
66964
67093
  convertJsonToCsvFile: (appId, jsonObject, filename) =>
66965
- ipcRenderer$m.invoke(DATA_JSON_TO_CSV_FILE, {
67094
+ ipcRenderer$n.invoke(DATA_JSON_TO_CSV_FILE, {
66966
67095
  appId,
66967
67096
  jsonObject,
66968
67097
  filename,
@@ -66970,10 +67099,10 @@ const dataApi$2 = {
66970
67099
 
66971
67100
  // convert a json array of objects to a csv string and return a string
66972
67101
  convertJsonToCsvString: (appId, jsonObject) =>
66973
- ipcRenderer$m.invoke(DATA_JSON_TO_CSV_STRING, { appId, jsonObject }),
67102
+ ipcRenderer$n.invoke(DATA_JSON_TO_CSV_STRING, { appId, jsonObject }),
66974
67103
 
66975
67104
  parseXMLStream: (filepath, outpath, start) =>
66976
- ipcRenderer$m.invoke(PARSE_XML_STREAM, {
67105
+ ipcRenderer$n.invoke(PARSE_XML_STREAM, {
66977
67106
  filepath,
66978
67107
  outpath,
66979
67108
  start,
@@ -66987,7 +67116,7 @@ const dataApi$2 = {
66987
67116
  headers = null,
66988
67117
  limit = null,
66989
67118
  ) => {
66990
- ipcRenderer$m.invoke(PARSE_CSV_STREAM, {
67119
+ ipcRenderer$n.invoke(PARSE_CSV_STREAM, {
66991
67120
  filepath,
66992
67121
  outpath,
66993
67122
  delimiter,
@@ -66998,15 +67127,15 @@ const dataApi$2 = {
66998
67127
  },
66999
67128
 
67000
67129
  readLinesFromFile: (filepath, lineCount) => {
67001
- ipcRenderer$m.invoke(READ_LINES, { filepath, lineCount });
67130
+ ipcRenderer$n.invoke(READ_LINES, { filepath, lineCount });
67002
67131
  },
67003
67132
 
67004
67133
  readJSONFromFile: (filepath, objectCount = null) => {
67005
- ipcRenderer$m.invoke(READ_JSON, { filepath, objectCount });
67134
+ ipcRenderer$n.invoke(READ_JSON, { filepath, objectCount });
67006
67135
  },
67007
67136
 
67008
67137
  readDataFromURL: (url, toFilepath, widgetId = null, token = null) => {
67009
- ipcRenderer$m.invoke(READ_DATA_URL, { url, toFilepath, widgetId, token });
67138
+ ipcRenderer$n.invoke(READ_DATA_URL, { url, toFilepath, widgetId, token });
67010
67139
  },
67011
67140
 
67012
67141
  /*
@@ -67022,7 +67151,7 @@ const dataApi$2 = {
67022
67151
  widgetId = null,
67023
67152
  token = null,
67024
67153
  ) =>
67025
- ipcRenderer$m.invoke(DATA_SAVE_TO_FILE, {
67154
+ ipcRenderer$n.invoke(DATA_SAVE_TO_FILE, {
67026
67155
  data,
67027
67156
  filename,
67028
67157
  append,
@@ -67041,7 +67170,7 @@ const dataApi$2 = {
67041
67170
  * gates the gate itself).
67042
67171
  */
67043
67172
  readData: (filename, returnEmpty = [], widgetId = null, token = null) =>
67044
- ipcRenderer$m.invoke(DATA_READ_FROM_FILE, {
67173
+ ipcRenderer$n.invoke(DATA_READ_FROM_FILE, {
67045
67174
  filename,
67046
67175
  returnEmpty,
67047
67176
  widgetId,
@@ -67053,7 +67182,7 @@ const dataApi$2 = {
67053
67182
  * @returns
67054
67183
  */
67055
67184
  transformFile: (filepath, outFilepath, mappingFunctionBody, args) => {
67056
- ipcRenderer$m.invoke(TRANSFORM_FILE, {
67185
+ ipcRenderer$n.invoke(TRANSFORM_FILE, {
67057
67186
  filepath,
67058
67187
  outFilepath,
67059
67188
  mappingFunctionBody,
@@ -67071,7 +67200,7 @@ var dataApi_1 = dataApi$2;
67071
67200
  */
67072
67201
 
67073
67202
  // ipcRenderer that must be used to invoke the events
67074
- const { ipcRenderer: ipcRenderer$l } = require$$0$2;
67203
+ const { ipcRenderer: ipcRenderer$m } = require$$0$2;
67075
67204
 
67076
67205
  const {
67077
67206
  SETTINGS_GET,
@@ -67082,14 +67211,14 @@ const {
67082
67211
  } = events$8;
67083
67212
 
67084
67213
  const settingsApi$2 = {
67085
- getSettingsForApplication: () => ipcRenderer$l.invoke(SETTINGS_GET, {}),
67214
+ getSettingsForApplication: () => ipcRenderer$m.invoke(SETTINGS_GET, {}),
67086
67215
  saveSettingsForApplication: (data) =>
67087
- ipcRenderer$l.invoke(SETTINGS_SAVE, { data }),
67088
- getDataDirectory: () => ipcRenderer$l.invoke(SETTINGS_GET_DATA_DIR, {}),
67216
+ ipcRenderer$m.invoke(SETTINGS_SAVE, { data }),
67217
+ getDataDirectory: () => ipcRenderer$m.invoke(SETTINGS_GET_DATA_DIR, {}),
67089
67218
  setDataDirectory: (dataDirectory) =>
67090
- ipcRenderer$l.invoke(SETTINGS_SET_DATA_DIR, { dataDirectory }),
67219
+ ipcRenderer$m.invoke(SETTINGS_SET_DATA_DIR, { dataDirectory }),
67091
67220
  migrateDataDirectory: (oldDirectory, newDirectory) =>
67092
- ipcRenderer$l.invoke(SETTINGS_MIGRATE_DATA_DIR, {
67221
+ ipcRenderer$m.invoke(SETTINGS_MIGRATE_DATA_DIR, {
67093
67222
  oldDirectory,
67094
67223
  newDirectory,
67095
67224
  }),
@@ -67104,7 +67233,7 @@ var settingsApi_1 = settingsApi$2;
67104
67233
  * Provides file/folder chooser dialogs.
67105
67234
  */
67106
67235
 
67107
- const { ipcRenderer: ipcRenderer$k } = require$$0$2;
67236
+ const { ipcRenderer: ipcRenderer$l } = require$$0$2;
67108
67237
 
67109
67238
  const { CHOOSE_FILE } = events$8;
67110
67239
 
@@ -67117,7 +67246,7 @@ const dialogApi$2 = {
67117
67246
  * @returns {Promise<string|null>} selected file/folder path, or null if cancelled
67118
67247
  */
67119
67248
  chooseFile: (allowFile = true, extensions = ["*"]) => {
67120
- return ipcRenderer$k.invoke(CHOOSE_FILE, { allowFile, extensions });
67249
+ return ipcRenderer$l.invoke(CHOOSE_FILE, { allowFile, extensions });
67121
67250
  },
67122
67251
 
67123
67252
  /**
@@ -67142,7 +67271,7 @@ const dialogApi$2 = {
67142
67271
  typeof options.allowFile === "boolean" ? options.allowFile : allowFile;
67143
67272
  const resolvedExtensions = options.extensions || extensions;
67144
67273
 
67145
- const filePath = await ipcRenderer$k.invoke(CHOOSE_FILE, {
67274
+ const filePath = await ipcRenderer$l.invoke(CHOOSE_FILE, {
67146
67275
  allowFile: resolvedAllowFile,
67147
67276
  extensions: resolvedExtensions,
67148
67277
  });
@@ -67169,7 +67298,7 @@ var dialogApi_1 = dialogApi$2;
67169
67298
  * mainApi.widgets.uninstall('Weather')
67170
67299
  */
67171
67300
 
67172
- const { ipcRenderer: ipcRenderer$j } = require$$0$2;
67301
+ const { ipcRenderer: ipcRenderer$k } = require$$0$2;
67173
67302
 
67174
67303
  const widgetApi$2 = {
67175
67304
  /**
@@ -67178,7 +67307,7 @@ const widgetApi$2 = {
67178
67307
  */
67179
67308
  list: async () => {
67180
67309
  try {
67181
- return await ipcRenderer$j.invoke("widget:list");
67310
+ return await ipcRenderer$k.invoke("widget:list");
67182
67311
  } catch (error) {
67183
67312
  console.error("[WidgetApi] Error listing widgets:", error);
67184
67313
  throw error;
@@ -67192,7 +67321,7 @@ const widgetApi$2 = {
67192
67321
  */
67193
67322
  get: async (widgetName) => {
67194
67323
  try {
67195
- return await ipcRenderer$j.invoke("widget:get", widgetName);
67324
+ return await ipcRenderer$k.invoke("widget:get", widgetName);
67196
67325
  } catch (error) {
67197
67326
  console.error(`[WidgetApi] Error getting widget ${widgetName}:`, error);
67198
67327
  throw error;
@@ -67223,7 +67352,7 @@ const widgetApi$2 = {
67223
67352
  console.log(
67224
67353
  `[WidgetApi] Installing widget: ${widgetName} from ${downloadUrl}`,
67225
67354
  );
67226
- const config = await ipcRenderer$j.invoke(
67355
+ const config = await ipcRenderer$k.invoke(
67227
67356
  "widget:install",
67228
67357
  widgetName,
67229
67358
  downloadUrl,
@@ -67263,7 +67392,7 @@ const widgetApi$2 = {
67263
67392
  console.log(
67264
67393
  `[WidgetApi] Installing local widget: ${widgetName} from ${localPath}`,
67265
67394
  );
67266
- const config = await ipcRenderer$j.invoke(
67395
+ const config = await ipcRenderer$k.invoke(
67267
67396
  "widget:install-local",
67268
67397
  widgetName,
67269
67398
  localPath,
@@ -67294,7 +67423,7 @@ const widgetApi$2 = {
67294
67423
  loadFolder: async (folderPath) => {
67295
67424
  try {
67296
67425
  console.log(`[WidgetApi] Loading widgets from folder: ${folderPath}`);
67297
- const results = await ipcRenderer$j.invoke(
67426
+ const results = await ipcRenderer$k.invoke(
67298
67427
  "widget:load-folder",
67299
67428
  folderPath,
67300
67429
  );
@@ -67318,7 +67447,7 @@ const widgetApi$2 = {
67318
67447
  uninstall: async (widgetName) => {
67319
67448
  try {
67320
67449
  console.log(`[WidgetApi] Uninstalling widget: ${widgetName}`);
67321
- const success = await ipcRenderer$j.invoke("widget:uninstall", widgetName);
67450
+ const success = await ipcRenderer$k.invoke("widget:uninstall", widgetName);
67322
67451
  if (success) {
67323
67452
  console.log(`[WidgetApi] ✓ Widget ${widgetName} uninstalled`);
67324
67453
  } else {
@@ -67341,7 +67470,7 @@ const widgetApi$2 = {
67341
67470
  */
67342
67471
  getCachePath: async () => {
67343
67472
  try {
67344
- return await ipcRenderer$j.invoke("widget:cache-path");
67473
+ return await ipcRenderer$k.invoke("widget:cache-path");
67345
67474
  } catch (error) {
67346
67475
  console.error("[WidgetApi] Error getting cache path:", error);
67347
67476
  throw error;
@@ -67355,7 +67484,7 @@ const widgetApi$2 = {
67355
67484
  */
67356
67485
  getStoragePath: async () => {
67357
67486
  try {
67358
- return await ipcRenderer$j.invoke("widget:storage-path");
67487
+ return await ipcRenderer$k.invoke("widget:storage-path");
67359
67488
  } catch (error) {
67360
67489
  console.error("[WidgetApi] Error getting storage path:", error);
67361
67490
  throw error;
@@ -67372,7 +67501,7 @@ const widgetApi$2 = {
67372
67501
  setStoragePath: async (customPath) => {
67373
67502
  try {
67374
67503
  console.log(`[WidgetApi] Setting storage path to: ${customPath}`);
67375
- const result = await ipcRenderer$j.invoke(
67504
+ const result = await ipcRenderer$k.invoke(
67376
67505
  "widget:set-storage-path",
67377
67506
  customPath,
67378
67507
  );
@@ -67394,7 +67523,7 @@ const widgetApi$2 = {
67394
67523
  */
67395
67524
  getComponentConfigs: async () => {
67396
67525
  try {
67397
- return await ipcRenderer$j.invoke("widget:get-component-configs");
67526
+ return await ipcRenderer$k.invoke("widget:get-component-configs");
67398
67527
  } catch (error) {
67399
67528
  console.error("[WidgetApi] Error getting component configs:", error);
67400
67529
  return [];
@@ -67409,7 +67538,7 @@ const widgetApi$2 = {
67409
67538
  */
67410
67539
  readBundle: async (widgetName) => {
67411
67540
  try {
67412
- return await ipcRenderer$j.invoke("widget:read-bundle", widgetName);
67541
+ return await ipcRenderer$k.invoke("widget:read-bundle", widgetName);
67413
67542
  } catch (error) {
67414
67543
  console.error(
67415
67544
  `[WidgetApi] Error reading bundle for ${widgetName}:`,
@@ -67428,7 +67557,7 @@ const widgetApi$2 = {
67428
67557
  */
67429
67558
  readSources: async (widgetName, componentName) => {
67430
67559
  try {
67431
- return await ipcRenderer$j.invoke("widget:read-sources", {
67560
+ return await ipcRenderer$k.invoke("widget:read-sources", {
67432
67561
  widgetName,
67433
67562
  componentName,
67434
67563
  });
@@ -67448,7 +67577,7 @@ const widgetApi$2 = {
67448
67577
  */
67449
67578
  readAllBundles: async () => {
67450
67579
  try {
67451
- return await ipcRenderer$j.invoke("widget:read-all-bundles");
67580
+ return await ipcRenderer$k.invoke("widget:read-all-bundles");
67452
67581
  } catch (error) {
67453
67582
  console.error("[WidgetApi] Error reading all bundles:", error);
67454
67583
  return [];
@@ -67468,7 +67597,7 @@ const widgetApi$2 = {
67468
67597
  * });
67469
67598
  */
67470
67599
  onInstalled: (callback) => {
67471
- ipcRenderer$j.on("widget:installed", (event, data) => {
67600
+ ipcRenderer$k.on("widget:installed", (event, data) => {
67472
67601
  callback(data);
67473
67602
  });
67474
67603
  },
@@ -67485,7 +67614,7 @@ const widgetApi$2 = {
67485
67614
  * });
67486
67615
  */
67487
67616
  onUninstalled: (callback) => {
67488
- ipcRenderer$j.on("widget:uninstalled", (event, data) => {
67617
+ ipcRenderer$k.on("widget:uninstalled", (event, data) => {
67489
67618
  callback(data);
67490
67619
  });
67491
67620
  },
@@ -67503,7 +67632,7 @@ const widgetApi$2 = {
67503
67632
  * });
67504
67633
  */
67505
67634
  onLoaded: (callback) => {
67506
- ipcRenderer$j.on("widgets:loaded", (event, data) => {
67635
+ ipcRenderer$k.on("widgets:loaded", (event, data) => {
67507
67636
  callback(data);
67508
67637
  });
67509
67638
  },
@@ -67514,7 +67643,7 @@ const widgetApi$2 = {
67514
67643
  * @param {Function} callback - The callback to remove
67515
67644
  */
67516
67645
  removeInstalledListener: (callback) => {
67517
- ipcRenderer$j.removeListener("widget:installed", callback);
67646
+ ipcRenderer$k.removeListener("widget:installed", callback);
67518
67647
  },
67519
67648
 
67520
67649
  /**
@@ -67523,7 +67652,7 @@ const widgetApi$2 = {
67523
67652
  * @param {Function} callback - The callback to remove
67524
67653
  */
67525
67654
  removeUninstalledListener: (callback) => {
67526
- ipcRenderer$j.removeListener("widget:uninstalled", callback);
67655
+ ipcRenderer$k.removeListener("widget:uninstalled", callback);
67527
67656
  },
67528
67657
 
67529
67658
  /**
@@ -67532,7 +67661,7 @@ const widgetApi$2 = {
67532
67661
  * @param {Function} callback - The callback to remove
67533
67662
  */
67534
67663
  removeLoadedListener: (callback) => {
67535
- ipcRenderer$j.removeListener("widgets:loaded", callback);
67664
+ ipcRenderer$k.removeListener("widgets:loaded", callback);
67536
67665
  },
67537
67666
  };
67538
67667
 
@@ -67545,7 +67674,7 @@ var widgetApi_1 = widgetApi$2;
67545
67674
  * Communicates with main process via IPC to handle encryption and file storage
67546
67675
  */
67547
67676
 
67548
- const { ipcRenderer: ipcRenderer$i } = require$$0$2;
67677
+ const { ipcRenderer: ipcRenderer$j } = require$$0$2;
67549
67678
  const {
67550
67679
  PROVIDER_SAVE,
67551
67680
  PROVIDER_LIST,
@@ -67583,7 +67712,7 @@ const providerApi$2 = {
67583
67712
  // value, preserve what's on disk" from "caller explicitly unset it".
67584
67713
  isDefaultForType = undefined,
67585
67714
  ) =>
67586
- ipcRenderer$i.invoke(PROVIDER_SAVE, {
67715
+ ipcRenderer$j.invoke(PROVIDER_SAVE, {
67587
67716
  appId,
67588
67717
  providerName,
67589
67718
  providerType,
@@ -67603,7 +67732,7 @@ const providerApi$2 = {
67603
67732
  * @param {String} appId - the appId specified in the dash initialization
67604
67733
  * @returns {Promise<Array>} Array of provider objects with name, type, credentials
67605
67734
  */
67606
- listProviders: (appId) => ipcRenderer$i.invoke(PROVIDER_LIST, { appId }),
67735
+ listProviders: (appId) => ipcRenderer$j.invoke(PROVIDER_LIST, { appId }),
67607
67736
 
67608
67737
  /**
67609
67738
  * getProvider
@@ -67615,7 +67744,7 @@ const providerApi$2 = {
67615
67744
  * @returns {Promise<Object>} Provider object with name, type, credentials
67616
67745
  */
67617
67746
  getProvider: (appId, providerName) =>
67618
- ipcRenderer$i.invoke(PROVIDER_GET, { appId, providerName }),
67747
+ ipcRenderer$j.invoke(PROVIDER_GET, { appId, providerName }),
67619
67748
 
67620
67749
  /**
67621
67750
  * deleteProvider
@@ -67627,7 +67756,7 @@ const providerApi$2 = {
67627
67756
  * @returns {Promise}
67628
67757
  */
67629
67758
  deleteProvider: (appId, providerName) =>
67630
- ipcRenderer$i.invoke(PROVIDER_DELETE, { appId, providerName }),
67759
+ ipcRenderer$j.invoke(PROVIDER_DELETE, { appId, providerName }),
67631
67760
 
67632
67761
  /**
67633
67762
  * listProvidersForApplication
@@ -67637,14 +67766,14 @@ const providerApi$2 = {
67637
67766
  * @param {String} appId - the appId specified in the dash initialization
67638
67767
  */
67639
67768
  listProvidersForApplication: (appId) => {
67640
- ipcRenderer$i
67769
+ ipcRenderer$j
67641
67770
  .invoke(PROVIDER_LIST, { appId })
67642
67771
  .then((result) => {
67643
67772
  // Emit the event for ElectronDashboardApi to listen to
67644
- ipcRenderer$i.send("PROVIDER_LIST_COMPLETE", result);
67773
+ ipcRenderer$j.send("PROVIDER_LIST_COMPLETE", result);
67645
67774
  })
67646
67775
  .catch((error) => {
67647
- ipcRenderer$i.send("PROVIDER_LIST_ERROR", {
67776
+ ipcRenderer$j.send("PROVIDER_LIST_ERROR", {
67648
67777
  error: error.message,
67649
67778
  });
67650
67779
  });
@@ -67661,7 +67790,7 @@ const providerApi$2 = {
67661
67790
  providerType,
67662
67791
  credentials,
67663
67792
  ) => {
67664
- ipcRenderer$i
67793
+ ipcRenderer$j
67665
67794
  .invoke(PROVIDER_SAVE, {
67666
67795
  appId,
67667
67796
  providerName,
@@ -67669,10 +67798,10 @@ const providerApi$2 = {
67669
67798
  credentials,
67670
67799
  })
67671
67800
  .then((result) => {
67672
- ipcRenderer$i.send("PROVIDER_SAVE_COMPLETE", result);
67801
+ ipcRenderer$j.send("PROVIDER_SAVE_COMPLETE", result);
67673
67802
  })
67674
67803
  .catch((error) => {
67675
- ipcRenderer$i.send("PROVIDER_SAVE_ERROR", {
67804
+ ipcRenderer$j.send("PROVIDER_SAVE_ERROR", {
67676
67805
  error: error.message,
67677
67806
  });
67678
67807
  });
@@ -67684,13 +67813,13 @@ const providerApi$2 = {
67684
67813
  * Event-listener-based version for use with ElectronDashboardApi
67685
67814
  */
67686
67815
  getProviderForApplication: (appId, providerName) => {
67687
- ipcRenderer$i
67816
+ ipcRenderer$j
67688
67817
  .invoke(PROVIDER_GET, { appId, providerName })
67689
67818
  .then((result) => {
67690
- ipcRenderer$i.send("PROVIDER_GET_COMPLETE", result);
67819
+ ipcRenderer$j.send("PROVIDER_GET_COMPLETE", result);
67691
67820
  })
67692
67821
  .catch((error) => {
67693
- ipcRenderer$i.send("PROVIDER_GET_ERROR", {
67822
+ ipcRenderer$j.send("PROVIDER_GET_ERROR", {
67694
67823
  error: error.message,
67695
67824
  });
67696
67825
  });
@@ -67702,13 +67831,13 @@ const providerApi$2 = {
67702
67831
  * Event-listener-based version for use with ElectronDashboardApi
67703
67832
  */
67704
67833
  deleteProviderForApplication: (appId, providerName) => {
67705
- ipcRenderer$i
67834
+ ipcRenderer$j
67706
67835
  .invoke(PROVIDER_DELETE, { appId, providerName })
67707
67836
  .then((result) => {
67708
- ipcRenderer$i.send("PROVIDER_DELETE_COMPLETE", result);
67837
+ ipcRenderer$j.send("PROVIDER_DELETE_COMPLETE", result);
67709
67838
  })
67710
67839
  .catch((error) => {
67711
- ipcRenderer$i.send("PROVIDER_DELETE_ERROR", {
67840
+ ipcRenderer$j.send("PROVIDER_DELETE_ERROR", {
67712
67841
  error: error.message,
67713
67842
  });
67714
67843
  });
@@ -67724,7 +67853,7 @@ var providerApi_1 = providerApi$2;
67724
67853
  * Communicates with main process via IPC to manage MCP server lifecycle.
67725
67854
  */
67726
67855
 
67727
- const { ipcRenderer: ipcRenderer$h } = require$$0$2;
67856
+ const { ipcRenderer: ipcRenderer$i } = require$$0$2;
67728
67857
  const {
67729
67858
  MCP_START_SERVER,
67730
67859
  MCP_STOP_SERVER,
@@ -67763,7 +67892,7 @@ const mcpApi$2 = {
67763
67892
  workspaceId = null,
67764
67893
  pathScope = null,
67765
67894
  ) =>
67766
- ipcRenderer$h.invoke(MCP_START_SERVER, {
67895
+ ipcRenderer$i.invoke(MCP_START_SERVER, {
67767
67896
  serverName,
67768
67897
  mcpConfig,
67769
67898
  credentials,
@@ -67780,7 +67909,7 @@ const mcpApi$2 = {
67780
67909
  * @returns {Promise<{ success, serverName } | { error, message }>}
67781
67910
  */
67782
67911
  stopServer: (serverName, workspaceId = null) =>
67783
- ipcRenderer$h.invoke(MCP_STOP_SERVER, { serverName, workspaceId }),
67912
+ ipcRenderer$i.invoke(MCP_STOP_SERVER, { serverName, workspaceId }),
67784
67913
 
67785
67914
  /**
67786
67915
  * listTools
@@ -67791,7 +67920,7 @@ const mcpApi$2 = {
67791
67920
  * @returns {Promise<{ tools } | { error, message }>}
67792
67921
  */
67793
67922
  listTools: (serverName, workspaceId = null) =>
67794
- ipcRenderer$h.invoke(MCP_LIST_TOOLS, { serverName, workspaceId }),
67923
+ ipcRenderer$i.invoke(MCP_LIST_TOOLS, { serverName, workspaceId }),
67795
67924
 
67796
67925
  /**
67797
67926
  * callTool
@@ -67820,7 +67949,7 @@ const mcpApi$2 = {
67820
67949
  workspaceId = null,
67821
67950
  token = null,
67822
67951
  ) =>
67823
- ipcRenderer$h.invoke(MCP_CALL_TOOL, {
67952
+ ipcRenderer$i.invoke(MCP_CALL_TOOL, {
67824
67953
  serverName,
67825
67954
  toolName,
67826
67955
  args,
@@ -67839,7 +67968,7 @@ const mcpApi$2 = {
67839
67968
  * @returns {Promise<{ resources } | { error, message }>}
67840
67969
  */
67841
67970
  listResources: (serverName, workspaceId = null) =>
67842
- ipcRenderer$h.invoke(MCP_LIST_RESOURCES, { serverName, workspaceId }),
67971
+ ipcRenderer$i.invoke(MCP_LIST_RESOURCES, { serverName, workspaceId }),
67843
67972
 
67844
67973
  /**
67845
67974
  * readResource
@@ -67851,7 +67980,7 @@ const mcpApi$2 = {
67851
67980
  * @returns {Promise<{ resource } | { error, message }>}
67852
67981
  */
67853
67982
  readResource: (serverName, uri, workspaceId = null) =>
67854
- ipcRenderer$h.invoke(MCP_READ_RESOURCE, { serverName, uri, workspaceId }),
67983
+ ipcRenderer$i.invoke(MCP_READ_RESOURCE, { serverName, uri, workspaceId }),
67855
67984
 
67856
67985
  /**
67857
67986
  * getServerStatus
@@ -67862,7 +67991,7 @@ const mcpApi$2 = {
67862
67991
  * @returns {Promise<{ status, tools, error }>}
67863
67992
  */
67864
67993
  getServerStatus: (serverName, workspaceId = null) =>
67865
- ipcRenderer$h.invoke(MCP_SERVER_STATUS, { serverName, workspaceId }),
67994
+ ipcRenderer$i.invoke(MCP_SERVER_STATUS, { serverName, workspaceId }),
67866
67995
 
67867
67996
  /**
67868
67997
  * getCatalog
@@ -67870,7 +67999,7 @@ const mcpApi$2 = {
67870
67999
  *
67871
68000
  * @returns {Promise<{ catalog } | { error, message }>}
67872
68001
  */
67873
- getCatalog: () => ipcRenderer$h.invoke(MCP_GET_CATALOG),
68002
+ getCatalog: () => ipcRenderer$i.invoke(MCP_GET_CATALOG),
67874
68003
 
67875
68004
  /**
67876
68005
  * getKnownExternalCatalog
@@ -67882,7 +68011,7 @@ const mcpApi$2 = {
67882
68011
  *
67883
68012
  * @returns {Promise<{ success, servers } | { error, message, servers }>}
67884
68013
  */
67885
- getKnownExternalCatalog: () => ipcRenderer$h.invoke(MCP_GET_KNOWN_EXTERNAL),
68014
+ getKnownExternalCatalog: () => ipcRenderer$i.invoke(MCP_GET_KNOWN_EXTERNAL),
67886
68015
 
67887
68016
  /**
67888
68017
  * onInstallKnownExternalConfirm
@@ -67896,9 +68025,9 @@ const mcpApi$2 = {
67896
68025
  */
67897
68026
  onInstallKnownExternalConfirm: (callback) => {
67898
68027
  const handler = (_e, data) => callback(data);
67899
- ipcRenderer$h.on(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
68028
+ ipcRenderer$i.on(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
67900
68029
  return () =>
67901
- ipcRenderer$h.removeListener(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
68030
+ ipcRenderer$i.removeListener(MCP_INSTALL_KNOWN_EXTERNAL_CONFIRM$1, handler);
67902
68031
  },
67903
68032
 
67904
68033
  /**
@@ -67909,7 +68038,7 @@ const mcpApi$2 = {
67909
68038
  * @param {{ confirmed: boolean, credentials?: object, error?: string }} result
67910
68039
  */
67911
68040
  sendInstallKnownExternalResult: (requestId, result) =>
67912
- ipcRenderer$h.send(MCP_INSTALL_KNOWN_EXTERNAL_RESULT$1, { requestId, result }),
68041
+ ipcRenderer$i.send(MCP_INSTALL_KNOWN_EXTERNAL_RESULT$1, { requestId, result }),
67913
68042
 
67914
68043
  /**
67915
68044
  * runAuth
@@ -67921,7 +68050,7 @@ const mcpApi$2 = {
67921
68050
  * @returns {Promise<{ success } | { error, message }>}
67922
68051
  */
67923
68052
  runAuth: (mcpConfig, credentials, authCommand) =>
67924
- ipcRenderer$h.invoke(MCP_RUN_AUTH, { mcpConfig, credentials, authCommand }),
68053
+ ipcRenderer$i.invoke(MCP_RUN_AUTH, { mcpConfig, credentials, authCommand }),
67925
68054
  };
67926
68055
 
67927
68056
  var mcpApi_1 = mcpApi$2;
@@ -67939,7 +68068,7 @@ var mcpApi_1 = mcpApi$2;
67939
68068
  * mainApi.registry.checkUpdates([{ name: "weather-widgets", version: "1.0.0" }])
67940
68069
  */
67941
68070
 
67942
- const { ipcRenderer: ipcRenderer$g } = require$$0$2;
68071
+ const { ipcRenderer: ipcRenderer$h } = require$$0$2;
67943
68072
 
67944
68073
  const registryApi$2 = {
67945
68074
  /**
@@ -67949,7 +68078,7 @@ const registryApi$2 = {
67949
68078
  */
67950
68079
  fetchIndex: async (forceRefresh = false) => {
67951
68080
  try {
67952
- return await ipcRenderer$g.invoke("registry:fetch-index", forceRefresh);
68081
+ return await ipcRenderer$h.invoke("registry:fetch-index", forceRefresh);
67953
68082
  } catch (error) {
67954
68083
  console.error("[RegistryApi] Error fetching index:", error);
67955
68084
  throw error;
@@ -67964,7 +68093,7 @@ const registryApi$2 = {
67964
68093
  */
67965
68094
  search: async (query = "", filters = {}) => {
67966
68095
  try {
67967
- return await ipcRenderer$g.invoke("registry:search", query, filters);
68096
+ return await ipcRenderer$h.invoke("registry:search", query, filters);
67968
68097
  } catch (error) {
67969
68098
  console.error("[RegistryApi] Error searching registry:", error);
67970
68099
  throw error;
@@ -67978,7 +68107,7 @@ const registryApi$2 = {
67978
68107
  */
67979
68108
  getPackage: async (packageName) => {
67980
68109
  try {
67981
- return await ipcRenderer$g.invoke("registry:get-package", packageName);
68110
+ return await ipcRenderer$h.invoke("registry:get-package", packageName);
67982
68111
  } catch (error) {
67983
68112
  console.error(
67984
68113
  `[RegistryApi] Error getting package ${packageName}:`,
@@ -67995,7 +68124,7 @@ const registryApi$2 = {
67995
68124
  */
67996
68125
  checkUpdates: async (installedWidgets = []) => {
67997
68126
  try {
67998
- return await ipcRenderer$g.invoke(
68127
+ return await ipcRenderer$h.invoke(
67999
68128
  "registry:check-updates",
68000
68129
  installedWidgets,
68001
68130
  );
@@ -68013,7 +68142,7 @@ const registryApi$2 = {
68013
68142
  */
68014
68143
  searchDashboards: async (query = "", filters = {}) => {
68015
68144
  try {
68016
- return await ipcRenderer$g.invoke(
68145
+ return await ipcRenderer$h.invoke(
68017
68146
  "registry:search-dashboards",
68018
68147
  query,
68019
68148
  filters,
@@ -68032,7 +68161,7 @@ const registryApi$2 = {
68032
68161
  */
68033
68162
  searchThemes: async (query = "", filters = {}) => {
68034
68163
  try {
68035
- return await ipcRenderer$g.invoke("registry:search-themes", query, filters);
68164
+ return await ipcRenderer$h.invoke("registry:search-themes", query, filters);
68036
68165
  } catch (error) {
68037
68166
  console.error("[RegistryApi] Error searching themes:", error);
68038
68167
  throw error;
@@ -68054,7 +68183,7 @@ const registryApi$2 = {
68054
68183
  */
68055
68184
  publishWidget: async (appId, packageId, options = {}) => {
68056
68185
  try {
68057
- return await ipcRenderer$g.invoke("registry:publish-widget", {
68186
+ return await ipcRenderer$h.invoke("registry:publish-widget", {
68058
68187
  appId,
68059
68188
  packageId,
68060
68189
  options,
@@ -68075,7 +68204,7 @@ const registryApi$2 = {
68075
68204
  */
68076
68205
  inspectWidgetPackage: async (packageId) => {
68077
68206
  try {
68078
- return await ipcRenderer$g.invoke("registry:inspect-widget-package", {
68207
+ return await ipcRenderer$h.invoke("registry:inspect-widget-package", {
68079
68208
  packageId,
68080
68209
  });
68081
68210
  } catch (error) {
@@ -68096,7 +68225,7 @@ const registryApi$2 = {
68096
68225
  */
68097
68226
  scanWidgetDefaults: async (packageId) => {
68098
68227
  try {
68099
- return await ipcRenderer$g.invoke("registry:scan-widget-defaults", {
68228
+ return await ipcRenderer$h.invoke("registry:scan-widget-defaults", {
68100
68229
  packageId,
68101
68230
  });
68102
68231
  } catch (error) {
@@ -68119,7 +68248,7 @@ const registryApi$2 = {
68119
68248
  */
68120
68249
  previewFetch: async (packageName, componentName = null) => {
68121
68250
  try {
68122
- return await ipcRenderer$g.invoke(
68251
+ return await ipcRenderer$h.invoke(
68123
68252
  "registry:preview-fetch",
68124
68253
  packageName,
68125
68254
  componentName,
@@ -68145,7 +68274,7 @@ const registryApi$2 = {
68145
68274
  */
68146
68275
  fetchPackageManifest: async (packageName) => {
68147
68276
  try {
68148
- return await ipcRenderer$g.invoke(
68277
+ return await ipcRenderer$h.invoke(
68149
68278
  "registry:fetch-package-manifest",
68150
68279
  packageName,
68151
68280
  );
@@ -68167,7 +68296,7 @@ var registryApi_1 = registryApi$2;
68167
68296
  * Handle the theme configuration file
68168
68297
  */
68169
68298
 
68170
- const { ipcRenderer: ipcRenderer$f } = require$$0$2;
68299
+ const { ipcRenderer: ipcRenderer$g } = require$$0$2;
68171
68300
 
68172
68301
  const {
68173
68302
  THEME_LIST,
@@ -68180,17 +68309,17 @@ const {
68180
68309
 
68181
68310
  const themeApi$2 = {
68182
68311
  listThemesForApplication: (appId) =>
68183
- ipcRenderer$f.invoke(THEME_LIST, { appId }),
68312
+ ipcRenderer$g.invoke(THEME_LIST, { appId }),
68184
68313
  saveThemeForApplication: (appId, themeName, themeObject) =>
68185
- ipcRenderer$f.invoke(THEME_SAVE, { appId, themeName, themeObject }),
68314
+ ipcRenderer$g.invoke(THEME_SAVE, { appId, themeName, themeObject }),
68186
68315
  deleteThemeForApplication: (appId, themeKey) =>
68187
- ipcRenderer$f.invoke(THEME_DELETE, { appId, themeKey }),
68316
+ ipcRenderer$g.invoke(THEME_DELETE, { appId, themeKey }),
68188
68317
  publishTheme: (appId, themeKey, options) =>
68189
- ipcRenderer$f.invoke(THEME_PUBLISH, { appId, themeKey, options }),
68318
+ ipcRenderer$g.invoke(THEME_PUBLISH, { appId, themeKey, options }),
68190
68319
  installThemeFromRegistry: (appId, packageName) =>
68191
- ipcRenderer$f.invoke(THEME_INSTALL_FROM_REGISTRY, { appId, packageName }),
68320
+ ipcRenderer$g.invoke(THEME_INSTALL_FROM_REGISTRY, { appId, packageName }),
68192
68321
  getThemePublishPreview: (appId, themeKey) =>
68193
- ipcRenderer$f.invoke(THEME_PUBLISH_PREVIEW, { appId, themeKey }),
68322
+ ipcRenderer$g.invoke(THEME_PUBLISH_PREVIEW, { appId, themeKey }),
68194
68323
  };
68195
68324
 
68196
68325
  var themeApi_1 = themeApi$2;
@@ -68202,7 +68331,7 @@ var themeApi_1 = themeApi$2;
68202
68331
  */
68203
68332
 
68204
68333
  // ipcRenderer that must be used to invoke the events
68205
- const { ipcRenderer: ipcRenderer$e } = require$$0$2;
68334
+ const { ipcRenderer: ipcRenderer$f } = require$$0$2;
68206
68335
 
68207
68336
  const {
68208
68337
  ALGOLIA_LIST_INDICES,
@@ -68215,10 +68344,10 @@ const {
68215
68344
 
68216
68345
  const algoliaApi$2 = {
68217
68346
  listIndices: (application) =>
68218
- ipcRenderer$e.invoke(ALGOLIA_LIST_INDICES, application),
68347
+ ipcRenderer$f.invoke(ALGOLIA_LIST_INDICES, application),
68219
68348
 
68220
68349
  browseObjects: (appId, apiKey, indexName) => {
68221
- ipcRenderer$e.invoke(ALGOLIA_BROWSE_OBJECTS, {
68350
+ ipcRenderer$f.invoke(ALGOLIA_BROWSE_OBJECTS, {
68222
68351
  appId,
68223
68352
  apiKey,
68224
68353
  indexName,
@@ -68227,7 +68356,7 @@ const algoliaApi$2 = {
68227
68356
  },
68228
68357
 
68229
68358
  getAnalyticsForQuery: (application, indexName, query) =>
68230
- ipcRenderer$e.invoke(ALGOLIA_ANALYTICS_FOR_QUERY, {
68359
+ ipcRenderer$f.invoke(ALGOLIA_ANALYTICS_FOR_QUERY, {
68231
68360
  application,
68232
68361
  indexName,
68233
68362
  query,
@@ -68240,7 +68369,7 @@ const algoliaApi$2 = {
68240
68369
  dir,
68241
68370
  createIfNotExists = false,
68242
68371
  ) =>
68243
- ipcRenderer$e.invoke(ALGOLIA_PARTIAL_UPDATE_OBJECTS, {
68372
+ ipcRenderer$f.invoke(ALGOLIA_PARTIAL_UPDATE_OBJECTS, {
68244
68373
  appId,
68245
68374
  apiKey,
68246
68375
  indexName,
@@ -68249,7 +68378,7 @@ const algoliaApi$2 = {
68249
68378
  }),
68250
68379
 
68251
68380
  createBatchesFromFile: (filepath, batchFilepath, batchSize) => {
68252
- ipcRenderer$e.invoke(ALGOLIA_CREATE_BATCH, {
68381
+ ipcRenderer$f.invoke(ALGOLIA_CREATE_BATCH, {
68253
68382
  filepath,
68254
68383
  batchFilepath,
68255
68384
  batchSize,
@@ -68257,7 +68386,7 @@ const algoliaApi$2 = {
68257
68386
  },
68258
68387
 
68259
68388
  browseObjectsToFile: (appId, apiKey, indexName, toFilename, query = "") => {
68260
- ipcRenderer$e.invoke(ALGOLIA_BROWSE_OBJECTS, {
68389
+ ipcRenderer$f.invoke(ALGOLIA_BROWSE_OBJECTS, {
68261
68390
  appId,
68262
68391
  apiKey,
68263
68392
  indexName,
@@ -68267,7 +68396,7 @@ const algoliaApi$2 = {
68267
68396
  },
68268
68397
 
68269
68398
  search: (appId, apiKey, indexName, query = "", options = {}) =>
68270
- ipcRenderer$e.invoke(ALGOLIA_SEARCH, {
68399
+ ipcRenderer$f.invoke(ALGOLIA_SEARCH, {
68271
68400
  appId,
68272
68401
  apiKey,
68273
68402
  indexName,
@@ -68282,14 +68411,14 @@ var algoliaApi_1 = algoliaApi$2;
68282
68411
  * openAI
68283
68412
  */
68284
68413
 
68285
- const { ipcRenderer: ipcRenderer$d } = require$$0$2;
68414
+ const { ipcRenderer: ipcRenderer$e } = require$$0$2;
68286
68415
 
68287
68416
  const { OPENAI_DESCRIBE_IMAGE } = openaiEvents$1;
68288
68417
 
68289
68418
  const openaiApi$2 = {
68290
68419
  // convert a json array of objects to a csv string and save to file
68291
68420
  describeImage: (imageUrl, apiKey, prompt = "What's in this image?") =>
68292
- ipcRenderer$d.invoke(OPENAI_DESCRIBE_IMAGE, { imageUrl, apiKey, prompt }),
68421
+ ipcRenderer$e.invoke(OPENAI_DESCRIBE_IMAGE, { imageUrl, apiKey, prompt }),
68293
68422
  };
68294
68423
 
68295
68424
  var openaiApi_1 = openaiApi$2;
@@ -68300,14 +68429,14 @@ var openaiApi_1 = openaiApi$2;
68300
68429
  */
68301
68430
 
68302
68431
  // ipcRenderer that must be used to invoke the events
68303
- const { ipcRenderer: ipcRenderer$c } = require$$0$2;
68432
+ const { ipcRenderer: ipcRenderer$d } = require$$0$2;
68304
68433
 
68305
68434
  const { MENU_ITEMS_SAVE, MENU_ITEMS_LIST } = events$8;
68306
68435
 
68307
68436
  const menuItemsApi$2 = {
68308
68437
  saveMenuItem: (appId, menuItem) =>
68309
- ipcRenderer$c.invoke(MENU_ITEMS_SAVE, { appId, menuItem }),
68310
- listMenuItems: (appId) => ipcRenderer$c.invoke(MENU_ITEMS_LIST, { appId }),
68438
+ ipcRenderer$d.invoke(MENU_ITEMS_SAVE, { appId, menuItem }),
68439
+ listMenuItems: (appId) => ipcRenderer$d.invoke(MENU_ITEMS_LIST, { appId }),
68311
68440
  };
68312
68441
 
68313
68442
  var menuItemsApi_1 = menuItemsApi$2;
@@ -68320,7 +68449,7 @@ var menuItemsApi_1 = menuItemsApi$2;
68320
68449
  * tool-use events, and request cancellation.
68321
68450
  */
68322
68451
 
68323
- const { ipcRenderer: ipcRenderer$b } = require$$0$2;
68452
+ const { ipcRenderer: ipcRenderer$c } = require$$0$2;
68324
68453
  const {
68325
68454
  LLM_SEND_MESSAGE,
68326
68455
  LLM_ABORT_REQUEST,
@@ -68342,7 +68471,7 @@ const _listenerMap = new Map();
68342
68471
  function _addListener(channel, callback) {
68343
68472
  const id = String(++_nextListenerId);
68344
68473
  const wrapped = (_event, data) => callback(data);
68345
- ipcRenderer$b.on(channel, wrapped);
68474
+ ipcRenderer$c.on(channel, wrapped);
68346
68475
  _listenerMap.set(id, { channel, wrapped });
68347
68476
  return id;
68348
68477
  }
@@ -68357,7 +68486,7 @@ const llmApi$2 = {
68357
68486
  * @returns {Promise<void>}
68358
68487
  */
68359
68488
  sendMessage: (requestId, params) =>
68360
- ipcRenderer$b.invoke(LLM_SEND_MESSAGE, { requestId, ...params }),
68489
+ ipcRenderer$c.invoke(LLM_SEND_MESSAGE, { requestId, ...params }),
68361
68490
 
68362
68491
  /**
68363
68492
  * abortRequest
@@ -68367,7 +68496,7 @@ const llmApi$2 = {
68367
68496
  * @returns {Promise<{ success: boolean }>}
68368
68497
  */
68369
68498
  abortRequest: (requestId) =>
68370
- ipcRenderer$b.invoke(LLM_ABORT_REQUEST, { requestId }),
68499
+ ipcRenderer$c.invoke(LLM_ABORT_REQUEST, { requestId }),
68371
68500
 
68372
68501
  /**
68373
68502
  * listConnectedTools
@@ -68375,7 +68504,7 @@ const llmApi$2 = {
68375
68504
  *
68376
68505
  * @returns {Promise<Array<{ serverName, tools, resources, status }>>}
68377
68506
  */
68378
- listConnectedTools: () => ipcRenderer$b.invoke(LLM_LIST_CONNECTED_TOOLS),
68507
+ listConnectedTools: () => ipcRenderer$c.invoke(LLM_LIST_CONNECTED_TOOLS),
68379
68508
 
68380
68509
  /**
68381
68510
  * checkCliAvailable
@@ -68383,7 +68512,7 @@ const llmApi$2 = {
68383
68512
  *
68384
68513
  * @returns {Promise<{ available: boolean, path?: string }>}
68385
68514
  */
68386
- checkCliAvailable: () => ipcRenderer$b.invoke(LLM_CHECK_CLI_AVAILABLE),
68515
+ checkCliAvailable: () => ipcRenderer$c.invoke(LLM_CHECK_CLI_AVAILABLE),
68387
68516
 
68388
68517
  /**
68389
68518
  * clearCliSession
@@ -68393,7 +68522,7 @@ const llmApi$2 = {
68393
68522
  * @returns {Promise<{ success: boolean }>}
68394
68523
  */
68395
68524
  clearCliSession: (widgetUuid) =>
68396
- ipcRenderer$b.invoke(LLM_CLEAR_CLI_SESSION, { widgetUuid }),
68525
+ ipcRenderer$c.invoke(LLM_CLEAR_CLI_SESSION, { widgetUuid }),
68397
68526
 
68398
68527
  /**
68399
68528
  * getCliSessionStatus
@@ -68403,7 +68532,7 @@ const llmApi$2 = {
68403
68532
  * @returns {Promise<{ hasSession: boolean, sessionId?: string, isProcessActive: boolean }>}
68404
68533
  */
68405
68534
  getCliSessionStatus: (widgetUuid) =>
68406
- ipcRenderer$b.invoke(LLM_CLI_SESSION_STATUS, { widgetUuid }),
68535
+ ipcRenderer$c.invoke(LLM_CLI_SESSION_STATUS, { widgetUuid }),
68407
68536
 
68408
68537
  /**
68409
68538
  * endCliSession
@@ -68413,7 +68542,7 @@ const llmApi$2 = {
68413
68542
  * @returns {Promise<{ success: boolean }>}
68414
68543
  */
68415
68544
  endCliSession: (widgetUuid) =>
68416
- ipcRenderer$b.invoke(LLM_CLI_END_SESSION, { widgetUuid }),
68545
+ ipcRenderer$c.invoke(LLM_CLI_END_SESSION, { widgetUuid }),
68417
68546
 
68418
68547
  // --- Stream event listeners ---
68419
68548
  // Each on* method returns an opaque string ID. Strings cross the
@@ -68447,7 +68576,7 @@ const llmApi$2 = {
68447
68576
  const listenerId = id !== undefined ? String(id) : String(idOrChannel);
68448
68577
  const entry = _listenerMap.get(listenerId);
68449
68578
  if (entry) {
68450
- ipcRenderer$b.removeListener(entry.channel, entry.wrapped);
68579
+ ipcRenderer$c.removeListener(entry.channel, entry.wrapped);
68451
68580
  _listenerMap.delete(listenerId);
68452
68581
  }
68453
68582
  },
@@ -68459,14 +68588,14 @@ const llmApi$2 = {
68459
68588
  */
68460
68589
  removeAllStreamListeners: () => {
68461
68590
  for (const [, entry] of _listenerMap) {
68462
- ipcRenderer$b.removeListener(entry.channel, entry.wrapped);
68591
+ ipcRenderer$c.removeListener(entry.channel, entry.wrapped);
68463
68592
  }
68464
68593
  _listenerMap.clear();
68465
- ipcRenderer$b.removeAllListeners(LLM_STREAM_DELTA);
68466
- ipcRenderer$b.removeAllListeners(LLM_STREAM_TOOL_CALL);
68467
- ipcRenderer$b.removeAllListeners(LLM_STREAM_TOOL_RESULT);
68468
- ipcRenderer$b.removeAllListeners(LLM_STREAM_COMPLETE);
68469
- ipcRenderer$b.removeAllListeners(LLM_STREAM_ERROR);
68594
+ ipcRenderer$c.removeAllListeners(LLM_STREAM_DELTA);
68595
+ ipcRenderer$c.removeAllListeners(LLM_STREAM_TOOL_CALL);
68596
+ ipcRenderer$c.removeAllListeners(LLM_STREAM_TOOL_RESULT);
68597
+ ipcRenderer$c.removeAllListeners(LLM_STREAM_COMPLETE);
68598
+ ipcRenderer$c.removeAllListeners(LLM_STREAM_ERROR);
68470
68599
  },
68471
68600
  };
68472
68601
 
@@ -68479,7 +68608,7 @@ var llmApi_1 = llmApi$2;
68479
68608
  * Exposed via contextBridge through mainApi.
68480
68609
  */
68481
68610
 
68482
- const { ipcRenderer: ipcRenderer$a } = require$$0$2;
68611
+ const { ipcRenderer: ipcRenderer$b } = require$$0$2;
68483
68612
  const {
68484
68613
  DASHBOARD_CONFIG_EXPORT,
68485
68614
  DASHBOARD_CONFIG_SELECT_FILE,
@@ -68506,7 +68635,7 @@ const dashboardConfigApi$2 = {
68506
68635
  * @returns {Promise<Object>} Result with success, filePath, and config
68507
68636
  */
68508
68637
  exportDashboardConfig: (appId, workspaceId, options = {}) =>
68509
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_EXPORT, {
68638
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_EXPORT, {
68510
68639
  appId,
68511
68640
  workspaceId,
68512
68641
  options,
@@ -68519,7 +68648,7 @@ const dashboardConfigApi$2 = {
68519
68648
  *
68520
68649
  * @returns {Promise<Object>} Result with success, filePath, and dashboardConfig preview
68521
68650
  */
68522
- selectDashboardFile: () => ipcRenderer$a.invoke(DASHBOARD_CONFIG_SELECT_FILE),
68651
+ selectDashboardFile: () => ipcRenderer$b.invoke(DASHBOARD_CONFIG_SELECT_FILE),
68523
68652
 
68524
68653
  /**
68525
68654
  * Import a dashboard config from a ZIP file.
@@ -68531,7 +68660,7 @@ const dashboardConfigApi$2 = {
68531
68660
  * @returns {Promise<Object>} Result with success, workspace, and summary
68532
68661
  */
68533
68662
  importDashboardConfig: (appId, options = {}) =>
68534
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_IMPORT, { appId, ...options }),
68663
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_IMPORT, { appId, ...options }),
68535
68664
 
68536
68665
  /**
68537
68666
  * Install a dashboard from the registry by package name.
@@ -68549,7 +68678,7 @@ const dashboardConfigApi$2 = {
68549
68678
  * @returns {Promise<Object>} Result with success, workspace, and summary
68550
68679
  */
68551
68680
  installDashboardFromRegistry: (appId, packageName, options = {}) =>
68552
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_INSTALL, {
68681
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_INSTALL, {
68553
68682
  appId,
68554
68683
  packageName,
68555
68684
  options,
@@ -68563,7 +68692,7 @@ const dashboardConfigApi$2 = {
68563
68692
  * @returns {Promise<Object>} Compatibility report with per-widget status
68564
68693
  */
68565
68694
  checkDashboardCompatibility: (appId, dashboardWidgets) =>
68566
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_COMPATIBILITY, {
68695
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_COMPATIBILITY, {
68567
68696
  appId,
68568
68697
  dashboardWidgets,
68569
68698
  }),
@@ -68579,7 +68708,7 @@ const dashboardConfigApi$2 = {
68579
68708
  * @returns {Promise<Object>} Result with success, manifest, filePath
68580
68709
  */
68581
68710
  prepareDashboardForPublish: (appId, workspaceId, options = {}) =>
68582
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_PUBLISH, {
68711
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_PUBLISH, {
68583
68712
  appId,
68584
68713
  workspaceId,
68585
68714
  options,
@@ -68598,7 +68727,7 @@ const dashboardConfigApi$2 = {
68598
68727
  * @returns {Promise<Object>} { success, widgets, theme }
68599
68728
  */
68600
68729
  collectDashboardDependencies: (appId, workspaceId, options = {}) =>
68601
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_COLLECT_DEPENDENCIES, {
68730
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_COLLECT_DEPENDENCIES, {
68602
68731
  appId,
68603
68732
  workspaceId,
68604
68733
  options,
@@ -68615,7 +68744,7 @@ const dashboardConfigApi$2 = {
68615
68744
  * @returns {Promise<Object>} { success, widgets, theme, registryError? }
68616
68745
  */
68617
68746
  getDashboardPublishPlan: (appId, workspaceId, options = {}) =>
68618
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_PUBLISH_PLAN, {
68747
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_PUBLISH_PLAN, {
68619
68748
  appId,
68620
68749
  workspaceId,
68621
68750
  options,
@@ -68629,7 +68758,7 @@ const dashboardConfigApi$2 = {
68629
68758
  * @returns {Promise<Object>} Preview with metadata, widgets, wiring, compatibility
68630
68759
  */
68631
68760
  getDashboardPreview: (packageName) =>
68632
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_PREVIEW, { packageName }),
68761
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_PREVIEW, { packageName }),
68633
68762
 
68634
68763
  /**
68635
68764
  * Check installed dashboards for available updates.
@@ -68638,7 +68767,7 @@ const dashboardConfigApi$2 = {
68638
68767
  * @returns {Promise<Object>} Result with updates array
68639
68768
  */
68640
68769
  checkDashboardUpdates: (appId) =>
68641
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_CHECK_UPDATES, { appId }),
68770
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_CHECK_UPDATES, { appId }),
68642
68771
 
68643
68772
  /**
68644
68773
  * Get provider setup manifest for a dashboard's requirements.
@@ -68648,7 +68777,7 @@ const dashboardConfigApi$2 = {
68648
68777
  * @returns {Promise<Object>} Setup manifest with per-provider status
68649
68778
  */
68650
68779
  getProviderSetupManifest: (appId, requiredProviders) =>
68651
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_PROVIDER_SETUP, {
68780
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_PROVIDER_SETUP, {
68652
68781
  appId,
68653
68782
  requiredProviders,
68654
68783
  }),
@@ -68662,7 +68791,7 @@ const dashboardConfigApi$2 = {
68662
68791
  * @returns {Promise<Object>} Preview with dashboardName, widgetCount, widgets, componentNames
68663
68792
  */
68664
68793
  getPublishPreview: (appId, workspaceId) =>
68665
- ipcRenderer$a.invoke(DASHBOARD_CONFIG_PUBLISH_PREVIEW, {
68794
+ ipcRenderer$b.invoke(DASHBOARD_CONFIG_PUBLISH_PREVIEW, {
68666
68795
  appId,
68667
68796
  workspaceId,
68668
68797
  }),
@@ -68676,9 +68805,9 @@ const dashboardConfigApi$2 = {
68676
68805
  */
68677
68806
  onInstallProgress: (callback) => {
68678
68807
  const handler = (_event, data) => callback(data);
68679
- ipcRenderer$a.on(DASHBOARD_CONFIG_INSTALL_PROGRESS, handler);
68808
+ ipcRenderer$b.on(DASHBOARD_CONFIG_INSTALL_PROGRESS, handler);
68680
68809
  return () =>
68681
- ipcRenderer$a.removeListener(DASHBOARD_CONFIG_INSTALL_PROGRESS, handler);
68810
+ ipcRenderer$b.removeListener(DASHBOARD_CONFIG_INSTALL_PROGRESS, handler);
68682
68811
  },
68683
68812
  };
68684
68813
 
@@ -68691,7 +68820,7 @@ var dashboardConfigApi_1 = dashboardConfigApi$2;
68691
68820
  * Exposed via contextBridge through mainApi.
68692
68821
  */
68693
68822
 
68694
- const { ipcRenderer: ipcRenderer$9 } = require$$0$2;
68823
+ const { ipcRenderer: ipcRenderer$a } = require$$0$2;
68695
68824
  const {
68696
68825
  REGISTRY_AUTH_INITIATE_LOGIN,
68697
68826
  REGISTRY_AUTH_POLL_TOKEN,
@@ -68712,7 +68841,7 @@ const registryAuthApi$2 = {
68712
68841
  *
68713
68842
  * @returns {Promise<Object>} { deviceCode, userCode, verificationUrl, verificationUrlComplete, expiresIn, interval }
68714
68843
  */
68715
- initiateLogin: () => ipcRenderer$9.invoke(REGISTRY_AUTH_INITIATE_LOGIN),
68844
+ initiateLogin: () => ipcRenderer$a.invoke(REGISTRY_AUTH_INITIATE_LOGIN),
68716
68845
 
68717
68846
  /**
68718
68847
  * Poll for token after user completes browser auth.
@@ -68721,26 +68850,26 @@ const registryAuthApi$2 = {
68721
68850
  * @returns {Promise<Object>} { status: 'pending' | 'authorized' | 'expired', token?, userId? }
68722
68851
  */
68723
68852
  pollToken: (deviceCode) =>
68724
- ipcRenderer$9.invoke(REGISTRY_AUTH_POLL_TOKEN, { deviceCode }),
68853
+ ipcRenderer$a.invoke(REGISTRY_AUTH_POLL_TOKEN, { deviceCode }),
68725
68854
 
68726
68855
  /**
68727
68856
  * Get current auth status.
68728
68857
  *
68729
68858
  * @returns {Promise<Object>} { authenticated: boolean, userId?: string }
68730
68859
  */
68731
- getStatus: () => ipcRenderer$9.invoke(REGISTRY_AUTH_GET_STATUS),
68860
+ getStatus: () => ipcRenderer$a.invoke(REGISTRY_AUTH_GET_STATUS),
68732
68861
 
68733
68862
  /**
68734
68863
  * Get the authenticated user's registry profile.
68735
68864
  *
68736
68865
  * @returns {Promise<Object|null>} User profile or null
68737
68866
  */
68738
- getProfile: () => ipcRenderer$9.invoke(REGISTRY_AUTH_GET_PROFILE),
68867
+ getProfile: () => ipcRenderer$a.invoke(REGISTRY_AUTH_GET_PROFILE),
68739
68868
 
68740
68869
  /**
68741
68870
  * Logout from registry.
68742
68871
  */
68743
- logout: () => ipcRenderer$9.invoke(REGISTRY_AUTH_LOGOUT),
68872
+ logout: () => ipcRenderer$a.invoke(REGISTRY_AUTH_LOGOUT),
68744
68873
 
68745
68874
  /**
68746
68875
  * Publish a ZIP to the registry.
@@ -68750,7 +68879,7 @@ const registryAuthApi$2 = {
68750
68879
  * @returns {Promise<Object>} { success, registryUrl, packageId, version, error? }
68751
68880
  */
68752
68881
  publish: (zipPath, manifest) =>
68753
- ipcRenderer$9.invoke(REGISTRY_AUTH_PUBLISH, { zipPath, manifest }),
68882
+ ipcRenderer$a.invoke(REGISTRY_AUTH_PUBLISH, { zipPath, manifest }),
68754
68883
 
68755
68884
  /**
68756
68885
  * Update the authenticated user's profile.
@@ -68759,14 +68888,14 @@ const registryAuthApi$2 = {
68759
68888
  * @returns {Promise<Object|null>} Updated user or null
68760
68889
  */
68761
68890
  updateProfile: (updates) =>
68762
- ipcRenderer$9.invoke(REGISTRY_AUTH_UPDATE_PROFILE, updates),
68891
+ ipcRenderer$a.invoke(REGISTRY_AUTH_UPDATE_PROFILE, updates),
68763
68892
 
68764
68893
  /**
68765
68894
  * Get the authenticated user's published packages.
68766
68895
  *
68767
68896
  * @returns {Promise<Object|null>} { packages: [...] } or null
68768
68897
  */
68769
- getPackages: () => ipcRenderer$9.invoke(REGISTRY_AUTH_GET_PACKAGES),
68898
+ getPackages: () => ipcRenderer$a.invoke(REGISTRY_AUTH_GET_PACKAGES),
68770
68899
 
68771
68900
  /**
68772
68901
  * Update a published package's metadata.
@@ -68777,7 +68906,7 @@ const registryAuthApi$2 = {
68777
68906
  * @returns {Promise<Object|null>} Updated package or null
68778
68907
  */
68779
68908
  updatePackage: (scope, name, updates) =>
68780
- ipcRenderer$9.invoke(REGISTRY_AUTH_UPDATE_PACKAGE, {
68909
+ ipcRenderer$a.invoke(REGISTRY_AUTH_UPDATE_PACKAGE, {
68781
68910
  scope,
68782
68911
  name,
68783
68912
  updates,
@@ -68791,7 +68920,7 @@ const registryAuthApi$2 = {
68791
68920
  * @returns {Promise<Object|null>} Response or null
68792
68921
  */
68793
68922
  deletePackage: (scope, name) =>
68794
- ipcRenderer$9.invoke(REGISTRY_AUTH_DELETE_PACKAGE, { scope, name }),
68923
+ ipcRenderer$a.invoke(REGISTRY_AUTH_DELETE_PACKAGE, { scope, name }),
68795
68924
  };
68796
68925
 
68797
68926
  var registryAuthApi_1 = registryAuthApi$2;
@@ -68803,7 +68932,7 @@ var registryAuthApi_1 = registryAuthApi$2;
68803
68932
  * Exposed via contextBridge through `window.mainApi.publisherKey`.
68804
68933
  */
68805
68934
 
68806
- const { ipcRenderer: ipcRenderer$8 } = require$$0$2;
68935
+ const { ipcRenderer: ipcRenderer$9 } = require$$0$2;
68807
68936
  const {
68808
68937
  PUBLISHER_KEY_GET_OR_CREATE,
68809
68938
  PUBLISHER_KEY_DESCRIBE,
@@ -68823,23 +68952,59 @@ const publisherKeyApi$2 = {
68823
68952
  * Rejects with `{ authRequired: true }` if not signed in to the
68824
68953
  * registry; with a generic error otherwise.
68825
68954
  */
68826
- getOrCreate: () => ipcRenderer$8.invoke(PUBLISHER_KEY_GET_OR_CREATE),
68955
+ getOrCreate: () => ipcRenderer$9.invoke(PUBLISHER_KEY_GET_OR_CREATE),
68827
68956
 
68828
68957
  /**
68829
68958
  * Summary of the current local key (or null). Does not trigger
68830
68959
  * registration — purely read-only.
68831
68960
  */
68832
- describe: () => ipcRenderer$8.invoke(PUBLISHER_KEY_DESCRIBE),
68961
+ describe: () => ipcRenderer$9.invoke(PUBLISHER_KEY_DESCRIBE),
68833
68962
 
68834
68963
  /**
68835
68964
  * Revoke the local key on the registry and clear it from disk.
68836
68965
  * Next publish will auto-generate a fresh keypair.
68837
68966
  */
68838
- revoke: () => ipcRenderer$8.invoke(PUBLISHER_KEY_REVOKE),
68967
+ revoke: () => ipcRenderer$9.invoke(PUBLISHER_KEY_REVOKE),
68839
68968
  };
68840
68969
 
68841
68970
  var publisherKeyApi_1 = publisherKeyApi$2;
68842
68971
 
68972
+ /**
68973
+ * onboardingApi.js
68974
+ *
68975
+ * IPC bridge for the first-run onboarding flow (renderer side).
68976
+ * Exposed via contextBridge through `window.mainApi.onboarding`.
68977
+ */
68978
+
68979
+ const { ipcRenderer: ipcRenderer$8 } = require$$0$2;
68980
+ const {
68981
+ ONBOARDING_GET_STATUS,
68982
+ ONBOARDING_MARK_COMPLETED,
68983
+ } = events$8;
68984
+
68985
+ const onboardingApi$2 = {
68986
+ /**
68987
+ * Read the current onboarding state. Always resolves; never rejects.
68988
+ * Returns `{ completed, completedAt, source }`. `completed:false` is
68989
+ * the "never seen" state — the renderer can treat that as the gate
68990
+ * to show the OnboardingModal.
68991
+ */
68992
+ getStatus: () => ipcRenderer$8.invoke(ONBOARDING_GET_STATUS),
68993
+
68994
+ /**
68995
+ * Pin onboarding as completed. Idempotent — safe to call multiple
68996
+ * times; the first stamp wins.
68997
+ *
68998
+ * @param {Object} [opts]
68999
+ * @param {string} [opts.source] - "kitchen-sink", "dismissed", etc.
69000
+ * @returns {Promise<{ completed: true, completedAt: string, source: string|null }>}
69001
+ */
69002
+ markCompleted: (opts = {}) =>
69003
+ ipcRenderer$8.invoke(ONBOARDING_MARK_COMPLETED, opts),
69004
+ };
69005
+
69006
+ var onboardingApi_1 = onboardingApi$2;
69007
+
68843
69008
  /**
68844
69009
  * notificationApi.js
68845
69010
  *
@@ -70459,6 +70624,7 @@ const themeFromUrlApi$1 = themeFromUrlApi_1;
70459
70624
  const webSocketApi$1 = webSocketApi_1;
70460
70625
  const mcpDashServerApi$1 = mcpDashServerApi_1;
70461
70626
  const publisherKeyApi$1 = publisherKeyApi_1;
70627
+ const onboardingApi$1 = onboardingApi_1;
70462
70628
 
70463
70629
  // Events constants
70464
70630
  const events$1 = events$8;
@@ -70532,6 +70698,7 @@ function createMainApi$1(extensions = {}) {
70532
70698
  dashboardRatings: dashboardRatingsApi,
70533
70699
  registryAuth: registryAuthApi$1,
70534
70700
  publisherKey: publisherKeyApi$1,
70701
+ onboarding: onboardingApi$1,
70535
70702
  session: sessionApi,
70536
70703
  notifications: notificationApi$1,
70537
70704
  scheduler: schedulerApi$1,
@@ -70587,6 +70754,7 @@ const dashboardConfigController = dashboardConfigController$1;
70587
70754
  const registryAuthController = registryAuthController$2;
70588
70755
  const registryApiController = registryApiController$3;
70589
70756
  const publisherKeyController = publisherKeyController$1;
70757
+ const onboardingController = onboardingController$1;
70590
70758
  const notificationController = notificationController_1;
70591
70759
  const schedulerController = schedulerController_1;
70592
70760
  const themeRegistryController = themeRegistryController$1;
@@ -70629,6 +70797,7 @@ const llmApi = llmApi_1;
70629
70797
  const dashboardConfigApi = dashboardConfigApi_1;
70630
70798
  const registryAuthApi = registryAuthApi_1;
70631
70799
  const publisherKeyApi = publisherKeyApi_1;
70800
+ const onboardingApi = onboardingApi_1;
70632
70801
  const notificationApi = notificationApi_1;
70633
70802
  const schedulerApi = schedulerApi_1;
70634
70803
  const themeFromUrlApi = themeFromUrlApi_1;
@@ -70693,6 +70862,7 @@ var electron = {
70693
70862
  registryAuthController,
70694
70863
  registryApiController,
70695
70864
  publisherKeyController,
70865
+ onboardingController,
70696
70866
  notificationController,
70697
70867
  schedulerController,
70698
70868
  themeRegistryController,
@@ -70727,6 +70897,7 @@ var electron = {
70727
70897
  dashboardConfigApi,
70728
70898
  registryAuthApi,
70729
70899
  publisherKeyApi,
70900
+ onboardingApi,
70730
70901
  notificationApi,
70731
70902
  schedulerApi,
70732
70903
  themeFromUrlApi,