@flanksource/clicky-ui 0.3.40 → 0.3.41
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/README.md +24 -0
- package/dist/ai.cjs +10 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +10 -0
- package/dist/ai.js.map +1 -1
- package/dist/components/AccordionList.cjs +5 -1
- package/dist/components/AccordionList.cjs.map +1 -1
- package/dist/components/AccordionList.d.ts +3 -1
- package/dist/components/AccordionList.d.ts.map +1 -1
- package/dist/components/AccordionList.js +5 -1
- package/dist/components/AccordionList.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +9 -4
- 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 +8 -3
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +3 -1
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
- package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-accordion-array.js +3 -1
- package/dist/components/json-schema-form-accordion-array.js.map +1 -1
- package/dist/components/json-schema-form-array-view.cjs +63 -0
- package/dist/components/json-schema-form-array-view.cjs.map +1 -0
- package/dist/components/json-schema-form-array-view.d.ts +21 -0
- package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
- package/dist/components/json-schema-form-array-view.js +63 -0
- package/dist/components/json-schema-form-array-view.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +3 -7
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +3 -7
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-conditionals.cjs +67 -0
- package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
- package/dist/components/json-schema-form-conditionals.d.ts +9 -0
- package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
- package/dist/components/json-schema-form-conditionals.js +67 -0
- package/dist/components/json-schema-form-conditionals.js.map +1 -0
- package/dist/components/json-schema-form-defaults.cjs +68 -0
- package/dist/components/json-schema-form-defaults.cjs.map +1 -0
- package/dist/components/json-schema-form-defaults.d.ts +4 -0
- package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
- package/dist/components/json-schema-form-defaults.js +68 -0
- package/dist/components/json-schema-form-defaults.js.map +1 -0
- package/dist/components/json-schema-form-errors.cjs +49 -31
- package/dist/components/json-schema-form-errors.cjs.map +1 -1
- package/dist/components/json-schema-form-errors.d.ts +4 -2
- package/dist/components/json-schema-form-errors.d.ts.map +1 -1
- package/dist/components/json-schema-form-errors.js +51 -33
- package/dist/components/json-schema-form-errors.js.map +1 -1
- package/dist/components/json-schema-form-filter.cjs +2 -1
- package/dist/components/json-schema-form-filter.cjs.map +1 -1
- package/dist/components/json-schema-form-filter.js +2 -1
- package/dist/components/json-schema-form-filter.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +6 -2
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
- package/dist/components/json-schema-form-item-summary.js +6 -2
- package/dist/components/json-schema-form-item-summary.js.map +1 -1
- package/dist/components/json-schema-form-layout.cjs +28 -19
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +8 -6
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +29 -20
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-listener-paths.cjs +52 -0
- package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
- package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
- package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
- package/dist/components/json-schema-form-listener-paths.js +52 -0
- package/dist/components/json-schema-form-listener-paths.js.map +1 -0
- package/dist/components/json-schema-form-listener-types.d.ts +22 -0
- package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
- package/dist/components/json-schema-form-listeners.cjs +250 -0
- package/dist/components/json-schema-form-listeners.cjs.map +1 -0
- package/dist/components/json-schema-form-listeners.d.ts +13 -0
- package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
- package/dist/components/json-schema-form-listeners.js +250 -0
- package/dist/components/json-schema-form-listeners.js.map +1 -0
- package/dist/components/json-schema-form-object-array-view.cjs +62 -0
- package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
- package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
- package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
- package/dist/components/json-schema-form-object-array-view.js +62 -0
- package/dist/components/json-schema-form-object-array-view.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +3 -0
- 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 +3 -0
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +17 -9
- 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 +19 -11
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +6 -99
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts +1 -8
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +5 -98
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-runtime-types.d.ts +15 -0
- package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-table-array.cjs +67 -16
- package/dist/components/json-schema-form-table-array.cjs.map +1 -1
- package/dist/components/json-schema-form-table-array.d.ts +4 -1
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-table-array.js +70 -19
- package/dist/components/json-schema-form-table-array.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +16 -0
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +7 -1
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +2 -1
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +7 -1
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components.cjs +3 -2
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +3 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +2 -1
- package/dist/components.js.map +1 -1
- package/dist/data/DataTable.cjs +9 -3
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +6 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +9 -3
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
- package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
- package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
- package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
- package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
- package/dist/data/Tree.cjs +10 -2
- package/dist/data/Tree.cjs.map +1 -1
- package/dist/data/Tree.d.ts +6 -1
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js +10 -2
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/ai/SessionInspector.cjs +143 -167
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
- package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.collection.cjs +18 -5
- package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
- package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
- package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.collection.js +18 -5
- package/dist/data/ai/SessionInspector.collection.js.map +1 -1
- package/dist/data/ai/SessionInspector.d.ts +24 -2
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
- package/dist/data/ai/SessionInspector.hierarchy-state.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.js +144 -168
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
- package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
- package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.legacy.js +116 -0
- package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
- package/dist/data/ai/SessionInspector.panels.cjs +3 -0
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.panels.js +3 -0
- package/dist/data/ai/SessionInspector.panels.js.map +1 -1
- package/dist/data/ai/SessionInspector.plan.cjs +29 -12
- package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.plan.js +30 -13
- package/dist/data/ai/SessionInspector.plan.js.map +1 -1
- package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
- package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
- package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.remote-view.js +44 -0
- package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
- package/dist/data/ai/SessionInspector.remote.cjs +275 -0
- package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
- package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.remote.js +275 -0
- package/dist/data/ai/SessionInspector.remote.js.map +1 -0
- package/dist/data/ai/SessionInspector.summary.cjs +0 -156
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
- package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.summary.js +2 -158
- package/dist/data/ai/SessionInspector.summary.js.map +1 -1
- package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
- package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
- package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.tab-state.js +15 -0
- package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
- package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
- package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
- package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
- package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
- package/dist/data/ai/SessionInspector.verification.cjs +53 -0
- package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
- package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.verification.js +53 -0
- package/dist/data/ai/SessionInspector.verification.js.map +1 -0
- package/dist/data/ai/SessionViewer.model.cjs +7 -1
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +21 -3
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +7 -1
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +13 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/index.d.ts +3 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/devtools/useDebugStream.cjs +5 -1
- package/dist/devtools/useDebugStream.cjs.map +1 -1
- package/dist/devtools/useDebugStream.d.ts.map +1 -1
- package/dist/devtools/useDebugStream.js +6 -2
- package/dist/devtools/useDebugStream.js.map +1 -1
- package/dist/hooks/event-source-provider.cjs +9 -0
- package/dist/hooks/event-source-provider.cjs.map +1 -0
- package/dist/hooks/event-source-provider.d.ts +15 -0
- package/dist/hooks/event-source-provider.d.ts.map +1 -0
- package/dist/hooks/event-source-provider.js +9 -0
- package/dist/hooks/event-source-provider.js.map +1 -0
- package/dist/hooks/event-source.cjs +11 -0
- package/dist/hooks/event-source.cjs.map +1 -0
- package/dist/hooks/event-source.d.ts +22 -0
- package/dist/hooks/event-source.d.ts.map +1 -0
- package/dist/hooks/event-source.js +11 -0
- package/dist/hooks/event-source.js.map +1 -0
- package/dist/hooks/use-log-tail.cjs +5 -1
- package/dist/hooks/use-log-tail.cjs.map +1 -1
- package/dist/hooks/use-log-tail.d.ts.map +1 -1
- package/dist/hooks/use-log-tail.js +5 -1
- package/dist/hooks/use-log-tail.js.map +1 -1
- package/dist/hooks/use-prompts.cjs +5 -1
- package/dist/hooks/use-prompts.cjs.map +1 -1
- package/dist/hooks/use-prompts.d.ts.map +1 -1
- package/dist/hooks/use-prompts.js +6 -2
- package/dist/hooks/use-prompts.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +9 -2
- 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 +10 -3
- 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 +2 -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/programmingCatalog.cjs +34 -34
- package/dist/icons/programmingCatalog.cjs.map +1 -1
- package/dist/icons/programmingCatalog.js +34 -34
- package/dist/icons/programmingCatalog.js.map +1 -1
- package/dist/index.cjs +9 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/monaco/MonacoEditor.cjs +4 -1
- package/dist/monaco/MonacoEditor.cjs.map +1 -1
- package/dist/monaco/MonacoEditor.d.ts +1 -1
- package/dist/monaco/MonacoEditor.d.ts.map +1 -1
- package/dist/monaco/MonacoEditor.js +4 -1
- package/dist/monaco/MonacoEditor.js.map +1 -1
- package/dist/monaco/types.d.ts +2 -1
- package/dist/monaco/types.d.ts.map +1 -1
- package/dist/overlay/CommandPalette.cjs +14 -4
- package/dist/overlay/CommandPalette.cjs.map +1 -1
- package/dist/overlay/CommandPalette.d.ts +5 -1
- package/dist/overlay/CommandPalette.d.ts.map +1 -1
- package/dist/overlay/CommandPalette.js +14 -4
- package/dist/overlay/CommandPalette.js.map +1 -1
- package/dist/overlay/CommandPaletteList.cjs +5 -0
- package/dist/overlay/CommandPaletteList.cjs.map +1 -1
- package/dist/overlay/CommandPaletteList.d.ts +4 -2
- package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
- package/dist/overlay/CommandPaletteList.js +5 -0
- package/dist/overlay/CommandPaletteList.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +1 -0
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.js +1 -0
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +29 -26
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +9 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +29 -26
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
- package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.js +64 -258
- package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
- package/dist/rpc/OperationEntityPicker.cjs +185 -0
- package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
- package/dist/rpc/OperationEntityPicker.d.ts +51 -0
- package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
- package/dist/rpc/OperationEntityPicker.js +185 -0
- package/dist/rpc/OperationEntityPicker.js.map +1 -0
- package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
- package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
- package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
- package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
- package/dist/rpc/OperationEntityPicker.model.js +39 -0
- package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
- package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
- package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
- package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
- package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
- package/dist/rpc/operationCatalogRowSelection.js +85 -0
- package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
- package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
- package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +2 -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/package.json +4 -1
- package/schemas/json-schema-form.schema.json +566 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo, useState
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
3
|
import { cn } from "../../lib/utils.js";
|
|
4
4
|
import { SessionInspectorPanel } from "./SessionInspector.panels.js";
|
|
5
|
-
import { SessionInspectorHeader
|
|
5
|
+
import { SessionInspectorHeader } from "./SessionInspector.summary.js";
|
|
6
6
|
import { CompactSessionInspectorToolbar } from "./SessionInspector.compact.js";
|
|
7
7
|
import { InspectorTabs } from "./SessionInspector.tabs.js";
|
|
8
8
|
import { hasStructuredOutput, inspectorTabs } from "./SessionInspector.tabs.model.js";
|
|
@@ -10,12 +10,70 @@ import { SessionTranscript } from "./SessionInspector.transcript.js";
|
|
|
10
10
|
import { isSessionCollectionInput } from "./SessionInspector.collection.js";
|
|
11
11
|
import { SessionHierarchyTree, SessionHierarchyPicker } from "./SessionInspector.hierarchy.js";
|
|
12
12
|
import { useSessionHierarchy } from "./SessionInspector.hierarchy-state.js";
|
|
13
|
-
import {
|
|
13
|
+
import { LegacySessionInspector } from "./SessionInspector.legacy.js";
|
|
14
|
+
import { useInspectorTab } from "./SessionInspector.tab-state.js";
|
|
15
|
+
import { useRemoteSession, useRemoteCollection } from "./SessionInspector.remote.js";
|
|
16
|
+
import { RemoteSessionStatus } from "./SessionInspector.remote-view.js";
|
|
14
17
|
import { getSessionMetadata } from "./SessionViewer.model.js";
|
|
15
18
|
function SessionInspector({
|
|
16
19
|
session,
|
|
20
|
+
src,
|
|
21
|
+
follow,
|
|
22
|
+
className,
|
|
23
|
+
...options
|
|
24
|
+
}) {
|
|
25
|
+
if (session !== void 0 && src !== void 0) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
"SessionInspector takes either `session` or `src`, not both"
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
if (session === void 0 && src === void 0) {
|
|
31
|
+
throw new Error("SessionInspector requires a `session` or a `src`");
|
|
32
|
+
}
|
|
33
|
+
const followOptions = follow === void 0 ? {} : { follow };
|
|
34
|
+
const remote = useRemoteSession(src, followOptions);
|
|
35
|
+
const collection = session !== void 0 && isSessionCollectionInput(session) ? session : void 0;
|
|
36
|
+
const remoteCollection = useRemoteCollection(collection, followOptions);
|
|
37
|
+
const status = src !== void 0 ? remote : remoteCollection;
|
|
38
|
+
const resolved = src !== void 0 ? remote.session : collection ? remoteCollection.collection : session;
|
|
39
|
+
const remoteBacked = src !== void 0 || collection !== void 0 && remoteCollection.collection !== collection;
|
|
40
|
+
if (resolved && !remoteBacked) {
|
|
41
|
+
return /* @__PURE__ */ jsx(
|
|
42
|
+
SessionInspectorView,
|
|
43
|
+
{
|
|
44
|
+
session: resolved,
|
|
45
|
+
...followOptions,
|
|
46
|
+
...options,
|
|
47
|
+
...className ? { className } : {}
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
return /* @__PURE__ */ jsx(
|
|
52
|
+
RemoteSessionStatus,
|
|
53
|
+
{
|
|
54
|
+
loading: status.loading,
|
|
55
|
+
...status.error ? { error: status.error } : {},
|
|
56
|
+
...className ? { className } : {},
|
|
57
|
+
children: resolved ? /* @__PURE__ */ jsx(
|
|
58
|
+
SessionInspectorView,
|
|
59
|
+
{
|
|
60
|
+
session: resolved,
|
|
61
|
+
...followOptions,
|
|
62
|
+
...options
|
|
63
|
+
}
|
|
64
|
+
) : null
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
function SessionInspectorView({
|
|
69
|
+
session,
|
|
70
|
+
follow,
|
|
17
71
|
className,
|
|
18
72
|
defaultTab = "transcript",
|
|
73
|
+
tab,
|
|
74
|
+
onTabChange,
|
|
75
|
+
selectedSessionIds,
|
|
76
|
+
onSelectedSessionIdsChange,
|
|
19
77
|
transcriptProps,
|
|
20
78
|
renderSessionActions,
|
|
21
79
|
onPlanChange,
|
|
@@ -33,8 +91,16 @@ function SessionInspector({
|
|
|
33
91
|
() => isSessionCollectionInput(session) ? session : detail ? singleSessionCollection(detail) : void 0,
|
|
34
92
|
[detail, session]
|
|
35
93
|
);
|
|
94
|
+
const tabProps = {
|
|
95
|
+
...tab ? { tab } : {},
|
|
96
|
+
...onTabChange ? { onTabChange } : {}
|
|
97
|
+
};
|
|
36
98
|
if (collection) {
|
|
37
99
|
const optionalProps = {
|
|
100
|
+
...tabProps,
|
|
101
|
+
...follow === void 0 ? {} : { follow },
|
|
102
|
+
...selectedSessionIds ? { selectedSessionIds } : {},
|
|
103
|
+
...onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {},
|
|
38
104
|
...className ? { className } : {},
|
|
39
105
|
...transcriptProps ? { transcriptProps } : {},
|
|
40
106
|
...renderSessionActions ? { renderSessionActions } : {},
|
|
@@ -59,6 +125,7 @@ function SessionInspector({
|
|
|
59
125
|
{
|
|
60
126
|
session,
|
|
61
127
|
defaultTab,
|
|
128
|
+
...tabProps,
|
|
62
129
|
...className ? { className } : {},
|
|
63
130
|
...transcriptProps ? { transcriptProps } : {},
|
|
64
131
|
...composer ? { composer } : {},
|
|
@@ -70,8 +137,13 @@ function SessionInspector({
|
|
|
70
137
|
}
|
|
71
138
|
function CollectionSessionInspector({
|
|
72
139
|
collection,
|
|
140
|
+
follow,
|
|
73
141
|
className,
|
|
74
142
|
defaultTab = "transcript",
|
|
143
|
+
tab: controlledTab,
|
|
144
|
+
onTabChange,
|
|
145
|
+
selectedSessionIds,
|
|
146
|
+
onSelectedSessionIdsChange,
|
|
75
147
|
transcriptProps,
|
|
76
148
|
renderSessionActions,
|
|
77
149
|
onPlanChange,
|
|
@@ -81,15 +153,22 @@ function CollectionSessionInspector({
|
|
|
81
153
|
metadata,
|
|
82
154
|
toolbarActions
|
|
83
155
|
}) {
|
|
84
|
-
const hierarchy = useSessionHierarchy(collection
|
|
156
|
+
const hierarchy = useSessionHierarchy(collection, {
|
|
157
|
+
...selectedSessionIds ? { selectedSessionIds } : {},
|
|
158
|
+
...onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {},
|
|
159
|
+
...follow === void 0 ? {} : { follow }
|
|
160
|
+
});
|
|
85
161
|
const compact = layout === "compact";
|
|
86
162
|
const [menuHost, setMenuHost] = useState(null);
|
|
87
163
|
const outputVisible = hasStructuredOutput(hierarchy.current);
|
|
88
|
-
const [tab, setTab] =
|
|
89
|
-
defaultTab
|
|
164
|
+
const [tab, setTab] = useInspectorTab(
|
|
165
|
+
defaultTab,
|
|
166
|
+
outputVisible,
|
|
167
|
+
controlledTab,
|
|
168
|
+
onTabChange
|
|
90
169
|
);
|
|
91
170
|
const transcriptClassName = cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
|
|
92
|
-
const panelDetail = tab === "costs" ? hierarchy.filtered : hierarchy.current;
|
|
171
|
+
const panelDetail = tab === "costs" || tab === "verification" ? hierarchy.filtered : hierarchy.current;
|
|
93
172
|
const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);
|
|
94
173
|
const compactTabs = inspectorTabs(
|
|
95
174
|
outputVisible,
|
|
@@ -115,9 +194,6 @@ function CollectionSessionInspector({
|
|
|
115
194
|
menuHeader: compactMenuHeader,
|
|
116
195
|
showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
|
|
117
196
|
} : transcriptProps;
|
|
118
|
-
useEffect(() => {
|
|
119
|
-
if (tab === "output" && !outputVisible) setTab("transcript");
|
|
120
|
-
}, [outputVisible, tab]);
|
|
121
197
|
return /* @__PURE__ */ jsxs(
|
|
122
198
|
"div",
|
|
123
199
|
{
|
|
@@ -157,189 +233,89 @@ function CollectionSessionInspector({
|
|
|
157
233
|
),
|
|
158
234
|
/* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab })
|
|
159
235
|
] }),
|
|
160
|
-
/* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ jsx(
|
|
161
237
|
"div",
|
|
162
238
|
{
|
|
163
239
|
className: cn(
|
|
164
240
|
"min-h-0 flex-1 overflow-y-auto",
|
|
165
|
-
!compact && "
|
|
241
|
+
!compact && "flex flex-col lg:overflow-hidden"
|
|
166
242
|
),
|
|
167
|
-
children:
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
children: [
|
|
176
|
-
|
|
177
|
-
/* @__PURE__ */ jsx(
|
|
178
|
-
"div",
|
|
179
|
-
{
|
|
180
|
-
className: cn(
|
|
181
|
-
"min-h-0 flex-1 overflow-hidden",
|
|
182
|
-
tab !== "transcript" && "hidden"
|
|
183
|
-
),
|
|
184
|
-
children: /* @__PURE__ */ jsx(
|
|
185
|
-
SessionTranscript,
|
|
186
|
-
{
|
|
187
|
-
session: hierarchy.filtered,
|
|
188
|
-
viewerProps: {
|
|
189
|
-
...compactTranscriptProps,
|
|
190
|
-
className: transcriptClassName
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
)
|
|
194
|
-
}
|
|
195
|
-
),
|
|
196
|
-
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
197
|
-
SessionInspectorPanel,
|
|
198
|
-
{
|
|
199
|
-
tab,
|
|
200
|
-
detail: panelDetail,
|
|
201
|
-
session: hierarchy.current,
|
|
202
|
-
...onPlanChange ? { onPlanChange } : {},
|
|
203
|
-
...onResolveApproval ? { onResolveApproval } : {}
|
|
204
|
-
}
|
|
205
|
-
) }) : null
|
|
206
|
-
] }) : /* @__PURE__ */ jsx(
|
|
243
|
+
children: /* @__PURE__ */ jsxs(
|
|
244
|
+
"main",
|
|
245
|
+
{
|
|
246
|
+
className: cn(
|
|
247
|
+
"flex min-w-0 flex-col",
|
|
248
|
+
compact ? "min-h-0" : "min-h-[28rem] flex-1 lg:min-h-0"
|
|
249
|
+
),
|
|
250
|
+
children: [
|
|
251
|
+
compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
252
|
+
/* @__PURE__ */ jsx(
|
|
207
253
|
"div",
|
|
208
254
|
{
|
|
209
255
|
className: cn(
|
|
210
|
-
"min-h-0 flex-1",
|
|
211
|
-
tab
|
|
256
|
+
"min-h-0 flex-1 overflow-hidden",
|
|
257
|
+
tab !== "transcript" && "hidden"
|
|
212
258
|
),
|
|
213
|
-
children:
|
|
259
|
+
children: /* @__PURE__ */ jsx(
|
|
214
260
|
SessionTranscript,
|
|
215
261
|
{
|
|
216
262
|
session: hierarchy.filtered,
|
|
217
263
|
viewerProps: {
|
|
218
|
-
...
|
|
264
|
+
...compactTranscriptProps,
|
|
219
265
|
className: transcriptClassName
|
|
220
266
|
}
|
|
221
267
|
}
|
|
222
|
-
) : /* @__PURE__ */ jsx(
|
|
223
|
-
SessionInspectorPanel,
|
|
224
|
-
{
|
|
225
|
-
tab,
|
|
226
|
-
detail: panelDetail,
|
|
227
|
-
session: hierarchy.current,
|
|
228
|
-
...onPlanChange ? { onPlanChange } : {},
|
|
229
|
-
...onResolveApproval ? { onResolveApproval } : {}
|
|
230
|
-
}
|
|
231
268
|
)
|
|
232
269
|
}
|
|
233
270
|
),
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
271
|
+
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
272
|
+
SessionInspectorPanel,
|
|
273
|
+
{
|
|
274
|
+
tab,
|
|
275
|
+
detail: panelDetail,
|
|
276
|
+
session: hierarchy.current,
|
|
277
|
+
...onPlanChange ? { onPlanChange } : {},
|
|
278
|
+
...onResolveApproval ? { onResolveApproval } : {}
|
|
279
|
+
}
|
|
280
|
+
) }) : null
|
|
281
|
+
] }) : /* @__PURE__ */ jsx(
|
|
282
|
+
"div",
|
|
283
|
+
{
|
|
284
|
+
className: cn(
|
|
285
|
+
"min-h-0 flex-1",
|
|
286
|
+
tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
|
|
287
|
+
),
|
|
288
|
+
children: tab === "transcript" ? /* @__PURE__ */ jsx(
|
|
289
|
+
SessionTranscript,
|
|
290
|
+
{
|
|
291
|
+
session: hierarchy.filtered,
|
|
292
|
+
viewerProps: {
|
|
293
|
+
...transcriptProps,
|
|
294
|
+
className: transcriptClassName
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
) : /* @__PURE__ */ jsx(
|
|
298
|
+
SessionInspectorPanel,
|
|
299
|
+
{
|
|
300
|
+
tab,
|
|
301
|
+
detail: panelDetail,
|
|
302
|
+
session: hierarchy.current,
|
|
303
|
+
...onPlanChange ? { onPlanChange } : {},
|
|
304
|
+
...onResolveApproval ? { onResolveApproval } : {}
|
|
305
|
+
}
|
|
306
|
+
)
|
|
307
|
+
}
|
|
308
|
+
),
|
|
309
|
+
composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
|
|
310
|
+
]
|
|
311
|
+
}
|
|
312
|
+
)
|
|
240
313
|
}
|
|
241
314
|
)
|
|
242
315
|
]
|
|
243
316
|
}
|
|
244
317
|
);
|
|
245
318
|
}
|
|
246
|
-
function LegacySessionInspector({
|
|
247
|
-
session,
|
|
248
|
-
className,
|
|
249
|
-
defaultTab = "transcript",
|
|
250
|
-
transcriptProps,
|
|
251
|
-
composer,
|
|
252
|
-
layout = "default",
|
|
253
|
-
metadata,
|
|
254
|
-
toolbarActions
|
|
255
|
-
}) {
|
|
256
|
-
const compact = layout === "compact";
|
|
257
|
-
const [menuHost, setMenuHost] = useState(null);
|
|
258
|
-
const [tab, setTab] = useState(
|
|
259
|
-
defaultTab === "output" ? "transcript" : defaultTab
|
|
260
|
-
);
|
|
261
|
-
const transcriptClassName = cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
|
|
262
|
-
const compactTabs = inspectorTabs(false);
|
|
263
|
-
const compactMetadata = metadata ?? getSessionMetadata(session);
|
|
264
|
-
const viewerProps = compact ? {
|
|
265
|
-
...transcriptProps,
|
|
266
|
-
menuContainer: menuHost,
|
|
267
|
-
showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
|
|
268
|
-
} : transcriptProps;
|
|
269
|
-
return /* @__PURE__ */ jsxs(
|
|
270
|
-
"div",
|
|
271
|
-
{
|
|
272
|
-
className: cn(
|
|
273
|
-
"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm",
|
|
274
|
-
compact ? "@container rounded-none border-0 shadow-none" : "rounded-xl border border-border shadow-sm",
|
|
275
|
-
className
|
|
276
|
-
),
|
|
277
|
-
children: [
|
|
278
|
-
compact ? /* @__PURE__ */ jsx(
|
|
279
|
-
CompactSessionInspectorToolbar,
|
|
280
|
-
{
|
|
281
|
-
tabs: compactTabs,
|
|
282
|
-
activeTab: tab,
|
|
283
|
-
onSelect: (next) => setTab(next),
|
|
284
|
-
onMenuHost: setMenuHost,
|
|
285
|
-
...compactMetadata ? { metadata: compactMetadata } : {},
|
|
286
|
-
...toolbarActions ? { toolbarActions } : {}
|
|
287
|
-
}
|
|
288
|
-
) : /* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
|
|
289
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
|
|
290
|
-
compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
291
|
-
/* @__PURE__ */ jsx(
|
|
292
|
-
"div",
|
|
293
|
-
{
|
|
294
|
-
className: cn(
|
|
295
|
-
"min-h-0 flex-1 overflow-hidden",
|
|
296
|
-
tab !== "transcript" && "hidden"
|
|
297
|
-
),
|
|
298
|
-
children: /* @__PURE__ */ jsx(
|
|
299
|
-
SessionViewer,
|
|
300
|
-
{
|
|
301
|
-
session,
|
|
302
|
-
scrollable: true,
|
|
303
|
-
showRowMetadata: true,
|
|
304
|
-
...viewerProps,
|
|
305
|
-
className: transcriptClassName,
|
|
306
|
-
showHeader: false,
|
|
307
|
-
showContextMeter: false
|
|
308
|
-
}
|
|
309
|
-
)
|
|
310
|
-
}
|
|
311
|
-
),
|
|
312
|
-
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
313
|
-
SessionInspectorPanel,
|
|
314
|
-
{
|
|
315
|
-
tab,
|
|
316
|
-
detail: void 0,
|
|
317
|
-
session
|
|
318
|
-
}
|
|
319
|
-
) }) : null
|
|
320
|
-
] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsx(
|
|
321
|
-
SessionViewer,
|
|
322
|
-
{
|
|
323
|
-
session,
|
|
324
|
-
scrollable: true,
|
|
325
|
-
showRowMetadata: true,
|
|
326
|
-
...transcriptProps,
|
|
327
|
-
className: transcriptClassName
|
|
328
|
-
}
|
|
329
|
-
) : /* @__PURE__ */ jsx(
|
|
330
|
-
SessionInspectorPanel,
|
|
331
|
-
{
|
|
332
|
-
tab,
|
|
333
|
-
detail: void 0,
|
|
334
|
-
session
|
|
335
|
-
}
|
|
336
|
-
) }),
|
|
337
|
-
composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
|
|
338
|
-
] })
|
|
339
|
-
]
|
|
340
|
-
}
|
|
341
|
-
);
|
|
342
|
-
}
|
|
343
319
|
function singleSessionCollection(session) {
|
|
344
320
|
const id = session.id || "session";
|
|
345
321
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.js","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport {\n SessionInspectorHeader,\n SessionInspectorSidebar,\n} from \"./SessionInspector.summary\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n hasStructuredOutput,\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport {\n SessionHierarchyPicker,\n SessionHierarchyTree,\n} from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { type ApprovalResolveHandler } from \"./SessionInspector.approvals-model\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type { SessionInspectorTab } from \"./SessionInspector.tabs.model\";\n\nexport interface SessionInspectorProps {\n session: SessionInspectorInput;\n className?: string;\n /** Compact keeps tabs, runtime context, host actions, and session options on one line. */\n layout?: \"default\" | \"compact\";\n /** Runtime metadata to display in the compact context bar. Defaults to session metadata. */\n metadata?: SessionMetadataSummary;\n /** Host controls rendered before Session options in the compact toolbar. */\n toolbarActions?: ReactNode;\n defaultTab?: SessionInspectorTab;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n}\n\nexport function SessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorProps) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n if (collection) {\n const optionalProps = {\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n ...(layout === \"compact\" ? { layout } : {}),\n ...(metadata ? { metadata } : {}),\n ...(toolbarActions ? { toolbarActions } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n {...(layout === \"compact\" ? { layout } : {})}\n {...(metadata ? { metadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: Omit<SessionInspectorProps, \"session\"> & {\n collection: SessionCollectionInput;\n}) {\n const hierarchy = useSessionHierarchy(collection);\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const outputVisible = hasStructuredOutput(hierarchy.current);\n const [tab, setTab] = useState<SessionInspectorTab>(\n defaultTab === \"output\" && !outputVisible ? \"transcript\" : defaultTab,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail = tab === \"costs\" ? hierarchy.filtered : hierarchy.current;\n const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);\n const compactTabs = inspectorTabs(\n outputVisible,\n hierarchy.current,\n hierarchy.filtered,\n );\n const compactMenuHeader = (\n <div className=\"w-[min(38rem,calc(100vw-4rem))]\">\n <p className=\"px-1 pb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Session content\n </p>\n <SessionHierarchyTree\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n className=\"h-[min(32rem,52vh)]\"\n />\n {transcriptProps?.menuHeader ? (\n <div className=\"mt-1 border-t border-border pt-1\">\n {transcriptProps.menuHeader}\n </div>\n ) : null}\n </div>\n );\n const compactTranscriptProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n menuHeader: compactMenuHeader,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n\n useEffect(() => {\n if (tab === \"output\" && !outputVisible) setTab(\"transcript\");\n }, [outputVisible, tab]);\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <>\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n </>\n )}\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto\",\n !compact &&\n \"grid lg:grid-cols-[minmax(0,1fr)_18rem] lg:overflow-hidden\",\n )}\n >\n <main\n className={cn(\n \"flex min-w-0 flex-col\",\n compact ? \"min-h-0\" : \"min-h-[28rem] lg:min-h-0\",\n )}\n >\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...compactTranscriptProps,\n className: transcriptClassName,\n }}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n {!compact ? (\n <SessionInspectorSidebar session={hierarchy.current} />\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: Pick<\n SessionInspectorProps,\n | \"className\"\n | \"defaultTab\"\n | \"transcriptProps\"\n | \"composer\"\n | \"layout\"\n | \"metadata\"\n | \"toolbarActions\"\n> & {\n session: SessionInput;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useState<SessionInspectorTab>(\n defaultTab === \"output\" ? \"transcript\" : defaultTab,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...viewerProps}\n className={transcriptClassName}\n showHeader={false}\n showContextMeter={false}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionInspector.js","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { SessionInspectorHeader } from \"./SessionInspector.summary\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n hasStructuredOutput,\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport {\n SessionHierarchyPicker,\n SessionHierarchyTree,\n} from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { type ApprovalResolveHandler } from \"./SessionInspector.approvals-model\";\nimport { LegacySessionInspector } from \"./SessionInspector.legacy\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport {\n useRemoteCollection,\n useRemoteSession,\n} from \"./SessionInspector.remote\";\nimport { RemoteSessionStatus } from \"./SessionInspector.remote-view\";\nimport type { SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type { SessionInspectorTab } from \"./SessionInspector.tabs.model\";\n\n/**\n * Either an in-memory `session` or a session URL `src` (never both — the\n * types forbid it and the component throws). With `src` the inspector fetches\n * the session and follows it while it is live; see `SessionInput` for the URL\n * contract. `follow` forces (`true`) or suppresses (`false`) the live stream\n * for `src` and for collection items that carry `src`.\n */\nexport type SessionInspectorProps = SessionInspectorOptions &\n (\n | { session: SessionInspectorInput; src?: never; follow?: boolean }\n | { src: string; session?: never; follow?: boolean }\n );\n\nexport interface SessionInspectorOptions {\n className?: string;\n /** Compact keeps tabs, runtime context, host actions, and session options on one line. */\n layout?: \"default\" | \"compact\";\n /** Runtime metadata to display in the compact context bar. Defaults to session metadata. */\n metadata?: SessionMetadataSummary;\n /** Host controls rendered before Session options in the compact toolbar. */\n toolbarActions?: ReactNode;\n defaultTab?: SessionInspectorTab;\n /** Controlled active tab (e.g. from the URL); pair with `onTabChange`. */\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n /** Controlled session-level selection of a session collection; `[]` selects\n * nothing. Omit to start from the collection's defaults. */\n selectedSessionIds?: readonly string[];\n onSelectedSessionIdsChange?: (ids: string[]) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n}\n\nexport function SessionInspector({\n session,\n src,\n follow,\n className,\n ...options\n}: SessionInspectorProps) {\n if (session !== undefined && src !== undefined) {\n throw new Error(\n \"SessionInspector takes either `session` or `src`, not both\",\n );\n }\n if (session === undefined && src === undefined) {\n throw new Error(\"SessionInspector requires a `session` or a `src`\");\n }\n const followOptions = follow === undefined ? {} : { follow };\n const remote = useRemoteSession(src, followOptions);\n const collection =\n session !== undefined && isSessionCollectionInput(session)\n ? session\n : undefined;\n const remoteCollection = useRemoteCollection(collection, followOptions);\n const status = src !== undefined ? remote : remoteCollection;\n const resolved: SessionInspectorInput | undefined =\n src !== undefined\n ? remote.session\n : collection\n ? remoteCollection.collection\n : session;\n\n // A URL-backed inspector always renders inside the status wrapper, so an\n // error arriving mid-follow adds the alert without remounting the view.\n const remoteBacked =\n src !== undefined ||\n (collection !== undefined && remoteCollection.collection !== collection);\n if (resolved && !remoteBacked) {\n return (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n {...(className ? { className } : {})}\n />\n );\n }\n return (\n <RemoteSessionStatus\n loading={status.loading}\n {...(status.error ? { error: status.error } : {})}\n {...(className ? { className } : {})}\n >\n {resolved ? (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n />\n ) : null}\n </RemoteSessionStatus>\n );\n}\n\nfunction SessionInspectorView({\n session,\n follow,\n className,\n defaultTab = \"transcript\",\n tab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n session: SessionInspectorInput;\n follow?: boolean;\n}) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n const tabProps = {\n ...(tab ? { tab } : {}),\n ...(onTabChange ? { onTabChange } : {}),\n };\n\n if (collection) {\n const optionalProps = {\n ...tabProps,\n ...(follow === undefined ? {} : { follow }),\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n ...(layout === \"compact\" ? { layout } : {}),\n ...(metadata ? { metadata } : {}),\n ...(toolbarActions ? { toolbarActions } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...tabProps}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n {...(layout === \"compact\" ? { layout } : {})}\n {...(metadata ? { metadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n follow,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n collection: SessionCollectionInput;\n follow?: boolean;\n}) {\n const hierarchy = useSessionHierarchy(collection, {\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(follow === undefined ? {} : { follow }),\n });\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const outputVisible = hasStructuredOutput(hierarchy.current);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n outputVisible,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail =\n tab === \"costs\" || tab === \"verification\"\n ? hierarchy.filtered\n : hierarchy.current;\n const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);\n const compactTabs = inspectorTabs(\n outputVisible,\n hierarchy.current,\n hierarchy.filtered,\n );\n const compactMenuHeader = (\n <div className=\"w-[min(38rem,calc(100vw-4rem))]\">\n <p className=\"px-1 pb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Session content\n </p>\n <SessionHierarchyTree\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n className=\"h-[min(32rem,52vh)]\"\n />\n {transcriptProps?.menuHeader ? (\n <div className=\"mt-1 border-t border-border pt-1\">\n {transcriptProps.menuHeader}\n </div>\n ) : null}\n </div>\n );\n const compactTranscriptProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n menuHeader: compactMenuHeader,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <>\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n </>\n )}\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto\",\n !compact && \"flex flex-col lg:overflow-hidden\",\n )}\n >\n <main\n className={cn(\n \"flex min-w-0 flex-col\",\n compact ? \"min-h-0\" : \"min-h-[28rem] flex-1 lg:min-h-0\",\n )}\n >\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...compactTranscriptProps,\n className: transcriptClassName,\n }}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n </div>\n </div>\n );\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const utils = require("../../lib/utils.cjs");
|
|
6
|
+
const SessionInspector_panels = require("./SessionInspector.panels.cjs");
|
|
7
|
+
const SessionInspector_compact = require("./SessionInspector.compact.cjs");
|
|
8
|
+
const SessionInspector_tabs = require("./SessionInspector.tabs.cjs");
|
|
9
|
+
const SessionInspector_tabs_model = require("./SessionInspector.tabs.model.cjs");
|
|
10
|
+
const SessionInspector_tabState = require("./SessionInspector.tab-state.cjs");
|
|
11
|
+
const SessionViewer = require("./SessionViewer.cjs");
|
|
12
|
+
const SessionViewer_model = require("./SessionViewer.model.cjs");
|
|
13
|
+
function LegacySessionInspector({
|
|
14
|
+
session,
|
|
15
|
+
className,
|
|
16
|
+
defaultTab = "transcript",
|
|
17
|
+
tab: controlledTab,
|
|
18
|
+
onTabChange,
|
|
19
|
+
transcriptProps,
|
|
20
|
+
composer,
|
|
21
|
+
layout = "default",
|
|
22
|
+
metadata,
|
|
23
|
+
toolbarActions
|
|
24
|
+
}) {
|
|
25
|
+
const compact = layout === "compact";
|
|
26
|
+
const [menuHost, setMenuHost] = react.useState(null);
|
|
27
|
+
const [tab, setTab] = SessionInspector_tabState.useInspectorTab(
|
|
28
|
+
defaultTab,
|
|
29
|
+
false,
|
|
30
|
+
controlledTab,
|
|
31
|
+
onTabChange
|
|
32
|
+
);
|
|
33
|
+
const transcriptClassName = utils.cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
|
|
34
|
+
const compactTabs = SessionInspector_tabs_model.inspectorTabs(false);
|
|
35
|
+
const compactMetadata = metadata ?? SessionViewer_model.getSessionMetadata(session);
|
|
36
|
+
const viewerProps = compact ? {
|
|
37
|
+
...transcriptProps,
|
|
38
|
+
menuContainer: menuHost,
|
|
39
|
+
showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
|
|
40
|
+
} : transcriptProps;
|
|
41
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
className: utils.cn(
|
|
45
|
+
"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm",
|
|
46
|
+
compact ? "@container rounded-none border-0 shadow-none" : "rounded-xl border border-border shadow-sm",
|
|
47
|
+
className
|
|
48
|
+
),
|
|
49
|
+
children: [
|
|
50
|
+
compact ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
51
|
+
SessionInspector_compact.CompactSessionInspectorToolbar,
|
|
52
|
+
{
|
|
53
|
+
tabs: compactTabs,
|
|
54
|
+
activeTab: tab,
|
|
55
|
+
onSelect: (next) => setTab(next),
|
|
56
|
+
onMenuHost: setMenuHost,
|
|
57
|
+
...compactMetadata ? { metadata: compactMetadata } : {},
|
|
58
|
+
...toolbarActions ? { toolbarActions } : {}
|
|
59
|
+
}
|
|
60
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_tabs.InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
|
|
62
|
+
compact ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
"div",
|
|
65
|
+
{
|
|
66
|
+
className: utils.cn(
|
|
67
|
+
"min-h-0 flex-1 overflow-hidden",
|
|
68
|
+
tab !== "transcript" && "hidden"
|
|
69
|
+
),
|
|
70
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
+
SessionViewer.SessionViewer,
|
|
72
|
+
{
|
|
73
|
+
session,
|
|
74
|
+
scrollable: true,
|
|
75
|
+
showRowMetadata: true,
|
|
76
|
+
...viewerProps,
|
|
77
|
+
className: transcriptClassName,
|
|
78
|
+
showHeader: false,
|
|
79
|
+
showContextMeter: false
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
tab !== "transcript" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
SessionInspector_panels.SessionInspectorPanel,
|
|
86
|
+
{
|
|
87
|
+
tab,
|
|
88
|
+
detail: void 0,
|
|
89
|
+
session
|
|
90
|
+
}
|
|
91
|
+
) }) : null
|
|
92
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
+
SessionViewer.SessionViewer,
|
|
94
|
+
{
|
|
95
|
+
session,
|
|
96
|
+
scrollable: true,
|
|
97
|
+
showRowMetadata: true,
|
|
98
|
+
...transcriptProps,
|
|
99
|
+
className: transcriptClassName
|
|
100
|
+
}
|
|
101
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
SessionInspector_panels.SessionInspectorPanel,
|
|
103
|
+
{
|
|
104
|
+
tab,
|
|
105
|
+
detail: void 0,
|
|
106
|
+
session
|
|
107
|
+
}
|
|
108
|
+
) }),
|
|
109
|
+
composer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
|
|
110
|
+
] })
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
exports.LegacySessionInspector = LegacySessionInspector;
|
|
116
|
+
//# sourceMappingURL=SessionInspector.legacy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.legacy.cjs","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\n\n/** The inspector for a non-unified session (legacy entries or raw log text):\n * only the transcript carries content, so it has no hierarchy or facets. */\nexport function LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: {\n session: SessionInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n composer?: ReactNode;\n layout?: \"default\" | \"compact\";\n metadata?: SessionMetadataSummary;\n toolbarActions?: ReactNode;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n false,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...viewerProps}\n className={transcriptClassName}\n showHeader={false}\n showContextMeter={false}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["useState","useInspectorTab","cn","inspectorTabs","getSessionMetadata","jsxs","jsx","CompactSessionInspectorToolbar","InspectorTabs","Fragment","SessionViewer","SessionInspectorPanel"],"mappings":";;;;;;;;;;;;AAmBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAWG;AACD,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAiC,IAAI;AACrE,QAAM,CAAC,KAAK,MAAM,IAAIC,0BAAAA;AAAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,sBAAsBC,MAAAA,GAAG,UAAU,mDAAiB,SAAS;AACnE,QAAM,cAAcC,4BAAAA,cAAc,KAAK;AACvC,QAAM,kBAAkB,YAAYC,oBAAAA,mBAAmB,OAAO;AAC9D,QAAM,cAAc,UAChB;AAAA,IACE,GAAG;AAAA,IACH,eAAe;AAAA,IACf,UAAU,aAAa,SAAQ,mDAAiB,cAAa;AAAA,EAAA,IAE/D;AACJ,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,MAAAA;AAAAA,QACT;AAAA,QACA,UACI,iDACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,UACCI,2BAAAA;AAAAA,UAACC,yBAAAA;AAAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU,CAAC,SAAS,OAAO,IAA2B;AAAA,YACtD,YAAY;AAAA,YACX,GAAI,kBAAkB,EAAE,UAAU,gBAAA,IAAoB,CAAA;AAAA,YACtD,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,UAAC;AAAA,QAAA,IAG9CD,2BAAAA,IAACE,sBAAAA,eAAA,EAAc,KAAU,MAAM,aAAa,UAAU,QAAQ;AAAA,QAEhEH,2BAAAA,KAAC,OAAA,EAAI,WAAU,gDACZ,UAAA;AAAA,UAAA,UACCA,2BAAAA,KAAAI,qBAAA,EACE,UAAA;AAAA,YAAAH,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWJ,MAAAA;AAAAA,kBACT;AAAA,kBACA,QAAQ,gBAAgB;AAAA,gBAAA;AAAA,gBAG1B,UAAAI,2BAAAA;AAAAA,kBAACI,cAAAA;AAAAA,kBAAA;AAAA,oBACC;AAAA,oBACA,YAAU;AAAA,oBACV,iBAAe;AAAA,oBACd,GAAG;AAAA,oBACJ,WAAW;AAAA,oBACX,YAAY;AAAA,oBACZ,kBAAkB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACpB;AAAA,YAAA;AAAA,YAED,QAAQ,eACPJ,+BAAC,OAAA,EAAI,WAAU,4CACb,UAAAA,2BAAAA;AAAAA,cAACK,wBAAAA;AAAAA,cAAA;AAAA,gBACC;AAAA,gBACA,QAAQ;AAAA,gBACR;AAAA,cAAA;AAAA,YAAA,GAEJ,IACE;AAAA,UAAA,GACN,IAEAL,+BAAC,OAAA,EAAI,WAAU,kCACZ,kBAAQ,eACPA,2BAAAA;AAAAA,YAACI,cAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,YAAU;AAAA,cACV,iBAAe;AAAA,cACd,GAAG;AAAA,cACJ,WAAW;AAAA,YAAA;AAAA,UAAA,IAGbJ,2BAAAA;AAAAA,YAACK,wBAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,UAED,WACCL,2BAAAA,IAAC,OAAA,EAAI,WAAU,+CACZ,oBACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SessionInspectorTab } from './SessionInspector.tabs.model.js';
|
|
3
|
+
import { SessionViewerProps } from './SessionViewer.js';
|
|
4
|
+
import { SessionInput, SessionMetadataSummary } from './SessionViewer.model.js';
|
|
5
|
+
/** The inspector for a non-unified session (legacy entries or raw log text):
|
|
6
|
+
* only the transcript carries content, so it has no hierarchy or facets. */
|
|
7
|
+
export declare function LegacySessionInspector({ session, className, defaultTab, tab: controlledTab, onTabChange, transcriptProps, composer, layout, metadata, toolbarActions, }: {
|
|
8
|
+
session: SessionInput;
|
|
9
|
+
className?: string;
|
|
10
|
+
defaultTab?: SessionInspectorTab;
|
|
11
|
+
tab?: SessionInspectorTab;
|
|
12
|
+
onTabChange?: (tab: SessionInspectorTab) => void;
|
|
13
|
+
transcriptProps?: Omit<SessionViewerProps, "session">;
|
|
14
|
+
composer?: ReactNode;
|
|
15
|
+
layout?: "default" | "compact";
|
|
16
|
+
metadata?: SessionMetadataSummary;
|
|
17
|
+
toolbarActions?: ReactNode;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=SessionInspector.legacy.d.ts.map
|