@flanksource/clicky-ui 0.3.26 → 0.3.28
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 +14 -0
- package/dist/ai.cjs +52 -6
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +53 -7
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.cjs +24 -39
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +9 -2
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +24 -39
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +4 -3
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +6 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +4 -3
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +65 -52
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +67 -54
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +2 -2
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +3 -3
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +2 -2
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +85 -37
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +3 -3
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +86 -38
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/comment-utils.cjs +26 -0
- package/dist/comments/comment-utils.cjs.map +1 -1
- package/dist/comments/comment-utils.d.ts +11 -0
- package/dist/comments/comment-utils.d.ts.map +1 -1
- package/dist/comments/comment-utils.js +26 -0
- package/dist/comments/comment-utils.js.map +1 -1
- package/dist/comments.cjs +2 -0
- package/dist/comments.cjs.map +1 -1
- package/dist/comments.js +3 -1
- package/dist/components/AccordionList.cjs +3 -0
- package/dist/components/AccordionList.cjs.map +1 -1
- package/dist/components/AccordionList.d.ts +3 -1
- package/dist/components/AccordionList.d.ts.map +1 -1
- package/dist/components/AccordionList.js +3 -0
- package/dist/components/AccordionList.js.map +1 -1
- package/dist/components/CopyButton.cjs +35 -0
- package/dist/components/CopyButton.cjs.map +1 -0
- package/dist/components/CopyButton.d.ts +20 -0
- package/dist/components/CopyButton.d.ts.map +1 -0
- package/dist/components/CopyButton.js +35 -0
- package/dist/components/CopyButton.js.map +1 -0
- package/dist/components/FilterBar.cjs +29 -6
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +10 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +29 -6
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/ListMenu.cjs +4 -1
- package/dist/components/ListMenu.cjs.map +1 -1
- package/dist/components/ListMenu.d.ts +5 -1
- package/dist/components/ListMenu.d.ts.map +1 -1
- package/dist/components/ListMenu.js +4 -1
- package/dist/components/ListMenu.js.map +1 -1
- package/dist/components/SegmentedControl.cjs +4 -2
- package/dist/components/SegmentedControl.cjs.map +1 -1
- package/dist/components/SegmentedControl.d.ts +4 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +4 -2
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/clipboard.cjs +60 -0
- package/dist/components/clipboard.cjs.map +1 -0
- package/dist/components/clipboard.d.ts +13 -0
- package/dist/components/clipboard.d.ts.map +1 -0
- package/dist/components/clipboard.js +60 -0
- package/dist/components/clipboard.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +15 -1
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +15 -1
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-list-array.cjs +113 -0
- package/dist/components/json-schema-form-list-array.cjs.map +1 -0
- package/dist/components/json-schema-form-list-array.d.ts +7 -0
- package/dist/components/json-schema-form-list-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-list-array.js +113 -0
- package/dist/components/json-schema-form-list-array.js.map +1 -0
- package/dist/components/json-schema-form-resolve.cjs +1 -1
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +1 -1
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +1 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components.cjs +5 -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 +5 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -1
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.js +4 -1
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +202 -40
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +163 -3
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +202 -40
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs +8 -6
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -6
- package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
- package/dist/data/SelectionActionBar.cjs +242 -0
- package/dist/data/SelectionActionBar.cjs.map +1 -0
- package/dist/data/SelectionActionBar.d.ts +28 -0
- package/dist/data/SelectionActionBar.d.ts.map +1 -0
- package/dist/data/SelectionActionBar.js +242 -0
- package/dist/data/SelectionActionBar.js.map +1 -0
- package/dist/data/TaskManager.cjs +34 -12
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +34 -12
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +11 -7
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +11 -7
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProgress.cjs +55 -11
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +53 -9
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +2 -4
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +2 -4
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +1 -2
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.js +1 -2
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs +262 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts +16 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.js +262 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +77 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts +8 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +77 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPage.cjs +332 -0
- package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts +17 -0
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPage.js +332 -0
- package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts +16 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.js +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +10 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs +90 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts +8 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.js +90 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +168 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +17 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +168 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs +36 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts +7 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.js +36 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.js.map +1 -0
- package/dist/data/ai/PromptCatalog/index.d.ts +9 -0
- package/dist/data/ai/PromptCatalog/index.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs +137 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts +28 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.js +137 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.js.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +114 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +45 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.js +114 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -0
- package/dist/data/ai/PromptCatalog/types.d.ts +70 -0
- package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +9 -12
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +9 -12
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptPicker/index.d.ts +1 -1
- package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/types.d.ts +9 -0
- package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +4 -5
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +5 -6
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.js +1 -1
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs +25 -14
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +26 -15
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.collection.cjs +3 -3
- package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection.js +3 -3
- package/dist/data/ai/SessionInspector.collection.js.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
- package/dist/data/ai/SessionInspector.model.cjs +3 -3
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.model.d.ts +1 -1
- package/dist/data/ai/SessionInspector.model.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.model.js +3 -3
- package/dist/data/ai/SessionInspector.model.js.map +1 -1
- package/dist/data/ai/SessionInspector.panels.cjs +1 -1
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.panels.js +1 -1
- package/dist/data/ai/SessionInspector.panels.js.map +1 -1
- package/dist/data/ai/SessionInspector.summary.cjs +3 -3
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.summary.js +3 -3
- package/dist/data/ai/SessionInspector.summary.js.map +1 -1
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +3 -2
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +18 -30
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +19 -31
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +71 -86
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +72 -87
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs +99 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts +13 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js +99 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +37 -21
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +6 -2
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +38 -22
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +114 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts +10 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +114 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs +160 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts +9 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js +160 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +27 -241
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +5 -6
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +25 -239
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +21 -8
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +22 -9
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs +207 -164
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts +4 -3
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js +210 -167
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +15 -15
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +15 -15
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +120 -42
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +123 -45
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +136 -48
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +13 -3
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +137 -49
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +93 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts +6 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +93 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs +35 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts +5 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js +35 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.cjs +2 -9
- package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +1 -2
- package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/presets.js +2 -9
- package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/types.cjs +2 -7
- package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/types.d.ts +0 -1
- package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/types.js +3 -8
- package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.cjs +43 -33
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +7 -13
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.js +43 -33
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +33 -45
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +54 -29
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +33 -44
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs +276 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts +58 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js +276 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js.map +1 -0
- package/dist/data/ai/ThreadPicker.cjs +55 -42
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
- package/dist/data/ai/ThreadPicker.js +56 -43
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +9 -1
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +9 -1
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.cjs +41 -487
- package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -2
- package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.detail.cjs +238 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.d.ts +8 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.js +238 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +57 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +9 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js +57 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.js +42 -488
- package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.cjs +130 -0
- package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts +35 -0
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.model.js +130 -0
- package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +57 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +7 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +57 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +389 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +23 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js +389 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -0
- package/dist/data/ai/agent-action-icons.cjs +14 -6
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
- package/dist/data/ai/agent-action-icons.js +14 -6
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.cjs +17 -9
- package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.js +17 -9
- package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -1
- package/dist/data/ai/examples/sessions/claude.cjs +7 -4
- package/dist/data/ai/examples/sessions/claude.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/claude.js +7 -4
- package/dist/data/ai/examples/sessions/claude.js.map +1 -1
- package/dist/data/ai/examples/sessions/codex-complete.cjs +17 -10
- package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/codex-complete.js +17 -10
- package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -1
- package/dist/data/ai/examples/sessions/codex.cjs +7 -4
- package/dist/data/ai/examples/sessions/codex.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/codex.js +7 -4
- package/dist/data/ai/examples/sessions/codex.js.map +1 -1
- package/dist/data/ai/index.d.ts +6 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-profile.cjs +93 -0
- package/dist/data/ai/runtime-profile.cjs.map +1 -0
- package/dist/data/ai/runtime-profile.d.ts +73 -0
- package/dist/data/ai/runtime-profile.d.ts.map +1 -0
- package/dist/data/ai/runtime-profile.js +93 -0
- package/dist/data/ai/runtime-profile.js.map +1 -0
- package/dist/data/ai/sandbox-kind-meta.cjs +38 -4
- package/dist/data/ai/sandbox-kind-meta.cjs.map +1 -1
- package/dist/data/ai/sandbox-kind-meta.d.ts +3 -0
- package/dist/data/ai/sandbox-kind-meta.d.ts.map +1 -1
- package/dist/data/ai/sandbox-kind-meta.js +38 -4
- package/dist/data/ai/sandbox-kind-meta.js.map +1 -1
- package/dist/data/chat/Chat.cjs +17 -5
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +3 -3
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +3 -3
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +18 -6
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +15 -9
- package/dist/data/chat/Chat.runtime.cjs.map +1 -1
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
- package/dist/data/chat/Chat.runtime.js +16 -10
- package/dist/data/chat/Chat.runtime.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +5 -5
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +5 -5
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +3 -3
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +3 -3
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +3 -3
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +21 -1
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +5 -0
- 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 +5 -0
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -5
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +21 -1
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts +2 -0
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +22 -2
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +49 -51
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +10 -2
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +51 -53
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.cjs +55 -0
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.d.ts +11 -3
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.js +55 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.cjs +11 -6
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts +3 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.js +11 -6
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.cjs +7 -5
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.d.ts +4 -2
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.js +7 -5
- package/dist/data/runtime/RuntimeBarSegments.js.map +1 -1
- package/dist/data/runtime/model-capabilities.cjs +6 -6
- package/dist/data/runtime/model-capabilities.cjs.map +1 -1
- package/dist/data/runtime/model-capabilities.d.ts +5 -1
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
- package/dist/data/runtime/model-capabilities.js +6 -6
- package/dist/data/runtime/model-capabilities.js.map +1 -1
- package/dist/data/runtime/provider-status.cjs +1 -1
- package/dist/data/runtime/provider-status.cjs.map +1 -1
- package/dist/data/runtime/provider-status.js +1 -1
- package/dist/data/runtime/provider-status.js.map +1 -1
- package/dist/data/runtime/runtime-field-support.cjs +63 -0
- package/dist/data/runtime/runtime-field-support.cjs.map +1 -0
- package/dist/data/runtime/runtime-field-support.d.ts +13 -0
- package/dist/data/runtime/runtime-field-support.d.ts.map +1 -0
- package/dist/data/runtime/runtime-field-support.js +63 -0
- package/dist/data/runtime/runtime-field-support.js.map +1 -0
- package/dist/data/runtime/runtime-mode.cjs +170 -111
- package/dist/data/runtime/runtime-mode.cjs.map +1 -1
- package/dist/data/runtime/runtime-mode.d.ts +58 -14
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
- package/dist/data/runtime/runtime-mode.js +170 -111
- package/dist/data/runtime/runtime-mode.js.map +1 -1
- package/dist/data/selectionActionSplit.cjs +33 -0
- package/dist/data/selectionActionSplit.cjs.map +1 -0
- package/dist/data/selectionActionSplit.d.ts +36 -0
- package/dist/data/selectionActionSplit.d.ts.map +1 -0
- package/dist/data/selectionActionSplit.js +33 -0
- package/dist/data/selectionActionSplit.js.map +1 -0
- package/dist/data/task-copy.cjs +76 -0
- package/dist/data/task-copy.cjs.map +1 -0
- package/dist/data/task-copy.d.ts +12 -0
- package/dist/data/task-copy.d.ts.map +1 -0
- package/dist/data/task-copy.js +76 -0
- package/dist/data/task-copy.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +34 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +34 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +24 -17
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts +3 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +25 -18
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/icons/components/UiCalendarCheck.cjs +15 -0
- package/dist/icons/components/UiCalendarCheck.cjs.map +1 -0
- package/dist/icons/components/UiCalendarCheck.d.ts +15 -0
- package/dist/icons/components/UiCalendarCheck.d.ts.map +1 -0
- package/dist/icons/components/UiCalendarCheck.js +15 -0
- package/dist/icons/components/UiCalendarCheck.js.map +1 -0
- package/dist/icons/components/UiChartLineUp.cjs +15 -0
- package/dist/icons/components/UiChartLineUp.cjs.map +1 -0
- package/dist/icons/components/UiChartLineUp.d.ts +15 -0
- package/dist/icons/components/UiChartLineUp.d.ts.map +1 -0
- package/dist/icons/components/UiChartLineUp.js +15 -0
- package/dist/icons/components/UiChartLineUp.js.map +1 -0
- package/dist/icons/components/UiClockCountdown.cjs +15 -0
- package/dist/icons/components/UiClockCountdown.cjs.map +1 -0
- package/dist/icons/components/UiClockCountdown.d.ts +15 -0
- package/dist/icons/components/UiClockCountdown.d.ts.map +1 -0
- package/dist/icons/components/UiClockCountdown.js +15 -0
- package/dist/icons/components/UiClockCountdown.js.map +1 -0
- package/dist/icons/components/UiFactory.cjs +15 -0
- package/dist/icons/components/UiFactory.cjs.map +1 -0
- package/dist/icons/components/UiFactory.d.ts +15 -0
- package/dist/icons/components/UiFactory.d.ts.map +1 -0
- package/dist/icons/components/UiFactory.js +15 -0
- package/dist/icons/components/UiFactory.js.map +1 -0
- package/dist/icons/components/UiHandCoins.cjs +15 -0
- package/dist/icons/components/UiHandCoins.cjs.map +1 -0
- package/dist/icons/components/UiHandCoins.d.ts +15 -0
- package/dist/icons/components/UiHandCoins.d.ts.map +1 -0
- package/dist/icons/components/UiHandCoins.js +15 -0
- package/dist/icons/components/UiHandCoins.js.map +1 -0
- package/dist/icons/components/UiInvoice.cjs +15 -0
- package/dist/icons/components/UiInvoice.cjs.map +1 -0
- package/dist/icons/components/UiInvoice.d.ts +15 -0
- package/dist/icons/components/UiInvoice.d.ts.map +1 -0
- package/dist/icons/components/UiInvoice.js +15 -0
- package/dist/icons/components/UiInvoice.js.map +1 -0
- package/dist/icons/components/UiTax.cjs +15 -0
- package/dist/icons/components/UiTax.cjs.map +1 -0
- package/dist/icons/components/UiTax.d.ts +15 -0
- package/dist/icons/components/UiTax.d.ts.map +1 -0
- package/dist/icons/components/UiTax.js +15 -0
- package/dist/icons/components/UiTax.js.map +1 -0
- package/dist/icons/index.d.ts +14 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +14 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +14 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +21 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +21 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +43 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +44 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +17 -3
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +17 -3
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +46 -35
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.js +46 -35
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +26 -11
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +4 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +26 -11
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/FilterFormFields.cjs +3 -2
- package/dist/rpc/FilterFormFields.cjs.map +1 -1
- package/dist/rpc/FilterFormFields.d.ts +2 -1
- package/dist/rpc/FilterFormFields.d.ts.map +1 -1
- package/dist/rpc/FilterFormFields.js +3 -2
- package/dist/rpc/FilterFormFields.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +67 -15
- package/dist/rpc/OperationActionBar.cjs.map +1 -1
- package/dist/rpc/OperationActionBar.d.ts +11 -3
- package/dist/rpc/OperationActionBar.d.ts.map +1 -1
- package/dist/rpc/OperationActionBar.js +68 -16
- package/dist/rpc/OperationActionBar.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +69 -76
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +3 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +69 -76
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCatalogActions.cjs +69 -0
- package/dist/rpc/OperationCatalogActions.cjs.map +1 -0
- package/dist/rpc/OperationCatalogActions.d.ts +17 -0
- package/dist/rpc/OperationCatalogActions.d.ts.map +1 -0
- package/dist/rpc/OperationCatalogActions.js +69 -0
- package/dist/rpc/OperationCatalogActions.js.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.cjs +129 -116
- package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts +18 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.js +130 -117
- package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +7 -4
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +4 -2
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +7 -4
- package/dist/rpc/OperationResultView.js.map +1 -1
- package/dist/rpc/operationCatalogUrl.cjs +28 -0
- package/dist/rpc/operationCatalogUrl.cjs.map +1 -0
- package/dist/rpc/operationCatalogUrl.d.ts +3 -0
- package/dist/rpc/operationCatalogUrl.d.ts.map +1 -0
- package/dist/rpc/operationCatalogUrl.js +28 -0
- package/dist/rpc/operationCatalogUrl.js.map +1 -0
- package/dist/rpc/rowNavigation.cjs +4 -3
- package/dist/rpc/rowNavigation.cjs.map +1 -1
- package/dist/rpc/rowNavigation.d.ts +1 -1
- package/dist/rpc/rowNavigation.d.ts.map +1 -1
- package/dist/rpc/rowNavigation.js +4 -3
- package/dist/rpc/rowNavigation.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +2 -2
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +2 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-profile.cjs +7 -0
- package/dist/runtime-profile.cjs.map +1 -0
- package/dist/runtime-profile.d.ts +2 -0
- package/dist/runtime-profile.d.ts.map +1 -0
- package/dist/runtime-profile.js +7 -0
- package/dist/runtime-profile.js.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSchemaBrowser.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport {\n ListMenu,\n ListMenuHeader,\n ListMenuItem,\n ListMenuSection,\n} from \"../../components/ListMenu\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Tabs } from \"../../layout/Tabs\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiChevronDown,\n UiChevronRight,\n UiCode2,\n UiLayers,\n UiListDashes,\n UiSearch,\n UiWrench,\n} from \"../../icons\";\nimport { SchemaViewer } from \"../SchemaViewer\";\nimport type {\n ChatToolInputSchema,\n ToolAnnotations,\n ToolMeta,\n} from \"../chat/types\";\n\nexport type ToolSchemaBrowserProps = {\n tools: ToolMeta[];\n className?: string;\n};\n\n/** Which dimension is the outer (primary) grouping. \"group\" nests parents inside\n * each tool-group; \"tree\" nests groups inside each parent surface. Whichever is\n * primary, the other becomes the inner level, so both views stay two-deep. */\ntype ViewMode = \"group\" | \"tree\";\ntype BrowserTab = \"schema\" | \"json\";\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\nconst EMPTY_SCHEMA: ChatToolInputSchema = { type: \"object\", properties: {} };\n\nexport function ToolSchemaBrowser({\n tools,\n className,\n}: ToolSchemaBrowserProps) {\n const [query, setQuery] = useState(\"\");\n const [view, setView] = useState<ViewMode>(\"group\");\n const [tab, setTab] = useState<BrowserTab>(\"schema\");\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set());\n const [selected, setSelected] = useState<string | null>(\n tools[0]?.name ?? null,\n );\n\n const searching = query.trim().length > 0;\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return tools;\n return tools.filter((tool) =>\n [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool.annotations),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q)),\n );\n }, [query, tools]);\n const active =\n tools.find((tool) => tool.name === selected) ?? filtered[0] ?? tools[0];\n const sections = useMemo(\n () => buildSections(filtered, view),\n [filtered, view],\n );\n\n const toggle = (key: string) =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n // While searching we force-expand so matches are never hidden behind a\n // collapsed node.\n const isOpen = (key: string) => searching || !collapsed.has(key);\n\n return (\n <div\n className={cn(\n \"min-h-0 overflow-hidden rounded-md border border-border bg-background\",\n className,\n )}\n >\n <SplitPane\n defaultSplit={34}\n minLeft={24}\n minRight={42}\n className=\"min-h-0\"\n leftClass=\"flex min-h-0 flex-col overflow-hidden\"\n rightClass=\"min-h-0 overflow-y-auto\"\n left={\n <ToolSidebar\n query={query}\n view={view}\n sections={sections}\n active={active}\n filteredCount={filtered.length}\n isOpen={isOpen}\n onQueryChange={setQuery}\n onViewChange={setView}\n onToggle={toggle}\n onSelect={setSelected}\n />\n }\n right={\n active ? (\n <ToolDetail tool={active} tab={tab} onTabChange={setTab} />\n ) : (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No tools\n </div>\n )\n }\n />\n </div>\n );\n}\n\nfunction ToolSidebar({\n query,\n view,\n sections,\n active,\n filteredCount,\n isOpen,\n onQueryChange,\n onViewChange,\n onToggle,\n onSelect,\n}: {\n query: string;\n view: ViewMode;\n sections: ToolSection[];\n active: ToolMeta | undefined;\n filteredCount: number;\n isOpen: (key: string) => boolean;\n onQueryChange: (query: string) => void;\n onViewChange: (view: ViewMode) => void;\n onToggle: (key: string) => void;\n onSelect: (name: string) => void;\n}) {\n return (\n <>\n <label className=\"flex h-9 shrink-0 items-center gap-2 border-b border-border px-2 text-xs\">\n <Icon icon={UiSearch} className=\"size-3.5 text-muted-foreground\" />\n <input\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder=\"Search tools\"\n className=\"min-w-0 flex-1 bg-transparent outline-none\"\n />\n </label>\n <div className=\"flex shrink-0 items-center gap-1 border-b border-border px-2 py-1\">\n <ViewToggleButton\n active={view === \"group\"}\n icon={UiListDashes}\n label=\"Group\"\n onClick={() => onViewChange(\"group\")}\n />\n <ViewToggleButton\n active={view === \"tree\"}\n icon={UiLayers}\n label=\"Tree\"\n onClick={() => onViewChange(\"tree\")}\n />\n </div>\n <ListMenu className=\"min-h-0 flex-1 overflow-y-auto divide-y-0\">\n {sections.map((section) => {\n const sectionKey = `p:${section.label}`;\n const sectionOpen = isOpen(sectionKey);\n return (\n <ListMenuSection key={sectionKey}>\n <ListMenuHeader className=\"px-0 py-0\">\n <button\n type=\"button\"\n onClick={() => onToggle(sectionKey)}\n className=\"flex w-full items-center gap-1 px-2 py-1 text-left text-[10px] font-semibold uppercase tracking-wider text-muted-foreground hover:bg-muted\"\n >\n <Icon\n icon={sectionOpen ? UiChevronDown : UiChevronRight}\n className=\"size-3 shrink-0\"\n />\n <span className=\"min-w-0 flex-1 truncate\">\n {section.label}\n </span>\n <span className=\"tabular-nums text-muted-foreground/70\">\n {section.count}\n </span>\n </button>\n </ListMenuHeader>\n {sectionOpen &&\n section.children.map((child) => {\n const childKey = `s:${section.label}///${child.label}`;\n const childOpen = isOpen(childKey);\n return (\n <div key={childKey}>\n <button\n type=\"button\"\n onClick={() => onToggle(childKey)}\n className=\"flex w-full items-center gap-1 border-b border-border bg-background px-2 py-1 pl-3 text-left text-[11px] font-medium text-foreground/80 hover:bg-accent/50\"\n >\n <Icon\n icon={childOpen ? UiChevronDown : UiChevronRight}\n className=\"size-3 shrink-0 text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate\">\n {child.label}\n </span>\n <span className=\"tabular-nums text-[10px] text-muted-foreground/70\">\n {child.tools.length}\n </span>\n </button>\n {childOpen &&\n child.tools.map((tool) => (\n <ToolSidebarRow\n key={tool.name}\n tool={tool}\n active={active?.name === tool.name}\n onSelect={() => onSelect(tool.name)}\n />\n ))}\n </div>\n );\n })}\n </ListMenuSection>\n );\n })}\n {filteredCount === 0 && (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No matching tools\n </div>\n )}\n </ListMenu>\n </>\n );\n}\n\nfunction ToolSidebarRow({\n tool,\n active,\n onSelect,\n}: {\n tool: ToolMeta;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <ListMenuItem\n active={active}\n role=\"button\"\n tabIndex={0}\n aria-selected={active}\n className=\"px-2 py-2 pl-6\"\n onClick={onSelect}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <div className=\"grid grid-cols-[1rem_minmax(0,1fr)] gap-2\">\n {tool.icon ? (\n <Icon\n name={tool.icon}\n className=\"mt-0.5 size-3.5 text-muted-foreground\"\n />\n ) : (\n <Icon\n icon={UiWrench}\n className=\"mt-0.5 size-3.5 text-muted-foreground\"\n />\n )}\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {tool.label || tool.name}\n </span>\n </div>\n </ListMenuItem>\n );\n}\n\nfunction ToolDetail({\n tool,\n tab,\n onTabChange,\n}: {\n tool: ToolMeta;\n tab: BrowserTab;\n onTabChange: (tab: BrowserTab) => void;\n}) {\n const strict = effectiveToolStrictness(tool);\n const runtimePreview = useMemo(() => buildRuntimeToolPreview(tool), [tool]);\n return (\n <div className=\"space-y-3 p-3\">\n <div className=\"min-w-0 space-y-3\">\n <div className=\"min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {tool.icon ? (\n <Icon name={tool.icon} className=\"size-4 text-muted-foreground\" />\n ) : (\n <Icon icon={UiCode2} className=\"size-4 text-muted-foreground\" />\n )}\n <div className=\"min-w-0 truncate text-sm font-medium\">\n {tool.parent ? `${tool.parent} ` : \"\"}\n {tool.label || tool.name}\n </div>\n <StrictnessBadge strict={strict} />\n </div>\n {tool.description && (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {tool.description}\n </p>\n )}\n </div>\n <dl className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1 text-xs\">\n <DetailRow label=\"Tool ID\" value={tool.name} mono />\n <DetailRow label=\"Default\" value={tool.defaultPermission} />\n <DetailRow label=\"Strictness\" value={strict ? \"Strict\" : \"Loose\"} />\n <DetailRow label=\"Icon\" value={tool.icon} mono />\n <DetailRow label=\"Source\" value={tool.source} />\n <DetailRow label=\"Group\" value={tool.group} />\n <DetailRow label=\"Parent\" value={tool.parent} />\n <DetailRow label=\"Server\" value={tool.server} />\n <DetailRow label=\"Method\" value={tool.method} />\n <DetailRow label=\"Path\" value={tool.path} mono />\n </dl>\n <HintChips annotations={tool.annotations} />\n <ToolAnnotationsPanel annotations={tool.annotations} />\n {tool.hints && tool.hints.length > 0 && (\n <div className=\"rounded border border-border bg-muted/20 p-2\">\n <div className=\"mb-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Hints\n </div>\n <ul className=\"space-y-1 text-xs text-muted-foreground\">\n {tool.hints.map((hint) => (\n <li key={hint}>{hint}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n <Tabs\n value={tab}\n onChange={(next) => onTabChange(next as BrowserTab)}\n tabs={[\n { id: \"schema\", label: \"Schema\" },\n { id: \"json\", label: \"JSON\" },\n ]}\n />\n {tab === \"schema\" ? (\n <div role=\"tabpanel\" className=\"space-y-3\">\n <SchemaViewer\n schema={tool.inputSchema ?? EMPTY_SCHEMA}\n defaultOpenDepth={2}\n showControls={false}\n />\n {tool.outputSchema && (\n <div className=\"border-t border-border pt-3\">\n <div className=\"mb-2 text-xs font-semibold\">Output</div>\n <SchemaViewer\n schema={tool.outputSchema}\n defaultOpenDepth={1}\n showControls={false}\n />\n </div>\n )}\n </div>\n ) : (\n <div role=\"tabpanel\">\n <CodeBlock\n language=\"json\"\n source={JSON.stringify(runtimePreview, null, 2)}\n jsonDefaultOpenDepth={2}\n copyable\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction ViewToggleButton({\n active,\n icon,\n label,\n onClick,\n}: {\n active: boolean;\n icon: StaticIconComponent;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-pressed={active}\n className={cn(\n \"flex items-center gap-1 rounded px-2 py-0.5 text-[11px] font-medium\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50\",\n )}\n >\n <Icon icon={icon} className=\"size-3.5\" />\n {label}\n </button>\n );\n}\n\nfunction StrictnessBadge({ strict }: { strict: boolean }) {\n return (\n <span\n className={cn(\n \"shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium\",\n strict\n ? \"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300\"\n : \"bg-amber-500/10 text-amber-700 dark:text-amber-300\",\n )}\n title={strict ? \"Strict input schema\" : \"Loose input schema\"}\n >\n {strict ? \"Strict\" : \"Loose\"}\n </span>\n );\n}\n\nfunction HintChips({\n annotations,\n compact = false,\n}: {\n annotations: ToolAnnotations | undefined;\n compact?: boolean;\n}) {\n const chips = wellKnownHintChips(annotations);\n if (chips.length === 0) return null;\n return (\n <div\n className={cn(\n \"flex flex-wrap gap-1\",\n compact ? \"text-[9px]\" : \"text-[10px]\",\n )}\n >\n {chips.map((chip) => (\n <span\n key={chip.key}\n className={cn(\"rounded px-1.5 py-0.5 font-medium\", chip.className)}\n >\n {chip.label}\n </span>\n ))}\n </div>\n );\n}\n\nfunction ToolAnnotationsPanel({\n annotations,\n}: {\n annotations: ToolAnnotations | undefined;\n}) {\n const entries = annotationEntries(annotations);\n if (entries.length === 0) return null;\n return (\n <div className=\"rounded border border-border bg-muted/20 p-2\">\n <div className=\"mb-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Annotations\n </div>\n <dl className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1 text-xs\">\n {entries.map(([key, value]) => (\n <DetailRow\n key={key}\n label={key}\n value={formatAnnotationValue(value)}\n mono={typeof value !== \"boolean\"}\n />\n ))}\n </dl>\n </div>\n );\n}\n\nfunction DetailRow({\n label,\n value,\n mono = false,\n}: {\n label: string;\n value: unknown;\n mono?: boolean;\n}) {\n if (value === undefined || value === null || value === \"\") return null;\n return (\n <>\n <dt className=\"text-muted-foreground\">{label}</dt>\n <dd className={cn(\"min-w-0 break-all\", mono && \"font-mono\")}>\n {String(value)}\n </dd>\n </>\n );\n}\n\ntype ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\n/** Buckets tools two levels deep. In \"group\" view the outer level is the\n * tool-group and the inner level is the parent surface; \"tree\" swaps them so\n * the parent surface is outer and the group nests inside. Either way the\n * non-primary dimension is the nested one. */\nfunction buildSections(tools: ToolMeta[], view: ViewMode): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const o = outerOf(tool);\n const i = innerOf(tool);\n const inner = outer.get(o) ?? new Map<string, ToolMeta[]>();\n (inner.get(i) ?? inner.set(i, []).get(i)!).push(tool);\n outer.set(o, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nfunction effectiveToolStrictness(tool: ToolMeta): boolean {\n if (tool.strict !== undefined) return tool.strict;\n return tool.inputSchema?.additionalProperties === false;\n}\n\nfunction buildRuntimeToolPreview(tool: ToolMeta) {\n return compactObject({\n name: tool.name,\n description:\n tool.description ?? tool.annotations?.title ?? tool.title ?? tool.label,\n inputSchema: tool.inputSchema ?? EMPTY_SCHEMA,\n outputSchema: tool.outputSchema,\n strict: effectiveToolStrictness(tool),\n annotations: tool.annotations,\n metadata: compactObject({\n label: tool.label,\n title: tool.title,\n icon: tool.icon,\n group: tool.group,\n parent: tool.parent,\n entity: tool.entity,\n defaultPermission: tool.defaultPermission,\n source: tool.source,\n server: tool.server,\n method: tool.method,\n path: tool.path,\n operationName: tool.operationName,\n preferenceKey: tool.preferenceKey,\n }),\n });\n}\n\nfunction compactObject(\n record: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value === undefined || value === null) return false;\n if (\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.keys(value).length === 0\n ) {\n return false;\n }\n return true;\n }),\n );\n}\n\nfunction annotationSearchText(\n annotations: ToolAnnotations | undefined,\n): string[] {\n if (!annotations) return [];\n return Object.entries(annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nfunction annotationEntries(\n annotations: ToolAnnotations | undefined,\n): Array<[string, unknown]> {\n if (!annotations) return [];\n const order = [\n \"title\",\n \"readOnlyHint\",\n \"destructiveHint\",\n \"idempotentHint\",\n \"openWorldHint\",\n ];\n const seen = new Set(order);\n const known = order\n .filter((key) => annotations[key] !== undefined)\n .map((key) => [key, annotations[key]] as [string, unknown]);\n const rest = Object.entries(annotations).filter(([key]) => !seen.has(key));\n return [...known, ...rest];\n}\n\nfunction formatAnnotationValue(value: unknown): string {\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction wellKnownHintChips(annotations: ToolAnnotations | undefined) {\n if (!annotations) return [];\n return [\n annotations.readOnlyHint\n ? {\n key: \"readOnlyHint\",\n label: \"Read only\",\n className: \"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300\",\n }\n : null,\n annotations.destructiveHint\n ? {\n key: \"destructiveHint\",\n label: \"Destructive\",\n className: \"bg-rose-500/10 text-rose-700 dark:text-rose-300\",\n }\n : null,\n annotations.idempotentHint\n ? {\n key: \"idempotentHint\",\n label: \"Idempotent\",\n className: \"bg-sky-500/10 text-sky-700 dark:text-sky-300\",\n }\n : null,\n annotations.openWorldHint\n ? {\n key: \"openWorldHint\",\n label: \"Open world\",\n className: \"bg-violet-500/10 text-violet-700 dark:text-violet-300\",\n }\n : null,\n ].filter(\n (chip): chip is { key: string; label: string; className: string } =>\n chip !== null,\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolSchemaBrowserDetail } from \"./ToolSchemaBrowser.detail\";\nimport {\n EMPTY_TOOL_HINT_FILTERS,\n buildToolSchemaSections,\n filterToolSchemaBrowserTools,\n type ToolHintFilter,\n type ToolHintFilters,\n type ToolHintKey,\n type ToolSchemaBrowserTab,\n type ToolSchemaViewMode,\n} from \"./ToolSchemaBrowser.model\";\nimport { ToolSchemaBrowserSidebar } from \"./ToolSchemaBrowser.sidebar\";\n\nexport type ToolSchemaBrowserProps = {\n tools: ToolMeta[];\n /** Server-resolved effective permission shown beside each tool. */\n value?: Record<string, ToolPolicy> | undefined;\n /** Enables bulk selection and emits one ordered policy rule per action. */\n onRule?: ((rule: PermissionRule) => void) | undefined;\n className?: string;\n};\n\nexport function ToolSchemaBrowser({\n tools,\n value,\n onRule,\n className,\n}: ToolSchemaBrowserProps) {\n const [query, setQuery] = useState(\"\");\n const [view, setView] = useState<ToolSchemaViewMode>(\"group\");\n const [tab, setTab] = useState<ToolSchemaBrowserTab>(\"schema\");\n const [filters, setFilters] = useState<ToolHintFilters>(\n EMPTY_TOOL_HINT_FILTERS,\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set());\n const [selected, setSelected] = useState<string | null>(\n tools[0]?.name ?? null,\n );\n const selection = useListMenuSelection({\n keys: tools.map((tool) => tool.name),\n });\n\n const filtered = useMemo(\n () => filterToolSchemaBrowserTools(tools, query, filters),\n [filters, query, tools],\n );\n const searching =\n query.trim().length > 0 ||\n Object.values(filters).some((value) => value !== \"any\");\n const active =\n filtered.find((tool) => tool.name === selected) ?? filtered[0] ?? tools[0];\n const sections = useMemo(\n () => buildToolSchemaSections(filtered, view),\n [filtered, view],\n );\n\n const toggle = (key: string) =>\n setCollapsed((previous) => {\n const next = new Set(previous);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n const isOpen = (key: string) => searching || !collapsed.has(key);\n const updateFilter = (key: ToolHintKey, value: ToolHintFilter) =>\n setFilters((current) => ({\n ...current,\n [key]: value,\n }));\n\n return (\n <div\n className={cn(\n \"min-h-0 overflow-hidden rounded-md border border-border bg-background\",\n className,\n )}\n >\n <SplitPane\n defaultSplit={34}\n minLeft={24}\n minRight={42}\n className=\"min-h-0\"\n leftClass=\"flex min-h-0 flex-col overflow-hidden\"\n rightClass=\"min-h-0 overflow-y-auto\"\n left={\n <ToolSchemaBrowserSidebar\n query={query}\n view={view}\n filters={filters}\n sections={sections}\n active={active}\n filteredCount={filtered.length}\n isOpen={isOpen}\n value={value}\n onRule={onRule}\n onQueryChange={setQuery}\n onViewChange={setView}\n onFilterChange={updateFilter}\n onClearFilters={() => setFilters({ ...EMPTY_TOOL_HINT_FILTERS })}\n onToggle={toggle}\n onSelect={setSelected}\n {...(onRule ? { selection } : {})}\n />\n }\n right={\n active ? (\n <ToolSchemaBrowserDetail\n tool={active}\n tab={tab}\n onTabChange={setTab}\n />\n ) : (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No tools\n </div>\n )\n }\n />\n </div>\n );\n}\n"],"names":["value"],"mappings":";;;;;;;;AA4BO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,MAAM,OAAO,IAAI,SAA6B,OAAO;AAC5D,QAAM,CAAC,KAAK,MAAM,IAAI,SAA+B,QAAQ;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAI;AAAA,IAC5B;AAAA,EAAA;AAEF,QAAM,CAAC,WAAW,YAAY,IAAI,SAAsB,MAAM,oBAAI,KAAK;AACvE,QAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B,WAAM,CAAC,MAAP,mBAAU,SAAQ;AAAA,EAAA;AAEpB,QAAM,YAAY,qBAAqB;AAAA,IACrC,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,EAAA,CACpC;AAED,QAAM,WAAW;AAAA,IACf,MAAM,6BAA6B,OAAO,OAAO,OAAO;AAAA,IACxD,CAAC,SAAS,OAAO,KAAK;AAAA,EAAA;AAExB,QAAM,YACJ,MAAM,KAAA,EAAO,SAAS,KACtB,OAAO,OAAO,OAAO,EAAE,KAAK,CAACA,WAAUA,WAAU,KAAK;AACxD,QAAM,SACJ,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,QAAQ,KAAK,SAAS,CAAC,KAAK,MAAM,CAAC;AAC3E,QAAM,WAAW;AAAA,IACf,MAAM,wBAAwB,UAAU,IAAI;AAAA,IAC5C,CAAC,UAAU,IAAI;AAAA,EAAA;AAGjB,QAAM,SAAS,CAAC,QACd,aAAa,CAAC,aAAa;AACzB,UAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,QAAI,KAAK,IAAI,GAAG,EAAG,MAAK,OAAO,GAAG;AAAA,QAC7B,MAAK,IAAI,GAAG;AACjB,WAAO;AAAA,EACT,CAAC;AACH,QAAM,SAAS,CAAC,QAAgB,aAAa,CAAC,UAAU,IAAI,GAAG;AAC/D,QAAM,eAAe,CAAC,KAAkBA,WACtC,WAAW,CAAC,aAAa;AAAA,IACvB,GAAG;AAAA,IACH,CAAC,GAAG,GAAGA;AAAAA,EAAA,EACP;AAEJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,cAAc;AAAA,UACd,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAU;AAAA,UACV,WAAU;AAAA,UACV,YAAW;AAAA,UACX,MACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe,SAAS;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe;AAAA,cACf,cAAc;AAAA,cACd,gBAAgB;AAAA,cAChB,gBAAgB,MAAM,WAAW,EAAE,GAAG,yBAAyB;AAAA,cAC/D,UAAU;AAAA,cACV,UAAU;AAAA,cACT,GAAI,SAAS,EAAE,cAAc,CAAA;AAAA,YAAC;AAAA,UAAA;AAAA,UAGnC,OACE,SACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN;AAAA,cACA,aAAa;AAAA,YAAA;AAAA,UAAA,IAGf,oBAAC,OAAA,EAAI,WAAU,uDAAsD,UAAA,WAAA,CAErE;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const TOOL_HINTS = [
|
|
4
|
+
{ key: "readOnlyHint", label: "Read only" },
|
|
5
|
+
{ key: "destructiveHint", label: "Destructive" },
|
|
6
|
+
{ key: "idempotentHint", label: "Idempotent" },
|
|
7
|
+
{ key: "openWorldHint", label: "Open world" }
|
|
8
|
+
];
|
|
9
|
+
const EMPTY_TOOL_HINT_FILTERS = {
|
|
10
|
+
readOnlyHint: "any",
|
|
11
|
+
destructiveHint: "any",
|
|
12
|
+
idempotentHint: "any",
|
|
13
|
+
openWorldHint: "any"
|
|
14
|
+
};
|
|
15
|
+
const NO_GROUP = "Tools";
|
|
16
|
+
const NO_PARENT = "General";
|
|
17
|
+
function filterToolSchemaBrowserTools(tools, query, filters) {
|
|
18
|
+
const q = query.trim().toLowerCase();
|
|
19
|
+
return tools.filter((tool) => {
|
|
20
|
+
if (!matchesHintFilters(tool, filters)) return false;
|
|
21
|
+
if (!q) return true;
|
|
22
|
+
return [
|
|
23
|
+
tool.name,
|
|
24
|
+
tool.label,
|
|
25
|
+
tool.title,
|
|
26
|
+
tool.description,
|
|
27
|
+
tool.group,
|
|
28
|
+
tool.parent,
|
|
29
|
+
tool.entity,
|
|
30
|
+
tool.icon,
|
|
31
|
+
tool.defaultPermission,
|
|
32
|
+
tool.source,
|
|
33
|
+
tool.server,
|
|
34
|
+
...annotationSearchText(tool),
|
|
35
|
+
...tool.hints ?? []
|
|
36
|
+
].filter(Boolean).some((value) => String(value).toLowerCase().includes(q));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function matchesHintFilters(tool, filters) {
|
|
40
|
+
return TOOL_HINTS.every(({ key }) => {
|
|
41
|
+
var _a;
|
|
42
|
+
const filter = filters[key];
|
|
43
|
+
if (filter === "any") return true;
|
|
44
|
+
const value = (_a = tool.annotations) == null ? void 0 : _a[key];
|
|
45
|
+
return filter === "yes" ? value === true : value !== true;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function annotationSearchText(tool) {
|
|
49
|
+
if (!tool.annotations) return [];
|
|
50
|
+
return Object.entries(tool.annotations).flatMap(([key, value]) => [key, primitiveAnnotationText(value)]).filter((value) => Boolean(value));
|
|
51
|
+
}
|
|
52
|
+
function primitiveAnnotationText(value) {
|
|
53
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
54
|
+
return String(value);
|
|
55
|
+
}
|
|
56
|
+
return void 0;
|
|
57
|
+
}
|
|
58
|
+
function buildToolSchemaSections(tools, view) {
|
|
59
|
+
const outerOf = (tool) => view === "group" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;
|
|
60
|
+
const innerOf = (tool) => view === "group" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;
|
|
61
|
+
const outer = /* @__PURE__ */ new Map();
|
|
62
|
+
for (const tool of tools) {
|
|
63
|
+
const outerKey = outerOf(tool);
|
|
64
|
+
const innerKey = innerOf(tool);
|
|
65
|
+
const inner = outer.get(outerKey) ?? /* @__PURE__ */ new Map();
|
|
66
|
+
const bucket = inner.get(innerKey) ?? [];
|
|
67
|
+
bucket.push(tool);
|
|
68
|
+
inner.set(innerKey, bucket);
|
|
69
|
+
outer.set(outerKey, inner);
|
|
70
|
+
}
|
|
71
|
+
return [...outer.entries()].map(([label, inner]) => {
|
|
72
|
+
const children = [...inner.entries()].map(([childLabel, childTools]) => ({
|
|
73
|
+
label: childLabel,
|
|
74
|
+
tools: [...childTools].sort(
|
|
75
|
+
(a, b) => (a.label || a.name).localeCompare(b.label || b.name)
|
|
76
|
+
)
|
|
77
|
+
})).sort((a, b) => a.label.localeCompare(b.label));
|
|
78
|
+
return {
|
|
79
|
+
label,
|
|
80
|
+
count: children.reduce((sum, child) => sum + child.tools.length, 0),
|
|
81
|
+
children
|
|
82
|
+
};
|
|
83
|
+
}).sort((a, b) => a.label.localeCompare(b.label));
|
|
84
|
+
}
|
|
85
|
+
function directoryPermissionRule({
|
|
86
|
+
tools,
|
|
87
|
+
view,
|
|
88
|
+
depth
|
|
89
|
+
}) {
|
|
90
|
+
const group = singleDirectoryValue(tools, "group");
|
|
91
|
+
const parent = singleDirectoryValue(tools, "parent");
|
|
92
|
+
const outer = view === "group" ? group : parent;
|
|
93
|
+
const inner = view === "group" ? parent : group;
|
|
94
|
+
if (!outer || depth === "child" && !inner) {
|
|
95
|
+
return { name: tools.map((tool) => tool.name).sort(), policy: "ask" };
|
|
96
|
+
}
|
|
97
|
+
if (depth === "child") {
|
|
98
|
+
if (!inner) throw new Error("Child tool directory has no metadata value");
|
|
99
|
+
return view === "group" ? { group: outer, parent: inner, policy: "ask" } : { parent: outer, group: inner, policy: "ask" };
|
|
100
|
+
}
|
|
101
|
+
return view === "group" ? { group: outer, policy: "ask" } : { parent: outer, policy: "ask" };
|
|
102
|
+
}
|
|
103
|
+
function singleDirectoryValue(tools, key) {
|
|
104
|
+
const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));
|
|
105
|
+
return values.size === 1 ? [...values][0] : void 0;
|
|
106
|
+
}
|
|
107
|
+
function updateSelectedTools(selected, visible) {
|
|
108
|
+
const next = new Set(selected);
|
|
109
|
+
const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));
|
|
110
|
+
for (const name of visible) {
|
|
111
|
+
if (allVisibleSelected) next.delete(name);
|
|
112
|
+
else next.add(name);
|
|
113
|
+
}
|
|
114
|
+
return [...next];
|
|
115
|
+
}
|
|
116
|
+
function selectedToolState(selected, visible) {
|
|
117
|
+
const count = visible.filter((name) => selected.has(name)).length;
|
|
118
|
+
return {
|
|
119
|
+
checked: visible.length > 0 && count === visible.length,
|
|
120
|
+
mixed: count > 0 && count < visible.length
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
exports.EMPTY_TOOL_HINT_FILTERS = EMPTY_TOOL_HINT_FILTERS;
|
|
124
|
+
exports.TOOL_HINTS = TOOL_HINTS;
|
|
125
|
+
exports.buildToolSchemaSections = buildToolSchemaSections;
|
|
126
|
+
exports.directoryPermissionRule = directoryPermissionRule;
|
|
127
|
+
exports.filterToolSchemaBrowserTools = filterToolSchemaBrowserTools;
|
|
128
|
+
exports.selectedToolState = selectedToolState;
|
|
129
|
+
exports.updateSelectedTools = updateSelectedTools;
|
|
130
|
+
//# sourceMappingURL=ToolSchemaBrowser.model.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.model.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const outer = view === \"group\" ? group : parent;\n const inner = view === \"group\" ? parent : group;\n if (!outer || (depth === \"child\" && !inner)) {\n return { name: tools.map((tool) => tool.name).sort(), policy: \"ask\" };\n }\n if (depth === \"child\") {\n if (!inner) throw new Error(\"Child tool directory has no metadata value\");\n return view === \"group\"\n ? { group: outer, parent: inner, policy: \"ask\" }\n : { parent: outer, group: inner, policy: \"ask\" };\n }\n return view === \"group\"\n ? { group: outer, policy: \"ask\" }\n : { parent: outer, policy: \"ask\" };\n}\n\nfunction singleDirectoryValue(\n tools: ToolMeta[],\n key: \"group\" | \"parent\",\n): string | undefined {\n const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));\n return values.size === 1 ? [...values][0] : undefined;\n}\n\nexport function updateSelectedTools(\n selected: readonly string[],\n visible: readonly string[],\n): string[] {\n const next = new Set(selected);\n const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));\n for (const name of visible) {\n if (allVisibleSelected) next.delete(name);\n else next.add(name);\n }\n return [...next];\n}\n\nexport function selectedToolState(\n selected: ReadonlySet<string>,\n visible: readonly string[],\n): { checked: boolean; mixed: boolean } {\n const count = visible.filter((name) => selected.has(name)).length;\n return {\n checked: visible.length > 0 && count === visible.length,\n mixed: count > 0 && count < visible.length,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { PermissionRule } from '../chat/tool-policy';
|
|
2
|
+
import { ToolMeta } from '../chat/types';
|
|
3
|
+
export type ToolSchemaViewMode = "group" | "tree";
|
|
4
|
+
export type ToolSchemaBrowserTab = "schema" | "json";
|
|
5
|
+
export type ToolHintKey = "readOnlyHint" | "destructiveHint" | "idempotentHint" | "openWorldHint";
|
|
6
|
+
export type ToolHintFilter = "any" | "yes" | "no";
|
|
7
|
+
export type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;
|
|
8
|
+
export type ToolSection = {
|
|
9
|
+
label: string;
|
|
10
|
+
count: number;
|
|
11
|
+
children: Array<{
|
|
12
|
+
label: string;
|
|
13
|
+
tools: ToolMeta[];
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
export declare const TOOL_HINTS: Array<{
|
|
17
|
+
key: ToolHintKey;
|
|
18
|
+
label: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters;
|
|
21
|
+
export declare function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter;
|
|
22
|
+
export declare function toolHintFilterLabel(value: ToolHintFilter): string;
|
|
23
|
+
export declare function filterToolSchemaBrowserTools(tools: ToolMeta[], query: string, filters: ToolHintFilters): ToolMeta[];
|
|
24
|
+
export declare function buildToolSchemaSections(tools: ToolMeta[], view: ToolSchemaViewMode): ToolSection[];
|
|
25
|
+
export declare function directoryPermissionRule({ tools, view, depth, }: {
|
|
26
|
+
tools: ToolMeta[];
|
|
27
|
+
view: ToolSchemaViewMode;
|
|
28
|
+
depth: "section" | "child";
|
|
29
|
+
}): PermissionRule;
|
|
30
|
+
export declare function updateSelectedTools(selected: readonly string[], visible: readonly string[]): string[];
|
|
31
|
+
export declare function selectedToolState(selected: ReadonlySet<string>, visible: readonly string[]): {
|
|
32
|
+
checked: boolean;
|
|
33
|
+
mixed: boolean;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=ToolSchemaBrowser.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,CAAC;AACpB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKjE,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAKrC,CAAC;AAKF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAIzE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAIjE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,GACvB,QAAQ,EAAE,CAuBZ;AA6BD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,kBAAkB,GACvB,WAAW,EAAE,CAkCf;AAED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,IAAI,EACJ,KAAK,GACN,EAAE;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B,GAAG,cAAc,CAiBjB;AAUD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CAQV;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAMtC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
const TOOL_HINTS = [
|
|
2
|
+
{ key: "readOnlyHint", label: "Read only" },
|
|
3
|
+
{ key: "destructiveHint", label: "Destructive" },
|
|
4
|
+
{ key: "idempotentHint", label: "Idempotent" },
|
|
5
|
+
{ key: "openWorldHint", label: "Open world" }
|
|
6
|
+
];
|
|
7
|
+
const EMPTY_TOOL_HINT_FILTERS = {
|
|
8
|
+
readOnlyHint: "any",
|
|
9
|
+
destructiveHint: "any",
|
|
10
|
+
idempotentHint: "any",
|
|
11
|
+
openWorldHint: "any"
|
|
12
|
+
};
|
|
13
|
+
const NO_GROUP = "Tools";
|
|
14
|
+
const NO_PARENT = "General";
|
|
15
|
+
function filterToolSchemaBrowserTools(tools, query, filters) {
|
|
16
|
+
const q = query.trim().toLowerCase();
|
|
17
|
+
return tools.filter((tool) => {
|
|
18
|
+
if (!matchesHintFilters(tool, filters)) return false;
|
|
19
|
+
if (!q) return true;
|
|
20
|
+
return [
|
|
21
|
+
tool.name,
|
|
22
|
+
tool.label,
|
|
23
|
+
tool.title,
|
|
24
|
+
tool.description,
|
|
25
|
+
tool.group,
|
|
26
|
+
tool.parent,
|
|
27
|
+
tool.entity,
|
|
28
|
+
tool.icon,
|
|
29
|
+
tool.defaultPermission,
|
|
30
|
+
tool.source,
|
|
31
|
+
tool.server,
|
|
32
|
+
...annotationSearchText(tool),
|
|
33
|
+
...tool.hints ?? []
|
|
34
|
+
].filter(Boolean).some((value) => String(value).toLowerCase().includes(q));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function matchesHintFilters(tool, filters) {
|
|
38
|
+
return TOOL_HINTS.every(({ key }) => {
|
|
39
|
+
var _a;
|
|
40
|
+
const filter = filters[key];
|
|
41
|
+
if (filter === "any") return true;
|
|
42
|
+
const value = (_a = tool.annotations) == null ? void 0 : _a[key];
|
|
43
|
+
return filter === "yes" ? value === true : value !== true;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function annotationSearchText(tool) {
|
|
47
|
+
if (!tool.annotations) return [];
|
|
48
|
+
return Object.entries(tool.annotations).flatMap(([key, value]) => [key, primitiveAnnotationText(value)]).filter((value) => Boolean(value));
|
|
49
|
+
}
|
|
50
|
+
function primitiveAnnotationText(value) {
|
|
51
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
52
|
+
return String(value);
|
|
53
|
+
}
|
|
54
|
+
return void 0;
|
|
55
|
+
}
|
|
56
|
+
function buildToolSchemaSections(tools, view) {
|
|
57
|
+
const outerOf = (tool) => view === "group" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;
|
|
58
|
+
const innerOf = (tool) => view === "group" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;
|
|
59
|
+
const outer = /* @__PURE__ */ new Map();
|
|
60
|
+
for (const tool of tools) {
|
|
61
|
+
const outerKey = outerOf(tool);
|
|
62
|
+
const innerKey = innerOf(tool);
|
|
63
|
+
const inner = outer.get(outerKey) ?? /* @__PURE__ */ new Map();
|
|
64
|
+
const bucket = inner.get(innerKey) ?? [];
|
|
65
|
+
bucket.push(tool);
|
|
66
|
+
inner.set(innerKey, bucket);
|
|
67
|
+
outer.set(outerKey, inner);
|
|
68
|
+
}
|
|
69
|
+
return [...outer.entries()].map(([label, inner]) => {
|
|
70
|
+
const children = [...inner.entries()].map(([childLabel, childTools]) => ({
|
|
71
|
+
label: childLabel,
|
|
72
|
+
tools: [...childTools].sort(
|
|
73
|
+
(a, b) => (a.label || a.name).localeCompare(b.label || b.name)
|
|
74
|
+
)
|
|
75
|
+
})).sort((a, b) => a.label.localeCompare(b.label));
|
|
76
|
+
return {
|
|
77
|
+
label,
|
|
78
|
+
count: children.reduce((sum, child) => sum + child.tools.length, 0),
|
|
79
|
+
children
|
|
80
|
+
};
|
|
81
|
+
}).sort((a, b) => a.label.localeCompare(b.label));
|
|
82
|
+
}
|
|
83
|
+
function directoryPermissionRule({
|
|
84
|
+
tools,
|
|
85
|
+
view,
|
|
86
|
+
depth
|
|
87
|
+
}) {
|
|
88
|
+
const group = singleDirectoryValue(tools, "group");
|
|
89
|
+
const parent = singleDirectoryValue(tools, "parent");
|
|
90
|
+
const outer = view === "group" ? group : parent;
|
|
91
|
+
const inner = view === "group" ? parent : group;
|
|
92
|
+
if (!outer || depth === "child" && !inner) {
|
|
93
|
+
return { name: tools.map((tool) => tool.name).sort(), policy: "ask" };
|
|
94
|
+
}
|
|
95
|
+
if (depth === "child") {
|
|
96
|
+
if (!inner) throw new Error("Child tool directory has no metadata value");
|
|
97
|
+
return view === "group" ? { group: outer, parent: inner, policy: "ask" } : { parent: outer, group: inner, policy: "ask" };
|
|
98
|
+
}
|
|
99
|
+
return view === "group" ? { group: outer, policy: "ask" } : { parent: outer, policy: "ask" };
|
|
100
|
+
}
|
|
101
|
+
function singleDirectoryValue(tools, key) {
|
|
102
|
+
const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));
|
|
103
|
+
return values.size === 1 ? [...values][0] : void 0;
|
|
104
|
+
}
|
|
105
|
+
function updateSelectedTools(selected, visible) {
|
|
106
|
+
const next = new Set(selected);
|
|
107
|
+
const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));
|
|
108
|
+
for (const name of visible) {
|
|
109
|
+
if (allVisibleSelected) next.delete(name);
|
|
110
|
+
else next.add(name);
|
|
111
|
+
}
|
|
112
|
+
return [...next];
|
|
113
|
+
}
|
|
114
|
+
function selectedToolState(selected, visible) {
|
|
115
|
+
const count = visible.filter((name) => selected.has(name)).length;
|
|
116
|
+
return {
|
|
117
|
+
checked: visible.length > 0 && count === visible.length,
|
|
118
|
+
mixed: count > 0 && count < visible.length
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export {
|
|
122
|
+
EMPTY_TOOL_HINT_FILTERS,
|
|
123
|
+
TOOL_HINTS,
|
|
124
|
+
buildToolSchemaSections,
|
|
125
|
+
directoryPermissionRule,
|
|
126
|
+
filterToolSchemaBrowserTools,
|
|
127
|
+
selectedToolState,
|
|
128
|
+
updateSelectedTools
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=ToolSchemaBrowser.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.model.js","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const outer = view === \"group\" ? group : parent;\n const inner = view === \"group\" ? parent : group;\n if (!outer || (depth === \"child\" && !inner)) {\n return { name: tools.map((tool) => tool.name).sort(), policy: \"ask\" };\n }\n if (depth === \"child\") {\n if (!inner) throw new Error(\"Child tool directory has no metadata value\");\n return view === \"group\"\n ? { group: outer, parent: inner, policy: \"ask\" }\n : { parent: outer, group: inner, policy: \"ask\" };\n }\n return view === \"group\"\n ? { group: outer, policy: \"ask\" }\n : { parent: outer, policy: \"ask\" };\n}\n\nfunction singleDirectoryValue(\n tools: ToolMeta[],\n key: \"group\" | \"parent\",\n): string | undefined {\n const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));\n return values.size === 1 ? [...values][0] : undefined;\n}\n\nexport function updateSelectedTools(\n selected: readonly string[],\n visible: readonly string[],\n): string[] {\n const next = new Set(selected);\n const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));\n for (const name of visible) {\n if (allVisibleSelected) next.delete(name);\n else next.add(name);\n }\n return [...next];\n}\n\nexport function selectedToolState(\n selected: ReadonlySet<string>,\n visible: readonly string[],\n): { checked: boolean; mixed: boolean } {\n const count = visible.filter((name) => selected.has(name)).length;\n return {\n checked: visible.length > 0 && count === visible.length,\n mixed: count > 0 && count < visible.length,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const button = require("../../components/button.cjs");
|
|
6
|
+
const SegmentedControl = require("../../components/SegmentedControl.cjs");
|
|
7
|
+
const POLICY_OPTIONS = [
|
|
8
|
+
{ id: "auto", label: "Auto" },
|
|
9
|
+
{ id: "ask", label: "Ask" },
|
|
10
|
+
{ id: "deny", label: "Off" },
|
|
11
|
+
{ id: "allow", label: "On" }
|
|
12
|
+
];
|
|
13
|
+
function ToolSelectionStrategyToolbar({
|
|
14
|
+
selection,
|
|
15
|
+
onRule
|
|
16
|
+
}) {
|
|
17
|
+
const [policy, setPolicy] = react.useState("ask");
|
|
18
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5", children: [
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-medium", children: [
|
|
21
|
+
selection.count,
|
|
22
|
+
" selected"
|
|
23
|
+
] }),
|
|
24
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground", children: "Saves one grouped permission strategy" })
|
|
25
|
+
] }),
|
|
26
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
28
|
+
SegmentedControl.SegmentedControl,
|
|
29
|
+
{
|
|
30
|
+
"aria-label": "Selected tools policy",
|
|
31
|
+
value: policy,
|
|
32
|
+
options: POLICY_OPTIONS,
|
|
33
|
+
onChange: setPolicy,
|
|
34
|
+
size: "sm",
|
|
35
|
+
className: "min-w-0 flex-1 justify-stretch"
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
39
|
+
button.Button,
|
|
40
|
+
{
|
|
41
|
+
type: "button",
|
|
42
|
+
size: "sm",
|
|
43
|
+
onClick: () => {
|
|
44
|
+
onRule({
|
|
45
|
+
name: [...selection.selectedKeys].sort(),
|
|
46
|
+
policy
|
|
47
|
+
});
|
|
48
|
+
selection.clear();
|
|
49
|
+
},
|
|
50
|
+
children: "Save strategy"
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
] })
|
|
54
|
+
] });
|
|
55
|
+
}
|
|
56
|
+
exports.ToolSelectionStrategyToolbar = ToolSelectionStrategyToolbar;
|
|
57
|
+
//# sourceMappingURL=ToolSchemaBrowser.selection-toolbar.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.selection-toolbar.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.selection-toolbar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../components/SegmentedControl\";\nimport type { ListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolPolicy } from \"../chat/types\";\n\nconst POLICY_OPTIONS: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\" },\n { id: \"ask\", label: \"Ask\" },\n { id: \"deny\", label: \"Off\" },\n { id: \"allow\", label: \"On\" },\n];\n\nexport function ToolSelectionStrategyToolbar({\n selection,\n onRule,\n}: {\n selection: ListMenuSelection;\n onRule: (rule: PermissionRule) => void;\n}) {\n const [policy, setPolicy] = useState<ToolPolicy>(\"ask\");\n return (\n <div className=\"grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">\n {selection.count} selected\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n Saves one grouped permission strategy\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <SegmentedControl\n aria-label=\"Selected tools policy\"\n value={policy}\n options={POLICY_OPTIONS}\n onChange={setPolicy}\n size=\"sm\"\n className=\"min-w-0 flex-1 justify-stretch\"\n />\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => {\n onRule({\n name: [...selection.selectedKeys].sort(),\n policy,\n });\n selection.clear();\n }}\n >\n Save strategy\n </Button>\n </div>\n </div>\n );\n}\n"],"names":["useState","jsxs","jsx","SegmentedControl","Button"],"mappings":";;;;;;AAUA,MAAM,iBAAgD;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,OAAA;AAAA,EACrB,EAAE,IAAI,OAAO,OAAO,MAAA;AAAA,EACpB,EAAE,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB,EAAE,IAAI,SAAS,OAAO,KAAA;AACxB;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAAqB,KAAK;AACtD,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,uBACb,UAAA;AAAA,QAAA,UAAU;AAAA,QAAM;AAAA,MAAA,GACnB;AAAA,MACAC,2BAAAA,IAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,wCAAA,CAEpD;AAAA,IAAA,GACF;AAAA,IACAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAACC,iBAAAA;AAAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,UACV,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZD,2BAAAA;AAAAA,QAACE,OAAAA;AAAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAS,MAAM;AACb,mBAAO;AAAA,cACL,MAAM,CAAC,GAAG,UAAU,YAAY,EAAE,KAAA;AAAA,cAClC;AAAA,YAAA,CACD;AACD,sBAAU,MAAA;AAAA,UACZ;AAAA,UACD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ListMenuSelection } from '../../components/use-list-menu-selection';
|
|
2
|
+
import { PermissionRule } from '../chat/tool-policy';
|
|
3
|
+
export declare function ToolSelectionStrategyToolbar({ selection, onRule, }: {
|
|
4
|
+
selection: ListMenuSelection;
|
|
5
|
+
onRule: (rule: PermissionRule) => void;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=ToolSchemaBrowser.selection-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.selection-toolbar.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.selection-toolbar.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAU1D,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EACT,MAAM,GACP,EAAE;IACD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CACxC,2CAqCA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Button } from "../../components/button.js";
|
|
4
|
+
import { SegmentedControl } from "../../components/SegmentedControl.js";
|
|
5
|
+
const POLICY_OPTIONS = [
|
|
6
|
+
{ id: "auto", label: "Auto" },
|
|
7
|
+
{ id: "ask", label: "Ask" },
|
|
8
|
+
{ id: "deny", label: "Off" },
|
|
9
|
+
{ id: "allow", label: "On" }
|
|
10
|
+
];
|
|
11
|
+
function ToolSelectionStrategyToolbar({
|
|
12
|
+
selection,
|
|
13
|
+
onRule
|
|
14
|
+
}) {
|
|
15
|
+
const [policy, setPolicy] = useState("ask");
|
|
16
|
+
return /* @__PURE__ */ jsxs("div", { className: "grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5", children: [
|
|
17
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
18
|
+
/* @__PURE__ */ jsxs("span", { className: "text-xs font-medium", children: [
|
|
19
|
+
selection.count,
|
|
20
|
+
" selected"
|
|
21
|
+
] }),
|
|
22
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground", children: "Saves one grouped permission strategy" })
|
|
23
|
+
] }),
|
|
24
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
25
|
+
/* @__PURE__ */ jsx(
|
|
26
|
+
SegmentedControl,
|
|
27
|
+
{
|
|
28
|
+
"aria-label": "Selected tools policy",
|
|
29
|
+
value: policy,
|
|
30
|
+
options: POLICY_OPTIONS,
|
|
31
|
+
onChange: setPolicy,
|
|
32
|
+
size: "sm",
|
|
33
|
+
className: "min-w-0 flex-1 justify-stretch"
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
/* @__PURE__ */ jsx(
|
|
37
|
+
Button,
|
|
38
|
+
{
|
|
39
|
+
type: "button",
|
|
40
|
+
size: "sm",
|
|
41
|
+
onClick: () => {
|
|
42
|
+
onRule({
|
|
43
|
+
name: [...selection.selectedKeys].sort(),
|
|
44
|
+
policy
|
|
45
|
+
});
|
|
46
|
+
selection.clear();
|
|
47
|
+
},
|
|
48
|
+
children: "Save strategy"
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
] })
|
|
52
|
+
] });
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
ToolSelectionStrategyToolbar
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=ToolSchemaBrowser.selection-toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolSchemaBrowser.selection-toolbar.js","sources":["../../../src/data/ai/ToolSchemaBrowser.selection-toolbar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../components/SegmentedControl\";\nimport type { ListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolPolicy } from \"../chat/types\";\n\nconst POLICY_OPTIONS: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\" },\n { id: \"ask\", label: \"Ask\" },\n { id: \"deny\", label: \"Off\" },\n { id: \"allow\", label: \"On\" },\n];\n\nexport function ToolSelectionStrategyToolbar({\n selection,\n onRule,\n}: {\n selection: ListMenuSelection;\n onRule: (rule: PermissionRule) => void;\n}) {\n const [policy, setPolicy] = useState<ToolPolicy>(\"ask\");\n return (\n <div className=\"grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">\n {selection.count} selected\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n Saves one grouped permission strategy\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <SegmentedControl\n aria-label=\"Selected tools policy\"\n value={policy}\n options={POLICY_OPTIONS}\n onChange={setPolicy}\n size=\"sm\"\n className=\"min-w-0 flex-1 justify-stretch\"\n />\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => {\n onRule({\n name: [...selection.selectedKeys].sort(),\n policy,\n });\n selection.clear();\n }}\n >\n Save strategy\n </Button>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAUA,MAAM,iBAAgD;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,OAAA;AAAA,EACrB,EAAE,IAAI,OAAO,OAAO,MAAA;AAAA,EACpB,EAAE,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB,EAAE,IAAI,SAAS,OAAO,KAAA;AACxB;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAqB,KAAK;AACtD,SACE,qBAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,uBACb,UAAA;AAAA,QAAA,UAAU;AAAA,QAAM;AAAA,MAAA,GACnB;AAAA,MACA,oBAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,wCAAA,CAEpD;AAAA,IAAA,GACF;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,UACV,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAS,MAAM;AACb,mBAAO;AAAA,cACL,MAAM,CAAC,GAAG,UAAU,YAAY,EAAE,KAAA;AAAA,cAClC;AAAA,YAAA,CACD;AACD,sBAAU,MAAA;AAAA,UACZ;AAAA,UACD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
|