@flanksource/clicky-ui 0.3.24 → 0.3.26
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/NOTICE.md +1 -0
- package/dist/ai.cjs +4 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +6 -2
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +8 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +9 -1
- package/dist/chat.js.map +1 -1
- package/dist/comments/CommentCard.cjs +89 -14
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +90 -15
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +25 -2
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +25 -2
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +21 -14
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +21 -14
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +1 -1
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.js +1 -1
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +6 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/components/DimensionField.cjs +56 -0
- package/dist/components/DimensionField.cjs.map +1 -0
- package/dist/components/DimensionField.d.ts +17 -0
- package/dist/components/DimensionField.d.ts.map +1 -0
- package/dist/components/DimensionField.js +56 -0
- package/dist/components/DimensionField.js.map +1 -0
- package/dist/components.cjs +4 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -5
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +4 -5
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/TaskExecDetails.cjs +8 -3
- package/dist/data/TaskExecDetails.cjs.map +1 -1
- package/dist/data/TaskExecDetails.d.ts +4 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -1
- package/dist/data/TaskExecDetails.js +9 -4
- package/dist/data/TaskExecDetails.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +101 -7
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts +6 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +103 -9
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProcessDetails.cjs +2 -0
- package/dist/data/TaskProcessDetails.cjs.map +1 -1
- package/dist/data/TaskProcessDetails.d.ts.map +1 -1
- package/dist/data/TaskProcessDetails.js +2 -0
- package/dist/data/TaskProcessDetails.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -4
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.js +14 -4
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +1 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +18 -23
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -24
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js +12 -21
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +2 -2
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +2 -2
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +2 -2
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.js +4 -2
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +5 -5
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +6 -5
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +5 -5
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +61 -37
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +62 -38
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +17 -20
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +18 -21
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +1 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -7
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +1 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/chat/Chat.cjs +8 -4
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +8 -4
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +11 -7
- 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 +11 -7
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +64 -27
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +11 -4
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +64 -27
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +2 -1
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/index.d.ts +2 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.cjs +132 -0
- package/dist/data/chat/tool-policy.cjs.map +1 -0
- package/dist/data/chat/tool-policy.d.ts +81 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -0
- package/dist/data/chat/tool-policy.js +132 -0
- package/dist/data/chat/tool-policy.js.map +1 -0
- package/dist/data/chat/types.cjs +20 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +41 -2
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +20 -0
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +10 -1
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +10 -1
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/debugConsoleSignal.cjs +64 -0
- package/dist/data/debugConsoleSignal.cjs.map +1 -0
- package/dist/data/debugConsoleSignal.d.ts +83 -0
- package/dist/data/debugConsoleSignal.d.ts.map +1 -0
- package/dist/data/debugConsoleSignal.js +64 -0
- package/dist/data/debugConsoleSignal.js.map +1 -0
- package/dist/data/har/HarPanel.cjs +20 -14
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +20 -14
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/har/types.d.ts +18 -0
- package/dist/data/har/types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.cjs +4 -42
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.js +5 -43
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
- package/dist/data/useDebugAction.cjs +29 -0
- package/dist/data/useDebugAction.cjs.map +1 -0
- package/dist/data/useDebugAction.d.ts +16 -0
- package/dist/data/useDebugAction.d.ts.map +1 -0
- package/dist/data/useDebugAction.js +29 -0
- package/dist/data/useDebugAction.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +16 -8
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +3 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +16 -8
- package/dist/devtools/DebugConsole.cjs +138 -0
- package/dist/devtools/DebugConsole.cjs.map +1 -0
- package/dist/devtools/DebugConsole.d.ts +23 -0
- package/dist/devtools/DebugConsole.d.ts.map +1 -0
- package/dist/devtools/DebugConsole.js +138 -0
- package/dist/devtools/DebugConsole.js.map +1 -0
- package/dist/devtools/DebugConsoleButton.cjs +59 -0
- package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
- package/dist/devtools/DebugConsoleButton.d.ts +20 -0
- package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleButton.js +59 -0
- package/dist/devtools/DebugConsoleButton.js.map +1 -0
- package/dist/devtools/DebugConsoleDock.cjs +112 -0
- package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
- package/dist/devtools/DebugConsoleDock.d.ts +26 -0
- package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleDock.js +112 -0
- package/dist/devtools/DebugConsoleDock.js.map +1 -0
- package/dist/devtools/ExecutionDetail.cjs +135 -0
- package/dist/devtools/ExecutionDetail.cjs.map +1 -0
- package/dist/devtools/ExecutionDetail.d.ts +19 -0
- package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
- package/dist/devtools/ExecutionDetail.js +135 -0
- package/dist/devtools/ExecutionDetail.js.map +1 -0
- package/dist/devtools/debugClient.cjs +172 -0
- package/dist/devtools/debugClient.cjs.map +1 -0
- package/dist/devtools/debugClient.d.ts +98 -0
- package/dist/devtools/debugClient.d.ts.map +1 -0
- package/dist/devtools/debugClient.js +172 -0
- package/dist/devtools/debugClient.js.map +1 -0
- package/dist/devtools/debugStore.cjs +115 -0
- package/dist/devtools/debugStore.cjs.map +1 -0
- package/dist/devtools/debugStore.d.ts +83 -0
- package/dist/devtools/debugStore.d.ts.map +1 -0
- package/dist/devtools/debugStore.js +115 -0
- package/dist/devtools/debugStore.js.map +1 -0
- package/dist/devtools/dockState.cjs +51 -0
- package/dist/devtools/dockState.cjs.map +1 -0
- package/dist/devtools/dockState.d.ts +31 -0
- package/dist/devtools/dockState.d.ts.map +1 -0
- package/dist/devtools/dockState.js +51 -0
- package/dist/devtools/dockState.js.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
- package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.js +36 -0
- package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
- package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.js +150 -0
- package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
- package/dist/devtools/tabs/InspectionTab.cjs +316 -0
- package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
- package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionTab.js +316 -0
- package/dist/devtools/tabs/InspectionTab.js.map +1 -0
- package/dist/devtools/tabs/NetworkTab.cjs +91 -0
- package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
- package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
- package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
- package/dist/devtools/tabs/NetworkTab.js +91 -0
- package/dist/devtools/tabs/NetworkTab.js.map +1 -0
- package/dist/devtools/tabs/QueriesTab.cjs +85 -0
- package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
- package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
- package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
- package/dist/devtools/tabs/QueriesTab.js +85 -0
- package/dist/devtools/tabs/QueriesTab.js.map +1 -0
- package/dist/devtools/types.cjs +26 -0
- package/dist/devtools/types.cjs.map +1 -0
- package/dist/devtools/types.d.ts +235 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools/types.js +26 -0
- package/dist/devtools/types.js.map +1 -0
- package/dist/devtools/useDebugStream.cjs +46 -0
- package/dist/devtools/useDebugStream.cjs.map +1 -0
- package/dist/devtools/useDebugStream.d.ts +23 -0
- package/dist/devtools/useDebugStream.d.ts.map +1 -0
- package/dist/devtools/useDebugStream.js +46 -0
- package/dist/devtools/useDebugStream.js.map +1 -0
- package/dist/devtools.cjs +51 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.ts +37 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +51 -0
- package/dist/devtools.js.map +1 -0
- package/dist/icons/components/UiOpenScad.cjs +10 -0
- package/dist/icons/components/UiOpenScad.cjs.map +1 -0
- package/dist/icons/components/UiOpenScad.d.ts +9 -0
- package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
- package/dist/icons/components/UiOpenScad.js +10 -0
- package/dist/icons/components/UiOpenScad.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +2 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +2 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +20 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +15 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +11 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +15 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +170 -49
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +170 -49
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/overlay/CellActions.cjs +18 -124
- package/dist/overlay/CellActions.cjs.map +1 -1
- package/dist/overlay/CellActions.d.ts +1 -1
- package/dist/overlay/CellActions.d.ts.map +1 -1
- package/dist/overlay/CellActions.js +18 -124
- package/dist/overlay/CellActions.js.map +1 -1
- package/dist/overlay/ContextMenu.cjs +144 -0
- package/dist/overlay/ContextMenu.cjs.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +8 -0
- package/dist/overlay/ContextMenu.d.ts.map +1 -0
- package/dist/overlay/ContextMenu.js +144 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
- package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
- package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.js +14 -65
- package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
- package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
- package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
- package/dist/profiles/connections/index.d.ts +1 -0
- package/dist/profiles/connections/index.d.ts.map +1 -1
- package/dist/profiles/connections/inspectionStatus.cjs +44 -0
- package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
- package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
- package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
- package/dist/profiles/connections/inspectionStatus.js +44 -0
- package/dist/profiles/connections/inspectionStatus.js.map +1 -0
- package/dist/profiles/connections/useInspection.cjs +123 -0
- package/dist/profiles/connections/useInspection.cjs.map +1 -0
- package/dist/profiles/connections/useInspection.d.ts +35 -0
- package/dist/profiles/connections/useInspection.d.ts.map +1 -0
- package/dist/profiles/connections/useInspection.js +123 -0
- package/dist/profiles/connections/useInspection.js.map +1 -0
- package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
- package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
- package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
- package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.js +137 -22
- package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
- package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
- package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
- package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.js +6 -3
- package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
- package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
- package/dist/profiles/query/profileSamplePayload.cjs +6 -4
- package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
- package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
- package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
- package/dist/profiles/query/profileSamplePayload.js +6 -4
- package/dist/profiles/query/profileSamplePayload.js.map +1 -1
- package/dist/profiles/query/profileSampleResult.cjs +26 -0
- package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
- package/dist/profiles/query/profileSampleResult.d.ts +11 -0
- package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleResult.js +26 -0
- package/dist/profiles/query/profileSampleResult.js.map +1 -0
- package/dist/profiles/query/queryTargetPicker.cjs +5 -3
- package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
- package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
- package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
- package/dist/profiles/query/queryTargetPicker.js +5 -3
- package/dist/profiles/query/queryTargetPicker.js.map +1 -1
- package/dist/profiles/wizard/profileWizard.cjs +14 -5
- package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizard.js +15 -6
- package/dist/profiles/wizard/profileWizard.js.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
- package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
- package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.js +35 -6
- package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
- package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
- package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
- package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
- package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.js +33 -2
- package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
- package/dist/profiles.cjs +8 -2
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +10 -4
- package/dist/profiles.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +21 -237
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +3 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +21 -237
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/FilterFormFields.cjs +240 -0
- package/dist/rpc/FilterFormFields.cjs.map +1 -0
- package/dist/rpc/FilterFormFields.d.ts +12 -0
- package/dist/rpc/FilterFormFields.d.ts.map +1 -0
- package/dist/rpc/FilterFormFields.js +240 -0
- package/dist/rpc/FilterFormFields.js.map +1 -0
- package/dist/rpc/router.cjs +3 -2
- package/dist/rpc/router.cjs.map +1 -1
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/rpc/router.js +3 -2
- package/dist/rpc/router.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +3 -1
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
- package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
- package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.js +0 -106
- package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
- package/dist/data/query-info/index.d.ts +0 -4
- package/dist/data/query-info/index.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.cjs +0 -42
- package/dist/data/query-info/queryInfo.cjs.map +0 -1
- package/dist/data/query-info/queryInfo.d.ts +0 -45
- package/dist/data/query-info/queryInfo.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.js +0 -42
- package/dist/data/query-info/queryInfo.js.map +0 -1
- package/dist/data/query-info/useQueryInfo.cjs +0 -48
- package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
- package/dist/data/query-info/useQueryInfo.d.ts +0 -26
- package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
- package/dist/data/query-info/useQueryInfo.js +0 -48
- package/dist/data/query-info/useQueryInfo.js.map +0 -1
|
@@ -32,7 +32,7 @@ const ADVANCED_TAB_ICONS = {
|
|
|
32
32
|
function ToolPreferences({
|
|
33
33
|
tools,
|
|
34
34
|
value,
|
|
35
|
-
|
|
35
|
+
onRule,
|
|
36
36
|
models = [],
|
|
37
37
|
runtime,
|
|
38
38
|
onRuntimeChange,
|
|
@@ -100,7 +100,7 @@ function ToolPreferences({
|
|
|
100
100
|
{
|
|
101
101
|
groups,
|
|
102
102
|
value,
|
|
103
|
-
|
|
103
|
+
onRule,
|
|
104
104
|
emptyLabel: "No tools available"
|
|
105
105
|
}
|
|
106
106
|
),
|
|
@@ -173,7 +173,7 @@ function ToolPreferences({
|
|
|
173
173
|
{
|
|
174
174
|
groups,
|
|
175
175
|
value,
|
|
176
|
-
|
|
176
|
+
onRule
|
|
177
177
|
}
|
|
178
178
|
) : /* @__PURE__ */ jsxRuntime.jsx(ToolSchemaBrowser.ToolSchemaBrowser, { tools, className: "min-h-0 flex-1" })
|
|
179
179
|
] })
|
|
@@ -184,14 +184,14 @@ function ToolPreferences({
|
|
|
184
184
|
function AdvancedPermissionsPanel({
|
|
185
185
|
groups,
|
|
186
186
|
value,
|
|
187
|
-
|
|
187
|
+
onRule
|
|
188
188
|
}) {
|
|
189
189
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto rounded border border-border p-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
190
190
|
ToolPreferencesList.CompactToolList,
|
|
191
191
|
{
|
|
192
192
|
groups,
|
|
193
193
|
value,
|
|
194
|
-
|
|
194
|
+
onRule,
|
|
195
195
|
emptyLabel: "No tools"
|
|
196
196
|
}
|
|
197
197
|
) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPreferences.cjs","sources":["../../../src/data/ai/ToolPreferences.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { UiCode2, UiCoins, UiShield, UiSliders } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Modal } from \"../../overlay/Modal\";\nimport { Icon } from \"../Icon\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type {\n ChatBudgetConfig,\n ChatModel,\n ChatModelRuntime,\n ChatUsageSummary,\n ClaudePermissionMode,\n ToolAnnotations,\n ToolMeta,\n ToolMode,\n} from \"../chat/types\";\nimport type { SpecRuntimeFamily } from \"../runtime/runtime-mode\";\nimport { AdvancedChatConfig } from \"./AdvancedChatConfig\";\nimport { AdvancedCostsPanel } from \"./AdvancedCostsPanel\";\nimport { ToolSchemaBrowser } from \"./ToolSchemaBrowser\";\nimport {\n CompactToolList,\n CompactToolPreferencesList,\n type CompactToolPreferencesListProps,\n} from \"./ToolPreferencesList\";\nimport { groupedToolEntries, type ToolGroup } from \"./ToolPreferences.model\";\n\nexport type { ClaudePermissionMode, ToolAnnotations, ToolMeta, ToolMode };\nexport { CompactToolPreferencesList, type CompactToolPreferencesListProps };\n\nexport type ToolPreferencesProps = {\n tools: ToolMeta[];\n value: Record<string, ToolMode>;\n onChange: (prefs: Record<string, ToolMode>) => void;\n models?: ChatModel[] | undefined;\n runtime?: ChatModelRuntime | undefined;\n onRuntimeChange?: ((runtime: ChatModelRuntime) => void) | undefined;\n model?: string | undefined;\n onModelChange?: ((model: string) => void) | undefined;\n runtimeFamilies?: SpecRuntimeFamily[] | undefined;\n reasoningEfforts?: string[] | undefined;\n runtimeLocked?: boolean | undefined;\n reasoningEffort?: string | undefined;\n onReasoningEffortChange?: ((effort: string) => void) | undefined;\n permissionMode?: ClaudePermissionMode | undefined;\n onPermissionModeChange?: ((mode: ClaudePermissionMode) => void) | undefined;\n temperature?: number | undefined;\n onTemperatureChange?: ((temperature: number | undefined) => void) | undefined;\n budget?: ChatBudgetConfig | undefined;\n onBudgetChange?: ((budget: ChatBudgetConfig) => void) | undefined;\n usage?: ChatUsageSummary | null | undefined;\n /** Base sessions endpoint for the Costs tab, e.g. `/api/chat/sessions`. */\n costsApi?: string | undefined;\n /** Thread whose costs the Costs tab reports. */\n threadId?: string | undefined;\n toolsLoading?: boolean | undefined;\n toolsError?: string | null | undefined;\n catalogLoading?: boolean | undefined;\n catalogError?: string | null | undefined;\n onCatalogRetry?: (() => void) | undefined;\n className?: string;\n};\n\ntype AdvancedTab = \"config\" | \"costs\" | \"permissions\" | \"browser\";\n\nconst ADVANCED_TABS: AdvancedTab[] = [\n \"config\",\n \"costs\",\n \"permissions\",\n \"browser\",\n];\n\nconst ADVANCED_TAB_ICONS: Record<AdvancedTab, typeof UiSliders> = {\n config: UiSliders,\n costs: UiCoins,\n permissions: UiShield,\n browser: UiCode2,\n};\n\nexport function ToolPreferences({\n tools,\n value,\n onChange,\n models = [],\n runtime,\n onRuntimeChange,\n model,\n onModelChange,\n runtimeFamilies,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n runtimeLocked = false,\n reasoningEffort,\n onReasoningEffortChange,\n permissionMode = \"default\",\n onPermissionModeChange,\n temperature,\n onTemperatureChange,\n budget,\n onBudgetChange,\n usage,\n costsApi,\n threadId,\n toolsLoading = false,\n toolsError = null,\n catalogLoading = false,\n catalogError = null,\n onCatalogRetry,\n className = \"\",\n}: ToolPreferencesProps) {\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const [advancedTab, setAdvancedTab] = useState<AdvancedTab>(\"config\");\n const groups = useMemo(() => groupedToolEntries(tools), [tools]);\n const resolvedRuntime =\n runtime ??\n ({\n ...(model ? { model } : {}),\n ...(reasoningEffort ? { effort: reasoningEffort } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n } satisfies ChatModelRuntime);\n const handleRuntimeChange = (next: ChatModelRuntime) => {\n onRuntimeChange?.(next);\n if ((next.id ?? next.model ?? \"\") !== (model ?? \"\")) {\n onModelChange?.(next.id ?? next.model ?? \"\");\n }\n if ((next.effort ?? \"\") !== (reasoningEffort ?? \"\")) {\n onReasoningEffortChange?.(next.effort ?? \"\");\n }\n };\n\n return (\n <>\n <DropdownMenu\n align=\"right\"\n className={className}\n menuClassName=\"w-72 max-h-[70vh] overflow-y-auto p-1\"\n trigger={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Tool preferences\"\n data-testid=\"tool-preferences-btn\"\n >\n <Icon icon={UiSliders} className=\"size-4\" />\n </Button>\n }\n >\n {(closeMenu) => (\n <div>\n <div className=\"mb-1 px-1 text-xs font-semibold\">\n Tool Preferences\n </div>\n <CompactToolList\n groups={groups}\n value={value}\n onChange={onChange}\n emptyLabel=\"No tools available\"\n />\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n type=\"button\"\n className=\"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-accent\"\n onClick={() => {\n closeMenu();\n setAdvancedOpen(true);\n }}\n >\n Advanced\n </button>\n </div>\n </div>\n )}\n </DropdownMenu>\n <Modal\n open={advancedOpen}\n onClose={() => setAdvancedOpen(false)}\n title=\"Advanced Chat Settings\"\n size=\"xl\"\n >\n <div className=\"flex h-[70vh] min-h-0 flex-col gap-3\">\n <div className=\"flex items-center gap-1 rounded border border-border bg-muted/30 p-1\">\n {ADVANCED_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n className={cn(\n \"inline-flex h-8 items-center gap-1.5 rounded px-3 text-xs font-medium capitalize\",\n advancedTab === tab\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:bg-background/60\",\n )}\n onClick={() => setAdvancedTab(tab)}\n >\n <Icon icon={ADVANCED_TAB_ICONS[tab]} className=\"size-3.5\" />\n {tab}\n </button>\n ))}\n <div className=\"flex-1\" />\n {toolsLoading && (\n <span className=\"pr-2 text-[11px] text-muted-foreground\">\n Loading tools\n </span>\n )}\n {toolsError && (\n <span className=\"pr-2 text-[11px] text-destructive\">\n {toolsError}\n </span>\n )}\n </div>\n {advancedTab === \"config\" ? (\n <AdvancedChatConfig\n models={models}\n runtime={resolvedRuntime}\n onRuntimeChange={handleRuntimeChange}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n runtimeLocked={runtimeLocked}\n permissionMode={permissionMode}\n onPermissionModeChange={onPermissionModeChange}\n temperature={temperature}\n onTemperatureChange={onTemperatureChange}\n budget={budget}\n onBudgetChange={onBudgetChange}\n usage={usage}\n catalogLoading={catalogLoading}\n catalogError={catalogError}\n onCatalogRetry={onCatalogRetry}\n />\n ) : advancedTab === \"costs\" ? (\n <AdvancedCostsPanel costsApi={costsApi} threadId={threadId} />\n ) : advancedTab === \"permissions\" ? (\n <AdvancedPermissionsPanel\n groups={groups}\n value={value}\n onChange={onChange}\n />\n ) : (\n <ToolSchemaBrowser tools={tools} className=\"min-h-0 flex-1\" />\n )}\n </div>\n </Modal>\n </>\n );\n}\n\nfunction AdvancedPermissionsPanel({\n groups,\n value,\n onChange,\n}: {\n groups: ToolGroup[];\n value: Record<string, ToolMode>;\n onChange: (prefs: Record<string, ToolMode>) => void;\n}) {\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded border border-border p-1\">\n <CompactToolList\n groups={groups}\n value={value}\n onChange={onChange}\n emptyLabel=\"No tools\"\n />\n </div>\n );\n}\n"],"names":["UiSliders","UiCoins","UiShield","UiCode2","DEFAULT_REASONING_EFFORTS","useState","useMemo","groupedToolEntries","jsxs","Fragment","jsx","DropdownMenu","Button","Icon","CompactToolList","Modal","cn","AdvancedChatConfig","AdvancedCostsPanel","ToolSchemaBrowser"],"mappings":";;;;;;;;;;;;;;;;;;;AAmEA,MAAM,gBAA+B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,qBAA4D;AAAA,EAChE,QAAQA,UAAAA;AAAAA,EACR,OAAOC,QAAAA;AAAAA,EACP,aAAaC,SAAAA;AAAAA,EACb,SAASC,QAAAA;AACX;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,CAAA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmBC,YAAAA;AAAAA,EACnB,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA,YAAY;AACd,GAAyB;AACvB,QAAM,CAAC,cAAc,eAAe,IAAIC,MAAAA,SAAS,KAAK;AACtD,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAsB,QAAQ;AACpE,QAAM,SAASC,MAAAA,QAAQ,MAAMC,sBAAAA,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAC/D,QAAM,kBACJ,WACC;AAAA,IACC,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,IACxB,GAAI,kBAAkB,EAAE,QAAQ,gBAAA,IAAoB,CAAA;AAAA,IACpD,GAAI,gBAAgB,SAAY,EAAE,gBAAgB,CAAA;AAAA,EAAC;AAEvD,QAAM,sBAAsB,CAAC,SAA2B;AACtD,uDAAkB;AAClB,SAAK,KAAK,MAAM,KAAK,SAAS,SAAS,SAAS,KAAK;AACnD,qDAAgB,KAAK,MAAM,KAAK,SAAS;AAAA,IAC3C;AACA,SAAK,KAAK,UAAU,SAAS,mBAAmB,KAAK;AACnD,yEAA0B,KAAK,UAAU;AAAA,IAC3C;AAAA,EACF;AAEA,SACEC,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,aAAAA;AAAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN;AAAA,QACA,eAAc;AAAA,QACd,SACED,2BAAAA;AAAAA,UAACE,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YACN,eAAY;AAAA,YAEZ,UAAAF,2BAAAA,IAACG,WAAA,EAAK,MAAMb,UAAAA,WAAW,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAI7C,UAAA,CAAC,cACAQ,2BAAAA,KAAC,OAAA,EACC,UAAA;AAAA,UAAAE,2BAAAA,IAAC,OAAA,EAAI,WAAU,mCAAkC,UAAA,oBAEjD;AAAA,UACAA,2BAAAA;AAAAA,YAACI,oBAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAEbJ,2BAAAA,IAAC,OAAA,EAAI,WAAU,oCACb,UAAAA,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM;AACb,0BAAA;AACA,gCAAgB,IAAI;AAAA,cACtB;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAAA,EAED,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJA,2BAAAA;AAAAA,MAACK,MAAAA;AAAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,SAAS,MAAM,gBAAgB,KAAK;AAAA,QACpC,OAAM;AAAA,QACN,MAAK;AAAA,QAEL,UAAAP,2BAAAA,KAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,wEACZ,UAAA;AAAA,YAAA,cAAc,IAAI,CAAC,QAClBA,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,WAAWQ,MAAAA;AAAAA,kBACT;AAAA,kBACA,gBAAgB,MACZ,4CACA;AAAA,gBAAA;AAAA,gBAEN,SAAS,MAAM,eAAe,GAAG;AAAA,gBAEjC,UAAA;AAAA,kBAAAN,+BAACG,KAAAA,QAAK,MAAM,mBAAmB,GAAG,GAAG,WAAU,YAAW;AAAA,kBACzD;AAAA,gBAAA;AAAA,cAAA;AAAA,cAXI;AAAA,YAAA,CAaR;AAAA,YACDH,2BAAAA,IAAC,OAAA,EAAI,WAAU,SAAA,CAAS;AAAA,YACvB,gBACCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,0CAAyC,UAAA,iBAEzD;AAAA,YAED,cACCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,qCACb,UAAA,WAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UACC,gBAAgB,WACfA,2BAAAA;AAAAA,YAACO,mBAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,SAAS;AAAA,cACT,iBAAiB;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAAA,IAEA,gBAAgB,UAClBP,2BAAAA,IAACQ,yCAAmB,UAAoB,UAAoB,IAC1D,gBAAgB,gBAClBR,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAAA,IAGFA,2BAAAA,IAACS,kBAAAA,mBAAA,EAAkB,OAAc,WAAU,iBAAA,CAAiB;AAAA,QAAA,EAAA,CAEhE;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SACET,2BAAAA,IAAC,OAAA,EAAI,WAAU,mEACb,UAAAA,2BAAAA;AAAAA,IAACI,oBAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAW;AAAA,IAAA;AAAA,EAAA,GAEf;AAEJ;;;"}
|
|
1
|
+
{"version":3,"file":"ToolPreferences.cjs","sources":["../../../src/data/ai/ToolPreferences.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { UiCode2, UiCoins, UiShield, UiSliders } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Modal } from \"../../overlay/Modal\";\nimport { Icon } from \"../Icon\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type {\n ChatBudgetConfig,\n ChatModel,\n ChatModelRuntime,\n ChatUsageSummary,\n ClaudePermissionMode,\n ToolAnnotations,\n ToolMeta,\n ToolPolicy,\n} from \"../chat/types\";\nimport type { SpecRuntimeFamily } from \"../runtime/runtime-mode\";\nimport { AdvancedChatConfig } from \"./AdvancedChatConfig\";\nimport { AdvancedCostsPanel } from \"./AdvancedCostsPanel\";\nimport { ToolSchemaBrowser } from \"./ToolSchemaBrowser\";\nimport {\n CompactToolList,\n CompactToolPreferencesList,\n type CompactToolPreferencesListProps,\n} from \"./ToolPreferencesList\";\nimport { groupedToolEntries, type ToolGroup } from \"./ToolPreferences.model\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\n\nexport type { ClaudePermissionMode, ToolAnnotations, ToolMeta, ToolPolicy };\nexport { CompactToolPreferencesList, type CompactToolPreferencesListProps };\n\nexport type ToolPreferencesProps = {\n tools: ToolMeta[];\n value: Record<string, ToolPolicy>;\n onRule: (rule: PermissionRule) => void;\n models?: ChatModel[] | undefined;\n runtime?: ChatModelRuntime | undefined;\n onRuntimeChange?: ((runtime: ChatModelRuntime) => void) | undefined;\n model?: string | undefined;\n onModelChange?: ((model: string) => void) | undefined;\n runtimeFamilies?: SpecRuntimeFamily[] | undefined;\n reasoningEfforts?: string[] | undefined;\n runtimeLocked?: boolean | undefined;\n reasoningEffort?: string | undefined;\n onReasoningEffortChange?: ((effort: string) => void) | undefined;\n permissionMode?: ClaudePermissionMode | undefined;\n onPermissionModeChange?: ((mode: ClaudePermissionMode) => void) | undefined;\n temperature?: number | undefined;\n onTemperatureChange?: ((temperature: number | undefined) => void) | undefined;\n budget?: ChatBudgetConfig | undefined;\n onBudgetChange?: ((budget: ChatBudgetConfig) => void) | undefined;\n usage?: ChatUsageSummary | null | undefined;\n /** Base sessions endpoint for the Costs tab, e.g. `/api/chat/sessions`. */\n costsApi?: string | undefined;\n /** Thread whose costs the Costs tab reports. */\n threadId?: string | undefined;\n toolsLoading?: boolean | undefined;\n toolsError?: string | null | undefined;\n catalogLoading?: boolean | undefined;\n catalogError?: string | null | undefined;\n onCatalogRetry?: (() => void) | undefined;\n className?: string;\n};\n\ntype AdvancedTab = \"config\" | \"costs\" | \"permissions\" | \"browser\";\n\nconst ADVANCED_TABS: AdvancedTab[] = [\n \"config\",\n \"costs\",\n \"permissions\",\n \"browser\",\n];\n\nconst ADVANCED_TAB_ICONS: Record<AdvancedTab, typeof UiSliders> = {\n config: UiSliders,\n costs: UiCoins,\n permissions: UiShield,\n browser: UiCode2,\n};\n\nexport function ToolPreferences({\n tools,\n value,\n onRule,\n models = [],\n runtime,\n onRuntimeChange,\n model,\n onModelChange,\n runtimeFamilies,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n runtimeLocked = false,\n reasoningEffort,\n onReasoningEffortChange,\n permissionMode = \"default\",\n onPermissionModeChange,\n temperature,\n onTemperatureChange,\n budget,\n onBudgetChange,\n usage,\n costsApi,\n threadId,\n toolsLoading = false,\n toolsError = null,\n catalogLoading = false,\n catalogError = null,\n onCatalogRetry,\n className = \"\",\n}: ToolPreferencesProps) {\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const [advancedTab, setAdvancedTab] = useState<AdvancedTab>(\"config\");\n const groups = useMemo(() => groupedToolEntries(tools), [tools]);\n const resolvedRuntime =\n runtime ??\n ({\n ...(model ? { model } : {}),\n ...(reasoningEffort ? { effort: reasoningEffort } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n } satisfies ChatModelRuntime);\n const handleRuntimeChange = (next: ChatModelRuntime) => {\n onRuntimeChange?.(next);\n if ((next.id ?? next.model ?? \"\") !== (model ?? \"\")) {\n onModelChange?.(next.id ?? next.model ?? \"\");\n }\n if ((next.effort ?? \"\") !== (reasoningEffort ?? \"\")) {\n onReasoningEffortChange?.(next.effort ?? \"\");\n }\n };\n\n return (\n <>\n <DropdownMenu\n align=\"right\"\n className={className}\n menuClassName=\"w-72 max-h-[70vh] overflow-y-auto p-1\"\n trigger={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Tool preferences\"\n data-testid=\"tool-preferences-btn\"\n >\n <Icon icon={UiSliders} className=\"size-4\" />\n </Button>\n }\n >\n {(closeMenu) => (\n <div>\n <div className=\"mb-1 px-1 text-xs font-semibold\">\n Tool Preferences\n </div>\n <CompactToolList\n groups={groups}\n value={value}\n onRule={onRule}\n emptyLabel=\"No tools available\"\n />\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n type=\"button\"\n className=\"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-accent\"\n onClick={() => {\n closeMenu();\n setAdvancedOpen(true);\n }}\n >\n Advanced\n </button>\n </div>\n </div>\n )}\n </DropdownMenu>\n <Modal\n open={advancedOpen}\n onClose={() => setAdvancedOpen(false)}\n title=\"Advanced Chat Settings\"\n size=\"xl\"\n >\n <div className=\"flex h-[70vh] min-h-0 flex-col gap-3\">\n <div className=\"flex items-center gap-1 rounded border border-border bg-muted/30 p-1\">\n {ADVANCED_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n className={cn(\n \"inline-flex h-8 items-center gap-1.5 rounded px-3 text-xs font-medium capitalize\",\n advancedTab === tab\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:bg-background/60\",\n )}\n onClick={() => setAdvancedTab(tab)}\n >\n <Icon icon={ADVANCED_TAB_ICONS[tab]} className=\"size-3.5\" />\n {tab}\n </button>\n ))}\n <div className=\"flex-1\" />\n {toolsLoading && (\n <span className=\"pr-2 text-[11px] text-muted-foreground\">\n Loading tools\n </span>\n )}\n {toolsError && (\n <span className=\"pr-2 text-[11px] text-destructive\">\n {toolsError}\n </span>\n )}\n </div>\n {advancedTab === \"config\" ? (\n <AdvancedChatConfig\n models={models}\n runtime={resolvedRuntime}\n onRuntimeChange={handleRuntimeChange}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n runtimeLocked={runtimeLocked}\n permissionMode={permissionMode}\n onPermissionModeChange={onPermissionModeChange}\n temperature={temperature}\n onTemperatureChange={onTemperatureChange}\n budget={budget}\n onBudgetChange={onBudgetChange}\n usage={usage}\n catalogLoading={catalogLoading}\n catalogError={catalogError}\n onCatalogRetry={onCatalogRetry}\n />\n ) : advancedTab === \"costs\" ? (\n <AdvancedCostsPanel costsApi={costsApi} threadId={threadId} />\n ) : advancedTab === \"permissions\" ? (\n <AdvancedPermissionsPanel\n groups={groups}\n value={value}\n onRule={onRule}\n />\n ) : (\n <ToolSchemaBrowser tools={tools} className=\"min-h-0 flex-1\" />\n )}\n </div>\n </Modal>\n </>\n );\n}\n\nfunction AdvancedPermissionsPanel({\n groups,\n value,\n onRule,\n}: {\n groups: ToolGroup[];\n value: Record<string, ToolPolicy>;\n onRule: (rule: PermissionRule) => void;\n}) {\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded border border-border p-1\">\n <CompactToolList\n groups={groups}\n value={value}\n onRule={onRule}\n emptyLabel=\"No tools\"\n />\n </div>\n );\n}\n"],"names":["UiSliders","UiCoins","UiShield","UiCode2","DEFAULT_REASONING_EFFORTS","useState","useMemo","groupedToolEntries","jsxs","Fragment","jsx","DropdownMenu","Button","Icon","CompactToolList","Modal","cn","AdvancedChatConfig","AdvancedCostsPanel","ToolSchemaBrowser"],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { ChatBudgetConfig, ChatModel, ChatModelRuntime, ChatUsageSummary, ClaudePermissionMode, ToolAnnotations, ToolMeta,
|
|
1
|
+
import { ChatBudgetConfig, ChatModel, ChatModelRuntime, ChatUsageSummary, ClaudePermissionMode, ToolAnnotations, ToolMeta, ToolPolicy } from '../chat/types';
|
|
2
2
|
import { SpecRuntimeFamily } from '../runtime/runtime-mode';
|
|
3
3
|
import { CompactToolPreferencesList, CompactToolPreferencesListProps } from './ToolPreferencesList';
|
|
4
|
-
|
|
4
|
+
import { PermissionRule } from '../chat/tool-policy';
|
|
5
|
+
export type { ClaudePermissionMode, ToolAnnotations, ToolMeta, ToolPolicy };
|
|
5
6
|
export { CompactToolPreferencesList, type CompactToolPreferencesListProps };
|
|
6
7
|
export type ToolPreferencesProps = {
|
|
7
8
|
tools: ToolMeta[];
|
|
8
|
-
value: Record<string,
|
|
9
|
-
|
|
9
|
+
value: Record<string, ToolPolicy>;
|
|
10
|
+
onRule: (rule: PermissionRule) => void;
|
|
10
11
|
models?: ChatModel[] | undefined;
|
|
11
12
|
runtime?: ChatModelRuntime | undefined;
|
|
12
13
|
onRuntimeChange?: ((runtime: ChatModelRuntime) => void) | undefined;
|
|
@@ -35,5 +36,5 @@ export type ToolPreferencesProps = {
|
|
|
35
36
|
onCatalogRetry?: (() => void) | undefined;
|
|
36
37
|
className?: string;
|
|
37
38
|
};
|
|
38
|
-
export declare function ToolPreferences({ tools, value,
|
|
39
|
+
export declare function ToolPreferences({ tools, value, onRule, models, runtime, onRuntimeChange, model, onModelChange, runtimeFamilies, reasoningEfforts, runtimeLocked, reasoningEffort, onReasoningEffortChange, permissionMode, onPermissionModeChange, temperature, onTemperatureChange, budget, onBudgetChange, usage, costsApi, threadId, toolsLoading, toolsError, catalogLoading, catalogError, onCatalogRetry, className, }: ToolPreferencesProps): import("react/jsx-runtime").JSX.Element;
|
|
39
40
|
//# sourceMappingURL=ToolPreferences.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPreferences.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolPreferences.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"ToolPreferences.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolPreferences.tsx"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ const ADVANCED_TAB_ICONS = {
|
|
|
31
31
|
function ToolPreferences({
|
|
32
32
|
tools,
|
|
33
33
|
value,
|
|
34
|
-
|
|
34
|
+
onRule,
|
|
35
35
|
models = [],
|
|
36
36
|
runtime,
|
|
37
37
|
onRuntimeChange,
|
|
@@ -99,7 +99,7 @@ function ToolPreferences({
|
|
|
99
99
|
{
|
|
100
100
|
groups,
|
|
101
101
|
value,
|
|
102
|
-
|
|
102
|
+
onRule,
|
|
103
103
|
emptyLabel: "No tools available"
|
|
104
104
|
}
|
|
105
105
|
),
|
|
@@ -172,7 +172,7 @@ function ToolPreferences({
|
|
|
172
172
|
{
|
|
173
173
|
groups,
|
|
174
174
|
value,
|
|
175
|
-
|
|
175
|
+
onRule
|
|
176
176
|
}
|
|
177
177
|
) : /* @__PURE__ */ jsx(ToolSchemaBrowser, { tools, className: "min-h-0 flex-1" })
|
|
178
178
|
] })
|
|
@@ -183,14 +183,14 @@ function ToolPreferences({
|
|
|
183
183
|
function AdvancedPermissionsPanel({
|
|
184
184
|
groups,
|
|
185
185
|
value,
|
|
186
|
-
|
|
186
|
+
onRule
|
|
187
187
|
}) {
|
|
188
188
|
return /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto rounded border border-border p-1", children: /* @__PURE__ */ jsx(
|
|
189
189
|
CompactToolList,
|
|
190
190
|
{
|
|
191
191
|
groups,
|
|
192
192
|
value,
|
|
193
|
-
|
|
193
|
+
onRule,
|
|
194
194
|
emptyLabel: "No tools"
|
|
195
195
|
}
|
|
196
196
|
) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPreferences.js","sources":["../../../src/data/ai/ToolPreferences.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { UiCode2, UiCoins, UiShield, UiSliders } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Modal } from \"../../overlay/Modal\";\nimport { Icon } from \"../Icon\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type {\n ChatBudgetConfig,\n ChatModel,\n ChatModelRuntime,\n ChatUsageSummary,\n ClaudePermissionMode,\n ToolAnnotations,\n ToolMeta,\n ToolMode,\n} from \"../chat/types\";\nimport type { SpecRuntimeFamily } from \"../runtime/runtime-mode\";\nimport { AdvancedChatConfig } from \"./AdvancedChatConfig\";\nimport { AdvancedCostsPanel } from \"./AdvancedCostsPanel\";\nimport { ToolSchemaBrowser } from \"./ToolSchemaBrowser\";\nimport {\n CompactToolList,\n CompactToolPreferencesList,\n type CompactToolPreferencesListProps,\n} from \"./ToolPreferencesList\";\nimport { groupedToolEntries, type ToolGroup } from \"./ToolPreferences.model\";\n\nexport type { ClaudePermissionMode, ToolAnnotations, ToolMeta, ToolMode };\nexport { CompactToolPreferencesList, type CompactToolPreferencesListProps };\n\nexport type ToolPreferencesProps = {\n tools: ToolMeta[];\n value: Record<string, ToolMode>;\n onChange: (prefs: Record<string, ToolMode>) => void;\n models?: ChatModel[] | undefined;\n runtime?: ChatModelRuntime | undefined;\n onRuntimeChange?: ((runtime: ChatModelRuntime) => void) | undefined;\n model?: string | undefined;\n onModelChange?: ((model: string) => void) | undefined;\n runtimeFamilies?: SpecRuntimeFamily[] | undefined;\n reasoningEfforts?: string[] | undefined;\n runtimeLocked?: boolean | undefined;\n reasoningEffort?: string | undefined;\n onReasoningEffortChange?: ((effort: string) => void) | undefined;\n permissionMode?: ClaudePermissionMode | undefined;\n onPermissionModeChange?: ((mode: ClaudePermissionMode) => void) | undefined;\n temperature?: number | undefined;\n onTemperatureChange?: ((temperature: number | undefined) => void) | undefined;\n budget?: ChatBudgetConfig | undefined;\n onBudgetChange?: ((budget: ChatBudgetConfig) => void) | undefined;\n usage?: ChatUsageSummary | null | undefined;\n /** Base sessions endpoint for the Costs tab, e.g. `/api/chat/sessions`. */\n costsApi?: string | undefined;\n /** Thread whose costs the Costs tab reports. */\n threadId?: string | undefined;\n toolsLoading?: boolean | undefined;\n toolsError?: string | null | undefined;\n catalogLoading?: boolean | undefined;\n catalogError?: string | null | undefined;\n onCatalogRetry?: (() => void) | undefined;\n className?: string;\n};\n\ntype AdvancedTab = \"config\" | \"costs\" | \"permissions\" | \"browser\";\n\nconst ADVANCED_TABS: AdvancedTab[] = [\n \"config\",\n \"costs\",\n \"permissions\",\n \"browser\",\n];\n\nconst ADVANCED_TAB_ICONS: Record<AdvancedTab, typeof UiSliders> = {\n config: UiSliders,\n costs: UiCoins,\n permissions: UiShield,\n browser: UiCode2,\n};\n\nexport function ToolPreferences({\n tools,\n value,\n onChange,\n models = [],\n runtime,\n onRuntimeChange,\n model,\n onModelChange,\n runtimeFamilies,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n runtimeLocked = false,\n reasoningEffort,\n onReasoningEffortChange,\n permissionMode = \"default\",\n onPermissionModeChange,\n temperature,\n onTemperatureChange,\n budget,\n onBudgetChange,\n usage,\n costsApi,\n threadId,\n toolsLoading = false,\n toolsError = null,\n catalogLoading = false,\n catalogError = null,\n onCatalogRetry,\n className = \"\",\n}: ToolPreferencesProps) {\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const [advancedTab, setAdvancedTab] = useState<AdvancedTab>(\"config\");\n const groups = useMemo(() => groupedToolEntries(tools), [tools]);\n const resolvedRuntime =\n runtime ??\n ({\n ...(model ? { model } : {}),\n ...(reasoningEffort ? { effort: reasoningEffort } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n } satisfies ChatModelRuntime);\n const handleRuntimeChange = (next: ChatModelRuntime) => {\n onRuntimeChange?.(next);\n if ((next.id ?? next.model ?? \"\") !== (model ?? \"\")) {\n onModelChange?.(next.id ?? next.model ?? \"\");\n }\n if ((next.effort ?? \"\") !== (reasoningEffort ?? \"\")) {\n onReasoningEffortChange?.(next.effort ?? \"\");\n }\n };\n\n return (\n <>\n <DropdownMenu\n align=\"right\"\n className={className}\n menuClassName=\"w-72 max-h-[70vh] overflow-y-auto p-1\"\n trigger={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Tool preferences\"\n data-testid=\"tool-preferences-btn\"\n >\n <Icon icon={UiSliders} className=\"size-4\" />\n </Button>\n }\n >\n {(closeMenu) => (\n <div>\n <div className=\"mb-1 px-1 text-xs font-semibold\">\n Tool Preferences\n </div>\n <CompactToolList\n groups={groups}\n value={value}\n onChange={onChange}\n emptyLabel=\"No tools available\"\n />\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n type=\"button\"\n className=\"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-accent\"\n onClick={() => {\n closeMenu();\n setAdvancedOpen(true);\n }}\n >\n Advanced\n </button>\n </div>\n </div>\n )}\n </DropdownMenu>\n <Modal\n open={advancedOpen}\n onClose={() => setAdvancedOpen(false)}\n title=\"Advanced Chat Settings\"\n size=\"xl\"\n >\n <div className=\"flex h-[70vh] min-h-0 flex-col gap-3\">\n <div className=\"flex items-center gap-1 rounded border border-border bg-muted/30 p-1\">\n {ADVANCED_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n className={cn(\n \"inline-flex h-8 items-center gap-1.5 rounded px-3 text-xs font-medium capitalize\",\n advancedTab === tab\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:bg-background/60\",\n )}\n onClick={() => setAdvancedTab(tab)}\n >\n <Icon icon={ADVANCED_TAB_ICONS[tab]} className=\"size-3.5\" />\n {tab}\n </button>\n ))}\n <div className=\"flex-1\" />\n {toolsLoading && (\n <span className=\"pr-2 text-[11px] text-muted-foreground\">\n Loading tools\n </span>\n )}\n {toolsError && (\n <span className=\"pr-2 text-[11px] text-destructive\">\n {toolsError}\n </span>\n )}\n </div>\n {advancedTab === \"config\" ? (\n <AdvancedChatConfig\n models={models}\n runtime={resolvedRuntime}\n onRuntimeChange={handleRuntimeChange}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n runtimeLocked={runtimeLocked}\n permissionMode={permissionMode}\n onPermissionModeChange={onPermissionModeChange}\n temperature={temperature}\n onTemperatureChange={onTemperatureChange}\n budget={budget}\n onBudgetChange={onBudgetChange}\n usage={usage}\n catalogLoading={catalogLoading}\n catalogError={catalogError}\n onCatalogRetry={onCatalogRetry}\n />\n ) : advancedTab === \"costs\" ? (\n <AdvancedCostsPanel costsApi={costsApi} threadId={threadId} />\n ) : advancedTab === \"permissions\" ? (\n <AdvancedPermissionsPanel\n groups={groups}\n value={value}\n onChange={onChange}\n />\n ) : (\n <ToolSchemaBrowser tools={tools} className=\"min-h-0 flex-1\" />\n )}\n </div>\n </Modal>\n </>\n );\n}\n\nfunction AdvancedPermissionsPanel({\n groups,\n value,\n onChange,\n}: {\n groups: ToolGroup[];\n value: Record<string, ToolMode>;\n onChange: (prefs: Record<string, ToolMode>) => void;\n}) {\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded border border-border p-1\">\n <CompactToolList\n groups={groups}\n value={value}\n onChange={onChange}\n emptyLabel=\"No tools\"\n />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolPreferences.js","sources":["../../../src/data/ai/ToolPreferences.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { UiCode2, UiCoins, UiShield, UiSliders } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Modal } from \"../../overlay/Modal\";\nimport { Icon } from \"../Icon\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type {\n ChatBudgetConfig,\n ChatModel,\n ChatModelRuntime,\n ChatUsageSummary,\n ClaudePermissionMode,\n ToolAnnotations,\n ToolMeta,\n ToolPolicy,\n} from \"../chat/types\";\nimport type { SpecRuntimeFamily } from \"../runtime/runtime-mode\";\nimport { AdvancedChatConfig } from \"./AdvancedChatConfig\";\nimport { AdvancedCostsPanel } from \"./AdvancedCostsPanel\";\nimport { ToolSchemaBrowser } from \"./ToolSchemaBrowser\";\nimport {\n CompactToolList,\n CompactToolPreferencesList,\n type CompactToolPreferencesListProps,\n} from \"./ToolPreferencesList\";\nimport { groupedToolEntries, type ToolGroup } from \"./ToolPreferences.model\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\n\nexport type { ClaudePermissionMode, ToolAnnotations, ToolMeta, ToolPolicy };\nexport { CompactToolPreferencesList, type CompactToolPreferencesListProps };\n\nexport type ToolPreferencesProps = {\n tools: ToolMeta[];\n value: Record<string, ToolPolicy>;\n onRule: (rule: PermissionRule) => void;\n models?: ChatModel[] | undefined;\n runtime?: ChatModelRuntime | undefined;\n onRuntimeChange?: ((runtime: ChatModelRuntime) => void) | undefined;\n model?: string | undefined;\n onModelChange?: ((model: string) => void) | undefined;\n runtimeFamilies?: SpecRuntimeFamily[] | undefined;\n reasoningEfforts?: string[] | undefined;\n runtimeLocked?: boolean | undefined;\n reasoningEffort?: string | undefined;\n onReasoningEffortChange?: ((effort: string) => void) | undefined;\n permissionMode?: ClaudePermissionMode | undefined;\n onPermissionModeChange?: ((mode: ClaudePermissionMode) => void) | undefined;\n temperature?: number | undefined;\n onTemperatureChange?: ((temperature: number | undefined) => void) | undefined;\n budget?: ChatBudgetConfig | undefined;\n onBudgetChange?: ((budget: ChatBudgetConfig) => void) | undefined;\n usage?: ChatUsageSummary | null | undefined;\n /** Base sessions endpoint for the Costs tab, e.g. `/api/chat/sessions`. */\n costsApi?: string | undefined;\n /** Thread whose costs the Costs tab reports. */\n threadId?: string | undefined;\n toolsLoading?: boolean | undefined;\n toolsError?: string | null | undefined;\n catalogLoading?: boolean | undefined;\n catalogError?: string | null | undefined;\n onCatalogRetry?: (() => void) | undefined;\n className?: string;\n};\n\ntype AdvancedTab = \"config\" | \"costs\" | \"permissions\" | \"browser\";\n\nconst ADVANCED_TABS: AdvancedTab[] = [\n \"config\",\n \"costs\",\n \"permissions\",\n \"browser\",\n];\n\nconst ADVANCED_TAB_ICONS: Record<AdvancedTab, typeof UiSliders> = {\n config: UiSliders,\n costs: UiCoins,\n permissions: UiShield,\n browser: UiCode2,\n};\n\nexport function ToolPreferences({\n tools,\n value,\n onRule,\n models = [],\n runtime,\n onRuntimeChange,\n model,\n onModelChange,\n runtimeFamilies,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n runtimeLocked = false,\n reasoningEffort,\n onReasoningEffortChange,\n permissionMode = \"default\",\n onPermissionModeChange,\n temperature,\n onTemperatureChange,\n budget,\n onBudgetChange,\n usage,\n costsApi,\n threadId,\n toolsLoading = false,\n toolsError = null,\n catalogLoading = false,\n catalogError = null,\n onCatalogRetry,\n className = \"\",\n}: ToolPreferencesProps) {\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const [advancedTab, setAdvancedTab] = useState<AdvancedTab>(\"config\");\n const groups = useMemo(() => groupedToolEntries(tools), [tools]);\n const resolvedRuntime =\n runtime ??\n ({\n ...(model ? { model } : {}),\n ...(reasoningEffort ? { effort: reasoningEffort } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n } satisfies ChatModelRuntime);\n const handleRuntimeChange = (next: ChatModelRuntime) => {\n onRuntimeChange?.(next);\n if ((next.id ?? next.model ?? \"\") !== (model ?? \"\")) {\n onModelChange?.(next.id ?? next.model ?? \"\");\n }\n if ((next.effort ?? \"\") !== (reasoningEffort ?? \"\")) {\n onReasoningEffortChange?.(next.effort ?? \"\");\n }\n };\n\n return (\n <>\n <DropdownMenu\n align=\"right\"\n className={className}\n menuClassName=\"w-72 max-h-[70vh] overflow-y-auto p-1\"\n trigger={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Tool preferences\"\n data-testid=\"tool-preferences-btn\"\n >\n <Icon icon={UiSliders} className=\"size-4\" />\n </Button>\n }\n >\n {(closeMenu) => (\n <div>\n <div className=\"mb-1 px-1 text-xs font-semibold\">\n Tool Preferences\n </div>\n <CompactToolList\n groups={groups}\n value={value}\n onRule={onRule}\n emptyLabel=\"No tools available\"\n />\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n type=\"button\"\n className=\"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-accent\"\n onClick={() => {\n closeMenu();\n setAdvancedOpen(true);\n }}\n >\n Advanced\n </button>\n </div>\n </div>\n )}\n </DropdownMenu>\n <Modal\n open={advancedOpen}\n onClose={() => setAdvancedOpen(false)}\n title=\"Advanced Chat Settings\"\n size=\"xl\"\n >\n <div className=\"flex h-[70vh] min-h-0 flex-col gap-3\">\n <div className=\"flex items-center gap-1 rounded border border-border bg-muted/30 p-1\">\n {ADVANCED_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n className={cn(\n \"inline-flex h-8 items-center gap-1.5 rounded px-3 text-xs font-medium capitalize\",\n advancedTab === tab\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:bg-background/60\",\n )}\n onClick={() => setAdvancedTab(tab)}\n >\n <Icon icon={ADVANCED_TAB_ICONS[tab]} className=\"size-3.5\" />\n {tab}\n </button>\n ))}\n <div className=\"flex-1\" />\n {toolsLoading && (\n <span className=\"pr-2 text-[11px] text-muted-foreground\">\n Loading tools\n </span>\n )}\n {toolsError && (\n <span className=\"pr-2 text-[11px] text-destructive\">\n {toolsError}\n </span>\n )}\n </div>\n {advancedTab === \"config\" ? (\n <AdvancedChatConfig\n models={models}\n runtime={resolvedRuntime}\n onRuntimeChange={handleRuntimeChange}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n runtimeLocked={runtimeLocked}\n permissionMode={permissionMode}\n onPermissionModeChange={onPermissionModeChange}\n temperature={temperature}\n onTemperatureChange={onTemperatureChange}\n budget={budget}\n onBudgetChange={onBudgetChange}\n usage={usage}\n catalogLoading={catalogLoading}\n catalogError={catalogError}\n onCatalogRetry={onCatalogRetry}\n />\n ) : advancedTab === \"costs\" ? (\n <AdvancedCostsPanel costsApi={costsApi} threadId={threadId} />\n ) : advancedTab === \"permissions\" ? (\n <AdvancedPermissionsPanel\n groups={groups}\n value={value}\n onRule={onRule}\n />\n ) : (\n <ToolSchemaBrowser tools={tools} className=\"min-h-0 flex-1\" />\n )}\n </div>\n </Modal>\n </>\n );\n}\n\nfunction AdvancedPermissionsPanel({\n groups,\n value,\n onRule,\n}: {\n groups: ToolGroup[];\n value: Record<string, ToolPolicy>;\n onRule: (rule: PermissionRule) => void;\n}) {\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded border border-border p-1\">\n <CompactToolList\n groups={groups}\n value={value}\n onRule={onRule}\n emptyLabel=\"No tools\"\n />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
3
|
+
const types = require("../chat/types.cjs");
|
|
4
|
+
const toolPolicy = require("../chat/tool-policy.cjs");
|
|
5
|
+
const POLICY_CYCLE = ["auto", "ask", "deny", "allow"];
|
|
6
|
+
const POLICY_LABEL = {
|
|
7
|
+
allow: "On",
|
|
6
8
|
auto: "Auto",
|
|
7
9
|
ask: "Ask",
|
|
8
|
-
|
|
10
|
+
deny: "Off"
|
|
9
11
|
};
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
+
const POLICY_DESCRIPTION = {
|
|
13
|
+
allow: "Always allow this tool to run automatically.",
|
|
12
14
|
auto: "Use the backend's default permission policy.",
|
|
13
15
|
ask: "Ask before running this tool.",
|
|
14
|
-
|
|
16
|
+
deny: "Hide this tool from the model."
|
|
15
17
|
};
|
|
16
18
|
const BADGE_LABEL = {
|
|
17
|
-
...
|
|
19
|
+
...POLICY_LABEL,
|
|
18
20
|
mixed: "Mixed"
|
|
19
21
|
};
|
|
20
22
|
const BADGE_DESCRIPTION = {
|
|
21
|
-
...
|
|
23
|
+
...POLICY_DESCRIPTION,
|
|
22
24
|
mixed: "Members have different permissions."
|
|
23
25
|
};
|
|
24
26
|
const NO_PARENT = "\0no-parent";
|
|
27
|
+
const RULE_RANKS = [
|
|
28
|
+
(rule) => rule.name === void 0 && rule.parent === void 0,
|
|
29
|
+
(rule) => rule.name === void 0,
|
|
30
|
+
() => true
|
|
31
|
+
];
|
|
32
|
+
function ruleRank(rule) {
|
|
33
|
+
return RULE_RANKS.findIndex((matches) => matches(rule));
|
|
34
|
+
}
|
|
35
|
+
function ruleKey(patterns) {
|
|
36
|
+
if (patterns === void 0) return "";
|
|
37
|
+
return (typeof patterns === "string" ? [patterns] : patterns).join(",");
|
|
38
|
+
}
|
|
39
|
+
function sameSubject(a, b) {
|
|
40
|
+
return ruleKey(a.name) === ruleKey(b.name) && ruleKey(a.group) === ruleKey(b.group) && ruleKey(a.parent) === ruleKey(b.parent);
|
|
41
|
+
}
|
|
42
|
+
function withUserRule(rules, rule) {
|
|
43
|
+
const replaced = rules.map(
|
|
44
|
+
(existing) => sameSubject(existing, rule) ? rule : existing
|
|
45
|
+
);
|
|
46
|
+
const next = replaced.includes(rule) ? replaced : [...replaced, rule];
|
|
47
|
+
return [...next].sort((a, b) => ruleRank(a) - ruleRank(b));
|
|
48
|
+
}
|
|
49
|
+
function effectiveToolPolicies({
|
|
50
|
+
tools,
|
|
51
|
+
surfacePolicy,
|
|
52
|
+
userRules,
|
|
53
|
+
fallback
|
|
54
|
+
}) {
|
|
55
|
+
const policy = [...surfacePolicy ?? [], ...userRules ?? []];
|
|
56
|
+
const resolved = {};
|
|
57
|
+
for (const tool of tools) {
|
|
58
|
+
const matched = toolPolicy.resolveToolPolicy(policy, tool);
|
|
59
|
+
resolved[tool.name] = matched ?? tool.defaultPermission ?? fallback;
|
|
60
|
+
}
|
|
61
|
+
return resolved;
|
|
62
|
+
}
|
|
25
63
|
function groupedToolEntries(tools) {
|
|
26
64
|
const groups = {};
|
|
27
65
|
for (const tool of tools) {
|
|
@@ -63,7 +101,7 @@ function groupedToolEntriesWithPreferences(tools, value) {
|
|
|
63
101
|
const groups = groupedToolEntries(tools);
|
|
64
102
|
const known = new Set(tools.map((tool) => tool.name));
|
|
65
103
|
const customEntries = Object.entries(value).flatMap(([name, mode]) => {
|
|
66
|
-
const normalizedMode =
|
|
104
|
+
const normalizedMode = types.normalizeToolPolicy(mode);
|
|
67
105
|
if (known.has(name) || !normalizedMode) return [];
|
|
68
106
|
return [
|
|
69
107
|
{
|
|
@@ -83,29 +121,13 @@ function groupedToolEntriesWithPreferences(tools, value) {
|
|
|
83
121
|
if (customEntries.length === 0) return groups;
|
|
84
122
|
return [...groups, buildToolGroup("Custom", customEntries)];
|
|
85
123
|
}
|
|
86
|
-
function normalizeToolMode(value) {
|
|
87
|
-
switch (value.trim().toLowerCase()) {
|
|
88
|
-
case "on":
|
|
89
|
-
case "enabled":
|
|
90
|
-
return "on";
|
|
91
|
-
case "auto":
|
|
92
|
-
return "auto";
|
|
93
|
-
case "ask":
|
|
94
|
-
return "ask";
|
|
95
|
-
case "off":
|
|
96
|
-
case "disabled":
|
|
97
|
-
return "off";
|
|
98
|
-
default:
|
|
99
|
-
return void 0;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
124
|
function entryMode(entry, value) {
|
|
103
|
-
return
|
|
125
|
+
return types.normalizeToolPolicy(value[entry.key] ?? "") ?? entry.defaultPermission;
|
|
104
126
|
}
|
|
105
|
-
function
|
|
127
|
+
function groupToolPolicy(entries, value) {
|
|
106
128
|
return entries.reduce(
|
|
107
129
|
(mode, entry) => mostRestrictiveMode(mode, entryMode(entry, value)),
|
|
108
|
-
"
|
|
130
|
+
"allow"
|
|
109
131
|
);
|
|
110
132
|
}
|
|
111
133
|
function commonMode(entries, value) {
|
|
@@ -115,34 +137,36 @@ function commonMode(entries, value) {
|
|
|
115
137
|
return entries.every((entry) => entryMode(entry, value) === firstMode) ? firstMode : "mixed";
|
|
116
138
|
}
|
|
117
139
|
function nextMode(mode) {
|
|
118
|
-
const current =
|
|
119
|
-
return
|
|
140
|
+
const current = POLICY_CYCLE.indexOf(mode);
|
|
141
|
+
return POLICY_CYCLE[((current >= 0 ? current : 0) + 1) % POLICY_CYCLE.length];
|
|
120
142
|
}
|
|
121
143
|
function mostRestrictiveMode(a, b) {
|
|
122
144
|
return modeRank(a) >= modeRank(b) ? a : b;
|
|
123
145
|
}
|
|
124
146
|
function modeRank(mode) {
|
|
125
147
|
switch (mode) {
|
|
126
|
-
case "
|
|
148
|
+
case "allow":
|
|
127
149
|
return 0;
|
|
128
150
|
case "auto":
|
|
129
151
|
return 1;
|
|
130
152
|
case "ask":
|
|
131
153
|
return 2;
|
|
132
|
-
case "
|
|
154
|
+
case "deny":
|
|
133
155
|
return 3;
|
|
134
156
|
}
|
|
135
157
|
}
|
|
136
158
|
exports.BADGE_DESCRIPTION = BADGE_DESCRIPTION;
|
|
137
159
|
exports.BADGE_LABEL = BADGE_LABEL;
|
|
138
|
-
exports.MODE_CYCLE = MODE_CYCLE;
|
|
139
|
-
exports.MODE_DESCRIPTION = MODE_DESCRIPTION;
|
|
140
|
-
exports.MODE_LABEL = MODE_LABEL;
|
|
141
160
|
exports.NO_PARENT = NO_PARENT;
|
|
161
|
+
exports.POLICY_CYCLE = POLICY_CYCLE;
|
|
162
|
+
exports.POLICY_DESCRIPTION = POLICY_DESCRIPTION;
|
|
163
|
+
exports.POLICY_LABEL = POLICY_LABEL;
|
|
142
164
|
exports.commonMode = commonMode;
|
|
165
|
+
exports.effectiveToolPolicies = effectiveToolPolicies;
|
|
143
166
|
exports.entryMode = entryMode;
|
|
144
|
-
exports.
|
|
167
|
+
exports.groupToolPolicy = groupToolPolicy;
|
|
145
168
|
exports.groupedToolEntries = groupedToolEntries;
|
|
146
169
|
exports.groupedToolEntriesWithPreferences = groupedToolEntriesWithPreferences;
|
|
147
170
|
exports.nextMode = nextMode;
|
|
171
|
+
exports.withUserRule = withUserRule;
|
|
148
172
|
//# sourceMappingURL=ToolPreferences.model.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPreferences.model.cjs","sources":["../../../src/data/ai/ToolPreferences.model.ts"],"sourcesContent":["import type { ToolMeta, ToolMode } from \"../chat/types\";\n\nexport const MODE_CYCLE: ToolMode[] = [\"auto\", \"ask\", \"off\", \"on\"];\n\nexport const MODE_LABEL: Record<ToolMode, string> = {\n on: \"On\",\n auto: \"Auto\",\n ask: \"Ask\",\n off: \"Off\",\n};\n\nexport const MODE_DESCRIPTION: Record<ToolMode, string> = {\n on: \"Always allow this tool to run automatically.\",\n auto: \"Use the backend's default permission policy.\",\n ask: \"Ask before running this tool.\",\n off: \"Hide this tool from the model.\",\n};\n\nexport type BadgeMode = ToolMode | \"mixed\";\n\nexport const BADGE_LABEL: Record<BadgeMode, string> = {\n ...MODE_LABEL,\n mixed: \"Mixed\",\n};\n\nexport const BADGE_DESCRIPTION: Record<BadgeMode, string> = {\n ...MODE_DESCRIPTION,\n mixed: \"Members have different permissions.\",\n};\n\nexport type ToolPreferenceEntry = {\n key: string;\n label: string;\n group: string;\n tool: ToolMeta;\n defaultPermission: ToolMode;\n};\n\nexport const NO_PARENT = \"\\u0000no-parent\";\n\nexport type ToolSubGroup = {\n parent: string;\n entries: ToolPreferenceEntry[];\n};\n\nexport type ToolGroup = {\n group: string;\n entries: ToolPreferenceEntry[];\n subGroups: ToolSubGroup[];\n};\n\nexport function groupedToolEntries(tools: ToolMeta[]): ToolGroup[] {\n const groups: Record<string, ToolPreferenceEntry[]> = {};\n for (const tool of tools) {\n const group = tool.group ?? \"Tools\";\n const entry: ToolPreferenceEntry = {\n key: tool.name,\n label: tool.label || tool.name,\n group,\n tool,\n defaultPermission: tool.defaultPermission ?? \"auto\",\n };\n (groups[group] ??= []).push(entry);\n }\n return Object.entries(groups)\n .map(([group, entries]) => buildToolGroup(group, entries))\n .sort((a, b) => a.group.localeCompare(b.group));\n}\n\nfunction buildToolGroup(\n group: string,\n entries: ToolPreferenceEntry[],\n): ToolGroup {\n const byParent: Record<string, ToolPreferenceEntry[]> = {};\n for (const entry of entries) {\n const parent = entry.tool.parent?.trim() || NO_PARENT;\n (byParent[parent] ??= []).push(entry);\n }\n const subGroups = Object.entries(byParent)\n .map(([parent, subEntries]) => ({\n parent,\n entries: [...subEntries].sort((a, b) => a.label.localeCompare(b.label)),\n }))\n .sort(compareSubGroups);\n return {\n group,\n entries: [...entries].sort((a, b) => a.label.localeCompare(b.label)),\n subGroups,\n };\n}\n\nfunction compareSubGroups(a: ToolSubGroup, b: ToolSubGroup): number {\n if (a.parent === NO_PARENT) return b.parent === NO_PARENT ? 0 : -1;\n if (b.parent === NO_PARENT) return 1;\n return a.parent.localeCompare(b.parent);\n}\n\nexport function groupedToolEntriesWithPreferences(\n tools: ToolMeta[],\n value: Record<string, ToolMode>,\n): ToolGroup[] {\n const groups = groupedToolEntries(tools);\n const known = new Set(tools.map((tool) => tool.name));\n const customEntries = Object.entries(value).flatMap(([name, mode]) => {\n const normalizedMode = normalizeToolMode(mode);\n if (known.has(name) || !normalizedMode) return [];\n return [\n {\n key: name,\n label: name,\n group: \"Custom\",\n tool: {\n name,\n label: name,\n group: \"Custom\",\n defaultPermission: normalizedMode,\n },\n defaultPermission: normalizedMode,\n },\n ];\n });\n if (customEntries.length === 0) return groups;\n return [...groups, buildToolGroup(\"Custom\", customEntries)];\n}\n\nfunction normalizeToolMode(value: string): ToolMode | undefined {\n switch (value.trim().toLowerCase()) {\n case \"on\":\n case \"enabled\":\n return \"on\";\n case \"auto\":\n return \"auto\";\n case \"ask\":\n return \"ask\";\n case \"off\":\n case \"disabled\":\n return \"off\";\n default:\n return undefined;\n }\n}\n\nexport function entryMode(\n entry: ToolPreferenceEntry,\n value: Record<string, ToolMode>,\n): ToolMode {\n return normalizeToolMode(value[entry.key] ?? \"\") ?? entry.defaultPermission;\n}\n\nexport function groupToolMode(\n entries: ToolPreferenceEntry[],\n value: Record<string, ToolMode>,\n): ToolMode {\n return entries.reduce<ToolMode>(\n (mode, entry) => mostRestrictiveMode(mode, entryMode(entry, value)),\n \"on\",\n );\n}\n\nexport function commonMode(\n entries: ToolPreferenceEntry[],\n value: Record<string, ToolMode>,\n): BadgeMode {\n const first = entries[0];\n if (!first) return \"mixed\";\n const firstMode = entryMode(first, value);\n return entries.every((entry) => entryMode(entry, value) === firstMode)\n ? firstMode\n : \"mixed\";\n}\n\nexport function nextMode(mode: ToolMode): ToolMode {\n const current = MODE_CYCLE.indexOf(mode);\n return MODE_CYCLE[((current >= 0 ? current : 0) + 1) % MODE_CYCLE.length]!;\n}\n\nfunction mostRestrictiveMode(a: ToolMode, b: ToolMode): ToolMode {\n return modeRank(a) >= modeRank(b) ? a : b;\n}\n\nfunction modeRank(mode: ToolMode): number {\n switch (mode) {\n case \"on\":\n return 0;\n case \"auto\":\n return 1;\n case \"ask\":\n return 2;\n case \"off\":\n return 3;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolPreferences.model.cjs","sources":["../../../src/data/ai/ToolPreferences.model.ts"],"sourcesContent":["import type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { normalizeToolPolicy } from \"../chat/types\";\nimport {\n resolveToolPolicy,\n type PermissionPolicy,\n type PermissionRule,\n} from \"../chat/tool-policy\";\n\nexport const POLICY_CYCLE: ToolPolicy[] = [\"auto\", \"ask\", \"deny\", \"allow\"];\n\n/** On and Off stay as the control's labels — they read better on a toggle than\n * allow/deny do. The wire vocabulary is the policy; this is presentation. */\nexport const POLICY_LABEL: Record<ToolPolicy, string> = {\n allow: \"On\",\n auto: \"Auto\",\n ask: \"Ask\",\n deny: \"Off\",\n};\n\nexport const POLICY_DESCRIPTION: Record<ToolPolicy, string> = {\n allow: \"Always allow this tool to run automatically.\",\n auto: \"Use the backend's default permission policy.\",\n ask: \"Ask before running this tool.\",\n deny: \"Hide this tool from the model.\",\n};\n\nexport type BadgePolicy = ToolPolicy | \"mixed\";\n\nexport const BADGE_LABEL: Record<BadgePolicy, string> = {\n ...POLICY_LABEL,\n mixed: \"Mixed\",\n};\n\nexport const BADGE_DESCRIPTION: Record<BadgePolicy, string> = {\n ...POLICY_DESCRIPTION,\n mixed: \"Members have different permissions.\",\n};\n\nexport type ToolPreferenceEntry = {\n key: string;\n label: string;\n group: string;\n tool: ToolMeta;\n defaultPermission: ToolPolicy;\n};\n\nexport const NO_PARENT = \"\\u0000no-parent\";\n\nexport type ToolSubGroup = {\n parent: string;\n entries: ToolPreferenceEntry[];\n};\n\n/** A toggle in the popover emits one rule rather than writing a mode per tool.\n * Which control was used is the thing worth recording: a group toggle means\n * \"this whole family\", so it keeps applying to tools that arrive later, while\n * writing every current member's name would silently stop at today's catalog.\n *\n * Rules are held in specificity order — group, then group+parent, then name —\n * so a per-tool toggle beats the group toggle above it however they were\n * clicked. Position, not a precedence number, is what encodes that. */\nconst RULE_RANKS: ((rule: PermissionRule) => boolean)[] = [\n (rule) => rule.name === undefined && rule.parent === undefined,\n (rule) => rule.name === undefined,\n () => true,\n];\n\nfunction ruleRank(rule: PermissionRule): number {\n return RULE_RANKS.findIndex((matches) => matches(rule));\n}\n\nfunction ruleKey(patterns: PermissionRule[\"name\"]): string {\n if (patterns === undefined) return \"\";\n return (typeof patterns === \"string\" ? [patterns] : patterns).join(\",\");\n}\n\nfunction sameSubject(a: PermissionRule, b: PermissionRule): boolean {\n return (\n ruleKey(a.name) === ruleKey(b.name) &&\n ruleKey(a.group) === ruleKey(b.group) &&\n ruleKey(a.parent) === ruleKey(b.parent)\n );\n}\n\n/** Adds one toggle's rule to the user's list, replacing any earlier rule for the\n * same subject in place so re-toggling a control does not grow the list, and\n * keeping the list in specificity order. */\nexport function withUserRule(\n rules: PermissionPolicy,\n rule: PermissionRule,\n): PermissionPolicy {\n const replaced = rules.map((existing) =>\n sameSubject(existing, rule) ? rule : existing,\n );\n const next = replaced.includes(rule) ? replaced : [...replaced, rule];\n return [...next].sort((a, b) => ruleRank(a) - ruleRank(b));\n}\n\n/** The mode to show for each tool: the user's own rules over the surface's, then\n * what the catalog says about the tool, then the fallback.\n *\n * An explicit `auto` remains visible here so the control can advance from it\n * on the next toggle. The server applies its catalog fallback when enforcing\n * the emitted rule. */\nexport function effectiveToolPolicies({\n tools,\n surfacePolicy,\n userRules,\n fallback,\n}: {\n tools: ToolMeta[];\n surfacePolicy?: PermissionPolicy | undefined;\n userRules?: PermissionPolicy | undefined;\n fallback: ToolPolicy;\n}): Record<string, ToolPolicy> {\n const policy = [...(surfacePolicy ?? []), ...(userRules ?? [])];\n const resolved: Record<string, ToolPolicy> = {};\n for (const tool of tools) {\n const matched = resolveToolPolicy(policy, tool);\n resolved[tool.name] = matched ?? tool.defaultPermission ?? fallback;\n }\n return resolved;\n}\n\nexport type ToolGroup = {\n group: string;\n entries: ToolPreferenceEntry[];\n subGroups: ToolSubGroup[];\n};\n\nexport function groupedToolEntries(tools: ToolMeta[]): ToolGroup[] {\n const groups: Record<string, ToolPreferenceEntry[]> = {};\n for (const tool of tools) {\n const group = tool.group ?? \"Tools\";\n const entry: ToolPreferenceEntry = {\n key: tool.name,\n label: tool.label || tool.name,\n group,\n tool,\n defaultPermission: tool.defaultPermission ?? \"auto\",\n };\n (groups[group] ??= []).push(entry);\n }\n return Object.entries(groups)\n .map(([group, entries]) => buildToolGroup(group, entries))\n .sort((a, b) => a.group.localeCompare(b.group));\n}\n\nfunction buildToolGroup(\n group: string,\n entries: ToolPreferenceEntry[],\n): ToolGroup {\n const byParent: Record<string, ToolPreferenceEntry[]> = {};\n for (const entry of entries) {\n const parent = entry.tool.parent?.trim() || NO_PARENT;\n (byParent[parent] ??= []).push(entry);\n }\n const subGroups = Object.entries(byParent)\n .map(([parent, subEntries]) => ({\n parent,\n entries: [...subEntries].sort((a, b) => a.label.localeCompare(b.label)),\n }))\n .sort(compareSubGroups);\n return {\n group,\n entries: [...entries].sort((a, b) => a.label.localeCompare(b.label)),\n subGroups,\n };\n}\n\nfunction compareSubGroups(a: ToolSubGroup, b: ToolSubGroup): number {\n if (a.parent === NO_PARENT) return b.parent === NO_PARENT ? 0 : -1;\n if (b.parent === NO_PARENT) return 1;\n return a.parent.localeCompare(b.parent);\n}\n\nexport function groupedToolEntriesWithPreferences(\n tools: ToolMeta[],\n value: Record<string, ToolPolicy>,\n): ToolGroup[] {\n const groups = groupedToolEntries(tools);\n const known = new Set(tools.map((tool) => tool.name));\n const customEntries = Object.entries(value).flatMap(([name, mode]) => {\n const normalizedMode = normalizeToolPolicy(mode);\n if (known.has(name) || !normalizedMode) return [];\n return [\n {\n key: name,\n label: name,\n group: \"Custom\",\n tool: {\n name,\n label: name,\n group: \"Custom\",\n defaultPermission: normalizedMode,\n },\n defaultPermission: normalizedMode,\n },\n ];\n });\n if (customEntries.length === 0) return groups;\n return [...groups, buildToolGroup(\"Custom\", customEntries)];\n}\n\nexport function entryMode(\n entry: ToolPreferenceEntry,\n value: Record<string, ToolPolicy>,\n): ToolPolicy {\n return normalizeToolPolicy(value[entry.key] ?? \"\") ?? entry.defaultPermission;\n}\n\nexport function groupToolPolicy(\n entries: ToolPreferenceEntry[],\n value: Record<string, ToolPolicy>,\n): ToolPolicy {\n return entries.reduce<ToolPolicy>(\n (mode, entry) => mostRestrictiveMode(mode, entryMode(entry, value)),\n \"allow\",\n );\n}\n\nexport function commonMode(\n entries: ToolPreferenceEntry[],\n value: Record<string, ToolPolicy>,\n): BadgePolicy {\n const first = entries[0];\n if (!first) return \"mixed\";\n const firstMode = entryMode(first, value);\n return entries.every((entry) => entryMode(entry, value) === firstMode)\n ? firstMode\n : \"mixed\";\n}\n\nexport function nextMode(mode: ToolPolicy): ToolPolicy {\n const current = POLICY_CYCLE.indexOf(mode);\n return POLICY_CYCLE[\n ((current >= 0 ? current : 0) + 1) % POLICY_CYCLE.length\n ]!;\n}\n\nfunction mostRestrictiveMode(a: ToolPolicy, b: ToolPolicy): ToolPolicy {\n return modeRank(a) >= modeRank(b) ? a : b;\n}\n\nfunction modeRank(mode: ToolPolicy): number {\n switch (mode) {\n case \"allow\":\n return 0;\n case \"auto\":\n return 1;\n case \"ask\":\n return 2;\n case \"deny\":\n return 3;\n }\n}\n"],"names":["resolveToolPolicy","normalizeToolPolicy"],"mappings":"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"}
|
|
@@ -1,31 +1,50 @@
|
|
|
1
|
-
import { ToolMeta,
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
1
|
+
import { ToolMeta, ToolPolicy } from '../chat/types';
|
|
2
|
+
import { PermissionPolicy, PermissionRule } from '../chat/tool-policy';
|
|
3
|
+
export declare const POLICY_CYCLE: ToolPolicy[];
|
|
4
|
+
/** On and Off stay as the control's labels — they read better on a toggle than
|
|
5
|
+
* allow/deny do. The wire vocabulary is the policy; this is presentation. */
|
|
6
|
+
export declare const POLICY_LABEL: Record<ToolPolicy, string>;
|
|
7
|
+
export declare const POLICY_DESCRIPTION: Record<ToolPolicy, string>;
|
|
8
|
+
export type BadgePolicy = ToolPolicy | "mixed";
|
|
9
|
+
export declare const BADGE_LABEL: Record<BadgePolicy, string>;
|
|
10
|
+
export declare const BADGE_DESCRIPTION: Record<BadgePolicy, string>;
|
|
8
11
|
export type ToolPreferenceEntry = {
|
|
9
12
|
key: string;
|
|
10
13
|
label: string;
|
|
11
14
|
group: string;
|
|
12
15
|
tool: ToolMeta;
|
|
13
|
-
defaultPermission:
|
|
16
|
+
defaultPermission: ToolPolicy;
|
|
14
17
|
};
|
|
15
18
|
export declare const NO_PARENT = "\0no-parent";
|
|
16
19
|
export type ToolSubGroup = {
|
|
17
20
|
parent: string;
|
|
18
21
|
entries: ToolPreferenceEntry[];
|
|
19
22
|
};
|
|
23
|
+
/** Adds one toggle's rule to the user's list, replacing any earlier rule for the
|
|
24
|
+
* same subject in place so re-toggling a control does not grow the list, and
|
|
25
|
+
* keeping the list in specificity order. */
|
|
26
|
+
export declare function withUserRule(rules: PermissionPolicy, rule: PermissionRule): PermissionPolicy;
|
|
27
|
+
/** The mode to show for each tool: the user's own rules over the surface's, then
|
|
28
|
+
* what the catalog says about the tool, then the fallback.
|
|
29
|
+
*
|
|
30
|
+
* An explicit `auto` remains visible here so the control can advance from it
|
|
31
|
+
* on the next toggle. The server applies its catalog fallback when enforcing
|
|
32
|
+
* the emitted rule. */
|
|
33
|
+
export declare function effectiveToolPolicies({ tools, surfacePolicy, userRules, fallback, }: {
|
|
34
|
+
tools: ToolMeta[];
|
|
35
|
+
surfacePolicy?: PermissionPolicy | undefined;
|
|
36
|
+
userRules?: PermissionPolicy | undefined;
|
|
37
|
+
fallback: ToolPolicy;
|
|
38
|
+
}): Record<string, ToolPolicy>;
|
|
20
39
|
export type ToolGroup = {
|
|
21
40
|
group: string;
|
|
22
41
|
entries: ToolPreferenceEntry[];
|
|
23
42
|
subGroups: ToolSubGroup[];
|
|
24
43
|
};
|
|
25
44
|
export declare function groupedToolEntries(tools: ToolMeta[]): ToolGroup[];
|
|
26
|
-
export declare function groupedToolEntriesWithPreferences(tools: ToolMeta[], value: Record<string,
|
|
27
|
-
export declare function entryMode(entry: ToolPreferenceEntry, value: Record<string,
|
|
28
|
-
export declare function
|
|
29
|
-
export declare function commonMode(entries: ToolPreferenceEntry[], value: Record<string,
|
|
30
|
-
export declare function nextMode(mode:
|
|
45
|
+
export declare function groupedToolEntriesWithPreferences(tools: ToolMeta[], value: Record<string, ToolPolicy>): ToolGroup[];
|
|
46
|
+
export declare function entryMode(entry: ToolPreferenceEntry, value: Record<string, ToolPolicy>): ToolPolicy;
|
|
47
|
+
export declare function groupToolPolicy(entries: ToolPreferenceEntry[], value: Record<string, ToolPolicy>): ToolPolicy;
|
|
48
|
+
export declare function commonMode(entries: ToolPreferenceEntry[], value: Record<string, ToolPolicy>): BadgePolicy;
|
|
49
|
+
export declare function nextMode(mode: ToolPolicy): ToolPolicy;
|
|
31
50
|
//# sourceMappingURL=ToolPreferences.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPreferences.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolPreferences.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ToolPreferences.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolPreferences.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,YAAY,EAAE,UAAU,EAAqC,CAAC;AAE3E;8EAC8E;AAC9E,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKzD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAGnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAGzD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,iBAAiB,EAAE,UAAU,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,SAAS,gBAAoB,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAAC;AAiCF;;6CAE6C;AAC7C,wBAAgB,YAAY,CAC1B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,cAAc,GACnB,gBAAgB,CAMlB;AAED;;;;;wBAKwB;AACxB,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,aAAa,EACb,SAAS,EACT,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,UAAU,CAAC;CACtB,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAQ7B;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAgBjE;AA8BD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,SAAS,EAAE,CAuBb;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,UAAU,CAEZ;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,UAAU,CAKZ;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,WAAW,CAOb;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAKrD"}
|