@mastra/playground-ui 68.0.0-alpha.2 → 68.0.0-alpha.3
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/KnowledgePageGraph.css +55 -0
- package/dist/{MarkdownRenderer-2GOXQJEv.js → MarkdownRenderer-CI30RqdB.js} +19 -6
- package/dist/MarkdownRenderer-CI30RqdB.js.map +1 -0
- package/dist/{MarkdownRenderer-CB8Z_CHc.cjs → MarkdownRenderer-y65WGBhC.cjs} +19 -6
- package/dist/MarkdownRenderer-y65WGBhC.cjs.map +1 -0
- package/dist/{activity-rJ1NQl_2.js → activity-C8Ql81WM.js} +2 -2
- package/dist/{activity-rJ1NQl_2.js.map → activity-C8Ql81WM.js.map} +1 -1
- package/dist/{activity-DyB5H3gF.cjs → activity-CcQZeDYi.cjs} +2 -2
- package/dist/{activity-DyB5H3gF.cjs.map → activity-CcQZeDYi.cjs.map} +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +1 -1
- package/dist/components/SavedViews.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +2 -2
- package/dist/components/ai/tool-call.es.js +2 -2
- package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
- package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
- package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/knowledge/knowledge-links.cjs.js +52 -6
- package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -1
- package/dist/domains/chat/knowledge/knowledge-links.es.js +53 -9
- package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +10 -3
- package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +10 -3
- package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +8 -3
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js +8 -3
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -1
- package/dist/domains/chat/knowledge.cjs.js +2 -0
- package/dist/domains/chat/knowledge.es.js +2 -2
- package/dist/domains/chat/messages/message-row.cjs.js +3 -3
- package/dist/domains/chat/messages/message-row.es.js +3 -3
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +35 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +36 -2
- package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js +80 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.d.ts +1 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.es.js +78 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +163 -13
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +165 -15
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js +51 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.d.ts +1 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js +49 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +7 -2
- package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +7 -2
- package/dist/domains/chat/tools/badges/mcp-task-chip.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +9 -4
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.es.js +9 -4
- package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js +81 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.d.ts +1 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js +77 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js +11 -2
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js +11 -2
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +240 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js.map +1 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.d.ts +1 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js +239 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js.map +1 -0
- package/dist/domains/chat/tools/mcp-input-request.cjs.js +40 -0
- package/dist/domains/chat/tools/mcp-input-request.cjs.js.map +1 -0
- package/dist/domains/chat/tools/mcp-input-request.d.ts +1 -0
- package/dist/domains/chat/tools/mcp-input-request.es.js +33 -0
- package/dist/domains/chat/tools/mcp-input-request.es.js.map +1 -0
- package/dist/domains/chat/tools/tool-card-kind.cjs.js +8 -3
- package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
- package/dist/domains/chat/tools/tool-card-kind.es.js +8 -4
- package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-groups.es.js +1 -1
- package/dist/domains/chat.cjs.js +5 -3
- package/dist/domains/chat.es.js +4 -4
- package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js +48 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.es.js +47 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +63 -5
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +64 -6
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +485 -47
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +487 -50
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +1051 -123
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +1054 -126
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +75 -3
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js +76 -4
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
- package/dist/domains/knowledge/lib/circleText.cjs.js +9 -0
- package/dist/domains/knowledge/lib/circleText.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/circleText.d.ts +1 -0
- package/dist/domains/knowledge/lib/circleText.es.js +8 -0
- package/dist/domains/knowledge/lib/circleText.es.js.map +1 -0
- package/dist/domains/knowledge/lib/fitViewport.cjs.js +82 -0
- package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/fitViewport.d.ts +1 -0
- package/dist/domains/knowledge/lib/fitViewport.es.js +73 -0
- package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -0
- package/dist/domains/knowledge/lib/graphShape.cjs.js +524 -0
- package/dist/domains/knowledge/lib/graphShape.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/graphShape.d.ts +1 -0
- package/dist/domains/knowledge/lib/graphShape.es.js +499 -0
- package/dist/domains/knowledge/lib/graphShape.es.js.map +1 -0
- package/dist/domains/knowledge/lib/linkCountsText.cjs.js +11 -0
- package/dist/domains/knowledge/lib/linkCountsText.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/linkCountsText.d.ts +1 -0
- package/dist/domains/knowledge/lib/linkCountsText.es.js +10 -0
- package/dist/domains/knowledge/lib/linkCountsText.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageAddress.cjs.js +29 -0
- package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageAddress.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageAddress.es.js +27 -0
- package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageGraph.cjs.js +11 -11
- package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageGraph.es.js +11 -11
- package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pageRefs.cjs.js +69 -0
- package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageRefs.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageRefs.es.js +66 -0
- package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageTree.cjs.js +5 -0
- package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageTree.es.js +5 -1
- package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -1
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js +82 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +1 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js +78 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js.map +1 -0
- package/dist/domains/knowledge/lib/tooltipSide.cjs.js +77 -0
- package/dist/domains/knowledge/lib/tooltipSide.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/tooltipSide.d.ts +1 -0
- package/dist/domains/knowledge/lib/tooltipSide.es.js +75 -0
- package/dist/domains/knowledge/lib/tooltipSide.es.js.map +1 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js +65 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.d.ts +1 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.es.js +62 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.es.js.map +1 -0
- package/dist/domains/knowledge/lib/useStableWhile.cjs.js +15 -0
- package/dist/domains/knowledge/lib/useStableWhile.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/useStableWhile.d.ts +1 -0
- package/dist/domains/knowledge/lib/useStableWhile.es.js +14 -0
- package/dist/domains/knowledge/lib/useStableWhile.es.js.map +1 -0
- package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
- package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
- package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
- package/dist/domains/skills/skill-simple-form.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
- package/dist/domains/traces/components/span-timeline-row.cjs.js +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +8 -2
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +8 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
- package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +3 -3
- package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
- package/dist/lib/form/dynamic-form.cjs.js +2 -2
- package/dist/lib/form/dynamic-form.es.js +2 -2
- package/dist/lib/form/json-draft.cjs.js +1 -1
- package/dist/lib/form/json-draft.es.js +1 -1
- package/dist/lib/form/zod-provider.cjs.js +1 -1
- package/dist/lib/form/zod-provider.es.js +1 -1
- package/dist/{span-payload-primitives-B3RdahsC.js → span-payload-primitives-CKKIAVPJ.js} +4 -4
- package/dist/{span-payload-primitives-B3RdahsC.js.map → span-payload-primitives-CKKIAVPJ.js.map} +1 -1
- package/dist/{span-payload-primitives-_2d-pAOD.cjs → span-payload-primitives-D4tHWN2W.cjs} +4 -4
- package/dist/{span-payload-primitives-_2d-pAOD.cjs.map → span-payload-primitives-D4tHWN2W.cjs.map} +1 -1
- package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +32 -4
- package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +2 -0
- package/dist/src/domains/chat/tools/badges/knowledge-body-range.d.ts +12 -0
- package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +5 -2
- package/dist/src/domains/chat/tools/badges/mcp-input-request-badge.d.ts +18 -0
- package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +4 -1
- package/dist/src/domains/chat/tools/badges/use-deferred-input-request.d.ts +44 -0
- package/dist/src/domains/chat/tools/badges/use-mcp-task-progress.d.ts +6 -1
- package/dist/src/domains/chat/tools/mcp-input-request-tool.d.ts +18 -0
- package/dist/src/domains/chat/tools/mcp-input-request.d.ts +40 -0
- package/dist/src/domains/chat/tools/tool-card-kind.d.ts +4 -2
- package/dist/src/domains/chat/tools/tool-card.d.ts +1 -1
- package/dist/src/domains/knowledge/components/KnowledgePageCard.d.ts +23 -0
- package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +29 -0
- package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +27 -1
- package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +2 -1
- package/dist/src/domains/knowledge/lib/circleText.d.ts +2 -0
- package/dist/src/domains/knowledge/lib/fitViewport.d.ts +67 -0
- package/dist/src/domains/knowledge/lib/graphShape.d.ts +131 -0
- package/dist/src/domains/knowledge/lib/linkCountsText.d.ts +5 -0
- package/dist/src/domains/knowledge/lib/pageAddress.d.ts +5 -0
- package/dist/src/domains/knowledge/lib/pageGraph.d.ts +4 -4
- package/dist/src/domains/knowledge/lib/pageRefs.d.ts +15 -0
- package/dist/src/domains/knowledge/lib/pageTree.d.ts +2 -0
- package/dist/src/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +13 -0
- package/dist/src/domains/knowledge/lib/tooltipSide.d.ts +40 -0
- package/dist/src/domains/knowledge/lib/useLeavingNodes.d.ts +14 -0
- package/dist/src/domains/knowledge/lib/useStableWhile.d.ts +5 -0
- package/dist/src/domains/knowledge/pageTypes.d.ts +6 -1
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -1
- package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +6 -0
- package/dist/style.css +69 -2
- package/dist/{tool-approval-1qiB4hhG.cjs → tool-approval-CJvPDL7D.cjs} +4 -4
- package/dist/{tool-approval-1qiB4hhG.cjs.map → tool-approval-CJvPDL7D.cjs.map} +1 -1
- package/dist/{tool-approval-B6MFcaKV.js → tool-approval-DyN11vFA.js} +4 -4
- package/dist/{tool-approval-B6MFcaKV.js.map → tool-approval-DyN11vFA.js.map} +1 -1
- package/dist/{tool-call-Bu66PkD-.cjs → tool-call-DBn14X-3.cjs} +9 -3
- package/dist/{tool-call-Bu66PkD-.cjs.map → tool-call-DBn14X-3.cjs.map} +1 -1
- package/dist/{tool-call-Ch9-jjXU.js → tool-call-Dsj43lvJ.js} +9 -3
- package/dist/{tool-call-Ch9-jjXU.js.map → tool-call-Dsj43lvJ.js.map} +1 -1
- package/dist/{tool-card-DrqPZfPQ.cjs → tool-card-rxhTDpk_.cjs} +164 -126
- package/dist/tool-card-rxhTDpk_.cjs.map +1 -0
- package/dist/{tool-card-sO6P2Qj4.js → tool-card-toDgoZzJ.js} +165 -127
- package/dist/tool-card-toDgoZzJ.js.map +1 -0
- package/dist/{tool-presentation-DvCsb_kz.js → tool-presentation-CvibOP1J.js} +6 -1
- package/dist/tool-presentation-CvibOP1J.js.map +1 -0
- package/dist/{tool-presentation-CQlDEwgS.cjs → tool-presentation-D6nzVruN.cjs} +6 -1
- package/dist/tool-presentation-D6nzVruN.cjs.map +1 -0
- package/package.json +10 -10
- package/dist/MarkdownRenderer-2GOXQJEv.js.map +0 -1
- package/dist/MarkdownRenderer-CB8Z_CHc.cjs.map +0 -1
- package/dist/domains/knowledge/lib/pageLayout.cjs.js +0 -49
- package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +0 -1
- package/dist/domains/knowledge/lib/pageLayout.d.ts +0 -1
- package/dist/domains/knowledge/lib/pageLayout.es.js +0 -48
- package/dist/domains/knowledge/lib/pageLayout.es.js.map +0 -1
- package/dist/src/domains/knowledge/lib/pageLayout.d.ts +0 -24
- package/dist/tool-card-DrqPZfPQ.cjs.map +0 -1
- package/dist/tool-card-sO6P2Qj4.js.map +0 -1
- package/dist/tool-presentation-CQlDEwgS.cjs.map +0 -1
- package/dist/tool-presentation-DvCsb_kz.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-input-request.cjs.js","names":["isRecord"],"sources":["../../../../src/domains/chat/tools/mcp-input-request.ts"],"sourcesContent":["import type { MessageMetadata, SuspendedToolMetadata } from '../messages/message-metadata';\nimport { isRecord } from '../messages/signal-data';\n\n/** An embedded request an MCP server sent while its task waits (`{ method, params }`). */\nexport interface McpInputRequest {\n method: string;\n params?: Record<string, unknown>;\n}\n\n/** What `@mastra/mcp` suspends a task-backed tool call with (`MCPInputRequestSuspendPayload`). */\nexport interface McpInputRequestPayload {\n type: 'mcp-input-request';\n serverName: string;\n toolName: string;\n taskId: string;\n createdAt: string;\n /** When the call suspended; new each time the same task asks again, unlike `createdAt`. */\n requestedAt?: string;\n requests: Record<string, McpInputRequest>;\n}\n\nexport type McpInputAction = 'accept' | 'decline' | 'cancel';\n\nexport interface McpInputResponse {\n action: McpInputAction;\n content?: Record<string, unknown>;\n}\n\n/** Resume data answering every request key (`MCPInputRequestResumeData`). */\nexport interface McpInputResumeData {\n inputResponses: Record<string, McpInputResponse>;\n}\n\nexport function isMcpInputRequest(payload: unknown): payload is McpInputRequestPayload {\n return (\n isRecord(payload) &&\n payload.type === 'mcp-input-request' &&\n typeof payload.serverName === 'string' &&\n typeof payload.toolName === 'string' &&\n typeof payload.taskId === 'string' &&\n typeof payload.createdAt === 'string' &&\n isRecord(payload.requests) &&\n Object.values(payload.requests).every(request => isRecord(request) && typeof request.method === 'string')\n );\n}\n\n/** More questions at once than any real task asks; the server decides these, so Studio bounds them. */\nexport const MAX_INPUT_REQUESTS = 20;\nexport const MAX_REQUEST_MESSAGE_LENGTH = 2_000;\nexport const MAX_INPUT_REQUESTS_SIZE = 64 * 1024;\n\n/** Whether the server sent more than Studio draws: too many questions, a huge message, or huge params. */\nexport function inputRequestTooLarge(payload: McpInputRequestPayload): boolean {\n const requests = Object.values(payload.requests);\n if (requests.length > MAX_INPUT_REQUESTS) return true;\n if (\n requests.some(\n request =>\n typeof request.params?.message === 'string' && request.params.message.length > MAX_REQUEST_MESSAGE_LENGTH,\n )\n ) {\n return true;\n }\n return JSON.stringify(payload.requests).length > MAX_INPUT_REQUESTS_SIZE;\n}\n\n/**\n * This call's own suspension. Saved entries are keyed by call id, but a live run keys them by tool\n * name (two calls of one tool share that key), so the entry's own `toolCallId` decides.\n */\nexport function findSuspension(\n metadata: MessageMetadata | undefined,\n toolCallId: string,\n): SuspendedToolMetadata | undefined {\n const suspensions = metadata?.suspendedTools;\n if (!suspensions) return undefined;\n return Object.values(suspensions).find(entry => entry?.toolCallId === toolCallId);\n}\n\n/** The MCP input request this call is suspended on, if it is. */\nexport function suspendedMcpInputRequest(\n metadata: MessageMetadata | undefined,\n toolCallId: string,\n): McpInputRequestPayload | undefined {\n const payload = findSuspension(metadata, toolCallId)?.suspendPayload;\n return isMcpInputRequest(payload) ? payload : undefined;\n}\n"],"mappings":";;;AAiCA,SAAgB,kBAAkB,SAAqD;CACrF,OACEA,0CAAAA,SAAS,OAAO,KAChB,QAAQ,SAAS,uBACjB,OAAO,QAAQ,eAAe,YAC9B,OAAO,QAAQ,aAAa,YAC5B,OAAO,QAAQ,WAAW,YAC1B,OAAO,QAAQ,cAAc,YAC7BA,0CAAAA,SAAS,QAAQ,QAAQ,KACzB,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,OAAM,YAAWA,0CAAAA,SAAS,OAAO,KAAK,OAAO,QAAQ,WAAW,QAAQ;AAE5G;;AAGA,IAAa,qBAAqB;AAClC,IAAa,6BAA6B;AAC1C,IAAa,0BAA0B;;AAGvC,SAAgB,qBAAqB,SAA0C;CAC7E,MAAM,WAAW,OAAO,OAAO,QAAQ,QAAQ;CAC/C,IAAI,SAAS,SAAA,IAA6B,OAAO;CACjD,IACE,SAAS,MACP,YACE,OAAO,QAAQ,QAAQ,YAAY,YAAY,QAAQ,OAAO,QAAQ,SAAA,GAC1E,GAEA,OAAO;CAET,OAAO,KAAK,UAAU,QAAQ,QAAQ,CAAC,CAAC,SAAS;AACnD;;;;;AAMA,SAAgB,eACd,UACA,YACmC;CACnC,MAAM,cAAc,UAAU;CAC9B,IAAI,CAAC,aAAa,OAAO,KAAA;CACzB,OAAO,OAAO,OAAO,WAAW,CAAC,CAAC,MAAK,UAAS,OAAO,eAAe,UAAU;AAClF;;AAGA,SAAgB,yBACd,UACA,YACoC;CACpC,MAAM,UAAU,eAAe,UAAU,UAAU,CAAC,EAAE;CACtD,OAAO,kBAAkB,OAAO,IAAI,UAAU,KAAA;AAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/chat/tools/mcp-input-request';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { isRecord } from "../messages/signal-data.es.js";
|
|
2
|
+
// src/domains/chat/tools/mcp-input-request.ts
|
|
3
|
+
function isMcpInputRequest(payload) {
|
|
4
|
+
return isRecord(payload) && payload.type === "mcp-input-request" && typeof payload.serverName === "string" && typeof payload.toolName === "string" && typeof payload.taskId === "string" && typeof payload.createdAt === "string" && isRecord(payload.requests) && Object.values(payload.requests).every((request) => isRecord(request) && typeof request.method === "string");
|
|
5
|
+
}
|
|
6
|
+
/** More questions at once than any real task asks; the server decides these, so Studio bounds them. */
|
|
7
|
+
var MAX_INPUT_REQUESTS = 20;
|
|
8
|
+
var MAX_REQUEST_MESSAGE_LENGTH = 2e3;
|
|
9
|
+
var MAX_INPUT_REQUESTS_SIZE = 65536;
|
|
10
|
+
/** Whether the server sent more than Studio draws: too many questions, a huge message, or huge params. */
|
|
11
|
+
function inputRequestTooLarge(payload) {
|
|
12
|
+
const requests = Object.values(payload.requests);
|
|
13
|
+
if (requests.length > 20) return true;
|
|
14
|
+
if (requests.some((request) => typeof request.params?.message === "string" && request.params.message.length > 2e3)) return true;
|
|
15
|
+
return JSON.stringify(payload.requests).length > MAX_INPUT_REQUESTS_SIZE;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* This call's own suspension. Saved entries are keyed by call id, but a live run keys them by tool
|
|
19
|
+
* name (two calls of one tool share that key), so the entry's own `toolCallId` decides.
|
|
20
|
+
*/
|
|
21
|
+
function findSuspension(metadata, toolCallId) {
|
|
22
|
+
const suspensions = metadata?.suspendedTools;
|
|
23
|
+
if (!suspensions) return void 0;
|
|
24
|
+
return Object.values(suspensions).find((entry) => entry?.toolCallId === toolCallId);
|
|
25
|
+
}
|
|
26
|
+
/** The MCP input request this call is suspended on, if it is. */
|
|
27
|
+
function suspendedMcpInputRequest(metadata, toolCallId) {
|
|
28
|
+
const payload = findSuspension(metadata, toolCallId)?.suspendPayload;
|
|
29
|
+
return isMcpInputRequest(payload) ? payload : void 0;
|
|
30
|
+
}
|
|
31
|
+
export { MAX_INPUT_REQUESTS, MAX_INPUT_REQUESTS_SIZE, MAX_REQUEST_MESSAGE_LENGTH, findSuspension, inputRequestTooLarge, isMcpInputRequest, suspendedMcpInputRequest };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=mcp-input-request.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-input-request.es.js","names":[],"sources":["../../../../src/domains/chat/tools/mcp-input-request.ts"],"sourcesContent":["import type { MessageMetadata, SuspendedToolMetadata } from '../messages/message-metadata';\nimport { isRecord } from '../messages/signal-data';\n\n/** An embedded request an MCP server sent while its task waits (`{ method, params }`). */\nexport interface McpInputRequest {\n method: string;\n params?: Record<string, unknown>;\n}\n\n/** What `@mastra/mcp` suspends a task-backed tool call with (`MCPInputRequestSuspendPayload`). */\nexport interface McpInputRequestPayload {\n type: 'mcp-input-request';\n serverName: string;\n toolName: string;\n taskId: string;\n createdAt: string;\n /** When the call suspended; new each time the same task asks again, unlike `createdAt`. */\n requestedAt?: string;\n requests: Record<string, McpInputRequest>;\n}\n\nexport type McpInputAction = 'accept' | 'decline' | 'cancel';\n\nexport interface McpInputResponse {\n action: McpInputAction;\n content?: Record<string, unknown>;\n}\n\n/** Resume data answering every request key (`MCPInputRequestResumeData`). */\nexport interface McpInputResumeData {\n inputResponses: Record<string, McpInputResponse>;\n}\n\nexport function isMcpInputRequest(payload: unknown): payload is McpInputRequestPayload {\n return (\n isRecord(payload) &&\n payload.type === 'mcp-input-request' &&\n typeof payload.serverName === 'string' &&\n typeof payload.toolName === 'string' &&\n typeof payload.taskId === 'string' &&\n typeof payload.createdAt === 'string' &&\n isRecord(payload.requests) &&\n Object.values(payload.requests).every(request => isRecord(request) && typeof request.method === 'string')\n );\n}\n\n/** More questions at once than any real task asks; the server decides these, so Studio bounds them. */\nexport const MAX_INPUT_REQUESTS = 20;\nexport const MAX_REQUEST_MESSAGE_LENGTH = 2_000;\nexport const MAX_INPUT_REQUESTS_SIZE = 64 * 1024;\n\n/** Whether the server sent more than Studio draws: too many questions, a huge message, or huge params. */\nexport function inputRequestTooLarge(payload: McpInputRequestPayload): boolean {\n const requests = Object.values(payload.requests);\n if (requests.length > MAX_INPUT_REQUESTS) return true;\n if (\n requests.some(\n request =>\n typeof request.params?.message === 'string' && request.params.message.length > MAX_REQUEST_MESSAGE_LENGTH,\n )\n ) {\n return true;\n }\n return JSON.stringify(payload.requests).length > MAX_INPUT_REQUESTS_SIZE;\n}\n\n/**\n * This call's own suspension. Saved entries are keyed by call id, but a live run keys them by tool\n * name (two calls of one tool share that key), so the entry's own `toolCallId` decides.\n */\nexport function findSuspension(\n metadata: MessageMetadata | undefined,\n toolCallId: string,\n): SuspendedToolMetadata | undefined {\n const suspensions = metadata?.suspendedTools;\n if (!suspensions) return undefined;\n return Object.values(suspensions).find(entry => entry?.toolCallId === toolCallId);\n}\n\n/** The MCP input request this call is suspended on, if it is. */\nexport function suspendedMcpInputRequest(\n metadata: MessageMetadata | undefined,\n toolCallId: string,\n): McpInputRequestPayload | undefined {\n const payload = findSuspension(metadata, toolCallId)?.suspendPayload;\n return isMcpInputRequest(payload) ? payload : undefined;\n}\n"],"mappings":";;AAiCA,SAAgB,kBAAkB,SAAqD;CACrF,OACE,SAAS,OAAO,KAChB,QAAQ,SAAS,uBACjB,OAAO,QAAQ,eAAe,YAC9B,OAAO,QAAQ,aAAa,YAC5B,OAAO,QAAQ,WAAW,YAC1B,OAAO,QAAQ,cAAc,YAC7B,SAAS,QAAQ,QAAQ,KACzB,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,OAAM,YAAW,SAAS,OAAO,KAAK,OAAO,QAAQ,WAAW,QAAQ;AAE5G;;AAGA,IAAa,qBAAqB;AAClC,IAAa,6BAA6B;AAC1C,IAAa,0BAA0B;;AAGvC,SAAgB,qBAAqB,SAA0C;CAC7E,MAAM,WAAW,OAAO,OAAO,QAAQ,QAAQ;CAC/C,IAAI,SAAS,SAAA,IAA6B,OAAO;CACjD,IACE,SAAS,MACP,YACE,OAAO,QAAQ,QAAQ,YAAY,YAAY,QAAQ,OAAO,QAAQ,SAAA,GAC1E,GAEA,OAAO;CAET,OAAO,KAAK,UAAU,QAAQ,QAAQ,CAAC,CAAC,SAAS;AACnD;;;;;AAMA,SAAgB,eACd,UACA,YACmC;CACnC,MAAM,cAAc,UAAU;CAC9B,IAAI,CAAC,aAAa,OAAO,KAAA;CACzB,OAAO,OAAO,OAAO,WAAW,CAAC,CAAC,MAAK,UAAS,OAAO,eAAe,UAAU;AAClF;;AAGA,SAAgB,yBACd,UACA,YACoC;CACpC,MAAM,UAAU,eAAe,UAAU,UAAU,CAAC,EAAE;CACtD,OAAO,kBAAkB,OAAO,IAAI,UAAU,KAAA;AAChD"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_tool_presentation = require("../../../tool-presentation-
|
|
2
|
+
const require_tool_presentation = require("../../../tool-presentation-D6nzVruN.cjs");
|
|
3
3
|
const require_domains_chat_messages_signal_data = require("../messages/signal-data.cjs.js");
|
|
4
4
|
const require_domains_chat_tools_badges_knowledge_tool_badge = require("./badges/knowledge-tool-badge.cjs.js");
|
|
5
5
|
const require_domains_chat_tools_code_mode = require("./code-mode.cjs.js");
|
|
6
6
|
require("./connect-prompt-tool-id.cjs.js");
|
|
7
|
+
const require_domains_chat_tools_mcp_input_request = require("./mcp-input-request.cjs.js");
|
|
7
8
|
require("./submit-plan-tool-id.cjs.js");
|
|
8
9
|
const require_domains_chat_tools_workspace_tool_constants = require("./workspace-tool-constants.cjs.js");
|
|
9
10
|
const require_domains_connect_types = require("../../connect/types.cjs.js");
|
|
@@ -18,6 +19,8 @@ var isNetworkFrom = (metadata, from) => metadata?.mode === "network" && metadata
|
|
|
18
19
|
var isAgentCall = (metadata, toolName) => isNetworkFrom(metadata, "AGENT") || toolName.startsWith("agent-");
|
|
19
20
|
var isWorkflowCall = (metadata, toolName) => isNetworkFrom(metadata, "WORKFLOW") || toolName.startsWith("workflow-");
|
|
20
21
|
var isSettledState = (state) => state === "output-available" || state === "result";
|
|
22
|
+
/** A call running as a Mastra background task. An awaited call's part also names its task, but holds the final result. */
|
|
23
|
+
var isDeferredCall = (backgroundTaskId, backgroundTaskStatus) => backgroundTaskId !== void 0 && backgroundTaskStatus !== "completed" && backgroundTaskStatus !== "failed";
|
|
21
24
|
/** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */
|
|
22
25
|
function badgeStatus(state, chatRunning) {
|
|
23
26
|
if (state === "output-error") return "error";
|
|
@@ -39,13 +42,14 @@ function toolInteraction(metadata, toolName, toolCallId) {
|
|
|
39
42
|
function isHiddenTool(toolName) {
|
|
40
43
|
return toolName === "updateWorkingMemory" || require_tool_presentation.isTaskTool(toolName);
|
|
41
44
|
}
|
|
42
|
-
function toolCardKind({ toolName, toolCallId, input, output, state }, { metadata, mcpAppTools }) {
|
|
45
|
+
function toolCardKind({ toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus }, { metadata, mcpAppTools }) {
|
|
43
46
|
if (toolName === "mastra-memory-om-observation") return "observation";
|
|
44
47
|
if (isHiddenTool(toolName)) return "hidden";
|
|
45
48
|
if (toolName === "ask_user") return "ask_user";
|
|
46
49
|
if (toolName === "request_connection" && require_domains_connect_types.isConnectPromptPayload(output)) return "connect_prompt";
|
|
47
50
|
const { suspended } = toolInteraction(metadata, toolName, toolCallId);
|
|
48
51
|
if (toolName === "submit_plan" || hasSubmitPlanToolId(suspended?.suspendPayload) || hasSubmitPlanToolId(output)) return "submit_plan";
|
|
52
|
+
if (!isDeferredCall(backgroundTaskId, backgroundTaskStatus) && require_domains_chat_tools_mcp_input_request.suspendedMcpInputRequest(metadata, toolCallId)) return "mcp_input_request";
|
|
49
53
|
if (typeof output === "string" && output.toLowerCase().includes("background task")) return "background";
|
|
50
54
|
if (isAgentCall(metadata, toolName)) return "agent";
|
|
51
55
|
if (isWorkflowCall(metadata, toolName)) return "workflow";
|
|
@@ -53,12 +57,13 @@ function toolCardKind({ toolName, toolCallId, input, output, state }, { metadata
|
|
|
53
57
|
if (SANDBOX_TOOLS.has(toolName)) return "sandbox";
|
|
54
58
|
if (codeModeCall(input, output)) return "code_mode";
|
|
55
59
|
if (mcpAppTools?.[toolName]) return "mcp_app";
|
|
56
|
-
if (require_domains_chat_tools_badges_knowledge_tool_badge.KNOWLEDGE_TOOLS.has(toolName) && isSettledState(state) && require_domains_chat_tools_badges_knowledge_tool_badge.knowledgeCard(toolName, input, output)) return "knowledge";
|
|
60
|
+
if (require_domains_chat_tools_badges_knowledge_tool_badge.KNOWLEDGE_TOOLS.has(toolName) && (state === "output-error" || isSettledState(state) && require_domains_chat_tools_badges_knowledge_tool_badge.knowledgeCard(toolName, input, output))) return "knowledge";
|
|
57
61
|
return "plain";
|
|
58
62
|
}
|
|
59
63
|
exports.badgeStatus = badgeStatus;
|
|
60
64
|
exports.codeModeCall = codeModeCall;
|
|
61
65
|
exports.isAgentCall = isAgentCall;
|
|
66
|
+
exports.isDeferredCall = isDeferredCall;
|
|
62
67
|
exports.isHiddenTool = isHiddenTool;
|
|
63
68
|
exports.isSettledState = isSettledState;
|
|
64
69
|
exports.isWorkflowCall = isWorkflowCall;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-card-kind.cjs.js","names":["WORKSPACE_TOOLS","isRecord","getCodeModeCall","isTaskTool","isConnectPromptPayload","KNOWLEDGE_TOOLS","knowledgeCard"],"sources":["../../../../src/domains/chat/tools/tool-card-kind.ts"],"sourcesContent":["import type { MessageMetadata, SuspendedToolMetadata, ToolApprovalMetadata } from '../messages/message-metadata';\nimport type { ToolPartFields } from '../messages/renderers/tool-part';\nimport { isRecord } from '../messages/signal-data';\nimport { KNOWLEDGE_TOOLS, knowledgeCard } from './badges/knowledge-tool-badge';\nimport { getCodeModeCall } from './code-mode';\nimport { CONNECT_PROMPT_TOOL_NAME } from './connect-prompt-tool-id';\nimport { SUBMIT_PLAN_TOOL_ID } from './submit-plan-tool-id';\nimport { WORKSPACE_TOOLS } from './workspace-tool-constants';\nimport { isConnectPromptPayload } from '@/domains/connect/types';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { isTaskTool } from '@/ds/components/ai/tool-call';\n\n/** Which card draws a call. Decided once, shared by the dispatcher and the fold. */\nexport type ToolCardKind =\n | 'hidden'\n | 'observation'\n | 'ask_user'\n | 'connect_prompt'\n | 'submit_plan'\n | 'background'\n | 'agent'\n | 'workflow'\n | 'file_tree'\n | 'sandbox'\n | 'code_mode'\n | 'mcp_app'\n | 'knowledge'\n | 'plain';\n\nexport interface ToolCardContext {\n metadata?: MessageMetadata;\n mcpAppTools?: Record<string, unknown>;\n}\n\nexport interface ToolInteraction {\n approval?: ToolApprovalMetadata;\n suspended?: SuspendedToolMetadata;\n}\n\nconst SANDBOX_TOOLS = new Set<string>([\n WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND,\n WORKSPACE_TOOLS.SANDBOX.GET_PROCESS_OUTPUT,\n WORKSPACE_TOOLS.SANDBOX.KILL_PROCESS,\n]);\n\nconst hasSubmitPlanToolId = (value: unknown): boolean => isRecord(value) && value.toolId === SUBMIT_PLAN_TOOL_ID;\n\nconst isNetworkFrom = (metadata: MessageMetadata | undefined, from: string): boolean =>\n metadata?.mode === 'network' && metadata.from === from;\n\nexport const isAgentCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'AGENT') || toolName.startsWith('agent-');\n\nexport const isWorkflowCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'WORKFLOW') || toolName.startsWith('workflow-');\n\nexport const isSettledState = (state: string | undefined): boolean =>\n state === 'output-available' || state === 'result';\n\n/** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */\nexport function badgeStatus(state: string | undefined, chatRunning: boolean): ActivityStatus {\n if (state === 'output-error') return 'error';\n if (isSettledState(state) || !chatRunning) return 'idle';\n return 'running';\n}\n\nexport const codeModeCall = (input: unknown, output: unknown) =>\n isRecord(input) || typeof input === 'string' ? getCodeModeCall(input, output) : null;\n\n/** Approval and suspension land keyed by tool name on older runs and by call id on newer ones. */\nexport function toolInteraction(\n metadata: MessageMetadata | undefined,\n toolName: string,\n toolCallId: string,\n): ToolInteraction {\n const approvals = metadata?.requireApprovalMetadata;\n const suspensions = metadata?.suspendedTools;\n const namedApproval = approvals?.[toolName];\n return {\n approval:\n metadata?.mode === 'network'\n ? namedApproval?.toolCallId === toolCallId\n ? namedApproval\n : approvals?.[toolCallId]\n : (approvals?.[toolCallId] ??\n Object.values(approvals ?? {}).find(approval => approval.toolCallId === toolCallId)),\n suspended: suspensions?.[toolName] ?? suspensions?.[toolCallId],\n };\n}\n\n/** Tools the transcript never draws: working memory updates and task tools (shown in the docked task list). */\nexport function isHiddenTool(toolName: string): boolean {\n return toolName === 'updateWorkingMemory' || isTaskTool(toolName);\n}\n\nexport function toolCardKind(\n { toolName, toolCallId, input, output, state }: ToolPartFields,\n { metadata, mcpAppTools }: ToolCardContext,\n): ToolCardKind {\n if (toolName === 'mastra-memory-om-observation') return 'observation';\n if (isHiddenTool(toolName)) return 'hidden';\n // A question read back in history draws as a plain badge, but it is still a question: never folded away.\n if (toolName === 'ask_user') return 'ask_user';\n // Built-in `request_connection` tool from `@mastra/connect`: a settled call renders\n // as an interactive connect card; while running it falls back to a plain badge.\n if (toolName === CONNECT_PROMPT_TOOL_NAME && isConnectPromptPayload(output)) return 'connect_prompt';\n const { suspended } = toolInteraction(metadata, toolName, toolCallId);\n if (\n toolName === SUBMIT_PLAN_TOOL_ID ||\n hasSubmitPlanToolId(suspended?.suspendPayload) ||\n hasSubmitPlanToolId(output)\n ) {\n return 'submit_plan';\n }\n if (typeof output === 'string' && output.toLowerCase().includes('background task')) return 'background';\n if (isAgentCall(metadata, toolName)) return 'agent';\n if (isWorkflowCall(metadata, toolName)) return 'workflow';\n if (toolName === WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES) return 'file_tree';\n if (SANDBOX_TOOLS.has(toolName)) return 'sandbox';\n if (codeModeCall(input, output)) return 'code_mode';\n if (mcpAppTools?.[toolName]) return 'mcp_app';\n // A settled Knowledge
|
|
1
|
+
{"version":3,"file":"tool-card-kind.cjs.js","names":["WORKSPACE_TOOLS","isRecord","getCodeModeCall","isTaskTool","isConnectPromptPayload","suspendedMcpInputRequest","KNOWLEDGE_TOOLS","knowledgeCard"],"sources":["../../../../src/domains/chat/tools/tool-card-kind.ts"],"sourcesContent":["import type { MessageMetadata, SuspendedToolMetadata, ToolApprovalMetadata } from '../messages/message-metadata';\nimport type { ToolPartFields } from '../messages/renderers/tool-part';\nimport { isRecord } from '../messages/signal-data';\nimport { KNOWLEDGE_TOOLS, knowledgeCard } from './badges/knowledge-tool-badge';\nimport { getCodeModeCall } from './code-mode';\nimport { CONNECT_PROMPT_TOOL_NAME } from './connect-prompt-tool-id';\nimport { suspendedMcpInputRequest } from './mcp-input-request';\nimport { SUBMIT_PLAN_TOOL_ID } from './submit-plan-tool-id';\nimport { WORKSPACE_TOOLS } from './workspace-tool-constants';\nimport { isConnectPromptPayload } from '@/domains/connect/types';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { isTaskTool } from '@/ds/components/ai/tool-call';\n\n/** Which card draws a call. Decided once, shared by the dispatcher and the fold. */\nexport type ToolCardKind =\n | 'hidden'\n | 'observation'\n | 'ask_user'\n | 'connect_prompt'\n | 'submit_plan'\n | 'mcp_input_request'\n | 'background'\n | 'agent'\n | 'workflow'\n | 'file_tree'\n | 'sandbox'\n | 'code_mode'\n | 'mcp_app'\n | 'knowledge'\n | 'plain';\n\nexport interface ToolCardContext {\n metadata?: MessageMetadata;\n mcpAppTools?: Record<string, unknown>;\n}\n\nexport interface ToolInteraction {\n approval?: ToolApprovalMetadata;\n suspended?: SuspendedToolMetadata;\n}\n\nconst SANDBOX_TOOLS = new Set<string>([\n WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND,\n WORKSPACE_TOOLS.SANDBOX.GET_PROCESS_OUTPUT,\n WORKSPACE_TOOLS.SANDBOX.KILL_PROCESS,\n]);\n\nconst hasSubmitPlanToolId = (value: unknown): boolean => isRecord(value) && value.toolId === SUBMIT_PLAN_TOOL_ID;\n\nconst isNetworkFrom = (metadata: MessageMetadata | undefined, from: string): boolean =>\n metadata?.mode === 'network' && metadata.from === from;\n\nexport const isAgentCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'AGENT') || toolName.startsWith('agent-');\n\nexport const isWorkflowCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'WORKFLOW') || toolName.startsWith('workflow-');\n\nexport const isSettledState = (state: string | undefined): boolean =>\n state === 'output-available' || state === 'result';\n\n/** A call running as a Mastra background task. An awaited call's part also names its task, but holds the final result. */\nexport const isDeferredCall = (backgroundTaskId: string | undefined, backgroundTaskStatus: string | undefined) =>\n backgroundTaskId !== undefined && backgroundTaskStatus !== 'completed' && backgroundTaskStatus !== 'failed';\n\n/** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */\nexport function badgeStatus(state: string | undefined, chatRunning: boolean): ActivityStatus {\n if (state === 'output-error') return 'error';\n if (isSettledState(state) || !chatRunning) return 'idle';\n return 'running';\n}\n\nexport const codeModeCall = (input: unknown, output: unknown) =>\n isRecord(input) || typeof input === 'string' ? getCodeModeCall(input, output) : null;\n\n/** Approval and suspension land keyed by tool name on older runs and by call id on newer ones. */\nexport function toolInteraction(\n metadata: MessageMetadata | undefined,\n toolName: string,\n toolCallId: string,\n): ToolInteraction {\n const approvals = metadata?.requireApprovalMetadata;\n const suspensions = metadata?.suspendedTools;\n const namedApproval = approvals?.[toolName];\n return {\n approval:\n metadata?.mode === 'network'\n ? namedApproval?.toolCallId === toolCallId\n ? namedApproval\n : approvals?.[toolCallId]\n : (approvals?.[toolCallId] ??\n Object.values(approvals ?? {}).find(approval => approval.toolCallId === toolCallId)),\n suspended: suspensions?.[toolName] ?? suspensions?.[toolCallId],\n };\n}\n\n/** Tools the transcript never draws: working memory updates and task tools (shown in the docked task list). */\nexport function isHiddenTool(toolName: string): boolean {\n return toolName === 'updateWorkingMemory' || isTaskTool(toolName);\n}\n\nexport function toolCardKind(\n { toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus }: ToolPartFields,\n { metadata, mcpAppTools }: ToolCardContext,\n): ToolCardKind {\n if (toolName === 'mastra-memory-om-observation') return 'observation';\n if (isHiddenTool(toolName)) return 'hidden';\n // A question read back in history draws as a plain badge, but it is still a question: never folded away.\n if (toolName === 'ask_user') return 'ask_user';\n // Built-in `request_connection` tool from `@mastra/connect`: a settled call renders\n // as an interactive connect card; while running it falls back to a plain badge.\n if (toolName === CONNECT_PROMPT_TOOL_NAME && isConnectPromptPayload(output)) return 'connect_prompt';\n const { suspended } = toolInteraction(metadata, toolName, toolCallId);\n if (\n toolName === SUBMIT_PLAN_TOOL_ID ||\n hasSubmitPlanToolId(suspended?.suspendPayload) ||\n hasSubmitPlanToolId(output)\n ) {\n return 'submit_plan';\n }\n // A foreground call parked on an MCP task's question: the run waits for the answer. A deferred\n // call's question lives on its background task instead, which the background card reads.\n if (!isDeferredCall(backgroundTaskId, backgroundTaskStatus) && suspendedMcpInputRequest(metadata, toolCallId)) {\n return 'mcp_input_request';\n }\n if (typeof output === 'string' && output.toLowerCase().includes('background task')) return 'background';\n if (isAgentCall(metadata, toolName)) return 'agent';\n if (isWorkflowCall(metadata, toolName)) return 'workflow';\n if (toolName === WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES) return 'file_tree';\n if (SANDBOX_TOOLS.has(toolName)) return 'sandbox';\n if (codeModeCall(input, output)) return 'code_mode';\n if (mcpAppTools?.[toolName]) return 'mcp_app';\n // A settled or failed Knowledge call draws as a readable card; while running it stays a plain badge.\n if (\n KNOWLEDGE_TOOLS.has(toolName) &&\n (state === 'output-error' || (isSettledState(state) && knowledgeCard(toolName, input, output)))\n ) {\n return 'knowledge';\n }\n return 'plain';\n}\n"],"mappings":";;;;;;;;;;;AAyCA,IAAM,gCAAgB,IAAI,IAAY;CACpCA,oDAAAA,gBAAgB,QAAQ;CACxBA,oDAAAA,gBAAgB,QAAQ;CACxBA,oDAAAA,gBAAgB,QAAQ;AAC1B,CAAC;AAED,IAAM,uBAAuB,UAA4BC,0CAAAA,SAAS,KAAK,KAAK,MAAM,WAAA;AAElF,IAAM,iBAAiB,UAAuC,SAC5D,UAAU,SAAS,aAAa,SAAS,SAAS;AAEpD,IAAa,eAAe,UAAuC,aACjE,cAAc,UAAU,OAAO,KAAK,SAAS,WAAW,QAAQ;AAElE,IAAa,kBAAkB,UAAuC,aACpE,cAAc,UAAU,UAAU,KAAK,SAAS,WAAW,WAAW;AAExE,IAAa,kBAAkB,UAC7B,UAAU,sBAAsB,UAAU;;AAG5C,IAAa,kBAAkB,kBAAsC,yBACnE,qBAAqB,KAAA,KAAa,yBAAyB,eAAe,yBAAyB;;AAGrG,SAAgB,YAAY,OAA2B,aAAsC;CAC3F,IAAI,UAAU,gBAAgB,OAAO;CACrC,IAAI,eAAe,KAAK,KAAK,CAAC,aAAa,OAAO;CAClD,OAAO;AACT;AAEA,IAAa,gBAAgB,OAAgB,WAC3CA,0CAAAA,SAAS,KAAK,KAAK,OAAO,UAAU,WAAWC,qCAAAA,gBAAgB,OAAO,MAAM,IAAI;;AAGlF,SAAgB,gBACd,UACA,UACA,YACiB;CACjB,MAAM,YAAY,UAAU;CAC5B,MAAM,cAAc,UAAU;CAC9B,MAAM,gBAAgB,YAAY;CAClC,OAAO;EACL,UACE,UAAU,SAAS,YACf,eAAe,eAAe,aAC5B,gBACA,YAAY,cACb,YAAY,eACb,OAAO,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,MAAK,aAAY,SAAS,eAAe,UAAU;EACxF,WAAW,cAAc,aAAa,cAAc;CACtD;AACF;;AAGA,SAAgB,aAAa,UAA2B;CACtD,OAAO,aAAa,yBAAyBC,0BAAAA,WAAW,QAAQ;AAClE;AAEA,SAAgB,aACd,EAAE,UAAU,YAAY,OAAO,QAAQ,OAAO,kBAAkB,wBAChE,EAAE,UAAU,eACE;CACd,IAAI,aAAa,gCAAgC,OAAO;CACxD,IAAI,aAAa,QAAQ,GAAG,OAAO;CAEnC,IAAI,aAAa,YAAY,OAAO;CAGpC,IAAI,aAAA,wBAAyCC,8BAAAA,uBAAuB,MAAM,GAAG,OAAO;CACpF,MAAM,EAAE,cAAc,gBAAgB,UAAU,UAAU,UAAU;CACpE,IACE,aAAA,iBACA,oBAAoB,WAAW,cAAc,KAC7C,oBAAoB,MAAM,GAE1B,OAAO;CAIT,IAAI,CAAC,eAAe,kBAAkB,oBAAoB,KAAKC,6CAAAA,yBAAyB,UAAU,UAAU,GAC1G,OAAO;CAET,IAAI,OAAO,WAAW,YAAY,OAAO,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,OAAO;CAC3F,IAAI,YAAY,UAAU,QAAQ,GAAG,OAAO;CAC5C,IAAI,eAAe,UAAU,QAAQ,GAAG,OAAO;CAC/C,IAAI,aAAaL,oDAAAA,gBAAgB,WAAW,YAAY,OAAO;CAC/D,IAAI,cAAc,IAAI,QAAQ,GAAG,OAAO;CACxC,IAAI,aAAa,OAAO,MAAM,GAAG,OAAO;CACxC,IAAI,cAAc,WAAW,OAAO;CAEpC,IACEM,uDAAAA,gBAAgB,IAAI,QAAQ,MAC3B,UAAU,kBAAmB,eAAe,KAAK,KAAKC,uDAAAA,cAAc,UAAU,OAAO,MAAM,IAE5F,OAAO;CAET,OAAO;AACT"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { n as isTaskTool } from "../../../tool-presentation-
|
|
1
|
+
import { n as isTaskTool } from "../../../tool-presentation-CvibOP1J.js";
|
|
2
2
|
import { isRecord } from "../messages/signal-data.es.js";
|
|
3
3
|
import { KNOWLEDGE_TOOLS, knowledgeCard } from "./badges/knowledge-tool-badge.es.js";
|
|
4
4
|
import { getCodeModeCall } from "./code-mode.es.js";
|
|
5
5
|
import "./connect-prompt-tool-id.es.js";
|
|
6
|
+
import { suspendedMcpInputRequest } from "./mcp-input-request.es.js";
|
|
6
7
|
import "./submit-plan-tool-id.es.js";
|
|
7
8
|
import { WORKSPACE_TOOLS } from "./workspace-tool-constants.es.js";
|
|
8
9
|
import { isConnectPromptPayload } from "../../connect/types.es.js";
|
|
@@ -17,6 +18,8 @@ var isNetworkFrom = (metadata, from) => metadata?.mode === "network" && metadata
|
|
|
17
18
|
var isAgentCall = (metadata, toolName) => isNetworkFrom(metadata, "AGENT") || toolName.startsWith("agent-");
|
|
18
19
|
var isWorkflowCall = (metadata, toolName) => isNetworkFrom(metadata, "WORKFLOW") || toolName.startsWith("workflow-");
|
|
19
20
|
var isSettledState = (state) => state === "output-available" || state === "result";
|
|
21
|
+
/** A call running as a Mastra background task. An awaited call's part also names its task, but holds the final result. */
|
|
22
|
+
var isDeferredCall = (backgroundTaskId, backgroundTaskStatus) => backgroundTaskId !== void 0 && backgroundTaskStatus !== "completed" && backgroundTaskStatus !== "failed";
|
|
20
23
|
/** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */
|
|
21
24
|
function badgeStatus(state, chatRunning) {
|
|
22
25
|
if (state === "output-error") return "error";
|
|
@@ -38,13 +41,14 @@ function toolInteraction(metadata, toolName, toolCallId) {
|
|
|
38
41
|
function isHiddenTool(toolName) {
|
|
39
42
|
return toolName === "updateWorkingMemory" || isTaskTool(toolName);
|
|
40
43
|
}
|
|
41
|
-
function toolCardKind({ toolName, toolCallId, input, output, state }, { metadata, mcpAppTools }) {
|
|
44
|
+
function toolCardKind({ toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus }, { metadata, mcpAppTools }) {
|
|
42
45
|
if (toolName === "mastra-memory-om-observation") return "observation";
|
|
43
46
|
if (isHiddenTool(toolName)) return "hidden";
|
|
44
47
|
if (toolName === "ask_user") return "ask_user";
|
|
45
48
|
if (toolName === "request_connection" && isConnectPromptPayload(output)) return "connect_prompt";
|
|
46
49
|
const { suspended } = toolInteraction(metadata, toolName, toolCallId);
|
|
47
50
|
if (toolName === "submit_plan" || hasSubmitPlanToolId(suspended?.suspendPayload) || hasSubmitPlanToolId(output)) return "submit_plan";
|
|
51
|
+
if (!isDeferredCall(backgroundTaskId, backgroundTaskStatus) && suspendedMcpInputRequest(metadata, toolCallId)) return "mcp_input_request";
|
|
48
52
|
if (typeof output === "string" && output.toLowerCase().includes("background task")) return "background";
|
|
49
53
|
if (isAgentCall(metadata, toolName)) return "agent";
|
|
50
54
|
if (isWorkflowCall(metadata, toolName)) return "workflow";
|
|
@@ -52,9 +56,9 @@ function toolCardKind({ toolName, toolCallId, input, output, state }, { metadata
|
|
|
52
56
|
if (SANDBOX_TOOLS.has(toolName)) return "sandbox";
|
|
53
57
|
if (codeModeCall(input, output)) return "code_mode";
|
|
54
58
|
if (mcpAppTools?.[toolName]) return "mcp_app";
|
|
55
|
-
if (KNOWLEDGE_TOOLS.has(toolName) && isSettledState(state) && knowledgeCard(toolName, input, output)) return "knowledge";
|
|
59
|
+
if (KNOWLEDGE_TOOLS.has(toolName) && (state === "output-error" || isSettledState(state) && knowledgeCard(toolName, input, output))) return "knowledge";
|
|
56
60
|
return "plain";
|
|
57
61
|
}
|
|
58
|
-
export { badgeStatus, codeModeCall, isAgentCall, isHiddenTool, isSettledState, isWorkflowCall, toolCardKind, toolInteraction };
|
|
62
|
+
export { badgeStatus, codeModeCall, isAgentCall, isDeferredCall, isHiddenTool, isSettledState, isWorkflowCall, toolCardKind, toolInteraction };
|
|
59
63
|
|
|
60
64
|
//# sourceMappingURL=tool-card-kind.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-card-kind.es.js","names":[],"sources":["../../../../src/domains/chat/tools/tool-card-kind.ts"],"sourcesContent":["import type { MessageMetadata, SuspendedToolMetadata, ToolApprovalMetadata } from '../messages/message-metadata';\nimport type { ToolPartFields } from '../messages/renderers/tool-part';\nimport { isRecord } from '../messages/signal-data';\nimport { KNOWLEDGE_TOOLS, knowledgeCard } from './badges/knowledge-tool-badge';\nimport { getCodeModeCall } from './code-mode';\nimport { CONNECT_PROMPT_TOOL_NAME } from './connect-prompt-tool-id';\nimport { SUBMIT_PLAN_TOOL_ID } from './submit-plan-tool-id';\nimport { WORKSPACE_TOOLS } from './workspace-tool-constants';\nimport { isConnectPromptPayload } from '@/domains/connect/types';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { isTaskTool } from '@/ds/components/ai/tool-call';\n\n/** Which card draws a call. Decided once, shared by the dispatcher and the fold. */\nexport type ToolCardKind =\n | 'hidden'\n | 'observation'\n | 'ask_user'\n | 'connect_prompt'\n | 'submit_plan'\n | 'background'\n | 'agent'\n | 'workflow'\n | 'file_tree'\n | 'sandbox'\n | 'code_mode'\n | 'mcp_app'\n | 'knowledge'\n | 'plain';\n\nexport interface ToolCardContext {\n metadata?: MessageMetadata;\n mcpAppTools?: Record<string, unknown>;\n}\n\nexport interface ToolInteraction {\n approval?: ToolApprovalMetadata;\n suspended?: SuspendedToolMetadata;\n}\n\nconst SANDBOX_TOOLS = new Set<string>([\n WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND,\n WORKSPACE_TOOLS.SANDBOX.GET_PROCESS_OUTPUT,\n WORKSPACE_TOOLS.SANDBOX.KILL_PROCESS,\n]);\n\nconst hasSubmitPlanToolId = (value: unknown): boolean => isRecord(value) && value.toolId === SUBMIT_PLAN_TOOL_ID;\n\nconst isNetworkFrom = (metadata: MessageMetadata | undefined, from: string): boolean =>\n metadata?.mode === 'network' && metadata.from === from;\n\nexport const isAgentCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'AGENT') || toolName.startsWith('agent-');\n\nexport const isWorkflowCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'WORKFLOW') || toolName.startsWith('workflow-');\n\nexport const isSettledState = (state: string | undefined): boolean =>\n state === 'output-available' || state === 'result';\n\n/** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */\nexport function badgeStatus(state: string | undefined, chatRunning: boolean): ActivityStatus {\n if (state === 'output-error') return 'error';\n if (isSettledState(state) || !chatRunning) return 'idle';\n return 'running';\n}\n\nexport const codeModeCall = (input: unknown, output: unknown) =>\n isRecord(input) || typeof input === 'string' ? getCodeModeCall(input, output) : null;\n\n/** Approval and suspension land keyed by tool name on older runs and by call id on newer ones. */\nexport function toolInteraction(\n metadata: MessageMetadata | undefined,\n toolName: string,\n toolCallId: string,\n): ToolInteraction {\n const approvals = metadata?.requireApprovalMetadata;\n const suspensions = metadata?.suspendedTools;\n const namedApproval = approvals?.[toolName];\n return {\n approval:\n metadata?.mode === 'network'\n ? namedApproval?.toolCallId === toolCallId\n ? namedApproval\n : approvals?.[toolCallId]\n : (approvals?.[toolCallId] ??\n Object.values(approvals ?? {}).find(approval => approval.toolCallId === toolCallId)),\n suspended: suspensions?.[toolName] ?? suspensions?.[toolCallId],\n };\n}\n\n/** Tools the transcript never draws: working memory updates and task tools (shown in the docked task list). */\nexport function isHiddenTool(toolName: string): boolean {\n return toolName === 'updateWorkingMemory' || isTaskTool(toolName);\n}\n\nexport function toolCardKind(\n { toolName, toolCallId, input, output, state }: ToolPartFields,\n { metadata, mcpAppTools }: ToolCardContext,\n): ToolCardKind {\n if (toolName === 'mastra-memory-om-observation') return 'observation';\n if (isHiddenTool(toolName)) return 'hidden';\n // A question read back in history draws as a plain badge, but it is still a question: never folded away.\n if (toolName === 'ask_user') return 'ask_user';\n // Built-in `request_connection` tool from `@mastra/connect`: a settled call renders\n // as an interactive connect card; while running it falls back to a plain badge.\n if (toolName === CONNECT_PROMPT_TOOL_NAME && isConnectPromptPayload(output)) return 'connect_prompt';\n const { suspended } = toolInteraction(metadata, toolName, toolCallId);\n if (\n toolName === SUBMIT_PLAN_TOOL_ID ||\n hasSubmitPlanToolId(suspended?.suspendPayload) ||\n hasSubmitPlanToolId(output)\n ) {\n return 'submit_plan';\n }\n if (typeof output === 'string' && output.toLowerCase().includes('background task')) return 'background';\n if (isAgentCall(metadata, toolName)) return 'agent';\n if (isWorkflowCall(metadata, toolName)) return 'workflow';\n if (toolName === WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES) return 'file_tree';\n if (SANDBOX_TOOLS.has(toolName)) return 'sandbox';\n if (codeModeCall(input, output)) return 'code_mode';\n if (mcpAppTools?.[toolName]) return 'mcp_app';\n // A settled Knowledge
|
|
1
|
+
{"version":3,"file":"tool-card-kind.es.js","names":[],"sources":["../../../../src/domains/chat/tools/tool-card-kind.ts"],"sourcesContent":["import type { MessageMetadata, SuspendedToolMetadata, ToolApprovalMetadata } from '../messages/message-metadata';\nimport type { ToolPartFields } from '../messages/renderers/tool-part';\nimport { isRecord } from '../messages/signal-data';\nimport { KNOWLEDGE_TOOLS, knowledgeCard } from './badges/knowledge-tool-badge';\nimport { getCodeModeCall } from './code-mode';\nimport { CONNECT_PROMPT_TOOL_NAME } from './connect-prompt-tool-id';\nimport { suspendedMcpInputRequest } from './mcp-input-request';\nimport { SUBMIT_PLAN_TOOL_ID } from './submit-plan-tool-id';\nimport { WORKSPACE_TOOLS } from './workspace-tool-constants';\nimport { isConnectPromptPayload } from '@/domains/connect/types';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { isTaskTool } from '@/ds/components/ai/tool-call';\n\n/** Which card draws a call. Decided once, shared by the dispatcher and the fold. */\nexport type ToolCardKind =\n | 'hidden'\n | 'observation'\n | 'ask_user'\n | 'connect_prompt'\n | 'submit_plan'\n | 'mcp_input_request'\n | 'background'\n | 'agent'\n | 'workflow'\n | 'file_tree'\n | 'sandbox'\n | 'code_mode'\n | 'mcp_app'\n | 'knowledge'\n | 'plain';\n\nexport interface ToolCardContext {\n metadata?: MessageMetadata;\n mcpAppTools?: Record<string, unknown>;\n}\n\nexport interface ToolInteraction {\n approval?: ToolApprovalMetadata;\n suspended?: SuspendedToolMetadata;\n}\n\nconst SANDBOX_TOOLS = new Set<string>([\n WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND,\n WORKSPACE_TOOLS.SANDBOX.GET_PROCESS_OUTPUT,\n WORKSPACE_TOOLS.SANDBOX.KILL_PROCESS,\n]);\n\nconst hasSubmitPlanToolId = (value: unknown): boolean => isRecord(value) && value.toolId === SUBMIT_PLAN_TOOL_ID;\n\nconst isNetworkFrom = (metadata: MessageMetadata | undefined, from: string): boolean =>\n metadata?.mode === 'network' && metadata.from === from;\n\nexport const isAgentCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'AGENT') || toolName.startsWith('agent-');\n\nexport const isWorkflowCall = (metadata: MessageMetadata | undefined, toolName: string): boolean =>\n isNetworkFrom(metadata, 'WORKFLOW') || toolName.startsWith('workflow-');\n\nexport const isSettledState = (state: string | undefined): boolean =>\n state === 'output-available' || state === 'result';\n\n/** A call running as a Mastra background task. An awaited call's part also names its task, but holds the final result. */\nexport const isDeferredCall = (backgroundTaskId: string | undefined, backgroundTaskStatus: string | undefined) =>\n backgroundTaskId !== undefined && backgroundTaskStatus !== 'completed' && backgroundTaskStatus !== 'failed';\n\n/** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */\nexport function badgeStatus(state: string | undefined, chatRunning: boolean): ActivityStatus {\n if (state === 'output-error') return 'error';\n if (isSettledState(state) || !chatRunning) return 'idle';\n return 'running';\n}\n\nexport const codeModeCall = (input: unknown, output: unknown) =>\n isRecord(input) || typeof input === 'string' ? getCodeModeCall(input, output) : null;\n\n/** Approval and suspension land keyed by tool name on older runs and by call id on newer ones. */\nexport function toolInteraction(\n metadata: MessageMetadata | undefined,\n toolName: string,\n toolCallId: string,\n): ToolInteraction {\n const approvals = metadata?.requireApprovalMetadata;\n const suspensions = metadata?.suspendedTools;\n const namedApproval = approvals?.[toolName];\n return {\n approval:\n metadata?.mode === 'network'\n ? namedApproval?.toolCallId === toolCallId\n ? namedApproval\n : approvals?.[toolCallId]\n : (approvals?.[toolCallId] ??\n Object.values(approvals ?? {}).find(approval => approval.toolCallId === toolCallId)),\n suspended: suspensions?.[toolName] ?? suspensions?.[toolCallId],\n };\n}\n\n/** Tools the transcript never draws: working memory updates and task tools (shown in the docked task list). */\nexport function isHiddenTool(toolName: string): boolean {\n return toolName === 'updateWorkingMemory' || isTaskTool(toolName);\n}\n\nexport function toolCardKind(\n { toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus }: ToolPartFields,\n { metadata, mcpAppTools }: ToolCardContext,\n): ToolCardKind {\n if (toolName === 'mastra-memory-om-observation') return 'observation';\n if (isHiddenTool(toolName)) return 'hidden';\n // A question read back in history draws as a plain badge, but it is still a question: never folded away.\n if (toolName === 'ask_user') return 'ask_user';\n // Built-in `request_connection` tool from `@mastra/connect`: a settled call renders\n // as an interactive connect card; while running it falls back to a plain badge.\n if (toolName === CONNECT_PROMPT_TOOL_NAME && isConnectPromptPayload(output)) return 'connect_prompt';\n const { suspended } = toolInteraction(metadata, toolName, toolCallId);\n if (\n toolName === SUBMIT_PLAN_TOOL_ID ||\n hasSubmitPlanToolId(suspended?.suspendPayload) ||\n hasSubmitPlanToolId(output)\n ) {\n return 'submit_plan';\n }\n // A foreground call parked on an MCP task's question: the run waits for the answer. A deferred\n // call's question lives on its background task instead, which the background card reads.\n if (!isDeferredCall(backgroundTaskId, backgroundTaskStatus) && suspendedMcpInputRequest(metadata, toolCallId)) {\n return 'mcp_input_request';\n }\n if (typeof output === 'string' && output.toLowerCase().includes('background task')) return 'background';\n if (isAgentCall(metadata, toolName)) return 'agent';\n if (isWorkflowCall(metadata, toolName)) return 'workflow';\n if (toolName === WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES) return 'file_tree';\n if (SANDBOX_TOOLS.has(toolName)) return 'sandbox';\n if (codeModeCall(input, output)) return 'code_mode';\n if (mcpAppTools?.[toolName]) return 'mcp_app';\n // A settled or failed Knowledge call draws as a readable card; while running it stays a plain badge.\n if (\n KNOWLEDGE_TOOLS.has(toolName) &&\n (state === 'output-error' || (isSettledState(state) && knowledgeCard(toolName, input, output)))\n ) {\n return 'knowledge';\n }\n return 'plain';\n}\n"],"mappings":";;;;;;;;;;AAyCA,IAAM,gCAAgB,IAAI,IAAY;CACpC,gBAAgB,QAAQ;CACxB,gBAAgB,QAAQ;CACxB,gBAAgB,QAAQ;AAC1B,CAAC;AAED,IAAM,uBAAuB,UAA4B,SAAS,KAAK,KAAK,MAAM,WAAA;AAElF,IAAM,iBAAiB,UAAuC,SAC5D,UAAU,SAAS,aAAa,SAAS,SAAS;AAEpD,IAAa,eAAe,UAAuC,aACjE,cAAc,UAAU,OAAO,KAAK,SAAS,WAAW,QAAQ;AAElE,IAAa,kBAAkB,UAAuC,aACpE,cAAc,UAAU,UAAU,KAAK,SAAS,WAAW,WAAW;AAExE,IAAa,kBAAkB,UAC7B,UAAU,sBAAsB,UAAU;;AAG5C,IAAa,kBAAkB,kBAAsC,yBACnE,qBAAqB,KAAA,KAAa,yBAAyB,eAAe,yBAAyB;;AAGrG,SAAgB,YAAY,OAA2B,aAAsC;CAC3F,IAAI,UAAU,gBAAgB,OAAO;CACrC,IAAI,eAAe,KAAK,KAAK,CAAC,aAAa,OAAO;CAClD,OAAO;AACT;AAEA,IAAa,gBAAgB,OAAgB,WAC3C,SAAS,KAAK,KAAK,OAAO,UAAU,WAAW,gBAAgB,OAAO,MAAM,IAAI;;AAGlF,SAAgB,gBACd,UACA,UACA,YACiB;CACjB,MAAM,YAAY,UAAU;CAC5B,MAAM,cAAc,UAAU;CAC9B,MAAM,gBAAgB,YAAY;CAClC,OAAO;EACL,UACE,UAAU,SAAS,YACf,eAAe,eAAe,aAC5B,gBACA,YAAY,cACb,YAAY,eACb,OAAO,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,MAAK,aAAY,SAAS,eAAe,UAAU;EACxF,WAAW,cAAc,aAAa,cAAc;CACtD;AACF;;AAGA,SAAgB,aAAa,UAA2B;CACtD,OAAO,aAAa,yBAAyB,WAAW,QAAQ;AAClE;AAEA,SAAgB,aACd,EAAE,UAAU,YAAY,OAAO,QAAQ,OAAO,kBAAkB,wBAChE,EAAE,UAAU,eACE;CACd,IAAI,aAAa,gCAAgC,OAAO;CACxD,IAAI,aAAa,QAAQ,GAAG,OAAO;CAEnC,IAAI,aAAa,YAAY,OAAO;CAGpC,IAAI,aAAA,wBAAyC,uBAAuB,MAAM,GAAG,OAAO;CACpF,MAAM,EAAE,cAAc,gBAAgB,UAAU,UAAU,UAAU;CACpE,IACE,aAAA,iBACA,oBAAoB,WAAW,cAAc,KAC7C,oBAAoB,MAAM,GAE1B,OAAO;CAIT,IAAI,CAAC,eAAe,kBAAkB,oBAAoB,KAAK,yBAAyB,UAAU,UAAU,GAC1G,OAAO;CAET,IAAI,OAAO,WAAW,YAAY,OAAO,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,OAAO;CAC3F,IAAI,YAAY,UAAU,QAAQ,GAAG,OAAO;CAC5C,IAAI,eAAe,UAAU,QAAQ,GAAG,OAAO;CAC/C,IAAI,aAAa,gBAAgB,WAAW,YAAY,OAAO;CAC/D,IAAI,cAAc,IAAI,QAAQ,GAAG,OAAO;CACxC,IAAI,aAAa,OAAO,MAAM,GAAG,OAAO;CACxC,IAAI,cAAc,WAAW,OAAO;CAEpC,IACE,gBAAgB,IAAI,QAAQ,MAC3B,UAAU,kBAAmB,eAAe,KAAK,KAAK,cAAc,UAAU,OAAO,MAAM,IAE5F,OAAO;CAET,OAAO;AACT"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_tool_card = require("../../../tool-card-
|
|
2
|
+
const require_tool_card = require("../../../tool-card-rxhTDpk_.cjs");
|
|
3
3
|
exports.ToolCard = require_tool_card.ToolCard;
|
|
4
4
|
exports.ToolCardInner = require_tool_card.ToolCardInner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as ToolCard, n as ToolCardInner } from "../../../tool-card-
|
|
1
|
+
export { t as ToolCard, n as ToolCardInner } from "../../../tool-card-toDgoZzJ.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_tool_call = require("../../../tool-call-
|
|
2
|
+
const require_tool_call = require("../../../tool-call-DBn14X-3.cjs");
|
|
3
3
|
const require_domains_chat_messages_signal_data = require("../messages/signal-data.cjs.js");
|
|
4
4
|
const require_domains_chat_messages_renderers_tool_part = require("../messages/renderers/tool-part.cjs.js");
|
|
5
5
|
const require_domains_chat_tools_tool_card_kind = require("./tool-card-kind.cjs.js");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { u as groupConsecutive } from "../../../tool-call-
|
|
1
|
+
import { u as groupConsecutive } from "../../../tool-call-Dsj43lvJ.js";
|
|
2
2
|
import { isSignalData } from "../messages/signal-data.es.js";
|
|
3
3
|
import { isToolPart, readToolPart } from "../messages/renderers/tool-part.es.js";
|
|
4
4
|
import { toolCardKind, toolInteraction } from "./tool-card-kind.es.js";
|
package/dist/domains/chat.cjs.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_domains_chat_messages_signal_data = require("./chat/messages/signal-data.cjs.js");
|
|
3
|
+
const require_domains_chat_knowledge_pinned_knowledge_data = require("./chat/knowledge/pinned-knowledge-data.cjs.js");
|
|
4
|
+
const require_domains_chat_knowledge_knowledge_links = require("./chat/knowledge/knowledge-links.cjs.js");
|
|
2
5
|
const require_domains_chat_context_chat_context = require("./chat/context/chat-context.cjs.js");
|
|
3
6
|
const require_domains_chat_components_badge_wrapper = require("./chat/components/badge-wrapper.cjs.js");
|
|
4
7
|
const require_domains_chat_components_loading_badge = require("./chat/components/loading-badge.cjs.js");
|
|
@@ -7,9 +10,6 @@ const require_domains_chat_components_section_label = require("./chat/components
|
|
|
7
10
|
const require_domains_chat_context_dataset_save_context_value = require("./chat/context/dataset-save-context-value.cjs.js");
|
|
8
11
|
const require_domains_chat_context_dataset_save_context = require("./chat/context/dataset-save-context.cjs.js");
|
|
9
12
|
const require_domains_chat_context_tool_call_context = require("./chat/context/tool-call-context.cjs.js");
|
|
10
|
-
const require_domains_chat_messages_signal_data = require("./chat/messages/signal-data.cjs.js");
|
|
11
|
-
const require_domains_chat_knowledge_pinned_knowledge_data = require("./chat/knowledge/pinned-knowledge-data.cjs.js");
|
|
12
|
-
const require_domains_chat_knowledge_knowledge_links = require("./chat/knowledge/knowledge-links.cjs.js");
|
|
13
13
|
const require_domains_chat_knowledge_pinned_knowledge = require("./chat/knowledge/pinned-knowledge.cjs.js");
|
|
14
14
|
const require_domains_chat_tools_badges_knowledge_tool_badge = require("./chat/tools/badges/knowledge-tool-badge.cjs.js");
|
|
15
15
|
const require_domains_chat_messages_renderers_tool_part = require("./chat/messages/renderers/tool-part.cjs.js");
|
|
@@ -52,5 +52,7 @@ exports.useChatRunning = require_domains_chat_context_chat_context.useChatRunnin
|
|
|
52
52
|
exports.useChatSend = require_domains_chat_context_chat_context.useChatSend;
|
|
53
53
|
exports.useChatTasks = require_domains_chat_context_chat_context.useChatTasks;
|
|
54
54
|
exports.useDatasetSaveContext = require_domains_chat_context_dataset_save_context_value.useDatasetSaveContext;
|
|
55
|
+
exports.useHasKnowledgeLinks = require_domains_chat_knowledge_knowledge_links.useHasKnowledgeLinks;
|
|
56
|
+
exports.useKnowledgeLinksContext = require_domains_chat_knowledge_knowledge_links.useKnowledgeLinksContext;
|
|
55
57
|
exports.useOptionalToolCall = require_domains_chat_context_tool_call_context.useOptionalToolCall;
|
|
56
58
|
exports.useToolCall = require_domains_chat_context_tool_call_context.useToolCall;
|
package/dist/domains/chat.es.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, getSignalType, isRecord, isSignalData, isUserSignalType, signalContentsToText, toReactiveSignalData } from "./chat/messages/signal-data.es.js";
|
|
2
|
+
import { knowledgePageHref, pinnedKnowledgeFromSignal } from "./chat/knowledge/pinned-knowledge-data.es.js";
|
|
3
|
+
import { KnowledgeLinksProvider, KnowledgePageLink, useHasKnowledgeLinks, useKnowledgeLinksContext } from "./chat/knowledge/knowledge-links.es.js";
|
|
1
4
|
import { ChatAgentContext, ChatMessagesContext, ChatRunningContext, ChatSendContext, ChatTasksContext, useChatMessages, useChatRunning, useChatSend, useChatTasks } from "./chat/context/chat-context.es.js";
|
|
2
5
|
import { BadgeWrapper } from "./chat/components/badge-wrapper.es.js";
|
|
3
6
|
import { LoadingBadge } from "./chat/components/loading-badge.es.js";
|
|
@@ -6,12 +9,9 @@ import { SectionLabel } from "./chat/components/section-label.es.js";
|
|
|
6
9
|
import { useDatasetSaveContext } from "./chat/context/dataset-save-context-value.es.js";
|
|
7
10
|
import { DatasetSaveProvider } from "./chat/context/dataset-save-context.es.js";
|
|
8
11
|
import { ToolCallProvider, useOptionalToolCall, useToolCall } from "./chat/context/tool-call-context.es.js";
|
|
9
|
-
import { formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, getSignalType, isRecord, isSignalData, isUserSignalType, signalContentsToText, toReactiveSignalData } from "./chat/messages/signal-data.es.js";
|
|
10
|
-
import { knowledgePageHref, pinnedKnowledgeFromSignal } from "./chat/knowledge/pinned-knowledge-data.es.js";
|
|
11
|
-
import { KnowledgeLinksProvider, KnowledgePageLink } from "./chat/knowledge/knowledge-links.es.js";
|
|
12
12
|
import { PinnedKnowledgeActivity } from "./chat/knowledge/pinned-knowledge.es.js";
|
|
13
13
|
import { KNOWLEDGE_TOOLS, knowledgeCard } from "./chat/tools/badges/knowledge-tool-badge.es.js";
|
|
14
14
|
import { isToolPart, readToolPart } from "./chat/messages/renderers/tool-part.es.js";
|
|
15
15
|
import { DatasetSaveAction, SaveFullConversationAction } from "./chat/messages/dataset-save-action.es.js";
|
|
16
16
|
import { AssistantMessageActions } from "./chat/messages/assistant-message-actions.es.js";
|
|
17
|
-
export { AssistantMessageActions, BadgeWrapper, ChatAgentContext, ChatMessagesContext, ChatRunningContext, ChatSendContext, ChatTasksContext, DatasetSaveAction, DatasetSaveProvider, KNOWLEDGE_TOOLS, KnowledgeLinksProvider, KnowledgePageLink, LoadingBadge, NetworkChoiceMetadataDialogTrigger, PinnedKnowledgeActivity, SaveFullConversationAction, SectionLabel, ToolCallProvider, formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, getSignalType, isRecord, isSignalData, isToolPart, isUserSignalType, knowledgeCard, knowledgePageHref, pinnedKnowledgeFromSignal, readToolPart, signalContentsToText, toReactiveSignalData, useChatMessages, useChatRunning, useChatSend, useChatTasks, useDatasetSaveContext, useOptionalToolCall, useToolCall };
|
|
17
|
+
export { AssistantMessageActions, BadgeWrapper, ChatAgentContext, ChatMessagesContext, ChatRunningContext, ChatSendContext, ChatTasksContext, DatasetSaveAction, DatasetSaveProvider, KNOWLEDGE_TOOLS, KnowledgeLinksProvider, KnowledgePageLink, LoadingBadge, NetworkChoiceMetadataDialogTrigger, PinnedKnowledgeActivity, SaveFullConversationAction, SectionLabel, ToolCallProvider, formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, getSignalType, isRecord, isSignalData, isToolPart, isUserSignalType, knowledgeCard, knowledgePageHref, pinnedKnowledgeFromSignal, readToolPart, signalContentsToText, toReactiveSignalData, useChatMessages, useChatRunning, useChatSend, useChatTasks, useDatasetSaveContext, useHasKnowledgeLinks, useKnowledgeLinksContext, useOptionalToolCall, useToolCall };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_Txt = require("../../../Txt-BnoSqxKE.cjs");
|
|
3
|
+
const require_domains_knowledge_lib_linkCountsText = require("../lib/linkCountsText.cjs.js");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
// src/domains/knowledge/components/KnowledgePageCard.tsx
|
|
6
|
+
/**
|
|
7
|
+
* What the explorer's graph tooltip says about a page: name, kind and ref, children, links. The graph's
|
|
8
|
+
* dots and the hover cards on page links in chat both draw it.
|
|
9
|
+
*/
|
|
10
|
+
function KnowledgePageCard({ name, kind, pageRef, path, childCount, links, notShown }) {
|
|
11
|
+
const children = childCount && childCount !== "0" ? `${childCount} ${childCount === "1" ? "child" : "children"}` : null;
|
|
12
|
+
const linkText = links && (links.in > 0 || links.out > 0) ? require_domains_knowledge_lib_linkCountsText.linkCountsText(links, notShown) : null;
|
|
13
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
14
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
|
|
15
|
+
as: "span",
|
|
16
|
+
variant: "label",
|
|
17
|
+
tone: "ink",
|
|
18
|
+
children: name
|
|
19
|
+
}),
|
|
20
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
|
|
21
|
+
as: "span",
|
|
22
|
+
variant: "meta",
|
|
23
|
+
tone: "muted",
|
|
24
|
+
children: pageRef ? `${kind} · ${pageRef}` : kind
|
|
25
|
+
}),
|
|
26
|
+
path ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
|
|
27
|
+
as: "span",
|
|
28
|
+
variant: "meta",
|
|
29
|
+
tone: "muted",
|
|
30
|
+
children: path
|
|
31
|
+
}) : null,
|
|
32
|
+
children ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
|
|
33
|
+
as: "span",
|
|
34
|
+
variant: "meta",
|
|
35
|
+
tone: "muted",
|
|
36
|
+
children
|
|
37
|
+
}) : null,
|
|
38
|
+
linkText ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
|
|
39
|
+
as: "span",
|
|
40
|
+
variant: "meta",
|
|
41
|
+
tone: "muted",
|
|
42
|
+
children: linkText
|
|
43
|
+
}) : null
|
|
44
|
+
] });
|
|
45
|
+
}
|
|
46
|
+
exports.KnowledgePageCard = KnowledgePageCard;
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=KnowledgePageCard.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnowledgePageCard.cjs.js","names":["linkCountsText","_Fragment","Txt"],"sources":["../../../../src/domains/knowledge/components/KnowledgePageCard.tsx"],"sourcesContent":["import { linkCountsText } from '../lib/linkCountsText';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface KnowledgePageCardProps {\n name: string;\n /** `Page`, `Scope` or a scope's display label. */\n kind: string;\n /** Where the page is addressed, e.g. `org:acme#policies/refunds`. */\n pageRef?: string;\n /** Where the page sits, from its root scope down. */\n path?: string;\n /** Already formatted (`1000+` when the server capped the count); left out when unknown or zero. */\n childCount?: string;\n /** Left out when unknown or both zero. */\n links?: { in: number; out: number };\n /** Of `links`, how many go to pages the graph doesn't draw. */\n notShown?: number;\n}\n\n/**\n * What the explorer's graph tooltip says about a page: name, kind and ref, children, links. The graph's\n * dots and the hover cards on page links in chat both draw it.\n */\nexport function KnowledgePageCard({ name, kind, pageRef, path, childCount, links, notShown }: KnowledgePageCardProps) {\n const children =\n childCount && childCount !== '0' ? `${childCount} ${childCount === '1' ? 'child' : 'children'}` : null;\n const linkText = links && (links.in > 0 || links.out > 0) ? linkCountsText(links, notShown) : null;\n return (\n <>\n <Txt as=\"span\" variant=\"label\" tone=\"ink\">\n {name}\n </Txt>\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {pageRef ? `${kind} · ${pageRef}` : kind}\n </Txt>\n {path ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {path}\n </Txt>\n ) : null}\n {children ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {children}\n </Txt>\n ) : null}\n {linkText ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {linkText}\n </Txt>\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;AAuBA,SAAgB,kBAAkB,EAAE,MAAM,MAAM,SAAS,MAAM,YAAY,OAAO,YAAoC;CACpH,MAAM,WACJ,cAAc,eAAe,MAAM,GAAG,WAAW,GAAG,eAAe,MAAM,UAAU,eAAe;CACpG,MAAM,WAAW,UAAU,MAAM,KAAK,KAAK,MAAM,MAAM,KAAKA,6CAAAA,eAAe,OAAO,QAAQ,IAAI;CAC9F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAQ,MAAK;GACjC,UAAA;EACE,CAAA;EACL,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC,UAAA,UAAU,GAAG,KAAK,KAAK,YAAY;EACjC,CAAA;EACJ,OACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC,UAAA;EACE,CAAA,IACH;EACH,WACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC;EACE,CAAA,IACH;EACH,WACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC,UAAA;EACE,CAAA,IACH;CACJ,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/knowledge/components/KnowledgePageCard';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { t as Txt } from "../../../Txt-BM6TVV_c.js";
|
|
2
|
+
import { linkCountsText } from "../lib/linkCountsText.es.js";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
// src/domains/knowledge/components/KnowledgePageCard.tsx
|
|
5
|
+
/**
|
|
6
|
+
* What the explorer's graph tooltip says about a page: name, kind and ref, children, links. The graph's
|
|
7
|
+
* dots and the hover cards on page links in chat both draw it.
|
|
8
|
+
*/
|
|
9
|
+
function KnowledgePageCard({ name, kind, pageRef, path, childCount, links, notShown }) {
|
|
10
|
+
const children = childCount && childCount !== "0" ? `${childCount} ${childCount === "1" ? "child" : "children"}` : null;
|
|
11
|
+
const linkText = links && (links.in > 0 || links.out > 0) ? linkCountsText(links, notShown) : null;
|
|
12
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13
|
+
/* @__PURE__ */ jsx(Txt, {
|
|
14
|
+
as: "span",
|
|
15
|
+
variant: "label",
|
|
16
|
+
tone: "ink",
|
|
17
|
+
children: name
|
|
18
|
+
}),
|
|
19
|
+
/* @__PURE__ */ jsx(Txt, {
|
|
20
|
+
as: "span",
|
|
21
|
+
variant: "meta",
|
|
22
|
+
tone: "muted",
|
|
23
|
+
children: pageRef ? `${kind} · ${pageRef}` : kind
|
|
24
|
+
}),
|
|
25
|
+
path ? /* @__PURE__ */ jsx(Txt, {
|
|
26
|
+
as: "span",
|
|
27
|
+
variant: "meta",
|
|
28
|
+
tone: "muted",
|
|
29
|
+
children: path
|
|
30
|
+
}) : null,
|
|
31
|
+
children ? /* @__PURE__ */ jsx(Txt, {
|
|
32
|
+
as: "span",
|
|
33
|
+
variant: "meta",
|
|
34
|
+
tone: "muted",
|
|
35
|
+
children
|
|
36
|
+
}) : null,
|
|
37
|
+
linkText ? /* @__PURE__ */ jsx(Txt, {
|
|
38
|
+
as: "span",
|
|
39
|
+
variant: "meta",
|
|
40
|
+
tone: "muted",
|
|
41
|
+
children: linkText
|
|
42
|
+
}) : null
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
45
|
+
export { KnowledgePageCard };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=KnowledgePageCard.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnowledgePageCard.es.js","names":["_Fragment"],"sources":["../../../../src/domains/knowledge/components/KnowledgePageCard.tsx"],"sourcesContent":["import { linkCountsText } from '../lib/linkCountsText';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface KnowledgePageCardProps {\n name: string;\n /** `Page`, `Scope` or a scope's display label. */\n kind: string;\n /** Where the page is addressed, e.g. `org:acme#policies/refunds`. */\n pageRef?: string;\n /** Where the page sits, from its root scope down. */\n path?: string;\n /** Already formatted (`1000+` when the server capped the count); left out when unknown or zero. */\n childCount?: string;\n /** Left out when unknown or both zero. */\n links?: { in: number; out: number };\n /** Of `links`, how many go to pages the graph doesn't draw. */\n notShown?: number;\n}\n\n/**\n * What the explorer's graph tooltip says about a page: name, kind and ref, children, links. The graph's\n * dots and the hover cards on page links in chat both draw it.\n */\nexport function KnowledgePageCard({ name, kind, pageRef, path, childCount, links, notShown }: KnowledgePageCardProps) {\n const children =\n childCount && childCount !== '0' ? `${childCount} ${childCount === '1' ? 'child' : 'children'}` : null;\n const linkText = links && (links.in > 0 || links.out > 0) ? linkCountsText(links, notShown) : null;\n return (\n <>\n <Txt as=\"span\" variant=\"label\" tone=\"ink\">\n {name}\n </Txt>\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {pageRef ? `${kind} · ${pageRef}` : kind}\n </Txt>\n {path ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {path}\n </Txt>\n ) : null}\n {children ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {children}\n </Txt>\n ) : null}\n {linkText ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\">\n {linkText}\n </Txt>\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgB,kBAAkB,EAAE,MAAM,MAAM,SAAS,MAAM,YAAY,OAAO,YAAoC;CACpH,MAAM,WACJ,cAAc,eAAe,MAAM,GAAG,WAAW,GAAG,eAAe,MAAM,UAAU,eAAe;CACpG,MAAM,WAAW,UAAU,MAAM,KAAK,KAAK,MAAM,MAAM,KAAK,eAAe,OAAO,QAAQ,IAAI;CAC9F,OACE,qBAAAA,UAAA,EAAA,UAAA;EACE,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAQ,MAAK;GACjC,UAAA;EACE,CAAA;EACL,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC,UAAA,UAAU,GAAG,KAAK,KAAK,YAAY;EACjC,CAAA;EACJ,OACC,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC,UAAA;EACE,CAAA,IACH;EACH,WACC,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC;EACE,CAAA,IACH;EACH,WACC,oBAAC,KAAD;GAAK,IAAG;GAAO,SAAQ;GAAO,MAAK;GAChC,UAAA;EACE,CAAA,IACH;CACJ,EAAA,CAAA;AAEN"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_Txt = require("../../../Txt-BnoSqxKE.cjs");
|
|
3
3
|
const require_Badge = require("../../../Badge-DZ6r6bcw.cjs");
|
|
4
|
-
const require_MarkdownRenderer = require("../../../MarkdownRenderer-
|
|
4
|
+
const require_MarkdownRenderer = require("../../../MarkdownRenderer-y65WGBhC.cjs");
|
|
5
|
+
const require_domains_knowledge_lib_remarkKnowledgeLinks = require("../lib/remarkKnowledgeLinks.cjs.js");
|
|
6
|
+
const require_domains_knowledge_lib_pageRefs = require("../lib/pageRefs.cjs.js");
|
|
5
7
|
const require_domains_knowledge_lib_recordText = require("../lib/recordText.cjs.js");
|
|
6
8
|
let react = require("react");
|
|
7
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -93,6 +95,32 @@ function knowledgePagePath(page, ancestors) {
|
|
|
93
95
|
if (keys.some((key) => !key)) return null;
|
|
94
96
|
return `${scope.address}#${keys.join("/")}`;
|
|
95
97
|
}
|
|
98
|
+
var BodyLinks = (0, react.createContext)(null);
|
|
99
|
+
/**
|
|
100
|
+
* A `[[ref]]` from a page body: the page's name as a link when a loaded page answers to the ref, the ref
|
|
101
|
+
* itself in a quiet style when none does. Every other `<span>` the markdown makes passes through.
|
|
102
|
+
*/
|
|
103
|
+
function BodySpan({ node, ...props }) {
|
|
104
|
+
const links = (0, react.useContext)(BodyLinks);
|
|
105
|
+
const ref = node?.properties[require_domains_knowledge_lib_remarkKnowledgeLinks.KNOWLEDGE_REF_PROPERTY];
|
|
106
|
+
if (typeof ref !== "string" || !links) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { ...props });
|
|
107
|
+
const target = links.index.resolve(ref);
|
|
108
|
+
return target ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
109
|
+
type: "button",
|
|
110
|
+
"data-testid": "knowledge-body-link",
|
|
111
|
+
title: ref,
|
|
112
|
+
className: "rounded bg-badge-blue-subtle px-1 font-medium text-badge-blue-foreground hover:underline",
|
|
113
|
+
onClick: () => links.onPageClick(target),
|
|
114
|
+
children: target.name
|
|
115
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
116
|
+
"data-testid": "knowledge-body-link-unresolved",
|
|
117
|
+
title: "No loaded page has this address",
|
|
118
|
+
className: "rounded border border-dashed border-border px-1 text-muted-foreground",
|
|
119
|
+
children: ref
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
var BODY_REMARK_PLUGINS = [require_domains_knowledge_lib_remarkKnowledgeLinks.remarkKnowledgeLinks];
|
|
123
|
+
var BODY_COMPONENTS = { span: BodySpan };
|
|
96
124
|
function Section({ label, count, children }) {
|
|
97
125
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
98
126
|
"aria-label": label,
|
|
@@ -121,9 +149,20 @@ function PageLink({ page, onPageClick }) {
|
|
|
121
149
|
children: page.name
|
|
122
150
|
});
|
|
123
151
|
}
|
|
152
|
+
var refIndexes = /* @__PURE__ */ new WeakMap();
|
|
153
|
+
/** One ref index per loaded-pages map, shared by every note drawn from it. */
|
|
154
|
+
function loadedRefIndex(pagesById) {
|
|
155
|
+
let index = refIndexes.get(pagesById);
|
|
156
|
+
if (!index) refIndexes.set(pagesById, index = require_domains_knowledge_lib_pageRefs.knowledgePageRefIndex(pagesById.values()));
|
|
157
|
+
return index;
|
|
158
|
+
}
|
|
124
159
|
/** One note: who wrote it and when, its text with `[[mentions]]` linked when the page is known, and the scopes it is stamped to. */
|
|
125
160
|
function KnowledgeNoteItem({ note, pagesById, onPageClick, highlighted, itemRef, showPage, compact }) {
|
|
126
|
-
const
|
|
161
|
+
const refIndex = loadedRefIndex(pagesById);
|
|
162
|
+
const mentionTarget = (ref) => {
|
|
163
|
+
const target = refIndex.resolve(ref);
|
|
164
|
+
return target && note.mentions.includes(target.id) ? target : void 0;
|
|
165
|
+
};
|
|
127
166
|
const scopeLabel = (id) => {
|
|
128
167
|
const scopePage = pagesById.get(id);
|
|
129
168
|
return scopePage?.address ?? scopePage?.name ?? id;
|
|
@@ -170,8 +209,7 @@ function KnowledgeNoteItem({ note, pagesById, onPageClick, highlighted, itemRef,
|
|
|
170
209
|
className: "text-ui-md break-words text-foreground",
|
|
171
210
|
children: require_domains_knowledge_lib_recordText.parseRecordSegments(note.text).map((segment, index) => {
|
|
172
211
|
if (segment.type === "text") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: segment.value }, index);
|
|
173
|
-
const
|
|
174
|
-
const target = mentioned.find((candidate) => candidate.name.trim().toLocaleLowerCase() === name);
|
|
212
|
+
const target = mentionTarget(segment.value);
|
|
175
213
|
return target ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
176
214
|
type: "button",
|
|
177
215
|
className: "rounded bg-badge-blue-subtle px-1 font-medium text-badge-blue-foreground hover:underline",
|
|
@@ -214,6 +252,19 @@ function KnowledgePageDetail({ page, notes, pin, pagesById, onPageClick, highlig
|
|
|
214
252
|
const scope = page.isScope ? page : ancestors.find((candidate) => candidate.id === page.scopeId) ?? pagesById.get(page.scopeId);
|
|
215
253
|
const path = knowledgePagePath(page, ancestors);
|
|
216
254
|
const kind = page.isScope ? page.displayLabel ?? "Scope" : "Page";
|
|
255
|
+
const refIndex = (0, react.useMemo)(() => require_domains_knowledge_lib_pageRefs.knowledgePageRefIndex([
|
|
256
|
+
...pagesById.values(),
|
|
257
|
+
...ancestors,
|
|
258
|
+
page
|
|
259
|
+
]), [
|
|
260
|
+
pagesById,
|
|
261
|
+
ancestors,
|
|
262
|
+
page
|
|
263
|
+
]);
|
|
264
|
+
const bodyLinks = (0, react.useMemo)(() => ({
|
|
265
|
+
index: refIndex,
|
|
266
|
+
onPageClick
|
|
267
|
+
}), [refIndex, onPageClick]);
|
|
217
268
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
218
269
|
"aria-label": page.name,
|
|
219
270
|
className: "flex min-h-0 flex-col overflow-y-auto",
|
|
@@ -340,7 +391,14 @@ function KnowledgePageDetail({ page, notes, pin, pagesById, onPageClick, highlig
|
|
|
340
391
|
children: [page.body ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
341
392
|
"data-testid": "knowledge-page-body",
|
|
342
393
|
className: "max-w-3xl",
|
|
343
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
394
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BodyLinks.Provider, {
|
|
395
|
+
value: bodyLinks,
|
|
396
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MarkdownRenderer.MarkdownRenderer, {
|
|
397
|
+
remarkPlugins: BODY_REMARK_PLUGINS,
|
|
398
|
+
components: BODY_COMPONENTS,
|
|
399
|
+
children: page.body
|
|
400
|
+
})
|
|
401
|
+
})
|
|
344
402
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Txt.Txt, {
|
|
345
403
|
variant: "body",
|
|
346
404
|
tone: "muted",
|