@memberjunction/ng-explorer-core 6.2.0-edge.3 → 6.2.0-edge.5

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.
Files changed (138) hide show
  1. package/README.md +10 -0
  2. package/dist/app-routing.module.d.ts.map +1 -1
  3. package/dist/app-routing.module.js +13 -6
  4. package/dist/app-routing.module.js.map +1 -1
  5. package/dist/generated/lazy-feature-config.d.ts +1 -1
  6. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  7. package/dist/generated/lazy-feature-config.js +4 -2
  8. package/dist/generated/lazy-feature-config.js.map +1 -1
  9. package/dist/lib/guards/moved-nav-item-redirect.d.ts +15 -0
  10. package/dist/lib/guards/moved-nav-item-redirect.d.ts.map +1 -0
  11. package/dist/lib/guards/moved-nav-item-redirect.js +37 -0
  12. package/dist/lib/guards/moved-nav-item-redirect.js.map +1 -0
  13. package/dist/lib/oauth/oauth-callback.component.d.ts +2 -0
  14. package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
  15. package/dist/lib/oauth/oauth-callback.component.js +10 -10
  16. package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
  17. package/dist/lib/omnibar/omnibar-dashboard-matches.d.ts +34 -0
  18. package/dist/lib/omnibar/omnibar-dashboard-matches.d.ts.map +1 -0
  19. package/dist/lib/omnibar/omnibar-dashboard-matches.js +70 -0
  20. package/dist/lib/omnibar/omnibar-dashboard-matches.js.map +1 -0
  21. package/dist/lib/omnibar/omnibar-palette.component.d.ts +27 -2
  22. package/dist/lib/omnibar/omnibar-palette.component.d.ts.map +1 -1
  23. package/dist/lib/omnibar/omnibar-palette.component.js +126 -65
  24. package/dist/lib/omnibar/omnibar-palette.component.js.map +1 -1
  25. package/dist/lib/omnibar/omnibar-provider.d.ts +4 -0
  26. package/dist/lib/omnibar/omnibar-provider.d.ts.map +1 -1
  27. package/dist/lib/omnibar/omnibar-provider.js.map +1 -1
  28. package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts +2 -2
  29. package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts.map +1 -1
  30. package/dist/lib/omnibar/providers/omnibar-record.provider.js +3 -7
  31. package/dist/lib/omnibar/providers/omnibar-record.provider.js.map +1 -1
  32. package/dist/lib/omnibar/providers/omnibar-search.provider.d.ts +15 -2
  33. package/dist/lib/omnibar/providers/omnibar-search.provider.d.ts.map +1 -1
  34. package/dist/lib/omnibar/providers/omnibar-search.provider.js +59 -7
  35. package/dist/lib/omnibar/providers/omnibar-search.provider.js.map +1 -1
  36. package/dist/lib/profile/forking-setting.d.ts +8 -0
  37. package/dist/lib/profile/forking-setting.d.ts.map +1 -0
  38. package/dist/lib/profile/forking-setting.js +18 -0
  39. package/dist/lib/profile/forking-setting.js.map +1 -0
  40. package/dist/lib/profile/profile-dialog.component.d.ts +8 -0
  41. package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
  42. package/dist/lib/profile/profile-dialog.component.js +182 -92
  43. package/dist/lib/profile/profile-dialog.component.js.map +1 -1
  44. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +16 -1
  45. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
  46. package/dist/lib/resource-wrappers/artifact-resource.component.js +27 -4
  47. package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
  48. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +24 -21
  49. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
  50. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +231 -54
  51. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  52. package/dist/lib/resource-wrappers/chat-search-routing.d.ts +10 -3
  53. package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -1
  54. package/dist/lib/resource-wrappers/chat-search-routing.js +11 -4
  55. package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -1
  56. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +12 -3
  57. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
  58. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +18 -3
  59. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
  60. package/dist/lib/resource-wrappers/dashboard-add-to-menu.component.d.ts +29 -0
  61. package/dist/lib/resource-wrappers/dashboard-add-to-menu.component.d.ts.map +1 -0
  62. package/dist/lib/resource-wrappers/dashboard-add-to-menu.component.js +141 -0
  63. package/dist/lib/resource-wrappers/dashboard-add-to-menu.component.js.map +1 -0
  64. package/dist/lib/resource-wrappers/dashboard-part-config.d.ts +28 -0
  65. package/dist/lib/resource-wrappers/dashboard-part-config.d.ts.map +1 -0
  66. package/dist/lib/resource-wrappers/dashboard-part-config.js +150 -0
  67. package/dist/lib/resource-wrappers/dashboard-part-config.js.map +1 -0
  68. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +361 -56
  69. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  70. package/dist/lib/resource-wrappers/dashboard-resource.component.js +1312 -361
  71. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  72. package/dist/lib/resource-wrappers/dashboard-source-search.d.ts +86 -0
  73. package/dist/lib/resource-wrappers/dashboard-source-search.d.ts.map +1 -0
  74. package/dist/lib/resource-wrappers/dashboard-source-search.js +136 -0
  75. package/dist/lib/resource-wrappers/dashboard-source-search.js.map +1 -0
  76. package/dist/lib/resource-wrappers/dashboard-studio-pane.d.ts +30 -0
  77. package/dist/lib/resource-wrappers/dashboard-studio-pane.d.ts.map +1 -0
  78. package/dist/lib/resource-wrappers/dashboard-studio-pane.js +55 -0
  79. package/dist/lib/resource-wrappers/dashboard-studio-pane.js.map +1 -0
  80. package/dist/lib/resource-wrappers/dashboard-studio-tools.d.ts +135 -0
  81. package/dist/lib/resource-wrappers/dashboard-studio-tools.d.ts.map +1 -0
  82. package/dist/lib/resource-wrappers/dashboard-studio-tools.js +856 -0
  83. package/dist/lib/resource-wrappers/dashboard-studio-tools.js.map +1 -0
  84. package/dist/lib/resource-wrappers/dashboard-tab-agent.d.ts +87 -0
  85. package/dist/lib/resource-wrappers/dashboard-tab-agent.d.ts.map +1 -0
  86. package/dist/lib/resource-wrappers/dashboard-tab-agent.js +125 -0
  87. package/dist/lib/resource-wrappers/dashboard-tab-agent.js.map +1 -0
  88. package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +28 -7
  89. package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
  90. package/dist/lib/resource-wrappers/livekit-room-resource.component.js +174 -112
  91. package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
  92. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +3 -3
  93. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
  94. package/dist/lib/resource-wrappers/search-results-resource.component.js +10 -14
  95. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  96. package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts +16 -3
  97. package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts.map +1 -1
  98. package/dist/lib/server-connectivity/server-connectivity-banner.component.js +17 -3
  99. package/dist/lib/server-connectivity/server-connectivity-banner.component.js.map +1 -1
  100. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +41 -0
  101. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  102. package/dist/lib/shell/components/tabs/tab-container.component.js +170 -39
  103. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  104. package/dist/lib/shell/dashboard-tab-for-url.d.ts +35 -0
  105. package/dist/lib/shell/dashboard-tab-for-url.d.ts.map +1 -0
  106. package/dist/lib/shell/dashboard-tab-for-url.js +39 -0
  107. package/dist/lib/shell/dashboard-tab-for-url.js.map +1 -0
  108. package/dist/lib/shell/deep-link-workspace.d.ts +25 -0
  109. package/dist/lib/shell/deep-link-workspace.d.ts.map +1 -0
  110. package/dist/lib/shell/deep-link-workspace.js +49 -0
  111. package/dist/lib/shell/deep-link-workspace.js.map +1 -0
  112. package/dist/lib/shell/shell.component.d.ts +43 -2
  113. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  114. package/dist/lib/shell/shell.component.js +174 -42
  115. package/dist/lib/shell/shell.component.js.map +1 -1
  116. package/dist/lib/shell/shell.module.d.ts +2 -1
  117. package/dist/lib/shell/shell.module.d.ts.map +1 -1
  118. package/dist/lib/shell/shell.module.js +6 -2
  119. package/dist/lib/shell/shell.module.js.map +1 -1
  120. package/dist/lib/single-dashboard/single-dashboard.component.js +1 -1
  121. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  122. package/dist/lib/single-record/single-record.component.d.ts +12 -0
  123. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  124. package/dist/lib/single-record/single-record.component.js +49 -8
  125. package/dist/lib/single-record/single-record.component.js.map +1 -1
  126. package/dist/lib/template-user/template-user-banner.component.d.ts +20 -0
  127. package/dist/lib/template-user/template-user-banner.component.d.ts.map +1 -0
  128. package/dist/lib/template-user/template-user-banner.component.js +67 -0
  129. package/dist/lib/template-user/template-user-banner.component.js.map +1 -0
  130. package/dist/module.d.ts +61 -59
  131. package/dist/module.d.ts.map +1 -1
  132. package/dist/module.js +7 -0
  133. package/dist/module.js.map +1 -1
  134. package/dist/public-api.d.ts +1 -0
  135. package/dist/public-api.d.ts.map +1 -1
  136. package/dist/public-api.js +1 -0
  137. package/dist/public-api.js.map +1 -1
  138. package/package.json +58 -53
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-studio-tools.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/dashboard-studio-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Client tools that let an agent read and change the Config dashboard open in a\n * dashboard tab: its state and a screenshot of it, its panels and layout, the sources a panel can show,\n * and requests to the user to save it or pin it to Home. Pure functions over {@link DashboardStudioHost}:\n * the tab supplies the state, applies the edits, searches the sources and asks the user.\n *\n * 🔒 BOUNDARY: the edit tools change the open dashboard in memory only and never save it. The Request*\n * tools never save or pin: they ask the user in a confirm dialog, and the tab does what the user confirms.\n * The edit and Request* tools act only when their `dashboardId` is the open dashboard's id. Tool handlers\n * never throw: a bad parameter, a refused edit or a failed host call returns `{ Success: false, ErrorMessage }`.\n */\nimport type { ResolvedLayoutConfig } from 'golden-layout';\nimport type { MJDashboardPartTypeEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport {\n DescribePath,\n ExtractPanelsFromLayout,\n FindPanelPath,\n LayoutEditError,\n MovePanel,\n PANEL_PLACEMENTS,\n ResizePanel,\n SimplifyLayout,\n type DashboardConfig,\n type DashboardPanel,\n type LayoutPathStep,\n type PanelConfig,\n type PanelPosition,\n type SimplifiedLayoutNode,\n} from '@memberjunction/ng-dashboard-viewer';\nimport type { ElementCapture } from '@memberjunction/ng-shared';\nimport { DASHBOARD_TAB_AGENT_LIST_CAP, type DashboardTabAgentTool, type DashboardTabToolResult } from './dashboard-tab-agent';\nimport { DASHBOARD_PART_TYPE_NAMES, DescribePartConfigs, MergePartConfig, ValidatePartConfig, type DashboardPartTypeName } from './dashboard-part-config';\nimport { SOURCE_KINDS, type SourceKind, type SourceSearchResult } from './dashboard-source-search';\n\n/**\n * The reads and edits the studio tools make on the dashboard tab, and the requests they put to the user.\n * The tab implements it.\n *\n * How the tools use it, and what they need from it:\n * - The tools make at most one edit call at a time, unless an edit call does not settle within\n * DASHBOARD_STUDIO_EDIT_TIMEOUT_MS; then the next edit starts while the late call may still run and\n * overwrite it. The edit tools from one BuildDashboardStudioTools call share a queue: each reads the\n * dashboard, checks its call and awaits its one edit call (AddPanel, RemovePanel, UpdatePanelConfig or\n * ApplyLayout) only after the previous edit tool has finished. The next edit is checked against\n * GetConfig(), so an edit call resolves only once GetConfig() shows its change.\n * - An edit call must settle within DASHBOARD_STUDIO_EDIT_TIMEOUT_MS (30 seconds). When it does not, the tool\n * tells the agent that the edit did not finish in time, and the next edit starts.\n * - The tools that do not edit (the reads, the screenshot, the requests and the search) start after the\n * edits queued before them have finished or timed out.\n * - An edit that cannot be applied rejects with an Error that says why; it never drops a change\n * silently. The tools return the rejection to the agent as a failed result with that message.\n * - The tools never save or pin. Confirm asks the user, and the tab does what the user confirms.\n */\nexport interface DashboardStudioHost {\n /** The Config dashboard open in the tab, or null when none is loaded. */\n Dashboard(): { ID: string; Name: string; Description: string | null } | null;\n /** The dashboard configuration as the tab shows it now, with every panel in its layout. Null before it loads. */\n GetConfig(): DashboardConfig | null;\n /** The part types the dashboard can show. */\n GetPartTypes(): readonly Pick<MJDashboardPartTypeEntity, 'ID' | 'Name' | 'Icon'>[];\n /** True while the tab is in edit mode. */\n IsEditing(): boolean;\n /** True when the user may edit the dashboard. */\n CanEdit(): boolean;\n /** True when the dashboard has changes that are not saved. */\n HasUnsavedChanges(): boolean;\n /** True while a Save runs. */\n IsSaving(): boolean;\n /**\n * Puts the tab in edit mode when the user can edit. Returns whether the tab is editing afterwards.\n * Entering edit mode can reload the saved dashboard when it was saved elsewhere since it loaded.\n */\n EnterEditMode(): boolean;\n /**\n * Adds a panel and resolves with its id, or null when the dashboard did not add it. With a position,\n * the panel goes there; without one, it joins the first tab stack.\n */\n AddPanel(partTypeId: string, config: PanelConfig, title: string, icon: string | undefined, position: PanelPosition | undefined): Promise<string | null>;\n /** Removes a panel. */\n RemovePanel(panelId: string): Promise<void>;\n /** Gives a panel a new config, and a new title and icon when they are given. */\n UpdatePanelConfig(panelId: string, config: PanelConfig, title?: string, icon?: string): Promise<void>;\n /**\n * Shows a layout built with the layout editor functions and marks the dashboard changed. Resolves only\n * after GetConfig() returns the new layout; rejects when the rebuild fails.\n */\n ApplyLayout(layout: ResolvedLayoutConfig): Promise<void>;\n /** The panel's address in the layout, for example `row/0 › column/1 › tab 0`, or null when it is not in the layout. */\n GetPanelPath(panelId: string): string | null;\n /**\n * A JPEG of the dashboard as the tab shows it, at most `maxWidth` pixels wide. Rejects with an Error that\n * says why when the capture fails or takes too long.\n */\n CaptureScreenshot(maxWidth: number): Promise<ElementCapture>;\n /**\n * The box of each panel the tab shows, in CSS pixels relative to the top left corner of the element that\n * CaptureScreenshot captures. A panel that is not shown, such as one in a hidden tab, is left out.\n */\n PanelBounds(): Array<{ panelId: string; x: number; y: number; width: number; height: number }>;\n /** True while a voice session runs. */\n IsVoiceSessionActive(): boolean;\n /**\n * Sends an image to the running voice session as a video frame. `base64` has no data URL prefix. Returns\n * true when the voice session took the frame, and false when it did not.\n */\n SendVoiceFrame(base64: string, mimeType: string): boolean;\n /**\n * Opens a confirm dialog and resolves with the user's answer. `kind` picks the text, and `detail` gives the\n * name and description a save would apply. When the user confirms, the tab does what was asked as the\n * user's own action and then resolves true. Rejects with an Error that says why when it cannot ask, for\n * example while another request waits for an answer, or when the confirmed action fails.\n */\n Confirm(kind: 'save' | 'pin', detail: { name?: string; description?: string }): Promise<boolean>;\n /**\n * The sources the user may show in a panel that match `query`: up to `limit` of each kind in `kinds`, in\n * SOURCE_KINDS order, best match first. The user's access rules apply: artifacts the user can read, the\n * user's own and shared views, queries the user can run, and entities the user can read. Rejects with an\n * Error that says why when a list cannot be read.\n */\n SearchSources(query: string, kinds: readonly SourceKind[], limit: number): Promise<SourceSearchResult[]>;\n}\n\n/** How long, in milliseconds, the edit queue waits for one edit before it reports that the edit did not finish and starts the next edit. */\nexport const DASHBOARD_STUDIO_EDIT_TIMEOUT_MS = 30_000;\n\nconst NO_DASHBOARD = 'No Config dashboard is open in this tab.';\nconst DASHBOARD_CHANGED = 'The open dashboard changed. Call GetDashboardState and use its dashboard.id.';\nconst DASHBOARD_ID_REQUIRED = 'dashboardId is required: call GetDashboardState and pass its dashboard.id.';\nconst SAVE_IN_PROGRESS = 'A save is in progress. Try again when it finishes.';\nconst READ_STATE_HINT = 'Call GetDashboardState to see the dashboard as it is now.';\nconst EDIT_TIMED_OUT = `The edit did not finish within ${DASHBOARD_STUDIO_EDIT_TIMEOUT_MS / 1000} seconds. It may still apply later. ${READ_STATE_HINT}`;\nconst DASHBOARD_ID_NOTE = 'Pass the dashboard.id from GetDashboardState as dashboardId; the call fails when another dashboard is open.';\nconst EDIT_NOTE = `It changes the open dashboard in memory only, entering edit mode first if needed; only the user can save. ${DASHBOARD_ID_NOTE}`;\nconst DASHBOARD_ID_SCHEMA = { type: 'string', description: 'The dashboard.id from GetDashboardState.' };\nconst PANEL_ID_SCHEMA = { type: 'string', description: 'The panel id from GetDashboardState.' };\n/** The screenshot width ceiling, in pixels, when the agent gives none. */\nconst SCREENSHOT_MAX_WIDTH = 1280;\n/** The results of each kind SearchSources gives when the agent sets no limit. */\nconst SEARCH_LIMIT_DEFAULT = 20;\n/** The most results of each kind SearchSources gives. */\nconst SEARCH_LIMIT_MAX = 50;\n\n/** What a panel shows, read from its config: the kind of source, and its id or name when the config has them. */\nexport function DescribePanelSource(config: PanelConfig): { kind: string; id: string | null; name: string | null } {\n const text = (key: string): string | null => {\n const value = config[key];\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n };\n switch (config.type) {\n case 'View': {\n const viewId = text('viewId');\n return viewId ? { kind: 'view', id: viewId, name: null } : { kind: 'entity', id: null, name: text('entityName') };\n }\n case 'Query':\n return { kind: 'query', id: text('queryId'), name: text('queryName') };\n case 'Artifact':\n return { kind: 'artifact', id: text('artifactId'), name: null };\n case 'WebURL':\n return { kind: 'url', id: null, name: text('url') };\n default:\n return { kind: text('type')?.toLowerCase() ?? 'unknown', id: null, name: null };\n }\n}\n\n/**\n * The studio tools: GetDashboardState reads the open dashboard; AddPanel, RemovePanel, MovePanel,\n * ResizePanel and UpdatePanelSettings change its panels and layout in memory; GetDashboardScreenshot\n * captures it; RequestSaveDashboard and RequestPinToHome ask the user to save it or pin it to Home; and\n * SearchSources finds the sources a panel can show. The tools of one call share a queue: it runs their\n * edits one at a time, and the other tools start after the edits queued before them. So a tab registers\n * one set of tools and keeps it.\n */\nexport function BuildDashboardStudioTools(host: DashboardStudioHost): DashboardTabAgentTool[] {\n const edits = createEditQueue();\n return [\n getDashboardStateTool(host, edits),\n addPanelTool(host, edits),\n removePanelTool(host, edits),\n movePanelTool(host, edits),\n resizePanelTool(host, edits),\n updatePanelSettingsTool(host, edits),\n getDashboardScreenshotTool(host, edits),\n requestSaveDashboardTool(host, edits),\n requestPinToHomeTool(host, edits),\n searchSourcesTool(host, edits),\n ];\n}\n\n// ── tools ───────────────────────────────────────────────────────────────────\n\nfunction getDashboardStateTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'GetDashboardState',\n Description:\n 'Reads the dashboard open in this tab: its name, description and edit state (isEditing, canEdit, hasUnsavedChanges); every panel ' +\n 'with its id, title, icon, part type, source (view, entity, query, artifact or url), config, path and size; the layout tree; and ' +\n 'the part types it can add. A path is the panel\\'s address in the layout, for example row/0 › column/1 › tab 0. A size gives the ' +\n 'panel\\'s share in percent of the nearest row (widthPct) and column (heightPct) it shares with other panels, or null where it has ' +\n 'none. Call this before changing anything, and after a change fails. The edit and Request tools take its dashboard.id as ' +\n 'dashboardId. Read-only.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => runAfterEdits(edits, () => readState(host)),\n };\n}\n\nfunction addPanelTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'AddPanel',\n Description:\n `Adds a panel to the open dashboard. ${EDIT_NOTE} Pass the part type, its config without \"type\", and a title. Config keys by ` +\n `part type: ${DescribePartConfigs()}. Use SearchSources to find ids. position is optional: { relativeTo: <panel id>, placement: ` +\n 'left|right|above|below } puts the panel beside another panel, placement tab adds it to that panel\\'s tab stack, and ' +\n '{ placement: \"end\" } adds it at the right end of the layout; without a position the panel joins the first tab stack. ' +\n 'Returns the new panel\\'s id and path.',\n ParameterSchema: {\n type: 'object',\n properties: {\n dashboardId: DASHBOARD_ID_SCHEMA,\n partType: { type: 'string', enum: [...DASHBOARD_PART_TYPE_NAMES] },\n config: { type: 'object', description: 'The part config without \"type\".' },\n title: { type: 'string', description: 'The panel title.' },\n icon: { type: 'string', description: 'Optional Font Awesome classes, for example \"fa-solid fa-chart-line\".' },\n position: positionSchema('Optional. Where the panel goes.'),\n },\n required: ['dashboardId', 'partType', 'config', 'title'],\n },\n Handler: async params =>\n runEdit(edits, host, params, () => checkAddPanel(host, params), async add => {\n const panelId = await host.AddPanel(add.partTypeId, add.config, add.title, add.icon, add.position);\n if (!panelId) return fail(`The dashboard did not add the panel. ${READ_STATE_HINT}`);\n return { Success: true, Data: { panelId, path: host.GetPanelPath(panelId) } };\n }),\n };\n}\n\nfunction removePanelTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'RemovePanel',\n Description: `Removes a panel from the open dashboard. ${EDIT_NOTE} Pass the panel id from GetDashboardState.`,\n ParameterSchema: {\n type: 'object',\n properties: { dashboardId: DASHBOARD_ID_SCHEMA, panelId: PANEL_ID_SCHEMA },\n required: ['dashboardId', 'panelId'],\n },\n Handler: async params =>\n runEdit(edits, host, params, () => readPanel(params['panelId'], livePanels(host)), async panel => {\n await host.RemovePanel(panel.id);\n return { Success: true, Data: { removed: true, panelId: panel.id } };\n }),\n };\n}\n\nfunction movePanelTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'MovePanel',\n Description:\n 'Moves a panel beside another panel (left, right, above or below), into another panel\\'s tab stack (tab), or to the right end ' +\n `of the layout (end). ${EDIT_NOTE} The rows and columns the panel leaves and joins can share their space evenly afterwards; ` +\n 'adjust sizes with ResizePanel. Returns the panel\\'s new path.',\n ParameterSchema: {\n type: 'object',\n properties: { dashboardId: DASHBOARD_ID_SCHEMA, panelId: PANEL_ID_SCHEMA, position: positionSchema('Where the panel goes.') },\n required: ['dashboardId', 'panelId', 'position'],\n },\n Handler: async params =>\n runEdit(edits, host, params, () => checkMovePanel(host, params), async move => {\n await host.ApplyLayout(move.layout);\n return { Success: true, Data: { moved: true, panelId: move.panelId, path: host.GetPanelPath(move.panelId) } };\n }),\n };\n}\n\nfunction resizePanelTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'ResizePanel',\n Description:\n 'Sets a panel\\'s width as a share of its row (widthPct) or its height as a share of its column (heightPct), in percent; pass ' +\n `either or both. ${EDIT_NOTE} The size applies to the nearest row or column the panel shares with other panels, and the other ` +\n 'items there share the rest in proportion. A size stays between 5 and 95 and leaves every other item at least 5, so the panel ' +\n 'can get a different size than asked; the result gives the size it got.',\n ParameterSchema: {\n type: 'object',\n properties: {\n dashboardId: DASHBOARD_ID_SCHEMA,\n panelId: PANEL_ID_SCHEMA,\n widthPct: { type: 'number', description: 'The panel\\'s share of its row, in percent (5 to 95).' },\n heightPct: { type: 'number', description: 'The panel\\'s share of its column, in percent (5 to 95).' },\n },\n required: ['dashboardId', 'panelId'],\n },\n Handler: async params =>\n runEdit(edits, host, params, () => checkResizePanel(host, params), async resize => {\n await host.ApplyLayout(resize.layout);\n const size = readPanelSize(host.GetConfig()?.layout ?? null, resize.panelId);\n return { Success: true, Data: { resized: true, panelId: resize.panelId, size } };\n }),\n };\n}\n\nfunction updatePanelSettingsTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'UpdatePanelSettings',\n Description:\n `Changes a panel's config, title or icon. ${EDIT_NOTE} config is a patch with only the keys to change: it is merged over the ` +\n 'current config and checked again, and the part type cannot change. A key set to null is removed, and an empty config changes ' +\n `only the title or icon. Config keys by part type: ${DescribePartConfigs()}.`,\n ParameterSchema: {\n type: 'object',\n properties: {\n dashboardId: DASHBOARD_ID_SCHEMA,\n panelId: PANEL_ID_SCHEMA,\n config: { type: 'object', description: 'Only the config keys to change. null removes a key.' },\n title: { type: 'string', description: 'A new title.' },\n icon: { type: 'string', description: 'New Font Awesome classes.' },\n },\n required: ['dashboardId', 'panelId'],\n },\n Handler: async params =>\n runEdit(edits, host, params, () => checkPanelSettings(host, params), async change => {\n await host.UpdatePanelConfig(change.panelId, change.config, change.title, change.icon);\n return { Success: true, Data: { updated: true, panelId: change.panelId } };\n }),\n };\n}\n\nfunction getDashboardScreenshotTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'GetDashboardScreenshot',\n Description:\n 'A JPEG of the dashboard as the user sees it, with each panel\\'s bounds in image pixels. Use it only when a request depends on ' +\n 'how things look (crowded, empty, colours, overlap). Iframe panels (WebURL) and some cross-origin images render blank in the ' +\n 'capture, and only the shown tab of each tab stack is in it; that is a capture limit, not an empty panel. In a voice session ' +\n 'the image also goes to the voice model as a video frame; sentToVoice says whether the voice session took it. Prefer ' +\n 'GetDashboardState for structure. Read-only.',\n ParameterSchema: {\n type: 'object',\n properties: { maxWidth: { type: 'number', description: `Image width ceiling in pixels. Default ${SCREENSHOT_MAX_WIDTH}.` } },\n },\n Handler: async params => runAfterEdits(edits, () => takeScreenshot(host, params)),\n };\n}\n\nfunction requestSaveDashboardTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'RequestSaveDashboard',\n Description:\n 'Asks the user to save the open dashboard with a confirm dialog. The tool never saves by itself. An optional new name and ' +\n 'description are shown in the dialog, and the save applies them. A blank name or description is ignored, so the current ' +\n `one stays. ${DASHBOARD_ID_NOTE}`,\n ParameterSchema: {\n type: 'object',\n properties: {\n dashboardId: DASHBOARD_ID_SCHEMA,\n name: { type: 'string', description: 'Optional. A new name to save the dashboard with. A blank name is ignored.' },\n description: { type: 'string', description: 'Optional. A new description to save the dashboard with. A blank description is ignored.' },\n },\n required: ['dashboardId'],\n },\n Handler: async params => runAfterEdits(edits, () => requestSave(host, params)),\n };\n}\n\nfunction requestPinToHomeTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'RequestPinToHome',\n Description:\n 'Asks the user to pin the open dashboard to their Home app as a card, with a confirm dialog. The tool never pins by itself. ' +\n DASHBOARD_ID_NOTE,\n ParameterSchema: { type: 'object', properties: { dashboardId: DASHBOARD_ID_SCHEMA }, required: ['dashboardId'] },\n Handler: async params =>\n runAfterEdits(edits, async () => {\n const wrong = wrongDashboard(host, params['dashboardId']);\n if (wrong) return wrong;\n return confirmResult(await host.Confirm('pin', {}));\n }),\n };\n}\n\nfunction searchSourcesTool(host: DashboardStudioHost, edits: EditQueue): DashboardTabAgentTool {\n return {\n Name: 'SearchSources',\n Description:\n 'Finds the artifacts, saved views, queries and entities the user can show in a dashboard panel, by a word or phrase in their ' +\n 'name or description. Results come grouped by kind (artifact, view, query, entity), best match first: an exact name, then a ' +\n 'name that starts with the query, then a name that contains it, then a description that contains it. Each result has a ' +\n 'suggestedConfig for AddPanel: its type is the partType, and its other keys are the config. An entity result is a View ' +\n 'panel of all the entity\\'s records. fitsDashboard is false for an artifact type that does not suit a panel, such as code, ' +\n 'files and images; add one only when the user asks for that artifact. Read-only.',\n ParameterSchema: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'A word or phrase to find in names and descriptions, ignoring case. \"\" lists the first sources by name.' },\n kinds: { type: 'array', items: { type: 'string', enum: [...SOURCE_KINDS] }, description: 'The kinds to search. Default (missing or empty): every kind.' },\n limit: { type: 'number', description: `The most results of each kind: ${SEARCH_LIMIT_DEFAULT} by default, ${SEARCH_LIMIT_MAX} at most.` },\n },\n required: ['query'],\n },\n Handler: async params => runAfterEdits(edits, () => searchSources(host, params)),\n };\n}\n\n/** The JSON schema of a panel position. */\nfunction positionSchema(description: string): Record<string, unknown> {\n return {\n type: 'object',\n description: `${description} { relativeTo: <panel id>, placement: left|right|above|below|tab } or { placement: \"end\" }.`,\n properties: {\n relativeTo: { type: 'string', description: 'The id of the panel to place this one beside. Not used with placement \"end\".' },\n placement: { type: 'string', enum: [...PANEL_PLACEMENTS, 'end'] },\n },\n required: ['placement'],\n };\n}\n\n// ── running a tool ──────────────────────────────────────────────────────────\n\n/** A failure to return to the agent instead of a checked tool input. */\ntype Refusal = { ok: false; result: DashboardTabToolResult }; // case-violation-ok-legacy-back-compat: matches the { ok, … } discriminated-union shape the spec fixes for validators\n\n/** A checked tool input, or the failure to return to the agent. */\ntype Check<T> = { ok: true; value: T } | Refusal; // case-violation-ok-legacy-back-compat: matches the { ok, … } discriminated-union shape the spec fixes for validators\n\n/**\n * Runs edits one at a time, in the order they arrive. An edit that does not settle within\n * DASHBOARD_STUDIO_EDIT_TIMEOUT_MS gives a failure, and the next edit starts.\n */\ninterface EditQueue {\n /** Starts `edit` once every edit queued before it has finished or timed out, and settles with its result. */\n enqueue(edit: () => Promise<DashboardTabToolResult>): Promise<DashboardTabToolResult>;\n /** Resolves once every edit queued so far has finished or timed out. Never rejects. */\n whenIdle(): Promise<void>;\n}\n\nfunction fail(message: string): DashboardTabToolResult {\n return { Success: false, ErrorMessage: message };\n}\n\nfunction refuse(message: string): Refusal {\n return { ok: false, result: fail(message) };\n}\n\n/** Runs a tool body and returns its result, or a failure with the message of anything it throws. */\nasync function run(body: () => DashboardTabToolResult | Promise<DashboardTabToolResult>): Promise<DashboardTabToolResult> {\n try {\n return await body();\n } catch (error) {\n return fail(errorText(error));\n }\n}\n\n/**\n * A queue that starts each edit after the previous one has settled, whether it succeeded or failed, or\n * has timed out, so every edit reads and changes the dashboard as the edit before it left it.\n */\nfunction createEditQueue(): EditQueue {\n let tail: Promise<void> = Promise.resolve();\n return {\n enqueue: edit => {\n const result = tail.then(() => withEditTimeout(edit()));\n tail = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n },\n whenIdle: () => tail,\n };\n}\n\n/**\n * Settles like the running edit, or with a failure when the edit has not settled within\n * DASHBOARD_STUDIO_EDIT_TIMEOUT_MS. A rejected edit gives a failure with its message. An edit that timed\n * out keeps running, and its result is dropped.\n */\nfunction withEditTimeout(running: Promise<DashboardTabToolResult>): Promise<DashboardTabToolResult> {\n return new Promise<DashboardTabToolResult>(resolve => {\n const timer = setTimeout(() => resolve(fail(EDIT_TIMED_OUT)), DASHBOARD_STUDIO_EDIT_TIMEOUT_MS);\n running.then(\n result => {\n clearTimeout(timer);\n resolve(result);\n },\n error => {\n clearTimeout(timer);\n resolve(fail(errorText(error)));\n },\n );\n });\n}\n\n/**\n * Runs a tool that does not edit once the edits queued before it have finished, so it sees what they\n * changed. It does not hold the queue: an edit that arrives later can start while it runs.\n */\nfunction runAfterEdits(edits: EditQueue, body: () => DashboardTabToolResult | Promise<DashboardTabToolResult>): Promise<DashboardTabToolResult> {\n return run(async () => {\n await edits.whenIdle();\n return body();\n });\n}\n\n/**\n * Runs an edit tool in the edit queue, so it starts after the previous edit has finished or timed out. It\n * fails, before reading the rest of the call, when the call's `dashboardId` is not the open dashboard's\n * (see wrongDashboard) or the tab cannot take an edit (see editRefusal). Then `check` reads the call and\n * the dashboard and changes nothing, so a bad call leaves even the edit mode as it was. Then the tab\n * enters edit mode if it is not editing, and `check` runs again, because entering edit mode can reload\n * the saved dashboard. `apply` makes the edit by awaiting the host. A failure of the edit is returned\n * with its message, and an edit that does not finish within DASHBOARD_STUDIO_EDIT_TIMEOUT_MS gives a\n * failure that says so.\n */\nfunction runEdit<T>(\n edits: EditQueue,\n host: DashboardStudioHost,\n params: Record<string, unknown>,\n check: () => Check<T>,\n apply: (input: T) => Promise<DashboardTabToolResult>,\n): Promise<DashboardTabToolResult> {\n return edits.enqueue(() =>\n run(async () => {\n const refusal = wrongDashboard(host, params['dashboardId']) ?? editRefusal(host);\n if (refusal) return refusal;\n const first = check();\n if (!first.ok) return first.result;\n const wasEditing = host.IsEditing();\n if (!wasEditing && !host.EnterEditMode()) return fail('The dashboard could not enter edit mode.');\n const checked = wasEditing ? first : check();\n if (!checked.ok) return checked.result;\n try {\n return await apply(checked.value);\n } catch (error) {\n return fail(`${asSentence(errorText(error))} ${READ_STATE_HINT}`);\n }\n }),\n );\n}\n\n/**\n * Why a call cannot act on the open dashboard: none is open, the call gives no dashboardId, or its\n * dashboardId is another dashboard's, such as the one the tab showed when the agent read the state. Null\n * when the call names the open dashboard.\n */\nfunction wrongDashboard(host: DashboardStudioHost, raw: unknown): DashboardTabToolResult | null {\n const dashboard = host.Dashboard();\n if (!dashboard) return fail(NO_DASHBOARD);\n if (typeof raw !== 'string' || !raw.trim()) return fail(DASHBOARD_ID_REQUIRED);\n return UUIDsEqual(raw, dashboard.ID) ? null : fail(DASHBOARD_CHANGED);\n}\n\n/**\n * Why the tab cannot take an edit now: no dashboard is open or it is still loading, a save runs, or the\n * tab is not editing and the user cannot edit. Null when the edit can go ahead.\n */\nfunction editRefusal(host: DashboardStudioHost): DashboardTabToolResult | null {\n const open = openDashboard(host);\n if (!open.ok) return open.result;\n if (host.IsSaving()) return fail(SAVE_IN_PROGRESS);\n return host.IsEditing() || host.CanEdit() ? null : fail('The user cannot edit this dashboard.');\n}\n\n/** The open Config dashboard and its configuration, or a refusal when none is open or it has not loaded. */\nfunction openDashboard(host: DashboardStudioHost): Check<OpenDashboard> {\n const dashboard = host.Dashboard();\n if (!dashboard) return refuse(NO_DASHBOARD);\n const config = host.GetConfig();\n return config ? { ok: true, value: { dashboard, config } } : refuse('The dashboard is still loading. Try again in a moment.');\n}\n\n/** The message of a thrown value, or a stand-in when it has none. Never throws. */\nfunction errorText(error: unknown): string {\n try {\n const text = error instanceof Error ? error.message : String(error);\n if (typeof text === 'string' && text.trim()) return text.trim();\n } catch {\n // A thrown value that cannot be turned into text gets the stand-in below.\n }\n return 'The dashboard reported an error without a message.';\n}\n\n/** The text with a full stop at the end, unless it already ends a sentence. */\nfunction asSentence(text: string): string {\n return /[.!?]$/.test(text) ? text : `${text}.`;\n}\n\n// ── reading the dashboard ───────────────────────────────────────────────────\n\n/** The open dashboard and the configuration the tab shows. */\ninterface OpenDashboard {\n dashboard: NonNullable<ReturnType<DashboardStudioHost['Dashboard']>>;\n config: DashboardConfig;\n}\n\n/** A panel's share, in whole percent, of the nearest row (width) and column (height) it shares with other items. */\ninterface PanelSize {\n widthPct: number | null;\n heightPct: number | null;\n}\n\nfunction readState(host: DashboardStudioHost): DashboardTabToolResult {\n const open = openDashboard(host);\n if (!open.ok) return open.result;\n const { dashboard, config } = open.value;\n const partTypes = host.GetPartTypes();\n const tree = SimplifyLayout(config.layout);\n const panels = ExtractPanelsFromLayout(config.layout).map(panel => {\n const path = FindPanelPath(config.layout, panel.id);\n return {\n id: panel.id,\n title: panel.title,\n icon: panel.icon ?? null,\n partType: partTypes.find(pt => UUIDsEqual(pt.ID, panel.partTypeId))?.Name || panel.config.type || 'Unknown',\n source: DescribePanelSource(panel.config),\n config: panel.config,\n path: path ? DescribePath(path) : null,\n size: sizeOnPath(tree, path),\n };\n });\n return {\n Success: true,\n Data: {\n dashboard: {\n id: dashboard.ID,\n name: dashboard.Name,\n description: dashboard.Description,\n isEditing: host.IsEditing(),\n canEdit: host.CanEdit(),\n hasUnsavedChanges: host.HasUnsavedChanges(),\n },\n panels,\n layout: tree,\n partTypes: partTypes.map(pt => pt.Name),\n },\n };\n}\n\n/** The panels in the layout the tab shows now. */\nfunction livePanels(host: DashboardStudioHost): DashboardPanel[] {\n return ExtractPanelsFromLayout(host.GetConfig()?.layout ?? null);\n}\n\n/** The panel's size in the layout. */\nfunction readPanelSize(layout: ResolvedLayoutConfig | null, panelId: string): PanelSize {\n return sizeOnPath(SimplifyLayout(layout), FindPanelPath(layout, panelId));\n}\n\n/**\n * The size of the panel at the end of `path`, read from the simplified layout: the share of the item on\n * the path in the nearest row, and in the nearest column, that holds more than one item. The layout\n * editor resizes the same row and column. A share is null when there is no such row or column.\n */\nfunction sizeOnPath(tree: SimplifiedLayoutNode | null, path: LayoutPathStep[] | null): PanelSize {\n const size: PanelSize = { widthPct: null, heightPct: null };\n let node = tree;\n for (const step of path ?? []) {\n const children = node?.children ?? [];\n const child = children[step.index] ?? null;\n if (node && (node.kind === 'row' || node.kind === 'column') && children.length > 1) {\n size[node.kind === 'row' ? 'widthPct' : 'heightPct'] = child?.sizePct ?? null;\n }\n node = child;\n }\n return size;\n}\n\n// ── the screenshot ──────────────────────────────────────────────────────────\n\n/** A panel's box: in CSS pixels as the host gives it, or in image pixels in the tool result. */\ntype PanelBox = ReturnType<DashboardStudioHost['PanelBounds']>[number];\n\n/** Captures the dashboard, gives the panel bounds in image pixels, and sends the image to a running voice session. */\nasync function takeScreenshot(host: DashboardStudioHost, params: Record<string, unknown>): Promise<DashboardTabToolResult> {\n const open = openDashboard(host);\n if (!open.ok) return open.result;\n const maxWidth = readMaxWidth(params['maxWidth']);\n if (!maxWidth.ok) return maxWidth.result;\n const image = await captureScreenshot(host, maxWidth.value);\n if (!image.ok) return image.result;\n const capture = image.value;\n const panelBounds = boundsInImage(host.PanelBounds(), capture.Width);\n return {\n Success: true,\n Data: { width: capture.Width, height: capture.Height, panelBounds, ...sendToVoice(host, capture) },\n Media: [{ MimeType: capture.MimeType, Base64: capture.Base64, Width: capture.Width, Height: capture.Height }],\n };\n}\n\n/** The screenshot, or a refusal that gives the reason the capture failed. */\nasync function captureScreenshot(host: DashboardStudioHost, maxWidth: number): Promise<Check<ElementCapture>> {\n try {\n return { ok: true, value: await host.CaptureScreenshot(maxWidth) };\n } catch (error) {\n return refuse(`Screenshot failed: ${asSentence(errorText(error))} Use GetDashboardState for the layout instead.`);\n }\n}\n\n/**\n * The panel bounds in image pixels. The host gives them in CSS pixels relative to the captured element,\n * which the panels fill from side to side, so the scale is the image width over the right edge of the\n * rightmost panel. With no panels, or a right edge under 1 CSS pixel (the panels have no size on screen),\n * the bounds cannot be scaled and none are given.\n */\nfunction boundsInImage(bounds: readonly PanelBox[], imageWidth: number): PanelBox[] {\n const rightEdge = Math.max(...bounds.map(b => b.x + b.width));\n if (!Number.isFinite(rightEdge) || rightEdge < 1) return [];\n const scale = imageWidth / rightEdge;\n return bounds.map(b => ({\n panelId: b.panelId,\n x: Math.round(b.x * scale),\n y: Math.round(b.y * scale),\n width: Math.round(b.width * scale),\n height: Math.round(b.height * scale),\n }));\n}\n\n/**\n * Sends the screenshot to the running voice session as a video frame. `sentToVoice` says whether the voice\n * session took it; a send that throws is reported in `voiceFrameError` and does not fail the screenshot.\n */\nfunction sendToVoice(host: DashboardStudioHost, capture: ElementCapture): { sentToVoice: boolean; voiceFrameError?: string } {\n if (!host.IsVoiceSessionActive()) return { sentToVoice: false };\n try {\n return { sentToVoice: host.SendVoiceFrame(capture.Base64, capture.MimeType) === true };\n } catch (error) {\n return { sentToVoice: false, voiceFrameError: errorText(error) };\n }\n}\n\n// ── requests to the user ────────────────────────────────────────────────────\n\n/** Asks the user to save the open dashboard, with the new name and description the agent gives. */\nasync function requestSave(host: DashboardStudioHost, params: Record<string, unknown>): Promise<DashboardTabToolResult> {\n const wrong = wrongDashboard(host, params['dashboardId']);\n if (wrong) return wrong;\n const open = openDashboard(host);\n if (!open.ok) return open.result;\n if (host.IsSaving()) return fail(SAVE_IN_PROGRESS);\n if (!host.IsEditing() && !host.HasUnsavedChanges()) return fail('There is nothing to save: the dashboard is not being edited.');\n const name = readOptionalText(params['name'], 'name');\n if (!name.ok) return name.result;\n const description = readOptionalText(params['description'], 'description');\n if (!description.ok) return description.result;\n return confirmResult(await host.Confirm('save', { name: name.value, description: description.value }));\n}\n\n/** The result of a Request* tool for the user's answer. A decline is a failure the agent relays without retrying. */\nfunction confirmResult(confirmed: boolean): DashboardTabToolResult {\n return confirmed\n ? { Success: true, Data: { requested: true, confirmed: true } }\n : fail('The user declined. Do not retry unless they ask again.');\n}\n\n// ── searching sources ───────────────────────────────────────────────────────\n\n/** Searches the sources a panel can show with the agent's query, kinds and limit. Data names the kinds it ignored. */\nasync function searchSources(host: DashboardStudioHost, params: Record<string, unknown>): Promise<DashboardTabToolResult> {\n const query = readSearchQuery(params['query']);\n if (!query.ok) return query.result;\n const kinds = readSourceKinds(params['kinds']);\n if (!kinds.ok) return kinds.result;\n const limit = readSearchLimit(params['limit']);\n if (!limit.ok) return limit.result;\n const results = await host.SearchSources(query.value, kinds.value.kinds, limit.value);\n const ignored = kinds.value.ignored;\n return { Success: true, Data: { count: results.length, results, ...(ignored.length > 0 ? { ignoredKinds: ignored } : {}) } };\n}\n\n// ── checking edit calls ─────────────────────────────────────────────────────\n\n/** A checked AddPanel call. */\ninterface PanelToAdd {\n partTypeId: string;\n config: PanelConfig;\n title: string;\n icon: string | undefined;\n position: PanelPosition | undefined;\n}\n\n/** A layout edit made by the layout editor, ready to apply. */\ninterface LayoutChange {\n panelId: string;\n layout: ResolvedLayoutConfig;\n}\n\n/** A checked UpdatePanelSettings call. */\ninterface PanelSettingsChange {\n panelId: string;\n config: PanelConfig;\n title: string | undefined;\n icon: string | undefined;\n}\n\n/** A config key that the part type's rules reject, with the validator's reason. */\ninterface KeyProblem {\n key: string;\n reason: string;\n}\n\nfunction checkAddPanel(host: DashboardStudioHost, params: Record<string, unknown>): Check<PanelToAdd> {\n const partTypeName = readPartTypeName(params['partType']);\n if (!partTypeName.ok) return partTypeName;\n const name = partTypeName.value;\n const partTypes = host.GetPartTypes();\n const partType = partTypes.find(pt => namesMatch(pt.Name, name));\n if (!partType) return refuse(`The ${name} part type is not available in this dashboard. Part types it can add: ${listAddablePartTypes(partTypes)}.`);\n const config = ValidatePartConfig(name, params['config']);\n if (!config.ok) return refuse(config.error);\n const title = readText(params['title'], 'title');\n if (!title.ok) return title;\n const icon = readOptionalText(params['icon'], 'icon');\n if (!icon.ok) return icon;\n const position = readPosition(params['position'], livePanels(host), null);\n if (!position.ok) return position;\n return { ok: true, value: { partTypeId: partType.ID, config: config.config, title: title.value, icon: icon.value, position: position.value } };\n}\n\nfunction checkMovePanel(host: DashboardStudioHost, params: Record<string, unknown>): Check<LayoutChange> {\n const layout = host.GetConfig()?.layout ?? null;\n const panels = ExtractPanelsFromLayout(layout);\n const panel = readPanel(params['panelId'], panels);\n if (!panel.ok) return panel;\n const panelId = panel.value.id;\n const position = readPosition(params['position'], panels, panelId);\n if (!position.ok) return position;\n const target = position.value;\n if (!target) return refuse('position is required: { relativeTo: <panel id>, placement: left|right|above|below|tab } or { placement: \"end\" }.');\n return editLayout(panelId, () => MovePanel(layout, panelId, target));\n}\n\nfunction checkResizePanel(host: DashboardStudioHost, params: Record<string, unknown>): Check<LayoutChange> {\n const layout = host.GetConfig()?.layout ?? null;\n const panel = readPanel(params['panelId'], ExtractPanelsFromLayout(layout));\n if (!panel.ok) return panel;\n const panelId = panel.value.id;\n const widthPct = readPercent(params['widthPct'], 'widthPct');\n if (!widthPct.ok) return widthPct;\n const heightPct = readPercent(params['heightPct'], 'heightPct');\n if (!heightPct.ok) return heightPct;\n if (widthPct.value === undefined && heightPct.value === undefined) return refuse('Pass widthPct, heightPct or both.');\n const size = { widthPct: widthPct.value, heightPct: heightPct.value };\n return editLayout(panelId, () => ResizePanel(layout, panelId, size));\n}\n\nfunction checkPanelSettings(host: DashboardStudioHost, params: Record<string, unknown>): Check<PanelSettingsChange> {\n const panel = readPanel(params['panelId'], livePanels(host));\n if (!panel.ok) return panel;\n const title = readOptionalText(params['title'], 'title');\n if (!title.ok) return title;\n const icon = readOptionalText(params['icon'], 'icon');\n if (!icon.ok) return icon;\n const patch = readConfigPatch(params['config']);\n if (!patch.ok) return patch;\n if (!patch.value && title.value === undefined && icon.value === undefined) return refuse('Pass config, title or icon to change.');\n const config: Check<PanelConfig> = patch.value ? patchConfig(host, panel.value, patch.value) : { ok: true, value: panel.value.config };\n if (!config.ok) return config;\n return { ok: true, value: { panelId: panel.value.id, config: config.value, title: title.value, icon: icon.value } };\n}\n\n/**\n * The panel's config with the patch merged over it and checked against the panel's part type. A key the\n * patch sets to null is removed first. When the merged config fails because of values the patch did not\n * send, the refusal says that the panel's current config is invalid and names those keys.\n */\nfunction patchConfig(host: DashboardStudioHost, panel: DashboardPanel, patch: Record<string, unknown>): Check<PanelConfig> {\n const partTypeName = configRulesName(host, panel);\n if (!partTypeName) {\n return refuse(`Panel \"${panel.title}\" is a ${panel.config.type || 'custom'} part; only its title and icon can be changed here.`);\n }\n const merged = withoutNullKeys(MergePartConfig(panel.config, patch), patch);\n const checked = ValidatePartConfig(partTypeName, merged);\n if (checked.ok) return { ok: true, value: checked.config };\n const stored = rejectedKeys(partTypeName, merged).filter(problem => !Object.hasOwn(patch, problem.key));\n return refuse(stored.length ? invalidCurrentConfig(panel, stored) : checked.error);\n}\n\n/** A copy of the merged config without the keys the patch sets to null. `type` stays. */\nfunction withoutNullKeys(merged: PanelConfig, patch: Record<string, unknown>): PanelConfig {\n const config: PanelConfig = { ...merged };\n for (const [key, value] of Object.entries(patch)) {\n if (value === null && key !== 'type') delete config[key];\n }\n return config;\n}\n\n/**\n * The keys of `config` that the part type's rules reject: keys the rules do not allow, and values that fail\n * their key's rule. Each key is checked beside one key that is valid on its own (a required key with a good\n * value), so a missing required key is never counted. Empty when no key is valid on its own.\n */\nfunction rejectedKeys(partType: DashboardPartTypeName, config: PanelConfig): KeyProblem[] {\n const entries = Object.entries(config).filter(([key]) => key !== 'type');\n const anchor = entries.find(([key, value]) => ValidatePartConfig(partType, { [key]: value }).ok);\n if (!anchor) return [];\n const [anchorKey, anchorValue] = anchor;\n return entries.flatMap(([key, value]) => {\n if (key === anchorKey) return [];\n const probe = ValidatePartConfig(partType, { [anchorKey]: anchorValue, [key]: value });\n return probe.ok ? [] : [{ key, reason: probe.error }];\n });\n}\n\n/** The refusal for a patch that fails because of values the panel holds and the call did not send. */\nfunction invalidCurrentConfig(panel: DashboardPanel, problems: readonly KeyProblem[]): string {\n const reasons = problems.map(problem => problem.reason).join(' ');\n const keys = problems.map(problem => problem.key).join(' and ');\n return (\n `The current config of panel \"${panel.title}\" is invalid, in values this call did not send: ${reasons} ` +\n `Send a valid value or null (which removes the key) for ${keys}, or change only the title or icon.`\n );\n}\n\n/** The part type whose config rules apply to the panel: its installed part type's name, else its config type. Null for other part types. */\nfunction configRulesName(host: DashboardStudioHost, panel: DashboardPanel): DashboardPartTypeName | null {\n const installed = host.GetPartTypes().find(pt => UUIDsEqual(pt.ID, panel.partTypeId));\n const name = installed?.Name || panel.config.type;\n return DASHBOARD_PART_TYPE_NAMES.find(known => namesMatch(name, known)) ?? null;\n}\n\n/** The layout an editor function returns, or a refusal for the LayoutEditError it throws. Other errors propagate. */\nfunction editLayout(panelId: string, edit: () => ResolvedLayoutConfig): Check<LayoutChange> {\n try {\n return { ok: true, value: { panelId, layout: edit() } };\n } catch (error) {\n if (error instanceof LayoutEditError) return refuse(error.message);\n throw error;\n }\n}\n\n// ── reading parameters ──────────────────────────────────────────────────────\n\nfunction readPartTypeName(raw: unknown): Check<DashboardPartTypeName> {\n const name = DASHBOARD_PART_TYPE_NAMES.find(known => namesMatch(raw, known));\n return name ? { ok: true, value: name } : refuse(`partType must be one of ${DASHBOARD_PART_TYPE_NAMES.join(', ')}.`);\n}\n\n/** Required text, trimmed. */\nfunction readText(raw: unknown, name: string): Check<string> {\n return typeof raw === 'string' && raw.trim() ? { ok: true, value: raw.trim() } : refuse(`${name} must be a non-empty string.`);\n}\n\n/** Optional text, trimmed; missing or blank text is undefined. */\nfunction readOptionalText(raw: unknown, name: string): Check<string | undefined> {\n if (raw === undefined || raw === null) return { ok: true, value: undefined };\n if (typeof raw !== 'string') return refuse(`${name} must be a string.`);\n return { ok: true, value: raw.trim() || undefined };\n}\n\n/** An optional percentage. The layout editor keeps a size it applies within its bounds. */\nfunction readPercent(raw: unknown, name: string): Check<number | undefined> {\n if (raw === undefined || raw === null) return { ok: true, value: undefined };\n return typeof raw === 'number' && Number.isFinite(raw) ? { ok: true, value: raw } : refuse(`${name} must be a number, such as 40 for 40%.`);\n}\n\n/** The screenshot width ceiling: a number of pixels, rounded, or the default when none is given. */\nfunction readMaxWidth(raw: unknown): Check<number> {\n if (raw === undefined || raw === null) return { ok: true, value: SCREENSHOT_MAX_WIDTH };\n return typeof raw === 'number' && Number.isFinite(raw) && raw >= 1\n ? { ok: true, value: Math.round(raw) }\n : refuse(`maxWidth must be a number of pixels, such as ${SCREENSHOT_MAX_WIDTH}.`);\n}\n\n/** The search query, trimmed. A missing query is the empty query, which lists the first sources by name. */\nfunction readSearchQuery(raw: unknown): Check<string> {\n if (raw === undefined || raw === null) return { ok: true, value: '' };\n return typeof raw === 'string'\n ? { ok: true, value: raw.trim() }\n : refuse('query must be text: a word or phrase from a name or description, or \"\" to list the first sources by name.');\n}\n\n/**\n * The source kinds to search, in SOURCE_KINDS order, matched ignoring case and outer spaces, and the entries\n * that name no kind. A missing or empty list means every kind.\n */\nfunction readSourceKinds(raw: unknown): Check<{ kinds: readonly SourceKind[]; ignored: unknown[] }> {\n if (raw === undefined || raw === null) return { ok: true, value: { kinds: SOURCE_KINDS, ignored: [] } };\n if (!Array.isArray(raw)) return refuse(`kinds must be a list of source kinds: ${SOURCE_KINDS.join(', ')}.`);\n const entries: unknown[] = raw;\n if (entries.length === 0) return { ok: true, value: { kinds: SOURCE_KINDS, ignored: [] } };\n const kinds = SOURCE_KINDS.filter(kind => entries.some(entry => namesMatch(entry, kind)));\n if (kinds.length === 0) return refuse(`kinds must contain one of ${SOURCE_KINDS.join(', ')}.`);\n return { ok: true, value: { kinds, ignored: entries.filter(entry => !SOURCE_KINDS.some(kind => namesMatch(entry, kind))) } };\n}\n\n/** The most search results of each kind: a number of at least 1, rounded and capped at SEARCH_LIMIT_MAX, or the default when none is given. */\nfunction readSearchLimit(raw: unknown): Check<number> {\n if (raw === undefined || raw === null) return { ok: true, value: SEARCH_LIMIT_DEFAULT };\n return typeof raw === 'number' && Number.isFinite(raw) && raw >= 1\n ? { ok: true, value: Math.min(SEARCH_LIMIT_MAX, Math.round(raw)) }\n : refuse(`limit must be a number of results per kind, such as ${SEARCH_LIMIT_DEFAULT} (at most ${SEARCH_LIMIT_MAX}).`);\n}\n\n/** The config patch, or undefined when there is none: a missing, null or empty config changes no config key. */\nfunction readConfigPatch(raw: unknown): Check<Record<string, unknown> | undefined> {\n if (raw === undefined || raw === null) return { ok: true, value: undefined };\n if (!isRecord(raw)) return refuse('config must be an object with the config keys to change.');\n return { ok: true, value: Object.keys(raw).length > 0 ? raw : undefined };\n}\n\n/**\n * The panel with this id, else the one panel with this title (ignoring case). A failure names the\n * parameter it read (`name`) and lists the panels.\n */\nfunction readPanel(raw: unknown, panels: readonly DashboardPanel[], name = 'panelId'): Check<DashboardPanel> {\n const key = typeof raw === 'string' ? raw.trim() : '';\n if (!key) return refuse(`${name} is required: pass the id of a panel from GetDashboardState. Panels: ${listPanels(panels)}.`);\n const byId = panels.find(p => p.id === key);\n if (byId) return { ok: true, value: byId };\n const byTitle = panels.filter(p => namesMatch(p.title, key));\n if (byTitle.length === 1) return { ok: true, value: byTitle[0] };\n if (byTitle.length > 1) return refuse(`${name} \"${key}\" matches more than one panel title: ${listPanels(byTitle)}. Pass a panel id.`);\n return refuse(`${name} \"${key}\" matches no panel id or title. Panels: ${listPanels(panels)}.`);\n}\n\n/**\n * An optional position: `{ placement: 'end' }`, or a placement beside the `relativeTo` panel. A panel\n * being moved (`movingId`) cannot be placed relative to itself.\n */\nfunction readPosition(raw: unknown, panels: readonly DashboardPanel[], movingId: string | null): Check<PanelPosition | undefined> {\n if (raw === undefined || raw === null) return { ok: true, value: undefined };\n if (!isRecord(raw)) {\n return refuse('position must be an object: { relativeTo: <panel id>, placement: left|right|above|below|tab } or { placement: \"end\" }.');\n }\n const requested = raw['placement'];\n const placementName = typeof requested === 'string' ? requested.trim().toLowerCase() : '';\n if (placementName === 'end') return { ok: true, value: { placement: 'end' } };\n const placement = PANEL_PLACEMENTS.find(known => known === placementName);\n if (!placement) return refuse(`position.placement must be one of ${[...PANEL_PLACEMENTS, 'end'].join(', ')}.`);\n const relativeTo = raw['relativeTo'];\n if (typeof relativeTo !== 'string' || !relativeTo.trim()) {\n return refuse(`position.relativeTo is required for placement \"${placement}\": pass the id of a panel from GetDashboardState.`);\n }\n const target = readPanel(relativeTo, panels, 'position.relativeTo');\n if (!target.ok) return target;\n if (target.value.id === movingId) return refuse('A panel cannot be placed relative to itself.');\n return { ok: true, value: { relativeTo: target.value.id, placement } };\n}\n\n/** \"Title (id)\" for each panel, at most DASHBOARD_TAB_AGENT_LIST_CAP of them, or \"(none)\". */\nfunction listPanels(panels: readonly DashboardPanel[]): string {\n if (panels.length === 0) return '(none)';\n const listed = panels.slice(0, DASHBOARD_TAB_AGENT_LIST_CAP).map(p => `${p.title || '(untitled)'} (${p.id})`).join(', ');\n const more = panels.length - DASHBOARD_TAB_AGENT_LIST_CAP;\n return more > 0 ? `${listed} and ${more} more` : listed;\n}\n\n/** The part types AddPanel can add that the dashboard has, by name, or \"(none)\". */\nfunction listAddablePartTypes(partTypes: readonly Pick<MJDashboardPartTypeEntity, 'Name'>[]): string {\n const names = DASHBOARD_PART_TYPE_NAMES.filter(name => partTypes.some(pt => namesMatch(pt.Name, name)));\n return names.length > 0 ? names.join(', ') : '(none)';\n}\n\n/** True when `raw` is text that equals `name`, ignoring case and outer spaces. */\nfunction namesMatch(raw: unknown, name: string): boolean {\n return typeof raw === 'string' && raw.trim().toLowerCase() === name.toLowerCase();\n}\n\n/** True for an object that is not null and not an array. */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @fileoverview Agent context and client tools for a Config dashboard open in a dashboard tab.
3
+ * Pure functions: the tab supplies its state and reads through {@link DashboardTabAgentHost}.
4
+ * Tool handlers never throw; a bad parameter or a failed read returns a failure result.
5
+ *
6
+ * 🔒 BOUNDARY: the tab's agent tools change the open dashboard in memory only. Save, Share,
7
+ * Favorite and Pin stay user actions; the Request* tools in dashboard-studio-tools.ts ask
8
+ * for them through a confirm dialog and never perform them.
9
+ */
10
+ import type { ClientToolMediaItem } from '@memberjunction/ai-core-plus';
11
+ import type { DashboardUserPermissions, MJDashboardEntity, MJDashboardPartTypeEntity } from '@memberjunction/core-entities';
12
+ import type { DashboardPanel } from '@memberjunction/ng-dashboard-viewer';
13
+ /** The most panels, or dashboard names, that one context field or error message lists. */
14
+ export declare const DASHBOARD_TAB_AGENT_LIST_CAP = 25;
15
+ /** The dashboard fields the agent helpers read. */
16
+ export type DashboardTabDashboard = Pick<MJDashboardEntity, 'ID' | 'Name' | 'Type' | 'Description' | 'User' | 'Category' | 'CategoryID' | 'UIConfigDetails' | '__mj_CreatedAt' | '__mj_UpdatedAt'>;
17
+ /** The panel fields a panel summary reads. */
18
+ export type DashboardTabPanel = Pick<DashboardPanel, 'id' | 'title' | 'icon' | 'partTypeId' | 'config'>;
19
+ /** The part type fields a panel summary reads. */
20
+ export type DashboardTabPartType = Pick<MJDashboardPartTypeEntity, 'ID' | 'Name' | 'Icon'>;
21
+ /** One panel of a dashboard, as the agent sees it. */
22
+ export interface DashboardPanelSummary {
23
+ /** The panel id, which the studio tools take as panelId. */
24
+ Id: string;
25
+ Title: string;
26
+ /** The part type name, for example View, Query or WebURL. */
27
+ PartTypeName: string;
28
+ Icon?: string;
29
+ }
30
+ /** The tab state that the agent context reports. */
31
+ export interface DashboardTabAgentState {
32
+ Dashboard: Pick<MJDashboardEntity, 'ID' | 'Name' | 'Type'>;
33
+ IsEditing: boolean;
34
+ CanEdit: boolean;
35
+ Panels: readonly DashboardPanelSummary[];
36
+ IsFavorite: boolean;
37
+ IsPinnedToHome: boolean;
38
+ }
39
+ /** The result of a tab tool: data on success, else a message the agent can act on. */
40
+ export interface DashboardTabToolResult {
41
+ Success: boolean;
42
+ ErrorMessage?: string;
43
+ Data?: Record<string, unknown>;
44
+ /** Images for the model, when the tool returns any. */
45
+ Media?: ClientToolMediaItem[];
46
+ }
47
+ /** A client tool, in the shape `NavigationService.SetAgentClientTools` takes. */
48
+ export interface DashboardTabAgentTool {
49
+ Name: string;
50
+ Description: string;
51
+ ParameterSchema: Record<string, unknown>;
52
+ Handler: (params: Record<string, unknown>) => Promise<DashboardTabToolResult>;
53
+ }
54
+ /** The reads the tab tools make from the tab. */
55
+ export interface DashboardTabAgentHost {
56
+ /** The dashboard open in the tab, or null when none is loaded. */
57
+ CurrentDashboard(): DashboardTabDashboard | null;
58
+ /** The dashboards the user can read. */
59
+ AccessibleDashboards(): readonly DashboardTabDashboard[];
60
+ /** The panels of a dashboard: the live layout for the open one, the saved layout for others. */
61
+ Panels(dashboard: DashboardTabDashboard): DashboardPanelSummary[];
62
+ /** The user's access to a dashboard. */
63
+ Permissions(dashboardId: string): DashboardUserPermissions;
64
+ }
65
+ /** The dashboard a tool works on, or the failure to return to the agent. */
66
+ export type DashboardToolLookup = {
67
+ ok: true;
68
+ dashboard: DashboardTabDashboard;
69
+ } | {
70
+ ok: false;
71
+ result: DashboardTabToolResult;
72
+ };
73
+ /**
74
+ * Summaries of the given panels. The part type name comes from `partTypes` (matched on the panel's
75
+ * part type ID), else from the panel's config type.
76
+ */
77
+ export declare function SummarizeDashboardPanels(panels: readonly DashboardTabPanel[], partTypes: readonly DashboardTabPartType[]): DashboardPanelSummary[];
78
+ /** The agent context for the tab. Lists at most {@link DASHBOARD_TAB_AGENT_LIST_CAP} panels; the count covers all. */
79
+ export declare function BuildDashboardTabAgentContext(state: DashboardTabAgentState): Record<string, unknown>;
80
+ /**
81
+ * The dashboard a tool names: an exact ID match first, then a name match that ignores case.
82
+ * With no name or ID, the dashboard open in the tab.
83
+ */
84
+ export declare function ResolveToolDashboard(raw: unknown, current: DashboardTabDashboard | null, accessible: readonly DashboardTabDashboard[]): DashboardToolLookup;
85
+ /** The tab's read-only client tools. */
86
+ export declare function BuildDashboardTabAgentTools(host: DashboardTabAgentHost): DashboardTabAgentTool[];
87
+ //# sourceMappingURL=dashboard-tab-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-tab-agent.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/dashboard-tab-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { UUIDsEqual } from '@memberjunction/global';
2
+ /** The most panels, or dashboard names, that one context field or error message lists. */
3
+ export const DASHBOARD_TAB_AGENT_LIST_CAP = 25;
4
+ const DASHBOARD_PARAMETER_SCHEMA = {
5
+ type: 'object',
6
+ properties: {
7
+ dashboardId: { type: 'string', description: 'Optional dashboard ID or name. Defaults to the dashboard open in this tab.' },
8
+ },
9
+ };
10
+ /**
11
+ * Summaries of the given panels. The part type name comes from `partTypes` (matched on the panel's
12
+ * part type ID), else from the panel's config type.
13
+ */
14
+ export function SummarizeDashboardPanels(panels, partTypes) {
15
+ return panels.map(panel => {
16
+ const partType = partTypes.find(pt => UUIDsEqual(pt.ID, panel.partTypeId));
17
+ const summary = {
18
+ Id: panel.id,
19
+ Title: panel.title || '(untitled panel)',
20
+ PartTypeName: partType?.Name || panel.config?.type || 'Unknown',
21
+ };
22
+ const icon = panel.icon || partType?.Icon;
23
+ if (icon) {
24
+ summary.Icon = icon;
25
+ }
26
+ return summary;
27
+ });
28
+ }
29
+ /** The agent context for the tab. Lists at most {@link DASHBOARD_TAB_AGENT_LIST_CAP} panels; the count covers all. */
30
+ export function BuildDashboardTabAgentContext(state) {
31
+ return {
32
+ OpenedDashboardId: state.Dashboard.ID,
33
+ OpenedDashboardName: state.Dashboard.Name,
34
+ OpenedDashboardType: state.Dashboard.Type,
35
+ OpenedDashboardIsEditing: state.IsEditing,
36
+ OpenedDashboardCanEdit: state.CanEdit,
37
+ OpenedDashboardPanelCount: state.Panels.length,
38
+ OpenedDashboardPanels: state.Panels.slice(0, DASHBOARD_TAB_AGENT_LIST_CAP),
39
+ IsFavorite: state.IsFavorite,
40
+ IsPinnedToHome: state.IsPinnedToHome,
41
+ };
42
+ }
43
+ /**
44
+ * The dashboard a tool names: an exact ID match first, then a name match that ignores case.
45
+ * With no name or ID, the dashboard open in the tab.
46
+ */
47
+ export function ResolveToolDashboard(raw, current, accessible) {
48
+ const value = typeof raw === 'string' ? raw.trim() : '';
49
+ if (!value) {
50
+ return current
51
+ ? { ok: true, dashboard: current }
52
+ : { ok: false, result: { Success: false, ErrorMessage: 'No dashboard is open. Pass a dashboard ID or name.' } };
53
+ }
54
+ const lowered = value.toLowerCase();
55
+ const match = accessible.find(d => UUIDsEqual(d.ID, value)) ?? accessible.find(d => (d.Name ?? '').toLowerCase() === lowered);
56
+ if (match) {
57
+ return { ok: true, dashboard: match };
58
+ }
59
+ const available = accessible.slice(0, DASHBOARD_TAB_AGENT_LIST_CAP).map(d => d.Name || '(untitled)').join(', ') || '(none)';
60
+ return {
61
+ ok: false,
62
+ result: { Success: false, ErrorMessage: `No accessible dashboard named or identified by "${value}". Available dashboards include: ${available}.` },
63
+ };
64
+ }
65
+ /** The tab's read-only client tools. */
66
+ export function BuildDashboardTabAgentTools(host) {
67
+ return [
68
+ {
69
+ Name: 'GetDashboardPanels',
70
+ Description: 'List the panels on a dashboard: each panel\'s title, part type and icon. Defaults to the dashboard open in this tab; pass a dashboard ID or name to inspect another dashboard the user can read. Read-only.',
71
+ ParameterSchema: DASHBOARD_PARAMETER_SCHEMA,
72
+ Handler: async (params) => runTool(host, params, dashboard => panelsData(host, dashboard)),
73
+ },
74
+ {
75
+ Name: 'GetDashboardDetail',
76
+ Description: 'Get detail about a dashboard: description, type, owner, category, created and updated dates, and the user\'s access (CanRead/CanEdit/CanDelete/CanShare, IsOwner). Defaults to the dashboard open in this tab; pass a dashboard ID or name for another dashboard the user can read. Read-only.',
77
+ ParameterSchema: DASHBOARD_PARAMETER_SCHEMA,
78
+ Handler: async (params) => runTool(host, params, dashboard => detailData(host, dashboard)),
79
+ },
80
+ ];
81
+ }
82
+ /** Resolves the tool's dashboard and builds its data. Returns a failure instead of throwing. */
83
+ function runTool(host, params, read) {
84
+ try {
85
+ const lookup = ResolveToolDashboard(params['dashboardId'], host.CurrentDashboard(), host.AccessibleDashboards());
86
+ return lookup.ok ? { Success: true, Data: read(lookup.dashboard) } : lookup.result;
87
+ }
88
+ catch (error) {
89
+ return { Success: false, ErrorMessage: error instanceof Error ? error.message : String(error) };
90
+ }
91
+ }
92
+ function panelsData(host, dashboard) {
93
+ const panels = host.Panels(dashboard);
94
+ return { DashboardId: dashboard.ID, DashboardName: dashboard.Name, PanelCount: panels.length, Panels: panels };
95
+ }
96
+ function detailData(host, dashboard) {
97
+ const access = host.Permissions(dashboard.ID);
98
+ return {
99
+ DashboardId: dashboard.ID,
100
+ DashboardName: dashboard.Name,
101
+ Description: dashboard.Description ?? null,
102
+ Type: dashboard.Type,
103
+ Owner: dashboard.User ?? null,
104
+ CategoryName: dashboard.Category ?? null,
105
+ CategoryId: dashboard.CategoryID ?? null,
106
+ CreatedAt: toIsoOrNull(dashboard.__mj_CreatedAt),
107
+ UpdatedAt: toIsoOrNull(dashboard.__mj_UpdatedAt),
108
+ Access: {
109
+ CanRead: access.CanRead,
110
+ CanEdit: access.CanEdit,
111
+ CanDelete: access.CanDelete,
112
+ CanShare: access.CanShare,
113
+ IsOwner: access.IsOwner,
114
+ PermissionSource: access.PermissionSource,
115
+ },
116
+ };
117
+ }
118
+ /** The date as an ISO string, or null when it is missing or invalid. */
119
+ function toIsoOrNull(value) {
120
+ if (!value)
121
+ return null;
122
+ const time = new Date(value).getTime();
123
+ return Number.isFinite(time) ? new Date(time).toISOString() : null;
124
+ }
125
+ //# sourceMappingURL=dashboard-tab-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-tab-agent.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/dashboard-tab-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Agent context and client tools for a Config dashboard open in a dashboard tab.\n * Pure functions: the tab supplies its state and reads through {@link DashboardTabAgentHost}.\n * Tool handlers never throw; a bad parameter or a failed read returns a failure result.\n *\n * 🔒 BOUNDARY: the tab's agent tools change the open dashboard in memory only. Save, Share,\n * Favorite and Pin stay user actions; the Request* tools in dashboard-studio-tools.ts ask\n * for them through a confirm dialog and never perform them.\n */\nimport type { ClientToolMediaItem } from '@memberjunction/ai-core-plus';\nimport type { DashboardUserPermissions, MJDashboardEntity, MJDashboardPartTypeEntity } from '@memberjunction/core-entities';\nimport type { DashboardPanel } from '@memberjunction/ng-dashboard-viewer';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/** The most panels, or dashboard names, that one context field or error message lists. */\nexport const DASHBOARD_TAB_AGENT_LIST_CAP = 25;\n\n/** The dashboard fields the agent helpers read. */\nexport type DashboardTabDashboard = Pick<\n MJDashboardEntity,\n 'ID' | 'Name' | 'Type' | 'Description' | 'User' | 'Category' | 'CategoryID' | 'UIConfigDetails' | '__mj_CreatedAt' | '__mj_UpdatedAt'\n>;\n\n/** The panel fields a panel summary reads. */\nexport type DashboardTabPanel = Pick<DashboardPanel, 'id' | 'title' | 'icon' | 'partTypeId' | 'config'>;\n\n/** The part type fields a panel summary reads. */\nexport type DashboardTabPartType = Pick<MJDashboardPartTypeEntity, 'ID' | 'Name' | 'Icon'>;\n\n/** One panel of a dashboard, as the agent sees it. */\nexport interface DashboardPanelSummary {\n /** The panel id, which the studio tools take as panelId. */\n Id: string;\n Title: string;\n /** The part type name, for example View, Query or WebURL. */\n PartTypeName: string;\n Icon?: string;\n}\n\n/** The tab state that the agent context reports. */\nexport interface DashboardTabAgentState {\n Dashboard: Pick<MJDashboardEntity, 'ID' | 'Name' | 'Type'>;\n IsEditing: boolean;\n CanEdit: boolean;\n Panels: readonly DashboardPanelSummary[];\n IsFavorite: boolean;\n IsPinnedToHome: boolean;\n}\n\n/** The result of a tab tool: data on success, else a message the agent can act on. */\nexport interface DashboardTabToolResult {\n Success: boolean;\n ErrorMessage?: string;\n Data?: Record<string, unknown>;\n /** Images for the model, when the tool returns any. */\n Media?: ClientToolMediaItem[];\n}\n\n/** A client tool, in the shape `NavigationService.SetAgentClientTools` takes. */\nexport interface DashboardTabAgentTool {\n Name: string;\n Description: string;\n ParameterSchema: Record<string, unknown>;\n Handler: (params: Record<string, unknown>) => Promise<DashboardTabToolResult>;\n}\n\n/** The reads the tab tools make from the tab. */\nexport interface DashboardTabAgentHost {\n /** The dashboard open in the tab, or null when none is loaded. */\n CurrentDashboard(): DashboardTabDashboard | null;\n /** The dashboards the user can read. */\n AccessibleDashboards(): readonly DashboardTabDashboard[];\n /** The panels of a dashboard: the live layout for the open one, the saved layout for others. */\n Panels(dashboard: DashboardTabDashboard): DashboardPanelSummary[];\n /** The user's access to a dashboard. */\n Permissions(dashboardId: string): DashboardUserPermissions;\n}\n\n/** The dashboard a tool works on, or the failure to return to the agent. */\nexport type DashboardToolLookup =\n | { ok: true; dashboard: DashboardTabDashboard } // case-violation-ok-legacy-back-compat: matches the { ok, result } failure shape of the agent-tool validators (ValidateStringParam)\n | { ok: false; result: DashboardTabToolResult }; // case-violation-ok-legacy-back-compat: matches the { ok, result } failure shape of the agent-tool validators (ValidateStringParam)\n\nconst DASHBOARD_PARAMETER_SCHEMA: Record<string, unknown> = {\n type: 'object',\n properties: {\n dashboardId: { type: 'string', description: 'Optional dashboard ID or name. Defaults to the dashboard open in this tab.' },\n },\n};\n\n/**\n * Summaries of the given panels. The part type name comes from `partTypes` (matched on the panel's\n * part type ID), else from the panel's config type.\n */\nexport function SummarizeDashboardPanels(\n panels: readonly DashboardTabPanel[],\n partTypes: readonly DashboardTabPartType[],\n): DashboardPanelSummary[] {\n return panels.map(panel => {\n const partType = partTypes.find(pt => UUIDsEqual(pt.ID, panel.partTypeId));\n const summary: DashboardPanelSummary = {\n Id: panel.id,\n Title: panel.title || '(untitled panel)',\n PartTypeName: partType?.Name || panel.config?.type || 'Unknown',\n };\n const icon = panel.icon || partType?.Icon;\n if (icon) {\n summary.Icon = icon;\n }\n return summary;\n });\n}\n\n/** The agent context for the tab. Lists at most {@link DASHBOARD_TAB_AGENT_LIST_CAP} panels; the count covers all. */\nexport function BuildDashboardTabAgentContext(state: DashboardTabAgentState): Record<string, unknown> {\n return {\n OpenedDashboardId: state.Dashboard.ID,\n OpenedDashboardName: state.Dashboard.Name,\n OpenedDashboardType: state.Dashboard.Type,\n OpenedDashboardIsEditing: state.IsEditing,\n OpenedDashboardCanEdit: state.CanEdit,\n OpenedDashboardPanelCount: state.Panels.length,\n OpenedDashboardPanels: state.Panels.slice(0, DASHBOARD_TAB_AGENT_LIST_CAP),\n IsFavorite: state.IsFavorite,\n IsPinnedToHome: state.IsPinnedToHome,\n };\n}\n\n/**\n * The dashboard a tool names: an exact ID match first, then a name match that ignores case.\n * With no name or ID, the dashboard open in the tab.\n */\nexport function ResolveToolDashboard(\n raw: unknown,\n current: DashboardTabDashboard | null,\n accessible: readonly DashboardTabDashboard[],\n): DashboardToolLookup {\n const value = typeof raw === 'string' ? raw.trim() : '';\n if (!value) {\n return current\n ? { ok: true, dashboard: current }\n : { ok: false, result: { Success: false, ErrorMessage: 'No dashboard is open. Pass a dashboard ID or name.' } };\n }\n const lowered = value.toLowerCase();\n const match = accessible.find(d => UUIDsEqual(d.ID, value)) ?? accessible.find(d => (d.Name ?? '').toLowerCase() === lowered);\n if (match) {\n return { ok: true, dashboard: match };\n }\n const available = accessible.slice(0, DASHBOARD_TAB_AGENT_LIST_CAP).map(d => d.Name || '(untitled)').join(', ') || '(none)';\n return {\n ok: false,\n result: { Success: false, ErrorMessage: `No accessible dashboard named or identified by \"${value}\". Available dashboards include: ${available}.` },\n };\n}\n\n/** The tab's read-only client tools. */\nexport function BuildDashboardTabAgentTools(host: DashboardTabAgentHost): DashboardTabAgentTool[] {\n return [\n {\n Name: 'GetDashboardPanels',\n Description: 'List the panels on a dashboard: each panel\\'s title, part type and icon. Defaults to the dashboard open in this tab; pass a dashboard ID or name to inspect another dashboard the user can read. Read-only.',\n ParameterSchema: DASHBOARD_PARAMETER_SCHEMA,\n Handler: async params => runTool(host, params, dashboard => panelsData(host, dashboard)),\n },\n {\n Name: 'GetDashboardDetail',\n Description: 'Get detail about a dashboard: description, type, owner, category, created and updated dates, and the user\\'s access (CanRead/CanEdit/CanDelete/CanShare, IsOwner). Defaults to the dashboard open in this tab; pass a dashboard ID or name for another dashboard the user can read. Read-only.',\n ParameterSchema: DASHBOARD_PARAMETER_SCHEMA,\n Handler: async params => runTool(host, params, dashboard => detailData(host, dashboard)),\n },\n ];\n}\n\n/** Resolves the tool's dashboard and builds its data. Returns a failure instead of throwing. */\nfunction runTool(\n host: DashboardTabAgentHost,\n params: Record<string, unknown>,\n read: (dashboard: DashboardTabDashboard) => Record<string, unknown>,\n): DashboardTabToolResult {\n try {\n const lookup = ResolveToolDashboard(params['dashboardId'], host.CurrentDashboard(), host.AccessibleDashboards());\n return lookup.ok ? { Success: true, Data: read(lookup.dashboard) } : lookup.result;\n } catch (error) {\n return { Success: false, ErrorMessage: error instanceof Error ? error.message : String(error) };\n }\n}\n\nfunction panelsData(host: DashboardTabAgentHost, dashboard: DashboardTabDashboard): Record<string, unknown> {\n const panels = host.Panels(dashboard);\n return { DashboardId: dashboard.ID, DashboardName: dashboard.Name, PanelCount: panels.length, Panels: panels };\n}\n\nfunction detailData(host: DashboardTabAgentHost, dashboard: DashboardTabDashboard): Record<string, unknown> {\n const access = host.Permissions(dashboard.ID);\n return {\n DashboardId: dashboard.ID,\n DashboardName: dashboard.Name,\n Description: dashboard.Description ?? null,\n Type: dashboard.Type,\n Owner: dashboard.User ?? null,\n CategoryName: dashboard.Category ?? null,\n CategoryId: dashboard.CategoryID ?? null,\n CreatedAt: toIsoOrNull(dashboard.__mj_CreatedAt),\n UpdatedAt: toIsoOrNull(dashboard.__mj_UpdatedAt),\n Access: {\n CanRead: access.CanRead,\n CanEdit: access.CanEdit,\n CanDelete: access.CanDelete,\n CanShare: access.CanShare,\n IsOwner: access.IsOwner,\n PermissionSource: access.PermissionSource,\n },\n };\n}\n\n/** The date as an ISO string, or null when it is missing or invalid. */\nfunction toIsoOrNull(value: Date | null | undefined): string | null {\n if (!value) return null;\n const time = new Date(value).getTime();\n return Number.isFinite(time) ? new Date(time).toISOString() : null;\n}\n"]}
@@ -3,7 +3,7 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
3
3
  import { ResourceData } from '@memberjunction/core-entities';
