@flanksource/clicky-ui 0.3.16 → 0.3.18
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/dist/ai.cjs +12 -6
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +10 -4
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +36 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +37 -1
- package/dist/chat.js.map +1 -1
- package/dist/components/Combobox.cjs +122 -153
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +124 -155
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxControl.cjs +145 -0
- package/dist/components/ComboboxControl.cjs.map +1 -0
- package/dist/components/ComboboxControl.d.ts +37 -0
- package/dist/components/ComboboxControl.d.ts.map +1 -0
- package/dist/components/ComboboxControl.js +145 -0
- package/dist/components/ComboboxControl.js.map +1 -0
- package/dist/components/ComboboxMenu.cjs +31 -14
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +31 -14
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ComboboxTags.cjs +40 -0
- package/dist/components/ComboboxTags.cjs.map +1 -0
- package/dist/components/ComboboxTags.d.ts +8 -0
- package/dist/components/ComboboxTags.d.ts.map +1 -0
- package/dist/components/ComboboxTags.js +40 -0
- package/dist/components/ComboboxTags.js.map +1 -0
- package/dist/components/ErrorWrapper.cjs +168 -0
- package/dist/components/ErrorWrapper.cjs.map +1 -0
- package/dist/components/ErrorWrapper.d.ts +19 -0
- package/dist/components/ErrorWrapper.d.ts.map +1 -0
- package/dist/components/ErrorWrapper.js +168 -0
- package/dist/components/ErrorWrapper.js.map +1 -0
- package/dist/components/FilterBar.cjs +64 -2
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +18 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +64 -2
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JSONPathField.cjs +91 -0
- package/dist/components/JSONPathField.cjs.map +1 -0
- package/dist/components/JSONPathField.d.ts +19 -0
- package/dist/components/JSONPathField.d.ts.map +1 -0
- package/dist/components/JSONPathField.js +91 -0
- package/dist/components/JSONPathField.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +8 -4
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +8 -4
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/TreePickerField.cjs +22 -4
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +22 -2
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +22 -4
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/TriStateToggle.cjs +53 -0
- package/dist/components/TriStateToggle.cjs.map +1 -0
- package/dist/components/TriStateToggle.d.ts +27 -0
- package/dist/components/TriStateToggle.d.ts.map +1 -0
- package/dist/components/TriStateToggle.js +53 -0
- package/dist/components/TriStateToggle.js.map +1 -0
- package/dist/components/combobox-types.d.ts +16 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/combobox-utils.cjs +26 -0
- package/dist/components/combobox-utils.cjs.map +1 -1
- package/dist/components/combobox-utils.d.ts +10 -0
- package/dist/components/combobox-utils.d.ts.map +1 -1
- package/dist/components/combobox-utils.js +26 -0
- package/dist/components/combobox-utils.js.map +1 -1
- package/dist/components/filter-bar-utils.cjs +5 -0
- package/dist/components/filter-bar-utils.cjs.map +1 -1
- package/dist/components/filter-bar-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-utils.js +5 -0
- package/dist/components/filter-bar-utils.js.map +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +290 -0
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
- package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-accordion-array.js +290 -0
- package/dist/components/json-schema-form-accordion-array.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +99 -110
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +98 -109
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-error-display.cjs +4 -2
- package/dist/components/json-schema-form-error-display.cjs.map +1 -1
- package/dist/components/json-schema-form-error-display.d.ts +4 -2
- package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
- package/dist/components/json-schema-form-error-display.js +4 -2
- package/dist/components/json-schema-form-error-display.js.map +1 -1
- package/dist/components/json-schema-form-extensions.cjs +10 -0
- package/dist/components/json-schema-form-extensions.cjs.map +1 -0
- package/dist/components/json-schema-form-extensions.d.ts +8 -0
- package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
- package/dist/components/json-schema-form-extensions.js +10 -0
- package/dist/components/json-schema-form-extensions.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +25 -101
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +1 -32
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +28 -104
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +131 -0
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
- package/dist/components/json-schema-form-item-summary.d.ts +13 -0
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
- package/dist/components/json-schema-form-item-summary.js +131 -0
- package/dist/components/json-schema-form-item-summary.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +156 -0
- package/dist/components/json-schema-form-layout.cjs.map +1 -0
- package/dist/components/json-schema-form-layout.d.ts +43 -0
- package/dist/components/json-schema-form-layout.d.ts.map +1 -0
- package/dist/components/json-schema-form-layout.js +156 -0
- package/dist/components/json-schema-form-layout.js.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
- package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
- package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.js +149 -0
- package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +11 -4
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +11 -4
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +51 -28
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +51 -28
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +62 -13
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts +1 -0
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +62 -13
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-table-array.cjs +123 -0
- package/dist/components/json-schema-form-table-array.cjs.map +1 -0
- package/dist/components/json-schema-form-table-array.d.ts +7 -0
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-table-array.js +123 -0
- package/dist/components/json-schema-form-table-array.js.map +1 -0
- package/dist/components/json-schema-form-tone.cjs +34 -0
- package/dist/components/json-schema-form-tone.cjs.map +1 -0
- package/dist/components/json-schema-form-tone.d.ts +8 -0
- package/dist/components/json-schema-form-tone.d.ts.map +1 -0
- package/dist/components/json-schema-form-tone.js +34 -0
- package/dist/components/json-schema-form-tone.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +79 -10
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +47 -4
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +19 -4
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +47 -4
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/tri-state.cjs +8 -0
- package/dist/components/tri-state.cjs.map +1 -0
- package/dist/components/tri-state.d.ts +5 -0
- package/dist/components/tri-state.d.ts.map +1 -0
- package/dist/components/tri-state.js +8 -0
- package/dist/components/tri-state.js.map +1 -0
- package/dist/components/useComboboxLayout.cjs +59 -0
- package/dist/components/useComboboxLayout.cjs.map +1 -0
- package/dist/components/useComboboxLayout.d.ts +5 -0
- package/dist/components/useComboboxLayout.d.ts.map +1 -0
- package/dist/components/useComboboxLayout.js +59 -0
- package/dist/components/useComboboxLayout.js.map +1 -0
- package/dist/components.cjs +21 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +14 -4
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +22 -1
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +51 -2
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +10 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +51 -2
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +215 -63
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +65 -3
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +215 -63
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/LogsTable.cjs +10 -1
- package/dist/data/LogsTable.cjs.map +1 -1
- package/dist/data/LogsTable.d.ts +3 -1
- package/dist/data/LogsTable.d.ts.map +1 -1
- package/dist/data/LogsTable.js +10 -1
- package/dist/data/LogsTable.js.map +1 -1
- package/dist/data/ServerTimingBadge.cjs +64 -0
- package/dist/data/ServerTimingBadge.cjs.map +1 -0
- package/dist/data/ServerTimingBadge.d.ts +9 -0
- package/dist/data/ServerTimingBadge.d.ts.map +1 -0
- package/dist/data/ServerTimingBadge.js +64 -0
- package/dist/data/ServerTimingBadge.js.map +1 -0
- package/dist/data/TaskManager.cjs +99 -14
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +100 -15
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskProgress.cjs +50 -11
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +2 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +50 -11
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.js +289 -0
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
- package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
- package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.js +120 -0
- package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
- package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
- package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.js +74 -0
- package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
- package/dist/data/ai/ChatWindow.cjs +86 -100
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +88 -102
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.runtime.js +120 -0
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
- package/dist/data/ai/ChatWindow.thread-status.cjs +14 -0
- package/dist/data/ai/ChatWindow.thread-status.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.thread-status.d.ts +5 -0
- package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.thread-status.js +14 -0
- package/dist/data/ai/ChatWindow.thread-status.js.map +1 -0
- package/dist/data/ai/ChatWindow.thread.cjs +68 -0
- package/dist/data/ai/ChatWindow.thread.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.thread.d.ts +16 -0
- package/dist/data/ai/ChatWindow.thread.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.thread.js +68 -0
- package/dist/data/ai/ChatWindow.thread.js.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +13 -5
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +3 -1
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +3 -1
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +101 -89
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +6 -10
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +103 -91
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +47 -0
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -0
- package/dist/data/ai/PromptRunEditor/model.d.ts +17 -0
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -0
- package/dist/data/ai/PromptRunEditor/model.js +47 -0
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -0
- package/dist/data/ai/RuntimeModePicker.cjs +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +1 -1
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SessionInspector.files.cjs +26 -43
- package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.files.js +26 -43
- package/dist/data/ai/SessionInspector.files.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 +1 -1
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.model.js +1 -1
- package/dist/data/ai/SessionInspector.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +17 -9
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.header.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.js +17 -9
- package/dist/data/ai/SessionViewer.header.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +2 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +4 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +2 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +4 -16
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +4 -16
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +1 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +65 -3
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.d.ts +13 -5
- package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
- package/dist/data/ai/ThreadPicker.js +65 -3
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +65 -685
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +15 -17
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +64 -683
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +148 -0
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
- package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
- package/dist/data/ai/ToolPreferences.model.js +148 -0
- package/dist/data/ai/ToolPreferences.model.js.map +1 -0
- package/dist/data/ai/ToolPreferencesList.cjs +270 -0
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
- package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
- package/dist/data/ai/ToolPreferencesList.js +270 -0
- package/dist/data/ai/ToolPreferencesList.js.map +1 -0
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +4 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -0
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +4 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +7 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/session-tones.cjs +67 -0
- package/dist/data/ai/session-tones.cjs.map +1 -0
- package/dist/data/ai/session-tones.d.ts +34 -0
- package/dist/data/ai/session-tones.d.ts.map +1 -0
- package/dist/data/ai/session-tones.js +67 -0
- package/dist/data/ai/session-tones.js.map +1 -0
- package/dist/data/ai/thread-costs.cjs +39 -0
- package/dist/data/ai/thread-costs.cjs.map +1 -0
- package/dist/data/ai/thread-costs.d.ts +62 -0
- package/dist/data/ai/thread-costs.d.ts.map +1 -0
- package/dist/data/ai/thread-costs.js +39 -0
- package/dist/data/ai/thread-costs.js.map +1 -0
- package/dist/data/cells/CellFilterActions.cjs +68 -0
- package/dist/data/cells/CellFilterActions.cjs.map +1 -0
- package/dist/data/cells/CellFilterActions.d.ts +15 -0
- package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
- package/dist/data/cells/CellFilterActions.js +68 -0
- package/dist/data/cells/CellFilterActions.js.map +1 -0
- package/dist/data/chat/Chat.cjs +192 -80
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +24 -4
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +48 -3
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.d.ts +1 -1
- package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +48 -3
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +195 -83
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +63 -0
- package/dist/data/chat/Chat.runtime.cjs.map +1 -0
- package/dist/data/chat/Chat.runtime.d.ts +16 -0
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
- package/dist/data/chat/Chat.runtime.js +63 -0
- package/dist/data/chat/Chat.runtime.js.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
- package/dist/data/chat/ContextMeter.cjs +144 -73
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +8 -3
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +144 -73
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +86 -24
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +12 -5
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +86 -24
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/approval.cjs +64 -0
- package/dist/data/chat/approval.cjs.map +1 -0
- package/dist/data/chat/approval.d.ts +18 -0
- package/dist/data/chat/approval.d.ts.map +1 -0
- package/dist/data/chat/approval.js +64 -0
- package/dist/data/chat/approval.js.map +1 -0
- package/dist/data/chat/index.d.ts +5 -3
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
- package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
- package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolArgs.js +50 -0
- package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
- package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
- package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.js +155 -0
- package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
- package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
- package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.js +140 -0
- package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
- package/dist/data/chat/tool-render/adapter.cjs +48 -0
- package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
- package/dist/data/chat/tool-render/adapter.d.ts +57 -0
- package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
- package/dist/data/chat/tool-render/adapter.js +48 -0
- package/dist/data/chat/tool-render/adapter.js.map +1 -0
- package/dist/data/chat/tool-render/context.cjs +16 -0
- package/dist/data/chat/tool-render/context.cjs.map +1 -0
- package/dist/data/chat/tool-render/context.d.ts +6 -0
- package/dist/data/chat/tool-render/context.d.ts.map +1 -0
- package/dist/data/chat/tool-render/context.js +16 -0
- package/dist/data/chat/tool-render/context.js.map +1 -0
- package/dist/data/chat/tool-render/defaults.cjs +45 -0
- package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
- package/dist/data/chat/tool-render/defaults.d.ts +11 -0
- package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
- package/dist/data/chat/tool-render/defaults.js +45 -0
- package/dist/data/chat/tool-render/defaults.js.map +1 -0
- package/dist/data/chat/tool-render/index.d.ts +13 -0
- package/dist/data/chat/tool-render/index.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
- package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
- package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.js +208 -0
- package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
- package/dist/data/chat/tool-render/known-tools.cjs +58 -0
- package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
- package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
- package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tools.js +58 -0
- package/dist/data/chat/tool-render/known-tools.js.map +1 -0
- package/dist/data/chat/tool-render/normalize.cjs +42 -0
- package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
- package/dist/data/chat/tool-render/normalize.d.ts +13 -0
- package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
- package/dist/data/chat/tool-render/normalize.js +42 -0
- package/dist/data/chat/tool-render/normalize.js.map +1 -0
- package/dist/data/chat/tool-render/registry.cjs +14 -0
- package/dist/data/chat/tool-render/registry.cjs.map +1 -0
- package/dist/data/chat/tool-render/registry.d.ts +7 -0
- package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
- package/dist/data/chat/tool-render/registry.js +14 -0
- package/dist/data/chat/tool-render/registry.js.map +1 -0
- package/dist/data/chat/tool-render/schema.cjs +57 -0
- package/dist/data/chat/tool-render/schema.cjs.map +1 -0
- package/dist/data/chat/tool-render/schema.d.ts +28 -0
- package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
- package/dist/data/chat/tool-render/schema.js +57 -0
- package/dist/data/chat/tool-render/schema.js.map +1 -0
- package/dist/data/chat/tool-render/shape.cjs +94 -0
- package/dist/data/chat/tool-render/shape.cjs.map +1 -0
- package/dist/data/chat/tool-render/shape.d.ts +39 -0
- package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
- package/dist/data/chat/tool-render/shape.js +94 -0
- package/dist/data/chat/tool-render/shape.js.map +1 -0
- package/dist/data/chat/tool-render/summary.cjs +34 -0
- package/dist/data/chat/tool-render/summary.cjs.map +1 -0
- package/dist/data/chat/tool-render/summary.d.ts +8 -0
- package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
- package/dist/data/chat/tool-render/summary.js +34 -0
- package/dist/data/chat/tool-render/summary.js.map +1 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +19 -0
- 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 +17 -0
- package/dist/data/chat/usage-snapshot.cjs.map +1 -0
- package/dist/data/chat/usage-snapshot.d.ts +21 -0
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
- package/dist/data/chat/usage-snapshot.js +17 -0
- package/dist/data/chat/usage-snapshot.js.map +1 -0
- package/dist/data/data-table-filter-values.cjs +83 -0
- package/dist/data/data-table-filter-values.cjs.map +1 -0
- package/dist/data/data-table-filter-values.d.ts +18 -0
- package/dist/data/data-table-filter-values.d.ts.map +1 -0
- package/dist/data/data-table-filter-values.js +83 -0
- package/dist/data/data-table-filter-values.js.map +1 -0
- package/dist/data/data-table-server-filters.cjs +171 -0
- package/dist/data/data-table-server-filters.cjs.map +1 -0
- package/dist/data/data-table-server-filters.d.ts +128 -0
- package/dist/data/data-table-server-filters.d.ts.map +1 -0
- package/dist/data/data-table-server-filters.js +171 -0
- package/dist/data/data-table-server-filters.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.cjs +96 -19
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts +37 -6
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.js +96 -19
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/index.d.ts +1 -1
- package/dist/data/query-browser/index.d.ts.map +1 -1
- package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
- package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
- package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
- package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
- package/dist/data/runtime/ProviderStatusPanel.js +187 -0
- package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.cjs +147 -0
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.d.ts +22 -0
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.js +147 -0
- package/dist/data/runtime/RuntimeBar.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.cjs +14 -0
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.d.ts +10 -0
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.js +14 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
- package/dist/data/runtime/RuntimeBarCombo.cjs +354 -0
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarCombo.d.ts +23 -0
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBarCombo.js +354 -0
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
- package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +93 -87
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
- package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +96 -90
- package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
- package/dist/data/runtime/availability.cjs +11 -0
- package/dist/data/runtime/availability.cjs.map +1 -0
- package/dist/data/runtime/availability.d.ts +6 -0
- package/dist/data/runtime/availability.d.ts.map +1 -0
- package/dist/data/runtime/availability.js +11 -0
- package/dist/data/runtime/availability.js.map +1 -0
- package/dist/data/{ai → runtime}/model-capabilities.cjs +12 -1
- package/dist/data/runtime/model-capabilities.cjs.map +1 -0
- package/dist/data/{ai → runtime}/model-capabilities.d.ts +2 -6
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/model-capabilities.js +12 -1
- package/dist/data/runtime/model-capabilities.js.map +1 -0
- package/dist/data/runtime/provider-status.cjs +106 -0
- package/dist/data/runtime/provider-status.cjs.map +1 -0
- package/dist/data/runtime/provider-status.d.ts +24 -0
- package/dist/data/runtime/provider-status.d.ts.map +1 -0
- package/dist/data/runtime/provider-status.js +106 -0
- package/dist/data/runtime/provider-status.js.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.cjs +123 -22
- package/dist/data/runtime/runtime-mode.cjs.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.d.ts +8 -1
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.js +123 -22
- package/dist/data/runtime/runtime-mode.js.map +1 -0
- package/dist/data/server-timing.cjs +120 -0
- package/dist/data/server-timing.cjs.map +1 -0
- package/dist/data/server-timing.d.ts +11 -0
- package/dist/data/server-timing.d.ts.map +1 -0
- package/dist/data/server-timing.js +120 -0
- package/dist/data/server-timing.js.map +1 -0
- package/dist/data/task-query-keys.cjs +26 -0
- package/dist/data/task-query-keys.cjs.map +1 -0
- package/dist/data/task-query-keys.d.ts +27 -0
- package/dist/data/task-query-keys.d.ts.map +1 -0
- package/dist/data/task-query-keys.js +26 -0
- package/dist/data/task-query-keys.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +23 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +8 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +23 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-hotkey.cjs +6 -1
- package/dist/hooks/use-hotkey.cjs.map +1 -1
- package/dist/hooks/use-hotkey.d.ts.map +1 -1
- package/dist/hooks/use-hotkey.js +6 -1
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +7 -4
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts +12 -0
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +7 -4
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +692 -0
- package/dist/icons/registry.cjs.map +1 -0
- package/dist/icons/registry.d.ts +21 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/icons/registry.js +692 -0
- package/dist/icons/registry.js.map +1 -0
- package/dist/icons.cjs +3 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +4 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +54 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +56 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +93 -57
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +49 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +93 -57
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +144 -19
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts +6 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +144 -19
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +23 -7
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +3 -1
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +23 -7
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/lib/format.cjs +86 -4
- package/dist/lib/format.cjs.map +1 -1
- package/dist/lib/format.d.ts +69 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +86 -4
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/path-tree.cjs +69 -0
- package/dist/lib/path-tree.cjs.map +1 -0
- package/dist/lib/path-tree.d.ts +54 -0
- package/dist/lib/path-tree.d.ts.map +1 -0
- package/dist/lib/path-tree.js +69 -0
- package/dist/lib/path-tree.js.map +1 -0
- package/dist/monaco.d.ts +1 -0
- package/dist/monaco.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.js +13 -7
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
- package/dist/overlay/HoverCard.cjs.map +1 -1
- package/dist/overlay/HoverCard.d.ts +2 -2
- package/dist/overlay/HoverCard.d.ts.map +1 -1
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Tour.cjs +173 -0
- package/dist/overlay/Tour.cjs.map +1 -0
- package/dist/overlay/Tour.d.ts +61 -0
- package/dist/overlay/Tour.d.ts.map +1 -0
- package/dist/overlay/Tour.js +173 -0
- package/dist/overlay/Tour.js.map +1 -0
- package/dist/overlay/TourCard.cjs +108 -0
- package/dist/overlay/TourCard.cjs.map +1 -0
- package/dist/overlay/TourCard.d.ts +23 -0
- package/dist/overlay/TourCard.d.ts.map +1 -0
- package/dist/overlay/TourCard.js +108 -0
- package/dist/overlay/TourCard.js.map +1 -0
- package/dist/overlay/TourProvider.cjs +160 -0
- package/dist/overlay/TourProvider.cjs.map +1 -0
- package/dist/overlay/TourProvider.d.ts +31 -0
- package/dist/overlay/TourProvider.d.ts.map +1 -0
- package/dist/overlay/TourProvider.js +160 -0
- package/dist/overlay/TourProvider.js.map +1 -0
- package/dist/overlay/TourSpotlight.cjs +47 -0
- package/dist/overlay/TourSpotlight.cjs.map +1 -0
- package/dist/overlay/TourSpotlight.d.ts +12 -0
- package/dist/overlay/TourSpotlight.d.ts.map +1 -0
- package/dist/overlay/TourSpotlight.js +47 -0
- package/dist/overlay/TourSpotlight.js.map +1 -0
- package/dist/overlay/modalStack.cjs +18 -4
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +10 -2
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +19 -5
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/tour-anchor.cjs +114 -0
- package/dist/overlay/tour-anchor.cjs.map +1 -0
- package/dist/overlay/tour-anchor.d.ts +30 -0
- package/dist/overlay/tour-anchor.d.ts.map +1 -0
- package/dist/overlay/tour-anchor.js +114 -0
- package/dist/overlay/tour-anchor.js.map +1 -0
- package/dist/overlay/tour-context.cjs +12 -0
- package/dist/overlay/tour-context.cjs.map +1 -0
- package/dist/overlay/tour-context.d.ts +40 -0
- package/dist/overlay/tour-context.d.ts.map +1 -0
- package/dist/overlay/tour-context.js +12 -0
- package/dist/overlay/tour-context.js.map +1 -0
- package/dist/overlay/tour-geometry.cjs +65 -0
- package/dist/overlay/tour-geometry.cjs.map +1 -0
- package/dist/overlay/tour-geometry.d.ts +47 -0
- package/dist/overlay/tour-geometry.d.ts.map +1 -0
- package/dist/overlay/tour-geometry.js +65 -0
- package/dist/overlay/tour-geometry.js.map +1 -0
- package/dist/overlay/tour-model.cjs +79 -0
- package/dist/overlay/tour-model.cjs.map +1 -0
- package/dist/overlay/tour-model.d.ts +29 -0
- package/dist/overlay/tour-model.d.ts.map +1 -0
- package/dist/overlay/tour-model.js +79 -0
- package/dist/overlay/tour-model.js.map +1 -0
- package/dist/overlay/tour-progress.cjs +54 -0
- package/dist/overlay/tour-progress.cjs.map +1 -0
- package/dist/overlay/tour-progress.d.ts +40 -0
- package/dist/overlay/tour-progress.d.ts.map +1 -0
- package/dist/overlay/tour-progress.js +54 -0
- package/dist/overlay/tour-progress.js.map +1 -0
- package/dist/overlay/tour-types.d.ts +144 -0
- package/dist/overlay/tour-types.d.ts.map +1 -0
- package/dist/overlay/use-tour-anchor.cjs +43 -0
- package/dist/overlay/use-tour-anchor.cjs.map +1 -0
- package/dist/overlay/use-tour-anchor.d.ts +23 -0
- package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
- package/dist/overlay/use-tour-anchor.js +43 -0
- package/dist/overlay/use-tour-anchor.js.map +1 -0
- package/dist/overlay/use-tour-rect.cjs +33 -0
- package/dist/overlay/use-tour-rect.cjs.map +1 -0
- package/dist/overlay/use-tour-rect.d.ts +12 -0
- package/dist/overlay/use-tour-rect.d.ts.map +1 -0
- package/dist/overlay/use-tour-rect.js +33 -0
- package/dist/overlay/use-tour-rect.js.map +1 -0
- package/dist/overlay/use-tour-step.cjs +66 -0
- package/dist/overlay/use-tour-step.cjs.map +1 -0
- package/dist/overlay/use-tour-step.d.ts +45 -0
- package/dist/overlay/use-tour-step.d.ts.map +1 -0
- package/dist/overlay/use-tour-step.js +66 -0
- package/dist/overlay/use-tour-step.js.map +1 -0
- package/dist/overlay/zIndex.cjs +8 -0
- package/dist/overlay/zIndex.cjs.map +1 -1
- package/dist/overlay/zIndex.d.ts +8 -0
- package/dist/overlay/zIndex.d.ts.map +1 -1
- package/dist/overlay/zIndex.js +8 -0
- package/dist/overlay/zIndex.js.map +1 -1
- package/dist/rpc/CommandOutput.cjs +8 -0
- package/dist/rpc/CommandOutput.cjs.map +1 -1
- package/dist/rpc/CommandOutput.d.ts +4 -1
- package/dist/rpc/CommandOutput.d.ts.map +1 -1
- package/dist/rpc/CommandOutput.js +8 -0
- package/dist/rpc/CommandOutput.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +10 -16
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +10 -16
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +1 -1
- package/dist/rpc/OperationActionBar.cjs.map +1 -1
- package/dist/rpc/OperationActionBar.js +1 -1
- package/dist/rpc/OperationActionBar.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +111 -58
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +1 -6
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +112 -59
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +44 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +8 -1
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +44 -0
- package/dist/rpc/OperationResultView.js.map +1 -1
- package/dist/rpc/SchemaActionForm.cjs +2 -21
- package/dist/rpc/SchemaActionForm.cjs.map +1 -1
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
- package/dist/rpc/SchemaActionForm.js +3 -22
- package/dist/rpc/SchemaActionForm.js.map +1 -1
- package/dist/rpc/apiClient.cjs +16 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +16 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +89 -49
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +14 -6
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +87 -47
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/operationFilterSearch.cjs +23 -0
- package/dist/rpc/operationFilterSearch.cjs.map +1 -0
- package/dist/rpc/operationFilterSearch.d.ts +22 -0
- package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
- package/dist/rpc/operationFilterSearch.js +23 -0
- package/dist/rpc/operationFilterSearch.js.map +1 -0
- package/dist/rpc/operationLookupFetcher.cjs +28 -0
- package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
- package/dist/rpc/operationLookupFetcher.d.ts +17 -0
- package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
- package/dist/rpc/operationLookupFetcher.js +28 -0
- package/dist/rpc/operationLookupFetcher.js.map +1 -0
- package/dist/rpc/surfaceNav.cjs +77 -0
- package/dist/rpc/surfaceNav.cjs.map +1 -0
- package/dist/rpc/surfaceNav.d.ts +19 -0
- package/dist/rpc/surfaceNav.d.ts.map +1 -0
- package/dist/rpc/surfaceNav.js +77 -0
- package/dist/rpc/surfaceNav.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +12 -1
- 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 +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -0
- package/dist/tailwind-preset.cjs.map +1 -1
- package/dist/tailwind-preset.d.ts.map +1 -1
- package/dist/tailwind-preset.js +4 -0
- package/dist/tailwind-preset.js.map +1 -1
- package/dist/utils.cjs +8 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -2
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/data/ai/RuntimeBar.cjs.map +0 -1
- package/dist/data/ai/RuntimeBar.d.ts +0 -27
- package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBar.js.map +0 -1
- package/dist/data/ai/model-capabilities.cjs.map +0 -1
- package/dist/data/ai/model-capabilities.d.ts.map +0 -1
- package/dist/data/ai/model-capabilities.js.map +0 -1
- package/dist/data/ai/runtime-mode.cjs.map +0 -1
- package/dist/data/ai/runtime-mode.d.ts.map +0 -1
- package/dist/data/ai/runtime-mode.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isUnavailable, isSelectableModel } from "./availability.js";
|
|
1
2
|
import { UiRobotAi } from "../../icons/components/UiRobotAi.js";
|
|
2
3
|
import { UiTerminal } from "../../icons/components/UiTerminal.js";
|
|
3
4
|
import { UiColumns } from "../../icons/components/UiColumns.js";
|
|
@@ -8,9 +9,27 @@ const SPEC_RUNTIME_FAMILIES = [
|
|
|
8
9
|
label: "Claude",
|
|
9
10
|
provider: "claude-agent",
|
|
10
11
|
modes: [
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
{
|
|
13
|
+
id: "agent",
|
|
14
|
+
label: "Agent",
|
|
15
|
+
backend: "claude-agent",
|
|
16
|
+
icon: UiRobotAi,
|
|
17
|
+
title: "Claude Agent SDK"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: "cli",
|
|
21
|
+
label: "CLI",
|
|
22
|
+
backend: "claude-cli",
|
|
23
|
+
icon: UiTerminal,
|
|
24
|
+
title: "Claude Code CLI"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "cmux",
|
|
28
|
+
label: "cmux",
|
|
29
|
+
backend: "claude-cmux",
|
|
30
|
+
icon: UiColumns,
|
|
31
|
+
title: "Claude multiplexer"
|
|
32
|
+
}
|
|
14
33
|
]
|
|
15
34
|
},
|
|
16
35
|
{
|
|
@@ -18,37 +37,91 @@ const SPEC_RUNTIME_FAMILIES = [
|
|
|
18
37
|
label: "Codex",
|
|
19
38
|
provider: "codex-cli",
|
|
20
39
|
modes: [
|
|
21
|
-
{
|
|
22
|
-
|
|
23
|
-
|
|
40
|
+
{
|
|
41
|
+
id: "agent",
|
|
42
|
+
label: "Agent",
|
|
43
|
+
backend: "codex-agent",
|
|
44
|
+
icon: UiRobotAi,
|
|
45
|
+
title: "Codex agent"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: "cli",
|
|
49
|
+
label: "CLI",
|
|
50
|
+
backend: "codex-cli",
|
|
51
|
+
icon: UiTerminal,
|
|
52
|
+
title: "Codex CLI"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "cmux",
|
|
56
|
+
label: "cmux",
|
|
57
|
+
backend: "codex-cmux",
|
|
58
|
+
icon: UiColumns,
|
|
59
|
+
title: "Codex multiplexer"
|
|
60
|
+
}
|
|
24
61
|
]
|
|
25
62
|
},
|
|
26
63
|
{
|
|
27
64
|
id: "openai",
|
|
28
65
|
label: "OpenAI",
|
|
29
66
|
provider: "openai",
|
|
30
|
-
modes: [
|
|
67
|
+
modes: [
|
|
68
|
+
{
|
|
69
|
+
id: "api",
|
|
70
|
+
label: "API",
|
|
71
|
+
backend: "openai",
|
|
72
|
+
icon: UiCloud,
|
|
73
|
+
title: "OpenAI API"
|
|
74
|
+
}
|
|
75
|
+
]
|
|
31
76
|
},
|
|
32
77
|
{
|
|
33
78
|
id: "anthropic",
|
|
34
79
|
label: "Anthropic",
|
|
35
80
|
provider: "anthropic",
|
|
36
|
-
modes: [
|
|
81
|
+
modes: [
|
|
82
|
+
{
|
|
83
|
+
id: "api",
|
|
84
|
+
label: "API",
|
|
85
|
+
backend: "anthropic",
|
|
86
|
+
icon: UiCloud,
|
|
87
|
+
title: "Anthropic API"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
37
90
|
},
|
|
38
91
|
{
|
|
39
92
|
id: "gemini",
|
|
40
93
|
label: "Gemini",
|
|
41
94
|
provider: "googleai",
|
|
42
95
|
modes: [
|
|
43
|
-
{
|
|
44
|
-
|
|
96
|
+
{
|
|
97
|
+
id: "api",
|
|
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
|
+
}
|
|
45
110
|
]
|
|
46
111
|
},
|
|
47
112
|
{
|
|
48
113
|
id: "deepseek",
|
|
49
114
|
label: "DeepSeek",
|
|
50
115
|
provider: "deepseek",
|
|
51
|
-
modes: [
|
|
116
|
+
modes: [
|
|
117
|
+
{
|
|
118
|
+
id: "api",
|
|
119
|
+
label: "API",
|
|
120
|
+
backend: "deepseek",
|
|
121
|
+
icon: UiCloud,
|
|
122
|
+
title: "DeepSeek API"
|
|
123
|
+
}
|
|
124
|
+
]
|
|
52
125
|
}
|
|
53
126
|
];
|
|
54
127
|
const MODE_ICONS = {
|
|
@@ -57,7 +130,11 @@ const MODE_ICONS = {
|
|
|
57
130
|
cli: UiTerminal,
|
|
58
131
|
cmux: UiColumns
|
|
59
132
|
};
|
|
60
|
-
const MODE_LABELS = {
|
|
133
|
+
const MODE_LABELS = {
|
|
134
|
+
api: "API",
|
|
135
|
+
cli: "CLI",
|
|
136
|
+
cmux: "cmux"
|
|
137
|
+
};
|
|
61
138
|
const MODE_TITLES = {
|
|
62
139
|
api: "API",
|
|
63
140
|
agent: "Agent SDK",
|
|
@@ -73,14 +150,21 @@ function familiesFromRuntimeCatalog(catalog) {
|
|
|
73
150
|
const families = [];
|
|
74
151
|
for (const entry of catalog) {
|
|
75
152
|
const label = FAMILY_LABELS[entry.family] ?? titleCase(entry.family);
|
|
76
|
-
const modes = entry.modes.
|
|
153
|
+
const modes = entry.modes.map((mode) => ({
|
|
77
154
|
id: mode.mode,
|
|
78
155
|
label: MODE_LABELS[mode.mode] ?? titleCase(mode.mode),
|
|
79
156
|
backend: mode.backend,
|
|
80
157
|
icon: MODE_ICONS[mode.mode],
|
|
81
|
-
title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}
|
|
158
|
+
title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`,
|
|
159
|
+
provider: mode.catalogProvider ?? entry.catalogPrefix,
|
|
160
|
+
...mode.availability ? { availability: mode.availability } : mode.disabled ? {
|
|
161
|
+
availability: {
|
|
162
|
+
state: "disabled",
|
|
163
|
+
reason: `Disabled by ${mode.disabledReason ?? mode.backend} in Captain configuration.`,
|
|
164
|
+
remediation: `Enable ${mode.disabledReason ?? mode.backend} on the Whoami page, then refresh.`
|
|
165
|
+
}
|
|
166
|
+
} : {}
|
|
82
167
|
}));
|
|
83
|
-
if (!modes.length) continue;
|
|
84
168
|
families.push({
|
|
85
169
|
id: entry.family,
|
|
86
170
|
label,
|
|
@@ -98,9 +182,11 @@ function familyById(families, id) {
|
|
|
98
182
|
return first;
|
|
99
183
|
}
|
|
100
184
|
function firstMode(family) {
|
|
101
|
-
const mode = family.modes[0];
|
|
185
|
+
const mode = family.modes.find((candidate) => !isUnavailable(candidate.availability)) ?? family.modes[0];
|
|
102
186
|
if (!mode) {
|
|
103
|
-
throw new Error(
|
|
187
|
+
throw new Error(
|
|
188
|
+
`SpecRuntimeFamily "${family.id}" must have at least one mode`
|
|
189
|
+
);
|
|
104
190
|
}
|
|
105
191
|
return mode;
|
|
106
192
|
}
|
|
@@ -115,7 +201,13 @@ function runtimeModeOptions(families) {
|
|
|
115
201
|
}
|
|
116
202
|
function backendForFamilyMode(families, familyId, modeId) {
|
|
117
203
|
const family = familyById(families, familyId);
|
|
118
|
-
const
|
|
204
|
+
const requested = family.modes.find((candidate) => candidate.id === modeId);
|
|
205
|
+
const mode = requested && !isUnavailable(requested.availability) ? requested : firstMode(family);
|
|
206
|
+
if (isUnavailable(mode.availability)) {
|
|
207
|
+
throw new Error(
|
|
208
|
+
`SpecRuntimeFamily "${family.id}" has no available runtime modes`
|
|
209
|
+
);
|
|
210
|
+
}
|
|
119
211
|
return mode.backend;
|
|
120
212
|
}
|
|
121
213
|
function selectionForBackend(families, backend) {
|
|
@@ -159,16 +251,25 @@ function labelForBackend(backend, families = SPEC_RUNTIME_FAMILIES) {
|
|
|
159
251
|
return "Prompt default";
|
|
160
252
|
}
|
|
161
253
|
function modelsForFamily(models, family, backend) {
|
|
162
|
-
|
|
254
|
+
var _a;
|
|
255
|
+
if (!family) return models.filter(isSelectableModel);
|
|
256
|
+
const provider = ((_a = family.modes.find((mode) => mode.backend === backend)) == null ? void 0 : _a.provider) ?? family.provider;
|
|
163
257
|
return models.filter(
|
|
164
|
-
(model) => model.provider ===
|
|
258
|
+
(model) => isSelectableModel(model) && model.provider === provider && modelMatchesBackend(model, backend)
|
|
165
259
|
);
|
|
166
260
|
}
|
|
167
261
|
function modelBelongsToFamily(modelId, models, family, backend) {
|
|
262
|
+
var _a;
|
|
168
263
|
if (!modelId) return true;
|
|
169
|
-
const selected = models.find(
|
|
264
|
+
const selected = models.find(
|
|
265
|
+
(model) => {
|
|
266
|
+
var _a2, _b;
|
|
267
|
+
return isSelectableModel(model) && (model.id === modelId || ((_a2 = model.runtime) == null ? void 0 : _a2.model) === modelId || ((_b = model.runtime) == null ? void 0 : _b.id) === modelId);
|
|
268
|
+
}
|
|
269
|
+
);
|
|
170
270
|
if (!selected) return false;
|
|
171
|
-
const
|
|
271
|
+
const provider = ((_a = family == null ? void 0 : family.modes.find((mode) => mode.backend === backend)) == null ? void 0 : _a.provider) ?? (family == null ? void 0 : family.provider);
|
|
272
|
+
const providerMatches = !provider || selected.provider === provider;
|
|
172
273
|
return providerMatches && modelMatchesBackend(selected, backend);
|
|
173
274
|
}
|
|
174
275
|
function modelMatchesBackend(model, backend) {
|
|
@@ -0,0 +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\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\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\nfunction 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":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const METRIC_LABELS = {
|
|
4
|
+
total: "Total",
|
|
5
|
+
command: "Command",
|
|
6
|
+
format: "Format response",
|
|
7
|
+
sql: "SQL",
|
|
8
|
+
redis: "Redis"
|
|
9
|
+
};
|
|
10
|
+
const COUNTER_LABELS = {
|
|
11
|
+
queries: ["query", "queries"],
|
|
12
|
+
rows_returned: ["row returned", "rows returned"],
|
|
13
|
+
rows_scanned: ["row scanned", "rows scanned"],
|
|
14
|
+
ops: ["operation", "operations"],
|
|
15
|
+
hits: ["hit", "hits"],
|
|
16
|
+
misses: ["miss", "misses"],
|
|
17
|
+
errors: ["error", "errors"]
|
|
18
|
+
};
|
|
19
|
+
function splitOutsideQuotes(value, delimiter) {
|
|
20
|
+
const parts = [];
|
|
21
|
+
let start = 0;
|
|
22
|
+
let quoted = false;
|
|
23
|
+
let escaped = false;
|
|
24
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
25
|
+
const character = value[index];
|
|
26
|
+
if (escaped) {
|
|
27
|
+
escaped = false;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (quoted && character === "\\") {
|
|
31
|
+
escaped = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (character === '"') {
|
|
35
|
+
quoted = !quoted;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (!quoted && character === delimiter) {
|
|
39
|
+
parts.push(value.slice(start, index).trim());
|
|
40
|
+
start = index + 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
parts.push(value.slice(start).trim());
|
|
44
|
+
return parts.filter(Boolean);
|
|
45
|
+
}
|
|
46
|
+
function decodeParameterValue(value) {
|
|
47
|
+
if (!value.startsWith('"') || !value.endsWith('"')) return value;
|
|
48
|
+
return value.slice(1, -1).replace(/\\(["\\])/g, "$1");
|
|
49
|
+
}
|
|
50
|
+
function parseCounters(description) {
|
|
51
|
+
if (!description) return {};
|
|
52
|
+
const counters = {};
|
|
53
|
+
const pattern = /(?:^|\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\d+(?:\.\d+)?)(?=\s|$)/g;
|
|
54
|
+
for (const match of description.matchAll(pattern)) {
|
|
55
|
+
const name = match[1];
|
|
56
|
+
const rawValue = match[2];
|
|
57
|
+
if (!name || !rawValue) continue;
|
|
58
|
+
const value = Number(rawValue);
|
|
59
|
+
if (Number.isFinite(value)) counters[name] = value;
|
|
60
|
+
}
|
|
61
|
+
return counters;
|
|
62
|
+
}
|
|
63
|
+
function humanize(value) {
|
|
64
|
+
const words = value.replace(/[_-]+/g, " ").trim();
|
|
65
|
+
return words ? words[0].toUpperCase() + words.slice(1) : value;
|
|
66
|
+
}
|
|
67
|
+
function parseServerTiming(header) {
|
|
68
|
+
if (!(header == null ? void 0 : header.trim())) return [];
|
|
69
|
+
return splitOutsideQuotes(header, ",").flatMap((entry) => {
|
|
70
|
+
const tokens = splitOutsideQuotes(entry, ";");
|
|
71
|
+
const name = tokens[0];
|
|
72
|
+
if (!name) return [];
|
|
73
|
+
let duration = 0;
|
|
74
|
+
let description;
|
|
75
|
+
let durationSeen = false;
|
|
76
|
+
for (const token of tokens.slice(1)) {
|
|
77
|
+
const separator = token.indexOf("=");
|
|
78
|
+
if (separator < 0) continue;
|
|
79
|
+
const key = token.slice(0, separator).trim().toLowerCase();
|
|
80
|
+
const value = decodeParameterValue(token.slice(separator + 1).trim());
|
|
81
|
+
if (key === "desc" && description === void 0) description = value;
|
|
82
|
+
if (key === "dur" && !durationSeen) {
|
|
83
|
+
durationSeen = true;
|
|
84
|
+
const parsed = Number(value);
|
|
85
|
+
if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return [{
|
|
89
|
+
name,
|
|
90
|
+
duration,
|
|
91
|
+
counters: parseCounters(description),
|
|
92
|
+
...description !== void 0 ? { description } : {}
|
|
93
|
+
}];
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function formatServerTimingDuration(milliseconds) {
|
|
97
|
+
if (milliseconds >= 1e3) return `${(milliseconds / 1e3).toFixed(1)} s`;
|
|
98
|
+
if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;
|
|
99
|
+
return `${Math.round(milliseconds)} ms`;
|
|
100
|
+
}
|
|
101
|
+
function serverTimingMetricLabel(metric) {
|
|
102
|
+
if (metric.description && Object.keys(metric.counters).length === 0) {
|
|
103
|
+
return metric.description;
|
|
104
|
+
}
|
|
105
|
+
return METRIC_LABELS[metric.name] ?? humanize(metric.name);
|
|
106
|
+
}
|
|
107
|
+
function serverTimingCounterSummary(metric) {
|
|
108
|
+
const counters = Object.entries(metric.counters);
|
|
109
|
+
if (counters.length === 0) return void 0;
|
|
110
|
+
return counters.map(([name, value]) => {
|
|
111
|
+
const labels = COUNTER_LABELS[name];
|
|
112
|
+
const label = (labels == null ? void 0 : labels[Math.abs(value) === 1 ? 0 : 1]) ?? humanize(name).toLowerCase();
|
|
113
|
+
return `${value.toLocaleString("en-US")} ${label}`;
|
|
114
|
+
}).join(" · ");
|
|
115
|
+
}
|
|
116
|
+
exports.formatServerTimingDuration = formatServerTimingDuration;
|
|
117
|
+
exports.parseServerTiming = parseServerTiming;
|
|
118
|
+
exports.serverTimingCounterSummary = serverTimingCounterSummary;
|
|
119
|
+
exports.serverTimingMetricLabel = serverTimingMetricLabel;
|
|
120
|
+
//# sourceMappingURL=server-timing.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-timing.cjs","sources":["../../src/data/server-timing.ts"],"sourcesContent":["export interface ServerTimingMetric {\n name: string;\n duration: number;\n description?: string;\n counters: Record<string, number>;\n}\n\nconst METRIC_LABELS: Record<string, string> = {\n total: \"Total\",\n command: \"Command\",\n format: \"Format response\",\n sql: \"SQL\",\n redis: \"Redis\",\n};\n\nconst COUNTER_LABELS: Record<string, readonly [singular: string, plural: string]> = {\n queries: [\"query\", \"queries\"],\n rows_returned: [\"row returned\", \"rows returned\"],\n rows_scanned: [\"row scanned\", \"rows scanned\"],\n ops: [\"operation\", \"operations\"],\n hits: [\"hit\", \"hits\"],\n misses: [\"miss\", \"misses\"],\n errors: [\"error\", \"errors\"],\n};\n\nfunction splitOutsideQuotes(value: string, delimiter: \",\" | \";\"): string[] {\n const parts: string[] = [];\n let start = 0;\n let quoted = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (quoted && character === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (character === '\"') {\n quoted = !quoted;\n continue;\n }\n if (!quoted && character === delimiter) {\n parts.push(value.slice(start, index).trim());\n start = index + 1;\n }\n }\n parts.push(value.slice(start).trim());\n return parts.filter(Boolean);\n}\n\nfunction decodeParameterValue(value: string): string {\n if (!value.startsWith('\"') || !value.endsWith('\"')) return value;\n return value.slice(1, -1).replace(/\\\\([\"\\\\])/g, \"$1\");\n}\n\nfunction parseCounters(description: string | undefined): Record<string, number> {\n if (!description) return {};\n const counters: Record<string, number> = {};\n const pattern = /(?:^|\\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\\d+(?:\\.\\d+)?)(?=\\s|$)/g;\n for (const match of description.matchAll(pattern)) {\n const name = match[1];\n const rawValue = match[2];\n if (!name || !rawValue) continue;\n const value = Number(rawValue);\n if (Number.isFinite(value)) counters[name] = value;\n }\n return counters;\n}\n\nfunction humanize(value: string): string {\n const words = value.replace(/[_-]+/g, \" \").trim();\n return words ? words[0]!.toUpperCase() + words.slice(1) : value;\n}\n\nexport function parseServerTiming(\n header: string | null | undefined,\n): ServerTimingMetric[] {\n if (!header?.trim()) return [];\n return splitOutsideQuotes(header, \",\").flatMap((entry) => {\n const tokens = splitOutsideQuotes(entry, \";\");\n const name = tokens[0];\n if (!name) return [];\n let duration = 0;\n let description: string | undefined;\n let durationSeen = false;\n for (const token of tokens.slice(1)) {\n const separator = token.indexOf(\"=\");\n if (separator < 0) continue;\n const key = token.slice(0, separator).trim().toLowerCase();\n const value = decodeParameterValue(token.slice(separator + 1).trim());\n // Server-Timing keeps the first instance of a duplicated parameter name\n // within one metric and ignores the rest.\n if (key === \"desc\" && description === undefined) description = value;\n if (key === \"dur\" && !durationSeen) {\n durationSeen = true;\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;\n }\n }\n return [{\n name,\n duration,\n counters: parseCounters(description),\n ...(description !== undefined ? { description } : {}),\n }];\n });\n}\n\nexport function formatServerTimingDuration(milliseconds: number): string {\n if (milliseconds >= 1000) return `${(milliseconds / 1000).toFixed(1)} s`;\n if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;\n return `${Math.round(milliseconds)} ms`;\n}\n\nexport function serverTimingMetricLabel(metric: ServerTimingMetric): string {\n if (metric.description && Object.keys(metric.counters).length === 0) {\n return metric.description;\n }\n return METRIC_LABELS[metric.name] ?? humanize(metric.name);\n}\n\nexport function serverTimingCounterSummary(metric: ServerTimingMetric): string | undefined {\n const counters = Object.entries(metric.counters);\n if (counters.length === 0) return undefined;\n return counters\n .map(([name, value]) => {\n const labels = COUNTER_LABELS[name];\n const label = labels?.[Math.abs(value) === 1 ? 0 : 1] ?? humanize(name).toLowerCase();\n return `${value.toLocaleString(\"en-US\")} ${label}`;\n })\n .join(\" · \");\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ServerTimingMetric {
|
|
2
|
+
name: string;
|
|
3
|
+
duration: number;
|
|
4
|
+
description?: string;
|
|
5
|
+
counters: Record<string, number>;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseServerTiming(header: string | null | undefined): ServerTimingMetric[];
|
|
8
|
+
export declare function formatServerTimingDuration(milliseconds: number): string;
|
|
9
|
+
export declare function serverTimingMetricLabel(metric: ServerTimingMetric): string;
|
|
10
|
+
export declare function serverTimingCounterSummary(metric: ServerTimingMetric): string | undefined;
|
|
11
|
+
//# sourceMappingURL=server-timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-timing.d.ts","sourceRoot":"","sources":["../../src/data/server-timing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAyED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,kBAAkB,EAAE,CA8BtB;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAK1E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAUzF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
const METRIC_LABELS = {
|
|
2
|
+
total: "Total",
|
|
3
|
+
command: "Command",
|
|
4
|
+
format: "Format response",
|
|
5
|
+
sql: "SQL",
|
|
6
|
+
redis: "Redis"
|
|
7
|
+
};
|
|
8
|
+
const COUNTER_LABELS = {
|
|
9
|
+
queries: ["query", "queries"],
|
|
10
|
+
rows_returned: ["row returned", "rows returned"],
|
|
11
|
+
rows_scanned: ["row scanned", "rows scanned"],
|
|
12
|
+
ops: ["operation", "operations"],
|
|
13
|
+
hits: ["hit", "hits"],
|
|
14
|
+
misses: ["miss", "misses"],
|
|
15
|
+
errors: ["error", "errors"]
|
|
16
|
+
};
|
|
17
|
+
function splitOutsideQuotes(value, delimiter) {
|
|
18
|
+
const parts = [];
|
|
19
|
+
let start = 0;
|
|
20
|
+
let quoted = false;
|
|
21
|
+
let escaped = false;
|
|
22
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
23
|
+
const character = value[index];
|
|
24
|
+
if (escaped) {
|
|
25
|
+
escaped = false;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (quoted && character === "\\") {
|
|
29
|
+
escaped = true;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (character === '"') {
|
|
33
|
+
quoted = !quoted;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (!quoted && character === delimiter) {
|
|
37
|
+
parts.push(value.slice(start, index).trim());
|
|
38
|
+
start = index + 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
parts.push(value.slice(start).trim());
|
|
42
|
+
return parts.filter(Boolean);
|
|
43
|
+
}
|
|
44
|
+
function decodeParameterValue(value) {
|
|
45
|
+
if (!value.startsWith('"') || !value.endsWith('"')) return value;
|
|
46
|
+
return value.slice(1, -1).replace(/\\(["\\])/g, "$1");
|
|
47
|
+
}
|
|
48
|
+
function parseCounters(description) {
|
|
49
|
+
if (!description) return {};
|
|
50
|
+
const counters = {};
|
|
51
|
+
const pattern = /(?:^|\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\d+(?:\.\d+)?)(?=\s|$)/g;
|
|
52
|
+
for (const match of description.matchAll(pattern)) {
|
|
53
|
+
const name = match[1];
|
|
54
|
+
const rawValue = match[2];
|
|
55
|
+
if (!name || !rawValue) continue;
|
|
56
|
+
const value = Number(rawValue);
|
|
57
|
+
if (Number.isFinite(value)) counters[name] = value;
|
|
58
|
+
}
|
|
59
|
+
return counters;
|
|
60
|
+
}
|
|
61
|
+
function humanize(value) {
|
|
62
|
+
const words = value.replace(/[_-]+/g, " ").trim();
|
|
63
|
+
return words ? words[0].toUpperCase() + words.slice(1) : value;
|
|
64
|
+
}
|
|
65
|
+
function parseServerTiming(header) {
|
|
66
|
+
if (!(header == null ? void 0 : header.trim())) return [];
|
|
67
|
+
return splitOutsideQuotes(header, ",").flatMap((entry) => {
|
|
68
|
+
const tokens = splitOutsideQuotes(entry, ";");
|
|
69
|
+
const name = tokens[0];
|
|
70
|
+
if (!name) return [];
|
|
71
|
+
let duration = 0;
|
|
72
|
+
let description;
|
|
73
|
+
let durationSeen = false;
|
|
74
|
+
for (const token of tokens.slice(1)) {
|
|
75
|
+
const separator = token.indexOf("=");
|
|
76
|
+
if (separator < 0) continue;
|
|
77
|
+
const key = token.slice(0, separator).trim().toLowerCase();
|
|
78
|
+
const value = decodeParameterValue(token.slice(separator + 1).trim());
|
|
79
|
+
if (key === "desc" && description === void 0) description = value;
|
|
80
|
+
if (key === "dur" && !durationSeen) {
|
|
81
|
+
durationSeen = true;
|
|
82
|
+
const parsed = Number(value);
|
|
83
|
+
if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return [{
|
|
87
|
+
name,
|
|
88
|
+
duration,
|
|
89
|
+
counters: parseCounters(description),
|
|
90
|
+
...description !== void 0 ? { description } : {}
|
|
91
|
+
}];
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function formatServerTimingDuration(milliseconds) {
|
|
95
|
+
if (milliseconds >= 1e3) return `${(milliseconds / 1e3).toFixed(1)} s`;
|
|
96
|
+
if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;
|
|
97
|
+
return `${Math.round(milliseconds)} ms`;
|
|
98
|
+
}
|
|
99
|
+
function serverTimingMetricLabel(metric) {
|
|
100
|
+
if (metric.description && Object.keys(metric.counters).length === 0) {
|
|
101
|
+
return metric.description;
|
|
102
|
+
}
|
|
103
|
+
return METRIC_LABELS[metric.name] ?? humanize(metric.name);
|
|
104
|
+
}
|
|
105
|
+
function serverTimingCounterSummary(metric) {
|
|
106
|
+
const counters = Object.entries(metric.counters);
|
|
107
|
+
if (counters.length === 0) return void 0;
|
|
108
|
+
return counters.map(([name, value]) => {
|
|
109
|
+
const labels = COUNTER_LABELS[name];
|
|
110
|
+
const label = (labels == null ? void 0 : labels[Math.abs(value) === 1 ? 0 : 1]) ?? humanize(name).toLowerCase();
|
|
111
|
+
return `${value.toLocaleString("en-US")} ${label}`;
|
|
112
|
+
}).join(" · ");
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
formatServerTimingDuration,
|
|
116
|
+
parseServerTiming,
|
|
117
|
+
serverTimingCounterSummary,
|
|
118
|
+
serverTimingMetricLabel
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=server-timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-timing.js","sources":["../../src/data/server-timing.ts"],"sourcesContent":["export interface ServerTimingMetric {\n name: string;\n duration: number;\n description?: string;\n counters: Record<string, number>;\n}\n\nconst METRIC_LABELS: Record<string, string> = {\n total: \"Total\",\n command: \"Command\",\n format: \"Format response\",\n sql: \"SQL\",\n redis: \"Redis\",\n};\n\nconst COUNTER_LABELS: Record<string, readonly [singular: string, plural: string]> = {\n queries: [\"query\", \"queries\"],\n rows_returned: [\"row returned\", \"rows returned\"],\n rows_scanned: [\"row scanned\", \"rows scanned\"],\n ops: [\"operation\", \"operations\"],\n hits: [\"hit\", \"hits\"],\n misses: [\"miss\", \"misses\"],\n errors: [\"error\", \"errors\"],\n};\n\nfunction splitOutsideQuotes(value: string, delimiter: \",\" | \";\"): string[] {\n const parts: string[] = [];\n let start = 0;\n let quoted = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (quoted && character === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (character === '\"') {\n quoted = !quoted;\n continue;\n }\n if (!quoted && character === delimiter) {\n parts.push(value.slice(start, index).trim());\n start = index + 1;\n }\n }\n parts.push(value.slice(start).trim());\n return parts.filter(Boolean);\n}\n\nfunction decodeParameterValue(value: string): string {\n if (!value.startsWith('\"') || !value.endsWith('\"')) return value;\n return value.slice(1, -1).replace(/\\\\([\"\\\\])/g, \"$1\");\n}\n\nfunction parseCounters(description: string | undefined): Record<string, number> {\n if (!description) return {};\n const counters: Record<string, number> = {};\n const pattern = /(?:^|\\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\\d+(?:\\.\\d+)?)(?=\\s|$)/g;\n for (const match of description.matchAll(pattern)) {\n const name = match[1];\n const rawValue = match[2];\n if (!name || !rawValue) continue;\n const value = Number(rawValue);\n if (Number.isFinite(value)) counters[name] = value;\n }\n return counters;\n}\n\nfunction humanize(value: string): string {\n const words = value.replace(/[_-]+/g, \" \").trim();\n return words ? words[0]!.toUpperCase() + words.slice(1) : value;\n}\n\nexport function parseServerTiming(\n header: string | null | undefined,\n): ServerTimingMetric[] {\n if (!header?.trim()) return [];\n return splitOutsideQuotes(header, \",\").flatMap((entry) => {\n const tokens = splitOutsideQuotes(entry, \";\");\n const name = tokens[0];\n if (!name) return [];\n let duration = 0;\n let description: string | undefined;\n let durationSeen = false;\n for (const token of tokens.slice(1)) {\n const separator = token.indexOf(\"=\");\n if (separator < 0) continue;\n const key = token.slice(0, separator).trim().toLowerCase();\n const value = decodeParameterValue(token.slice(separator + 1).trim());\n // Server-Timing keeps the first instance of a duplicated parameter name\n // within one metric and ignores the rest.\n if (key === \"desc\" && description === undefined) description = value;\n if (key === \"dur\" && !durationSeen) {\n durationSeen = true;\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;\n }\n }\n return [{\n name,\n duration,\n counters: parseCounters(description),\n ...(description !== undefined ? { description } : {}),\n }];\n });\n}\n\nexport function formatServerTimingDuration(milliseconds: number): string {\n if (milliseconds >= 1000) return `${(milliseconds / 1000).toFixed(1)} s`;\n if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;\n return `${Math.round(milliseconds)} ms`;\n}\n\nexport function serverTimingMetricLabel(metric: ServerTimingMetric): string {\n if (metric.description && Object.keys(metric.counters).length === 0) {\n return metric.description;\n }\n return METRIC_LABELS[metric.name] ?? humanize(metric.name);\n}\n\nexport function serverTimingCounterSummary(metric: ServerTimingMetric): string | undefined {\n const counters = Object.entries(metric.counters);\n if (counters.length === 0) return undefined;\n return counters\n .map(([name, value]) => {\n const labels = COUNTER_LABELS[name];\n const label = labels?.[Math.abs(value) === 1 ? 0 : 1] ?? humanize(name).toLowerCase();\n return `${value.toLocaleString(\"en-US\")} ${label}`;\n })\n .join(\" · \");\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const taskQueryKeys = {
|
|
4
|
+
runs: ({ basePath, kind, status, labels }) => [
|
|
5
|
+
"tasks",
|
|
6
|
+
"runs",
|
|
7
|
+
{
|
|
8
|
+
basePath: basePath ?? "/api/v1",
|
|
9
|
+
kind: kind ?? "",
|
|
10
|
+
status: status ?? "",
|
|
11
|
+
labels: Object.entries(labels ?? {}).sort(([left], [right]) => left.localeCompare(right))
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
run: ({ basePath, runId }) => [
|
|
15
|
+
"tasks",
|
|
16
|
+
"run",
|
|
17
|
+
{ basePath: basePath ?? "/api/v1", runId }
|
|
18
|
+
],
|
|
19
|
+
control: ({ basePath, runId }) => [
|
|
20
|
+
"tasks",
|
|
21
|
+
"control",
|
|
22
|
+
{ basePath: basePath ?? "/api/v1", runId }
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
exports.taskQueryKeys = taskQueryKeys;
|
|
26
|
+
//# sourceMappingURL=task-query-keys.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-query-keys.cjs","sources":["../../src/data/task-query-keys.ts"],"sourcesContent":["export interface TaskRunsQueryKeyOptions {\n basePath?: string | undefined;\n kind?: string | undefined;\n status?: string | undefined;\n labels?: Record<string, string> | undefined;\n}\n\nexport interface TaskRunQueryKeyOptions {\n basePath?: string | undefined;\n runId: string;\n}\n\nexport const taskQueryKeys = {\n runs: ({ basePath, kind, status, labels }: TaskRunsQueryKeyOptions) => [\n \"tasks\",\n \"runs\",\n {\n basePath: basePath ?? \"/api/v1\",\n kind: kind ?? \"\",\n status: status ?? \"\",\n labels: Object.entries(labels ?? {}).sort(([left], [right]) => left.localeCompare(right)),\n },\n ] as const,\n run: ({ basePath, runId }: TaskRunQueryKeyOptions) => [\n \"tasks\",\n \"run\",\n { basePath: basePath ?? \"/api/v1\", runId },\n ] as const,\n control: ({ basePath, runId }: TaskRunQueryKeyOptions) => [\n \"tasks\",\n \"control\",\n { basePath: basePath ?? \"/api/v1\", runId },\n ] as const,\n};\n"],"names":[],"mappings":";;AAYO,MAAM,gBAAgB;AAAA,EAC3B,MAAM,CAAC,EAAE,UAAU,MAAM,QAAQ,aAAsC;AAAA,IACrE;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAU,YAAY;AAAA,MACtB,MAAM,QAAQ;AAAA,MACd,QAAQ,UAAU;AAAA,MAClB,QAAQ,OAAO,QAAQ,UAAU,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA,IAAA;AAAA,EAC1F;AAAA,EAEF,KAAK,CAAC,EAAE,UAAU,YAAoC;AAAA,IACpD;AAAA,IACA;AAAA,IACA,EAAE,UAAU,YAAY,WAAW,MAAA;AAAA,EAAM;AAAA,EAE3C,SAAS,CAAC,EAAE,UAAU,YAAoC;AAAA,IACxD;AAAA,IACA;AAAA,IACA,EAAE,UAAU,YAAY,WAAW,MAAA;AAAA,EAAM;AAE7C;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface TaskRunsQueryKeyOptions {
|
|
2
|
+
basePath?: string | undefined;
|
|
3
|
+
kind?: string | undefined;
|
|
4
|
+
status?: string | undefined;
|
|
5
|
+
labels?: Record<string, string> | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface TaskRunQueryKeyOptions {
|
|
8
|
+
basePath?: string | undefined;
|
|
9
|
+
runId: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const taskQueryKeys: {
|
|
12
|
+
runs: ({ basePath, kind, status, labels }: TaskRunsQueryKeyOptions) => readonly ["tasks", "runs", {
|
|
13
|
+
readonly basePath: string;
|
|
14
|
+
readonly kind: string;
|
|
15
|
+
readonly status: string;
|
|
16
|
+
readonly labels: [string, string][];
|
|
17
|
+
}];
|
|
18
|
+
run: ({ basePath, runId }: TaskRunQueryKeyOptions) => readonly ["tasks", "run", {
|
|
19
|
+
readonly basePath: string;
|
|
20
|
+
readonly runId: string;
|
|
21
|
+
}];
|
|
22
|
+
control: ({ basePath, runId }: TaskRunQueryKeyOptions) => readonly ["tasks", "control", {
|
|
23
|
+
readonly basePath: string;
|
|
24
|
+
readonly runId: string;
|
|
25
|
+
}];
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=task-query-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-query-keys.d.ts","sourceRoot":"","sources":["../../src/data/task-query-keys.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa;+CACmB,uBAAuB;;;;;;+BAUvC,sBAAsB;;;;mCAKlB,sBAAsB;;;;CAKtD,CAAC"}
|