@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,90 +1,116 @@
|
|
|
1
1
|
import { isUnavailable, isSelectableModel } from "./availability.js";
|
|
2
|
+
import { UiCloud } from "../../icons/components/UiCloud.js";
|
|
2
3
|
import { UiRobotAi } from "../../icons/components/UiRobotAi.js";
|
|
3
4
|
import { UiTerminal } from "../../icons/components/UiTerminal.js";
|
|
4
5
|
import { UiColumns } from "../../icons/components/UiColumns.js";
|
|
5
|
-
|
|
6
|
+
const SPEC_RUNTIME_MODES = ["api", "agent", "cli", "cmux"];
|
|
7
|
+
function isSpecRuntimeMode(value) {
|
|
8
|
+
return SPEC_RUNTIME_MODES.some((mode) => mode === value);
|
|
9
|
+
}
|
|
10
|
+
function runtimeModeFromModel(model) {
|
|
11
|
+
const [prefix] = (model ?? "").trim().toLowerCase().split(":");
|
|
12
|
+
return isSpecRuntimeMode(prefix) ? prefix : void 0;
|
|
13
|
+
}
|
|
14
|
+
function runtimeModelError(model) {
|
|
15
|
+
for (const raw of (model ?? "").split(",")) {
|
|
16
|
+
const compact = raw.trim();
|
|
17
|
+
if (!compact || !compact.includes(":")) continue;
|
|
18
|
+
const parts = compact.split(":").map((part) => part.trim());
|
|
19
|
+
const [mode, name, effort] = parts;
|
|
20
|
+
if (!isSpecRuntimeMode(mode)) {
|
|
21
|
+
return `Invalid model configuration: mode ${JSON.stringify(mode)} in model ${JSON.stringify(compact)}. Expected api, agent, cli, or cmux.`;
|
|
22
|
+
}
|
|
23
|
+
if (!name || parts.length > 3) {
|
|
24
|
+
return `Invalid model configuration: model ${JSON.stringify(compact)}. Expected mode:model[:effort].`;
|
|
25
|
+
}
|
|
26
|
+
if (effort !== void 0 && !["low", "medium", "high", "xhigh", "max", "ultra"].includes(effort)) {
|
|
27
|
+
return `Invalid model configuration: effort ${JSON.stringify(effort)} in model ${JSON.stringify(compact)}.`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return void 0;
|
|
31
|
+
}
|
|
32
|
+
function runtimeModeError(families, mode, familyId) {
|
|
33
|
+
if (!mode) return void 0;
|
|
34
|
+
if (!isSpecRuntimeMode(mode)) {
|
|
35
|
+
return `Invalid model configuration: mode ${JSON.stringify(mode)}. Expected api, agent, cli, or cmux.`;
|
|
36
|
+
}
|
|
37
|
+
const family = familyId ? families.find((entry) => entry.id === familyId) : void 0;
|
|
38
|
+
if (family && !family.modes.some((entry) => entry.id === mode)) {
|
|
39
|
+
return `Invalid model configuration: mode ${JSON.stringify(mode)} is not available for ${family.label}.`;
|
|
40
|
+
}
|
|
41
|
+
if (!families.some((entry) => entry.modes.some((m) => m.id === mode))) {
|
|
42
|
+
return `Invalid model configuration: mode ${JSON.stringify(mode)} is missing from the runtime catalog.`;
|
|
43
|
+
}
|
|
44
|
+
return void 0;
|
|
45
|
+
}
|
|
6
46
|
const SPEC_RUNTIME_FAMILIES = [
|
|
7
47
|
{
|
|
8
48
|
id: "claude",
|
|
9
49
|
label: "Claude",
|
|
10
|
-
provider: "
|
|
50
|
+
provider: "anthropic",
|
|
11
51
|
modes: [
|
|
52
|
+
{
|
|
53
|
+
id: "api",
|
|
54
|
+
label: "API",
|
|
55
|
+
icon: UiCloud,
|
|
56
|
+
title: "Anthropic API",
|
|
57
|
+
provider: "anthropic"
|
|
58
|
+
},
|
|
12
59
|
{
|
|
13
60
|
id: "agent",
|
|
14
61
|
label: "Agent",
|
|
15
|
-
backend: "claude-agent",
|
|
16
62
|
icon: UiRobotAi,
|
|
17
|
-
title: "Claude Agent SDK"
|
|
63
|
+
title: "Claude Agent SDK",
|
|
64
|
+
provider: "anthropic"
|
|
18
65
|
},
|
|
19
66
|
{
|
|
20
67
|
id: "cli",
|
|
21
68
|
label: "CLI",
|
|
22
|
-
backend: "claude-cli",
|
|
23
69
|
icon: UiTerminal,
|
|
24
|
-
title: "Claude Code CLI"
|
|
70
|
+
title: "Claude Code CLI",
|
|
71
|
+
provider: "anthropic"
|
|
25
72
|
},
|
|
26
73
|
{
|
|
27
74
|
id: "cmux",
|
|
28
75
|
label: "cmux",
|
|
29
|
-
backend: "claude-cmux",
|
|
30
76
|
icon: UiColumns,
|
|
31
|
-
title: "Claude multiplexer"
|
|
77
|
+
title: "Claude multiplexer",
|
|
78
|
+
provider: "anthropic"
|
|
32
79
|
}
|
|
33
80
|
]
|
|
34
81
|
},
|
|
35
82
|
{
|
|
36
83
|
id: "codex",
|
|
37
84
|
label: "Codex",
|
|
38
|
-
provider: "
|
|
85
|
+
provider: "openai",
|
|
39
86
|
modes: [
|
|
87
|
+
{
|
|
88
|
+
id: "api",
|
|
89
|
+
label: "API",
|
|
90
|
+
icon: UiCloud,
|
|
91
|
+
title: "OpenAI API",
|
|
92
|
+
provider: "openai"
|
|
93
|
+
},
|
|
40
94
|
{
|
|
41
95
|
id: "agent",
|
|
42
96
|
label: "Agent",
|
|
43
|
-
backend: "codex-agent",
|
|
44
97
|
icon: UiRobotAi,
|
|
45
|
-
title: "Codex agent"
|
|
98
|
+
title: "Codex agent",
|
|
99
|
+
provider: "openai"
|
|
46
100
|
},
|
|
47
101
|
{
|
|
48
102
|
id: "cli",
|
|
49
103
|
label: "CLI",
|
|
50
|
-
backend: "codex-cli",
|
|
51
104
|
icon: UiTerminal,
|
|
52
|
-
title: "Codex CLI"
|
|
105
|
+
title: "Codex CLI",
|
|
106
|
+
provider: "openai"
|
|
53
107
|
},
|
|
54
108
|
{
|
|
55
109
|
id: "cmux",
|
|
56
110
|
label: "cmux",
|
|
57
|
-
backend: "codex-cmux",
|
|
58
111
|
icon: UiColumns,
|
|
59
|
-
title: "Codex multiplexer"
|
|
60
|
-
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
id: "openai",
|
|
65
|
-
label: "OpenAI",
|
|
66
|
-
provider: "openai",
|
|
67
|
-
modes: [
|
|
68
|
-
{
|
|
69
|
-
id: "api",
|
|
70
|
-
label: "API",
|
|
71
|
-
backend: "openai",
|
|
72
|
-
icon: UiCloud,
|
|
73
|
-
title: "OpenAI API"
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: "anthropic",
|
|
79
|
-
label: "Anthropic",
|
|
80
|
-
provider: "anthropic",
|
|
81
|
-
modes: [
|
|
82
|
-
{
|
|
83
|
-
id: "api",
|
|
84
|
-
label: "API",
|
|
85
|
-
backend: "anthropic",
|
|
86
|
-
icon: UiCloud,
|
|
87
|
-
title: "Anthropic API"
|
|
112
|
+
title: "Codex multiplexer",
|
|
113
|
+
provider: "openai"
|
|
88
114
|
}
|
|
89
115
|
]
|
|
90
116
|
},
|
|
@@ -93,35 +119,15 @@ const SPEC_RUNTIME_FAMILIES = [
|
|
|
93
119
|
label: "Gemini",
|
|
94
120
|
provider: "googleai",
|
|
95
121
|
modes: [
|
|
96
|
-
{
|
|
97
|
-
|
|
98
|
-
label: "API",
|
|
99
|
-
backend: "gemini",
|
|
100
|
-
icon: UiCloud,
|
|
101
|
-
title: "Gemini API"
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
id: "cli",
|
|
105
|
-
label: "CLI",
|
|
106
|
-
backend: "gemini-cli",
|
|
107
|
-
icon: UiTerminal,
|
|
108
|
-
title: "Gemini CLI"
|
|
109
|
-
}
|
|
122
|
+
{ id: "api", label: "API", icon: UiCloud, title: "Gemini API" },
|
|
123
|
+
{ id: "cli", label: "CLI", icon: UiTerminal, title: "Gemini CLI" }
|
|
110
124
|
]
|
|
111
125
|
},
|
|
112
126
|
{
|
|
113
127
|
id: "deepseek",
|
|
114
128
|
label: "DeepSeek",
|
|
115
129
|
provider: "deepseek",
|
|
116
|
-
modes: [
|
|
117
|
-
{
|
|
118
|
-
id: "api",
|
|
119
|
-
label: "API",
|
|
120
|
-
backend: "deepseek",
|
|
121
|
-
icon: UiCloud,
|
|
122
|
-
title: "DeepSeek API"
|
|
123
|
-
}
|
|
124
|
-
]
|
|
130
|
+
modes: [{ id: "api", label: "API", icon: UiCloud, title: "DeepSeek API" }]
|
|
125
131
|
}
|
|
126
132
|
];
|
|
127
133
|
const MODE_ICONS = {
|
|
@@ -153,15 +159,17 @@ function familiesFromRuntimeCatalog(catalog) {
|
|
|
153
159
|
const modes = entry.modes.map((mode) => ({
|
|
154
160
|
id: mode.mode,
|
|
155
161
|
label: MODE_LABELS[mode.mode] ?? titleCase(mode.mode),
|
|
156
|
-
backend: mode.backend,
|
|
157
162
|
icon: MODE_ICONS[mode.mode],
|
|
158
163
|
title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`,
|
|
159
164
|
provider: mode.catalogProvider ?? entry.catalogPrefix,
|
|
165
|
+
...mode.defaultModel ? { defaultModel: mode.defaultModel } : {},
|
|
166
|
+
...mode.permissions ? { permissions: mode.permissions } : {},
|
|
167
|
+
...mode.schema ? { schema: mode.schema } : {},
|
|
160
168
|
...mode.availability ? { availability: mode.availability } : mode.disabled ? {
|
|
161
169
|
availability: {
|
|
162
170
|
state: "disabled",
|
|
163
|
-
reason: `Disabled by ${mode.disabledReason ?? mode.
|
|
164
|
-
remediation: `Enable ${mode.disabledReason ?? mode.
|
|
171
|
+
reason: `Disabled by ${mode.disabledReason ?? mode.mode} in Captain configuration.`,
|
|
172
|
+
remediation: `Enable ${mode.disabledReason ?? mode.mode} on the Whoami page, then refresh.`
|
|
165
173
|
}
|
|
166
174
|
} : {}
|
|
167
175
|
}));
|
|
@@ -199,7 +207,7 @@ function runtimeModeOptions(families) {
|
|
|
199
207
|
}
|
|
200
208
|
return [...modes.values()];
|
|
201
209
|
}
|
|
202
|
-
function
|
|
210
|
+
function modeForFamily(families, familyId, modeId) {
|
|
203
211
|
const family = familyById(families, familyId);
|
|
204
212
|
const requested = family.modes.find((candidate) => candidate.id === modeId);
|
|
205
213
|
const mode = requested && !isUnavailable(requested.availability) ? requested : firstMode(family);
|
|
@@ -208,73 +216,108 @@ function backendForFamilyMode(families, familyId, modeId) {
|
|
|
208
216
|
`SpecRuntimeFamily "${family.id}" has no available runtime modes`
|
|
209
217
|
);
|
|
210
218
|
}
|
|
211
|
-
return mode.
|
|
219
|
+
return mode.id;
|
|
212
220
|
}
|
|
213
|
-
function
|
|
214
|
-
const target = (
|
|
221
|
+
function selectionForMode(families, mode, preferredFamily) {
|
|
222
|
+
const target = (mode ?? "").toLowerCase();
|
|
223
|
+
const preferred = families.find((family) => family.id === preferredFamily);
|
|
224
|
+
const preferredMode = preferred == null ? void 0 : preferred.modes.find(
|
|
225
|
+
(entry) => entry.id.toLowerCase() === target
|
|
226
|
+
);
|
|
227
|
+
if (preferred && preferredMode) {
|
|
228
|
+
return { family: preferred.id, mode: preferredMode.id };
|
|
229
|
+
}
|
|
215
230
|
for (const family of families) {
|
|
216
|
-
for (const
|
|
217
|
-
if (
|
|
218
|
-
return { family: family.id, mode:
|
|
231
|
+
for (const entry of family.modes) {
|
|
232
|
+
if (entry.id.toLowerCase() === target) {
|
|
233
|
+
return { family: family.id, mode: entry.id };
|
|
219
234
|
}
|
|
220
235
|
}
|
|
221
236
|
}
|
|
222
237
|
const first = familyById(families, "");
|
|
223
238
|
return { family: first.id, mode: firstMode(first).id };
|
|
224
239
|
}
|
|
225
|
-
function
|
|
226
|
-
|
|
240
|
+
function familyForModel(families, models, modelId) {
|
|
241
|
+
if (!modelId) return void 0;
|
|
242
|
+
const selected = models.find(
|
|
243
|
+
(model) => {
|
|
244
|
+
var _a, _b;
|
|
245
|
+
return model.id === modelId || ((_a = model.runtime) == null ? void 0 : _a.model) === modelId || ((_b = model.runtime) == null ? void 0 : _b.id) === modelId;
|
|
246
|
+
}
|
|
247
|
+
);
|
|
248
|
+
if (!selected) return void 0;
|
|
227
249
|
return families.find(
|
|
228
|
-
(family) => family.modes.some((mode) => mode.
|
|
250
|
+
(family) => family.provider === selected.provider || family.modes.some((mode) => mode.provider === selected.provider)
|
|
229
251
|
);
|
|
230
252
|
}
|
|
231
|
-
function
|
|
232
|
-
|
|
253
|
+
function selectionForRuntime(families, mode, modelId, models, preferredFamily) {
|
|
254
|
+
var _a;
|
|
255
|
+
return selectionForMode(
|
|
256
|
+
families,
|
|
257
|
+
mode,
|
|
258
|
+
((_a = familyForModel(families, models, modelId)) == null ? void 0 : _a.id) ?? preferredFamily
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
function familyForMode(families, mode, preferredFamily) {
|
|
262
|
+
if (preferredFamily) {
|
|
263
|
+
const family = families.find((entry) => entry.id === preferredFamily);
|
|
264
|
+
if (family == null ? void 0 : family.modes.some((entry) => entry.id === mode)) return family;
|
|
265
|
+
}
|
|
266
|
+
const target = (mode ?? "").toLowerCase();
|
|
267
|
+
return families.find(
|
|
268
|
+
(family) => family.modes.some((entry) => entry.id.toLowerCase() === target)
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
function modeOptionFor(families, mode, preferredFamily) {
|
|
272
|
+
const target = (mode ?? "").toLowerCase();
|
|
233
273
|
if (!target) return void 0;
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
274
|
+
const ordered = preferredFamily ? [
|
|
275
|
+
...families.filter((family) => family.id === preferredFamily),
|
|
276
|
+
...families.filter((family) => family.id !== preferredFamily)
|
|
277
|
+
] : families;
|
|
278
|
+
for (const family of ordered) {
|
|
279
|
+
const entry = family.modes.find(
|
|
280
|
+
(candidate) => candidate.id.toLowerCase() === target
|
|
237
281
|
);
|
|
238
|
-
if (
|
|
282
|
+
if (entry) return entry;
|
|
239
283
|
}
|
|
240
284
|
return void 0;
|
|
241
285
|
}
|
|
242
|
-
function
|
|
243
|
-
const target = (
|
|
286
|
+
function labelForMode(mode, families = SPEC_RUNTIME_FAMILIES) {
|
|
287
|
+
const target = (mode ?? "").toLowerCase();
|
|
244
288
|
for (const family of families) {
|
|
245
|
-
for (const
|
|
246
|
-
if (
|
|
247
|
-
return `${family.label} ${
|
|
289
|
+
for (const entry of family.modes) {
|
|
290
|
+
if (entry.id.toLowerCase() === target) {
|
|
291
|
+
return `${family.label} ${entry.label}`;
|
|
248
292
|
}
|
|
249
293
|
}
|
|
250
294
|
}
|
|
251
295
|
return "Prompt default";
|
|
252
296
|
}
|
|
253
|
-
function modelsForFamily(models, family,
|
|
297
|
+
function modelsForFamily(models, family, mode) {
|
|
254
298
|
var _a;
|
|
255
299
|
if (!family) return models.filter(isSelectableModel);
|
|
256
|
-
const provider = ((_a = family.modes.find((
|
|
300
|
+
const provider = ((_a = family.modes.find((entry) => entry.id === mode)) == null ? void 0 : _a.provider) ?? family.provider;
|
|
257
301
|
return models.filter(
|
|
258
|
-
(model) => isSelectableModel(model) && model.provider === provider
|
|
302
|
+
(model) => isSelectableModel(model) && model.provider === provider
|
|
259
303
|
);
|
|
260
304
|
}
|
|
261
|
-
function modelBelongsToFamily(modelId, models, family,
|
|
262
|
-
var _a;
|
|
305
|
+
function modelBelongsToFamily(modelId, models, family, mode) {
|
|
306
|
+
var _a, _b;
|
|
263
307
|
if (!modelId) return true;
|
|
264
308
|
const selected = models.find(
|
|
265
309
|
(model) => {
|
|
266
|
-
var _a2,
|
|
267
|
-
return isSelectableModel(model) && (model.id === modelId || ((_a2 = model.runtime) == null ? void 0 : _a2.model) === modelId || ((
|
|
310
|
+
var _a2, _b2;
|
|
311
|
+
return isSelectableModel(model) && (model.id === modelId || ((_a2 = model.runtime) == null ? void 0 : _a2.model) === modelId || ((_b2 = model.runtime) == null ? void 0 : _b2.id) === modelId);
|
|
268
312
|
}
|
|
269
313
|
);
|
|
270
314
|
if (!selected) return false;
|
|
271
|
-
const provider = ((_a = family == null ? void 0 : family.modes.find((
|
|
272
|
-
|
|
273
|
-
return providerMatches && modelMatchesBackend(selected, backend);
|
|
315
|
+
const provider = ((_a = family == null ? void 0 : family.modes.find((entry) => entry.id === mode)) == null ? void 0 : _a.provider) ?? (family == null ? void 0 : family.provider);
|
|
316
|
+
return (!provider || selected.provider === provider) && (!((_b = selected.runtime) == null ? void 0 : _b.mode) || selected.runtime.mode === mode);
|
|
274
317
|
}
|
|
275
|
-
function modelForFamily(modelId, models, family,
|
|
318
|
+
function modelForFamily(modelId, models, family, mode) {
|
|
276
319
|
if (!modelId) return void 0;
|
|
277
|
-
const matches = modelsForFamily(models, family,
|
|
320
|
+
const matches = modelsForFamily(models, family, mode).filter(
|
|
278
321
|
(model) => {
|
|
279
322
|
var _a, _b;
|
|
280
323
|
return model.id === modelId || ((_a = model.runtime) == null ? void 0 : _a.model) === modelId || ((_b = model.runtime) == null ? void 0 : _b.id) === modelId;
|
|
@@ -283,31 +326,30 @@ function modelForFamily(modelId, models, family, backend) {
|
|
|
283
326
|
return matches.find(
|
|
284
327
|
(model) => {
|
|
285
328
|
var _a;
|
|
286
|
-
return !
|
|
329
|
+
return !mode || !((_a = model.runtime) == null ? void 0 : _a.mode) || model.runtime.mode === mode;
|
|
287
330
|
}
|
|
288
331
|
) ?? (matches.length === 1 ? matches[0] : void 0);
|
|
289
332
|
}
|
|
290
|
-
function modelMatchesBackend(model, backend) {
|
|
291
|
-
var _a;
|
|
292
|
-
if (!backend) return true;
|
|
293
|
-
const backends = (_a = model.backends) == null ? void 0 : _a.filter(Boolean);
|
|
294
|
-
if (!backends || backends.length === 0) return true;
|
|
295
|
-
return backends.includes(backend);
|
|
296
|
-
}
|
|
297
333
|
export {
|
|
298
334
|
SPEC_RUNTIME_FAMILIES,
|
|
299
|
-
|
|
335
|
+
SPEC_RUNTIME_MODES,
|
|
300
336
|
familiesFromRuntimeCatalog,
|
|
301
337
|
familyById,
|
|
302
|
-
|
|
338
|
+
familyForMode,
|
|
339
|
+
familyForModel,
|
|
303
340
|
firstMode,
|
|
304
|
-
|
|
305
|
-
|
|
341
|
+
isSpecRuntimeMode,
|
|
342
|
+
labelForMode,
|
|
343
|
+
modeForFamily,
|
|
344
|
+
modeOptionFor,
|
|
306
345
|
modelBelongsToFamily,
|
|
307
346
|
modelForFamily,
|
|
308
|
-
modelMatchesBackend,
|
|
309
347
|
modelsForFamily,
|
|
348
|
+
runtimeModeError,
|
|
349
|
+
runtimeModeFromModel,
|
|
310
350
|
runtimeModeOptions,
|
|
311
|
-
|
|
351
|
+
runtimeModelError,
|
|
352
|
+
selectionForMode,
|
|
353
|
+
selectionForRuntime
|
|
312
354
|
};
|
|
313
355
|
//# sourceMappingURL=runtime-mode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-mode.js","sources":["../../../src/data/runtime/runtime-mode.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { UiCloud, UiColumns, UiRobotAi, UiTerminal } from \"../../icons\";\nimport type { ChatModel, RuntimeAvailability } from \"../chat/types\";\nimport {\n availabilityText,\n isSelectableModel,\n isUnavailable,\n unsupportedAvailability,\n} from \"./availability\";\n\n// A backend runtime is factored into two UI axes — a provider\n// **family** (Claude, OpenAI, …) and a **mode** within it (Agent, CLI, cmux,\n// API) — that together resolve to a single `spec.backend` string. This is the\n// only place that mapping lives; both the inline PromptRunEditor and the modal\n// SpecRuntimeEditor drive their Mode pickers from it.\n\nexport type SpecRuntimeModeOption = {\n /** UI mode id within a family (e.g. \"agent\", \"cli\", \"cmux\", \"api\"). */\n id: string;\n label: string;\n /** The concrete `spec.backend` this (family, mode) resolves to. */\n backend: string;\n icon?: StaticIconComponent | undefined;\n title?: string | undefined;\n provider?: string | undefined;\n availability?: RuntimeAvailability | undefined;\n};\n\nexport type SpecRuntimeFamily = {\n id: string;\n label: string;\n /** The model-catalog provider (`ChatModel.provider`) whose models this family runs. */\n provider: string;\n modes: SpecRuntimeModeOption[];\n};\n\n// Default catalog covering the captain/gavel backend set. Hosts may pass their\n// own via the `families` prop when their catalog differs.\nexport const SPEC_RUNTIME_FAMILIES: SpecRuntimeFamily[] = [\n {\n id: \"claude\",\n label: \"Claude\",\n provider: \"claude-agent\",\n modes: [\n {\n id: \"agent\",\n label: \"Agent\",\n backend: \"claude-agent\",\n icon: UiRobotAi,\n title: \"Claude Agent SDK\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n backend: \"claude-cli\",\n icon: UiTerminal,\n title: \"Claude Code CLI\",\n },\n {\n id: \"cmux\",\n label: \"cmux\",\n backend: \"claude-cmux\",\n icon: UiColumns,\n title: \"Claude multiplexer\",\n },\n ],\n },\n {\n id: \"codex\",\n label: \"Codex\",\n provider: \"codex-cli\",\n modes: [\n {\n id: \"agent\",\n label: \"Agent\",\n backend: \"codex-agent\",\n icon: UiRobotAi,\n title: \"Codex agent\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n backend: \"codex-cli\",\n icon: UiTerminal,\n title: \"Codex CLI\",\n },\n {\n id: \"cmux\",\n label: \"cmux\",\n backend: \"codex-cmux\",\n icon: UiColumns,\n title: \"Codex multiplexer\",\n },\n ],\n },\n {\n id: \"openai\",\n label: \"OpenAI\",\n provider: \"openai\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"openai\",\n icon: UiCloud,\n title: \"OpenAI API\",\n },\n ],\n },\n {\n id: \"anthropic\",\n label: \"Anthropic\",\n provider: \"anthropic\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"anthropic\",\n icon: UiCloud,\n title: \"Anthropic API\",\n },\n ],\n },\n {\n id: \"gemini\",\n label: \"Gemini\",\n provider: \"googleai\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"gemini\",\n icon: UiCloud,\n title: \"Gemini API\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n backend: \"gemini-cli\",\n icon: UiTerminal,\n title: \"Gemini CLI\",\n },\n ],\n },\n {\n id: \"deepseek\",\n label: \"DeepSeek\",\n provider: \"deepseek\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"deepseek\",\n icon: UiCloud,\n title: \"DeepSeek API\",\n },\n ],\n },\n];\n\n// One provider×mode cell as captain serves it (`/whoami`.runtimes and the prompt\n// schema document's `runtimes`), projected from its model registry. It carries\n// ids, not display text: `claude`/`api` are enough to render both, and a served\n// label would be a second place for presentation to drift.\nexport type RuntimeCatalogMode = {\n /** api | agent | cli | cmux */\n mode: string;\n /** The concrete `spec.backend`, e.g. \"claude-cmux\". */\n backend: string;\n /** \"api\" (remote, in-process) or \"cli\" (supervised local binary). */\n kind?: string | undefined;\n /** Rides the local CLI's own login; never consults an API key. */\n keyless?: boolean | undefined;\n /** The model id a picker should seed this mode with. */\n defaultModel?: string | undefined;\n /** The user switched this off in `~/.captain.yaml`. */\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n /** Model-catalog provider used by this exact mode. */\n catalogProvider?: string | undefined;\n availability?: RuntimeAvailability | undefined;\n};\n\nexport type RuntimeCatalogFamily = {\n /** The coding-agent name: claude | codex | gemini | deepseek. */\n family: string;\n /** The canonical provider key: anthropic | openai | google | deepseek. */\n provider: string;\n /** The namespace this provider's model ids carry (`ChatModel.provider`). */\n catalogPrefix: string;\n modes: RuntimeCatalogMode[];\n};\n\nconst MODE_ICONS: Record<string, StaticIconComponent> = {\n api: UiCloud,\n agent: UiRobotAi,\n cli: UiTerminal,\n cmux: UiColumns,\n};\n\n// Mode ids are lowercase tokens; only the acronyms and the lowercase brand\n// \"cmux\" need spelling out. `agent` falls through to plain title case.\nconst MODE_LABELS: Record<string, string> = {\n api: \"API\",\n cli: \"CLI\",\n cmux: \"cmux\",\n};\n\n// Tooltip text, so \"Claude cmux\" reads as \"Claude multiplexer\".\nconst MODE_TITLES: Record<string, string> = {\n api: \"API\",\n agent: \"Agent SDK\",\n cli: \"CLI\",\n cmux: \"multiplexer\",\n};\n\n// The one brand whose title case is not just an initial capital.\nconst FAMILY_LABELS: Record<string, string> = { deepseek: \"DeepSeek\" };\n\nfunction titleCase(token: string): string {\n return token ? token.charAt(0).toUpperCase() + token.slice(1) : token;\n}\n\n// Turns the served catalog into the shared family list. Unavailable entries\n// stay present for Provider Status while runtime controls filter them out.\n//\n// The registry has one provider per family, so Claude's API mode sits beside its\n// Agent/CLI/cmux modes here rather than in a separate \"Anthropic\" family the way\n// SPEC_RUNTIME_FAMILIES splits them.\nexport function familiesFromRuntimeCatalog(\n catalog: RuntimeCatalogFamily[] | undefined\n): SpecRuntimeFamily[] {\n if (!catalog?.length) return SPEC_RUNTIME_FAMILIES;\n const families: SpecRuntimeFamily[] = [];\n for (const entry of catalog) {\n const label = FAMILY_LABELS[entry.family] ?? titleCase(entry.family);\n const modes = entry.modes.map((mode) => ({\n id: mode.mode,\n label: MODE_LABELS[mode.mode] ?? titleCase(mode.mode),\n backend: mode.backend,\n icon: MODE_ICONS[mode.mode],\n title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`,\n provider: mode.catalogProvider ?? entry.catalogPrefix,\n ...(mode.availability\n ? { availability: mode.availability }\n : mode.disabled\n ? {\n availability: {\n state: \"disabled\" as const,\n reason: `Disabled by ${\n mode.disabledReason ?? mode.backend\n } in Captain configuration.`,\n remediation: `Enable ${\n mode.disabledReason ?? mode.backend\n } on the Whoami page, then refresh.`,\n },\n }\n : {}),\n }));\n families.push({\n id: entry.family,\n label,\n provider: entry.catalogPrefix,\n modes,\n });\n }\n return families.length ? families : SPEC_RUNTIME_FAMILIES;\n}\n\nexport function familyById(\n families: SpecRuntimeFamily[],\n id: string\n): SpecRuntimeFamily {\n const match = families.find((family) => family.id === id);\n if (match) return match;\n const first = families[0];\n if (!first) throw new Error(\"SpecRuntimeFamily catalog must not be empty\");\n return first;\n}\n\nexport function firstMode(family: SpecRuntimeFamily): SpecRuntimeModeOption {\n const mode =\n family.modes.find((candidate) => !isUnavailable(candidate.availability)) ??\n family.modes[0];\n if (!mode) {\n throw new Error(\n `SpecRuntimeFamily \"${family.id}\" must have at least one mode`\n );\n }\n return mode;\n}\n\n// Every mode id in the catalog, first-seen order. The returned `backend` belongs\n// to the family that declared the mode first — resolve the real one with\n// `backendForFamilyMode`.\nexport function runtimeModeOptions(\n families: SpecRuntimeFamily[]\n): SpecRuntimeModeOption[] {\n const modes = new Map<string, SpecRuntimeModeOption>();\n for (const family of families) {\n for (const mode of family.modes) {\n if (!modes.has(mode.id)) modes.set(mode.id, mode);\n }\n }\n return [...modes.values()];\n}\n\n// One phrasing for \"this family does not offer that mode\", shared by every\n// runtime presentation so the same state never reads two ways.\nexport function unsupportedModeTitle(family: SpecRuntimeFamily): string {\n return availabilityText(\n unsupportedAvailability(\n family.label,\n \"this\",\n family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => mode.label)\n )\n )!;\n}\n\nexport function unsupportedModeAvailability(\n family: SpecRuntimeFamily,\n mode: SpecRuntimeModeOption\n): RuntimeAvailability {\n return unsupportedAvailability(\n family.label,\n mode.label,\n family.modes\n .filter((candidate) => !isUnavailable(candidate.availability))\n .map((candidate) => candidate.label)\n );\n}\n\nexport function backendForFamilyMode(\n families: SpecRuntimeFamily[],\n familyId: string,\n modeId: string\n): string {\n const family = familyById(families, familyId);\n const requested = family.modes.find((candidate) => candidate.id === modeId);\n const mode =\n requested && !isUnavailable(requested.availability)\n ? requested\n : firstMode(family);\n if (isUnavailable(mode.availability)) {\n throw new Error(\n `SpecRuntimeFamily \"${family.id}\" has no available runtime modes`\n );\n }\n return mode.backend;\n}\n\nexport function selectionForBackend(\n families: SpecRuntimeFamily[],\n backend: string | undefined\n): { family: string; mode: string } {\n const target = (backend ?? \"\").toLowerCase();\n for (const family of families) {\n for (const mode of family.modes) {\n if (mode.backend.toLowerCase() === target) {\n return { family: family.id, mode: mode.id };\n }\n }\n }\n const first = familyById(families, \"\");\n return { family: first.id, mode: firstMode(first).id };\n}\n\nexport function familyForBackend(\n families: SpecRuntimeFamily[],\n backend: string | undefined\n): SpecRuntimeFamily | undefined {\n const target = (backend ?? \"\").toLowerCase();\n return families.find((family) =>\n family.modes.some((mode) => mode.backend.toLowerCase() === target)\n );\n}\n\n// The mode a backend id names, or undefined when the catalog does not declare\n// it. Unlike `selectionForBackend` this does not fall back to the first family,\n// so a summary can stay silent about a runtime it cannot identify.\nexport function modeForBackend(\n families: SpecRuntimeFamily[],\n backend: string | undefined\n): SpecRuntimeModeOption | undefined {\n const target = (backend ?? \"\").toLowerCase();\n if (!target) return undefined;\n for (const family of families) {\n const mode = family.modes.find(\n (entry) => entry.backend.toLowerCase() === target\n );\n if (mode) return mode;\n }\n return undefined;\n}\n\n// \"claude-agent\" -> \"Claude Agent\"; unknown/empty -> \"Prompt default\".\nexport function labelForBackend(\n backend: string | undefined,\n families: SpecRuntimeFamily[] = SPEC_RUNTIME_FAMILIES\n): string {\n const target = (backend ?? \"\").toLowerCase();\n for (const family of families) {\n for (const mode of family.modes) {\n if (mode.backend.toLowerCase() === target) {\n return `${family.label} ${mode.label}`;\n }\n }\n }\n return \"Prompt default\";\n}\n\n/** Lists selectable models by provider and declared backend support. */\nexport function modelsForFamily(\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n backend?: string | undefined\n): ChatModel[] {\n if (!family) return models.filter(isSelectableModel);\n const provider =\n family.modes.find((mode) => mode.backend === backend)?.provider ??\n family.provider;\n return models.filter(\n (model) =>\n isSelectableModel(model) &&\n model.provider === provider &&\n modelMatchesBackend(model, backend)\n );\n}\n\n/** Reports whether the first matching catalog identity belongs to the target family. */\nexport function modelBelongsToFamily(\n modelId: string | undefined,\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n backend?: string | undefined\n): boolean {\n if (!modelId) return true;\n const selected = models.find(\n (model) =>\n isSelectableModel(model) &&\n (model.id === modelId ||\n model.runtime?.model === modelId ||\n model.runtime?.id === modelId)\n );\n if (!selected) return false;\n const provider =\n family?.modes.find((mode) => mode.backend === backend)?.provider ??\n family?.provider;\n const providerMatches = !provider || selected.provider === provider;\n return providerMatches && modelMatchesBackend(selected, backend);\n}\n\n/** Resolves a target backend row, using a sole shared row as fallback. */\nexport function modelForFamily(\n modelId: string | undefined,\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n backend?: string | undefined\n): ChatModel | undefined {\n if (!modelId) return undefined;\n const matches = modelsForFamily(models, family, backend).filter(\n (model) =>\n model.id === modelId ||\n model.runtime?.model === modelId ||\n model.runtime?.id === modelId\n );\n return (\n matches.find(\n (model) =>\n !backend ||\n !model.runtime?.backend ||\n model.runtime.backend === backend\n ) ?? (matches.length === 1 ? matches[0] : undefined)\n );\n}\n\n/** Checks a model row's declared runtime backends when the catalog scopes it. */\nexport function modelMatchesBackend(\n model: ChatModel,\n backend: string | undefined\n): boolean {\n if (!backend) return true;\n const backends = model.backends?.filter(Boolean);\n if (!backends || backends.length === 0) return true;\n return backends.includes(backend);\n}\n"],"names":["_a"],"mappings":";;;;;AAsCO,MAAM,wBAA6C;AAAA,EACxD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAEJ;AAmCA,MAAM,aAAkD;AAAA,EACtD,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR;AAIA,MAAM,cAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AACR;AAGA,MAAM,cAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR;AAGA,MAAM,gBAAwC,EAAE,UAAU,WAAA;AAE1D,SAAS,UAAU,OAAuB;AACxC,SAAO,QAAQ,MAAM,OAAO,CAAC,EAAE,gBAAgB,MAAM,MAAM,CAAC,IAAI;AAClE;AAQO,SAAS,2BACd,SACqB;AACrB,MAAI,EAAC,mCAAS,QAAQ,QAAO;AAC7B,QAAM,WAAgC,CAAA;AACtC,aAAW,SAAS,SAAS;AAC3B,UAAM,QAAQ,cAAc,MAAM,MAAM,KAAK,UAAU,MAAM,MAAM;AACnE,UAAM,QAAQ,MAAM,MAAM,IAAI,CAAC,UAAU;AAAA,MACvC,IAAI,KAAK;AAAA,MACT,OAAO,YAAY,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI;AAAA,MACpD,SAAS,KAAK;AAAA,MACd,MAAM,WAAW,KAAK,IAAI;AAAA,MAC1B,OAAO,GAAG,KAAK,IAAI,YAAY,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,MACjE,UAAU,KAAK,mBAAmB,MAAM;AAAA,MACxC,GAAI,KAAK,eACL,EAAE,cAAc,KAAK,aAAA,IACrB,KAAK,WACL;AAAA,QACE,cAAc;AAAA,UACZ,OAAO;AAAA,UACP,QAAQ,eACN,KAAK,kBAAkB,KAAK,OAC9B;AAAA,UACA,aAAa,UACX,KAAK,kBAAkB,KAAK,OAC9B;AAAA,QAAA;AAAA,MACF,IAEF,CAAA;AAAA,IAAC,EACL;AACF,aAAS,KAAK;AAAA,MACZ,IAAI,MAAM;AAAA,MACV;AAAA,MACA,UAAU,MAAM;AAAA,MAChB;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO,SAAS,SAAS,WAAW;AACtC;AAEO,SAAS,WACd,UACA,IACmB;AACnB,QAAM,QAAQ,SAAS,KAAK,CAAC,WAAW,OAAO,OAAO,EAAE;AACxD,MAAI,MAAO,QAAO;AAClB,QAAM,QAAQ,SAAS,CAAC;AACxB,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,6CAA6C;AACzE,SAAO;AACT;AAEO,SAAS,UAAU,QAAkD;AAC1E,QAAM,OACJ,OAAO,MAAM,KAAK,CAAC,cAAc,CAAC,cAAc,UAAU,YAAY,CAAC,KACvE,OAAO,MAAM,CAAC;AAChB,MAAI,CAAC,MAAM;AACT,UAAM,IAAI;AAAA,MACR,sBAAsB,OAAO,EAAE;AAAA,IAAA;AAAA,EAEnC;AACA,SAAO;AACT;AAKO,SAAS,mBACd,UACyB;AACzB,QAAM,4BAAY,IAAA;AAClB,aAAW,UAAU,UAAU;AAC7B,eAAW,QAAQ,OAAO,OAAO;AAC/B,UAAI,CAAC,MAAM,IAAI,KAAK,EAAE,EAAG,OAAM,IAAI,KAAK,IAAI,IAAI;AAAA,IAClD;AAAA,EACF;AACA,SAAO,CAAC,GAAG,MAAM,QAAQ;AAC3B;AA6BO,SAAS,qBACd,UACA,UACA,QACQ;AACR,QAAM,SAAS,WAAW,UAAU,QAAQ;AAC5C,QAAM,YAAY,OAAO,MAAM,KAAK,CAAC,cAAc,UAAU,OAAO,MAAM;AAC1E,QAAM,OACJ,aAAa,CAAC,cAAc,UAAU,YAAY,IAC9C,YACA,UAAU,MAAM;AACtB,MAAI,cAAc,KAAK,YAAY,GAAG;AACpC,UAAM,IAAI;AAAA,MACR,sBAAsB,OAAO,EAAE;AAAA,IAAA;AAAA,EAEnC;AACA,SAAO,KAAK;AACd;AAEO,SAAS,oBACd,UACA,SACkC;AAClC,QAAM,UAAU,WAAW,IAAI,YAAA;AAC/B,aAAW,UAAU,UAAU;AAC7B,eAAW,QAAQ,OAAO,OAAO;AAC/B,UAAI,KAAK,QAAQ,YAAA,MAAkB,QAAQ;AACzC,eAAO,EAAE,QAAQ,OAAO,IAAI,MAAM,KAAK,GAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,WAAW,UAAU,EAAE;AACrC,SAAO,EAAE,QAAQ,MAAM,IAAI,MAAM,UAAU,KAAK,EAAE,GAAA;AACpD;AAEO,SAAS,iBACd,UACA,SAC+B;AAC/B,QAAM,UAAU,WAAW,IAAI,YAAA;AAC/B,SAAO,SAAS;AAAA,IAAK,CAAC,WACpB,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,QAAQ,YAAA,MAAkB,MAAM;AAAA,EAAA;AAErE;AAKO,SAAS,eACd,UACA,SACmC;AACnC,QAAM,UAAU,WAAW,IAAI,YAAA;AAC/B,MAAI,CAAC,OAAQ,QAAO;AACpB,aAAW,UAAU,UAAU;AAC7B,UAAM,OAAO,OAAO,MAAM;AAAA,MACxB,CAAC,UAAU,MAAM,QAAQ,kBAAkB;AAAA,IAAA;AAE7C,QAAI,KAAM,QAAO;AAAA,EACnB;AACA,SAAO;AACT;AAGO,SAAS,gBACd,SACA,WAAgC,uBACxB;AACR,QAAM,UAAU,WAAW,IAAI,YAAA;AAC/B,aAAW,UAAU,UAAU;AAC7B,eAAW,QAAQ,OAAO,OAAO;AAC/B,UAAI,KAAK,QAAQ,YAAA,MAAkB,QAAQ;AACzC,eAAO,GAAG,OAAO,KAAK,IAAI,KAAK,KAAK;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,gBACd,QACA,QACA,SACa;;AACb,MAAI,CAAC,OAAQ,QAAO,OAAO,OAAO,iBAAiB;AACnD,QAAM,aACJ,YAAO,MAAM,KAAK,CAAC,SAAS,KAAK,YAAY,OAAO,MAApD,mBAAuD,aACvD,OAAO;AACT,SAAO,OAAO;AAAA,IACZ,CAAC,UACC,kBAAkB,KAAK,KACvB,MAAM,aAAa,YACnB,oBAAoB,OAAO,OAAO;AAAA,EAAA;AAExC;AAGO,SAAS,qBACd,SACA,QACA,QACA,SACS;;AACT,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,WAAW,OAAO;AAAA,IACtB,CAAC,UAAA;;AACC,+BAAkB,KAAK,MACtB,MAAM,OAAO,aACZA,MAAA,MAAM,YAAN,gBAAAA,IAAe,WAAU,aACzB,WAAM,YAAN,mBAAe,QAAO;AAAA;AAAA,EAAA;AAE5B,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,aACJ,sCAAQ,MAAM,KAAK,CAAC,SAAS,KAAK,YAAY,aAA9C,mBAAwD,cACxD,iCAAQ;AACV,QAAM,kBAAkB,CAAC,YAAY,SAAS,aAAa;AAC3D,SAAO,mBAAmB,oBAAoB,UAAU,OAAO;AACjE;AAGO,SAAS,eACd,SACA,QACA,QACA,SACuB;AACvB,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,UAAU,gBAAgB,QAAQ,QAAQ,OAAO,EAAE;AAAA,IACvD,CAAC,UAAA;;AACC,mBAAM,OAAO,aACb,WAAM,YAAN,mBAAe,WAAU,aACzB,WAAM,YAAN,mBAAe,QAAO;AAAA;AAAA,EAAA;AAE1B,SACE,QAAQ;AAAA,IACN,CAAC,UAAA;;AACC,cAAC,WACD,GAAC,WAAM,YAAN,mBAAe,YAChB,MAAM,QAAQ,YAAY;AAAA;AAAA,EAAA,MACxB,QAAQ,WAAW,IAAI,QAAQ,CAAC,IAAI;AAE9C;AAGO,SAAS,oBACd,OACA,SACS;;AACT,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,YAAW,WAAM,aAAN,mBAAgB,OAAO;AACxC,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO;AAC/C,SAAO,SAAS,SAAS,OAAO;AAClC;"}
|
|
1
|
+
{"version":3,"file":"runtime-mode.js","sources":["../../../src/data/runtime/runtime-mode.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { UiCloud, UiColumns, UiRobotAi, UiTerminal } from \"../../icons\";\nimport type { JsonSchemaProperty } from \"../../components/json-schema-form-types\";\nimport type { ChatModel, RuntimeAvailability } from \"../chat/types\";\nimport {\n availabilityText,\n isSelectableModel,\n isUnavailable,\n unsupportedAvailability,\n} from \"./availability\";\n\n// A runtime has two independent axes: the model selects a provider family and\n// `spec.mode` selects api | agent | cli | cmux. The mode never contains a\n// provider name. This file used to call that axis `backend`, which is also what\n// captain called the composite adapter id it once served — so a value read from\n// one and posted back as the other type-checked and ran the wrong runtime.\n\nexport const SPEC_RUNTIME_MODES = [\"api\", \"agent\", \"cli\", \"cmux\"] as const;\nexport type SpecRuntimeMode = (typeof SPEC_RUNTIME_MODES)[number];\n\nexport function isSpecRuntimeMode(\n value: string | undefined,\n): value is SpecRuntimeMode {\n return SPEC_RUNTIME_MODES.some((mode) => mode === value);\n}\n\nexport function runtimeModeFromModel(\n model: string | undefined,\n): SpecRuntimeMode | undefined {\n const [prefix] = (model ?? \"\").trim().toLowerCase().split(\":\");\n return isSpecRuntimeMode(prefix) ? prefix : undefined;\n}\n\nexport function runtimeModelError(\n model: string | undefined,\n): string | undefined {\n for (const raw of (model ?? \"\").split(\",\")) {\n const compact = raw.trim();\n if (!compact || !compact.includes(\":\")) continue;\n const parts = compact.split(\":\").map((part) => part.trim());\n const [mode, name, effort] = parts;\n if (!isSpecRuntimeMode(mode)) {\n return `Invalid model configuration: mode ${JSON.stringify(mode)} in model ${JSON.stringify(compact)}. Expected api, agent, cli, or cmux.`;\n }\n if (!name || parts.length > 3) {\n return `Invalid model configuration: model ${JSON.stringify(compact)}. Expected mode:model[:effort].`;\n }\n if (\n effort !== undefined &&\n ![\"low\", \"medium\", \"high\", \"xhigh\", \"max\", \"ultra\"].includes(effort)\n ) {\n return `Invalid model configuration: effort ${JSON.stringify(effort)} in model ${JSON.stringify(compact)}.`;\n }\n }\n return undefined;\n}\n\nexport function runtimeModeError(\n families: SpecRuntimeFamily[],\n mode: string | undefined,\n familyId?: string | undefined,\n): string | undefined {\n if (!mode) return undefined;\n if (!isSpecRuntimeMode(mode)) {\n return `Invalid model configuration: mode ${JSON.stringify(mode)}. Expected api, agent, cli, or cmux.`;\n }\n const family = familyId\n ? families.find((entry) => entry.id === familyId)\n : undefined;\n if (family && !family.modes.some((entry) => entry.id === mode)) {\n return `Invalid model configuration: mode ${JSON.stringify(mode)} is not available for ${family.label}.`;\n }\n if (!families.some((entry) => entry.modes.some((m) => m.id === mode))) {\n return `Invalid model configuration: mode ${JSON.stringify(mode)} is missing from the runtime catalog.`;\n }\n return undefined;\n}\n\nexport type SpecRuntimeModeOption = {\n /** The canonical `spec.mode`: api | agent | cli | cmux. */\n id: string;\n label: string;\n icon?: StaticIconComponent | undefined;\n title?: string | undefined;\n provider?: string | undefined;\n defaultModel?: string | undefined;\n availability?: RuntimeAvailability | undefined;\n permissions?: RuntimePermissionCapabilities | undefined;\n schema?: RuntimeSpecSchema | undefined;\n};\n\nexport type RuntimeArgumentImplementation = \"mapped\" | \"managed\";\n\nexport type RuntimeArgumentMapping = {\n name: string;\n implementation: RuntimeArgumentImplementation;\n description?: string | undefined;\n};\n\nexport type RuntimeSpecSchema = JsonSchemaProperty & {\n \"x-clicky-arguments\"?: RuntimeArgumentMapping[] | undefined;\n \"x-clicky-managed-arguments\"?: RuntimeArgumentMapping[] | undefined;\n};\n\nexport type RuntimePermissionSupportKind =\n | \"native\"\n | \"approximated\"\n | \"requires-broker\"\n | \"unsupported\";\n\nexport type RuntimePermissionSupport = {\n kind: RuntimePermissionSupportKind;\n effects?:\n | {\n flag?: string | undefined;\n sandbox?: string | undefined;\n approval?: string | undefined;\n note?: string | undefined;\n }\n | undefined;\n};\n\nexport type RuntimePermissionCapabilities = {\n modes: Record<string, RuntimePermissionSupport>;\n toolPolicies: Record<string, Record<string, RuntimePermissionSupport>>;\n resources: Record<string, Record<string, RuntimePermissionSupport>>;\n tools?: string[] | undefined;\n};\n\nexport type SpecRuntimeFamily = {\n id: string;\n label: string;\n /** The model-catalog provider (`ChatModel.provider`) whose models this family runs. */\n provider: string;\n modes: SpecRuntimeModeOption[];\n};\n\n// Offline catalog for stories and tests. Live hosts should pass Captain's\n// registry projection; both use the same provider + mode structure.\nexport const SPEC_RUNTIME_FAMILIES: SpecRuntimeFamily[] = [\n {\n id: \"claude\",\n label: \"Claude\",\n provider: \"anthropic\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n icon: UiCloud,\n title: \"Anthropic API\",\n provider: \"anthropic\",\n },\n {\n id: \"agent\",\n label: \"Agent\",\n icon: UiRobotAi,\n title: \"Claude Agent SDK\",\n provider: \"anthropic\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n icon: UiTerminal,\n title: \"Claude Code CLI\",\n provider: \"anthropic\",\n },\n {\n id: \"cmux\",\n label: \"cmux\",\n icon: UiColumns,\n title: \"Claude multiplexer\",\n provider: \"anthropic\",\n },\n ],\n },\n {\n id: \"codex\",\n label: \"Codex\",\n provider: \"openai\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n icon: UiCloud,\n title: \"OpenAI API\",\n provider: \"openai\",\n },\n {\n id: \"agent\",\n label: \"Agent\",\n icon: UiRobotAi,\n title: \"Codex agent\",\n provider: \"openai\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n icon: UiTerminal,\n title: \"Codex CLI\",\n provider: \"openai\",\n },\n {\n id: \"cmux\",\n label: \"cmux\",\n icon: UiColumns,\n title: \"Codex multiplexer\",\n provider: \"openai\",\n },\n ],\n },\n {\n id: \"gemini\",\n label: \"Gemini\",\n provider: \"googleai\",\n modes: [\n { id: \"api\", label: \"API\", icon: UiCloud, title: \"Gemini API\" },\n { id: \"cli\", label: \"CLI\", icon: UiTerminal, title: \"Gemini CLI\" },\n ],\n },\n {\n id: \"deepseek\",\n label: \"DeepSeek\",\n provider: \"deepseek\",\n modes: [{ id: \"api\", label: \"API\", icon: UiCloud, title: \"DeepSeek API\" }],\n },\n];\n\n// One provider×mode cell as captain serves it (`/whoami`.runtimes and the prompt\n// schema document's `runtimes`), projected from its model registry. It carries\n// ids, not display text: `claude`/`api` are enough to render both, and a served\n// label would be a second place for presentation to drift.\nexport type RuntimeCatalogMode = {\n /** The canonical `spec.mode`: api | agent | cli | cmux. */\n mode: SpecRuntimeMode;\n /** \"api\" (remote, in-process) or \"cli\" (supervised local binary). */\n kind?: string | undefined;\n /** Rides the local CLI's own login; never consults an API key. */\n keyless?: boolean | undefined;\n /** The model id a picker should seed this mode with. */\n defaultModel?: string | undefined;\n /** The user switched this off in `~/.captain.yaml`. */\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n /** Model-catalog provider used by this exact mode. */\n catalogProvider?: string | undefined;\n availability?: RuntimeAvailability | undefined;\n permissions?: RuntimePermissionCapabilities | undefined;\n /** Supported Spec fields, annotated with native CLI and protocol bindings. */\n schema: RuntimeSpecSchema;\n};\n\nexport type RuntimeCatalogFamily = {\n /** The coding-agent name: claude | codex | gemini | deepseek. */\n family: string;\n /** The canonical provider key: anthropic | openai | google | deepseek. */\n provider: string;\n /** The namespace this provider's model ids carry (`ChatModel.provider`). */\n catalogPrefix: string;\n modes: RuntimeCatalogMode[];\n};\n\nconst MODE_ICONS: Record<string, StaticIconComponent> = {\n api: UiCloud,\n agent: UiRobotAi,\n cli: UiTerminal,\n cmux: UiColumns,\n};\n\n// Mode ids are lowercase tokens; only the acronyms and the lowercase brand\n// \"cmux\" need spelling out. `agent` falls through to plain title case.\nconst MODE_LABELS: Record<string, string> = {\n api: \"API\",\n cli: \"CLI\",\n cmux: \"cmux\",\n};\n\n// Tooltip text, so \"Claude cmux\" reads as \"Claude multiplexer\".\nconst MODE_TITLES: Record<string, string> = {\n api: \"API\",\n agent: \"Agent SDK\",\n cli: \"CLI\",\n cmux: \"multiplexer\",\n};\n\n// The one brand whose title case is not just an initial capital.\nconst FAMILY_LABELS: Record<string, string> = { deepseek: \"DeepSeek\" };\n\nfunction titleCase(token: string): string {\n return token ? token.charAt(0).toUpperCase() + token.slice(1) : token;\n}\n\n// Turns the served catalog into the shared family list. Unavailable entries\n// stay present for Provider Status while runtime controls filter them out.\n//\n// The registry has one provider per family, so Claude's API mode sits beside its\n// Agent/CLI/cmux modes here rather than in a separate \"Anthropic\" family the way\n// SPEC_RUNTIME_FAMILIES splits them.\nexport function familiesFromRuntimeCatalog(\n catalog: RuntimeCatalogFamily[] | undefined,\n): SpecRuntimeFamily[] {\n if (!catalog?.length) return SPEC_RUNTIME_FAMILIES;\n const families: SpecRuntimeFamily[] = [];\n for (const entry of catalog) {\n const label = FAMILY_LABELS[entry.family] ?? titleCase(entry.family);\n const modes = entry.modes.map((mode) => ({\n id: mode.mode,\n label: MODE_LABELS[mode.mode] ?? titleCase(mode.mode),\n icon: MODE_ICONS[mode.mode],\n title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`,\n provider: mode.catalogProvider ?? entry.catalogPrefix,\n ...(mode.defaultModel ? { defaultModel: mode.defaultModel } : {}),\n ...(mode.permissions ? { permissions: mode.permissions } : {}),\n ...(mode.schema ? { schema: mode.schema } : {}),\n ...(mode.availability\n ? { availability: mode.availability }\n : mode.disabled\n ? {\n availability: {\n state: \"disabled\" as const,\n reason: `Disabled by ${\n mode.disabledReason ?? mode.mode\n } in Captain configuration.`,\n remediation: `Enable ${\n mode.disabledReason ?? mode.mode\n } on the Whoami page, then refresh.`,\n },\n }\n : {}),\n }));\n families.push({\n id: entry.family,\n label,\n provider: entry.catalogPrefix,\n modes,\n });\n }\n return families.length ? families : SPEC_RUNTIME_FAMILIES;\n}\n\nexport function familyById(\n families: SpecRuntimeFamily[],\n id: string,\n): SpecRuntimeFamily {\n const match = families.find((family) => family.id === id);\n if (match) return match;\n const first = families[0];\n if (!first) throw new Error(\"SpecRuntimeFamily catalog must not be empty\");\n return first;\n}\n\nexport function firstMode(family: SpecRuntimeFamily): SpecRuntimeModeOption {\n const mode =\n family.modes.find((candidate) => !isUnavailable(candidate.availability)) ??\n family.modes[0];\n if (!mode) {\n throw new Error(\n `SpecRuntimeFamily \"${family.id}\" must have at least one mode`,\n );\n }\n return mode;\n}\n\n// Every mode id in the catalog, first-seen order. The entry returned for an id\n// belongs to the family that declared it first, so its presentation fields may\n// differ from another family's — the id itself is family-independent.\nexport function runtimeModeOptions(\n families: SpecRuntimeFamily[],\n): SpecRuntimeModeOption[] {\n const modes = new Map<string, SpecRuntimeModeOption>();\n for (const family of families) {\n for (const mode of family.modes) {\n if (!modes.has(mode.id)) modes.set(mode.id, mode);\n }\n }\n return [...modes.values()];\n}\n\n// One phrasing for \"this family does not offer that mode\", shared by every\n// runtime presentation so the same state never reads two ways.\nexport function unsupportedModeTitle(family: SpecRuntimeFamily): string {\n return availabilityText(\n unsupportedAvailability(\n family.label,\n \"this\",\n family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => mode.label),\n ),\n )!;\n}\n\nexport function unsupportedModeAvailability(\n family: SpecRuntimeFamily,\n mode: SpecRuntimeModeOption,\n): RuntimeAvailability {\n return unsupportedAvailability(\n family.label,\n mode.label,\n family.modes\n .filter((candidate) => !isUnavailable(candidate.availability))\n .map((candidate) => candidate.label),\n );\n}\n\n// The mode a family will actually run for a requested id, falling back to its\n// first available one. The answer is a `spec.mode` value.\nexport function modeForFamily(\n families: SpecRuntimeFamily[],\n familyId: string,\n modeId: string,\n): string {\n const family = familyById(families, familyId);\n const requested = family.modes.find((candidate) => candidate.id === modeId);\n const mode =\n requested && !isUnavailable(requested.availability)\n ? requested\n : firstMode(family);\n if (isUnavailable(mode.availability)) {\n throw new Error(\n `SpecRuntimeFamily \"${family.id}\" has no available runtime modes`,\n );\n }\n return mode.id;\n}\n\nexport function selectionForMode(\n families: SpecRuntimeFamily[],\n mode: string | undefined,\n preferredFamily?: string | undefined,\n): { family: string; mode: string } {\n const target = (mode ?? \"\").toLowerCase();\n const preferred = families.find((family) => family.id === preferredFamily);\n const preferredMode = preferred?.modes.find(\n (entry) => entry.id.toLowerCase() === target,\n );\n if (preferred && preferredMode) {\n return { family: preferred.id, mode: preferredMode.id };\n }\n for (const family of families) {\n for (const entry of family.modes) {\n if (entry.id.toLowerCase() === target) {\n return { family: family.id, mode: entry.id };\n }\n }\n }\n const first = familyById(families, \"\");\n return { family: first.id, mode: firstMode(first).id };\n}\n\nexport function familyForModel(\n families: SpecRuntimeFamily[],\n models: ChatModel[],\n modelId: string | undefined,\n): SpecRuntimeFamily | undefined {\n if (!modelId) return undefined;\n const selected = models.find(\n (model) =>\n model.id === modelId ||\n model.runtime?.model === modelId ||\n model.runtime?.id === modelId,\n );\n if (!selected) return undefined;\n return families.find(\n (family) =>\n family.provider === selected.provider ||\n family.modes.some((mode) => mode.provider === selected.provider),\n );\n}\n\nexport function selectionForRuntime(\n families: SpecRuntimeFamily[],\n mode: string | undefined,\n modelId: string | undefined,\n models: ChatModel[],\n preferredFamily?: string | undefined,\n): { family: string; mode: string } {\n return selectionForMode(\n families,\n mode,\n familyForModel(families, models, modelId)?.id ?? preferredFamily,\n );\n}\n\nexport function familyForMode(\n families: SpecRuntimeFamily[],\n mode: string | undefined,\n preferredFamily?: string | undefined,\n): SpecRuntimeFamily | undefined {\n if (preferredFamily) {\n const family = families.find((entry) => entry.id === preferredFamily);\n if (family?.modes.some((entry) => entry.id === mode)) return family;\n }\n const target = (mode ?? \"\").toLowerCase();\n return families.find((family) =>\n family.modes.some((entry) => entry.id.toLowerCase() === target),\n );\n}\n\n// The mode option a `spec.mode` names, or undefined when the catalog does not\n// declare it. Unlike `selectionForMode` this does not fall back to the first\n// family, so a summary can stay silent about a runtime it cannot identify.\nexport function modeOptionFor(\n families: SpecRuntimeFamily[],\n mode: string | undefined,\n preferredFamily?: string | undefined,\n): SpecRuntimeModeOption | undefined {\n const target = (mode ?? \"\").toLowerCase();\n if (!target) return undefined;\n const ordered = preferredFamily\n ? [\n ...families.filter((family) => family.id === preferredFamily),\n ...families.filter((family) => family.id !== preferredFamily),\n ]\n : families;\n for (const family of ordered) {\n const entry = family.modes.find(\n (candidate) => candidate.id.toLowerCase() === target,\n );\n if (entry) return entry;\n }\n return undefined;\n}\n\n// `mode` is provider-independent, so a family is needed for a full label.\nexport function labelForMode(\n mode: string | undefined,\n families: SpecRuntimeFamily[] = SPEC_RUNTIME_FAMILIES,\n): string {\n const target = (mode ?? \"\").toLowerCase();\n for (const family of families) {\n for (const entry of family.modes) {\n if (entry.id.toLowerCase() === target) {\n return `${family.label} ${entry.label}`;\n }\n }\n }\n return \"Prompt default\";\n}\n\n/** Lists selectable models for one provider family. */\nexport function modelsForFamily(\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n mode?: string | undefined,\n): ChatModel[] {\n if (!family) return models.filter(isSelectableModel);\n const provider =\n family.modes.find((entry) => entry.id === mode)?.provider ??\n family.provider;\n return models.filter(\n (model) => isSelectableModel(model) && model.provider === provider,\n );\n}\n\n/** Reports whether the first matching catalog identity belongs to the target family. */\nexport function modelBelongsToFamily(\n modelId: string | undefined,\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n mode?: string | undefined,\n): boolean {\n if (!modelId) return true;\n const selected = models.find(\n (model) =>\n isSelectableModel(model) &&\n (model.id === modelId ||\n model.runtime?.model === modelId ||\n model.runtime?.id === modelId),\n );\n if (!selected) return false;\n const provider =\n family?.modes.find((entry) => entry.id === mode)?.provider ??\n family?.provider;\n return (\n (!provider || selected.provider === provider) &&\n (!selected.runtime?.mode || selected.runtime.mode === mode)\n );\n}\n\n/** Resolves a target mode row, using a sole shared row as fallback. */\nexport function modelForFamily(\n modelId: string | undefined,\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n mode?: string | undefined,\n): ChatModel | undefined {\n if (!modelId) return undefined;\n const matches = modelsForFamily(models, family, mode).filter(\n (model) =>\n model.id === modelId ||\n model.runtime?.model === modelId ||\n model.runtime?.id === modelId,\n );\n return (\n matches.find(\n (model) => !mode || !model.runtime?.mode || model.runtime.mode === mode,\n ) ?? (matches.length === 1 ? matches[0] : undefined)\n );\n}\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const MAX_INLINE_SELECTION_ACTIONS = 3;
|
|
4
|
+
function resolveSelectionActionDisplay(action) {
|
|
5
|
+
var _a;
|
|
6
|
+
if (action.display) return action.display;
|
|
7
|
+
if (action.menu) return "menu";
|
|
8
|
+
if (action.primary === false) return "overflow";
|
|
9
|
+
if (action.section !== void 0) return "overflow";
|
|
10
|
+
if ((_a = action.children) == null ? void 0 : _a.length) return "overflow";
|
|
11
|
+
return "button";
|
|
12
|
+
}
|
|
13
|
+
function splitSelectionActions(actions, options) {
|
|
14
|
+
const menus = [];
|
|
15
|
+
const candidates = [];
|
|
16
|
+
for (const action of actions) {
|
|
17
|
+
const display = resolveSelectionActionDisplay(action);
|
|
18
|
+
if (display === "menu") menus.push(action);
|
|
19
|
+
else if (display === "button") candidates.push(action);
|
|
20
|
+
}
|
|
21
|
+
const pinned = candidates.filter((action) => action.primary);
|
|
22
|
+
const buttons = pinned.length ? pinned : candidates.slice(0, (options == null ? void 0 : options.maxButtons) ?? MAX_INLINE_SELECTION_ACTIONS);
|
|
23
|
+
const promoted = new Set([...menus, ...buttons].map((action) => action.id));
|
|
24
|
+
return {
|
|
25
|
+
menus,
|
|
26
|
+
buttons,
|
|
27
|
+
overflow: actions.filter((action) => !promoted.has(action.id))
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.MAX_INLINE_SELECTION_ACTIONS = MAX_INLINE_SELECTION_ACTIONS;
|
|
31
|
+
exports.resolveSelectionActionDisplay = resolveSelectionActionDisplay;
|
|
32
|
+
exports.splitSelectionActions = splitSelectionActions;
|
|
33
|
+
//# sourceMappingURL=selectionActionSplit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectionActionSplit.cjs","sources":["../../src/data/selectionActionSplit.ts"],"sourcesContent":["import type {\n DataTableSelectionAction,\n SelectionActionDisplay,\n} from \"./DataTable\";\n\n/**\n * How many plain buttons stay on the row before the rest collapse into the\n * overflow menu. Past three the toolbar starts wrapping on a laptop, and a\n * wrapped toolbar pushes the rows the actions apply to off the top of the\n * screen — the one thing this placement was for.\n *\n * Named dropdowns are not counted against it: they are what a bulk editor is,\n * and a caller that named one has already said the row has space for it.\n */\nexport const MAX_INLINE_SELECTION_ACTIONS = 3;\n\n/**\n * What shape the bar gives an action. `display` is the explicit answer; the\n * inferences below are what a caller means when it says nothing.\n *\n * A `section` is a menu heading and a `children` list is a flyout: both need a\n * menu to live in, and the overflow already is one. A custom `menu` body is the\n * opposite — it exists to be a named dropdown, so it says so on its own.\n */\nexport function resolveSelectionActionDisplay<\n T extends Record<string, unknown>,\n>(action: DataTableSelectionAction<T>): SelectionActionDisplay {\n if (action.display) return action.display;\n if (action.menu) return \"menu\";\n if (action.primary === false) return \"overflow\";\n if (action.section !== undefined) return \"overflow\";\n if (action.children?.length) return \"overflow\";\n return \"button\";\n}\n\nexport type SelectionActionSplit<T extends Record<string, unknown>> = {\n /** Named inline dropdowns, in caller order. Never capped. */\n menus: DataTableSelectionAction<T>[];\n /** Plain inline buttons, after `primary` and the cap have had their say. */\n buttons: DataTableSelectionAction<T>[];\n /** What the ⋯ menu keeps, grouped by section in first-appearance order. */\n overflow: DataTableSelectionAction<T>[];\n};\n\n/**\n * Splits bulk actions into the ones the toolbar shows and the ones the menu\n * keeps. `primary` is the explicit answer and position is the fallback.\n */\nexport function splitSelectionActions<T extends Record<string, unknown>>(\n actions: DataTableSelectionAction<T>[],\n options?: { maxButtons?: number | undefined },\n): SelectionActionSplit<T> {\n const menus: DataTableSelectionAction<T>[] = [];\n const candidates: DataTableSelectionAction<T>[] = [];\n\n for (const action of actions) {\n const display = resolveSelectionActionDisplay(action);\n if (display === \"menu\") menus.push(action);\n else if (display === \"button\") candidates.push(action);\n }\n\n // An explicit `primary` decides, and with none claimed position does, capped.\n // Only plain buttons are capped — dropdowns are the bar's whole point.\n const pinned = candidates.filter((action) => action.primary);\n const buttons = pinned.length\n ? pinned\n : candidates.slice(0, options?.maxButtons ?? MAX_INLINE_SELECTION_ACTIONS);\n\n // Whatever is left keeps the caller's order, because that is what the\n // overflow's contiguous section headings are grouped from.\n const promoted = new Set([...menus, ...buttons].map((action) => action.id));\n return {\n menus,\n buttons,\n overflow: actions.filter((action) => !promoted.has(action.id)),\n };\n}\n"],"names":[],"mappings":";;AAcO,MAAM,+BAA+B;AAUrC,SAAS,8BAEd,QAA6D;;AAC7D,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,MAAI,OAAO,KAAM,QAAO;AACxB,MAAI,OAAO,YAAY,MAAO,QAAO;AACrC,MAAI,OAAO,YAAY,OAAW,QAAO;AACzC,OAAI,YAAO,aAAP,mBAAiB,OAAQ,QAAO;AACpC,SAAO;AACT;AAeO,SAAS,sBACd,SACA,SACyB;AACzB,QAAM,QAAuC,CAAA;AAC7C,QAAM,aAA4C,CAAA;AAElD,aAAW,UAAU,SAAS;AAC5B,UAAM,UAAU,8BAA8B,MAAM;AACpD,QAAI,YAAY,OAAQ,OAAM,KAAK,MAAM;AAAA,aAChC,YAAY,SAAU,YAAW,KAAK,MAAM;AAAA,EACvD;AAIA,QAAM,SAAS,WAAW,OAAO,CAAC,WAAW,OAAO,OAAO;AAC3D,QAAM,UAAU,OAAO,SACnB,SACA,WAAW,MAAM,IAAG,mCAAS,eAAc,4BAA4B;AAI3E,QAAM,WAAW,IAAI,IAAI,CAAC,GAAG,OAAO,GAAG,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC;AAC1E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,QAAQ,OAAO,CAAC,WAAW,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC;AAAA,EAAA;AAEjE;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DataTableSelectionAction, SelectionActionDisplay } from './DataTable';
|
|
2
|
+
/**
|
|
3
|
+
* How many plain buttons stay on the row before the rest collapse into the
|
|
4
|
+
* overflow menu. Past three the toolbar starts wrapping on a laptop, and a
|
|
5
|
+
* wrapped toolbar pushes the rows the actions apply to off the top of the
|
|
6
|
+
* screen — the one thing this placement was for.
|
|
7
|
+
*
|
|
8
|
+
* Named dropdowns are not counted against it: they are what a bulk editor is,
|
|
9
|
+
* and a caller that named one has already said the row has space for it.
|
|
10
|
+
*/
|
|
11
|
+
export declare const MAX_INLINE_SELECTION_ACTIONS = 3;
|
|
12
|
+
/**
|
|
13
|
+
* What shape the bar gives an action. `display` is the explicit answer; the
|
|
14
|
+
* inferences below are what a caller means when it says nothing.
|
|
15
|
+
*
|
|
16
|
+
* A `section` is a menu heading and a `children` list is a flyout: both need a
|
|
17
|
+
* menu to live in, and the overflow already is one. A custom `menu` body is the
|
|
18
|
+
* opposite — it exists to be a named dropdown, so it says so on its own.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveSelectionActionDisplay<T extends Record<string, unknown>>(action: DataTableSelectionAction<T>): SelectionActionDisplay;
|
|
21
|
+
export type SelectionActionSplit<T extends Record<string, unknown>> = {
|
|
22
|
+
/** Named inline dropdowns, in caller order. Never capped. */
|
|
23
|
+
menus: DataTableSelectionAction<T>[];
|
|
24
|
+
/** Plain inline buttons, after `primary` and the cap have had their say. */
|
|
25
|
+
buttons: DataTableSelectionAction<T>[];
|
|
26
|
+
/** What the ⋯ menu keeps, grouped by section in first-appearance order. */
|
|
27
|
+
overflow: DataTableSelectionAction<T>[];
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Splits bulk actions into the ones the toolbar shows and the ones the menu
|
|
31
|
+
* keeps. `primary` is the explicit answer and position is the fallback.
|
|
32
|
+
*/
|
|
33
|
+
export declare function splitSelectionActions<T extends Record<string, unknown>>(actions: DataTableSelectionAction<T>[], options?: {
|
|
34
|
+
maxButtons?: number | undefined;
|
|
35
|
+
}): SelectionActionSplit<T>;
|
|
36
|
+
//# sourceMappingURL=selectionActionSplit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectionActionSplit.d.ts","sourceRoot":"","sources":["../../src/data/selectionActionSplit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAO7D;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACpE,6DAA6D;IAC7D,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,4EAA4E;IAC5E,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,EACtC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5C,oBAAoB,CAAC,CAAC,CAAC,CAyBzB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const MAX_INLINE_SELECTION_ACTIONS = 3;
|
|
2
|
+
function resolveSelectionActionDisplay(action) {
|
|
3
|
+
var _a;
|
|
4
|
+
if (action.display) return action.display;
|
|
5
|
+
if (action.menu) return "menu";
|
|
6
|
+
if (action.primary === false) return "overflow";
|
|
7
|
+
if (action.section !== void 0) return "overflow";
|
|
8
|
+
if ((_a = action.children) == null ? void 0 : _a.length) return "overflow";
|
|
9
|
+
return "button";
|
|
10
|
+
}
|
|
11
|
+
function splitSelectionActions(actions, options) {
|
|
12
|
+
const menus = [];
|
|
13
|
+
const candidates = [];
|
|
14
|
+
for (const action of actions) {
|
|
15
|
+
const display = resolveSelectionActionDisplay(action);
|
|
16
|
+
if (display === "menu") menus.push(action);
|
|
17
|
+
else if (display === "button") candidates.push(action);
|
|
18
|
+
}
|
|
19
|
+
const pinned = candidates.filter((action) => action.primary);
|
|
20
|
+
const buttons = pinned.length ? pinned : candidates.slice(0, (options == null ? void 0 : options.maxButtons) ?? MAX_INLINE_SELECTION_ACTIONS);
|
|
21
|
+
const promoted = new Set([...menus, ...buttons].map((action) => action.id));
|
|
22
|
+
return {
|
|
23
|
+
menus,
|
|
24
|
+
buttons,
|
|
25
|
+
overflow: actions.filter((action) => !promoted.has(action.id))
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
MAX_INLINE_SELECTION_ACTIONS,
|
|
30
|
+
resolveSelectionActionDisplay,
|
|
31
|
+
splitSelectionActions
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=selectionActionSplit.js.map
|