@flanksource/clicky-ui 0.3.43 → 0.3.45
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 +2 -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/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/CodeLine.cjs +22 -0
- package/dist/data/CodeLine.cjs.map +1 -0
- package/dist/data/CodeLine.d.ts +8 -0
- package/dist/data/CodeLine.d.ts.map +1 -0
- package/dist/data/CodeLine.js +22 -0
- package/dist/data/CodeLine.js.map +1 -0
- package/dist/data/GraphDiagram.cjs +18 -6
- package/dist/data/GraphDiagram.cjs.map +1 -1
- package/dist/data/GraphDiagram.d.ts +9 -1
- package/dist/data/GraphDiagram.d.ts.map +1 -1
- package/dist/data/GraphDiagram.js +18 -6
- package/dist/data/GraphDiagram.js.map +1 -1
- package/dist/data/GraphDiagramNodes.cjs +38 -29
- package/dist/data/GraphDiagramNodes.cjs.map +1 -1
- package/dist/data/GraphDiagramNodes.d.ts +8 -2
- package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
- package/dist/data/GraphDiagramNodes.js +38 -29
- 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/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 +250 -0
- package/dist/data/call-graph/CallGraph.cjs.map +1 -0
- package/dist/data/call-graph/CallGraph.d.ts +69 -0
- package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraph.js +250 -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 +50 -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 +50 -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 +186 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts +45 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.js +186 -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 +161 -0
- package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-model.d.ts +102 -0
- package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-model.js +161 -0
- package/dist/data/call-graph/call-graph-model.js.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs +177 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts +72 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.js +177 -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 +135 -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/diagnostics/RenderedStackTrace.cjs +2 -1
- package/dist/data/diagnostics/RenderedStackTrace.cjs.map +1 -1
- package/dist/data/diagnostics/RenderedStackTrace.d.ts +3 -1
- package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -1
- package/dist/data/diagnostics/RenderedStackTrace.js +2 -1
- package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -1
- 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/graph-columns-layout.cjs +26 -10
- package/dist/data/graph-columns-layout.cjs.map +1 -1
- package/dist/data/graph-columns-layout.d.ts +8 -0
- package/dist/data/graph-columns-layout.d.ts.map +1 -1
- package/dist/data/graph-columns-layout.js +26 -10
- package/dist/data/graph-columns-layout.js.map +1 -1
- package/dist/data/graph-diagram-model.cjs.map +1 -1
- package/dist/data/graph-diagram-model.d.ts +5 -0
- package/dist/data/graph-diagram-model.d.ts.map +1 -1
- 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/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-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 +28 -2
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +2 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +26 -0
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +30 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -0
- 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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.tree.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tree.tsx"],"sourcesContent":["import {\n ListMenu,\n ListMenuHeader,\n ListMenuItem,\n ListMenuSection,\n} from \"../../components/ListMenu\";\nimport { cn } from \"../../lib/utils\";\nimport {\n UiEye,\n UiGlobe,\n UiRepeat,\n UiWarningTriangle,\n UiWrench,\n} from \"../../icons\";\nimport { Icon } from \"../Icon\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolDirectoryHeader } from \"./ToolSchemaBrowser.directory-header\";\nimport {\n directoryPermissionRule,\n directoryPolicyToggle,\n type ToolSchemaViewMode,\n type ToolSection,\n} from \"./ToolSchemaBrowser.model\";\nimport { nextMode } from \"./ToolPreferences.model\";\nimport { ModeBadge } from \"./ToolPreferencesList\";\n\nexport type ToolPolicyTreeProps = {\n sections: ToolSection[];\n view: ToolSchemaViewMode;\n value: Record<string, ToolPolicy> | undefined;\n /** Enables click-to-toggle on tools and directories. */\n onRule?: ((rule: PermissionRule) => void) | undefined;\n isOpen: (key: string) => boolean;\n onToggle: (key: string) => void;\n activeName?: string | undefined;\n /** Row clicks select a tool; without it rows only show their policy. */\n onSelect?: ((name: string) => void) | undefined;\n emptyLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Directory tree of tools where every badge is a click-to-toggle policy. */\nexport function ToolPolicyTree({\n sections,\n view,\n value,\n onRule,\n isOpen,\n onToggle,\n activeName,\n onSelect,\n emptyLabel = \"No matching tools\",\n className,\n}: ToolPolicyTreeProps) {\n const cycleDirectory = (tools: ToolMeta[], depth: \"section\" | \"child\") => {\n if (!onRule) return undefined;\n const { next } = directoryPolicyToggle(tools, value ?? {});\n return () =>\n onRule(directoryPermissionRule({ tools, view, depth, policy: next }));\n };\n return (\n <ListMenu className={cn(\"divide-y-0\", className)}>\n {sections.map((section) => {\n const sectionKey = `p:${section.label}`;\n const sectionOpen = isOpen(sectionKey);\n const sectionTools = section.children.flatMap((child) => child.tools);\n return (\n <ListMenuSection key={sectionKey}>\n <ListMenuHeader className=\"px-0 py-0\">\n <ToolDirectoryHeader\n label={section.label}\n count={section.count}\n open={sectionOpen}\n variant=\"section\"\n mode={directoryPolicyToggle(sectionTools, value ?? {}).badge}\n onToggle={() => onToggle(sectionKey)}\n onCycle={cycleDirectory(sectionTools, \"section\")}\n />\n </ListMenuHeader>\n {sectionOpen &&\n section.children.map((child) => {\n const childKey = `s:${section.label}///${child.label}`;\n const childOpen = isOpen(childKey);\n return (\n <div key={childKey}>\n <div className=\"flex items-center border-b border-border bg-background pl-2\">\n <ToolDirectoryHeader\n label={child.label}\n count={child.tools.length}\n open={childOpen}\n variant=\"child\"\n mode={\n directoryPolicyToggle(child.tools, value ?? {}).badge\n }\n onToggle={() => onToggle(childKey)}\n onCycle={cycleDirectory(child.tools, \"child\")}\n />\n </div>\n {childOpen &&\n child.tools.map((tool) => (\n <ToolPolicyRow\n key={tool.name}\n tool={tool}\n active={activeName === tool.name}\n policy={value?.[tool.name]}\n onSelect={\n onSelect ? () => onSelect(tool.name) : undefined\n }\n onCycle={\n onRule\n ? (policy) =>\n onRule({\n name: tool.name,\n policy: nextMode(policy),\n })\n : undefined\n }\n />\n ))}\n </div>\n );\n })}\n </ListMenuSection>\n );\n })}\n {sections.length === 0 && (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n {emptyLabel}\n </div>\n )}\n </ListMenu>\n );\n}\n\nfunction ToolPolicyRow({\n tool,\n active,\n policy,\n onSelect,\n onCycle,\n}: {\n tool: ToolMeta;\n active: boolean;\n policy: ToolPolicy | undefined;\n onSelect: (() => void) | undefined;\n onCycle: ((policy: ToolPolicy) => void) | undefined;\n}) {\n const label = tool.label || tool.name;\n const mode = policy ?? tool.defaultPermission ?? \"auto\";\n return (\n <ListMenuItem\n active={active}\n interactive={onSelect !== undefined}\n title={tool.name}\n className=\"flex items-center gap-2 py-1 pl-6 pr-2\"\n >\n <button\n type=\"button\"\n aria-label={label}\n aria-pressed={onSelect ? active : undefined}\n disabled={!onSelect}\n onClick={onSelect}\n className=\"grid min-w-0 flex-1 grid-cols-[1rem_minmax(0,1fr)_auto] items-center gap-2 text-left disabled:cursor-default\"\n >\n {tool.icon ? (\n <Icon name={tool.icon} className=\"size-3.5 text-muted-foreground\" />\n ) : (\n <Icon icon={UiWrench} className=\"size-3.5 text-muted-foreground\" />\n )}\n <span\n className={cn(\n \"min-w-0 truncate text-xs font-medium\",\n mode === \"deny\" && \"text-muted-foreground line-through\",\n )}\n >\n {label}\n </span>\n <span className=\"flex items-center gap-1\">\n <ToolHintIcons tool={tool} />\n </span>\n </button>\n {onCycle ? (\n <button\n type=\"button\"\n aria-label={`Toggle ${label}`}\n onClick={() => onCycle(mode)}\n className=\"shrink-0 rounded hover:ring-1 hover:ring-border\"\n >\n <ModeBadge mode={mode} />\n </button>\n ) : (\n <ModeBadge mode={mode} />\n )}\n </ListMenuItem>\n );\n}\n\nfunction ToolHintIcons({ tool }: { tool: ToolMeta }) {\n const hints = [\n [\n tool.annotations?.readOnlyHint,\n \"Read only tool\",\n UiEye,\n \"text-emerald-600\",\n ],\n [\n tool.annotations?.destructiveHint,\n \"Destructive tool\",\n UiWarningTriangle,\n \"text-red-600\",\n ],\n [\n tool.annotations?.idempotentHint,\n \"Idempotent tool\",\n UiRepeat,\n \"text-sky-600\",\n ],\n [\n tool.annotations?.openWorldHint,\n \"Open world tool\",\n UiGlobe,\n \"text-violet-600\",\n ],\n ] as const;\n return hints.flatMap(([enabled, hint, icon, className]) =>\n enabled\n ? [\n <span key={hint} role=\"img\" aria-label={hint} title={hint}>\n <Icon icon={icon} className={cn(\"size-3\", className)} />\n </span>,\n ]\n : [],\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/data/ai/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { ChatFab, type ChatFabProps } from './ChatFab.js';
|
|
|
5
5
|
export { ChatButton, type ChatButtonProps } from './ChatButton.js';
|
|
6
6
|
export { ThreadPicker, type ThreadPickerProps, type ThreadSummary, type ThreadSource, } from './ThreadPicker.js';
|
|
7
7
|
export { ContextBadges, ContextBadgesReadonly, type ContextBadgesProps, } from './ContextBadges.js';
|
|
8
|
-
export { ToolPreferences, CompactToolPreferencesList, type CompactToolPreferencesListProps, type ToolPreferencesProps, type ClaudePermissionMode, type ToolAnnotations, type ToolMeta, type ToolPolicy, } from './ToolPreferences.js';
|
|
8
|
+
export { ToolPreferences, ToolPreferencesMenu, AdvancedChatSettings, CompactToolPreferencesList, type AdvancedChatSettingsProps, type AdvancedTab, type CompactToolPreferencesListProps, type ToolPreferencesMenuProps, type ToolPreferencesProps, type ClaudePermissionMode, type ToolAnnotations, type ToolMeta, type ToolPolicy, } from './ToolPreferences.js';
|
|
9
9
|
export { AdvancedChatConfig, type AdvancedChatConfigProps, } from './AdvancedChatConfig.js';
|
|
10
10
|
export { effectiveToolPolicies, withUserRule, type ToolGroup, type ToolPreferenceEntry, type ToolSubGroup, } from './ToolPreferences.model.js';
|
|
11
11
|
export { normalizeToolPolicy } from '../chat/types.js';
|
|
@@ -39,7 +39,7 @@ export type { RuntimeAvailability, RuntimeAvailabilityState, } from '../chat/typ
|
|
|
39
39
|
export { ContextMeter, type ContextMeterProps, type ContextMeterMode, type ContextMeterTokens, type ContextMeterCost, type ContextMeterBudget, } from '../chat/ContextMeter.js';
|
|
40
40
|
export { SessionContextMeter } from './SessionViewer.header.js';
|
|
41
41
|
export { serializeContext, parseContextPrefix, makeContextId, type ChatContextItem, type ContextTypeConfig, type ContextTypeStyle, } from './context.js';
|
|
42
|
-
export { SessionViewer, type SessionViewerProps, type SessionPendingTool, type SessionToolDecision, type SessionEntry, type SessionEvent, type SessionInput, type SessionThemeOverride, } from './SessionViewer.js';
|
|
42
|
+
export { SessionViewer, type SessionViewerProps, type SessionPendingTool, type SessionToolDecision, type SessionEntry, type SessionEvent, type SessionInput, type SessionThemeOverride, type SessionTokenSizer, type SessionTokenSize, type SessionTokenSizingRequest, type SessionTokenSizingResult, } from './SessionViewer.js';
|
|
43
43
|
export type { ApprovalDecisionFields, ApprovalKind, ApprovalQuestion, ApprovalRequest, ApprovalScope, CommandApproval, ElicitationApproval, ElicitationMode, FileChange, FilesystemApproval, FilesystemOperation, NativeSandboxPolicy, NetworkApproval, SandboxCommandPolicy, SandboxCredentialsPolicy, SandboxFilesystemAccess, SandboxFilesystemPolicy, SandboxNetworkAccess, SandboxNetworkPolicy, SandboxPlatformPolicy, StdinWrite, } from './approval-request.js';
|
|
44
44
|
export { SessionInspector, type SessionInspectorOptions, type SessionInspectorProps, type SessionInspectorTab, } from './SessionInspector.js';
|
|
45
45
|
export { fetchRemoteSession, isTerminalSessionLifecycle, mergeSessionMessages, openRemoteSession, sessionFollowUrl, TERMINAL_SESSION_LIFECYCLES, useRemoteSession, type RemoteSessionHandle, type RemoteSessionOptions, type RemoteSessionState, type SessionFollowState, } from './SessionInspector.remote.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/ai/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const AccordionList = require("../../../components/AccordionList.cjs");
|
|
6
6
|
const Combobox = require("../../../components/Combobox.cjs");
|
|
7
|
-
const select = require("../../../components/select.cjs");
|
|
8
7
|
const SegmentedControl = require("../../../components/SegmentedControl.cjs");
|
|
9
8
|
const utils = require("../../../lib/utils.cjs");
|
|
10
9
|
const HoverCard = require("../../../overlay/HoverCard.cjs");
|
|
@@ -42,7 +41,7 @@ function PermissionStrategiesEditor({
|
|
|
42
41
|
onCreate: () => ({ name: "*", policy: "ask" }),
|
|
43
42
|
addLabel: "Add permission strategy",
|
|
44
43
|
addDescription: "Start with a common match preset or define custom conditions.",
|
|
45
|
-
itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${
|
|
44
|
+
itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${permissionStrategies.strategySummary(item)}`,
|
|
46
45
|
idPrefix: "permission-strategy",
|
|
47
46
|
renderHeader: ({ item }) => /* @__PURE__ */ jsxRuntime.jsx(StrategyHeader, { rule: item }),
|
|
48
47
|
renderMeta: ({ item }) => /* @__PURE__ */ jsxRuntime.jsx(MatchCountBadge, { rule: item, tools }),
|
|
@@ -71,7 +70,7 @@ function StrategyHeader({ rule }) {
|
|
|
71
70
|
children: /* @__PURE__ */ jsxRuntime.jsx(StrategyIcon, { preset, className: "size-4" })
|
|
72
71
|
}
|
|
73
72
|
),
|
|
74
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1
|
|
73
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]", children: permissionStrategies.strategySummary(rule) }),
|
|
75
74
|
/* @__PURE__ */ jsxRuntime.jsx(PolicyBadge, { policy: rule.policy })
|
|
76
75
|
] });
|
|
77
76
|
}
|
|
@@ -143,17 +142,18 @@ function PermissionStrategyFields({
|
|
|
143
142
|
available.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "grid gap-1 text-xs font-medium sm:max-w-xs", children: [
|
|
144
143
|
"Add condition",
|
|
145
144
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
146
|
-
|
|
145
|
+
Combobox.Combobox,
|
|
147
146
|
{
|
|
147
|
+
ariaLabel: "Add condition",
|
|
148
148
|
value: "",
|
|
149
149
|
placeholder: "Choose metadata…",
|
|
150
|
-
onChange: (
|
|
151
|
-
permissionStrategies.addCondition(value,
|
|
152
|
-
|
|
150
|
+
onChange: (field) => {
|
|
151
|
+
if (field) onChange(permissionStrategies.addCondition(value, field));
|
|
152
|
+
},
|
|
153
153
|
options: permissionStrategies.MATCH_FIELD_OPTIONS.filter(
|
|
154
154
|
(option) => available.includes(option.value)
|
|
155
155
|
),
|
|
156
|
-
|
|
156
|
+
allowCustomValue: false
|
|
157
157
|
}
|
|
158
158
|
)
|
|
159
159
|
] })
|
|
@@ -266,26 +266,6 @@ function PolicyIcon({
|
|
|
266
266
|
if (policy === "ask") return /* @__PURE__ */ jsxRuntime.jsx(UiQuestion.UiQuestion, { className });
|
|
267
267
|
return /* @__PURE__ */ jsxRuntime.jsx(UiSparkles.UiSparkles, { className });
|
|
268
268
|
}
|
|
269
|
-
function strategyLabel(rule) {
|
|
270
|
-
var _a, _b;
|
|
271
|
-
const preset = permissionStrategies.strategyPreset(rule);
|
|
272
|
-
if (preset !== "custom") {
|
|
273
|
-
return ((_a = permissionStrategies.STRATEGY_PRESETS.find((option) => option.value === preset)) == null ? void 0 : _a.label) ?? "All tools";
|
|
274
|
-
}
|
|
275
|
-
const fields = permissionStrategies.activeMatchFields(rule);
|
|
276
|
-
if (fields.length !== 1) {
|
|
277
|
-
return `Custom conditions · ${fields.length} conditions`;
|
|
278
|
-
}
|
|
279
|
-
const field = fields[0];
|
|
280
|
-
if (!field) return "Custom conditions";
|
|
281
|
-
const label = ((_b = permissionStrategies.MATCH_FIELD_OPTIONS.find((option) => option.value === field)) == null ? void 0 : _b.label) ?? field;
|
|
282
|
-
const value = permissionStrategies.conditionText(rule, field);
|
|
283
|
-
if (Array.isArray(rule[field])) {
|
|
284
|
-
return `Custom conditions · ${label} in ${rule[field].length} values`;
|
|
285
|
-
}
|
|
286
|
-
const displayValue = value === "true" ? "Yes" : value === "false" ? "No" : value;
|
|
287
|
-
return `Custom conditions · ${label} ${displayValue}`;
|
|
288
|
-
}
|
|
289
269
|
function policyLabel(policy) {
|
|
290
270
|
if (policy === "allow") return "On";
|
|
291
271
|
if (policy === "deny") return "Off";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionStrategiesEditor.cjs","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport { Select } from \"../../../components/select\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n conditionText,\n matchingTools,\n strategyPreset,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategyLabel(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n {strategyLabel(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Select\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(event) =>\n onChange(\n addCondition(value, event.target.value as MatchField),\n )\n }\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n className=\"border-dashed text-muted-foreground\"\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction strategyLabel(rule: PermissionRule): string {\n const preset = strategyPreset(rule);\n if (preset !== \"custom\") {\n return (\n STRATEGY_PRESETS.find((option) => option.value === preset)?.label ??\n \"All tools\"\n );\n }\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) {\n return `Custom conditions · ${fields.length} conditions`;\n }\n const field = fields[0];\n if (!field) return \"Custom conditions\";\n const label =\n MATCH_FIELD_OPTIONS.find((option) => option.value === field)?.label ??\n field;\n const value = conditionText(rule, field);\n if (Array.isArray(rule[field])) {\n return `Custom conditions · ${label} in ${rule[field].length} values`;\n }\n const displayValue =\n value === \"true\" ? \"Yes\" : value === \"false\" ? \"No\" : value;\n return `Custom conditions · ${label} ${displayValue}`;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":["jsxs","jsx","AccordionList","strategyPreset","cn","useState","activeMatchFields","MATCH_FIELDS","Combobox","STRATEGY_PRESETS","applyStrategyPreset","PermissionStrategyConditionRow","Select","addCondition","MATCH_FIELD_OPTIONS","UiSparkles","UiQuestion","UiShieldSlash","UiShieldCheck","SegmentedControl","matchingTools","HoverCard","UiListChecks","UiEye","UiWarningTriangle","UiRepeat","UiSliders","conditionText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PermissionStrategiesEditor.cjs","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n matchingTools,\n strategyPreset,\n strategySummary,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategySummary(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]\">\n {strategySummary(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Combobox\n ariaLabel=\"Add condition\"\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(field) => {\n if (field) onChange(addCondition(value, field as MatchField));\n }}\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n allowCustomValue={false}\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":["jsxs","jsx","AccordionList","strategySummary","strategyPreset","cn","useState","activeMatchFields","MATCH_FIELDS","Combobox","STRATEGY_PRESETS","applyStrategyPreset","PermissionStrategyConditionRow","addCondition","MATCH_FIELD_OPTIONS","UiSparkles","UiQuestion","UiShieldSlash","UiShieldCheck","SegmentedControl","matchingTools","HoverCard","UiListChecks","UiEye","UiWarningTriangle","UiRepeat","UiSliders"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionStrategiesEditor.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PermissionStrategiesEditor.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AAgB7D,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7C,+BAoCA"}
|
|
@@ -2,11 +2,10 @@ import { jsxs, jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { AccordionList } from "../../../components/AccordionList.js";
|
|
4
4
|
import { Combobox } from "../../../components/Combobox.js";
|
|
5
|
-
import { Select } from "../../../components/select.js";
|
|
6
5
|
import { SegmentedControl } from "../../../components/SegmentedControl.js";
|
|
7
6
|
import { cn } from "../../../lib/utils.js";
|
|
8
7
|
import { HoverCard } from "../../../overlay/HoverCard.js";
|
|
9
|
-
import { strategyPreset, activeMatchFields, MATCH_FIELDS, applyStrategyPreset, STRATEGY_PRESETS, MATCH_FIELD_OPTIONS, addCondition, matchingTools
|
|
8
|
+
import { strategySummary, strategyPreset, activeMatchFields, MATCH_FIELDS, applyStrategyPreset, STRATEGY_PRESETS, MATCH_FIELD_OPTIONS, addCondition, matchingTools } from "../../../lib/permission-strategies.js";
|
|
10
9
|
import { PermissionStrategyConditionRow } from "./PermissionStrategyConditionRow.js";
|
|
11
10
|
import { UiListChecks } from "../../../icons/components/UiListChecks.js";
|
|
12
11
|
import { UiEye } from "../../../icons/components/UiEye.js";
|
|
@@ -40,7 +39,7 @@ function PermissionStrategiesEditor({
|
|
|
40
39
|
onCreate: () => ({ name: "*", policy: "ask" }),
|
|
41
40
|
addLabel: "Add permission strategy",
|
|
42
41
|
addDescription: "Start with a common match preset or define custom conditions.",
|
|
43
|
-
itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${
|
|
42
|
+
itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${strategySummary(item)}`,
|
|
44
43
|
idPrefix: "permission-strategy",
|
|
45
44
|
renderHeader: ({ item }) => /* @__PURE__ */ jsx(StrategyHeader, { rule: item }),
|
|
46
45
|
renderMeta: ({ item }) => /* @__PURE__ */ jsx(MatchCountBadge, { rule: item, tools }),
|
|
@@ -69,7 +68,7 @@ function StrategyHeader({ rule }) {
|
|
|
69
68
|
children: /* @__PURE__ */ jsx(StrategyIcon, { preset, className: "size-4" })
|
|
70
69
|
}
|
|
71
70
|
),
|
|
72
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1
|
|
71
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]", children: strategySummary(rule) }),
|
|
73
72
|
/* @__PURE__ */ jsx(PolicyBadge, { policy: rule.policy })
|
|
74
73
|
] });
|
|
75
74
|
}
|
|
@@ -141,17 +140,18 @@ function PermissionStrategyFields({
|
|
|
141
140
|
available.length > 0 && /* @__PURE__ */ jsxs("label", { className: "grid gap-1 text-xs font-medium sm:max-w-xs", children: [
|
|
142
141
|
"Add condition",
|
|
143
142
|
/* @__PURE__ */ jsx(
|
|
144
|
-
|
|
143
|
+
Combobox,
|
|
145
144
|
{
|
|
145
|
+
ariaLabel: "Add condition",
|
|
146
146
|
value: "",
|
|
147
147
|
placeholder: "Choose metadata…",
|
|
148
|
-
onChange: (
|
|
149
|
-
addCondition(value,
|
|
150
|
-
|
|
148
|
+
onChange: (field) => {
|
|
149
|
+
if (field) onChange(addCondition(value, field));
|
|
150
|
+
},
|
|
151
151
|
options: MATCH_FIELD_OPTIONS.filter(
|
|
152
152
|
(option) => available.includes(option.value)
|
|
153
153
|
),
|
|
154
|
-
|
|
154
|
+
allowCustomValue: false
|
|
155
155
|
}
|
|
156
156
|
)
|
|
157
157
|
] })
|
|
@@ -264,26 +264,6 @@ function PolicyIcon({
|
|
|
264
264
|
if (policy === "ask") return /* @__PURE__ */ jsx(UiQuestion, { className });
|
|
265
265
|
return /* @__PURE__ */ jsx(UiSparkles, { className });
|
|
266
266
|
}
|
|
267
|
-
function strategyLabel(rule) {
|
|
268
|
-
var _a, _b;
|
|
269
|
-
const preset = strategyPreset(rule);
|
|
270
|
-
if (preset !== "custom") {
|
|
271
|
-
return ((_a = STRATEGY_PRESETS.find((option) => option.value === preset)) == null ? void 0 : _a.label) ?? "All tools";
|
|
272
|
-
}
|
|
273
|
-
const fields = activeMatchFields(rule);
|
|
274
|
-
if (fields.length !== 1) {
|
|
275
|
-
return `Custom conditions · ${fields.length} conditions`;
|
|
276
|
-
}
|
|
277
|
-
const field = fields[0];
|
|
278
|
-
if (!field) return "Custom conditions";
|
|
279
|
-
const label = ((_b = MATCH_FIELD_OPTIONS.find((option) => option.value === field)) == null ? void 0 : _b.label) ?? field;
|
|
280
|
-
const value = conditionText(rule, field);
|
|
281
|
-
if (Array.isArray(rule[field])) {
|
|
282
|
-
return `Custom conditions · ${label} in ${rule[field].length} values`;
|
|
283
|
-
}
|
|
284
|
-
const displayValue = value === "true" ? "Yes" : value === "false" ? "No" : value;
|
|
285
|
-
return `Custom conditions · ${label} ${displayValue}`;
|
|
286
|
-
}
|
|
287
267
|
function policyLabel(policy) {
|
|
288
268
|
if (policy === "allow") return "On";
|
|
289
269
|
if (policy === "deny") return "Off";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionStrategiesEditor.js","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport { Select } from \"../../../components/select\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n conditionText,\n matchingTools,\n strategyPreset,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategyLabel(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n {strategyLabel(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Select\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(event) =>\n onChange(\n addCondition(value, event.target.value as MatchField),\n )\n }\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n className=\"border-dashed text-muted-foreground\"\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction strategyLabel(rule: PermissionRule): string {\n const preset = strategyPreset(rule);\n if (preset !== \"custom\") {\n return (\n STRATEGY_PRESETS.find((option) => option.value === preset)?.label ??\n \"All tools\"\n );\n }\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) {\n return `Custom conditions · ${fields.length} conditions`;\n }\n const field = fields[0];\n if (!field) return \"Custom conditions\";\n const label =\n MATCH_FIELD_OPTIONS.find((option) => option.value === field)?.label ??\n field;\n const value = conditionText(rule, field);\n if (Array.isArray(rule[field])) {\n return `Custom conditions · ${label} in ${rule[field].length} values`;\n }\n const displayValue =\n value === \"true\" ? \"Yes\" : value === \"false\" ? \"No\" : value;\n return `Custom conditions · ${label} ${displayValue}`;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PermissionStrategiesEditor.js","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n matchingTools,\n strategyPreset,\n strategySummary,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategySummary(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]\">\n {strategySummary(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Combobox\n ariaLabel=\"Add condition\"\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(field) => {\n if (field) onChange(addCondition(value, field as MatchField));\n }}\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n allowCustomValue={false}\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SessionUsage } from './SessionViewer.unified.js';
|
|
2
|
+
export interface SessionTokenSize {
|
|
3
|
+
model: string;
|
|
4
|
+
source: "local-estimate" | "provider-estimate" | "provider-count";
|
|
5
|
+
usage: SessionUsage;
|
|
6
|
+
totalTokens: number;
|
|
7
|
+
costUSD?: number;
|
|
8
|
+
coverage: {
|
|
9
|
+
partial: boolean;
|
|
10
|
+
framingIncluded: boolean;
|
|
11
|
+
excluded?: string[];
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface SessionTokenRowResult {
|
|
15
|
+
rowId: string;
|
|
16
|
+
attributed: boolean;
|
|
17
|
+
size?: SessionTokenSize;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SessionTokenSizingRequest {
|
|
21
|
+
sessionId: string;
|
|
22
|
+
revision?: number;
|
|
23
|
+
rowIds: string[];
|
|
24
|
+
method: "estimate" | "provider";
|
|
25
|
+
}
|
|
26
|
+
export interface SessionTokenSizingResult {
|
|
27
|
+
sessionId: string;
|
|
28
|
+
revision: number;
|
|
29
|
+
rows: SessionTokenRowResult[];
|
|
30
|
+
}
|
|
31
|
+
export type SessionTokenSizer = (request: SessionTokenSizingRequest, signal: AbortSignal) => Promise<SessionTokenSizingResult>;
|
|
32
|
+
//# sourceMappingURL=session-token-sizing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-token-sizing.d.ts","sourceRoot":"","sources":["../../../src/data/ai/session-token-sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IAClE,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const SessionTokenContext = react.createContext(void 0);
|
|
5
|
+
function useSessionTokenSizing(session, events, sizeTokens) {
|
|
6
|
+
const identity = typeof session === "object" && !Array.isArray(session) && session !== null && "id" in session ? session : void 0;
|
|
7
|
+
const sessionId = identity == null ? void 0 : identity.id;
|
|
8
|
+
const revision = identity == null ? void 0 : identity.revision;
|
|
9
|
+
const scope = JSON.stringify([sessionId, revision, identity == null ? void 0 : identity.model, identity == null ? void 0 : identity.modelMode]);
|
|
10
|
+
const keys = react.useMemo(() => new Map(events.map((event) => [event.id, JSON.stringify([scope, event.id, event.model, event.text, event.toolInput, event.toolResponse, event.file, event.raw])])), [events, scope]);
|
|
11
|
+
const [values, setValues] = react.useState({});
|
|
12
|
+
const current = react.useRef({ scope, keys });
|
|
13
|
+
current.current = { scope, keys };
|
|
14
|
+
const inFlight = react.useRef(/* @__PURE__ */ new Map());
|
|
15
|
+
const controllers = react.useRef(/* @__PURE__ */ new Set());
|
|
16
|
+
react.useEffect(() => {
|
|
17
|
+
const valid = new Set(keys.values());
|
|
18
|
+
for (const [key, controller] of inFlight.current) {
|
|
19
|
+
if (!valid.has(key)) {
|
|
20
|
+
controller.abort();
|
|
21
|
+
inFlight.current.delete(key);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
setValues((old) => Object.keys(old).every((key) => valid.has(key)) ? old : Object.fromEntries(Object.entries(old).filter(([key]) => valid.has(key))));
|
|
25
|
+
}, [keys]);
|
|
26
|
+
react.useEffect(() => () => {
|
|
27
|
+
for (const controller of controllers.current) controller.abort();
|
|
28
|
+
}, []);
|
|
29
|
+
const calculate = react.useCallback((rowIds, method) => {
|
|
30
|
+
if (!sizeTokens || !sessionId) return;
|
|
31
|
+
const requested = rowIds.flatMap((rowId) => {
|
|
32
|
+
const key = keys.get(rowId);
|
|
33
|
+
if (!key || inFlight.current.has(key)) return [];
|
|
34
|
+
const value = values[key];
|
|
35
|
+
if ((value == null ? void 0 : value.size) && (method === "estimate" || value.size.source !== "local-estimate")) return [];
|
|
36
|
+
return [{ rowId, key }];
|
|
37
|
+
});
|
|
38
|
+
if (requested.length === 0) return;
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
controllers.current.add(controller);
|
|
41
|
+
for (const { key } of requested) inFlight.current.set(key, controller);
|
|
42
|
+
setValues((old) => ({ ...old, ...Object.fromEntries(requested.map(({ rowId, key }) => [key, { ...old[key], rowId, attributed: false, pending: true }])) }));
|
|
43
|
+
void (async () => {
|
|
44
|
+
try {
|
|
45
|
+
const result = await sizeTokens({ sessionId, ...revision !== void 0 ? { revision } : {}, rowIds: requested.map(({ rowId }) => rowId), method }, controller.signal);
|
|
46
|
+
if (controller.signal.aborted || current.current.scope !== scope) return;
|
|
47
|
+
if (result.sessionId !== sessionId || revision !== void 0 && result.revision !== revision) throw new Error("Session changed while calculating tokens; retry on the current transcript.");
|
|
48
|
+
const returned = new Map(result.rows.map((row) => [row.rowId, row]));
|
|
49
|
+
setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, returned.get(rowId) ?? { rowId, attributed: false, error: "No token sizing result returned for this row." }])) }));
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (controller.signal.aborted || current.current.scope !== scope) return;
|
|
52
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
53
|
+
setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, { rowId, attributed: false, error: message }])) }));
|
|
54
|
+
} finally {
|
|
55
|
+
controllers.current.delete(controller);
|
|
56
|
+
for (const { key } of requested) if (inFlight.current.get(key) === controller) inFlight.current.delete(key);
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
}, [keys, revision, scope, sessionId, sizeTokens, values]);
|
|
60
|
+
const enabled = Boolean(sizeTokens && sessionId);
|
|
61
|
+
return {
|
|
62
|
+
context: enabled ? { state: (event) => {
|
|
63
|
+
const key = keys.get(event.id);
|
|
64
|
+
return key ? values[key] : void 0;
|
|
65
|
+
}, calculate } : void 0,
|
|
66
|
+
estimateAll: enabled ? () => calculate(events.filter((event) => !event.pending).map((event) => event.id), "estimate") : void 0,
|
|
67
|
+
calculateMissing: enabled ? () => calculate(events.filter((event) => !event.estimatedCost && !event.pending).map((event) => event.id), "provider") : void 0,
|
|
68
|
+
pending: Object.values(values).some((value) => value.pending)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
exports.SessionTokenContext = SessionTokenContext;
|
|
72
|
+
exports.useSessionTokenSizing = useSessionTokenSizing;
|
|
73
|
+
//# sourceMappingURL=use-session-token-sizing.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-session-token-sizing.cjs","sources":["../../../src/data/ai/use-session-token-sizing.ts"],"sourcesContent":["import { createContext, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { SessionEvent, SessionInput } from \"./SessionViewer.model\";\nimport type { SessionTokenRowResult, SessionTokenSizer } from \"./session-token-sizing\";\n\nexport interface RowTokenState extends SessionTokenRowResult { pending?: boolean }\ninterface TokenSizingContext {\n state: (event: SessionEvent) => RowTokenState | undefined;\n calculate: (rowIds: string[], method: \"estimate\" | \"provider\") => void;\n}\nexport const SessionTokenContext = createContext<TokenSizingContext | undefined>(undefined);\n\nexport function useSessionTokenSizing(session: SessionInput, events: SessionEvent[], sizeTokens?: SessionTokenSizer) {\n const identity = typeof session === \"object\" && !Array.isArray(session) && session !== null && \"id\" in session ? session : undefined;\n const sessionId = identity?.id;\n const revision = identity?.revision;\n const scope = JSON.stringify([sessionId, revision, identity?.model, identity?.modelMode]);\n const keys = useMemo(() => new Map(events.map((event) => [event.id, JSON.stringify([scope, event.id, event.model, event.text, event.toolInput, event.toolResponse, event.file, event.raw])])), [events, scope]);\n const [values, setValues] = useState<Record<string, RowTokenState>>({});\n const current = useRef({ scope, keys });\n current.current = { scope, keys };\n const inFlight = useRef(new Map<string, AbortController>());\n const controllers = useRef(new Set<AbortController>());\n\n useEffect(() => {\n const valid = new Set(keys.values());\n for (const [key, controller] of inFlight.current) {\n if (!valid.has(key)) { controller.abort(); inFlight.current.delete(key); }\n }\n setValues((old) => Object.keys(old).every((key) => valid.has(key)) ? old : Object.fromEntries(Object.entries(old).filter(([key]) => valid.has(key))));\n }, [keys]);\n useEffect(() => () => { for (const controller of controllers.current) controller.abort(); }, []);\n\n const calculate = useCallback((rowIds: string[], method: \"estimate\" | \"provider\") => {\n if (!sizeTokens || !sessionId) return;\n const requested = rowIds.flatMap((rowId) => {\n const key = keys.get(rowId);\n if (!key || inFlight.current.has(key)) return [];\n const value = values[key];\n if (value?.size && (method === \"estimate\" || value.size.source !== \"local-estimate\")) return [];\n return [{ rowId, key }];\n });\n if (requested.length === 0) return;\n const controller = new AbortController();\n controllers.current.add(controller);\n for (const { key } of requested) inFlight.current.set(key, controller);\n setValues((old) => ({ ...old, ...Object.fromEntries(requested.map(({ rowId, key }) => [key, { ...old[key], rowId, attributed: false, pending: true }])) }));\n void (async () => {\n try {\n const result = await sizeTokens({ sessionId, ...(revision !== undefined ? { revision } : {}), rowIds: requested.map(({ rowId }) => rowId), method }, controller.signal);\n if (controller.signal.aborted || current.current.scope !== scope) return;\n if (result.sessionId !== sessionId || (revision !== undefined && result.revision !== revision)) throw new Error(\"Session changed while calculating tokens; retry on the current transcript.\");\n const returned = new Map(result.rows.map((row) => [row.rowId, row]));\n setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, returned.get(rowId) ?? { rowId, attributed: false, error: \"No token sizing result returned for this row.\" }])) }));\n } catch (error) {\n if (controller.signal.aborted || current.current.scope !== scope) return;\n const message = error instanceof Error ? error.message : String(error);\n setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, { rowId, attributed: false, error: message }])) }));\n } finally {\n controllers.current.delete(controller);\n for (const { key } of requested) if (inFlight.current.get(key) === controller) inFlight.current.delete(key);\n }\n })();\n }, [keys, revision, scope, sessionId, sizeTokens, values]);\n\n const enabled = Boolean(sizeTokens && sessionId);\n return {\n context: enabled ? { state: (event: SessionEvent) => { const key = keys.get(event.id); return key ? values[key] : undefined; }, calculate } : undefined,\n estimateAll: enabled ? () => calculate(events.filter((event) => !event.pending).map((event) => event.id), \"estimate\") : undefined,\n calculateMissing: enabled ? () => calculate(events.filter((event) => !event.estimatedCost && !event.pending).map((event) => event.id), \"provider\") : undefined,\n pending: Object.values(values).some((value) => value.pending),\n };\n}\n"],"names":["createContext","useMemo","useState","useRef","useEffect","useCallback"],"mappings":";;;AASO,MAAM,sBAAsBA,MAAAA,cAA8C,MAAS;AAEnF,SAAS,sBAAsB,SAAuB,QAAwB,YAAgC;AACnH,QAAM,WAAW,OAAO,YAAY,YAAY,CAAC,MAAM,QAAQ,OAAO,KAAK,YAAY,QAAQ,QAAQ,UAAU,UAAU;AAC3H,QAAM,YAAY,qCAAU;AAC5B,QAAM,WAAW,qCAAU;AAC3B,QAAM,QAAQ,KAAK,UAAU,CAAC,WAAW,UAAU,qCAAU,OAAO,qCAAU,SAAS,CAAC;AACxF,QAAM,OAAOC,MAAAA,QAAQ,MAAM,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,UAAU,CAAC,OAAO,MAAM,IAAI,MAAM,OAAO,MAAM,MAAM,MAAM,WAAW,MAAM,cAAc,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC;AAC9M,QAAM,CAAC,QAAQ,SAAS,IAAIC,MAAAA,SAAwC,CAAA,CAAE;AACtE,QAAM,UAAUC,MAAAA,OAAO,EAAE,OAAO,MAAM;AACtC,UAAQ,UAAU,EAAE,OAAO,KAAA;AAC3B,QAAM,WAAWA,MAAAA,OAAO,oBAAI,KAA8B;AAC1D,QAAM,cAAcA,MAAAA,OAAO,oBAAI,KAAsB;AAErDC,QAAAA,UAAU,MAAM;AACd,UAAM,QAAQ,IAAI,IAAI,KAAK,QAAQ;AACnC,eAAW,CAAC,KAAK,UAAU,KAAK,SAAS,SAAS;AAChD,UAAI,CAAC,MAAM,IAAI,GAAG,GAAG;AAAE,mBAAW,MAAA;AAAS,iBAAS,QAAQ,OAAO,GAAG;AAAA,MAAG;AAAA,IAC3E;AACA,cAAU,CAAC,QAAQ,OAAO,KAAK,GAAG,EAAE,MAAM,CAAC,QAAQ,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,OAAO,YAAY,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,EACtJ,GAAG,CAAC,IAAI,CAAC;AACTA,QAAAA,UAAU,MAAM,MAAM;AAAE,eAAW,cAAc,YAAY,QAAS,YAAW,MAAA;AAAA,EAAS,GAAG,CAAA,CAAE;AAE/F,QAAM,YAAYC,MAAAA,YAAY,CAAC,QAAkB,WAAoC;AACnF,QAAI,CAAC,cAAc,CAAC,UAAW;AAC/B,UAAM,YAAY,OAAO,QAAQ,CAAC,UAAU;AAC1C,YAAM,MAAM,KAAK,IAAI,KAAK;AAC1B,UAAI,CAAC,OAAO,SAAS,QAAQ,IAAI,GAAG,UAAU,CAAA;AAC9C,YAAM,QAAQ,OAAO,GAAG;AACxB,WAAI,+BAAO,UAAS,WAAW,cAAc,MAAM,KAAK,WAAW,kBAAmB,QAAO,CAAA;AAC7F,aAAO,CAAC,EAAE,OAAO,KAAK;AAAA,IACxB,CAAC;AACD,QAAI,UAAU,WAAW,EAAG;AAC5B,UAAM,aAAa,IAAI,gBAAA;AACvB,gBAAY,QAAQ,IAAI,UAAU;AAClC,eAAW,EAAE,SAAS,oBAAoB,QAAQ,IAAI,KAAK,UAAU;AACrE,cAAU,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,OAAO,YAAY,UAAU,IAAI,CAAC,EAAE,OAAO,IAAA,MAAU,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,GAAG,OAAO,YAAY,OAAO,SAAS,KAAA,CAAM,CAAC,CAAC,IAAI;AAC1J,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,SAAS,MAAM,WAAW,EAAE,WAAW,GAAI,aAAa,SAAY,EAAE,aAAa,CAAA,GAAK,QAAQ,UAAU,IAAI,CAAC,EAAE,MAAA,MAAY,KAAK,GAAG,OAAA,GAAU,WAAW,MAAM;AACtK,YAAI,WAAW,OAAO,WAAW,QAAQ,QAAQ,UAAU,MAAO;AAClE,YAAI,OAAO,cAAc,aAAc,aAAa,UAAa,OAAO,aAAa,SAAW,OAAM,IAAI,MAAM,4EAA4E;AAC5L,cAAM,WAAW,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AACnE,kBAAU,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,OAAO,YAAY,UAAU,OAAO,CAAC,EAAE,OAAO,UAAU,QAAQ,QAAQ,KAAK,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,IAAA,MAAU,CAAC,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,OAAO,YAAY,OAAO,OAAO,iDAAiD,CAAC,CAAC,EAAA,EAAI;AAAA,MACnR,SAAS,OAAO;AACd,YAAI,WAAW,OAAO,WAAW,QAAQ,QAAQ,UAAU,MAAO;AAClE,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,kBAAU,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,OAAO,YAAY,UAAU,OAAO,CAAC,EAAE,OAAO,IAAA,MAAU,QAAQ,QAAQ,KAAK,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,IAAA,MAAU,CAAC,KAAK,EAAE,OAAO,YAAY,OAAO,OAAO,QAAA,CAAS,CAAC,CAAC,IAAI;AAAA,MACpN,UAAA;AACE,oBAAY,QAAQ,OAAO,UAAU;AACrC,mBAAW,EAAE,IAAA,KAAS,eAAe,SAAS,QAAQ,IAAI,GAAG,MAAM,WAAY,UAAS,QAAQ,OAAO,GAAG;AAAA,MAC5G;AAAA,IACF,GAAA;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,OAAO,WAAW,YAAY,MAAM,CAAC;AAEzD,QAAM,UAAU,QAAQ,cAAc,SAAS;AAC/C,SAAO;AAAA,IACL,SAAS,UAAU,EAAE,OAAO,CAAC,UAAwB;AAAE,YAAM,MAAM,KAAK,IAAI,MAAM,EAAE;AAAG,aAAO,MAAM,OAAO,GAAG,IAAI;AAAA,IAAW,GAAG,cAAc;AAAA,IAC9I,aAAa,UAAU,MAAM,UAAU,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,OAAO,EAAE,IAAI,CAAC,UAAU,MAAM,EAAE,GAAG,UAAU,IAAI;AAAA,IACxH,kBAAkB,UAAU,MAAM,UAAU,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,iBAAiB,CAAC,MAAM,OAAO,EAAE,IAAI,CAAC,UAAU,MAAM,EAAE,GAAG,UAAU,IAAI;AAAA,IACrJ,SAAS,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,OAAO;AAAA,EAAA;AAEhE;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SessionEvent, SessionInput } from './SessionViewer.model.js';
|
|
2
|
+
import { SessionTokenRowResult, SessionTokenSizer } from './session-token-sizing.js';
|
|
3
|
+
export interface RowTokenState extends SessionTokenRowResult {
|
|
4
|
+
pending?: boolean;
|
|
5
|
+
}
|
|
6
|
+
interface TokenSizingContext {
|
|
7
|
+
state: (event: SessionEvent) => RowTokenState | undefined;
|
|
8
|
+
calculate: (rowIds: string[], method: "estimate" | "provider") => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const SessionTokenContext: import('react').Context<TokenSizingContext | undefined>;
|
|
11
|
+
export declare function useSessionTokenSizing(session: SessionInput, events: SessionEvent[], sizeTokens?: SessionTokenSizer): {
|
|
12
|
+
context: {
|
|
13
|
+
state: (event: SessionEvent) => RowTokenState | undefined;
|
|
14
|
+
calculate: (rowIds: string[], method: "estimate" | "provider") => void;
|
|
15
|
+
} | undefined;
|
|
16
|
+
estimateAll: (() => void) | undefined;
|
|
17
|
+
calculateMissing: (() => void) | undefined;
|
|
18
|
+
pending: boolean;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=use-session-token-sizing.d.ts.map
|