@flanksource/clicky-ui 0.3.44 → 0.3.46
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/README.md +24 -0
- package/dist/ai.cjs +4 -2
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +3 -1
- package/dist/components/MdxEditorField.cjs +40 -22
- package/dist/components/MdxEditorField.cjs.map +1 -1
- package/dist/components/MdxEditorField.d.ts.map +1 -1
- package/dist/components/MdxEditorField.js +41 -23
- package/dist/components/MdxEditorField.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +6 -1
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
- package/dist/components/json-schema-form-item-summary.js +6 -1
- package/dist/components/json-schema-form-item-summary.js.map +1 -1
- package/dist/data/AccessMark.cjs +23 -0
- package/dist/data/AccessMark.cjs.map +1 -0
- package/dist/data/AccessMark.d.ts +11 -0
- package/dist/data/AccessMark.d.ts.map +1 -0
- package/dist/data/AccessMark.js +23 -0
- package/dist/data/AccessMark.js.map +1 -0
- package/dist/data/CodeBlock.cjs +3 -2
- package/dist/data/CodeBlock.cjs.map +1 -1
- package/dist/data/CodeBlock.d.ts +3 -1
- package/dist/data/CodeBlock.d.ts.map +1 -1
- package/dist/data/CodeBlock.js +3 -2
- package/dist/data/CodeBlock.js.map +1 -1
- package/dist/data/CodeDiff.cjs +116 -23
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.d.ts +26 -0
- package/dist/data/CodeDiff.d.ts.map +1 -1
- package/dist/data/CodeDiff.js +116 -23
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/GraphDiagram.cjs +75 -11
- package/dist/data/GraphDiagram.cjs.map +1 -1
- package/dist/data/GraphDiagram.d.ts +17 -2
- package/dist/data/GraphDiagram.d.ts.map +1 -1
- package/dist/data/GraphDiagram.js +76 -12
- package/dist/data/GraphDiagram.js.map +1 -1
- package/dist/data/GraphDiagramGroups.cjs +100 -0
- package/dist/data/GraphDiagramGroups.cjs.map +1 -0
- package/dist/data/GraphDiagramGroups.d.ts +24 -0
- package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
- package/dist/data/GraphDiagramGroups.js +100 -0
- package/dist/data/GraphDiagramGroups.js.map +1 -0
- package/dist/data/GraphDiagramNodes.cjs +46 -51
- package/dist/data/GraphDiagramNodes.cjs.map +1 -1
- package/dist/data/GraphDiagramNodes.d.ts +8 -9
- package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
- package/dist/data/GraphDiagramNodes.js +46 -51
- package/dist/data/GraphDiagramNodes.js.map +1 -1
- package/dist/data/JsonView.cjs +118 -49
- package/dist/data/JsonView.cjs.map +1 -1
- package/dist/data/JsonView.d.ts +13 -10
- package/dist/data/JsonView.d.ts.map +1 -1
- package/dist/data/JsonView.js +118 -49
- package/dist/data/JsonView.js.map +1 -1
- package/dist/data/MarkdownEditor.cjs +2 -2
- package/dist/data/MarkdownEditor.cjs.map +1 -1
- package/dist/data/MarkdownEditor.js +2 -2
- package/dist/data/MarkdownEditor.js.map +1 -1
- package/dist/data/TreeNode.cjs +1 -1
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +1 -1
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.js +91 -250
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
- package/dist/data/ai/ChatButton.cjs +2 -0
- package/dist/data/ai/ChatButton.cjs.map +1 -1
- package/dist/data/ai/ChatButton.d.ts +1 -1
- package/dist/data/ai/ChatButton.d.ts.map +1 -1
- package/dist/data/ai/ChatButton.js +2 -0
- package/dist/data/ai/ChatButton.js.map +1 -1
- package/dist/data/ai/ChatFab.cjs +5 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts +5 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +5 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +2 -8
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +2 -8
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.js +0 -5
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
- package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.js +3 -6
- package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
- package/dist/data/ai/SessionViewer.cjs +13 -4
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +5 -1
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +1 -1
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.header.js +1 -1
- package/dist/data/ai/SessionViewer.header.js.map +1 -1
- package/dist/data/ai/SessionViewer.js +13 -4
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +2 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +1 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +2 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +41 -27
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +41 -27
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
- package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
- package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tokens.js +35 -0
- package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
- package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
- package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
- package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
- package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.js +3 -1
- package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.js +55 -35
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.cjs +18 -1
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
- package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.js +18 -1
- package/dist/data/ai/SessionViewerMenu.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +149 -143
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +20 -6
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +151 -146
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +14 -10
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +15 -11
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +1 -0
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +2 -1
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
- package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
- package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.js +53 -54
- package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
- package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
- package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
- package/dist/data/ai/index.d.ts +2 -2
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
- package/dist/data/ai/session-token-sizing.d.ts +32 -0
- package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
- package/dist/data/ai/use-session-token-sizing.cjs +73 -0
- package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
- package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
- package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
- package/dist/data/ai/use-session-token-sizing.js +73 -0
- package/dist/data/ai/use-session-token-sizing.js.map +1 -0
- package/dist/data/call-graph/CallGraph.cjs +269 -0
- package/dist/data/call-graph/CallGraph.cjs.map +1 -0
- package/dist/data/call-graph/CallGraph.d.ts +78 -0
- package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraph.js +269 -0
- package/dist/data/call-graph/CallGraph.js.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
- package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
- package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
- package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
- package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
- package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.js +51 -0
- package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
- package/dist/data/call-graph/CallGraphParts.cjs +204 -0
- package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
- package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphParts.js +204 -0
- package/dist/data/call-graph/CallGraphParts.js.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.js +198 -0
- package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
- package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
- package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.js +75 -0
- package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
- package/dist/data/call-graph/call-graph-labels.cjs +96 -0
- package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
- package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-labels.js +96 -0
- package/dist/data/call-graph/call-graph-labels.js.map +1 -0
- package/dist/data/call-graph/call-graph-model.cjs +312 -0
- package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-model.d.ts +138 -0
- package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-model.js +312 -0
- package/dist/data/call-graph/call-graph-model.js.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
- package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
- package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
- package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
- package/dist/data/call-graph/index.d.ts +7 -0
- package/dist/data/call-graph/index.d.ts.map +1 -0
- package/dist/data/call-graph/types.cjs +5 -0
- package/dist/data/call-graph/types.cjs.map +1 -0
- package/dist/data/call-graph/types.d.ts +140 -0
- package/dist/data/call-graph/types.d.ts.map +1 -0
- package/dist/data/call-graph/types.js +5 -0
- package/dist/data/call-graph/types.js.map +1 -0
- package/dist/data/call-graph/use-call-graph.cjs +93 -0
- package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
- package/dist/data/call-graph/use-call-graph.d.ts +24 -0
- package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
- package/dist/data/call-graph/use-call-graph.js +93 -0
- package/dist/data/call-graph/use-call-graph.js.map +1 -0
- package/dist/data/chat/Chat.cjs +39 -15
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +2 -2
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +2 -2
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +40 -16
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.bar.cjs +5 -8
- package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
- package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.bar.js +5 -8
- package/dist/data/chat/ContextMeter.bar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +18 -19
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +1 -1
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +18 -19
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/Conversation.cjs +2 -1
- package/dist/data/chat/Conversation.cjs.map +1 -1
- package/dist/data/chat/Conversation.d.ts +4 -1
- package/dist/data/chat/Conversation.d.ts.map +1 -1
- package/dist/data/chat/Conversation.js +2 -1
- package/dist/data/chat/Conversation.js.map +1 -1
- package/dist/data/chat/Message.cjs +39 -12
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +1 -1
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +40 -13
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +60 -5
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +7 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +60 -5
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +2 -2
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/tool-policy.cjs +59 -2
- package/dist/data/chat/tool-policy.cjs.map +1 -1
- package/dist/data/chat/tool-policy.d.ts +9 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.js +59 -2
- package/dist/data/chat/tool-policy.js.map +1 -1
- package/dist/data/chat/types.cjs +6 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +13 -4
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +7 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +11 -6
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts +0 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +11 -6
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/data-access.cjs +8 -0
- package/dist/data/data-access.cjs.map +1 -0
- package/dist/data/data-access.d.ts +5 -0
- package/dist/data/data-access.d.ts.map +1 -0
- package/dist/data/data-access.js +8 -0
- package/dist/data/data-access.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +3 -3
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/git/GitChangeList.cjs +6 -2
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -1
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +6 -2
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/graph-columns-layout.cjs +61 -14
- package/dist/data/graph-columns-layout.cjs.map +1 -1
- package/dist/data/graph-columns-layout.d.ts +42 -0
- package/dist/data/graph-columns-layout.d.ts.map +1 -1
- package/dist/data/graph-columns-layout.js +61 -14
- package/dist/data/graph-columns-layout.js.map +1 -1
- package/dist/data/graph-diagram-model.cjs +5 -0
- package/dist/data/graph-diagram-model.cjs.map +1 -1
- package/dist/data/graph-diagram-model.d.ts +24 -0
- package/dist/data/graph-diagram-model.d.ts.map +1 -1
- package/dist/data/graph-diagram-model.js +5 -0
- package/dist/data/graph-diagram-model.js.map +1 -1
- package/dist/data/graph-edge-routing.cjs +9 -3
- package/dist/data/graph-edge-routing.cjs.map +1 -1
- package/dist/data/graph-edge-routing.d.ts +2 -0
- package/dist/data/graph-edge-routing.d.ts.map +1 -1
- package/dist/data/graph-edge-routing.js +9 -3
- package/dist/data/graph-edge-routing.js.map +1 -1
- package/dist/data/graph-group-window.cjs +60 -0
- package/dist/data/graph-group-window.cjs.map +1 -0
- package/dist/data/graph-group-window.d.ts +33 -0
- package/dist/data/graph-group-window.d.ts.map +1 -0
- package/dist/data/graph-group-window.js +60 -0
- package/dist/data/graph-group-window.js.map +1 -0
- package/dist/data/json-view/JsonSource.cjs +84 -0
- package/dist/data/json-view/JsonSource.cjs.map +1 -0
- package/dist/data/json-view/JsonSource.d.ts +7 -0
- package/dist/data/json-view/JsonSource.d.ts.map +1 -0
- package/dist/data/json-view/JsonSource.js +84 -0
- package/dist/data/json-view/JsonSource.js.map +1 -0
- package/dist/data/json-view/parse-prefix.cjs +132 -0
- package/dist/data/json-view/parse-prefix.cjs.map +1 -0
- package/dist/data/json-view/parse-prefix.d.ts +11 -0
- package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
- package/dist/data/json-view/parse-prefix.js +132 -0
- package/dist/data/json-view/parse-prefix.js.map +1 -0
- package/dist/data/json-view/parse-source.cjs +62 -0
- package/dist/data/json-view/parse-source.cjs.map +1 -0
- package/dist/data/json-view/parse-source.d.ts +16 -0
- package/dist/data/json-view/parse-source.d.ts.map +1 -0
- package/dist/data/json-view/parse-source.js +62 -0
- package/dist/data/json-view/parse-source.js.map +1 -0
- package/dist/data/json-view/story-fixtures.d.ts +6 -0
- package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
- package/dist/data/json-view/types.d.ts +14 -0
- package/dist/data/json-view/types.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.cjs +2 -5
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +2 -4
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
- package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.js +2 -2
- package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +2 -5
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.js +5 -2
- package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
- package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.js +1 -5
- package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
- package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
- package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
- package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
- package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.js +8 -27
- package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
- package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.js +1 -5
- package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
- package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
- package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
- package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
- package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
- package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
- package/dist/data/use-group-windows.cjs +50 -0
- package/dist/data/use-group-windows.cjs.map +1 -0
- package/dist/data/use-group-windows.d.ts +27 -0
- package/dist/data/use-group-windows.d.ts.map +1 -0
- package/dist/data/use-group-windows.js +50 -0
- package/dist/data/use-group-windows.js.map +1 -0
- package/dist/data/use-pan-zoom.cjs +23 -10
- package/dist/data/use-pan-zoom.cjs.map +1 -1
- package/dist/data/use-pan-zoom.d.ts +16 -2
- package/dist/data/use-pan-zoom.d.ts.map +1 -1
- package/dist/data/use-pan-zoom.js +23 -10
- package/dist/data/use-pan-zoom.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +36 -2
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +5 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +35 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/event-hub.cjs +229 -0
- package/dist/hooks/event-hub.cjs.map +1 -0
- package/dist/hooks/event-hub.d.ts +26 -0
- package/dist/hooks/event-hub.d.ts.map +1 -0
- package/dist/hooks/event-hub.js +229 -0
- package/dist/hooks/event-hub.js.map +1 -0
- package/dist/hooks.cjs +2 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +2 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +40 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/Workspace.cjs +13 -4
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts +7 -2
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +13 -4
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/lib/permission-strategies.cjs +71 -11
- package/dist/lib/permission-strategies.cjs.map +1 -1
- package/dist/lib/permission-strategies.d.ts +3 -0
- package/dist/lib/permission-strategies.d.ts.map +1 -1
- package/dist/lib/permission-strategies.js +71 -11
- package/dist/lib/permission-strategies.js.map +1 -1
- package/dist/overlay/modalStack.cjs +13 -6
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +13 -6
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -3
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
- package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
- package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.js +0 -8
- package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
|
@@ -9,6 +9,8 @@ import { formatEventRange } from "./SessionViewer.row-time.js";
|
|
|
9
9
|
import { ToolBody } from "./SessionViewer.tool-row.js";
|
|
10
10
|
import { Markdown } from "../Markdown.js";
|
|
11
11
|
import { MessageFilePart } from "../chat/MessageFilePart.js";
|
|
12
|
+
import { EstimatedToolCost } from "./SessionViewer.tool-cost.js";
|
|
13
|
+
import { SessionRowTokens } from "./SessionViewer.tokens.js";
|
|
12
14
|
import { UiChevronDown } from "../../icons/components/UiChevronDown.js";
|
|
13
15
|
import { UiUserCircle } from "../../icons/components/UiUserCircle.js";
|
|
14
16
|
import { UiWarningTriangle } from "../../icons/components/UiWarningTriangle.js";
|
|
@@ -20,6 +22,7 @@ function SessionRow({
|
|
|
20
22
|
last,
|
|
21
23
|
defaultExpanded,
|
|
22
24
|
showRowMetadata = false,
|
|
25
|
+
showEstimatedToolCost = false,
|
|
23
26
|
showRaw = false,
|
|
24
27
|
renderMessageBadge,
|
|
25
28
|
onPendingToolDecision
|
|
@@ -67,10 +70,12 @@ function SessionRow({
|
|
|
67
70
|
visual,
|
|
68
71
|
defaultExpanded,
|
|
69
72
|
messageBadge: event.kind === "assistant" ? renderMessageBadge == null ? void 0 : renderMessageBadge(event) : void 0,
|
|
70
|
-
onPendingToolDecision
|
|
73
|
+
onPendingToolDecision,
|
|
74
|
+
showEstimatedToolCost
|
|
71
75
|
}
|
|
72
76
|
),
|
|
73
77
|
showRowMetadata && /* @__PURE__ */ jsx(EventMetadata, { event }),
|
|
78
|
+
/* @__PURE__ */ jsx(SessionRowTokens, { event }),
|
|
74
79
|
showRaw && event.raw !== void 0 && /* @__PURE__ */ jsx(RawEventBlock, { raw: event.raw })
|
|
75
80
|
] })
|
|
76
81
|
]
|
|
@@ -82,6 +87,7 @@ function WaitGroupRow({
|
|
|
82
87
|
last,
|
|
83
88
|
defaultExpanded,
|
|
84
89
|
showRowMetadata = false,
|
|
90
|
+
showEstimatedToolCost = false,
|
|
85
91
|
showRaw = false,
|
|
86
92
|
renderMessageBadge,
|
|
87
93
|
onPendingToolDecision
|
|
@@ -122,29 +128,32 @@ function WaitGroupRow({
|
|
|
122
128
|
}
|
|
123
129
|
),
|
|
124
130
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 pt-px", children: [
|
|
125
|
-
/* @__PURE__ */ jsxs(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
131
|
+
/* @__PURE__ */ jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
|
|
132
|
+
/* @__PURE__ */ jsxs(
|
|
133
|
+
"button",
|
|
134
|
+
{
|
|
135
|
+
type: "button",
|
|
136
|
+
"aria-expanded": open,
|
|
137
|
+
"aria-label": `${open ? "Collapse" : "Expand"} ${label}`,
|
|
138
|
+
onClick: () => setOpen((value) => !value),
|
|
139
|
+
className: "flex min-w-0 flex-1 items-center gap-1.5 text-left hover:text-foreground",
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: label }),
|
|
142
|
+
/* @__PURE__ */ jsx(
|
|
143
|
+
Icon,
|
|
144
|
+
{
|
|
145
|
+
icon: UiChevronDown,
|
|
146
|
+
className: cn(
|
|
147
|
+
"ml-auto size-3 shrink-0 text-muted-foreground transition-transform",
|
|
148
|
+
open && "rotate-180"
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
),
|
|
155
|
+
showEstimatedToolCost && !open && /* @__PURE__ */ jsx(EstimatedToolCost, { events: group.events })
|
|
156
|
+
] }),
|
|
148
157
|
showRowMetadata && /* @__PURE__ */ jsx(
|
|
149
158
|
EventMetadata,
|
|
150
159
|
{
|
|
@@ -159,12 +168,14 @@ function WaitGroupRow({
|
|
|
159
168
|
last: index === group.events.length - 1,
|
|
160
169
|
defaultExpanded,
|
|
161
170
|
showRowMetadata,
|
|
171
|
+
showEstimatedToolCost,
|
|
162
172
|
showRaw,
|
|
163
173
|
renderMessageBadge,
|
|
164
174
|
onPendingToolDecision
|
|
165
175
|
},
|
|
166
176
|
event.id
|
|
167
|
-
)) })
|
|
177
|
+
)) }),
|
|
178
|
+
open && showEstimatedToolCost && /* @__PURE__ */ jsx(EstimatedToolCost, { events: group.events, detailed: true })
|
|
168
179
|
] })
|
|
169
180
|
]
|
|
170
181
|
}
|
|
@@ -186,6 +197,7 @@ function UserRow({
|
|
|
186
197
|
/* @__PURE__ */ jsx("div", { className: "mb-0.5 text-right text-xs font-medium text-muted-foreground", children: initialPrompt ? "Initial prompt" : "You" }),
|
|
187
198
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 break-words rounded-lg bg-accent px-density-3 py-density-2 text-left text-sm leading-relaxed text-accent-foreground", children: event.file ? /* @__PURE__ */ jsx(MessageFilePart, { part: event.file }) : event.text && /* @__PURE__ */ jsx(Markdown, { text: event.text }) }),
|
|
188
199
|
showRowMetadata && /* @__PURE__ */ jsx(EventMetadata, { event, align: "right" }),
|
|
200
|
+
/* @__PURE__ */ jsx(SessionRowTokens, { event }),
|
|
189
201
|
showRaw && event.raw !== void 0 && /* @__PURE__ */ jsx(RawEventBlock, { raw: event.raw, align: "right" })
|
|
190
202
|
] }),
|
|
191
203
|
/* @__PURE__ */ jsx(
|
|
@@ -263,7 +275,8 @@ function EventBody({
|
|
|
263
275
|
visual,
|
|
264
276
|
defaultExpanded,
|
|
265
277
|
messageBadge,
|
|
266
|
-
onPendingToolDecision
|
|
278
|
+
onPendingToolDecision,
|
|
279
|
+
showEstimatedToolCost
|
|
267
280
|
}) {
|
|
268
281
|
if (event.kind === "tool")
|
|
269
282
|
return /* @__PURE__ */ jsx(
|
|
@@ -272,7 +285,8 @@ function EventBody({
|
|
|
272
285
|
event,
|
|
273
286
|
visual,
|
|
274
287
|
defaultExpanded,
|
|
275
|
-
onPendingToolDecision
|
|
288
|
+
onPendingToolDecision,
|
|
289
|
+
showEstimatedToolCost
|
|
276
290
|
}
|
|
277
291
|
);
|
|
278
292
|
if (event.kind === "thinking") return /* @__PURE__ */ jsx(ThinkingBody, { event });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.rows.js","sources":["../../../src/data/ai/SessionViewer.rows.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiBrain,\n UiChevronDown,\n UiSparkles,\n UiUserCircle,\n UiWarningTriangle,\n} from \"../../icons\";\nimport {\n getSessionAction,\n type SessionEvent,\n type SessionTone,\n} from \"./SessionViewer.model\";\nimport { SESSION_TONES } from \"./session-tones\";\nimport type { SessionEventGroup } from \"./SessionViewer.grouping\";\nimport { EventMetadata, RawEventBlock } from \"./SessionViewer.row-metadata\";\nimport { formatEventRange } from \"./SessionViewer.row-time\";\nimport { ToolBody } from \"./SessionViewer.tool-row\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\nimport { Markdown } from \"../Markdown\";\nimport { MessageFilePart } from \"../chat/MessageFilePart\";\n\nexport function SessionRow({\n event,\n initialPrompt = false,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n initialPrompt?: boolean;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"user\") {\n return (\n <UserRow\n event={event}\n initialPrompt={initialPrompt}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n />\n );\n }\n\n const visual = eventVisual(event);\n return (\n <li\n data-event-kind={event.kind}\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <EventBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n messageBadge={\n event.kind === \"assistant\" ? renderMessageBadge?.(event) : undefined\n }\n onPendingToolDecision={onPendingToolDecision}\n />\n {showRowMetadata && <EventMetadata event={event} />}\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} />\n )}\n </div>\n </li>\n );\n}\n\nexport function WaitGroupRow({\n group,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n group: SessionEventGroup;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const [open, setOpen] = useState(false);\n const visual = getSessionAction(\"Wait\");\n const first = group.representative;\n const final = group.events[group.events.length - 1] ?? first;\n const label = `Wait × ${group.count}`;\n const metadataEvent = { ...first };\n delete metadataEvent.timestamp;\n delete metadataEvent.toolState;\n delete metadataEvent.approval;\n metadataEvent.pending = false;\n const timestampLabel = formatEventRange(first.timestamp, final.timestamp);\n\n return (\n <li\n data-event-kind=\"tool\"\n data-event-group=\"wait\"\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-center gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"font-medium text-foreground\">{label}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {showRowMetadata && (\n <EventMetadata\n event={metadataEvent}\n {...(timestampLabel ? { timestampLabel } : {})}\n />\n )}\n {open && (\n <ol className=\"relative mt-density-3 border-l border-border pl-density-3\">\n {group.events.map((event, index) => (\n <SessionRow\n key={event.id}\n event={event}\n last={index === group.events.length - 1}\n defaultExpanded={defaultExpanded}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n renderMessageBadge={renderMessageBadge}\n onPendingToolDecision={onPendingToolDecision}\n />\n ))}\n </ol>\n )}\n </div>\n </li>\n );\n}\n\nfunction UserRow({\n event,\n initialPrompt,\n showRowMetadata,\n showRaw,\n}: {\n event: SessionEvent;\n initialPrompt: boolean;\n showRowMetadata: boolean;\n showRaw: boolean;\n}) {\n return (\n <li\n data-event-kind=\"user\"\n className=\"relative flex justify-end pb-density-4 last:pb-0\"\n >\n <div className={cn(\"flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:gap-density-3\", !initialPrompt && \"@min-[48rem]/session-viewer:max-w-[85%]\")}>\n <div className=\"min-w-0\">\n <div className=\"mb-0.5 text-right text-xs font-medium text-muted-foreground\">\n {initialPrompt ? \"Initial prompt\" : \"You\"}\n </div>\n <div className=\"min-w-0 break-words rounded-lg bg-accent px-density-3 py-density-2 text-left text-sm leading-relaxed text-accent-foreground\">\n {event.file ? <MessageFilePart part={event.file} /> : event.text && <Markdown text={event.text} />}\n </div>\n {showRowMetadata && <EventMetadata event={event} align=\"right\" />}\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} align=\"right\" />\n )}\n </div>\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES.slate.disc,\n )}\n >\n <Icon icon={UiUserCircle} className=\"h-3 w-3\" />\n </span>\n </div>\n </li>\n );\n}\n\ninterface EventVisual {\n icon: StaticIconComponent;\n tone: SessionTone;\n label: string;\n summaryOnly: boolean;\n}\n\n// Base visuals per event kind. A row's `icon`/`tone` fields (set for a\n// `verified`/`verify_failed` system row — see SessionViewer.model.ts) override\n// these defaults; eventVisual applies that override uniformly below rather\n// than special-casing it inside the switch.\nfunction baseEventVisual(event: SessionEvent): EventVisual {\n switch (event.kind) {\n case \"tool\": {\n const action = getSessionAction(event.tool ?? \"\");\n return {\n icon: action.icon,\n tone: action.tone,\n label: action.label,\n summaryOnly: action.summaryOnly ?? false,\n };\n }\n case \"user\":\n return {\n icon: UiUserCircle,\n tone: \"slate\",\n label: \"User\",\n summaryOnly: false,\n };\n case \"system\":\n return {\n icon: UiSparkles,\n tone: \"slate\",\n label: \"System\",\n summaryOnly: false,\n };\n case \"assistant\":\n return {\n icon: UiSparkles,\n tone: \"indigo\",\n label: \"Assistant\",\n summaryOnly: false,\n };\n case \"thinking\":\n return {\n icon: UiBrain,\n tone: \"slate\",\n label: \"Thinking\",\n summaryOnly: false,\n };\n case \"error\":\n return {\n icon: UiWarningTriangle,\n tone: \"rose\",\n label: \"Error\",\n summaryOnly: false,\n };\n }\n}\n\nfunction eventVisual(event: SessionEvent): EventVisual {\n const base = baseEventVisual(event);\n return {\n ...base,\n icon: event.icon ?? base.icon,\n tone: event.tone ?? base.tone,\n };\n}\n\nfunction EventBody({\n event,\n visual,\n defaultExpanded,\n messageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: EventVisual;\n defaultExpanded: boolean;\n messageBadge?: ReactNode;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"tool\")\n return (\n <ToolBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n onPendingToolDecision={onPendingToolDecision}\n />\n );\n if (event.kind === \"thinking\") return <ThinkingBody event={event} />;\n if (event.kind === \"error\") return <ErrorBody event={event} />;\n if (event.kind === \"system\") return <SystemBody event={event} />;\n return <MessageBody event={event} badge={messageBadge} />;\n}\n\nfunction MessageBody({\n event,\n badge,\n}: {\n event: SessionEvent;\n badge?: ReactNode;\n}) {\n return (\n <div className=\"flex items-start gap-1.5\">\n {badge}\n <div className=\"min-w-0 whitespace-pre-wrap break-words text-sm font-medium leading-relaxed text-foreground\">\n {event.file && <MessageFilePart part={event.file} />}\n {event.text && <Markdown text={event.text} />}\n </div>\n </div>\n );\n}\n\nfunction SystemBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n const preview = event.text?.split(\"\\n\", 1)[0] ?? \"System instructions\";\n return (\n <div className=\"not-prose text-xs text-muted-foreground\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"shrink-0 font-medium text-foreground\">System</span>\n <span className=\"min-w-0 flex-1 truncate\">{preview}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {open && (\n <div className=\"mt-1.5 whitespace-pre-wrap break-words bg-muted/20 px-density-3 py-density-2 leading-relaxed\">\n {event.text && <Markdown text={event.text} />}\n </div>\n )}\n </div>\n );\n}\n\n// Reasoning shows its text directly — truncated to one line, click to expand.\nfunction ThinkingBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"not-prose\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left text-xs italic leading-relaxed text-muted-foreground hover:text-foreground\"\n >\n <span\n className={cn(\n \"min-w-0 flex-1\",\n open ? \"whitespace-pre-wrap break-words\" : \"truncate\",\n )}\n >\n {event.text}\n </span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n </div>\n );\n}\n\nfunction ErrorBody({ event }: { event: SessionEvent }) {\n return (\n <div className=\"rounded-md border border-rose-200 bg-rose-50 px-density-3 py-1.5 text-xs text-rose-700 [[data-theme=dark]_&]:border-rose-500/30 [[data-theme=dark]_&]:bg-rose-500/10 [[data-theme=dark]_&]:text-rose-300\">\n {event.text}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionViewer.rows.js","sources":["../../../src/data/ai/SessionViewer.rows.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiBrain,\n UiChevronDown,\n UiSparkles,\n UiUserCircle,\n UiWarningTriangle,\n} from \"../../icons\";\nimport {\n getSessionAction,\n type SessionEvent,\n type SessionTone,\n} from \"./SessionViewer.model\";\nimport { SESSION_TONES } from \"./session-tones\";\nimport type { SessionEventGroup } from \"./SessionViewer.grouping\";\nimport { EventMetadata, RawEventBlock } from \"./SessionViewer.row-metadata\";\nimport { formatEventRange } from \"./SessionViewer.row-time\";\nimport { ToolBody } from \"./SessionViewer.tool-row\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\nimport { Markdown } from \"../Markdown\";\nimport { MessageFilePart } from \"../chat/MessageFilePart\";\nimport { EstimatedToolCost } from \"./SessionViewer.tool-cost\";\nimport { SessionRowTokens } from \"./SessionViewer.tokens\";\n\nexport function SessionRow({\n event,\n initialPrompt = false,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showEstimatedToolCost = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n initialPrompt?: boolean;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showEstimatedToolCost?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"user\") {\n return (\n <UserRow\n event={event}\n initialPrompt={initialPrompt}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n />\n );\n }\n\n const visual = eventVisual(event);\n return (\n <li\n data-event-kind={event.kind}\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <EventBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n messageBadge={\n event.kind === \"assistant\" ? renderMessageBadge?.(event) : undefined\n }\n onPendingToolDecision={onPendingToolDecision}\n showEstimatedToolCost={showEstimatedToolCost}\n />\n {showRowMetadata && <EventMetadata event={event} />}\n <SessionRowTokens event={event} />\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} />\n )}\n </div>\n </li>\n );\n}\n\nexport function WaitGroupRow({\n group,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showEstimatedToolCost = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n group: SessionEventGroup;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showEstimatedToolCost?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const [open, setOpen] = useState(false);\n const visual = getSessionAction(\"Wait\");\n const first = group.representative;\n const final = group.events[group.events.length - 1] ?? first;\n const label = `Wait × ${group.count}`;\n const metadataEvent = { ...first };\n delete metadataEvent.timestamp;\n delete metadataEvent.toolState;\n delete metadataEvent.approval;\n metadataEvent.pending = false;\n const timestampLabel = formatEventRange(first.timestamp, final.timestamp);\n\n return (\n <li\n data-event-kind=\"tool\"\n data-event-group=\"wait\"\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`}\n onClick={() => setOpen((value) => !value)}\n className=\"flex min-w-0 flex-1 items-center gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"font-medium text-foreground\">{label}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {showEstimatedToolCost && !open && <EstimatedToolCost events={group.events} />}\n </div>\n {showRowMetadata && (\n <EventMetadata\n event={metadataEvent}\n {...(timestampLabel ? { timestampLabel } : {})}\n />\n )}\n {open && (\n <ol className=\"relative mt-density-3 border-l border-border pl-density-3\">\n {group.events.map((event, index) => (\n <SessionRow\n key={event.id}\n event={event}\n last={index === group.events.length - 1}\n defaultExpanded={defaultExpanded}\n showRowMetadata={showRowMetadata}\n showEstimatedToolCost={showEstimatedToolCost}\n showRaw={showRaw}\n renderMessageBadge={renderMessageBadge}\n onPendingToolDecision={onPendingToolDecision}\n />\n ))}\n </ol>\n )}\n {open && showEstimatedToolCost && <EstimatedToolCost events={group.events} detailed />}\n </div>\n </li>\n );\n}\n\nfunction UserRow({\n event,\n initialPrompt,\n showRowMetadata,\n showRaw,\n}: {\n event: SessionEvent;\n initialPrompt: boolean;\n showRowMetadata: boolean;\n showRaw: boolean;\n}) {\n return (\n <li\n data-event-kind=\"user\"\n className=\"relative flex justify-end pb-density-4 last:pb-0\"\n >\n <div className={cn(\"flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:gap-density-3\", !initialPrompt && \"@min-[48rem]/session-viewer:max-w-[85%]\")}>\n <div className=\"min-w-0\">\n <div className=\"mb-0.5 text-right text-xs font-medium text-muted-foreground\">\n {initialPrompt ? \"Initial prompt\" : \"You\"}\n </div>\n <div className=\"min-w-0 break-words rounded-lg bg-accent px-density-3 py-density-2 text-left text-sm leading-relaxed text-accent-foreground\">\n {event.file ? <MessageFilePart part={event.file} /> : event.text && <Markdown text={event.text} />}\n </div>\n {showRowMetadata && <EventMetadata event={event} align=\"right\" />}\n <SessionRowTokens event={event} />\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} align=\"right\" />\n )}\n </div>\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES.slate.disc,\n )}\n >\n <Icon icon={UiUserCircle} className=\"h-3 w-3\" />\n </span>\n </div>\n </li>\n );\n}\n\ninterface EventVisual {\n icon: StaticIconComponent;\n tone: SessionTone;\n label: string;\n summaryOnly: boolean;\n}\n\n// Base visuals per event kind. A row's `icon`/`tone` fields (set for a\n// `verified`/`verify_failed` system row — see SessionViewer.model.ts) override\n// these defaults; eventVisual applies that override uniformly below rather\n// than special-casing it inside the switch.\nfunction baseEventVisual(event: SessionEvent): EventVisual {\n switch (event.kind) {\n case \"tool\": {\n const action = getSessionAction(event.tool ?? \"\");\n return {\n icon: action.icon,\n tone: action.tone,\n label: action.label,\n summaryOnly: action.summaryOnly ?? false,\n };\n }\n case \"user\":\n return {\n icon: UiUserCircle,\n tone: \"slate\",\n label: \"User\",\n summaryOnly: false,\n };\n case \"system\":\n return {\n icon: UiSparkles,\n tone: \"slate\",\n label: \"System\",\n summaryOnly: false,\n };\n case \"assistant\":\n return {\n icon: UiSparkles,\n tone: \"indigo\",\n label: \"Assistant\",\n summaryOnly: false,\n };\n case \"thinking\":\n return {\n icon: UiBrain,\n tone: \"slate\",\n label: \"Thinking\",\n summaryOnly: false,\n };\n case \"error\":\n return {\n icon: UiWarningTriangle,\n tone: \"rose\",\n label: \"Error\",\n summaryOnly: false,\n };\n }\n}\n\nfunction eventVisual(event: SessionEvent): EventVisual {\n const base = baseEventVisual(event);\n return {\n ...base,\n icon: event.icon ?? base.icon,\n tone: event.tone ?? base.tone,\n };\n}\n\nfunction EventBody({\n event,\n visual,\n defaultExpanded,\n messageBadge,\n onPendingToolDecision,\n showEstimatedToolCost,\n}: {\n event: SessionEvent;\n visual: EventVisual;\n defaultExpanded: boolean;\n showEstimatedToolCost: boolean;\n messageBadge?: ReactNode;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"tool\")\n return (\n <ToolBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n onPendingToolDecision={onPendingToolDecision}\n showEstimatedToolCost={showEstimatedToolCost}\n />\n );\n if (event.kind === \"thinking\") return <ThinkingBody event={event} />;\n if (event.kind === \"error\") return <ErrorBody event={event} />;\n if (event.kind === \"system\") return <SystemBody event={event} />;\n return <MessageBody event={event} badge={messageBadge} />;\n}\n\nfunction MessageBody({\n event,\n badge,\n}: {\n event: SessionEvent;\n badge?: ReactNode;\n}) {\n return (\n <div className=\"flex items-start gap-1.5\">\n {badge}\n <div className=\"min-w-0 whitespace-pre-wrap break-words text-sm font-medium leading-relaxed text-foreground\">\n {event.file && <MessageFilePart part={event.file} />}\n {event.text && <Markdown text={event.text} />}\n </div>\n </div>\n );\n}\n\nfunction SystemBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n const preview = event.text?.split(\"\\n\", 1)[0] ?? \"System instructions\";\n return (\n <div className=\"not-prose text-xs text-muted-foreground\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"shrink-0 font-medium text-foreground\">System</span>\n <span className=\"min-w-0 flex-1 truncate\">{preview}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {open && (\n <div className=\"mt-1.5 whitespace-pre-wrap break-words bg-muted/20 px-density-3 py-density-2 leading-relaxed\">\n {event.text && <Markdown text={event.text} />}\n </div>\n )}\n </div>\n );\n}\n\n// Reasoning shows its text directly — truncated to one line, click to expand.\nfunction ThinkingBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"not-prose\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left text-xs italic leading-relaxed text-muted-foreground hover:text-foreground\"\n >\n <span\n className={cn(\n \"min-w-0 flex-1\",\n open ? \"whitespace-pre-wrap break-words\" : \"truncate\",\n )}\n >\n {event.text}\n </span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n </div>\n );\n}\n\nfunction ErrorBody({ event }: { event: SessionEvent }) {\n return (\n <div className=\"rounded-md border border-rose-200 bg-rose-50 px-density-3 py-1.5 text-xs text-rose-700 [[data-theme=dark]_&]:border-rose-500/30 [[data-theme=dark]_&]:bg-rose-500/10 [[data-theme=dark]_&]:text-rose-300\">\n {event.text}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const DropdownMenu = require("../../overlay/DropdownMenu.cjs");
|
|
6
|
+
const useSessionTokenSizing = require("./use-session-token-sizing.cjs");
|
|
7
|
+
const tokens = require("../../lib/tokens.cjs");
|
|
8
|
+
const UiDotsVertical = require("../../icons/components/UiDotsVertical.cjs");
|
|
9
|
+
function SessionRowTokens({ event }) {
|
|
10
|
+
var _a;
|
|
11
|
+
const sizing = react.useContext(useSessionTokenSizing.SessionTokenContext);
|
|
12
|
+
if (!sizing || event.pending) return null;
|
|
13
|
+
const row = sizing.state(event);
|
|
14
|
+
const size = row == null ? void 0 : row.size;
|
|
15
|
+
const title = size ? `${size.source} · ${size.model}. Input ${size.usage.inputTokens ?? 0}, output ${size.usage.outputTokens ?? 0}, reasoning ${size.usage.reasoningTokens ?? 0}. ${size.coverage.framingIncluded ? "Provider framing included. " : ""}Excluded: ${((_a = size.coverage.excluded) == null ? void 0 : _a.join("; ")) || "none"}. Content footprint; not historical billed usage.` : void 0;
|
|
16
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-1 text-xs text-muted-foreground", "data-row-tokens": event.id, children: [
|
|
17
|
+
size && /* @__PURE__ */ jsxRuntime.jsxs("span", { "aria-label": "Calculated row footprint", title, children: [
|
|
18
|
+
"Footprint ",
|
|
19
|
+
size.source === "local-estimate" || size.source === "provider-estimate" ? "~" : "",
|
|
20
|
+
tokens.compactTokens(size.totalTokens),
|
|
21
|
+
" tokens · ",
|
|
22
|
+
size.costUSD !== void 0 ? `~${tokens.formatCost(size.costUSD)}` : "price unavailable",
|
|
23
|
+
size.coverage.partial ? " · partial" : ""
|
|
24
|
+
] }),
|
|
25
|
+
(row == null ? void 0 : row.pending) && /* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", children: "Calculating tokens/cost…" }),
|
|
26
|
+
(row == null ? void 0 : row.error) && /* @__PURE__ */ jsxRuntime.jsx("span", { role: "alert", className: "text-destructive", children: row.error }),
|
|
27
|
+
!event.estimatedCost && /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu.DropdownMenu, { icon: UiDotsVertical.UiDotsVertical, hideChevron: true, variant: "ghost", size: "icon", title: `Row options ${event.id}`, menuLabel: `Row options ${event.id}`, items: [{
|
|
28
|
+
label: "Calculate tokens/cost",
|
|
29
|
+
disabled: Boolean(row == null ? void 0 : row.pending),
|
|
30
|
+
onSelect: () => sizing.calculate([event.id], "provider")
|
|
31
|
+
}] })
|
|
32
|
+
] });
|
|
33
|
+
}
|
|
34
|
+
exports.SessionRowTokens = SessionRowTokens;
|
|
35
|
+
//# sourceMappingURL=SessionViewer.tokens.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewer.tokens.cjs","sources":["../../../src/data/ai/SessionViewer.tokens.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { UiDotsVertical } from \"../../icons\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { SessionTokenContext } from \"./use-session-token-sizing\";\nimport { compactTokens, formatCost } from \"./session-cost\";\n\nexport function SessionRowTokens({ event }: { event: SessionEvent }) {\n const sizing = useContext(SessionTokenContext);\n if (!sizing || event.pending) return null;\n const row = sizing.state(event);\n const size = row?.size;\n const title = size ? `${size.source} · ${size.model}. Input ${size.usage.inputTokens ?? 0}, output ${size.usage.outputTokens ?? 0}, reasoning ${size.usage.reasoningTokens ?? 0}. ${size.coverage.framingIncluded ? \"Provider framing included. \" : \"\"}Excluded: ${size.coverage.excluded?.join(\"; \") || \"none\"}. Content footprint; not historical billed usage.` : undefined;\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1 text-xs text-muted-foreground\" data-row-tokens={event.id}>\n {size && <span aria-label=\"Calculated row footprint\" title={title}>Footprint {size.source === \"local-estimate\" || size.source === \"provider-estimate\" ? \"~\" : \"\"}{compactTokens(size.totalTokens)} tokens · {size.costUSD !== undefined ? `~${formatCost(size.costUSD)}` : \"price unavailable\"}{size.coverage.partial ? \" · partial\" : \"\"}</span>}\n {row?.pending && <span role=\"status\">Calculating tokens/cost…</span>}\n {row?.error && <span role=\"alert\" className=\"text-destructive\">{row.error}</span>}\n {!event.estimatedCost && (\n <DropdownMenu icon={UiDotsVertical} hideChevron variant=\"ghost\" size=\"icon\" title={`Row options ${event.id}`} menuLabel={`Row options ${event.id}`} items={[{\n label: \"Calculate tokens/cost\", disabled: Boolean(row?.pending),\n onSelect: () => sizing.calculate([event.id], \"provider\"),\n }]} />\n )}\n </div>\n );\n}\n"],"names":["useContext","SessionTokenContext","jsxs","compactTokens","formatCost","jsx","DropdownMenu","UiDotsVertical"],"mappings":";;;;;;;;AAOO,SAAS,iBAAiB,EAAE,SAAkC;;AACnE,QAAM,SAASA,MAAAA,WAAWC,yCAAmB;AAC7C,MAAI,CAAC,UAAU,MAAM,QAAS,QAAO;AACrC,QAAM,MAAM,OAAO,MAAM,KAAK;AAC9B,QAAM,OAAO,2BAAK;AAClB,QAAM,QAAQ,OAAO,GAAG,KAAK,MAAM,MAAM,KAAK,KAAK,WAAW,KAAK,MAAM,eAAe,CAAC,YAAY,KAAK,MAAM,gBAAgB,CAAC,eAAe,KAAK,MAAM,mBAAmB,CAAC,KAAK,KAAK,SAAS,kBAAkB,gCAAgC,EAAE,eAAa,UAAK,SAAS,aAAd,mBAAwB,KAAK,UAAS,MAAM,sDAAsD;AACrW,yCACG,OAAA,EAAI,WAAU,2EAA0E,mBAAiB,MAAM,IAC7G,UAAA;AAAA,IAAA,QAAQC,2BAAAA,KAAC,QAAA,EAAK,cAAW,4BAA2B,OAAc,UAAA;AAAA,MAAA;AAAA,MAAW,KAAK,WAAW,oBAAoB,KAAK,WAAW,sBAAsB,MAAM;AAAA,MAAIC,OAAAA,cAAc,KAAK,WAAW;AAAA,MAAE;AAAA,MAAW,KAAK,YAAY,SAAY,IAAIC,OAAAA,WAAW,KAAK,OAAO,CAAC,KAAK;AAAA,MAAqB,KAAK,SAAS,UAAU,eAAe;AAAA,IAAA,GAAG;AAAA,KACzU,2BAAK,YAAWC,2BAAAA,IAAC,QAAA,EAAK,MAAK,UAAS,UAAA,4BAAwB;AAAA,KAC5D,2BAAK,UAASA,+BAAC,QAAA,EAAK,MAAK,SAAQ,WAAU,oBAAoB,UAAA,IAAI,MAAA,CAAM;AAAA,IACzE,CAAC,MAAM,iBACNA,2BAAAA,IAACC,aAAAA,cAAA,EAAa,MAAMC,eAAAA,gBAAgB,aAAW,MAAC,SAAQ,SAAQ,MAAK,QAAO,OAAO,eAAe,MAAM,EAAE,IAAI,WAAW,eAAe,MAAM,EAAE,IAAI,OAAO,CAAC;AAAA,MAC1J,OAAO;AAAA,MAAyB,UAAU,QAAQ,2BAAK,OAAO;AAAA,MAC9D,UAAU,MAAM,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU;AAAA,IAAA,CACxD,EAAA,CAAG;AAAA,EAAA,GAER;AAEJ;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewer.tokens.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tokens.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,sCAmBlE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { DropdownMenu } from "../../overlay/DropdownMenu.js";
|
|
4
|
+
import { SessionTokenContext } from "./use-session-token-sizing.js";
|
|
5
|
+
import { compactTokens, formatCost } from "../../lib/tokens.js";
|
|
6
|
+
import { UiDotsVertical } from "../../icons/components/UiDotsVertical.js";
|
|
7
|
+
function SessionRowTokens({ event }) {
|
|
8
|
+
var _a;
|
|
9
|
+
const sizing = useContext(SessionTokenContext);
|
|
10
|
+
if (!sizing || event.pending) return null;
|
|
11
|
+
const row = sizing.state(event);
|
|
12
|
+
const size = row == null ? void 0 : row.size;
|
|
13
|
+
const title = size ? `${size.source} · ${size.model}. Input ${size.usage.inputTokens ?? 0}, output ${size.usage.outputTokens ?? 0}, reasoning ${size.usage.reasoningTokens ?? 0}. ${size.coverage.framingIncluded ? "Provider framing included. " : ""}Excluded: ${((_a = size.coverage.excluded) == null ? void 0 : _a.join("; ")) || "none"}. Content footprint; not historical billed usage.` : void 0;
|
|
14
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-1 text-xs text-muted-foreground", "data-row-tokens": event.id, children: [
|
|
15
|
+
size && /* @__PURE__ */ jsxs("span", { "aria-label": "Calculated row footprint", title, children: [
|
|
16
|
+
"Footprint ",
|
|
17
|
+
size.source === "local-estimate" || size.source === "provider-estimate" ? "~" : "",
|
|
18
|
+
compactTokens(size.totalTokens),
|
|
19
|
+
" tokens · ",
|
|
20
|
+
size.costUSD !== void 0 ? `~${formatCost(size.costUSD)}` : "price unavailable",
|
|
21
|
+
size.coverage.partial ? " · partial" : ""
|
|
22
|
+
] }),
|
|
23
|
+
(row == null ? void 0 : row.pending) && /* @__PURE__ */ jsx("span", { role: "status", children: "Calculating tokens/cost…" }),
|
|
24
|
+
(row == null ? void 0 : row.error) && /* @__PURE__ */ jsx("span", { role: "alert", className: "text-destructive", children: row.error }),
|
|
25
|
+
!event.estimatedCost && /* @__PURE__ */ jsx(DropdownMenu, { icon: UiDotsVertical, hideChevron: true, variant: "ghost", size: "icon", title: `Row options ${event.id}`, menuLabel: `Row options ${event.id}`, items: [{
|
|
26
|
+
label: "Calculate tokens/cost",
|
|
27
|
+
disabled: Boolean(row == null ? void 0 : row.pending),
|
|
28
|
+
onSelect: () => sizing.calculate([event.id], "provider")
|
|
29
|
+
}] })
|
|
30
|
+
] });
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
SessionRowTokens
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=SessionViewer.tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewer.tokens.js","sources":["../../../src/data/ai/SessionViewer.tokens.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { UiDotsVertical } from \"../../icons\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { SessionTokenContext } from \"./use-session-token-sizing\";\nimport { compactTokens, formatCost } from \"./session-cost\";\n\nexport function SessionRowTokens({ event }: { event: SessionEvent }) {\n const sizing = useContext(SessionTokenContext);\n if (!sizing || event.pending) return null;\n const row = sizing.state(event);\n const size = row?.size;\n const title = size ? `${size.source} · ${size.model}. Input ${size.usage.inputTokens ?? 0}, output ${size.usage.outputTokens ?? 0}, reasoning ${size.usage.reasoningTokens ?? 0}. ${size.coverage.framingIncluded ? \"Provider framing included. \" : \"\"}Excluded: ${size.coverage.excluded?.join(\"; \") || \"none\"}. Content footprint; not historical billed usage.` : undefined;\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1 text-xs text-muted-foreground\" data-row-tokens={event.id}>\n {size && <span aria-label=\"Calculated row footprint\" title={title}>Footprint {size.source === \"local-estimate\" || size.source === \"provider-estimate\" ? \"~\" : \"\"}{compactTokens(size.totalTokens)} tokens · {size.costUSD !== undefined ? `~${formatCost(size.costUSD)}` : \"price unavailable\"}{size.coverage.partial ? \" · partial\" : \"\"}</span>}\n {row?.pending && <span role=\"status\">Calculating tokens/cost…</span>}\n {row?.error && <span role=\"alert\" className=\"text-destructive\">{row.error}</span>}\n {!event.estimatedCost && (\n <DropdownMenu icon={UiDotsVertical} hideChevron variant=\"ghost\" size=\"icon\" title={`Row options ${event.id}`} menuLabel={`Row options ${event.id}`} items={[{\n label: \"Calculate tokens/cost\", disabled: Boolean(row?.pending),\n onSelect: () => sizing.calculate([event.id], \"provider\"),\n }]} />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AAOO,SAAS,iBAAiB,EAAE,SAAkC;;AACnE,QAAM,SAAS,WAAW,mBAAmB;AAC7C,MAAI,CAAC,UAAU,MAAM,QAAS,QAAO;AACrC,QAAM,MAAM,OAAO,MAAM,KAAK;AAC9B,QAAM,OAAO,2BAAK;AAClB,QAAM,QAAQ,OAAO,GAAG,KAAK,MAAM,MAAM,KAAK,KAAK,WAAW,KAAK,MAAM,eAAe,CAAC,YAAY,KAAK,MAAM,gBAAgB,CAAC,eAAe,KAAK,MAAM,mBAAmB,CAAC,KAAK,KAAK,SAAS,kBAAkB,gCAAgC,EAAE,eAAa,UAAK,SAAS,aAAd,mBAAwB,KAAK,UAAS,MAAM,sDAAsD;AACrW,8BACG,OAAA,EAAI,WAAU,2EAA0E,mBAAiB,MAAM,IAC7G,UAAA;AAAA,IAAA,QAAQ,qBAAC,QAAA,EAAK,cAAW,4BAA2B,OAAc,UAAA;AAAA,MAAA;AAAA,MAAW,KAAK,WAAW,oBAAoB,KAAK,WAAW,sBAAsB,MAAM;AAAA,MAAI,cAAc,KAAK,WAAW;AAAA,MAAE;AAAA,MAAW,KAAK,YAAY,SAAY,IAAI,WAAW,KAAK,OAAO,CAAC,KAAK;AAAA,MAAqB,KAAK,SAAS,UAAU,eAAe;AAAA,IAAA,GAAG;AAAA,KACzU,2BAAK,YAAW,oBAAC,QAAA,EAAK,MAAK,UAAS,UAAA,4BAAwB;AAAA,KAC5D,2BAAK,UAAS,oBAAC,QAAA,EAAK,MAAK,SAAQ,WAAU,oBAAoB,UAAA,IAAI,MAAA,CAAM;AAAA,IACzE,CAAC,MAAM,iBACN,oBAAC,cAAA,EAAa,MAAM,gBAAgB,aAAW,MAAC,SAAQ,SAAQ,MAAK,QAAO,OAAO,eAAe,MAAM,EAAE,IAAI,WAAW,eAAe,MAAM,EAAE,IAAI,OAAO,CAAC;AAAA,MAC1J,OAAO;AAAA,MAAyB,UAAU,QAAQ,2BAAK,OAAO;AAAA,MAC9D,UAAU,MAAM,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU;AAAA,IAAA,CACxD,EAAA,CAAG;AAAA,EAAA,GAER;AAEJ;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const sessionCost = require("./session-cost.cjs");
|
|
5
|
+
const UiCoins = require("../../icons/components/UiCoins.cjs");
|
|
6
|
+
const tokens = require("../../lib/tokens.cjs");
|
|
7
|
+
const UiDatabase = require("../../icons/components/UiDatabase.cjs");
|
|
8
|
+
const UiArrowUp = require("../../icons/components/UiArrowUp.cjs");
|
|
9
|
+
const UiArrowDown = require("../../icons/components/UiArrowDown.cjs");
|
|
10
|
+
const UiBrain = require("../../icons/components/UiBrain.cjs");
|
|
11
|
+
const TOKEN_BUCKETS = [
|
|
12
|
+
["inputTokens", "In", "Input", UiArrowUp.UiArrowUp],
|
|
13
|
+
["outputTokens", "Out", "Output", UiArrowDown.UiArrowDown],
|
|
14
|
+
["reasoningTokens", "Reasoning", "Reasoning", UiBrain.UiBrain],
|
|
15
|
+
["cacheReadTokens", "Cache read", "Cache read", UiDatabase.UiDatabaseDown],
|
|
16
|
+
["cacheWriteTokens", "Cache write", "Cache write", UiDatabase.UiDatabaseUp]
|
|
17
|
+
];
|
|
18
|
+
function EstimatedToolCost({
|
|
19
|
+
events,
|
|
20
|
+
detailed = false
|
|
21
|
+
}) {
|
|
22
|
+
var _a;
|
|
23
|
+
const estimates = events.flatMap(
|
|
24
|
+
(event) => event.estimatedCost ? [event.estimatedCost] : []
|
|
25
|
+
);
|
|
26
|
+
if (!estimates.length) {
|
|
27
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
28
|
+
"span",
|
|
29
|
+
{
|
|
30
|
+
"aria-label": detailed ? "Estimated tool cost details" : "Estimate unavailable",
|
|
31
|
+
title: "Estimate unavailable",
|
|
32
|
+
className: "shrink-0 text-[11px] text-muted-foreground",
|
|
33
|
+
children: detailed ? "Estimate unavailable" : "—"
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
const costs = estimates.map((estimate) => estimate.cost);
|
|
38
|
+
const total = costs.reduce((sum, cost) => sum + sessionCost.costTotal(cost), 0);
|
|
39
|
+
const sharedCalls = (_a = estimates[0]) == null ? void 0 : _a.sharedCalls;
|
|
40
|
+
const allocation = events.length === 1 ? `Model request shared equally across ${sharedCalls} tool call${sharedCalls === 1 ? "" : "s"}.` : `Combined estimate for ${estimates.length} calls; each model request is shared equally across its tool calls.`;
|
|
41
|
+
const description = `${allocation} Includes conversation context and generating the calls. Reading tool results is accounted for in subsequent model requests. Estimated cost in USD.`;
|
|
42
|
+
if (!detailed) {
|
|
43
|
+
const cacheReadTokens = costs.reduce((sum, cost) => sum + (cost.cacheReadTokens ?? 0), 0);
|
|
44
|
+
const cacheReadDescription = `Cache read delta: ${cacheReadTokens.toLocaleString("en-US")} tokens`;
|
|
45
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
46
|
+
"span",
|
|
47
|
+
{
|
|
48
|
+
role: "group",
|
|
49
|
+
"aria-label": "Estimated tool cost",
|
|
50
|
+
title: description,
|
|
51
|
+
className: "inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-[11px] tabular-nums text-muted-foreground",
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsx(UiCoins.UiCoins, { className: "size-3 shrink-0" }),
|
|
54
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: total > 0 ? `~${tokens.formatCost(total)}` : "—" }),
|
|
55
|
+
cacheReadTokens > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
56
|
+
"span",
|
|
57
|
+
{
|
|
58
|
+
role: "group",
|
|
59
|
+
"aria-label": cacheReadDescription,
|
|
60
|
+
title: cacheReadDescription,
|
|
61
|
+
className: "ml-1 inline-flex items-center gap-0.5",
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx(UiDatabase.UiDatabaseDown, { className: "size-3 shrink-0" }),
|
|
64
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
65
|
+
"+",
|
|
66
|
+
tokens.compactTokens(cacheReadTokens)
|
|
67
|
+
] })
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
role: "group",
|
|
79
|
+
"aria-label": "Estimated tool cost details",
|
|
80
|
+
title: description,
|
|
81
|
+
className: "mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 border-t border-border pt-1.5 text-[11px] tabular-nums text-muted-foreground",
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
84
|
+
"span",
|
|
85
|
+
{
|
|
86
|
+
role: "group",
|
|
87
|
+
"aria-label": total > 0 ? `Estimated cost: ${tokens.formatCost(total)} USD` : "Cost unavailable",
|
|
88
|
+
className: "inline-flex items-center gap-1",
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsx(UiCoins.UiCoins, { className: "size-3.5 shrink-0" }),
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Est." }),
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: total > 0 ? `~${tokens.formatCost(total)}` : "Cost unavailable" }),
|
|
93
|
+
total > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[9px] font-medium", children: "USD" })
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
TOKEN_BUCKETS.map(([key, label, name, BucketIcon]) => {
|
|
98
|
+
const tokens$1 = costs.reduce((sum, cost) => sum + (cost[key] ?? 0), 0);
|
|
99
|
+
const description2 = `${name}: ${tokens$1.toLocaleString("en-US")} tokens`;
|
|
100
|
+
return tokens$1 > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
101
|
+
"span",
|
|
102
|
+
{
|
|
103
|
+
role: "group",
|
|
104
|
+
"aria-label": description2,
|
|
105
|
+
title: description2,
|
|
106
|
+
className: "inline-flex items-center gap-1 whitespace-nowrap",
|
|
107
|
+
children: [
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx(BucketIcon, { className: "size-3.5 shrink-0" }),
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
110
|
+
label,
|
|
111
|
+
" ",
|
|
112
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: tokens.compactTokens(tokens$1) })
|
|
113
|
+
] })
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
key
|
|
117
|
+
) : null;
|
|
118
|
+
}),
|
|
119
|
+
estimates.length < events.length && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
120
|
+
events.length - estimates.length,
|
|
121
|
+
" unavailable"
|
|
122
|
+
] })
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
exports.EstimatedToolCost = EstimatedToolCost;
|
|
128
|
+
//# sourceMappingURL=SessionViewer.tool-cost.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewer.tool-cost.cjs","sources":["../../../src/data/ai/SessionViewer.tool-cost.tsx"],"sourcesContent":["import type { SessionEvent } from \"./SessionViewer.model\";\nimport { compactTokens, costTotal, formatCost } from \"./session-cost\";\nimport type { SessionCost } from \"./SessionViewer.unified\";\nimport {\n UiArrowDown,\n UiArrowUp,\n UiBrain,\n UiCoins,\n UiDatabaseDown,\n UiDatabaseUp,\n} from \"../../icons\";\n\nconst TOKEN_BUCKETS = [\n [\"inputTokens\", \"In\", \"Input\", UiArrowUp],\n [\"outputTokens\", \"Out\", \"Output\", UiArrowDown],\n [\"reasoningTokens\", \"Reasoning\", \"Reasoning\", UiBrain],\n [\"cacheReadTokens\", \"Cache read\", \"Cache read\", UiDatabaseDown],\n [\"cacheWriteTokens\", \"Cache write\", \"Cache write\", UiDatabaseUp],\n] as const;\n\nexport function EstimatedToolCost({\n events,\n detailed = false,\n}: {\n events: SessionEvent[];\n detailed?: boolean;\n}) {\n const estimates = events.flatMap((event) =>\n event.estimatedCost ? [event.estimatedCost] : [],\n );\n if (!estimates.length) {\n return (\n <span\n aria-label={\n detailed ? \"Estimated tool cost details\" : \"Estimate unavailable\"\n }\n title=\"Estimate unavailable\"\n className=\"shrink-0 text-[11px] text-muted-foreground\"\n >\n {detailed ? \"Estimate unavailable\" : \"—\"}\n </span>\n );\n }\n const costs: SessionCost[] = estimates.map((estimate) => estimate.cost);\n const total = costs.reduce((sum, cost) => sum + costTotal(cost), 0);\n const sharedCalls = estimates[0]?.sharedCalls;\n const allocation =\n events.length === 1\n ? `Model request shared equally across ${sharedCalls} tool call${sharedCalls === 1 ? \"\" : \"s\"}.`\n : `Combined estimate for ${estimates.length} calls; each model request is shared equally across its tool calls.`;\n const description = `${allocation} Includes conversation context and generating the calls. Reading tool results is accounted for in subsequent model requests. Estimated cost in USD.`;\n if (!detailed) {\n const cacheReadTokens = costs.reduce((sum, cost) => sum + (cost.cacheReadTokens ?? 0), 0);\n const cacheReadDescription = `Cache read delta: ${cacheReadTokens.toLocaleString(\"en-US\")} tokens`;\n return (\n <span\n role=\"group\"\n aria-label=\"Estimated tool cost\"\n title={description}\n className=\"inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-[11px] tabular-nums text-muted-foreground\"\n >\n <UiCoins className=\"size-3 shrink-0\" />\n <span>{total > 0 ? `~${formatCost(total)}` : \"—\"}</span>\n {cacheReadTokens > 0 && (\n <span\n role=\"group\"\n aria-label={cacheReadDescription}\n title={cacheReadDescription}\n className=\"ml-1 inline-flex items-center gap-0.5\"\n >\n <UiDatabaseDown className=\"size-3 shrink-0\" />\n <span>+{compactTokens(cacheReadTokens)}</span>\n </span>\n )}\n </span>\n );\n }\n return (\n <div\n role=\"group\"\n aria-label=\"Estimated tool cost details\"\n title={description}\n className=\"mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 border-t border-border pt-1.5 text-[11px] tabular-nums text-muted-foreground\"\n >\n <span\n role=\"group\"\n aria-label={\n total > 0\n ? `Estimated cost: ${formatCost(total)} USD`\n : \"Cost unavailable\"\n }\n className=\"inline-flex items-center gap-1\"\n >\n <UiCoins className=\"size-3.5 shrink-0\" />\n <span>Est.</span>\n <span className=\"font-semibold text-foreground\">\n {total > 0 ? `~${formatCost(total)}` : \"Cost unavailable\"}\n </span>\n {total > 0 && <span className=\"text-[9px] font-medium\">USD</span>}\n </span>\n {TOKEN_BUCKETS.map(([key, label, name, BucketIcon]) => {\n const tokens = costs.reduce((sum, cost) => sum + (cost[key] ?? 0), 0);\n const description = `${name}: ${tokens.toLocaleString(\"en-US\")} tokens`;\n return tokens > 0 ? (\n <span\n key={key}\n role=\"group\"\n aria-label={description}\n title={description}\n className=\"inline-flex items-center gap-1 whitespace-nowrap\"\n >\n <BucketIcon className=\"size-3.5 shrink-0\" />\n <span>\n {label}{\" \"}\n <span className=\"font-medium text-foreground\">\n {compactTokens(tokens)}\n </span>\n </span>\n </span>\n ) : null;\n })}\n {estimates.length < events.length && (\n <span>{events.length - estimates.length} unavailable</span>\n )}\n </div>\n );\n}\n"],"names":["UiArrowUp","UiArrowDown","UiBrain","UiDatabaseDown","UiDatabaseUp","jsx","costTotal","jsxs","UiCoins","formatCost","compactTokens","tokens","description"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewer.tool-cost.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tool-cost.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAoB1D,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAgB,GACjB,EAAE;IACD,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,+BAoGA"}
|