@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-task-chip.es.js","names":[],"sources":["../../../../../src/domains/chat/tools/badges/mcp-task-chip.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\nimport { isTerminalMcpTaskStatus } from './use-mcp-task-progress';\nimport type { McpTaskStatus, McpTaskView } from './use-mcp-task-progress';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeIndicator, BadgeVariant } from '@/ds/components/Badge';\nimport { CopyButton } from '@/ds/components/CopyButton';\n\nconst STATUS: Record<McpTaskStatus, { label: string; variant: BadgeVariant; indicator?: BadgeIndicator }> = {\n working: { label: 'working', variant: 'info', indicator: 'pulse' },\n input_required: { label: 'input required', variant: 'warning', indicator: 'dot' },\n completed: { label: 'completed', variant: 'success' },\n failed: { label: 'failed', variant: 'destructive' },\n cancelled: { label: 'cancelled', variant: 'neutral' },\n};\n\n/** Now, every second, until `endedAt` is known. */\nfunction useClock(endedAt: number | undefined) {\n const [now, setNow] = useState(Date.now);\n useEffect(() => {\n if (endedAt !== undefined) return;\n const timer = setInterval(() => setNow(Date.now()), 1_000);\n return () => clearInterval(timer);\n }, [endedAt]);\n return endedAt ?? now;\n}\n\nconst formatElapsed = (ms: number) => {\n // A server may send a valid ISO 8601 `createdAt` that `Date.parse` can't read, like `20261029T120000Z`.\n if (Number.isNaN(ms)) return '--:--';\n const seconds = Math.max(0, Math.floor(ms / 1000));\n return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`;\n};\n\n/** `task · working · 0:42` for a tool call that continued as an MCP task, with its task id to copy. */\nexport function McpTaskChip({ task }: { task: McpTaskView }) {\n const { label, variant, indicator } = STATUS[task.status];\n const terminal = isTerminalMcpTaskStatus(task.status);\n const elapsed = useClock(terminal ? task.endedAt : undefined) - Date.parse(task.createdAt);\n\n return (\n <span className=\"inline-flex items-center gap-1\" data-testid=\"mcp-task-chip\">\n <Badge\n size=\"sm\"\n variant={variant}\n emphasis=\"subtle\"\n indicator={indicator}\n title={`MCP task ${task.taskId} on ${task.serverName}`}\n >\n task · {label} · <span className=\"font-mono tabular-nums\">{formatElapsed(elapsed)}</span>\n </Badge>\n <CopyButton content={task.taskId} tooltip=\"Copy MCP task id\" copyMessage=\"Copied MCP task id\" />\n </span>\n );\n}\n\nconst BACKGROUND_POLL_MS = 2_000;\n\n/** How the Mastra background task ended, as the MCP task's status; undefined while it runs. */\nconst BACKGROUND_END: Record<string, McpTaskStatus | undefined> = {\n completed: 'completed',\n failed: 'failed',\n timed_out: 'failed',\n cancelled: 'cancelled',\n};\n\n/**\n * The chip for a call deferred to a Mastra background task. The chat stream ends with the turn, so\n * the task's later progress and its end never reach this card; until the progress shows the task\n * ended, the background task is polled for how it ended.\n */\nexport function BackgroundMcpTaskChip({ task, backgroundTaskId }: { task: McpTaskView; backgroundTaskId: string }) {\n const client = useMastraClient();\n const ended = isTerminalMcpTaskStatus(task.status);\n const { data, dataUpdatedAt } = useQuery({\n queryKey:
|
|
1
|
+
{"version":3,"file":"mcp-task-chip.es.js","names":[],"sources":["../../../../../src/domains/chat/tools/badges/mcp-task-chip.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\nimport { backgroundTaskQueryKey } from './use-deferred-input-request';\nimport { isTerminalMcpTaskStatus } from './use-mcp-task-progress';\nimport type { McpTaskStatus, McpTaskView } from './use-mcp-task-progress';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeIndicator, BadgeVariant } from '@/ds/components/Badge';\nimport { CopyButton } from '@/ds/components/CopyButton';\n\nconst STATUS: Record<McpTaskStatus, { label: string; variant: BadgeVariant; indicator?: BadgeIndicator }> = {\n working: { label: 'working', variant: 'info', indicator: 'pulse' },\n input_required: { label: 'input required', variant: 'warning', indicator: 'dot' },\n completed: { label: 'completed', variant: 'success' },\n failed: { label: 'failed', variant: 'destructive' },\n cancelled: { label: 'cancelled', variant: 'neutral' },\n};\n\n/** Now, every second, until `endedAt` is known. */\nfunction useClock(endedAt: number | undefined) {\n const [now, setNow] = useState(Date.now);\n useEffect(() => {\n if (endedAt !== undefined) return;\n const timer = setInterval(() => setNow(Date.now()), 1_000);\n return () => clearInterval(timer);\n }, [endedAt]);\n return endedAt ?? now;\n}\n\nconst formatElapsed = (ms: number) => {\n // A server may send a valid ISO 8601 `createdAt` that `Date.parse` can't read, like `20261029T120000Z`.\n if (Number.isNaN(ms)) return '--:--';\n const seconds = Math.max(0, Math.floor(ms / 1000));\n return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`;\n};\n\n/** `task · working · 0:42` for a tool call that continued as an MCP task, with its task id to copy. */\nexport function McpTaskChip({ task }: { task: McpTaskView }) {\n const { label, variant, indicator } = STATUS[task.status];\n const terminal = isTerminalMcpTaskStatus(task.status);\n const elapsed = useClock(terminal ? task.endedAt : undefined) - Date.parse(task.createdAt);\n\n return (\n <span className=\"inline-flex items-center gap-1\" data-testid=\"mcp-task-chip\">\n <Badge\n size=\"sm\"\n variant={variant}\n emphasis=\"subtle\"\n indicator={indicator}\n title={`MCP task ${task.taskId} on ${task.serverName}`}\n >\n task · {label} · <span className=\"font-mono tabular-nums\">{formatElapsed(elapsed)}</span>\n </Badge>\n <CopyButton content={task.taskId} tooltip=\"Copy MCP task id\" copyMessage=\"Copied MCP task id\" />\n </span>\n );\n}\n\nconst BACKGROUND_POLL_MS = 2_000;\n\n/** How the Mastra background task ended, as the MCP task's status; undefined while it runs. */\nconst BACKGROUND_END: Record<string, McpTaskStatus | undefined> = {\n completed: 'completed',\n failed: 'failed',\n timed_out: 'failed',\n cancelled: 'cancelled',\n};\n\n/**\n * The chip for a call deferred to a Mastra background task. The chat stream ends with the turn, so\n * the task's later progress and its end never reach this card; until the progress shows the task\n * ended, the background task is polled for how it ended.\n */\nexport function BackgroundMcpTaskChip({ task, backgroundTaskId }: { task: McpTaskView; backgroundTaskId: string }) {\n const client = useMastraClient();\n const ended = isTerminalMcpTaskStatus(task.status);\n const { data, dataUpdatedAt } = useQuery({\n queryKey: backgroundTaskQueryKey(backgroundTaskId),\n queryFn: () => client.getBackgroundTask(backgroundTaskId),\n enabled: !ended,\n refetchInterval: query => (BACKGROUND_END[query.state.data?.status ?? ''] ? false : BACKGROUND_POLL_MS),\n });\n const backgroundEnd = ended ? undefined : BACKGROUND_END[data?.status ?? ''];\n const completedAt = data?.completedAt ? new Date(data.completedAt).getTime() : undefined;\n // The call's progress stops reaching the chat with the turn, so a question answered later still\n // reads `input_required` there; the background task says whether it is waiting or working.\n const waiting =\n data?.status === 'suspended' ? 'input_required' : data?.status === 'running' ? 'working' : task.status;\n\n return (\n <McpTaskChip\n task={\n backgroundEnd\n ? { ...task, status: backgroundEnd, endedAt: completedAt ?? task.endedAt ?? dataUpdatedAt }\n : ended\n ? task\n : { ...task, status: waiting }\n }\n />\n );\n}\n"],"mappings":";;;;;;;;;AAUA,IAAM,SAAsG;CAC1G,SAAS;EAAE,OAAO;EAAW,SAAS;EAAQ,WAAW;CAAQ;CACjE,gBAAgB;EAAE,OAAO;EAAkB,SAAS;EAAW,WAAW;CAAM;CAChF,WAAW;EAAE,OAAO;EAAa,SAAS;CAAU;CACpD,QAAQ;EAAE,OAAO;EAAU,SAAS;CAAc;CAClD,WAAW;EAAE,OAAO;EAAa,SAAS;CAAU;AACtD;;AAGA,SAAS,SAAS,SAA6B;CAC7C,MAAM,CAAC,KAAK,UAAU,SAAS,KAAK,GAAG;CACvC,gBAAgB;EACd,IAAI,YAAY,KAAA,GAAW;EAC3B,MAAM,QAAQ,kBAAkB,OAAO,KAAK,IAAI,CAAC,GAAG,GAAK;EACzD,aAAa,cAAc,KAAK;CAClC,GAAG,CAAC,OAAO,CAAC;CACZ,OAAO,WAAW;AACpB;AAEA,IAAM,iBAAiB,OAAe;CAEpC,IAAI,OAAO,MAAM,EAAE,GAAG,OAAO;CAC7B,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,GAAI,CAAC;CACjD,OAAO,GAAG,KAAK,MAAM,UAAU,EAAE,EAAE,GAAG,OAAO,UAAU,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;AAC5E;;AAGA,SAAgB,YAAY,EAAE,QAA+B;CAC3D,MAAM,EAAE,OAAO,SAAS,cAAc,OAAO,KAAK;CAElD,MAAM,UAAU,SADC,wBAAwB,KAAK,MACrB,IAAW,KAAK,UAAU,KAAA,CAAS,IAAI,KAAK,MAAM,KAAK,SAAS;CAEzF,OACE,qBAAC,QAAD;EAAM,WAAU;EAAiC,eAAY;EAA7D,UAAA,CACE,qBAAC,OAAD;GACE,MAAK;GACI;GACT,UAAS;GACE;GACX,OAAO,YAAY,KAAK,OAAO,MAAM,KAAK;GAL5C,UAAA;IAMC;IACS;IAAM;IAAG,oBAAC,QAAD;KAAM,WAAU;KAA0B,UAAA,cAAc,OAAO;IAAQ,CAAA;GACnF;EACP,CAAA,GAAA,oBAAC,YAAD;GAAY,SAAS,KAAK;GAAQ,SAAQ;GAAmB,aAAY;EAAsB,CAAA,CAC3F;;AAEV;AAEA,IAAM,qBAAqB;;AAG3B,IAAM,iBAA4D;CAChE,WAAW;CACX,QAAQ;CACR,WAAW;CACX,WAAW;AACb;;;;;;AAOA,SAAgB,sBAAsB,EAAE,MAAM,oBAAqE;CACjH,MAAM,SAAS,gBAAgB;CAC/B,MAAM,QAAQ,wBAAwB,KAAK,MAAM;CACjD,MAAM,EAAE,MAAM,kBAAkB,SAAS;EACvC,UAAU,uBAAuB,gBAAgB;EACjD,eAAe,OAAO,kBAAkB,gBAAgB;EACxD,SAAS,CAAC;EACV,kBAAiB,UAAU,eAAe,MAAM,MAAM,MAAM,UAAU,MAAM,QAAQ;CACtF,CAAC;CACD,MAAM,gBAAgB,QAAQ,KAAA,IAAY,eAAe,MAAM,UAAU;CACzE,MAAM,cAAc,MAAM,cAAc,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,QAAQ,IAAI,KAAA;CAG/E,MAAM,UACJ,MAAM,WAAW,cAAc,mBAAmB,MAAM,WAAW,YAAY,YAAY,KAAK;CAElG,OACE,oBAAC,aAAD,EACE,MACE,gBACI;EAAE,GAAG;EAAM,QAAQ;EAAe,SAAS,eAAe,KAAK,WAAW;CAAc,IACxF,QACE,OACA;EAAE,GAAG;EAAM,QAAQ;CAAQ,EAEpC,CAAA;AAEL"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_AgentIndicator = require("../../../../AgentIndicator-to30W73z.cjs");
|
|
3
|
-
const require_tool_call = require("../../../../tool-call-
|
|
4
|
-
const require_activity = require("../../../../activity-
|
|
3
|
+
const require_tool_call = require("../../../../tool-call-DBn14X-3.cjs");
|
|
4
|
+
const require_activity = require("../../../../activity-CcQZeDYi.cjs");
|
|
5
5
|
const require_domains_chat_tools_badges_observation_marker_format = require("./observation-marker-format.cjs.js");
|
|
6
6
|
const require_domains_chat_tools_badges_observation_marker_details = require("./observation-marker-details.cjs.js");
|
|
7
7
|
let react = require("react");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as agentGlyph } from "../../../../AgentIndicator-Bs2S8AWJ.js";
|
|
2
|
-
import { r as ToolCallOutput } from "../../../../tool-call-
|
|
3
|
-
import { b as ActivityTrigger, c as ActivityContent, f as ActivityHeadline, s as Activity } from "../../../../activity-
|
|
2
|
+
import { r as ToolCallOutput } from "../../../../tool-call-Dsj43lvJ.js";
|
|
3
|
+
import { b as ActivityTrigger, c as ActivityContent, f as ActivityHeadline, s as Activity } from "../../../../activity-C8Ql81WM.js";
|
|
4
4
|
import { compressionRatio, extractedValueEntries, formatTokens } from "./observation-marker-format.es.js";
|
|
5
5
|
import { Extractions, ObservationSections, ObservationStats } from "./observation-marker-details.es.js";
|
|
6
6
|
import { useState } from "react";
|
|
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_utils_duration = require("../../../../utils/duration.cjs.js");
|
|
3
3
|
const require_Txt = require("../../../../Txt-BnoSqxKE.cjs");
|
|
4
4
|
const require_code = require("../../../../code-CqgfD-cP.cjs");
|
|
5
|
-
const require_activity = require("../../../../activity-
|
|
6
|
-
const require_MarkdownRenderer = require("../../../../MarkdownRenderer-
|
|
5
|
+
const require_activity = require("../../../../activity-CcQZeDYi.cjs");
|
|
6
|
+
const require_MarkdownRenderer = require("../../../../MarkdownRenderer-y65WGBhC.cjs");
|
|
7
7
|
const require_domains_chat_tools_badges_observation_marker_format = require("./observation-marker-format.cjs.js");
|
|
8
8
|
const require_domains_chat_tools_badges_observation_renderer = require("./observation-renderer.cjs.js");
|
|
9
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { formatDuration } from "../../../../utils/duration.es.js";
|
|
2
2
|
import { t as Txt } from "../../../../Txt-BM6TVV_c.js";
|
|
3
3
|
import { t as Code } from "../../../../code-B7cFirk4.js";
|
|
4
|
-
import { m as ActivityItem } from "../../../../activity-
|
|
5
|
-
import { t as MarkdownRenderer } from "../../../../MarkdownRenderer-
|
|
4
|
+
import { m as ActivityItem } from "../../../../activity-C8Ql81WM.js";
|
|
5
|
+
import { t as MarkdownRenderer } from "../../../../MarkdownRenderer-CI30RqdB.js";
|
|
6
6
|
import { compressionRatio, extractedValueEntries, formatExtractedValue, formatTokens } from "./observation-marker-format.es.js";
|
|
7
7
|
import { ObservationRenderer } from "./observation-renderer.es.js";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -5,7 +5,7 @@ Object.defineProperties(exports, {
|
|
|
5
5
|
});
|
|
6
6
|
const require_utils = require("../../../../utils-uDc1ofX1.cjs");
|
|
7
7
|
const require_Txt = require("../../../../Txt-BnoSqxKE.cjs");
|
|
8
|
-
const require_MarkdownRenderer = require("../../../../MarkdownRenderer-
|
|
8
|
+
const require_MarkdownRenderer = require("../../../../MarkdownRenderer-y65WGBhC.cjs");
|
|
9
9
|
const require_domains_memory_lib_observation_priority = require("../../../memory/lib/observation-priority.cjs.js");
|
|
10
10
|
let react = require("react");
|
|
11
11
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as cn } from "../../../../utils-DQx8TpNT.js";
|
|
3
3
|
import { t as Txt } from "../../../../Txt-BM6TVV_c.js";
|
|
4
|
-
import { t as MarkdownRenderer } from "../../../../MarkdownRenderer-
|
|
4
|
+
import { t as MarkdownRenderer } from "../../../../MarkdownRenderer-CI30RqdB.js";
|
|
5
5
|
import { observationPriorityByEmoji, observationPriorityTone } from "../../../memory/lib/observation-priority.es.js";
|
|
6
6
|
import { useMemo } from "react";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_utils = require("../../../../utils-uDc1ofX1.cjs");
|
|
3
3
|
const require_utils_duration = require("../../../../utils/duration.cjs.js");
|
|
4
4
|
const require_Txt = require("../../../../Txt-BnoSqxKE.cjs");
|
|
5
|
-
const require_tool_call = require("../../../../tool-call-
|
|
6
|
-
const require_tool_presentation = require("../../../../tool-presentation-
|
|
5
|
+
const require_tool_call = require("../../../../tool-call-DBn14X-3.cjs");
|
|
6
|
+
const require_tool_presentation = require("../../../../tool-presentation-D6nzVruN.cjs");
|
|
7
7
|
const require_domains_chat_tools_badges_awaits_tool_approval = require("./awaits-tool-approval.cjs.js");
|
|
8
8
|
const require_domains_chat_tools_badges_tool_approval_badge = require("./tool-approval-badge.cjs.js");
|
|
9
9
|
const require_domains_chat_tools_badges_workspace_data_parts = require("./workspace-data-parts.cjs.js");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as cn } from "../../../../utils-DQx8TpNT.js";
|
|
2
2
|
import { formatDuration, formatElapsed } from "../../../../utils/duration.es.js";
|
|
3
3
|
import { t as Txt } from "../../../../Txt-BM6TVV_c.js";
|
|
4
|
-
import { c as ToolCallMono, s as ToolCallCommand } from "../../../../tool-call-
|
|
5
|
-
import { r as presentTool } from "../../../../tool-presentation-
|
|
4
|
+
import { c as ToolCallMono, s as ToolCallCommand } from "../../../../tool-call-Dsj43lvJ.js";
|
|
5
|
+
import { r as presentTool } from "../../../../tool-presentation-CvibOP1J.js";
|
|
6
6
|
import { awaitsToolApproval } from "./awaits-tool-approval.es.js";
|
|
7
7
|
import { ToolApprovalBadge } from "./tool-approval-badge.es.js";
|
|
8
8
|
import { parseToolArgs, toolDataParts, workspaceMetadata } from "./workspace-data-parts.es.js";
|
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_domains_chat_components_badge_wrapper = require("../../components/badge-wrapper.cjs.js");
|
|
3
3
|
const require_domains_chat_context_tool_call_context = require("../../context/tool-call-context.cjs.js");
|
|
4
4
|
const require_domains_chat_tools_badges_awaits_tool_approval = require("./awaits-tool-approval.cjs.js");
|
|
5
|
-
const require_tool_approval = require("../../../../tool-approval-
|
|
5
|
+
const require_tool_approval = require("../../../../tool-approval-CJvPDL7D.cjs");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
// src/domains/chat/tools/badges/tool-approval-badge.tsx
|
|
8
8
|
function useToolApproval(request) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BadgeWrapper } from "../../components/badge-wrapper.es.js";
|
|
2
2
|
import { useOptionalToolCall } from "../../context/tool-call-context.es.js";
|
|
3
3
|
import { awaitsToolApproval } from "./awaits-tool-approval.es.js";
|
|
4
|
-
import { n as ToolApprovalActions, r as ToolApprovalStatus } from "../../../../tool-approval-
|
|
4
|
+
import { n as ToolApprovalActions, r as ToolApprovalStatus } from "../../../../tool-approval-DyN11vFA.js";
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
// src/domains/chat/tools/badges/tool-approval-badge.tsx
|
|
7
7
|
function useToolApproval(request) {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_tool_call = require("../../../../tool-call-
|
|
3
|
-
const require_tool_presentation = require("../../../../tool-presentation-
|
|
2
|
+
const require_tool_call = require("../../../../tool-call-DBn14X-3.cjs");
|
|
3
|
+
const require_tool_presentation = require("../../../../tool-presentation-D6nzVruN.cjs");
|
|
4
4
|
const require_CodeEditor = require("../../../../CodeEditor-CLzs0yVc.cjs");
|
|
5
5
|
const require_domains_chat_components_network_choice_metadata_dialog = require("../../components/network-choice-metadata-dialog.cjs.js");
|
|
6
6
|
const require_domains_chat_components_section_label = require("../../components/section-label.cjs.js");
|
|
7
7
|
const require_domains_chat_tools_badges_awaits_tool_approval = require("./awaits-tool-approval.cjs.js");
|
|
8
8
|
const require_domains_chat_tools_badges_tool_approval_badge = require("./tool-approval-badge.cjs.js");
|
|
9
|
+
const require_domains_chat_tools_tool_card_kind = require("../tool-card-kind.cjs.js");
|
|
9
10
|
const require_domains_chat_tools_badges_background_task_metadata_dialog = require("./background-task-metadata-dialog.cjs.js");
|
|
10
11
|
const require_domains_chat_tools_badges_use_mcp_task_progress = require("./use-mcp-task-progress.cjs.js");
|
|
11
12
|
const require_domains_chat_tools_badges_mcp_task_chip = require("./mcp-task-chip.cjs.js");
|
|
@@ -22,7 +23,7 @@ function formatArgs(args) {
|
|
|
22
23
|
return { pretty: require_tool_presentation.stringifyToolValue(args) };
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
var ToolBadge = ({ toolName, args, result, metadata, toolOutput, toolCallId, toolApprovalMetadata, suspendPayload, isNetwork, toolCalled: toolCalledProp, withoutArgs, status = "idle", backgroundTaskId, backgroundTaskStatus }) => {
|
|
26
|
+
var ToolBadge = ({ toolName, args, result, metadata, toolOutput, toolCallId, toolApprovalMetadata, suspendPayload, isNetwork, toolCalled: toolCalledProp, withoutArgs, status = "idle", backgroundTaskId, backgroundTaskStatus, mcpInputRequest }) => {
|
|
26
27
|
const { pretty: argsPretty, parsed: argsObject } = formatArgs(args);
|
|
27
28
|
const { icon: ToolIcon, label, detail, description } = require_tool_presentation.presentTool(toolName, argsObject);
|
|
28
29
|
const resultPretty = result !== void 0 && result !== null ? require_tool_call.stripSerializedAnsi(require_tool_presentation.stringifyToolValue(result)) : void 0;
|
|
@@ -40,7 +41,11 @@ var ToolBadge = ({ toolName, args, result, metadata, toolOutput, toolCallId, too
|
|
|
40
41
|
argsText: argsPretty,
|
|
41
42
|
hideArguments: withoutArgs
|
|
42
43
|
}) || Boolean(suspendPayload) || Boolean(resultPretty) || toolOutput.length > 0 || needsApproval;
|
|
43
|
-
const
|
|
44
|
+
const deferred = require_domains_chat_tools_tool_card_kind.isDeferredCall(backgroundTaskId, backgroundTaskStatus);
|
|
45
|
+
const mcpTask = require_domains_chat_tools_badges_use_mcp_task_progress.useMcpTaskProgress(result, status, {
|
|
46
|
+
deferred,
|
|
47
|
+
request: mcpInputRequest
|
|
48
|
+
});
|
|
44
49
|
const bgEntry = (metadata?.mode === "stream" || metadata?.mode === "generate") && metadata?.backgroundTasks ? metadata.backgroundTasks[toolCallId] : void 0;
|
|
45
50
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_chat_tools_badges_tool_approval_badge.ToolApprovalBadge, {
|
|
46
51
|
approval: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-badge.cjs.js","names":["stringifyToolValue","presentTool","stripSerializedAnsi","awaitsToolApproval","hasToolArguments","useMcpTaskProgress","ToolApprovalBadge","NetworkChoiceMetadataDialogTrigger","_Fragment","BackgroundMcpTaskChip","McpTaskChip","BackgroundTaskMetadataDialogTrigger","ToolCallArguments","SectionLabel","ToolCallOutput","CodeEditor"],"sources":["../../../../../src/domains/chat/tools/badges/tool-badge.tsx"],"sourcesContent":["import { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport { BackgroundMcpTaskChip, McpTaskChip } from './mcp-task-chip';\nimport { useMcpTaskProgress } from './use-mcp-task-progress';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport {\n hasToolArguments,\n presentTool,\n stringifyToolValue,\n stripSerializedAnsi,\n ToolCallArguments,\n ToolCallOutput,\n} from '@/ds/components/ai/tool-call';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\n\nfunction formatArgs(args: Record<string, unknown> | string): { pretty: string; parsed?: Record<string, unknown> } {\n try {\n const { __mastraMetadata: _, _background, ...parsed } = typeof args === 'object' ? args : JSON.parse(args);\n return { pretty: stringifyToolValue(parsed), parsed };\n } catch {\n return { pretty: stringifyToolValue(args) };\n }\n}\n\nexport interface ToolBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n toolName: string;\n args: Record<string, unknown> | string;\n result: any;\n metadata?: MessageMetadata;\n toolOutput: Array<{ toolId: string }>;\n suspendPayload?: any;\n toolCalled?: boolean;\n withoutArgs?: boolean;\n status?: ActivityStatus;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** `running` while the part holds a deferred call's placeholder; `completed`/`failed` once it holds the result. */\n backgroundTaskStatus?: string;\n}\n\nexport const ToolBadge = ({\n toolName,\n args,\n result,\n metadata,\n toolOutput,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n isNetwork,\n toolCalled: toolCalledProp,\n withoutArgs,\n status = 'idle',\n backgroundTaskId,\n backgroundTaskStatus,\n}: ToolBadgeProps) => {\n const { pretty: argsPretty, parsed: argsObject } = formatArgs(args);\n const { icon: ToolIcon, label, detail, description } = presentTool(toolName, argsObject);\n const resultPretty =\n result !== undefined && result !== null ? stripSerializedAnsi(stringifyToolValue(result)) : undefined;\n\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const toolCalled = toolCalledProp ?? (result || toolOutput.length > 0);\n const needsApproval = awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n const hasBody =\n hasToolArguments({ toolName, args: argsObject, argsText: argsPretty, hideArguments: withoutArgs }) ||\n Boolean(suspendPayload) ||\n Boolean(resultPretty) ||\n toolOutput.length > 0 ||\n needsApproval;\n\n
|
|
1
|
+
{"version":3,"file":"tool-badge.cjs.js","names":["stringifyToolValue","presentTool","stripSerializedAnsi","awaitsToolApproval","hasToolArguments","isDeferredCall","useMcpTaskProgress","ToolApprovalBadge","NetworkChoiceMetadataDialogTrigger","_Fragment","BackgroundMcpTaskChip","McpTaskChip","BackgroundTaskMetadataDialogTrigger","ToolCallArguments","SectionLabel","ToolCallOutput","CodeEditor"],"sources":["../../../../../src/domains/chat/tools/badges/tool-badge.tsx"],"sourcesContent":["import type { McpInputRequestPayload } from '../mcp-input-request';\nimport { isDeferredCall } from '../tool-card-kind';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport { BackgroundMcpTaskChip, McpTaskChip } from './mcp-task-chip';\nimport { useMcpTaskProgress } from './use-mcp-task-progress';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport {\n hasToolArguments,\n presentTool,\n stringifyToolValue,\n stripSerializedAnsi,\n ToolCallArguments,\n ToolCallOutput,\n} from '@/ds/components/ai/tool-call';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\n\nfunction formatArgs(args: Record<string, unknown> | string): { pretty: string; parsed?: Record<string, unknown> } {\n try {\n const { __mastraMetadata: _, _background, ...parsed } = typeof args === 'object' ? args : JSON.parse(args);\n return { pretty: stringifyToolValue(parsed), parsed };\n } catch {\n return { pretty: stringifyToolValue(args) };\n }\n}\n\nexport interface ToolBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n toolName: string;\n args: Record<string, unknown> | string;\n result: any;\n metadata?: MessageMetadata;\n toolOutput: Array<{ toolId: string }>;\n suspendPayload?: any;\n toolCalled?: boolean;\n withoutArgs?: boolean;\n status?: ActivityStatus;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** `running` while the part holds a deferred call's placeholder; `completed`/`failed` once it holds the result. */\n backgroundTaskStatus?: string;\n /** The MCP task question the call is waiting on, if it is. */\n mcpInputRequest?: McpInputRequestPayload;\n}\n\nexport const ToolBadge = ({\n toolName,\n args,\n result,\n metadata,\n toolOutput,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n isNetwork,\n toolCalled: toolCalledProp,\n withoutArgs,\n status = 'idle',\n backgroundTaskId,\n backgroundTaskStatus,\n mcpInputRequest,\n}: ToolBadgeProps) => {\n const { pretty: argsPretty, parsed: argsObject } = formatArgs(args);\n const { icon: ToolIcon, label, detail, description } = presentTool(toolName, argsObject);\n const resultPretty =\n result !== undefined && result !== null ? stripSerializedAnsi(stringifyToolValue(result)) : undefined;\n\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const toolCalled = toolCalledProp ?? (result || toolOutput.length > 0);\n const needsApproval = awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n const hasBody =\n hasToolArguments({ toolName, args: argsObject, argsText: argsPretty, hideArguments: withoutArgs }) ||\n Boolean(suspendPayload) ||\n Boolean(resultPretty) ||\n toolOutput.length > 0 ||\n needsApproval;\n\n const deferred = isDeferredCall(backgroundTaskId, backgroundTaskStatus);\n const mcpTask = useMcpTaskProgress(result, status, { deferred, request: mcpInputRequest });\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"tool-badge\"\n icon={<ToolIcon aria-hidden />}\n title={label}\n detail={detail}\n description={description}\n status={status}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason || ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : mcpTask || (bgEntry?.taskId && bgEntry?.startedAt) ? (\n <>\n {mcpTask &&\n (backgroundTaskId ? (\n <BackgroundMcpTaskChip task={mcpTask} backgroundTaskId={backgroundTaskId} />\n ) : (\n <McpTaskChip task={mcpTask} />\n ))}\n {bgEntry?.taskId && bgEntry?.startedAt && <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />}\n </>\n ) : null\n }\n initialCollapsed={!(toolApprovalMetadata ?? suspendPayload)}\n >\n {hasBody && (\n <>\n <ToolCallArguments\n toolName={toolName}\n args={argsObject}\n showFullContent={needsApproval}\n argsText={argsPretty}\n hideArguments={withoutArgs}\n data-testid=\"tool-args\"\n />\n\n {suspendPayload !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Suspend payload</SectionLabel>\n {typeof suspendPayload === 'string' ? (\n <ToolCallOutput text={suspendPayload} />\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n )}\n </div>\n )}\n\n {resultPretty && <ToolCallOutput text={resultPretty} error={status === 'error'} data-testid=\"tool-result\" />}\n\n {toolOutput.length > 0 && (\n <div>\n <SectionLabel>Tool output</SectionLabel>\n <div className=\"h-40 overflow-y-auto\">\n <CodeEditor data={toolOutput} data-testid=\"tool-output\" />\n </div>\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { a as ToolCallArguments, f as stripSerializedAnsi, r as ToolCallOutput } from "../../../../tool-call-
|
|
2
|
-
import { i as stringifyToolValue, r as presentTool, t as hasToolArguments } from "../../../../tool-presentation-
|
|
1
|
+
import { a as ToolCallArguments, f as stripSerializedAnsi, r as ToolCallOutput } from "../../../../tool-call-Dsj43lvJ.js";
|
|
2
|
+
import { i as stringifyToolValue, r as presentTool, t as hasToolArguments } from "../../../../tool-presentation-CvibOP1J.js";
|
|
3
3
|
import { t as CodeEditor } from "../../../../CodeEditor-COnz9c6B.js";
|
|
4
4
|
import { NetworkChoiceMetadataDialogTrigger } from "../../components/network-choice-metadata-dialog.es.js";
|
|
5
5
|
import { SectionLabel } from "../../components/section-label.es.js";
|
|
6
6
|
import { awaitsToolApproval } from "./awaits-tool-approval.es.js";
|
|
7
7
|
import { ToolApprovalBadge } from "./tool-approval-badge.es.js";
|
|
8
|
+
import { isDeferredCall } from "../tool-card-kind.es.js";
|
|
8
9
|
import { BackgroundTaskMetadataDialogTrigger } from "./background-task-metadata-dialog.es.js";
|
|
9
10
|
import { useMcpTaskProgress } from "./use-mcp-task-progress.es.js";
|
|
10
11
|
import { BackgroundMcpTaskChip, McpTaskChip } from "./mcp-task-chip.es.js";
|
|
@@ -21,7 +22,7 @@ function formatArgs(args) {
|
|
|
21
22
|
return { pretty: stringifyToolValue(args) };
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
var ToolBadge = ({ toolName, args, result, metadata, toolOutput, toolCallId, toolApprovalMetadata, suspendPayload, isNetwork, toolCalled: toolCalledProp, withoutArgs, status = "idle", backgroundTaskId, backgroundTaskStatus }) => {
|
|
25
|
+
var ToolBadge = ({ toolName, args, result, metadata, toolOutput, toolCallId, toolApprovalMetadata, suspendPayload, isNetwork, toolCalled: toolCalledProp, withoutArgs, status = "idle", backgroundTaskId, backgroundTaskStatus, mcpInputRequest }) => {
|
|
25
26
|
const { pretty: argsPretty, parsed: argsObject } = formatArgs(args);
|
|
26
27
|
const { icon: ToolIcon, label, detail, description } = presentTool(toolName, argsObject);
|
|
27
28
|
const resultPretty = result !== void 0 && result !== null ? stripSerializedAnsi(stringifyToolValue(result)) : void 0;
|
|
@@ -39,7 +40,11 @@ var ToolBadge = ({ toolName, args, result, metadata, toolOutput, toolCallId, too
|
|
|
39
40
|
argsText: argsPretty,
|
|
40
41
|
hideArguments: withoutArgs
|
|
41
42
|
}) || Boolean(suspendPayload) || Boolean(resultPretty) || toolOutput.length > 0 || needsApproval;
|
|
42
|
-
const
|
|
43
|
+
const deferred = isDeferredCall(backgroundTaskId, backgroundTaskStatus);
|
|
44
|
+
const mcpTask = useMcpTaskProgress(result, status, {
|
|
45
|
+
deferred,
|
|
46
|
+
request: mcpInputRequest
|
|
47
|
+
});
|
|
43
48
|
const bgEntry = (metadata?.mode === "stream" || metadata?.mode === "generate") && metadata?.backgroundTasks ? metadata.backgroundTasks[toolCallId] : void 0;
|
|
44
49
|
return /* @__PURE__ */ jsx(ToolApprovalBadge, {
|
|
45
50
|
approval: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-badge.es.js","names":["_Fragment"],"sources":["../../../../../src/domains/chat/tools/badges/tool-badge.tsx"],"sourcesContent":["import { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport { BackgroundMcpTaskChip, McpTaskChip } from './mcp-task-chip';\nimport { useMcpTaskProgress } from './use-mcp-task-progress';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport {\n hasToolArguments,\n presentTool,\n stringifyToolValue,\n stripSerializedAnsi,\n ToolCallArguments,\n ToolCallOutput,\n} from '@/ds/components/ai/tool-call';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\n\nfunction formatArgs(args: Record<string, unknown> | string): { pretty: string; parsed?: Record<string, unknown> } {\n try {\n const { __mastraMetadata: _, _background, ...parsed } = typeof args === 'object' ? args : JSON.parse(args);\n return { pretty: stringifyToolValue(parsed), parsed };\n } catch {\n return { pretty: stringifyToolValue(args) };\n }\n}\n\nexport interface ToolBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n toolName: string;\n args: Record<string, unknown> | string;\n result: any;\n metadata?: MessageMetadata;\n toolOutput: Array<{ toolId: string }>;\n suspendPayload?: any;\n toolCalled?: boolean;\n withoutArgs?: boolean;\n status?: ActivityStatus;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** `running` while the part holds a deferred call's placeholder; `completed`/`failed` once it holds the result. */\n backgroundTaskStatus?: string;\n}\n\nexport const ToolBadge = ({\n toolName,\n args,\n result,\n metadata,\n toolOutput,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n isNetwork,\n toolCalled: toolCalledProp,\n withoutArgs,\n status = 'idle',\n backgroundTaskId,\n backgroundTaskStatus,\n}: ToolBadgeProps) => {\n const { pretty: argsPretty, parsed: argsObject } = formatArgs(args);\n const { icon: ToolIcon, label, detail, description } = presentTool(toolName, argsObject);\n const resultPretty =\n result !== undefined && result !== null ? stripSerializedAnsi(stringifyToolValue(result)) : undefined;\n\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const toolCalled = toolCalledProp ?? (result || toolOutput.length > 0);\n const needsApproval = awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n const hasBody =\n hasToolArguments({ toolName, args: argsObject, argsText: argsPretty, hideArguments: withoutArgs }) ||\n Boolean(suspendPayload) ||\n Boolean(resultPretty) ||\n toolOutput.length > 0 ||\n needsApproval;\n\n
|
|
1
|
+
{"version":3,"file":"tool-badge.es.js","names":["_Fragment"],"sources":["../../../../../src/domains/chat/tools/badges/tool-badge.tsx"],"sourcesContent":["import type { McpInputRequestPayload } from '../mcp-input-request';\nimport { isDeferredCall } from '../tool-card-kind';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport { BackgroundMcpTaskChip, McpTaskChip } from './mcp-task-chip';\nimport { useMcpTaskProgress } from './use-mcp-task-progress';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport {\n hasToolArguments,\n presentTool,\n stringifyToolValue,\n stripSerializedAnsi,\n ToolCallArguments,\n ToolCallOutput,\n} from '@/ds/components/ai/tool-call';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\n\nfunction formatArgs(args: Record<string, unknown> | string): { pretty: string; parsed?: Record<string, unknown> } {\n try {\n const { __mastraMetadata: _, _background, ...parsed } = typeof args === 'object' ? args : JSON.parse(args);\n return { pretty: stringifyToolValue(parsed), parsed };\n } catch {\n return { pretty: stringifyToolValue(args) };\n }\n}\n\nexport interface ToolBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n toolName: string;\n args: Record<string, unknown> | string;\n result: any;\n metadata?: MessageMetadata;\n toolOutput: Array<{ toolId: string }>;\n suspendPayload?: any;\n toolCalled?: boolean;\n withoutArgs?: boolean;\n status?: ActivityStatus;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** `running` while the part holds a deferred call's placeholder; `completed`/`failed` once it holds the result. */\n backgroundTaskStatus?: string;\n /** The MCP task question the call is waiting on, if it is. */\n mcpInputRequest?: McpInputRequestPayload;\n}\n\nexport const ToolBadge = ({\n toolName,\n args,\n result,\n metadata,\n toolOutput,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n isNetwork,\n toolCalled: toolCalledProp,\n withoutArgs,\n status = 'idle',\n backgroundTaskId,\n backgroundTaskStatus,\n mcpInputRequest,\n}: ToolBadgeProps) => {\n const { pretty: argsPretty, parsed: argsObject } = formatArgs(args);\n const { icon: ToolIcon, label, detail, description } = presentTool(toolName, argsObject);\n const resultPretty =\n result !== undefined && result !== null ? stripSerializedAnsi(stringifyToolValue(result)) : undefined;\n\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const toolCalled = toolCalledProp ?? (result || toolOutput.length > 0);\n const needsApproval = awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n const hasBody =\n hasToolArguments({ toolName, args: argsObject, argsText: argsPretty, hideArguments: withoutArgs }) ||\n Boolean(suspendPayload) ||\n Boolean(resultPretty) ||\n toolOutput.length > 0 ||\n needsApproval;\n\n const deferred = isDeferredCall(backgroundTaskId, backgroundTaskStatus);\n const mcpTask = useMcpTaskProgress(result, status, { deferred, request: mcpInputRequest });\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"tool-badge\"\n icon={<ToolIcon aria-hidden />}\n title={label}\n detail={detail}\n description={description}\n status={status}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason || ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : mcpTask || (bgEntry?.taskId && bgEntry?.startedAt) ? (\n <>\n {mcpTask &&\n (backgroundTaskId ? (\n <BackgroundMcpTaskChip task={mcpTask} backgroundTaskId={backgroundTaskId} />\n ) : (\n <McpTaskChip task={mcpTask} />\n ))}\n {bgEntry?.taskId && bgEntry?.startedAt && <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />}\n </>\n ) : null\n }\n initialCollapsed={!(toolApprovalMetadata ?? suspendPayload)}\n >\n {hasBody && (\n <>\n <ToolCallArguments\n toolName={toolName}\n args={argsObject}\n showFullContent={needsApproval}\n argsText={argsPretty}\n hideArguments={withoutArgs}\n data-testid=\"tool-args\"\n />\n\n {suspendPayload !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Suspend payload</SectionLabel>\n {typeof suspendPayload === 'string' ? (\n <ToolCallOutput text={suspendPayload} />\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n )}\n </div>\n )}\n\n {resultPretty && <ToolCallOutput text={resultPretty} error={status === 'error'} data-testid=\"tool-result\" />}\n\n {toolOutput.length > 0 && (\n <div>\n <SectionLabel>Tool output</SectionLabel>\n <div className=\"h-40 overflow-y-auto\">\n <CodeEditor data={toolOutput} data-testid=\"tool-output\" />\n </div>\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_domains_chat_tools_mcp_input_request = require("../mcp-input-request.cjs.js");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
let _mastra_react = require("@mastra/react");
|
|
5
|
+
let _mastra_react_hooks_agents = require("@mastra/react/hooks/agents");
|
|
6
|
+
let _tanstack_react_query = require("@tanstack/react-query");
|
|
7
|
+
let _mastra_client_js = require("@mastra/client-js");
|
|
8
|
+
// src/domains/chat/tools/badges/use-deferred-input-request.ts
|
|
9
|
+
var ENDED_STATUSES = /* @__PURE__ */ new Set([
|
|
10
|
+
"completed",
|
|
11
|
+
"failed",
|
|
12
|
+
"cancelled",
|
|
13
|
+
"timed_out"
|
|
14
|
+
]);
|
|
15
|
+
var backgroundTaskQueryKey = (backgroundTaskId) => ["background-task", backgroundTaskId];
|
|
16
|
+
/**
|
|
17
|
+
* The MCP input request a deferred call's background task is suspended on, if any. The task is read
|
|
18
|
+
* once (so a reloaded chat still sees an open request) and then followed over the task's event
|
|
19
|
+
* stream, whose events are folded into the same cache entry the task chip polls.
|
|
20
|
+
*/
|
|
21
|
+
function useDeferredInputRequest(backgroundTaskId, enabled) {
|
|
22
|
+
const client = (0, _mastra_react.useMastraClient)();
|
|
23
|
+
const queryClient = (0, _tanstack_react_query.useQueryClient)();
|
|
24
|
+
const queryKey = backgroundTaskQueryKey(backgroundTaskId);
|
|
25
|
+
const { data } = (0, _tanstack_react_query.useQuery)({
|
|
26
|
+
queryKey,
|
|
27
|
+
queryFn: () => client.getBackgroundTask(backgroundTaskId),
|
|
28
|
+
enabled
|
|
29
|
+
});
|
|
30
|
+
const live = !ENDED_STATUSES.has(data?.status ?? "");
|
|
31
|
+
const { tasks } = (0, _mastra_react_hooks_agents.useBackgroundTaskStream)({
|
|
32
|
+
taskId: backgroundTaskId,
|
|
33
|
+
enabled: enabled && live
|
|
34
|
+
});
|
|
35
|
+
const event = tasks[backgroundTaskId];
|
|
36
|
+
(0, react.useEffect)(() => {
|
|
37
|
+
if (!event) return;
|
|
38
|
+
const suspendedAt = "suspendedAt" in event ? event.suspendedAt : void 0;
|
|
39
|
+
const cached = queryClient.getQueryData(queryKey);
|
|
40
|
+
if (!cached) {
|
|
41
|
+
queryClient.invalidateQueries({ queryKey });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
queryClient.setQueryData(queryKey, {
|
|
45
|
+
...cached,
|
|
46
|
+
status: event.status,
|
|
47
|
+
suspendPayload: event.status === "suspended" ? event.suspendPayload : void 0,
|
|
48
|
+
suspendedAt: event.status === "suspended" ? suspendedAt : void 0
|
|
49
|
+
});
|
|
50
|
+
}, [
|
|
51
|
+
event,
|
|
52
|
+
queryClient,
|
|
53
|
+
backgroundTaskId
|
|
54
|
+
]);
|
|
55
|
+
if (!enabled || data?.status !== "suspended" || !require_domains_chat_tools_mcp_input_request.isMcpInputRequest(data.suspendPayload)) return void 0;
|
|
56
|
+
return {
|
|
57
|
+
payload: data.suspendPayload,
|
|
58
|
+
suspendedAt: data.suspendedAt
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
var ANSWER_CONFLICT_MESSAGE = "This request was already answered or has moved on.";
|
|
62
|
+
/** Answers a deferred call's suspended background task, fenced on the suspension that was shown. */
|
|
63
|
+
function useResumeBackgroundTask(backgroundTaskId) {
|
|
64
|
+
const client = (0, _mastra_react.useMastraClient)();
|
|
65
|
+
const queryClient = (0, _tanstack_react_query.useQueryClient)();
|
|
66
|
+
const queryKey = backgroundTaskQueryKey(backgroundTaskId);
|
|
67
|
+
return (0, _tanstack_react_query.useMutation)({
|
|
68
|
+
mutationFn: ({ resumeData, suspendedAt }) => client.resumeBackgroundTask(backgroundTaskId, resumeData, { suspendedAt }),
|
|
69
|
+
onSuccess: (task) => queryClient.setQueryData(queryKey, task),
|
|
70
|
+
onError: (error) => {
|
|
71
|
+
if (error instanceof _mastra_client_js.MastraClientError && error.status === 409) queryClient.invalidateQueries({ queryKey });
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
var resumeErrorMessage = (error) => error instanceof _mastra_client_js.MastraClientError && error.status === 409 ? ANSWER_CONFLICT_MESSAGE : error.message;
|
|
76
|
+
exports.backgroundTaskQueryKey = backgroundTaskQueryKey;
|
|
77
|
+
exports.resumeErrorMessage = resumeErrorMessage;
|
|
78
|
+
exports.useDeferredInputRequest = useDeferredInputRequest;
|
|
79
|
+
exports.useResumeBackgroundTask = useResumeBackgroundTask;
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=use-deferred-input-request.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-deferred-input-request.cjs.js","names":["useMastraClient","useQueryClient","useQuery","useBackgroundTaskStream","isMcpInputRequest","useMutation","MastraClientError"],"sources":["../../../../../src/domains/chat/tools/badges/use-deferred-input-request.ts"],"sourcesContent":["import type { BackgroundTaskResponse } from '@mastra/client-js';\nimport { MastraClientError } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport { useBackgroundTaskStream } from '@mastra/react/hooks/agents';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { isMcpInputRequest } from '../mcp-input-request';\nimport type { McpInputRequestPayload, McpInputResumeData } from '../mcp-input-request';\n\nconst ENDED_STATUSES: ReadonlySet<string> = new Set(['completed', 'failed', 'cancelled', 'timed_out']);\n\nexport const backgroundTaskQueryKey = (backgroundTaskId: string) => ['background-task', backgroundTaskId] as const;\n\nexport interface OpenInputRequest {\n payload: McpInputRequestPayload;\n /** The suspension being answered; the server refuses an answer to an older one. */\n suspendedAt?: string | Date;\n}\n\n/**\n * The MCP input request a deferred call's background task is suspended on, if any. The task is read\n * once (so a reloaded chat still sees an open request) and then followed over the task's event\n * stream, whose events are folded into the same cache entry the task chip polls.\n */\nexport function useDeferredInputRequest(backgroundTaskId: string, enabled: boolean): OpenInputRequest | undefined {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const queryKey = backgroundTaskQueryKey(backgroundTaskId);\n const { data } = useQuery({\n queryKey,\n queryFn: () => client.getBackgroundTask(backgroundTaskId),\n enabled,\n });\n const live = !ENDED_STATUSES.has(data?.status ?? '');\n const { tasks } = useBackgroundTaskStream({ taskId: backgroundTaskId, enabled: enabled && live });\n const event = tasks[backgroundTaskId];\n\n useEffect(() => {\n if (!event) return;\n const suspendedAt =\n 'suspendedAt' in event ? (event.suspendedAt as BackgroundTaskResponse['suspendedAt']) : undefined;\n const cached = queryClient.getQueryData<BackgroundTaskResponse>(queryKey);\n // The first read is still on its way; read again so it can't land older than this event.\n if (!cached) {\n void queryClient.invalidateQueries({ queryKey });\n return;\n }\n queryClient.setQueryData<BackgroundTaskResponse>(queryKey, {\n ...cached,\n status: event.status,\n suspendPayload: event.status === 'suspended' ? event.suspendPayload : undefined,\n suspendedAt: event.status === 'suspended' ? suspendedAt : undefined,\n });\n // `queryKey` is rebuilt every render; the task id names it.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [event, queryClient, backgroundTaskId]);\n\n if (!enabled || data?.status !== 'suspended' || !isMcpInputRequest(data.suspendPayload)) return undefined;\n return { payload: data.suspendPayload, suspendedAt: data.suspendedAt };\n}\n\nconst ANSWER_CONFLICT_MESSAGE = 'This request was already answered or has moved on.';\n\n/** Answers a deferred call's suspended background task, fenced on the suspension that was shown. */\nexport function useResumeBackgroundTask(backgroundTaskId: string) {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const queryKey = backgroundTaskQueryKey(backgroundTaskId);\n return useMutation({\n mutationFn: ({ resumeData, suspendedAt }: { resumeData: McpInputResumeData; suspendedAt?: string | Date }) =>\n client.resumeBackgroundTask(backgroundTaskId, resumeData, { suspendedAt }),\n onSuccess: task => queryClient.setQueryData(queryKey, task),\n onError: error => {\n if (error instanceof MastraClientError && error.status === 409) {\n void queryClient.invalidateQueries({ queryKey });\n }\n },\n });\n}\n\nexport const resumeErrorMessage = (error: Error) =>\n error instanceof MastraClientError && error.status === 409 ? ANSWER_CONFLICT_MESSAGE : error.message;\n"],"mappings":";;;;;;;;AASA,IAAM,iCAAsC,IAAI,IAAI;CAAC;CAAa;CAAU;CAAa;AAAW,CAAC;AAErG,IAAa,0BAA0B,qBAA6B,CAAC,mBAAmB,gBAAgB;;;;;;AAaxG,SAAgB,wBAAwB,kBAA0B,SAAgD;CAChH,MAAM,UAAA,GAASA,cAAAA,gBAAAA,CAAgB;CAC/B,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CACnC,MAAM,WAAW,uBAAuB,gBAAgB;CACxD,MAAM,EAAE,UAAA,GAASC,sBAAAA,SAAAA,CAAS;EACxB;EACA,eAAe,OAAO,kBAAkB,gBAAgB;EACxD;CACF,CAAC;CACD,MAAM,OAAO,CAAC,eAAe,IAAI,MAAM,UAAU,EAAE;CACnD,MAAM,EAAE,WAAA,GAAUC,2BAAAA,wBAAAA,CAAwB;EAAE,QAAQ;EAAkB,SAAS,WAAW;CAAK,CAAC;CAChG,MAAM,QAAQ,MAAM;CAEpB,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,OAAO;EACZ,MAAM,cACJ,iBAAiB,QAAS,MAAM,cAAwD,KAAA;EAC1F,MAAM,SAAS,YAAY,aAAqC,QAAQ;EAExE,IAAI,CAAC,QAAQ;GACX,YAAiB,kBAAkB,EAAE,SAAS,CAAC;GAC/C;EACF;EACA,YAAY,aAAqC,UAAU;GACzD,GAAG;GACH,QAAQ,MAAM;GACd,gBAAgB,MAAM,WAAW,cAAc,MAAM,iBAAiB,KAAA;GACtE,aAAa,MAAM,WAAW,cAAc,cAAc,KAAA;EAC5D,CAAC;CAGH,GAAG;EAAC;EAAO;EAAa;CAAgB,CAAC;CAEzC,IAAI,CAAC,WAAW,MAAM,WAAW,eAAe,CAACC,6CAAAA,kBAAkB,KAAK,cAAc,GAAG,OAAO,KAAA;CAChG,OAAO;EAAE,SAAS,KAAK;EAAgB,aAAa,KAAK;CAAY;AACvE;AAEA,IAAM,0BAA0B;;AAGhC,SAAgB,wBAAwB,kBAA0B;CAChE,MAAM,UAAA,GAASJ,cAAAA,gBAAAA,CAAgB;CAC/B,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CACnC,MAAM,WAAW,uBAAuB,gBAAgB;CACxD,QAAA,GAAOI,sBAAAA,YAAAA,CAAY;EACjB,aAAa,EAAE,YAAY,kBACzB,OAAO,qBAAqB,kBAAkB,YAAY,EAAE,YAAY,CAAC;EAC3E,YAAW,SAAQ,YAAY,aAAa,UAAU,IAAI;EAC1D,UAAS,UAAS;GAChB,IAAI,iBAAiBC,kBAAAA,qBAAqB,MAAM,WAAW,KACzD,YAAiB,kBAAkB,EAAE,SAAS,CAAC;EAEnD;CACF,CAAC;AACH;AAEA,IAAa,sBAAsB,UACjC,iBAAiBA,kBAAAA,qBAAqB,MAAM,WAAW,MAAM,0BAA0B,MAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../../src/domains/chat/tools/badges/use-deferred-input-request';
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { isMcpInputRequest } from "../mcp-input-request.es.js";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { useMastraClient } from "@mastra/react";
|
|
4
|
+
import { useBackgroundTaskStream } from "@mastra/react/hooks/agents";
|
|
5
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
6
|
+
import { MastraClientError } from "@mastra/client-js";
|
|
7
|
+
// src/domains/chat/tools/badges/use-deferred-input-request.ts
|
|
8
|
+
var ENDED_STATUSES = /* @__PURE__ */ new Set([
|
|
9
|
+
"completed",
|
|
10
|
+
"failed",
|
|
11
|
+
"cancelled",
|
|
12
|
+
"timed_out"
|
|
13
|
+
]);
|
|
14
|
+
var backgroundTaskQueryKey = (backgroundTaskId) => ["background-task", backgroundTaskId];
|
|
15
|
+
/**
|
|
16
|
+
* The MCP input request a deferred call's background task is suspended on, if any. The task is read
|
|
17
|
+
* once (so a reloaded chat still sees an open request) and then followed over the task's event
|
|
18
|
+
* stream, whose events are folded into the same cache entry the task chip polls.
|
|
19
|
+
*/
|
|
20
|
+
function useDeferredInputRequest(backgroundTaskId, enabled) {
|
|
21
|
+
const client = useMastraClient();
|
|
22
|
+
const queryClient = useQueryClient();
|
|
23
|
+
const queryKey = backgroundTaskQueryKey(backgroundTaskId);
|
|
24
|
+
const { data } = useQuery({
|
|
25
|
+
queryKey,
|
|
26
|
+
queryFn: () => client.getBackgroundTask(backgroundTaskId),
|
|
27
|
+
enabled
|
|
28
|
+
});
|
|
29
|
+
const live = !ENDED_STATUSES.has(data?.status ?? "");
|
|
30
|
+
const { tasks } = useBackgroundTaskStream({
|
|
31
|
+
taskId: backgroundTaskId,
|
|
32
|
+
enabled: enabled && live
|
|
33
|
+
});
|
|
34
|
+
const event = tasks[backgroundTaskId];
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (!event) return;
|
|
37
|
+
const suspendedAt = "suspendedAt" in event ? event.suspendedAt : void 0;
|
|
38
|
+
const cached = queryClient.getQueryData(queryKey);
|
|
39
|
+
if (!cached) {
|
|
40
|
+
queryClient.invalidateQueries({ queryKey });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
queryClient.setQueryData(queryKey, {
|
|
44
|
+
...cached,
|
|
45
|
+
status: event.status,
|
|
46
|
+
suspendPayload: event.status === "suspended" ? event.suspendPayload : void 0,
|
|
47
|
+
suspendedAt: event.status === "suspended" ? suspendedAt : void 0
|
|
48
|
+
});
|
|
49
|
+
}, [
|
|
50
|
+
event,
|
|
51
|
+
queryClient,
|
|
52
|
+
backgroundTaskId
|
|
53
|
+
]);
|
|
54
|
+
if (!enabled || data?.status !== "suspended" || !isMcpInputRequest(data.suspendPayload)) return void 0;
|
|
55
|
+
return {
|
|
56
|
+
payload: data.suspendPayload,
|
|
57
|
+
suspendedAt: data.suspendedAt
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
var ANSWER_CONFLICT_MESSAGE = "This request was already answered or has moved on.";
|
|
61
|
+
/** Answers a deferred call's suspended background task, fenced on the suspension that was shown. */
|
|
62
|
+
function useResumeBackgroundTask(backgroundTaskId) {
|
|
63
|
+
const client = useMastraClient();
|
|
64
|
+
const queryClient = useQueryClient();
|
|
65
|
+
const queryKey = backgroundTaskQueryKey(backgroundTaskId);
|
|
66
|
+
return useMutation({
|
|
67
|
+
mutationFn: ({ resumeData, suspendedAt }) => client.resumeBackgroundTask(backgroundTaskId, resumeData, { suspendedAt }),
|
|
68
|
+
onSuccess: (task) => queryClient.setQueryData(queryKey, task),
|
|
69
|
+
onError: (error) => {
|
|
70
|
+
if (error instanceof MastraClientError && error.status === 409) queryClient.invalidateQueries({ queryKey });
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
var resumeErrorMessage = (error) => error instanceof MastraClientError && error.status === 409 ? ANSWER_CONFLICT_MESSAGE : error.message;
|
|
75
|
+
export { backgroundTaskQueryKey, resumeErrorMessage, useDeferredInputRequest, useResumeBackgroundTask };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=use-deferred-input-request.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-deferred-input-request.es.js","names":[],"sources":["../../../../../src/domains/chat/tools/badges/use-deferred-input-request.ts"],"sourcesContent":["import type { BackgroundTaskResponse } from '@mastra/client-js';\nimport { MastraClientError } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport { useBackgroundTaskStream } from '@mastra/react/hooks/agents';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { isMcpInputRequest } from '../mcp-input-request';\nimport type { McpInputRequestPayload, McpInputResumeData } from '../mcp-input-request';\n\nconst ENDED_STATUSES: ReadonlySet<string> = new Set(['completed', 'failed', 'cancelled', 'timed_out']);\n\nexport const backgroundTaskQueryKey = (backgroundTaskId: string) => ['background-task', backgroundTaskId] as const;\n\nexport interface OpenInputRequest {\n payload: McpInputRequestPayload;\n /** The suspension being answered; the server refuses an answer to an older one. */\n suspendedAt?: string | Date;\n}\n\n/**\n * The MCP input request a deferred call's background task is suspended on, if any. The task is read\n * once (so a reloaded chat still sees an open request) and then followed over the task's event\n * stream, whose events are folded into the same cache entry the task chip polls.\n */\nexport function useDeferredInputRequest(backgroundTaskId: string, enabled: boolean): OpenInputRequest | undefined {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const queryKey = backgroundTaskQueryKey(backgroundTaskId);\n const { data } = useQuery({\n queryKey,\n queryFn: () => client.getBackgroundTask(backgroundTaskId),\n enabled,\n });\n const live = !ENDED_STATUSES.has(data?.status ?? '');\n const { tasks } = useBackgroundTaskStream({ taskId: backgroundTaskId, enabled: enabled && live });\n const event = tasks[backgroundTaskId];\n\n useEffect(() => {\n if (!event) return;\n const suspendedAt =\n 'suspendedAt' in event ? (event.suspendedAt as BackgroundTaskResponse['suspendedAt']) : undefined;\n const cached = queryClient.getQueryData<BackgroundTaskResponse>(queryKey);\n // The first read is still on its way; read again so it can't land older than this event.\n if (!cached) {\n void queryClient.invalidateQueries({ queryKey });\n return;\n }\n queryClient.setQueryData<BackgroundTaskResponse>(queryKey, {\n ...cached,\n status: event.status,\n suspendPayload: event.status === 'suspended' ? event.suspendPayload : undefined,\n suspendedAt: event.status === 'suspended' ? suspendedAt : undefined,\n });\n // `queryKey` is rebuilt every render; the task id names it.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [event, queryClient, backgroundTaskId]);\n\n if (!enabled || data?.status !== 'suspended' || !isMcpInputRequest(data.suspendPayload)) return undefined;\n return { payload: data.suspendPayload, suspendedAt: data.suspendedAt };\n}\n\nconst ANSWER_CONFLICT_MESSAGE = 'This request was already answered or has moved on.';\n\n/** Answers a deferred call's suspended background task, fenced on the suspension that was shown. */\nexport function useResumeBackgroundTask(backgroundTaskId: string) {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const queryKey = backgroundTaskQueryKey(backgroundTaskId);\n return useMutation({\n mutationFn: ({ resumeData, suspendedAt }: { resumeData: McpInputResumeData; suspendedAt?: string | Date }) =>\n client.resumeBackgroundTask(backgroundTaskId, resumeData, { suspendedAt }),\n onSuccess: task => queryClient.setQueryData(queryKey, task),\n onError: error => {\n if (error instanceof MastraClientError && error.status === 409) {\n void queryClient.invalidateQueries({ queryKey });\n }\n },\n });\n}\n\nexport const resumeErrorMessage = (error: Error) =>\n error instanceof MastraClientError && error.status === 409 ? ANSWER_CONFLICT_MESSAGE : error.message;\n"],"mappings":";;;;;;;AASA,IAAM,iCAAsC,IAAI,IAAI;CAAC;CAAa;CAAU;CAAa;AAAW,CAAC;AAErG,IAAa,0BAA0B,qBAA6B,CAAC,mBAAmB,gBAAgB;;;;;;AAaxG,SAAgB,wBAAwB,kBAA0B,SAAgD;CAChH,MAAM,SAAS,gBAAgB;CAC/B,MAAM,cAAc,eAAe;CACnC,MAAM,WAAW,uBAAuB,gBAAgB;CACxD,MAAM,EAAE,SAAS,SAAS;EACxB;EACA,eAAe,OAAO,kBAAkB,gBAAgB;EACxD;CACF,CAAC;CACD,MAAM,OAAO,CAAC,eAAe,IAAI,MAAM,UAAU,EAAE;CACnD,MAAM,EAAE,UAAU,wBAAwB;EAAE,QAAQ;EAAkB,SAAS,WAAW;CAAK,CAAC;CAChG,MAAM,QAAQ,MAAM;CAEpB,gBAAgB;EACd,IAAI,CAAC,OAAO;EACZ,MAAM,cACJ,iBAAiB,QAAS,MAAM,cAAwD,KAAA;EAC1F,MAAM,SAAS,YAAY,aAAqC,QAAQ;EAExE,IAAI,CAAC,QAAQ;GACX,YAAiB,kBAAkB,EAAE,SAAS,CAAC;GAC/C;EACF;EACA,YAAY,aAAqC,UAAU;GACzD,GAAG;GACH,QAAQ,MAAM;GACd,gBAAgB,MAAM,WAAW,cAAc,MAAM,iBAAiB,KAAA;GACtE,aAAa,MAAM,WAAW,cAAc,cAAc,KAAA;EAC5D,CAAC;CAGH,GAAG;EAAC;EAAO;EAAa;CAAgB,CAAC;CAEzC,IAAI,CAAC,WAAW,MAAM,WAAW,eAAe,CAAC,kBAAkB,KAAK,cAAc,GAAG,OAAO,KAAA;CAChG,OAAO;EAAE,SAAS,KAAK;EAAgB,aAAa,KAAK;CAAY;AACvE;AAEA,IAAM,0BAA0B;;AAGhC,SAAgB,wBAAwB,kBAA0B;CAChE,MAAM,SAAS,gBAAgB;CAC/B,MAAM,cAAc,eAAe;CACnC,MAAM,WAAW,uBAAuB,gBAAgB;CACxD,OAAO,YAAY;EACjB,aAAa,EAAE,YAAY,kBACzB,OAAO,qBAAqB,kBAAkB,YAAY,EAAE,YAAY,CAAC;EAC3E,YAAW,SAAQ,YAAY,aAAa,UAAU,IAAI;EAC1D,UAAS,UAAS;GAChB,IAAI,iBAAiB,qBAAqB,MAAM,WAAW,KACzD,YAAiB,kBAAkB,EAAE,SAAS,CAAC;EAEnD;CACF,CAAC;AACH;AAEA,IAAa,sBAAsB,UACjC,iBAAiB,qBAAqB,MAAM,WAAW,MAAM,0BAA0B,MAAM"}
|
|
@@ -27,9 +27,18 @@ function latestProgress(result) {
|
|
|
27
27
|
*
|
|
28
28
|
* A deferred call (one running as a Mastra background task) settles its part with a placeholder
|
|
29
29
|
* long before the task ends, so its end is never inferred here: the background task says when.
|
|
30
|
+
*
|
|
31
|
+
* While the call is suspended on the task's input request, the request names the task, so the chip
|
|
32
|
+
* reads `input_required` even on a reloaded card with no progress.
|
|
30
33
|
*/
|
|
31
|
-
function useMcpTaskProgress(result, status, { deferred = false } = {}) {
|
|
32
|
-
const live =
|
|
34
|
+
function useMcpTaskProgress(result, status, { deferred = false, request } = {}) {
|
|
35
|
+
const live = request ? {
|
|
36
|
+
type: "mcp-task",
|
|
37
|
+
taskId: request.taskId,
|
|
38
|
+
status: "input_required",
|
|
39
|
+
createdAt: request.createdAt,
|
|
40
|
+
serverName: request.serverName
|
|
41
|
+
} : latestProgress(result);
|
|
33
42
|
const [seen, setSeen] = (0, react.useState)(live);
|
|
34
43
|
if (live && (live.taskId !== seen?.taskId || live.status !== seen.status)) setSeen(live);
|
|
35
44
|
const task = live ?? seen;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-mcp-task-progress.cjs.js","names":["useState"],"sources":["../../../../../src/domains/chat/tools/badges/use-mcp-task-progress.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\n\nexport type McpTaskStatus = 'working' | 'input_required' | 'completed' | 'failed' | 'cancelled';\n\n/** What `@mastra/mcp`'s client writes to a task-backed tool's output stream (`MCPTaskProgress`). */\nexport interface McpTaskProgress {\n type: 'mcp-task';\n taskId: string;\n status: McpTaskStatus;\n createdAt: string;\n serverName: string;\n}\n\nconst STATUSES: ReadonlySet<string> = new Set(['working', 'input_required', 'completed', 'failed', 'cancelled']);\n\nexport const isTerminalMcpTaskStatus = (status: McpTaskStatus) =>\n status === 'completed' || status === 'failed' || status === 'cancelled';\n\nfunction isMcpTaskProgress(value: unknown): value is McpTaskProgress {\n if (typeof value !== 'object' || value === null) return false;\n const entry = value as Record<string, unknown>;\n return (\n entry.type === 'mcp-task' &&\n typeof entry.taskId === 'string' &&\n typeof entry.createdAt === 'string' &&\n typeof entry.serverName === 'string' &&\n typeof entry.status === 'string' &&\n STATUSES.has(entry.status)\n );\n}\n\n/** While a tool call runs, its progress writes accumulate as the call's `result` array. */\nfunction latestProgress(result: unknown): McpTaskProgress | undefined {\n if (!Array.isArray(result)) return undefined;\n for (let index = result.length - 1; index >= 0; index--) {\n if (isMcpTaskProgress(result[index])) return result[index];\n }\n return undefined;\n}\n\nexport interface McpTaskView extends McpTaskProgress {\n /** When the card saw the task end; the elapsed time stops here. */\n endedAt?: number;\n}\n\n/**\n * The MCP task behind a tool call, if the call continued as one. The final result replaces the\n * progress writes, so the last one seen is kept for as long as the card is mounted; its terminal\n * status then comes from how the call ended. Progress isn't saved with the thread, so a reloaded\n * card has no task to show.\n *\n * A deferred call (one running as a Mastra background task) settles its part with a placeholder\n * long before the task ends, so its end is never inferred here: the background task says when.\n */\nexport function useMcpTaskProgress(\n result: unknown,\n status: ActivityStatus,\n { deferred = false }: { deferred?: boolean } = {},\n): McpTaskView | undefined {\n const live = latestProgress(result);\n const [seen, setSeen] = useState(live);\n if (live && (live.taskId !== seen?.taskId || live.status !== seen.status)) setSeen(live);\n\n const task = live ?? seen;\n const ended = task && !live && !deferred && status !== 'running';\n const taskStatus: McpTaskStatus | undefined = !task\n ? undefined\n : ended && !isTerminalMcpTaskStatus(task.status)\n ? status === 'error'\n ? 'failed'\n : 'completed'\n : task.status;\n const terminal = taskStatus !== undefined && isTerminalMcpTaskStatus(taskStatus);\n\n const [endedAt, setEndedAt] = useState<number>();\n useEffect(() => {\n if (terminal && endedAt === undefined) setEndedAt(Date.now());\n }, [terminal, endedAt]);\n\n return task && taskStatus ? { ...task, status: taskStatus, endedAt } : undefined;\n}\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"use-mcp-task-progress.cjs.js","names":["useState"],"sources":["../../../../../src/domains/chat/tools/badges/use-mcp-task-progress.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport type { McpInputRequestPayload } from '../mcp-input-request';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\n\nexport type McpTaskStatus = 'working' | 'input_required' | 'completed' | 'failed' | 'cancelled';\n\n/** What `@mastra/mcp`'s client writes to a task-backed tool's output stream (`MCPTaskProgress`). */\nexport interface McpTaskProgress {\n type: 'mcp-task';\n taskId: string;\n status: McpTaskStatus;\n createdAt: string;\n serverName: string;\n}\n\nconst STATUSES: ReadonlySet<string> = new Set(['working', 'input_required', 'completed', 'failed', 'cancelled']);\n\nexport const isTerminalMcpTaskStatus = (status: McpTaskStatus) =>\n status === 'completed' || status === 'failed' || status === 'cancelled';\n\nfunction isMcpTaskProgress(value: unknown): value is McpTaskProgress {\n if (typeof value !== 'object' || value === null) return false;\n const entry = value as Record<string, unknown>;\n return (\n entry.type === 'mcp-task' &&\n typeof entry.taskId === 'string' &&\n typeof entry.createdAt === 'string' &&\n typeof entry.serverName === 'string' &&\n typeof entry.status === 'string' &&\n STATUSES.has(entry.status)\n );\n}\n\n/** While a tool call runs, its progress writes accumulate as the call's `result` array. */\nfunction latestProgress(result: unknown): McpTaskProgress | undefined {\n if (!Array.isArray(result)) return undefined;\n for (let index = result.length - 1; index >= 0; index--) {\n if (isMcpTaskProgress(result[index])) return result[index];\n }\n return undefined;\n}\n\nexport interface McpTaskView extends McpTaskProgress {\n /** When the card saw the task end; the elapsed time stops here. */\n endedAt?: number;\n}\n\n/**\n * The MCP task behind a tool call, if the call continued as one. The final result replaces the\n * progress writes, so the last one seen is kept for as long as the card is mounted; its terminal\n * status then comes from how the call ended. Progress isn't saved with the thread, so a reloaded\n * card has no task to show.\n *\n * A deferred call (one running as a Mastra background task) settles its part with a placeholder\n * long before the task ends, so its end is never inferred here: the background task says when.\n *\n * While the call is suspended on the task's input request, the request names the task, so the chip\n * reads `input_required` even on a reloaded card with no progress.\n */\nexport function useMcpTaskProgress(\n result: unknown,\n status: ActivityStatus,\n { deferred = false, request }: { deferred?: boolean; request?: McpInputRequestPayload } = {},\n): McpTaskView | undefined {\n const live: McpTaskProgress | undefined = request\n ? {\n type: 'mcp-task',\n taskId: request.taskId,\n status: 'input_required',\n createdAt: request.createdAt,\n serverName: request.serverName,\n }\n : latestProgress(result);\n const [seen, setSeen] = useState(live);\n if (live && (live.taskId !== seen?.taskId || live.status !== seen.status)) setSeen(live);\n\n const task = live ?? seen;\n const ended = task && !live && !deferred && status !== 'running';\n const taskStatus: McpTaskStatus | undefined = !task\n ? undefined\n : ended && !isTerminalMcpTaskStatus(task.status)\n ? status === 'error'\n ? 'failed'\n : 'completed'\n : task.status;\n const terminal = taskStatus !== undefined && isTerminalMcpTaskStatus(taskStatus);\n\n const [endedAt, setEndedAt] = useState<number>();\n useEffect(() => {\n if (terminal && endedAt === undefined) setEndedAt(Date.now());\n }, [terminal, endedAt]);\n\n return task && taskStatus ? { ...task, status: taskStatus, endedAt } : undefined;\n}\n"],"mappings":";;;AAeA,IAAM,2BAAgC,IAAI,IAAI;CAAC;CAAW;CAAkB;CAAa;CAAU;AAAW,CAAC;AAE/G,IAAa,2BAA2B,WACtC,WAAW,eAAe,WAAW,YAAY,WAAW;AAE9D,SAAS,kBAAkB,OAA0C;CACnE,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,MAAM,QAAQ;CACd,OACE,MAAM,SAAS,cACf,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,cAAc,YAC3B,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,WAAW,YACxB,SAAS,IAAI,MAAM,MAAM;AAE7B;;AAGA,SAAS,eAAe,QAA8C;CACpE,IAAI,CAAC,MAAM,QAAQ,MAAM,GAAG,OAAO,KAAA;CACnC,KAAK,IAAI,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG,SAC9C,IAAI,kBAAkB,OAAO,MAAM,GAAG,OAAO,OAAO;AAGxD;;;;;;;;;;;;;AAmBA,SAAgB,mBACd,QACA,QACA,EAAE,WAAW,OAAO,YAAsE,CAAC,GAClE;CACzB,MAAM,OAAoC,UACtC;EACE,MAAM;EACN,QAAQ,QAAQ;EAChB,QAAQ;EACR,WAAW,QAAQ;EACnB,YAAY,QAAQ;CACtB,IACA,eAAe,MAAM;CACzB,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,IAAI;CACrC,IAAI,SAAS,KAAK,WAAW,MAAM,UAAU,KAAK,WAAW,KAAK,SAAS,QAAQ,IAAI;CAEvF,MAAM,OAAO,QAAQ;CAErB,MAAM,aAAwC,CAAC,OAC3C,KAAA,IAFU,QAAQ,CAAC,QAAQ,CAAC,YAAY,WAAW,aAG1C,CAAC,wBAAwB,KAAK,MAAM,IAC3C,WAAW,UACT,WACA,cACF,KAAK;CACX,MAAM,WAAW,eAAe,KAAA,KAAa,wBAAwB,UAAU;CAE/E,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAiB;CAC/C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,YAAY,YAAY,KAAA,GAAW,WAAW,KAAK,IAAI,CAAC;CAC9D,GAAG,CAAC,UAAU,OAAO,CAAC;CAEtB,OAAO,QAAQ,aAAa;EAAE,GAAG;EAAM,QAAQ;EAAY;CAAQ,IAAI,KAAA;AACzE"}
|
|
@@ -26,9 +26,18 @@ function latestProgress(result) {
|
|
|
26
26
|
*
|
|
27
27
|
* A deferred call (one running as a Mastra background task) settles its part with a placeholder
|
|
28
28
|
* long before the task ends, so its end is never inferred here: the background task says when.
|
|
29
|
+
*
|
|
30
|
+
* While the call is suspended on the task's input request, the request names the task, so the chip
|
|
31
|
+
* reads `input_required` even on a reloaded card with no progress.
|
|
29
32
|
*/
|
|
30
|
-
function useMcpTaskProgress(result, status, { deferred = false } = {}) {
|
|
31
|
-
const live =
|
|
33
|
+
function useMcpTaskProgress(result, status, { deferred = false, request } = {}) {
|
|
34
|
+
const live = request ? {
|
|
35
|
+
type: "mcp-task",
|
|
36
|
+
taskId: request.taskId,
|
|
37
|
+
status: "input_required",
|
|
38
|
+
createdAt: request.createdAt,
|
|
39
|
+
serverName: request.serverName
|
|
40
|
+
} : latestProgress(result);
|
|
32
41
|
const [seen, setSeen] = useState(live);
|
|
33
42
|
if (live && (live.taskId !== seen?.taskId || live.status !== seen.status)) setSeen(live);
|
|
34
43
|
const task = live ?? seen;
|