4
4
  import { UUIDsEqual } from '@memberjunction/global';
5
5
  import { RealtimeModelVoices, RealtimeVoiceOption } from '@memberjunction/graphql-dataprovider';
6
- import { type TurnAddressingChoice, type TurnModeChoice } from '@memberjunction/ng-mj-livekit-room';
6
+ import { type MJLiveKitConnectionMode, type TurnAddressingChoice, type TurnModeChoice } from '@memberjunction/ng-mj-livekit-room';
7
7
  import * as i0 from "@angular/core";
8
8
  /** A selectable target agent for the pre-join picker. */
9
9
  interface TargetAgentChoice {
@@ -128,12 +128,15 @@ export declare class LiveKitRoomResource extends BaseResourceComponent implement
128
128
  get loadingTranscript(): boolean;
129
129
  /** @deprecated Use {@link LoadingTranscript}. */
130
130
  set loadingTranscript(value: boolean);
131
- /** `'agent'` to start/voice an agent (the default), or `'join'` when opened from an invite link. */
132
- RoomMode: 'agent' | 'join';
131
+ /**
132
+ * `'agent'` to start/voice an agent (the default), `'join'` when opened from an invite link, or `'preview'` for the
133
+ * preview room.
134
+ */
135
+ RoomMode: MJLiveKitConnectionMode;
133
136
  /** @deprecated Use {@link RoomMode}. */
134
- get roomMode(): 'agent' | 'join';
137
+ get roomMode(): MJLiveKitConnectionMode;
135
138
  /** @deprecated Use {@link RoomMode}. */
136
- set roomMode(value: 'agent' | 'join');
139
+ set roomMode(value: MJLiveKitConnectionMode);
137
140
  /** The room to JOIN when opened via an invite link (`?room=…`); null in agent mode. */
138
141
  JoinRoomName: string | null;
139
142
  /** @deprecated Use {@link JoinRoomName}. */
@@ -176,6 +179,8 @@ export declare class LiveKitRoomResource extends BaseResourceComponent implement
176
179
  get canPickModelVoice(): boolean;
177
180
  /** @deprecated Use {@link CanPickModelVoice}. */
178
181
  set canPickModelVoice(value: boolean);
182
+ /** Whether the current user may open the preview room: the authorization the dev pickers need. */
183
+ get CanOpenPreviewRoom(): boolean;
179
184
  /** Active Realtime models + their voices (loaded once when the user can override). */
180
185
  RealtimeModels: RealtimeModelVoices[];
181
186
  /** @deprecated Use {@link RealtimeModels}. */
@@ -194,6 +199,11 @@ export declare class LiveKitRoomResource extends BaseResourceComponent implement
194
199
  get selectedVoice(): string | null;
195
200
  /** @deprecated Use {@link SelectedVoice}. */
196
201
  set selectedVoice(value: string | null);
202
+ /**
203
+ * The voice option picked in the pre-join picker (one of {@link SelectedModelVoices}), or null. Kept beside
204
+ * {@link SelectedVoice} because two personas can share a voice id: the option, not the id, says which one shows picked.
205
+ */
206
+ SelectedVoiceOption: RealtimeVoiceOption | null;
197
207
  /** Voices for the model chosen in the pre-join picker. */
198
208
  get SelectedModelVoices(): RealtimeVoiceOption[];
199
209
  /** @deprecated Use {@link SelectedModelVoices}. */
@@ -202,7 +212,10 @@ export declare class LiveKitRoomResource extends BaseResourceComponent implement
202
212
  OnModelChange(event: Event): void;
203
213
  /** @deprecated Use {@link OnModelChange}. */
204
214
  onModelChange(event: Event): void;
205
- /** Records the pre-join VOICE choice. */
215
+ /**
216
+ * Records the pre-join VOICE choice: the picked option, found by its position (two personas can share a voice id, so
217
+ * the value can't tell them apart; option 0 is "Default voice"), and its voice id.
218
+ */
206
219
  OnVoiceChange(event: Event): void;
207
220
  /** @deprecated Use {@link OnVoiceChange}. */
208
221
  onVoiceChange(event: Event): void;
@@ -302,6 +315,11 @@ export declare class LiveKitRoomResource extends BaseResourceComponent implement
302
315
  OnRoomLeft(): void;
303
316
  /** @deprecated Use {@link OnRoomLeft}. */
304
317
  onRoomLeft(): void;
318
+ /**
319
+ * Opens the preview room: the meeting room with your camera and microphone and simulated people, and no server.
320
+ * Leaving it returns to the landing.
321
+ */
322
+ OpenPreviewRoom(): void;
305
323
  /** Go to the "start a new room" picker. */
306
324
  StartNewRoom(): void;
307
325
  /** @deprecated Use {@link StartNewRoom}. */
@@ -326,7 +344,10 @@ export declare class LiveKitRoomResource extends BaseResourceComponent implement
326
344
  private loadActiveRooms;
327
345
  /** Loads past meetings: the `Meeting Room` conversations the bridge recorded, newest first. */
328
346
  private loadHistory;
329
- /** Opens a past meeting's transcript (drill-in). */
347
+ /**
348
+ * Opens a past meeting's transcript (drill-in): the room conversation's Main rows (a bridge session
349
+ * writes Main), in `Sequence` order.
350
+ */
330
351
  OpenTranscript(room: {
331
352
  ConversationID: string;
332
353
  Name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"livekit-room-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/livekit-room-resource.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"livekit-room-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/livekit-room-resource.component.ts"],"names":[],"mappings":"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"}