@flanksource/clicky-ui 0.3.27 → 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 -10
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -10
- 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 +2 -2
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +3 -3
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +0 -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 +0 -1
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs +15 -6
- 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 +17 -8
- 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 +34 -23
- 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 +35 -24
- 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 -49
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +52 -29
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +33 -48
- 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 +13 -3
- 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 +14 -4
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +4 -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 +4 -9
- 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 +29 -16
- 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 +31 -18
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.cjs +10 -20
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.d.ts +2 -2
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.js +11 -21
- 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 +0 -3
- package/dist/data/runtime/model-capabilities.cjs.map +1 -1
- package/dist/data/runtime/model-capabilities.d.ts +0 -1
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
- package/dist/data/runtime/model-capabilities.js +0 -3
- 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 +158 -116
- package/dist/data/runtime/runtime-mode.cjs.map +1 -1
- package/dist/data/runtime/runtime-mode.d.ts +57 -19
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
- package/dist/data/runtime/runtime-mode.js +158 -116
- 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":"RuntimeBarCombo.js","sources":["../../../src/data/runtime/RuntimeBarCombo.tsx"],"sourcesContent":["import { Button } from \"../../components/button\";\nimport { SegmentedControl } from \"../../components/SegmentedControl\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport { isUnavailable } from \"./availability\";\nimport {\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarComboProps = {\n value: RuntimeBarValue;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n models: ChatModel[];\n selectedModel: ChatModel | undefined;\n selectedModelUnavailable: boolean;\n supportedEfforts: string[];\n locked: boolean;\n ariaLabel: string;\n className?: string | undefined;\n onFamilyChange: (familyId: string) => void;\n onModeChange: (modeId: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarCombo({\n value,\n families,\n family,\n mode,\n selectedMode,\n models,\n selectedModel,\n selectedModelUnavailable,\n supportedEfforts,\n locked,\n ariaLabel,\n className,\n onFamilyChange,\n onModeChange,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarComboProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = selectedModelUnavailable\n ? \"Unavailable selection\"\n : (selectedModel?.label ?? value.model ?? \"Prompt default\");\n const effortLabel = value.effort ? effortLevelLabel(value.effort) : \"None\";\n const effortIcon = value.effort ? effortLevelIcon(value.effort) : undefined;\n const summary = `${ariaLabel}: ${family.label}, ${mode.label}, ${modelLabel}, effort ${effortLabel}${locked ? \". Model and backend are locked for this conversation; fork it to change them\" : \"\"}`;\n\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={`${ariaLabel} controls`}\n {...(className ? { className } : {})}\n menuClassName=\"max-h-[70vh] w-80 max-w-[calc(100vw-24px)] overflow-y-auto\"\n trigger={\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n title={summary}\n aria-label={summary}\n className=\"max-w-full gap-1.5 px-density-2\"\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className=\"min-w-0 truncate text-xs font-semibold text-foreground\">\n {modelLabel}\n </span>\n {effortIcon && (\n <Icon\n icon={effortIcon}\n className={cn(\n \"size-4 shrink-0\",\n value.effort ? effortLevelColor(value.effort) : undefined,\n )}\n />\n )}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </Button>\n }\n >\n {() => (\n <div className=\"p-1 text-xs\">\n <div className=\"space-y-2 border-b border-border px-2 pb-3 pt-2\">\n {locked && (\n <div className=\"rounded bg-muted px-2 py-1.5 text-[11px] text-muted-foreground\">\n Model and backend are locked. Fork this conversation to change\n them.\n </div>\n )}\n <FamilySegments\n families={families}\n value={family.id}\n locked={locked}\n onChange={onFamilyChange}\n />\n <ModeSegments\n family={family}\n value={selectedMode}\n locked={locked}\n onChange={onModeChange}\n />\n <EffortSlider\n value={value.effort}\n efforts={supportedEfforts}\n onChange={onEffortChange}\n />\n </div>\n <ModelChoices\n models={models}\n familyBrand={brand}\n selectedId={selectedModel?.id ?? value.model}\n locked={locked}\n onSelect={onModelSelect}\n onClear={onModelClear}\n />\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction FamilySegments({\n families,\n value,\n locked,\n onChange,\n}: {\n families: SpecRuntimeFamily[];\n value: string;\n locked: boolean;\n onChange: (familyId: string) => void;\n}) {\n return (\n <SegmentedControl\n aria-label=\"Family\"\n size=\"sm\"\n wrap\n value={value}\n onChange={onChange}\n className=\"w-full\"\n options={families\n .filter((family) =>\n family.modes.some((mode) => !isUnavailable(mode.availability)),\n )\n .map((family) => {\n const brand = runtimeFamilyBrand(family);\n return {\n id: family.id,\n label: family.label,\n disabled: locked,\n ...(brand.icon ? { icon: brand.icon } : {}),\n };\n })}\n />\n );\n}\n\nfunction ModeSegments({\n family,\n value,\n locked,\n onChange,\n}: {\n family: SpecRuntimeFamily;\n value: string;\n locked: boolean;\n onChange: (modeId: string) => void;\n}) {\n return (\n <SegmentedControl\n aria-label=\"Runtime mode\"\n size=\"sm\"\n value={value}\n onChange={onChange}\n className=\"w-full\"\n options={family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => ({\n id: mode.id,\n label: mode.label,\n disabled: locked,\n ...(mode.title ? { title: mode.title } : {}),\n ...(mode.icon ? { icon: mode.icon } : {}),\n }))}\n />\n );\n}\n\nfunction ModelChoices({\n models,\n familyBrand,\n selectedId,\n locked,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n familyBrand: ReturnType<typeof runtimeFamilyBrand>;\n selectedId?: string | undefined;\n locked: boolean;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}) {\n return (\n <div className=\"space-y-0.5 py-1\">\n <ModelChoice\n label=\"Prompt default\"\n selected={!selectedId}\n disabled={locked}\n onClick={onClear}\n />\n {models.map((model) => {\n const icon = providerIcon(model.provider) ?? familyBrand.icon;\n return (\n <ModelChoice\n key={model.id}\n label={model.label}\n title={model.id}\n selected={model.id === selectedId}\n disabled={locked}\n {...(icon\n ? {\n icon,\n iconColor:\n providerIconColor(model.provider) ?? familyBrand.color,\n }\n : {})}\n onClick={() => onSelect(model)}\n />\n );\n })}\n </div>\n );\n}\n\nfunction ModelChoice({\n label,\n title,\n detail,\n selected,\n disabled,\n icon,\n iconColor,\n onClick,\n}: {\n label: string;\n title?: string | undefined;\n detail?: string | undefined;\n selected: boolean;\n disabled: boolean;\n icon?: NonNullable<ReturnType<typeof providerIcon>>;\n iconColor?: string | undefined;\n onClick: () => void;\n}) {\n return (\n <Button\n variant=\"ghost\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n aria-label={detail ? `${label}. ${detail}` : label}\n {...(title ? { title } : {})}\n className=\"group flex min-h-8 w-full items-center justify-start gap-2 rounded-md px-2 py-1.5 text-left hover:bg-muted\"\n >\n {icon ? (\n <span className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted/70 ring-1 ring-border/60 group-hover:bg-background\">\n <Icon icon={icon} className={cn(\"size-3.5\", iconColor)} />\n </span>\n ) : (\n <span className=\"size-6 shrink-0\" />\n )}\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\"block truncate text-sm\", selected && \"font-semibold\")}\n >\n {label}\n </span>\n {detail && (\n <span className=\"block whitespace-normal text-[11px] leading-4 text-muted-foreground\">\n {detail}\n </span>\n )}\n </span>\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </Button>\n );\n}\n\nfunction EffortSlider({\n value,\n efforts,\n onChange,\n}: {\n value?: string | undefined;\n efforts: string[];\n onChange: (effort: string) => void;\n}) {\n const supported = [\n ...new Set(efforts.map((effort) => effort.trim()).filter(Boolean)),\n ];\n if (supported.length === 0) {\n return (\n <div className=\"flex h-8 items-center justify-center text-[11px] text-muted-foreground\">\n Fixed effort for this model\n </div>\n );\n }\n\n const options = [\"\", ...supported];\n const current = value?.trim() ?? \"\";\n const currentIndex = options.indexOf(current);\n const sliderIndex = currentIndex >= 0 ? currentIndex : 0;\n const label =\n currentIndex >= 0\n ? current\n ? effortLevelLabel(current)\n : \"None\"\n : `${effortLevelLabel(current)} unsupported`;\n const percent = (sliderIndex / (options.length - 1)) * 100;\n const firstIcon = effortLevelIcon(supported[0]!);\n const lastIcon = effortLevelIcon(supported[supported.length - 1]!);\n const selectedIcon = current ? effortLevelIcon(current) : undefined;\n\n return (\n <div\n className=\"grid grid-cols-[auto_minmax(0,1fr)_auto] items-start gap-1.5\"\n aria-label=\"Model effort\"\n >\n {firstIcon ? (\n <Icon\n icon={firstIcon}\n className={cn(\"mt-3 size-3.5\", effortLevelColor(supported[0]!))}\n />\n ) : (\n <span className=\"size-3.5\" />\n )}\n <div className=\"relative h-11 pt-1\">\n <input\n type=\"range\"\n min={0}\n max={options.length - 1}\n step={1}\n value={sliderIndex}\n aria-label=\"Reasoning effort\"\n aria-valuetext={label}\n aria-invalid={currentIndex < 0}\n onChange={(event) => {\n const next = options[Number(event.target.value)];\n if (next === undefined) {\n throw new Error(\n `Invalid reasoning effort index: ${event.target.value}`,\n );\n }\n onChange(next);\n }}\n className=\"h-1 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground [&::-moz-range-thumb]:size-3 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-background [&::-moz-range-thumb]:bg-foreground [&::-webkit-slider-thumb]:size-3 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-background [&::-webkit-slider-thumb]:bg-foreground [&::-webkit-slider-thumb]:shadow-sm\"\n />\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute top-7 -translate-x-1/2\"\n style={{ left: `${percent}%` }}\n >\n <span\n className={cn(\n \"inline-flex h-5 shrink-0 items-center gap-1 rounded-full border px-1.5 text-[10px] font-semibold leading-none\",\n currentIndex < 0\n ? \"border-destructive/25 bg-destructive/10 text-destructive\"\n : current\n ? cn(\"border-current/25 bg-muted\", effortLevelColor(current))\n : \"border-border bg-muted text-muted-foreground\",\n )}\n title={`Effort: ${label}`}\n >\n {selectedIcon && <Icon icon={selectedIcon} className=\"size-3\" />}\n {label}\n </span>\n </span>\n </div>\n {lastIcon ? (\n <Icon\n icon={lastIcon}\n className={cn(\n \"mt-3 size-3.5\",\n effortLevelColor(supported[supported.length - 1]!),\n )}\n />\n ) : (\n <span className=\"size-3.5\" />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuntimeBarCombo.js","sources":["../../../src/data/runtime/RuntimeBarCombo.tsx"],"sourcesContent":["import { Button } from \"../../components/button\";\nimport { SegmentedControl } from \"../../components/SegmentedControl\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport { isUnavailable } from \"./availability\";\nimport {\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarComboProps = {\n value: RuntimeBarValue;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n models: ChatModel[];\n selectedModel: ChatModel | undefined;\n selectedModelUnavailable: boolean;\n supportedEfforts: string[];\n locked: boolean;\n showModel: boolean;\n showEffort: boolean;\n ariaLabel: string;\n className?: string | undefined;\n onFamilyChange: (familyId: string) => void;\n onModeChange: (modeId: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarCombo({\n value,\n families,\n family,\n mode,\n selectedMode,\n models,\n selectedModel,\n selectedModelUnavailable,\n supportedEfforts,\n locked,\n showModel,\n showEffort,\n ariaLabel,\n className,\n onFamilyChange,\n onModeChange,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarComboProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = showModel\n ? selectedModelUnavailable\n ? \"Unavailable selection\"\n : (selectedModel?.label ?? value.model ?? \"Prompt default\")\n : `${family.label} ${mode.label}`;\n const effortLabel = value.effort ? effortLevelLabel(value.effort) : \"None\";\n const effortIcon = value.effort ? effortLevelIcon(value.effort) : undefined;\n const summaryParts = [family.label, mode.label];\n if (showModel) summaryParts.push(modelLabel);\n if (showEffort) summaryParts.push(`effort ${effortLabel}`);\n const summary = `${ariaLabel}: ${summaryParts.join(\", \")}${locked ? \". Model and mode are locked for this conversation; fork it to change them\" : \"\"}`;\n\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={`${ariaLabel} controls`}\n {...(className ? { className } : {})}\n menuClassName=\"max-h-[70vh] w-80 max-w-[calc(100vw-24px)] overflow-y-auto\"\n trigger={\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n title={summary}\n aria-label={summary}\n className=\"max-w-full gap-1.5 px-density-2\"\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className=\"min-w-0 truncate text-xs font-semibold text-foreground\">\n {modelLabel}\n </span>\n {showEffort && effortIcon && (\n <Icon\n icon={effortIcon}\n className={cn(\n \"size-4 shrink-0\",\n value.effort ? effortLevelColor(value.effort) : undefined,\n )}\n />\n )}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </Button>\n }\n >\n {() => (\n <div className=\"p-1 text-xs\">\n <div className=\"space-y-2 border-b border-border px-2 pb-3 pt-2\">\n {locked && (\n <div className=\"rounded bg-muted px-2 py-1.5 text-[11px] text-muted-foreground\">\n Model and mode are locked. Fork this conversation to change\n them.\n </div>\n )}\n <FamilySegments\n families={families}\n value={family.id}\n locked={locked}\n onChange={onFamilyChange}\n />\n <ModeSegments\n family={family}\n value={selectedMode}\n locked={locked}\n onChange={onModeChange}\n />\n {showEffort && (\n <EffortSlider\n value={value.effort}\n efforts={supportedEfforts}\n onChange={onEffortChange}\n />\n )}\n </div>\n {showModel && (\n <ModelChoices\n models={models}\n familyBrand={brand}\n selectedId={selectedModel?.id ?? value.model}\n locked={locked}\n onSelect={onModelSelect}\n onClear={onModelClear}\n />\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction FamilySegments({\n families,\n value,\n locked,\n onChange,\n}: {\n families: SpecRuntimeFamily[];\n value: string;\n locked: boolean;\n onChange: (familyId: string) => void;\n}) {\n return (\n <SegmentedControl\n aria-label=\"Family\"\n size=\"sm\"\n wrap\n value={value}\n onChange={onChange}\n className=\"w-full\"\n options={families\n .filter((family) =>\n family.modes.some((mode) => !isUnavailable(mode.availability)),\n )\n .map((family) => {\n const brand = runtimeFamilyBrand(family);\n return {\n id: family.id,\n label: family.label,\n disabled: locked,\n ...(brand.icon ? { icon: brand.icon } : {}),\n };\n })}\n />\n );\n}\n\nfunction ModeSegments({\n family,\n value,\n locked,\n onChange,\n}: {\n family: SpecRuntimeFamily;\n value: string;\n locked: boolean;\n onChange: (modeId: string) => void;\n}) {\n return (\n <SegmentedControl\n aria-label=\"Runtime mode\"\n size=\"sm\"\n value={value}\n onChange={onChange}\n className=\"w-full\"\n options={family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => ({\n id: mode.id,\n label: mode.label,\n disabled: locked,\n ...(mode.title ? { title: mode.title } : {}),\n ...(mode.icon ? { icon: mode.icon } : {}),\n }))}\n />\n );\n}\n\nfunction ModelChoices({\n models,\n familyBrand,\n selectedId,\n locked,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n familyBrand: ReturnType<typeof runtimeFamilyBrand>;\n selectedId?: string | undefined;\n locked: boolean;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}) {\n return (\n <div className=\"space-y-0.5 py-1\">\n <ModelChoice\n label=\"Prompt default\"\n selected={!selectedId}\n disabled={locked}\n onClick={onClear}\n />\n {models.map((model) => {\n const icon = providerIcon(model.provider) ?? familyBrand.icon;\n return (\n <ModelChoice\n key={model.id}\n label={model.label}\n title={model.id}\n selected={model.id === selectedId}\n disabled={locked}\n {...(icon\n ? {\n icon,\n iconColor:\n providerIconColor(model.provider) ?? familyBrand.color,\n }\n : {})}\n onClick={() => onSelect(model)}\n />\n );\n })}\n </div>\n );\n}\n\nfunction ModelChoice({\n label,\n title,\n detail,\n selected,\n disabled,\n icon,\n iconColor,\n onClick,\n}: {\n label: string;\n title?: string | undefined;\n detail?: string | undefined;\n selected: boolean;\n disabled: boolean;\n icon?: NonNullable<ReturnType<typeof providerIcon>>;\n iconColor?: string | undefined;\n onClick: () => void;\n}) {\n return (\n <Button\n variant=\"ghost\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n aria-label={detail ? `${label}. ${detail}` : label}\n {...(title ? { title } : {})}\n className=\"group flex min-h-8 w-full items-center justify-start gap-2 rounded-md px-2 py-1.5 text-left hover:bg-muted\"\n >\n {icon ? (\n <span className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted/70 ring-1 ring-border/60 group-hover:bg-background\">\n <Icon icon={icon} className={cn(\"size-3.5\", iconColor)} />\n </span>\n ) : (\n <span className=\"size-6 shrink-0\" />\n )}\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\"block truncate text-sm\", selected && \"font-semibold\")}\n >\n {label}\n </span>\n {detail && (\n <span className=\"block whitespace-normal text-[11px] leading-4 text-muted-foreground\">\n {detail}\n </span>\n )}\n </span>\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </Button>\n );\n}\n\nfunction EffortSlider({\n value,\n efforts,\n onChange,\n}: {\n value?: string | undefined;\n efforts: string[];\n onChange: (effort: string) => void;\n}) {\n const supported = [\n ...new Set(efforts.map((effort) => effort.trim()).filter(Boolean)),\n ];\n if (supported.length === 0) {\n return (\n <div className=\"flex h-8 items-center justify-center text-[11px] text-muted-foreground\">\n Fixed effort for this model\n </div>\n );\n }\n\n const options = [\"\", ...supported];\n const current = value?.trim() ?? \"\";\n const currentIndex = options.indexOf(current);\n const sliderIndex = currentIndex >= 0 ? currentIndex : 0;\n const label =\n currentIndex >= 0\n ? current\n ? effortLevelLabel(current)\n : \"None\"\n : `${effortLevelLabel(current)} unsupported`;\n const percent = (sliderIndex / (options.length - 1)) * 100;\n const firstIcon = effortLevelIcon(supported[0]!);\n const lastIcon = effortLevelIcon(supported[supported.length - 1]!);\n const selectedIcon = current ? effortLevelIcon(current) : undefined;\n\n return (\n <div\n className=\"grid grid-cols-[auto_minmax(0,1fr)_auto] items-start gap-1.5\"\n aria-label=\"Model effort\"\n >\n {firstIcon ? (\n <Icon\n icon={firstIcon}\n className={cn(\"mt-3 size-3.5\", effortLevelColor(supported[0]!))}\n />\n ) : (\n <span className=\"size-3.5\" />\n )}\n <div className=\"relative h-11 pt-1\">\n <input\n type=\"range\"\n min={0}\n max={options.length - 1}\n step={1}\n value={sliderIndex}\n aria-label=\"Reasoning effort\"\n aria-valuetext={label}\n aria-invalid={currentIndex < 0}\n onChange={(event) => {\n const next = options[Number(event.target.value)];\n if (next === undefined) {\n throw new Error(\n `Invalid reasoning effort index: ${event.target.value}`,\n );\n }\n onChange(next);\n }}\n className=\"h-1 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground [&::-moz-range-thumb]:size-3 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-background [&::-moz-range-thumb]:bg-foreground [&::-webkit-slider-thumb]:size-3 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-background [&::-webkit-slider-thumb]:bg-foreground [&::-webkit-slider-thumb]:shadow-sm\"\n />\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute top-7 -translate-x-1/2\"\n style={{ left: `${percent}%` }}\n >\n <span\n className={cn(\n \"inline-flex h-5 shrink-0 items-center gap-1 rounded-full border px-1.5 text-[10px] font-semibold leading-none\",\n currentIndex < 0\n ? \"border-destructive/25 bg-destructive/10 text-destructive\"\n : current\n ? cn(\"border-current/25 bg-muted\", effortLevelColor(current))\n : \"border-border bg-muted text-muted-foreground\",\n )}\n title={`Effort: ${label}`}\n >\n {selectedIcon && <Icon icon={selectedIcon} className=\"size-3\" />}\n {label}\n </span>\n </span>\n </div>\n {lastIcon ? (\n <Icon\n icon={lastIcon}\n className={cn(\n \"mt-3 size-3.5\",\n effortLevelColor(supported[supported.length - 1]!),\n )}\n />\n ) : (\n <span className=\"size-3.5\" />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -25,9 +25,11 @@ function RuntimeBarSegments({
|
|
|
25
25
|
reasoningEfforts,
|
|
26
26
|
supportedEfforts,
|
|
27
27
|
locked,
|
|
28
|
+
showModel,
|
|
29
|
+
showEffort,
|
|
28
30
|
ariaLabel,
|
|
29
31
|
className,
|
|
30
|
-
|
|
32
|
+
onModeChange,
|
|
31
33
|
onCustomModel,
|
|
32
34
|
onModelSelect,
|
|
33
35
|
onModelClear,
|
|
@@ -55,7 +57,7 @@ function RuntimeBarSegments({
|
|
|
55
57
|
families,
|
|
56
58
|
models,
|
|
57
59
|
selectedId: family.id,
|
|
58
|
-
onSelect: (familyId) =>
|
|
60
|
+
onSelect: (familyId) => onModeChange(familyId, selectedMode)
|
|
59
61
|
}),
|
|
60
62
|
children: [
|
|
61
63
|
brand.icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -78,7 +80,7 @@ function RuntimeBarSegments({
|
|
|
78
80
|
items: modeItems({
|
|
79
81
|
family,
|
|
80
82
|
selectedId: selectedMode,
|
|
81
|
-
onSelect: (modeId) =>
|
|
83
|
+
onSelect: (modeId) => onModeChange(family.id, modeId)
|
|
82
84
|
}),
|
|
83
85
|
children: [
|
|
84
86
|
mode.icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -92,7 +94,7 @@ function RuntimeBarSegments({
|
|
|
92
94
|
]
|
|
93
95
|
}
|
|
94
96
|
),
|
|
95
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
97
|
+
showModel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
96
98
|
RuntimeSegment,
|
|
97
99
|
{
|
|
98
100
|
menuLabel: "Model",
|
|
@@ -124,7 +126,7 @@ function RuntimeBarSegments({
|
|
|
124
126
|
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate font-mono text-xs text-foreground", children: modelLabel })
|
|
125
127
|
}
|
|
126
128
|
),
|
|
127
|
-
supportedEfforts.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
129
|
+
showEffort && supportedEfforts.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
128
130
|
RuntimeSegment,
|
|
129
131
|
{
|
|
130
132
|
menuLabel: "Reasoning effort",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeBarSegments.cjs","sources":["../../../src/data/runtime/RuntimeBarSegments.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { InputField } from \"../../components/InputField\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DropdownMenu,\n type DropdownMenuItem,\n} from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport {\n modelsForFamily,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarSegmentsProps = {\n value: RuntimeBarValue;\n models: ChatModel[];\n modelOptions: ChatModel[];\n resolvedModel: ChatModel | undefined;\n selectedModelUnavailable: boolean;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n reasoningEfforts: string[];\n supportedEfforts: string[];\n locked: boolean;\n ariaLabel: string;\n className?: string | undefined;\n onBackendChange: (familyId: string, modeId: string) => void;\n onCustomModel: (model: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarSegments({\n value,\n models,\n modelOptions,\n resolvedModel,\n selectedModelUnavailable,\n families,\n family,\n mode,\n selectedMode,\n reasoningEfforts,\n supportedEfforts,\n locked,\n ariaLabel,\n className,\n onBackendChange,\n onCustomModel,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarSegmentsProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = selectedModelUnavailable\n ? \"Unavailable selection\"\n : (resolvedModel?.label ?? value.model ?? \"Default\");\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex h-control-h w-fit max-w-full items-stretch overflow-hidden rounded-md border border-input bg-background\",\n className,\n )}\n >\n <RuntimeSegment\n menuLabel=\"Family\"\n title={`Family — ${family.label}`}\n disabled={locked}\n items={familyItems({\n families,\n models,\n selectedId: family.id,\n onSelect: (familyId) => onBackendChange(familyId, selectedMode),\n })}\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n <span className={CAPTION_CLASS}>{family.label}</span>\n </RuntimeSegment>\n <RuntimeSegment\n menuLabel=\"Runtime mode\"\n title={mode.title ?? \"Runtime mode\"}\n disabled={locked}\n items={modeItems({\n family,\n selectedId: selectedMode,\n onSelect: (modeId) => onBackendChange(family.id, modeId),\n })}\n >\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className={CAPTION_CLASS}>{mode.label}</span>\n </RuntimeSegment>\n <RuntimeSegment\n menuLabel=\"Model\"\n title={\n selectedModelUnavailable\n ? \"Model — unavailable selection\"\n : value.model\n ? `Model — ${value.model}`\n : \"Model — prompt default\"\n }\n disabled={locked}\n className=\"min-w-0 max-w-56 flex-1 [&>span]:min-w-0 [&>span]:w-full [&>span>button]:w-full\"\n header={\n <div className=\"grid gap-1\">\n <span className={KEY_CLASS}>Model id</span>\n <InputField\n value={selectedModelUnavailable ? \"\" : (value.model ?? \"\")}\n onChange={onCustomModel}\n {...(selectedModelUnavailable\n ? { placeholder: \"Unavailable selection\" }\n : {})}\n aria-label=\"Model id\"\n disabled={locked}\n inputClassName=\"font-mono text-xs\"\n className=\"bg-background\"\n />\n </div>\n }\n items={modelItems({\n models: modelOptions,\n group: `${family.label} models`,\n selectedId: selectedModelUnavailable\n ? undefined\n : (resolvedModel?.id ?? value.model),\n onSelect: onModelSelect,\n onClear: onModelClear,\n })}\n >\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground\">\n {modelLabel}\n </span>\n </RuntimeSegment>\n {supportedEfforts.length > 0 && (\n <RuntimeSegment\n menuLabel=\"Reasoning effort\"\n title=\"Reasoning effort\"\n items={effortItems({\n offered: effortUniverse(\n reasoningEfforts,\n supportedEfforts,\n value.effort,\n ),\n supported: supportedEfforts,\n selected: value.effort,\n onSelect: onEffortChange,\n })}\n >\n <span className={KEY_CLASS}>Effort</span>\n <EffortGlyph effort={value.effort} />\n <span className={CAPTION_CLASS}>\n {value.effort ? effortLevelLabel(value.effort) : \"None\"}\n </span>\n </RuntimeSegment>\n )}\n </div>\n );\n}\n\nconst CAPTION_CLASS = \"truncate text-xs font-semibold text-foreground\";\nconst KEY_CLASS =\n \"text-[11px] font-semibold uppercase leading-none tracking-wide text-muted-foreground\";\n\nfunction RuntimeSegment({\n items,\n menuLabel,\n title,\n header,\n disabled = false,\n className,\n children,\n}: {\n items: DropdownMenuItem[];\n menuLabel: string;\n title: string;\n header?: ReactNode;\n disabled?: boolean;\n className?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={menuLabel}\n items={items}\n {...(header ? { header } : {})}\n menuClassName=\"min-w-56 max-w-80\"\n className={cn(\"border-l border-border first:border-l-0\", className)}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n title={title}\n className=\"inline-flex h-full min-w-0 items-center gap-1.5 px-density-2 transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring [[aria-expanded=true]_&]:bg-muted\"\n >\n {children}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </button>\n }\n />\n );\n}\n\nfunction EffortGlyph({ effort }: { effort?: string | undefined }) {\n const glyph = effort ? effortLevelIcon(effort) : undefined;\n if (!glyph) return null;\n return (\n <Icon\n icon={glyph}\n className={cn(\n \"size-4 shrink-0\",\n effort ? effortLevelColor(effort) : undefined,\n )}\n />\n );\n}\n\nfunction itemLabel({\n text,\n hint,\n selected,\n stacked = false,\n}: {\n text: string;\n hint?: string | undefined;\n selected: boolean;\n stacked?: boolean | undefined;\n}): ReactNode {\n return (\n <>\n <span className=\"min-w-0 flex-1\">\n <span className={cn(\"block truncate\", selected && \"font-semibold\")}>\n {text}\n </span>\n {hint && stacked && (\n <span className=\"block whitespace-normal text-[11px] leading-4 text-muted-foreground\">\n {hint}\n </span>\n )}\n </span>\n {hint && !stacked && (\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">\n {hint}\n </span>\n )}\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </>\n );\n}\n\nfunction familyItems({\n families,\n models,\n selectedId,\n onSelect,\n}: {\n families: SpecRuntimeFamily[];\n models: ChatModel[];\n selectedId: string;\n onSelect: (familyId: string) => void;\n}): DropdownMenuItem[] {\n return families\n .filter((family) =>\n family.modes.some((mode) => !isUnavailable(mode.availability)),\n )\n .map((family) => {\n const brand = runtimeFamilyBrand(family);\n const count = modelsForFamily(models, family).length;\n return {\n group: \"Family\",\n label: itemLabel({\n text: family.label,\n ...(count > 0 ? { hint: `${count} models` } : {}),\n selected: family.id === selectedId,\n }),\n ...(brand.icon ? { icon: brand.icon } : {}),\n onSelect: () => onSelect(family.id),\n };\n });\n}\n\nfunction modeItems({\n family,\n selectedId,\n onSelect,\n}: {\n family: SpecRuntimeFamily;\n selectedId: string;\n onSelect: (modeId: string) => void;\n}): DropdownMenuItem[] {\n return family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => ({\n group: \"Mode · runtime\",\n label: itemLabel({\n text: mode.label,\n ...(mode.title ? { hint: mode.title } : {}),\n selected: mode.id === selectedId,\n }),\n ...(mode.icon ? { icon: mode.icon } : {}),\n ...(mode.title ? { title: mode.title } : {}),\n onSelect: () => onSelect(mode.id),\n }));\n}\n\nfunction modelItems({\n models,\n group,\n selectedId,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n group: string;\n selectedId?: string | undefined;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}): DropdownMenuItem[] {\n const clear: DropdownMenuItem = {\n group: \"Model\",\n label: itemLabel({\n text: \"Prompt default\",\n hint: \"no override\",\n selected: !selectedId,\n }),\n onSelect: onClear,\n };\n return [\n clear,\n ...models.map((model) => {\n const glyph: StaticIconComponent | undefined = providerIcon(\n model.provider,\n );\n return {\n group,\n label: itemLabel({\n text: model.label,\n ...(model.id === model.label ? {} : { hint: model.id }),\n selected: model.id === selectedId,\n stacked: true,\n }),\n ...(glyph ? { icon: glyph } : {}),\n onSelect: () => onSelect(model),\n };\n }),\n ];\n}\n\nfunction effortItems({\n offered,\n supported,\n selected,\n onSelect,\n}: {\n offered: string[];\n supported: string[];\n selected?: string | undefined;\n onSelect: (effort: string) => void;\n}): DropdownMenuItem[] {\n const current = selected?.trim() ?? \"\";\n const none: DropdownMenuItem = {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: \"None\",\n hint: \"single pass\",\n selected: current === \"\",\n }),\n onSelect: () => onSelect(\"\"),\n };\n return [\n none,\n ...offered.map((effort) => {\n const glyph = effortLevelIcon(effort);\n const usable = supported.includes(effort);\n return {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: effortLevelLabel(effort),\n ...(usable ? {} : { hint: \"unsupported\" }),\n selected: effort === current,\n }),\n ...(glyph ? { icon: glyph } : {}),\n disabled: !usable,\n onSelect: () => onSelect(effort),\n };\n }),\n ];\n}\n\nfunction effortUniverse(\n offered: readonly string[],\n supported: readonly string[],\n selected: string | undefined,\n): string[] {\n const all = [...offered, ...supported, selected ?? \"\"]\n .map((effort) => effort.trim())\n .filter(Boolean);\n return [...new Set(all)];\n}\n"],"names":["runtimeFamilyBrand","jsxs","cn","jsx","Icon","InputField","effortLevelLabel","DropdownMenu","UiChevronDown","effortLevelIcon","effortLevelColor","Fragment","UiCheck","isUnavailable","modelsForFamily","providerIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuntimeBarSegments.cjs","sources":["../../../src/data/runtime/RuntimeBarSegments.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { InputField } from \"../../components/InputField\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DropdownMenu,\n type DropdownMenuItem,\n} from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport {\n modelsForFamily,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarSegmentsProps = {\n value: RuntimeBarValue;\n models: ChatModel[];\n modelOptions: ChatModel[];\n resolvedModel: ChatModel | undefined;\n selectedModelUnavailable: boolean;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n reasoningEfforts: string[];\n supportedEfforts: string[];\n locked: boolean;\n showModel: boolean;\n showEffort: boolean;\n ariaLabel: string;\n className?: string | undefined;\n onModeChange: (familyId: string, modeId: string) => void;\n onCustomModel: (model: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarSegments({\n value,\n models,\n modelOptions,\n resolvedModel,\n selectedModelUnavailable,\n families,\n family,\n mode,\n selectedMode,\n reasoningEfforts,\n supportedEfforts,\n locked,\n showModel,\n showEffort,\n ariaLabel,\n className,\n onModeChange,\n onCustomModel,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarSegmentsProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = selectedModelUnavailable\n ? \"Unavailable selection\"\n : (resolvedModel?.label ?? value.model ?? \"Default\");\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex h-control-h w-fit max-w-full items-stretch overflow-hidden rounded-md border border-input bg-background\",\n className,\n )}\n >\n <RuntimeSegment\n menuLabel=\"Family\"\n title={`Family — ${family.label}`}\n disabled={locked}\n items={familyItems({\n families,\n models,\n selectedId: family.id,\n onSelect: (familyId) => onModeChange(familyId, selectedMode),\n })}\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n <span className={CAPTION_CLASS}>{family.label}</span>\n </RuntimeSegment>\n <RuntimeSegment\n menuLabel=\"Runtime mode\"\n title={mode.title ?? \"Runtime mode\"}\n disabled={locked}\n items={modeItems({\n family,\n selectedId: selectedMode,\n onSelect: (modeId) => onModeChange(family.id, modeId),\n })}\n >\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className={CAPTION_CLASS}>{mode.label}</span>\n </RuntimeSegment>\n {showModel && (\n <RuntimeSegment\n menuLabel=\"Model\"\n title={\n selectedModelUnavailable\n ? \"Model — unavailable selection\"\n : value.model\n ? `Model — ${value.model}`\n : \"Model — prompt default\"\n }\n disabled={locked}\n className=\"min-w-0 max-w-56 flex-1 [&>span]:min-w-0 [&>span]:w-full [&>span>button]:w-full\"\n header={\n <div className=\"grid gap-1\">\n <span className={KEY_CLASS}>Model id</span>\n <InputField\n value={selectedModelUnavailable ? \"\" : (value.model ?? \"\")}\n onChange={onCustomModel}\n {...(selectedModelUnavailable\n ? { placeholder: \"Unavailable selection\" }\n : {})}\n aria-label=\"Model id\"\n disabled={locked}\n inputClassName=\"font-mono text-xs\"\n className=\"bg-background\"\n />\n </div>\n }\n items={modelItems({\n models: modelOptions,\n group: `${family.label} models`,\n selectedId: selectedModelUnavailable\n ? undefined\n : (resolvedModel?.id ?? value.model),\n onSelect: onModelSelect,\n onClear: onModelClear,\n })}\n >\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground\">\n {modelLabel}\n </span>\n </RuntimeSegment>\n )}\n {showEffort && supportedEfforts.length > 0 && (\n <RuntimeSegment\n menuLabel=\"Reasoning effort\"\n title=\"Reasoning effort\"\n items={effortItems({\n offered: effortUniverse(\n reasoningEfforts,\n supportedEfforts,\n value.effort,\n ),\n supported: supportedEfforts,\n selected: value.effort,\n onSelect: onEffortChange,\n })}\n >\n <span className={KEY_CLASS}>Effort</span>\n <EffortGlyph effort={value.effort} />\n <span className={CAPTION_CLASS}>\n {value.effort ? effortLevelLabel(value.effort) : \"None\"}\n </span>\n </RuntimeSegment>\n )}\n </div>\n );\n}\n\nconst CAPTION_CLASS = \"truncate text-xs font-semibold text-foreground\";\nconst KEY_CLASS =\n \"text-[11px] font-semibold uppercase leading-none tracking-wide text-muted-foreground\";\n\nfunction RuntimeSegment({\n items,\n menuLabel,\n title,\n header,\n disabled = false,\n className,\n children,\n}: {\n items: DropdownMenuItem[];\n menuLabel: string;\n title: string;\n header?: ReactNode;\n disabled?: boolean;\n className?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={menuLabel}\n items={items}\n {...(header ? { header } : {})}\n menuClassName=\"min-w-56 max-w-80\"\n className={cn(\"border-l border-border first:border-l-0\", className)}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n title={title}\n className=\"inline-flex h-full min-w-0 items-center gap-1.5 px-density-2 transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring [[aria-expanded=true]_&]:bg-muted\"\n >\n {children}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </button>\n }\n />\n );\n}\n\nfunction EffortGlyph({ effort }: { effort?: string | undefined }) {\n const glyph = effort ? effortLevelIcon(effort) : undefined;\n if (!glyph) return null;\n return (\n <Icon\n icon={glyph}\n className={cn(\n \"size-4 shrink-0\",\n effort ? effortLevelColor(effort) : undefined,\n )}\n />\n );\n}\n\nfunction itemLabel({\n text,\n hint,\n selected,\n stacked = false,\n}: {\n text: string;\n hint?: string | undefined;\n selected: boolean;\n stacked?: boolean | undefined;\n}): ReactNode {\n return (\n <>\n <span className=\"min-w-0 flex-1\">\n <span className={cn(\"block truncate\", selected && \"font-semibold\")}>\n {text}\n </span>\n {hint && stacked && (\n <span className=\"block whitespace-normal text-[11px] leading-4 text-muted-foreground\">\n {hint}\n </span>\n )}\n </span>\n {hint && !stacked && (\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">\n {hint}\n </span>\n )}\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </>\n );\n}\n\nfunction familyItems({\n families,\n models,\n selectedId,\n onSelect,\n}: {\n families: SpecRuntimeFamily[];\n models: ChatModel[];\n selectedId: string;\n onSelect: (familyId: string) => void;\n}): DropdownMenuItem[] {\n return families\n .filter((family) =>\n family.modes.some((mode) => !isUnavailable(mode.availability)),\n )\n .map((family) => {\n const brand = runtimeFamilyBrand(family);\n const count = modelsForFamily(models, family).length;\n return {\n group: \"Family\",\n label: itemLabel({\n text: family.label,\n ...(count > 0 ? { hint: `${count} models` } : {}),\n selected: family.id === selectedId,\n }),\n ...(brand.icon ? { icon: brand.icon } : {}),\n onSelect: () => onSelect(family.id),\n };\n });\n}\n\nfunction modeItems({\n family,\n selectedId,\n onSelect,\n}: {\n family: SpecRuntimeFamily;\n selectedId: string;\n onSelect: (modeId: string) => void;\n}): DropdownMenuItem[] {\n return family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => ({\n group: \"Mode · runtime\",\n label: itemLabel({\n text: mode.label,\n ...(mode.title ? { hint: mode.title } : {}),\n selected: mode.id === selectedId,\n }),\n ...(mode.icon ? { icon: mode.icon } : {}),\n ...(mode.title ? { title: mode.title } : {}),\n onSelect: () => onSelect(mode.id),\n }));\n}\n\nfunction modelItems({\n models,\n group,\n selectedId,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n group: string;\n selectedId?: string | undefined;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}): DropdownMenuItem[] {\n const clear: DropdownMenuItem = {\n group: \"Model\",\n label: itemLabel({\n text: \"Prompt default\",\n hint: \"no override\",\n selected: !selectedId,\n }),\n onSelect: onClear,\n };\n return [\n clear,\n ...models.map((model) => {\n const glyph: StaticIconComponent | undefined = providerIcon(\n model.provider,\n );\n return {\n group,\n label: itemLabel({\n text: model.label,\n ...(model.id === model.label ? {} : { hint: model.id }),\n selected: model.id === selectedId,\n stacked: true,\n }),\n ...(glyph ? { icon: glyph } : {}),\n onSelect: () => onSelect(model),\n };\n }),\n ];\n}\n\nfunction effortItems({\n offered,\n supported,\n selected,\n onSelect,\n}: {\n offered: string[];\n supported: string[];\n selected?: string | undefined;\n onSelect: (effort: string) => void;\n}): DropdownMenuItem[] {\n const current = selected?.trim() ?? \"\";\n const none: DropdownMenuItem = {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: \"None\",\n hint: \"single pass\",\n selected: current === \"\",\n }),\n onSelect: () => onSelect(\"\"),\n };\n return [\n none,\n ...offered.map((effort) => {\n const glyph = effortLevelIcon(effort);\n const usable = supported.includes(effort);\n return {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: effortLevelLabel(effort),\n ...(usable ? {} : { hint: \"unsupported\" }),\n selected: effort === current,\n }),\n ...(glyph ? { icon: glyph } : {}),\n disabled: !usable,\n onSelect: () => onSelect(effort),\n };\n }),\n ];\n}\n\nfunction effortUniverse(\n offered: readonly string[],\n supported: readonly string[],\n selected: string | undefined,\n): string[] {\n const all = [...offered, ...supported, selected ?? \"\"]\n .map((effort) => effort.trim())\n .filter(Boolean);\n return [...new Set(all)];\n}\n"],"names":["runtimeFamilyBrand","jsxs","cn","jsx","Icon","InputField","effortLevelLabel","DropdownMenu","UiChevronDown","effortLevelIcon","effortLevelColor","Fragment","UiCheck","isUnavailable","modelsForFamily","providerIcon"],"mappings":"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"}
|
|
@@ -14,13 +14,15 @@ export type RuntimeBarSegmentsProps = {
|
|
|
14
14
|
reasoningEfforts: string[];
|
|
15
15
|
supportedEfforts: string[];
|
|
16
16
|
locked: boolean;
|
|
17
|
+
showModel: boolean;
|
|
18
|
+
showEffort: boolean;
|
|
17
19
|
ariaLabel: string;
|
|
18
20
|
className?: string | undefined;
|
|
19
|
-
|
|
21
|
+
onModeChange: (familyId: string, modeId: string) => void;
|
|
20
22
|
onCustomModel: (model: string) => void;
|
|
21
23
|
onModelSelect: (model: ChatModel) => void;
|
|
22
24
|
onModelClear: () => void;
|
|
23
25
|
onEffortChange: (effort: string) => void;
|
|
24
26
|
};
|
|
25
|
-
export declare function RuntimeBarSegments({ value, models, modelOptions, resolvedModel, selectedModelUnavailable, families, family, mode, selectedMode, reasoningEfforts, supportedEfforts, locked, ariaLabel, className,
|
|
27
|
+
export declare function RuntimeBarSegments({ value, models, modelOptions, resolvedModel, selectedModelUnavailable, families, family, mode, selectedMode, reasoningEfforts, supportedEfforts, locked, showModel, showEffort, ariaLabel, className, onModeChange, onCustomModel, onModelSelect, onModelClear, onEffortChange, }: RuntimeBarSegmentsProps): import("react/jsx-runtime").JSX.Element;
|
|
26
28
|
//# sourceMappingURL=RuntimeBarSegments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeBarSegments.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBarSegments.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,wBAAwB,EAAE,OAAO,CAAC;IAClC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,
|
|
1
|
+
{"version":3,"file":"RuntimeBarSegments.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBarSegments.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,wBAAwB,EAAE,OAAO,CAAC;IAClC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,GACf,EAAE,uBAAuB,2CAuHzB"}
|
|
@@ -23,9 +23,11 @@ function RuntimeBarSegments({
|
|
|
23
23
|
reasoningEfforts,
|
|
24
24
|
supportedEfforts,
|
|
25
25
|
locked,
|
|
26
|
+
showModel,
|
|
27
|
+
showEffort,
|
|
26
28
|
ariaLabel,
|
|
27
29
|
className,
|
|
28
|
-
|
|
30
|
+
onModeChange,
|
|
29
31
|
onCustomModel,
|
|
30
32
|
onModelSelect,
|
|
31
33
|
onModelClear,
|
|
@@ -53,7 +55,7 @@ function RuntimeBarSegments({
|
|
|
53
55
|
families,
|
|
54
56
|
models,
|
|
55
57
|
selectedId: family.id,
|
|
56
|
-
onSelect: (familyId) =>
|
|
58
|
+
onSelect: (familyId) => onModeChange(familyId, selectedMode)
|
|
57
59
|
}),
|
|
58
60
|
children: [
|
|
59
61
|
brand.icon && /* @__PURE__ */ jsx(
|
|
@@ -76,7 +78,7 @@ function RuntimeBarSegments({
|
|
|
76
78
|
items: modeItems({
|
|
77
79
|
family,
|
|
78
80
|
selectedId: selectedMode,
|
|
79
|
-
onSelect: (modeId) =>
|
|
81
|
+
onSelect: (modeId) => onModeChange(family.id, modeId)
|
|
80
82
|
}),
|
|
81
83
|
children: [
|
|
82
84
|
mode.icon && /* @__PURE__ */ jsx(
|
|
@@ -90,7 +92,7 @@ function RuntimeBarSegments({
|
|
|
90
92
|
]
|
|
91
93
|
}
|
|
92
94
|
),
|
|
93
|
-
/* @__PURE__ */ jsx(
|
|
95
|
+
showModel && /* @__PURE__ */ jsx(
|
|
94
96
|
RuntimeSegment,
|
|
95
97
|
{
|
|
96
98
|
menuLabel: "Model",
|
|
@@ -122,7 +124,7 @@ function RuntimeBarSegments({
|
|
|
122
124
|
children: /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate font-mono text-xs text-foreground", children: modelLabel })
|
|
123
125
|
}
|
|
124
126
|
),
|
|
125
|
-
supportedEfforts.length > 0 && /* @__PURE__ */ jsxs(
|
|
127
|
+
showEffort && supportedEfforts.length > 0 && /* @__PURE__ */ jsxs(
|
|
126
128
|
RuntimeSegment,
|
|
127
129
|
{
|
|
128
130
|
menuLabel: "Reasoning effort",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeBarSegments.js","sources":["../../../src/data/runtime/RuntimeBarSegments.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { InputField } from \"../../components/InputField\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DropdownMenu,\n type DropdownMenuItem,\n} from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport {\n modelsForFamily,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarSegmentsProps = {\n value: RuntimeBarValue;\n models: ChatModel[];\n modelOptions: ChatModel[];\n resolvedModel: ChatModel | undefined;\n selectedModelUnavailable: boolean;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n reasoningEfforts: string[];\n supportedEfforts: string[];\n locked: boolean;\n ariaLabel: string;\n className?: string | undefined;\n onBackendChange: (familyId: string, modeId: string) => void;\n onCustomModel: (model: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarSegments({\n value,\n models,\n modelOptions,\n resolvedModel,\n selectedModelUnavailable,\n families,\n family,\n mode,\n selectedMode,\n reasoningEfforts,\n supportedEfforts,\n locked,\n ariaLabel,\n className,\n onBackendChange,\n onCustomModel,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarSegmentsProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = selectedModelUnavailable\n ? \"Unavailable selection\"\n : (resolvedModel?.label ?? value.model ?? \"Default\");\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex h-control-h w-fit max-w-full items-stretch overflow-hidden rounded-md border border-input bg-background\",\n className,\n )}\n >\n <RuntimeSegment\n menuLabel=\"Family\"\n title={`Family — ${family.label}`}\n disabled={locked}\n items={familyItems({\n families,\n models,\n selectedId: family.id,\n onSelect: (familyId) => onBackendChange(familyId, selectedMode),\n })}\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n <span className={CAPTION_CLASS}>{family.label}</span>\n </RuntimeSegment>\n <RuntimeSegment\n menuLabel=\"Runtime mode\"\n title={mode.title ?? \"Runtime mode\"}\n disabled={locked}\n items={modeItems({\n family,\n selectedId: selectedMode,\n onSelect: (modeId) => onBackendChange(family.id, modeId),\n })}\n >\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className={CAPTION_CLASS}>{mode.label}</span>\n </RuntimeSegment>\n <RuntimeSegment\n menuLabel=\"Model\"\n title={\n selectedModelUnavailable\n ? \"Model — unavailable selection\"\n : value.model\n ? `Model — ${value.model}`\n : \"Model — prompt default\"\n }\n disabled={locked}\n className=\"min-w-0 max-w-56 flex-1 [&>span]:min-w-0 [&>span]:w-full [&>span>button]:w-full\"\n header={\n <div className=\"grid gap-1\">\n <span className={KEY_CLASS}>Model id</span>\n <InputField\n value={selectedModelUnavailable ? \"\" : (value.model ?? \"\")}\n onChange={onCustomModel}\n {...(selectedModelUnavailable\n ? { placeholder: \"Unavailable selection\" }\n : {})}\n aria-label=\"Model id\"\n disabled={locked}\n inputClassName=\"font-mono text-xs\"\n className=\"bg-background\"\n />\n </div>\n }\n items={modelItems({\n models: modelOptions,\n group: `${family.label} models`,\n selectedId: selectedModelUnavailable\n ? undefined\n : (resolvedModel?.id ?? value.model),\n onSelect: onModelSelect,\n onClear: onModelClear,\n })}\n >\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground\">\n {modelLabel}\n </span>\n </RuntimeSegment>\n {supportedEfforts.length > 0 && (\n <RuntimeSegment\n menuLabel=\"Reasoning effort\"\n title=\"Reasoning effort\"\n items={effortItems({\n offered: effortUniverse(\n reasoningEfforts,\n supportedEfforts,\n value.effort,\n ),\n supported: supportedEfforts,\n selected: value.effort,\n onSelect: onEffortChange,\n })}\n >\n <span className={KEY_CLASS}>Effort</span>\n <EffortGlyph effort={value.effort} />\n <span className={CAPTION_CLASS}>\n {value.effort ? effortLevelLabel(value.effort) : \"None\"}\n </span>\n </RuntimeSegment>\n )}\n </div>\n );\n}\n\nconst CAPTION_CLASS = \"truncate text-xs font-semibold text-foreground\";\nconst KEY_CLASS =\n \"text-[11px] font-semibold uppercase leading-none tracking-wide text-muted-foreground\";\n\nfunction RuntimeSegment({\n items,\n menuLabel,\n title,\n header,\n disabled = false,\n className,\n children,\n}: {\n items: DropdownMenuItem[];\n menuLabel: string;\n title: string;\n header?: ReactNode;\n disabled?: boolean;\n className?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={menuLabel}\n items={items}\n {...(header ? { header } : {})}\n menuClassName=\"min-w-56 max-w-80\"\n className={cn(\"border-l border-border first:border-l-0\", className)}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n title={title}\n className=\"inline-flex h-full min-w-0 items-center gap-1.5 px-density-2 transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring [[aria-expanded=true]_&]:bg-muted\"\n >\n {children}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </button>\n }\n />\n );\n}\n\nfunction EffortGlyph({ effort }: { effort?: string | undefined }) {\n const glyph = effort ? effortLevelIcon(effort) : undefined;\n if (!glyph) return null;\n return (\n <Icon\n icon={glyph}\n className={cn(\n \"size-4 shrink-0\",\n effort ? effortLevelColor(effort) : undefined,\n )}\n />\n );\n}\n\nfunction itemLabel({\n text,\n hint,\n selected,\n stacked = false,\n}: {\n text: string;\n hint?: string | undefined;\n selected: boolean;\n stacked?: boolean | undefined;\n}): ReactNode {\n return (\n <>\n <span className=\"min-w-0 flex-1\">\n <span className={cn(\"block truncate\", selected && \"font-semibold\")}>\n {text}\n </span>\n {hint && stacked && (\n <span className=\"block whitespace-normal text-[11px] leading-4 text-muted-foreground\">\n {hint}\n </span>\n )}\n </span>\n {hint && !stacked && (\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">\n {hint}\n </span>\n )}\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </>\n );\n}\n\nfunction familyItems({\n families,\n models,\n selectedId,\n onSelect,\n}: {\n families: SpecRuntimeFamily[];\n models: ChatModel[];\n selectedId: string;\n onSelect: (familyId: string) => void;\n}): DropdownMenuItem[] {\n return families\n .filter((family) =>\n family.modes.some((mode) => !isUnavailable(mode.availability)),\n )\n .map((family) => {\n const brand = runtimeFamilyBrand(family);\n const count = modelsForFamily(models, family).length;\n return {\n group: \"Family\",\n label: itemLabel({\n text: family.label,\n ...(count > 0 ? { hint: `${count} models` } : {}),\n selected: family.id === selectedId,\n }),\n ...(brand.icon ? { icon: brand.icon } : {}),\n onSelect: () => onSelect(family.id),\n };\n });\n}\n\nfunction modeItems({\n family,\n selectedId,\n onSelect,\n}: {\n family: SpecRuntimeFamily;\n selectedId: string;\n onSelect: (modeId: string) => void;\n}): DropdownMenuItem[] {\n return family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => ({\n group: \"Mode · runtime\",\n label: itemLabel({\n text: mode.label,\n ...(mode.title ? { hint: mode.title } : {}),\n selected: mode.id === selectedId,\n }),\n ...(mode.icon ? { icon: mode.icon } : {}),\n ...(mode.title ? { title: mode.title } : {}),\n onSelect: () => onSelect(mode.id),\n }));\n}\n\nfunction modelItems({\n models,\n group,\n selectedId,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n group: string;\n selectedId?: string | undefined;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}): DropdownMenuItem[] {\n const clear: DropdownMenuItem = {\n group: \"Model\",\n label: itemLabel({\n text: \"Prompt default\",\n hint: \"no override\",\n selected: !selectedId,\n }),\n onSelect: onClear,\n };\n return [\n clear,\n ...models.map((model) => {\n const glyph: StaticIconComponent | undefined = providerIcon(\n model.provider,\n );\n return {\n group,\n label: itemLabel({\n text: model.label,\n ...(model.id === model.label ? {} : { hint: model.id }),\n selected: model.id === selectedId,\n stacked: true,\n }),\n ...(glyph ? { icon: glyph } : {}),\n onSelect: () => onSelect(model),\n };\n }),\n ];\n}\n\nfunction effortItems({\n offered,\n supported,\n selected,\n onSelect,\n}: {\n offered: string[];\n supported: string[];\n selected?: string | undefined;\n onSelect: (effort: string) => void;\n}): DropdownMenuItem[] {\n const current = selected?.trim() ?? \"\";\n const none: DropdownMenuItem = {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: \"None\",\n hint: \"single pass\",\n selected: current === \"\",\n }),\n onSelect: () => onSelect(\"\"),\n };\n return [\n none,\n ...offered.map((effort) => {\n const glyph = effortLevelIcon(effort);\n const usable = supported.includes(effort);\n return {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: effortLevelLabel(effort),\n ...(usable ? {} : { hint: \"unsupported\" }),\n selected: effort === current,\n }),\n ...(glyph ? { icon: glyph } : {}),\n disabled: !usable,\n onSelect: () => onSelect(effort),\n };\n }),\n ];\n}\n\nfunction effortUniverse(\n offered: readonly string[],\n supported: readonly string[],\n selected: string | undefined,\n): string[] {\n const all = [...offered, ...supported, selected ?? \"\"]\n .map((effort) => effort.trim())\n .filter(Boolean);\n return [...new Set(all)];\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuntimeBarSegments.js","sources":["../../../src/data/runtime/RuntimeBarSegments.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { InputField } from \"../../components/InputField\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DropdownMenu,\n type DropdownMenuItem,\n} from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport {\n modelsForFamily,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarSegmentsProps = {\n value: RuntimeBarValue;\n models: ChatModel[];\n modelOptions: ChatModel[];\n resolvedModel: ChatModel | undefined;\n selectedModelUnavailable: boolean;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n reasoningEfforts: string[];\n supportedEfforts: string[];\n locked: boolean;\n showModel: boolean;\n showEffort: boolean;\n ariaLabel: string;\n className?: string | undefined;\n onModeChange: (familyId: string, modeId: string) => void;\n onCustomModel: (model: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarSegments({\n value,\n models,\n modelOptions,\n resolvedModel,\n selectedModelUnavailable,\n families,\n family,\n mode,\n selectedMode,\n reasoningEfforts,\n supportedEfforts,\n locked,\n showModel,\n showEffort,\n ariaLabel,\n className,\n onModeChange,\n onCustomModel,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarSegmentsProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = selectedModelUnavailable\n ? \"Unavailable selection\"\n : (resolvedModel?.label ?? value.model ?? \"Default\");\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex h-control-h w-fit max-w-full items-stretch overflow-hidden rounded-md border border-input bg-background\",\n className,\n )}\n >\n <RuntimeSegment\n menuLabel=\"Family\"\n title={`Family — ${family.label}`}\n disabled={locked}\n items={familyItems({\n families,\n models,\n selectedId: family.id,\n onSelect: (familyId) => onModeChange(familyId, selectedMode),\n })}\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n <span className={CAPTION_CLASS}>{family.label}</span>\n </RuntimeSegment>\n <RuntimeSegment\n menuLabel=\"Runtime mode\"\n title={mode.title ?? \"Runtime mode\"}\n disabled={locked}\n items={modeItems({\n family,\n selectedId: selectedMode,\n onSelect: (modeId) => onModeChange(family.id, modeId),\n })}\n >\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className={CAPTION_CLASS}>{mode.label}</span>\n </RuntimeSegment>\n {showModel && (\n <RuntimeSegment\n menuLabel=\"Model\"\n title={\n selectedModelUnavailable\n ? \"Model — unavailable selection\"\n : value.model\n ? `Model — ${value.model}`\n : \"Model — prompt default\"\n }\n disabled={locked}\n className=\"min-w-0 max-w-56 flex-1 [&>span]:min-w-0 [&>span]:w-full [&>span>button]:w-full\"\n header={\n <div className=\"grid gap-1\">\n <span className={KEY_CLASS}>Model id</span>\n <InputField\n value={selectedModelUnavailable ? \"\" : (value.model ?? \"\")}\n onChange={onCustomModel}\n {...(selectedModelUnavailable\n ? { placeholder: \"Unavailable selection\" }\n : {})}\n aria-label=\"Model id\"\n disabled={locked}\n inputClassName=\"font-mono text-xs\"\n className=\"bg-background\"\n />\n </div>\n }\n items={modelItems({\n models: modelOptions,\n group: `${family.label} models`,\n selectedId: selectedModelUnavailable\n ? undefined\n : (resolvedModel?.id ?? value.model),\n onSelect: onModelSelect,\n onClear: onModelClear,\n })}\n >\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground\">\n {modelLabel}\n </span>\n </RuntimeSegment>\n )}\n {showEffort && supportedEfforts.length > 0 && (\n <RuntimeSegment\n menuLabel=\"Reasoning effort\"\n title=\"Reasoning effort\"\n items={effortItems({\n offered: effortUniverse(\n reasoningEfforts,\n supportedEfforts,\n value.effort,\n ),\n supported: supportedEfforts,\n selected: value.effort,\n onSelect: onEffortChange,\n })}\n >\n <span className={KEY_CLASS}>Effort</span>\n <EffortGlyph effort={value.effort} />\n <span className={CAPTION_CLASS}>\n {value.effort ? effortLevelLabel(value.effort) : \"None\"}\n </span>\n </RuntimeSegment>\n )}\n </div>\n );\n}\n\nconst CAPTION_CLASS = \"truncate text-xs font-semibold text-foreground\";\nconst KEY_CLASS =\n \"text-[11px] font-semibold uppercase leading-none tracking-wide text-muted-foreground\";\n\nfunction RuntimeSegment({\n items,\n menuLabel,\n title,\n header,\n disabled = false,\n className,\n children,\n}: {\n items: DropdownMenuItem[];\n menuLabel: string;\n title: string;\n header?: ReactNode;\n disabled?: boolean;\n className?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={menuLabel}\n items={items}\n {...(header ? { header } : {})}\n menuClassName=\"min-w-56 max-w-80\"\n className={cn(\"border-l border-border first:border-l-0\", className)}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n title={title}\n className=\"inline-flex h-full min-w-0 items-center gap-1.5 px-density-2 transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring [[aria-expanded=true]_&]:bg-muted\"\n >\n {children}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </button>\n }\n />\n );\n}\n\nfunction EffortGlyph({ effort }: { effort?: string | undefined }) {\n const glyph = effort ? effortLevelIcon(effort) : undefined;\n if (!glyph) return null;\n return (\n <Icon\n icon={glyph}\n className={cn(\n \"size-4 shrink-0\",\n effort ? effortLevelColor(effort) : undefined,\n )}\n />\n );\n}\n\nfunction itemLabel({\n text,\n hint,\n selected,\n stacked = false,\n}: {\n text: string;\n hint?: string | undefined;\n selected: boolean;\n stacked?: boolean | undefined;\n}): ReactNode {\n return (\n <>\n <span className=\"min-w-0 flex-1\">\n <span className={cn(\"block truncate\", selected && \"font-semibold\")}>\n {text}\n </span>\n {hint && stacked && (\n <span className=\"block whitespace-normal text-[11px] leading-4 text-muted-foreground\">\n {hint}\n </span>\n )}\n </span>\n {hint && !stacked && (\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">\n {hint}\n </span>\n )}\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </>\n );\n}\n\nfunction familyItems({\n families,\n models,\n selectedId,\n onSelect,\n}: {\n families: SpecRuntimeFamily[];\n models: ChatModel[];\n selectedId: string;\n onSelect: (familyId: string) => void;\n}): DropdownMenuItem[] {\n return families\n .filter((family) =>\n family.modes.some((mode) => !isUnavailable(mode.availability)),\n )\n .map((family) => {\n const brand = runtimeFamilyBrand(family);\n const count = modelsForFamily(models, family).length;\n return {\n group: \"Family\",\n label: itemLabel({\n text: family.label,\n ...(count > 0 ? { hint: `${count} models` } : {}),\n selected: family.id === selectedId,\n }),\n ...(brand.icon ? { icon: brand.icon } : {}),\n onSelect: () => onSelect(family.id),\n };\n });\n}\n\nfunction modeItems({\n family,\n selectedId,\n onSelect,\n}: {\n family: SpecRuntimeFamily;\n selectedId: string;\n onSelect: (modeId: string) => void;\n}): DropdownMenuItem[] {\n return family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => ({\n group: \"Mode · runtime\",\n label: itemLabel({\n text: mode.label,\n ...(mode.title ? { hint: mode.title } : {}),\n selected: mode.id === selectedId,\n }),\n ...(mode.icon ? { icon: mode.icon } : {}),\n ...(mode.title ? { title: mode.title } : {}),\n onSelect: () => onSelect(mode.id),\n }));\n}\n\nfunction modelItems({\n models,\n group,\n selectedId,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n group: string;\n selectedId?: string | undefined;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}): DropdownMenuItem[] {\n const clear: DropdownMenuItem = {\n group: \"Model\",\n label: itemLabel({\n text: \"Prompt default\",\n hint: \"no override\",\n selected: !selectedId,\n }),\n onSelect: onClear,\n };\n return [\n clear,\n ...models.map((model) => {\n const glyph: StaticIconComponent | undefined = providerIcon(\n model.provider,\n );\n return {\n group,\n label: itemLabel({\n text: model.label,\n ...(model.id === model.label ? {} : { hint: model.id }),\n selected: model.id === selectedId,\n stacked: true,\n }),\n ...(glyph ? { icon: glyph } : {}),\n onSelect: () => onSelect(model),\n };\n }),\n ];\n}\n\nfunction effortItems({\n offered,\n supported,\n selected,\n onSelect,\n}: {\n offered: string[];\n supported: string[];\n selected?: string | undefined;\n onSelect: (effort: string) => void;\n}): DropdownMenuItem[] {\n const current = selected?.trim() ?? \"\";\n const none: DropdownMenuItem = {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: \"None\",\n hint: \"single pass\",\n selected: current === \"\",\n }),\n onSelect: () => onSelect(\"\"),\n };\n return [\n none,\n ...offered.map((effort) => {\n const glyph = effortLevelIcon(effort);\n const usable = supported.includes(effort);\n return {\n group: \"Reasoning effort\",\n label: itemLabel({\n text: effortLevelLabel(effort),\n ...(usable ? {} : { hint: \"unsupported\" }),\n selected: effort === current,\n }),\n ...(glyph ? { icon: glyph } : {}),\n disabled: !usable,\n onSelect: () => onSelect(effort),\n };\n }),\n ];\n}\n\nfunction effortUniverse(\n offered: readonly string[],\n supported: readonly string[],\n selected: string | undefined,\n): string[] {\n const all = [...offered, ...supported, selected ?? \"\"]\n .map((effort) => effort.trim())\n .filter(Boolean);\n return [...new Set(all)];\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -10,15 +10,12 @@ function reconcileModelCapabilities(value, model, fallbackEfforts, execution) {
|
|
|
10
10
|
if (model == null ? void 0 : model.runtime) {
|
|
11
11
|
delete next.model;
|
|
12
12
|
delete next.id;
|
|
13
|
-
delete next.backend;
|
|
14
13
|
delete next.mode;
|
|
15
14
|
Object.assign(next, model.runtime);
|
|
16
15
|
} else if (model) {
|
|
17
16
|
next.model = model.id;
|
|
18
17
|
}
|
|
19
18
|
if (execution) {
|
|
20
|
-
if (execution.backend) next.backend = execution.backend;
|
|
21
|
-
else delete next.backend;
|
|
22
19
|
if (execution.mode) next.mode = execution.mode;
|
|
23
20
|
else delete next.mode;
|
|
24
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-capabilities.cjs","sources":["../../../src/data/runtime/model-capabilities.ts"],"sourcesContent":["import type { ChatModel, ChatModelRuntime } from \"../chat/types\";\n\n// Runtime controls and catalog rows share one wire shape. Reconciliation copies\n// catalog identity while retaining user-owned runtime options that remain valid.\nexport type ModelRuntimeSelection = ChatModelRuntime;\n\n/** Lists the effort values accepted by the selected catalog model. */\nexport function effortOptionsForModel(\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): string[] {\n if (!model?.capabilitiesKnown) return [...fallbackEfforts];\n if (!model.reasoning) return [];\n return [...(model.supportedEfforts ?? [])];\n}\n\n/** Applies catalog identity and capabilities under the caller's execution policy. */\nexport function reconcileModelCapabilities<T extends ModelRuntimeSelection>(\n value: T,\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n execution?: {\n
|
|
1
|
+
{"version":3,"file":"model-capabilities.cjs","sources":["../../../src/data/runtime/model-capabilities.ts"],"sourcesContent":["import type { ChatModel, ChatModelRuntime } from \"../chat/types\";\n\n// Runtime controls and catalog rows share one wire shape. Reconciliation copies\n// catalog identity while retaining user-owned runtime options that remain valid.\nexport type ModelRuntimeSelection = ChatModelRuntime;\n\n/** Lists the effort values accepted by the selected catalog model. */\nexport function effortOptionsForModel(\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): string[] {\n if (!model?.capabilitiesKnown) return [...fallbackEfforts];\n if (!model.reasoning) return [];\n return [...(model.supportedEfforts ?? [])];\n}\n\n/** Applies catalog identity and capabilities under the caller's execution policy. */\nexport function reconcileModelCapabilities<T extends ModelRuntimeSelection>(\n value: T,\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n execution?: {\n mode: string | undefined;\n },\n): T {\n const next = { ...value } as ModelRuntimeSelection;\n if (model?.runtime) {\n delete next.model;\n delete next.id;\n delete next.mode;\n Object.assign(next, model.runtime);\n } else if (model) {\n next.model = model.id;\n }\n\n if (execution) {\n if (execution.mode) next.mode = execution.mode;\n else delete next.mode;\n }\n\n const efforts = effortOptionsForModel(model, fallbackEfforts);\n if (model?.capabilitiesKnown && efforts.length === 0) {\n delete next.effort;\n } else if (\n efforts.length > 0 &&\n (!next.effort || !efforts.includes(next.effort))\n ) {\n const preferred = model?.defaultEffort;\n next.effort =\n preferred && efforts.includes(preferred)\n ? preferred\n : efforts.includes(\"medium\")\n ? \"medium\"\n : efforts[0]!;\n }\n\n if (model?.temperature === false) delete next.temperature;\n return next as T;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,sBACd,OACA,iBACU;AACV,MAAI,EAAC,+BAAO,mBAAmB,QAAO,CAAC,GAAG,eAAe;AACzD,MAAI,CAAC,MAAM,UAAW,QAAO,CAAA;AAC7B,SAAO,CAAC,GAAI,MAAM,oBAAoB,EAAG;AAC3C;AAGO,SAAS,2BACd,OACA,OACA,iBACA,WAGG;AACH,QAAM,OAAO,EAAE,GAAG,MAAA;AAClB,MAAI,+BAAO,SAAS;AAClB,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,OAAO,MAAM,MAAM,OAAO;AAAA,EACnC,WAAW,OAAO;AAChB,SAAK,QAAQ,MAAM;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,QAAI,UAAU,KAAM,MAAK,OAAO,UAAU;AAAA,gBAC9B,KAAK;AAAA,EACnB;AAEA,QAAM,UAAU,sBAAsB,OAAO,eAAe;AAC5D,OAAI,+BAAO,sBAAqB,QAAQ,WAAW,GAAG;AACpD,WAAO,KAAK;AAAA,EACd,WACE,QAAQ,SAAS,MAChB,CAAC,KAAK,UAAU,CAAC,QAAQ,SAAS,KAAK,MAAM,IAC9C;AACA,UAAM,YAAY,+BAAO;AACzB,SAAK,SACH,aAAa,QAAQ,SAAS,SAAS,IACnC,YACA,QAAQ,SAAS,QAAQ,IACvB,WACA,QAAQ,CAAC;AAAA,EACnB;AAEA,OAAI,+BAAO,iBAAgB,MAAO,QAAO,KAAK;AAC9C,SAAO;AACT;;;"}
|
|
@@ -4,7 +4,6 @@ export type ModelRuntimeSelection = ChatModelRuntime;
|
|
|
4
4
|
export declare function effortOptionsForModel(model: ChatModel | undefined, fallbackEfforts: readonly string[]): string[];
|
|
5
5
|
/** Applies catalog identity and capabilities under the caller's execution policy. */
|
|
6
6
|
export declare function reconcileModelCapabilities<T extends ModelRuntimeSelection>(value: T, model: ChatModel | undefined, fallbackEfforts: readonly string[], execution?: {
|
|
7
|
-
backend: string | undefined;
|
|
8
7
|
mode: string | undefined;
|
|
9
8
|
}): T;
|
|
10
9
|
//# sourceMappingURL=model-capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/model-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAErD,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,MAAM,EAAE,CAIV;AAED,qFAAqF;AACrF,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,qBAAqB,EACxE,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,SAAS,CAAC,EAAE;IACV,
|
|
1
|
+
{"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/model-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAErD,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,MAAM,EAAE,CAIV;AAED,qFAAqF;AACrF,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,qBAAqB,EACxE,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,SAAS,CAAC,EAAE;IACV,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,GACA,CAAC,CAkCH"}
|
|
@@ -8,15 +8,12 @@ function reconcileModelCapabilities(value, model, fallbackEfforts, execution) {
|
|
|
8
8
|
if (model == null ? void 0 : model.runtime) {
|
|
9
9
|
delete next.model;
|
|
10
10
|
delete next.id;
|
|
11
|
-
delete next.backend;
|
|
12
11
|
delete next.mode;
|
|
13
12
|
Object.assign(next, model.runtime);
|
|
14
13
|
} else if (model) {
|
|
15
14
|
next.model = model.id;
|
|
16
15
|
}
|
|
17
16
|
if (execution) {
|
|
18
|
-
if (execution.backend) next.backend = execution.backend;
|
|
19
|
-
else delete next.backend;
|
|
20
17
|
if (execution.mode) next.mode = execution.mode;
|
|
21
18
|
else delete next.mode;
|
|
22
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-capabilities.js","sources":["../../../src/data/runtime/model-capabilities.ts"],"sourcesContent":["import type { ChatModel, ChatModelRuntime } from \"../chat/types\";\n\n// Runtime controls and catalog rows share one wire shape. Reconciliation copies\n// catalog identity while retaining user-owned runtime options that remain valid.\nexport type ModelRuntimeSelection = ChatModelRuntime;\n\n/** Lists the effort values accepted by the selected catalog model. */\nexport function effortOptionsForModel(\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): string[] {\n if (!model?.capabilitiesKnown) return [...fallbackEfforts];\n if (!model.reasoning) return [];\n return [...(model.supportedEfforts ?? [])];\n}\n\n/** Applies catalog identity and capabilities under the caller's execution policy. */\nexport function reconcileModelCapabilities<T extends ModelRuntimeSelection>(\n value: T,\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n execution?: {\n
|
|
1
|
+
{"version":3,"file":"model-capabilities.js","sources":["../../../src/data/runtime/model-capabilities.ts"],"sourcesContent":["import type { ChatModel, ChatModelRuntime } from \"../chat/types\";\n\n// Runtime controls and catalog rows share one wire shape. Reconciliation copies\n// catalog identity while retaining user-owned runtime options that remain valid.\nexport type ModelRuntimeSelection = ChatModelRuntime;\n\n/** Lists the effort values accepted by the selected catalog model. */\nexport function effortOptionsForModel(\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): string[] {\n if (!model?.capabilitiesKnown) return [...fallbackEfforts];\n if (!model.reasoning) return [];\n return [...(model.supportedEfforts ?? [])];\n}\n\n/** Applies catalog identity and capabilities under the caller's execution policy. */\nexport function reconcileModelCapabilities<T extends ModelRuntimeSelection>(\n value: T,\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n execution?: {\n mode: string | undefined;\n },\n): T {\n const next = { ...value } as ModelRuntimeSelection;\n if (model?.runtime) {\n delete next.model;\n delete next.id;\n delete next.mode;\n Object.assign(next, model.runtime);\n } else if (model) {\n next.model = model.id;\n }\n\n if (execution) {\n if (execution.mode) next.mode = execution.mode;\n else delete next.mode;\n }\n\n const efforts = effortOptionsForModel(model, fallbackEfforts);\n if (model?.capabilitiesKnown && efforts.length === 0) {\n delete next.effort;\n } else if (\n efforts.length > 0 &&\n (!next.effort || !efforts.includes(next.effort))\n ) {\n const preferred = model?.defaultEffort;\n next.effort =\n preferred && efforts.includes(preferred)\n ? preferred\n : efforts.includes(\"medium\")\n ? \"medium\"\n : efforts[0]!;\n }\n\n if (model?.temperature === false) delete next.temperature;\n return next as T;\n}\n"],"names":[],"mappings":"AAOO,SAAS,sBACd,OACA,iBACU;AACV,MAAI,EAAC,+BAAO,mBAAmB,QAAO,CAAC,GAAG,eAAe;AACzD,MAAI,CAAC,MAAM,UAAW,QAAO,CAAA;AAC7B,SAAO,CAAC,GAAI,MAAM,oBAAoB,EAAG;AAC3C;AAGO,SAAS,2BACd,OACA,OACA,iBACA,WAGG;AACH,QAAM,OAAO,EAAE,GAAG,MAAA;AAClB,MAAI,+BAAO,SAAS;AAClB,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,OAAO,MAAM,MAAM,OAAO;AAAA,EACnC,WAAW,OAAO;AAChB,SAAK,QAAQ,MAAM;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,QAAI,UAAU,KAAM,MAAK,OAAO,UAAU;AAAA,gBAC9B,KAAK;AAAA,EACnB;AAEA,QAAM,UAAU,sBAAsB,OAAO,eAAe;AAC5D,OAAI,+BAAO,sBAAqB,QAAQ,WAAW,GAAG;AACpD,WAAO,KAAK;AAAA,EACd,WACE,QAAQ,SAAS,MAChB,CAAC,KAAK,UAAU,CAAC,QAAQ,SAAS,KAAK,MAAM,IAC9C;AACA,UAAM,YAAY,+BAAO;AACzB,SAAK,SACH,aAAa,QAAQ,SAAS,SAAS,IACnC,YACA,QAAQ,SAAS,QAAQ,IACvB,WACA,QAAQ,CAAC;AAAA,EACnB;AAEA,OAAI,+BAAO,iBAAgB,MAAO,QAAO,KAAK;AAC9C,SAAO;AACT;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-status.cjs","sources":["../../../src/data/runtime/provider-status.ts"],"sourcesContent":["import type {\n ChatModel,\n RuntimeAvailability,\n RuntimeAvailabilityState,\n} from \"../chat/types\";\nimport { isSelectableModel, isUnavailable } from \"./availability\";\nimport type { SpecRuntimeFamily } from \"./runtime-mode\";\n\nexport type ProviderReadiness =\n | \"ready\"\n | \"attention\"\n | \"disabled\"\n | \"unavailable\";\n\nexport type ProviderStatusIssue = {\n id: string;\n kind: \"mode\" | \"model\";\n label: string;\n availability: RuntimeAvailability;\n};\n\nexport type ProviderStatusGroup = {\n id: string;\n label: string;\n iconProvider: string;\n readiness: ProviderReadiness;\n availableModes: number;\n totalModes: number;\n availableModels: number;\n totalModels: number;\n issues: ProviderStatusIssue[];\n};\n\nexport function providerStatusGroups(\n models: ChatModel[],\n families: SpecRuntimeFamily[]\n): ProviderStatusGroup[] {\n const unmatched = new Set(models);\n const groups = families.map((family) => {\n const providers = new Set([\n family.provider,\n ...family.modes.map((mode) => mode.provider).filter(isString),\n ]);\n const familyModels = models.filter((model) =>\n providers.has(model.provider)\n );\n for (const model of familyModels) unmatched.delete(model);\n return buildProviderGroup(\n family.id,\n family.label,\n family.id,\n family.modes.map((mode) => ({\n id: mode.
|
|
1
|
+
{"version":3,"file":"provider-status.cjs","sources":["../../../src/data/runtime/provider-status.ts"],"sourcesContent":["import type {\n ChatModel,\n RuntimeAvailability,\n RuntimeAvailabilityState,\n} from \"../chat/types\";\nimport { isSelectableModel, isUnavailable } from \"./availability\";\nimport type { SpecRuntimeFamily } from \"./runtime-mode\";\n\nexport type ProviderReadiness =\n | \"ready\"\n | \"attention\"\n | \"disabled\"\n | \"unavailable\";\n\nexport type ProviderStatusIssue = {\n id: string;\n kind: \"mode\" | \"model\";\n label: string;\n availability: RuntimeAvailability;\n};\n\nexport type ProviderStatusGroup = {\n id: string;\n label: string;\n iconProvider: string;\n readiness: ProviderReadiness;\n availableModes: number;\n totalModes: number;\n availableModels: number;\n totalModels: number;\n issues: ProviderStatusIssue[];\n};\n\nexport function providerStatusGroups(\n models: ChatModel[],\n families: SpecRuntimeFamily[]\n): ProviderStatusGroup[] {\n const unmatched = new Set(models);\n const groups = families.map((family) => {\n const providers = new Set([\n family.provider,\n ...family.modes.map((mode) => mode.provider).filter(isString),\n ]);\n const familyModels = models.filter((model) =>\n providers.has(model.provider)\n );\n for (const model of familyModels) unmatched.delete(model);\n return buildProviderGroup(\n family.id,\n family.label,\n family.id,\n family.modes.map((mode) => ({\n id: mode.id,\n label: mode.label,\n availability: mode.availability ?? AVAILABLE,\n })),\n familyModels\n );\n });\n\n const modelsByProvider = new Map<string, ChatModel[]>();\n for (const model of unmatched) {\n const providerModels = modelsByProvider.get(model.provider) ?? [];\n providerModels.push(model);\n modelsByProvider.set(model.provider, providerModels);\n }\n for (const [provider, providerModels] of modelsByProvider) {\n groups.push(\n buildProviderGroup(\n provider,\n providerLabel(provider),\n provider,\n [],\n providerModels\n )\n );\n }\n return groups;\n}\n\nexport function modelAvailability(model: ChatModel): RuntimeAvailability {\n if (model.availability) return model.availability;\n if (model.configured === false) {\n return {\n state: \"missing_credentials\",\n reason: \"This model's provider is not configured.\",\n remediation: \"Configure provider credentials, then refresh.\",\n };\n }\n return AVAILABLE;\n}\n\ntype ModeStatus = {\n id: string;\n label: string;\n availability: RuntimeAvailability;\n};\n\nconst AVAILABLE: RuntimeAvailability = { state: \"available\" };\n\nfunction buildProviderGroup(\n id: string,\n label: string,\n iconProvider: string,\n modes: ModeStatus[],\n models: ChatModel[]\n): ProviderStatusGroup {\n const modeIssues = modes\n .filter((mode) => isUnavailable(mode.availability))\n .map((mode) => ({\n id: `${id}:mode:${mode.id}`,\n kind: \"mode\" as const,\n label: `${mode.label} mode`,\n availability: mode.availability,\n }));\n const modelIssues = models\n .filter((model) => !isSelectableModel(model))\n .map((model) => ({\n id: `${id}:model:${model.id}`,\n kind: \"model\" as const,\n label: model.label,\n availability: modelAvailability(model),\n }));\n const issues = [...modeIssues, ...modelIssues];\n return {\n id,\n label,\n iconProvider,\n readiness: providerReadiness(issues, modes, models),\n availableModes: modes.length - modeIssues.length,\n totalModes: modes.length,\n availableModels: models.filter(isSelectableModel).length,\n totalModels: models.length,\n issues,\n };\n}\n\nfunction providerReadiness(\n issues: ProviderStatusIssue[],\n modes: ModeStatus[],\n models: ChatModel[]\n): ProviderReadiness {\n if (issues.length === 0) return \"ready\";\n const states = issues.map((issue) => issue.availability.state);\n if (states.every((state) => state === \"disabled\")) return \"disabled\";\n const hasAvailableMode = modes.some(\n (mode) => !isUnavailable(mode.availability)\n );\n const hasAvailableModel = models.some(isSelectableModel);\n return hasAvailableMode || hasAvailableModel ? \"attention\" : \"unavailable\";\n}\n\nfunction providerLabel(provider: string): string {\n return provider\n .split(/[-_]/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction isString(value: string | undefined): value is string {\n return Boolean(value);\n}\n\nexport function availabilityStateLabel(\n state: RuntimeAvailabilityState\n): string {\n return state.replaceAll(\"_\", \" \");\n}\n"],"names":["isUnavailable","isSelectableModel"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-status.js","sources":["../../../src/data/runtime/provider-status.ts"],"sourcesContent":["import type {\n ChatModel,\n RuntimeAvailability,\n RuntimeAvailabilityState,\n} from \"../chat/types\";\nimport { isSelectableModel, isUnavailable } from \"./availability\";\nimport type { SpecRuntimeFamily } from \"./runtime-mode\";\n\nexport type ProviderReadiness =\n | \"ready\"\n | \"attention\"\n | \"disabled\"\n | \"unavailable\";\n\nexport type ProviderStatusIssue = {\n id: string;\n kind: \"mode\" | \"model\";\n label: string;\n availability: RuntimeAvailability;\n};\n\nexport type ProviderStatusGroup = {\n id: string;\n label: string;\n iconProvider: string;\n readiness: ProviderReadiness;\n availableModes: number;\n totalModes: number;\n availableModels: number;\n totalModels: number;\n issues: ProviderStatusIssue[];\n};\n\nexport function providerStatusGroups(\n models: ChatModel[],\n families: SpecRuntimeFamily[]\n): ProviderStatusGroup[] {\n const unmatched = new Set(models);\n const groups = families.map((family) => {\n const providers = new Set([\n family.provider,\n ...family.modes.map((mode) => mode.provider).filter(isString),\n ]);\n const familyModels = models.filter((model) =>\n providers.has(model.provider)\n );\n for (const model of familyModels) unmatched.delete(model);\n return buildProviderGroup(\n family.id,\n family.label,\n family.id,\n family.modes.map((mode) => ({\n id: mode.
|
|
1
|
+
{"version":3,"file":"provider-status.js","sources":["../../../src/data/runtime/provider-status.ts"],"sourcesContent":["import type {\n ChatModel,\n RuntimeAvailability,\n RuntimeAvailabilityState,\n} from \"../chat/types\";\nimport { isSelectableModel, isUnavailable } from \"./availability\";\nimport type { SpecRuntimeFamily } from \"./runtime-mode\";\n\nexport type ProviderReadiness =\n | \"ready\"\n | \"attention\"\n | \"disabled\"\n | \"unavailable\";\n\nexport type ProviderStatusIssue = {\n id: string;\n kind: \"mode\" | \"model\";\n label: string;\n availability: RuntimeAvailability;\n};\n\nexport type ProviderStatusGroup = {\n id: string;\n label: string;\n iconProvider: string;\n readiness: ProviderReadiness;\n availableModes: number;\n totalModes: number;\n availableModels: number;\n totalModels: number;\n issues: ProviderStatusIssue[];\n};\n\nexport function providerStatusGroups(\n models: ChatModel[],\n families: SpecRuntimeFamily[]\n): ProviderStatusGroup[] {\n const unmatched = new Set(models);\n const groups = families.map((family) => {\n const providers = new Set([\n family.provider,\n ...family.modes.map((mode) => mode.provider).filter(isString),\n ]);\n const familyModels = models.filter((model) =>\n providers.has(model.provider)\n );\n for (const model of familyModels) unmatched.delete(model);\n return buildProviderGroup(\n family.id,\n family.label,\n family.id,\n family.modes.map((mode) => ({\n id: mode.id,\n label: mode.label,\n availability: mode.availability ?? AVAILABLE,\n })),\n familyModels\n );\n });\n\n const modelsByProvider = new Map<string, ChatModel[]>();\n for (const model of unmatched) {\n const providerModels = modelsByProvider.get(model.provider) ?? [];\n providerModels.push(model);\n modelsByProvider.set(model.provider, providerModels);\n }\n for (const [provider, providerModels] of modelsByProvider) {\n groups.push(\n buildProviderGroup(\n provider,\n providerLabel(provider),\n provider,\n [],\n providerModels\n )\n );\n }\n return groups;\n}\n\nexport function modelAvailability(model: ChatModel): RuntimeAvailability {\n if (model.availability) return model.availability;\n if (model.configured === false) {\n return {\n state: \"missing_credentials\",\n reason: \"This model's provider is not configured.\",\n remediation: \"Configure provider credentials, then refresh.\",\n };\n }\n return AVAILABLE;\n}\n\ntype ModeStatus = {\n id: string;\n label: string;\n availability: RuntimeAvailability;\n};\n\nconst AVAILABLE: RuntimeAvailability = { state: \"available\" };\n\nfunction buildProviderGroup(\n id: string,\n label: string,\n iconProvider: string,\n modes: ModeStatus[],\n models: ChatModel[]\n): ProviderStatusGroup {\n const modeIssues = modes\n .filter((mode) => isUnavailable(mode.availability))\n .map((mode) => ({\n id: `${id}:mode:${mode.id}`,\n kind: \"mode\" as const,\n label: `${mode.label} mode`,\n availability: mode.availability,\n }));\n const modelIssues = models\n .filter((model) => !isSelectableModel(model))\n .map((model) => ({\n id: `${id}:model:${model.id}`,\n kind: \"model\" as const,\n label: model.label,\n availability: modelAvailability(model),\n }));\n const issues = [...modeIssues, ...modelIssues];\n return {\n id,\n label,\n iconProvider,\n readiness: providerReadiness(issues, modes, models),\n availableModes: modes.length - modeIssues.length,\n totalModes: modes.length,\n availableModels: models.filter(isSelectableModel).length,\n totalModels: models.length,\n issues,\n };\n}\n\nfunction providerReadiness(\n issues: ProviderStatusIssue[],\n modes: ModeStatus[],\n models: ChatModel[]\n): ProviderReadiness {\n if (issues.length === 0) return \"ready\";\n const states = issues.map((issue) => issue.availability.state);\n if (states.every((state) => state === \"disabled\")) return \"disabled\";\n const hasAvailableMode = modes.some(\n (mode) => !isUnavailable(mode.availability)\n );\n const hasAvailableModel = models.some(isSelectableModel);\n return hasAvailableMode || hasAvailableModel ? \"attention\" : \"unavailable\";\n}\n\nfunction providerLabel(provider: string): string {\n return provider\n .split(/[-_]/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction isString(value: string | undefined): value is string {\n return Boolean(value);\n}\n\nexport function availabilityStateLabel(\n state: RuntimeAvailabilityState\n): string {\n return state.replaceAll(\"_\", \" \");\n}\n"],"names":[],"mappings":"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"}
|