@flanksource/clicky-ui 0.3.44 → 0.3.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/ai.cjs +4 -2
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +3 -1
- package/dist/components/MdxEditorField.cjs +40 -22
- package/dist/components/MdxEditorField.cjs.map +1 -1
- package/dist/components/MdxEditorField.d.ts.map +1 -1
- package/dist/components/MdxEditorField.js +41 -23
- package/dist/components/MdxEditorField.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +6 -1
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
- package/dist/components/json-schema-form-item-summary.js +6 -1
- package/dist/components/json-schema-form-item-summary.js.map +1 -1
- package/dist/data/AccessMark.cjs +23 -0
- package/dist/data/AccessMark.cjs.map +1 -0
- package/dist/data/AccessMark.d.ts +11 -0
- package/dist/data/AccessMark.d.ts.map +1 -0
- package/dist/data/AccessMark.js +23 -0
- package/dist/data/AccessMark.js.map +1 -0
- package/dist/data/CodeBlock.cjs +3 -2
- package/dist/data/CodeBlock.cjs.map +1 -1
- package/dist/data/CodeBlock.d.ts +3 -1
- package/dist/data/CodeBlock.d.ts.map +1 -1
- package/dist/data/CodeBlock.js +3 -2
- package/dist/data/CodeBlock.js.map +1 -1
- package/dist/data/CodeDiff.cjs +116 -23
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.d.ts +26 -0
- package/dist/data/CodeDiff.d.ts.map +1 -1
- package/dist/data/CodeDiff.js +116 -23
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/GraphDiagram.cjs +75 -11
- package/dist/data/GraphDiagram.cjs.map +1 -1
- package/dist/data/GraphDiagram.d.ts +17 -2
- package/dist/data/GraphDiagram.d.ts.map +1 -1
- package/dist/data/GraphDiagram.js +76 -12
- package/dist/data/GraphDiagram.js.map +1 -1
- package/dist/data/GraphDiagramGroups.cjs +100 -0
- package/dist/data/GraphDiagramGroups.cjs.map +1 -0
- package/dist/data/GraphDiagramGroups.d.ts +24 -0
- package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
- package/dist/data/GraphDiagramGroups.js +100 -0
- package/dist/data/GraphDiagramGroups.js.map +1 -0
- package/dist/data/GraphDiagramNodes.cjs +46 -51
- package/dist/data/GraphDiagramNodes.cjs.map +1 -1
- package/dist/data/GraphDiagramNodes.d.ts +8 -9
- package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
- package/dist/data/GraphDiagramNodes.js +46 -51
- package/dist/data/GraphDiagramNodes.js.map +1 -1
- package/dist/data/JsonView.cjs +118 -49
- package/dist/data/JsonView.cjs.map +1 -1
- package/dist/data/JsonView.d.ts +13 -10
- package/dist/data/JsonView.d.ts.map +1 -1
- package/dist/data/JsonView.js +118 -49
- package/dist/data/JsonView.js.map +1 -1
- package/dist/data/MarkdownEditor.cjs +2 -2
- package/dist/data/MarkdownEditor.cjs.map +1 -1
- package/dist/data/MarkdownEditor.js +2 -2
- package/dist/data/MarkdownEditor.js.map +1 -1
- package/dist/data/TreeNode.cjs +1 -1
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +1 -1
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.js +91 -250
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
- package/dist/data/ai/ChatButton.cjs +2 -0
- package/dist/data/ai/ChatButton.cjs.map +1 -1
- package/dist/data/ai/ChatButton.d.ts +1 -1
- package/dist/data/ai/ChatButton.d.ts.map +1 -1
- package/dist/data/ai/ChatButton.js +2 -0
- package/dist/data/ai/ChatButton.js.map +1 -1
- package/dist/data/ai/ChatFab.cjs +5 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts +5 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +5 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +2 -8
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +2 -8
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.js +0 -5
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
- package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.js +3 -6
- package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
- package/dist/data/ai/SessionViewer.cjs +13 -4
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +5 -1
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +1 -1
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.header.js +1 -1
- package/dist/data/ai/SessionViewer.header.js.map +1 -1
- package/dist/data/ai/SessionViewer.js +13 -4
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +2 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +1 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +2 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +41 -27
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +41 -27
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
- package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
- package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tokens.js +35 -0
- package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
- package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
- package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
- package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
- package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.js +3 -1
- package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.js +55 -35
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.cjs +18 -1
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
- package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.js +18 -1
- package/dist/data/ai/SessionViewerMenu.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +149 -143
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +20 -6
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +151 -146
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +14 -10
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +15 -11
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +1 -0
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +2 -1
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
- package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
- package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.js +53 -54
- package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
- package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
- package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
- package/dist/data/ai/index.d.ts +2 -2
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
- package/dist/data/ai/session-token-sizing.d.ts +32 -0
- package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
- package/dist/data/ai/use-session-token-sizing.cjs +73 -0
- package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
- package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
- package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
- package/dist/data/ai/use-session-token-sizing.js +73 -0
- package/dist/data/ai/use-session-token-sizing.js.map +1 -0
- package/dist/data/call-graph/CallGraph.cjs +269 -0
- package/dist/data/call-graph/CallGraph.cjs.map +1 -0
- package/dist/data/call-graph/CallGraph.d.ts +78 -0
- package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraph.js +269 -0
- package/dist/data/call-graph/CallGraph.js.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
- package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
- package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
- package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
- package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
- package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.js +51 -0
- package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
- package/dist/data/call-graph/CallGraphParts.cjs +204 -0
- package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
- package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphParts.js +204 -0
- package/dist/data/call-graph/CallGraphParts.js.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.js +198 -0
- package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
- package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
- package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.js +75 -0
- package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
- package/dist/data/call-graph/call-graph-labels.cjs +96 -0
- package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
- package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-labels.js +96 -0
- package/dist/data/call-graph/call-graph-labels.js.map +1 -0
- package/dist/data/call-graph/call-graph-model.cjs +312 -0
- package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-model.d.ts +138 -0
- package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-model.js +312 -0
- package/dist/data/call-graph/call-graph-model.js.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
- package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
- package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
- package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
- package/dist/data/call-graph/index.d.ts +7 -0
- package/dist/data/call-graph/index.d.ts.map +1 -0
- package/dist/data/call-graph/types.cjs +5 -0
- package/dist/data/call-graph/types.cjs.map +1 -0
- package/dist/data/call-graph/types.d.ts +140 -0
- package/dist/data/call-graph/types.d.ts.map +1 -0
- package/dist/data/call-graph/types.js +5 -0
- package/dist/data/call-graph/types.js.map +1 -0
- package/dist/data/call-graph/use-call-graph.cjs +93 -0
- package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
- package/dist/data/call-graph/use-call-graph.d.ts +24 -0
- package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
- package/dist/data/call-graph/use-call-graph.js +93 -0
- package/dist/data/call-graph/use-call-graph.js.map +1 -0
- package/dist/data/chat/Chat.cjs +39 -15
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +2 -2
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +2 -2
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +40 -16
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.bar.cjs +5 -8
- package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
- package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.bar.js +5 -8
- package/dist/data/chat/ContextMeter.bar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +18 -19
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +1 -1
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +18 -19
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/Conversation.cjs +2 -1
- package/dist/data/chat/Conversation.cjs.map +1 -1
- package/dist/data/chat/Conversation.d.ts +4 -1
- package/dist/data/chat/Conversation.d.ts.map +1 -1
- package/dist/data/chat/Conversation.js +2 -1
- package/dist/data/chat/Conversation.js.map +1 -1
- package/dist/data/chat/Message.cjs +39 -12
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +1 -1
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +40 -13
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +60 -5
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +7 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +60 -5
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +2 -2
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/tool-policy.cjs +59 -2
- package/dist/data/chat/tool-policy.cjs.map +1 -1
- package/dist/data/chat/tool-policy.d.ts +9 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.js +59 -2
- package/dist/data/chat/tool-policy.js.map +1 -1
- package/dist/data/chat/types.cjs +6 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +13 -4
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +7 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +11 -6
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts +0 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +11 -6
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/data-access.cjs +8 -0
- package/dist/data/data-access.cjs.map +1 -0
- package/dist/data/data-access.d.ts +5 -0
- package/dist/data/data-access.d.ts.map +1 -0
- package/dist/data/data-access.js +8 -0
- package/dist/data/data-access.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +3 -3
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/git/GitChangeList.cjs +6 -2
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -1
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +6 -2
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/graph-columns-layout.cjs +61 -14
- package/dist/data/graph-columns-layout.cjs.map +1 -1
- package/dist/data/graph-columns-layout.d.ts +42 -0
- package/dist/data/graph-columns-layout.d.ts.map +1 -1
- package/dist/data/graph-columns-layout.js +61 -14
- package/dist/data/graph-columns-layout.js.map +1 -1
- package/dist/data/graph-diagram-model.cjs +5 -0
- package/dist/data/graph-diagram-model.cjs.map +1 -1
- package/dist/data/graph-diagram-model.d.ts +24 -0
- package/dist/data/graph-diagram-model.d.ts.map +1 -1
- package/dist/data/graph-diagram-model.js +5 -0
- package/dist/data/graph-diagram-model.js.map +1 -1
- package/dist/data/graph-edge-routing.cjs +9 -3
- package/dist/data/graph-edge-routing.cjs.map +1 -1
- package/dist/data/graph-edge-routing.d.ts +2 -0
- package/dist/data/graph-edge-routing.d.ts.map +1 -1
- package/dist/data/graph-edge-routing.js +9 -3
- package/dist/data/graph-edge-routing.js.map +1 -1
- package/dist/data/graph-group-window.cjs +60 -0
- package/dist/data/graph-group-window.cjs.map +1 -0
- package/dist/data/graph-group-window.d.ts +33 -0
- package/dist/data/graph-group-window.d.ts.map +1 -0
- package/dist/data/graph-group-window.js +60 -0
- package/dist/data/graph-group-window.js.map +1 -0
- package/dist/data/json-view/JsonSource.cjs +84 -0
- package/dist/data/json-view/JsonSource.cjs.map +1 -0
- package/dist/data/json-view/JsonSource.d.ts +7 -0
- package/dist/data/json-view/JsonSource.d.ts.map +1 -0
- package/dist/data/json-view/JsonSource.js +84 -0
- package/dist/data/json-view/JsonSource.js.map +1 -0
- package/dist/data/json-view/parse-prefix.cjs +132 -0
- package/dist/data/json-view/parse-prefix.cjs.map +1 -0
- package/dist/data/json-view/parse-prefix.d.ts +11 -0
- package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
- package/dist/data/json-view/parse-prefix.js +132 -0
- package/dist/data/json-view/parse-prefix.js.map +1 -0
- package/dist/data/json-view/parse-source.cjs +62 -0
- package/dist/data/json-view/parse-source.cjs.map +1 -0
- package/dist/data/json-view/parse-source.d.ts +16 -0
- package/dist/data/json-view/parse-source.d.ts.map +1 -0
- package/dist/data/json-view/parse-source.js +62 -0
- package/dist/data/json-view/parse-source.js.map +1 -0
- package/dist/data/json-view/story-fixtures.d.ts +6 -0
- package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
- package/dist/data/json-view/types.d.ts +14 -0
- package/dist/data/json-view/types.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.cjs +2 -5
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +2 -4
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
- package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.js +2 -2
- package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +2 -5
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.js +5 -2
- package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
- package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.js +1 -5
- package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
- package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
- package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
- package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
- package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.js +8 -27
- package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
- package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.js +1 -5
- package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
- package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
- package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
- package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
- package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
- package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
- package/dist/data/use-group-windows.cjs +50 -0
- package/dist/data/use-group-windows.cjs.map +1 -0
- package/dist/data/use-group-windows.d.ts +27 -0
- package/dist/data/use-group-windows.d.ts.map +1 -0
- package/dist/data/use-group-windows.js +50 -0
- package/dist/data/use-group-windows.js.map +1 -0
- package/dist/data/use-pan-zoom.cjs +23 -10
- package/dist/data/use-pan-zoom.cjs.map +1 -1
- package/dist/data/use-pan-zoom.d.ts +16 -2
- package/dist/data/use-pan-zoom.d.ts.map +1 -1
- package/dist/data/use-pan-zoom.js +23 -10
- package/dist/data/use-pan-zoom.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +36 -2
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +5 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +35 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/event-hub.cjs +229 -0
- package/dist/hooks/event-hub.cjs.map +1 -0
- package/dist/hooks/event-hub.d.ts +26 -0
- package/dist/hooks/event-hub.d.ts.map +1 -0
- package/dist/hooks/event-hub.js +229 -0
- package/dist/hooks/event-hub.js.map +1 -0
- package/dist/hooks.cjs +2 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +2 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +40 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/Workspace.cjs +13 -4
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts +7 -2
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +13 -4
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/lib/permission-strategies.cjs +71 -11
- package/dist/lib/permission-strategies.cjs.map +1 -1
- package/dist/lib/permission-strategies.d.ts +3 -0
- package/dist/lib/permission-strategies.d.ts.map +1 -1
- package/dist/lib/permission-strategies.js +71 -11
- package/dist/lib/permission-strategies.js.map +1 -1
- package/dist/overlay/modalStack.cjs +13 -6
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +13 -6
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -3
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
- package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
- package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.js +0 -8
- package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
|
@@ -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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"}
|