@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":"tool-approval-
|
|
1
|
+
{"version":3,"file":"tool-approval-DyN11vFA.js","names":["ActivityIcon"],"sources":["../src/ds/components/ai/tool-approval/tool-approval.tsx"],"sourcesContent":["import { Check, ShieldCheck, X } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Activity, ActivityContent, ActivityHeader, ActivityIcon, ActivityTrigger } from '../activity';\nimport { presentTool, ToolCallArguments } from '../tool-call';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\n\ntype ToolApprovalDecision = 'approved' | 'declined';\n\nconst approvalStates = {\n pending: { label: 'Approval required', variant: 'warning', icon: ShieldCheck },\n approved: { label: 'Approved', variant: 'success', icon: Check },\n declined: { label: 'Declined', variant: 'neutral', icon: X },\n} satisfies Record<'pending' | ToolApprovalDecision, { label: string; variant: BadgeVariant; icon: LucideIcon }>;\n\nexport interface ToolApprovalStatusProps {\n status?: ToolApprovalDecision;\n}\n\nexport function ToolApprovalStatus({ status }: ToolApprovalStatusProps) {\n const { label, variant, icon: StatusIcon } = approvalStates[status ?? 'pending'];\n return (\n <span role=\"status\" className=\"inline-flex shrink-0\">\n <Badge variant={variant} emphasis=\"subtle\" size=\"sm\" icon={<StatusIcon aria-hidden />}>\n {label}\n </Badge>\n </span>\n );\n}\n\nexport interface ToolApprovalActionsProps {\n onApprove: () => void;\n onDecline: () => void;\n disabled?: boolean;\n toolName?: string;\n autoFocus?: boolean;\n}\n\nexport function ToolApprovalActions({\n onApprove,\n onDecline,\n disabled = false,\n toolName,\n autoFocus = false,\n}: ToolApprovalActionsProps) {\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"primary\"\n size=\"sm\"\n icon={<Check aria-hidden />}\n aria-label={toolName ? `Approve ${toolName}` : undefined}\n autoFocus={autoFocus}\n disabled={disabled}\n onClick={onApprove}\n >\n Approve\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n icon={<X aria-hidden />}\n aria-label={toolName ? `Decline ${toolName}` : undefined}\n disabled={disabled}\n onClick={onDecline}\n >\n Decline\n </Button>\n </div>\n );\n}\n\nexport interface ToolApprovalProps extends ToolApprovalActionsProps, ToolApprovalStatusProps {\n toolName: string;\n args?: unknown;\n /** Custom details replace the default argument renderer. */\n children?: ReactNode;\n}\n\nexport function ToolApproval({ toolName, args, status, children, ...actions }: ToolApprovalProps) {\n const { icon: ToolIcon } = presentTool(toolName, args);\n\n return (\n <Activity open foldable={false} className=\"my-2\" aria-label={`Tool approval for ${toolName}`}>\n <ActivityTrigger>\n <ActivityHeader className=\"flex-wrap\">\n <ActivityIcon>\n <ToolIcon aria-hidden />\n </ActivityIcon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" font=\"mono\" className=\"min-w-0 break-all\">\n {toolName}\n </Txt>\n <ToolApprovalStatus status={status} />\n </ActivityHeader>\n </ActivityTrigger>\n <ActivityContent>\n {children ?? <ToolCallArguments toolName={toolName} args={args} showFullContent />}\n {!status && <ToolApprovalActions toolName={toolName} {...actions} />}\n </ActivityContent>\n </Activity>\n );\n}\n"],"mappings":";;;;;;;;;AAYA,IAAM,iBAAiB;CACrB,SAAS;EAAE,OAAO;EAAqB,SAAS;EAAW,MAAM;CAAY;CAC7E,UAAU;EAAE,OAAO;EAAY,SAAS;EAAW,MAAM;CAAM;CAC/D,UAAU;EAAE,OAAO;EAAY,SAAS;EAAW,MAAM;CAAE;AAC7D;AAMA,SAAgB,mBAAmB,EAAE,UAAmC;CACtE,MAAM,EAAE,OAAO,SAAS,MAAM,eAAe,eAAe,UAAU;CACtE,OACE,oBAAC,QAAD;EAAM,MAAK;EAAS,WAAU;EAC5B,UAAA,oBAAC,OAAD;GAAgB;GAAS,UAAS;GAAS,MAAK;GAAK,MAAM,oBAAC,YAAD,EAAY,eAAA,KAAa,CAAA;GACjF,UAAA;EACI,CAAA;CACH,CAAA;AAEV;AAUA,SAAgB,oBAAoB,EAClC,WACA,WACA,WAAW,OACX,UACA,YAAY,SACe;CAC3B,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,MAAM,oBAAC,OAAD,EAAO,eAAA,KAAa,CAAA;GAC1B,cAAY,WAAW,WAAW,aAAa,KAAA;GACpC;GACD;GACV,SAAS;GACV,UAAA;EAEO,CAAA,GACR,oBAAC,QAAD;GACE,MAAK;GACL,MAAK;GACL,MAAM,oBAAC,GAAD,EAAG,eAAA,KAAa,CAAA;GACtB,cAAY,WAAW,WAAW,aAAa,KAAA;GACrC;GACV,SAAS;GACV,UAAA;EAEO,CAAA,CACL;;AAET;AASA,SAAgB,aAAa,EAAE,UAAU,MAAM,QAAQ,UAAU,GAAG,WAA8B;CAChG,MAAM,EAAE,MAAM,aAAa,YAAY,UAAU,IAAI;CAErD,OACE,qBAAC,UAAD;EAAU,MAAA;EAAK,UAAU;EAAO,WAAU;EAAO,cAAY,qBAAqB;EAAlF,UAAA,CACE,oBAAC,iBAAD,EAAA,UACE,qBAAC,gBAAD;GAAgB,WAAU;GAA1B,UAAA;IACE,oBAACA,gBAAD,EAAA,UACE,oBAAC,UAAD,EAAU,eAAA,KAAa,CAAA,EACX,CAAA;IACd,oBAAC,KAAD;KAAK,IAAG;KAAO,SAAQ;KAAU,MAAK;KAAQ,MAAK;KAAO,WAAU;KACjE,UAAA;IACE,CAAA;IACL,oBAAC,oBAAD,EAA4B,OAAS,CAAA;GACvB;EACD,CAAA,EAAA,CAAA,GACjB,qBAAC,iBAAD,EAAA,UAAA,CACG,YAAY,oBAAC,mBAAD;GAA6B;GAAgB;GAAM,iBAAA;EAAiB,CAAA,GAChF,CAAC,UAAU,oBAAC,qBAAD;GAA+B;GAAU,GAAI;EAAU,CAAA,CACpD,EAAA,CAAA,CACT;;AAEd"}
|
|
@@ -7,8 +7,8 @@ const require_copy_button = require("./copy-button-DJAQ6_3o.cjs");
|
|
|
7
7
|
const require_highlight = require("./highlight-D0VoR2qO.cjs");
|
|
8
8
|
const require_code = require("./code-CqgfD-cP.cjs");
|
|
9
9
|
const require_components_CodeBlock = require("./components/CodeBlock.cjs.js");
|
|
10
|
-
const require_tool_presentation = require("./tool-presentation-
|
|
11
|
-
const require_activity = require("./activity-
|
|
10
|
+
const require_tool_presentation = require("./tool-presentation-D6nzVruN.cjs");
|
|
11
|
+
const require_activity = require("./activity-CcQZeDYi.cjs");
|
|
12
12
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
13
13
|
let lucide_react = require("lucide-react");
|
|
14
14
|
// src/ds/components/ai/tool-call/ansi.ts
|
|
@@ -373,6 +373,12 @@ var KIND_PHRASES = {
|
|
|
373
373
|
one: "read a page",
|
|
374
374
|
many: "read pages"
|
|
375
375
|
},
|
|
376
|
+
"List knowledge": {
|
|
377
|
+
live: "Listing knowledge",
|
|
378
|
+
done: "Listed knowledge",
|
|
379
|
+
one: "listed knowledge",
|
|
380
|
+
many: "listed knowledge"
|
|
381
|
+
},
|
|
376
382
|
"Edit page": {
|
|
377
383
|
live: "Editing page",
|
|
378
384
|
done: "Edited page",
|
|
@@ -488,4 +494,4 @@ Object.defineProperty(exports, "toolPhrases", {
|
|
|
488
494
|
}
|
|
489
495
|
});
|
|
490
496
|
|
|
491
|
-
//# sourceMappingURL=tool-call-
|
|
497
|
+
//# sourceMappingURL=tool-call-DBn14X-3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-Bu66PkD-.cjs","names":["cn","CopyButton","useHighlight","_Fragment","cn","languageForPath","CodeBlock","truncateString","toolEdit","visibleToolArgumentsText","presentTool","Activity","ActivityTrigger","ActivityHeader","ActivityLeading","ActivityIcon","FoldVertical","ActivityLabel","ActivityDetail","ActivitySpacer","ActivityTrailing","ActivityDisclosure","ActivityContent","ScrollArea","Txt","X","_Fragment","ActivitySummary","toDate","formatDate"],"sources":["../src/ds/components/ai/tool-call/ansi.ts","../src/ds/components/ai/tool-call/group-consecutive.ts","../src/ds/components/ai/tool-call/tool-call-mono.tsx","../src/ds/components/ai/tool-call/tool-call-edit.tsx","../src/ds/components/ai/tool-call/tool-call-arguments.tsx","../src/ds/components/ai/tool-call/tool-call-group.tsx","../src/ds/components/ai/tool-call/tool-call-output.tsx","../src/ds/components/ai/tool-call/tool-phrases.ts","../src/ds/components/ai/tool-call/tool-call-time.tsx"],"sourcesContent":["// Sandbox commands run in a PTY, so CLIs emit color escapes even under NO_COLOR.\n// eslint-disable-next-line no-control-regex\nconst ANSI_RE =\n /[\\u001b\\u009b][[\\]()#;?]*(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?\\u0007|(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~])/g;\n\n// The same sequences once JSON.stringify escaped the bytes; an even backslash run before the `u` is source text spelling the escape, kept.\nconst ESCAPED_ANSI_RE = /(?<!\\\\)((?:\\\\\\\\)*)\\\\u001[bB](?:\\[[0-9;?<=>]*[a-zA-Z]|\\][\\s\\S]*?(?:\\\\u0007|\\\\u001[bB]\\\\\\\\))/g;\n\nexport function stripAnsi(text: string): string {\n return text.replace(ANSI_RE, '');\n}\n\nexport function stripSerializedAnsi(text: string): string {\n return stripAnsi(text).replace(ESCAPED_ANSI_RE, '$1');\n}\n","export interface ConsecutiveGroups<T> {\n /** Each run, keyed by its first member. */\n byFirstKey: Map<string, T[]>;\n /** The members after the first, which draw nothing of their own. */\n memberKeys: Set<string>;\n}\n\nexport interface ConsecutiveRules<T, U extends T> {\n key: (item: U) => string;\n /** Whether an item extends the run; anything else ends it. */\n joins: (item: T) => item is U;\n /** Runs shorter than this stay individual rows. */\n min?: number;\n}\n\n/** Consecutive tool calls this long fold into one group row. */\nexport const TOOL_GROUP_MIN = 3;\n\n/** Cuts a list into runs of joining items, keeping only the runs long enough to fold. */\nexport function groupConsecutive<T, U extends T>(\n items: readonly T[],\n { key, joins, min = TOOL_GROUP_MIN }: ConsecutiveRules<T, U>,\n): ConsecutiveGroups<U> {\n const byFirstKey = new Map<string, U[]>();\n const memberKeys = new Set<string>();\n let run: U[] = [];\n\n const flush = () => {\n if (run.length >= min) {\n for (const [index, item] of run.entries()) {\n if (index === 0) byFirstKey.set(key(item), run);\n else memberKeys.add(key(item));\n }\n }\n run = [];\n };\n\n for (const item of items) {\n if (joins(item)) run.push(item);\n else flush();\n }\n flush();\n\n return { byFirstKey, memberKeys };\n}\n","import type { ComponentProps } from 'react';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { cn } from '@/lib/utils';\n\nexport interface ToolCallMonoProps extends ComponentProps<'pre'> {\n copyText: string;\n}\n\n/** Monospace body block of an expanded call — arguments, command, output — with a hover copy. */\nexport const ToolCallMono = ({ copyText, className, children, ...props }: ToolCallMonoProps) => (\n <div className=\"group/block relative max-w-full min-w-0\">\n <pre\n className={cn(\n 'm-0 max-h-60 max-w-full overflow-auto rounded-md bg-fill px-3 py-2 font-mono text-caption break-words whitespace-pre-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </pre>\n <CopyButton\n content={copyText}\n variant=\"ghost\"\n className=\"absolute top-1 right-1 opacity-0 transition-opacity group-hover/block:opacity-100 focus-visible:opacity-100\"\n />\n </div>\n);\n\n/** A shell command as the body shows it: `$` in the margin, the copy takes the command alone. */\nexport const ToolCallCommand = ({ command }: { command: string }) => (\n <ToolCallMono copyText={command} className=\"text-foreground\">\n <span className=\"text-muted-foreground select-none\">$ </span>\n {command}\n </ToolCallMono>\n);\n","import type { ToolEdit } from './tool-presentation';\nimport { useHighlight } from '@/ds/components/Code';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { languageForPath } from '@/ds/components/CodeEditor/highlight';\nimport { truncateString } from '@/lib/truncate-string';\nimport { cn } from '@/lib/utils';\n\nconst DIFF_MAX_LINES = 200;\nconst WRITTEN_FILE_MAX_CHARS = 2000;\n\nconst DIFF_SIDES = {\n removed: { sign: '-', row: 'bg-destructive-subtle', gutter: 'text-destructive-subtle-foreground' },\n added: { sign: '+', row: 'bg-success-subtle', gutter: 'text-success-subtle-foreground' },\n} as const;\n\nfunction boundedLines(text: string, showFullContent: boolean): { lines: string[]; hidden: number } {\n const lines = text.split('\\n');\n if (showFullContent) return { lines, hidden: 0 };\n return { lines: lines.slice(0, DIFF_MAX_LINES), hidden: Math.max(0, lines.length - DIFF_MAX_LINES) };\n}\n\nfunction DiffSide({ lines, side, lang }: { lines: string[]; side: keyof typeof DIFF_SIDES; lang: string | undefined }) {\n const { sign, row, gutter } = DIFF_SIDES[side];\n const code = lines.join('\\n');\n const highlighted = useHighlight(code, lang);\n const tokens = highlighted?.code === code ? highlighted.tokens : undefined;\n\n return (\n <>\n {lines.map((line, index) => (\n <div key={index} className={cn('flex whitespace-pre', row)}>\n <span className={cn('w-5 shrink-0 text-center opacity-70 select-none', gutter)}>{sign}</span>\n <span className=\"flex-1 pr-2.5 text-foreground\">\n {tokens?.[index]?.map((token, tokenIndex) => (\n <span key={tokenIndex} className={token.className}>\n {token.content}\n </span>\n )) ?? line}\n </span>\n </div>\n ))}\n </>\n );\n}\n\nexport function ToolCallEdit({ edit, showFullContent = false }: { edit: ToolEdit; showFullContent?: boolean }) {\n const lang = languageForPath(edit.path);\n\n if ('content' in edit) {\n return (\n <CodeBlock\n code={showFullContent ? edit.content : truncateString(edit.content, WRITTEN_FILE_MAX_CHARS)}\n lang={lang}\n fileName={edit.path ?? 'Change'}\n overflow=\"scroll\"\n />\n );\n }\n\n const removed = boundedLines(edit.oldText, showFullContent);\n const added = boundedLines(edit.newText, showFullContent);\n const hidden = removed.hidden + added.hidden;\n\n return (\n <div\n className={cn(\n 'max-w-full min-w-0 overflow-x-auto rounded-md border border-border bg-fill font-mono text-caption',\n showFullContent && 'max-h-60 overflow-y-auto',\n )}\n role=\"group\"\n aria-label=\"File change\"\n >\n <DiffSide lines={removed.lines} side=\"removed\" lang={lang} />\n <DiffSide lines={added.lines} side=\"added\" lang={lang} />\n {hidden > 0 && <div className=\"px-2.5 py-1 text-muted-foreground select-none\">… {hidden} more lines</div>}\n </div>\n );\n}\n","import { ToolCallEdit } from './tool-call-edit';\nimport { ToolCallMono } from './tool-call-mono';\nimport { toolEdit, visibleToolArgumentsText } from './tool-presentation';\nimport type { ToolArgumentsInput } from './tool-presentation';\n\nexport interface ToolCallArgumentsProps extends ToolArgumentsInput {\n 'data-testid'?: string;\n showFullContent?: boolean;\n}\n\nexport function ToolCallArguments({ 'data-testid': testId, showFullContent, ...input }: ToolCallArgumentsProps) {\n const edit = toolEdit(input.toolName, input.args);\n if (edit) return <ToolCallEdit edit={edit} showFullContent={showFullContent} />;\n\n const text = visibleToolArgumentsText(input);\n if (!text) return null;\n\n return (\n <ToolCallMono copyText={text} data-testid={testId} className=\"text-foreground\">\n {text}\n </ToolCallMono>\n );\n}\n","import { FoldVertical, X } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { presentTool } from './tool-presentation';\nimport {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityLabel,\n ActivityLeading,\n ActivitySpacer,\n ActivitySummary,\n ActivityTrailing,\n ActivityTrigger,\n} from '@/ds/components/ai/activity';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ToolCallGroupStep {\n toolName: string;\n args: unknown;\n status: ActivityStatus;\n /** A successful tool result was recorded. Supply for every step to enable outcome counts; omit to keep legacy summaries. */\n hasResult?: boolean;\n}\n\nexport interface ToolCallGroupProps {\n steps: ToolCallGroupStep[];\n /** Rendered ahead of the icon, e.g. the time the first step began. */\n leading?: ReactNode;\n children: ReactNode;\n}\n\nconst MAX_KIND_GLYPHS = 4;\n\nexport function ToolCallGroup({ steps, leading, children }: ToolCallGroupProps) {\n const running = steps.find(step => step.status === 'running');\n const live = running && presentTool(running.toolName, running.args);\n\n return (\n <Activity status={running ? 'running' : 'idle'} aria-label={`Tool group: ${steps.length} steps`}>\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>\n <FoldVertical size={14} aria-hidden className=\"text-placeholder\" />\n </ActivityIcon>\n <ActivityLabel>{steps.length} steps</ActivityLabel>\n {live && live.description ? (\n <ActivityLabel className=\"max-w-none min-w-0 shrink\">{live.description}</ActivityLabel>\n ) : (\n live && live.detail && <ActivityDetail>{live.detail}</ActivityDetail>\n )}\n <GroupKinds steps={steps} />\n <ActivitySpacer rule />\n <ActivityTrailing>\n <GroupProgress steps={steps} />\n </ActivityTrailing>\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n <ActivityContent className=\"py-0.5 pr-0 pl-2.5\">\n <ScrollArea maxHeight=\"18rem\" autoScroll={Boolean(running)} revealScrollbarOnHover={false}>\n {children}\n </ScrollArea>\n </ActivityContent>\n </Activity>\n );\n}\n\nfunction GroupProgress({ steps }: { steps: ToolCallGroupStep[] }) {\n const done = steps.filter(step => step.status !== 'running').length;\n if (done < steps.length) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {done}/{steps.length}\n </Txt>\n );\n }\n const failed = steps.filter(step => step.status === 'error').length;\n const errorIndicator =\n failed > 0 ? <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" /> : null;\n // Older consumers only supply visual status, which cannot distinguish completed from interrupted calls.\n if (steps.some(step => step.hasResult === undefined)) return errorIndicator;\n\n const succeeded = steps.filter(step => step.status === 'idle' && step.hasResult).length;\n const incomplete = steps.length - succeeded - failed;\n const summary = [\n succeeded > 0 && `${succeeded} OK`,\n failed > 0 && `${failed} failed`,\n incomplete > 0 && `${incomplete} incomplete`,\n ]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <>\n {errorIndicator}\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {summary}\n </Txt>\n </>\n );\n}\n\nfunction GroupKinds({ steps }: { steps: ToolCallGroupStep[] }) {\n const presented = steps.map(step => presentTool(step.toolName, step.args));\n const labels = new Set(presented.map(({ label }) => label));\n const glyphs = [...new Map(presented.map(({ pose, icon }) => [pose, icon]))].slice(0, MAX_KIND_GLYPHS);\n\n return (\n <ActivitySummary role=\"img\" aria-label={[...labels].join(', ')} className=\"shrink-0 gap-1.5\">\n {glyphs.map(([pose, Kind]) => (\n <Kind key={pose} size={12} className=\"text-placeholder\" />\n ))}\n </ActivitySummary>\n );\n}\n","import { ToolCallMono } from './tool-call-mono';\n\nexport interface ToolCallOutputProps {\n text: string;\n error?: boolean;\n maxLength?: number;\n 'data-testid'?: string;\n}\n\nexport function ToolCallOutput({ text, error, maxLength, 'data-testid': testId }: ToolCallOutputProps) {\n const preview = maxLength !== undefined && text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;\n\n return (\n <ToolCallMono\n copyText={text}\n data-testid={testId}\n className={error ? 'text-destructive-foreground' : 'text-muted-foreground'}\n >\n {preview}\n </ToolCallMono>\n );\n}\n","/** How a line words one kind of tool: while it runs, done alone, and once or many times in a summary. */\nexport interface ToolPhrases {\n live: string;\n done: string;\n one: string;\n many: string;\n}\n\nconst KIND_PHRASES = {\n Read: { live: 'Reading', done: 'Read', one: 'read a file', many: 'read files' },\n Write: { live: 'Writing', done: 'Wrote', one: 'wrote a file', many: 'wrote files' },\n Edit: { live: 'Editing', done: 'Edited', one: 'edited a file', many: 'edited files' },\n Run: { live: 'Running', done: 'Ran', one: 'ran a command', many: 'ran commands' },\n 'Process output': {\n live: 'Reading output',\n done: 'Read output',\n one: 'read process output',\n many: 'read process output',\n },\n 'Stop process': {\n live: 'Stopping process',\n done: 'Stopped process',\n one: 'stopped a process',\n many: 'stopped processes',\n },\n 'Find files': { live: 'Finding files', done: 'Found files', one: 'found files', many: 'found files' },\n 'List files': { live: 'Listing files', done: 'Listed files', one: 'listed files', many: 'listed files' },\n Search: { live: 'Searching', done: 'Searched', one: 'searched code', many: 'searched code' },\n 'Search the web': {\n live: 'Searching the web',\n done: 'Searched the web',\n one: 'searched the web',\n many: 'searched the web',\n },\n 'Inspect code': { live: 'Inspecting', done: 'Inspected', one: 'inspected code', many: 'inspected code' },\n 'File info': { live: 'Checking', done: 'Checked', one: 'checked a file', many: 'checked files' },\n Delete: { live: 'Deleting', done: 'Deleted', one: 'deleted a file', many: 'deleted files' },\n 'New folder': { live: 'Creating folder', done: 'Created folder', one: 'created a folder', many: 'created folders' },\n Skill: { live: 'Using skill', done: 'Used skill', one: 'used a skill', many: 'used skills' },\n 'Search skills': {\n live: 'Searching skills',\n done: 'Searched skills',\n one: 'searched skills',\n many: 'searched skills',\n },\n 'Skill file': {\n live: 'Reading skill file',\n done: 'Read skill file',\n one: 'read a skill file',\n many: 'read skill files',\n },\n 'Search knowledge': {\n live: 'Searching knowledge',\n done: 'Searched knowledge',\n one: 'searched knowledge',\n many: 'searched knowledge',\n },\n 'Read page': { live: 'Reading page', done: 'Read page', one: 'read a page', many: 'read pages' },\n // knowledge_page/note/pin also move, merge, delete, remove and unpin, so these name no one operation.\n 'Edit page': { live: 'Editing page', done: 'Edited page', one: 'edited a page', many: 'edited pages' },\n 'Edit note': { live: 'Editing note', done: 'Edited note', one: 'edited a note', many: 'edited notes' },\n 'Update pin': { live: 'Updating pin', done: 'Updated pin', one: 'updated a pin', many: 'updated pins' },\n} satisfies Record<string, ToolPhrases>;\n\n/** The kinds `presentTool` labels a call with; each one has its phrases. */\nexport type ToolKind = keyof typeof KIND_PHRASES;\n\nfunction isToolKind(label: string): label is ToolKind {\n return Object.hasOwn(KIND_PHRASES, label);\n}\n\nexport function toolPhrases(label: string): ToolPhrases {\n if (isToolKind(label)) return KIND_PHRASES[label];\n return { live: `Using ${label}`, done: `Used ${label}`, one: `used ${label}`, many: `used ${label}` };\n}\n","import { formatDate, toDate } from '@/utils/date-format';\n\nexport function ToolCallTime({ at }: { at?: number }) {\n const time = toDate(at);\n if (!time) return null;\n\n return (\n <time\n className=\"shrink-0 text-meta text-muted-foreground tabular-nums\"\n dateTime={time.toISOString()}\n title={formatDate(time, 'date-time-seconds')}\n >\n {formatDate(time, 'time-seconds')}\n </time>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool-call-DBn14X-3.cjs","names":["cn","CopyButton","useHighlight","_Fragment","cn","languageForPath","CodeBlock","truncateString","toolEdit","visibleToolArgumentsText","presentTool","Activity","ActivityTrigger","ActivityHeader","ActivityLeading","ActivityIcon","FoldVertical","ActivityLabel","ActivityDetail","ActivitySpacer","ActivityTrailing","ActivityDisclosure","ActivityContent","ScrollArea","Txt","X","_Fragment","ActivitySummary","toDate","formatDate"],"sources":["../src/ds/components/ai/tool-call/ansi.ts","../src/ds/components/ai/tool-call/group-consecutive.ts","../src/ds/components/ai/tool-call/tool-call-mono.tsx","../src/ds/components/ai/tool-call/tool-call-edit.tsx","../src/ds/components/ai/tool-call/tool-call-arguments.tsx","../src/ds/components/ai/tool-call/tool-call-group.tsx","../src/ds/components/ai/tool-call/tool-call-output.tsx","../src/ds/components/ai/tool-call/tool-phrases.ts","../src/ds/components/ai/tool-call/tool-call-time.tsx"],"sourcesContent":["// Sandbox commands run in a PTY, so CLIs emit color escapes even under NO_COLOR.\n// eslint-disable-next-line no-control-regex\nconst ANSI_RE =\n /[\\u001b\\u009b][[\\]()#;?]*(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?\\u0007|(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~])/g;\n\n// The same sequences once JSON.stringify escaped the bytes; an even backslash run before the `u` is source text spelling the escape, kept.\nconst ESCAPED_ANSI_RE = /(?<!\\\\)((?:\\\\\\\\)*)\\\\u001[bB](?:\\[[0-9;?<=>]*[a-zA-Z]|\\][\\s\\S]*?(?:\\\\u0007|\\\\u001[bB]\\\\\\\\))/g;\n\nexport function stripAnsi(text: string): string {\n return text.replace(ANSI_RE, '');\n}\n\nexport function stripSerializedAnsi(text: string): string {\n return stripAnsi(text).replace(ESCAPED_ANSI_RE, '$1');\n}\n","export interface ConsecutiveGroups<T> {\n /** Each run, keyed by its first member. */\n byFirstKey: Map<string, T[]>;\n /** The members after the first, which draw nothing of their own. */\n memberKeys: Set<string>;\n}\n\nexport interface ConsecutiveRules<T, U extends T> {\n key: (item: U) => string;\n /** Whether an item extends the run; anything else ends it. */\n joins: (item: T) => item is U;\n /** Runs shorter than this stay individual rows. */\n min?: number;\n}\n\n/** Consecutive tool calls this long fold into one group row. */\nexport const TOOL_GROUP_MIN = 3;\n\n/** Cuts a list into runs of joining items, keeping only the runs long enough to fold. */\nexport function groupConsecutive<T, U extends T>(\n items: readonly T[],\n { key, joins, min = TOOL_GROUP_MIN }: ConsecutiveRules<T, U>,\n): ConsecutiveGroups<U> {\n const byFirstKey = new Map<string, U[]>();\n const memberKeys = new Set<string>();\n let run: U[] = [];\n\n const flush = () => {\n if (run.length >= min) {\n for (const [index, item] of run.entries()) {\n if (index === 0) byFirstKey.set(key(item), run);\n else memberKeys.add(key(item));\n }\n }\n run = [];\n };\n\n for (const item of items) {\n if (joins(item)) run.push(item);\n else flush();\n }\n flush();\n\n return { byFirstKey, memberKeys };\n}\n","import type { ComponentProps } from 'react';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { cn } from '@/lib/utils';\n\nexport interface ToolCallMonoProps extends ComponentProps<'pre'> {\n copyText: string;\n}\n\n/** Monospace body block of an expanded call — arguments, command, output — with a hover copy. */\nexport const ToolCallMono = ({ copyText, className, children, ...props }: ToolCallMonoProps) => (\n <div className=\"group/block relative max-w-full min-w-0\">\n <pre\n className={cn(\n 'm-0 max-h-60 max-w-full overflow-auto rounded-md bg-fill px-3 py-2 font-mono text-caption break-words whitespace-pre-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </pre>\n <CopyButton\n content={copyText}\n variant=\"ghost\"\n className=\"absolute top-1 right-1 opacity-0 transition-opacity group-hover/block:opacity-100 focus-visible:opacity-100\"\n />\n </div>\n);\n\n/** A shell command as the body shows it: `$` in the margin, the copy takes the command alone. */\nexport const ToolCallCommand = ({ command }: { command: string }) => (\n <ToolCallMono copyText={command} className=\"text-foreground\">\n <span className=\"text-muted-foreground select-none\">$ </span>\n {command}\n </ToolCallMono>\n);\n","import type { ToolEdit } from './tool-presentation';\nimport { useHighlight } from '@/ds/components/Code';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { languageForPath } from '@/ds/components/CodeEditor/highlight';\nimport { truncateString } from '@/lib/truncate-string';\nimport { cn } from '@/lib/utils';\n\nconst DIFF_MAX_LINES = 200;\nconst WRITTEN_FILE_MAX_CHARS = 2000;\n\nconst DIFF_SIDES = {\n removed: { sign: '-', row: 'bg-destructive-subtle', gutter: 'text-destructive-subtle-foreground' },\n added: { sign: '+', row: 'bg-success-subtle', gutter: 'text-success-subtle-foreground' },\n} as const;\n\nfunction boundedLines(text: string, showFullContent: boolean): { lines: string[]; hidden: number } {\n const lines = text.split('\\n');\n if (showFullContent) return { lines, hidden: 0 };\n return { lines: lines.slice(0, DIFF_MAX_LINES), hidden: Math.max(0, lines.length - DIFF_MAX_LINES) };\n}\n\nfunction DiffSide({ lines, side, lang }: { lines: string[]; side: keyof typeof DIFF_SIDES; lang: string | undefined }) {\n const { sign, row, gutter } = DIFF_SIDES[side];\n const code = lines.join('\\n');\n const highlighted = useHighlight(code, lang);\n const tokens = highlighted?.code === code ? highlighted.tokens : undefined;\n\n return (\n <>\n {lines.map((line, index) => (\n <div key={index} className={cn('flex whitespace-pre', row)}>\n <span className={cn('w-5 shrink-0 text-center opacity-70 select-none', gutter)}>{sign}</span>\n <span className=\"flex-1 pr-2.5 text-foreground\">\n {tokens?.[index]?.map((token, tokenIndex) => (\n <span key={tokenIndex} className={token.className}>\n {token.content}\n </span>\n )) ?? line}\n </span>\n </div>\n ))}\n </>\n );\n}\n\nexport function ToolCallEdit({ edit, showFullContent = false }: { edit: ToolEdit; showFullContent?: boolean }) {\n const lang = languageForPath(edit.path);\n\n if ('content' in edit) {\n return (\n <CodeBlock\n code={showFullContent ? edit.content : truncateString(edit.content, WRITTEN_FILE_MAX_CHARS)}\n lang={lang}\n fileName={edit.path ?? 'Change'}\n overflow=\"scroll\"\n />\n );\n }\n\n const removed = boundedLines(edit.oldText, showFullContent);\n const added = boundedLines(edit.newText, showFullContent);\n const hidden = removed.hidden + added.hidden;\n\n return (\n <div\n className={cn(\n 'max-w-full min-w-0 overflow-x-auto rounded-md border border-border bg-fill font-mono text-caption',\n showFullContent && 'max-h-60 overflow-y-auto',\n )}\n role=\"group\"\n aria-label=\"File change\"\n >\n <DiffSide lines={removed.lines} side=\"removed\" lang={lang} />\n <DiffSide lines={added.lines} side=\"added\" lang={lang} />\n {hidden > 0 && <div className=\"px-2.5 py-1 text-muted-foreground select-none\">… {hidden} more lines</div>}\n </div>\n );\n}\n","import { ToolCallEdit } from './tool-call-edit';\nimport { ToolCallMono } from './tool-call-mono';\nimport { toolEdit, visibleToolArgumentsText } from './tool-presentation';\nimport type { ToolArgumentsInput } from './tool-presentation';\n\nexport interface ToolCallArgumentsProps extends ToolArgumentsInput {\n 'data-testid'?: string;\n showFullContent?: boolean;\n}\n\nexport function ToolCallArguments({ 'data-testid': testId, showFullContent, ...input }: ToolCallArgumentsProps) {\n const edit = toolEdit(input.toolName, input.args);\n if (edit) return <ToolCallEdit edit={edit} showFullContent={showFullContent} />;\n\n const text = visibleToolArgumentsText(input);\n if (!text) return null;\n\n return (\n <ToolCallMono copyText={text} data-testid={testId} className=\"text-foreground\">\n {text}\n </ToolCallMono>\n );\n}\n","import { FoldVertical, X } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { presentTool } from './tool-presentation';\nimport {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityLabel,\n ActivityLeading,\n ActivitySpacer,\n ActivitySummary,\n ActivityTrailing,\n ActivityTrigger,\n} from '@/ds/components/ai/activity';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ToolCallGroupStep {\n toolName: string;\n args: unknown;\n status: ActivityStatus;\n /** A successful tool result was recorded. Supply for every step to enable outcome counts; omit to keep legacy summaries. */\n hasResult?: boolean;\n}\n\nexport interface ToolCallGroupProps {\n steps: ToolCallGroupStep[];\n /** Rendered ahead of the icon, e.g. the time the first step began. */\n leading?: ReactNode;\n children: ReactNode;\n}\n\nconst MAX_KIND_GLYPHS = 4;\n\nexport function ToolCallGroup({ steps, leading, children }: ToolCallGroupProps) {\n const running = steps.find(step => step.status === 'running');\n const live = running && presentTool(running.toolName, running.args);\n\n return (\n <Activity status={running ? 'running' : 'idle'} aria-label={`Tool group: ${steps.length} steps`}>\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>\n <FoldVertical size={14} aria-hidden className=\"text-placeholder\" />\n </ActivityIcon>\n <ActivityLabel>{steps.length} steps</ActivityLabel>\n {live && live.description ? (\n <ActivityLabel className=\"max-w-none min-w-0 shrink\">{live.description}</ActivityLabel>\n ) : (\n live && live.detail && <ActivityDetail>{live.detail}</ActivityDetail>\n )}\n <GroupKinds steps={steps} />\n <ActivitySpacer rule />\n <ActivityTrailing>\n <GroupProgress steps={steps} />\n </ActivityTrailing>\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n <ActivityContent className=\"py-0.5 pr-0 pl-2.5\">\n <ScrollArea maxHeight=\"18rem\" autoScroll={Boolean(running)} revealScrollbarOnHover={false}>\n {children}\n </ScrollArea>\n </ActivityContent>\n </Activity>\n );\n}\n\nfunction GroupProgress({ steps }: { steps: ToolCallGroupStep[] }) {\n const done = steps.filter(step => step.status !== 'running').length;\n if (done < steps.length) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {done}/{steps.length}\n </Txt>\n );\n }\n const failed = steps.filter(step => step.status === 'error').length;\n const errorIndicator =\n failed > 0 ? <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" /> : null;\n // Older consumers only supply visual status, which cannot distinguish completed from interrupted calls.\n if (steps.some(step => step.hasResult === undefined)) return errorIndicator;\n\n const succeeded = steps.filter(step => step.status === 'idle' && step.hasResult).length;\n const incomplete = steps.length - succeeded - failed;\n const summary = [\n succeeded > 0 && `${succeeded} OK`,\n failed > 0 && `${failed} failed`,\n incomplete > 0 && `${incomplete} incomplete`,\n ]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <>\n {errorIndicator}\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {summary}\n </Txt>\n </>\n );\n}\n\nfunction GroupKinds({ steps }: { steps: ToolCallGroupStep[] }) {\n const presented = steps.map(step => presentTool(step.toolName, step.args));\n const labels = new Set(presented.map(({ label }) => label));\n const glyphs = [...new Map(presented.map(({ pose, icon }) => [pose, icon]))].slice(0, MAX_KIND_GLYPHS);\n\n return (\n <ActivitySummary role=\"img\" aria-label={[...labels].join(', ')} className=\"shrink-0 gap-1.5\">\n {glyphs.map(([pose, Kind]) => (\n <Kind key={pose} size={12} className=\"text-placeholder\" />\n ))}\n </ActivitySummary>\n );\n}\n","import { ToolCallMono } from './tool-call-mono';\n\nexport interface ToolCallOutputProps {\n text: string;\n error?: boolean;\n maxLength?: number;\n 'data-testid'?: string;\n}\n\nexport function ToolCallOutput({ text, error, maxLength, 'data-testid': testId }: ToolCallOutputProps) {\n const preview = maxLength !== undefined && text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;\n\n return (\n <ToolCallMono\n copyText={text}\n data-testid={testId}\n className={error ? 'text-destructive-foreground' : 'text-muted-foreground'}\n >\n {preview}\n </ToolCallMono>\n );\n}\n","/** How a line words one kind of tool: while it runs, done alone, and once or many times in a summary. */\nexport interface ToolPhrases {\n live: string;\n done: string;\n one: string;\n many: string;\n}\n\nconst KIND_PHRASES = {\n Read: { live: 'Reading', done: 'Read', one: 'read a file', many: 'read files' },\n Write: { live: 'Writing', done: 'Wrote', one: 'wrote a file', many: 'wrote files' },\n Edit: { live: 'Editing', done: 'Edited', one: 'edited a file', many: 'edited files' },\n Run: { live: 'Running', done: 'Ran', one: 'ran a command', many: 'ran commands' },\n 'Process output': {\n live: 'Reading output',\n done: 'Read output',\n one: 'read process output',\n many: 'read process output',\n },\n 'Stop process': {\n live: 'Stopping process',\n done: 'Stopped process',\n one: 'stopped a process',\n many: 'stopped processes',\n },\n 'Find files': { live: 'Finding files', done: 'Found files', one: 'found files', many: 'found files' },\n 'List files': { live: 'Listing files', done: 'Listed files', one: 'listed files', many: 'listed files' },\n Search: { live: 'Searching', done: 'Searched', one: 'searched code', many: 'searched code' },\n 'Search the web': {\n live: 'Searching the web',\n done: 'Searched the web',\n one: 'searched the web',\n many: 'searched the web',\n },\n 'Inspect code': { live: 'Inspecting', done: 'Inspected', one: 'inspected code', many: 'inspected code' },\n 'File info': { live: 'Checking', done: 'Checked', one: 'checked a file', many: 'checked files' },\n Delete: { live: 'Deleting', done: 'Deleted', one: 'deleted a file', many: 'deleted files' },\n 'New folder': { live: 'Creating folder', done: 'Created folder', one: 'created a folder', many: 'created folders' },\n Skill: { live: 'Using skill', done: 'Used skill', one: 'used a skill', many: 'used skills' },\n 'Search skills': {\n live: 'Searching skills',\n done: 'Searched skills',\n one: 'searched skills',\n many: 'searched skills',\n },\n 'Skill file': {\n live: 'Reading skill file',\n done: 'Read skill file',\n one: 'read a skill file',\n many: 'read skill files',\n },\n 'Search knowledge': {\n live: 'Searching knowledge',\n done: 'Searched knowledge',\n one: 'searched knowledge',\n many: 'searched knowledge',\n },\n 'Read page': { live: 'Reading page', done: 'Read page', one: 'read a page', many: 'read pages' },\n 'List knowledge': {\n live: 'Listing knowledge',\n done: 'Listed knowledge',\n one: 'listed knowledge',\n many: 'listed knowledge',\n },\n // knowledge_page/note/pin also move, merge, delete, remove and unpin, so these name no one operation.\n 'Edit page': { live: 'Editing page', done: 'Edited page', one: 'edited a page', many: 'edited pages' },\n 'Edit note': { live: 'Editing note', done: 'Edited note', one: 'edited a note', many: 'edited notes' },\n 'Update pin': { live: 'Updating pin', done: 'Updated pin', one: 'updated a pin', many: 'updated pins' },\n} satisfies Record<string, ToolPhrases>;\n\n/** The kinds `presentTool` labels a call with; each one has its phrases. */\nexport type ToolKind = keyof typeof KIND_PHRASES;\n\nfunction isToolKind(label: string): label is ToolKind {\n return Object.hasOwn(KIND_PHRASES, label);\n}\n\nexport function toolPhrases(label: string): ToolPhrases {\n if (isToolKind(label)) return KIND_PHRASES[label];\n return { live: `Using ${label}`, done: `Used ${label}`, one: `used ${label}`, many: `used ${label}` };\n}\n","import { formatDate, toDate } from '@/utils/date-format';\n\nexport function ToolCallTime({ at }: { at?: number }) {\n const time = toDate(at);\n if (!time) return null;\n\n return (\n <time\n className=\"shrink-0 text-meta text-muted-foreground tabular-nums\"\n dateTime={time.toISOString()}\n title={formatDate(time, 'date-time-seconds')}\n >\n {formatDate(time, 'time-seconds')}\n </time>\n );\n}\n"],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@ import { t as CopyButton } from "./copy-button-BXrbevLn.js";
|
|
|
7
7
|
import { n as languageForPath } from "./highlight-DF-vd68d.js";
|
|
8
8
|
import { n as useHighlight } from "./code-B7cFirk4.js";
|
|
9
9
|
import { CodeBlock } from "./components/CodeBlock.es.js";
|
|
10
|
-
import { a as toolEdit, o as visibleToolArgumentsText, r as presentTool } from "./tool-presentation-
|
|
11
|
-
import { _ as ActivitySpacer, b as ActivityTrigger, c as ActivityContent, d as ActivityHeader, g as ActivityLeading, h as ActivityLabel, l as ActivityDetail, p as ActivityIcon$1, s as Activity, u as ActivityDisclosure, v as ActivitySummary, y as ActivityTrailing } from "./activity-
|
|
10
|
+
import { a as toolEdit, o as visibleToolArgumentsText, r as presentTool } from "./tool-presentation-CvibOP1J.js";
|
|
11
|
+
import { _ as ActivitySpacer, b as ActivityTrigger, c as ActivityContent, d as ActivityHeader, g as ActivityLeading, h as ActivityLabel, l as ActivityDetail, p as ActivityIcon$1, s as Activity, u as ActivityDisclosure, v as ActivitySummary, y as ActivityTrailing } from "./activity-C8Ql81WM.js";
|
|
12
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { FoldVertical, X } from "lucide-react";
|
|
14
14
|
// src/ds/components/ai/tool-call/ansi.ts
|
|
@@ -373,6 +373,12 @@ var KIND_PHRASES = {
|
|
|
373
373
|
one: "read a page",
|
|
374
374
|
many: "read pages"
|
|
375
375
|
},
|
|
376
|
+
"List knowledge": {
|
|
377
|
+
live: "Listing knowledge",
|
|
378
|
+
done: "Listed knowledge",
|
|
379
|
+
one: "listed knowledge",
|
|
380
|
+
many: "listed knowledge"
|
|
381
|
+
},
|
|
376
382
|
"Edit page": {
|
|
377
383
|
live: "Editing page",
|
|
378
384
|
done: "Edited page",
|
|
@@ -417,4 +423,4 @@ function ToolCallTime({ at }) {
|
|
|
417
423
|
}
|
|
418
424
|
export { ToolCallArguments as a, ToolCallMono as c, stripAnsi as d, stripSerializedAnsi as f, ToolCallGroup as i, TOOL_GROUP_MIN as l, toolPhrases as n, ToolCallEdit as o, ToolCallOutput as r, ToolCallCommand as s, ToolCallTime as t, groupConsecutive as u };
|
|
419
425
|
|
|
420
|
-
//# sourceMappingURL=tool-call-
|
|
426
|
+
//# sourceMappingURL=tool-call-Dsj43lvJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-Ch9-jjXU.js","names":["_Fragment","ActivityIcon","_Fragment"],"sources":["../src/ds/components/ai/tool-call/ansi.ts","../src/ds/components/ai/tool-call/group-consecutive.ts","../src/ds/components/ai/tool-call/tool-call-mono.tsx","../src/ds/components/ai/tool-call/tool-call-edit.tsx","../src/ds/components/ai/tool-call/tool-call-arguments.tsx","../src/ds/components/ai/tool-call/tool-call-group.tsx","../src/ds/components/ai/tool-call/tool-call-output.tsx","../src/ds/components/ai/tool-call/tool-phrases.ts","../src/ds/components/ai/tool-call/tool-call-time.tsx"],"sourcesContent":["// Sandbox commands run in a PTY, so CLIs emit color escapes even under NO_COLOR.\n// eslint-disable-next-line no-control-regex\nconst ANSI_RE =\n /[\\u001b\\u009b][[\\]()#;?]*(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?\\u0007|(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~])/g;\n\n// The same sequences once JSON.stringify escaped the bytes; an even backslash run before the `u` is source text spelling the escape, kept.\nconst ESCAPED_ANSI_RE = /(?<!\\\\)((?:\\\\\\\\)*)\\\\u001[bB](?:\\[[0-9;?<=>]*[a-zA-Z]|\\][\\s\\S]*?(?:\\\\u0007|\\\\u001[bB]\\\\\\\\))/g;\n\nexport function stripAnsi(text: string): string {\n return text.replace(ANSI_RE, '');\n}\n\nexport function stripSerializedAnsi(text: string): string {\n return stripAnsi(text).replace(ESCAPED_ANSI_RE, '$1');\n}\n","export interface ConsecutiveGroups<T> {\n /** Each run, keyed by its first member. */\n byFirstKey: Map<string, T[]>;\n /** The members after the first, which draw nothing of their own. */\n memberKeys: Set<string>;\n}\n\nexport interface ConsecutiveRules<T, U extends T> {\n key: (item: U) => string;\n /** Whether an item extends the run; anything else ends it. */\n joins: (item: T) => item is U;\n /** Runs shorter than this stay individual rows. */\n min?: number;\n}\n\n/** Consecutive tool calls this long fold into one group row. */\nexport const TOOL_GROUP_MIN = 3;\n\n/** Cuts a list into runs of joining items, keeping only the runs long enough to fold. */\nexport function groupConsecutive<T, U extends T>(\n items: readonly T[],\n { key, joins, min = TOOL_GROUP_MIN }: ConsecutiveRules<T, U>,\n): ConsecutiveGroups<U> {\n const byFirstKey = new Map<string, U[]>();\n const memberKeys = new Set<string>();\n let run: U[] = [];\n\n const flush = () => {\n if (run.length >= min) {\n for (const [index, item] of run.entries()) {\n if (index === 0) byFirstKey.set(key(item), run);\n else memberKeys.add(key(item));\n }\n }\n run = [];\n };\n\n for (const item of items) {\n if (joins(item)) run.push(item);\n else flush();\n }\n flush();\n\n return { byFirstKey, memberKeys };\n}\n","import type { ComponentProps } from 'react';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { cn } from '@/lib/utils';\n\nexport interface ToolCallMonoProps extends ComponentProps<'pre'> {\n copyText: string;\n}\n\n/** Monospace body block of an expanded call — arguments, command, output — with a hover copy. */\nexport const ToolCallMono = ({ copyText, className, children, ...props }: ToolCallMonoProps) => (\n <div className=\"group/block relative max-w-full min-w-0\">\n <pre\n className={cn(\n 'm-0 max-h-60 max-w-full overflow-auto rounded-md bg-fill px-3 py-2 font-mono text-caption break-words whitespace-pre-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </pre>\n <CopyButton\n content={copyText}\n variant=\"ghost\"\n className=\"absolute top-1 right-1 opacity-0 transition-opacity group-hover/block:opacity-100 focus-visible:opacity-100\"\n />\n </div>\n);\n\n/** A shell command as the body shows it: `$` in the margin, the copy takes the command alone. */\nexport const ToolCallCommand = ({ command }: { command: string }) => (\n <ToolCallMono copyText={command} className=\"text-foreground\">\n <span className=\"text-muted-foreground select-none\">$ </span>\n {command}\n </ToolCallMono>\n);\n","import type { ToolEdit } from './tool-presentation';\nimport { useHighlight } from '@/ds/components/Code';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { languageForPath } from '@/ds/components/CodeEditor/highlight';\nimport { truncateString } from '@/lib/truncate-string';\nimport { cn } from '@/lib/utils';\n\nconst DIFF_MAX_LINES = 200;\nconst WRITTEN_FILE_MAX_CHARS = 2000;\n\nconst DIFF_SIDES = {\n removed: { sign: '-', row: 'bg-destructive-subtle', gutter: 'text-destructive-subtle-foreground' },\n added: { sign: '+', row: 'bg-success-subtle', gutter: 'text-success-subtle-foreground' },\n} as const;\n\nfunction boundedLines(text: string, showFullContent: boolean): { lines: string[]; hidden: number } {\n const lines = text.split('\\n');\n if (showFullContent) return { lines, hidden: 0 };\n return { lines: lines.slice(0, DIFF_MAX_LINES), hidden: Math.max(0, lines.length - DIFF_MAX_LINES) };\n}\n\nfunction DiffSide({ lines, side, lang }: { lines: string[]; side: keyof typeof DIFF_SIDES; lang: string | undefined }) {\n const { sign, row, gutter } = DIFF_SIDES[side];\n const code = lines.join('\\n');\n const highlighted = useHighlight(code, lang);\n const tokens = highlighted?.code === code ? highlighted.tokens : undefined;\n\n return (\n <>\n {lines.map((line, index) => (\n <div key={index} className={cn('flex whitespace-pre', row)}>\n <span className={cn('w-5 shrink-0 text-center opacity-70 select-none', gutter)}>{sign}</span>\n <span className=\"flex-1 pr-2.5 text-foreground\">\n {tokens?.[index]?.map((token, tokenIndex) => (\n <span key={tokenIndex} className={token.className}>\n {token.content}\n </span>\n )) ?? line}\n </span>\n </div>\n ))}\n </>\n );\n}\n\nexport function ToolCallEdit({ edit, showFullContent = false }: { edit: ToolEdit; showFullContent?: boolean }) {\n const lang = languageForPath(edit.path);\n\n if ('content' in edit) {\n return (\n <CodeBlock\n code={showFullContent ? edit.content : truncateString(edit.content, WRITTEN_FILE_MAX_CHARS)}\n lang={lang}\n fileName={edit.path ?? 'Change'}\n overflow=\"scroll\"\n />\n );\n }\n\n const removed = boundedLines(edit.oldText, showFullContent);\n const added = boundedLines(edit.newText, showFullContent);\n const hidden = removed.hidden + added.hidden;\n\n return (\n <div\n className={cn(\n 'max-w-full min-w-0 overflow-x-auto rounded-md border border-border bg-fill font-mono text-caption',\n showFullContent && 'max-h-60 overflow-y-auto',\n )}\n role=\"group\"\n aria-label=\"File change\"\n >\n <DiffSide lines={removed.lines} side=\"removed\" lang={lang} />\n <DiffSide lines={added.lines} side=\"added\" lang={lang} />\n {hidden > 0 && <div className=\"px-2.5 py-1 text-muted-foreground select-none\">… {hidden} more lines</div>}\n </div>\n );\n}\n","import { ToolCallEdit } from './tool-call-edit';\nimport { ToolCallMono } from './tool-call-mono';\nimport { toolEdit, visibleToolArgumentsText } from './tool-presentation';\nimport type { ToolArgumentsInput } from './tool-presentation';\n\nexport interface ToolCallArgumentsProps extends ToolArgumentsInput {\n 'data-testid'?: string;\n showFullContent?: boolean;\n}\n\nexport function ToolCallArguments({ 'data-testid': testId, showFullContent, ...input }: ToolCallArgumentsProps) {\n const edit = toolEdit(input.toolName, input.args);\n if (edit) return <ToolCallEdit edit={edit} showFullContent={showFullContent} />;\n\n const text = visibleToolArgumentsText(input);\n if (!text) return null;\n\n return (\n <ToolCallMono copyText={text} data-testid={testId} className=\"text-foreground\">\n {text}\n </ToolCallMono>\n );\n}\n","import { FoldVertical, X } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { presentTool } from './tool-presentation';\nimport {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityLabel,\n ActivityLeading,\n ActivitySpacer,\n ActivitySummary,\n ActivityTrailing,\n ActivityTrigger,\n} from '@/ds/components/ai/activity';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ToolCallGroupStep {\n toolName: string;\n args: unknown;\n status: ActivityStatus;\n /** A successful tool result was recorded. Supply for every step to enable outcome counts; omit to keep legacy summaries. */\n hasResult?: boolean;\n}\n\nexport interface ToolCallGroupProps {\n steps: ToolCallGroupStep[];\n /** Rendered ahead of the icon, e.g. the time the first step began. */\n leading?: ReactNode;\n children: ReactNode;\n}\n\nconst MAX_KIND_GLYPHS = 4;\n\nexport function ToolCallGroup({ steps, leading, children }: ToolCallGroupProps) {\n const running = steps.find(step => step.status === 'running');\n const live = running && presentTool(running.toolName, running.args);\n\n return (\n <Activity status={running ? 'running' : 'idle'} aria-label={`Tool group: ${steps.length} steps`}>\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>\n <FoldVertical size={14} aria-hidden className=\"text-placeholder\" />\n </ActivityIcon>\n <ActivityLabel>{steps.length} steps</ActivityLabel>\n {live && live.description ? (\n <ActivityLabel className=\"max-w-none min-w-0 shrink\">{live.description}</ActivityLabel>\n ) : (\n live && live.detail && <ActivityDetail>{live.detail}</ActivityDetail>\n )}\n <GroupKinds steps={steps} />\n <ActivitySpacer rule />\n <ActivityTrailing>\n <GroupProgress steps={steps} />\n </ActivityTrailing>\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n <ActivityContent className=\"py-0.5 pr-0 pl-2.5\">\n <ScrollArea maxHeight=\"18rem\" autoScroll={Boolean(running)} revealScrollbarOnHover={false}>\n {children}\n </ScrollArea>\n </ActivityContent>\n </Activity>\n );\n}\n\nfunction GroupProgress({ steps }: { steps: ToolCallGroupStep[] }) {\n const done = steps.filter(step => step.status !== 'running').length;\n if (done < steps.length) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {done}/{steps.length}\n </Txt>\n );\n }\n const failed = steps.filter(step => step.status === 'error').length;\n const errorIndicator =\n failed > 0 ? <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" /> : null;\n // Older consumers only supply visual status, which cannot distinguish completed from interrupted calls.\n if (steps.some(step => step.hasResult === undefined)) return errorIndicator;\n\n const succeeded = steps.filter(step => step.status === 'idle' && step.hasResult).length;\n const incomplete = steps.length - succeeded - failed;\n const summary = [\n succeeded > 0 && `${succeeded} OK`,\n failed > 0 && `${failed} failed`,\n incomplete > 0 && `${incomplete} incomplete`,\n ]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <>\n {errorIndicator}\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {summary}\n </Txt>\n </>\n );\n}\n\nfunction GroupKinds({ steps }: { steps: ToolCallGroupStep[] }) {\n const presented = steps.map(step => presentTool(step.toolName, step.args));\n const labels = new Set(presented.map(({ label }) => label));\n const glyphs = [...new Map(presented.map(({ pose, icon }) => [pose, icon]))].slice(0, MAX_KIND_GLYPHS);\n\n return (\n <ActivitySummary role=\"img\" aria-label={[...labels].join(', ')} className=\"shrink-0 gap-1.5\">\n {glyphs.map(([pose, Kind]) => (\n <Kind key={pose} size={12} className=\"text-placeholder\" />\n ))}\n </ActivitySummary>\n );\n}\n","import { ToolCallMono } from './tool-call-mono';\n\nexport interface ToolCallOutputProps {\n text: string;\n error?: boolean;\n maxLength?: number;\n 'data-testid'?: string;\n}\n\nexport function ToolCallOutput({ text, error, maxLength, 'data-testid': testId }: ToolCallOutputProps) {\n const preview = maxLength !== undefined && text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;\n\n return (\n <ToolCallMono\n copyText={text}\n data-testid={testId}\n className={error ? 'text-destructive-foreground' : 'text-muted-foreground'}\n >\n {preview}\n </ToolCallMono>\n );\n}\n","/** How a line words one kind of tool: while it runs, done alone, and once or many times in a summary. */\nexport interface ToolPhrases {\n live: string;\n done: string;\n one: string;\n many: string;\n}\n\nconst KIND_PHRASES = {\n Read: { live: 'Reading', done: 'Read', one: 'read a file', many: 'read files' },\n Write: { live: 'Writing', done: 'Wrote', one: 'wrote a file', many: 'wrote files' },\n Edit: { live: 'Editing', done: 'Edited', one: 'edited a file', many: 'edited files' },\n Run: { live: 'Running', done: 'Ran', one: 'ran a command', many: 'ran commands' },\n 'Process output': {\n live: 'Reading output',\n done: 'Read output',\n one: 'read process output',\n many: 'read process output',\n },\n 'Stop process': {\n live: 'Stopping process',\n done: 'Stopped process',\n one: 'stopped a process',\n many: 'stopped processes',\n },\n 'Find files': { live: 'Finding files', done: 'Found files', one: 'found files', many: 'found files' },\n 'List files': { live: 'Listing files', done: 'Listed files', one: 'listed files', many: 'listed files' },\n Search: { live: 'Searching', done: 'Searched', one: 'searched code', many: 'searched code' },\n 'Search the web': {\n live: 'Searching the web',\n done: 'Searched the web',\n one: 'searched the web',\n many: 'searched the web',\n },\n 'Inspect code': { live: 'Inspecting', done: 'Inspected', one: 'inspected code', many: 'inspected code' },\n 'File info': { live: 'Checking', done: 'Checked', one: 'checked a file', many: 'checked files' },\n Delete: { live: 'Deleting', done: 'Deleted', one: 'deleted a file', many: 'deleted files' },\n 'New folder': { live: 'Creating folder', done: 'Created folder', one: 'created a folder', many: 'created folders' },\n Skill: { live: 'Using skill', done: 'Used skill', one: 'used a skill', many: 'used skills' },\n 'Search skills': {\n live: 'Searching skills',\n done: 'Searched skills',\n one: 'searched skills',\n many: 'searched skills',\n },\n 'Skill file': {\n live: 'Reading skill file',\n done: 'Read skill file',\n one: 'read a skill file',\n many: 'read skill files',\n },\n 'Search knowledge': {\n live: 'Searching knowledge',\n done: 'Searched knowledge',\n one: 'searched knowledge',\n many: 'searched knowledge',\n },\n 'Read page': { live: 'Reading page', done: 'Read page', one: 'read a page', many: 'read pages' },\n // knowledge_page/note/pin also move, merge, delete, remove and unpin, so these name no one operation.\n 'Edit page': { live: 'Editing page', done: 'Edited page', one: 'edited a page', many: 'edited pages' },\n 'Edit note': { live: 'Editing note', done: 'Edited note', one: 'edited a note', many: 'edited notes' },\n 'Update pin': { live: 'Updating pin', done: 'Updated pin', one: 'updated a pin', many: 'updated pins' },\n} satisfies Record<string, ToolPhrases>;\n\n/** The kinds `presentTool` labels a call with; each one has its phrases. */\nexport type ToolKind = keyof typeof KIND_PHRASES;\n\nfunction isToolKind(label: string): label is ToolKind {\n return Object.hasOwn(KIND_PHRASES, label);\n}\n\nexport function toolPhrases(label: string): ToolPhrases {\n if (isToolKind(label)) return KIND_PHRASES[label];\n return { live: `Using ${label}`, done: `Used ${label}`, one: `used ${label}`, many: `used ${label}` };\n}\n","import { formatDate, toDate } from '@/utils/date-format';\n\nexport function ToolCallTime({ at }: { at?: number }) {\n const time = toDate(at);\n if (!time) return null;\n\n return (\n <time\n className=\"shrink-0 text-meta text-muted-foreground tabular-nums\"\n dateTime={time.toISOString()}\n title={formatDate(time, 'date-time-seconds')}\n >\n {formatDate(time, 'time-seconds')}\n </time>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool-call-Dsj43lvJ.js","names":["_Fragment","ActivityIcon","_Fragment"],"sources":["../src/ds/components/ai/tool-call/ansi.ts","../src/ds/components/ai/tool-call/group-consecutive.ts","../src/ds/components/ai/tool-call/tool-call-mono.tsx","../src/ds/components/ai/tool-call/tool-call-edit.tsx","../src/ds/components/ai/tool-call/tool-call-arguments.tsx","../src/ds/components/ai/tool-call/tool-call-group.tsx","../src/ds/components/ai/tool-call/tool-call-output.tsx","../src/ds/components/ai/tool-call/tool-phrases.ts","../src/ds/components/ai/tool-call/tool-call-time.tsx"],"sourcesContent":["// Sandbox commands run in a PTY, so CLIs emit color escapes even under NO_COLOR.\n// eslint-disable-next-line no-control-regex\nconst ANSI_RE =\n /[\\u001b\\u009b][[\\]()#;?]*(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d/#&.:=?%@~_]*)*)?\\u0007|(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~])/g;\n\n// The same sequences once JSON.stringify escaped the bytes; an even backslash run before the `u` is source text spelling the escape, kept.\nconst ESCAPED_ANSI_RE = /(?<!\\\\)((?:\\\\\\\\)*)\\\\u001[bB](?:\\[[0-9;?<=>]*[a-zA-Z]|\\][\\s\\S]*?(?:\\\\u0007|\\\\u001[bB]\\\\\\\\))/g;\n\nexport function stripAnsi(text: string): string {\n return text.replace(ANSI_RE, '');\n}\n\nexport function stripSerializedAnsi(text: string): string {\n return stripAnsi(text).replace(ESCAPED_ANSI_RE, '$1');\n}\n","export interface ConsecutiveGroups<T> {\n /** Each run, keyed by its first member. */\n byFirstKey: Map<string, T[]>;\n /** The members after the first, which draw nothing of their own. */\n memberKeys: Set<string>;\n}\n\nexport interface ConsecutiveRules<T, U extends T> {\n key: (item: U) => string;\n /** Whether an item extends the run; anything else ends it. */\n joins: (item: T) => item is U;\n /** Runs shorter than this stay individual rows. */\n min?: number;\n}\n\n/** Consecutive tool calls this long fold into one group row. */\nexport const TOOL_GROUP_MIN = 3;\n\n/** Cuts a list into runs of joining items, keeping only the runs long enough to fold. */\nexport function groupConsecutive<T, U extends T>(\n items: readonly T[],\n { key, joins, min = TOOL_GROUP_MIN }: ConsecutiveRules<T, U>,\n): ConsecutiveGroups<U> {\n const byFirstKey = new Map<string, U[]>();\n const memberKeys = new Set<string>();\n let run: U[] = [];\n\n const flush = () => {\n if (run.length >= min) {\n for (const [index, item] of run.entries()) {\n if (index === 0) byFirstKey.set(key(item), run);\n else memberKeys.add(key(item));\n }\n }\n run = [];\n };\n\n for (const item of items) {\n if (joins(item)) run.push(item);\n else flush();\n }\n flush();\n\n return { byFirstKey, memberKeys };\n}\n","import type { ComponentProps } from 'react';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { cn } from '@/lib/utils';\n\nexport interface ToolCallMonoProps extends ComponentProps<'pre'> {\n copyText: string;\n}\n\n/** Monospace body block of an expanded call — arguments, command, output — with a hover copy. */\nexport const ToolCallMono = ({ copyText, className, children, ...props }: ToolCallMonoProps) => (\n <div className=\"group/block relative max-w-full min-w-0\">\n <pre\n className={cn(\n 'm-0 max-h-60 max-w-full overflow-auto rounded-md bg-fill px-3 py-2 font-mono text-caption break-words whitespace-pre-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </pre>\n <CopyButton\n content={copyText}\n variant=\"ghost\"\n className=\"absolute top-1 right-1 opacity-0 transition-opacity group-hover/block:opacity-100 focus-visible:opacity-100\"\n />\n </div>\n);\n\n/** A shell command as the body shows it: `$` in the margin, the copy takes the command alone. */\nexport const ToolCallCommand = ({ command }: { command: string }) => (\n <ToolCallMono copyText={command} className=\"text-foreground\">\n <span className=\"text-muted-foreground select-none\">$ </span>\n {command}\n </ToolCallMono>\n);\n","import type { ToolEdit } from './tool-presentation';\nimport { useHighlight } from '@/ds/components/Code';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { languageForPath } from '@/ds/components/CodeEditor/highlight';\nimport { truncateString } from '@/lib/truncate-string';\nimport { cn } from '@/lib/utils';\n\nconst DIFF_MAX_LINES = 200;\nconst WRITTEN_FILE_MAX_CHARS = 2000;\n\nconst DIFF_SIDES = {\n removed: { sign: '-', row: 'bg-destructive-subtle', gutter: 'text-destructive-subtle-foreground' },\n added: { sign: '+', row: 'bg-success-subtle', gutter: 'text-success-subtle-foreground' },\n} as const;\n\nfunction boundedLines(text: string, showFullContent: boolean): { lines: string[]; hidden: number } {\n const lines = text.split('\\n');\n if (showFullContent) return { lines, hidden: 0 };\n return { lines: lines.slice(0, DIFF_MAX_LINES), hidden: Math.max(0, lines.length - DIFF_MAX_LINES) };\n}\n\nfunction DiffSide({ lines, side, lang }: { lines: string[]; side: keyof typeof DIFF_SIDES; lang: string | undefined }) {\n const { sign, row, gutter } = DIFF_SIDES[side];\n const code = lines.join('\\n');\n const highlighted = useHighlight(code, lang);\n const tokens = highlighted?.code === code ? highlighted.tokens : undefined;\n\n return (\n <>\n {lines.map((line, index) => (\n <div key={index} className={cn('flex whitespace-pre', row)}>\n <span className={cn('w-5 shrink-0 text-center opacity-70 select-none', gutter)}>{sign}</span>\n <span className=\"flex-1 pr-2.5 text-foreground\">\n {tokens?.[index]?.map((token, tokenIndex) => (\n <span key={tokenIndex} className={token.className}>\n {token.content}\n </span>\n )) ?? line}\n </span>\n </div>\n ))}\n </>\n );\n}\n\nexport function ToolCallEdit({ edit, showFullContent = false }: { edit: ToolEdit; showFullContent?: boolean }) {\n const lang = languageForPath(edit.path);\n\n if ('content' in edit) {\n return (\n <CodeBlock\n code={showFullContent ? edit.content : truncateString(edit.content, WRITTEN_FILE_MAX_CHARS)}\n lang={lang}\n fileName={edit.path ?? 'Change'}\n overflow=\"scroll\"\n />\n );\n }\n\n const removed = boundedLines(edit.oldText, showFullContent);\n const added = boundedLines(edit.newText, showFullContent);\n const hidden = removed.hidden + added.hidden;\n\n return (\n <div\n className={cn(\n 'max-w-full min-w-0 overflow-x-auto rounded-md border border-border bg-fill font-mono text-caption',\n showFullContent && 'max-h-60 overflow-y-auto',\n )}\n role=\"group\"\n aria-label=\"File change\"\n >\n <DiffSide lines={removed.lines} side=\"removed\" lang={lang} />\n <DiffSide lines={added.lines} side=\"added\" lang={lang} />\n {hidden > 0 && <div className=\"px-2.5 py-1 text-muted-foreground select-none\">… {hidden} more lines</div>}\n </div>\n );\n}\n","import { ToolCallEdit } from './tool-call-edit';\nimport { ToolCallMono } from './tool-call-mono';\nimport { toolEdit, visibleToolArgumentsText } from './tool-presentation';\nimport type { ToolArgumentsInput } from './tool-presentation';\n\nexport interface ToolCallArgumentsProps extends ToolArgumentsInput {\n 'data-testid'?: string;\n showFullContent?: boolean;\n}\n\nexport function ToolCallArguments({ 'data-testid': testId, showFullContent, ...input }: ToolCallArgumentsProps) {\n const edit = toolEdit(input.toolName, input.args);\n if (edit) return <ToolCallEdit edit={edit} showFullContent={showFullContent} />;\n\n const text = visibleToolArgumentsText(input);\n if (!text) return null;\n\n return (\n <ToolCallMono copyText={text} data-testid={testId} className=\"text-foreground\">\n {text}\n </ToolCallMono>\n );\n}\n","import { FoldVertical, X } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { presentTool } from './tool-presentation';\nimport {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityLabel,\n ActivityLeading,\n ActivitySpacer,\n ActivitySummary,\n ActivityTrailing,\n ActivityTrigger,\n} from '@/ds/components/ai/activity';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ToolCallGroupStep {\n toolName: string;\n args: unknown;\n status: ActivityStatus;\n /** A successful tool result was recorded. Supply for every step to enable outcome counts; omit to keep legacy summaries. */\n hasResult?: boolean;\n}\n\nexport interface ToolCallGroupProps {\n steps: ToolCallGroupStep[];\n /** Rendered ahead of the icon, e.g. the time the first step began. */\n leading?: ReactNode;\n children: ReactNode;\n}\n\nconst MAX_KIND_GLYPHS = 4;\n\nexport function ToolCallGroup({ steps, leading, children }: ToolCallGroupProps) {\n const running = steps.find(step => step.status === 'running');\n const live = running && presentTool(running.toolName, running.args);\n\n return (\n <Activity status={running ? 'running' : 'idle'} aria-label={`Tool group: ${steps.length} steps`}>\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>\n <FoldVertical size={14} aria-hidden className=\"text-placeholder\" />\n </ActivityIcon>\n <ActivityLabel>{steps.length} steps</ActivityLabel>\n {live && live.description ? (\n <ActivityLabel className=\"max-w-none min-w-0 shrink\">{live.description}</ActivityLabel>\n ) : (\n live && live.detail && <ActivityDetail>{live.detail}</ActivityDetail>\n )}\n <GroupKinds steps={steps} />\n <ActivitySpacer rule />\n <ActivityTrailing>\n <GroupProgress steps={steps} />\n </ActivityTrailing>\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n <ActivityContent className=\"py-0.5 pr-0 pl-2.5\">\n <ScrollArea maxHeight=\"18rem\" autoScroll={Boolean(running)} revealScrollbarOnHover={false}>\n {children}\n </ScrollArea>\n </ActivityContent>\n </Activity>\n );\n}\n\nfunction GroupProgress({ steps }: { steps: ToolCallGroupStep[] }) {\n const done = steps.filter(step => step.status !== 'running').length;\n if (done < steps.length) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {done}/{steps.length}\n </Txt>\n );\n }\n const failed = steps.filter(step => step.status === 'error').length;\n const errorIndicator =\n failed > 0 ? <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" /> : null;\n // Older consumers only supply visual status, which cannot distinguish completed from interrupted calls.\n if (steps.some(step => step.hasResult === undefined)) return errorIndicator;\n\n const succeeded = steps.filter(step => step.status === 'idle' && step.hasResult).length;\n const incomplete = steps.length - succeeded - failed;\n const summary = [\n succeeded > 0 && `${succeeded} OK`,\n failed > 0 && `${failed} failed`,\n incomplete > 0 && `${incomplete} incomplete`,\n ]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <>\n {errorIndicator}\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"shrink-0 tabular-nums\">\n {summary}\n </Txt>\n </>\n );\n}\n\nfunction GroupKinds({ steps }: { steps: ToolCallGroupStep[] }) {\n const presented = steps.map(step => presentTool(step.toolName, step.args));\n const labels = new Set(presented.map(({ label }) => label));\n const glyphs = [...new Map(presented.map(({ pose, icon }) => [pose, icon]))].slice(0, MAX_KIND_GLYPHS);\n\n return (\n <ActivitySummary role=\"img\" aria-label={[...labels].join(', ')} className=\"shrink-0 gap-1.5\">\n {glyphs.map(([pose, Kind]) => (\n <Kind key={pose} size={12} className=\"text-placeholder\" />\n ))}\n </ActivitySummary>\n );\n}\n","import { ToolCallMono } from './tool-call-mono';\n\nexport interface ToolCallOutputProps {\n text: string;\n error?: boolean;\n maxLength?: number;\n 'data-testid'?: string;\n}\n\nexport function ToolCallOutput({ text, error, maxLength, 'data-testid': testId }: ToolCallOutputProps) {\n const preview = maxLength !== undefined && text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;\n\n return (\n <ToolCallMono\n copyText={text}\n data-testid={testId}\n className={error ? 'text-destructive-foreground' : 'text-muted-foreground'}\n >\n {preview}\n </ToolCallMono>\n );\n}\n","/** How a line words one kind of tool: while it runs, done alone, and once or many times in a summary. */\nexport interface ToolPhrases {\n live: string;\n done: string;\n one: string;\n many: string;\n}\n\nconst KIND_PHRASES = {\n Read: { live: 'Reading', done: 'Read', one: 'read a file', many: 'read files' },\n Write: { live: 'Writing', done: 'Wrote', one: 'wrote a file', many: 'wrote files' },\n Edit: { live: 'Editing', done: 'Edited', one: 'edited a file', many: 'edited files' },\n Run: { live: 'Running', done: 'Ran', one: 'ran a command', many: 'ran commands' },\n 'Process output': {\n live: 'Reading output',\n done: 'Read output',\n one: 'read process output',\n many: 'read process output',\n },\n 'Stop process': {\n live: 'Stopping process',\n done: 'Stopped process',\n one: 'stopped a process',\n many: 'stopped processes',\n },\n 'Find files': { live: 'Finding files', done: 'Found files', one: 'found files', many: 'found files' },\n 'List files': { live: 'Listing files', done: 'Listed files', one: 'listed files', many: 'listed files' },\n Search: { live: 'Searching', done: 'Searched', one: 'searched code', many: 'searched code' },\n 'Search the web': {\n live: 'Searching the web',\n done: 'Searched the web',\n one: 'searched the web',\n many: 'searched the web',\n },\n 'Inspect code': { live: 'Inspecting', done: 'Inspected', one: 'inspected code', many: 'inspected code' },\n 'File info': { live: 'Checking', done: 'Checked', one: 'checked a file', many: 'checked files' },\n Delete: { live: 'Deleting', done: 'Deleted', one: 'deleted a file', many: 'deleted files' },\n 'New folder': { live: 'Creating folder', done: 'Created folder', one: 'created a folder', many: 'created folders' },\n Skill: { live: 'Using skill', done: 'Used skill', one: 'used a skill', many: 'used skills' },\n 'Search skills': {\n live: 'Searching skills',\n done: 'Searched skills',\n one: 'searched skills',\n many: 'searched skills',\n },\n 'Skill file': {\n live: 'Reading skill file',\n done: 'Read skill file',\n one: 'read a skill file',\n many: 'read skill files',\n },\n 'Search knowledge': {\n live: 'Searching knowledge',\n done: 'Searched knowledge',\n one: 'searched knowledge',\n many: 'searched knowledge',\n },\n 'Read page': { live: 'Reading page', done: 'Read page', one: 'read a page', many: 'read pages' },\n 'List knowledge': {\n live: 'Listing knowledge',\n done: 'Listed knowledge',\n one: 'listed knowledge',\n many: 'listed knowledge',\n },\n // knowledge_page/note/pin also move, merge, delete, remove and unpin, so these name no one operation.\n 'Edit page': { live: 'Editing page', done: 'Edited page', one: 'edited a page', many: 'edited pages' },\n 'Edit note': { live: 'Editing note', done: 'Edited note', one: 'edited a note', many: 'edited notes' },\n 'Update pin': { live: 'Updating pin', done: 'Updated pin', one: 'updated a pin', many: 'updated pins' },\n} satisfies Record<string, ToolPhrases>;\n\n/** The kinds `presentTool` labels a call with; each one has its phrases. */\nexport type ToolKind = keyof typeof KIND_PHRASES;\n\nfunction isToolKind(label: string): label is ToolKind {\n return Object.hasOwn(KIND_PHRASES, label);\n}\n\nexport function toolPhrases(label: string): ToolPhrases {\n if (isToolKind(label)) return KIND_PHRASES[label];\n return { live: `Using ${label}`, done: `Used ${label}`, one: `used ${label}`, many: `used ${label}` };\n}\n","import { formatDate, toDate } from '@/utils/date-format';\n\nexport function ToolCallTime({ at }: { at?: number }) {\n const time = toDate(at);\n if (!time) return null;\n\n return (\n <time\n className=\"shrink-0 text-meta text-muted-foreground tabular-nums\"\n dateTime={time.toISOString()}\n title={formatDate(time, 'date-time-seconds')}\n >\n {formatDate(time, 'time-seconds')}\n </time>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAEA,IAAM,UACJ;AAGF,IAAM,kBAAkB;AAExB,SAAgB,UAAU,MAAsB;CAC9C,OAAO,KAAK,QAAQ,SAAS,EAAE;AACjC;AAEA,SAAgB,oBAAoB,MAAsB;CACxD,OAAO,UAAU,IAAI,CAAC,CAAC,QAAQ,iBAAiB,IAAI;AACtD;;;ACEA,IAAa,iBAAiB;;AAG9B,SAAgB,iBACd,OACA,EAAE,KAAK,OAAO,MAAA,KACQ;CACtB,MAAM,6BAAa,IAAI,IAAiB;CACxC,MAAM,6BAAa,IAAI,IAAY;CACnC,IAAI,MAAW,CAAC;CAEhB,MAAM,cAAc;EAClB,IAAI,IAAI,UAAU,KAChB,KAAK,MAAM,CAAC,OAAO,SAAS,IAAI,QAAQ,GACtC,IAAI,UAAU,GAAG,WAAW,IAAI,IAAI,IAAI,GAAG,GAAG;OACzC,WAAW,IAAI,IAAI,IAAI,CAAC;EAGjC,MAAM,CAAC;CACT;CAEA,KAAK,MAAM,QAAQ,OACjB,IAAI,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI;MACzB,MAAM;CAEb,MAAM;CAEN,OAAO;EAAE;EAAY;CAAW;AAClC;;;ACnCA,IAAa,gBAAgB,EAAE,UAAU,WAAW,UAAU,GAAG,YAC/D,qBAAC,OAAD;CAAK,WAAU;CAAf,UAAA,CACE,oBAAC,OAAD;EACE,WAAW,GACT,6HACA,SACF;EACA,GAAI;EAEH;CACE,CAAA,GACL,oBAAC,YAAD;EACE,SAAS;EACT,SAAQ;EACR,WAAU;CACX,CAAA,CACE;;;AAIP,IAAa,mBAAmB,EAAE,cAChC,qBAAC,cAAD;CAAc,UAAU;CAAS,WAAU;CAA3C,UAAA,CACE,oBAAC,QAAD;EAAM,WAAU;EAAoC,UAAA;CAAQ,CAAA,GAC3D,OACW;;;AC1BhB,IAAM,iBAAiB;AACvB,IAAM,yBAAyB;AAE/B,IAAM,aAAa;CACjB,SAAS;EAAE,MAAM;EAAK,KAAK;EAAyB,QAAQ;CAAqC;CACjG,OAAO;EAAE,MAAM;EAAK,KAAK;EAAqB,QAAQ;CAAiC;AACzF;AAEA,SAAS,aAAa,MAAc,iBAA+D;CACjG,MAAM,QAAQ,KAAK,MAAM,IAAI;CAC7B,IAAI,iBAAiB,OAAO;EAAE;EAAO,QAAQ;CAAE;CAC/C,OAAO;EAAE,OAAO,MAAM,MAAM,GAAG,cAAc;EAAG,QAAQ,KAAK,IAAI,GAAG,MAAM,SAAS,cAAc;CAAE;AACrG;AAEA,SAAS,SAAS,EAAE,OAAO,MAAM,QAAsF;CACrH,MAAM,EAAE,MAAM,KAAK,WAAW,WAAW;CACzC,MAAM,OAAO,MAAM,KAAK,IAAI;CAC5B,MAAM,cAAc,aAAa,MAAM,IAAI;CAC3C,MAAM,SAAS,aAAa,SAAS,OAAO,YAAY,SAAS,KAAA;CAEjE,OACE,oBAAAA,UAAA,EAAA,UACG,MAAM,KAAK,MAAM,UAChB,qBAAC,OAAD;EAAiB,WAAW,GAAG,uBAAuB,GAAG;EAAzD,UAAA,CACE,oBAAC,QAAD;GAAM,WAAW,GAAG,mDAAmD,MAAM;GAAI,UAAA;EAAW,CAAA,GAC5F,oBAAC,QAAD;GAAM,WAAU;GACb,UAAA,SAAS,MAAM,EAAE,KAAK,OAAO,eAC5B,oBAAC,QAAD;IAAuB,WAAW,MAAM;IACrC,UAAA,MAAM;GACH,GAFK,UAEL,CACP,KAAK;EACF,CAAA,CACH;CATK,GAAA,KASL,CACN,EACD,CAAA;AAEN;AAEA,SAAgB,aAAa,EAAE,MAAM,kBAAkB,SAAwD;CAC7G,MAAM,OAAO,gBAAgB,KAAK,IAAI;CAEtC,IAAI,aAAa,MACf,OACE,oBAAC,WAAD;EACE,MAAM,kBAAkB,KAAK,UAAU,eAAe,KAAK,SAAS,sBAAsB;EACpF;EACN,UAAU,KAAK,QAAQ;EACvB,UAAS;CACV,CAAA;CAIL,MAAM,UAAU,aAAa,KAAK,SAAS,eAAe;CAC1D,MAAM,QAAQ,aAAa,KAAK,SAAS,eAAe;CACxD,MAAM,SAAS,QAAQ,SAAS,MAAM;CAEtC,OACE,qBAAC,OAAD;EACE,WAAW,GACT,qGACA,mBAAmB,0BACrB;EACA,MAAK;EACL,cAAW;EANb,UAAA;GAQE,oBAAC,UAAD;IAAU,OAAO,QAAQ;IAAO,MAAK;IAAgB;GAAO,CAAA;GAC5D,oBAAC,UAAD;IAAU,OAAO,MAAM;IAAO,MAAK;IAAc;GAAO,CAAA;GACvD,SAAS,KAAK,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KAA+D;KAAG;KAAO;IAAgB;;EACrG;;AAET;;ACnEA,SAAgB,kBAAkB,EAAE,eAAe,QAAQ,iBAAiB,GAAG,SAAiC;CAC9G,MAAM,OAAO,SAAS,MAAM,UAAU,MAAM,IAAI;CAChD,IAAI,MAAM,OAAO,oBAAC,cAAD;EAAoB;EAAuB;CAAkB,CAAA;CAE9E,MAAM,OAAO,yBAAyB,KAAK;CAC3C,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,oBAAC,cAAD;EAAc,UAAU;EAAM,eAAa;EAAQ,WAAU;EAC1D,UAAA;CACW,CAAA;AAElB;;ACcA,IAAM,kBAAkB;AAExB,SAAgB,cAAc,EAAE,OAAO,SAAS,YAAgC;CAC9E,MAAM,UAAU,MAAM,MAAK,SAAQ,KAAK,WAAW,SAAS;CAC5D,MAAM,OAAO,WAAW,YAAY,QAAQ,UAAU,QAAQ,IAAI;CAElE,OACE,qBAAC,UAAD;EAAU,QAAQ,UAAU,YAAY;EAAQ,cAAY,eAAe,MAAM,OAAO;EAAxF,UAAA,CACE,oBAAC,iBAAD,EAAA,UACE,qBAAC,gBAAD,EAAA,UAAA;GACE,oBAAC,iBAAD,EAAA,UAAkB,QAAyB,CAAA;GAC3C,oBAACC,gBAAD,EAAA,UACE,oBAAC,cAAD;IAAc,MAAM;IAAI,eAAA;IAAY,WAAU;GAAoB,CAAA,EACtD,CAAA;GACd,qBAAC,eAAD,EAAA,UAAA,CAAgB,MAAM,QAAO,QAAqB,EAAA,CAAA;GACjD,QAAQ,KAAK,cACZ,oBAAC,eAAD;IAAe,WAAU;IAA6B,UAAA,KAAK;GAA2B,CAAA,IAEtF,QAAQ,KAAK,UAAU,oBAAC,gBAAD,EAAA,UAAiB,KAAK,OAAuB,CAAA;GAEtE,oBAAC,YAAD,EAAmB,MAAQ,CAAA;GAC3B,oBAAC,gBAAD,EAAgB,MAAA,KAAM,CAAA;GACtB,oBAAC,kBAAD,EAAA,UACE,oBAAC,eAAD,EAAsB,MAAQ,CAAA,EACd,CAAA;GAClB,oBAAC,oBAAD,CAAqB,CAAA;EACP,EAAA,CAAA,EACD,CAAA,GACjB,oBAAC,iBAAD;GAAiB,WAAU;GACzB,UAAA,oBAAC,YAAD;IAAY,WAAU;IAAQ,YAAY,QAAQ,OAAO;IAAG,wBAAwB;IACjF;GACS,CAAA;EACG,CAAA,CACT;;AAEd;AAEA,SAAS,cAAc,EAAE,SAAyC;CAChE,MAAM,OAAO,MAAM,QAAO,SAAQ,KAAK,WAAW,SAAS,CAAC,CAAC;CAC7D,IAAI,OAAO,MAAM,QACf,OACE,qBAAC,KAAD;EAAK,IAAG;EAAO,SAAQ;EAAO,MAAK;EAAQ,WAAU;EAArD,UAAA;GACG;GAAK;GAAE,MAAM;EACX;;CAGT,MAAM,SAAS,MAAM,QAAO,SAAQ,KAAK,WAAW,OAAO,CAAC,CAAC;CAC7D,MAAM,iBACJ,SAAS,IAAI,oBAAC,GAAD;EAAG,MAAM;EAAI,MAAK;EAAM,cAAW;EAAS,WAAU;CAAwC,CAAA,IAAI;CAEjH,IAAI,MAAM,MAAK,SAAQ,KAAK,cAAc,KAAA,CAAS,GAAG,OAAO;CAE7D,MAAM,YAAY,MAAM,QAAO,SAAQ,KAAK,WAAW,UAAU,KAAK,SAAS,CAAC,CAAC;CACjF,MAAM,aAAa,MAAM,SAAS,YAAY;CAC9C,MAAM,UAAU;EACd,YAAY,KAAK,GAAG,UAAU;EAC9B,SAAS,KAAK,GAAG,OAAO;EACxB,aAAa,KAAK,GAAG,WAAW;CAClC,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,KAAK;CAEb,OACE,qBAAAC,UAAA,EAAA,UAAA,CACG,gBACD,oBAAC,KAAD;EAAK,IAAG;EAAO,SAAQ;EAAO,MAAK;EAAQ,WAAU;EAClD,UAAA;CACE,CAAA,CACL,EAAA,CAAA;AAEN;AAEA,SAAS,WAAW,EAAE,SAAyC;CAC7D,MAAM,YAAY,MAAM,KAAI,SAAQ,YAAY,KAAK,UAAU,KAAK,IAAI,CAAC;CACzE,MAAM,SAAS,IAAI,IAAI,UAAU,KAAK,EAAE,YAAY,KAAK,CAAC;CAC1D,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,UAAU,KAAK,EAAE,MAAM,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,eAAe;CAErG,OACE,oBAAC,iBAAD;EAAiB,MAAK;EAAM,cAAY,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,IAAI;EAAG,WAAU;EACvE,UAAA,OAAO,KAAK,CAAC,MAAM,UAClB,oBAAC,MAAD;GAAiB,MAAM;GAAI,WAAU;EAAoB,GAA9C,IAA8C,CAC1D;CACc,CAAA;AAErB;;AC/GA,SAAgB,eAAe,EAAE,MAAM,OAAO,WAAW,eAAe,UAA+B;CACrG,MAAM,UAAU,cAAc,KAAA,KAAa,KAAK,SAAS,YAAY,GAAG,KAAK,MAAM,GAAG,SAAS,EAAE,KAAK;CAEtG,OACE,oBAAC,cAAD;EACE,UAAU;EACV,eAAa;EACb,WAAW,QAAQ,gCAAgC;EAElD,UAAA;CACW,CAAA;AAElB;;ACbA,IAAM,eAAe;CACnB,MAAM;EAAE,MAAM;EAAW,MAAM;EAAQ,KAAK;EAAe,MAAM;CAAa;CAC9E,OAAO;EAAE,MAAM;EAAW,MAAM;EAAS,KAAK;EAAgB,MAAM;CAAc;CAClF,MAAM;EAAE,MAAM;EAAW,MAAM;EAAU,KAAK;EAAiB,MAAM;CAAe;CACpF,KAAK;EAAE,MAAM;EAAW,MAAM;EAAO,KAAK;EAAiB,MAAM;CAAe;CAChF,kBAAkB;EAChB,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,gBAAgB;EACd,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,cAAc;EAAE,MAAM;EAAiB,MAAM;EAAe,KAAK;EAAe,MAAM;CAAc;CACpG,cAAc;EAAE,MAAM;EAAiB,MAAM;EAAgB,KAAK;EAAgB,MAAM;CAAe;CACvG,QAAQ;EAAE,MAAM;EAAa,MAAM;EAAY,KAAK;EAAiB,MAAM;CAAgB;CAC3F,kBAAkB;EAChB,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,gBAAgB;EAAE,MAAM;EAAc,MAAM;EAAa,KAAK;EAAkB,MAAM;CAAiB;CACvG,aAAa;EAAE,MAAM;EAAY,MAAM;EAAW,KAAK;EAAkB,MAAM;CAAgB;CAC/F,QAAQ;EAAE,MAAM;EAAY,MAAM;EAAW,KAAK;EAAkB,MAAM;CAAgB;CAC1F,cAAc;EAAE,MAAM;EAAmB,MAAM;EAAkB,KAAK;EAAoB,MAAM;CAAkB;CAClH,OAAO;EAAE,MAAM;EAAe,MAAM;EAAc,KAAK;EAAgB,MAAM;CAAc;CAC3F,iBAAiB;EACf,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,cAAc;EACZ,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,oBAAoB;EAClB,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,aAAa;EAAE,MAAM;EAAgB,MAAM;EAAa,KAAK;EAAe,MAAM;CAAa;CAC/F,kBAAkB;EAChB,MAAM;EACN,MAAM;EACN,KAAK;EACL,MAAM;CACR;CAEA,aAAa;EAAE,MAAM;EAAgB,MAAM;EAAe,KAAK;EAAiB,MAAM;CAAe;CACrG,aAAa;EAAE,MAAM;EAAgB,MAAM;EAAe,KAAK;EAAiB,MAAM;CAAe;CACrG,cAAc;EAAE,MAAM;EAAgB,MAAM;EAAe,KAAK;EAAiB,MAAM;CAAe;AACxG;AAKA,SAAS,WAAW,OAAkC;CACpD,OAAO,OAAO,OAAO,cAAc,KAAK;AAC1C;AAEA,SAAgB,YAAY,OAA4B;CACtD,IAAI,WAAW,KAAK,GAAG,OAAO,aAAa;CAC3C,OAAO;EAAE,MAAM,SAAS;EAAS,MAAM,QAAQ;EAAS,KAAK,QAAQ;EAAS,MAAM,QAAQ;CAAQ;AACtG;;AC9EA,SAAgB,aAAa,EAAE,MAAuB;CACpD,MAAM,OAAO,OAAO,EAAE;CACtB,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,oBAAC,QAAD;EACE,WAAU;EACV,UAAU,KAAK,YAAY;EAC3B,OAAO,WAAW,MAAM,mBAAmB;EAE1C,UAAA,WAAW,MAAM,cAAc;CAC5B,CAAA;AAEV"}
|