@trops/dash-core 0.1.61 → 0.1.62
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 +20 -0
- 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.js
CHANGED
|
@@ -1180,12 +1180,13 @@ var ElectronDashboardApi = /*#__PURE__*/function () {
|
|
|
1180
1180
|
if (this.api !== null) {
|
|
1181
1181
|
try {
|
|
1182
1182
|
// Handle the promise returned by the IPC call
|
|
1183
|
-
// Note: providerData should contain providerType, credentials, and optionally providerClass/mcpConfig
|
|
1183
|
+
// Note: providerData should contain providerType, credentials, and optionally providerClass/mcpConfig/allowedTools
|
|
1184
1184
|
var providerType = providerData.providerType,
|
|
1185
1185
|
credentials = providerData.credentials,
|
|
1186
1186
|
providerClass = providerData.providerClass,
|
|
1187
|
-
mcpConfig = providerData.mcpConfig
|
|
1188
|
-
|
|
1187
|
+
mcpConfig = providerData.mcpConfig,
|
|
1188
|
+
allowedTools = providerData.allowedTools;
|
|
1189
|
+
this.api.providers.saveProvider(appId, providerName, providerType, credentials, providerClass, mcpConfig, allowedTools).then(function (result) {
|
|
1189
1190
|
onSuccess(_this12.events.PROVIDER_SAVE_COMPLETE, result);
|
|
1190
1191
|
})["catch"](function (error) {
|
|
1191
1192
|
onError(_this12.events.PROVIDER_SAVE_ERROR, error);
|
|
@@ -2708,9 +2709,9 @@ var LayoutContainer = function LayoutContainer(_ref) {
|
|
|
2708
2709
|
|
|
2709
2710
|
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; }
|
|
2710
2711
|
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; }
|
|
2711
|
-
function _createForOfIteratorHelper$
|
|
2712
|
-
function _unsupportedIterableToArray$
|
|
2713
|
-
function _arrayLikeToArray$
|
|
2712
|
+
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; } } }; }
|
|
2713
|
+
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; } }
|
|
2714
|
+
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; }
|
|
2714
2715
|
/**
|
|
2715
2716
|
* Layout template definitions for the dashboard template picker.
|
|
2716
2717
|
*
|
|
@@ -2946,7 +2947,7 @@ function createLayoutFromTemplate(template) {
|
|
|
2946
2947
|
cols: template.cols,
|
|
2947
2948
|
gap: "gap-2"
|
|
2948
2949
|
};
|
|
2949
|
-
var _iterator = _createForOfIteratorHelper$
|
|
2950
|
+
var _iterator = _createForOfIteratorHelper$a(template.cells),
|
|
2950
2951
|
_step;
|
|
2951
2952
|
try {
|
|
2952
2953
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -4458,9 +4459,9 @@ var PanelEditItem = function PanelEditItem(_ref) {
|
|
|
4458
4459
|
};
|
|
4459
4460
|
|
|
4460
4461
|
var _excluded$5 = ["rows", "cols"];
|
|
4461
|
-
function _createForOfIteratorHelper$
|
|
4462
|
-
function _unsupportedIterableToArray$
|
|
4463
|
-
function _arrayLikeToArray$
|
|
4462
|
+
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; } } }; }
|
|
4463
|
+
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; } }
|
|
4464
|
+
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; }
|
|
4464
4465
|
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; }
|
|
4465
4466
|
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; }
|
|
4466
4467
|
var defaultGrid = {
|
|
@@ -4613,7 +4614,7 @@ function GridEditor(_ref) {
|
|
|
4613
4614
|
function sortObjectByKeys(obj) {
|
|
4614
4615
|
var sortedKeys = Object.keys(obj).sort();
|
|
4615
4616
|
var sortedObj = {};
|
|
4616
|
-
var _iterator = _createForOfIteratorHelper$
|
|
4617
|
+
var _iterator = _createForOfIteratorHelper$9(sortedKeys),
|
|
4617
4618
|
_step;
|
|
4618
4619
|
try {
|
|
4619
4620
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -7337,9 +7338,9 @@ var ProviderForm = function ProviderForm(_ref) {
|
|
|
7337
7338
|
});
|
|
7338
7339
|
};
|
|
7339
7340
|
|
|
7340
|
-
function _createForOfIteratorHelper$
|
|
7341
|
-
function _unsupportedIterableToArray$
|
|
7342
|
-
function _arrayLikeToArray$
|
|
7341
|
+
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; } } }; }
|
|
7342
|
+
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; } }
|
|
7343
|
+
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; }
|
|
7343
7344
|
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; }
|
|
7344
7345
|
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; }
|
|
7345
7346
|
var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
|
|
@@ -7548,11 +7549,11 @@ var EnhancedWidgetDropdown = function EnhancedWidgetDropdown(_ref) {
|
|
|
7548
7549
|
|
|
7549
7550
|
// Flatten all widgets from all packages for the widget list
|
|
7550
7551
|
flatWidgets = [];
|
|
7551
|
-
_iterator = _createForOfIteratorHelper$
|
|
7552
|
+
_iterator = _createForOfIteratorHelper$8(result.packages || []);
|
|
7552
7553
|
try {
|
|
7553
7554
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
7554
7555
|
pkg = _step.value;
|
|
7555
|
-
_iterator2 = _createForOfIteratorHelper$
|
|
7556
|
+
_iterator2 = _createForOfIteratorHelper$8(pkg.widgets || []);
|
|
7556
7557
|
try {
|
|
7557
7558
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
7558
7559
|
widget = _step2.value;
|
|
@@ -8718,9 +8719,9 @@ var ProviderBadge = function ProviderBadge(_ref) {
|
|
|
8718
8719
|
});
|
|
8719
8720
|
};
|
|
8720
8721
|
|
|
8721
|
-
function _createForOfIteratorHelper$
|
|
8722
|
-
function _unsupportedIterableToArray$
|
|
8723
|
-
function _arrayLikeToArray$
|
|
8722
|
+
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; } } }; }
|
|
8723
|
+
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; } }
|
|
8724
|
+
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; }
|
|
8724
8725
|
var WidgetCardHeader = function WidgetCardHeader(_ref) {
|
|
8725
8726
|
var item = _ref.item,
|
|
8726
8727
|
widget = _ref.widget,
|
|
@@ -8764,7 +8765,7 @@ var WidgetCardHeader = function WidgetCardHeader(_ref) {
|
|
|
8764
8765
|
var el = headerRef.current;
|
|
8765
8766
|
if (!el) return;
|
|
8766
8767
|
var observer = new ResizeObserver(function (entries) {
|
|
8767
|
-
var _iterator = _createForOfIteratorHelper$
|
|
8768
|
+
var _iterator = _createForOfIteratorHelper$7(entries),
|
|
8768
8769
|
_step;
|
|
8769
8770
|
try {
|
|
8770
8771
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -13677,9 +13678,9 @@ var ExternalWidget = function ExternalWidget(_ref) {
|
|
|
13677
13678
|
var GRID_CELL_WIDGET_TYPE = "grid-cell-widget";
|
|
13678
13679
|
var SIDEBAR_WIDGET_TYPE = "sidebar-widget";
|
|
13679
13680
|
|
|
13680
|
-
function _createForOfIteratorHelper$
|
|
13681
|
-
function _unsupportedIterableToArray$
|
|
13682
|
-
function _arrayLikeToArray$
|
|
13681
|
+
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; } } }; }
|
|
13682
|
+
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; } }
|
|
13683
|
+
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; }
|
|
13683
13684
|
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; }
|
|
13684
13685
|
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; }
|
|
13685
13686
|
var DraggableCellBody = function DraggableCellBody(_ref) {
|
|
@@ -14027,7 +14028,7 @@ var LayoutGridContainer = /*#__PURE__*/React.memo(function (_ref3) {
|
|
|
14027
14028
|
return selectable["delete"](cn);
|
|
14028
14029
|
});
|
|
14029
14030
|
var resolved = new Set();
|
|
14030
|
-
var _iterator = _createForOfIteratorHelper$
|
|
14031
|
+
var _iterator = _createForOfIteratorHelper$6(selectable),
|
|
14031
14032
|
_step;
|
|
14032
14033
|
try {
|
|
14033
14034
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -16133,9 +16134,9 @@ function isWidgetResolvable(componentKey) {
|
|
|
16133
16134
|
|
|
16134
16135
|
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; }
|
|
16135
16136
|
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; }
|
|
16136
|
-
function _createForOfIteratorHelper$
|
|
16137
|
-
function _unsupportedIterableToArray$
|
|
16138
|
-
function _arrayLikeToArray$
|
|
16137
|
+
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; } } }; }
|
|
16138
|
+
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; } }
|
|
16139
|
+
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; }
|
|
16139
16140
|
/**
|
|
16140
16141
|
* The model for all layout components used primarily in the renderLayout method
|
|
16141
16142
|
* @param {Object} layoutItem an object containing various attributes of the layout item
|
|
@@ -16147,7 +16148,7 @@ function _arrayLikeToArray$4(r, a) { (null == a || a > r.length) && (a = r.lengt
|
|
|
16147
16148
|
function sortObjectByKeys(obj) {
|
|
16148
16149
|
var sortedKeys = Object.keys(obj).sort();
|
|
16149
16150
|
var sortedObj = {};
|
|
16150
|
-
var _iterator = _createForOfIteratorHelper$
|
|
16151
|
+
var _iterator = _createForOfIteratorHelper$5(sortedKeys),
|
|
16151
16152
|
_step;
|
|
16152
16153
|
try {
|
|
16153
16154
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -19321,9 +19322,9 @@ var useDashboard = function useDashboard() {
|
|
|
19321
19322
|
});
|
|
19322
19323
|
};
|
|
19323
19324
|
|
|
19324
|
-
function _createForOfIteratorHelper$
|
|
19325
|
-
function _unsupportedIterableToArray$
|
|
19326
|
-
function _arrayLikeToArray$
|
|
19325
|
+
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; } } }; }
|
|
19326
|
+
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; } }
|
|
19327
|
+
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; }
|
|
19327
19328
|
|
|
19328
19329
|
/**
|
|
19329
19330
|
* useWidgetProviders Hook
|
|
@@ -19374,7 +19375,7 @@ var useWidgetProviders = function useWidgetProviders() {
|
|
|
19374
19375
|
// 1. Widget-level: stored directly on the layout item by handleSelectProvider
|
|
19375
19376
|
// 2. Workspace-level: stored as workspace.selectedProviders[widgetId][providerType]
|
|
19376
19377
|
var providers = {};
|
|
19377
|
-
var _iterator = _createForOfIteratorHelper$
|
|
19378
|
+
var _iterator = _createForOfIteratorHelper$4(providerDeclarations),
|
|
19378
19379
|
_step;
|
|
19379
19380
|
try {
|
|
19380
19381
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -19501,15 +19502,8 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19501
19502
|
var mountedRef = React.useRef(true);
|
|
19502
19503
|
var dashApi = app === null || app === void 0 ? void 0 : app.dashApi;
|
|
19503
19504
|
|
|
19504
|
-
// Get the widget
|
|
19505
|
+
// Get the widget data and compute effective allowed tools
|
|
19505
19506
|
var widgetData = widgetContext === null || widgetContext === void 0 ? void 0 : widgetContext.widgetData;
|
|
19506
|
-
var allowedTools = function () {
|
|
19507
|
-
if (!(widgetData !== null && widgetData !== void 0 && widgetData.providers)) return null;
|
|
19508
|
-
var mcpProvider = widgetData.providers.find(function (p) {
|
|
19509
|
-
return p.type === providerType && p.providerClass === "mcp";
|
|
19510
|
-
});
|
|
19511
|
-
return (mcpProvider === null || mcpProvider === void 0 ? void 0 : mcpProvider.allowedTools) || null;
|
|
19512
|
-
}();
|
|
19513
19507
|
|
|
19514
19508
|
// Get the selected MCP provider for this widget
|
|
19515
19509
|
// First check widget-level selectedProviders (set by handleSelectProvider on the layout item),
|
|
@@ -19532,16 +19526,37 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19532
19526
|
// issue where providers don't flow through from AppWrapper)
|
|
19533
19527
|
var provider = selectedProviderName ? app === null || app === void 0 || (_app$providers = app.providers) === null || _app$providers === void 0 ? void 0 : _app$providers[selectedProviderName] : null;
|
|
19534
19528
|
|
|
19529
|
+
// Merge widget-declared allowedTools with user-configured allowedTools (intersection)
|
|
19530
|
+
var effectiveAllowedTools = function () {
|
|
19531
|
+
// Widget-declared (from .dash.js providers[].allowedTools)
|
|
19532
|
+
var widgetAllowed = function () {
|
|
19533
|
+
if (!(widgetData !== null && widgetData !== void 0 && widgetData.providers)) return null;
|
|
19534
|
+
var p = widgetData.providers.find(function (p) {
|
|
19535
|
+
return p.type === providerType && p.providerClass === "mcp";
|
|
19536
|
+
});
|
|
19537
|
+
return (p === null || p === void 0 ? void 0 : p.allowedTools) || null;
|
|
19538
|
+
}();
|
|
19539
|
+
// User-configured (from saved provider object)
|
|
19540
|
+
var userAllowed = (provider === null || provider === void 0 ? void 0 : provider.allowedTools) || null;
|
|
19541
|
+
// Intersection
|
|
19542
|
+
if (!widgetAllowed && !userAllowed) return null;
|
|
19543
|
+
if (!widgetAllowed) return userAllowed;
|
|
19544
|
+
if (!userAllowed) return widgetAllowed;
|
|
19545
|
+
return widgetAllowed.filter(function (t) {
|
|
19546
|
+
return userAllowed.includes(t);
|
|
19547
|
+
});
|
|
19548
|
+
}();
|
|
19549
|
+
|
|
19535
19550
|
/**
|
|
19536
19551
|
* Apply connection result to this hook instance's local state.
|
|
19537
|
-
* Filters tools by
|
|
19552
|
+
* Filters tools by effectiveAllowedTools if specified.
|
|
19538
19553
|
*/
|
|
19539
19554
|
var applyResult = React.useCallback(function (result) {
|
|
19540
19555
|
if (!mountedRef.current) return;
|
|
19541
19556
|
var serverTools = result.tools || [];
|
|
19542
|
-
if (
|
|
19557
|
+
if (effectiveAllowedTools) {
|
|
19543
19558
|
serverTools = serverTools.filter(function (tool) {
|
|
19544
|
-
return
|
|
19559
|
+
return effectiveAllowedTools.includes(tool.name);
|
|
19545
19560
|
});
|
|
19546
19561
|
}
|
|
19547
19562
|
setTools(serverTools);
|
|
@@ -19550,7 +19565,7 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19550
19565
|
setIsConnecting(false);
|
|
19551
19566
|
setStatus("connected");
|
|
19552
19567
|
connectedRef.current = true;
|
|
19553
|
-
}, [
|
|
19568
|
+
}, [effectiveAllowedTools]);
|
|
19554
19569
|
|
|
19555
19570
|
/**
|
|
19556
19571
|
* Connect to the MCP server.
|
|
@@ -19807,6 +19822,8 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19807
19822
|
var callTool = React.useCallback(/*#__PURE__*/function () {
|
|
19808
19823
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(toolName) {
|
|
19809
19824
|
var args,
|
|
19825
|
+
widgetRequiredTools,
|
|
19826
|
+
isRequired,
|
|
19810
19827
|
_args3 = arguments;
|
|
19811
19828
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
19812
19829
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -19818,17 +19835,26 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19818
19835
|
}
|
|
19819
19836
|
throw new Error("MCP server not connected");
|
|
19820
19837
|
case 1:
|
|
19821
|
-
if (!(
|
|
19838
|
+
if (!(effectiveAllowedTools && !effectiveAllowedTools.includes(toolName))) {
|
|
19822
19839
|
_context3.next = 2;
|
|
19823
19840
|
break;
|
|
19824
19841
|
}
|
|
19825
|
-
|
|
19842
|
+
// Provide enhanced error if the tool is in widget's requiredTools
|
|
19843
|
+
widgetRequiredTools = function () {
|
|
19844
|
+
if (!(widgetData !== null && widgetData !== void 0 && widgetData.providers)) return null;
|
|
19845
|
+
var p = widgetData.providers.find(function (p) {
|
|
19846
|
+
return p.type === providerType && p.providerClass === "mcp";
|
|
19847
|
+
});
|
|
19848
|
+
return (p === null || p === void 0 ? void 0 : p.requiredTools) || null;
|
|
19849
|
+
}();
|
|
19850
|
+
isRequired = widgetRequiredTools === null || widgetRequiredTools === void 0 ? void 0 : widgetRequiredTools.includes(toolName);
|
|
19851
|
+
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.") : ""));
|
|
19826
19852
|
case 2:
|
|
19827
19853
|
return _context3.abrupt("return", new Promise(function (resolve, reject) {
|
|
19828
19854
|
var timeout = setTimeout(function () {
|
|
19829
19855
|
reject(new Error("Tool call \"".concat(toolName, "\" timed out after 30s")));
|
|
19830
19856
|
}, 30000);
|
|
19831
|
-
dashApi.mcpCallTool(selectedProviderName, toolName, args,
|
|
19857
|
+
dashApi.mcpCallTool(selectedProviderName, toolName, args, effectiveAllowedTools, function (event, result) {
|
|
19832
19858
|
clearTimeout(timeout);
|
|
19833
19859
|
if (result.error) {
|
|
19834
19860
|
reject(new Error(result.message));
|
|
@@ -19849,7 +19875,7 @@ var useMcpProvider = function useMcpProvider(providerType) {
|
|
|
19849
19875
|
return function (_x) {
|
|
19850
19876
|
return _ref3.apply(this, arguments);
|
|
19851
19877
|
};
|
|
19852
|
-
}(), [dashApi, selectedProviderName,
|
|
19878
|
+
}(), [dashApi, selectedProviderName, effectiveAllowedTools, widgetData, providerType]);
|
|
19853
19879
|
|
|
19854
19880
|
/**
|
|
19855
19881
|
* Read a resource from the MCP server
|
|
@@ -22204,9 +22230,9 @@ var resolveIcon = function resolveIcon(iconName) {
|
|
|
22204
22230
|
return FALLBACK;
|
|
22205
22231
|
};
|
|
22206
22232
|
|
|
22207
|
-
function _createForOfIteratorHelper$
|
|
22208
|
-
function _unsupportedIterableToArray$
|
|
22209
|
-
function _arrayLikeToArray$
|
|
22233
|
+
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; } } }; }
|
|
22234
|
+
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; } }
|
|
22235
|
+
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; }
|
|
22210
22236
|
/**
|
|
22211
22237
|
* Validation utilities for grid-first dashboard architecture
|
|
22212
22238
|
*
|
|
@@ -22445,7 +22471,7 @@ var validateCellMerge = function validateCellMerge(cellNumbers, grid) {
|
|
|
22445
22471
|
|
|
22446
22472
|
// Validate each cell
|
|
22447
22473
|
var cells = [];
|
|
22448
|
-
var _iterator = _createForOfIteratorHelper$
|
|
22474
|
+
var _iterator = _createForOfIteratorHelper$3(cellNumbers),
|
|
22449
22475
|
_step;
|
|
22450
22476
|
try {
|
|
22451
22477
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -25947,6 +25973,82 @@ var FoldersSection = function FoldersSection(_ref) {
|
|
|
25947
25973
|
});
|
|
25948
25974
|
};
|
|
25949
25975
|
|
|
25976
|
+
var ToolSelector = function ToolSelector(_ref) {
|
|
25977
|
+
var _ref$tools = _ref.tools,
|
|
25978
|
+
tools = _ref$tools === void 0 ? [] : _ref$tools,
|
|
25979
|
+
_ref$selectedTools = _ref.selectedTools,
|
|
25980
|
+
selectedTools = _ref$selectedTools === void 0 ? [] : _ref$selectedTools,
|
|
25981
|
+
onSelectionChange = _ref.onSelectionChange;
|
|
25982
|
+
if (!tools || tools.length === 0) return null;
|
|
25983
|
+
var allSelected = selectedTools.length === tools.length;
|
|
25984
|
+
var handleToggleAll = function handleToggleAll() {
|
|
25985
|
+
if (allSelected) {
|
|
25986
|
+
onSelectionChange([]);
|
|
25987
|
+
} else {
|
|
25988
|
+
onSelectionChange(tools.map(function (t) {
|
|
25989
|
+
return t.name;
|
|
25990
|
+
}));
|
|
25991
|
+
}
|
|
25992
|
+
};
|
|
25993
|
+
var handleToggle = function handleToggle(toolName) {
|
|
25994
|
+
if (selectedTools.includes(toolName)) {
|
|
25995
|
+
onSelectionChange(selectedTools.filter(function (t) {
|
|
25996
|
+
return t !== toolName;
|
|
25997
|
+
}));
|
|
25998
|
+
} else {
|
|
25999
|
+
onSelectionChange([].concat(_toConsumableArray(selectedTools), [toolName]));
|
|
26000
|
+
}
|
|
26001
|
+
};
|
|
26002
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
26003
|
+
className: "space-y-2",
|
|
26004
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
26005
|
+
className: "flex items-center justify-between",
|
|
26006
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("p", {
|
|
26007
|
+
className: "text-xs font-semibold opacity-40 uppercase tracking-wider",
|
|
26008
|
+
children: "Allowed Tools"
|
|
26009
|
+
}), /*#__PURE__*/jsxRuntime.jsx("button", {
|
|
26010
|
+
onClick: handleToggleAll,
|
|
26011
|
+
className: "text-xs text-blue-400 hover:text-blue-300 transition-colors",
|
|
26012
|
+
children: allSelected ? "Deselect All" : "Select All"
|
|
26013
|
+
})]
|
|
26014
|
+
}), /*#__PURE__*/jsxRuntime.jsx("p", {
|
|
26015
|
+
className: "text-sm opacity-50",
|
|
26016
|
+
children: "Choose which tools this provider can expose to widgets"
|
|
26017
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
26018
|
+
className: "space-y-1 max-h-64 overflow-y-auto",
|
|
26019
|
+
children: tools.map(function (tool) {
|
|
26020
|
+
var checked = selectedTools.includes(tool.name);
|
|
26021
|
+
return /*#__PURE__*/jsxRuntime.jsxs("label", {
|
|
26022
|
+
className: "flex items-start gap-2 p-1.5 rounded hover:bg-white/5 cursor-pointer",
|
|
26023
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("input", {
|
|
26024
|
+
type: "checkbox",
|
|
26025
|
+
checked: checked,
|
|
26026
|
+
onChange: function onChange() {
|
|
26027
|
+
return handleToggle(tool.name);
|
|
26028
|
+
},
|
|
26029
|
+
className: "mt-0.5 rounded border-white/20 bg-white/5 text-blue-500 focus:ring-blue-500/30"
|
|
26030
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
26031
|
+
className: "flex-1 min-w-0",
|
|
26032
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
26033
|
+
className: "text-xs font-mono",
|
|
26034
|
+
children: tool.name
|
|
26035
|
+
}), tool.description && /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
26036
|
+
className: "text-xs opacity-50 ml-2",
|
|
26037
|
+
children: ["\u2014 ", tool.description]
|
|
26038
|
+
})]
|
|
26039
|
+
})]
|
|
26040
|
+
}, tool.name);
|
|
26041
|
+
})
|
|
26042
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("p", {
|
|
26043
|
+
className: "text-xs opacity-40",
|
|
26044
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
|
|
26045
|
+
icon: "shield-halved",
|
|
26046
|
+
className: "mr-1"
|
|
26047
|
+
}), selectedTools.length, " of ", tools.length, " tools selected"]
|
|
26048
|
+
})]
|
|
26049
|
+
});
|
|
26050
|
+
};
|
|
26051
|
+
|
|
25950
26052
|
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; }
|
|
25951
26053
|
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; }
|
|
25952
26054
|
var ProviderDetail = function ProviderDetail(_ref) {
|
|
@@ -25973,6 +26075,7 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
25973
26075
|
onStartEdit = _ref.onStartEdit,
|
|
25974
26076
|
onCreate = _ref.onCreate,
|
|
25975
26077
|
onDelete = _ref.onDelete,
|
|
26078
|
+
onSaveAllowedTools = _ref.onSaveAllowedTools,
|
|
25976
26079
|
_ref$catalogAuthComma = _ref.catalogAuthCommand,
|
|
25977
26080
|
catalogAuthCommand = _ref$catalogAuthComma === void 0 ? null : _ref$catalogAuthComma;
|
|
25978
26081
|
var appContext = React.useContext(AppContext);
|
|
@@ -25988,16 +26091,20 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
25988
26091
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
25989
26092
|
testResult = _useState4[0],
|
|
25990
26093
|
setTestResult = _useState4[1];
|
|
26094
|
+
var _useState5 = React.useState(null),
|
|
26095
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
26096
|
+
selectedTools = _useState6[0],
|
|
26097
|
+
setSelectedTools = _useState6[1];
|
|
25991
26098
|
|
|
25992
26099
|
// MCP auth state
|
|
25993
|
-
var
|
|
25994
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
25995
|
-
isAuthorizing = _useState6[0],
|
|
25996
|
-
setIsAuthorizing = _useState6[1];
|
|
25997
|
-
var _useState7 = React.useState(null),
|
|
26100
|
+
var _useState7 = React.useState(false),
|
|
25998
26101
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
25999
|
-
|
|
26000
|
-
|
|
26102
|
+
isAuthorizing = _useState8[0],
|
|
26103
|
+
setIsAuthorizing = _useState8[1];
|
|
26104
|
+
var _useState9 = React.useState(null),
|
|
26105
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
26106
|
+
authResult = _useState0[0],
|
|
26107
|
+
setAuthResult = _useState0[1];
|
|
26001
26108
|
|
|
26002
26109
|
// Resolve authCommand: provider.mcpConfig.authCommand > catalogAuthCommand prop
|
|
26003
26110
|
var resolvedAuthCommand = (provider === null || provider === void 0 || (_provider$mcpConfig = provider.mcpConfig) === null || _provider$mcpConfig === void 0 ? void 0 : _provider$mcpConfig.authCommand) || catalogAuthCommand || null;
|
|
@@ -26015,14 +26122,14 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26015
26122
|
}, [isMcp, provider]);
|
|
26016
26123
|
|
|
26017
26124
|
// Dynamic credential fields for create mode
|
|
26018
|
-
var
|
|
26125
|
+
var _useState1 = React.useState(isCreating ? [{
|
|
26019
26126
|
id: "default_apiKey",
|
|
26020
26127
|
key: "apiKey",
|
|
26021
26128
|
secret: true
|
|
26022
26129
|
}] : []),
|
|
26023
|
-
|
|
26024
|
-
credentialFields =
|
|
26025
|
-
setCredentialFields =
|
|
26130
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
26131
|
+
credentialFields = _useState10[0],
|
|
26132
|
+
setCredentialFields = _useState10[1];
|
|
26026
26133
|
var fieldIdRef = React.useRef(0);
|
|
26027
26134
|
var handleFieldKeyChange = function handleFieldKeyChange(id, newKey) {
|
|
26028
26135
|
setCredentialFields(function (prev) {
|
|
@@ -26114,6 +26221,18 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26114
26221
|
message: "Connected! Found ".concat((result.tools || []).length, " tools.")
|
|
26115
26222
|
});
|
|
26116
26223
|
|
|
26224
|
+
// Pre-select: intersect with existing allowedTools, or select all
|
|
26225
|
+
var allToolNames = (result.tools || []).map(function (t) {
|
|
26226
|
+
return t.name;
|
|
26227
|
+
});
|
|
26228
|
+
if (provider !== null && provider !== void 0 && provider.allowedTools) {
|
|
26229
|
+
setSelectedTools(allToolNames.filter(function (t) {
|
|
26230
|
+
return provider.allowedTools.includes(t);
|
|
26231
|
+
}));
|
|
26232
|
+
} else {
|
|
26233
|
+
setSelectedTools(allToolNames);
|
|
26234
|
+
}
|
|
26235
|
+
|
|
26117
26236
|
// Stop after test
|
|
26118
26237
|
dashApi.mcpStopServer(providerName, function () {}, function () {});
|
|
26119
26238
|
setIsTesting(false);
|
|
@@ -26472,29 +26591,36 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26472
26591
|
children: authResult.message
|
|
26473
26592
|
})]
|
|
26474
26593
|
})
|
|
26475
|
-
}), testResult && /*#__PURE__*/jsxRuntime.
|
|
26594
|
+
}), testResult && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
26476
26595
|
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"),
|
|
26477
|
-
children:
|
|
26596
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
26478
26597
|
className: "flex items-center gap-2",
|
|
26479
26598
|
children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
|
|
26480
26599
|
icon: testResult.success ? "circle-check" : "circle-exclamation"
|
|
26481
26600
|
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
26482
26601
|
children: testResult.message
|
|
26483
26602
|
})]
|
|
26484
|
-
})
|
|
26485
|
-
|
|
26486
|
-
|
|
26487
|
-
|
|
26488
|
-
|
|
26489
|
-
|
|
26490
|
-
|
|
26491
|
-
|
|
26492
|
-
|
|
26493
|
-
|
|
26494
|
-
|
|
26495
|
-
|
|
26496
|
-
|
|
26603
|
+
})
|
|
26604
|
+
}), (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__*/jsxRuntime.jsx(ToolSelector, {
|
|
26605
|
+
tools: testResult.tools,
|
|
26606
|
+
selectedTools: selectedTools,
|
|
26607
|
+
onSelectionChange: setSelectedTools
|
|
26608
|
+
}), !testResult && (provider === null || provider === void 0 ? void 0 : provider.allowedTools) && provider.allowedTools.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
26609
|
+
className: "space-y-2",
|
|
26610
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("p", {
|
|
26611
|
+
className: "text-xs font-semibold opacity-40 uppercase tracking-wider",
|
|
26612
|
+
children: "Allowed Tools"
|
|
26613
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
26614
|
+
className: "flex flex-wrap gap-1",
|
|
26615
|
+
children: provider.allowedTools.map(function (tool) {
|
|
26616
|
+
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
26617
|
+
className: "text-xs font-mono px-2 py-0.5 rounded bg-white/5 opacity-70",
|
|
26618
|
+
children: tool
|
|
26619
|
+
}, tool);
|
|
26497
26620
|
})
|
|
26621
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("p", {
|
|
26622
|
+
className: "text-xs opacity-40",
|
|
26623
|
+
children: [provider.allowedTools.length, " tool", provider.allowedTools.length !== 1 ? "s" : "", " allowed \u2014 test connection to modify"]
|
|
26498
26624
|
})]
|
|
26499
26625
|
})]
|
|
26500
26626
|
})]
|
|
@@ -26508,6 +26634,12 @@ var ProviderDetail = function ProviderDetail(_ref) {
|
|
|
26508
26634
|
title: isTesting ? "Testing..." : "Test Connection",
|
|
26509
26635
|
onClick: handleTestConnection,
|
|
26510
26636
|
size: "sm"
|
|
26637
|
+
}), isMcp && selectedTools && onSaveAllowedTools && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
|
|
26638
|
+
title: "Update Allowed Tools",
|
|
26639
|
+
onClick: function onClick() {
|
|
26640
|
+
return onSaveAllowedTools(providerName, selectedTools);
|
|
26641
|
+
},
|
|
26642
|
+
size: "sm"
|
|
26511
26643
|
}), /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
|
|
26512
26644
|
title: "Edit",
|
|
26513
26645
|
onClick: function onClick() {
|
|
@@ -26621,7 +26753,9 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26621
26753
|
_ref2$initialHeaderRo = _ref2.initialHeaderRows,
|
|
26622
26754
|
initialHeaderRows = _ref2$initialHeaderRo === void 0 ? [] : _ref2$initialHeaderRo,
|
|
26623
26755
|
_ref2$initialCredenti2 = _ref2.initialCredentials,
|
|
26624
|
-
initialCredentials = _ref2$initialCredenti2 === void 0 ? {} : _ref2$initialCredenti2
|
|
26756
|
+
initialCredentials = _ref2$initialCredenti2 === void 0 ? {} : _ref2$initialCredenti2,
|
|
26757
|
+
_ref2$initialAllowedT = _ref2.initialAllowedTools,
|
|
26758
|
+
initialAllowedTools = _ref2$initialAllowedT === void 0 ? null : _ref2$initialAllowedT;
|
|
26625
26759
|
var appContext = React.useContext(AppContext);
|
|
26626
26760
|
var dashApi = appContext === null || appContext === void 0 ? void 0 : appContext.dashApi;
|
|
26627
26761
|
|
|
@@ -26677,19 +26811,25 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26677
26811
|
headerRows = _useState20[0],
|
|
26678
26812
|
setHeaderRows = _useState20[1];
|
|
26679
26813
|
|
|
26680
|
-
//
|
|
26681
|
-
var _useState21 = React.useState(
|
|
26814
|
+
// Tool selection state
|
|
26815
|
+
var _useState21 = React.useState(initialAllowedTools),
|
|
26682
26816
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
26683
|
-
|
|
26684
|
-
|
|
26685
|
-
|
|
26817
|
+
selectedTools = _useState22[0],
|
|
26818
|
+
setSelectedTools = _useState22[1];
|
|
26819
|
+
|
|
26820
|
+
// JSON editor state
|
|
26821
|
+
var _useState23 = React.useState("form"),
|
|
26686
26822
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
26687
|
-
|
|
26688
|
-
|
|
26689
|
-
var _useState25 = React.useState(
|
|
26823
|
+
viewMode = _useState24[0],
|
|
26824
|
+
setViewMode = _useState24[1]; // "form" | "json"
|
|
26825
|
+
var _useState25 = React.useState(""),
|
|
26690
26826
|
_useState26 = _slicedToArray(_useState25, 2),
|
|
26691
|
-
|
|
26692
|
-
|
|
26827
|
+
jsonText = _useState26[0],
|
|
26828
|
+
setJsonText = _useState26[1];
|
|
26829
|
+
var _useState27 = React.useState(null),
|
|
26830
|
+
_useState28 = _slicedToArray(_useState27, 2),
|
|
26831
|
+
jsonError = _useState28[0],
|
|
26832
|
+
setJsonError = _useState28[1];
|
|
26693
26833
|
|
|
26694
26834
|
// Clear credential data when transport changes (derived fields change entirely)
|
|
26695
26835
|
// Only in create mode — in edit mode the initial transport is set correctly
|
|
@@ -26858,6 +26998,18 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26858
26998
|
resources: result.resources || [],
|
|
26859
26999
|
message: "Connected! Found ".concat((result.tools || []).length, " tools.")
|
|
26860
27000
|
});
|
|
27001
|
+
|
|
27002
|
+
// Pre-select tools: intersect with existing allowedTools if editing, or select all
|
|
27003
|
+
var allToolNames = (result.tools || []).map(function (t) {
|
|
27004
|
+
return t.name;
|
|
27005
|
+
});
|
|
27006
|
+
if (initialAllowedTools) {
|
|
27007
|
+
setSelectedTools(allToolNames.filter(function (t) {
|
|
27008
|
+
return initialAllowedTools.includes(t);
|
|
27009
|
+
}));
|
|
27010
|
+
} else {
|
|
27011
|
+
setSelectedTools(allToolNames);
|
|
27012
|
+
}
|
|
26861
27013
|
dashApi.mcpStopServer(testName, function () {}, function () {});
|
|
26862
27014
|
setIsTesting(false);
|
|
26863
27015
|
}, function (event, err) {
|
|
@@ -26890,11 +27042,11 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26890
27042
|
url: result.url,
|
|
26891
27043
|
headerRows: result.headerRows
|
|
26892
27044
|
});
|
|
26893
|
-
onSave(name, initialProviderType, result.credentialData, config);
|
|
27045
|
+
onSave(name, initialProviderType, result.credentialData, config, selectedTools);
|
|
26894
27046
|
return;
|
|
26895
27047
|
}
|
|
26896
27048
|
if (!validateForm()) return;
|
|
26897
|
-
onSave(providerName.trim(), initialProviderType, credentialData, mcpConfig);
|
|
27049
|
+
onSave(providerName.trim(), initialProviderType, credentialData, mcpConfig, selectedTools);
|
|
26898
27050
|
};
|
|
26899
27051
|
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
26900
27052
|
className: "flex flex-col flex-1 min-h-0",
|
|
@@ -27278,30 +27430,20 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
27278
27430
|
}, field.key);
|
|
27279
27431
|
})]
|
|
27280
27432
|
})]
|
|
27281
|
-
}), testResult && /*#__PURE__*/jsxRuntime.
|
|
27433
|
+
}), testResult && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
27282
27434
|
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"),
|
|
27283
|
-
children:
|
|
27435
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
27284
27436
|
className: "flex items-center gap-2",
|
|
27285
27437
|
children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
|
|
27286
27438
|
icon: testResult.success ? "circle-check" : "circle-exclamation"
|
|
27287
27439
|
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
27288
27440
|
children: testResult.message
|
|
27289
27441
|
})]
|
|
27290
|
-
})
|
|
27291
|
-
|
|
27292
|
-
|
|
27293
|
-
|
|
27294
|
-
|
|
27295
|
-
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
27296
|
-
className: "font-mono",
|
|
27297
|
-
children: tool.name
|
|
27298
|
-
}), tool.description && /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
27299
|
-
className: "opacity-60 ml-2",
|
|
27300
|
-
children: ["- ", tool.description]
|
|
27301
|
-
})]
|
|
27302
|
-
}, tool.name);
|
|
27303
|
-
})
|
|
27304
|
-
})]
|
|
27442
|
+
})
|
|
27443
|
+
}), (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__*/jsxRuntime.jsx(ToolSelector, {
|
|
27444
|
+
tools: testResult.tools,
|
|
27445
|
+
selectedTools: selectedTools,
|
|
27446
|
+
onSelectionChange: setSelectedTools
|
|
27305
27447
|
})]
|
|
27306
27448
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
27307
27449
|
className: "flex-shrink-0 flex flex-row justify-end gap-2 px-6 py-4 border-t border-white/10",
|
|
@@ -27399,30 +27541,34 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27399
27541
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
27400
27542
|
authResult = _useState18[0],
|
|
27401
27543
|
setAuthResult = _useState18[1];
|
|
27544
|
+
var _useState19 = React.useState(null),
|
|
27545
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
27546
|
+
selectedTools = _useState20[0],
|
|
27547
|
+
setSelectedTools = _useState20[1];
|
|
27402
27548
|
|
|
27403
27549
|
// Configuration form state
|
|
27404
|
-
var
|
|
27405
|
-
_useState20 = _slicedToArray(_useState19, 2),
|
|
27406
|
-
providerName = _useState20[0],
|
|
27407
|
-
setProviderName = _useState20[1];
|
|
27408
|
-
var _useState21 = React.useState({}),
|
|
27550
|
+
var _useState21 = React.useState(""),
|
|
27409
27551
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
27410
|
-
|
|
27411
|
-
|
|
27552
|
+
providerName = _useState22[0],
|
|
27553
|
+
setProviderName = _useState22[1];
|
|
27412
27554
|
var _useState23 = React.useState({}),
|
|
27413
27555
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
27414
|
-
|
|
27415
|
-
|
|
27556
|
+
credentialData = _useState24[0],
|
|
27557
|
+
setCredentialData = _useState24[1];
|
|
27558
|
+
var _useState25 = React.useState({}),
|
|
27559
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
27560
|
+
formErrors = _useState26[0],
|
|
27561
|
+
setFormErrors = _useState26[1];
|
|
27416
27562
|
|
|
27417
27563
|
// Advanced config row state
|
|
27418
|
-
var _useState25 = React.useState([]),
|
|
27419
|
-
_useState26 = _slicedToArray(_useState25, 2),
|
|
27420
|
-
envMappingRows = _useState26[0],
|
|
27421
|
-
setEnvMappingRows = _useState26[1];
|
|
27422
27564
|
var _useState27 = React.useState([]),
|
|
27423
27565
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
27424
|
-
|
|
27425
|
-
|
|
27566
|
+
envMappingRows = _useState28[0],
|
|
27567
|
+
setEnvMappingRows = _useState28[1];
|
|
27568
|
+
var _useState29 = React.useState([]),
|
|
27569
|
+
_useState30 = _slicedToArray(_useState29, 2),
|
|
27570
|
+
headerRows = _useState30[0],
|
|
27571
|
+
setHeaderRows = _useState30[1];
|
|
27426
27572
|
var rowIdRef = React.useRef(0);
|
|
27427
27573
|
var nextRowId = function nextRowId() {
|
|
27428
27574
|
return "cat_".concat(++rowIdRef.current);
|
|
@@ -27529,6 +27675,11 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27529
27675
|
message: "Connected! Found ".concat((result.tools || []).length, " tools.")
|
|
27530
27676
|
});
|
|
27531
27677
|
|
|
27678
|
+
// Pre-select all tools
|
|
27679
|
+
setSelectedTools((result.tools || []).map(function (t) {
|
|
27680
|
+
return t.name;
|
|
27681
|
+
}));
|
|
27682
|
+
|
|
27532
27683
|
// Stop the test server
|
|
27533
27684
|
dashApi.mcpStopServer(testName, function () {}, function () {});
|
|
27534
27685
|
setIsTesting(false);
|
|
@@ -27571,7 +27722,7 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27571
27722
|
// Handle save
|
|
27572
27723
|
var handleSaveProvider = function handleSaveProvider() {
|
|
27573
27724
|
if (!selectedServer || !validateForm()) return;
|
|
27574
|
-
onSave(providerName.trim(), selectedServer.id, credentialData, effectiveMcpConfig);
|
|
27725
|
+
onSave(providerName.trim(), selectedServer.id, credentialData, effectiveMcpConfig, selectedTools);
|
|
27575
27726
|
};
|
|
27576
27727
|
|
|
27577
27728
|
// Select custom server option
|
|
@@ -27592,6 +27743,7 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27592
27743
|
setIsCustom(false);
|
|
27593
27744
|
setTestResult(null);
|
|
27594
27745
|
setAuthResult(null);
|
|
27746
|
+
setSelectedTools(null);
|
|
27595
27747
|
setProviderName("");
|
|
27596
27748
|
setCredentialData({});
|
|
27597
27749
|
setFormErrors({});
|
|
@@ -27790,30 +27942,20 @@ var McpCatalogDetail = function McpCatalogDetail(_ref) {
|
|
|
27790
27942
|
children: authResult.message
|
|
27791
27943
|
})]
|
|
27792
27944
|
})
|
|
27793
|
-
}), testResult && /*#__PURE__*/jsxRuntime.
|
|
27945
|
+
}), testResult && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
27794
27946
|
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"),
|
|
27795
|
-
children:
|
|
27947
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
27796
27948
|
className: "flex items-center gap-2",
|
|
27797
27949
|
children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
|
|
27798
27950
|
icon: testResult.success ? "circle-check" : "circle-exclamation"
|
|
27799
27951
|
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
27800
27952
|
children: testResult.message
|
|
27801
27953
|
})]
|
|
27802
|
-
})
|
|
27803
|
-
|
|
27804
|
-
|
|
27805
|
-
|
|
27806
|
-
|
|
27807
|
-
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
27808
|
-
className: "font-mono",
|
|
27809
|
-
children: tool.name
|
|
27810
|
-
}), tool.description && /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
27811
|
-
className: "opacity-60 ml-2",
|
|
27812
|
-
children: ["- ", tool.description]
|
|
27813
|
-
})]
|
|
27814
|
-
}, tool.name);
|
|
27815
|
-
})
|
|
27816
|
-
})]
|
|
27954
|
+
})
|
|
27955
|
+
}), (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__*/jsxRuntime.jsx(ToolSelector, {
|
|
27956
|
+
tools: testResult.tools,
|
|
27957
|
+
selectedTools: selectedTools,
|
|
27958
|
+
onSelectionChange: setSelectedTools
|
|
27817
27959
|
})]
|
|
27818
27960
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
27819
27961
|
className: "flex-shrink-0 flex flex-row justify-end gap-2 px-6 py-4 border-t border-white/10",
|
|
@@ -28084,12 +28226,14 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28084
28226
|
|
|
28085
28227
|
// Handle MCP provider creation from catalog picker
|
|
28086
28228
|
function handleMcpSave(providerName, providerType, mcpCredentials, mcpConfig) {
|
|
28229
|
+
var allowedTools = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
28087
28230
|
if (!dashApi || !appId) return;
|
|
28088
28231
|
dashApi.saveProvider(appId, providerName, {
|
|
28089
28232
|
providerType: providerType,
|
|
28090
28233
|
credentials: mcpCredentials,
|
|
28091
28234
|
providerClass: "mcp",
|
|
28092
|
-
mcpConfig: mcpConfig
|
|
28235
|
+
mcpConfig: mcpConfig,
|
|
28236
|
+
allowedTools: allowedTools
|
|
28093
28237
|
}, function () {
|
|
28094
28238
|
setIsAddingMcp(false);
|
|
28095
28239
|
refreshProviders && refreshProviders();
|
|
@@ -28102,6 +28246,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28102
28246
|
|
|
28103
28247
|
// Handle MCP provider editing via CustomMcpServerForm
|
|
28104
28248
|
function handleMcpEditSave(providerName, providerType, mcpCredentials, mcpConfig) {
|
|
28249
|
+
var allowedTools = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
28105
28250
|
if (!dashApi || !appId) return;
|
|
28106
28251
|
var originalName = selectedName;
|
|
28107
28252
|
|
|
@@ -28113,7 +28258,8 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28113
28258
|
providerType: providerType,
|
|
28114
28259
|
credentials: mcpCredentials,
|
|
28115
28260
|
providerClass: "mcp",
|
|
28116
|
-
mcpConfig: mcpConfig
|
|
28261
|
+
mcpConfig: mcpConfig,
|
|
28262
|
+
allowedTools: allowedTools
|
|
28117
28263
|
}, function () {
|
|
28118
28264
|
setSelectedName(providerName);
|
|
28119
28265
|
setProviderTab("mcp");
|
|
@@ -28125,6 +28271,24 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28125
28271
|
});
|
|
28126
28272
|
}
|
|
28127
28273
|
|
|
28274
|
+
// Handle saving just allowedTools for an existing MCP provider
|
|
28275
|
+
function handleSaveAllowedTools(providerName, allowedTools) {
|
|
28276
|
+
if (!dashApi || !appId) return;
|
|
28277
|
+
var existingProvider = providers[providerName];
|
|
28278
|
+
if (!existingProvider) return;
|
|
28279
|
+
dashApi.saveProvider(appId, providerName, {
|
|
28280
|
+
providerType: existingProvider.type,
|
|
28281
|
+
credentials: existingProvider.credentials,
|
|
28282
|
+
providerClass: "mcp",
|
|
28283
|
+
mcpConfig: existingProvider.mcpConfig,
|
|
28284
|
+
allowedTools: allowedTools
|
|
28285
|
+
}, function () {
|
|
28286
|
+
refreshProviders && refreshProviders();
|
|
28287
|
+
}, function (e, err) {
|
|
28288
|
+
return (void 0);
|
|
28289
|
+
});
|
|
28290
|
+
}
|
|
28291
|
+
|
|
28128
28292
|
// Respond to external create trigger from header
|
|
28129
28293
|
var prevCreateRequested = React.useRef(false);
|
|
28130
28294
|
React.useEffect(function () {
|
|
@@ -28251,6 +28415,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28251
28415
|
initialUrl: mc.url || "",
|
|
28252
28416
|
initialHeaderRows: headerTemplateToRows(mc.headerTemplate, nextRowId),
|
|
28253
28417
|
initialCredentials: selectedProvider.credentials || {},
|
|
28418
|
+
initialAllowedTools: selectedProvider.allowedTools || null,
|
|
28254
28419
|
onSave: handleMcpEditSave,
|
|
28255
28420
|
onBack: function onBack() {
|
|
28256
28421
|
return setIsEditingMcp(false);
|
|
@@ -28277,6 +28442,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
28277
28442
|
onDelete: function onDelete(name) {
|
|
28278
28443
|
return setDeleteTarget(name);
|
|
28279
28444
|
},
|
|
28445
|
+
onSaveAllowedTools: handleSaveAllowedTools,
|
|
28280
28446
|
catalogAuthCommand: (catalogEntry === null || catalogEntry === void 0 ? void 0 : catalogEntry.authCommand) || null
|
|
28281
28447
|
});
|
|
28282
28448
|
}
|
|
@@ -29009,9 +29175,20 @@ var InstalledWidgetDetail = function InstalledWidgetDetail(_ref) {
|
|
|
29009
29175
|
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
29010
29176
|
className: "flex flex-wrap gap-1.5",
|
|
29011
29177
|
children: widget.providers.map(function (p, i) {
|
|
29012
|
-
return /*#__PURE__*/jsxRuntime.jsxs("
|
|
29013
|
-
className: "
|
|
29014
|
-
children: [
|
|
29178
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
29179
|
+
className: "flex flex-col gap-1",
|
|
29180
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
29181
|
+
className: "text-xs px-2 py-0.5 rounded ".concat(currentTheme["bg-primary-medium"] || "bg-white/10", " opacity-70 w-fit"),
|
|
29182
|
+
children: [p.type, p.providerClass === "mcp" ? " (MCP)" : ""]
|
|
29183
|
+
}), p.requiredTools && p.requiredTools.length > 0 && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
29184
|
+
className: "flex flex-wrap gap-1 ml-2",
|
|
29185
|
+
children: p.requiredTools.map(function (tool) {
|
|
29186
|
+
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
29187
|
+
className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-blue-900/30 text-blue-400",
|
|
29188
|
+
children: tool
|
|
29189
|
+
}, tool);
|
|
29190
|
+
})
|
|
29191
|
+
})]
|
|
29015
29192
|
}, i);
|
|
29016
29193
|
})
|
|
29017
29194
|
})]
|
|
@@ -29196,14 +29373,33 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
|
|
|
29196
29373
|
}), w.description && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
29197
29374
|
className: "text-xs opacity-50 mt-0.5",
|
|
29198
29375
|
children: w.description
|
|
29199
|
-
}), w.providers && w.providers.length > 0 && /*#__PURE__*/jsxRuntime.
|
|
29200
|
-
className: "
|
|
29201
|
-
children:
|
|
29202
|
-
|
|
29203
|
-
|
|
29204
|
-
|
|
29205
|
-
|
|
29206
|
-
|
|
29376
|
+
}), w.providers && w.providers.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
29377
|
+
className: "space-y-1 mt-1",
|
|
29378
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
29379
|
+
className: "flex gap-1 flex-wrap",
|
|
29380
|
+
children: w.providers.map(function (p, pidx) {
|
|
29381
|
+
return /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
29382
|
+
className: "text-xs px-1.5 py-0.5 rounded bg-blue-900/30 text-blue-400",
|
|
29383
|
+
children: [p.type, p.required ? " *" : ""]
|
|
29384
|
+
}, pidx);
|
|
29385
|
+
})
|
|
29386
|
+
}), w.providers.some(function (p) {
|
|
29387
|
+
var _p$requiredTools;
|
|
29388
|
+
return ((_p$requiredTools = p.requiredTools) === null || _p$requiredTools === void 0 ? void 0 : _p$requiredTools.length) > 0;
|
|
29389
|
+
}) && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
29390
|
+
className: "flex flex-wrap gap-1 ml-1",
|
|
29391
|
+
children: w.providers.filter(function (p) {
|
|
29392
|
+
var _p$requiredTools2;
|
|
29393
|
+
return ((_p$requiredTools2 = p.requiredTools) === null || _p$requiredTools2 === void 0 ? void 0 : _p$requiredTools2.length) > 0;
|
|
29394
|
+
}).flatMap(function (p) {
|
|
29395
|
+
return p.requiredTools.map(function (tool) {
|
|
29396
|
+
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
29397
|
+
className: "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 opacity-60",
|
|
29398
|
+
children: tool
|
|
29399
|
+
}, "".concat(p.type, "-").concat(tool));
|
|
29400
|
+
});
|
|
29401
|
+
})
|
|
29402
|
+
})]
|
|
29207
29403
|
})]
|
|
29208
29404
|
}, idx);
|
|
29209
29405
|
})
|
|
@@ -29243,9 +29439,9 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
|
|
|
29243
29439
|
});
|
|
29244
29440
|
};
|
|
29245
29441
|
|
|
29246
|
-
function _createForOfIteratorHelper$
|
|
29247
|
-
function _unsupportedIterableToArray$
|
|
29248
|
-
function _arrayLikeToArray$
|
|
29442
|
+
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; } } }; }
|
|
29443
|
+
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; } }
|
|
29444
|
+
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; }
|
|
29249
29445
|
|
|
29250
29446
|
/**
|
|
29251
29447
|
* useRegistrySearch — shared hook for browsing and installing registry packages.
|
|
@@ -29320,11 +29516,11 @@ var useRegistrySearch = function useRegistrySearch() {
|
|
|
29320
29516
|
|
|
29321
29517
|
// Flatten packages into widget entries
|
|
29322
29518
|
widgets = [];
|
|
29323
|
-
_iterator = _createForOfIteratorHelper$
|
|
29519
|
+
_iterator = _createForOfIteratorHelper$2(pkgs);
|
|
29324
29520
|
try {
|
|
29325
29521
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
29326
29522
|
pkg = _step.value;
|
|
29327
|
-
_iterator2 = _createForOfIteratorHelper$
|
|
29523
|
+
_iterator2 = _createForOfIteratorHelper$2(pkg.widgets || []);
|
|
29328
29524
|
try {
|
|
29329
29525
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
29330
29526
|
widget = _step2.value;
|
|
@@ -29451,10 +29647,15 @@ var useRegistrySearch = function useRegistrySearch() {
|
|
|
29451
29647
|
};
|
|
29452
29648
|
};
|
|
29453
29649
|
|
|
29650
|
+
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; } } }; }
|
|
29651
|
+
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; } }
|
|
29652
|
+
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; }
|
|
29454
29653
|
var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
|
|
29455
29654
|
var onBack = _ref.onBack;
|
|
29456
29655
|
var _useContext = React.useContext(DashReact.ThemeContext),
|
|
29457
29656
|
currentTheme = _useContext.currentTheme;
|
|
29657
|
+
var appContext = React.useContext(AppContext);
|
|
29658
|
+
var providers = (appContext === null || appContext === void 0 ? void 0 : appContext.providers) || {};
|
|
29458
29659
|
var panelStyles = DashReact.getStylesForItem(DashReact.themeObjects.PANEL, currentTheme, {
|
|
29459
29660
|
grow: false
|
|
29460
29661
|
});
|
|
@@ -29473,10 +29674,90 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
|
|
|
29473
29674
|
_useState2 = _slicedToArray(_useState, 2),
|
|
29474
29675
|
selectedPackageName = _useState2[0],
|
|
29475
29676
|
setSelectedPackageName = _useState2[1];
|
|
29677
|
+
var _useState3 = React.useState(null),
|
|
29678
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
29679
|
+
toolConflictWarning = _useState4[0],
|
|
29680
|
+
setToolConflictWarning = _useState4[1];
|
|
29476
29681
|
var selectedWidget = selectedPackageName ? flatWidgets.find(function (w) {
|
|
29477
29682
|
return w.packageName === selectedPackageName;
|
|
29478
29683
|
}) : null;
|
|
29684
|
+
|
|
29685
|
+
// Check if widget's requiredTools conflict with user's provider allowedTools
|
|
29686
|
+
var checkToolConflicts = function checkToolConflicts(widget) {
|
|
29687
|
+
var conflicts = [];
|
|
29688
|
+
var packageWidgets = widget.packageWidgets || [];
|
|
29689
|
+
var _iterator = _createForOfIteratorHelper$1(packageWidgets),
|
|
29690
|
+
_step;
|
|
29691
|
+
try {
|
|
29692
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
29693
|
+
var w = _step.value;
|
|
29694
|
+
var _iterator2 = _createForOfIteratorHelper$1(w.providers || []),
|
|
29695
|
+
_step2;
|
|
29696
|
+
try {
|
|
29697
|
+
var _loop = function _loop() {
|
|
29698
|
+
var _p$requiredTools;
|
|
29699
|
+
var p = _step2.value;
|
|
29700
|
+
if (!((_p$requiredTools = p.requiredTools) !== null && _p$requiredTools !== void 0 && _p$requiredTools.length) || p.providerClass !== "mcp") return 1; // continue
|
|
29701
|
+
// Find matching user provider
|
|
29702
|
+
var matchingProviders = Object.entries(providers).filter(function (_ref2) {
|
|
29703
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
29704
|
+
prov = _ref3[1];
|
|
29705
|
+
return prov.type === p.type && prov.providerClass === "mcp" && prov.allowedTools;
|
|
29706
|
+
});
|
|
29707
|
+
var _iterator3 = _createForOfIteratorHelper$1(matchingProviders),
|
|
29708
|
+
_step3;
|
|
29709
|
+
try {
|
|
29710
|
+
var _loop2 = function _loop2() {
|
|
29711
|
+
var _step3$value = _slicedToArray(_step3.value, 2),
|
|
29712
|
+
provName = _step3$value[0],
|
|
29713
|
+
prov = _step3$value[1];
|
|
29714
|
+
var blocked = p.requiredTools.filter(function (t) {
|
|
29715
|
+
return !prov.allowedTools.includes(t);
|
|
29716
|
+
});
|
|
29717
|
+
if (blocked.length > 0) {
|
|
29718
|
+
conflicts.push({
|
|
29719
|
+
widgetName: w.displayName || w.name,
|
|
29720
|
+
providerName: provName,
|
|
29721
|
+
blockedTools: blocked
|
|
29722
|
+
});
|
|
29723
|
+
}
|
|
29724
|
+
};
|
|
29725
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
29726
|
+
_loop2();
|
|
29727
|
+
}
|
|
29728
|
+
} catch (err) {
|
|
29729
|
+
_iterator3.e(err);
|
|
29730
|
+
} finally {
|
|
29731
|
+
_iterator3.f();
|
|
29732
|
+
}
|
|
29733
|
+
};
|
|
29734
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
29735
|
+
if (_loop()) continue;
|
|
29736
|
+
}
|
|
29737
|
+
} catch (err) {
|
|
29738
|
+
_iterator2.e(err);
|
|
29739
|
+
} finally {
|
|
29740
|
+
_iterator2.f();
|
|
29741
|
+
}
|
|
29742
|
+
}
|
|
29743
|
+
} catch (err) {
|
|
29744
|
+
_iterator.e(err);
|
|
29745
|
+
} finally {
|
|
29746
|
+
_iterator.f();
|
|
29747
|
+
}
|
|
29748
|
+
return conflicts;
|
|
29749
|
+
};
|
|
29479
29750
|
var handleInstall = function handleInstall() {
|
|
29751
|
+
if (!selectedWidget) return;
|
|
29752
|
+
var conflicts = checkToolConflicts(selectedWidget);
|
|
29753
|
+
if (conflicts.length > 0) {
|
|
29754
|
+
setToolConflictWarning(conflicts);
|
|
29755
|
+
} else {
|
|
29756
|
+
installPackage(selectedWidget);
|
|
29757
|
+
}
|
|
29758
|
+
};
|
|
29759
|
+
var handleConfirmInstall = function handleConfirmInstall() {
|
|
29760
|
+
setToolConflictWarning(null);
|
|
29480
29761
|
if (selectedWidget) {
|
|
29481
29762
|
installPackage(selectedWidget);
|
|
29482
29763
|
}
|
|
@@ -29596,6 +29877,20 @@ var DiscoverWidgetsDetail = function DiscoverWidgetsDetail(_ref) {
|
|
|
29596
29877
|
}), !isLoading && !error && packages.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
29597
29878
|
className: "flex-shrink-0 px-4 py-2 text-[10px] opacity-40 border-t border-white/10",
|
|
29598
29879
|
children: [packages.length, " package", packages.length !== 1 ? "s" : ""]
|
|
29880
|
+
}), /*#__PURE__*/jsxRuntime.jsx(DashReact.ConfirmationModal, {
|
|
29881
|
+
isOpen: !!toolConflictWarning,
|
|
29882
|
+
setIsOpen: function setIsOpen() {
|
|
29883
|
+
return setToolConflictWarning(null);
|
|
29884
|
+
},
|
|
29885
|
+
title: "Tool Access Conflict",
|
|
29886
|
+
message: toolConflictWarning ? "This widget requires tools that are blocked by your provider settings:\n\n".concat(toolConflictWarning.map(function (c) {
|
|
29887
|
+
return "\u2022 ".concat(c.widgetName, " needs ").concat(c.blockedTools.join(", "), " (blocked by \"").concat(c.providerName, "\")");
|
|
29888
|
+
}).join("\n"), "\n\nYou can update allowed tools in Settings \u2192 Providers after installing.") : "",
|
|
29889
|
+
confirmLabel: "Install Anyway",
|
|
29890
|
+
onConfirm: handleConfirmInstall,
|
|
29891
|
+
onCancel: function onCancel() {
|
|
29892
|
+
return setToolConflictWarning(null);
|
|
29893
|
+
}
|
|
29599
29894
|
})]
|
|
29600
29895
|
});
|
|
29601
29896
|
};
|