@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../../lib/utils.js";
|
|
3
3
|
import { Icon } from "../Icon.js";
|
|
4
|
+
import { ModeBadge } from "./ToolPreferencesList.js";
|
|
4
5
|
import { UiChevronDown } from "../../icons/components/UiChevronDown.js";
|
|
5
6
|
import { UiChevronRight } from "../../icons/components/UiChevronRight.js";
|
|
6
7
|
function ToolDirectoryHeader({
|
|
@@ -8,8 +9,9 @@ function ToolDirectoryHeader({
|
|
|
8
9
|
count,
|
|
9
10
|
open,
|
|
10
11
|
variant,
|
|
12
|
+
mode,
|
|
11
13
|
onToggle,
|
|
12
|
-
|
|
14
|
+
onCycle
|
|
13
15
|
}) {
|
|
14
16
|
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-stretch", children: [
|
|
15
17
|
/* @__PURE__ */ jsx(
|
|
@@ -22,30 +24,24 @@ function ToolDirectoryHeader({
|
|
|
22
24
|
"flex shrink-0 items-center pl-2 text-muted-foreground hover:bg-muted",
|
|
23
25
|
variant === "child" && "text-foreground/80 hover:bg-accent/50"
|
|
24
26
|
),
|
|
25
|
-
children: /* @__PURE__ */ jsx(
|
|
26
|
-
Icon,
|
|
27
|
-
{
|
|
28
|
-
icon: open ? UiChevronDown : UiChevronRight,
|
|
29
|
-
className: "size-3"
|
|
30
|
-
}
|
|
31
|
-
)
|
|
27
|
+
children: /* @__PURE__ */ jsx(Icon, { icon: open ? UiChevronDown : UiChevronRight, className: "size-3" })
|
|
32
28
|
}
|
|
33
29
|
),
|
|
34
30
|
/* @__PURE__ */ jsxs(
|
|
35
31
|
"button",
|
|
36
32
|
{
|
|
37
33
|
type: "button",
|
|
38
|
-
"aria-label": `${label} ${count}
|
|
39
|
-
title:
|
|
40
|
-
onClick:
|
|
34
|
+
"aria-label": onCycle ? `Toggle ${label} group` : `${label} ${count}`,
|
|
35
|
+
title: onCycle ? `Cycle all ${count} tools in ${label}` : void 0,
|
|
36
|
+
onClick: onCycle ?? onToggle,
|
|
41
37
|
className: cn(
|
|
42
38
|
"flex min-w-0 flex-1 items-center gap-1 pr-2 text-left text-muted-foreground hover:bg-muted",
|
|
43
39
|
variant === "section" ? "py-1 text-[10px] font-semibold uppercase tracking-wider" : "py-1 text-[11px] font-medium text-foreground/80 hover:bg-accent/50"
|
|
44
40
|
),
|
|
45
41
|
children: [
|
|
46
42
|
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: label }),
|
|
47
|
-
|
|
48
|
-
/* @__PURE__ */ jsx(
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums text-[10px] text-muted-foreground/70", children: count }),
|
|
44
|
+
mode && /* @__PURE__ */ jsx(ModeBadge, { mode })
|
|
49
45
|
]
|
|
50
46
|
}
|
|
51
47
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSchemaBrowser.directory-header.js","sources":["../../../src/data/ai/ToolSchemaBrowser.directory-header.tsx"],"sourcesContent":["import { UiChevronDown, UiChevronRight } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\n\nexport function ToolDirectoryHeader({\n label,\n count,\n open,\n variant,\n onToggle,\n
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.directory-header.js","sources":["../../../src/data/ai/ToolSchemaBrowser.directory-header.tsx"],"sourcesContent":["import { UiChevronDown, UiChevronRight } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\nimport type { BadgePolicy } from \"./ToolPreferences.model\";\nimport { ModeBadge } from \"./ToolPreferencesList\";\n\nexport function ToolDirectoryHeader({\n label,\n count,\n open,\n variant,\n mode,\n onToggle,\n onCycle,\n}: {\n label: string;\n count: number;\n open: boolean;\n variant: \"section\" | \"child\";\n mode?: BadgePolicy | undefined;\n onToggle: () => void;\n /** Click-to-toggle policy for every tool under this directory. */\n onCycle?: (() => void) | undefined;\n}) {\n return (\n <div className=\"flex min-w-0 flex-1 items-stretch\">\n <button\n type=\"button\"\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`}\n onClick={onToggle}\n className={cn(\n \"flex shrink-0 items-center pl-2 text-muted-foreground hover:bg-muted\",\n variant === \"child\" && \"text-foreground/80 hover:bg-accent/50\",\n )}\n >\n <Icon icon={open ? UiChevronDown : UiChevronRight} className=\"size-3\" />\n </button>\n <button\n type=\"button\"\n aria-label={onCycle ? `Toggle ${label} group` : `${label} ${count}`}\n title={onCycle ? `Cycle all ${count} tools in ${label}` : undefined}\n onClick={onCycle ?? onToggle}\n className={cn(\n \"flex min-w-0 flex-1 items-center gap-1 pr-2 text-left text-muted-foreground hover:bg-muted\",\n variant === \"section\"\n ? \"py-1 text-[10px] font-semibold uppercase tracking-wider\"\n : \"py-1 text-[11px] font-medium text-foreground/80 hover:bg-accent/50\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n <span className=\"tabular-nums text-[10px] text-muted-foreground/70\">\n {count}\n </span>\n {mode && <ModeBadge mode={mode} />}\n </button>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AAMO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASG;AACD,SACE,qBAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAY,GAAG,OAAO,aAAa,QAAQ,IAAI,KAAK;AAAA,QACpD,SAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA,YAAY,WAAW;AAAA,QAAA;AAAA,QAGzB,8BAAC,MAAA,EAAK,MAAM,OAAO,gBAAgB,gBAAgB,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAExE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAY,UAAU,UAAU,KAAK,WAAW,GAAG,KAAK,IAAI,KAAK;AAAA,QACjE,OAAO,UAAU,aAAa,KAAK,aAAa,KAAK,KAAK;AAAA,QAC1D,SAAS,WAAW;AAAA,QACpB,WAAW;AAAA,UACT;AAAA,UACA,YAAY,YACR,4DACA;AAAA,QAAA;AAAA,QAGN,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,WAAU,2BAA2B,UAAA,OAAM;AAAA,UACjD,oBAAC,QAAA,EAAK,WAAU,qDACb,UAAA,OACH;AAAA,UACC,QAAQ,oBAAC,WAAA,EAAU,KAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAClC,GACF;AAEJ;"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useMemo } from "react";
|
|
3
|
-
import { useListMenuSelection } from "../../components/use-list-menu-selection.js";
|
|
4
3
|
import { SplitPane } from "../../layout/SplitPane.js";
|
|
5
4
|
import { cn } from "../../lib/utils.js";
|
|
6
5
|
import { ToolSchemaBrowserDetail } from "./ToolSchemaBrowser.detail.js";
|
|
7
6
|
import { EMPTY_TOOL_HINT_FILTERS, filterToolSchemaBrowserTools, buildToolSchemaSections } from "./ToolSchemaBrowser.model.js";
|
|
8
7
|
import { ToolSchemaBrowserSidebar } from "./ToolSchemaBrowser.sidebar.js";
|
|
8
|
+
import { ToolPermissionStrategies } from "./ToolSchemaBrowser.strategies.js";
|
|
9
9
|
function ToolSchemaBrowser({
|
|
10
10
|
tools,
|
|
11
11
|
value,
|
|
12
12
|
onRule,
|
|
13
|
+
rules,
|
|
14
|
+
onRulesChange,
|
|
13
15
|
className
|
|
14
16
|
}) {
|
|
15
17
|
var _a;
|
|
@@ -23,9 +25,6 @@ function ToolSchemaBrowser({
|
|
|
23
25
|
const [selected, setSelected] = useState(
|
|
24
26
|
((_a = tools[0]) == null ? void 0 : _a.name) ?? null
|
|
25
27
|
);
|
|
26
|
-
const selection = useListMenuSelection({
|
|
27
|
-
keys: tools.map((tool) => tool.name)
|
|
28
|
-
});
|
|
29
28
|
const filtered = useMemo(
|
|
30
29
|
() => filterToolSchemaBrowserTools(tools, query, filters),
|
|
31
30
|
[filters, query, tools]
|
|
@@ -47,55 +46,55 @@ function ToolSchemaBrowser({
|
|
|
47
46
|
...current,
|
|
48
47
|
[key]: value2
|
|
49
48
|
}));
|
|
50
|
-
return /* @__PURE__ */
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
);
|
|
49
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex min-h-0 flex-col gap-2", className), children: [
|
|
50
|
+
rules && onRulesChange && /* @__PURE__ */ jsx(
|
|
51
|
+
ToolPermissionStrategies,
|
|
52
|
+
{
|
|
53
|
+
rules,
|
|
54
|
+
tools,
|
|
55
|
+
onRulesChange
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden rounded-md border border-border bg-background", children: /* @__PURE__ */ jsx(
|
|
59
|
+
SplitPane,
|
|
60
|
+
{
|
|
61
|
+
defaultSplit: 34,
|
|
62
|
+
minLeft: 24,
|
|
63
|
+
minRight: 42,
|
|
64
|
+
className: "min-h-0",
|
|
65
|
+
leftClass: "flex min-h-0 flex-col overflow-hidden",
|
|
66
|
+
rightClass: "min-h-0 overflow-y-auto",
|
|
67
|
+
left: /* @__PURE__ */ jsx(
|
|
68
|
+
ToolSchemaBrowserSidebar,
|
|
69
|
+
{
|
|
70
|
+
query,
|
|
71
|
+
view,
|
|
72
|
+
filters,
|
|
73
|
+
sections,
|
|
74
|
+
active,
|
|
75
|
+
filteredCount: filtered.length,
|
|
76
|
+
isOpen,
|
|
77
|
+
value,
|
|
78
|
+
onRule,
|
|
79
|
+
onQueryChange: setQuery,
|
|
80
|
+
onViewChange: setView,
|
|
81
|
+
onFilterChange: updateFilter,
|
|
82
|
+
onClearFilters: () => setFilters({ ...EMPTY_TOOL_HINT_FILTERS }),
|
|
83
|
+
onToggle: toggle,
|
|
84
|
+
onSelect: setSelected
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
right: active ? /* @__PURE__ */ jsx(
|
|
88
|
+
ToolSchemaBrowserDetail,
|
|
89
|
+
{
|
|
90
|
+
tool: active,
|
|
91
|
+
tab,
|
|
92
|
+
onTabChange: setTab
|
|
93
|
+
}
|
|
94
|
+
) : /* @__PURE__ */ jsx("div", { className: "px-3 py-8 text-center text-xs text-muted-foreground", children: "No tools" })
|
|
95
|
+
}
|
|
96
|
+
) })
|
|
97
|
+
] });
|
|
99
98
|
}
|
|
100
99
|
export {
|
|
101
100
|
ToolSchemaBrowser
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSchemaBrowser.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport type { PermissionPolicy, PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolSchemaBrowserDetail } from \"./ToolSchemaBrowser.detail\";\nimport {\n EMPTY_TOOL_HINT_FILTERS,\n buildToolSchemaSections,\n filterToolSchemaBrowserTools,\n type ToolHintFilter,\n type ToolHintFilters,\n type ToolHintKey,\n type ToolSchemaBrowserTab,\n type ToolSchemaViewMode,\n} from \"./ToolSchemaBrowser.model\";\nimport { ToolSchemaBrowserSidebar } from \"./ToolSchemaBrowser.sidebar\";\nimport { ToolPermissionStrategies } from \"./ToolSchemaBrowser.strategies\";\n\nexport type ToolSchemaBrowserProps = {\n tools: ToolMeta[];\n /** Server-resolved effective permission shown beside each tool. */\n value?: Record<string, ToolPolicy> | undefined;\n /** Enables click-to-toggle badges; emits one ordered policy rule per click. */\n onRule?: ((rule: PermissionRule) => void) | undefined;\n /** Saved rules; with `onRulesChange`, shows the collapsed strategy editor. */\n rules?: PermissionPolicy | undefined;\n onRulesChange?: ((rules: PermissionPolicy) => void) | undefined;\n className?: string;\n};\n\nexport function ToolSchemaBrowser({\n tools,\n value,\n onRule,\n rules,\n onRulesChange,\n className,\n}: ToolSchemaBrowserProps) {\n const [query, setQuery] = useState(\"\");\n const [view, setView] = useState<ToolSchemaViewMode>(\"group\");\n const [tab, setTab] = useState<ToolSchemaBrowserTab>(\"schema\");\n const [filters, setFilters] = useState<ToolHintFilters>(\n EMPTY_TOOL_HINT_FILTERS,\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set());\n const [selected, setSelected] = useState<string | null>(\n tools[0]?.name ?? null,\n );\n\n const filtered = useMemo(\n () => filterToolSchemaBrowserTools(tools, query, filters),\n [filters, query, tools],\n );\n const searching =\n query.trim().length > 0 ||\n Object.values(filters).some((value) => value !== \"any\");\n const active =\n filtered.find((tool) => tool.name === selected) ?? filtered[0] ?? tools[0];\n const sections = useMemo(\n () => buildToolSchemaSections(filtered, view),\n [filtered, view],\n );\n\n const toggle = (key: string) =>\n setCollapsed((previous) => {\n const next = new Set(previous);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n const isOpen = (key: string) => searching || !collapsed.has(key);\n const updateFilter = (key: ToolHintKey, value: ToolHintFilter) =>\n setFilters((current) => ({\n ...current,\n [key]: value,\n }));\n\n return (\n <div className={cn(\"flex min-h-0 flex-col gap-2\", className)}>\n {rules && onRulesChange && (\n <ToolPermissionStrategies\n rules={rules}\n tools={tools}\n onRulesChange={onRulesChange}\n />\n )}\n <div className=\"min-h-0 flex-1 overflow-hidden rounded-md border border-border bg-background\">\n <SplitPane\n defaultSplit={34}\n minLeft={24}\n minRight={42}\n className=\"min-h-0\"\n leftClass=\"flex min-h-0 flex-col overflow-hidden\"\n rightClass=\"min-h-0 overflow-y-auto\"\n left={\n <ToolSchemaBrowserSidebar\n query={query}\n view={view}\n filters={filters}\n sections={sections}\n active={active}\n filteredCount={filtered.length}\n isOpen={isOpen}\n value={value}\n onRule={onRule}\n onQueryChange={setQuery}\n onViewChange={setView}\n onFilterChange={updateFilter}\n onClearFilters={() => setFilters({ ...EMPTY_TOOL_HINT_FILTERS })}\n onToggle={toggle}\n onSelect={setSelected}\n />\n }\n right={\n active ? (\n <ToolSchemaBrowserDetail\n tool={active}\n tab={tab}\n onTabChange={setTab}\n />\n ) : (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No tools\n </div>\n )\n }\n />\n </div>\n </div>\n );\n}\n"],"names":["value"],"mappings":";;;;;;;;AA+BO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,MAAM,OAAO,IAAI,SAA6B,OAAO;AAC5D,QAAM,CAAC,KAAK,MAAM,IAAI,SAA+B,QAAQ;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAI;AAAA,IAC5B;AAAA,EAAA;AAEF,QAAM,CAAC,WAAW,YAAY,IAAI,SAAsB,MAAM,oBAAI,KAAK;AACvE,QAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B,WAAM,CAAC,MAAP,mBAAU,SAAQ;AAAA,EAAA;AAGpB,QAAM,WAAW;AAAA,IACf,MAAM,6BAA6B,OAAO,OAAO,OAAO;AAAA,IACxD,CAAC,SAAS,OAAO,KAAK;AAAA,EAAA;AAExB,QAAM,YACJ,MAAM,KAAA,EAAO,SAAS,KACtB,OAAO,OAAO,OAAO,EAAE,KAAK,CAACA,WAAUA,WAAU,KAAK;AACxD,QAAM,SACJ,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,QAAQ,KAAK,SAAS,CAAC,KAAK,MAAM,CAAC;AAC3E,QAAM,WAAW;AAAA,IACf,MAAM,wBAAwB,UAAU,IAAI;AAAA,IAC5C,CAAC,UAAU,IAAI;AAAA,EAAA;AAGjB,QAAM,SAAS,CAAC,QACd,aAAa,CAAC,aAAa;AACzB,UAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,QAAI,KAAK,IAAI,GAAG,EAAG,MAAK,OAAO,GAAG;AAAA,QAC7B,MAAK,IAAI,GAAG;AACjB,WAAO;AAAA,EACT,CAAC;AACH,QAAM,SAAS,CAAC,QAAgB,aAAa,CAAC,UAAU,IAAI,GAAG;AAC/D,QAAM,eAAe,CAAC,KAAkBA,WACtC,WAAW,CAAC,aAAa;AAAA,IACvB,GAAG;AAAA,IACH,CAAC,GAAG,GAAGA;AAAAA,EAAA,EACP;AAEJ,8BACG,OAAA,EAAI,WAAW,GAAG,+BAA+B,SAAS,GACxD,UAAA;AAAA,IAAA,SAAS,iBACR;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,oBAAC,OAAA,EAAI,WAAU,gFACb,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAc;AAAA,QACd,SAAS;AAAA,QACT,UAAU;AAAA,QACV,WAAU;AAAA,QACV,WAAU;AAAA,QACV,YAAW;AAAA,QACX,MACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,eAAe,SAAS;AAAA,YACxB;AAAA,YACA;AAAA,YACA;AAAA,YACA,eAAe;AAAA,YACf,cAAc;AAAA,YACd,gBAAgB;AAAA,YAChB,gBAAgB,MAAM,WAAW,EAAE,GAAG,yBAAyB;AAAA,YAC/D,UAAU;AAAA,YACV,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGd,OACE,SACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN;AAAA,YACA,aAAa;AAAA,UAAA;AAAA,QAAA,IAGf,oBAAC,OAAA,EAAI,WAAU,uDAAsD,UAAA,WAAA,CAErE;AAAA,MAAA;AAAA,IAAA,EAGN,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const ToolPreferences_model = require("./ToolPreferences.model.cjs");
|
|
3
4
|
const TOOL_HINTS = [
|
|
4
5
|
{ key: "readOnlyHint", label: "Read only" },
|
|
5
6
|
{ key: "destructiveHint", label: "Destructive" },
|
|
@@ -85,46 +86,37 @@ function buildToolSchemaSections(tools, view) {
|
|
|
85
86
|
function directoryPermissionRule({
|
|
86
87
|
tools,
|
|
87
88
|
view,
|
|
88
|
-
depth
|
|
89
|
+
depth,
|
|
90
|
+
policy
|
|
89
91
|
}) {
|
|
90
92
|
const group = singleDirectoryValue(tools, "group");
|
|
91
93
|
const parent = singleDirectoryValue(tools, "parent");
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return { name: tools.map((tool) => tool.name).sort(), policy: "ask" };
|
|
94
|
+
const facets = depth === "section" ? view === "group" ? { group } : { parent } : { group, parent };
|
|
95
|
+
if (!facets.group && !facets.parent || depth === "child" && (!group || !parent)) {
|
|
96
|
+
return { name: tools.map((tool) => tool.name).sort(), policy };
|
|
96
97
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
return {
|
|
99
|
+
...facets.group ? { group: facets.group } : {},
|
|
100
|
+
...facets.parent ? { parent: facets.parent } : {},
|
|
101
|
+
policy
|
|
102
|
+
};
|
|
102
103
|
}
|
|
103
104
|
function singleDirectoryValue(tools, key) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
function updateSelectedTools(selected, visible) {
|
|
108
|
-
const next = new Set(selected);
|
|
109
|
-
const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));
|
|
110
|
-
for (const name of visible) {
|
|
111
|
-
if (allVisibleSelected) next.delete(name);
|
|
112
|
-
else next.add(name);
|
|
113
|
-
}
|
|
114
|
-
return [...next];
|
|
105
|
+
var _a;
|
|
106
|
+
const value = (_a = tools[0]) == null ? void 0 : _a[key];
|
|
107
|
+
return value && tools.every((tool) => tool[key] === value) ? value : void 0;
|
|
115
108
|
}
|
|
116
|
-
function
|
|
117
|
-
const
|
|
109
|
+
function directoryPolicyToggle(tools, value) {
|
|
110
|
+
const entries = tools.map(ToolPreferences_model.toolEntry);
|
|
118
111
|
return {
|
|
119
|
-
|
|
120
|
-
|
|
112
|
+
badge: ToolPreferences_model.commonMode(entries, value),
|
|
113
|
+
next: ToolPreferences_model.nextMode(ToolPreferences_model.groupToolPolicy(entries, value))
|
|
121
114
|
};
|
|
122
115
|
}
|
|
123
116
|
exports.EMPTY_TOOL_HINT_FILTERS = EMPTY_TOOL_HINT_FILTERS;
|
|
124
117
|
exports.TOOL_HINTS = TOOL_HINTS;
|
|
125
118
|
exports.buildToolSchemaSections = buildToolSchemaSections;
|
|
126
119
|
exports.directoryPermissionRule = directoryPermissionRule;
|
|
120
|
+
exports.directoryPolicyToggle = directoryPolicyToggle;
|
|
127
121
|
exports.filterToolSchemaBrowserTools = filterToolSchemaBrowserTools;
|
|
128
|
-
exports.selectedToolState = selectedToolState;
|
|
129
|
-
exports.updateSelectedTools = updateSelectedTools;
|
|
130
122
|
//# sourceMappingURL=ToolSchemaBrowser.model.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSchemaBrowser.model.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.model.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport {\n commonMode,\n groupToolPolicy,\n nextMode,\n toolEntry,\n type BadgePolicy,\n} from \"./ToolPreferences.model\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n policy,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n policy: ToolPolicy;\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const facets =\n depth === \"section\"\n ? view === \"group\"\n ? { group }\n : { parent }\n : { group, parent };\n // Both facets must identify a child; a missing facet would cover siblings.\n if (\n (!facets.group && !facets.parent) ||\n (depth === \"child\" && (!group || !parent))\n ) {\n return { name: tools.map((tool) => tool.name).sort(), policy };\n }\n return {\n ...(facets.group ? { group: facets.group } : {}),\n ...(facets.parent ? { parent: facets.parent } : {}),\n policy,\n };\n}\n\nfunction singleDirectoryValue(\n tools: ToolMeta[],\n key: \"group\" | \"parent\",\n): string | undefined {\n const value = tools[0]?.[key];\n return value && tools.every((tool) => tool[key] === value) ? value : undefined;\n}\n\n/** The badge a directory shows and the rule a click on it emits: one cycle step\n * past its most restrictive member, matching the quick menu's group toggle. */\nexport function directoryPolicyToggle(\n tools: ToolMeta[],\n value: Record<string, ToolPolicy>,\n): { badge: BadgePolicy; next: ToolPolicy } {\n const entries = tools.map(toolEntry);\n return {\n badge: commonMode(entries, value),\n next: nextMode(groupToolPolicy(entries, value)),\n };\n}\n"],"names":["toolEntry","commonMode","nextMode","groupToolPolicy"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PermissionRule } from '../chat/tool-policy.js';
|
|
2
|
-
import { ToolMeta } from '../chat/types.js';
|
|
2
|
+
import { ToolMeta, ToolPolicy } from '../chat/types.js';
|
|
3
|
+
import { BadgePolicy } from './ToolPreferences.model.js';
|
|
3
4
|
export type ToolSchemaViewMode = "group" | "tree";
|
|
4
5
|
export type ToolSchemaBrowserTab = "schema" | "json";
|
|
5
6
|
export type ToolHintKey = "readOnlyHint" | "destructiveHint" | "idempotentHint" | "openWorldHint";
|
|
@@ -22,14 +23,16 @@ export declare function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilt
|
|
|
22
23
|
export declare function toolHintFilterLabel(value: ToolHintFilter): string;
|
|
23
24
|
export declare function filterToolSchemaBrowserTools(tools: ToolMeta[], query: string, filters: ToolHintFilters): ToolMeta[];
|
|
24
25
|
export declare function buildToolSchemaSections(tools: ToolMeta[], view: ToolSchemaViewMode): ToolSection[];
|
|
25
|
-
export declare function directoryPermissionRule({ tools, view, depth, }: {
|
|
26
|
+
export declare function directoryPermissionRule({ tools, view, depth, policy, }: {
|
|
26
27
|
tools: ToolMeta[];
|
|
27
28
|
view: ToolSchemaViewMode;
|
|
28
29
|
depth: "section" | "child";
|
|
30
|
+
policy: ToolPolicy;
|
|
29
31
|
}): PermissionRule;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
/** The badge a directory shows and the rule a click on it emits: one cycle step
|
|
33
|
+
* past its most restrictive member, matching the quick menu's group toggle. */
|
|
34
|
+
export declare function directoryPolicyToggle(tools: ToolMeta[], value: Record<string, ToolPolicy>): {
|
|
35
|
+
badge: BadgePolicy;
|
|
36
|
+
next: ToolPolicy;
|
|
34
37
|
};
|
|
35
38
|
//# sourceMappingURL=ToolSchemaBrowser.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSchemaBrowser.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,CAAC;AACpB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKjE,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAKrC,CAAC;AAKF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAIzE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAIjE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,GACvB,QAAQ,EAAE,CAuBZ;AA6BD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,kBAAkB,GACvB,WAAW,EAAE,CAkCf;AAED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,GACP,EAAE;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;CACpB,GAAG,cAAc,CAqBjB;AAUD;gFACgF;AAChF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAM1C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toolEntry, nextMode, groupToolPolicy, commonMode } from "./ToolPreferences.model.js";
|
|
1
2
|
const TOOL_HINTS = [
|
|
2
3
|
{ key: "readOnlyHint", label: "Read only" },
|
|
3
4
|
{ key: "destructiveHint", label: "Destructive" },
|
|
@@ -83,39 +84,31 @@ function buildToolSchemaSections(tools, view) {
|
|
|
83
84
|
function directoryPermissionRule({
|
|
84
85
|
tools,
|
|
85
86
|
view,
|
|
86
|
-
depth
|
|
87
|
+
depth,
|
|
88
|
+
policy
|
|
87
89
|
}) {
|
|
88
90
|
const group = singleDirectoryValue(tools, "group");
|
|
89
91
|
const parent = singleDirectoryValue(tools, "parent");
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return { name: tools.map((tool) => tool.name).sort(), policy: "ask" };
|
|
92
|
+
const facets = depth === "section" ? view === "group" ? { group } : { parent } : { group, parent };
|
|
93
|
+
if (!facets.group && !facets.parent || depth === "child" && (!group || !parent)) {
|
|
94
|
+
return { name: tools.map((tool) => tool.name).sort(), policy };
|
|
94
95
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
return {
|
|
97
|
+
...facets.group ? { group: facets.group } : {},
|
|
98
|
+
...facets.parent ? { parent: facets.parent } : {},
|
|
99
|
+
policy
|
|
100
|
+
};
|
|
100
101
|
}
|
|
101
102
|
function singleDirectoryValue(tools, key) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
function updateSelectedTools(selected, visible) {
|
|
106
|
-
const next = new Set(selected);
|
|
107
|
-
const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));
|
|
108
|
-
for (const name of visible) {
|
|
109
|
-
if (allVisibleSelected) next.delete(name);
|
|
110
|
-
else next.add(name);
|
|
111
|
-
}
|
|
112
|
-
return [...next];
|
|
103
|
+
var _a;
|
|
104
|
+
const value = (_a = tools[0]) == null ? void 0 : _a[key];
|
|
105
|
+
return value && tools.every((tool) => tool[key] === value) ? value : void 0;
|
|
113
106
|
}
|
|
114
|
-
function
|
|
115
|
-
const
|
|
107
|
+
function directoryPolicyToggle(tools, value) {
|
|
108
|
+
const entries = tools.map(toolEntry);
|
|
116
109
|
return {
|
|
117
|
-
|
|
118
|
-
|
|
110
|
+
badge: commonMode(entries, value),
|
|
111
|
+
next: nextMode(groupToolPolicy(entries, value))
|
|
119
112
|
};
|
|
120
113
|
}
|
|
121
114
|
export {
|
|
@@ -123,8 +116,7 @@ export {
|
|
|
123
116
|
TOOL_HINTS,
|
|
124
117
|
buildToolSchemaSections,
|
|
125
118
|
directoryPermissionRule,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
updateSelectedTools
|
|
119
|
+
directoryPolicyToggle,
|
|
120
|
+
filterToolSchemaBrowserTools
|
|
129
121
|
};
|
|
130
122
|
//# sourceMappingURL=ToolSchemaBrowser.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSchemaBrowser.model.js","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.model.js","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport {\n commonMode,\n groupToolPolicy,\n nextMode,\n toolEntry,\n type BadgePolicy,\n} from \"./ToolPreferences.model\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n policy,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n policy: ToolPolicy;\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const facets =\n depth === \"section\"\n ? view === \"group\"\n ? { group }\n : { parent }\n : { group, parent };\n // Both facets must identify a child; a missing facet would cover siblings.\n if (\n (!facets.group && !facets.parent) ||\n (depth === \"child\" && (!group || !parent))\n ) {\n return { name: tools.map((tool) => tool.name).sort(), policy };\n }\n return {\n ...(facets.group ? { group: facets.group } : {}),\n ...(facets.parent ? { parent: facets.parent } : {}),\n policy,\n };\n}\n\nfunction singleDirectoryValue(\n tools: ToolMeta[],\n key: \"group\" | \"parent\",\n): string | undefined {\n const value = tools[0]?.[key];\n return value && tools.every((tool) => tool[key] === value) ? value : undefined;\n}\n\n/** The badge a directory shows and the rule a click on it emits: one cycle step\n * past its most restrictive member, matching the quick menu's group toggle. */\nexport function directoryPolicyToggle(\n tools: ToolMeta[],\n value: Record<string, ToolPolicy>,\n): { badge: BadgePolicy; next: ToolPolicy } {\n const entries = tools.map(toolEntry);\n return {\n badge: commonMode(entries, value),\n next: nextMode(groupToolPolicy(entries, value)),\n };\n}\n"],"names":[],"mappings":"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"}
|