@trops/dash-core 0.1.533 → 0.1.534

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -4913,6 +4913,17 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
4913
4913
  }, [pkg.name, onInstallComplete]);
4914
4914
  var widgetDeps = (preview === null || preview === void 0 ? void 0 : preview.widgets) || pkg.widgets || [];
4915
4915
  var providers = (preview === null || preview === void 0 ? void 0 : preview.providers) || [];
4916
+ // Slice 13c: aggregated MCP permissions for the dashboard, computed
4917
+ // by the publisher at publish time across every widget's local
4918
+ // package.json. Empty/missing means the dashboard either ships no
4919
+ // tool-using widgets or pre-dates the aggregation.
4920
+ var aggregatedPermissions = (preview === null || preview === void 0 ? void 0 : preview.permissions) || pkg.permissions || null;
4921
+ // Per-widget permissions live on each widget dep itself —
4922
+ // version-pinned next to the widget so the disclosure can't drift
4923
+ // from the actual installed package.
4924
+ var widgetsWithPermissions = widgetDeps.filter(function (w) {
4925
+ return w.permissions && _typeof(w.permissions) === "object" && Object.keys(w.permissions).length > 0;
4926
+ });
4916
4927
 
4917
4928
  // Augment compatibility: check renderer-side ComponentManager for
4918
4929
  // built-in widgets that the electron-side WidgetRegistry doesn't know about
@@ -5117,6 +5128,62 @@ var RegistryDashboardDetail = function RegistryDashboardDetail(_ref) {
5117
5128
  }, idx);
5118
5129
  })
5119
5130
  })]
5131
+ }), (aggregatedPermissions || widgetsWithPermissions.length > 0) && /*#__PURE__*/jsxs("div", {
5132
+ children: [/*#__PURE__*/jsx("span", {
5133
+ className: "text-xs font-semibold opacity-50 mb-1 block",
5134
+ children: "REQUIRED TOOLS"
5135
+ }), aggregatedPermissions && Object.entries(aggregatedPermissions).map(function (_ref3) {
5136
+ var _ref4 = _slicedToArray(_ref3, 2),
5137
+ server = _ref4[0],
5138
+ block = _ref4[1];
5139
+ return /*#__PURE__*/jsxs("div", {
5140
+ className: "mb-2",
5141
+ children: [/*#__PURE__*/jsx("div", {
5142
+ className: "text-xs font-mono uppercase tracking-wider opacity-70",
5143
+ children: server
5144
+ }), Array.isArray(block.tools) && block.tools.length > 0 && /*#__PURE__*/jsx("div", {
5145
+ className: "text-xs opacity-80 ml-2 break-all",
5146
+ children: block.tools.join(", ")
5147
+ }), Array.isArray(block.readPaths) && block.readPaths.length > 0 && /*#__PURE__*/jsxs("div", {
5148
+ className: "text-xs opacity-60 ml-2 break-all",
5149
+ children: ["Read paths: ", block.readPaths.join(", ")]
5150
+ }), Array.isArray(block.writePaths) && block.writePaths.length > 0 && /*#__PURE__*/jsxs("div", {
5151
+ className: "text-xs opacity-60 ml-2 break-all",
5152
+ children: ["Write paths: ", block.writePaths.join(", ")]
5153
+ })]
5154
+ }, server);
5155
+ }), widgetsWithPermissions.length > 0 && /*#__PURE__*/jsxs("details", {
5156
+ className: "mt-1",
5157
+ children: [/*#__PURE__*/jsxs("summary", {
5158
+ className: "text-xs opacity-60 cursor-pointer",
5159
+ children: ["Per-widget breakdown (", widgetsWithPermissions.length, " widget", widgetsWithPermissions.length === 1 ? "" : "s", ")"]
5160
+ }), /*#__PURE__*/jsx("div", {
5161
+ className: "mt-1 space-y-2 ml-2",
5162
+ children: widgetsWithPermissions.map(function (w, idx) {
5163
+ return /*#__PURE__*/jsxs("div", {
5164
+ className: "text-xs opacity-80",
5165
+ children: [/*#__PURE__*/jsxs("div", {
5166
+ className: "font-mono break-all",
5167
+ children: [w["package"] || w.packageName, w.version ? /*#__PURE__*/jsxs("span", {
5168
+ className: "opacity-50",
5169
+ children: [" v", w.version]
5170
+ }) : null]
5171
+ }), Object.entries(w.permissions).map(function (_ref5) {
5172
+ var _ref6 = _slicedToArray(_ref5, 2),
5173
+ server = _ref6[0],
5174
+ block = _ref6[1];
5175
+ return /*#__PURE__*/jsxs("div", {
5176
+ className: "ml-2 break-all",
5177
+ children: [/*#__PURE__*/jsxs("span", {
5178
+ className: "opacity-60",
5179
+ children: [server, ":"]
5180
+ }), " ", (block.tools || []).join(", ")]
5181
+ }, server);
5182
+ })]
5183
+ }, idx);
5184
+ })
5185
+ })]
5186
+ })]
5120
5187
  }), wiring.length > 0 && /*#__PURE__*/jsxs("div", {
5121
5188
  children: [/*#__PURE__*/jsx("span", {
5122
5189
  className: "text-xs font-semibold opacity-50 mb-1 block",
@@ -21205,6 +21272,33 @@ var RegistryPackageDetail = function RegistryPackageDetail(_ref) {
21205
21272
  }, idx);
21206
21273
  })
21207
21274
  })]
21275
+ }), widget.permissions && _typeof(widget.permissions) === "object" && Object.keys(widget.permissions).length > 0 && /*#__PURE__*/jsxs("div", {
21276
+ children: [/*#__PURE__*/jsx("span", {
21277
+ className: "text-xs font-semibold opacity-50 mb-1 block",
21278
+ children: "REQUIRED TOOLS"
21279
+ }), /*#__PURE__*/jsx("div", {
21280
+ className: "space-y-2",
21281
+ children: Object.entries(widget.permissions).map(function (_ref2) {
21282
+ var _ref3 = _slicedToArray(_ref2, 2),
21283
+ server = _ref3[0],
21284
+ block = _ref3[1];
21285
+ return /*#__PURE__*/jsxs("div", {
21286
+ children: [/*#__PURE__*/jsx("div", {
21287
+ className: "text-xs font-mono uppercase tracking-wider opacity-70",
21288
+ children: server
21289
+ }), Array.isArray(block.tools) && block.tools.length > 0 && /*#__PURE__*/jsx("div", {
21290
+ className: "text-xs opacity-80 ml-2 break-all",
21291
+ children: block.tools.join(", ")
21292
+ }), Array.isArray(block.readPaths) && block.readPaths.length > 0 && /*#__PURE__*/jsxs("div", {
21293
+ className: "text-xs opacity-60 ml-2 break-all",
21294
+ children: ["Read paths: ", block.readPaths.join(", ")]
21295
+ }), Array.isArray(block.writePaths) && block.writePaths.length > 0 && /*#__PURE__*/jsxs("div", {
21296
+ className: "text-xs opacity-60 ml-2 break-all",
21297
+ children: ["Write paths: ", block.writePaths.join(", ")]
21298
+ })]
21299
+ }, server);
21300
+ })
21301
+ })]
21208
21302
  }), widget.appOrigin && /*#__PURE__*/jsxs("div", {
21209
21303
  className: "flex items-center gap-1.5 text-xs opacity-50",
21210
21304
  children: [/*#__PURE__*/jsx(FontAwesomeIcon, {