@flanksource/clicky-ui 0.3.40 → 0.3.42
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 +14 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +14 -0
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.cjs +3 -1
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +4 -2
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +16 -0
- package/dist/comments/CommentCardParts.cjs.map +1 -1
- package/dist/comments/CommentCardParts.d.ts +4 -1
- package/dist/comments/CommentCardParts.d.ts.map +1 -1
- package/dist/comments/CommentCardParts.js +16 -0
- package/dist/comments/CommentCardParts.js.map +1 -1
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +4 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.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/Combobox.cjs +54 -8
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +56 -10
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxMenu.cjs +139 -113
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts +3 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +139 -113
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ComboboxMenuTrigger.cjs +87 -0
- package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
- package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
- package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
- package/dist/components/ComboboxMenuTrigger.js +87 -0
- package/dist/components/ComboboxMenuTrigger.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +39 -11
- 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 +38 -10
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/SegmentedControl.cjs +20 -3
- package/dist/components/SegmentedControl.cjs.map +1 -1
- package/dist/components/SegmentedControl.d.ts +11 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +21 -4
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/combobox-types.d.ts +8 -0
- package/dist/components/combobox-types.d.ts.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-debug-badge.cjs +108 -0
- package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
- package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-badge.js +108 -0
- package/dist/components/json-schema-form-debug-badge.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
- package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
- package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
- package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
- package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-glyph.js +13 -0
- package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
- package/dist/components/json-schema-form-debug-groups.cjs +56 -0
- package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
- package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-groups.js +56 -0
- package/dist/components/json-schema-form-debug-groups.js.map +1 -0
- package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
- package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
- package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-keywords.js +159 -0
- package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
- package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
- package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
- package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-listeners.js +102 -0
- package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
- package/dist/components/json-schema-form-debug.cjs +31 -0
- package/dist/components/json-schema-form-debug.cjs.map +1 -0
- package/dist/components/json-schema-form-debug.d.ts +11 -0
- package/dist/components/json-schema-form-debug.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug.js +31 -0
- package/dist/components/json-schema-form-debug.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-enum-choice.cjs +114 -0
- package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
- package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
- package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
- package/dist/components/json-schema-form-enum-choice.js +114 -0
- package/dist/components/json-schema-form-enum-choice.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-fields.cjs +3 -93
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +1 -91
- package/dist/components/json-schema-form-fields.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 +256 -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 +256 -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-preferences.cjs +1 -0
- package/dist/components/json-schema-form-preferences.cjs.map +1 -1
- package/dist/components/json-schema-form-preferences.d.ts +1 -0
- package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
- package/dist/components/json-schema-form-preferences.js +1 -0
- package/dist/components/json-schema-form-preferences.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +36 -12
- 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 +38 -14
- 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 +16 -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-tone.cjs +12 -0
- package/dist/components/json-schema-form-tone.cjs.map +1 -1
- package/dist/components/json-schema-form-tone.js +12 -0
- package/dist/components/json-schema-form-tone.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +17 -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/GraphDiagram.cjs +125 -138
- package/dist/data/GraphDiagram.cjs.map +1 -1
- package/dist/data/GraphDiagram.d.ts +30 -23
- package/dist/data/GraphDiagram.d.ts.map +1 -1
- package/dist/data/GraphDiagram.js +128 -141
- package/dist/data/GraphDiagram.js.map +1 -1
- package/dist/data/GraphDiagramEdges.cjs +208 -0
- package/dist/data/GraphDiagramEdges.cjs.map +1 -0
- package/dist/data/GraphDiagramEdges.d.ts +40 -0
- package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
- package/dist/data/GraphDiagramEdges.js +208 -0
- package/dist/data/GraphDiagramEdges.js.map +1 -0
- package/dist/data/GraphDiagramNodes.cjs +142 -0
- package/dist/data/GraphDiagramNodes.cjs.map +1 -0
- package/dist/data/GraphDiagramNodes.d.ts +22 -0
- package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
- package/dist/data/GraphDiagramNodes.js +142 -0
- package/dist/data/GraphDiagramNodes.js.map +1 -0
- 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/PromptRunEditor/RuntimeRows.cjs +8 -3
- package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
- package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +38 -44
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
- package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
- package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
- package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
- package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.js +26 -2
- package/dist/data/ai/SessionInspector.approvals.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 +9 -159
- 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 +11 -161
- 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.transcript.cjs +4 -0
- package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.js +4 -0
- package/dist/data/ai/SessionInspector.transcript.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.approval-body.cjs +146 -0
- package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
- package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.approval-body.js +146 -0
- package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
- package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
- package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
- package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
- package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
- package/dist/data/ai/SessionViewer.cjs +57 -20
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +13 -3
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
- package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
- package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
- package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
- package/dist/data/ai/SessionViewer.decision.cjs +21 -0
- package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
- package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.decision.js +21 -0
- package/dist/data/ai/SessionViewer.decision.js.map +1 -0
- package/dist/data/ai/SessionViewer.input.cjs +14 -0
- package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.input.d.ts +5 -0
- package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.input.js +14 -0
- package/dist/data/ai/SessionViewer.input.js.map +1 -1
- package/dist/data/ai/SessionViewer.js +58 -21
- package/dist/data/ai/SessionViewer.js.map +1 -1
- 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 +25 -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.rows.cjs +6 -3
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +6 -3
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.js +27 -235
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +17 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.cjs +8 -2
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
- package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.js +8 -2
- package/dist/data/ai/SessionViewerMenu.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
- 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 +14 -6
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
- package/dist/data/ai/approval-request.cjs +75 -0
- package/dist/data/ai/approval-request.cjs.map +1 -0
- package/dist/data/ai/approval-request.d.ts +155 -0
- package/dist/data/ai/approval-request.d.ts.map +1 -0
- package/dist/data/ai/approval-request.js +75 -0
- package/dist/data/ai/approval-request.js.map +1 -0
- package/dist/data/ai/index.d.ts +6 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
- package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
- package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
- package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
- package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
- package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/model.js +73 -0
- package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
- package/dist/data/ai/runtime-spec-fields.cjs +166 -0
- package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
- package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
- package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
- package/dist/data/ai/runtime-spec-fields.js +166 -0
- package/dist/data/ai/runtime-spec-fields.js.map +1 -0
- package/dist/data/ai/session-categories.cjs +4 -0
- package/dist/data/ai/session-categories.cjs.map +1 -1
- package/dist/data/ai/session-categories.d.ts +1 -0
- package/dist/data/ai/session-categories.d.ts.map +1 -1
- package/dist/data/ai/session-categories.js +4 -0
- package/dist/data/ai/session-categories.js.map +1 -1
- package/dist/data/ai/use-session-scroll.cjs +49 -21
- package/dist/data/ai/use-session-scroll.cjs.map +1 -1
- package/dist/data/ai/use-session-scroll.d.ts +2 -0
- package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.js +49 -21
- package/dist/data/ai/use-session-scroll.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +1 -1
- package/dist/data/chat/Chat.runtime.cjs.map +1 -1
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
- package/dist/data/chat/Chat.runtime.js +1 -1
- package/dist/data/chat/Chat.runtime.js.map +1 -1
- package/dist/data/graph-columns-layout.cjs +216 -0
- package/dist/data/graph-columns-layout.cjs.map +1 -0
- package/dist/data/graph-columns-layout.d.ts +56 -0
- package/dist/data/graph-columns-layout.d.ts.map +1 -0
- package/dist/data/graph-columns-layout.js +216 -0
- package/dist/data/graph-columns-layout.js.map +1 -0
- package/dist/data/graph-diagram-model.cjs +73 -0
- package/dist/data/graph-diagram-model.cjs.map +1 -0
- package/dist/data/graph-diagram-model.d.ts +90 -0
- package/dist/data/graph-diagram-model.d.ts.map +1 -0
- package/dist/data/graph-diagram-model.js +73 -0
- package/dist/data/graph-diagram-model.js.map +1 -0
- package/dist/data/graph-edge-routing.cjs +235 -0
- package/dist/data/graph-edge-routing.cjs.map +1 -0
- package/dist/data/graph-edge-routing.d.ts +73 -0
- package/dist/data/graph-edge-routing.d.ts.map +1 -0
- package/dist/data/graph-edge-routing.js +235 -0
- package/dist/data/graph-edge-routing.js.map +1 -0
- package/dist/data/graph-layout.cjs +0 -82
- package/dist/data/graph-layout.cjs.map +1 -1
- package/dist/data/graph-layout.d.ts +1 -28
- package/dist/data/graph-layout.d.ts.map +1 -1
- package/dist/data/graph-layout.js +1 -83
- package/dist/data/graph-layout.js.map +1 -1
- package/dist/data/har/HarPanel.cjs +129 -33
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts +13 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +130 -34
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/har/fixtures.d.ts +12 -0
- package/dist/data/har/fixtures.d.ts.map +1 -1
- package/dist/data/har/types.d.ts +12 -0
- package/dist/data/har/types.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +67 -84
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +4 -5
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
- package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
- package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.fields.js +170 -0
- package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.js +70 -87
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
- package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
- package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.selection.js +56 -0
- package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
- package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
- package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.js +10 -6
- package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
- package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
- package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
- package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
- package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
- package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
- package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBarLayout.js +95 -0
- package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
- package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
- package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
- package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.js +25 -14
- package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
- package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
- package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
- package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
- package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeLimitInput.js +41 -0
- package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
- package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
- package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
- package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
- package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
- package/dist/data/use-edge-focus.cjs +20 -0
- package/dist/data/use-edge-focus.cjs.map +1 -0
- package/dist/data/use-edge-focus.d.ts +23 -0
- package/dist/data/use-edge-focus.d.ts.map +1 -0
- package/dist/data/use-edge-focus.js +20 -0
- package/dist/data/use-edge-focus.js.map +1 -0
- package/dist/data/use-pan-zoom.cjs +159 -0
- package/dist/data/use-pan-zoom.cjs.map +1 -0
- package/dist/data/use-pan-zoom.d.ts +79 -0
- package/dist/data/use-pan-zoom.d.ts.map +1 -0
- package/dist/data/use-pan-zoom.js +159 -0
- package/dist/data/use-pan-zoom.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +5 -1
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -3
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +6 -2
- package/dist/data.js.map +1 -1
- 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 +14 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -3
- 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 +2 -0
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +4 -0
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +2 -0
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.js +31 -15
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +32 -27
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +11 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +32 -27
- 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/useOperationPages.cjs +6 -1
- package/dist/rpc/useOperationPages.cjs.map +1 -1
- package/dist/rpc/useOperationPages.d.ts +3 -1
- package/dist/rpc/useOperationPages.d.ts.map +1 -1
- package/dist/rpc/useOperationPages.js +6 -1
- package/dist/rpc/useOperationPages.js.map +1 -1
- 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 +571 -0
- package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBarCombo.js +0 -423
- package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
- package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
- package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
- package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBarLimits.js +0 -262
- package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
- package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBarSegments.js +0 -346
- package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { StaticIconComponent } from '../Icon.js';
|
|
2
|
+
import { ApprovalKind, ApprovalRequest } from './approval-request.js';
|
|
2
3
|
import { SessionBudget, SessionCapabilities, SessionContext, SessionCost, SessionMetadataEvent, SessionTurn, SessionUIMessage, SessionUIPart, SessionUsage, UnifiedSessionInput } from './SessionViewer.unified.js';
|
|
3
4
|
export interface SessionToolUse {
|
|
4
5
|
tool?: string;
|
|
@@ -43,9 +44,27 @@ export interface SessionEntry {
|
|
|
43
44
|
error?: string;
|
|
44
45
|
}
|
|
45
46
|
/**
|
|
46
|
-
* A session to render:
|
|
47
|
-
* `GET /api/captain/sessions/{id}` serves),
|
|
48
|
-
* raw log text (JSON array or JSONL).
|
|
47
|
+
* A session to render: a `UnifiedSessionInput` (preferred — what
|
|
48
|
+
* `GET /api/captain/sessions/{id}` serves), bare `SessionUIMessage[]`, a legacy
|
|
49
|
+
* `SessionEntry[]` log, or raw log text (JSON array or JSONL).
|
|
50
|
+
*
|
|
51
|
+
* `SessionInspector` (and `SessionCollectionItem`) also accept a session URL
|
|
52
|
+
* as `src` instead, with this contract:
|
|
53
|
+
* - `GET {src}` with `Accept: application/json` returns one
|
|
54
|
+
* `UnifiedSessionInput`. A non-2xx body is `{ error, … }` JSON or plain text
|
|
55
|
+
* and is shown verbatim.
|
|
56
|
+
* - `GET {src}?follow=1` (appended to any existing query) is an SSE stream of
|
|
57
|
+
* `entry` frames (one `SessionUIMessage`, upserted by `id`), `state` frames
|
|
58
|
+
* (`{ revision, lifecycleStatus, activityState, facets }` — a higher
|
|
59
|
+
* revision, or a `facets` that differs from the last one seen, refetches
|
|
60
|
+
* the aggregate; `facets` is an opaque fingerprint of the non-message
|
|
61
|
+
* session facets — plan, todos, files, approval requests — and its first
|
|
62
|
+
* reported value is the baseline, not itself a refetch trigger), `error`
|
|
63
|
+
* frames (`{ error }`) and `: ping` comments; the server closes it once the
|
|
64
|
+
* session is terminal.
|
|
65
|
+
* - The stream is opened only while `lifecycleStatus` is non-terminal (not
|
|
66
|
+
* succeeded/partial/failed/cancelled/interrupted/completed) unless the host
|
|
67
|
+
* passes `follow`. See `useRemoteSession`.
|
|
49
68
|
*/
|
|
50
69
|
export type SessionInput = string | SessionEntry[] | SessionUIMessage[] | UnifiedSessionInput;
|
|
51
70
|
export interface SessionMetadataSummary {
|
|
@@ -94,6 +113,9 @@ export interface SessionEvent {
|
|
|
94
113
|
toolState?: string;
|
|
95
114
|
approval?: SessionUIPart["approval"];
|
|
96
115
|
pending?: boolean;
|
|
116
|
+
/** Typed approval for a pending tool row (see `SessionPendingTool.kind`). */
|
|
117
|
+
approvalKind?: ApprovalKind;
|
|
118
|
+
approvalRequest?: ApprovalRequest;
|
|
97
119
|
toolCallId?: string;
|
|
98
120
|
approvalId?: string;
|
|
99
121
|
sessionId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAwCjC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"SessionViewer.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -288,6 +288,7 @@ function pendingFromPart(part) {
|
|
|
288
288
|
function normalizeMessages(messages) {
|
|
289
289
|
const events = [];
|
|
290
290
|
messages.forEach((msg, seq) => {
|
|
291
|
+
var _a, _b;
|
|
291
292
|
const prov = msg.provenance;
|
|
292
293
|
const baseId = msg.id ?? (prov == null ? void 0 : prov.uuid) ?? `m${seq}`;
|
|
293
294
|
if (prov == null ? void 0 : prov.apiErrorStatus) {
|
|
@@ -317,8 +318,13 @@ function normalizeMessages(messages) {
|
|
|
317
318
|
...msg.raw !== void 0 ? { raw: msg.raw } : {},
|
|
318
319
|
...verifyPassed !== void 0 ? { verifyPassed } : {}
|
|
319
320
|
};
|
|
321
|
+
const verifyKind = (_b = asRecord(
|
|
322
|
+
(_a = msg.parts.find((part) => part.type === "data-verify")) == null ? void 0 : _a.data
|
|
323
|
+
)) == null ? void 0 : _b.kind;
|
|
320
324
|
msg.parts.forEach((part, i) => {
|
|
321
|
-
|
|
325
|
+
var _a2;
|
|
326
|
+
const shownPart = verifyPassed !== void 0 && part.type === "text" && typeof verifyKind === "string" && !((_a2 = part.text) == null ? void 0 : _a2.startsWith(`${verifyKind} ·`)) ? { ...part, text: `${verifyKind} · ${part.text ?? ""}` } : part;
|
|
327
|
+
const ev = partEvent(shownPart, role, `${baseId}-${i}`, meta);
|
|
322
328
|
if (ev) events.push(ev);
|
|
323
329
|
});
|
|
324
330
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.model.js","sources":["../../../src/data/ai/SessionViewer.model.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { WORKFLOW_PHASES } from \"./agent-action-icons\";\nimport type {\n SessionBudget,\n SessionCapabilities,\n SessionContext,\n SessionCost,\n SessionMetadataEvent,\n SessionTurn,\n SessionUIMessage,\n SessionUIPart,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport {\n UiAsterisk,\n UiCamera,\n UiClose,\n UiCloudDownload,\n UiCode2,\n UiCommand,\n UiCompass,\n UiCursorClick,\n UiCursorText,\n UiDiff,\n UiEye,\n UiGlobe,\n UiHourglass,\n UiKanban,\n UiKeyboard,\n UiListChecks,\n UiMagicWand,\n UiPalette,\n UiPencilSimpleLine,\n UiProhibit,\n UiPuzzle,\n UiQuestion,\n UiRobotAi,\n UiScan,\n UiScroll,\n UiSearch,\n UiShare,\n UiSparkles,\n UiStack,\n UiStrategy,\n UiTerminal,\n UiWrench,\n} from \"../../icons\";\n\n// ── Captain session schema ──────────────────────────────────────────────────\n// Mirrors github.com/flanksource/captain pkg/ai/history types. A session is a\n// list of SessionEntry records (the rows of a Claude Code / Codex JSONL log).\n\nexport interface SessionToolUse {\n tool?: string;\n input?: Record<string, unknown>;\n timestamp?: string;\n cwd?: string;\n session_id?: string;\n tool_use_id?: string;\n /** \"claude\" or \"codex\". */\n source?: string;\n model?: string;\n reasoning_effort?: string;\n response?: string;\n}\n\nexport interface SessionContent {\n /** Block kind: \"text\", \"thinking\", \"tool_use\", \"tool_result\", … */\n type?: string;\n text?: string;\n thinking?: string;\n name?: string;\n input?: Record<string, unknown>;\n id?: string;\n}\n\nexport interface SessionMessage {\n role?: string;\n stop_reason?: string;\n content?: SessionContent[];\n}\n\nexport interface SessionEntry {\n /** Top-level entry kind: assistant, user, system, … */\n type?: string;\n tool_use?: SessionToolUse;\n message?: SessionMessage;\n timestamp?: string;\n cwd?: string;\n sessionId?: string;\n uuid?: string;\n /** Synthetic assistant entry Claude Code writes when an API request fails. */\n isApiErrorMessage?: boolean;\n apiErrorStatus?: number;\n /** Claude Code's error classification (e.g. \"rate_limit\"). */\n error?: string;\n}\n\n/**\n * A session to render: the unified `SessionUIMessage[]` (preferred — what\n * `GET /api/captain/sessions/{id}` serves), a legacy `SessionEntry[]` log, or\n * raw log text (JSON array or JSONL).\n */\nexport type SessionInput =\n | string\n | SessionEntry[]\n | SessionUIMessage[]\n | UnifiedSessionInput;\n\nexport interface SessionMetadataSummary {\n /** Session identifier exposed by the context meter's copy action. */\n sessionId?: string;\n /** Runtime mechanism used to execute the session. */\n executionMode?: string;\n turns?: SessionTurn[];\n capabilities?: SessionCapabilities;\n budget?: SessionBudget;\n context?: SessionContext;\n events?: SessionMetadataEvent[];\n /** Dominant model id, for the context meter's hover popover. */\n model?: string;\n /** Provider id, used to resolve the model's brand glyph. */\n provider?: string;\n /** Session reasoning effort, for the context meter's hover popover. */\n reasoningEffort?: string;\n /** Last permission mode recorded in the transcript, for the header badge. */\n permissionMode?: string;\n /** Aggregate token usage, for the context meter's hover popover. */\n usage?: SessionUsage;\n /** Aggregate cost breakdown, for the context meter's hover popover. */\n cost?: SessionCost;\n}\n\n// ── Normalized events ───────────────────────────────────────────────────────\n// The raw schema interleaves consolidated `tool_use` rows with `message`\n// content blocks. normalizeSession flattens both shapes into a single ordered\n// list the viewer can render row-by-row.\n\nexport type SessionEventKind =\n | \"system\"\n | \"user\"\n | \"assistant\"\n | \"thinking\"\n | \"tool\"\n | \"error\";\n\nexport interface SessionEvent {\n id: string;\n kind: SessionEventKind;\n /** Tool name (kind === \"tool\"). */\n tool?: string;\n toolInput?: Record<string, unknown>;\n toolResponse?: string;\n /** Prose for user/assistant/thinking, or the error message for errors. */\n text?: string;\n /** Canonical file part rendered as an attachment thumbnail or chip. */\n file?: SessionUIPart;\n /** Working directory the tool ran in — used to relativize file paths. */\n cwd?: string;\n timestamp?: string;\n model?: string;\n reasoningEffort?: string;\n source?: string;\n turnId?: string;\n agentId?: string;\n toolState?: string;\n approval?: SessionUIPart[\"approval\"];\n pending?: boolean;\n toolCallId?: string;\n approvalId?: string;\n sessionId?: string;\n raw?: unknown;\n errorType?: string;\n errorStatus?: number;\n /** Set for a `verified`/`verify_failed` role — the workflow verify verdict. */\n verifyPassed?: boolean;\n /** Row icon override (e.g. the verify glyph). Renderers fall back to the\n * kind's default icon when absent. */\n icon?: StaticIconComponent;\n /** Row tone override (e.g. pass/fail for a verify row). Renderers fall back\n * to the kind's default tone when absent. */\n tone?: SessionTone;\n}\n\nexport function truncate(text: string, max: number): string {\n return text.length <= max ? text : `${text.slice(0, max)}…`;\n}\n\n// parseEntries accepts a parsed array as-is, or parses a string as a whole-\n// document JSON (array or single object, possibly pretty-printed) first, then\n// falls back to JSONL (one object per line). The whole-document parse error is\n// caught only to attempt the JSONL fallback — a genuinely malformed JSONL line\n// throws loudly rather than being silently dropped.\nfunction parseEntries(input: string | SessionEntry[]): SessionEntry[] {\n if (Array.isArray(input)) return input;\n const text = input.trim();\n if (!text) return [];\n try {\n const parsed: unknown = JSON.parse(text);\n return Array.isArray(parsed)\n ? (parsed as SessionEntry[])\n : [parsed as SessionEntry];\n } catch {\n // not a single JSON document — treat as JSONL below\n }\n return text\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n try {\n return JSON.parse(line) as SessionEntry;\n } catch {\n throw new Error(\n `SessionViewer: invalid session JSON line: ${truncate(line, 80)}`,\n );\n }\n });\n}\n\n// \"verified\"/\"verify_failed\" pass through unchanged — the legacy SessionEntry\n// path needs the raw role to route to the same verify row `normalizeMessages`\n// builds for the unified path (see the call site below), not just a\n// system/user/assistant kind.\nfunction roleFromType(type: string | undefined): string {\n return type === \"system\" ||\n type === \"user\" ||\n type === \"assistant\" ||\n type === \"verified\" ||\n type === \"verify_failed\"\n ? type\n : \"assistant\";\n}\n\nfunction toolEvent(\n id: string,\n tool: string,\n input: Record<string, unknown> | undefined,\n response: string | undefined,\n timestamp: string | undefined,\n meta: {\n model?: string;\n reasoningEffort?: string;\n source?: string;\n cwd?: string;\n turnId?: string;\n agentId?: string;\n toolState?: string;\n approval?: SessionUIPart[\"approval\"];\n pending?: boolean;\n toolCallId?: string;\n approvalId?: string;\n sessionId?: string;\n raw?: unknown;\n } = {},\n): SessionEvent {\n return {\n id,\n kind: \"tool\",\n tool,\n ...(input ? { toolInput: input } : {}),\n ...(response ? { toolResponse: response } : {}),\n ...(timestamp ? { timestamp } : {}),\n ...(meta.model ? { model: meta.model } : {}),\n ...(meta.reasoningEffort ? { reasoningEffort: meta.reasoningEffort } : {}),\n ...(meta.source ? { source: meta.source } : {}),\n ...(meta.cwd ? { cwd: meta.cwd } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.toolState ? { toolState: meta.toolState } : {}),\n ...(meta.approval ? { approval: meta.approval } : {}),\n pending: meta.pending ?? false,\n ...(meta.toolCallId ? { toolCallId: meta.toolCallId } : {}),\n ...(meta.approvalId ? { approvalId: meta.approvalId } : {}),\n ...(meta.sessionId ? { sessionId: meta.sessionId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n };\n}\n\nfunction blockEvent(\n block: SessionContent,\n role: string,\n id: string,\n timestamp: string | undefined,\n cwd: string | undefined,\n verifyPassed: boolean | undefined,\n): SessionEvent | null {\n if (block.type === \"tool_use\" || (block.name && block.input)) {\n if (!block.name) return null;\n return toolEvent(id, block.name, block.input, undefined, timestamp, {\n ...(cwd ? { cwd } : {}),\n ...(block.id ? { toolCallId: block.id } : {}),\n });\n }\n if (block.type === \"thinking\" || block.thinking) {\n const text = block.thinking ?? block.text;\n return text\n ? { id, kind: \"thinking\", text, ...(timestamp ? { timestamp } : {}) }\n : null;\n }\n if (block.text) {\n // A verify step reports its verdict as a `verified`/`verify_failed` role —\n // rendered as a system-style row carrying the pass/fail tone and the\n // workflow verify glyph, mirroring `normalizeMessages`'s unified-path rows.\n return {\n id,\n kind:\n role === \"system\" || verifyPassed !== undefined\n ? \"system\"\n : role === \"user\"\n ? \"user\"\n : \"assistant\",\n text: block.text,\n ...(timestamp ? { timestamp } : {}),\n ...(verifyPassed !== undefined\n ? {\n verifyPassed,\n tone: verifyPassed ? \"emerald\" : \"rose\",\n icon: WORKFLOW_PHASES.verify.icon,\n }\n : {}),\n };\n }\n return null;\n}\n\n/** Flatten a captain session (unified messages, entries, or raw log text) into\n * ordered events. Unified `SessionUIMessage[]` is detected by its `parts`. */\nexport function normalizeSession(input: SessionInput): SessionEvent[] {\n if (looksLikeUnifiedSession(input)) {\n return normalizeMessages(input.messages ?? []);\n }\n if (Array.isArray(input) && looksLikeUnifiedMessages(input)) {\n return normalizeMessages(input);\n }\n const entries = parseEntries(input as string | SessionEntry[]);\n const events: SessionEvent[] = [];\n entries.forEach((entry, seq) => {\n const baseId = entry.uuid ?? `e${seq}`;\n\n if (entry.isApiErrorMessage) {\n events.push({\n id: `${baseId}-err`,\n kind: \"error\",\n text: errorMessage(entry),\n ...(entry.error ? { errorType: entry.error } : {}),\n ...(entry.apiErrorStatus ? { errorStatus: entry.apiErrorStatus } : {}),\n ...(entry.timestamp ? { timestamp: entry.timestamp } : {}),\n raw: entry,\n });\n return;\n }\n\n const tu = entry.tool_use;\n if (tu?.tool) {\n const cwd = tu.cwd ?? entry.cwd;\n events.push(\n toolEvent(\n `${baseId}-tool`,\n tu.tool,\n tu.input,\n tu.response,\n tu.timestamp ?? entry.timestamp,\n {\n ...(tu.model ? { model: tu.model } : {}),\n ...(tu.reasoning_effort\n ? { reasoningEffort: tu.reasoning_effort }\n : {}),\n ...(tu.source ? { source: tu.source } : {}),\n ...(cwd ? { cwd } : {}),\n ...(tu.tool_use_id ? { toolCallId: tu.tool_use_id } : {}),\n ...(tu.session_id ? { sessionId: tu.session_id } : {}),\n raw: entry,\n },\n ),\n );\n return;\n }\n\n const role = roleFromType(entry.message?.role ?? entry.type);\n const verifyPassed =\n role === \"verified\" ? true : role === \"verify_failed\" ? false : undefined;\n for (const [i, block] of (entry.message?.content ?? []).entries()) {\n const ev = blockEvent(\n block,\n role,\n `${baseId}-${i}`,\n entry.timestamp,\n entry.cwd,\n verifyPassed,\n );\n if (ev) events.push(ev);\n }\n });\n return events;\n}\n\nexport function getSessionMetadata(\n input: SessionInput,\n): SessionMetadataSummary | undefined {\n if (!looksLikeUnifiedSession(input)) return undefined;\n const metadata: SessionMetadataSummary = {\n ...(input.id ? { sessionId: input.id } : {}),\n ...(input.executionMode ? { executionMode: input.executionMode } : {}),\n ...(input.turns ? { turns: input.turns } : {}),\n ...(input.capabilities ? { capabilities: input.capabilities } : {}),\n ...(input.budget ? { budget: input.budget } : {}),\n ...(input.context ? { context: input.context } : {}),\n ...(input.events ? { events: input.events } : {}),\n ...(input.model ? { model: input.model } : {}),\n ...(input.provider ? { provider: input.provider } : {}),\n ...(input.reasoningEffort\n ? { reasoningEffort: input.reasoningEffort }\n : {}),\n ...(input.permissionMode\n ? { permissionMode: input.permissionMode }\n : {}),\n ...(input.usage ? { usage: input.usage } : {}),\n ...(input.cost ? { cost: input.cost } : {}),\n };\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction errorMessage(entry: SessionEntry): string {\n const status = entry.apiErrorStatus ? ` (HTTP ${entry.apiErrorStatus})` : \"\";\n return `${entry.error ?? \"API error\"}${status}`;\n}\n\n// ── Unified message normalization ───────────────────────────────────────────\n// Projects the canonical SessionUIMessage[] (captain pkg/session) into the same\n// SessionEvent rows, so the viewer renders the unified model and the legacy\n// SessionEntry log identically.\n\n/** A unified message array is told apart from a SessionEntry log by its\n * per-message `parts` array (a SessionEntry carries `message`/`tool_use`). */\nfunction looksLikeUnifiedMessages(\n arr: SessionEntry[] | SessionUIMessage[],\n): arr is SessionUIMessage[] {\n const first: unknown = arr[0];\n return (\n typeof first === \"object\" &&\n first !== null &&\n Array.isArray((first as SessionUIMessage).parts)\n );\n}\n\nfunction looksLikeUnifiedSession(\n input: SessionInput,\n): input is UnifiedSessionInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n !Array.isArray(input) &&\n (\"messages\" in input ||\n \"turns\" in input ||\n \"capabilities\" in input ||\n \"budget\" in input ||\n \"context\" in input)\n );\n}\n\nfunction isUnifiedToolPart(part: SessionUIPart): boolean {\n return (\n Boolean(part.toolName) &&\n (part.type === \"dynamic-tool\" || part.type.startsWith(\"tool-\"))\n );\n}\n\n/** Render a tool part's already-parsed JSON output as text. */\nfunction outputToText(output: unknown): string | undefined {\n if (output == null) return undefined;\n return typeof output === \"string\" ? output : JSON.stringify(output);\n}\n\nfunction asRecord(input: unknown): Record<string, unknown> | undefined {\n return typeof input === \"object\" && input !== null && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : undefined;\n}\n\nfunction partEvent(\n part: SessionUIPart,\n role: \"system\" | \"user\" | \"assistant\",\n id: string,\n meta: {\n timestamp?: string;\n cwd?: string;\n model?: string;\n reasoningEffort?: string;\n source?: string;\n turnId?: string;\n agentId?: string;\n sessionId?: string;\n raw?: unknown;\n verifyPassed?: boolean;\n },\n): SessionEvent | null {\n if (isUnifiedToolPart(part)) {\n const pending = pendingFromPart(part);\n return toolEvent(\n id,\n part.toolName as string,\n asRecord(part.input),\n outputToText(part.output),\n meta.timestamp,\n {\n ...(meta.model ? { model: meta.model } : {}),\n ...(meta.reasoningEffort\n ? { reasoningEffort: meta.reasoningEffort }\n : {}),\n ...(meta.source ? { source: meta.source } : {}),\n ...(meta.cwd ? { cwd: meta.cwd } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.sessionId ? { sessionId: meta.sessionId } : {}),\n ...(part.state ? { toolState: part.state } : {}),\n ...(part.approval ? { approval: part.approval } : {}),\n pending,\n ...(part.toolCallId ? { toolCallId: part.toolCallId } : {}),\n ...(part.approval?.id ? { approvalId: part.approval.id } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n },\n );\n }\n if (part.type === \"reasoning\") {\n return part.text\n ? {\n id,\n kind: \"thinking\",\n text: part.text,\n ...(meta.timestamp ? { timestamp: meta.timestamp } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n }\n : null;\n }\n if (part.type === \"file\") {\n return {\n id,\n kind: role,\n file: part,\n ...(meta.timestamp ? { timestamp: meta.timestamp } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n };\n }\n if (part.type === \"text\") {\n return part.text\n ? {\n id,\n kind: role,\n text: part.text,\n ...(meta.timestamp ? { timestamp: meta.timestamp } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n ...(meta.verifyPassed !== undefined\n ? {\n verifyPassed: meta.verifyPassed,\n tone: meta.verifyPassed ? \"emerald\" : \"rose\",\n icon: WORKFLOW_PHASES.verify.icon,\n }\n : {}),\n }\n : null;\n }\n return null;\n}\n\nfunction pendingFromPart(part: SessionUIPart): boolean {\n if (part.approval?.approved !== undefined) return false;\n if (\n [\"approval-responded\", \"output-available\", \"output-denied\"].includes(\n part.state ?? \"\",\n )\n )\n return false;\n return (\n part.pending === true ||\n part.approval?.pending === true ||\n part.state === \"approval-requested\"\n );\n}\n\n/** Flatten unified session messages into ordered SessionEvent rows. */\nexport function normalizeMessages(\n messages: SessionUIMessage[],\n): SessionEvent[] {\n const events: SessionEvent[] = [];\n messages.forEach((msg, seq) => {\n const prov = msg.provenance;\n const baseId = msg.id ?? prov?.uuid ?? `m${seq}`;\n if (prov?.apiErrorStatus) {\n events.push({\n id: `${baseId}-err`,\n kind: \"error\",\n text: `API error (HTTP ${prov.apiErrorStatus})`,\n errorStatus: prov.apiErrorStatus,\n ...(prov.timestamp ? { timestamp: prov.timestamp } : {}),\n ...(msg.turnId ? { turnId: msg.turnId } : {}),\n ...(prov.agentId ? { agentId: prov.agentId } : {}),\n ...(msg.raw !== undefined ? { raw: msg.raw } : {}),\n });\n return;\n }\n // A verify step reports its verdict as a `verified`/`verify_failed` role —\n // rendered as a system-style row (not a fourth top-level kind) carrying the\n // pass/fail tone and the workflow verify glyph as data.\n const verifyPassed =\n msg.role === \"verified\" ? true : msg.role === \"verify_failed\" ? false : undefined;\n const role: \"system\" | \"user\" | \"assistant\" =\n msg.role === \"system\" || verifyPassed !== undefined\n ? \"system\"\n : msg.role === \"user\"\n ? \"user\"\n : \"assistant\";\n const meta = {\n ...(prov?.timestamp ? { timestamp: prov.timestamp } : {}),\n ...(prov?.cwd ? { cwd: prov.cwd } : {}),\n ...(prov?.model ? { model: prov.model } : {}),\n ...(prov?.reasoningEffort\n ? { reasoningEffort: prov.reasoningEffort }\n : {}),\n ...(prov?.source ? { source: prov.source } : {}),\n ...(msg.turnId ? { turnId: msg.turnId } : {}),\n ...(prov?.agentId ? { agentId: prov.agentId } : {}),\n ...(prov?.sessionId ? { sessionId: prov.sessionId } : {}),\n ...(msg.raw !== undefined ? { raw: msg.raw } : {}),\n ...(verifyPassed !== undefined ? { verifyPassed } : {}),\n };\n msg.parts.forEach((part, i) => {\n const ev = partEvent(part, role, `${baseId}-${i}`, meta);\n if (ev) events.push(ev);\n });\n });\n return events;\n}\n\n// ── Action icon registry ────────────────────────────────────────────────────\n// Implements the Flanksource \"Coding agent action icons\" design: every agent\n// tool maps to a Phosphor-derived generated icon (Ui*) and a semantic tone so a\n// scan of the log reads at a glance. Tones group by surface — file reads (sky),\n// writes (amber), edits (violet), execution (emerald), agents (indigo),\n// destructive (rose), assets (pink/fuchsia).\n\nexport type SessionTone =\n | \"sky\"\n | \"amber\"\n | \"violet\"\n | \"emerald\"\n | \"teal\"\n | \"orange\"\n | \"rose\"\n | \"indigo\"\n | \"fuchsia\"\n | \"pink\"\n | \"slate\";\n\nexport interface SessionActionMeta {\n icon: StaticIconComponent;\n tone: SessionTone;\n /** Human-readable verb shown as the row heading (and in the filter menu). */\n label: string;\n /** The row heading is the input summary alone (file path, command) — the\n * icon and tone carry the verb, so the label only appears in the menu. */\n summaryOnly?: boolean;\n}\n\nconst ACTIONS: Record<string, SessionActionMeta> = {\n // File operations. Read (eye) and Write (diff) are deliberately kept off the\n // design's file-text / file-plus glyphs — they read better in a scrolling log\n // and write-type rows also carry a +/- diff stat.\n Read: { icon: UiEye, tone: \"sky\", label: \"Read file\", summaryOnly: true },\n Write: {\n icon: UiDiff,\n tone: \"amber\",\n label: \"Write file\",\n summaryOnly: true,\n },\n Edit: {\n icon: UiPencilSimpleLine,\n tone: \"violet\",\n label: \"Edit file\",\n summaryOnly: true,\n },\n MultiEdit: {\n icon: UiStack,\n tone: \"violet\",\n label: \"Multi-edit\",\n summaryOnly: true,\n },\n NotebookEdit: {\n icon: UiPencilSimpleLine,\n tone: \"violet\",\n label: \"Edit notebook\",\n summaryOnly: true,\n },\n // Search & navigation\n Grep: { icon: UiSearch, tone: \"amber\", label: \"Grep\" },\n Glob: { icon: UiAsterisk, tone: \"sky\", label: \"Glob\" },\n // Execution & shell\n Bash: { icon: UiTerminal, tone: \"emerald\", label: \"Run command\" },\n BashOutput: { icon: UiCode2, tone: \"emerald\", label: \"Shell output\" },\n KillShell: { icon: UiProhibit, tone: \"rose\", label: \"Kill shell\" },\n KillBash: { icon: UiProhibit, tone: \"rose\", label: \"Kill shell\" },\n // Agents & planning\n Task: { icon: UiRobotAi, tone: \"indigo\", label: \"Sub-agent task\" },\n Agent: { icon: UiRobotAi, tone: \"indigo\", label: \"Sub-agent task\" },\n Skill: { icon: UiMagicWand, tone: \"fuchsia\", label: \"Invoke skill\" },\n TodoWrite: { icon: UiListChecks, tone: \"sky\", label: \"Update todos\" },\n Plan: { icon: UiStrategy, tone: \"sky\", label: \"Plan\" },\n TaskCreate: { icon: UiKanban, tone: \"sky\", label: \"Create task\" },\n TaskUpdate: { icon: UiKanban, tone: \"sky\", label: \"Update task\" },\n TaskList: { icon: UiKanban, tone: \"sky\", label: \"List tasks\" },\n TaskGet: { icon: UiKanban, tone: \"sky\", label: \"Get task\" },\n TaskOutput: { icon: UiKanban, tone: \"sky\", label: \"Task output\" },\n TaskStop: { icon: UiProhibit, tone: \"rose\", label: \"Stop task\" },\n ToolSearch: { icon: UiSearch, tone: \"amber\", label: \"Search tools\" },\n AskUserQuestion: { icon: UiQuestion, tone: \"sky\", label: \"Ask user\" },\n EnterPlanMode: { icon: UiStrategy, tone: \"sky\", label: \"Enter plan mode\" },\n ExitPlanMode: { icon: UiStrategy, tone: \"sky\", label: \"Exit plan mode\" },\n // Web & browser automation\n WebFetch: { icon: UiCloudDownload, tone: \"sky\", label: \"Fetch URL\" },\n WebSearch: { icon: UiGlobe, tone: \"sky\", label: \"Web search\" },\n browser_navigate: { icon: UiCompass, tone: \"sky\", label: \"Navigate\" },\n browser_navigate_back: {\n icon: UiCompass,\n tone: \"sky\",\n label: \"Navigate back\",\n },\n browser_click: { icon: UiCursorClick, tone: \"sky\", label: \"Click\" },\n browser_triple_click: {\n icon: UiCursorText,\n tone: \"sky\",\n label: \"Triple click\",\n },\n browser_type: { icon: UiKeyboard, tone: \"emerald\", label: \"Type text\" },\n browser_press_key: { icon: UiCommand, tone: \"amber\", label: \"Press key\" },\n browser_snapshot: { icon: UiScan, tone: \"violet\", label: \"Snapshot\" },\n browser_take_screenshot: {\n icon: UiCamera,\n tone: \"indigo\",\n label: \"Screenshot\",\n },\n browser_evaluate: { icon: UiCode2, tone: \"violet\", label: \"Evaluate JS\" },\n browser_console_messages: { icon: UiScroll, tone: \"slate\", label: \"Console\" },\n browser_network_requests: {\n icon: UiShare,\n tone: \"emerald\",\n label: \"Network\",\n },\n browser_wait_for: { icon: UiHourglass, tone: \"amber\", label: \"Wait\" },\n Wait: { icon: UiHourglass, tone: \"amber\", label: \"Wait\" },\n browser_close: { icon: UiClose, tone: \"rose\", label: \"Close browser\" },\n};\n\n// MCP tools surface as `mcp__<server>__<name>` or `<server>__<name>`. Icon\n// servers get a distinct accent (palette); generative servers reuse the sparkle;\n// the rest fall back to the puzzle piece.\nconst MCP_ICON_SERVERS = new Set([\n \"iconify\",\n \"icons8\",\n \"lucide\",\n \"react-icons\",\n]);\nconst MCP_GEN_SERVERS = new Set([\"gemini\", \"openai\", \"anthropic\"]);\n\ninterface McpTool {\n server: string;\n name: string;\n}\n\nexport function splitMcpTool(tool: string): McpTool | null {\n const rest = tool.startsWith(\"mcp__\") ? tool.slice(\"mcp__\".length) : tool;\n const idx = rest.indexOf(\"__\");\n if (idx < 0) return null;\n return { server: rest.slice(0, idx), name: rest.slice(idx + 2) };\n}\n\n/** Resolve the icon, tone, and label for a tool name. */\nexport function getSessionAction(tool: string): SessionActionMeta {\n const exact = ACTIONS[tool];\n if (exact) return exact;\n\n const mcp = splitMcpTool(tool);\n if (mcp) {\n const label = `${mcp.server}: ${mcp.name.replace(/_/g, \" \")}`;\n if (MCP_ICON_SERVERS.has(mcp.server))\n return { icon: UiPalette, tone: \"pink\", label };\n if (MCP_GEN_SERVERS.has(mcp.server))\n return { icon: UiSparkles, tone: \"violet\", label };\n return { icon: UiPuzzle, tone: \"violet\", label };\n }\n\n return { icon: UiWrench, tone: \"slate\", label: tool };\n}\n\n/** Count tool-call events, the dominant model, and totals for the header. */\nexport function summarizeSession(events: SessionEvent[]): {\n toolCount: number;\n messageCount: number;\n model?: string;\n} {\n let toolCount = 0;\n let messageCount = 0;\n const modelCounts = new Map<string, number>();\n for (const event of events) {\n if (event.kind === \"tool\") toolCount += 1;\n if (\n event.kind === \"system\" ||\n event.kind === \"user\" ||\n event.kind === \"assistant\"\n ) {\n messageCount += 1;\n }\n if (event.model)\n modelCounts.set(event.model, (modelCounts.get(event.model) ?? 0) + 1);\n }\n let model: string | undefined;\n let best = 0;\n for (const [name, count] of modelCounts) {\n if (count > best) {\n best = count;\n model = name;\n }\n }\n return { toolCount, messageCount, ...(model ? { model } : {}) };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionViewer.model.js","sources":["../../../src/data/ai/SessionViewer.model.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { WORKFLOW_PHASES } from \"./agent-action-icons\";\nimport type { ApprovalKind, ApprovalRequest } from \"./approval-request\";\nimport type {\n SessionBudget,\n SessionCapabilities,\n SessionContext,\n SessionCost,\n SessionMetadataEvent,\n SessionTurn,\n SessionUIMessage,\n SessionUIPart,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport {\n UiAsterisk,\n UiCamera,\n UiClose,\n UiCloudDownload,\n UiCode2,\n UiCommand,\n UiCompass,\n UiCursorClick,\n UiCursorText,\n UiDiff,\n UiEye,\n UiGlobe,\n UiHourglass,\n UiKanban,\n UiKeyboard,\n UiListChecks,\n UiMagicWand,\n UiPalette,\n UiPencilSimpleLine,\n UiProhibit,\n UiPuzzle,\n UiQuestion,\n UiRobotAi,\n UiScan,\n UiScroll,\n UiSearch,\n UiShare,\n UiSparkles,\n UiStack,\n UiStrategy,\n UiTerminal,\n UiWrench,\n} from \"../../icons\";\n\n// ── Captain session schema ──────────────────────────────────────────────────\n// Mirrors github.com/flanksource/captain pkg/ai/history types. A session is a\n// list of SessionEntry records (the rows of a Claude Code / Codex JSONL log).\n\nexport interface SessionToolUse {\n tool?: string;\n input?: Record<string, unknown>;\n timestamp?: string;\n cwd?: string;\n session_id?: string;\n tool_use_id?: string;\n /** \"claude\" or \"codex\". */\n source?: string;\n model?: string;\n reasoning_effort?: string;\n response?: string;\n}\n\nexport interface SessionContent {\n /** Block kind: \"text\", \"thinking\", \"tool_use\", \"tool_result\", … */\n type?: string;\n text?: string;\n thinking?: string;\n name?: string;\n input?: Record<string, unknown>;\n id?: string;\n}\n\nexport interface SessionMessage {\n role?: string;\n stop_reason?: string;\n content?: SessionContent[];\n}\n\nexport interface SessionEntry {\n /** Top-level entry kind: assistant, user, system, … */\n type?: string;\n tool_use?: SessionToolUse;\n message?: SessionMessage;\n timestamp?: string;\n cwd?: string;\n sessionId?: string;\n uuid?: string;\n /** Synthetic assistant entry Claude Code writes when an API request fails. */\n isApiErrorMessage?: boolean;\n apiErrorStatus?: number;\n /** Claude Code's error classification (e.g. \"rate_limit\"). */\n error?: string;\n}\n\n/**\n * A session to render: a `UnifiedSessionInput` (preferred — what\n * `GET /api/captain/sessions/{id}` serves), bare `SessionUIMessage[]`, a legacy\n * `SessionEntry[]` log, or raw log text (JSON array or JSONL).\n *\n * `SessionInspector` (and `SessionCollectionItem`) also accept a session URL\n * as `src` instead, with this contract:\n * - `GET {src}` with `Accept: application/json` returns one\n * `UnifiedSessionInput`. A non-2xx body is `{ error, … }` JSON or plain text\n * and is shown verbatim.\n * - `GET {src}?follow=1` (appended to any existing query) is an SSE stream of\n * `entry` frames (one `SessionUIMessage`, upserted by `id`), `state` frames\n * (`{ revision, lifecycleStatus, activityState, facets }` — a higher\n * revision, or a `facets` that differs from the last one seen, refetches\n * the aggregate; `facets` is an opaque fingerprint of the non-message\n * session facets — plan, todos, files, approval requests — and its first\n * reported value is the baseline, not itself a refetch trigger), `error`\n * frames (`{ error }`) and `: ping` comments; the server closes it once the\n * session is terminal.\n * - The stream is opened only while `lifecycleStatus` is non-terminal (not\n * succeeded/partial/failed/cancelled/interrupted/completed) unless the host\n * passes `follow`. See `useRemoteSession`.\n */\nexport type SessionInput =\n | string\n | SessionEntry[]\n | SessionUIMessage[]\n | UnifiedSessionInput;\n\nexport interface SessionMetadataSummary {\n /** Session identifier exposed by the context meter's copy action. */\n sessionId?: string;\n /** Runtime mechanism used to execute the session. */\n executionMode?: string;\n turns?: SessionTurn[];\n capabilities?: SessionCapabilities;\n budget?: SessionBudget;\n context?: SessionContext;\n events?: SessionMetadataEvent[];\n /** Dominant model id, for the context meter's hover popover. */\n model?: string;\n /** Provider id, used to resolve the model's brand glyph. */\n provider?: string;\n /** Session reasoning effort, for the context meter's hover popover. */\n reasoningEffort?: string;\n /** Last permission mode recorded in the transcript, for the header badge. */\n permissionMode?: string;\n /** Aggregate token usage, for the context meter's hover popover. */\n usage?: SessionUsage;\n /** Aggregate cost breakdown, for the context meter's hover popover. */\n cost?: SessionCost;\n}\n\n// ── Normalized events ───────────────────────────────────────────────────────\n// The raw schema interleaves consolidated `tool_use` rows with `message`\n// content blocks. normalizeSession flattens both shapes into a single ordered\n// list the viewer can render row-by-row.\n\nexport type SessionEventKind =\n | \"system\"\n | \"user\"\n | \"assistant\"\n | \"thinking\"\n | \"tool\"\n | \"error\";\n\nexport interface SessionEvent {\n id: string;\n kind: SessionEventKind;\n /** Tool name (kind === \"tool\"). */\n tool?: string;\n toolInput?: Record<string, unknown>;\n toolResponse?: string;\n /** Prose for user/assistant/thinking, or the error message for errors. */\n text?: string;\n /** Canonical file part rendered as an attachment thumbnail or chip. */\n file?: SessionUIPart;\n /** Working directory the tool ran in — used to relativize file paths. */\n cwd?: string;\n timestamp?: string;\n model?: string;\n reasoningEffort?: string;\n source?: string;\n turnId?: string;\n agentId?: string;\n toolState?: string;\n approval?: SessionUIPart[\"approval\"];\n pending?: boolean;\n /** Typed approval for a pending tool row (see `SessionPendingTool.kind`). */\n approvalKind?: ApprovalKind;\n approvalRequest?: ApprovalRequest;\n toolCallId?: string;\n approvalId?: string;\n sessionId?: string;\n raw?: unknown;\n errorType?: string;\n errorStatus?: number;\n /** Set for a `verified`/`verify_failed` role — the workflow verify verdict. */\n verifyPassed?: boolean;\n /** Row icon override (e.g. the verify glyph). Renderers fall back to the\n * kind's default icon when absent. */\n icon?: StaticIconComponent;\n /** Row tone override (e.g. pass/fail for a verify row). Renderers fall back\n * to the kind's default tone when absent. */\n tone?: SessionTone;\n}\n\nexport function truncate(text: string, max: number): string {\n return text.length <= max ? text : `${text.slice(0, max)}…`;\n}\n\n// parseEntries accepts a parsed array as-is, or parses a string as a whole-\n// document JSON (array or single object, possibly pretty-printed) first, then\n// falls back to JSONL (one object per line). The whole-document parse error is\n// caught only to attempt the JSONL fallback — a genuinely malformed JSONL line\n// throws loudly rather than being silently dropped.\nfunction parseEntries(input: string | SessionEntry[]): SessionEntry[] {\n if (Array.isArray(input)) return input;\n const text = input.trim();\n if (!text) return [];\n try {\n const parsed: unknown = JSON.parse(text);\n return Array.isArray(parsed)\n ? (parsed as SessionEntry[])\n : [parsed as SessionEntry];\n } catch {\n // not a single JSON document — treat as JSONL below\n }\n return text\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n try {\n return JSON.parse(line) as SessionEntry;\n } catch {\n throw new Error(\n `SessionViewer: invalid session JSON line: ${truncate(line, 80)}`,\n );\n }\n });\n}\n\n// \"verified\"/\"verify_failed\" pass through unchanged — the legacy SessionEntry\n// path needs the raw role to route to the same verify row `normalizeMessages`\n// builds for the unified path (see the call site below), not just a\n// system/user/assistant kind.\nfunction roleFromType(type: string | undefined): string {\n return type === \"system\" ||\n type === \"user\" ||\n type === \"assistant\" ||\n type === \"verified\" ||\n type === \"verify_failed\"\n ? type\n : \"assistant\";\n}\n\nfunction toolEvent(\n id: string,\n tool: string,\n input: Record<string, unknown> | undefined,\n response: string | undefined,\n timestamp: string | undefined,\n meta: {\n model?: string;\n reasoningEffort?: string;\n source?: string;\n cwd?: string;\n turnId?: string;\n agentId?: string;\n toolState?: string;\n approval?: SessionUIPart[\"approval\"];\n pending?: boolean;\n toolCallId?: string;\n approvalId?: string;\n sessionId?: string;\n raw?: unknown;\n } = {},\n): SessionEvent {\n return {\n id,\n kind: \"tool\",\n tool,\n ...(input ? { toolInput: input } : {}),\n ...(response ? { toolResponse: response } : {}),\n ...(timestamp ? { timestamp } : {}),\n ...(meta.model ? { model: meta.model } : {}),\n ...(meta.reasoningEffort ? { reasoningEffort: meta.reasoningEffort } : {}),\n ...(meta.source ? { source: meta.source } : {}),\n ...(meta.cwd ? { cwd: meta.cwd } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.toolState ? { toolState: meta.toolState } : {}),\n ...(meta.approval ? { approval: meta.approval } : {}),\n pending: meta.pending ?? false,\n ...(meta.toolCallId ? { toolCallId: meta.toolCallId } : {}),\n ...(meta.approvalId ? { approvalId: meta.approvalId } : {}),\n ...(meta.sessionId ? { sessionId: meta.sessionId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n };\n}\n\nfunction blockEvent(\n block: SessionContent,\n role: string,\n id: string,\n timestamp: string | undefined,\n cwd: string | undefined,\n verifyPassed: boolean | undefined,\n): SessionEvent | null {\n if (block.type === \"tool_use\" || (block.name && block.input)) {\n if (!block.name) return null;\n return toolEvent(id, block.name, block.input, undefined, timestamp, {\n ...(cwd ? { cwd } : {}),\n ...(block.id ? { toolCallId: block.id } : {}),\n });\n }\n if (block.type === \"thinking\" || block.thinking) {\n const text = block.thinking ?? block.text;\n return text\n ? { id, kind: \"thinking\", text, ...(timestamp ? { timestamp } : {}) }\n : null;\n }\n if (block.text) {\n // A verify step reports its verdict as a `verified`/`verify_failed` role —\n // rendered as a system-style row carrying the pass/fail tone and the\n // workflow verify glyph, mirroring `normalizeMessages`'s unified-path rows.\n return {\n id,\n kind:\n role === \"system\" || verifyPassed !== undefined\n ? \"system\"\n : role === \"user\"\n ? \"user\"\n : \"assistant\",\n text: block.text,\n ...(timestamp ? { timestamp } : {}),\n ...(verifyPassed !== undefined\n ? {\n verifyPassed,\n tone: verifyPassed ? \"emerald\" : \"rose\",\n icon: WORKFLOW_PHASES.verify.icon,\n }\n : {}),\n };\n }\n return null;\n}\n\n/** Flatten a captain session (unified messages, entries, or raw log text) into\n * ordered events. Unified `SessionUIMessage[]` is detected by its `parts`. */\nexport function normalizeSession(input: SessionInput): SessionEvent[] {\n if (looksLikeUnifiedSession(input)) {\n return normalizeMessages(input.messages ?? []);\n }\n if (Array.isArray(input) && looksLikeUnifiedMessages(input)) {\n return normalizeMessages(input);\n }\n const entries = parseEntries(input as string | SessionEntry[]);\n const events: SessionEvent[] = [];\n entries.forEach((entry, seq) => {\n const baseId = entry.uuid ?? `e${seq}`;\n\n if (entry.isApiErrorMessage) {\n events.push({\n id: `${baseId}-err`,\n kind: \"error\",\n text: errorMessage(entry),\n ...(entry.error ? { errorType: entry.error } : {}),\n ...(entry.apiErrorStatus ? { errorStatus: entry.apiErrorStatus } : {}),\n ...(entry.timestamp ? { timestamp: entry.timestamp } : {}),\n raw: entry,\n });\n return;\n }\n\n const tu = entry.tool_use;\n if (tu?.tool) {\n const cwd = tu.cwd ?? entry.cwd;\n events.push(\n toolEvent(\n `${baseId}-tool`,\n tu.tool,\n tu.input,\n tu.response,\n tu.timestamp ?? entry.timestamp,\n {\n ...(tu.model ? { model: tu.model } : {}),\n ...(tu.reasoning_effort\n ? { reasoningEffort: tu.reasoning_effort }\n : {}),\n ...(tu.source ? { source: tu.source } : {}),\n ...(cwd ? { cwd } : {}),\n ...(tu.tool_use_id ? { toolCallId: tu.tool_use_id } : {}),\n ...(tu.session_id ? { sessionId: tu.session_id } : {}),\n raw: entry,\n },\n ),\n );\n return;\n }\n\n const role = roleFromType(entry.message?.role ?? entry.type);\n const verifyPassed =\n role === \"verified\" ? true : role === \"verify_failed\" ? false : undefined;\n for (const [i, block] of (entry.message?.content ?? []).entries()) {\n const ev = blockEvent(\n block,\n role,\n `${baseId}-${i}`,\n entry.timestamp,\n entry.cwd,\n verifyPassed,\n );\n if (ev) events.push(ev);\n }\n });\n return events;\n}\n\nexport function getSessionMetadata(\n input: SessionInput,\n): SessionMetadataSummary | undefined {\n if (!looksLikeUnifiedSession(input)) return undefined;\n const metadata: SessionMetadataSummary = {\n ...(input.id ? { sessionId: input.id } : {}),\n ...(input.executionMode ? { executionMode: input.executionMode } : {}),\n ...(input.turns ? { turns: input.turns } : {}),\n ...(input.capabilities ? { capabilities: input.capabilities } : {}),\n ...(input.budget ? { budget: input.budget } : {}),\n ...(input.context ? { context: input.context } : {}),\n ...(input.events ? { events: input.events } : {}),\n ...(input.model ? { model: input.model } : {}),\n ...(input.provider ? { provider: input.provider } : {}),\n ...(input.reasoningEffort\n ? { reasoningEffort: input.reasoningEffort }\n : {}),\n ...(input.permissionMode ? { permissionMode: input.permissionMode } : {}),\n ...(input.usage ? { usage: input.usage } : {}),\n ...(input.cost ? { cost: input.cost } : {}),\n };\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction errorMessage(entry: SessionEntry): string {\n const status = entry.apiErrorStatus ? ` (HTTP ${entry.apiErrorStatus})` : \"\";\n return `${entry.error ?? \"API error\"}${status}`;\n}\n\n// ── Unified message normalization ───────────────────────────────────────────\n// Projects the canonical SessionUIMessage[] (captain pkg/session) into the same\n// SessionEvent rows, so the viewer renders the unified model and the legacy\n// SessionEntry log identically.\n\n/** A unified message array is told apart from a SessionEntry log by its\n * per-message `parts` array (a SessionEntry carries `message`/`tool_use`). */\nfunction looksLikeUnifiedMessages(\n arr: SessionEntry[] | SessionUIMessage[],\n): arr is SessionUIMessage[] {\n const first: unknown = arr[0];\n return (\n typeof first === \"object\" &&\n first !== null &&\n Array.isArray((first as SessionUIMessage).parts)\n );\n}\n\nfunction looksLikeUnifiedSession(\n input: SessionInput,\n): input is UnifiedSessionInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n !Array.isArray(input) &&\n (\"messages\" in input ||\n \"turns\" in input ||\n \"capabilities\" in input ||\n \"budget\" in input ||\n \"context\" in input)\n );\n}\n\nfunction isUnifiedToolPart(part: SessionUIPart): boolean {\n return (\n Boolean(part.toolName) &&\n (part.type === \"dynamic-tool\" || part.type.startsWith(\"tool-\"))\n );\n}\n\n/** Render a tool part's already-parsed JSON output as text. */\nfunction outputToText(output: unknown): string | undefined {\n if (output == null) return undefined;\n return typeof output === \"string\" ? output : JSON.stringify(output);\n}\n\nfunction asRecord(input: unknown): Record<string, unknown> | undefined {\n return typeof input === \"object\" && input !== null && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : undefined;\n}\n\nfunction partEvent(\n part: SessionUIPart,\n role: \"system\" | \"user\" | \"assistant\",\n id: string,\n meta: {\n timestamp?: string;\n cwd?: string;\n model?: string;\n reasoningEffort?: string;\n source?: string;\n turnId?: string;\n agentId?: string;\n sessionId?: string;\n raw?: unknown;\n verifyPassed?: boolean;\n },\n): SessionEvent | null {\n if (isUnifiedToolPart(part)) {\n const pending = pendingFromPart(part);\n return toolEvent(\n id,\n part.toolName as string,\n asRecord(part.input),\n outputToText(part.output),\n meta.timestamp,\n {\n ...(meta.model ? { model: meta.model } : {}),\n ...(meta.reasoningEffort\n ? { reasoningEffort: meta.reasoningEffort }\n : {}),\n ...(meta.source ? { source: meta.source } : {}),\n ...(meta.cwd ? { cwd: meta.cwd } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.sessionId ? { sessionId: meta.sessionId } : {}),\n ...(part.state ? { toolState: part.state } : {}),\n ...(part.approval ? { approval: part.approval } : {}),\n pending,\n ...(part.toolCallId ? { toolCallId: part.toolCallId } : {}),\n ...(part.approval?.id ? { approvalId: part.approval.id } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n },\n );\n }\n if (part.type === \"reasoning\") {\n return part.text\n ? {\n id,\n kind: \"thinking\",\n text: part.text,\n ...(meta.timestamp ? { timestamp: meta.timestamp } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n }\n : null;\n }\n if (part.type === \"file\") {\n return {\n id,\n kind: role,\n file: part,\n ...(meta.timestamp ? { timestamp: meta.timestamp } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n };\n }\n if (part.type === \"text\") {\n return part.text\n ? {\n id,\n kind: role,\n text: part.text,\n ...(meta.timestamp ? { timestamp: meta.timestamp } : {}),\n ...(meta.turnId ? { turnId: meta.turnId } : {}),\n ...(meta.agentId ? { agentId: meta.agentId } : {}),\n ...(meta.raw !== undefined ? { raw: meta.raw } : {}),\n ...(meta.verifyPassed !== undefined\n ? {\n verifyPassed: meta.verifyPassed,\n tone: meta.verifyPassed ? \"emerald\" : \"rose\",\n icon: WORKFLOW_PHASES.verify.icon,\n }\n : {}),\n }\n : null;\n }\n return null;\n}\n\nfunction pendingFromPart(part: SessionUIPart): boolean {\n if (part.approval?.approved !== undefined) return false;\n if (\n [\"approval-responded\", \"output-available\", \"output-denied\"].includes(\n part.state ?? \"\",\n )\n )\n return false;\n return (\n part.pending === true ||\n part.approval?.pending === true ||\n part.state === \"approval-requested\"\n );\n}\n\n/** Flatten unified session messages into ordered SessionEvent rows. */\nexport function normalizeMessages(\n messages: SessionUIMessage[],\n): SessionEvent[] {\n const events: SessionEvent[] = [];\n messages.forEach((msg, seq) => {\n const prov = msg.provenance;\n const baseId = msg.id ?? prov?.uuid ?? `m${seq}`;\n if (prov?.apiErrorStatus) {\n events.push({\n id: `${baseId}-err`,\n kind: \"error\",\n text: `API error (HTTP ${prov.apiErrorStatus})`,\n errorStatus: prov.apiErrorStatus,\n ...(prov.timestamp ? { timestamp: prov.timestamp } : {}),\n ...(msg.turnId ? { turnId: msg.turnId } : {}),\n ...(prov.agentId ? { agentId: prov.agentId } : {}),\n ...(msg.raw !== undefined ? { raw: msg.raw } : {}),\n });\n return;\n }\n // A verify step reports its verdict as a `verified`/`verify_failed` role —\n // rendered as a system-style row (not a fourth top-level kind) carrying the\n // pass/fail tone and the workflow verify glyph as data.\n const verifyPassed =\n msg.role === \"verified\"\n ? true\n : msg.role === \"verify_failed\"\n ? false\n : undefined;\n const role: \"system\" | \"user\" | \"assistant\" =\n msg.role === \"system\" || verifyPassed !== undefined\n ? \"system\"\n : msg.role === \"user\"\n ? \"user\"\n : \"assistant\";\n const meta = {\n ...(prov?.timestamp ? { timestamp: prov.timestamp } : {}),\n ...(prov?.cwd ? { cwd: prov.cwd } : {}),\n ...(prov?.model ? { model: prov.model } : {}),\n ...(prov?.reasoningEffort\n ? { reasoningEffort: prov.reasoningEffort }\n : {}),\n ...(prov?.source ? { source: prov.source } : {}),\n ...(msg.turnId ? { turnId: msg.turnId } : {}),\n ...(prov?.agentId ? { agentId: prov.agentId } : {}),\n ...(prov?.sessionId ? { sessionId: prov.sessionId } : {}),\n ...(msg.raw !== undefined ? { raw: msg.raw } : {}),\n ...(verifyPassed !== undefined ? { verifyPassed } : {}),\n };\n const verifyKind = asRecord(\n msg.parts.find((part) => part.type === \"data-verify\")?.data,\n )?.kind;\n msg.parts.forEach((part, i) => {\n const shownPart =\n verifyPassed !== undefined &&\n part.type === \"text\" &&\n typeof verifyKind === \"string\" &&\n !part.text?.startsWith(`${verifyKind} ·`)\n ? { ...part, text: `${verifyKind} · ${part.text ?? \"\"}` }\n : part;\n const ev = partEvent(shownPart, role, `${baseId}-${i}`, meta);\n if (ev) events.push(ev);\n });\n });\n return events;\n}\n\n// ── Action icon registry ────────────────────────────────────────────────────\n// Implements the Flanksource \"Coding agent action icons\" design: every agent\n// tool maps to a Phosphor-derived generated icon (Ui*) and a semantic tone so a\n// scan of the log reads at a glance. Tones group by surface — file reads (sky),\n// writes (amber), edits (violet), execution (emerald), agents (indigo),\n// destructive (rose), assets (pink/fuchsia).\n\nexport type SessionTone =\n | \"sky\"\n | \"amber\"\n | \"violet\"\n | \"emerald\"\n | \"teal\"\n | \"orange\"\n | \"rose\"\n | \"indigo\"\n | \"fuchsia\"\n | \"pink\"\n | \"slate\";\n\nexport interface SessionActionMeta {\n icon: StaticIconComponent;\n tone: SessionTone;\n /** Human-readable verb shown as the row heading (and in the filter menu). */\n label: string;\n /** The row heading is the input summary alone (file path, command) — the\n * icon and tone carry the verb, so the label only appears in the menu. */\n summaryOnly?: boolean;\n}\n\nconst ACTIONS: Record<string, SessionActionMeta> = {\n // File operations. Read (eye) and Write (diff) are deliberately kept off the\n // design's file-text / file-plus glyphs — they read better in a scrolling log\n // and write-type rows also carry a +/- diff stat.\n Read: { icon: UiEye, tone: \"sky\", label: \"Read file\", summaryOnly: true },\n Write: {\n icon: UiDiff,\n tone: \"amber\",\n label: \"Write file\",\n summaryOnly: true,\n },\n Edit: {\n icon: UiPencilSimpleLine,\n tone: \"violet\",\n label: \"Edit file\",\n summaryOnly: true,\n },\n MultiEdit: {\n icon: UiStack,\n tone: \"violet\",\n label: \"Multi-edit\",\n summaryOnly: true,\n },\n NotebookEdit: {\n icon: UiPencilSimpleLine,\n tone: \"violet\",\n label: \"Edit notebook\",\n summaryOnly: true,\n },\n // Search & navigation\n Grep: { icon: UiSearch, tone: \"amber\", label: \"Grep\" },\n Glob: { icon: UiAsterisk, tone: \"sky\", label: \"Glob\" },\n // Execution & shell\n Bash: { icon: UiTerminal, tone: \"emerald\", label: \"Run command\" },\n BashOutput: { icon: UiCode2, tone: \"emerald\", label: \"Shell output\" },\n KillShell: { icon: UiProhibit, tone: \"rose\", label: \"Kill shell\" },\n KillBash: { icon: UiProhibit, tone: \"rose\", label: \"Kill shell\" },\n // Agents & planning\n Task: { icon: UiRobotAi, tone: \"indigo\", label: \"Sub-agent task\" },\n Agent: { icon: UiRobotAi, tone: \"indigo\", label: \"Sub-agent task\" },\n Skill: { icon: UiMagicWand, tone: \"fuchsia\", label: \"Invoke skill\" },\n TodoWrite: { icon: UiListChecks, tone: \"sky\", label: \"Update todos\" },\n Plan: { icon: UiStrategy, tone: \"sky\", label: \"Plan\" },\n TaskCreate: { icon: UiKanban, tone: \"sky\", label: \"Create task\" },\n TaskUpdate: { icon: UiKanban, tone: \"sky\", label: \"Update task\" },\n TaskList: { icon: UiKanban, tone: \"sky\", label: \"List tasks\" },\n TaskGet: { icon: UiKanban, tone: \"sky\", label: \"Get task\" },\n TaskOutput: { icon: UiKanban, tone: \"sky\", label: \"Task output\" },\n TaskStop: { icon: UiProhibit, tone: \"rose\", label: \"Stop task\" },\n ToolSearch: { icon: UiSearch, tone: \"amber\", label: \"Search tools\" },\n AskUserQuestion: { icon: UiQuestion, tone: \"sky\", label: \"Ask user\" },\n EnterPlanMode: { icon: UiStrategy, tone: \"sky\", label: \"Enter plan mode\" },\n ExitPlanMode: { icon: UiStrategy, tone: \"sky\", label: \"Exit plan mode\" },\n // Web & browser automation\n WebFetch: { icon: UiCloudDownload, tone: \"sky\", label: \"Fetch URL\" },\n WebSearch: { icon: UiGlobe, tone: \"sky\", label: \"Web search\" },\n browser_navigate: { icon: UiCompass, tone: \"sky\", label: \"Navigate\" },\n browser_navigate_back: {\n icon: UiCompass,\n tone: \"sky\",\n label: \"Navigate back\",\n },\n browser_click: { icon: UiCursorClick, tone: \"sky\", label: \"Click\" },\n browser_triple_click: {\n icon: UiCursorText,\n tone: \"sky\",\n label: \"Triple click\",\n },\n browser_type: { icon: UiKeyboard, tone: \"emerald\", label: \"Type text\" },\n browser_press_key: { icon: UiCommand, tone: \"amber\", label: \"Press key\" },\n browser_snapshot: { icon: UiScan, tone: \"violet\", label: \"Snapshot\" },\n browser_take_screenshot: {\n icon: UiCamera,\n tone: \"indigo\",\n label: \"Screenshot\",\n },\n browser_evaluate: { icon: UiCode2, tone: \"violet\", label: \"Evaluate JS\" },\n browser_console_messages: { icon: UiScroll, tone: \"slate\", label: \"Console\" },\n browser_network_requests: {\n icon: UiShare,\n tone: \"emerald\",\n label: \"Network\",\n },\n browser_wait_for: { icon: UiHourglass, tone: \"amber\", label: \"Wait\" },\n Wait: { icon: UiHourglass, tone: \"amber\", label: \"Wait\" },\n browser_close: { icon: UiClose, tone: \"rose\", label: \"Close browser\" },\n};\n\n// MCP tools surface as `mcp__<server>__<name>` or `<server>__<name>`. Icon\n// servers get a distinct accent (palette); generative servers reuse the sparkle;\n// the rest fall back to the puzzle piece.\nconst MCP_ICON_SERVERS = new Set([\n \"iconify\",\n \"icons8\",\n \"lucide\",\n \"react-icons\",\n]);\nconst MCP_GEN_SERVERS = new Set([\"gemini\", \"openai\", \"anthropic\"]);\n\ninterface McpTool {\n server: string;\n name: string;\n}\n\nexport function splitMcpTool(tool: string): McpTool | null {\n const rest = tool.startsWith(\"mcp__\") ? tool.slice(\"mcp__\".length) : tool;\n const idx = rest.indexOf(\"__\");\n if (idx < 0) return null;\n return { server: rest.slice(0, idx), name: rest.slice(idx + 2) };\n}\n\n/** Resolve the icon, tone, and label for a tool name. */\nexport function getSessionAction(tool: string): SessionActionMeta {\n const exact = ACTIONS[tool];\n if (exact) return exact;\n\n const mcp = splitMcpTool(tool);\n if (mcp) {\n const label = `${mcp.server}: ${mcp.name.replace(/_/g, \" \")}`;\n if (MCP_ICON_SERVERS.has(mcp.server))\n return { icon: UiPalette, tone: \"pink\", label };\n if (MCP_GEN_SERVERS.has(mcp.server))\n return { icon: UiSparkles, tone: \"violet\", label };\n return { icon: UiPuzzle, tone: \"violet\", label };\n }\n\n return { icon: UiWrench, tone: \"slate\", label: tool };\n}\n\n/** Count tool-call events, the dominant model, and totals for the header. */\nexport function summarizeSession(events: SessionEvent[]): {\n toolCount: number;\n messageCount: number;\n model?: string;\n} {\n let toolCount = 0;\n let messageCount = 0;\n const modelCounts = new Map<string, number>();\n for (const event of events) {\n if (event.kind === \"tool\") toolCount += 1;\n if (\n event.kind === \"system\" ||\n event.kind === \"user\" ||\n event.kind === \"assistant\"\n ) {\n messageCount += 1;\n }\n if (event.model)\n modelCounts.set(event.model, (modelCounts.get(event.model) ?? 0) + 1);\n }\n let model: string | undefined;\n let best = 0;\n for (const [name, count] of modelCounts) {\n if (count > best) {\n best = count;\n model = name;\n }\n }\n return { toolCount, messageCount, ...(model ? { model } : {}) };\n}\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+MO,SAAS,SAAS,MAAc,KAAqB;AAC1D,SAAO,KAAK,UAAU,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,GAAG,CAAC;AAC1D;AAOA,SAAS,aAAa,OAAgD;AACpE,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,QAAM,OAAO,MAAM,KAAA;AACnB,MAAI,CAAC,KAAM,QAAO,CAAA;AAClB,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,IAAI;AACvC,WAAO,MAAM,QAAQ,MAAM,IACtB,SACD,CAAC,MAAsB;AAAA,EAC7B,QAAQ;AAAA,EAER;AACA,SAAO,KACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,KAAA,CAAM,EACzB,OAAO,OAAO,EACd,IAAI,CAAC,SAAS;AACb,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AACN,YAAM,IAAI;AAAA,QACR,6CAA6C,SAAS,MAAM,EAAE,CAAC;AAAA,MAAA;AAAA,IAEnE;AAAA,EACF,CAAC;AACL;AAMA,SAAS,aAAa,MAAkC;AACtD,SAAO,SAAS,YACd,SAAS,UACT,SAAS,eACT,SAAS,cACT,SAAS,kBACP,OACA;AACN;AAEA,SAAS,UACP,IACA,MACA,OACA,UACA,WACA,OAcI,IACU;AACd,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,GAAI,QAAQ,EAAE,WAAW,MAAA,IAAU,CAAA;AAAA,IACnC,GAAI,WAAW,EAAE,cAAc,SAAA,IAAa,CAAA;AAAA,IAC5C,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,IAChC,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAA,IAAU,CAAA;AAAA,IACzC,GAAI,KAAK,kBAAkB,EAAE,iBAAiB,KAAK,gBAAA,IAAoB,CAAA;AAAA,IACvE,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,IAC5C,GAAI,KAAK,MAAM,EAAE,KAAK,KAAK,IAAA,IAAQ,CAAA;AAAA,IACnC,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,IAC5C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,IAC/C,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,IACrD,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAA,IAAa,CAAA;AAAA,IAClD,SAAS,KAAK,WAAW;AAAA,IACzB,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAA,IAAe,CAAA;AAAA,IACxD,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAA,IAAe,CAAA;AAAA,IACxD,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,IACrD,GAAI,KAAK,QAAQ,SAAY,EAAE,KAAK,KAAK,QAAQ,CAAA;AAAA,EAAC;AAEtD;AAEA,SAAS,WACP,OACA,MACA,IACA,WACA,KACA,cACqB;AACrB,MAAI,MAAM,SAAS,cAAe,MAAM,QAAQ,MAAM,OAAQ;AAC5D,QAAI,CAAC,MAAM,KAAM,QAAO;AACxB,WAAO,UAAU,IAAI,MAAM,MAAM,MAAM,OAAO,QAAW,WAAW;AAAA,MAClE,GAAI,MAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,MACpB,GAAI,MAAM,KAAK,EAAE,YAAY,MAAM,GAAA,IAAO,CAAA;AAAA,IAAC,CAC5C;AAAA,EACH;AACA,MAAI,MAAM,SAAS,cAAc,MAAM,UAAU;AAC/C,UAAM,OAAO,MAAM,YAAY,MAAM;AACrC,WAAO,OACH,EAAE,IAAI,MAAM,YAAY,MAAM,GAAI,YAAY,EAAE,cAAc,CAAA,MAC9D;AAAA,EACN;AACA,MAAI,MAAM,MAAM;AAId,WAAO;AAAA,MACL;AAAA,MACA,MACE,SAAS,YAAY,iBAAiB,SAClC,WACA,SAAS,SACP,SACA;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,iBAAiB,SACjB;AAAA,QACE;AAAA,QACA,MAAM,eAAe,YAAY;AAAA,QACjC,MAAM,gBAAgB,OAAO;AAAA,MAAA,IAE/B,CAAA;AAAA,IAAC;AAAA,EAET;AACA,SAAO;AACT;AAIO,SAAS,iBAAiB,OAAqC;AACpE,MAAI,wBAAwB,KAAK,GAAG;AAClC,WAAO,kBAAkB,MAAM,YAAY,EAAE;AAAA,EAC/C;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,yBAAyB,KAAK,GAAG;AAC3D,WAAO,kBAAkB,KAAK;AAAA,EAChC;AACA,QAAM,UAAU,aAAa,KAAgC;AAC7D,QAAM,SAAyB,CAAA;AAC/B,UAAQ,QAAQ,CAAC,OAAO,QAAQ;;AAC9B,UAAM,SAAS,MAAM,QAAQ,IAAI,GAAG;AAEpC,QAAI,MAAM,mBAAmB;AAC3B,aAAO,KAAK;AAAA,QACV,IAAI,GAAG,MAAM;AAAA,QACb,MAAM;AAAA,QACN,MAAM,aAAa,KAAK;AAAA,QACxB,GAAI,MAAM,QAAQ,EAAE,WAAW,MAAM,MAAA,IAAU,CAAA;AAAA,QAC/C,GAAI,MAAM,iBAAiB,EAAE,aAAa,MAAM,eAAA,IAAmB,CAAA;AAAA,QACnE,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAA,IAAc,CAAA;AAAA,QACvD,KAAK;AAAA,MAAA,CACN;AACD;AAAA,IACF;AAEA,UAAM,KAAK,MAAM;AACjB,QAAI,yBAAI,MAAM;AACZ,YAAM,MAAM,GAAG,OAAO,MAAM;AAC5B,aAAO;AAAA,QACL;AAAA,UACE,GAAG,MAAM;AAAA,UACT,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG,aAAa,MAAM;AAAA,UACtB;AAAA,YACE,GAAI,GAAG,QAAQ,EAAE,OAAO,GAAG,MAAA,IAAU,CAAA;AAAA,YACrC,GAAI,GAAG,mBACH,EAAE,iBAAiB,GAAG,iBAAA,IACtB,CAAA;AAAA,YACJ,GAAI,GAAG,SAAS,EAAE,QAAQ,GAAG,OAAA,IAAW,CAAA;AAAA,YACxC,GAAI,MAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,YACpB,GAAI,GAAG,cAAc,EAAE,YAAY,GAAG,YAAA,IAAgB,CAAA;AAAA,YACtD,GAAI,GAAG,aAAa,EAAE,WAAW,GAAG,WAAA,IAAe,CAAA;AAAA,YACnD,KAAK;AAAA,UAAA;AAAA,QACP;AAAA,MACF;AAEF;AAAA,IACF;AAEA,UAAM,OAAO,eAAa,WAAM,YAAN,mBAAe,SAAQ,MAAM,IAAI;AAC3D,UAAM,eACJ,SAAS,aAAa,OAAO,SAAS,kBAAkB,QAAQ;AAClE,eAAW,CAAC,GAAG,KAAK,QAAM,WAAM,YAAN,mBAAe,YAAW,IAAI,WAAW;AACjE,YAAM,KAAK;AAAA,QACT;AAAA,QACA;AAAA,QACA,GAAG,MAAM,IAAI,CAAC;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MAAA;AAEF,UAAI,GAAI,QAAO,KAAK,EAAE;AAAA,IACxB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEO,SAAS,mBACd,OACoC;AACpC,MAAI,CAAC,wBAAwB,KAAK,EAAG,QAAO;AAC5C,QAAM,WAAmC;AAAA,IACvC,GAAI,MAAM,KAAK,EAAE,WAAW,MAAM,GAAA,IAAO,CAAA;AAAA,IACzC,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAA,IAAkB,CAAA;AAAA,IACnE,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IAC3C,GAAI,MAAM,eAAe,EAAE,cAAc,MAAM,aAAA,IAAiB,CAAA;AAAA,IAChE,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,IAC9C,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAA,IAAY,CAAA;AAAA,IACjD,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,IAC9C,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IAC3C,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAA,IAAa,CAAA;AAAA,IACpD,GAAI,MAAM,kBACN,EAAE,iBAAiB,MAAM,gBAAA,IACzB,CAAA;AAAA,IACJ,GAAI,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAA,IAAmB,CAAA;AAAA,IACtE,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IAC3C,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAA,IAAS,CAAA;AAAA,EAAC;AAE3C,SAAO,OAAO,KAAK,QAAQ,EAAE,SAAS,IAAI,WAAW;AACvD;AAEA,SAAS,aAAa,OAA6B;AACjD,QAAM,SAAS,MAAM,iBAAiB,UAAU,MAAM,cAAc,MAAM;AAC1E,SAAO,GAAG,MAAM,SAAS,WAAW,GAAG,MAAM;AAC/C;AASA,SAAS,yBACP,KAC2B;AAC3B,QAAM,QAAiB,IAAI,CAAC;AAC5B,SACE,OAAO,UAAU,YACjB,UAAU,QACV,MAAM,QAAS,MAA2B,KAAK;AAEnD;AAEA,SAAS,wBACP,OAC8B;AAC9B,SACE,OAAO,UAAU,YACjB,UAAU,QACV,CAAC,MAAM,QAAQ,KAAK,MACnB,cAAc,SACb,WAAW,SACX,kBAAkB,SAClB,YAAY,SACZ,aAAa;AAEnB;AAEA,SAAS,kBAAkB,MAA8B;AACvD,SACE,QAAQ,KAAK,QAAQ,MACpB,KAAK,SAAS,kBAAkB,KAAK,KAAK,WAAW,OAAO;AAEjE;AAGA,SAAS,aAAa,QAAqC;AACzD,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,MAAM;AACpE;AAEA,SAAS,SAAS,OAAqD;AACrE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD;AACN;AAEA,SAAS,UACP,MACA,MACA,IACA,MAYqB;;AACrB,MAAI,kBAAkB,IAAI,GAAG;AAC3B,UAAM,UAAU,gBAAgB,IAAI;AACpC,WAAO;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,SAAS,KAAK,KAAK;AAAA,MACnB,aAAa,KAAK,MAAM;AAAA,MACxB,KAAK;AAAA,MACL;AAAA,QACE,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAA,IAAU,CAAA;AAAA,QACzC,GAAI,KAAK,kBACL,EAAE,iBAAiB,KAAK,gBAAA,IACxB,CAAA;AAAA,QACJ,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,QAC5C,GAAI,KAAK,MAAM,EAAE,KAAK,KAAK,IAAA,IAAQ,CAAA;AAAA,QACnC,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,QAC5C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,QAC/C,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,QACrD,GAAI,KAAK,QAAQ,EAAE,WAAW,KAAK,MAAA,IAAU,CAAA;AAAA,QAC7C,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAA,IAAa,CAAA;AAAA,QAClD;AAAA,QACA,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAA,IAAe,CAAA;AAAA,QACxD,KAAI,UAAK,aAAL,mBAAe,MAAK,EAAE,YAAY,KAAK,SAAS,GAAA,IAAO,CAAA;AAAA,QAC3D,GAAI,KAAK,QAAQ,SAAY,EAAE,KAAK,KAAK,QAAQ,CAAA;AAAA,MAAC;AAAA,IACpD;AAAA,EAEJ;AACA,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,KAAK,OACR;AAAA,MACE;AAAA,MACA,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,MACrD,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,MAC5C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,MAC/C,GAAI,KAAK,QAAQ,SAAY,EAAE,KAAK,KAAK,QAAQ,CAAA;AAAA,IAAC,IAEpD;AAAA,EACN;AACA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,MACrD,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,MAC5C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,MAC/C,GAAI,KAAK,QAAQ,SAAY,EAAE,KAAK,KAAK,QAAQ,CAAA;AAAA,IAAC;AAAA,EAEtD;AACA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,KAAK,OACR;AAAA,MACE;AAAA,MACA,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,MACrD,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,MAC5C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,MAC/C,GAAI,KAAK,QAAQ,SAAY,EAAE,KAAK,KAAK,IAAA,IAAQ,CAAA;AAAA,MACjD,GAAI,KAAK,iBAAiB,SACtB;AAAA,QACE,cAAc,KAAK;AAAA,QACnB,MAAM,KAAK,eAAe,YAAY;AAAA,QACtC,MAAM,gBAAgB,OAAO;AAAA,MAAA,IAE/B,CAAA;AAAA,IAAC,IAEP;AAAA,EACN;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,MAA8B;;AACrD,QAAI,UAAK,aAAL,mBAAe,cAAa,OAAW,QAAO;AAClD,MACE,CAAC,sBAAsB,oBAAoB,eAAe,EAAE;AAAA,IAC1D,KAAK,SAAS;AAAA,EAAA;AAGhB,WAAO;AACT,SACE,KAAK,YAAY,UACjB,UAAK,aAAL,mBAAe,aAAY,QAC3B,KAAK,UAAU;AAEnB;AAGO,SAAS,kBACd,UACgB;AAChB,QAAM,SAAyB,CAAA;AAC/B,WAAS,QAAQ,CAAC,KAAK,QAAQ;;AAC7B,UAAM,OAAO,IAAI;AACjB,UAAM,SAAS,IAAI,OAAM,6BAAM,SAAQ,IAAI,GAAG;AAC9C,QAAI,6BAAM,gBAAgB;AACxB,aAAO,KAAK;AAAA,QACV,IAAI,GAAG,MAAM;AAAA,QACb,MAAM;AAAA,QACN,MAAM,mBAAmB,KAAK,cAAc;AAAA,QAC5C,aAAa,KAAK;AAAA,QAClB,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,QACrD,GAAI,IAAI,SAAS,EAAE,QAAQ,IAAI,OAAA,IAAW,CAAA;AAAA,QAC1C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,QAC/C,GAAI,IAAI,QAAQ,SAAY,EAAE,KAAK,IAAI,QAAQ,CAAA;AAAA,MAAC,CACjD;AACD;AAAA,IACF;AAIA,UAAM,eACJ,IAAI,SAAS,aACT,OACA,IAAI,SAAS,kBACX,QACA;AACR,UAAM,OACJ,IAAI,SAAS,YAAY,iBAAiB,SACtC,WACA,IAAI,SAAS,SACX,SACA;AACR,UAAM,OAAO;AAAA,MACX,IAAI,6BAAM,aAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,MACtD,IAAI,6BAAM,OAAM,EAAE,KAAK,KAAK,IAAA,IAAQ,CAAA;AAAA,MACpC,IAAI,6BAAM,SAAQ,EAAE,OAAO,KAAK,MAAA,IAAU,CAAA;AAAA,MAC1C,IAAI,6BAAM,mBACN,EAAE,iBAAiB,KAAK,gBAAA,IACxB,CAAA;AAAA,MACJ,IAAI,6BAAM,UAAS,EAAE,QAAQ,KAAK,OAAA,IAAW,CAAA;AAAA,MAC7C,GAAI,IAAI,SAAS,EAAE,QAAQ,IAAI,OAAA,IAAW,CAAA;AAAA,MAC1C,IAAI,6BAAM,WAAU,EAAE,SAAS,KAAK,QAAA,IAAY,CAAA;AAAA,MAChD,IAAI,6BAAM,aAAY,EAAE,WAAW,KAAK,UAAA,IAAc,CAAA;AAAA,MACtD,GAAI,IAAI,QAAQ,SAAY,EAAE,KAAK,IAAI,IAAA,IAAQ,CAAA;AAAA,MAC/C,GAAI,iBAAiB,SAAY,EAAE,iBAAiB,CAAA;AAAA,IAAC;AAEvD,UAAM,cAAa;AAAA,OACjB,SAAI,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,aAAa,MAApD,mBAAuD;AAAA,IAAA,MADtC,mBAEhB;AACH,QAAI,MAAM,QAAQ,CAAC,MAAM,MAAM;;AAC7B,YAAM,YACJ,iBAAiB,UACjB,KAAK,SAAS,UACd,OAAO,eAAe,YACtB,GAACA,MAAA,KAAK,SAAL,gBAAAA,IAAW,WAAW,GAAG,UAAU,SAChC,EAAE,GAAG,MAAM,MAAM,GAAG,UAAU,MAAM,KAAK,QAAQ,EAAE,GAAA,IACnD;AACN,YAAM,KAAK,UAAU,WAAW,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,IAAI;AAC5D,UAAI,GAAI,QAAO,KAAK,EAAE;AAAA,IACxB,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;AAgCA,MAAM,UAA6C;AAAA;AAAA;AAAA;AAAA,EAIjD,MAAM,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,aAAa,aAAa,KAAA;AAAA,EACnE,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,WAAW;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA;AAAA,EAGf,MAAM,EAAE,MAAM,UAAU,MAAM,SAAS,OAAO,OAAA;AAAA,EAC9C,MAAM,EAAE,MAAM,YAAY,MAAM,OAAO,OAAO,OAAA;AAAA;AAAA,EAE9C,MAAM,EAAE,MAAM,YAAY,MAAM,WAAW,OAAO,cAAA;AAAA,EAClD,YAAY,EAAE,MAAM,SAAS,MAAM,WAAW,OAAO,eAAA;AAAA,EACrD,WAAW,EAAE,MAAM,YAAY,MAAM,QAAQ,OAAO,aAAA;AAAA,EACpD,UAAU,EAAE,MAAM,YAAY,MAAM,QAAQ,OAAO,aAAA;AAAA;AAAA,EAEnD,MAAM,EAAE,MAAM,WAAW,MAAM,UAAU,OAAO,iBAAA;AAAA,EAChD,OAAO,EAAE,MAAM,WAAW,MAAM,UAAU,OAAO,iBAAA;AAAA,EACjD,OAAO,EAAE,MAAM,aAAa,MAAM,WAAW,OAAO,eAAA;AAAA,EACpD,WAAW,EAAE,MAAM,cAAc,MAAM,OAAO,OAAO,eAAA;AAAA,EACrD,MAAM,EAAE,MAAM,YAAY,MAAM,OAAO,OAAO,OAAA;AAAA,EAC9C,YAAY,EAAE,MAAM,UAAU,MAAM,OAAO,OAAO,cAAA;AAAA,EAClD,YAAY,EAAE,MAAM,UAAU,MAAM,OAAO,OAAO,cAAA;AAAA,EAClD,UAAU,EAAE,MAAM,UAAU,MAAM,OAAO,OAAO,aAAA;AAAA,EAChD,SAAS,EAAE,MAAM,UAAU,MAAM,OAAO,OAAO,WAAA;AAAA,EAC/C,YAAY,EAAE,MAAM,UAAU,MAAM,OAAO,OAAO,cAAA;AAAA,EAClD,UAAU,EAAE,MAAM,YAAY,MAAM,QAAQ,OAAO,YAAA;AAAA,EACnD,YAAY,EAAE,MAAM,UAAU,MAAM,SAAS,OAAO,eAAA;AAAA,EACpD,iBAAiB,EAAE,MAAM,YAAY,MAAM,OAAO,OAAO,WAAA;AAAA,EACzD,eAAe,EAAE,MAAM,YAAY,MAAM,OAAO,OAAO,kBAAA;AAAA,EACvD,cAAc,EAAE,MAAM,YAAY,MAAM,OAAO,OAAO,iBAAA;AAAA;AAAA,EAEtD,UAAU,EAAE,MAAM,iBAAiB,MAAM,OAAO,OAAO,YAAA;AAAA,EACvD,WAAW,EAAE,MAAM,SAAS,MAAM,OAAO,OAAO,aAAA;AAAA,EAChD,kBAAkB,EAAE,MAAM,WAAW,MAAM,OAAO,OAAO,WAAA;AAAA,EACzD,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,eAAe,EAAE,MAAM,eAAe,MAAM,OAAO,OAAO,QAAA;AAAA,EAC1D,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc,EAAE,MAAM,YAAY,MAAM,WAAW,OAAO,YAAA;AAAA,EAC1D,mBAAmB,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,YAAA;AAAA,EAC5D,kBAAkB,EAAE,MAAM,QAAQ,MAAM,UAAU,OAAO,WAAA;AAAA,EACzD,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB,EAAE,MAAM,SAAS,MAAM,UAAU,OAAO,cAAA;AAAA,EAC1D,0BAA0B,EAAE,MAAM,UAAU,MAAM,SAAS,OAAO,UAAA;AAAA,EAClE,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,OAAA;AAAA,EAC7D,MAAM,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,OAAA;AAAA,EACjD,eAAe,EAAE,MAAM,SAAS,MAAM,QAAQ,OAAO,gBAAA;AACvD;AAKA,MAAM,uCAAuB,IAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,MAAM,kBAAkB,oBAAI,IAAI,CAAC,UAAU,UAAU,WAAW,CAAC;AAO1D,SAAS,aAAa,MAA8B;AACzD,QAAM,OAAO,KAAK,WAAW,OAAO,IAAI,KAAK,MAAM,QAAQ,MAAM,IAAI;AACrE,QAAM,MAAM,KAAK,QAAQ,IAAI;AAC7B,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,GAAG,GAAG,MAAM,KAAK,MAAM,MAAM,CAAC,EAAA;AAC/D;AAGO,SAAS,iBAAiB,MAAiC;AAChE,QAAM,QAAQ,QAAQ,IAAI;AAC1B,MAAI,MAAO,QAAO;AAElB,QAAM,MAAM,aAAa,IAAI;AAC7B,MAAI,KAAK;AACP,UAAM,QAAQ,GAAG,IAAI,MAAM,KAAK,IAAI,KAAK,QAAQ,MAAM,GAAG,CAAC;AAC3D,QAAI,iBAAiB,IAAI,IAAI,MAAM;AACjC,aAAO,EAAE,MAAM,WAAW,MAAM,QAAQ,MAAA;AAC1C,QAAI,gBAAgB,IAAI,IAAI,MAAM;AAChC,aAAO,EAAE,MAAM,YAAY,MAAM,UAAU,MAAA;AAC7C,WAAO,EAAE,MAAM,UAAU,MAAM,UAAU,MAAA;AAAA,EAC3C;AAEA,SAAO,EAAE,MAAM,UAAU,MAAM,SAAS,OAAO,KAAA;AACjD;AAGO,SAAS,iBAAiB,QAI/B;AACA,MAAI,YAAY;AAChB,MAAI,eAAe;AACnB,QAAM,kCAAkB,IAAA;AACxB,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,OAAQ,cAAa;AACxC,QACE,MAAM,SAAS,YACf,MAAM,SAAS,UACf,MAAM,SAAS,aACf;AACA,sBAAgB;AAAA,IAClB;AACA,QAAI,MAAM;AACR,kBAAY,IAAI,MAAM,QAAQ,YAAY,IAAI,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,EACxE;AACA,MAAI;AACJ,MAAI,OAAO;AACX,aAAW,CAAC,MAAM,KAAK,KAAK,aAAa;AACvC,QAAI,QAAQ,MAAM;AAChB,aAAO;AACP,cAAQ;AAAA,IACV;AAAA,EACF;AACA,SAAO,EAAE,WAAW,cAAc,GAAI,QAAQ,EAAE,MAAA,IAAU,GAAC;AAC7D;"}
|
|
@@ -18,6 +18,7 @@ const UiBrain = require("../../icons/components/UiBrain.cjs");
|
|
|
18
18
|
const UiSparkles = require("../../icons/components/UiSparkles.cjs");
|
|
19
19
|
function SessionRow({
|
|
20
20
|
event,
|
|
21
|
+
initialPrompt = false,
|
|
21
22
|
last,
|
|
22
23
|
defaultExpanded,
|
|
23
24
|
showRowMetadata = false,
|
|
@@ -30,6 +31,7 @@ function SessionRow({
|
|
|
30
31
|
UserRow,
|
|
31
32
|
{
|
|
32
33
|
event,
|
|
34
|
+
initialPrompt,
|
|
33
35
|
showRowMetadata,
|
|
34
36
|
showRaw
|
|
35
37
|
}
|
|
@@ -172,6 +174,7 @@ function WaitGroupRow({
|
|
|
172
174
|
}
|
|
173
175
|
function UserRow({
|
|
174
176
|
event,
|
|
177
|
+
initialPrompt,
|
|
175
178
|
showRowMetadata,
|
|
176
179
|
showRaw
|
|
177
180
|
}) {
|
|
@@ -180,10 +183,10 @@ function UserRow({
|
|
|
180
183
|
{
|
|
181
184
|
"data-event-kind": "user",
|
|
182
185
|
className: "relative flex justify-end pb-density-4 last:pb-0",
|
|
183
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:
|
|
186
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:gap-density-3", !initialPrompt && "@min-[48rem]/session-viewer:max-w-[85%]"), children: [
|
|
184
187
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
185
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-0.5 text-right text-xs font-medium text-muted-foreground", children: "You" }),
|
|
186
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "
|
|
188
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-0.5 text-right text-xs font-medium text-muted-foreground", children: initialPrompt ? "Initial prompt" : "You" }),
|
|
189
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 break-words rounded-lg bg-accent px-density-3 py-density-2 text-left text-sm leading-relaxed text-accent-foreground", children: event.file ? /* @__PURE__ */ jsxRuntime.jsx(MessageFilePart.MessageFilePart, { part: event.file }) : event.text && /* @__PURE__ */ jsxRuntime.jsx(Markdown.Markdown, { text: event.text }) }),
|
|
187
190
|
showRowMetadata && /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_rowMetadata.EventMetadata, { event, align: "right" }),
|
|
188
191
|
showRaw && event.raw !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_rowMetadata.RawEventBlock, { raw: event.raw, align: "right" })
|
|
189
192
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.rows.cjs","sources":["../../../src/data/ai/SessionViewer.rows.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiBrain,\n UiChevronDown,\n UiSparkles,\n UiUserCircle,\n UiWarningTriangle,\n} from \"../../icons\";\nimport {\n getSessionAction,\n type SessionEvent,\n type SessionTone,\n} from \"./SessionViewer.model\";\nimport { SESSION_TONES } from \"./session-tones\";\nimport type { SessionEventGroup } from \"./SessionViewer.grouping\";\nimport { EventMetadata, RawEventBlock } from \"./SessionViewer.row-metadata\";\nimport { formatEventRange } from \"./SessionViewer.row-time\";\nimport { ToolBody } from \"./SessionViewer.tool-row\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\nimport { Markdown } from \"../Markdown\";\nimport { MessageFilePart } from \"../chat/MessageFilePart\";\n\nexport function SessionRow({\n event,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"user\") {\n return (\n <UserRow\n event={event}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n />\n );\n }\n\n const visual = eventVisual(event);\n return (\n <li\n data-event-kind={event.kind}\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <EventBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n messageBadge={\n event.kind === \"assistant\" ? renderMessageBadge?.(event) : undefined\n }\n onPendingToolDecision={onPendingToolDecision}\n />\n {showRowMetadata && <EventMetadata event={event} />}\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} />\n )}\n </div>\n </li>\n );\n}\n\nexport function WaitGroupRow({\n group,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n group: SessionEventGroup;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const [open, setOpen] = useState(false);\n const visual = getSessionAction(\"Wait\");\n const first = group.representative;\n const final = group.events[group.events.length - 1] ?? first;\n const label = `Wait × ${group.count}`;\n const metadataEvent = { ...first };\n delete metadataEvent.timestamp;\n delete metadataEvent.toolState;\n delete metadataEvent.approval;\n metadataEvent.pending = false;\n const timestampLabel = formatEventRange(first.timestamp, final.timestamp);\n\n return (\n <li\n data-event-kind=\"tool\"\n data-event-group=\"wait\"\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-center gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"font-medium text-foreground\">{label}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {showRowMetadata && (\n <EventMetadata\n event={metadataEvent}\n {...(timestampLabel ? { timestampLabel } : {})}\n />\n )}\n {open && (\n <ol className=\"relative mt-density-3 border-l border-border pl-density-3\">\n {group.events.map((event, index) => (\n <SessionRow\n key={event.id}\n event={event}\n last={index === group.events.length - 1}\n defaultExpanded={defaultExpanded}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n renderMessageBadge={renderMessageBadge}\n onPendingToolDecision={onPendingToolDecision}\n />\n ))}\n </ol>\n )}\n </div>\n </li>\n );\n}\n\nfunction UserRow({\n event,\n showRowMetadata,\n showRaw,\n}: {\n event: SessionEvent;\n showRowMetadata: boolean;\n showRaw: boolean;\n}) {\n return (\n <li\n data-event-kind=\"user\"\n className=\"relative flex justify-end pb-density-4 last:pb-0\"\n >\n <div className=\"flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:max-w-[85%] @min-[48rem]/session-viewer:gap-density-3\">\n <div className=\"min-w-0\">\n <div className=\"mb-0.5 text-right text-xs font-medium text-muted-foreground\">\n You\n </div>\n <div className=\"whitespace-pre-wrap break-words rounded-lg bg-accent px-density-3 py-density-2 text-right text-base font-medium leading-relaxed text-accent-foreground\">\n {event.file ? <MessageFilePart part={event.file} /> : event.text}\n </div>\n {showRowMetadata && <EventMetadata event={event} align=\"right\" />}\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} align=\"right\" />\n )}\n </div>\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES.slate.disc,\n )}\n >\n <Icon icon={UiUserCircle} className=\"h-3 w-3\" />\n </span>\n </div>\n </li>\n );\n}\n\ninterface EventVisual {\n icon: StaticIconComponent;\n tone: SessionTone;\n label: string;\n summaryOnly: boolean;\n}\n\n// Base visuals per event kind. A row's `icon`/`tone` fields (set for a\n// `verified`/`verify_failed` system row — see SessionViewer.model.ts) override\n// these defaults; eventVisual applies that override uniformly below rather\n// than special-casing it inside the switch.\nfunction baseEventVisual(event: SessionEvent): EventVisual {\n switch (event.kind) {\n case \"tool\": {\n const action = getSessionAction(event.tool ?? \"\");\n return {\n icon: action.icon,\n tone: action.tone,\n label: action.label,\n summaryOnly: action.summaryOnly ?? false,\n };\n }\n case \"user\":\n return {\n icon: UiUserCircle,\n tone: \"slate\",\n label: \"User\",\n summaryOnly: false,\n };\n case \"system\":\n return {\n icon: UiSparkles,\n tone: \"slate\",\n label: \"System\",\n summaryOnly: false,\n };\n case \"assistant\":\n return {\n icon: UiSparkles,\n tone: \"indigo\",\n label: \"Assistant\",\n summaryOnly: false,\n };\n case \"thinking\":\n return {\n icon: UiBrain,\n tone: \"slate\",\n label: \"Thinking\",\n summaryOnly: false,\n };\n case \"error\":\n return {\n icon: UiWarningTriangle,\n tone: \"rose\",\n label: \"Error\",\n summaryOnly: false,\n };\n }\n}\n\nfunction eventVisual(event: SessionEvent): EventVisual {\n const base = baseEventVisual(event);\n return {\n ...base,\n icon: event.icon ?? base.icon,\n tone: event.tone ?? base.tone,\n };\n}\n\nfunction EventBody({\n event,\n visual,\n defaultExpanded,\n messageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: EventVisual;\n defaultExpanded: boolean;\n messageBadge?: ReactNode;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"tool\")\n return (\n <ToolBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n onPendingToolDecision={onPendingToolDecision}\n />\n );\n if (event.kind === \"thinking\") return <ThinkingBody event={event} />;\n if (event.kind === \"error\") return <ErrorBody event={event} />;\n if (event.kind === \"system\") return <SystemBody event={event} />;\n return <MessageBody event={event} badge={messageBadge} />;\n}\n\nfunction MessageBody({\n event,\n badge,\n}: {\n event: SessionEvent;\n badge?: ReactNode;\n}) {\n return (\n <div className=\"flex items-start gap-1.5\">\n {badge}\n <div className=\"min-w-0 whitespace-pre-wrap break-words text-sm font-medium leading-relaxed text-foreground\">\n {event.file && <MessageFilePart part={event.file} />}\n {event.text && <Markdown text={event.text} />}\n </div>\n </div>\n );\n}\n\nfunction SystemBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n const preview = event.text?.split(\"\\n\", 1)[0] ?? \"System instructions\";\n return (\n <div className=\"not-prose text-xs text-muted-foreground\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"shrink-0 font-medium text-foreground\">System</span>\n <span className=\"min-w-0 flex-1 truncate\">{preview}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {open && (\n <div className=\"mt-1.5 whitespace-pre-wrap break-words bg-muted/20 px-density-3 py-density-2 leading-relaxed\">\n {event.text && <Markdown text={event.text} />}\n </div>\n )}\n </div>\n );\n}\n\n// Reasoning shows its text directly — truncated to one line, click to expand.\nfunction ThinkingBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"not-prose\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left text-xs italic leading-relaxed text-muted-foreground hover:text-foreground\"\n >\n <span\n className={cn(\n \"min-w-0 flex-1\",\n open ? \"whitespace-pre-wrap break-words\" : \"truncate\",\n )}\n >\n {event.text}\n </span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n </div>\n );\n}\n\nfunction ErrorBody({ event }: { event: SessionEvent }) {\n return (\n <div className=\"rounded-md border border-rose-200 bg-rose-50 px-density-3 py-1.5 text-xs text-rose-700 [[data-theme=dark]_&]:border-rose-500/30 [[data-theme=dark]_&]:bg-rose-500/10 [[data-theme=dark]_&]:text-rose-300\">\n {event.text}\n </div>\n );\n}\n"],"names":["jsx","jsxs","cn","SESSION_TONES","Icon","EventMetadata","RawEventBlock","useState","getSessionAction","formatEventRange","UiChevronDown","MessageFilePart","UiUserCircle","UiSparkles","UiBrain","UiWarningTriangle","ToolBody","Markdown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionViewer.rows.cjs","sources":["../../../src/data/ai/SessionViewer.rows.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiBrain,\n UiChevronDown,\n UiSparkles,\n UiUserCircle,\n UiWarningTriangle,\n} from \"../../icons\";\nimport {\n getSessionAction,\n type SessionEvent,\n type SessionTone,\n} from \"./SessionViewer.model\";\nimport { SESSION_TONES } from \"./session-tones\";\nimport type { SessionEventGroup } from \"./SessionViewer.grouping\";\nimport { EventMetadata, RawEventBlock } from \"./SessionViewer.row-metadata\";\nimport { formatEventRange } from \"./SessionViewer.row-time\";\nimport { ToolBody } from \"./SessionViewer.tool-row\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\nimport { Markdown } from \"../Markdown\";\nimport { MessageFilePart } from \"../chat/MessageFilePart\";\n\nexport function SessionRow({\n event,\n initialPrompt = false,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n initialPrompt?: boolean;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"user\") {\n return (\n <UserRow\n event={event}\n initialPrompt={initialPrompt}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n />\n );\n }\n\n const visual = eventVisual(event);\n return (\n <li\n data-event-kind={event.kind}\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <EventBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n messageBadge={\n event.kind === \"assistant\" ? renderMessageBadge?.(event) : undefined\n }\n onPendingToolDecision={onPendingToolDecision}\n />\n {showRowMetadata && <EventMetadata event={event} />}\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} />\n )}\n </div>\n </li>\n );\n}\n\nexport function WaitGroupRow({\n group,\n last,\n defaultExpanded,\n showRowMetadata = false,\n showRaw = false,\n renderMessageBadge,\n onPendingToolDecision,\n}: {\n group: SessionEventGroup;\n last: boolean;\n defaultExpanded: boolean;\n showRowMetadata?: boolean;\n showRaw?: boolean;\n renderMessageBadge?: ((event: SessionEvent) => ReactNode) | undefined;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const [open, setOpen] = useState(false);\n const visual = getSessionAction(\"Wait\");\n const first = group.representative;\n const final = group.events[group.events.length - 1] ?? first;\n const label = `Wait × ${group.count}`;\n const metadataEvent = { ...first };\n delete metadataEvent.timestamp;\n delete metadataEvent.toolState;\n delete metadataEvent.approval;\n metadataEvent.pending = false;\n const timestampLabel = formatEventRange(first.timestamp, final.timestamp);\n\n return (\n <li\n data-event-kind=\"tool\"\n data-event-group=\"wait\"\n className=\"relative flex gap-density-2 pb-density-3 last:pb-0 @min-[48rem]/session-viewer:gap-density-3 @min-[48rem]/session-viewer:pb-density-4\"\n >\n {!last && (\n <span\n aria-hidden\n className=\"absolute bottom-0 left-[10px] top-[22px] w-px bg-border\"\n />\n )}\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES[visual.tone].disc,\n )}\n >\n <Icon icon={visual.icon} className=\"h-3 w-3\" />\n </span>\n <div className=\"min-w-0 flex-1 pt-px\">\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-center gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"font-medium text-foreground\">{label}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {showRowMetadata && (\n <EventMetadata\n event={metadataEvent}\n {...(timestampLabel ? { timestampLabel } : {})}\n />\n )}\n {open && (\n <ol className=\"relative mt-density-3 border-l border-border pl-density-3\">\n {group.events.map((event, index) => (\n <SessionRow\n key={event.id}\n event={event}\n last={index === group.events.length - 1}\n defaultExpanded={defaultExpanded}\n showRowMetadata={showRowMetadata}\n showRaw={showRaw}\n renderMessageBadge={renderMessageBadge}\n onPendingToolDecision={onPendingToolDecision}\n />\n ))}\n </ol>\n )}\n </div>\n </li>\n );\n}\n\nfunction UserRow({\n event,\n initialPrompt,\n showRowMetadata,\n showRaw,\n}: {\n event: SessionEvent;\n initialPrompt: boolean;\n showRowMetadata: boolean;\n showRaw: boolean;\n}) {\n return (\n <li\n data-event-kind=\"user\"\n className=\"relative flex justify-end pb-density-4 last:pb-0\"\n >\n <div className={cn(\"flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:gap-density-3\", !initialPrompt && \"@min-[48rem]/session-viewer:max-w-[85%]\")}>\n <div className=\"min-w-0\">\n <div className=\"mb-0.5 text-right text-xs font-medium text-muted-foreground\">\n {initialPrompt ? \"Initial prompt\" : \"You\"}\n </div>\n <div className=\"min-w-0 break-words rounded-lg bg-accent px-density-3 py-density-2 text-left text-sm leading-relaxed text-accent-foreground\">\n {event.file ? <MessageFilePart part={event.file} /> : event.text && <Markdown text={event.text} />}\n </div>\n {showRowMetadata && <EventMetadata event={event} align=\"right\" />}\n {showRaw && event.raw !== undefined && (\n <RawEventBlock raw={event.raw} align=\"right\" />\n )}\n </div>\n <span\n className={cn(\n \"relative z-[1] flex h-[21px] w-[21px] shrink-0 items-center justify-center rounded-full\",\n SESSION_TONES.slate.disc,\n )}\n >\n <Icon icon={UiUserCircle} className=\"h-3 w-3\" />\n </span>\n </div>\n </li>\n );\n}\n\ninterface EventVisual {\n icon: StaticIconComponent;\n tone: SessionTone;\n label: string;\n summaryOnly: boolean;\n}\n\n// Base visuals per event kind. A row's `icon`/`tone` fields (set for a\n// `verified`/`verify_failed` system row — see SessionViewer.model.ts) override\n// these defaults; eventVisual applies that override uniformly below rather\n// than special-casing it inside the switch.\nfunction baseEventVisual(event: SessionEvent): EventVisual {\n switch (event.kind) {\n case \"tool\": {\n const action = getSessionAction(event.tool ?? \"\");\n return {\n icon: action.icon,\n tone: action.tone,\n label: action.label,\n summaryOnly: action.summaryOnly ?? false,\n };\n }\n case \"user\":\n return {\n icon: UiUserCircle,\n tone: \"slate\",\n label: \"User\",\n summaryOnly: false,\n };\n case \"system\":\n return {\n icon: UiSparkles,\n tone: \"slate\",\n label: \"System\",\n summaryOnly: false,\n };\n case \"assistant\":\n return {\n icon: UiSparkles,\n tone: \"indigo\",\n label: \"Assistant\",\n summaryOnly: false,\n };\n case \"thinking\":\n return {\n icon: UiBrain,\n tone: \"slate\",\n label: \"Thinking\",\n summaryOnly: false,\n };\n case \"error\":\n return {\n icon: UiWarningTriangle,\n tone: \"rose\",\n label: \"Error\",\n summaryOnly: false,\n };\n }\n}\n\nfunction eventVisual(event: SessionEvent): EventVisual {\n const base = baseEventVisual(event);\n return {\n ...base,\n icon: event.icon ?? base.icon,\n tone: event.tone ?? base.tone,\n };\n}\n\nfunction EventBody({\n event,\n visual,\n defaultExpanded,\n messageBadge,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: EventVisual;\n defaultExpanded: boolean;\n messageBadge?: ReactNode;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n if (event.kind === \"tool\")\n return (\n <ToolBody\n event={event}\n visual={visual}\n defaultExpanded={defaultExpanded}\n onPendingToolDecision={onPendingToolDecision}\n />\n );\n if (event.kind === \"thinking\") return <ThinkingBody event={event} />;\n if (event.kind === \"error\") return <ErrorBody event={event} />;\n if (event.kind === \"system\") return <SystemBody event={event} />;\n return <MessageBody event={event} badge={messageBadge} />;\n}\n\nfunction MessageBody({\n event,\n badge,\n}: {\n event: SessionEvent;\n badge?: ReactNode;\n}) {\n return (\n <div className=\"flex items-start gap-1.5\">\n {badge}\n <div className=\"min-w-0 whitespace-pre-wrap break-words text-sm font-medium leading-relaxed text-foreground\">\n {event.file && <MessageFilePart part={event.file} />}\n {event.text && <Markdown text={event.text} />}\n </div>\n </div>\n );\n}\n\nfunction SystemBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n const preview = event.text?.split(\"\\n\", 1)[0] ?? \"System instructions\";\n return (\n <div className=\"not-prose text-xs text-muted-foreground\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left hover:text-foreground\"\n >\n <span className=\"shrink-0 font-medium text-foreground\">System</span>\n <span className=\"min-w-0 flex-1 truncate\">{preview}</span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {open && (\n <div className=\"mt-1.5 whitespace-pre-wrap break-words bg-muted/20 px-density-3 py-density-2 leading-relaxed\">\n {event.text && <Markdown text={event.text} />}\n </div>\n )}\n </div>\n );\n}\n\n// Reasoning shows its text directly — truncated to one line, click to expand.\nfunction ThinkingBody({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"not-prose\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-start gap-1.5 text-left text-xs italic leading-relaxed text-muted-foreground hover:text-foreground\"\n >\n <span\n className={cn(\n \"min-w-0 flex-1\",\n open ? \"whitespace-pre-wrap break-words\" : \"truncate\",\n )}\n >\n {event.text}\n </span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"mt-0.5 size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n </div>\n );\n}\n\nfunction ErrorBody({ event }: { event: SessionEvent }) {\n return (\n <div className=\"rounded-md border border-rose-200 bg-rose-50 px-density-3 py-1.5 text-xs text-rose-700 [[data-theme=dark]_&]:border-rose-500/30 [[data-theme=dark]_&]:bg-rose-500/10 [[data-theme=dark]_&]:text-rose-300\">\n {event.text}\n </div>\n );\n}\n"],"names":["jsx","jsxs","cn","SESSION_TONES","Icon","EventMetadata","RawEventBlock","useState","getSessionAction","formatEventRange","UiChevronDown","MessageFilePart","Markdown","UiUserCircle","UiSparkles","UiBrain","UiWarningTriangle","ToolBody"],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { SessionEvent } from './SessionViewer.model.js';
|
|
3
3
|
import { SessionEventGroup } from './SessionViewer.grouping.js';
|
|
4
4
|
import { SessionToolDecision } from './SessionViewer.js';
|
|
5
|
-
export declare function SessionRow({ event, last, defaultExpanded, showRowMetadata, showRaw, renderMessageBadge, onPendingToolDecision, }: {
|
|
5
|
+
export declare function SessionRow({ event, initialPrompt, last, defaultExpanded, showRowMetadata, showRaw, renderMessageBadge, onPendingToolDecision, }: {
|
|
6
6
|
event: SessionEvent;
|
|
7
|
+
initialPrompt?: boolean;
|
|
7
8
|
last: boolean;
|
|
8
9
|
defaultExpanded: boolean;
|
|
9
10
|
showRowMetadata?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.rows.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.rows.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUjD,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI3D,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,IAAI,EACJ,eAAe,EACf,eAAuB,EACvB,OAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACtE,qBAAqB,CAAC,EACpB,CAAC,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GACzD,SAAS,CAAC;CACb,+
|
|
1
|
+
{"version":3,"file":"SessionViewer.rows.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.rows.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUjD,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI3D,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,aAAqB,EACrB,IAAI,EACJ,eAAe,EACf,eAAuB,EACvB,OAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACtE,qBAAqB,CAAC,EACpB,CAAC,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GACzD,SAAS,CAAC;CACb,+BAiDA;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,eAAe,EACf,eAAuB,EACvB,OAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,EAAE;IACD,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACtE,qBAAqB,CAAC,EACpB,CAAC,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GACzD,SAAS,CAAC;CACb,+BA2EA"}
|
|
@@ -16,6 +16,7 @@ import { UiBrain } from "../../icons/components/UiBrain.js";
|
|
|
16
16
|
import { UiSparkles } from "../../icons/components/UiSparkles.js";
|
|
17
17
|
function SessionRow({
|
|
18
18
|
event,
|
|
19
|
+
initialPrompt = false,
|
|
19
20
|
last,
|
|
20
21
|
defaultExpanded,
|
|
21
22
|
showRowMetadata = false,
|
|
@@ -28,6 +29,7 @@ function SessionRow({
|
|
|
28
29
|
UserRow,
|
|
29
30
|
{
|
|
30
31
|
event,
|
|
32
|
+
initialPrompt,
|
|
31
33
|
showRowMetadata,
|
|
32
34
|
showRaw
|
|
33
35
|
}
|
|
@@ -170,6 +172,7 @@ function WaitGroupRow({
|
|
|
170
172
|
}
|
|
171
173
|
function UserRow({
|
|
172
174
|
event,
|
|
175
|
+
initialPrompt,
|
|
173
176
|
showRowMetadata,
|
|
174
177
|
showRaw
|
|
175
178
|
}) {
|
|
@@ -178,10 +181,10 @@ function UserRow({
|
|
|
178
181
|
{
|
|
179
182
|
"data-event-kind": "user",
|
|
180
183
|
className: "relative flex justify-end pb-density-4 last:pb-0",
|
|
181
|
-
children: /* @__PURE__ */ jsxs("div", { className: "flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:
|
|
184
|
+
children: /* @__PURE__ */ jsxs("div", { className: cn("flex max-w-full items-start gap-density-2 @min-[48rem]/session-viewer:gap-density-3", !initialPrompt && "@min-[48rem]/session-viewer:max-w-[85%]"), children: [
|
|
182
185
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
183
|
-
/* @__PURE__ */ jsx("div", { className: "mb-0.5 text-right text-xs font-medium text-muted-foreground", children: "You" }),
|
|
184
|
-
/* @__PURE__ */ jsx("div", { className: "
|
|
186
|
+
/* @__PURE__ */ jsx("div", { className: "mb-0.5 text-right text-xs font-medium text-muted-foreground", children: initialPrompt ? "Initial prompt" : "You" }),
|
|
187
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 break-words rounded-lg bg-accent px-density-3 py-density-2 text-left text-sm leading-relaxed text-accent-foreground", children: event.file ? /* @__PURE__ */ jsx(MessageFilePart, { part: event.file }) : event.text && /* @__PURE__ */ jsx(Markdown, { text: event.text }) }),
|
|
185
188
|
showRowMetadata && /* @__PURE__ */ jsx(EventMetadata, { event, align: "right" }),
|
|
186
189
|
showRaw && event.raw !== void 0 && /* @__PURE__ */ jsx(RawEventBlock, { raw: event.raw, align: "right" })
|
|
187
190
|
] }),
|