@trops/dash-core 0.1.645 → 0.1.647

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
@@ -32,6 +32,7 @@ import * as ReactDOM from 'react-dom';
32
32
  import { createPortal } from 'react-dom';
33
33
  import { Link } from 'react-router-dom';
34
34
  import { marked } from 'marked';
35
+ import DOMPurify from 'dompurify';
35
36
  import PropTypes from 'prop-types';
36
37
 
37
38
  function ownKeys$1d(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; }
@@ -69036,6 +69037,58 @@ var ToolCallBlock = function ToolCallBlock(_ref) {
69036
69037
  });
69037
69038
  };
69038
69039
 
69040
+ /**
69041
+ * safeMarkdown.js
69042
+ *
69043
+ * Markdown → HTML that is safe to insert with dangerouslySetInnerHTML.
69044
+ *
69045
+ * AI replies are Markdown, and they can quote untrusted content (emails, web
69046
+ * pages, tool results). `marked` passes raw HTML through untouched, so a reply
69047
+ * containing `<img onerror=…>` or `<script>` would run in the app window —
69048
+ * which can reach window.mainApi. Every Markdown render of model or tool text
69049
+ * goes through here: `marked`, then DOMPurify.
69050
+ *
69051
+ * Kept: normal formatting (headings, emphasis, lists, code, tables, links).
69052
+ * Removed: scripts, event-handler attributes, javascript:/data: URLs,
69053
+ * iframes/objects/embeds/forms/styles, and inline style. Links get
69054
+ * rel="noopener noreferrer" (the app also blocks in-window navigation).
69055
+ */
69056
+ var FORBID_TAGS = ["style", "iframe", "object", "embed", "form", "input", "button", "textarea", "select", "link", "meta", "base"];
69057
+ var FORBID_ATTR = ["style"];
69058
+ // http(s), mailto, and in-page anchors only.
69059
+ var ALLOWED_URI_REGEXP = /^(?:(?:https?|mailto):|#)/i;
69060
+ var hooked = false;
69061
+ function ensureLinkHook() {
69062
+ if (hooked || typeof DOMPurify.addHook !== "function") return;
69063
+ DOMPurify.addHook("afterSanitizeAttributes", function (node) {
69064
+ if (node.tagName === "A" && node.hasAttribute("href")) {
69065
+ node.setAttribute("rel", "noopener noreferrer");
69066
+ node.setAttribute("target", "_blank");
69067
+ }
69068
+ });
69069
+ hooked = true;
69070
+ }
69071
+
69072
+ /**
69073
+ * @param {string} text Markdown (from a model, a tool, or a user)
69074
+ * @returns {string} sanitized HTML
69075
+ */
69076
+ function renderSafeMarkdown(text) {
69077
+ if (!text) return "";
69078
+ ensureLinkHook();
69079
+ var html = marked(String(text), {
69080
+ breaks: true
69081
+ });
69082
+ return DOMPurify.sanitize(html, {
69083
+ USE_PROFILES: {
69084
+ html: true
69085
+ },
69086
+ FORBID_TAGS: FORBID_TAGS,
69087
+ FORBID_ATTR: FORBID_ATTR,
69088
+ ALLOWED_URI_REGEXP: ALLOWED_URI_REGEXP
69089
+ });
69090
+ }
69091
+
69039
69092
  function ownKeys$3(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; }
69040
69093
  function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
69041
69094
  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; } } }; }
