@trops/dash-core 0.1.449 → 0.1.451

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -45957,13 +45957,20 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
45957
45957
  // eslint-disable-next-line react-hooks/exhaustive-deps
45958
45958
  }, [dashApi]);
45959
45959
 
45960
- // Filter catalog by search
45960
+ // Filter catalog by search, then sort alphabetically by display name.
45961
+ // Built-in and known-external entries are interleaved alphabetically —
45962
+ // the per-card "external" badge keeps the source obvious without
45963
+ // needing a separate group header.
45961
45964
  var filteredCatalog = catalog.filter(function (server) {
45962
45965
  if (!searchQuery) return true;
45963
45966
  var q = searchQuery.toLowerCase();
45964
45967
  return server.name.toLowerCase().includes(q) || server.description.toLowerCase().includes(q) || (server.tags || []).some(function (tag) {
45965
45968
  return tag.toLowerCase().includes(q);
45966
45969
  });
45970
+ }).slice().sort(function (a, b) {
45971
+ return String(a.name || "").localeCompare(String(b.name || ""), undefined, {
45972
+ sensitivity: "base"
45973
+ });
45967
45974
  });
45968
45975
 
45969
45976
  // Dynamic wizard steps based on whether auth is needed
@@ -49232,6 +49239,15 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49232
49239
  _useState14 = _slicedToArray(_useState13, 2),
49233
49240
  packageInfo = _useState14[0],
49234
49241
  setPackageInfo = _useState14[1];
49242
+ // When the main-process pre-publish scan finds personal filesystem
49243
+ // paths in the package source, it returns `{ needsConfirmation: true,
49244
+ // personalPathFindings: [...] }` instead of publishing. We stash the
49245
+ // findings and surface a confirm-or-cancel panel; "Publish anyway"
49246
+ // retries with `confirmPersonalPaths: true`.
49247
+ var _useState15 = React.useState(null),
49248
+ _useState16 = _slicedToArray(_useState15, 2),
49249
+ personalPathFindings = _useState16[0],
49250
+ setPersonalPathFindings = _useState16[1];
49235
49251
 
49236
49252
  // Reset modal state on open
49237
49253
  React.useEffect(function () {
@@ -49242,6 +49258,7 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49242
49258
  setIsPublishing(false);
49243
49259
  setResult(null);
49244
49260
  setPackageInfo(null);
49261
+ setPersonalPathFindings(null);
49245
49262
  }, [isOpen]);
49246
49263
 
49247
49264
  // Inspect the package to get its metadata + component list
@@ -49409,10 +49426,18 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49409
49426
  }
49410
49427
  function _handlePublish() {
49411
49428
  _handlePublish = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
49412
- var options, packageId, res, _t3;
49429
+ var _ref4,
49430
+ _ref4$confirmPersonal,
49431
+ confirmPersonalPaths,
49432
+ options,
49433
+ packageId,
49434
+ res,
49435
+ _args4 = arguments,
49436
+ _t3;
49413
49437
  return _regeneratorRuntime.wrap(function (_context4) {
49414
49438
  while (1) switch (_context4.prev = _context4.next) {
49415
49439
  case 0:
49440
+ _ref4 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, _ref4$confirmPersonal = _ref4.confirmPersonalPaths, confirmPersonalPaths = _ref4$confirmPersonal === void 0 ? false : _ref4$confirmPersonal;
49416
49441
  if (widget) {
49417
49442
  _context4.next = 1;
49418
49443
  break;
@@ -49421,18 +49446,28 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49421
49446
  case 1:
49422
49447
  setIsPublishing(true);
49423
49448
  setResult(null);
49449
+ if (!confirmPersonalPaths) setPersonalPathFindings(null);
49424
49450
  _context4.prev = 2;
49425
- options = _objectSpread$k({
49451
+ options = _objectSpread$k(_objectSpread$k({
49426
49452
  visibility: visibility
49427
49453
  }, bump && bump !== "none" ? {
49428
49454
  bump: bump
49455
+ } : {}), confirmPersonalPaths ? {
49456
+ confirmPersonalPaths: true
49429
49457
  } : {});
49430
49458
  packageId = widget.packageId || widget.name;
49431
49459
  _context4.next = 3;
49432
49460
  return window.mainApi.registry.publishWidget(appId, packageId, options);
49433
49461
  case 3:
49434
49462
  res = _context4.sent;
49435
- setResult(res);
49463
+ // Main process asked us to confirm a privacy warning before it ships
49464
+ // the package. Stash the findings and render the confirm panel —
49465
+ // don't mark as a completed result.
49466
+ if (res !== null && res !== void 0 && res.needsConfirmation && (res === null || res === void 0 ? void 0 : res.reason) === "personal-paths") {
49467
+ setPersonalPathFindings(res.personalPathFindings || []);
49468
+ } else {
49469
+ setResult(res);
49470
+ }
49436
49471
  _context4.next = 5;
49437
49472
  break;
49438
49473
  case 4:
@@ -49454,6 +49489,14 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49454
49489
  }));
49455
49490
  return _handlePublish.apply(this, arguments);
49456
49491
  }
49492
+ function handleCancelPersonalPathsConfirm() {
49493
+ setPersonalPathFindings(null);
49494
+ }
49495
+ function handleConfirmPersonalPathsAndPublish() {
49496
+ handlePublish({
49497
+ confirmPersonalPaths: true
49498
+ });
49499
+ }
49457
49500
  if (!widget) return null;
49458
49501
  var currentVersion = widget.version || "1.0.0";
49459
49502
  var newVersion = bumpPreview(currentVersion, bump);
@@ -49498,7 +49541,48 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49498
49541
  className: "text-xs text-red-300",
49499
49542
  children: authError
49500
49543
  })]
