@flanksource/clicky-ui 0.3.25 → 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/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 +22 -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/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
|
@@ -1,24 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
4
|
-
tools,
|
|
5
|
-
explicit,
|
|
6
|
-
surfaceDefaults,
|
|
7
|
-
fallback
|
|
8
|
-
}) {
|
|
9
|
-
const resolved = {};
|
|
10
|
-
for (const tool of tools) {
|
|
11
|
-
resolved[tool.name] = explicit[tool.name] ?? surfaceDefault(tool, surfaceDefaults) ?? tool.defaultPermission ?? fallback;
|
|
12
|
-
}
|
|
13
|
-
return resolved;
|
|
14
|
-
}
|
|
15
|
-
function surfaceDefault(tool, surfaceDefaults) {
|
|
16
|
-
if (!surfaceDefaults) return void 0;
|
|
17
|
-
for (const key of [tool.name, tool.preferenceKey, tool.group]) {
|
|
18
|
-
if (key && surfaceDefaults[key]) return surfaceDefaults[key];
|
|
19
|
-
}
|
|
20
|
-
return void 0;
|
|
21
|
-
}
|
|
3
|
+
const types = require("../chat/types.cjs");
|
|
22
4
|
function normalizeToolCatalog(data) {
|
|
23
5
|
const tools = Array.isArray(data) ? data : data && typeof data === "object" && Array.isArray(data.tools) ? data.tools : [];
|
|
24
6
|
return tools.flatMap((tool) => normalizeToolMeta(tool));
|
|
@@ -29,7 +11,7 @@ function normalizeToolMeta(tool) {
|
|
|
29
11
|
const name = stringValue(item.name);
|
|
30
12
|
if (!name) return [];
|
|
31
13
|
const label = stringValue(item.label) ?? stringValue(item.title) ?? stringValue(item.operationName) ?? name;
|
|
32
|
-
const defaultPermission =
|
|
14
|
+
const defaultPermission = types.normalizeToolPolicy(
|
|
33
15
|
item.defaultPermission ?? item.defaultMode
|
|
34
16
|
);
|
|
35
17
|
const group = stringValue(item.group);
|
|
@@ -44,9 +26,12 @@ function normalizeToolMeta(tool) {
|
|
|
44
26
|
const method = stringValue(item.method);
|
|
45
27
|
const path = stringValue(item.path);
|
|
46
28
|
const operationName = stringValue(item.operationName);
|
|
29
|
+
const verb = stringValue(item.verb);
|
|
30
|
+
const action = stringValue(item.action);
|
|
31
|
+
const scope = stringValue(item.scope);
|
|
47
32
|
const title = stringValue(item.title);
|
|
48
33
|
const strict = booleanValue(item.strict);
|
|
49
|
-
const annotations =
|
|
34
|
+
const annotations = toolAnnotations(item);
|
|
50
35
|
const inputSchema = schemaValue(item.inputSchema);
|
|
51
36
|
const outputSchema = schemaValue(item.outputSchema);
|
|
52
37
|
return [
|
|
@@ -66,6 +51,9 @@ function normalizeToolMeta(tool) {
|
|
|
66
51
|
...method ? { method } : {},
|
|
67
52
|
...path ? { path } : {},
|
|
68
53
|
...operationName ? { operationName } : {},
|
|
54
|
+
...verb ? { verb } : {},
|
|
55
|
+
...action ? { action } : {},
|
|
56
|
+
...scope ? { scope } : {},
|
|
69
57
|
...title ? { title } : {},
|
|
70
58
|
...strict !== void 0 ? { strict } : {},
|
|
71
59
|
...annotations ? { annotations } : {},
|
|
@@ -97,23 +85,18 @@ function annotationsValue(value) {
|
|
|
97
85
|
return void 0;
|
|
98
86
|
return value;
|
|
99
87
|
}
|
|
100
|
-
function
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return "auto";
|
|
113
|
-
default:
|
|
114
|
-
return void 0;
|
|
115
|
-
}
|
|
88
|
+
function toolAnnotations(item) {
|
|
89
|
+
const nested = annotationsValue(item.annotations) ?? {};
|
|
90
|
+
const readOnlyHint = booleanValue(item.readOnlyHint) ?? nested.readOnlyHint;
|
|
91
|
+
const destructiveHint = booleanValue(item.destructiveHint) ?? nested.destructiveHint;
|
|
92
|
+
const idempotentHint = booleanValue(item.idempotentHint) ?? nested.idempotentHint;
|
|
93
|
+
const merged = {
|
|
94
|
+
...nested,
|
|
95
|
+
...readOnlyHint !== void 0 ? { readOnlyHint } : {},
|
|
96
|
+
...destructiveHint !== void 0 ? { destructiveHint } : {},
|
|
97
|
+
...idempotentHint !== void 0 ? { idempotentHint } : {}
|
|
98
|
+
};
|
|
99
|
+
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
116
100
|
}
|
|
117
|
-
exports.effectiveToolPreferences = effectiveToolPreferences;
|
|
118
101
|
exports.normalizeToolCatalog = normalizeToolCatalog;
|
|
119
102
|
//# sourceMappingURL=ChatWindow.tool-catalog.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.tool-catalog.cjs","sources":["../../../src/data/ai/ChatWindow.tool-catalog.ts"],"sourcesContent":["import type { ToolMeta,
|
|
1
|
+
{"version":3,"file":"ChatWindow.tool-catalog.cjs","sources":["../../../src/data/ai/ChatWindow.tool-catalog.ts"],"sourcesContent":["import type { ToolMeta, ToolPolicy } from \"./ToolPreferences\";\nimport { normalizeToolPolicy as normalizeToolPolicyValue } from \"../chat/types\";\n\n/** Resolves the effective mode of every tool, most-specific source first:\n *\n * 1. `explicit` — a mode the user chose in the preferences popover.\n * 2. `surfaceDefaults` — what the surface that opened the window declares,\n * matched on the tool's name, `preferenceKey`, or `group`.\n * 3. the tool catalog's own `defaultPermission`.\n * 4. `fallback`.\n *\n * Explicit choices are kept separate from seeded defaults precisely so a later\n * surface's policy can still apply to tools the user never touched. */\nexport function effectiveToolPreferences({\n tools,\n explicit,\n surfaceDefaults,\n fallback,\n}: {\n tools: ToolMeta[];\n explicit: Record<string, ToolPolicy>;\n surfaceDefaults?: Record<string, ToolPolicy>;\n fallback: ToolPolicy;\n}): Record<string, ToolPolicy> {\n const resolved: Record<string, ToolPolicy> = {};\n for (const tool of tools) {\n resolved[tool.name] =\n explicit[tool.name] ??\n surfaceDefault(tool, surfaceDefaults) ??\n tool.defaultPermission ??\n fallback;\n }\n return resolved;\n}\n\nfunction surfaceDefault(\n tool: ToolMeta,\n surfaceDefaults: Record<string, ToolPolicy> | undefined\n): ToolPolicy | undefined {\n if (!surfaceDefaults) return undefined;\n for (const key of [tool.name, tool.preferenceKey, tool.group]) {\n if (key && surfaceDefaults[key]) return surfaceDefaults[key];\n }\n return undefined;\n}\n\nexport function normalizeToolCatalog(data: unknown): ToolMeta[] {\n const tools = Array.isArray(data)\n ? data\n : data &&\n typeof data === \"object\" &&\n Array.isArray((data as { tools?: unknown }).tools)\n ? (data as { tools: unknown[] }).tools\n : [];\n return tools.flatMap((tool) => normalizeToolMeta(tool));\n}\n\nfunction normalizeToolMeta(tool: unknown): ToolMeta[] {\n if (!tool || typeof tool !== \"object\") return [];\n const item = tool as Record<string, unknown>;\n const name = stringValue(item.name);\n if (!name) return [];\n const label =\n stringValue(item.label) ??\n stringValue(item.title) ??\n stringValue(item.operationName) ??\n name;\n const defaultPermission = normalizeToolPolicyValue(\n item.defaultPermission ?? item.defaultMode\n );\n const group = stringValue(item.group);\n const parent = stringValue(item.parent);\n const entity = stringValue(item.entity);\n const preferenceKey = stringValue(item.preferenceKey);\n const icon = stringValue(item.icon);\n const description = stringValue(item.description);\n const hints = stringArrayValue(item.hints);\n const source = stringValue(item.source);\n const server = stringValue(item.server);\n const method = stringValue(item.method);\n const path = stringValue(item.path);\n const operationName = stringValue(item.operationName);\n // Facets a permission rule may match on. They are read even though nothing\n // renders them, because a facet the client cannot see is one it resolves\n // differently from the server that enforces the same rule.\n const verb = stringValue(item.verb);\n const action = stringValue(item.action);\n const scope = stringValue(item.scope);\n const title = stringValue(item.title);\n const strict = booleanValue(item.strict);\n const annotations = toolAnnotations(item);\n const inputSchema = schemaValue(item.inputSchema);\n const outputSchema = schemaValue(item.outputSchema);\n return [\n {\n name,\n label,\n ...(group ? { group } : {}),\n ...(parent ? { parent } : {}),\n ...(entity ? { entity } : {}),\n ...(preferenceKey ? { preferenceKey } : {}),\n ...(defaultPermission ? { defaultPermission } : {}),\n ...(icon ? { icon } : {}),\n ...(description ? { description } : {}),\n ...(hints ? { hints } : {}),\n ...(source ? { source } : {}),\n ...(server ? { server } : {}),\n ...(method ? { method } : {}),\n ...(path ? { path } : {}),\n ...(operationName ? { operationName } : {}),\n ...(verb ? { verb } : {}),\n ...(action ? { action } : {}),\n ...(scope ? { scope } : {}),\n ...(title ? { title } : {}),\n ...(strict !== undefined ? { strict } : {}),\n ...(annotations ? { annotations } : {}),\n ...(inputSchema ? { inputSchema } : {}),\n ...(outputSchema ? { outputSchema } : {}),\n },\n ];\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction stringArrayValue(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const values = value.filter(\n (item): item is string => typeof item === \"string\" && item.trim().length > 0\n );\n return values.length > 0 ? values : undefined;\n}\n\nfunction schemaValue(value: unknown): ToolMeta[\"inputSchema\"] | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n return value as ToolMeta[\"inputSchema\"];\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction annotationsValue(value: unknown): ToolMeta[\"annotations\"] | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n return value as ToolMeta[\"annotations\"];\n}\n\n/** Safety hints arrive either nested under `annotations` (MCP `_meta`) or flat on\n * the catalog entry (a clicky operation). A rule matching on a hint has to see\n * both, so they are folded into one place here rather than at each rule check.\n *\n * A hint the tool never declared stays absent. That is not the same as `false`:\n * a rule requiring `readOnly: false` must not select a tool that said nothing. */\nfunction toolAnnotations(\n item: Record<string, unknown>\n): ToolMeta[\"annotations\"] | undefined {\n const nested = annotationsValue(item.annotations) ?? {};\n const readOnlyHint = booleanValue(item.readOnlyHint) ?? nested.readOnlyHint;\n const destructiveHint =\n booleanValue(item.destructiveHint) ?? nested.destructiveHint;\n const idempotentHint =\n booleanValue(item.idempotentHint) ?? nested.idempotentHint;\n const merged = {\n ...nested,\n ...(readOnlyHint !== undefined ? { readOnlyHint } : {}),\n ...(destructiveHint !== undefined ? { destructiveHint } : {}),\n ...(idempotentHint !== undefined ? { idempotentHint } : {}),\n };\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\n"],"names":["normalizeToolPolicyValue"],"mappings":";;;AA8CO,SAAS,qBAAqB,MAA2B;AAC9D,QAAM,QAAQ,MAAM,QAAQ,IAAI,IAC5B,OACA,QACA,OAAO,SAAS,YAChB,MAAM,QAAS,KAA6B,KAAK,IAChD,KAA8B,QAC/B,CAAA;AACJ,SAAO,MAAM,QAAQ,CAAC,SAAS,kBAAkB,IAAI,CAAC;AACxD;AAEA,SAAS,kBAAkB,MAA2B;AACpD,MAAI,CAAC,QAAQ,OAAO,SAAS,iBAAiB,CAAA;AAC9C,QAAM,OAAO;AACb,QAAM,OAAO,YAAY,KAAK,IAAI;AAClC,MAAI,CAAC,KAAM,QAAO,CAAA;AAClB,QAAM,QACJ,YAAY,KAAK,KAAK,KACtB,YAAY,KAAK,KAAK,KACtB,YAAY,KAAK,aAAa,KAC9B;AACF,QAAM,oBAAoBA,MAAAA;AAAAA,IACxB,KAAK,qBAAqB,KAAK;AAAA,EAAA;AAEjC,QAAM,QAAQ,YAAY,KAAK,KAAK;AACpC,QAAM,SAAS,YAAY,KAAK,MAAM;AACtC,QAAM,SAAS,YAAY,KAAK,MAAM;AACtC,QAAM,gBAAgB,YAAY,KAAK,aAAa;AACpD,QAAM,OAAO,YAAY,KAAK,IAAI;AAClC,QAAM,cAAc,YAAY,KAAK,WAAW;AAChD,QAAM,QAAQ,iBAAiB,KAAK,KAAK;AACzC,QAAM,SAAS,YAAY,KAAK,MAAM;AACtC,QAAM,SAAS,YAAY,KAAK,MAAM;AACtC,QAAM,SAAS,YAAY,KAAK,MAAM;AACtC,QAAM,OAAO,YAAY,KAAK,IAAI;AAClC,QAAM,gBAAgB,YAAY,KAAK,aAAa;AAIpD,QAAM,OAAO,YAAY,KAAK,IAAI;AAClC,QAAM,SAAS,YAAY,KAAK,MAAM;AACtC,QAAM,QAAQ,YAAY,KAAK,KAAK;AACpC,QAAM,QAAQ,YAAY,KAAK,KAAK;AACpC,QAAM,SAAS,aAAa,KAAK,MAAM;AACvC,QAAM,cAAc,gBAAgB,IAAI;AACxC,QAAM,cAAc,YAAY,KAAK,WAAW;AAChD,QAAM,eAAe,YAAY,KAAK,YAAY;AAClD,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,MACxB,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,gBAAgB,EAAE,cAAA,IAAkB,CAAA;AAAA,MACxC,GAAI,oBAAoB,EAAE,kBAAA,IAAsB,CAAA;AAAA,MAChD,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,MACtB,GAAI,cAAc,EAAE,YAAA,IAAgB,CAAA;AAAA,MACpC,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,MACxB,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,MACtB,GAAI,gBAAgB,EAAE,cAAA,IAAkB,CAAA;AAAA,MACxC,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,MACtB,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,MACxB,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,MACxB,GAAI,WAAW,SAAY,EAAE,OAAA,IAAW,CAAA;AAAA,MACxC,GAAI,cAAc,EAAE,YAAA,IAAgB,CAAA;AAAA,MACpC,GAAI,cAAc,EAAE,YAAA,IAAgB,CAAA;AAAA,MACpC,GAAI,eAAe,EAAE,iBAAiB,CAAA;AAAA,IAAC;AAAA,EACzC;AAEJ;AAEA,SAAS,YAAY,OAAoC;AACvD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAA,IAAS,QAAQ;AAC7D;AAEA,SAAS,iBAAiB,OAAsC;AAC9D,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,QAAM,SAAS,MAAM;AAAA,IACnB,CAAC,SAAyB,OAAO,SAAS,YAAY,KAAK,KAAA,EAAO,SAAS;AAAA,EAAA;AAE7E,SAAO,OAAO,SAAS,IAAI,SAAS;AACtC;AAEA,SAAS,YAAY,OAAqD;AACxE,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAC5D,WAAO;AACT,SAAO;AACT;AAEA,SAAS,aAAa,OAAqC;AACzD,SAAO,OAAO,UAAU,YAAY,QAAQ;AAC9C;AAEA,SAAS,iBAAiB,OAAqD;AAC7E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAC5D,WAAO;AACT,SAAO;AACT;AAQA,SAAS,gBACP,MACqC;AACrC,QAAM,SAAS,iBAAiB,KAAK,WAAW,KAAK,CAAA;AACrD,QAAM,eAAe,aAAa,KAAK,YAAY,KAAK,OAAO;AAC/D,QAAM,kBACJ,aAAa,KAAK,eAAe,KAAK,OAAO;AAC/C,QAAM,iBACJ,aAAa,KAAK,cAAc,KAAK,OAAO;AAC9C,QAAM,SAAS;AAAA,IACb,GAAG;AAAA,IACH,GAAI,iBAAiB,SAAY,EAAE,aAAA,IAAiB,CAAA;AAAA,IACpD,GAAI,oBAAoB,SAAY,EAAE,gBAAA,IAAoB,CAAA;AAAA,IAC1D,GAAI,mBAAmB,SAAY,EAAE,mBAAmB,CAAA;AAAA,EAAC;AAE3D,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ToolMeta,
|
|
1
|
+
import { ToolMeta, ToolPolicy } from './ToolPreferences';
|
|
2
2
|
/** Resolves the effective mode of every tool, most-specific source first:
|
|
3
3
|
*
|
|
4
4
|
* 1. `explicit` — a mode the user chose in the preferences popover.
|
|
@@ -11,9 +11,9 @@ import { ToolMeta, ToolMode } from './ToolPreferences';
|
|
|
11
11
|
* surface's policy can still apply to tools the user never touched. */
|
|
12
12
|
export declare function effectiveToolPreferences({ tools, explicit, surfaceDefaults, fallback, }: {
|
|
13
13
|
tools: ToolMeta[];
|
|
14
|
-
explicit: Record<string,
|
|
15
|
-
surfaceDefaults?: Record<string,
|
|
16
|
-
fallback:
|
|
17
|
-
}): Record<string,
|
|
14
|
+
explicit: Record<string, ToolPolicy>;
|
|
15
|
+
surfaceDefaults?: Record<string, ToolPolicy>;
|
|
16
|
+
fallback: ToolPolicy;
|
|
17
|
+
}): Record<string, ToolPolicy>;
|
|
18
18
|
export declare function normalizeToolCatalog(data: unknown): ToolMeta[];
|
|
19
19
|
//# sourceMappingURL=ChatWindow.tool-catalog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.tool-catalog.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.tool-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ChatWindow.tool-catalog.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.tool-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9D;;;;;;;;;uEASuE;AACvE,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,eAAe,EACf,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7C,QAAQ,EAAE,UAAU,CAAC;CACtB,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAU7B;AAaD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,CAS9D"}
|
|
@@ -1,22 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
tools,
|
|
3
|
-
explicit,
|
|
4
|
-
surfaceDefaults,
|
|
5
|
-
fallback
|
|
6
|
-
}) {
|
|
7
|
-
const resolved = {};
|
|
8
|
-
for (const tool of tools) {
|
|
9
|
-
resolved[tool.name] = explicit[tool.name] ?? surfaceDefault(tool, surfaceDefaults) ?? tool.defaultPermission ?? fallback;
|
|
10
|
-
}
|
|
11
|
-
return resolved;
|
|
12
|
-
}
|
|
13
|
-
function surfaceDefault(tool, surfaceDefaults) {
|
|
14
|
-
if (!surfaceDefaults) return void 0;
|
|
15
|
-
for (const key of [tool.name, tool.preferenceKey, tool.group]) {
|
|
16
|
-
if (key && surfaceDefaults[key]) return surfaceDefaults[key];
|
|
17
|
-
}
|
|
18
|
-
return void 0;
|
|
19
|
-
}
|
|
1
|
+
import { normalizeToolPolicy } from "../chat/types.js";
|
|
20
2
|
function normalizeToolCatalog(data) {
|
|
21
3
|
const tools = Array.isArray(data) ? data : data && typeof data === "object" && Array.isArray(data.tools) ? data.tools : [];
|
|
22
4
|
return tools.flatMap((tool) => normalizeToolMeta(tool));
|
|
@@ -27,7 +9,7 @@ function normalizeToolMeta(tool) {
|
|
|
27
9
|
const name = stringValue(item.name);
|
|
28
10
|
if (!name) return [];
|
|
29
11
|
const label = stringValue(item.label) ?? stringValue(item.title) ?? stringValue(item.operationName) ?? name;
|
|
30
|
-
const defaultPermission =
|
|
12
|
+
const defaultPermission = normalizeToolPolicy(
|
|
31
13
|
item.defaultPermission ?? item.defaultMode
|
|
32
14
|
);
|
|
33
15
|
const group = stringValue(item.group);
|
|
@@ -42,9 +24,12 @@ function normalizeToolMeta(tool) {
|
|
|
42
24
|
const method = stringValue(item.method);
|
|
43
25
|
const path = stringValue(item.path);
|
|
44
26
|
const operationName = stringValue(item.operationName);
|
|
27
|
+
const verb = stringValue(item.verb);
|
|
28
|
+
const action = stringValue(item.action);
|
|
29
|
+
const scope = stringValue(item.scope);
|
|
45
30
|
const title = stringValue(item.title);
|
|
46
31
|
const strict = booleanValue(item.strict);
|
|
47
|
-
const annotations =
|
|
32
|
+
const annotations = toolAnnotations(item);
|
|
48
33
|
const inputSchema = schemaValue(item.inputSchema);
|
|
49
34
|
const outputSchema = schemaValue(item.outputSchema);
|
|
50
35
|
return [
|
|
@@ -64,6 +49,9 @@ function normalizeToolMeta(tool) {
|
|
|
64
49
|
...method ? { method } : {},
|
|
65
50
|
...path ? { path } : {},
|
|
66
51
|
...operationName ? { operationName } : {},
|
|
52
|
+
...verb ? { verb } : {},
|
|
53
|
+
...action ? { action } : {},
|
|
54
|
+
...scope ? { scope } : {},
|
|
67
55
|
...title ? { title } : {},
|
|
68
56
|
...strict !== void 0 ? { strict } : {},
|
|
69
57
|
...annotations ? { annotations } : {},
|
|
@@ -95,25 +83,20 @@ function annotationsValue(value) {
|
|
|
95
83
|
return void 0;
|
|
96
84
|
return value;
|
|
97
85
|
}
|
|
98
|
-
function
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return "auto";
|
|
111
|
-
default:
|
|
112
|
-
return void 0;
|
|
113
|
-
}
|
|
86
|
+
function toolAnnotations(item) {
|
|
87
|
+
const nested = annotationsValue(item.annotations) ?? {};
|
|
88
|
+
const readOnlyHint = booleanValue(item.readOnlyHint) ?? nested.readOnlyHint;
|
|
89
|
+
const destructiveHint = booleanValue(item.destructiveHint) ?? nested.destructiveHint;
|
|
90
|
+
const idempotentHint = booleanValue(item.idempotentHint) ?? nested.idempotentHint;
|
|
91
|
+
const merged = {
|
|
92
|
+
...nested,
|
|
93
|
+
...readOnlyHint !== void 0 ? { readOnlyHint } : {},
|
|
94
|
+
...destructiveHint !== void 0 ? { destructiveHint } : {},
|
|
95
|
+
...idempotentHint !== void 0 ? { idempotentHint } : {}
|
|
96
|
+
};
|
|
97
|
+
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
114
98
|
}
|
|
115
99
|
export {
|
|
116
|
-
effectiveToolPreferences,
|
|
117
100
|
normalizeToolCatalog
|
|
118
101
|
};
|
|
119
102
|
//# sourceMappingURL=ChatWindow.tool-catalog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.tool-catalog.js","sources":["../../../src/data/ai/ChatWindow.tool-catalog.ts"],"sourcesContent":["import type { ToolMeta,
|
|
1
|
+
{"version":3,"file":"ChatWindow.tool-catalog.js","sources":["../../../src/data/ai/ChatWindow.tool-catalog.ts"],"sourcesContent":["import type { ToolMeta, ToolPolicy } from \"./ToolPreferences\";\nimport { normalizeToolPolicy as normalizeToolPolicyValue } from \"../chat/types\";\n\n/** Resolves the effective mode of every tool, most-specific source first:\n *\n * 1. `explicit` — a mode the user chose in the preferences popover.\n * 2. `surfaceDefaults` — what the surface that opened the window declares,\n * matched on the tool's name, `preferenceKey`, or `group`.\n * 3. the tool catalog's own `defaultPermission`.\n * 4. `fallback`.\n *\n * Explicit choices are kept separate from seeded defaults precisely so a later\n * surface's policy can still apply to tools the user never touched. */\nexport function effectiveToolPreferences({\n tools,\n explicit,\n surfaceDefaults,\n fallback,\n}: {\n tools: ToolMeta[];\n explicit: Record<string, ToolPolicy>;\n surfaceDefaults?: Record<string, ToolPolicy>;\n fallback: ToolPolicy;\n}): Record<string, ToolPolicy> {\n const resolved: Record<string, ToolPolicy> = {};\n for (const tool of tools) {\n resolved[tool.name] =\n explicit[tool.name] ??\n surfaceDefault(tool, surfaceDefaults) ??\n tool.defaultPermission ??\n fallback;\n }\n return resolved;\n}\n\nfunction surfaceDefault(\n tool: ToolMeta,\n surfaceDefaults: Record<string, ToolPolicy> | undefined\n): ToolPolicy | undefined {\n if (!surfaceDefaults) return undefined;\n for (const key of [tool.name, tool.preferenceKey, tool.group]) {\n if (key && surfaceDefaults[key]) return surfaceDefaults[key];\n }\n return undefined;\n}\n\nexport function normalizeToolCatalog(data: unknown): ToolMeta[] {\n const tools = Array.isArray(data)\n ? data\n : data &&\n typeof data === \"object\" &&\n Array.isArray((data as { tools?: unknown }).tools)\n ? (data as { tools: unknown[] }).tools\n : [];\n return tools.flatMap((tool) => normalizeToolMeta(tool));\n}\n\nfunction normalizeToolMeta(tool: unknown): ToolMeta[] {\n if (!tool || typeof tool !== \"object\") return [];\n const item = tool as Record<string, unknown>;\n const name = stringValue(item.name);\n if (!name) return [];\n const label =\n stringValue(item.label) ??\n stringValue(item.title) ??\n stringValue(item.operationName) ??\n name;\n const defaultPermission = normalizeToolPolicyValue(\n item.defaultPermission ?? item.defaultMode\n );\n const group = stringValue(item.group);\n const parent = stringValue(item.parent);\n const entity = stringValue(item.entity);\n const preferenceKey = stringValue(item.preferenceKey);\n const icon = stringValue(item.icon);\n const description = stringValue(item.description);\n const hints = stringArrayValue(item.hints);\n const source = stringValue(item.source);\n const server = stringValue(item.server);\n const method = stringValue(item.method);\n const path = stringValue(item.path);\n const operationName = stringValue(item.operationName);\n // Facets a permission rule may match on. They are read even though nothing\n // renders them, because a facet the client cannot see is one it resolves\n // differently from the server that enforces the same rule.\n const verb = stringValue(item.verb);\n const action = stringValue(item.action);\n const scope = stringValue(item.scope);\n const title = stringValue(item.title);\n const strict = booleanValue(item.strict);\n const annotations = toolAnnotations(item);\n const inputSchema = schemaValue(item.inputSchema);\n const outputSchema = schemaValue(item.outputSchema);\n return [\n {\n name,\n label,\n ...(group ? { group } : {}),\n ...(parent ? { parent } : {}),\n ...(entity ? { entity } : {}),\n ...(preferenceKey ? { preferenceKey } : {}),\n ...(defaultPermission ? { defaultPermission } : {}),\n ...(icon ? { icon } : {}),\n ...(description ? { description } : {}),\n ...(hints ? { hints } : {}),\n ...(source ? { source } : {}),\n ...(server ? { server } : {}),\n ...(method ? { method } : {}),\n ...(path ? { path } : {}),\n ...(operationName ? { operationName } : {}),\n ...(verb ? { verb } : {}),\n ...(action ? { action } : {}),\n ...(scope ? { scope } : {}),\n ...(title ? { title } : {}),\n ...(strict !== undefined ? { strict } : {}),\n ...(annotations ? { annotations } : {}),\n ...(inputSchema ? { inputSchema } : {}),\n ...(outputSchema ? { outputSchema } : {}),\n },\n ];\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction stringArrayValue(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const values = value.filter(\n (item): item is string => typeof item === \"string\" && item.trim().length > 0\n );\n return values.length > 0 ? values : undefined;\n}\n\nfunction schemaValue(value: unknown): ToolMeta[\"inputSchema\"] | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n return value as ToolMeta[\"inputSchema\"];\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction annotationsValue(value: unknown): ToolMeta[\"annotations\"] | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n return value as ToolMeta[\"annotations\"];\n}\n\n/** Safety hints arrive either nested under `annotations` (MCP `_meta`) or flat on\n * the catalog entry (a clicky operation). A rule matching on a hint has to see\n * both, so they are folded into one place here rather than at each rule check.\n *\n * A hint the tool never declared stays absent. That is not the same as `false`:\n * a rule requiring `readOnly: false` must not select a tool that said nothing. */\nfunction toolAnnotations(\n item: Record<string, unknown>\n): ToolMeta[\"annotations\"] | undefined {\n const nested = annotationsValue(item.annotations) ?? {};\n const readOnlyHint = booleanValue(item.readOnlyHint) ?? nested.readOnlyHint;\n const destructiveHint =\n booleanValue(item.destructiveHint) ?? nested.destructiveHint;\n const idempotentHint =\n booleanValue(item.idempotentHint) ?? nested.idempotentHint;\n const merged = {\n ...nested,\n ...(readOnlyHint !== undefined ? { readOnlyHint } : {}),\n ...(destructiveHint !== undefined ? { destructiveHint } : {}),\n ...(idempotentHint !== undefined ? { idempotentHint } : {}),\n };\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\n"],"names":["normalizeToolPolicyValue"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ChatProps } from '../chat/Chat';
|
|
|
3
3
|
import { ChatWindowState } from './chat-window-context';
|
|
4
4
|
import { ChatContextItem, ContextTypeConfig } from './context';
|
|
5
5
|
import { ThreadSource } from './ThreadPicker';
|
|
6
|
-
import { ToolMeta,
|
|
6
|
+
import { ToolMeta, ToolPolicy } from './ToolPreferences';
|
|
7
7
|
import { ToolRenderAdapter, ToolRenderRegistry } from '../chat/tool-render/adapter';
|
|
8
8
|
export type ChatWindowProps = {
|
|
9
9
|
panel: ChatWindowState;
|
|
@@ -27,7 +27,7 @@ export type ChatWindowProps = {
|
|
|
27
27
|
* user can switch any tool to On/Auto/Off from the popover. */
|
|
28
28
|
tools?: ToolMeta[];
|
|
29
29
|
/** Initial mode assigned to tools when they first load. Defaults to "ask". */
|
|
30
|
-
|
|
30
|
+
defaultToolPolicy?: ToolPolicy;
|
|
31
31
|
/** Backend tool catalog endpoint. Defaults to "/api/chat/tools"; null disables fetching. */
|
|
32
32
|
toolsApi?: string | null;
|
|
33
33
|
/** Backend runtime catalog endpoint. Null uses the built-in runtime families
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.types.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ChatWindow.types.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,eAAe,CAAC;IACvB;iFAC6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;+BAE2B;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;6CAEyC;IACzC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;mEAE+D;IAC/D,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;4CACwC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;wDACoD;IACpD,aAAa,CAAC,EAAE,iBAAiB,EAAE,GAAG,kBAAkB,CAAC;IACzD,wFAAwF;IACxF,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,SAAS,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAC/C,CAAC"}
|
|
@@ -55,7 +55,7 @@ function ChatWindowManagerProvider({
|
|
|
55
55
|
maximized: false,
|
|
56
56
|
initialPrompt: (opts == null ? void 0 : opts.initialPrompt) ?? null,
|
|
57
57
|
contextItems: (opts == null ? void 0 : opts.contextItems) ?? [],
|
|
58
|
-
|
|
58
|
+
toolPolicy: (opts == null ? void 0 : opts.toolPolicy) ?? []
|
|
59
59
|
};
|
|
60
60
|
const updated = chatWindowContext.reindex([...prev, panel], id);
|
|
61
61
|
scheduleSave(updated);
|
|
@@ -113,7 +113,7 @@ function ChatWindowManagerProvider({
|
|
|
113
113
|
if (!existing) return openPanel(opts);
|
|
114
114
|
const partial = {};
|
|
115
115
|
if (opts == null ? void 0 : opts.initialPrompt) partial.initialPrompt = opts.initialPrompt;
|
|
116
|
-
if (opts == null ? void 0 : opts.
|
|
116
|
+
if (opts == null ? void 0 : opts.toolPolicy) partial.toolPolicy = opts.toolPolicy;
|
|
117
117
|
if ((_a = opts == null ? void 0 : opts.contextItems) == null ? void 0 : _a.length) {
|
|
118
118
|
partial.contextItems = [
|
|
119
119
|
...existing.contextItems,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindowManager.cjs","sources":["../../../src/data/ai/ChatWindowManager.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n ChatWindowManagerContext,\n loadPanels,\n savePanels,\n nextPanelId,\n reindex,\n MAX_PANELS,\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n CASCADE_OFFSET,\n Z_BASE,\n type ChatWindowManagerValue,\n type ChatWindowState,\n type OpenPanelOpts,\n} from \"./chat-window-context\";\n\nexport type ChatWindowManagerProviderProps = {\n /** Namespaces the localStorage layout so distinct surfaces keep separate\n * window arrangements. Defaults to \"default\". */\n storageId?: string;\n children: ReactNode;\n};\n\n/** Owns the set of open chat windows: creation, focus (z-index), maximize and\n * debounced localStorage persistence of their layout. Wrap the app subtree in\n * this and read it via {@link useChatWindowManager}. */\nexport function ChatWindowManagerProvider({\n storageId = \"default\",\n children,\n}: ChatWindowManagerProviderProps) {\n const [panels, setPanels] = useState<ChatWindowState[]>([]);\n const hydratedRef = useRef(false);\n const saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const loaded = loadPanels(storageId);\n if (loaded.length > 0) setPanels(loaded);\n }, [storageId]);\n\n const scheduleSave = useCallback(\n (updated: ChatWindowState[]) => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n saveTimerRef.current = setTimeout(() => savePanels(storageId, updated), 1000);\n },\n [storageId],\n );\n\n useEffect(\n () => () => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n },\n [],\n );\n\n const defaultPosition = useCallback((panelCount: number) => {\n const vw = typeof window !== \"undefined\" ? window.innerWidth : 1200;\n const vh = typeof window !== \"undefined\" ? window.innerHeight : 800;\n return {\n x: Math.max(40, vw - DEFAULT_WIDTH - 16 - panelCount * CASCADE_OFFSET),\n y: Math.max(40, vh - DEFAULT_HEIGHT - 16 - panelCount * CASCADE_OFFSET),\n };\n }, []);\n\n const openPanel = useCallback(\n (opts?: OpenPanelOpts): string => {\n const id = nextPanelId();\n setPanels((prev) => {\n if (prev.length >= MAX_PANELS) return prev;\n const pos = defaultPosition(prev.length);\n const panel: ChatWindowState = {\n id,\n threadId: opts?.threadId ?? null,\n initialModel: opts?.initialModel ?? null,\n x: pos.x,\n y: pos.y,\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n zIndex: Z_BASE,\n maximized: false,\n initialPrompt: opts?.initialPrompt ?? null,\n contextItems: opts?.contextItems ?? [],\n
|
|
1
|
+
{"version":3,"file":"ChatWindowManager.cjs","sources":["../../../src/data/ai/ChatWindowManager.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n ChatWindowManagerContext,\n loadPanels,\n savePanels,\n nextPanelId,\n reindex,\n MAX_PANELS,\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n CASCADE_OFFSET,\n Z_BASE,\n type ChatWindowManagerValue,\n type ChatWindowState,\n type OpenPanelOpts,\n} from \"./chat-window-context\";\n\nexport type ChatWindowManagerProviderProps = {\n /** Namespaces the localStorage layout so distinct surfaces keep separate\n * window arrangements. Defaults to \"default\". */\n storageId?: string;\n children: ReactNode;\n};\n\n/** Owns the set of open chat windows: creation, focus (z-index), maximize and\n * debounced localStorage persistence of their layout. Wrap the app subtree in\n * this and read it via {@link useChatWindowManager}. */\nexport function ChatWindowManagerProvider({\n storageId = \"default\",\n children,\n}: ChatWindowManagerProviderProps) {\n const [panels, setPanels] = useState<ChatWindowState[]>([]);\n const hydratedRef = useRef(false);\n const saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const loaded = loadPanels(storageId);\n if (loaded.length > 0) setPanels(loaded);\n }, [storageId]);\n\n const scheduleSave = useCallback(\n (updated: ChatWindowState[]) => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n saveTimerRef.current = setTimeout(() => savePanels(storageId, updated), 1000);\n },\n [storageId],\n );\n\n useEffect(\n () => () => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n },\n [],\n );\n\n const defaultPosition = useCallback((panelCount: number) => {\n const vw = typeof window !== \"undefined\" ? window.innerWidth : 1200;\n const vh = typeof window !== \"undefined\" ? window.innerHeight : 800;\n return {\n x: Math.max(40, vw - DEFAULT_WIDTH - 16 - panelCount * CASCADE_OFFSET),\n y: Math.max(40, vh - DEFAULT_HEIGHT - 16 - panelCount * CASCADE_OFFSET),\n };\n }, []);\n\n const openPanel = useCallback(\n (opts?: OpenPanelOpts): string => {\n const id = nextPanelId();\n setPanels((prev) => {\n if (prev.length >= MAX_PANELS) return prev;\n const pos = defaultPosition(prev.length);\n const panel: ChatWindowState = {\n id,\n threadId: opts?.threadId ?? null,\n initialModel: opts?.initialModel ?? null,\n x: pos.x,\n y: pos.y,\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n zIndex: Z_BASE,\n maximized: false,\n initialPrompt: opts?.initialPrompt ?? null,\n contextItems: opts?.contextItems ?? [],\n toolPolicy: opts?.toolPolicy ?? [],\n };\n const updated = reindex([...prev, panel], id);\n scheduleSave(updated);\n return updated;\n });\n return id;\n },\n [defaultPosition, scheduleSave],\n );\n\n const closePanel = useCallback(\n (id: string) => {\n setPanels((prev) => {\n const updated = prev.filter((p) => p.id !== id);\n scheduleSave(updated);\n return updated;\n });\n },\n [scheduleSave],\n );\n\n const updatePanel = useCallback(\n (id: string, partial: Partial<ChatWindowState>) => {\n setPanels((prev) => {\n const updated = prev.map((p) => (p.id === id ? { ...p, ...partial } : p));\n scheduleSave(updated);\n return updated;\n });\n },\n [scheduleSave],\n );\n\n const bringToFront = useCallback((id: string) => {\n setPanels((prev) => reindex(prev, id));\n }, []);\n\n const maximizePanel = useCallback(\n (id: string) => {\n setPanels((prev) => {\n const target = prev.find((p) => p.id === id);\n if (!target) return prev;\n const willMaximize = !target.maximized;\n const toggled = prev.map((p) => {\n if (p.id === id) return { ...p, maximized: willMaximize };\n if (willMaximize && p.maximized) return { ...p, maximized: false };\n return p;\n });\n const updated = reindex(toggled, id);\n scheduleSave(updated);\n return updated;\n });\n },\n [scheduleSave],\n );\n\n const findOrCreatePanel = useCallback(\n (opts?: OpenPanelOpts): string => {\n const existing = panels[panels.length - 1];\n if (!existing) return openPanel(opts);\n const partial: Partial<ChatWindowState> = {};\n if (opts?.initialPrompt) partial.initialPrompt = opts.initialPrompt;\n // Reusing a window re-targets it at the surface that just asked, so its\n // tool defaults replace the previous surface's rather than merging.\n if (opts?.toolPolicy) partial.toolPolicy = opts.toolPolicy;\n if (opts?.contextItems?.length) {\n partial.contextItems = [\n ...existing.contextItems,\n ...opts.contextItems.filter((c) => !existing.contextItems.some((e) => e.id === c.id)),\n ];\n }\n updatePanel(existing.id, partial);\n bringToFront(existing.id);\n return existing.id;\n },\n [panels, openPanel, updatePanel, bringToFront],\n );\n\n const value: ChatWindowManagerValue = {\n panels,\n openPanel,\n closePanel,\n updatePanel,\n bringToFront,\n maximizePanel,\n findOrCreatePanel,\n };\n\n return (\n <ChatWindowManagerContext.Provider value={value}>{children}</ChatWindowManagerContext.Provider>\n );\n}\n"],"names":["useState","useRef","useEffect","loadPanels","useCallback","savePanels","DEFAULT_WIDTH","CASCADE_OFFSET","DEFAULT_HEIGHT","nextPanelId","MAX_PANELS","Z_BASE","reindex","jsx","ChatWindowManagerContext"],"mappings":"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"}
|
|
@@ -53,7 +53,7 @@ function ChatWindowManagerProvider({
|
|
|
53
53
|
maximized: false,
|
|
54
54
|
initialPrompt: (opts == null ? void 0 : opts.initialPrompt) ?? null,
|
|
55
55
|
contextItems: (opts == null ? void 0 : opts.contextItems) ?? [],
|
|
56
|
-
|
|
56
|
+
toolPolicy: (opts == null ? void 0 : opts.toolPolicy) ?? []
|
|
57
57
|
};
|
|
58
58
|
const updated = reindex([...prev, panel], id);
|
|
59
59
|
scheduleSave(updated);
|
|
@@ -111,7 +111,7 @@ function ChatWindowManagerProvider({
|
|
|
111
111
|
if (!existing) return openPanel(opts);
|
|
112
112
|
const partial = {};
|
|
113
113
|
if (opts == null ? void 0 : opts.initialPrompt) partial.initialPrompt = opts.initialPrompt;
|
|
114
|
-
if (opts == null ? void 0 : opts.
|
|
114
|
+
if (opts == null ? void 0 : opts.toolPolicy) partial.toolPolicy = opts.toolPolicy;
|
|
115
115
|
if ((_a = opts == null ? void 0 : opts.contextItems) == null ? void 0 : _a.length) {
|
|
116
116
|
partial.contextItems = [
|
|
117
117
|
...existing.contextItems,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindowManager.js","sources":["../../../src/data/ai/ChatWindowManager.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n ChatWindowManagerContext,\n loadPanels,\n savePanels,\n nextPanelId,\n reindex,\n MAX_PANELS,\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n CASCADE_OFFSET,\n Z_BASE,\n type ChatWindowManagerValue,\n type ChatWindowState,\n type OpenPanelOpts,\n} from \"./chat-window-context\";\n\nexport type ChatWindowManagerProviderProps = {\n /** Namespaces the localStorage layout so distinct surfaces keep separate\n * window arrangements. Defaults to \"default\". */\n storageId?: string;\n children: ReactNode;\n};\n\n/** Owns the set of open chat windows: creation, focus (z-index), maximize and\n * debounced localStorage persistence of their layout. Wrap the app subtree in\n * this and read it via {@link useChatWindowManager}. */\nexport function ChatWindowManagerProvider({\n storageId = \"default\",\n children,\n}: ChatWindowManagerProviderProps) {\n const [panels, setPanels] = useState<ChatWindowState[]>([]);\n const hydratedRef = useRef(false);\n const saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const loaded = loadPanels(storageId);\n if (loaded.length > 0) setPanels(loaded);\n }, [storageId]);\n\n const scheduleSave = useCallback(\n (updated: ChatWindowState[]) => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n saveTimerRef.current = setTimeout(() => savePanels(storageId, updated), 1000);\n },\n [storageId],\n );\n\n useEffect(\n () => () => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n },\n [],\n );\n\n const defaultPosition = useCallback((panelCount: number) => {\n const vw = typeof window !== \"undefined\" ? window.innerWidth : 1200;\n const vh = typeof window !== \"undefined\" ? window.innerHeight : 800;\n return {\n x: Math.max(40, vw - DEFAULT_WIDTH - 16 - panelCount * CASCADE_OFFSET),\n y: Math.max(40, vh - DEFAULT_HEIGHT - 16 - panelCount * CASCADE_OFFSET),\n };\n }, []);\n\n const openPanel = useCallback(\n (opts?: OpenPanelOpts): string => {\n const id = nextPanelId();\n setPanels((prev) => {\n if (prev.length >= MAX_PANELS) return prev;\n const pos = defaultPosition(prev.length);\n const panel: ChatWindowState = {\n id,\n threadId: opts?.threadId ?? null,\n initialModel: opts?.initialModel ?? null,\n x: pos.x,\n y: pos.y,\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n zIndex: Z_BASE,\n maximized: false,\n initialPrompt: opts?.initialPrompt ?? null,\n contextItems: opts?.contextItems ?? [],\n
|
|
1
|
+
{"version":3,"file":"ChatWindowManager.js","sources":["../../../src/data/ai/ChatWindowManager.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n ChatWindowManagerContext,\n loadPanels,\n savePanels,\n nextPanelId,\n reindex,\n MAX_PANELS,\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n CASCADE_OFFSET,\n Z_BASE,\n type ChatWindowManagerValue,\n type ChatWindowState,\n type OpenPanelOpts,\n} from \"./chat-window-context\";\n\nexport type ChatWindowManagerProviderProps = {\n /** Namespaces the localStorage layout so distinct surfaces keep separate\n * window arrangements. Defaults to \"default\". */\n storageId?: string;\n children: ReactNode;\n};\n\n/** Owns the set of open chat windows: creation, focus (z-index), maximize and\n * debounced localStorage persistence of their layout. Wrap the app subtree in\n * this and read it via {@link useChatWindowManager}. */\nexport function ChatWindowManagerProvider({\n storageId = \"default\",\n children,\n}: ChatWindowManagerProviderProps) {\n const [panels, setPanels] = useState<ChatWindowState[]>([]);\n const hydratedRef = useRef(false);\n const saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const loaded = loadPanels(storageId);\n if (loaded.length > 0) setPanels(loaded);\n }, [storageId]);\n\n const scheduleSave = useCallback(\n (updated: ChatWindowState[]) => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n saveTimerRef.current = setTimeout(() => savePanels(storageId, updated), 1000);\n },\n [storageId],\n );\n\n useEffect(\n () => () => {\n if (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n },\n [],\n );\n\n const defaultPosition = useCallback((panelCount: number) => {\n const vw = typeof window !== \"undefined\" ? window.innerWidth : 1200;\n const vh = typeof window !== \"undefined\" ? window.innerHeight : 800;\n return {\n x: Math.max(40, vw - DEFAULT_WIDTH - 16 - panelCount * CASCADE_OFFSET),\n y: Math.max(40, vh - DEFAULT_HEIGHT - 16 - panelCount * CASCADE_OFFSET),\n };\n }, []);\n\n const openPanel = useCallback(\n (opts?: OpenPanelOpts): string => {\n const id = nextPanelId();\n setPanels((prev) => {\n if (prev.length >= MAX_PANELS) return prev;\n const pos = defaultPosition(prev.length);\n const panel: ChatWindowState = {\n id,\n threadId: opts?.threadId ?? null,\n initialModel: opts?.initialModel ?? null,\n x: pos.x,\n y: pos.y,\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n zIndex: Z_BASE,\n maximized: false,\n initialPrompt: opts?.initialPrompt ?? null,\n contextItems: opts?.contextItems ?? [],\n toolPolicy: opts?.toolPolicy ?? [],\n };\n const updated = reindex([...prev, panel], id);\n scheduleSave(updated);\n return updated;\n });\n return id;\n },\n [defaultPosition, scheduleSave],\n );\n\n const closePanel = useCallback(\n (id: string) => {\n setPanels((prev) => {\n const updated = prev.filter((p) => p.id !== id);\n scheduleSave(updated);\n return updated;\n });\n },\n [scheduleSave],\n );\n\n const updatePanel = useCallback(\n (id: string, partial: Partial<ChatWindowState>) => {\n setPanels((prev) => {\n const updated = prev.map((p) => (p.id === id ? { ...p, ...partial } : p));\n scheduleSave(updated);\n return updated;\n });\n },\n [scheduleSave],\n );\n\n const bringToFront = useCallback((id: string) => {\n setPanels((prev) => reindex(prev, id));\n }, []);\n\n const maximizePanel = useCallback(\n (id: string) => {\n setPanels((prev) => {\n const target = prev.find((p) => p.id === id);\n if (!target) return prev;\n const willMaximize = !target.maximized;\n const toggled = prev.map((p) => {\n if (p.id === id) return { ...p, maximized: willMaximize };\n if (willMaximize && p.maximized) return { ...p, maximized: false };\n return p;\n });\n const updated = reindex(toggled, id);\n scheduleSave(updated);\n return updated;\n });\n },\n [scheduleSave],\n );\n\n const findOrCreatePanel = useCallback(\n (opts?: OpenPanelOpts): string => {\n const existing = panels[panels.length - 1];\n if (!existing) return openPanel(opts);\n const partial: Partial<ChatWindowState> = {};\n if (opts?.initialPrompt) partial.initialPrompt = opts.initialPrompt;\n // Reusing a window re-targets it at the surface that just asked, so its\n // tool defaults replace the previous surface's rather than merging.\n if (opts?.toolPolicy) partial.toolPolicy = opts.toolPolicy;\n if (opts?.contextItems?.length) {\n partial.contextItems = [\n ...existing.contextItems,\n ...opts.contextItems.filter((c) => !existing.contextItems.some((e) => e.id === c.id)),\n ];\n }\n updatePanel(existing.id, partial);\n bringToFront(existing.id);\n return existing.id;\n },\n [panels, openPanel, updatePanel, bringToFront],\n );\n\n const value: ChatWindowManagerValue = {\n panels,\n openPanel,\n closePanel,\n updatePanel,\n bringToFront,\n maximizePanel,\n findOrCreatePanel,\n };\n\n return (\n <ChatWindowManagerContext.Provider value={value}>{children}</ChatWindowManagerContext.Provider>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const context = require("./context.cjs");
|
|
4
|
+
const toolPolicy = require("../chat/tool-policy.cjs");
|
|
4
5
|
function chatWindowRequestBody({
|
|
5
6
|
base,
|
|
6
7
|
contextItems,
|
|
7
8
|
tools,
|
|
8
|
-
|
|
9
|
+
surfacePolicy,
|
|
10
|
+
userPolicy
|
|
9
11
|
}) {
|
|
10
12
|
return {
|
|
11
13
|
...base,
|
|
@@ -13,7 +15,7 @@ function chatWindowRequestBody({
|
|
|
13
15
|
context: context.serializeContext(contextItems),
|
|
14
16
|
contextItems
|
|
15
17
|
} : {},
|
|
16
|
-
...tools ? {
|
|
18
|
+
...tools ? { toolPolicy: toolPolicy.appendToolPolicy(surfacePolicy, userPolicy) } : {}
|
|
17
19
|
};
|
|
18
20
|
}
|
|
19
21
|
exports.chatWindowRequestBody = chatWindowRequestBody;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindowRequestBody.cjs","sources":["../../../src/data/ai/ChatWindowRequestBody.ts"],"sourcesContent":["import { serializeContext, type ChatContextItem } from \"./context\";\nimport type { ToolMeta
|
|
1
|
+
{"version":3,"file":"ChatWindowRequestBody.cjs","sources":["../../../src/data/ai/ChatWindowRequestBody.ts"],"sourcesContent":["import { serializeContext, type ChatContextItem } from \"./context\";\nimport type { ToolMeta } from \"./ToolPreferences\";\nimport { appendToolPolicy, type PermissionPolicy } from \"../chat/tool-policy\";\n\n/** Builds the transport body for one chat turn.\n *\n * Tool authority goes out as `toolPolicy` — one ordered rule list, surface\n * rules then the user's — rather than as the flattened per-name map it used to\n * be. The map could only say what today's tools do; the server appends its own\n * baselines under this list and evaluates the whole thing last-match-wins, so\n * what the popover shows and what the request produces are the same reading. */\nexport function chatWindowRequestBody({\n base,\n contextItems,\n tools,\n surfacePolicy,\n userPolicy,\n}: {\n base?: Record<string, unknown> | undefined;\n contextItems: ChatContextItem[];\n tools?: ToolMeta[] | undefined;\n /** What the surface the chat opened on declares. Sent ahead of the user's\n * rules, so a toggle beats the surface. */\n surfacePolicy?: PermissionPolicy | undefined;\n /** What the user toggled in the preferences popover. */\n userPolicy?: PermissionPolicy | undefined;\n}): Record<string, unknown> {\n return {\n ...base,\n ...(contextItems.length ? {\n context: serializeContext(contextItems),\n contextItems,\n } : {}),\n ...(tools\n ? { toolPolicy: appendToolPolicy(surfacePolicy, userPolicy) }\n : {}),\n };\n}\n"],"names":["serializeContext","appendToolPolicy"],"mappings":";;;;AAWO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAS4B;AAC1B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,aAAa,SAAS;AAAA,MACxB,SAASA,QAAAA,iBAAiB,YAAY;AAAA,MACtC;AAAA,IAAA,IACE,CAAA;AAAA,IACJ,GAAI,QACA,EAAE,YAAYC,WAAAA,iBAAiB,eAAe,UAAU,MACxD,CAAA;AAAA,EAAC;AAET;;"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { ChatContextItem } from './context';
|
|
2
|
-
import { ToolMeta
|
|
3
|
-
|
|
2
|
+
import { ToolMeta } from './ToolPreferences';
|
|
3
|
+
import { PermissionPolicy } from '../chat/tool-policy';
|
|
4
|
+
/** Builds the transport body for one chat turn.
|
|
5
|
+
*
|
|
6
|
+
* Tool authority goes out as `toolPolicy` — one ordered rule list, surface
|
|
7
|
+
* rules then the user's — rather than as the flattened per-name map it used to
|
|
8
|
+
* be. The map could only say what today's tools do; the server appends its own
|
|
9
|
+
* baselines under this list and evaluates the whole thing last-match-wins, so
|
|
10
|
+
* what the popover shows and what the request produces are the same reading. */
|
|
11
|
+
export declare function chatWindowRequestBody({ base, contextItems, tools, surfacePolicy, userPolicy, }: {
|
|
4
12
|
base?: Record<string, unknown> | undefined;
|
|
5
13
|
contextItems: ChatContextItem[];
|
|
6
14
|
tools?: ToolMeta[] | undefined;
|
|
7
|
-
|
|
15
|
+
/** What the surface the chat opened on declares. Sent ahead of the user's
|
|
16
|
+
* rules, so a toggle beats the surface. */
|
|
17
|
+
surfacePolicy?: PermissionPolicy | undefined;
|
|
18
|
+
/** What the user toggled in the preferences popover. */
|
|
19
|
+
userPolicy?: PermissionPolicy | undefined;
|
|
8
20
|
}): Record<string, unknown>;
|
|
9
21
|
//# sourceMappingURL=ChatWindowRequestBody.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindowRequestBody.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindowRequestBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ChatWindowRequestBody.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindowRequestBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;iFAMiF;AACjF,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,aAAa,EACb,UAAU,GACX,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC3C,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAC/B;gDAC4C;IAC5C,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,wDAAwD;IACxD,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC3C,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW1B"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { serializeContext } from "./context.js";
|
|
2
|
+
import { appendToolPolicy } from "../chat/tool-policy.js";
|
|
2
3
|
function chatWindowRequestBody({
|
|
3
4
|
base,
|
|
4
5
|
contextItems,
|
|
5
6
|
tools,
|
|
6
|
-
|
|
7
|
+
surfacePolicy,
|
|
8
|
+
userPolicy
|
|
7
9
|
}) {
|
|
8
10
|
return {
|
|
9
11
|
...base,
|
|
@@ -11,7 +13,7 @@ function chatWindowRequestBody({
|
|
|
11
13
|
context: serializeContext(contextItems),
|
|
12
14
|
contextItems
|
|
13
15
|
} : {},
|
|
14
|
-
...tools ? {
|
|
16
|
+
...tools ? { toolPolicy: appendToolPolicy(surfacePolicy, userPolicy) } : {}
|
|
15
17
|
};
|
|
16
18
|
}
|
|
17
19
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindowRequestBody.js","sources":["../../../src/data/ai/ChatWindowRequestBody.ts"],"sourcesContent":["import { serializeContext, type ChatContextItem } from \"./context\";\nimport type { ToolMeta
|
|
1
|
+
{"version":3,"file":"ChatWindowRequestBody.js","sources":["../../../src/data/ai/ChatWindowRequestBody.ts"],"sourcesContent":["import { serializeContext, type ChatContextItem } from \"./context\";\nimport type { ToolMeta } from \"./ToolPreferences\";\nimport { appendToolPolicy, type PermissionPolicy } from \"../chat/tool-policy\";\n\n/** Builds the transport body for one chat turn.\n *\n * Tool authority goes out as `toolPolicy` — one ordered rule list, surface\n * rules then the user's — rather than as the flattened per-name map it used to\n * be. The map could only say what today's tools do; the server appends its own\n * baselines under this list and evaluates the whole thing last-match-wins, so\n * what the popover shows and what the request produces are the same reading. */\nexport function chatWindowRequestBody({\n base,\n contextItems,\n tools,\n surfacePolicy,\n userPolicy,\n}: {\n base?: Record<string, unknown> | undefined;\n contextItems: ChatContextItem[];\n tools?: ToolMeta[] | undefined;\n /** What the surface the chat opened on declares. Sent ahead of the user's\n * rules, so a toggle beats the surface. */\n surfacePolicy?: PermissionPolicy | undefined;\n /** What the user toggled in the preferences popover. */\n userPolicy?: PermissionPolicy | undefined;\n}): Record<string, unknown> {\n return {\n ...base,\n ...(contextItems.length ? {\n context: serializeContext(contextItems),\n contextItems,\n } : {}),\n ...(tools\n ? { toolPolicy: appendToolPolicy(surfacePolicy, userPolicy) }\n : {}),\n };\n}\n"],"names":[],"mappings":";;AAWO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAS4B;AAC1B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,aAAa,SAAS;AAAA,MACxB,SAAS,iBAAiB,YAAY;AAAA,MACtC;AAAA,IAAA,IACE,CAAA;AAAA,IACJ,GAAI,QACA,EAAE,YAAY,iBAAiB,eAAe,UAAU,MACxD,CAAA;AAAA,EAAC;AAET;"}
|