@trops/dash-core 0.1.61 → 0.1.63
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/electron/index.js +93 -4
- package/dist/electron/index.js.map +1 -1
- package/dist/index.esm.js +454 -159
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +454 -159
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1161,12 +1161,13 @@ var ElectronDashboardApi = /*#__PURE__*/function () {
|
|
|
1161
1161
|
if (this.api !== null) {
|
|
1162
1162
|
try {
|
|
1163
1163
|
// Handle the promise returned by the IPC call
|
|
1164
|
-
// Note: providerData should contain providerType, credentials, and optionally providerClass/mcpConfig
|
|
1164
|
+
// Note: providerData should contain providerType, credentials, and optionally providerClass/mcpConfig/allowedTools
|
|
1165
1165
|
var providerType = providerData.providerType,
|
|
1166
1166
|
credentials = providerData.credentials,
|
|
1167
1167
|
providerClass = providerData.providerClass,
|
|
1168
|
-
mcpConfig = providerData.mcpConfig
|
|
1169
|
-
|
|
1168
|
+
mcpConfig = providerData.mcpConfig,
|
|
1169
|
+
allowedTools = providerData.allowedTools;
|
|
1170
|
+
this.api.providers.saveProvider(appId, providerName, providerType, credentials, providerClass, mcpConfig, allowedTools).then(function (result) {
|
|
1170
1171
|
onSuccess(_this12.events.PROVIDER_SAVE_COMPLETE, result);
|
|
1171
1172
|
})["catch"](function (error) {
|
|
1172
1173
|
onError(_this12.events.PROVIDER_SAVE_ERROR, error);
|
|
@@ -2689,9 +2690,9 @@ var LayoutContainer = function LayoutContainer(_ref) {
|
|
|
2689
2690
|
|
|
2690
2691
|
function ownKeys$v(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2691
2692
|
function _objectSpread$v(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$v(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$v(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
2692
|
-
function _createForOfIteratorHelper$
|
|
2693
|
-
function _unsupportedIterableToArray$
|
|
2694
|
-
function _arrayLikeToArray$
|
|
2693
|
+
function _createForOfIteratorHelper$a(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$a(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
2694
|
+
function _unsupportedIterableToArray$a(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$a(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$a(r, a) : void 0; } }
|
|
2695
|
+
function _arrayLikeToArray$a(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
2695
2696
|
/**
|
|
2696
2697
|
* Layout template definitions for the dashboard template picker.
|
|
2697
2698
|
*
|
|
@@ -2927,7 +2928,7 @@ function createLayoutFromTemplate(template) {
|
|
|
2927
2928
|
cols: template.cols,
|
|
2928
2929
|
gap: "gap-2"
|
|
2929
2930
|
};
|
|
2930
|
-
var _iterator = _createForOfIteratorHelper$
|
|
2931
|
+
var _iterator = _createForOfIteratorHelper$a(template.cells),
|
|
2931
2932
|
_step;
|
|
2932
2933
|
try {
|
|
2933
2934
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -4439,9 +4440,9 @@ var PanelEditItem = function PanelEditItem(_ref) {
|
|
|
4439
4440
|
};
|
|
4440
4441
|
|
|
4441
4442
|
var _excluded$5 = ["rows", "cols"];
|
|
4442
|
-
function _createForOfIteratorHelper$
|
|
4443
|
-
function _unsupportedIterableToArray$
|
|
4444
|
-
function _arrayLikeToArray$
|
|
4443
|
+
function _createForOfIteratorHelper$9(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$9(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
4444
|
+
function _unsupportedIterableToArray$9(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$9(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$9(r, a) : void 0; } }
|
|
4445
|
+
function _arrayLikeToArray$9(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
4445
4446
|
function ownKeys$t(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4446
4447
|
function _objectSpread$t(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$t(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$t(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4447
4448
|
var defaultGrid = {
|
|
@@ -4594,7 +4595,7 @@ function GridEditor(_ref) {
|
|
|
4594
4595
|
function sortObjectByKeys(obj) {
|
|
4595
4596
|
var sortedKeys = Object.keys(obj).sort();
|
|
4596
4597
|
var sortedObj = {};
|
|
4597
|
-
var _iterator = _createForOfIteratorHelper$
|
|
4598
|
+
var _iterator = _createForOfIteratorHelper$9(sortedKeys),
|
|
4598
4599
|
_step;
|
|
4599
4600
|
try {
|
|
4600
4601
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -7318,9 +7319,9 @@ var ProviderForm = function ProviderForm(_ref) {
|
|
|
7318
7319
|
});
|
|
7319
7320
|
};
|
|
7320
7321
|
|
|
7321
|
-
function _createForOfIteratorHelper$
|
|
7322
|
-
function _unsupportedIterableToArray$
|
|
7323
|
-
function _arrayLikeToArray$
|
|
7322
|
+
function _createForOfIteratorHelper$8(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$8(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
7323
|
+
function _unsupportedIterableToArray$8(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$8(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$8(r, a) : void 0; } }
|
|
7324
|
+
function _arrayLikeToArray$8(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
7324
7325
|
function ownKeys$r(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7325
7326
|
function _objectSpread$r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$r(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7326
7327
|
var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
|
|
@@ -7529,11 +7530,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
|
|
|
7529
7530
|
|
|
7530
7531
|
// Flatten all widgets from all packages for the widget list
|
|
7531
7532
|
flatWidgets = [];
|
|
7532
|
-
_iterator = _createForOfIteratorHelper$
|
|
7533
|
+
_iterator = _createForOfIteratorHelper$8(result.packages || []);
|
|
7533
7534
|
try {
|
|
7534
7535
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
7535
7536
|
pkg = _step.value;
|
|
7536
|
-
_iterator2 = _createForOfIteratorHelper$
|
|
7537
|
+
_iterator2 = _createForOfIteratorHelper$8(pkg.widgets || []);
|
|
7537
7538
|
try {
|
|
7538
7539
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
7539
7540
|
widget = _step2.value;
|
|
@@ -8699,9 +8700,9 @@ var ProviderBadge = function ProviderBadge(_ref) {
|
|
|
8699
8700
|
});
|
|
8700
8701
|
};
|
|
8701
8702
|
|
|
8702
|
-
function _createForOfIteratorHelper$
|
|
8703
|
-
function _unsupportedIterableToArray$
|
|
8704
|
-
function _arrayLikeToArray$
|
|
8703
|
+
function _createForOfIteratorHelper$7(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$7(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
8704
|
+
function _unsupportedIterableToArray$7(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$7(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$7(r, a) : void 0; } }
|
|
8705
|
+
function _arrayLikeToArray$7(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
8705
8706
|
var WidgetCardHeader = function WidgetCardHeader(_ref) {
|
|
8706
8707
|
var item = _ref.item,
|
|
8707
8708
|
widget = _ref.widget,
|
|
@@ -8745,7 +8746,7 @@ var WidgetCardHeader = function WidgetCardHeader(_ref) {
|
|
|
8745
8746
|
var el = headerRef.current;
|
|
8746
8747
|
if (!el) return;
|
|
8747
8748
|
var observer = new ResizeObserver(function (entries) {
|
|
8748
|
-
var _iterator = _createForOfIteratorHelper$
|
|
8749
|
+
var _iterator = _createForOfIteratorHelper$7(entries),
|
|
8749
8750
|
_step;
|
|
8750
8751
|
try {
|
|
8751
8752
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -13658,9 +13659,9 @@ var ExternalWidget = function ExternalWidget(_ref) {
|
|
|
13658
13659
|
var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
|
|
13659
13660
|
var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
|
|
13660
13661
|
|
|
13661
|
-
function _createForOfIteratorHelper$
|
|
13662
|
-
function _unsupportedIterableToArray$
|
|
13663
|
-
function _arrayLikeToArray$
|
|
13662
|
+
function _createForOfIteratorHelper$6(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$6(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
13663
|
+
function _unsupportedIterableToArray$6(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$6(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$6(r, a) : void 0; } }
|
|
13664
|
+
function _arrayLikeToArray$6(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
13664
13665
|
function ownKeys$j(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13665
13666
|
function _objectSpread$j(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$j(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$j(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13666
13667
|
var DraggableCellBody = function DraggableCellBody(_ref) {
|
|
@@ -14008,7 +14009,7 @@ var LayoutGridContainer = /*#__PURE__*/memo(function (_ref3) {
|
|
|
14008
14009
|
return selectable["delete"](cn);
|
|
14009
14010
|
});
|
|
14010
14011
|
var resolved = new Set();
|
|
14011
|
-
var _iterator = _createForOfIteratorHelper$
|
|
14012
|
+
var _iterator = _createForOfIteratorHelper$6(selectable),
|
|
14012
14013
|
_step;
|
|
14013
14014
|
try {
|
|
14014
14015
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -16114,9 +16115,9 @@ function isWidgetResolvable(componentKey) {
|
|
|
16114
16115
|
|
|
16115
16116
|
function ownKeys$i(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16116
16117
|
function _objectSpread$i(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$i(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$i(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16117
|
-
function _createForOfIteratorHelper$
|
|
16118
|
-
function _unsupportedIterableToArray$
|
|
16119
|
-
function _arrayLikeToArray$
|
|
16118
|
+
function _createForOfIteratorHelper$5(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$5(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
16119
|
+
function _unsupportedIterableToArray$5(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$5(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$5(r, a) : void 0; } }
|
|
16120
|
+
function _arrayLikeToArray$5(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
16120
16121
|
/**
|
|
16121
16122
|
* The model for all layout components used primarily in the renderLayout method
|
|
16122
16123
|
* @param {Object} layoutItem an object containing various attributes of the layout item
|
|
@@ -16128,7 +16129,7 @@ function _arrayLikeToArray$4(r, a) { (null == a || a > r.length) && (a = r.lengt
|
|
|
16128
16129
|
function sortObjectByKeys(obj) {
|
|
16129
16130
|
var sortedKeys = Object.keys(obj).sort();
|
|
16130
16131
|
var sortedObj = {};
|
|
16131
|
-
var _iterator = _createForOfIteratorHelper$
|
|
16132
|
+
var _iterator = _createForOfIteratorHelper$5(sortedKeys),
|
|
16132
16133
|
_step;
|
|
16133
16134
|
try {
|
|
16134
16135
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -19302,9 +19303,9 @@ var useDashboard = function useDashboard() {
|
|
|
19302
19303
|
});
|
|
19303
19304
|
};
|
|
19304
19305
|
|
|
19305
|
-
function _createForOfIteratorHelper$
|
|
19306
|
-
function _unsupportedIterableToArray$
|
|
19307
|
-
function _arrayLikeToArray$
|
|
19306
|
+
function _createForOfIteratorHelper$4(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$4(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
19307
|
+
function _unsupportedIterableToArray$4(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$4(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$4(r, a) : void 0; } }
|
|
19308
|
+
function _arrayLikeToArray$4(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
19308
19309
|
|
|
19309
19310
|
/**
|
|
19310
19311
|
* useWidgetProviders Hook
|
|
@@ -19355,7 +19356,7 @@ var useWidgetProviders = function useWidgetProviders() {
|
|
|
19355
19356
|
// 1. Widget-level: stored directly on the layout item by handleSelectProvider
|
|
19356
19357
|
// 2. Workspace-level: stored as workspace.selectedProviders[widgetId][providerType]
|
|
19357
19358
|
var providers = {};
|
|
19358
|
-
var _iterator = _createForOfIteratorHelper$
|
|
19359
|
+
var _iterator = _createForOfIteratorHelper$4(providerDeclarations),
|
|
19359
19360
|
_step;
|
|
19360
19361
|
try {
|
|
19361
19362
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -19482,15 +19483,8 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19482
19483
|
var mountedRef = useRef(true);
|
|
19483
19484
|
var dashApi = app === null || app === void 0 ? void 0 : app.dashApi;
|
|
19484
19485
|
|
|
19485
|
-
// Get the widget
|
|
19486
|
+
// Get the widget data and compute effective allowed tools
|
|
19486
19487
|
var widgetData = widgetContext === null || widgetContext === void 0 ? void 0 : widgetContext.widgetData;
|
|
19487
|
-
var allowedTools = function () {
|
|
19488
|
-
if (!(widgetData !== null && widgetData !== void 0 && widgetData.providers)) return null;
|
|
19489
|
-
var mcpProvider = widgetData.providers.find(function (p) {
|
|
19490
|
-
return p.type === providerType && p.providerClass === "mcp";
|
|
19491
|
-
});
|
|
19492
|
-
return (mcpProvider === null || mcpProvider === void 0 ? void 0 : mcpProvider.allowedTools) || null;
|
|
19493
|
-
}();
|
|
19494
19488
|
|
|
19495
19489
|
// Get the selected MCP provider for this widget
|
|
19496
19490
|
// First check widget-level selectedProviders (set by handleSelectProvider on the layout item),
|
|
@@ -19513,16 +19507,37 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19513
19507
|
// issue where providers don't flow through from AppWrapper)
|
|
19514
19508
|
var provider = selectedProviderName ? app === null || app === void 0 || (_app$providers = app.providers) === null || _app$providers === void 0 ? void 0 : _app$providers[selectedProviderName] : null;
|
|
19515
19509
|
|
|
19510
|
+
// Merge widget-declared allowedTools with user-configured allowedTools (intersection)
|
|
19511
|
+
var effectiveAllowedTools = function () {
|
|
19512
|
+
// Widget-declared (from .dash.js providers[].allowedTools)
|
|
19513
|
+
var widgetAllowed = function () {
|
|
19514
|
+
if (!(widgetData !== null && widgetData !== void 0 && widgetData.providers)) return null;
|
|
19515
|
+
var p = widgetData.providers.find(function (p) {
|
|
19516
|
+
return p.type === providerType && p.providerClass === "mcp";
|
|
19517
|
+
});
|
|
19518
|
+
return (p === null || p === void 0 ? void 0 : p.allowedTools) || null;
|
|
19519
|
+
}();
|
|
19520
|
+
// User-configured (from saved provider object)
|
|
19521
|
+
var userAllowed = (provider === null || provider === void 0 ? void 0 : provider.allowedTools) || null;
|
|
19522
|
+
// Intersection
|
|
19523
|
+
if (!widgetAllowed && !userAllowed) return null;
|
|
19524
|
+
if (!widgetAllowed) return userAllowed;
|
|
19525
|
+
if (!userAllowed) return widgetAllowed;
|
|
19526
|
+
return widgetAllowed.filter(function (t) {
|
|
19527
|
+
return userAllowed.includes(t);
|
|
19528
|
+
});
|
|
19529
|
+
}();
|
|
19530
|
+
|
|
19516
19531
|
/**
|
|
19517
19532
|
* Apply connection result to this hook instance's local state.
|
|
19518
|
-
* Filters tools by
|
|
19533
|
+
* Filters tools by effectiveAllowedTools if specified.
|
|
19519
19534
|
*/
|
|
19520
19535
|
var applyResult = useCallback(function (result) {
|
|
19521
19536
|
if (!mountedRef.current) return;
|
|
19522
19537
|
var serverTools = result.tools || [];
|
|
19523
|
-
if (
|
|
19538
|
+
if (effectiveAllowedTools) {
|
|
19524
19539
|
serverTools = serverTools.filter(function (tool) {
|
|
19525
|
-
return
|
|
19540
|
+
return effectiveAllowedTools.includes(tool.name);
|
|
19526
19541
|
});
|
|
19527
19542
|
}
|
|
19528
19543
|
setTools(serverTools);
|
|
@@ -19531,7 +19546,7 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19531
19546
|
setIsConnecting(false);
|
|
19532
19547
|
setStatus("connected");
|
|
19533
19548
|
connectedRef.current = true;
|
|
19534
|
-
}, [
|
|
19549
|
+
}, [effectiveAllowedTools]);
|
|
19535
19550
|
|
|
19536
19551
|
/**
|
|
19537
19552
|
* Connect to the MCP server.
|
|
@@ -19788,6 +19803,8 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19788
19803
|
var callTool = useCallback(/*#__PURE__*/function () {
|
|
19789
19804
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(toolName) {
|
|
19790
19805
|
var args,
|
|
19806
|
+
widgetRequiredTools,
|
|
19807
|
+
isRequired,
|
|
19791
19808
|
_args3 = arguments;
|
|
19792
19809
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
19793
19810
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -19799,17 +19816,26 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19799
19816
|
}
|
|
19800
19817
|
throw new Error("MCP server not connected");
|
|
19801
19818
|
case 1:
|
|
19802
|
-
if (!(
|
|
19819
|
+
if (!(effectiveAllowedTools && !effectiveAllowedTools.includes(toolName))) {
|
|
19803
19820
|
_context3.next = 2;
|
|
19804
19821
|
break;
|
|
19805
19822
|
}
|
|
19806
|
-
|
|
19823
|
+
// Provide enhanced error if the tool is in widget's requiredTools
|
|
19824
|
+
widgetRequiredTools = function () {
|
|
19825
|
+
if (!(widgetData !== null && widgetData !== void 0 && widgetData.providers)) return null;
|
|
19826
|
+
var p = widgetData.providers.find(function (p) {
|
|
19827
|
+
return p.type === providerType && p.providerClass === "mcp";
|
|
19828
|
+
});
|
|
19829
|
+
return (p === null || p === void 0 ? void 0 : p.requiredTools) || null;
|
|
19830
|
+
}();
|
|
19831
|
+
isRequired = widgetRequiredTools === null || widgetRequiredTools === void 0 ? void 0 : widgetRequiredTools.includes(toolName);
|
|
19832
|
+
throw new Error("Tool \"".concat(toolName, "\" is not allowed for this widget. Allowed tools: ").concat(effectiveAllowedTools.join(", ")).concat(isRequired ? ". Note: \"".concat(toolName, "\" is declared as a required tool by this widget \u2014 update the provider's allowed tools in Settings \u2192 Providers.") : ""));
|
|
19807
19833
|
case 2:
|
|
19808
19834
|
return _context3.abrupt("return", new Promise(function (resolve, reject) {
|
|
19809
19835
|
var timeout = setTimeout(function () {
|
|
19810
19836
|
reject(new Error("Tool call \"".concat(toolName, "\" timed out after 30s")));
|
|
19811
19837
|
}, 30000);
|
|
19812
|
-
dashApi.mcpCallTool(selectedProviderName, toolName, args,
|
|
19838
|
+
dashApi.mcpCallTool(selectedProviderName, toolName, args, effectiveAllowedTools, function (event, result) {
|
|
19813
19839
|
clearTimeout(timeout);
|
|
19814
19840
|
if (result.error) {
|
|
19815
19841
|
reject(new Error(result.message));
|
|
@@ -19830,7 +19856,7 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19830
19856
|
return function (_x) {
|
|
19831
19857
|
return _ref3.apply(this, arguments);
|
|
19832
19858
|
};
|
|
19833
|
-
}(), [dashApi, selectedProviderName,
|
|
19859
|
+
}(), [dashApi, selectedProviderName, effectiveAllowedTools, widgetData, providerType]);
|
|
19834
19860
|
|
|
19835
19861
|
/**
|
|
19836
19862
|
* Read a resource from the MCP server
|
|
@@ -22185,9 +22211,9 @@ var resolveIcon = function resolveIcon(iconName) {
|
|
|
22185
22211
|
return FALLBACK;
|
|
22186
22212
|
};
|
|
22187
22213
|
|
|
22188
|
-
function _createForOfIteratorHelper$
|
|
22189
|
-
function _unsupportedIterableToArray$
|
|
22190
|
-
function _arrayLikeToArray$
|
|
22214
|
+
function _createForOfIteratorHelper$3(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$3(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
22215
|
+
function _unsupportedIterableToArray$3(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$3(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$3(r, a) : void 0; } }
|
|
22216
|
+
function _arrayLikeToArray$3(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
22191
22217
|
/**
|
|
22192
22218
|
* Validation utilities for grid-first dashboard architecture
|
|
22193
22219
|
*
|
|
@@ -22426,7 +22452,7 @@ var validateCellMerge = function validateCellMerge(cellNumbers, grid) {
|
|
|
22426
22452
|
|
|
22427
22453
|
// Validate each cell
|
|
22428
22454
|
var cells = [];
|
|
22429
|
-
var _iterator = _createForOfIteratorHelper$
|
|
22455
|
+
var _iterator = _createForOfIteratorHelper$3(cellNumbers),
|
|
22430
22456
|
_step;
|
|
22431
22457
|
try {
|
|
22432
22458
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -25928,6 +25954,82 @@ var FoldersSection = function FoldersSection(_ref) {
|
|
|
25928
25954
|
});
|
|
25929
25955
|
};
|
|
25930
25956
|
|
|
25957
|
+
var ToolSelector = function ToolSelector(_ref) {
|
|
25958
|
+
var _ref$tools = _ref.tools,
|
|
25959
|
+
tools = _ref$tools === void 0 ? [] : _ref$tools,
|
|
25960
|
+
_ref$selectedTools = _ref.selectedTools,
|
|
25961
|
+
selectedTools = _ref$selectedTools === void 0 ? [] : _ref$selectedTools,
|
|
25962
|
+
onSelectionChange = _ref.onSelectionChange;
|
|
25963
|
+
if (!tools || tools.length === 0) return null;
|
|
25964
|
+
var allSelected = selectedTools.length === tools.length;
|
|
25965
|
+
var handleToggleAll = function handleToggleAll() {
|
|
25966
|
+
if (allSelected) {
|
|
25967
|
+
onSelectionChange([]);
|
|
25968
|
+
} else {
|
|
25969
|
+
onSelectionChange(tools.map(function (t) {
|
|
25970
|
+
return t.name;
|
|
25971
|
+
}));
|
|
25972
|
+
}
|
|
25973
|
+
};
|
|
25974
|
+
var handleToggle = function handleToggle(toolName) {
|
|
25975
|
+
if (selectedTools.includes(toolName)) {
|
|
25976
|
+
onSelectionChange(selectedTools.filter(function (t) {
|
|
25977
|
+
return t !== toolName;
|
|
25978
|
+
}));
|
|
25979
|
+
} else {
|
|
25980
|
+
onSelectionChange([].concat(_toConsumableArray(selectedTools), [toolName]));
|
|
25981
|
+
}
|
|
25982
|
+
};
|
|
25983
|
+
return /*#__PURE__*/jsxs("div", {
|
|
25984
|
+
className: "space-y-2",
|
|
25985
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
25986
|
+
className: "flex items-center justify-between",
|
|
25987
|
+
children: [/*#__PURE__*/jsx("p", {
|
|
25988
|
+
className: "text-xs font-semibold opacity-40 uppercase tracking-wider",
|
|
25989
|
+
children: "Allowed Tools"
|
|
25990
|
+
}), /*#__PURE__*/jsx("button", {
|
|
25991
|
+
onClick: handleToggleAll,
|
|
25992
|
+
className: "text-xs text-blue-400 hover:text-blue-300 transition-colors",
|
|
25993
|
+
children: allSelected ? "Deselect All" : "Select All"
|
|
25994
|
+
})]
|
|
25995
|
+
}), /*#__PURE__*/jsx("p", {
|
|
25996
|
+
className: "text-sm opacity-50",
|
|
25997
|
+
children: "Choose which tools this provider can expose to widgets"
|
|
25998
|
+
}), /*#__PURE__*/jsx("div", {
|
|
25999
|
+
className: "space-y-1 max-h-64 overflow-y-auto",
|
|
26000
|
+
children: tools.map(function (tool) {
|
|
26001
|
+
var checked = selectedTools.includes(tool.name);
|
|
26002
|
+
return /*#__PURE__*/jsxs("label", {
|
|
26003
|
+
className: "flex items-start gap-2 p-1.5 rounded hover:bg-white/5 cursor-pointer",
|
|
26004
|
+
children: [/*#__PURE__*/jsx("input", {
|
|
26005
|
+
type: "checkbox",
|
|
26006
|
+
checked: checked,
|
|
26007
|
+
onChange: function onChange() {
|
|
26008
|
+
return handleToggle(tool.name);
|
|
26009
|
+
},
|
|
26010
|
+
className: "mt-0.5 rounded border-white/20 bg-white/5 text-blue-500 focus:ring-blue-500/30"
|
|
26011
|
+
}), /*#__PURE__*/jsxs("div", {
|
|
26012
|
+
className: "flex-1 min-w-0",
|
|
26013
|
+
children: [/*#__PURE__*/jsx("span", {
|
|
26014
|
+
className: "text-xs font-mono",
|
|
26015
|
+
children: tool.name
|
|
26016
|
+
}), tool.description && /*#__PURE__*/jsxs("span", {
|
|
26017
|
+
className: "text-xs opacity-50 ml-2",
|
|
26018
|
+
children: ["\u2014 ", tool.description]
|
|
26019
|
+
})]
|
|
26020
|
+
})]
|
|
26021
|
+
}, tool.name);
|
|
26022
|
+
})
|
|
26023
|
+
}), /*#__PURE__*/jsxs("p", {
|
|
26024
|
+
className: "text-xs opacity-40",
|
|
26025
|
+
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
26026
|
+
icon: "shield-halved",
|
|
26027
|
+
className: "mr-1"
|
|
26028
|
+
}), selectedTools.length, " of ", tools.length, " tools selected"]
|
|
26029
|
+
})]
|
|
26030
|
+
});
|
|
26031
|
+
};
|
|
26032
|
+
|
|
25931
26033
|
function ownKeys$6(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25932
26034
|
function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25933
26035
|
var ProviderDetail = function ProviderDetail(_ref) {
|
|
@@ -25954,6 +26056,7 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
25954
26056
|
onStartEdit = _ref.onStartEdit,
|
|
25955
26057
|
onCreate = _ref.onCreate,
|
|
25956
26058
|
onDelete = _ref.onDelete,
|
|
26059
|
+
onSaveAllowedTools = _ref.onSaveAllowedTools,
|
|
25957
26060
|
_ref$catalogAuthComma = _ref.catalogAuthCommand,
|
|
25958
26061
|
catalogAuthCommand = _ref$catalogAuthComma === void 0 ? null : _ref$catalogAuthComma;
|
|
25959
26062
|
var appContext = useContext(AppContext);
|
|
@@ -25969,16 +26072,20 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
25969
26072
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
25970
26073
|
testResult = _useState4[0],
|
|
25971
26074
|
setTestResult = _useState4[1];
|
|
26075
|
+
var _useState5 = useState(null),
|
|
26076
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
26077
|
+
selectedTools = _useState6[0],
|
|
26078
|
+
setSelectedTools = _useState6[1];
|
|
25972
26079
|
|
|
25973
26080
|
// MCP auth state
|
|
25974
|
-
var
|
|
25975
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
25976
|
-
isAuthorizing = _useState6[0],
|
|
25977
|
-
setIsAuthorizing = _useState6[1];
|
|
25978
|
-
var _useState7 = useState(null),
|
|
26081
|
+
var _useState7 = useState(false),
|
|
25979
26082
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
25980
|
-
|
|
25981
|
-
|
|
26083
|
+
isAuthorizing = _useState8[0],
|
|
26084
|
+
setIsAuthorizing = _useState8[1];
|
|
26085
|
+
var _useState9 = useState(null),
|
|
26086
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
26087
|
+
authResult = _useState0[0],
|
|
26088
|
+
setAuthResult = _useState0[1];
|
|
25982
26089
|
|
|
25983
26090
|
// Resolve authCommand: provider.mcpConfig.authCommand > catalogAuthCommand prop
|
|
25984
26091
|
var resolvedAuthCommand = (provider === null || provider === void 0 || (_provider$mcpConfig = provider.mcpConfig) === null || _provider$mcpConfig === void 0 ? void 0 : _provider$mcpConfig.authCommand) || catalogAuthCommand || null;
|
|
@@ -25996,14 +26103,14 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
25996
26103
|
}, [isMcp, provider]);
|
|
25997
26104
|
|
|
25998
26105
|
// Dynamic credential fields for create mode
|
|
25999
|
-
var
|
|
26106
|
+
var _useState1 = useState(isCreating ? [{
|
|
26000
26107
|
id: "default_apiKey",
|
|
26001
26108
|
key: "apiKey",
|
|
26002
26109
|
secret: true
|
|
26003
26110
|
}] : []),
|
|
26004
|
-
|
|
26005
|
-
credentialFields =
|
|
26006
|
-
setCredentialFields =
|
|
26111
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
26112
|
+
credentialFields = _useState10[0],
|
|
26113
|
+
setCredentialFields = _useState10[1];
|
|
26007
26114
|
var fieldIdRef = useRef(0);
|
|
26008
26115
|
var handleFieldKeyChange = function handleFieldKeyChange(id, newKey) {
|
|
26009
26116
|
setCredentialFields(function (prev) {
|
|
@@ -26095,6 +26202,18 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26095
26202
|
message: "Connected! Found ".concat((result.tools || []).length, " tools.")
|
|
26096
26203
|
});
|
|
26097
26204
|
|
|
26205
|
+
// Pre-select: intersect with existing allowedTools, or select all
|
|
26206
|
+
var allToolNames = (result.tools || []).map(function (t) {
|
|
26207
|
+
return t.name;
|
|
26208
|
+
});
|
|
26209
|
+
if (provider !== null && provider !== void 0 && provider.allowedTools) {
|
|
26210
|
+
setSelectedTools(allToolNames.filter(function (t) {
|
|
26211
|
+
return provider.allowedTools.includes(t);
|
|
26212
|
+
}));
|
|
26213
|
+
} else {
|
|
26214
|
+
setSelectedTools(allToolNames);
|
|
26215
|
+
}
|
|
26216
|
+
|
|
26098
26217
|
// Stop after test
|
|
26099
26218
|
dashApi.mcpStopServer(providerName, function () {}, function () {});
|
|
26100
26219
|
setIsTesting(false);
|
|
@@ -26453,29 +26572,36 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26453
26572
|
children: authResult.message
|
|
26454
26573
|
})]
|
|
26455
26574
|
})
|
|
26456
|
-
}), testResult && /*#__PURE__*/
|
|
26575
|
+
}), testResult && /*#__PURE__*/jsx("div", {
|
|
26457
26576
|
className: "p-3 rounded-lg text-sm ".concat(testResult.success ? "bg-green-900/30 border border-green-700 text-green-300" : "bg-red-900/30 border border-red-700 text-red-300"),
|
|
26458
|
-
children:
|
|
26577
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
26459
26578
|
className: "flex items-center gap-2",
|
|
26460
26579
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
26461
26580
|
icon: testResult.success ? "circle-check" : "circle-exclamation"
|
|
26462
26581
|
}), /*#__PURE__*/jsx("span", {
|
|
26463
26582
|
children: testResult.message
|
|
26464
26583
|
})]
|
|
26465
|
-
})
|
|
26466
|
-
|
|
26467
|
-
|
|
26468
|
-
|
|
26469
|
-
|
|
26470
|
-
|
|
26471
|
-
|
|
26472
|
-
|
|
26473
|
-
|
|
26474
|
-
|
|
26475
|
-
|
|
26476
|
-
|
|
26477
|
-
|
|
26584
|
+
})
|
|
26585
|
+
}), (testResult === null || testResult === void 0 ? void 0 : testResult.success) && ((_testResult$tools = testResult.tools) === null || _testResult$tools === void 0 ? void 0 : _testResult$tools.length) > 0 && selectedTools && /*#__PURE__*/jsx(ToolSelector, {
|
|
26586
|
+
tools: testResult.tools,
|
|
26587
|
+
selectedTools: selectedTools,
|
|
26588
|
+
onSelectionChange: setSelectedTools
|
|
26589
|
+
}), !testResult && (provider === null || provider === void 0 ? void 0 : provider.allowedTools) && provider.allowedTools.length > 0 && /*#__PURE__*/jsxs("div", {
|
|
26590
|
+
className: "space-y-2",
|
|
26591
|
+
children: [/*#__PURE__*/jsx("p", {
|
|
26592
|
+
className: "text-xs font-semibold opacity-40 uppercase tracking-wider",
|
|
26593
|
+
children: "Allowed Tools"
|
|
26594
|
+
}), /*#__PURE__*/jsx("div", {
|
|
26595
|
+
className: "flex flex-wrap gap-1",
|
|
26596
|
+
children: provider.allowedTools.map(function (tool) {
|
|
26597
|
+
return /*#__PURE__*/jsx("span", {
|
|
26598
|
+
className: "text-xs font-mono px-2 py-0.5 rounded bg-white/5 opacity-70",
|
|
26599
|
+
children: tool
|
|
26600
|
+
}, tool);
|
|
26478
26601
|
})
|
|
26602
|
+
}), /*#__PURE__*/jsxs("p", {
|
|
26603
|
+
className: "text-xs opacity-40",
|
|
26604
|
+
children: [provider.allowedTools.length, " tool", provider.allowedTools.length !== 1 ? "s" : "", " allowed \u2014 test connection to modify"]
|
|
26479
26605
|
})]
|
|
26480
26606
|
})]
|
|
26481
26607
|
})]
|
|
@@ -26489,6 +26615,12 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26489
26615
|
title: isTesting ? "Testing..." : "Test Connection",
|
|
26490
26616
|
onClick: handleTestConnection,
|
|
26491
26617
|
size: "sm"
|
|
26618
|
+
}), isMcp && selectedTools && onSaveAllowedTools && /*#__PURE__*/jsx(Button, {
|
|
26619
|
+
title: "Update Allowed Tools",
|
|
26620
|
+
onClick: function onClick() {
|
|
26621
|
+
return onSaveAllowedTools(providerName, selectedTools);
|
|
26622
|
+
},
|
|
26623
|
+
size: "sm"
|
|
26492
26624
|
}), /*#__PURE__*/jsx(Button, {
|
|
26493
26625
|
title: "Edit",
|
|
26494
26626
|
onClick: function onClick() {
|
|
@@ -26602,7 +26734,9 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26602
26734
|
_ref2$initialHeaderRo = _ref2.initialHeaderRows,
|
|
26603
26735
|
initialHeaderRows = _ref2$initialHeaderRo === void 0 ? [] : _ref2$initialHeaderRo,
|
|
26604
26736
|
_ref2$initialCredenti2 = _ref2.initialCredentials,
|
|
26605
|
-
initialCredentials = _ref2$initialCredenti2 === void 0 ? {} : _ref2$initialCredenti2
|
|
26737
|
+
initialCredentials = _ref2$initialCredenti2 === void 0 ? {} : _ref2$initialCredenti2,
|
|
26738
|
+
_ref2$initialAllowedT = _ref2.initialAllowedTools,
|
|
26739
|
+
initialAllowedTools = _ref2$initialAllowedT === void 0 ? null : _ref2$initialAllowedT;
|
|
26606
26740
|
var appContext = useContext(AppContext);
|
|
26607
26741
|
var dashApi = appContext === null || appContext === void 0 ? void 0 : appContext.dashApi;
|
|
26608
26742
|
|
|
@@ -26658,19 +26792,25 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26658
26792
|
headerRows = _useState20[0],
|
|
26659
26793
|
setHeaderRows = _useState20[1];
|
|
26660
26794
|
|
|
26661
|
-
//
|
|
26662
|
-
var _useState21 = useState(
|
|
26795
|
+
// Tool selection state
|
|
26796
|
+
var _useState21 = useState(initialAllowedTools),
|
|
26663
26797
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
26664
|
-
|
|
26665
|
-
|
|
26666
|
-
|
|
26798
|
+
selectedTools = _useState22[0],
|
|
26799
|
+
setSelectedTools = _useState22[1];
|
|
26800
|
+
|
|
26801
|
+
// JSON editor state
|
|
26802
|
+
var _useState23 = useState("form"),
|
|
26667
26803
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
26668
|
-
|
|
26669
|
-
|
|
26670
|
-
var _useState25 = useState(
|
|
26804
|
+
viewMode = _useState24[0],
|
|
26805
|
+
setViewMode = _useState24[1]; // "form" | "json"
|
|
26806
|
+
var _useState25 = useState(""),
|
|
26671
26807
|
_useState26 = _slicedToArray(_useState25, 2),
|
|
26672
|
-
|
|
26673
|
-
|
|
26808
|
+
jsonText = _useState26[0],
|
|
26809
|
+
setJsonText = _useState26[1];
|
|
26810
|
+
var _useState27 = useState(null),
|
|
26811
|
+
_useState28 = _slicedToArray(_useState27, 2),
|
|
26812
|
+
jsonError = _useState28[0],
|
|
26813
|
+
setJsonError = _useState28[1];
|
|
26674
26814
|
|
|
26675
26815
|
// Clear credential data when transport changes (derived fields change entirely)
|
|
26676
26816
|
// Only in create mode — in edit mode the initial transport is set correctly
|
|
@@ -26839,6 +26979,18 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26839
26979
|
resources: result.resources || [],
|
|
26840
26980
|
message: "Connected! Found ".concat((result.tools || []).length, " tools.")
|
|
26841
26981
|
});
|
|
26982
|
+
|
|
26983
|
+
// Pre-select tools: intersect with existing allowedTools if editing, or select all
|
|
26984
|
+
var allToolNames = (result.tools || []).map(function (t) {
|
|
26985
|
+
return t.name;
|
|
26986
|
+
});
|
|
26987
|
+
if (initialAllowedTools) {
|
|
26988
|
+
setSelectedTools(allToolNames.filter(function (t) {
|
|
26989
|
+
return initialAllowedTools.includes(t);
|
|
26990
|
+
}));
|
|
26991
|
+
} else {
|
|
26992
|
+
setSelectedTools(allToolNames);
|
|
26993
|
+
}
|
|
26842
26994
|
dashApi.mcpStopServer(testName, function () {}, function () {});
|
|
26843
26995
|
setIsTesting(false);
|
|
26844
26996
|
}, function (event, err) {
|
|
@@ -26871,11 +27023,11 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26871
27023
|
url: result.url,
|
|
26872
27024
|
headerRows: result.headerRows
|
|
26873
27025
|
});
|
|
26874
|
-
onSave(name, initialProviderType, result.credentialData, config);
|
|
27026
|
+
onSave(name, initialProviderType, result.credentialData, config, selectedTools);
|
|
26875
27027
|
return;
|
|
26876
27028
|
}
|
|
26877
27029
|
if (!validateForm()) return;
|
|
26878
|
-
onSave(providerName.trim(), initialProviderType, credentialData, mcpConfig);
|
|
27030
|
+
onSave(providerName.trim(), initialProviderType, credentialData, mcpConfig, selectedTools);
|
|
26879
27031
|
};
|
|
26880
27032
|
return /*#__PURE__*/jsxs("div", {
|
|
26881
27033
|
className: "flex flex-col flex-1 min-h-0",
|
|
@@ -27259,30 +27411,20 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
27259
27411
|
}, field.key);
|
|
27260
27412
|
})]
|
|
27261
27413
|
})]
|
|
27262
|
-
}), testResult && /*#__PURE__*/
|
|
27414
|
+
}), testResult && /*#__PURE__*/jsx("div", {
|
|
27263
27415
|
className: "p-3 rounded-lg text-sm ".concat(testResult.success ? "bg-green-900/30 border border-green-700 text-green-300" : "bg-red-900/30 border border-red-700 text-red-300"),
|
|
27264
|
-
children:
|
|
27416
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
27265
27417
|
className: "flex items-center gap-2",
|
|
27266
27418
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
27267
27419
|
icon: testResult.success ? "circle-check" : "circle-exclamation"
|
|
27268
27420
|
}), /*#__PURE__*/jsx("span", {
|
|
27269
27421
|
children: testResult.message
|
|
27270
27422
|
})]
|
|
27271
|
-
})
|
|
27272
|
-
|
|
27273
|
-
|
|
27274
|
-
|
|
27275
|
-
|
|
27276
|
-
children: [/*#__PURE__*/jsx("span", {
|
|
27277
|
-
className: "font-mono",
|
|
27278
|
-
children: tool.name
|
|
27279
|
-
}), tool.description && /*#__PURE__*/jsxs("span", {
|
|
27280
|
-
className: "opacity-60 ml-2",
|
|
27281
|
-
children: ["- ", tool.description]
|
|
27282
|
-
})]
|
|
27283
|
-
}, tool.name);
|
|
27284
|
-
})
|
|
27285
|
-
})]
|
|
27423
|
+
})
|
|
27424
|
+
}), (testResult === null || testResult === void 0 ? void 0 : testResult.success) && ((_testResult$tools = testResult.tools) === null || _testResult$tools === void 0 ? void 0 : _testResult$tools.length) > 0 && selectedTools && /*#__PURE__*/jsx(ToolSelector, {
|
|
27425
|
+
tools: testResult.tools,
|
|
27426
|
+
selectedTools: selectedTools,
|
|
27427
|
+
onSelectionChange: setSelectedTools
|
|
27286
27428
|
})]
|
|
27287
27429
|
}), /*#__PURE__*/jsxs("div", {
|
|
27288
27430
|
className: "flex-shrink-0 flex flex-row justify-end gap-2 px-6 py-4 border-t border-white/10",
|
|
@@ -27380,30 +27522,34 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27380
27522
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
27381
27523
|
authResult = _useState18[0],
|
|
27382
27524
|
setAuthResult = _useState18[1];
|
|
27525
|
+
var _useState19 = useState(null),
|
|
27526
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
27527
|
+
selectedTools = _useState20[0],
|
|
27528
|
+
setSelectedTools = _useState20[1];
|
|
27383
27529
|
|
|
27384
27530
|
// Configuration form state
|
|
27385
|
-
var
|
|
27386
|
-
_useState20 = _slicedToArray(_useState19, 2),
|
|
27387
|
-
providerName = _useState20[0],
|
|
27388
|
-
setProviderName = _useState20[1];
|
|
27389
|
-
var _useState21 = useState({}),
|
|
27531
|
+
var _useState21 = useState(""),
|
|
27390
27532
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
27391
|
-
|
|
27392
|
-
|
|
27533
|
+
providerName = _useState22[0],
|
|
27534
|
+
setProviderName = _useState22[1];
|
|
27393
27535
|
var _useState23 = useState({}),
|
|
27394
27536
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
27395
|
-
|
|
27396
|
-
|
|
27537
|
+
credentialData = _useState24[0],
|
|
27538
|
+
setCredentialData = _useState24[1];
|
|
27539
|
+
var _useState25 = useState({}),
|
|
27540
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
27541
|
+
formErrors = _useState26[0],
|
|
27542
|
+
setFormErrors = _useState26[1];
|
|
27397
27543
|
|
|
27398
27544
|
// Advanced config row state
|
|
27399
|
-
var _useState25 = useState([]),
|
|
27400
|
-
_useState26 = _slicedToArray(_useState25, 2),
|
|
27401
|
-
envMappingRows = _useState26[0],
|
|
27402
|
-
setEnvMappingRows = _useState26[1];
|
|
27403
27545
|
var _useState27 = useState([]),
|
|
27404
27546
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
27405
|
-
|
|
27406
|
-
|
|
27547
|
+
envMappingRows = _useState28[0],
|
|
27548
|
+
setEnvMappingRows = _useState28[1];
|
|
27549
|
+
var _useState29 = useState([]),
|
|
27550
|
+
_useState30 = _slicedToArray(_useState29, 2),
|
|
27551
|
+
headerRows = _useState30[0],
|
|
27552
|
+
setHeaderRows = _useState30[1];
|
|
27407
27553
|
var rowIdRef = useRef(0);
|
|
27408
27554
|
var nextRowId = function nextRowId() {
|
|
27409
27555
|
return "cat_".concat(++rowIdRef.current);
|
|
@@ -27510,6 +27656,11 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27510
27656
|
message: "Connected! Found ".concat((result.tools || []).length, " tools.")
|
|
27511
27657
|
});
|
|
27512
27658
|
|
|
27659
|
+
// Pre-select all tools
|
|
27660
|
+
setSelectedTools((result.tools || []).map(function (t) {
|
|
27661
|
+
return t.name;
|
|
27662
|
+
}));
|
|
27663
|
+
|
|
27513
27664
|
// Stop the test server
|
|
27514
27665
|
dashApi.mcpStopServer(testName, function () {}, function () {});
|
|
27515
27666
|
setIsTesting(false);
|
|
@@ -27552,7 +27703,7 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27552
27703
|
// Handle save
|
|
27553
27704
|
var handleSaveProvider = function handleSaveProvider() {
|
|
27554
27705
|
if (!selectedServer || !validateForm()) return;
|
|
27555
|
-
onSave(providerName.trim(), selectedServer.id, credentialData, effectiveMcpConfig);
|
|
27706
|
+
onSave(providerName.trim(), selectedServer.id, credentialData, effectiveMcpConfig, selectedTools);
|
|
27556
27707
|
};
|
|
27557
27708
|
|
|
27558
27709
|
// Select custom server option
|
|
@@ -27573,6 +27724,7 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27573
27724
|
setIsCustom(false);
|
|
27574
27725
|
setTestResult(null);
|
|
27575
27726
|
setAuthResult(null);
|
|
27727
|
+
setSelectedTools(null);
|
|
27576
27728
|
setProviderName("");
|
|
27577
27729
|
setCredentialData({});
|
|
27578
27730
|
setFormErrors({});
|
|
@@ -27771,30 +27923,20 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27771
27923
|
children: authResult.message
|
|
27772
27924
|
})]
|
|
27773
27925
|
})
|
|
27774
|
-
}), testResult && /*#__PURE__*/
|
|
27926
|
+
}), testResult && /*#__PURE__*/jsx("div", {
|
|
27775
27927
|
className: "p-3 rounded-lg text-sm ".concat(testResult.success ? "bg-green-900/30 border border-green-700 text-green-300" : "bg-red-900/30 border border-red-700 text-red-300"),
|
|
27776
|
-
children:
|
|
27928
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
27777
27929
|
className: "flex items-center gap-2",
|
|
27778
27930
|
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
27779
27931
|
icon: testResult.success ? "circle-check" : "circle-exclamation"
|
|
27780
27932
|
}), /*#__PURE__*/jsx("span", {
|
|
27781
27933
|
children: testResult.message
|
|
27782
27934
|
})]
|
|
27783
|
-
})
|
|
27784
|
-
|
|
27785
|
-
|
|
27786
|
-
|
|
27787
|
-
|
|
27788
|
-
children: [/*#__PURE__*/jsx("span", {
|
|
27789
|
-
className: "font-mono",
|
|
27790
|
-
children: tool.name
|
|
27791
|
-
}), tool.description && /*#__PURE__*/jsxs("span", {
|
|
27792
|
-
className: "opacity-60 ml-2",
|
|
27793
|
-
children: ["- ", tool.description]
|
|
27794
|
-
})]
|
|
27795
|
-
}, tool.name);
|
|
27796
|
-
})
|
|
27797
|
-
})]
|
|
27935
|
+
})
|
|
27936
|
+
}), (testResult === null || testResult === void 0 ? void 0 : testResult.success) && ((_testResult$tools = testResult.tools) === null || _testResult$tools === void 0 ? void 0 : _testResult$tools.length) > 0 && selectedTools && /*#__PURE__*/jsx(ToolSelector, {
|
|
27937
|
+
tools: testResult.tools,
|
|
27938
|
+
selectedTools: selectedTools,
|
|
27939
|
+
onSelectionChange: setSelectedTools
|
|
27798
27940
|
})]
|
|
27799
27941
|
}), /*#__PURE__*/jsxs("div", {
|
|
27800
27942
|
className: "flex-shrink-0 flex flex-row justify-end gap-2 px-6 py-4 border-t border-white/10",
|
|
@@ -28065,12 +28207,14 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28065
28207
|
|
|
28066
28208
|
// Handle MCP provider creation from catalog picker
|
|
28067
28209
|
function handleMcpSave(providerName, providerType, mcpCredentials, mcpConfig) {
|
|
28210
|
+
var allowedTools = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
28068
28211
|
if (!dashApi || !appId) return;
|
|
28069
28212
|
dashApi.saveProvider(appId, providerName, {
|
|
28070
28213
|
providerType: providerType,
|
|
28071
28214
|
credentials: mcpCredentials,
|
|
28072
28215
|
providerClass: "mcp",
|
|
28073
|
-
mcpConfig: mcpConfig
|
|
28216
|
+
mcpConfig: mcpConfig,
|
|
28217
|
+
allowedTools: allowedTools
|
|
28074
28218
|
}, function () {
|
|
28075
28219
|
setIsAddingMcp(false);
|
|
28076
28220
|
refreshProviders && refreshProviders();
|
|
@@ -28083,6 +28227,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28083
28227
|
|
|
28084
28228
|
// Handle MCP provider editing via CustomMcpServerForm
|
|
28085
28229
|
function handleMcpEditSave(providerName, providerType, mcpCredentials, mcpConfig) {
|
|
28230
|
+
var allowedTools = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
28086
28231
|
if (!dashApi || !appId) return;
|
|
28087
28232
|
var originalName = selectedName;
|
|
28088
28233
|
|
|
@@ -28094,7 +28239,8 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28094
28239
|
providerType: providerType,
|
|
28095
28240
|
credentials: mcpCredentials,
|
|
28096
28241
|
providerClass: "mcp",
|
|
28097
|
-
mcpConfig: mcpConfig
|
|
28242
|
+
mcpConfig: mcpConfig,
|
|
28243
|
+
allowedTools: allowedTools
|
|
28098
28244
|
}, function () {
|
|
28099
28245
|
setSelectedName(providerName);
|
|
28100
28246
|
setProviderTab("mcp");
|
|
@@ -28106,6 +28252,24 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28106
28252
|
});
|
|
28107
28253
|
}
|
|
28108
28254
|
|
|
28255
|
+
// Handle saving just allowedTools for an existing MCP provider
|
|
28256
|
+
function handleSaveAllowedTools(providerName, allowedTools) {
|
|
28257
|
+
if (!dashApi || !appId) return;
|
|
28258
|
+
var existingProvider = providers[providerName];
|
|
28259
|
+
if (!existingProvider) return;
|
|
28260
|
+
dashApi.saveProvider(appId, providerName, {
|
|
28261
|
+
providerType: existingProvider.type,
|
|
28262
|
+
credentials: existingProvider.credentials,
|
|
28263
|
+
providerClass: "mcp",
|
|
28264
|
+
mcpConfig: existingProvider.mcpConfig,
|
|
28265
|
+
allowedTools: allowedTools
|
|
28266
|
+
}, function () {
|
|
28267
|
+
refreshProviders && refreshProviders();
|
|
28268
|
+
}, function (e, err) {
|
|
28269
|
+
return (void 0);
|
|
28270
|
+
});
|
|
28271
|
+
}
|
|
28272
|
+
|
|
28109
28273
|
// Respond to external create trigger from header
|
|
28110
28274
|
var prevCreateRequested = useRef(false);
|
|
28111
28275
|
useEffect(function () {
|
|
@@ -28232,6 +28396,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28232
28396
|
initialUrl: mc.url || "",
|
|
28233
28397
|
initialHeaderRows: headerTemplateToRows(mc.headerTemplate, nextRowId),
|
|
28234
28398
|
initialCredentials: selectedProvider.credentials || {},
|
|
28399
|
+
initialAllowedTools: selectedProvider.allowedTools || null,
|
|
28235
28400
|
onSave: handleMcpEditSave,
|
|
28236
28401
|
onBack: function onBack() {
|
|
28237
28402
|
return setIsEditingMcp(false);
|
|
@@ -28258,6 +28423,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28258
28423
|
onDelete: function onDelete(name) {
|
|
28259
28424
|
return setDeleteTarget(name);
|
|
28260
28425
|
},
|
|
28426
|
+
onSaveAllowedTools: handleSaveAllowedTools,
|
|
28261
28427
|
catalogAuthCommand: (catalogEntry === null || catalogEntry === void 0 ? void 0 : catalogEntry.authCommand) || null
|
|
28262
28428
|
});
|
|
28263
28429
|
}
|
|
@@ -28990,9 +29156,20 @@ var InstalledWidgetDetail = function InstalledWidgetDetail(_ref) {
|
|
|
28990
29156
|
}), /*#__PURE__*/jsx("div", {
|
|
28991
29157
|
className: "flex flex-wrap gap-1.5",
|
|
28992
29158
|
children: widget.providers.map(function (p, i) {
|
|
28993
|
-
return /*#__PURE__*/jsxs("
|
|
28994
|
-
className: "
|
|
28995
|
-
children: [
|
|
29159
|
+
return /*#__PURE__*/jsxs("div", {
|
|
29160
|
+
className: "flex flex-col gap-1",
|
|
29161
|
+
children: [/*#__PURE__*/jsxs("span", {
|
|
29162
|
+
className: "text-xs px-2 py-0.5 rounded ".concat(currentTheme["bg-primary-medium"] || "bg-white/10", " opacity-70 w-fit"),
|
|
29163
|
+
children: [p.type, p.providerClass === "mcp" ? " (MCP)" : ""]
|
|
29164
|
+
}), p.requiredTools && p.requiredTools.length > 0 && /*#__PURE__*/jsx("div", {
|
|
29165
|
+
className: "flex flex-wrap gap-1 ml-2",
|
|
29166
|
+
children: p.requiredTools.map(function (tool) {
|
|
29167
|
+
return /*#__PURE__*/jsx("span", {
|
|
29168
|
+
className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-blue-900/30 text-blue-400",
|
|
29169
|
+
children: tool
|
|
29170
|
+
}, tool);
|
|
29171
|
+
})
|
|
29172
|
+
})]
|
|
28996
29173
|
}, i);
|
|
28997
29174
|
})
|
|
28998
29175
|
})]
|
|
@@ -29177,14 +29354,33 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
|
|
|
29177
29354
|
}), w.description && /*#__PURE__*/jsx("div", {
|
|
29178
29355
|
className: "text-xs opacity-50 mt-0.5",
|
|
29179
29356
|
children: w.description
|
|
29180
|
-
}), w.providers && w.providers.length > 0 && /*#__PURE__*/
|
|
29181
|
-
className: "
|
|
29182
|
-
children:
|
|
29183
|
-
|
|
29184
|
-
|
|
29185
|
-
|
|
29186
|
-
|
|
29187
|
-
|
|
29357
|
+
}), w.providers && w.providers.length > 0 && /*#__PURE__*/jsxs("div", {
|
|
29358
|
+
className: "space-y-1 mt-1",
|
|
29359
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
29360
|
+
className: "flex gap-1 flex-wrap",
|
|
29361
|
+
children: w.providers.map(function (p, pidx) {
|
|
29362
|
+
return /*#__PURE__*/jsxs("span", {
|
|
29363
|
+
className: "text-xs px-1.5 py-0.5 rounded bg-blue-900/30 text-blue-400",
|
|
29364
|
+
children: [p.type, p.required ? " *" : ""]
|
|
29365
|
+
}, pidx);
|
|
29366
|
+
})
|
|
29367
|
+
}), w.providers.some(function (p) {
|
|
29368
|
+
var _p$requiredTools;
|
|
29369
|
+
return ((_p$requiredTools = p.requiredTools) === null || _p$requiredTools === void 0 ? void 0 : _p$requiredTools.length) > 0;
|
|
29370
|
+
}) && /*#__PURE__*/jsx("div", {
|
|
29371
|
+
className: "flex flex-wrap gap-1 ml-1",
|
|
29372
|
+
children: w.providers.filter(function (p) {
|
|
29373
|
+
var _p$requiredTools2;
|
|
29374
|
+
return ((_p$requiredTools2 = p.requiredTools) === null || _p$requiredTools2 === void 0 ? void 0 : _p$requiredTools2.length) > 0;
|
|
29375
|
+
}).flatMap(function (p) {
|
|
29376
|
+
return p.requiredTools.map(function (tool) {
|
|
29377
|
+
return /*#__PURE__*/jsx("span", {
|
|
29378
|
+
className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 opacity-60",
|
|
29379
|
+
children: tool
|
|
29380
|
+
}, "".concat(p.type, "-").concat(tool));
|
|
29381
|
+
});
|
|
29382
|
+
})
|
|
29383
|
+
})]
|
|
29188
29384
|
})]
|
|
29189
29385
|
}, idx);
|
|
29190
29386
|
})
|
|
@@ -29224,9 +29420,9 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
|
|
|
29224
29420
|
});
|
|
29225
29421
|
};
|
|
29226
29422
|
|
|
29227
|
-
function _createForOfIteratorHelper$
|
|
29228
|
-
function _unsupportedIterableToArray$
|
|
29229
|
-
function _arrayLikeToArray$
|
|
29423
|
+
function _createForOfIteratorHelper$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$2(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
29424
|
+
function _unsupportedIterableToArray$2(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$2(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$2(r, a) : void 0; } }
|
|
29425
|
+
function _arrayLikeToArray$2(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
29230
29426
|
|
|
29231
29427
|
/**
|
|
29232
29428
|
* useRegistrySearch — shared hook for browsing and installing registry packages.
|
|
@@ -29301,11 +29497,11 @@ var useRegistrySearch = function useRegistrySearch() {
|
|
|
29301
29497
|
|
|
29302
29498
|
// Flatten packages into widget entries
|
|
29303
29499
|
widgets = [];
|
|
29304
|
-
_iterator = _createForOfIteratorHelper$
|
|
29500
|
+
_iterator = _createForOfIteratorHelper$2(pkgs);
|
|
29305
29501
|
try {
|
|
29306
29502
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
29307
29503
|
pkg = _step.value;
|
|
29308
|
-
_iterator2 = _createForOfIteratorHelper$
|
|
29504
|
+
_iterator2 = _createForOfIteratorHelper$2(pkg.widgets || []);
|
|
29309
29505
|
try {
|
|
29310
29506
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
29311
29507
|
widget = _step2.value;
|
|
@@ -29432,10 +29628,15 @@ var useRegistrySearch = function useRegistrySearch() {
|
|
|
29432
29628
|
};
|
|
29433
29629
|
};
|
|
29434
29630
|
|
|
29631
|
+
function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
29632
|
+
function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
|
|
29633
|
+
function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
29435
29634
|
var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
|
|
29436
29635
|
var onBack = _ref.onBack;
|
|
29437
29636
|
var _useContext = useContext(ThemeContext),
|
|
29438
29637
|
currentTheme = _useContext.currentTheme;
|
|
29638
|
+
var appContext = useContext(AppContext);
|
|
29639
|
+
var providers = (appContext === null || appContext === void 0 ? void 0 : appContext.providers) || {};
|
|
29439
29640
|
var panelStyles = getStylesForItem(themeObjects.PANEL, currentTheme, {
|
|
29440
29641
|
grow: false
|
|
29441
29642
|
});
|
|
@@ -29454,10 +29655,90 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
|
|
|
29454
29655
|
_useState2 = _slicedToArray(_useState, 2),
|
|
29455
29656
|
selectedPackageName = _useState2[0],
|
|
29456
29657
|
setSelectedPackageName = _useState2[1];
|
|
29658
|
+
var _useState3 = useState(null),
|
|
29659
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
29660
|
+
toolConflictWarning = _useState4[0],
|
|
29661
|
+
setToolConflictWarning = _useState4[1];
|
|
29457
29662
|
var selectedWidget = selectedPackageName ? flatWidgets.find(function (w) {
|
|
29458
29663
|
return w.packageName === selectedPackageName;
|
|
29459
29664
|
}) : null;
|
|
29665
|
+
|
|
29666
|
+
// Check if widget's requiredTools conflict with user's provider allowedTools
|
|
29667
|
+
var checkToolConflicts = function checkToolConflicts(widget) {
|
|
29668
|
+
var conflicts = [];
|
|
29669
|
+
var packageWidgets = widget.packageWidgets || [];
|
|
29670
|
+
var _iterator = _createForOfIteratorHelper$1(packageWidgets),
|
|
29671
|
+
_step;
|
|
29672
|
+
try {
|
|
29673
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
29674
|
+
var w = _step.value;
|
|
29675
|
+
var _iterator2 = _createForOfIteratorHelper$1(w.providers || []),
|
|
29676
|
+
_step2;
|
|
29677
|
+
try {
|
|
29678
|
+
var _loop = function _loop() {
|
|
29679
|
+
var _p$requiredTools;
|
|
29680
|
+
var p = _step2.value;
|
|
29681
|
+
if (!((_p$requiredTools = p.requiredTools) !== null && _p$requiredTools !== void 0 && _p$requiredTools.length) || p.providerClass !== "mcp") return 1; // continue
|
|
29682
|
+
// Find matching user provider
|
|
29683
|
+
var matchingProviders = Object.entries(providers).filter(function (_ref2) {
|
|
29684
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
29685
|
+
prov = _ref3[1];
|
|
29686
|
+
return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
|
|
29687
|
+
});
|
|
29688
|
+
var _iterator3 = _createForOfIteratorHelper$1(matchingProviders),
|
|
29689
|
+
_step3;
|
|
29690
|
+
try {
|
|
29691
|
+
var _loop2 = function _loop2() {
|
|
29692
|
+
var _step3$value = _slicedToArray(_step3.value, 2),
|
|
29693
|
+
provName = _step3$value[0],
|
|
29694
|
+
prov = _step3$value[1];
|
|
29695
|
+
var blocked = p.requiredTools.filter(function (t) {
|
|
29696
|
+
return !prov.allowedTools.includes(t);
|
|
29697
|
+
});
|
|
29698
|
+
if (blocked.length > 0) {
|
|
29699
|
+
conflicts.push({
|
|
29700
|
+
widgetName: w.displayName || w.name,
|
|
29701
|
+
providerName: provName,
|
|
29702
|
+
blockedTools: blocked
|
|
29703
|
+
});
|
|
29704
|
+
}
|
|
29705
|
+
};
|
|
29706
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
29707
|
+
_loop2();
|
|
29708
|
+
}
|
|
29709
|
+
} catch (err) {
|
|
29710
|
+
_iterator3.e(err);
|
|
29711
|
+
} finally {
|
|
29712
|
+
_iterator3.f();
|
|
29713
|
+
}
|
|
29714
|
+
};
|
|
29715
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
29716
|
+
if (_loop()) continue;
|
|
29717
|
+
}
|
|
29718
|
+
} catch (err) {
|
|
29719
|
+
_iterator2.e(err);
|
|
29720
|
+
} finally {
|
|
29721
|
+
_iterator2.f();
|
|
29722
|
+
}
|
|
29723
|
+
}
|
|
29724
|
+
} catch (err) {
|
|
29725
|
+
_iterator.e(err);
|
|
29726
|
+
} finally {
|
|
29727
|
+
_iterator.f();
|
|
29728
|
+
}
|
|
29729
|
+
return conflicts;
|
|
29730
|
+
};
|
|
29460
29731
|
var handleInstall = function handleInstall() {
|
|
29732
|
+
if (!selectedWidget) return;
|
|
29733
|
+
var conflicts = checkToolConflicts(selectedWidget);
|
|
29734
|
+
if (conflicts.length > 0) {
|
|
29735
|
+
setToolConflictWarning(conflicts);
|
|
29736
|
+
} else {
|
|
29737
|
+
installPackage(selectedWidget);
|
|
29738
|
+
}
|
|
29739
|
+
};
|
|
29740
|
+
var handleConfirmInstall = function handleConfirmInstall() {
|
|
29741
|
+
setToolConflictWarning(null);
|
|
29461
29742
|
if (selectedWidget) {
|
|
29462
29743
|
installPackage(selectedWidget);
|
|
29463
29744
|
}
|
|
@@ -29577,6 +29858,20 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
|
|
|
29577
29858
|
}), !isLoading && !error && packages.length > 0 && /*#__PURE__*/jsxs("div", {
|
|
29578
29859
|
className: "flex-shrink-0 px-4 py-2 text-[10px] opacity-40 border-t border-white/10",
|
|
29579
29860
|
children: [packages.length, " package", packages.length !== 1 ? "s" : ""]
|
|
29861
|
+
}), /*#__PURE__*/jsx(ConfirmationModal, {
|
|
29862
|
+
isOpen: !!toolConflictWarning,
|
|
29863
|
+
setIsOpen: function setIsOpen() {
|
|
29864
|
+
return setToolConflictWarning(null);
|
|
29865
|
+
},
|
|
29866
|
+
title: "Tool Access Conflict",
|
|
29867
|
+
message: toolConflictWarning ? "This widget requires tools that are blocked by your provider settings:\n\n".concat(toolConflictWarning.map(function (c) {
|
|
29868
|
+
return "\u2022 ".concat(c.widgetName, " needs ").concat(c.blockedTools.join(", "), " (blocked by \"").concat(c.providerName, "\")");
|
|
29869
|
+
}).join("\n"), "\n\nYou can update allowed tools in Settings \u2192 Providers after installing.") : "",
|
|
29870
|
+
confirmLabel: "Install Anyway",
|
|
29871
|
+
onConfirm: handleConfirmInstall,
|
|
29872
|
+
onCancel: function onCancel() {
|
|
29873
|
+
return setToolConflictWarning(null);
|
|
29874
|
+
}
|
|
29580
29875
|
})]
|
|
29581
29876
|
});
|
|
29582
29877
|
};
|