49501
- }), authStatus === "authenticated" && !result && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
49544
+ }), authStatus === "authenticated" && personalPathFindings && !result && /*#__PURE__*/jsxRuntime.jsxs("div", {
49545
+ className: "space-y-3",
49546
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
49547
+ className: "p-3 bg-amber-900/20 border border-amber-700/40 rounded text-sm text-amber-200",
49548
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
49549
+ className: "font-semibold flex items-center gap-2 mb-1",
49550
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
49551
+ icon: "triangle-exclamation",
49552
+ className: "h-4 w-4"
49553
+ }), "Personal paths detected in this package"]
49554
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
49555
+ className: "text-xs opacity-90",
49556
+ children: ["The following lines look like absolute paths on your machine. Publishing will include them. If any of these are your local filesystem, replace them with a tilde (e.g.", /*#__PURE__*/jsxRuntime.jsx("code", {
49557
+ className: "px-1 opacity-90",
49558
+ children: "~/pipeline"
49559
+ }), ") or a schema ", /*#__PURE__*/jsxRuntime.jsx("code", {
49560
+ className: "px-1 opacity-90",
49561
+ children: "defaultValue"
49562
+ }), " ", "before publishing."]
49563
+ })]
49564
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
49565
+ className: "bg-white/5 border border-white/10 rounded-lg divide-y divide-white/10 max-h-60 overflow-y-auto",
49566
+ children: personalPathFindings.map(function (f, idx) {
49567
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
49568
+ className: "px-3 py-2 text-xs",
49569
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
49570
+ className: "font-mono text-amber-200 truncate",
49571
+ children: [f.file, ":", f.line]
49572
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
49573
+ className: "font-mono opacity-80 mt-0.5 break-all",
49574
+ children: f.match
49575
+ }), f.context && f.context !== f.match && /*#__PURE__*/jsxRuntime.jsx("div", {
49576
+ className: "font-mono opacity-50 mt-0.5 truncate",
49577
+ children: f.context
49578
+ })]
49579
+ }, "".concat(f.file, ":").concat(f.line, ":").concat(idx));
49580
+ })
49581
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
49582
+ className: "text-xs opacity-60",
49583
+ children: ["Total findings: ", personalPathFindings.length, personalPathFindings.length >= 50 && " (capped)"]
49584
+ })]
49585
+ }), authStatus === "authenticated" && !result && !personalPathFindings && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
49502
49586
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
49503
49587
  className: "bg-white/5 border border-white/10 rounded-lg p-3 text-sm",
49504
49588
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -49659,16 +49743,29 @@ var PublishWidgetModal = function PublishWidgetModal(_ref) {
49659
49743
  })
49660
49744
  })]
49661
49745
  })]
49662
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
49746
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
49663
49747
  className: "flex-shrink-0 flex flex-row justify-end gap-2 p-4 border-t border-white/10",
