@flanksource/clicky-ui 0.3.15 → 0.3.16
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 +10 -0
- package/dist/ai.cjs +33 -4
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +31 -2
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +6 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +7 -1
- package/dist/chat.js.map +1 -1
- package/dist/components/Combobox.cjs +92 -170
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +2 -111
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +95 -173
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxActions.cjs +70 -0
- package/dist/components/ComboboxActions.cjs.map +1 -0
- package/dist/components/ComboboxActions.d.ts +8 -0
- package/dist/components/ComboboxActions.d.ts.map +1 -0
- package/dist/components/ComboboxActions.js +70 -0
- package/dist/components/ComboboxActions.js.map +1 -0
- package/dist/components/ComboboxMenu.cjs +160 -0
- package/dist/components/ComboboxMenu.cjs.map +1 -0
- package/dist/components/ComboboxMenu.d.ts +22 -0
- package/dist/components/ComboboxMenu.d.ts.map +1 -0
- package/dist/components/ComboboxMenu.js +160 -0
- package/dist/components/ComboboxMenu.js.map +1 -0
- package/dist/components/EndpointSelector.cjs +407 -0
- package/dist/components/EndpointSelector.cjs.map +1 -0
- package/dist/components/EndpointSelector.d.ts +3 -0
- package/dist/components/EndpointSelector.d.ts.map +1 -0
- package/dist/components/EndpointSelector.js +407 -0
- package/dist/components/EndpointSelector.js.map +1 -0
- package/dist/components/EndpointSelector.model.d.ts +52 -0
- package/dist/components/EndpointSelector.model.d.ts.map +1 -0
- package/dist/components/FilterBar.cjs +12 -0
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +4 -0
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +12 -0
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/InputField.cjs +11 -12
- package/dist/components/InputField.cjs.map +1 -1
- package/dist/components/InputField.d.ts +7 -0
- package/dist/components/InputField.d.ts.map +1 -1
- package/dist/components/InputField.js +12 -13
- package/dist/components/InputField.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +22 -16
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +22 -16
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MultiSelect.cjs +3 -3
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +3 -3
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/SecretKeySelector.cjs +150 -77
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +151 -78
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/WorkloadPicker.cjs +2 -1
- package/dist/components/WorkloadPicker.cjs.map +1 -1
- package/dist/components/WorkloadPicker.d.ts +6 -1
- package/dist/components/WorkloadPicker.d.ts.map +1 -1
- package/dist/components/WorkloadPicker.js +2 -1
- package/dist/components/WorkloadPicker.js.map +1 -1
- package/dist/components/combobox-types.d.ts +107 -0
- package/dist/components/combobox-types.d.ts.map +1 -0
- package/dist/components/combobox-utils.cjs +21 -0
- package/dist/components/combobox-utils.cjs.map +1 -0
- package/dist/components/combobox-utils.d.ts +15 -0
- package/dist/components/combobox-utils.d.ts.map +1 -0
- package/dist/components/combobox-utils.js +21 -0
- package/dist/components/combobox-utils.js.map +1 -0
- package/dist/components/endpoint-port.cjs +12 -0
- package/dist/components/endpoint-port.cjs.map +1 -0
- package/dist/components/endpoint-port.d.ts +4 -0
- package/dist/components/endpoint-port.d.ts.map +1 -0
- package/dist/components/endpoint-port.js +12 -0
- package/dist/components/endpoint-port.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +12 -23
- 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 +12 -23
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-discriminator.cjs +6 -2
- package/dist/components/json-schema-form-discriminator.cjs.map +1 -1
- package/dist/components/json-schema-form-discriminator.d.ts.map +1 -1
- package/dist/components/json-schema-form-discriminator.js +6 -2
- package/dist/components/json-schema-form-discriminator.js.map +1 -1
- package/dist/components/json-schema-form-error-display.cjs +50 -0
- package/dist/components/json-schema-form-error-display.cjs.map +1 -0
- package/dist/components/json-schema-form-error-display.d.ts +12 -0
- package/dist/components/json-schema-form-error-display.d.ts.map +1 -0
- package/dist/components/json-schema-form-error-display.js +50 -0
- package/dist/components/json-schema-form-error-display.js.map +1 -0
- package/dist/components/json-schema-form-error-types.d.ts +26 -0
- package/dist/components/json-schema-form-error-types.d.ts.map +1 -0
- package/dist/components/json-schema-form-errors.cjs +169 -0
- package/dist/components/json-schema-form-errors.cjs.map +1 -0
- package/dist/components/json-schema-form-errors.d.ts +14 -0
- package/dist/components/json-schema-form-errors.d.ts.map +1 -0
- package/dist/components/json-schema-form-errors.js +169 -0
- package/dist/components/json-schema-form-errors.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +12 -2
- 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 +12 -2
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-refs.cjs +84 -19
- package/dist/components/json-schema-form-refs.cjs.map +1 -1
- package/dist/components/json-schema-form-refs.d.ts.map +1 -1
- package/dist/components/json-schema-form-refs.js +84 -19
- package/dist/components/json-schema-form-refs.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +33 -10
- 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 +34 -11
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +16 -4
- 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 +17 -5
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +4 -3
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components.cjs +13 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +8 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +15 -2
- package/dist/components.js.map +1 -1
- package/dist/data/DataTable.cjs +177 -6
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +39 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.grouping.cjs +21 -0
- package/dist/data/DataTable.grouping.cjs.map +1 -0
- package/dist/data/DataTable.grouping.d.ts +26 -0
- package/dist/data/DataTable.grouping.d.ts.map +1 -0
- package/dist/data/DataTable.grouping.js +21 -0
- package/dist/data/DataTable.grouping.js.map +1 -0
- package/dist/data/DataTable.js +177 -6
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Markdown.cjs +45 -1
- package/dist/data/Markdown.cjs.map +1 -1
- package/dist/data/Markdown.d.ts +3 -2
- package/dist/data/Markdown.d.ts.map +1 -1
- package/dist/data/Markdown.js +45 -1
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/MarkdownEditor.cjs +4 -3
- package/dist/data/MarkdownEditor.cjs.map +1 -1
- package/dist/data/MarkdownEditor.d.ts +6 -2
- package/dist/data/MarkdownEditor.d.ts.map +1 -1
- package/dist/data/MarkdownEditor.js +4 -3
- package/dist/data/MarkdownEditor.js.map +1 -1
- package/dist/data/StatStrip.cjs +99 -0
- package/dist/data/StatStrip.cjs.map +1 -0
- package/dist/data/StatStrip.d.ts +41 -0
- package/dist/data/StatStrip.d.ts.map +1 -0
- package/dist/data/StatStrip.js +99 -0
- package/dist/data/StatStrip.js.map +1 -0
- package/dist/data/TaskManager.cjs +20 -1
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts +3 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +20 -1
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +49 -0
- package/dist/data/TaskManagerButton.cjs.map +1 -0
- package/dist/data/TaskManagerButton.d.ts +8 -0
- package/dist/data/TaskManagerButton.d.ts.map +1 -0
- package/dist/data/TaskManagerButton.js +49 -0
- package/dist/data/TaskManagerButton.js.map +1 -0
- package/dist/data/TaskProcessDetails.cjs +113 -0
- package/dist/data/TaskProcessDetails.cjs.map +1 -0
- package/dist/data/TaskProcessDetails.d.ts +6 -0
- package/dist/data/TaskProcessDetails.d.ts.map +1 -0
- package/dist/data/TaskProcessDetails.js +113 -0
- package/dist/data/TaskProcessDetails.js.map +1 -0
- package/dist/data/TaskProgress.cjs +106 -19
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +4 -2
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +107 -20
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +43 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/Tree.cjs +91 -82
- package/dist/data/Tree.cjs.map +1 -1
- package/dist/data/Tree.d.ts +3 -1
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js +91 -82
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/TreeNode.cjs +3 -0
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts +2 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +3 -0
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +9 -140
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +2 -40
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +6 -137
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.models.cjs +11 -0
- package/dist/data/ai/ChatWindow.models.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.models.d.ts +3 -0
- package/dist/data/ai/ChatWindow.models.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.models.js +11 -0
- package/dist/data/ai/ChatWindow.models.js.map +1 -0
- package/dist/data/ai/ChatWindow.preferences.cjs +57 -0
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.preferences.d.ts +13 -0
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.preferences.js +57 -0
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +99 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +3 -0
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js +99 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -0
- package/dist/data/ai/ChatWindow.types.d.ts +41 -0
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -0
- package/dist/data/ai/ContextBadges.cjs +76 -46
- package/dist/data/ai/ContextBadges.cjs.map +1 -1
- package/dist/data/ai/ContextBadges.d.ts.map +1 -1
- package/dist/data/ai/ContextBadges.js +77 -47
- package/dist/data/ai/ContextBadges.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +151 -32
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts +7 -4
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +152 -33
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs +133 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs.map +1 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +11 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.js +133 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.js.map +1 -0
- package/dist/data/ai/PromptPicker/index.d.ts +2 -1
- package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.cjs +7 -0
- package/dist/data/ai/PromptPicker/types.cjs.map +1 -0
- package/dist/data/ai/PromptPicker/types.d.ts +18 -2
- package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.js +7 -0
- package/dist/data/ai/PromptPicker/types.js.map +1 -0
- package/dist/data/ai/PromptRunEditor/index.cjs +82 -14
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +5 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +83 -15
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/RuntimeBar.cjs +336 -0
- package/dist/data/ai/RuntimeBar.cjs.map +1 -0
- package/dist/data/ai/RuntimeBar.d.ts +27 -0
- package/dist/data/ai/RuntimeBar.d.ts.map +1 -0
- package/dist/data/ai/RuntimeBar.js +336 -0
- package/dist/data/ai/RuntimeBar.js.map +1 -0
- package/dist/data/ai/SessionChatComposer.cjs +56 -0
- package/dist/data/ai/SessionChatComposer.cjs.map +1 -0
- package/dist/data/ai/SessionChatComposer.d.ts +24 -0
- package/dist/data/ai/SessionChatComposer.d.ts.map +1 -0
- package/dist/data/ai/SessionChatComposer.js +56 -0
- package/dist/data/ai/SessionChatComposer.js.map +1 -0
- package/dist/data/ai/SessionInspector.cjs +222 -382
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts +55 -0
- package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.collection.cjs +377 -0
- package/dist/data/ai/SessionInspector.collection.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.collection.d.ts +15 -0
- package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.collection.js +377 -0
- package/dist/data/ai/SessionInspector.collection.js.map +1 -0
- package/dist/data/ai/SessionInspector.d.ts +9 -4
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.files.cjs +162 -0
- package/dist/data/ai/SessionInspector.files.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.files.d.ts +5 -0
- package/dist/data/ai/SessionInspector.files.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.files.js +162 -0
- package/dist/data/ai/SessionInspector.files.js.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs +148 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +15 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.js +148 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy.cjs +256 -0
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy.d.ts +9 -0
- package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy.js +256 -0
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -0
- package/dist/data/ai/SessionInspector.js +224 -384
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.model.cjs +125 -0
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.model.d.ts +14 -0
- package/dist/data/ai/SessionInspector.model.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.model.js +125 -0
- package/dist/data/ai/SessionInspector.model.js.map +1 -0
- package/dist/data/ai/SessionInspector.panels.cjs +265 -0
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.panels.d.ts +10 -0
- package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.panels.js +265 -0
- package/dist/data/ai/SessionInspector.panels.js.map +1 -0
- package/dist/data/ai/SessionInspector.plan.cjs +77 -0
- package/dist/data/ai/SessionInspector.plan.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.plan.d.ts +6 -0
- package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.plan.js +77 -0
- package/dist/data/ai/SessionInspector.plan.js.map +1 -0
- package/dist/data/ai/SessionInspector.summary.cjs +182 -0
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.summary.d.ts +8 -0
- package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.summary.js +182 -0
- package/dist/data/ai/SessionInspector.summary.js.map +1 -0
- package/dist/data/ai/SessionInspector.transcript.cjs +94 -0
- package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.transcript.d.ts +7 -0
- package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.transcript.js +94 -0
- package/dist/data/ai/SessionInspector.transcript.js.map +1 -0
- package/dist/data/ai/SessionInspector.turns.d.ts +11 -0
- package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.cjs +86 -121
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +8 -1
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.fixtures.d.ts +2 -0
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +110 -0
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.header.d.ts +11 -0
- package/dist/data/ai/SessionViewer.header.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.header.js +110 -0
- package/dist/data/ai/SessionViewer.header.js.map +1 -0
- package/dist/data/ai/SessionViewer.js +87 -122
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +109 -39
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +2 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +109 -39
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.row-metadata.cjs +132 -0
- package/dist/data/ai/SessionViewer.row-metadata.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.row-metadata.d.ts +14 -0
- package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.row-metadata.js +132 -0
- package/dist/data/ai/SessionViewer.row-metadata.js.map +1 -0
- package/dist/data/ai/SessionViewer.row-time.cjs +15 -0
- package/dist/data/ai/SessionViewer.row-time.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.row-time.d.ts +3 -0
- package/dist/data/ai/SessionViewer.row-time.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.row-time.js +15 -0
- package/dist/data/ai/SessionViewer.row-time.js.map +1 -0
- package/dist/data/ai/SessionViewer.rows.cjs +37 -424
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +5 -2
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +31 -418
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.cjs +65 -0
- package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.d.ts +20 -0
- package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.js +65 -0
- package/dist/data/ai/SessionViewer.tool-details.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-row.cjs +404 -0
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-row.d.ts +12 -0
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-row.js +404 -0
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -0
- package/dist/data/ai/SessionViewer.unified.d.ts +10 -2
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -26
- 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 +47 -29
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +45 -153
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +51 -159
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +0 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +0 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +0 -5
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +0 -5
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +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/update.cjs +19 -6
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +5 -2
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.js +19 -6
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +67 -10
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +31 -4
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +67 -10
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +2 -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 +2 -1
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/agent-action-icons.cjs +7 -10
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.d.ts +1 -2
- package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
- package/dist/data/ai/agent-action-icons.js +8 -11
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/context.cjs.map +1 -1
- package/dist/data/ai/context.d.ts +4 -0
- package/dist/data/ai/context.d.ts.map +1 -1
- package/dist/data/ai/context.js.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.cjs +513 -0
- package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/claude-complete.d.ts +3 -0
- package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/claude-complete.js +513 -0
- package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -0
- package/dist/data/ai/examples/sessions/claude.cjs +252 -0
- package/dist/data/ai/examples/sessions/claude.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/claude.d.ts +3 -0
- package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/claude.js +252 -0
- package/dist/data/ai/examples/sessions/claude.js.map +1 -0
- package/dist/data/ai/examples/sessions/codex-complete.cjs +394 -0
- package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/codex-complete.d.ts +3 -0
- package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/codex-complete.js +394 -0
- package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -0
- package/dist/data/ai/examples/sessions/codex.cjs +236 -0
- package/dist/data/ai/examples/sessions/codex.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/codex.d.ts +3 -0
- package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/codex.js +236 -0
- package/dist/data/ai/examples/sessions/codex.js.map +1 -0
- package/dist/data/ai/examples/sessions/index.cjs +21 -0
- package/dist/data/ai/examples/sessions/index.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/index.d.ts +10 -0
- package/dist/data/ai/examples/sessions/index.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/index.js +21 -0
- package/dist/data/ai/examples/sessions/index.js.map +1 -0
- package/dist/data/ai/index.d.ts +8 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-mode.cjs +62 -0
- package/dist/data/ai/runtime-mode.cjs.map +1 -1
- package/dist/data/ai/runtime-mode.d.ts +27 -0
- package/dist/data/ai/runtime-mode.d.ts.map +1 -1
- package/dist/data/ai/runtime-mode.js +62 -0
- package/dist/data/ai/runtime-mode.js.map +1 -1
- package/dist/data/cells/EntityCell.cjs +64 -0
- package/dist/data/cells/EntityCell.cjs.map +1 -0
- package/dist/data/cells/EntityCell.d.ts +27 -0
- package/dist/data/cells/EntityCell.d.ts.map +1 -0
- package/dist/data/cells/EntityCell.js +64 -0
- package/dist/data/cells/EntityCell.js.map +1 -0
- package/dist/data/chat/Attachment.cjs +53 -13
- package/dist/data/chat/Attachment.cjs.map +1 -1
- package/dist/data/chat/Attachment.d.ts +9 -3
- package/dist/data/chat/Attachment.d.ts.map +1 -1
- package/dist/data/chat/Attachment.js +54 -14
- package/dist/data/chat/Attachment.js.map +1 -1
- package/dist/data/chat/Chat.cjs +25 -17
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +8 -4
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +22 -14
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +142 -39
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +4 -1
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +143 -40
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/Conversation.cjs +55 -3
- package/dist/data/chat/Conversation.cjs.map +1 -1
- package/dist/data/chat/Conversation.d.ts +5 -1
- package/dist/data/chat/Conversation.d.ts.map +1 -1
- package/dist/data/chat/Conversation.js +55 -3
- package/dist/data/chat/Conversation.js.map +1 -1
- package/dist/data/chat/ModelSelector.cjs +8 -10
- package/dist/data/chat/ModelSelector.cjs.map +1 -1
- package/dist/data/chat/ModelSelector.d.ts.map +1 -1
- package/dist/data/chat/ModelSelector.js +9 -11
- package/dist/data/chat/ModelSelector.js.map +1 -1
- package/dist/data/chat/PromptInput.cjs +56 -5
- package/dist/data/chat/PromptInput.cjs.map +1 -1
- package/dist/data/chat/PromptInput.d.ts +10 -1
- package/dist/data/chat/PromptInput.d.ts.map +1 -1
- package/dist/data/chat/PromptInput.js +57 -6
- package/dist/data/chat/PromptInput.js.map +1 -1
- package/dist/data/chat/attachment-upload.cjs +33 -0
- package/dist/data/chat/attachment-upload.cjs.map +1 -0
- package/dist/data/chat/attachment-upload.d.ts +21 -0
- package/dist/data/chat/attachment-upload.d.ts.map +1 -0
- package/dist/data/chat/attachment-upload.js +33 -0
- package/dist/data/chat/attachment-upload.js.map +1 -0
- package/dist/data/chat/effort-icons.cjs +36 -6
- package/dist/data/chat/effort-icons.cjs.map +1 -1
- package/dist/data/chat/effort-icons.d.ts +6 -3
- package/dist/data/chat/effort-icons.d.ts.map +1 -1
- package/dist/data/chat/effort-icons.js +37 -7
- package/dist/data/chat/effort-icons.js.map +1 -1
- package/dist/data/chat/index.d.ts +3 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/models.cjs +8 -0
- package/dist/data/chat/models.cjs.map +1 -0
- package/dist/data/chat/models.d.ts +11 -0
- package/dist/data/chat/models.d.ts.map +1 -0
- package/dist/data/chat/models.js +8 -0
- package/dist/data/chat/models.js.map +1 -0
- package/dist/data/chat/provider-icons.cjs +49 -16
- package/dist/data/chat/provider-icons.cjs.map +1 -1
- package/dist/data/chat/provider-icons.d.ts +2 -0
- package/dist/data/chat/provider-icons.d.ts.map +1 -1
- package/dist/data/chat/provider-icons.js +50 -17
- package/dist/data/chat/provider-icons.js.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +9 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/examples/markdown-preview-mock.cjs +45 -0
- package/dist/data/examples/markdown-preview-mock.cjs.map +1 -0
- package/dist/data/examples/markdown-preview-mock.d.ts +23 -0
- package/dist/data/examples/markdown-preview-mock.d.ts.map +1 -0
- package/dist/data/examples/markdown-preview-mock.js +45 -0
- package/dist/data/examples/markdown-preview-mock.js.map +1 -0
- package/dist/data/examples/markdown-syntax.cjs +36 -0
- package/dist/data/examples/markdown-syntax.cjs.map +1 -0
- package/dist/data/examples/markdown-syntax.d.ts +12 -0
- package/dist/data/examples/markdown-syntax.d.ts.map +1 -0
- package/dist/data/examples/markdown-syntax.js +36 -0
- package/dist/data/examples/markdown-syntax.js.map +1 -0
- package/dist/data/examples/markdown-syntax.md.cjs +4 -0
- package/dist/data/examples/markdown-syntax.md.cjs.map +1 -0
- package/dist/data/examples/markdown-syntax.md.js +5 -0
- package/dist/data/examples/markdown-syntax.md.js.map +1 -0
- package/dist/data/task-process-details.cjs +48 -0
- package/dist/data/task-process-details.cjs.map +1 -0
- package/dist/data/task-process-details.d.ts +5 -0
- package/dist/data/task-process-details.d.ts.map +1 -0
- package/dist/data/task-process-details.js +48 -0
- package/dist/data/task-process-details.js.map +1 -0
- package/dist/data/version-info.cjs +2 -2
- package/dist/data/version-info.js +2 -2
- package/dist/data.cjs +30 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +7 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +30 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-hotkey.cjs +98 -0
- package/dist/hooks/use-hotkey.cjs.map +1 -0
- package/dist/hooks/use-hotkey.d.ts +42 -0
- package/dist/hooks/use-hotkey.d.ts.map +1 -0
- package/dist/hooks/use-hotkey.js +98 -0
- package/dist/hooks/use-hotkey.js.map +1 -0
- package/dist/hooks/use-task-run.cjs +23 -1
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +23 -1
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/hooks.cjs +4 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +4 -0
- package/dist/hooks.js.map +1 -1
- package/dist/icons/components/UiBank.cjs +15 -0
- package/dist/icons/components/UiBank.cjs.map +1 -0
- package/dist/icons/components/UiBank.d.ts +15 -0
- package/dist/icons/components/UiBank.d.ts.map +1 -0
- package/dist/icons/components/UiBank.js +15 -0
- package/dist/icons/components/UiBank.js.map +1 -0
- package/dist/icons/components/UiChartOfAccounts.cjs +15 -0
- package/dist/icons/components/UiChartOfAccounts.cjs.map +1 -0
- package/dist/icons/components/UiChartOfAccounts.d.ts +15 -0
- package/dist/icons/components/UiChartOfAccounts.d.ts.map +1 -0
- package/dist/icons/components/UiChartOfAccounts.js +15 -0
- package/dist/icons/components/UiChartOfAccounts.js.map +1 -0
- package/dist/icons/components/UiCloudUpload.cjs +15 -0
- package/dist/icons/components/UiCloudUpload.cjs.map +1 -0
- package/dist/icons/components/UiCloudUpload.d.ts +15 -0
- package/dist/icons/components/UiCloudUpload.d.ts.map +1 -0
- package/dist/icons/components/UiCloudUpload.js +15 -0
- package/dist/icons/components/UiCloudUpload.js.map +1 -0
- package/dist/icons/components/UiLedger.cjs +15 -0
- package/dist/icons/components/UiLedger.cjs.map +1 -0
- package/dist/icons/components/UiLedger.d.ts +15 -0
- package/dist/icons/components/UiLedger.d.ts.map +1 -0
- package/dist/icons/components/UiLedger.js +15 -0
- package/dist/icons/components/UiLedger.js.map +1 -0
- package/dist/icons/components/UiReceipt.cjs +15 -0
- package/dist/icons/components/UiReceipt.cjs.map +1 -0
- package/dist/icons/components/UiReceipt.d.ts +15 -0
- package/dist/icons/components/UiReceipt.d.ts.map +1 -0
- package/dist/icons/components/UiReceipt.js +15 -0
- package/dist/icons/components/UiReceipt.js.map +1 -0
- package/dist/icons/index.d.ts +10 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons.cjs +15 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +15 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +47 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +49 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +270 -238
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +9 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.debug.cjs +53 -0
- package/dist/layout/AppShell.debug.cjs.map +1 -0
- package/dist/layout/AppShell.debug.d.ts +6 -0
- package/dist/layout/AppShell.debug.d.ts.map +1 -0
- package/dist/layout/AppShell.debug.js +53 -0
- package/dist/layout/AppShell.debug.js.map +1 -0
- package/dist/layout/AppShell.js +269 -237
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +90 -0
- package/dist/layout/AppShell.nav.cjs.map +1 -0
- package/dist/layout/AppShell.nav.d.ts +7 -0
- package/dist/layout/AppShell.nav.d.ts.map +1 -0
- package/dist/layout/AppShell.nav.js +90 -0
- package/dist/layout/AppShell.nav.js.map +1 -0
- package/dist/layout/AppSidebar.cjs +35 -5
- package/dist/layout/AppSidebar.cjs.map +1 -1
- package/dist/layout/AppSidebar.d.ts +4 -1
- package/dist/layout/AppSidebar.d.ts.map +1 -1
- package/dist/layout/AppSidebar.js +35 -5
- package/dist/layout/AppSidebar.js.map +1 -1
- package/dist/layout/Panel.cjs +25 -41
- package/dist/layout/Panel.cjs.map +1 -1
- package/dist/layout/Panel.d.ts +2 -1
- package/dist/layout/Panel.d.ts.map +1 -1
- package/dist/layout/Panel.js +26 -42
- package/dist/layout/Panel.js.map +1 -1
- package/dist/layout/PanelFrame.cjs +56 -0
- package/dist/layout/PanelFrame.cjs.map +1 -0
- package/dist/layout/PanelFrame.d.ts +15 -0
- package/dist/layout/PanelFrame.d.ts.map +1 -0
- package/dist/layout/PanelFrame.js +56 -0
- package/dist/layout/PanelFrame.js.map +1 -0
- package/dist/layout/Section.cjs +51 -41
- package/dist/layout/Section.cjs.map +1 -1
- package/dist/layout/Section.d.ts +3 -2
- package/dist/layout/Section.d.ts.map +1 -1
- package/dist/layout/Section.js +51 -41
- package/dist/layout/Section.js.map +1 -1
- package/dist/layout/content-width.cjs +8 -0
- package/dist/layout/content-width.cjs.map +1 -0
- package/dist/layout/content-width.d.ts +3 -0
- package/dist/layout/content-width.d.ts.map +1 -0
- package/dist/layout/content-width.js +8 -0
- package/dist/layout/content-width.js.map +1 -0
- package/dist/overlay/CommandPalette.cjs +207 -0
- package/dist/overlay/CommandPalette.cjs.map +1 -0
- package/dist/overlay/CommandPalette.d.ts +71 -0
- package/dist/overlay/CommandPalette.d.ts.map +1 -0
- package/dist/overlay/CommandPalette.js +207 -0
- package/dist/overlay/CommandPalette.js.map +1 -0
- package/dist/overlay/CommandPalette.model.cjs +70 -0
- package/dist/overlay/CommandPalette.model.cjs.map +1 -0
- package/dist/overlay/CommandPalette.model.d.ts +71 -0
- package/dist/overlay/CommandPalette.model.d.ts.map +1 -0
- package/dist/overlay/CommandPalette.model.js +70 -0
- package/dist/overlay/CommandPalette.model.js.map +1 -0
- package/dist/overlay/CommandPaletteList.cjs +88 -0
- package/dist/overlay/CommandPaletteList.cjs.map +1 -0
- package/dist/overlay/CommandPaletteList.d.ts +23 -0
- package/dist/overlay/CommandPaletteList.d.ts.map +1 -0
- package/dist/overlay/CommandPaletteList.js +88 -0
- package/dist/overlay/CommandPaletteList.js.map +1 -0
- package/dist/overlay/CommandPaletteTrigger.cjs +36 -0
- package/dist/overlay/CommandPaletteTrigger.cjs.map +1 -0
- package/dist/overlay/CommandPaletteTrigger.d.ts +22 -0
- package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -0
- package/dist/overlay/CommandPaletteTrigger.js +36 -0
- package/dist/overlay/CommandPaletteTrigger.js.map +1 -0
- package/dist/overlay/Modal.cjs +12 -5
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +12 -5
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/modalStack.js +1 -1
- package/dist/overlay/zIndex.cjs +2 -0
- package/dist/overlay/zIndex.cjs.map +1 -1
- package/dist/overlay/zIndex.js +2 -0
- package/dist/overlay/zIndex.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +6 -0
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +6 -0
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +49 -52
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +17 -2
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +49 -52
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +2 -1
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +2 -1
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +25 -2
- package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story.fixtures.d.ts +2 -1
- package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +1 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +11 -0
- package/dist/tailwind-preset.cjs.map +1 -1
- package/dist/tailwind-preset.d.ts.map +1 -1
- package/dist/tailwind-preset.js +11 -0
- package/dist/tailwind-preset.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { costTotal } from "./session-cost.js";
|
|
2
|
+
function isSessionCollectionInput(value) {
|
|
3
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && "kind" in value && value.kind === "session-collection";
|
|
4
|
+
}
|
|
5
|
+
function validateSessionCollection(collection) {
|
|
6
|
+
const current = collection.sessions.find(
|
|
7
|
+
(item) => item.id === collection.currentSessionId
|
|
8
|
+
);
|
|
9
|
+
if (!current) {
|
|
10
|
+
throw new Error(
|
|
11
|
+
`Session collection ${collection.id} does not contain current session ${collection.currentSessionId}`
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
if (!current.session) {
|
|
15
|
+
throw new Error(
|
|
16
|
+
`Current session ${collection.currentSessionId} must be loaded`
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function collectionSession(item, loaded) {
|
|
21
|
+
return item.session ?? loaded.get(item.id);
|
|
22
|
+
}
|
|
23
|
+
function buildSessionHierarchy(collection, loaded) {
|
|
24
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const item of collection.sessions) {
|
|
26
|
+
nodes.set(item.id, buildSessionNode(item, collectionSession(item, loaded)));
|
|
27
|
+
}
|
|
28
|
+
const roots = [];
|
|
29
|
+
for (const item of collection.sessions) {
|
|
30
|
+
const node = nodes.get(item.id);
|
|
31
|
+
const parent = item.parentId ? nodes.get(item.parentId) : void 0;
|
|
32
|
+
if (parent) parent.children.unshift(node);
|
|
33
|
+
else roots.push(node);
|
|
34
|
+
}
|
|
35
|
+
return roots;
|
|
36
|
+
}
|
|
37
|
+
function buildSessionNode(item, session) {
|
|
38
|
+
var _a, _b, _c;
|
|
39
|
+
const summary = item.summary;
|
|
40
|
+
const rootAgent = (session == null ? void 0 : session.root) ?? ((_a = session == null ? void 0 : session.agents) == null ? void 0 : _a.find((agent) => agent.isRoot));
|
|
41
|
+
const agents = session ? agentForest(item.id, session, rootAgent == null ? void 0 : rootAgent.id) : [];
|
|
42
|
+
const rootTurns = session ? ((_b = session.turns) == null ? void 0 : _b.filter(
|
|
43
|
+
(turn) => !turnAgentId(session, turn.id) || turnAgentId(session, turn.id) === (rootAgent == null ? void 0 : rootAgent.id)
|
|
44
|
+
).map((turn) => turnNode(item.id, turn, session))) ?? [] : [];
|
|
45
|
+
return {
|
|
46
|
+
key: sessionKey(item.id),
|
|
47
|
+
kind: "session",
|
|
48
|
+
itemId: item.id,
|
|
49
|
+
label: item.label || (session == null ? void 0 : session.title) || (session == null ? void 0 : session.model) || item.id,
|
|
50
|
+
provider: (summary == null ? void 0 : summary.provider) ?? (session == null ? void 0 : session.provider),
|
|
51
|
+
model: (summary == null ? void 0 : summary.model) ?? (session == null ? void 0 : session.model),
|
|
52
|
+
effort: (summary == null ? void 0 : summary.effort) ?? (session == null ? void 0 : session.reasoningEffort),
|
|
53
|
+
mode: item.mode ?? (summary == null ? void 0 : summary.mode) ?? (session == null ? void 0 : session.backend),
|
|
54
|
+
status: item.status ?? (summary == null ? void 0 : summary.status) ?? ((_c = session == null ? void 0 : session.live) == null ? void 0 : _c.status),
|
|
55
|
+
pid: summary == null ? void 0 : summary.pid,
|
|
56
|
+
durationMs: summary == null ? void 0 : summary.durationMs,
|
|
57
|
+
updatedAt: summary == null ? void 0 : summary.updatedAt,
|
|
58
|
+
cost: (summary == null ? void 0 : summary.cost) ?? costTotal(session == null ? void 0 : session.cost),
|
|
59
|
+
usage: session == null ? void 0 : session.usage,
|
|
60
|
+
costDetail: session == null ? void 0 : session.cost,
|
|
61
|
+
item,
|
|
62
|
+
...rootAgent ? { agent: rootAgent } : {},
|
|
63
|
+
children: [...agents, ...rootTurns]
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function agentForest(itemId, session, rootAgentId) {
|
|
67
|
+
const agents = flattenAgents(session);
|
|
68
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
69
|
+
for (const agent of agents) {
|
|
70
|
+
if (!agent.id || agent.id === rootAgentId || agent.isRoot) continue;
|
|
71
|
+
nodes.set(agent.id, agentNode(itemId, session, agent));
|
|
72
|
+
}
|
|
73
|
+
const roots = [];
|
|
74
|
+
for (const agent of agents) {
|
|
75
|
+
if (!agent.id || !nodes.has(agent.id)) continue;
|
|
76
|
+
const node = nodes.get(agent.id);
|
|
77
|
+
const parent = agent.parentId ? nodes.get(agent.parentId) : void 0;
|
|
78
|
+
if (parent) parent.children.unshift(node);
|
|
79
|
+
else roots.push(node);
|
|
80
|
+
}
|
|
81
|
+
return roots;
|
|
82
|
+
}
|
|
83
|
+
function flattenAgents(session) {
|
|
84
|
+
var _a;
|
|
85
|
+
const agents = /* @__PURE__ */ new Map();
|
|
86
|
+
const visit = (agent) => {
|
|
87
|
+
var _a2;
|
|
88
|
+
if (agent.id && !agents.has(agent.id)) agents.set(agent.id, agent);
|
|
89
|
+
(_a2 = agent.children) == null ? void 0 : _a2.forEach(visit);
|
|
90
|
+
};
|
|
91
|
+
if (session.root) visit(session.root);
|
|
92
|
+
(_a = session.agents) == null ? void 0 : _a.forEach(visit);
|
|
93
|
+
return [...agents.values()];
|
|
94
|
+
}
|
|
95
|
+
function agentNode(itemId, session, agent) {
|
|
96
|
+
var _a;
|
|
97
|
+
const turns = ((_a = session.turns) == null ? void 0 : _a.filter((turn) => turnAgentId(session, turn.id) === agent.id).map((turn) => turnNode(itemId, turn, session))) ?? [];
|
|
98
|
+
return {
|
|
99
|
+
key: `${itemId}:agent:${agent.id}`,
|
|
100
|
+
kind: "agent",
|
|
101
|
+
itemId,
|
|
102
|
+
label: agent.desc || agent.type || `Agent ${agent.id}`,
|
|
103
|
+
provider: session.provider,
|
|
104
|
+
model: session.model,
|
|
105
|
+
effort: session.reasoningEffort,
|
|
106
|
+
mode: session.backend,
|
|
107
|
+
status: void 0,
|
|
108
|
+
pid: void 0,
|
|
109
|
+
durationMs: void 0,
|
|
110
|
+
updatedAt: void 0,
|
|
111
|
+
cost: costTotal(agent.cost),
|
|
112
|
+
usage: agent.usage,
|
|
113
|
+
costDetail: agent.cost,
|
|
114
|
+
agent,
|
|
115
|
+
children: turns
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function turnNode(itemId, turn, session) {
|
|
119
|
+
return {
|
|
120
|
+
key: `${itemId}:turn:${turn.id}`,
|
|
121
|
+
kind: "turn",
|
|
122
|
+
itemId,
|
|
123
|
+
label: `Turn ${turn.index}`,
|
|
124
|
+
provider: session.provider,
|
|
125
|
+
model: turn.model || session.model,
|
|
126
|
+
effort: turn.reasoningEffort || session.reasoningEffort,
|
|
127
|
+
mode: turn.backend || session.backend,
|
|
128
|
+
status: turn.status,
|
|
129
|
+
pid: void 0,
|
|
130
|
+
durationMs: void 0,
|
|
131
|
+
updatedAt: void 0,
|
|
132
|
+
cost: costTotal(turn.cost),
|
|
133
|
+
usage: turn.usage,
|
|
134
|
+
costDetail: turn.cost,
|
|
135
|
+
turn,
|
|
136
|
+
children: []
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function turnAgentId(session, turnId) {
|
|
140
|
+
var _a, _b, _c;
|
|
141
|
+
return (_c = (_b = (_a = session.messages) == null ? void 0 : _a.find((message) => message.turnId === turnId)) == null ? void 0 : _b.provenance) == null ? void 0 : _c.agentId;
|
|
142
|
+
}
|
|
143
|
+
function sessionKey(itemId) {
|
|
144
|
+
return `${itemId}:session`;
|
|
145
|
+
}
|
|
146
|
+
function branchKeys(node) {
|
|
147
|
+
return [node.key, ...node.children.flatMap(branchKeys)];
|
|
148
|
+
}
|
|
149
|
+
function initialCheckedKeys(roots, sessionIds) {
|
|
150
|
+
const checked = /* @__PURE__ */ new Set();
|
|
151
|
+
for (const sessionId of sessionIds) {
|
|
152
|
+
const node = findNode(roots, sessionKey(sessionId));
|
|
153
|
+
if (node) branchKeys(node).forEach((key) => checked.add(key));
|
|
154
|
+
}
|
|
155
|
+
return checked;
|
|
156
|
+
}
|
|
157
|
+
function toggleHierarchyBranch(roots, checked, key, include) {
|
|
158
|
+
const next = new Set(checked);
|
|
159
|
+
const node = findNode(roots, key);
|
|
160
|
+
if (!node) return next;
|
|
161
|
+
for (const branchKey of branchKeys(node)) {
|
|
162
|
+
if (include) next.add(branchKey);
|
|
163
|
+
else next.delete(branchKey);
|
|
164
|
+
}
|
|
165
|
+
normalizeCheckedRoots(roots, next);
|
|
166
|
+
return next;
|
|
167
|
+
}
|
|
168
|
+
function normalizeCheckedRoots(roots, checked) {
|
|
169
|
+
const visit = (node) => {
|
|
170
|
+
if (node.children.length === 0) return checked.has(node.key);
|
|
171
|
+
const complete = node.children.every(visit);
|
|
172
|
+
if (complete) checked.add(node.key);
|
|
173
|
+
else checked.delete(node.key);
|
|
174
|
+
return complete;
|
|
175
|
+
};
|
|
176
|
+
roots.forEach(visit);
|
|
177
|
+
}
|
|
178
|
+
function hierarchyCheckState(node, checked) {
|
|
179
|
+
if (checked.has(node.key)) return "checked";
|
|
180
|
+
if (node.children.some((child) => hasCheckedNode(child, checked)))
|
|
181
|
+
return "indeterminate";
|
|
182
|
+
return "unchecked";
|
|
183
|
+
}
|
|
184
|
+
function hasCheckedNode(node, checked) {
|
|
185
|
+
return checked.has(node.key) || node.children.some((child) => hasCheckedNode(child, checked));
|
|
186
|
+
}
|
|
187
|
+
function findNode(roots, key) {
|
|
188
|
+
for (const root of roots) {
|
|
189
|
+
if (root.key === key) return root;
|
|
190
|
+
const child = findNode(root.children, key);
|
|
191
|
+
if (child) return child;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function selectedSessionCount(roots, checked) {
|
|
195
|
+
let count = 0;
|
|
196
|
+
const visit = (node) => {
|
|
197
|
+
if (node.kind === "session" && hasCheckedNode(node, checked)) count++;
|
|
198
|
+
node.children.forEach(visit);
|
|
199
|
+
};
|
|
200
|
+
roots.forEach(visit);
|
|
201
|
+
return count;
|
|
202
|
+
}
|
|
203
|
+
function filterSessionCollection(collection, loaded, roots, checked) {
|
|
204
|
+
const current = collection.sessions.find(
|
|
205
|
+
(item) => item.id === collection.currentSessionId
|
|
206
|
+
);
|
|
207
|
+
const base = collectionSession(current, loaded);
|
|
208
|
+
const selected = collection.sessions.flatMap((item) => {
|
|
209
|
+
const session = collectionSession(item, loaded);
|
|
210
|
+
const node = findNode(roots, sessionKey(item.id));
|
|
211
|
+
if (!session || !node || !hasCheckedNode(node, checked)) return [];
|
|
212
|
+
return [
|
|
213
|
+
{ itemId: item.id, session: filterOneSession(session, node, checked) }
|
|
214
|
+
];
|
|
215
|
+
});
|
|
216
|
+
const sessions = selected.map(
|
|
217
|
+
({ itemId, session }) => selected.length > 1 ? namespaceSession(session, itemId) : session
|
|
218
|
+
);
|
|
219
|
+
const messages = sessions.flatMap((session) => session.messages ?? []);
|
|
220
|
+
messages.sort(
|
|
221
|
+
(a, b) => {
|
|
222
|
+
var _a, _b;
|
|
223
|
+
return (((_a = a.provenance) == null ? void 0 : _a.timestamp) || "").localeCompare(((_b = b.provenance) == null ? void 0 : _b.timestamp) || "");
|
|
224
|
+
}
|
|
225
|
+
);
|
|
226
|
+
const usage = sumUsage(sessions.map((session) => session.usage));
|
|
227
|
+
const cost = sumCosts(sessions.map((session) => session.cost));
|
|
228
|
+
return {
|
|
229
|
+
...base,
|
|
230
|
+
id: collection.id,
|
|
231
|
+
messages,
|
|
232
|
+
turns: sessions.flatMap((session) => session.turns ?? []),
|
|
233
|
+
events: sessions.flatMap((session) => session.events ?? []),
|
|
234
|
+
...usage ? { usage } : {},
|
|
235
|
+
...cost ? { cost } : {},
|
|
236
|
+
toolCosts: sessions.flatMap((session) => session.toolCosts ?? [])
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function namespaceSession(session, itemId) {
|
|
240
|
+
var _a, _b, _c, _d;
|
|
241
|
+
const namespace = (id) => `${itemId}:${id}`;
|
|
242
|
+
const messageIds = new Set(
|
|
243
|
+
(_a = session.messages) == null ? void 0 : _a.flatMap((message) => message.id ? [message.id] : [])
|
|
244
|
+
);
|
|
245
|
+
const messages = (_b = session.messages) == null ? void 0 : _b.map((message, index) => ({
|
|
246
|
+
...message,
|
|
247
|
+
id: namespace(message.id || `message-${index + 1}`),
|
|
248
|
+
...message.turnId ? { turnId: namespace(message.turnId) } : {}
|
|
249
|
+
}));
|
|
250
|
+
const turns = (_c = session.turns) == null ? void 0 : _c.map((turn) => ({
|
|
251
|
+
...turn,
|
|
252
|
+
id: namespace(turn.id),
|
|
253
|
+
...turn.messageIds ? { messageIds: turn.messageIds.map(namespace) } : {}
|
|
254
|
+
}));
|
|
255
|
+
const events = (_d = session.events) == null ? void 0 : _d.map((event) => ({
|
|
256
|
+
...event,
|
|
257
|
+
...event.turnId ? { turnId: namespace(event.turnId) } : {},
|
|
258
|
+
...event.uuid && messageIds.has(event.uuid) ? { uuid: namespace(event.uuid) } : {}
|
|
259
|
+
}));
|
|
260
|
+
return {
|
|
261
|
+
...session,
|
|
262
|
+
...messages ? { messages } : {},
|
|
263
|
+
...turns ? { turns } : {},
|
|
264
|
+
...events ? { events } : {}
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function filterOneSession(session, node, checked) {
|
|
268
|
+
var _a, _b, _c;
|
|
269
|
+
if (checked.has(node.key)) return session;
|
|
270
|
+
const turnIds = /* @__PURE__ */ new Set();
|
|
271
|
+
const agentIds = /* @__PURE__ */ new Set();
|
|
272
|
+
const costNodes = [];
|
|
273
|
+
const visit = (child) => {
|
|
274
|
+
var _a2;
|
|
275
|
+
if (child.kind === "session") return;
|
|
276
|
+
if (checked.has(child.key)) {
|
|
277
|
+
costNodes.push(child);
|
|
278
|
+
if (child.kind === "turn" && child.turn) turnIds.add(child.turn.id);
|
|
279
|
+
if (child.kind === "agent" && ((_a2 = child.agent) == null ? void 0 : _a2.id))
|
|
280
|
+
collectAgentIds(child, agentIds);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
child.children.forEach(visit);
|
|
284
|
+
};
|
|
285
|
+
node.children.forEach(visit);
|
|
286
|
+
const messages = (_a = session.messages) == null ? void 0 : _a.filter(
|
|
287
|
+
(message) => {
|
|
288
|
+
var _a2;
|
|
289
|
+
return message.turnId && turnIds.has(message.turnId) || ((_a2 = message.provenance) == null ? void 0 : _a2.agentId) && agentIds.has(message.provenance.agentId);
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
const includedTurns = new Set(
|
|
293
|
+
messages == null ? void 0 : messages.flatMap((message) => message.turnId ? [message.turnId] : [])
|
|
294
|
+
);
|
|
295
|
+
turnIds.forEach((id) => includedTurns.add(id));
|
|
296
|
+
const events = (_b = session.events) == null ? void 0 : _b.filter(
|
|
297
|
+
(event) => event.turnId && includedTurns.has(event.turnId) || event.uuid && (messages == null ? void 0 : messages.some((message) => message.id === event.uuid))
|
|
298
|
+
);
|
|
299
|
+
const usage = sumUsage(costNodes.map((entry) => entry.usage));
|
|
300
|
+
const cost = sumCosts(costNodes.map((entry) => entry.costDetail));
|
|
301
|
+
return {
|
|
302
|
+
...session,
|
|
303
|
+
messages: messages ?? [],
|
|
304
|
+
turns: ((_c = session.turns) == null ? void 0 : _c.filter((turn) => includedTurns.has(turn.id))) ?? [],
|
|
305
|
+
...events ? { events } : {},
|
|
306
|
+
...usage ? { usage } : {},
|
|
307
|
+
...cost ? { cost } : {},
|
|
308
|
+
toolCosts: []
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
function collectAgentIds(node, ids) {
|
|
312
|
+
var _a;
|
|
313
|
+
if ((_a = node.agent) == null ? void 0 : _a.id) ids.add(node.agent.id);
|
|
314
|
+
node.children.forEach((child) => collectAgentIds(child, ids));
|
|
315
|
+
}
|
|
316
|
+
function sumUsage(values) {
|
|
317
|
+
const present = values.filter(
|
|
318
|
+
(value) => Boolean(value)
|
|
319
|
+
);
|
|
320
|
+
if (!present.length) return void 0;
|
|
321
|
+
return sumFields(present);
|
|
322
|
+
}
|
|
323
|
+
function sumCosts(values) {
|
|
324
|
+
var _a;
|
|
325
|
+
const present = values.filter(
|
|
326
|
+
(value) => Boolean(value)
|
|
327
|
+
);
|
|
328
|
+
if (!present.length) return void 0;
|
|
329
|
+
const costFields = [
|
|
330
|
+
"inputCost",
|
|
331
|
+
"outputCost",
|
|
332
|
+
"reasoningCost",
|
|
333
|
+
"cacheReadCost",
|
|
334
|
+
"cacheWriteCost"
|
|
335
|
+
];
|
|
336
|
+
const model = present.length === 1 ? (_a = present[0]) == null ? void 0 : _a.model : void 0;
|
|
337
|
+
return {
|
|
338
|
+
...sumFields(present),
|
|
339
|
+
...Object.fromEntries(
|
|
340
|
+
costFields.map((field) => [
|
|
341
|
+
field,
|
|
342
|
+
present.reduce((sum, value) => sum + (value[field] ?? 0), 0)
|
|
343
|
+
])
|
|
344
|
+
),
|
|
345
|
+
...model ? { model } : {}
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function sumFields(values) {
|
|
349
|
+
const fields = [
|
|
350
|
+
"inputTokens",
|
|
351
|
+
"outputTokens",
|
|
352
|
+
"reasoningTokens",
|
|
353
|
+
"cacheReadTokens",
|
|
354
|
+
"cacheWriteTokens",
|
|
355
|
+
"totalTokens"
|
|
356
|
+
];
|
|
357
|
+
return Object.fromEntries(
|
|
358
|
+
fields.map((field) => [
|
|
359
|
+
field,
|
|
360
|
+
values.reduce((sum, value) => sum + (value[field] ?? 0), 0)
|
|
361
|
+
])
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
export {
|
|
365
|
+
branchKeys,
|
|
366
|
+
buildSessionHierarchy,
|
|
367
|
+
collectionSession,
|
|
368
|
+
filterSessionCollection,
|
|
369
|
+
hierarchyCheckState,
|
|
370
|
+
initialCheckedKeys,
|
|
371
|
+
isSessionCollectionInput,
|
|
372
|
+
selectedSessionCount,
|
|
373
|
+
sessionKey,
|
|
374
|
+
toggleHierarchyBranch,
|
|
375
|
+
validateSessionCollection
|
|
376
|
+
};
|
|
377
|
+
//# sourceMappingURL=SessionInspector.collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.collection.js","sources":["../../../src/data/ai/SessionInspector.collection.ts"],"sourcesContent":["import { costTotal } from \"./session-cost\";\nimport type {\n SessionAgent,\n SessionCost,\n SessionTurn,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport type {\n SessionCollectionInput,\n SessionCollectionItem,\n SessionHierarchyNode,\n SessionInspectorInput,\n} from \"./SessionInspector.collection-types\";\n\nexport type {\n SessionCollectionInput,\n SessionCollectionItem,\n SessionCollectionSummary,\n SessionHierarchyNode,\n SessionHierarchyNodeKind,\n SessionInspectorInput,\n} from \"./SessionInspector.collection-types\";\nexport function isSessionCollectionInput(\n value: SessionInspectorInput\n): value is SessionCollectionInput {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n \"kind\" in value &&\n value.kind === \"session-collection\"\n );\n}\nexport function validateSessionCollection(collection: SessionCollectionInput) {\n const current = collection.sessions.find(\n (item) => item.id === collection.currentSessionId\n );\n if (!current) {\n throw new Error(\n `Session collection ${collection.id} does not contain current session ${collection.currentSessionId}`\n );\n }\n if (!current.session) {\n throw new Error(\n `Current session ${collection.currentSessionId} must be loaded`\n );\n }\n}\nexport function collectionSession(\n item: SessionCollectionItem,\n loaded: ReadonlyMap<string, UnifiedSessionInput>\n) {\n return item.session ?? loaded.get(item.id);\n}\nexport function buildSessionHierarchy(\n collection: SessionCollectionInput,\n loaded: ReadonlyMap<string, UnifiedSessionInput>\n): SessionHierarchyNode[] {\n const nodes = new Map<string, SessionHierarchyNode>();\n for (const item of collection.sessions) {\n nodes.set(item.id, buildSessionNode(item, collectionSession(item, loaded)));\n }\n\n const roots: SessionHierarchyNode[] = [];\n for (const item of collection.sessions) {\n const node = nodes.get(item.id)!;\n const parent = item.parentId ? nodes.get(item.parentId) : undefined;\n if (parent) parent.children.unshift(node);\n else roots.push(node);\n }\n return roots;\n}\nfunction buildSessionNode(\n item: SessionCollectionItem,\n session?: UnifiedSessionInput\n): SessionHierarchyNode {\n const summary = item.summary;\n const rootAgent =\n session?.root ?? session?.agents?.find((agent) => agent.isRoot);\n const agents = session ? agentForest(item.id, session, rootAgent?.id) : [];\n const rootTurns = session\n ? session.turns\n ?.filter(\n (turn) =>\n !turnAgentId(session, turn.id) ||\n turnAgentId(session, turn.id) === rootAgent?.id\n )\n .map((turn) => turnNode(item.id, turn, session)) ?? []\n : [];\n return {\n key: sessionKey(item.id),\n kind: \"session\",\n itemId: item.id,\n label: item.label || session?.title || session?.model || item.id,\n provider: summary?.provider ?? session?.provider,\n model: summary?.model ?? session?.model,\n effort: summary?.effort ?? session?.reasoningEffort,\n mode: item.mode ?? summary?.mode ?? session?.backend,\n status: item.status ?? summary?.status ?? session?.live?.status,\n pid: summary?.pid,\n durationMs: summary?.durationMs,\n updatedAt: summary?.updatedAt,\n cost: summary?.cost ?? costTotal(session?.cost),\n usage: session?.usage,\n costDetail: session?.cost,\n item,\n ...(rootAgent ? { agent: rootAgent } : {}),\n children: [...agents, ...rootTurns],\n };\n}\n\nfunction agentForest(\n itemId: string,\n session: UnifiedSessionInput,\n rootAgentId?: string\n) {\n const agents = flattenAgents(session);\n const nodes = new Map<string, SessionHierarchyNode>();\n for (const agent of agents) {\n if (!agent.id || agent.id === rootAgentId || agent.isRoot) continue;\n nodes.set(agent.id, agentNode(itemId, session, agent));\n }\n const roots: SessionHierarchyNode[] = [];\n for (const agent of agents) {\n if (!agent.id || !nodes.has(agent.id)) continue;\n const node = nodes.get(agent.id)!;\n const parent = agent.parentId ? nodes.get(agent.parentId) : undefined;\n if (parent) parent.children.unshift(node);\n else roots.push(node);\n }\n return roots;\n}\n\nfunction flattenAgents(session: UnifiedSessionInput) {\n const agents = new Map<string, SessionAgent>();\n const visit = (agent: SessionAgent) => {\n if (agent.id && !agents.has(agent.id)) agents.set(agent.id, agent);\n agent.children?.forEach(visit);\n };\n if (session.root) visit(session.root);\n session.agents?.forEach(visit);\n return [...agents.values()];\n}\n\nfunction agentNode(\n itemId: string,\n session: UnifiedSessionInput,\n agent: SessionAgent\n): SessionHierarchyNode {\n const turns =\n session.turns\n ?.filter((turn) => turnAgentId(session, turn.id) === agent.id)\n .map((turn) => turnNode(itemId, turn, session)) ?? [];\n return {\n key: `${itemId}:agent:${agent.id}`,\n kind: \"agent\",\n itemId,\n label: agent.desc || agent.type || `Agent ${agent.id}`,\n provider: session.provider,\n model: session.model,\n effort: session.reasoningEffort,\n mode: session.backend,\n status: undefined,\n pid: undefined,\n durationMs: undefined,\n updatedAt: undefined,\n cost: costTotal(agent.cost),\n usage: agent.usage,\n costDetail: agent.cost,\n agent,\n children: turns,\n };\n}\n\nfunction turnNode(\n itemId: string,\n turn: SessionTurn,\n session: UnifiedSessionInput\n): SessionHierarchyNode {\n return {\n key: `${itemId}:turn:${turn.id}`,\n kind: \"turn\",\n itemId,\n label: `Turn ${turn.index}`,\n provider: session.provider,\n model: turn.model || session.model,\n effort: turn.reasoningEffort || session.reasoningEffort,\n mode: turn.backend || session.backend,\n status: turn.status,\n pid: undefined,\n durationMs: undefined,\n updatedAt: undefined,\n cost: costTotal(turn.cost),\n usage: turn.usage,\n costDetail: turn.cost,\n turn,\n children: [],\n };\n}\n\nfunction turnAgentId(session: UnifiedSessionInput, turnId: string) {\n return session.messages?.find((message) => message.turnId === turnId)\n ?.provenance?.agentId;\n}\n\nexport function sessionKey(itemId: string) {\n return `${itemId}:session`;\n}\n\nexport function branchKeys(node: SessionHierarchyNode): string[] {\n return [node.key, ...node.children.flatMap(branchKeys)];\n}\n\nexport function initialCheckedKeys(\n roots: SessionHierarchyNode[],\n sessionIds: readonly string[]\n) {\n const checked = new Set<string>();\n for (const sessionId of sessionIds) {\n const node = findNode(roots, sessionKey(sessionId));\n if (node) branchKeys(node).forEach((key) => checked.add(key));\n }\n return checked;\n}\n\nexport function toggleHierarchyBranch(\n roots: SessionHierarchyNode[],\n checked: ReadonlySet<string>,\n key: string,\n include: boolean\n) {\n const next = new Set(checked);\n const node = findNode(roots, key);\n if (!node) return next;\n for (const branchKey of branchKeys(node)) {\n if (include) next.add(branchKey);\n else next.delete(branchKey);\n }\n normalizeCheckedRoots(roots, next);\n return next;\n}\n\nfunction normalizeCheckedRoots(\n roots: SessionHierarchyNode[],\n checked: Set<string>\n) {\n const visit = (node: SessionHierarchyNode): boolean => {\n if (node.children.length === 0) return checked.has(node.key);\n const complete = node.children.every(visit);\n if (complete) checked.add(node.key);\n else checked.delete(node.key);\n return complete;\n };\n roots.forEach(visit);\n}\n\nexport function hierarchyCheckState(\n node: SessionHierarchyNode,\n checked: ReadonlySet<string>\n) {\n if (checked.has(node.key)) return \"checked\" as const;\n if (node.children.some((child) => hasCheckedNode(child, checked)))\n return \"indeterminate\" as const;\n return \"unchecked\" as const;\n}\n\nfunction hasCheckedNode(\n node: SessionHierarchyNode,\n checked: ReadonlySet<string>\n): boolean {\n return (\n checked.has(node.key) ||\n node.children.some((child) => hasCheckedNode(child, checked))\n );\n}\n\nfunction findNode(\n roots: SessionHierarchyNode[],\n key: string\n): SessionHierarchyNode | undefined {\n for (const root of roots) {\n if (root.key === key) return root;\n const child = findNode(root.children, key);\n if (child) return child;\n }\n}\n\nexport function selectedSessionCount(\n roots: SessionHierarchyNode[],\n checked: ReadonlySet<string>\n) {\n let count = 0;\n const visit = (node: SessionHierarchyNode) => {\n if (node.kind === \"session\" && hasCheckedNode(node, checked)) count++;\n node.children.forEach(visit);\n };\n roots.forEach(visit);\n return count;\n}\n\nexport function filterSessionCollection(\n collection: SessionCollectionInput,\n loaded: ReadonlyMap<string, UnifiedSessionInput>,\n roots: SessionHierarchyNode[],\n checked: ReadonlySet<string>\n): UnifiedSessionInput {\n const current = collection.sessions.find(\n (item) => item.id === collection.currentSessionId\n )!;\n const base = collectionSession(current, loaded)!;\n const selected = collection.sessions.flatMap((item) => {\n const session = collectionSession(item, loaded);\n const node = findNode(roots, sessionKey(item.id));\n if (!session || !node || !hasCheckedNode(node, checked)) return [];\n return [\n { itemId: item.id, session: filterOneSession(session, node, checked) },\n ];\n });\n const sessions = selected.map(({ itemId, session }) =>\n selected.length > 1 ? namespaceSession(session, itemId) : session\n );\n const messages = sessions.flatMap((session) => session.messages ?? []);\n messages.sort((a, b) =>\n (a.provenance?.timestamp || \"\").localeCompare(b.provenance?.timestamp || \"\")\n );\n const usage = sumUsage(sessions.map((session) => session.usage));\n const cost = sumCosts(sessions.map((session) => session.cost));\n return {\n ...base,\n id: collection.id,\n messages,\n turns: sessions.flatMap((session) => session.turns ?? []),\n events: sessions.flatMap((session) => session.events ?? []),\n ...(usage ? { usage } : {}),\n ...(cost ? { cost } : {}),\n toolCosts: sessions.flatMap((session) => session.toolCosts ?? []),\n };\n}\n\nfunction namespaceSession(\n session: UnifiedSessionInput,\n itemId: string\n): UnifiedSessionInput {\n const namespace = (id: string) => `${itemId}:${id}`;\n const messageIds = new Set(\n session.messages?.flatMap((message) => (message.id ? [message.id] : []))\n );\n const messages = session.messages?.map((message, index) => ({\n ...message,\n id: namespace(message.id || `message-${index + 1}`),\n ...(message.turnId ? { turnId: namespace(message.turnId) } : {}),\n }));\n const turns = session.turns?.map((turn) => ({\n ...turn,\n id: namespace(turn.id),\n ...(turn.messageIds ? { messageIds: turn.messageIds.map(namespace) } : {}),\n }));\n const events = session.events?.map((event) => ({\n ...event,\n ...(event.turnId ? { turnId: namespace(event.turnId) } : {}),\n ...(event.uuid && messageIds.has(event.uuid)\n ? { uuid: namespace(event.uuid) }\n : {}),\n }));\n return {\n ...session,\n ...(messages ? { messages } : {}),\n ...(turns ? { turns } : {}),\n ...(events ? { events } : {}),\n };\n}\n\nfunction filterOneSession(\n session: UnifiedSessionInput,\n node: SessionHierarchyNode,\n checked: ReadonlySet<string>\n): UnifiedSessionInput {\n if (checked.has(node.key)) return session;\n const turnIds = new Set<string>();\n const agentIds = new Set<string>();\n const costNodes: SessionHierarchyNode[] = [];\n const visit = (child: SessionHierarchyNode) => {\n if (child.kind === \"session\") return;\n if (checked.has(child.key)) {\n costNodes.push(child);\n if (child.kind === \"turn\" && child.turn) turnIds.add(child.turn.id);\n if (child.kind === \"agent\" && child.agent?.id)\n collectAgentIds(child, agentIds);\n return;\n }\n child.children.forEach(visit);\n };\n node.children.forEach(visit);\n const messages = session.messages?.filter(\n (message) =>\n (message.turnId && turnIds.has(message.turnId)) ||\n (message.provenance?.agentId && agentIds.has(message.provenance.agentId))\n );\n const includedTurns = new Set(\n messages?.flatMap((message) => (message.turnId ? [message.turnId] : []))\n );\n turnIds.forEach((id) => includedTurns.add(id));\n const events = session.events?.filter(\n (event) =>\n (event.turnId && includedTurns.has(event.turnId)) ||\n (event.uuid && messages?.some((message) => message.id === event.uuid))\n );\n const usage = sumUsage(costNodes.map((entry) => entry.usage));\n const cost = sumCosts(costNodes.map((entry) => entry.costDetail));\n return {\n ...session,\n messages: messages ?? [],\n turns: session.turns?.filter((turn) => includedTurns.has(turn.id)) ?? [],\n ...(events ? { events } : {}),\n ...(usage ? { usage } : {}),\n ...(cost ? { cost } : {}),\n toolCosts: [],\n };\n}\n\nfunction collectAgentIds(node: SessionHierarchyNode, ids: Set<string>) {\n if (node.agent?.id) ids.add(node.agent.id);\n node.children.forEach((child) => collectAgentIds(child, ids));\n}\n\nfunction sumUsage(\n values: Array<SessionUsage | undefined>\n): SessionUsage | undefined {\n const present = values.filter((value): value is SessionUsage =>\n Boolean(value)\n );\n if (!present.length) return undefined;\n return sumFields(present);\n}\n\nfunction sumCosts(\n values: Array<SessionCost | undefined>\n): SessionCost | undefined {\n const present = values.filter((value): value is SessionCost =>\n Boolean(value)\n );\n if (!present.length) return undefined;\n const costFields = [\n \"inputCost\",\n \"outputCost\",\n \"reasoningCost\",\n \"cacheReadCost\",\n \"cacheWriteCost\",\n ] as const;\n const model = present.length === 1 ? present[0]?.model : undefined;\n return {\n ...sumFields(present),\n ...Object.fromEntries(\n costFields.map((field) => [\n field,\n present.reduce((sum, value) => sum + (value[field] ?? 0), 0),\n ])\n ),\n ...(model ? { model } : {}),\n };\n}\n\nfunction sumFields(values: SessionUsage[]): SessionUsage {\n const fields: Array<keyof SessionUsage> = [\n \"inputTokens\",\n \"outputTokens\",\n \"reasoningTokens\",\n \"cacheReadTokens\",\n \"cacheWriteTokens\",\n \"totalTokens\",\n ];\n return Object.fromEntries(\n fields.map((field) => [\n field,\n values.reduce((sum, value) => sum + (value[field] ?? 0), 0),\n ])\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SessionCollectionItem, SessionInspectorInput } from './SessionInspector.collection';
|
|
1
3
|
import { SessionViewerProps } from './SessionViewer';
|
|
2
|
-
|
|
3
|
-
export type SessionInspectorTab = "transcript" | "turns" | "agents" | "files" | "plan" | "approvals" | "costs" | "metadata" | "raw";
|
|
4
|
+
export type SessionInspectorTab = "transcript" | "files" | "plan" | "approvals" | "costs" | "metadata" | "raw";
|
|
4
5
|
export interface SessionInspectorProps {
|
|
5
|
-
session:
|
|
6
|
+
session: SessionInspectorInput;
|
|
6
7
|
className?: string;
|
|
7
8
|
defaultTab?: SessionInspectorTab;
|
|
8
9
|
transcriptProps?: Omit<SessionViewerProps, "session">;
|
|
10
|
+
renderSessionActions?: (item: SessionCollectionItem) => ReactNode;
|
|
11
|
+
/** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */
|
|
12
|
+
onPlanChange?: (content: string) => void;
|
|
13
|
+
composer?: ReactNode;
|
|
9
14
|
}
|
|
10
|
-
export declare function SessionInspector({ session, className, defaultTab, transcriptProps, }: SessionInspectorProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function SessionInspector({ session, className, defaultTab, transcriptProps, renderSessionActions, onPlanChange, composer, }: SessionInspectorProps): import("react/jsx-runtime").JSX.Element;
|
|
11
16
|
//# sourceMappingURL=SessionInspector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionInspector.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmB1D,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIzE,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,UAAU,GACV,KAAK,CAAC;AAEV,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACtD,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,SAAS,CAAC;IAClE,+FAA+F;IAC/F,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAYD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,UAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,GACT,EAAE,qBAAqB,2CA0CvB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../../lib/utils.cjs");
|
|
5
|
+
const Icon = require("../Icon.cjs");
|
|
6
|
+
const Tree = require("../Tree.cjs");
|
|
7
|
+
const UiFolder = require("../../icons/components/UiFolder.cjs");
|
|
8
|
+
const UiMarkdown = require("../../icons/components/UiMarkdown.cjs");
|
|
9
|
+
const UiJson = require("../../icons/components/UiJson.cjs");
|
|
10
|
+
const UiFileSpreadsheet = require("../../icons/components/UiFileSpreadsheet.cjs");
|
|
11
|
+
const UiImage = require("../../icons/components/UiImage.cjs");
|
|
12
|
+
const UiFileText = require("../../icons/components/UiFileText.cjs");
|
|
13
|
+
const UiFileCode = require("../../icons/components/UiFileCode.cjs");
|
|
14
|
+
const UiFile = require("../../icons/components/UiFile.cjs");
|
|
15
|
+
function SessionFilesPanel({
|
|
16
|
+
files
|
|
17
|
+
}) {
|
|
18
|
+
const roots = buildFileTree(files);
|
|
19
|
+
if (!roots.length) {
|
|
20
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-dashed border-border p-density-6 text-center text-sm text-muted-foreground", children: "No changed-file summary." });
|
|
21
|
+
}
|
|
22
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-lg border border-border bg-background", children: [
|
|
23
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b border-border bg-muted/30 px-density-3 py-density-2 text-xs text-muted-foreground", children: [
|
|
24
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
25
|
+
roots.reduce((count, node) => count + countFiles(node), 0),
|
|
26
|
+
" files"
|
|
27
|
+
] }),
|
|
28
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex gap-density-3", children: [
|
|
29
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "R read" }),
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "W written" })
|
|
31
|
+
] })
|
|
32
|
+
] }),
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
34
|
+
Tree.Tree,
|
|
35
|
+
{
|
|
36
|
+
roots,
|
|
37
|
+
ariaLabel: "Session files",
|
|
38
|
+
getChildren: (node) => [...node.children.values()].sort(compareNodes),
|
|
39
|
+
getKey: (node) => node.path,
|
|
40
|
+
getAriaLabel: (node) => node.path,
|
|
41
|
+
getSearchText: (node) => node.path,
|
|
42
|
+
defaultOpen: () => true,
|
|
43
|
+
renderRow: ({ node, hasChildren }) => /* @__PURE__ */ jsxRuntime.jsx(FileTreeRow, { node, directory: hasChildren }),
|
|
44
|
+
rowClass: (node) => utils.cn(
|
|
45
|
+
"group min-h-6 border-l-2 border-transparent py-0 pr-density-3 text-xs hover:border-primary/40 hover:bg-muted/40",
|
|
46
|
+
!node.children.size && node.access.has("written") && "border-l-amber-500/60"
|
|
47
|
+
),
|
|
48
|
+
className: "pb-1"
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
] });
|
|
52
|
+
}
|
|
53
|
+
function FileTreeRow({
|
|
54
|
+
node,
|
|
55
|
+
directory
|
|
56
|
+
}) {
|
|
57
|
+
const FileIcon = directory ? UiFolder.UiFolder : fileTypeIcon(node.name);
|
|
58
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
59
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
60
|
+
Icon.Icon,
|
|
61
|
+
{
|
|
62
|
+
icon: FileIcon,
|
|
63
|
+
className: utils.cn(
|
|
64
|
+
"size-4 shrink-0",
|
|
65
|
+
directory ? "text-sky-600 dark:text-sky-400" : "text-muted-foreground"
|
|
66
|
+
)
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
70
|
+
"span",
|
|
71
|
+
{
|
|
72
|
+
className: utils.cn(
|
|
73
|
+
"min-w-0 flex-1 truncate",
|
|
74
|
+
directory ? "font-medium" : "font-mono"
|
|
75
|
+
),
|
|
76
|
+
children: node.name
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
!directory ? /* @__PURE__ */ jsxRuntime.jsx(AccessBadge, { access: node.access }) : null
|
|
80
|
+
] });
|
|
81
|
+
}
|
|
82
|
+
function AccessBadge({ access }) {
|
|
83
|
+
const label = access.has("read") && access.has("written") ? "RW" : access.has("written") ? "W" : "R";
|
|
84
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
"span",
|
|
86
|
+
{
|
|
87
|
+
title: label === "RW" ? "Read and written" : label === "W" ? "Written" : "Read",
|
|
88
|
+
className: utils.cn(
|
|
89
|
+
"w-6 shrink-0 text-right font-mono text-[11px] font-semibold",
|
|
90
|
+
access.has("written") ? "text-amber-600 dark:text-amber-400" : "text-muted-foreground"
|
|
91
|
+
),
|
|
92
|
+
children: label
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
function buildFileTree(files) {
|
|
97
|
+
const roots = /* @__PURE__ */ new Map();
|
|
98
|
+
addPaths(roots, (files == null ? void 0 : files.read) ?? [], "read");
|
|
99
|
+
addPaths(roots, (files == null ? void 0 : files.written) ?? [], "written");
|
|
100
|
+
return [...roots.values()].sort(compareNodes);
|
|
101
|
+
}
|
|
102
|
+
function addPaths(roots, paths, access) {
|
|
103
|
+
for (const path of paths) {
|
|
104
|
+
const parts = path.split("/").filter(Boolean);
|
|
105
|
+
let nodes = roots;
|
|
106
|
+
let currentPath = "";
|
|
107
|
+
parts.forEach((part, index) => {
|
|
108
|
+
currentPath = currentPath ? `${currentPath}/${part}` : part;
|
|
109
|
+
const node = nodes.get(part) ?? {
|
|
110
|
+
name: part,
|
|
111
|
+
path: currentPath,
|
|
112
|
+
children: /* @__PURE__ */ new Map(),
|
|
113
|
+
access: /* @__PURE__ */ new Set()
|
|
114
|
+
};
|
|
115
|
+
nodes.set(part, node);
|
|
116
|
+
if (index === parts.length - 1) node.access.add(access);
|
|
117
|
+
nodes = node.children;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function compareNodes(left, right) {
|
|
122
|
+
const leftDirectory = left.children.size > 0;
|
|
123
|
+
const rightDirectory = right.children.size > 0;
|
|
124
|
+
if (leftDirectory !== rightDirectory) return leftDirectory ? -1 : 1;
|
|
125
|
+
return left.name.localeCompare(right.name);
|
|
126
|
+
}
|
|
127
|
+
function countFiles(node) {
|
|
128
|
+
return node.children.size ? [...node.children.values()].reduce(
|
|
129
|
+
(count, child) => count + countFiles(child),
|
|
130
|
+
0
|
|
131
|
+
) : 1;
|
|
132
|
+
}
|
|
133
|
+
function fileTypeIcon(path) {
|
|
134
|
+
const extension = path.toLowerCase().split(".").at(-1) ?? "";
|
|
135
|
+
if (["md", "mdx"].includes(extension)) return UiMarkdown.UiMarkdown;
|
|
136
|
+
if (["json", "jsonl"].includes(extension)) return UiJson.UiJson;
|
|
137
|
+
if (["csv", "xls", "xlsx"].includes(extension)) return UiFileSpreadsheet.UiFileSpreadsheet;
|
|
138
|
+
if (["png", "jpg", "jpeg", "gif", "svg", "webp"].includes(extension))
|
|
139
|
+
return UiImage.UiImage;
|
|
140
|
+
if (["txt", "log", "rst"].includes(extension)) return UiFileText.UiFileText;
|
|
141
|
+
if ([
|
|
142
|
+
"ts",
|
|
143
|
+
"tsx",
|
|
144
|
+
"js",
|
|
145
|
+
"jsx",
|
|
146
|
+
"go",
|
|
147
|
+
"py",
|
|
148
|
+
"rs",
|
|
149
|
+
"java",
|
|
150
|
+
"css",
|
|
151
|
+
"scss",
|
|
152
|
+
"html",
|
|
153
|
+
"yaml",
|
|
154
|
+
"yml",
|
|
155
|
+
"toml",
|
|
156
|
+
"sh"
|
|
157
|
+
].includes(extension))
|
|
158
|
+
return UiFileCode.UiFileCode;
|
|
159
|
+
return UiFile.UiFile;
|
|
160
|
+
}
|
|
161
|
+
exports.SessionFilesPanel = SessionFilesPanel;
|
|
162
|
+
//# sourceMappingURL=SessionInspector.files.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.files.cjs","sources":["../../../src/data/ai/SessionInspector.files.tsx"],"sourcesContent":["import {\n UiFile,\n UiFileCode,\n UiFileSpreadsheet,\n UiFileText,\n UiFolder,\n UiImage,\n UiJson,\n UiMarkdown,\n} from \"../../icons\";\nimport type { IconComponent } from \"../../icons/types\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\nimport { Tree } from \"../Tree\";\nimport type { SessionChangedFiles } from \"./SessionViewer.unified\";\n\ntype FileAccess = \"read\" | \"written\";\n\ntype FileTreeNode = {\n name: string;\n path: string;\n children: Map<string, FileTreeNode>;\n access: Set<FileAccess>;\n};\n\nexport function SessionFilesPanel({\n files,\n}: {\n files: SessionChangedFiles | undefined;\n}) {\n const roots = buildFileTree(files);\n if (!roots.length) {\n return (\n <div className=\"rounded-md border border-dashed border-border p-density-6 text-center text-sm text-muted-foreground\">\n No changed-file summary.\n </div>\n );\n }\n return (\n <div className=\"overflow-hidden rounded-lg border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border bg-muted/30 px-density-3 py-density-2 text-xs text-muted-foreground\">\n <span>\n {roots.reduce((count, node) => count + countFiles(node), 0)} files\n </span>\n <span className=\"flex gap-density-3\">\n <span>R read</span>\n <span>W written</span>\n </span>\n </div>\n <Tree<FileTreeNode>\n roots={roots}\n ariaLabel=\"Session files\"\n getChildren={(node) => [...node.children.values()].sort(compareNodes)}\n getKey={(node) => node.path}\n getAriaLabel={(node) => node.path}\n getSearchText={(node) => node.path}\n defaultOpen={() => true}\n renderRow={({ node, hasChildren }) => (\n <FileTreeRow node={node} directory={hasChildren} />\n )}\n rowClass={(node) =>\n cn(\n \"group min-h-6 border-l-2 border-transparent py-0 pr-density-3 text-xs hover:border-primary/40 hover:bg-muted/40\",\n !node.children.size &&\n node.access.has(\"written\") &&\n \"border-l-amber-500/60\",\n )\n }\n className=\"pb-1\"\n />\n </div>\n );\n}\n\nfunction FileTreeRow({\n node,\n directory,\n}: {\n node: FileTreeNode;\n directory: boolean;\n}) {\n const FileIcon = directory ? UiFolder : fileTypeIcon(node.name);\n return (\n <>\n <Icon\n icon={FileIcon}\n className={cn(\n \"size-4 shrink-0\",\n directory\n ? \"text-sky-600 dark:text-sky-400\"\n : \"text-muted-foreground\",\n )}\n />\n <span\n className={cn(\n \"min-w-0 flex-1 truncate\",\n directory ? \"font-medium\" : \"font-mono\",\n )}\n >\n {node.name}\n </span>\n {!directory ? <AccessBadge access={node.access} /> : null}\n </>\n );\n}\n\nfunction AccessBadge({ access }: { access: Set<FileAccess> }) {\n const label =\n access.has(\"read\") && access.has(\"written\")\n ? \"RW\"\n : access.has(\"written\")\n ? \"W\"\n : \"R\";\n return (\n <span\n title={\n label === \"RW\" ? \"Read and written\" : label === \"W\" ? \"Written\" : \"Read\"\n }\n className={cn(\n \"w-6 shrink-0 text-right font-mono text-[11px] font-semibold\",\n access.has(\"written\")\n ? \"text-amber-600 dark:text-amber-400\"\n : \"text-muted-foreground\",\n )}\n >\n {label}\n </span>\n );\n}\n\nfunction buildFileTree(files: SessionChangedFiles | undefined) {\n const roots = new Map<string, FileTreeNode>();\n addPaths(roots, files?.read ?? [], \"read\");\n addPaths(roots, files?.written ?? [], \"written\");\n return [...roots.values()].sort(compareNodes);\n}\n\nfunction addPaths(\n roots: Map<string, FileTreeNode>,\n paths: string[],\n access: FileAccess,\n) {\n for (const path of paths) {\n const parts = path.split(\"/\").filter(Boolean);\n let nodes = roots;\n let currentPath = \"\";\n parts.forEach((part, index) => {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n const node = nodes.get(part) ?? {\n name: part,\n path: currentPath,\n children: new Map(),\n access: new Set<FileAccess>(),\n };\n nodes.set(part, node);\n if (index === parts.length - 1) node.access.add(access);\n nodes = node.children;\n });\n }\n}\n\nfunction compareNodes(left: FileTreeNode, right: FileTreeNode) {\n const leftDirectory = left.children.size > 0;\n const rightDirectory = right.children.size > 0;\n if (leftDirectory !== rightDirectory) return leftDirectory ? -1 : 1;\n return left.name.localeCompare(right.name);\n}\n\nfunction countFiles(node: FileTreeNode): number {\n return node.children.size\n ? [...node.children.values()].reduce(\n (count, child) => count + countFiles(child),\n 0,\n )\n : 1;\n}\n\nfunction fileTypeIcon(path: string): IconComponent {\n const extension = path.toLowerCase().split(\".\").at(-1) ?? \"\";\n if ([\"md\", \"mdx\"].includes(extension)) return UiMarkdown;\n if ([\"json\", \"jsonl\"].includes(extension)) return UiJson;\n if ([\"csv\", \"xls\", \"xlsx\"].includes(extension)) return UiFileSpreadsheet;\n if ([\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\"].includes(extension))\n return UiImage;\n if ([\"txt\", \"log\", \"rst\"].includes(extension)) return UiFileText;\n if (\n [\n \"ts\",\n \"tsx\",\n \"js\",\n \"jsx\",\n \"go\",\n \"py\",\n \"rs\",\n \"java\",\n \"css\",\n \"scss\",\n \"html\",\n \"yaml\",\n \"yml\",\n \"toml\",\n \"sh\",\n ].includes(extension)\n )\n return UiFileCode;\n return UiFile;\n}\n"],"names":["jsx","jsxs","Tree","cn","UiFolder","Fragment","Icon","UiMarkdown","UiJson","UiFileSpreadsheet","UiImage","UiFileText","UiFileCode","UiFile"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.files.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.files.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAWnE,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,GACN,EAAE;IACD,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACxC,2CA2CA"}
|