@@ -69044,9 +69097,10 @@ function _arrayLikeToArray$4(r, a) { (null == a || a > r.length) && (a = r.lengt
69044
69097
  function AssistantTextContent(_ref) {
69045
69098
  var text = _ref.text;
69046
69099
  if (!text) return null;
69047
- var html = marked(text, {
69048
- breaks: true
69049
- });
69100
+
69101
+ // Sanitized: replies can quote untrusted content (emails, web pages), and
69102
+ // this HTML is inserted into the app window.
69103
+ var html = renderSafeMarkdown(text);
69050
69104
  return /*#__PURE__*/jsx("div", {
69051
69105
  className: "prose prose-invert prose-sm max-w-none prose-p:my-2 prose-headings:my-3 prose-ul:my-2 prose-ol:my-2 prose-li:my-0.5 prose-pre:bg-black/40 prose-pre:text-gray-300 prose-code:text-indigo-300 prose-a:text-indigo-400 leading-relaxed",
69052
69106
  dangerouslySetInnerHTML: {
@@ -70925,6 +70979,165 @@ function MarkdownFormEditor(_ref8) {
70925
70979
  });
70926
70980
  }
70927
70981
 
70982
+ /**
70983
+ * botConversation.js
70984
+ *
70985
+ * Pure helpers for the Bots view (bot-teams PRD TEAM-011): turn a bot's run
70986
+ * records into chat turns, and work out each bot's status and how many things
70987
+ * on a team need the user.
70988
+ *
70989
+ * A run record (BotRunner) carries: trigger, status, startedAt/endedAt,
70990
+ * prompt, output (the answer), toolCalls [{ tool, provider, ok }], continued
70991
+ * (a reply in the same session), error, outputUnavailable.
70992
+ *
70993
+ * Turn kinds: "user" (what was asked), "system" (what started a run that
70994
+ * nobody typed), "tools" (tool-call rows), "bot" (the answer), "error",
70995
+ * "divider" (a new conversation started).
70996
+ */
70997
+
70998
+ function startedBy(r) {
70999
+ if (r.trigger === "schedule") return "Scheduled run";
71000
+ if (r.trigger === "event") return "Triggered by an event";
71001
+ return null;
71002
+ }
71003
+ function turnsForRun(r) {
71004
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
71005
+ _ref$pending = _ref.pending,
71006
+ pending = _ref$pending === void 0 ? false : _ref$pending;
71007
+ var turns = [];
71008
+ var at = r.startedAt || r.at || null;
71009
+ var label = startedBy(r);
71010
+ if (label) {
71011
+ // Event prompts are machine-written (and fence untrusted payloads) — show
71012
+ // what started the run, not the raw prompt.
71013
+ turns.push({
71014
+ kind: "system",
71015
+ text: label,
71016
+ at: at
71017
+ });
71018
+ } else if (r.prompt) {
71019
+ // Typed by the user: a manual run, a reply, or a question to the lead.
71020
+ turns.push({
71021
+ kind: "user",
71022
+ text: r.prompt,
71023
+ at: at
71024
+ });
71025
+ }
71026
+ if (Array.isArray(r.toolCalls) && r.toolCalls.length) {
71027
+ turns.push({
71028
+ kind: "tools",
71029
+ calls: r.toolCalls,
71030
+ at: at
71031
+ });
71032
+ }
71033
+ if (r.status === "failed" && r.error) {
71034
+ turns.push({
71035
+ kind: "error",
71036
+ text: r.error,
71037
+ at: r.endedAt || at
71038
+ });
71039
+ }
71040
+ if (r.outputUnavailable) {
71041
+ turns.push({
71042
+ kind: "bot",
71043
+ unavailable: true,
71044
+ text: "",
71045
+ at: r.endedAt || at
71046
+ });
71047
+ } else if (r.output || pending) {
71048
+ turns.push({
71049
+ kind: "bot",
71050
+ text: r.output || r.text || "",
71051
+ pending: pending,
71052
+ at: r.endedAt || at
71053
+ });
71054
+ }
71055
+ return turns;
71056
+ }
71057
+
71058
+ /**
71059
+ * @param {object[]} runs oldest first
71060
+ * @param {{ live?: { prompt?, text?, toolCalls?, continued? } }} [opts]
71061
+ * the run in progress, if any
71062
+ * @returns {object[]} turns
71063
+ */
71064
+ function buildConversation(runs) {
71065
+ var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
71066
+ _ref2$live = _ref2.live,
71067
+ live = _ref2$live === void 0 ? null : _ref2$live;
71068
+ var list = Array.isArray(runs) ? runs.filter(Boolean) : [];
71069
+ var turns = [];
71070
+ list.forEach(function (r, i) {
71071
+ if (i > 0 && !r.continued) {
71072
+ turns.push({
71073
+ kind: "divider",
71074
+ text: "New conversation",
71075
+ at: r.startedAt || r.at || null
71076
+ });
71077
+ }
71078
+ turns.push.apply(turns, _toConsumableArray(turnsForRun(r)));
71079
+ });
71080
+ if (live) {
71081
+ if (list.length && !live.continued) {
71082
+ turns.push({
71083
+ kind: "divider",
71084
+ text: "New conversation",
71085
+ at: null
71086
+ });
71087
+ }
71088
+ turns.push.apply(turns, _toConsumableArray(turnsForRun({
71089
+ trigger: live.trigger || "manual",
71090
+ prompt: live.prompt || "",
71091
+ toolCalls: live.toolCalls || [],
71092
+ text: live.text || ""
71093
+ }, {
71094
+ pending: true
71095
+ })));
71096
+ }
71097
+ return turns;
71098
+ }
71099
+
71100
+ /**
71101
+ * One bot's status. Needs approval > Running > Paused > Failed (its last run)
71102
+ * > Idle.
71103
+ */
71104
+ function botStatus(_ref3) {
71105
+ var botId = _ref3.botId,
71106
+ running = _ref3.running,
71107
+ paused = _ref3.paused,
71108
+ approvals = _ref3.approvals,
71109
+ lastRun = _ref3.lastRun;
71110
+ if ((approvals || []).some(function (a) {
71111
+ return a && a.request && a.request.botId === botId;
71112
+ })) {
71113
+ return "Needs approval";
71114
+ }
71115
+ if ((running || []).includes(botId)) return "Running";
71116
+ if (paused && (paused.global || (paused.bots || []).includes(botId))) {
71117
+ return "Paused";
71118
+ }
71119
+ if (lastRun && lastRun.status === "failed") return "Failed";
71120
+ return "Idle";
71121
+ }
71122
+
71123
+ /**
71124
+ * The Bots switch badge: the team's pending approvals plus bots whose last
71125
+ * run failed.
71126
+ */
71127
+ function attentionCount(_ref4) {
71128
+ var botIds = _ref4.botIds,
71129
+ approvals = _ref4.approvals,
71130
+ lastRunByBot = _ref4.lastRunByBot;
71131
+ var ids = new Set(botIds || []);
71132
+ var pending = (approvals || []).filter(function (a) {
71133
+ return a && a.request && ids.has(a.request.botId);
71134
+ }).length;
71135
+ var failed = _toConsumableArray(ids).filter(function (id) {
71136
+ return lastRunByBot && lastRunByBot[id] && lastRunByBot[id].status === "failed";
71137
+ }).length;
71138
+ return pending + failed;
71139
+ }
71140
+
70928
71141
  function ownKeys(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; }
70929
71142
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
70930
71143
 
@@ -71701,5 +71914,5 @@ function computeDashboardPreflight(_ref) {
71701
71914
 
71702
71915
  ComponentManager.registerContainerTypes(LayoutContainer, LayoutGridContainer);
71703
71916
 
71704
- export { ALGOLIA_ANALYTICS_FOR_QUERY, ALGOLIA_ANALYTICS_FOR_QUERY_COMPLETE, ALGOLIA_ANALYTICS_FOR_QUERY_ERROR, ALGOLIA_LIST_INDICES, ALGOLIA_LIST_INDICES_COMPLETE, ALGOLIA_LIST_INDICES_ERROR, AVAILABLE_COLORS, AddMenuItemModal, AdvancedMcpConfig, AppContext, AppSettingsModal, AppThemeScope, AppWrapper, AskLead, BotEditorModal, CHOOSE_FILE, CHOOSE_FILE_COMPLETE, CHOOSE_FILE_ERROR, ChatCore, ChatInput, ChatMessages, ColorModel, ComponentConfigModel, ComponentManager, ContextModel, DATA_JSON_TO_CSV_FILE, DATA_JSON_TO_CSV_FILE_COMPLETE, DATA_JSON_TO_CSV_FILE_ERROR, DATA_JSON_TO_CSV_STRING, DATA_JSON_TO_CSV_STRING_COMPLETE, DATA_JSON_TO_CSV_STRING_ERROR, DATA_READ_FROM_FILE, DATA_READ_FROM_FILE_COMPLETE, DATA_READ_FROM_FILE_ERROR, DATA_SAVE_TO_FILE, DATA_SAVE_TO_FILE_COMPLETE, DATA_SAVE_TO_FILE_ERROR, DashCommandPalette, DashNavbar, DashSidebar, DashTabBar, DashboardStage as Dashboard, DashboardActionsApi, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_AUTHORIZE_COMPLETE, MCP_AUTHORIZE_ERROR, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, MarkdownFormEditor, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MessageBubble, MissingProviderPrompt, MockDashboardApi, PROVIDER_DELETE_COMPLETE, PROVIDER_DELETE_ERROR, PROVIDER_GET_COMPLETE, PROVIDER_GET_ERROR, PROVIDER_LIST_COMPLETE, PROVIDER_LIST_ERROR, PROVIDER_SAVE_COMPLETE, PROVIDER_SAVE_ERROR, PageTabBar, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, PanelEditItemProviders, PinnedSidebar, ProviderContext, ProviderErrorBoundary, ProviderForm, ProviderSelector, SECURE_STORAGE_ENCRYPT_STRING, SECURE_STORAGE_ENCRYPT_STRING_COMPLETE, SECURE_STORAGE_ENCRYPT_STRING_ERROR, SECURE_STORE_ENCRYPTION_CHECK, SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, SECURE_STORE_ENCRYPTION_CHECK_ERROR, SECURE_STORE_GET_DATA, SECURE_STORE_GET_DATA_COMPLETE, SECURE_STORE_GET_DATA_ERROR, SECURE_STORE_SET_DATA, SECURE_STORE_SET_DATA_COMPLETE, SECURE_STORE_SET_DATA_ERROR, SETTINGS_GET, SETTINGS_GET_COMPLETE, SETTINGS_GET_ERROR, SETTINGS_SAVE, SETTINGS_SAVE_COMPLETE, SETTINGS_SAVE_ERROR, SIDEBAR_WIDGET_TYPE, SettingsModel, SideMenu, SplitCellModal, StreamingText, THEME_DELETE, THEME_DELETE_COMPLETE, THEME_DELETE_ERROR, THEME_EXTRACT_FROM_URL, THEME_EXTRACT_FROM_URL_COMPLETE, THEME_EXTRACT_FROM_URL_ERROR, THEME_LIST, THEME_LIST_COMPLETE, THEME_LIST_ERROR, THEME_MAP_PALETTE, THEME_MAP_PALETTE_COMPLETE, THEME_MAP_PALETTE_ERROR, THEME_SAVE, THEME_SAVE_COMPLETE, THEME_SAVE_ERROR, TeamLeadSection, ThemeApi, ThemeColorDots, ThemeManagerModal, ThemeModel, ThemeWrapper, ToolCallBlock, ToolSelector, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetNotFound, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, WorkspaceScopeContext, addChildToLayoutItem, addItemToItemLayout, bareComponentName, buildMcpConfigFromOverrides, canHaveChildren, changeDirectionForLayoutItem, computeDashboardPreflight, createProviderRegistry, dashboardOptions, deriveFormFields, envMappingToRows, evaluateBundle, extractWidgetConfigs, formStateToMcpJson, formatFieldName, generateCustomTheme, generateHarmonyTheme, generateRandomHexTheme, generateRandomTheme, generateThemeName, getBorderStyle, getBrandPresets, getChildrenForLayoutItem, getComponentInLayout, getContainerBorderColor, getContainerColor, getIndexOfLayoutChildrenForItem, getIndexOfLayoutItem, getLayoutItemById, getLayoutItemForWorkspace, getNearestParentWorkspace, getNextHighestId, getNextHighestItemInLayout, getNextHighestOrder, getNextHighestParentId, getNextLowestItemInLayout, getParentForLayoutItem, getParentWorkspaceForItem, getThemePresets, getUserConfigurableProviders, getWidgetsForWorkspace, getWorkspacesForWorkspace, groupBotsByTeam, headerTemplateToRows, humanizeAction, isContainer, isLikelySecret, isMaxOrderForItem, isMinOrderForItem, isScopedComponentId, isWidget, isWidgetResolvable, isWorkspace, layoutItemHasWorkspaceAsChild, loadWidgetBundle, makeScopedComponentId, mcpJsonToFormState, moveWidgetAcrossContainers, numChildrenForLayout, offTeamSubscriptions, parse, parseScopedComponentId, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, replaceItemInLayout, resolveGateWidgetId, resolveIcon, sameWorkspace, serialize, setHostModules, traverseParentTree, triggerSummary, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetRegistryVersion, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
71917
+ export { ALGOLIA_ANALYTICS_FOR_QUERY, ALGOLIA_ANALYTICS_FOR_QUERY_COMPLETE, ALGOLIA_ANALYTICS_FOR_QUERY_ERROR, ALGOLIA_LIST_INDICES, ALGOLIA_LIST_INDICES_COMPLETE, ALGOLIA_LIST_INDICES_ERROR, AVAILABLE_COLORS, AddMenuItemModal, AdvancedMcpConfig, AppContext, AppSettingsModal, AppThemeScope, AppWrapper, AskLead, BotEditorModal, CHOOSE_FILE, CHOOSE_FILE_COMPLETE, CHOOSE_FILE_ERROR, ChatCore, ChatInput, ChatMessages, ColorModel, ComponentConfigModel, ComponentManager, ContextModel, DATA_JSON_TO_CSV_FILE, DATA_JSON_TO_CSV_FILE_COMPLETE, DATA_JSON_TO_CSV_FILE_ERROR, DATA_JSON_TO_CSV_STRING, DATA_JSON_TO_CSV_STRING_COMPLETE, DATA_JSON_TO_CSV_STRING_ERROR, DATA_READ_FROM_FILE, DATA_READ_FROM_FILE_COMPLETE, DATA_READ_FROM_FILE_ERROR, DATA_SAVE_TO_FILE, DATA_SAVE_TO_FILE_COMPLETE, DATA_SAVE_TO_FILE_ERROR, DashCommandPalette, DashNavbar, DashSidebar, DashTabBar, DashboardStage as Dashboard, DashboardActionsApi, DashboardApi, DashboardContext, DashboardFooter, DashboardHeader, DashboardMenuItem, DashboardModel, DashboardMonitor, DashboardPublisher, DashboardStage, DashboardThemeProvider, DashboardWizardModal, DashboardWrapper, ElectronDashboardApi, ErrorBoundary, ExternalWidget, GRID_CELL_WIDGET_TYPE, HARMONY_STRATEGIES, LAYOUT_LIST, LAYOUT_LIST_COMPLETE, LAYOUT_LIST_ERROR, Layout, LayoutBuilder, LayoutBuilderAddItemModal, LayoutBuilderConfigContainerMenuItem, LayoutBuilderConfigMenuItem, LayoutBuilderConfigModal, LayoutBuilderEditItemModal, LayoutBuilderEventModal, LayoutBuilderGridItem, LayoutContainer, LayoutDragBuilder, LayoutDragBuilderEdit, LayoutGridContainer, LayoutManagerModal, LayoutModel, LayoutQuickAddMenu, MCP_AUTHORIZE_COMPLETE, MCP_AUTHORIZE_ERROR, MCP_CALL_TOOL_COMPLETE, MCP_CALL_TOOL_ERROR, MCP_GET_CATALOG_COMPLETE, MCP_GET_CATALOG_ERROR, MCP_LIST_RESOURCES_COMPLETE, MCP_LIST_RESOURCES_ERROR, MCP_LIST_TOOLS_COMPLETE, MCP_LIST_TOOLS_ERROR, MCP_READ_RESOURCE_COMPLETE, MCP_READ_RESOURCE_ERROR, MCP_RUN_AUTH_COMPLETE, MCP_RUN_AUTH_ERROR, MCP_SERVER_STATUS_COMPLETE, MCP_SERVER_STATUS_ERROR, MCP_START_SERVER_COMPLETE, MCP_START_SERVER_ERROR, MCP_STOP_SERVER_COMPLETE, MCP_STOP_SERVER_ERROR, MENU_ITEMS_DELETE, MENU_ITEMS_DELETE_COMPLETE, MENU_ITEMS_DELETE_ERROR, MENU_ITEMS_LIST, MENU_ITEMS_LIST_COMPLETE, MENU_ITEMS_LIST_ERROR, MENU_ITEMS_SAVE, MENU_ITEMS_SAVE_COMPLETE, MENU_ITEMS_SAVE_ERROR, MainMenu, MainMenuItem, MainMenuSection, MarkdownFormEditor, McpServerPicker, MenuItemModel, MenuSlideOverlay, MergeCellsModal, MessageBubble, MissingProviderPrompt, MockDashboardApi, PROVIDER_DELETE_COMPLETE, PROVIDER_DELETE_ERROR, PROVIDER_GET_COMPLETE, PROVIDER_GET_ERROR, PROVIDER_LIST_COMPLETE, PROVIDER_LIST_ERROR, PROVIDER_SAVE_COMPLETE, PROVIDER_SAVE_ERROR, PageTabBar, PanelCode, PanelEditItem, PanelEditItemHandlers, PanelEditItemNotifications, PanelEditItemProviders, PinnedSidebar, ProviderContext, ProviderErrorBoundary, ProviderForm, ProviderSelector, SECURE_STORAGE_ENCRYPT_STRING, SECURE_STORAGE_ENCRYPT_STRING_COMPLETE, SECURE_STORAGE_ENCRYPT_STRING_ERROR, SECURE_STORE_ENCRYPTION_CHECK, SECURE_STORE_ENCRYPTION_CHECK_COMPLETE, SECURE_STORE_ENCRYPTION_CHECK_ERROR, SECURE_STORE_GET_DATA, SECURE_STORE_GET_DATA_COMPLETE, SECURE_STORE_GET_DATA_ERROR, SECURE_STORE_SET_DATA, SECURE_STORE_SET_DATA_COMPLETE, SECURE_STORE_SET_DATA_ERROR, SETTINGS_GET, SETTINGS_GET_COMPLETE, SETTINGS_GET_ERROR, SETTINGS_SAVE, SETTINGS_SAVE_COMPLETE, SETTINGS_SAVE_ERROR, SIDEBAR_WIDGET_TYPE, SettingsModel, SideMenu, SplitCellModal, StreamingText, THEME_DELETE, THEME_DELETE_COMPLETE, THEME_DELETE_ERROR, THEME_EXTRACT_FROM_URL, THEME_EXTRACT_FROM_URL_COMPLETE, THEME_EXTRACT_FROM_URL_ERROR, THEME_LIST, THEME_LIST_COMPLETE, THEME_LIST_ERROR, THEME_MAP_PALETTE, THEME_MAP_PALETTE_COMPLETE, THEME_MAP_PALETTE_ERROR, THEME_SAVE, THEME_SAVE_COMPLETE, THEME_SAVE_ERROR, TeamLeadSection, ThemeApi, ThemeColorDots, ThemeManagerModal, ThemeModel, ThemeWrapper, ToolCallBlock, ToolSelector, WELCOME_STORAGE_KEY, WORKSPACE_DELETE, WORKSPACE_DELETE_COMPLETE, WORKSPACE_DELETE_ERROR, WORKSPACE_LIST, WORKSPACE_LIST_COMPLETE, WORKSPACE_LIST_ERROR, WORKSPACE_SAVE, WORKSPACE_SAVE_COMPLETE, WORKSPACE_SAVE_ERROR, WebDashboardApi, WelcomePrompt, Widget, WidgetApi, WidgetConfigPanel, WidgetContext, WidgetFactory, WidgetNotFound, WidgetPopoutStage, WidgetProviderWrapper, WidgetSidebar, WizardCustomizeStep, WizardDiscoverStep, Workspace, WorkspaceContext, WorkspaceFooter, WorkspaceMenu, WorkspaceModel, WorkspaceScopeContext, addChildToLayoutItem, addItemToItemLayout, attentionCount, bareComponentName, botStatus, buildConversation, buildMcpConfigFromOverrides, canHaveChildren, changeDirectionForLayoutItem, computeDashboardPreflight, createProviderRegistry, dashboardOptions, deriveFormFields, envMappingToRows, evaluateBundle, extractWidgetConfigs, formStateToMcpJson, formatFieldName, generateCustomTheme, generateHarmonyTheme, generateRandomHexTheme, generateRandomTheme, generateThemeName, getBorderStyle, getBrandPresets, getChildrenForLayoutItem, getComponentInLayout, getContainerBorderColor, getContainerColor, getIndexOfLayoutChildrenForItem, getIndexOfLayoutItem, getLayoutItemById, getLayoutItemForWorkspace, getNearestParentWorkspace, getNextHighestId, getNextHighestItemInLayout, getNextHighestOrder, getNextHighestParentId, getNextLowestItemInLayout, getParentForLayoutItem, getParentWorkspaceForItem, getThemePresets, getUserConfigurableProviders, getWidgetsForWorkspace, getWorkspacesForWorkspace, groupBotsByTeam, headerTemplateToRows, humanizeAction, isContainer, isLikelySecret, isMaxOrderForItem, isMinOrderForItem, isScopedComponentId, isWidget, isWidgetResolvable, isWorkspace, layoutItemHasWorkspaceAsChild, loadWidgetBundle, makeScopedComponentId, mcpJsonToFormState, moveWidgetAcrossContainers, numChildrenForLayout, offTeamSubscriptions, parse, parseScopedComponentId, removeItemFromLayout, renderComponent, renderGridLayout, renderGridLayoutFlow, _renderLayout as renderLayout, renderLayoutMenu, renderSafeMarkdown, replaceItemInLayout, resolveGateWidgetId, resolveIcon, sameWorkspace, serialize, setHostModules, traverseParentTree, triggerSummary, updateLayoutItem, updateParentForItem, useDashboard, useMcpDashServer, useMcpProvider, useNotifications, useProvider, useProviderClient, useScheduler, useWebSocketProvider, useWidgetEvents, useWidgetProviders, useWidgetRegistryVersion, useWidgetSchedulerStatus, useWizardState, validateCellMerge, validateGridCell, validateGridPlacement, validateWidgetPlacement, widgetCountToTemplate, withProviderDetection };
71705
71918
  //# sourceMappingURL=index.esm.js.map