49664
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
49665
- title: result !== null && result !== void 0 && result.success ? "Close" : "Cancel",
49666
- onClick: handleClose
49667
- }), !(result !== null && result !== void 0 && result.success) && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button2, {
49668
- title: isPublishing ? "Publishing…" : "Publish",
49669
- onClick: handlePublish,
49670
- disabled: !canPublish
49671
- })]
49748
+ children: personalPathFindings ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
49749
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
49750
+ title: "Go back",
49751
+ onClick: handleCancelPersonalPathsConfirm
49752
+ }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Button2, {
49753
+ title: isPublishing ? "Publishing…" : "Publish anyway",
49754
+ onClick: handleConfirmPersonalPathsAndPublish,
49755
+ disabled: isPublishing
49756
+ })]
49757
+ }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
49758
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
49759
+ title: result !== null && result !== void 0 && result.success ? "Close" : "Cancel",
49760
+ onClick: handleClose
49761
+ }), !(result !== null && result !== void 0 && result.success) && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button2, {
49762
+ title: isPublishing ? "Publishing…" : "Publish",
49763
+ onClick: function onClick() {
49764
+ return handlePublish();
49765
+ },
49766
+ disabled: !canPublish
49767
+ })]
49768
+ })
49672
49769
  })]
49673
49770
  })
49674
49771
  });
@@ -62623,15 +62720,6 @@ function ChatCore(_ref) {
62623
62720
  }
62624
62721
  };
62625
62722
 
62626
- // End CLI session
62627
- var handleEndSession = function handleEndSession() {
62628
- var _mainApi$llm4;
62629
- if (!isCliBackend || !(mainApi !== null && mainApi !== void 0 && (_mainApi$llm4 = mainApi.llm) !== null && _mainApi$llm4 !== void 0 && _mainApi$llm4.endCliSession)) return;
62630
- if (isLoading) handleStop();
62631
- mainApi.llm.endCliSession(uuid || persistKey || sessionKey);
62632
- setSessionActive(false);
62633
- };
62634
-
62635
62723
  // Toggle tool
62636
62724
  var handleToggleTool = function handleToggleTool(toolName) {
62637
62725
  setEnabledTools(function (prev) {
@@ -62656,29 +62744,21 @@ function ChatCore(_ref) {
62656
62744
  className: "inline-block w-2 h-2 rounded-full bg-green-400",
62657
62745
  title: "CLI session active"
62658
62746
  })]
62659
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
62747
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
62660
62748
  className: "flex items-center gap-1",
62661
- children: [isCliBackend && sessionActive && /*#__PURE__*/jsxRuntime.jsx("button", {
62662
- onClick: handleEndSession,
62663
- className: "px-2 py-1 text-xs rounded bg-red-900/50 hover:bg-red-800/50 text-red-300 transition-colors",
62664
- children: "End Session"
62665
- }), /*#__PURE__*/jsxRuntime.jsx("button", {
62749
+ children: /*#__PURE__*/jsxRuntime.jsx("button", {
62666
62750
  onClick: handleNewChat,
62667
62751
  className: "px-2 py-1 text-xs rounded bg-gray-700 hover:bg-gray-600 text-gray-300 transition-colors",
62668
62752
  children: "New Chat"
62669
- })]
62753
+ })
62670
62754
  })]
62671
- }) : /*#__PURE__*/jsxRuntime.jsxs("div", {
62755
+ }) : /*#__PURE__*/jsxRuntime.jsx("div", {
62672
62756
  className: "flex items-center justify-end px-3 py-1 shrink-0",
62673
- children: [isCliBackend && sessionActive && /*#__PURE__*/jsxRuntime.jsx("button", {
62674
- onClick: handleEndSession,
62675
- className: "px-2 py-1 text-xs rounded bg-red-900/50 hover:bg-red-800/50 text-red-300 transition-colors mr-1",
62676
- children: "End Session"
62677
- }), /*#__PURE__*/jsxRuntime.jsx("button", {
62757
+ children: /*#__PURE__*/jsxRuntime.jsx("button", {
62678
62758
  onClick: handleNewChat,
62679
62759
  className: "px-2 py-1 text-xs rounded bg-gray-700 hover:bg-gray-600 text-gray-300 transition-colors",
62680
62760
  children: "New Chat"
62681
- })]
62761
+ })
62682
62762
  }), error && /*#__PURE__*/jsxRuntime.jsxs("div", {
62683
62763
  className: "mx-3 mt-2 p-2 bg-red-900/30 border border-red-700 rounded text-red-300 text-xs",
62684
62764
  children: [error, /*#__PURE__*/jsxRuntime.jsx("button", {