zidane-ui 9.1.1 → 9.1.3
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 +2 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/ModalProvider.d.ts +3 -1
- package/dist/app/ModalProvider.js +15 -9
- package/dist/approvals/headless/index.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/index.js +1 -1
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/headless/block-runs.d.ts +57 -0
- package/dist/chat/headless/block-runs.js +123 -0
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/fixture-transcript.d.ts +6 -1
- package/dist/chat/headless/fixture-transcript.js +49 -0
- package/dist/chat/headless/host.d.ts +3 -0
- package/dist/chat/headless/index.d.ts +2 -1
- package/dist/chat/headless/index.js +12 -11
- package/dist/chat/headless/labels.d.ts +42 -0
- package/dist/chat/headless/labels.js +42 -0
- package/dist/chat/headless/session-list.d.ts +27 -0
- package/dist/chat/headless/sidebar/index.js +1 -1
- package/dist/chat/headless/sidebar/labels.d.ts +27 -0
- package/dist/chat/headless/streams/index.js +1 -1
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +2 -2
- package/dist/chat/headless/streams/store.js +2 -2
- package/dist/chat/headless/transcript/batch.d.ts +21 -1
- package/dist/chat/headless/transcript/batch.js +55 -10
- package/dist/chat/headless/transcript/collapse.js +18 -3
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/index.js +1 -1
- package/dist/chat/headless/transcript/rows.d.ts +7 -1
- package/dist/chat/index.d.ts +6 -1
- package/dist/chat/index.js +7 -2
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/TranscriptRow.js +19 -2
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/index.d.ts +6 -1
- package/dist/chat/transcript/index.js +6 -1
- package/dist/chat/transcript/markdown.js +9 -0
- package/dist/chat/transcript/renderers.d.ts +7 -0
- package/dist/chat/transcript/script-input.d.ts +17 -0
- package/dist/chat/transcript/script-input.js +16 -0
- package/dist/chat/transcript/shell-block-scope.d.ts +29 -0
- package/dist/chat/transcript/shell-block-scope.js +18 -0
- package/dist/chat/transcript/shell-block.d.ts +27 -0
- package/dist/chat/transcript/shell-block.js +306 -0
- package/dist/chat/transcript/tool-parts.d.ts +18 -6
- package/dist/chat/transcript/tool-parts.js +15 -5
- package/dist/chat/transcript/tool-payload.js +6 -3
- package/dist/chat/transcript/tool-row.js +155 -96
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/code/HighlightedCode.js +3 -69
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/core.css +6 -2
- package/dist/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +101 -3
- package/dist/extensions/ExtensionSettingsSidebar.js +19 -3
- package/dist/extensions/kit.d.ts +1 -1
- package/dist/git/BranchMenu.d.ts +1 -7
- package/dist/git/BranchMenu.js +17 -40
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/onboarding/index.js +1 -1
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +2 -2
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +15 -8
- package/dist/settings/headless/catalog.js +5 -0
- package/dist/settings/headless/layout.js +2 -1
- package/dist/settings/headless/registry.d.ts +2 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +2 -2
- package/dist/settings/sections/models/ModelRows.js +1 -1
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/styles.css +291 -2
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +10 -0
- package/dist/terminal/headless/store.js +16 -0
- package/dist/terminal/index.d.ts +2 -2
- package/dist/terminal/index.js +2 -2
- package/dist/theme/runtime-icons.d.ts +50 -0
- package/dist/theme/runtime-icons.js +95 -0
- package/package.json +3 -6
- package/src/styles/primitives.css +5 -2
- package/src/styles/transcript.css +281 -0
- package/src/adapters/browser-appearance-host.ts +0 -51
- package/src/adapters/browser-keybindings-host.ts +0 -48
- package/src/adapters/browser-workspace-host.ts +0 -92
- package/src/adapters/closable-client.ts +0 -34
- package/src/adapters/extension-modules.ts +0 -360
- package/src/adapters/index.ts +0 -35
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -270
- package/src/adapters/run-host.ts +0 -238
- package/src/adapters/server-approvals-host.ts +0 -102
- package/src/adapters/server-client.ts +0 -15
- package/src/adapters/server-composer-host.ts +0 -459
- package/src/adapters/server-extensions-host.ts +0 -979
- package/src/adapters/server-files-host.ts +0 -287
- package/src/adapters/server-git-host.ts +0 -289
- package/src/adapters/server-host.ts +0 -489
- package/src/adapters/server-machines-host.ts +0 -283
- package/src/adapters/server-oauth-flow.ts +0 -133
- package/src/adapters/server-onboarding-host.ts +0 -363
- package/src/adapters/server-palette-host.ts +0 -134
- package/src/adapters/server-session-host.ts +0 -241
- package/src/adapters/server-settings-accounts.ts +0 -212
- package/src/adapters/server-settings-host.ts +0 -120
- package/src/adapters/server-settings-models.ts +0 -46
- package/src/adapters/server-settings-performance.ts +0 -58
- package/src/adapters/server-settings-sections.ts +0 -222
- package/src/adapters/server-sidebar-host.ts +0 -59
- package/src/adapters/server-terminal-host.ts +0 -124
- package/src/adapters/server-transcript-members.ts +0 -131
- package/src/adapters/sse-host.ts +0 -264
- package/src/adapters/sse-parser.ts +0 -82
- package/src/adapters/sse-protocol.ts +0 -118
- package/src/adapters/stream-pacer.ts +0 -122
- package/src/adapters/worker-host.ts +0 -192
- package/src/adapters/worker-protocol.ts +0 -97
- package/src/app/AppHostProvider.tsx +0 -135
- package/src/app/ModalProvider.tsx +0 -731
- package/src/app/headless/app-host.ts +0 -61
- package/src/app/headless/index.ts +0 -6
- package/src/app/headless/resource.ts +0 -444
- package/src/app/index.ts +0 -9
- package/src/app/testing/index.ts +0 -90
- package/src/app/useConfirm.tsx +0 -65
- package/src/app/useResource.ts +0 -30
- package/src/appearance/AppearanceProvider.tsx +0 -383
- package/src/appearance/apply.ts +0 -69
- package/src/appearance/headless/fixture-host.ts +0 -111
- package/src/appearance/headless/fonts.ts +0 -224
- package/src/appearance/headless/host.ts +0 -65
- package/src/appearance/headless/index.ts +0 -12
- package/src/appearance/headless/prefs.ts +0 -252
- package/src/appearance/headless/storage.ts +0 -127
- package/src/appearance/headless/zoom-commands.ts +0 -21
- package/src/appearance/index.ts +0 -11
- package/src/appearance/testing/contract.ts +0 -210
- package/src/appearance/testing/index.ts +0 -6
- package/src/approvals/ApprovalBar.tsx +0 -234
- package/src/approvals/ApprovalConcern.tsx +0 -33
- package/src/approvals/ApprovalShell.tsx +0 -69
- package/src/approvals/ApprovalsProvider.tsx +0 -110
- package/src/approvals/FileEditApproval.tsx +0 -310
- package/src/approvals/HunkPreviews.tsx +0 -225
- package/src/approvals/SafelistPanel.tsx +0 -149
- package/src/approvals/headless/fixture-host.ts +0 -73
- package/src/approvals/headless/fixtures.ts +0 -86
- package/src/approvals/headless/heads.ts +0 -81
- package/src/approvals/headless/host.ts +0 -80
- package/src/approvals/headless/index.ts +0 -12
- package/src/approvals/headless/labels.ts +0 -67
- package/src/approvals/headless/pending.ts +0 -91
- package/src/approvals/headless/preview.ts +0 -94
- package/src/approvals/headless/safelist.ts +0 -63
- package/src/approvals/index.ts +0 -13
- package/src/approvals/key-scope.ts +0 -33
- package/src/approvals/testing/contract.ts +0 -230
- package/src/approvals/testing/index.ts +0 -7
- package/src/brands/marks.ts +0 -298
- package/src/chat/ChatProvider.tsx +0 -60
- package/src/chat/DaemonOrb.tsx +0 -107
- package/src/chat/HostBadge.tsx +0 -71
- package/src/chat/HostStatusDot.tsx +0 -53
- package/src/chat/HostTranscript.tsx +0 -101
- package/src/chat/PdfPreview.tsx +0 -65
- package/src/chat/RunEstimateChip.tsx +0 -168
- package/src/chat/SessionFilterMenu.tsx +0 -397
- package/src/chat/SessionGroupHeader.tsx +0 -177
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -296
- package/src/chat/SessionStreamsProvider.tsx +0 -253
- package/src/chat/StatusDot.tsx +0 -128
- package/src/chat/TextPreview.tsx +0 -121
- package/src/chat/Throbber.tsx +0 -270
- package/src/chat/Transcript.tsx +0 -523
- package/src/chat/composer/AgentPicker.tsx +0 -155
- package/src/chat/composer/AgentPickerDialog.tsx +0 -99
- package/src/chat/composer/ApprovalDock.tsx +0 -64
- package/src/chat/composer/ArchivedBanner.tsx +0 -44
- package/src/chat/composer/AttachmentTiles.tsx +0 -211
- package/src/chat/composer/Composer.tsx +0 -500
- package/src/chat/composer/ComposerBadges.tsx +0 -339
- package/src/chat/composer/ComposerControls.tsx +0 -243
- package/src/chat/composer/ComposerEditor.tsx +0 -101
- package/src/chat/composer/ComposerHostProvider.tsx +0 -46
- package/src/chat/composer/ComposerShell.tsx +0 -129
- package/src/chat/composer/ContextBreakdown.tsx +0 -382
- package/src/chat/composer/ContextOrb.tsx +0 -176
- package/src/chat/composer/ConversationBadges.tsx +0 -168
- package/src/chat/composer/DockCard.tsx +0 -126
- package/src/chat/composer/EffortPickerDialog.tsx +0 -184
- package/src/chat/composer/HostComposer.tsx +0 -135
- package/src/chat/composer/HostContextOrb.tsx +0 -94
- package/src/chat/composer/HostModelChainList.tsx +0 -102
- package/src/chat/composer/HostPicker.tsx +0 -97
- package/src/chat/composer/HostPickers.tsx +0 -320
- package/src/chat/composer/ImageModelList.tsx +0 -151
- package/src/chat/composer/ModelChainList.tsx +0 -442
- package/src/chat/composer/ModelChainParts.tsx +0 -247
- package/src/chat/composer/ModelChainRow.tsx +0 -191
- package/src/chat/composer/ModelChainRows.tsx +0 -223
- package/src/chat/composer/ModelChainTooltip.tsx +0 -121
- package/src/chat/composer/ModelFacts.tsx +0 -204
- package/src/chat/composer/ModelOptionsPicker.tsx +0 -257
- package/src/chat/composer/ModelPicker.tsx +0 -513
- package/src/chat/composer/ModelPickerDialog.tsx +0 -99
- package/src/chat/composer/ModelProviderPills.tsx +0 -141
- package/src/chat/composer/PickerPill.tsx +0 -41
- package/src/chat/composer/ProjectMenu.tsx +0 -187
- package/src/chat/composer/PromptHistoryProvider.tsx +0 -214
- package/src/chat/composer/RetryPill.tsx +0 -47
- package/src/chat/composer/RunStatusChip.tsx +0 -150
- package/src/chat/composer/ScopeToggle.tsx +0 -94
- package/src/chat/composer/SelectTurnHint.tsx +0 -40
- package/src/chat/composer/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -188
- package/src/chat/composer/attachment-ingest.ts +0 -413
- package/src/chat/composer/attachments.tsx +0 -176
- package/src/chat/composer/badge-order.ts +0 -65
- package/src/chat/composer/composer-bus.ts +0 -317
- package/src/chat/composer/index.ts +0 -63
- package/src/chat/composer/load-composer-editor.ts +0 -25
- package/src/chat/composer/model-catalog.ts +0 -424
- package/src/chat/composer/model-list-layout.ts +0 -118
- package/src/chat/composer/prompt-history-nav.ts +0 -60
- package/src/chat/composer/scope-side.ts +0 -7
- package/src/chat/composer/suggestion-extension.ts +0 -113
- package/src/chat/composer/suggestions.tsx +0 -115
- package/src/chat/composer/use-agent-profiles.ts +0 -97
- package/src/chat/composer/use-cache-hints.ts +0 -93
- package/src/chat/composer/use-composer-stores.ts +0 -140
- package/src/chat/composer/use-draft-target.ts +0 -317
- package/src/chat/composer/use-new-session-defaults.ts +0 -201
- package/src/chat/composer/use-provider-ready-poll.ts +0 -35
- package/src/chat/composer/use-run-meter.ts +0 -140
- package/src/chat/composer/use-send-prompt.ts +0 -188
- package/src/chat/composer/use-session-meters.ts +0 -109
- package/src/chat/composer/use-sustained-work.ts +0 -74
- package/src/chat/composer/useAttachmentIngest.ts +0 -116
- package/src/chat/composer/useModelListSpy.ts +0 -19
- package/src/chat/headless/badge-refs.ts +0 -76
- package/src/chat/headless/chip-labels.ts +0 -40
- package/src/chat/headless/chip-settle.ts +0 -53
- package/src/chat/headless/chip-views.ts +0 -215
- package/src/chat/headless/composer/attachment-dedupe.ts +0 -50
- package/src/chat/headless/composer/commands.ts +0 -16
- package/src/chat/headless/composer/composer-sources.ts +0 -150
- package/src/chat/headless/composer/conversation-badges.ts +0 -227
- package/src/chat/headless/composer/draft-sync.ts +0 -199
- package/src/chat/headless/composer/editor-markdown.ts +0 -137
- package/src/chat/headless/composer/ghost-autocomplete.ts +0 -381
- package/src/chat/headless/composer/host-chrome.ts +0 -197
- package/src/chat/headless/composer/host.ts +0 -250
- package/src/chat/headless/composer/index.ts +0 -17
- package/src/chat/headless/composer/labels-chrome.ts +0 -83
- package/src/chat/headless/composer/labels-editor.ts +0 -44
- package/src/chat/headless/composer/labels.ts +0 -18
- package/src/chat/headless/composer/live-cost.ts +0 -67
- package/src/chat/headless/composer/model-knobs.ts +0 -179
- package/src/chat/headless/composer/model-names.ts +0 -145
- package/src/chat/headless/composer/model-picker-prefs.ts +0 -90
- package/src/chat/headless/composer/models.ts +0 -86
- package/src/chat/headless/composer/new-session-defaults.ts +0 -68
- package/src/chat/headless/composer/prompt-suggestions.ts +0 -72
- package/src/chat/headless/composer/remember-model-pick.ts +0 -132
- package/src/chat/headless/composer/run-meter.ts +0 -228
- package/src/chat/headless/composer-modes.ts +0 -170
- package/src/chat/headless/draft-scope.ts +0 -136
- package/src/chat/headless/draft-target.ts +0 -87
- package/src/chat/headless/extension-sources.ts +0 -64
- package/src/chat/headless/file-chip.ts +0 -175
- package/src/chat/headless/fixture-host.ts +0 -294
- package/src/chat/headless/fixture-transcript.ts +0 -125
- package/src/chat/headless/fixtures/demo-transcript-all-kinds.ts +0 -233
- package/src/chat/headless/fixtures/demo-transcript.ts +0 -244
- package/src/chat/headless/host.ts +0 -264
- package/src/chat/headless/hosts.ts +0 -55
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -373
- package/src/chat/headless/markdown-chunks.ts +0 -134
- package/src/chat/headless/path-resolver.ts +0 -178
- package/src/chat/headless/prompt-origin.ts +0 -90
- package/src/chat/headless/reference-store.ts +0 -285
- package/src/chat/headless/send-flow.ts +0 -347
- package/src/chat/headless/session-list.ts +0 -400
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -190
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -1046
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/estimates.ts +0 -146
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -18
- package/src/chat/headless/sidebar/labels.ts +0 -161
- package/src/chat/headless/sidebar/notifications.ts +0 -61
- package/src/chat/headless/sidebar/pinned-projects.ts +0 -51
- package/src/chat/headless/sidebar/pinned-sessions.ts +0 -27
- package/src/chat/headless/sidebar/project-icons.ts +0 -116
- package/src/chat/headless/sidebar/query.ts +0 -621
- package/src/chat/headless/sidebar/rows.ts +0 -427
- package/src/chat/headless/sidebar/types.ts +0 -96
- package/src/chat/headless/sidebar/view.ts +0 -367
- package/src/chat/headless/site-icons.ts +0 -51
- package/src/chat/headless/smooth-stream.ts +0 -76
- package/src/chat/headless/store.ts +0 -62
- package/src/chat/headless/streams/actions.ts +0 -85
- package/src/chat/headless/streams/index.ts +0 -25
- package/src/chat/headless/streams/live-events.ts +0 -124
- package/src/chat/headless/streams/merge.ts +0 -60
- package/src/chat/headless/streams/pacer.ts +0 -189
- package/src/chat/headless/streams/prompt-previews.ts +0 -64
- package/src/chat/headless/streams/scheduler.ts +0 -36
- package/src/chat/headless/streams/selectors.ts +0 -76
- package/src/chat/headless/streams/session-streams.ts +0 -407
- package/src/chat/headless/streams/store.ts +0 -1107
- package/src/chat/headless/streams/transcript.ts +0 -41
- package/src/chat/headless/streams/types.ts +0 -84
- package/src/chat/headless/transcript/batch.ts +0 -429
- package/src/chat/headless/transcript/collapse.ts +0 -789
- package/src/chat/headless/transcript/fold-actions.ts +0 -269
- package/src/chat/headless/transcript/fold-attachments.ts +0 -78
- package/src/chat/headless/transcript/fold.ts +0 -382
- package/src/chat/headless/transcript/index.ts +0 -41
- package/src/chat/headless/transcript/nesting.ts +0 -73
- package/src/chat/headless/transcript/pairing.ts +0 -124
- package/src/chat/headless/transcript/rows.ts +0 -377
- package/src/chat/headless/transcript/run-failures.ts +0 -72
- package/src/chat/headless/transcript/select-stops.ts +0 -151
- package/src/chat/headless/transcript/tool-media.ts +0 -42
- package/src/chat/headless/transcript-host.ts +0 -180
- package/src/chat/headless/transcript-labels.ts +0 -12
- package/src/chat/headless/turn-labels.ts +0 -28
- package/src/chat/headless/turn-prompt.ts +0 -32
- package/src/chat/index.ts +0 -31
- package/src/chat/interactions/HostInteractions.tsx +0 -76
- package/src/chat/interactions/InboxPanel.tsx +0 -226
- package/src/chat/interactions/InteractionCard.tsx +0 -111
- package/src/chat/interactions/PlanCard.tsx +0 -186
- package/src/chat/interactions/QuestionField.tsx +0 -336
- package/src/chat/interactions/QuestionForm.tsx +0 -283
- package/src/chat/interactions/card-ui.tsx +0 -86
- package/src/chat/interactions/hooks.ts +0 -49
- package/src/chat/interactions/index.ts +0 -8
- package/src/chat/provider-color.ts +0 -71
- package/src/chat/rich-composer/MentionList.tsx +0 -238
- package/src/chat/rich-composer/RichComposer.tsx +0 -1071
- package/src/chat/rich-composer/badge-decorations.ts +0 -157
- package/src/chat/rich-composer/composer-controls.tsx +0 -102
- package/src/chat/rich-composer/composer-extensions.ts +0 -388
- package/src/chat/rich-composer/composer-keys.ts +0 -416
- package/src/chat/rich-composer/ghost-plugin.ts +0 -89
- package/src/chat/rich-composer/index.ts +0 -3
- package/src/chat/rich-composer/mention-popover.ts +0 -336
- package/src/chat/rich-composer/slash-completion.ts +0 -143
- package/src/chat/rich-composer/use-composer-bus.ts +0 -57
- package/src/chat/rich-composer/use-composer-editor.ts +0 -216
- package/src/chat/rich-composer/use-composer-sources.ts +0 -90
- package/src/chat/rich-composer/use-draft-mirror.ts +0 -398
- package/src/chat/rich-composer/use-editor-handover.ts +0 -45
- package/src/chat/rich-composer/use-extension-composer.ts +0 -80
- package/src/chat/rich-composer/use-ghost-lifecycle.ts +0 -265
- package/src/chat/rich-composer/use-prompt-ghost.ts +0 -90
- package/src/chat/rich-composer/use-staged-attachments.ts +0 -65
- package/src/chat/sidebar/MainSessionRow.tsx +0 -102
- package/src/chat/sidebar/ProjectIcon.tsx +0 -399
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -1039
- package/src/chat/sidebar/SidebarDecoration.tsx +0 -93
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -270
- package/src/chat/sidebar/SidebarFooter.tsx +0 -244
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -263
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarRowView.tsx +0 -151
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -317
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -341
- package/src/chat/sidebar/SpacesSection.tsx +0 -259
- package/src/chat/sidebar/collapsed.ts +0 -61
- package/src/chat/sidebar/index.ts +0 -109
- package/src/chat/sidebar/session-menu.ts +0 -441
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -666
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useAgentNames.ts +0 -12
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSaveViewAsSpace.ts +0 -42
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -128
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -167
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -508
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -159
- package/src/chat/testing/fixture-composer-host.ts +0 -147
- package/src/chat/testing/fixture-sidebar-host.ts +0 -99
- package/src/chat/testing/index.ts +0 -12
- package/src/chat/testing/sidebar.contract.ts +0 -196
- package/src/chat/transcript/BadgeMenu.tsx +0 -241
- package/src/chat/transcript/CardMarkdown.tsx +0 -102
- package/src/chat/transcript/ChipCard.tsx +0 -187
- package/src/chat/transcript/ChipCards.tsx +0 -100
- package/src/chat/transcript/DiffLines.tsx +0 -122
- package/src/chat/transcript/EarlierHistory.tsx +0 -136
- package/src/chat/transcript/EditDiffBlock.tsx +0 -176
- package/src/chat/transcript/FileChip.tsx +0 -361
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -211
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/MermaidDiagram.tsx +0 -484
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -168
- package/src/chat/transcript/ReferenceText.tsx +0 -198
- package/src/chat/transcript/SelectCursor.tsx +0 -118
- package/src/chat/transcript/SelectTurnHint.tsx +0 -81
- package/src/chat/transcript/SelectTurnProvider.tsx +0 -150
- package/src/chat/transcript/SubagentBlock.tsx +0 -224
- package/src/chat/transcript/TranscriptRow.tsx +0 -362
- package/src/chat/transcript/TranscriptSearch.tsx +0 -171
- package/src/chat/transcript/TurnMenu.tsx +0 -217
- package/src/chat/transcript/actions.tsx +0 -77
- package/src/chat/transcript/badges.tsx +0 -155
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- package/src/chat/transcript/extension-renderers.tsx +0 -148
- package/src/chat/transcript/fold-attachments.tsx +0 -221
- package/src/chat/transcript/fold-status.tsx +0 -112
- package/src/chat/transcript/fold-worker.tsx +0 -160
- package/src/chat/transcript/fold.tsx +0 -522
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -66
- package/src/chat/transcript/markdown-cache.ts +0 -84
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -351
- package/src/chat/transcript/messages.tsx +0 -169
- package/src/chat/transcript/notices.tsx +0 -508
- package/src/chat/transcript/prompt-lines.tsx +0 -55
- package/src/chat/transcript/prompt.tsx +0 -258
- package/src/chat/transcript/prose.tsx +0 -171
- package/src/chat/transcript/recent-map.ts +0 -32
- package/src/chat/transcript/references.ts +0 -108
- package/src/chat/transcript/remark-references.ts +0 -157
- package/src/chat/transcript/remark-refs.ts +0 -176
- package/src/chat/transcript/renderer-slots.tsx +0 -35
- package/src/chat/transcript/renderers.tsx +0 -251
- package/src/chat/transcript/row-estimate.ts +0 -158
- package/src/chat/transcript/run-rows.tsx +0 -291
- package/src/chat/transcript/site-icons.ts +0 -27
- package/src/chat/transcript/thumbnails.ts +0 -146
- package/src/chat/transcript/tool-batch.tsx +0 -102
- package/src/chat/transcript/tool-details.tsx +0 -31
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-payload.tsx +0 -76
- package/src/chat/transcript/tool-row.tsx +0 -496
- package/src/chat/transcript/turn-commands.ts +0 -101
- package/src/chat/transcript/use-transcript-rows.ts +0 -195
- package/src/chat/transcript/useComposerSearch.ts +0 -106
- package/src/chat/transcript/useSelectTurnKeys.ts +0 -204
- package/src/chat/transcript/useSettledReveal.ts +0 -57
- package/src/chat/transcript/useStickToBottom.ts +0 -600
- package/src/chat/transcript/useTranscriptFind.ts +0 -70
- package/src/chat/transcript/useTranscriptFindKey.ts +0 -52
- package/src/chat/transcript/useTranscriptScroll.ts +0 -163
- package/src/chat/transcript/useTranscriptSearch.tsx +0 -382
- package/src/chat/transcript/useTranscriptSelectionCopy.ts +0 -63
- package/src/chat/transcript/useWheelHoverPause.ts +0 -79
- package/src/chat/transcript/user-bash.tsx +0 -134
- package/src/chat/transcript-options.ts +0 -51
- package/src/chat/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -156
- package/src/code/code-themes.ts +0 -187
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -429
- package/src/code/editor/DiagnosticAnnotation.tsx +0 -73
- package/src/code/editor/DiagnosticsChip.tsx +0 -85
- package/src/code/editor/DiffView.tsx +0 -197
- package/src/code/editor/EditorColumn.tsx +0 -256
- package/src/code/editor/FileIcon.tsx +0 -89
- package/src/code/editor/FileTabPill.tsx +0 -101
- package/src/code/editor/FileTree.tsx +0 -414
- package/src/code/editor/FileView.tsx +0 -462
- package/src/code/editor/HighlightWorkers.tsx +0 -84
- package/src/code/editor/LanguageEditor.tsx +0 -210
- package/src/code/editor/_vendor/tree-icon-colors.ts +0 -72
- package/src/code/editor/diagnostics.ts +0 -140
- package/src/code/editor/edit-session.ts +0 -32
- package/src/code/editor/environment.tsx +0 -88
- package/src/code/editor/find/FindBar.tsx +0 -126
- package/src/code/editor/find/find-highlight.ts +0 -138
- package/src/code/editor/find/find-model.ts +0 -123
- package/src/code/editor/find/settle-scroll.ts +0 -77
- package/src/code/editor/find/useFind.ts +0 -203
- package/src/code/editor/fs-adapter.ts +0 -37
- package/src/code/editor/index.ts +0 -36
- package/src/code/editor/language.ts +0 -31
- package/src/code/editor/patch-parse.ts +0 -176
- package/src/code/editor/patch-parse.worker.ts +0 -12
- package/src/code/editor/pierre-theme.ts +0 -155
- package/src/code/editor/prime-diff.ts +0 -37
- package/src/code/editor/reveal.ts +0 -58
- package/src/code/editor/scroll-reach.ts +0 -28
- package/src/code/editor/useCodeDocument.ts +0 -226
- package/src/code/editor/useDefinition.ts +0 -159
- package/src/code/editor/useDetachCleanup.ts +0 -36
- package/src/code/editor/useFileDocument.ts +0 -87
- package/src/code/editor/useRevealLine.ts +0 -92
- package/src/code/editor/word-at.ts +0 -145
- package/src/code/highlight.worker.ts +0 -16
- package/src/code/highlighter.ts +0 -181
- package/src/code/highlights.ts +0 -51
- package/src/code/mermaid-lexer.ts +0 -331
- package/src/code/shiki-theme.ts +0 -46
- package/src/components/BrandMark.tsx +0 -118
- package/src/components/Breadcrumb.tsx +0 -105
- package/src/components/BrowserChrome.tsx +0 -189
- package/src/components/BrowserSignIn.tsx +0 -210
- package/src/components/ChoiceCards.tsx +0 -170
- package/src/components/CodeFrame.tsx +0 -225
- package/src/components/ConfirmDialog.tsx +0 -119
- package/src/components/CopyButton.tsx +0 -85
- package/src/components/EditableTitle.tsx +0 -199
- package/src/components/ErrorBoundary.tsx +0 -208
- package/src/components/Form.tsx +0 -593
- package/src/components/Highlighted.tsx +0 -68
- package/src/components/HowItWorks.tsx +0 -123
- package/src/components/IconButton.tsx +0 -101
- package/src/components/IconToggle.tsx +0 -71
- package/src/components/Keycap.tsx +0 -334
- package/src/components/Lightbox.tsx +0 -257
- package/src/components/LoadError.tsx +0 -45
- package/src/components/MediaNav.tsx +0 -85
- package/src/components/Menu.tsx +0 -435
- package/src/components/Overlay.tsx +0 -327
- package/src/components/PanelEmpty.tsx +0 -80
- package/src/components/PanelRows.tsx +0 -107
- package/src/components/PreviewWindow.tsx +0 -53
- package/src/components/ReorderTabs.tsx +0 -103
- package/src/components/RowActionsMenu.tsx +0 -383
- package/src/components/SegmentSpinner.tsx +0 -88
- package/src/components/Segmented.tsx +0 -126
- package/src/components/StepFrame.tsx +0 -151
- package/src/components/Stepper.tsx +0 -157
- package/src/components/Surface.tsx +0 -191
- package/src/components/SwatchPicker.tsx +0 -147
- package/src/components/SwitchGlyph.tsx +0 -56
- package/src/components/TabPill.tsx +0 -188
- package/src/components/ThemeThumb.tsx +0 -52
- package/src/components/ToggleCard.tsx +0 -120
- package/src/components/Tooltip.tsx +0 -288
- package/src/components/ZoomableImage.tsx +0 -322
- package/src/components/button.ts +0 -120
- package/src/components/floating/FloatingSurface.tsx +0 -158
- package/src/components/floating/HoverCard.tsx +0 -143
- package/src/components/floating/Popover.tsx +0 -166
- package/src/components/floating/useAnchoredPosition.ts +0 -186
- package/src/components/floating/usePopover.ts +0 -158
- package/src/components/image-clipboard.ts +0 -70
- package/src/components/keyboard-layout.ts +0 -115
- package/src/components/palette/PaletteList.tsx +0 -432
- package/src/components/palette/PalettePanel.tsx +0 -338
- package/src/components/palette/palette-layout.ts +0 -86
- package/src/components/report-error.ts +0 -142
- package/src/components/zoom.ts +0 -133
- package/src/extensions/ExtensionComponent.tsx +0 -167
- package/src/extensions/ExtensionDialogHost.tsx +0 -445
- package/src/extensions/ExtensionRenderer.tsx +0 -100
- package/src/extensions/ExtensionScreen.tsx +0 -122
- package/src/extensions/ExtensionSettingsPage.tsx +0 -112
- package/src/extensions/ExtensionSettingsPages.tsx +0 -44
- package/src/extensions/ExtensionSettingsSidebar.tsx +0 -373
- package/src/extensions/ExtensionSlot.tsx +0 -213
- package/src/extensions/ExtensionWebview.tsx +0 -104
- package/src/extensions/ExtensionsProvider.tsx +0 -124
- package/src/extensions/SettingsWireForm.tsx +0 -182
- package/src/extensions/headless/dialog-queue.ts +0 -92
- package/src/extensions/headless/effect-channel.ts +0 -50
- package/src/extensions/headless/effect-router.ts +0 -107
- package/src/extensions/headless/fixture-host.ts +0 -381
- package/src/extensions/headless/host.ts +0 -398
- package/src/extensions/headless/index.ts +0 -17
- package/src/extensions/headless/labels.ts +0 -64
- package/src/extensions/headless/links.ts +0 -56
- package/src/extensions/headless/select.ts +0 -249
- package/src/extensions/headless/webview-bridge.ts +0 -127
- package/src/extensions/headless/wire.ts +0 -175
- package/src/extensions/hooks.ts +0 -209
- package/src/extensions/index.ts +0 -25
- package/src/extensions/kit.ts +0 -79
- package/src/extensions/links.tsx +0 -165
- package/src/extensions/testing/contract.ts +0 -382
- package/src/extensions/testing/index.ts +0 -6
- package/src/extensions/useExtensionsLabels.ts +0 -14
- package/src/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -581
- package/src/files/EditorColumn.tsx +0 -453
- package/src/files/EditorEnvironmentRoot.tsx +0 -63
- package/src/files/FilesDiagnosticsChip.tsx +0 -32
- package/src/files/FilesProvider.tsx +0 -58
- package/src/files/FilesTab.tsx +0 -441
- package/src/files/MediaDiff.tsx +0 -61
- package/src/files/MediaView.tsx +0 -170
- package/src/files/ReviewDraft.tsx +0 -88
- package/src/files/ReviewableDiff.tsx +0 -72
- package/src/files/SearchPanel.tsx +0 -325
- package/src/files/TreeColumn.tsx +0 -229
- package/src/files/code-excerpt.ts +0 -265
- package/src/files/code-menu.ts +0 -53
- package/src/files/drafts-store.ts +0 -192
- package/src/files/file-actions.ts +0 -152
- package/src/files/headless/editor-prefs.ts +0 -230
- package/src/files/headless/entries.ts +0 -172
- package/src/files/headless/fixture-host.ts +0 -260
- package/src/files/headless/host.ts +0 -387
- package/src/files/headless/index.ts +0 -14
- package/src/files/headless/labels.ts +0 -123
- package/src/files/headless/lsp-edits.ts +0 -58
- package/src/files/headless/media.ts +0 -57
- package/src/files/headless/name-match.ts +0 -38
- package/src/files/headless/search.ts +0 -23
- package/src/files/headless/view.ts +0 -114
- package/src/files/headless/workspace-diff.ts +0 -82
- package/src/files/index.ts +0 -25
- package/src/files/lazy-tabs.tsx +0 -41
- package/src/files/session-patch.ts +0 -45
- package/src/files/tab-hooks.ts +0 -37
- package/src/files/testing/contract.ts +0 -279
- package/src/files/testing/demo.ts +0 -36
- package/src/files/testing/index.ts +0 -7
- package/src/files/useCodeReview.tsx +0 -177
- package/src/files/useDiagnostics.ts +0 -59
- package/src/files/useDiagnosticsRun.ts +0 -86
- package/src/files/useEntryActions.ts +0 -280
- package/src/files/useFilesDiagnostics.ts +0 -51
- package/src/files/useFilesLabels.ts +0 -14
- package/src/files/useFolderChanges.ts +0 -38
- package/src/files/useLsp.ts +0 -181
- package/src/files/useOpenFiles.ts +0 -402
- package/src/files/useWorkspace.ts +0 -148
- package/src/files/working-tree-diff.ts +0 -142
- package/src/git/BranchMenu.tsx +0 -988
- package/src/git/GitBar.tsx +0 -297
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -390
- package/src/git/MoveSessionDialog.tsx +0 -396
- package/src/git/RemoteFolderPicker.tsx +0 -475
- package/src/git/SyncChip.tsx +0 -275
- package/src/git/WherePicker.tsx +0 -358
- package/src/git/headless/environment.ts +0 -132
- package/src/git/headless/host.ts +0 -353
- package/src/git/headless/index.ts +0 -14
- package/src/git/headless/labels.ts +0 -230
- package/src/git/headless/move.ts +0 -101
- package/src/git/headless/remote-clone.ts +0 -44
- package/src/git/headless/status-reads.ts +0 -77
- package/src/git/headless/switcher.ts +0 -215
- package/src/git/headless/sync.ts +0 -71
- package/src/git/index.ts +0 -17
- package/src/git/testing/contract.ts +0 -551
- package/src/git/testing/index.ts +0 -537
- package/src/git/useEnvironmentChoices.ts +0 -50
- package/src/git/useGitBar.ts +0 -180
- package/src/hooks/keyed-store.ts +0 -65
- package/src/hooks/useDisplayPath.tsx +0 -93
- package/src/hooks/useHydrated.ts +0 -16
- package/src/hooks/useMinuteTick.ts +0 -49
- package/src/hooks/useNearViewport.ts +0 -111
- package/src/hooks/usePersistedState.ts +0 -98
- package/src/hooks/useResizeDrag.ts +0 -240
- package/src/hooks/useTabDrag.ts +0 -88
- package/src/index.ts +0 -119
- package/src/keybindings/KeyCommands.tsx +0 -123
- package/src/keybindings/KeyHint.tsx +0 -78
- package/src/keybindings/KeybindingsProvider.tsx +0 -231
- package/src/keybindings/headless/catalog.ts +0 -360
- package/src/keybindings/headless/commands.ts +0 -77
- package/src/keybindings/headless/fixture-host.ts +0 -51
- package/src/keybindings/headless/host.ts +0 -29
- package/src/keybindings/headless/index.ts +0 -13
- package/src/keybindings/headless/key-scope.ts +0 -91
- package/src/keybindings/headless/labels.ts +0 -14
- package/src/keybindings/headless/overrides.ts +0 -64
- package/src/keybindings/index.ts +0 -15
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- package/src/keybindings/press.ts +0 -80
- package/src/keybindings/testing/contract.ts +0 -139
- package/src/keybindings/testing/index.ts +0 -6
- package/src/keybindings/useHelpKey.ts +0 -35
- package/src/keybindings/useKeybindingsLabels.ts +0 -14
- package/src/labels.tsx +0 -175
- package/src/machines/AddServerForm.tsx +0 -151
- package/src/machines/Banners.tsx +0 -172
- package/src/machines/DaemonMenu.tsx +0 -413
- package/src/machines/HostCapabilities.tsx +0 -245
- package/src/machines/HostSignIn.tsx +0 -63
- package/src/machines/HostSyncPanel.tsx +0 -275
- package/src/machines/HostsSection.tsx +0 -312
- package/src/machines/MachinesProvider.tsx +0 -164
- package/src/machines/ServerCard.tsx +0 -347
- package/src/machines/ServerMachinesPanel.tsx +0 -547
- package/src/machines/ServerUpdatePanel.tsx +0 -160
- package/src/machines/SyncAccounts.tsx +0 -148
- package/src/machines/SyncMarker.tsx +0 -87
- package/src/machines/SyncOutcomeBadge.tsx +0 -84
- package/src/machines/TokensPanel.tsx +0 -249
- package/src/machines/headless/fixture-host.ts +0 -519
- package/src/machines/headless/fixtures.ts +0 -164
- package/src/machines/headless/host.ts +0 -381
- package/src/machines/headless/index.ts +0 -13
- package/src/machines/headless/labels.ts +0 -364
- package/src/machines/headless/messages.ts +0 -209
- package/src/machines/headless/presence.ts +0 -110
- package/src/machines/headless/settings-focus.ts +0 -25
- package/src/machines/headless/stores.ts +0 -137
- package/src/machines/headless/sync.ts +0 -207
- package/src/machines/index.ts +0 -29
- package/src/machines/settings-section.tsx +0 -37
- package/src/machines/testing/contract.ts +0 -617
- package/src/machines/testing/index.ts +0 -7
- package/src/machines/testing/sync.contract.ts +0 -260
- package/src/motion/SwapIcon.tsx +0 -29
- package/src/motion/collapse.ts +0 -21
- package/src/motion/grow.tsx +0 -86
- package/src/motion/layout-animating.ts +0 -50
- package/src/motion/presence.ts +0 -191
- package/src/motion/provider.tsx +0 -63
- package/src/motion/reduced.ts +0 -36
- package/src/motion/roll.tsx +0 -131
- package/src/motion/shimmer.ts +0 -15
- package/src/motion/size.tsx +0 -192
- package/src/motion/springs.ts +0 -413
- package/src/motion/swap.tsx +0 -216
- package/src/motion/title-text.tsx +0 -74
- package/src/onboarding/ConnectProviderCard.tsx +0 -49
- package/src/onboarding/OnboardingFlow.tsx +0 -176
- package/src/onboarding/OnboardingProvider.tsx +0 -209
- package/src/onboarding/OnboardingStepFrame.tsx +0 -80
- package/src/onboarding/conversation.tsx +0 -196
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -488
- package/src/onboarding/demos/how-it-works.tsx +0 -698
- package/src/onboarding/demos/index.ts +0 -11
- package/src/onboarding/demos/parts.tsx +0 -133
- package/src/onboarding/demos/tour.tsx +0 -217
- package/src/onboarding/headless/controller.ts +0 -110
- package/src/onboarding/headless/fixture-host.ts +0 -269
- package/src/onboarding/headless/fixtures.ts +0 -486
- package/src/onboarding/headless/host.ts +0 -176
- package/src/onboarding/headless/index.ts +0 -8
- package/src/onboarding/headless/labels.ts +0 -282
- package/src/onboarding/index.ts +0 -21
- package/src/onboarding/marks.tsx +0 -107
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -128
- package/src/onboarding/skills/parts.tsx +0 -464
- package/src/onboarding/sources/SourceBrowser.tsx +0 -400
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -222
- package/src/onboarding/steps/ConversationStep.tsx +0 -132
- package/src/onboarding/steps/ExtensionsStep.tsx +0 -113
- package/src/onboarding/steps/FeatureExample.tsx +0 -46
- package/src/onboarding/steps/FeaturesStep.tsx +0 -88
- package/src/onboarding/steps/ImportStep.tsx +0 -156
- package/src/onboarding/steps/LookStep.tsx +0 -276
- package/src/onboarding/steps/ReadyStep.tsx +0 -278
- package/src/onboarding/steps/SkillsStep.tsx +0 -45
- package/src/onboarding/steps/StepSection.tsx +0 -63
- package/src/onboarding/steps/Tradeoff.tsx +0 -45
- package/src/onboarding/steps/WelcomeStep.tsx +0 -147
- package/src/onboarding/steps/connect/KeyForm.tsx +0 -112
- package/src/onboarding/steps/connect/ProviderPanel.tsx +0 -149
- package/src/onboarding/steps/connect/ProviderReady.tsx +0 -171
- package/src/onboarding/steps/connect/ready-text.ts +0 -17
- package/src/onboarding/steps/index.ts +0 -12
- package/src/onboarding/steps/tasks.tsx +0 -84
- package/src/onboarding/testing/contract.ts +0 -472
- package/src/onboarding/testing/index.ts +0 -7
- package/src/onboarding/tutorials.tsx +0 -45
- package/src/onboarding/useSignIn.ts +0 -58
- package/src/palette/CommandPalette.tsx +0 -59
- package/src/palette/PaletteDialog.tsx +0 -186
- package/src/palette/PaletteProvider.tsx +0 -149
- package/src/palette/PaletteRows.tsx +0 -208
- package/src/palette/app-sources.ts +0 -62
- package/src/palette/headless/app-sources.ts +0 -515
- package/src/palette/headless/gather.ts +0 -50
- package/src/palette/headless/host.ts +0 -129
- package/src/palette/headless/index.ts +0 -15
- package/src/palette/headless/labels.ts +0 -124
- package/src/palette/headless/rank-protocol.ts +0 -23
- package/src/palette/headless/recents.ts +0 -35
- package/src/palette/headless/session-sources.ts +0 -218
- package/src/palette/headless/sources.ts +0 -313
- package/src/palette/headless/store.ts +0 -105
- package/src/palette/index.ts +0 -17
- package/src/palette/rank.worker.ts +0 -30
- package/src/palette/setup.ts +0 -19
- package/src/palette/testing/contract.ts +0 -250
- package/src/palette/testing/index.ts +0 -152
- package/src/palette/useConversationSearch.ts +0 -115
- package/src/palette/usePaletteController.ts +0 -229
- package/src/palette/useRankedItems.ts +0 -122
- package/src/path.ts +0 -199
- package/src/server/demo-tools.ts +0 -34
- package/src/server/environment.ts +0 -118
- package/src/server/index.ts +0 -7
- package/src/server/scripted-provider.ts +0 -174
- package/src/server/sse-handler.ts +0 -457
- package/src/server/testing/index.ts +0 -7
- package/src/session/ArtifactRowChips.tsx +0 -260
- package/src/session/ArtifactsPanel.tsx +0 -426
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProjectHome.tsx +0 -733
- package/src/session/ProviderUsageProvider.tsx +0 -113
- package/src/session/QueueTab.tsx +0 -669
- package/src/session/RunningWorkDialog.tsx +0 -178
- package/src/session/SessionCacheFacts.tsx +0 -190
- package/src/session/SessionDetailsDialog.tsx +0 -627
- package/src/session/SessionHeader.tsx +0 -242
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -320
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -279
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -358
- package/src/session/WelcomeScreen.tsx +0 -88
- package/src/session/headless/artifacts.ts +0 -101
- package/src/session/headless/diff-tree.ts +0 -167
- package/src/session/headless/fixture-host.ts +0 -362
- package/src/session/headless/home-layout.ts +0 -276
- package/src/session/headless/host.ts +0 -263
- package/src/session/headless/index.ts +0 -23
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -337
- package/src/session/headless/queue-attachments.ts +0 -73
- package/src/session/headless/queue.ts +0 -122
- package/src/session/headless/running-work.ts +0 -85
- package/src/session/headless/session-actions.ts +0 -198
- package/src/session/headless/session-diffs.ts +0 -136
- package/src/session/headless/side.ts +0 -63
- package/src/session/headless/todos.ts +0 -62
- package/src/session/headless/usage-format.ts +0 -19
- package/src/session/headless/usage.ts +0 -407
- package/src/session/index.ts +0 -31
- package/src/session/modal-shell.tsx +0 -24
- package/src/session/testing/contract.ts +0 -588
- package/src/session/testing/demo.ts +0 -224
- package/src/session/testing/index.ts +0 -7
- package/src/session/useSessionLabels.ts +0 -14
- package/src/session/useUsageSummary.ts +0 -82
- package/src/settings/SettingsHeadingText.tsx +0 -54
- package/src/settings/SettingsHostSwitcher.tsx +0 -93
- package/src/settings/SettingsNav.tsx +0 -198
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -218
- package/src/settings/SettingsShell.tsx +0 -337
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -570
- package/src/settings/headless/claude-import.ts +0 -61
- package/src/settings/headless/enabled.ts +0 -44
- package/src/settings/headless/fixture-accounts.ts +0 -260
- package/src/settings/headless/fixture-host.ts +0 -162
- package/src/settings/headless/fixture-models.ts +0 -51
- package/src/settings/headless/fixture-performance.ts +0 -350
- package/src/settings/headless/fixture-sections.ts +0 -391
- package/src/settings/headless/host.ts +0 -127
- package/src/settings/headless/index.ts +0 -22
- package/src/settings/headless/labels.ts +0 -63
- package/src/settings/headless/layout-sections.ts +0 -41
- package/src/settings/headless/layout.ts +0 -732
- package/src/settings/headless/mcp.ts +0 -319
- package/src/settings/headless/models.ts +0 -51
- package/src/settings/headless/page-counts.ts +0 -40
- package/src/settings/headless/performance.ts +0 -524
- package/src/settings/headless/providers.ts +0 -117
- package/src/settings/headless/registry.ts +0 -62
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -340
- package/src/settings/index.ts +0 -32
- package/src/settings/rows.tsx +0 -152
- package/src/settings/section.tsx +0 -165
- package/src/settings/sections/appearance/AppearanceSection.tsx +0 -667
- package/src/settings/sections/appearance/labels.ts +0 -77
- package/src/settings/sections/claude-import/ClaudeImportDialog.tsx +0 -258
- package/src/settings/sections/claude-import/labels.ts +0 -42
- package/src/settings/sections/claude-import/use-claude-import-available.ts +0 -35
- package/src/settings/sections/descriptors.tsx +0 -261
- package/src/settings/sections/editor/EditorSection.tsx +0 -521
- package/src/settings/sections/editor/labels.ts +0 -84
- package/src/settings/sections/enabled-list/EnabledListSection.tsx +0 -112
- package/src/settings/sections/enabled-list/labels.ts +0 -37
- package/src/settings/sections/environments/EnvironmentsSection.tsx +0 -549
- package/src/settings/sections/environments/labels.ts +0 -31
- package/src/settings/sections/extensions/ChangeOriginDialog.tsx +0 -218
- package/src/settings/sections/extensions/CreateExtensionDialog.tsx +0 -210
- package/src/settings/sections/extensions/ExtensionConfigRows.tsx +0 -508
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -356
- package/src/settings/sections/extensions/ExtensionPicksBar.tsx +0 -112
- package/src/settings/sections/extensions/ExtensionSourceBrowser.tsx +0 -244
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -665
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -64
- package/src/settings/sections/extensions/options-labels.ts +0 -34
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -457
- package/src/settings/sections/host-catalog/labels.ts +0 -44
- package/src/settings/sections/index.ts +0 -60
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -385
- package/src/settings/sections/instructions/labels.ts +0 -33
- package/src/settings/sections/keybindings/KeybindingsSection.tsx +0 -124
- package/src/settings/sections/keybindings/labels.ts +0 -72
- package/src/settings/sections/keybindings/rows.ts +0 -103
- package/src/settings/sections/logs/LogsSection.tsx +0 -153
- package/src/settings/sections/logs/labels.ts +0 -20
- package/src/settings/sections/mcp/McpAddForm.tsx +0 -245
- package/src/settings/sections/mcp/McpSection.tsx +0 -358
- package/src/settings/sections/mcp/McpServerRow.tsx +0 -404
- package/src/settings/sections/mcp/labels.ts +0 -193
- package/src/settings/sections/models/AgentDefaults.tsx +0 -365
- package/src/settings/sections/models/ModelListPicker.tsx +0 -265
- package/src/settings/sections/models/ModelPickField.tsx +0 -220
- package/src/settings/sections/models/ModelRows.tsx +0 -381
- package/src/settings/sections/models/SpacesDefaultsSection.tsx +0 -102
- package/src/settings/sections/models/labels.ts +0 -119
- package/src/settings/sections/models/model-test.tsx +0 -125
- package/src/settings/sections/performance/PerfSparkline.tsx +0 -64
- package/src/settings/sections/performance/PerformanceHud.tsx +0 -110
- package/src/settings/sections/performance/PerformanceSection.tsx +0 -770
- package/src/settings/sections/performance/labels.ts +0 -114
- package/src/settings/sections/performance/use-perf-monitor.ts +0 -26
- package/src/settings/sections/plugins/PluginsSection.tsx +0 -151
- package/src/settings/sections/plugins/labels.ts +0 -23
- package/src/settings/sections/providers/CredentialSources.tsx +0 -237
- package/src/settings/sections/providers/ProvidersSection.tsx +0 -389
- package/src/settings/sections/providers/ServerProvidersSection.tsx +0 -244
- package/src/settings/sections/providers/ServerSignIn.tsx +0 -137
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -265
- package/src/settings/sections/shared/labels.ts +0 -31
- package/src/settings/sections/skills/SkillList.tsx +0 -494
- package/src/settings/sections/skills/SkillsSection.tsx +0 -249
- package/src/settings/sections/skills/labels.ts +0 -54
- package/src/settings/sections/use-section-labels.ts +0 -10
- package/src/settings/testing/accounts-demo.ts +0 -110
- package/src/settings/testing/accounts.contract.ts +0 -319
- package/src/settings/testing/claude-import.contract.ts +0 -93
- package/src/settings/testing/contract.ts +0 -192
- package/src/settings/testing/extension-options.contract.ts +0 -163
- package/src/settings/testing/index.ts +0 -11
- package/src/settings/testing/models.contract.ts +0 -135
- package/src/settings/testing/performance.contract.ts +0 -219
- package/src/settings/testing/sections.contract.ts +0 -306
- package/src/terminal/HostTerminalSurface.tsx +0 -917
- package/src/terminal/TerminalDrawer.tsx +0 -228
- package/src/terminal/TerminalPanel.tsx +0 -740
- package/src/terminal/TerminalProvider.tsx +0 -201
- package/src/terminal/TerminalSurface.tsx +0 -262
- package/src/terminal/box-glyphs.ts +0 -333
- package/src/terminal/ghostty.ts +0 -116
- package/src/terminal/grid-size.ts +0 -46
- package/src/terminal/headless/fixture-host.ts +0 -250
- package/src/terminal/headless/host.ts +0 -99
- package/src/terminal/headless/index.ts +0 -11
- package/src/terminal/headless/labels.ts +0 -69
- package/src/terminal/headless/layout.ts +0 -57
- package/src/terminal/headless/links.ts +0 -227
- package/src/terminal/headless/order.ts +0 -28
- package/src/terminal/headless/output-cursor.ts +0 -66
- package/src/terminal/headless/recent.ts +0 -20
- package/src/terminal/headless/replay.ts +0 -45
- package/src/terminal/headless/scope.ts +0 -60
- package/src/terminal/headless/store.ts +0 -637
- package/src/terminal/index.ts +0 -40
- package/src/terminal/keys.ts +0 -34
- package/src/terminal/testing/contract.ts +0 -274
- package/src/terminal/testing/demo.ts +0 -40
- package/src/terminal/testing/index.ts +0 -7
- package/src/terminal/theme.ts +0 -110
- package/src/terminal/useTerminalLabels.ts +0 -14
- package/src/theme/accents.ts +0 -46
- package/src/theme/color.ts +0 -450
- package/src/theme/css-vars.ts +0 -187
- package/src/theme/derive.ts +0 -700
- package/src/theme/from-theme.ts +0 -52
- package/src/theme/stylesheet.ts +0 -55
- package/src/theme/themes.ts +0 -767
- package/src/theme/without-transitions.ts +0 -18
- package/src/uno.ts +0 -167
- package/src/workspace/LayoutBudget.tsx +0 -143
- package/src/workspace/PanelContentView.tsx +0 -523
- package/src/workspace/PanelCorner.tsx +0 -111
- package/src/workspace/PanelGroups.tsx +0 -264
- package/src/workspace/PanelHome.tsx +0 -71
- package/src/workspace/PanelItems.tsx +0 -368
- package/src/workspace/PanelStrip.tsx +0 -316
- package/src/workspace/SidePanel.tsx +0 -240
- package/src/workspace/TabParking.tsx +0 -120
- package/src/workspace/WorkspaceProvider.tsx +0 -558
- package/src/workspace/dnd/engine.ts +0 -371
- package/src/workspace/dnd/hooks.ts +0 -72
- package/src/workspace/dnd/index.ts +0 -57
- package/src/workspace/dnd/parking.tsx +0 -181
- package/src/workspace/extension-tabs.tsx +0 -174
- package/src/workspace/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -129
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -44
- package/src/workspace/headless/layout-memory.ts +0 -649
- package/src/workspace/headless/layouts.ts +0 -224
- package/src/workspace/headless/open-target.ts +0 -125
- package/src/workspace/headless/ops.ts +0 -163
- package/src/workspace/headless/panel-focus.ts +0 -58
- package/src/workspace/headless/panel-tree.ts +0 -259
- package/src/workspace/headless/resolve.ts +0 -146
- package/src/workspace/headless/reveal-at.ts +0 -27
- package/src/workspace/headless/strip-drop.ts +0 -81
- package/src/workspace/headless/tree.ts +0 -480
- package/src/workspace/headless/view.ts +0 -164
- package/src/workspace/index.ts +0 -23
- package/src/workspace/panel-group-keys.ts +0 -36
- package/src/workspace/panel-visibility.ts +0 -28
- package/src/workspace/tab-scopes.ts +0 -245
- package/src/workspace/testing/contract.ts +0 -282
- package/src/workspace/testing/index.ts +0 -140
- package/src/workspace/use-split-drag.ts +0 -73
- package/src/workspace/useScopeLayout.ts +0 -26
- package/src/workspace/useViewport.ts +0 -22
- package/src/workspace/useWorkspaceLabels.ts +0 -14
- package/src/workspace/workspace-key-commands.ts +0 -108
- /package/dist/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +0 -0
|
@@ -1,789 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stream events to rows: pairs tool calls with their results, merges
|
|
3
|
-
* streamed text, reconciles edits and spawns. Rows are cached per source
|
|
4
|
-
* event so an appended event keeps every earlier row identical (memoised
|
|
5
|
-
* rendering depends on it).
|
|
6
|
-
*/
|
|
7
|
-
import type { EditOutcome, StreamEvent } from 'zidane/chat';
|
|
8
|
-
import { displayNameFor, formatToolCall, isUserBashEvent } from 'zidane/chat/pure';
|
|
9
|
-
import type { ChatEvent } from '../host';
|
|
10
|
-
import { promptOriginOf } from '../prompt-origin';
|
|
11
|
-
import { pairToolEvents } from './pairing';
|
|
12
|
-
import { type Owned, type Row, parseBashExitMeta } from './rows';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* When the paired result is an `error`, flip every `applied` outcome
|
|
16
|
-
* to `failed` so the renderer doesn't paint approval-intent as if the
|
|
17
|
-
* tool body succeeded. `denied` stays denied — that was the user's
|
|
18
|
-
* choice, not the tool's failure.
|
|
19
|
-
*/
|
|
20
|
-
function reconcileEditOnError(edit: NonNullable<StreamEvent['edit']>): NonNullable<StreamEvent['edit']> {
|
|
21
|
-
if (!edit.outcomes || edit.outcomes.length === 0) {
|
|
22
|
-
return edit;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let mutated = false;
|
|
26
|
-
|
|
27
|
-
const next: EditOutcome[] = edit.outcomes.map((o) => {
|
|
28
|
-
if (o.kind === 'applied') {
|
|
29
|
-
mutated = true;
|
|
30
|
-
return { kind: 'failed', reason: o.reason ?? 'Tool body did not apply this hunk' };
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return o;
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
if (!mutated) {
|
|
37
|
-
return edit;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return { ...edit, outcomes: next };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Per-event row cache. `collapseEvents` runs on EVERY stream drain tick
|
|
45
|
-
* over the FULL events array. Without caching, each tick would build O(n)
|
|
46
|
-
* fresh row objects (and a `formatToolCall` for every historical tool
|
|
47
|
-
* event), O(n²) aggregate over a stream, with all-new identities that
|
|
48
|
-
* defeat every memo'd row component downstream.
|
|
49
|
-
*
|
|
50
|
-
* Keyed by the event OBJECT: the live store is append-only
|
|
51
|
-
* with immutable event objects (a streaming markdown delta replaces the
|
|
52
|
-
* tail event with a new object), so a finalized event's ref is stable
|
|
53
|
-
* for the life of the session. The `key` string covers every OTHER
|
|
54
|
-
* input that shapes the row — index (ids embed it; a lazy-scrollback
|
|
55
|
-
* prepend shifts indices and correctly invalidates), pairing state,
|
|
56
|
-
* display flags — so a cache hit is exactly "this row would be
|
|
57
|
-
* byte-identical". WeakMap: dropped sessions release their rows.
|
|
58
|
-
*/
|
|
59
|
-
const rowCache = new WeakMap<object, { key: string; row: Row }>();
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Stable per-event identity for row ids and cache keys. Rows do not
|
|
63
|
-
* embed the ABSOLUTE event index: a lazy-scrollback prepend shifts
|
|
64
|
-
* every index, which would change every React key at once (the whole list
|
|
65
|
-
* remounts, expanded tool rows and fetched full results collapse).
|
|
66
|
-
* A WeakMap-assigned monotonic id survives prepends (event objects are
|
|
67
|
-
* immutable and reused), so existing rows keep their keys and only the
|
|
68
|
-
* genuinely new page mounts.
|
|
69
|
-
*/
|
|
70
|
-
const eventRowIds = new WeakMap<object, number>();
|
|
71
|
-
let nextEventRowId = 1;
|
|
72
|
-
|
|
73
|
-
function rowIdFor(event: object): number {
|
|
74
|
-
let id = eventRowIds.get(event);
|
|
75
|
-
|
|
76
|
-
if (id === undefined) {
|
|
77
|
-
id = nextEventRowId++;
|
|
78
|
-
eventRowIds.set(event, id);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return id;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Hands the row identity of the prompts `next` dropped to their copies in
|
|
86
|
-
* it. A store swaps a prompt on show for an updated copy when it learns its
|
|
87
|
-
* turn (the host's binding, or the persisted copy a page read brings): the
|
|
88
|
-
* copy's rows keep their keys, so they update in place instead of
|
|
89
|
-
* remounting and playing their entrance again. A copy is the same prompt by
|
|
90
|
-
* its words, as `reconcileEvents` matches prompts; the newest pair first, so
|
|
91
|
-
* an older prompt with the same words keeps its own rows.
|
|
92
|
-
*
|
|
93
|
-
* @param prev - The events on show before the update.
|
|
94
|
-
* @param next - The events after it.
|
|
95
|
-
*/
|
|
96
|
-
export function inheritRowIdentity(prev: readonly ChatEvent[], next: readonly ChatEvent[]): void {
|
|
97
|
-
const kept = new Set(next);
|
|
98
|
-
const dropped = prev.filter((e) => e.kind === 'user-prompt' && !kept.has(e) && eventRowIds.has(e));
|
|
99
|
-
for (let i = next.length - 1; i >= 0 && dropped.length > 0; i--) {
|
|
100
|
-
const copy = next[i]!;
|
|
101
|
-
if (copy.kind !== 'user-prompt' || eventRowIds.has(copy)) continue;
|
|
102
|
-
let at = dropped.length - 1;
|
|
103
|
-
while (at >= 0 && !(dropped[at]!.text === copy.text && Boolean(dropped[at]!.synthetic) === Boolean(copy.synthetic)))
|
|
104
|
-
at--;
|
|
105
|
-
if (at === -1) continue;
|
|
106
|
-
eventRowIds.set(copy, eventRowIds.get(dropped[at]!)!);
|
|
107
|
-
dropped.splice(at, 1);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Turn-boundary separators synthesized in front of a user prompt, keyed by
|
|
113
|
-
* the PROMPT event (it already owns the `rowCache` slot), so the row keeps
|
|
114
|
-
* its identity across stream ticks.
|
|
115
|
-
*/
|
|
116
|
-
const autoSeparators = new WeakMap<object, Row>();
|
|
117
|
-
|
|
118
|
-
function autoSeparatorFor(event: object, sid: number): Row {
|
|
119
|
-
let row = autoSeparators.get(event);
|
|
120
|
-
|
|
121
|
-
if (!row) {
|
|
122
|
-
row = { kind: 'separator', id: `s-u-${sid}` };
|
|
123
|
-
autoSeparators.set(event, row);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return row;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function cachedRow(event: object, key: string, build: () => Row): Row {
|
|
130
|
-
const hit = rowCache.get(event);
|
|
131
|
-
|
|
132
|
-
if (hit && hit.key === key) {
|
|
133
|
-
return hit.row;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const row = build();
|
|
137
|
-
rowCache.set(event, { key, row });
|
|
138
|
-
return row;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function own(e: ChatEvent): Owned {
|
|
142
|
-
const tag: Owned = {};
|
|
143
|
-
|
|
144
|
-
if (e.childId) {
|
|
145
|
-
tag.childId = e.childId;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (e.depth != null) {
|
|
149
|
-
tag.depth = e.depth;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (e.turnId) {
|
|
153
|
-
tag.turnId = e.turnId;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return tag;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function markdownRow(event: ChatEvent, mid: string): Row {
|
|
160
|
-
return cachedRow(event, `${mid}-${event.streaming ?? false}`, () => ({
|
|
161
|
-
...own(event),
|
|
162
|
-
kind: 'markdown',
|
|
163
|
-
id: mid,
|
|
164
|
-
text: event.text,
|
|
165
|
-
streaming: event.streaming ?? false,
|
|
166
|
-
}));
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* The one row of the thinking run `events[start..end)`, whose first event has text.
|
|
171
|
-
*
|
|
172
|
-
* @param kid - The run's row id, its per-(turn, owner) ordinal.
|
|
173
|
-
*/
|
|
174
|
-
function thinkingRow(events: readonly ChatEvent[], start: number, end: number, kid: string): Row {
|
|
175
|
-
const event = events[start];
|
|
176
|
-
const parts = [event.text];
|
|
177
|
-
|
|
178
|
-
for (let k = start + 1; k < end; k++) {
|
|
179
|
-
if (events[k].text.trim()) {
|
|
180
|
-
parts.push(events[k].text);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const text = parts.join('\n');
|
|
185
|
-
|
|
186
|
-
/*
|
|
187
|
-
* Segment timing (live streams only): the live reducer
|
|
188
|
-
* (`applyLiveEvent`) stamps `thinkingStartedAt` on the segment's first event when it
|
|
189
|
-
* opens and REPLACES that event with one carrying `thinkingMs`
|
|
190
|
-
* when it closes — the new object identity misses the row cache
|
|
191
|
-
* and rebuilds exactly this one row. Replayed events carry
|
|
192
|
-
* neither field: `live` false, no duration.
|
|
193
|
-
*/
|
|
194
|
-
const thinkingMs = event.thinkingMs;
|
|
195
|
-
const live = event.thinkingStartedAt != null && thinkingMs == null;
|
|
196
|
-
|
|
197
|
-
return cachedRow(event, `${kid}-${end - start}-${text.length}-${thinkingMs ?? (live ? 'live' : '')}`, () => ({
|
|
198
|
-
...own(event),
|
|
199
|
-
kind: 'thinking',
|
|
200
|
-
id: kid,
|
|
201
|
-
text,
|
|
202
|
-
...(thinkingMs != null ? { thinkingMs } : {}),
|
|
203
|
-
...(live ? { live } : {}),
|
|
204
|
-
}));
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/** A collapse pass, kept so the next tick can redo only what it replaced. */
|
|
208
|
-
interface LastPass {
|
|
209
|
-
events: readonly ChatEvent[];
|
|
210
|
-
rows: readonly Row[];
|
|
211
|
-
showEditDiffs: boolean;
|
|
212
|
-
isStreaming: boolean;
|
|
213
|
-
/** Row index each markdown or thinking event feeds, -1 for every other event. */
|
|
214
|
-
rowOf: Int32Array;
|
|
215
|
-
/** Index of the event that heads the row each markdown or thinking event feeds. */
|
|
216
|
-
headOf: Int32Array;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/*
|
|
220
|
-
* Keyed by the FIRST event: every tick hands a new events array, but the
|
|
221
|
-
* store keeps each event object it does not replace, so the head event
|
|
222
|
-
* names the transcript across ticks. A prepend or a swapped head misses
|
|
223
|
-
* and takes the full pass.
|
|
224
|
-
*/
|
|
225
|
-
const lastPasses = new WeakMap<object, LastPass>();
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* The per-tick fast path: when `events` differs from the last pass only by
|
|
229
|
-
* markdown or thinking events replaced in place with ones of the same kind
|
|
230
|
-
* and owner (a streaming delta), the last rows are copied and only the rows
|
|
231
|
-
* those events feed are rebuilt. Such a swap leaves everything else the full
|
|
232
|
-
* pass reads as it was: pairing and the spawn queue read other kinds, the
|
|
233
|
-
* ordinals and prompt scopes count kinds and owners, and a thinking run
|
|
234
|
-
* keeps its extent as long as its first event keeps having text.
|
|
235
|
-
*
|
|
236
|
-
* @returns The rows, or `null` when the full pass is needed.
|
|
237
|
-
*/
|
|
238
|
-
function collapseTail(events: readonly ChatEvent[], showEditDiffs: boolean, isStreaming: boolean): Row[] | null {
|
|
239
|
-
const last = events.length > 0 ? lastPasses.get(events[0]) : undefined;
|
|
240
|
-
|
|
241
|
-
if (
|
|
242
|
-
!last ||
|
|
243
|
-
last.events.length !== events.length ||
|
|
244
|
-
last.showEditDiffs !== showEditDiffs ||
|
|
245
|
-
last.isStreaming !== isStreaming
|
|
246
|
-
) {
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
const prev = last.events;
|
|
251
|
-
const { rowOf, headOf } = last;
|
|
252
|
-
const changed: number[] = [];
|
|
253
|
-
|
|
254
|
-
for (let i = 0; i < events.length; i++) {
|
|
255
|
-
const before = prev[i];
|
|
256
|
-
const after = events[i];
|
|
257
|
-
|
|
258
|
-
if (before === after) {
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
if (
|
|
263
|
-
(after.kind !== 'markdown' && after.kind !== 'thinking') ||
|
|
264
|
-
after.kind !== before.kind ||
|
|
265
|
-
after.turnId !== before.turnId ||
|
|
266
|
-
after.childId !== before.childId ||
|
|
267
|
-
after.depth !== before.depth
|
|
268
|
-
) {
|
|
269
|
-
return null;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// A thinking event the full pass visits opens a row iff it has text: that must not flip.
|
|
273
|
-
if (after.kind === 'thinking' && (rowOf[i] === -1 || headOf[i] === i)) {
|
|
274
|
-
const opensRow = rowOf[i] !== -1;
|
|
275
|
-
|
|
276
|
-
if (Boolean(after.text.trim()) !== opensRow) {
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
changed.push(i);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
const rows = last.rows.slice();
|
|
285
|
-
|
|
286
|
-
for (const i of changed) {
|
|
287
|
-
const r = rowOf[i];
|
|
288
|
-
|
|
289
|
-
// The full pass hands an id to every event it visits; the rest of a thinking run it skips.
|
|
290
|
-
if (r === -1 || headOf[i] === i) {
|
|
291
|
-
rowIdFor(events[i]);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
if (r === -1) {
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
if (events[i].kind === 'markdown') {
|
|
299
|
-
rows[r] = markdownRow(events[i], rows[r].id);
|
|
300
|
-
continue;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
const start = headOf[i];
|
|
304
|
-
let end = start + 1;
|
|
305
|
-
|
|
306
|
-
while (end < events.length && rowOf[end] === r) {
|
|
307
|
-
end++;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// Several events of one run may change in a tick: the row is rebuilt from all of them each time, the cache absorbing repeats.
|
|
311
|
-
rows[r] = thinkingRow(events, start, end, rows[r].id);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
lastPasses.set(events[0], { ...last, events, rows });
|
|
315
|
-
return rows;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* `spawn` calls past the cap: `waiting` while no worker has started for them
|
|
320
|
-
* (announced by `spawn-queued`), and when the worker of one that waited
|
|
321
|
-
* started (its marker's `spawn.startedAt`, the host's clock), which is when
|
|
322
|
-
* its time starts counting.
|
|
323
|
-
*/
|
|
324
|
-
function spawnQueue(events: readonly ChatEvent[]): {
|
|
325
|
-
waiting: Map<string, { active: number; max: number }>;
|
|
326
|
-
startedAt: Map<string, number>;
|
|
327
|
-
} {
|
|
328
|
-
const waiting = new Map<string, { active: number; max: number }>();
|
|
329
|
-
const startedAt = new Map<string, number>();
|
|
330
|
-
const queued = new Set<string>();
|
|
331
|
-
for (const event of events) {
|
|
332
|
-
if (event.kind === 'spawn-queued' && event.callId && event.waitingFor) {
|
|
333
|
-
waiting.set(event.callId, event.waitingFor);
|
|
334
|
-
queued.add(event.callId);
|
|
335
|
-
} else if (event.kind === 'spawn-start' && event.spawn?.callId) {
|
|
336
|
-
waiting.delete(event.spawn.callId);
|
|
337
|
-
if (queued.has(event.spawn.callId)) startedAt.set(event.spawn.callId, event.spawn.startedAt);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
return { waiting, startedAt };
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* A finished call's duration: the host's measure, less a spawn's wait for its
|
|
345
|
-
* slot when both starts are known; else the gap between this window's arrival
|
|
346
|
-
* stamps (an older host).
|
|
347
|
-
*/
|
|
348
|
-
function doneDurationMs(
|
|
349
|
-
result: ChatEvent,
|
|
350
|
-
since: number | undefined,
|
|
351
|
-
workerStart: number | undefined,
|
|
352
|
-
callStart: number | undefined,
|
|
353
|
-
): number | undefined {
|
|
354
|
-
if (result.durationMs !== undefined) {
|
|
355
|
-
return workerStart !== undefined && callStart !== undefined
|
|
356
|
-
? Math.max(0, result.durationMs - (workerStart - callStart))
|
|
357
|
-
: result.durationMs;
|
|
358
|
-
}
|
|
359
|
-
return since !== undefined && result.receivedAt !== undefined ? Math.max(0, result.receivedAt - since) : undefined;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* A tool call that failed: its result says so, or it is a spawn the cap
|
|
364
|
-
* refused in plain text (older recordings do not mark that as failed).
|
|
365
|
-
*
|
|
366
|
-
* @param tool - The tool row: its `name`, `ok`, and `result`.
|
|
367
|
-
*/
|
|
368
|
-
export function toolFailed(tool: Pick<Extract<Row, { kind: 'tool' }>, 'name' | 'ok' | 'result'>): boolean {
|
|
369
|
-
return tool.ok === false || refusedSpawn(tool);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* A spawn the cap refused, as older recordings carry it: plain result text, not a failed call.
|
|
374
|
-
*
|
|
375
|
-
* @param tool - The tool row: its `name` and `result`.
|
|
376
|
-
*/
|
|
377
|
-
export function refusedSpawn(tool: Pick<Extract<Row, { kind: 'tool' }>, 'name' | 'result'>): boolean {
|
|
378
|
-
return tool.name === 'spawn' && typeof tool.result === 'string' && /^(?:Tool error: )?Cannot spawn/.test(tool.result);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
/**
|
|
382
|
-
* Turns transcript events into rows: pairs tool calls with their results, merges streamed text, reconciles edits and spawns. Rows are cached per source event, so appending an event keeps every earlier row identical.
|
|
383
|
-
*
|
|
384
|
-
* @param events - The transcript events, oldest first.
|
|
385
|
-
* @param showEditDiffs - Keeps the edit diff on edit tool rows. When false, the rows carry none.
|
|
386
|
-
* @param isStreaming - A run is in flight, so the last reply may still be streaming.
|
|
387
|
-
*/
|
|
388
|
-
export function collapseEvents(events: readonly ChatEvent[], showEditDiffs: boolean, isStreaming: boolean): Row[] {
|
|
389
|
-
return collapseTail(events, showEditDiffs, isStreaming) ?? collapseAll(events, showEditDiffs, isStreaming);
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* The full pass of {@link collapseEvents}, over every event. Exported for tests that hold the fast path to it.
|
|
394
|
-
*
|
|
395
|
-
* @param events - The transcript events, oldest first.
|
|
396
|
-
* @param showEditDiffs - Keeps the edit diff on edit tool rows.
|
|
397
|
-
* @param isStreaming - A run is in flight.
|
|
398
|
-
*/
|
|
399
|
-
export function collapseAll(events: readonly ChatEvent[], showEditDiffs: boolean, isStreaming: boolean): Row[] {
|
|
400
|
-
const rows: Row[] = [];
|
|
401
|
-
const rowOf = new Int32Array(events.length).fill(-1);
|
|
402
|
-
const headOf = new Int32Array(events.length);
|
|
403
|
-
const { pairings, consumedResultIndices } = pairToolEvents(events);
|
|
404
|
-
const { waiting, startedAt: workerStartedAt } = spawnQueue(events);
|
|
405
|
-
|
|
406
|
-
/*
|
|
407
|
-
* Markdown rows can't ride the WeakMap id: the store's delta coalescer
|
|
408
|
-
* REPLACES the streaming tail event object on every tick, so an
|
|
409
|
-
* object-keyed id would remount that row per delta. A per-(turn, owner)
|
|
410
|
-
* ordinal is stable across ticks, passes, AND prepends (older pages
|
|
411
|
-
* add other turns; ordinals are turn-scoped). Events without a turn id
|
|
412
|
-
* (a host that streams plain events) scope by the prompt they follow:
|
|
413
|
-
* the prompt event is never replaced, so its id holds.
|
|
414
|
-
*/
|
|
415
|
-
const mdOrdinals = new Map<string, number>();
|
|
416
|
-
const thinkOrdinals = new Map<string, number>();
|
|
417
|
-
let promptScope = '@start';
|
|
418
|
-
const ordinalId = (ordinals: Map<string, number>, prefix: string, event: ChatEvent) => {
|
|
419
|
-
const scope = event.turnId ?? promptScope;
|
|
420
|
-
const key = `${scope}\u0000${event.childId ?? ''}`;
|
|
421
|
-
const ordinal = (ordinals.get(key) ?? 0) + 1;
|
|
422
|
-
ordinals.set(key, ordinal);
|
|
423
|
-
return `${prefix}-${scope}-${ordinal}`;
|
|
424
|
-
};
|
|
425
|
-
|
|
426
|
-
for (let i = 0; i < events.length; i++) {
|
|
427
|
-
const event = events[i];
|
|
428
|
-
const sid = rowIdFor(event);
|
|
429
|
-
|
|
430
|
-
if (consumedResultIndices.has(i)) {
|
|
431
|
-
continue;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
switch (event.kind) {
|
|
435
|
-
case 'user-prompt': {
|
|
436
|
-
/*
|
|
437
|
-
* Exactly one turn boundary before every top-level prompt that
|
|
438
|
-
* follows content. Replay (`eventsFromTurns`) emits a separator
|
|
439
|
-
* here but a live prompt append does not, so the row list adds one
|
|
440
|
-
* itself. Otherwise the gap under the previous turn would depend on
|
|
441
|
-
* whether the session had been reloaded.
|
|
442
|
-
*/
|
|
443
|
-
if (!event.childId && rows.length > 0 && rows[rows.length - 1].kind !== 'separator') {
|
|
444
|
-
rows.push(autoSeparatorFor(event, sid));
|
|
445
|
-
}
|
|
446
|
-
if (!event.childId) {
|
|
447
|
-
promptScope = `@u${sid}`;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
rows.push(
|
|
451
|
-
cachedRow(event, `u-${sid}`, () => {
|
|
452
|
-
const eventAttachments = event.attachments;
|
|
453
|
-
const origin = promptOriginOf(event);
|
|
454
|
-
return {
|
|
455
|
-
...own(event),
|
|
456
|
-
kind: 'user-prompt',
|
|
457
|
-
id: `u-${sid}`,
|
|
458
|
-
text: event.text,
|
|
459
|
-
...(event.refs && event.refs.length > 0 ? { refs: event.refs } : {}),
|
|
460
|
-
...(eventAttachments && eventAttachments.length > 0 ? { attachments: eventAttachments } : {}),
|
|
461
|
-
...(event.synthetic ? { synthetic: true as const } : {}),
|
|
462
|
-
...(origin ? { origin } : {}),
|
|
463
|
-
};
|
|
464
|
-
}),
|
|
465
|
-
);
|
|
466
|
-
break;
|
|
467
|
-
}
|
|
468
|
-
case 'markdown': {
|
|
469
|
-
rowOf[i] = rows.length;
|
|
470
|
-
headOf[i] = i;
|
|
471
|
-
rows.push(markdownRow(event, ordinalId(mdOrdinals, 'm', event)));
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
case 'thinking': {
|
|
475
|
-
/*
|
|
476
|
-
* Defensive: an empty reasoning line paints a bare icon row with
|
|
477
|
-
* no text (the "double icon" artifact). Canonical replay does not
|
|
478
|
-
* emit them, but mid-stream edge cases might.
|
|
479
|
-
*/
|
|
480
|
-
if (!event.text.trim()) {
|
|
481
|
-
break;
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
/*
|
|
485
|
-
* Fold the whole run of same-owner thinking lines into ONE row —
|
|
486
|
-
* a single icon per reasoning segment. Canonical replay emits one
|
|
487
|
-
* event per LINE (TUI gutter contract); live streaming coalesces
|
|
488
|
-
* per segment. Both normalize to the same single row here, so
|
|
489
|
-
* live and reloaded transcripts match and a 12-line reasoning
|
|
490
|
-
* paragraph costs one dot instead of twelve.
|
|
491
|
-
*
|
|
492
|
-
* The cache key spans the group (start, end, joined length), so
|
|
493
|
-
* the merged row's identity is stable across collapse passes once
|
|
494
|
-
* the group stops growing — only the live tail rebuilds.
|
|
495
|
-
*/
|
|
496
|
-
let j = i + 1;
|
|
497
|
-
|
|
498
|
-
while (j < events.length) {
|
|
499
|
-
const next = events[j];
|
|
500
|
-
|
|
501
|
-
if (
|
|
502
|
-
next.kind !== 'thinking' ||
|
|
503
|
-
next.turnId !== event.turnId ||
|
|
504
|
-
next.childId !== event.childId ||
|
|
505
|
-
next.depth !== event.depth
|
|
506
|
-
) {
|
|
507
|
-
break;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
j++;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
/*
|
|
514
|
-
* Like markdown rows, a single-event live segment gets its tail
|
|
515
|
-
* object replaced per coalesced delta — an object-keyed id would
|
|
516
|
-
* remount the row (and drop its manual expand state) every tick.
|
|
517
|
-
* The per-(turn, owner) ordinal is stable across ticks and across
|
|
518
|
-
* the open→closed identity swap, so the collapse transition
|
|
519
|
-
* animates in place instead of remounting.
|
|
520
|
-
*/
|
|
521
|
-
const kid = ordinalId(thinkOrdinals, 'k', event);
|
|
522
|
-
|
|
523
|
-
rowOf.fill(rows.length, i, j);
|
|
524
|
-
headOf.fill(i, i, j);
|
|
525
|
-
rows.push(thinkingRow(events, i, j, kid));
|
|
526
|
-
i = j - 1;
|
|
527
|
-
break;
|
|
528
|
-
}
|
|
529
|
-
case 'info':
|
|
530
|
-
rows.push(
|
|
531
|
-
cachedRow(event, `i-${sid}`, () => ({
|
|
532
|
-
...own(event),
|
|
533
|
-
kind: 'info',
|
|
534
|
-
id: `i-${sid}`,
|
|
535
|
-
text: event.text,
|
|
536
|
-
// Structured notices (severity + label chip) survive the projection
|
|
537
|
-
// so the transcript renders them like the TUI does, not as plain info.
|
|
538
|
-
...(event.notice ? { notice: event.notice } : {}),
|
|
539
|
-
})),
|
|
540
|
-
);
|
|
541
|
-
break;
|
|
542
|
-
case 'separator':
|
|
543
|
-
// One boundary, never a double gap, and none at the very top.
|
|
544
|
-
if (rows.length > 0 && rows[rows.length - 1].kind !== 'separator') {
|
|
545
|
-
rows.push(cachedRow(event, `s-${sid}`, () => ({ kind: 'separator', id: `s-${sid}` })));
|
|
546
|
-
}
|
|
547
|
-
break;
|
|
548
|
-
case 'spawn-start':
|
|
549
|
-
rows.push(
|
|
550
|
-
cachedRow(event, `ss-${sid}`, () => ({
|
|
551
|
-
...own(event),
|
|
552
|
-
kind: 'spawn-start',
|
|
553
|
-
id: `ss-${sid}`,
|
|
554
|
-
text: event.text,
|
|
555
|
-
...(event.spawn ? { spawn: event.spawn } : {}),
|
|
556
|
-
...(event.model ? { model: event.model } : {}),
|
|
557
|
-
})),
|
|
558
|
-
);
|
|
559
|
-
break;
|
|
560
|
-
case 'spawn-queued':
|
|
561
|
-
// No row: its call's tool row shows the wait (`spawnQueue`).
|
|
562
|
-
break;
|
|
563
|
-
case 'spawn-end':
|
|
564
|
-
rows.push(
|
|
565
|
-
cachedRow(event, `se-${sid}`, () => ({
|
|
566
|
-
...own(event),
|
|
567
|
-
kind: 'spawn-end',
|
|
568
|
-
id: `se-${sid}`,
|
|
569
|
-
text: event.text,
|
|
570
|
-
...(event.spawn ? { spawn: event.spawn } : {}),
|
|
571
|
-
...(event.model ? { model: event.model } : {}),
|
|
572
|
-
})),
|
|
573
|
-
);
|
|
574
|
-
break;
|
|
575
|
-
case 'compact-summary':
|
|
576
|
-
if (event.compact) {
|
|
577
|
-
rows.push(
|
|
578
|
-
cachedRow(event, `cs-${sid}`, () => ({
|
|
579
|
-
kind: 'compact-summary',
|
|
580
|
-
id: `cs-${sid}`,
|
|
581
|
-
text: event.text,
|
|
582
|
-
compact: event.compact!,
|
|
583
|
-
})),
|
|
584
|
-
);
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
break;
|
|
588
|
-
case 'tool': {
|
|
589
|
-
if (isUserBashEvent(event)) {
|
|
590
|
-
const pair = pairings.get(i);
|
|
591
|
-
const paired = pair ? events[pair.resultIndex] : undefined;
|
|
592
|
-
/*
|
|
593
|
-
* Intermediate streamed tails carry `streaming: true`; the final
|
|
594
|
-
* result (and every replayed one) doesn't. An `error`-kind pair
|
|
595
|
-
* (host spawn failure) also terminates the running state.
|
|
596
|
-
*/
|
|
597
|
-
const running = !paired || (pair?.resultKind === 'tool-result' && paired.streaming === true);
|
|
598
|
-
/*
|
|
599
|
-
* `resultIndex` in the key: each streamed tail is a NEW appended
|
|
600
|
-
* event, so the index advances per paint and invalidates the
|
|
601
|
-
* cached row even when two tails coincide in length.
|
|
602
|
-
*/
|
|
603
|
-
const errored = pair?.resultKind === 'error';
|
|
604
|
-
const key = `ub-${sid}|${running}|${errored}|${paired ? rowIdFor(paired) : -1}|${paired?.text.length ?? -1}|${paired?.clipped ?? false}`;
|
|
605
|
-
|
|
606
|
-
rows.push(
|
|
607
|
-
cachedRow(event, key, () => {
|
|
608
|
-
const command = typeof event.input?.command === 'string' ? event.input.command : event.text;
|
|
609
|
-
const result = paired ? paired.text : null;
|
|
610
|
-
|
|
611
|
-
return {
|
|
612
|
-
...own(event),
|
|
613
|
-
kind: 'user-bash',
|
|
614
|
-
id: `ub-${sid}`,
|
|
615
|
-
command,
|
|
616
|
-
result,
|
|
617
|
-
running,
|
|
618
|
-
exit: !running && !errored && result !== null ? parseBashExitMeta(result) : null,
|
|
619
|
-
...(errored ? { errored: true } : {}),
|
|
620
|
-
...(event.callId ? { callId: event.callId } : {}),
|
|
621
|
-
...(paired?.clipped ? { resultClipped: true } : {}),
|
|
622
|
-
};
|
|
623
|
-
}),
|
|
624
|
-
);
|
|
625
|
-
break;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
const pair = pairings.get(i);
|
|
629
|
-
const paired = pair ? events[pair.resultIndex] : undefined;
|
|
630
|
-
const pairedOk = pair ? pair.resultKind === 'tool-result' : null;
|
|
631
|
-
/*
|
|
632
|
-
* The cache key folds in everything beyond the event ref that
|
|
633
|
-
* shapes the row: pairing state (`resultIndex` — multi-result
|
|
634
|
-
* pairing re-points a callId to a LATER event, which can
|
|
635
|
-
* coincide in length with the old one — plus text length +
|
|
636
|
-
* clipped flag), the edit-diff display flag, and the
|
|
637
|
-
* streaming-derived `ok` coercion for unpaired calls.
|
|
638
|
-
*/
|
|
639
|
-
const okCoerced = pairedOk === null && !isStreaming ? false : pairedOk;
|
|
640
|
-
const waitingFor = okCoerced === null && event.callId ? waiting.get(event.callId) : undefined;
|
|
641
|
-
// The host's start, else when this window received the call (an older host).
|
|
642
|
-
const callStart = event.startedAt ?? event.receivedAt;
|
|
643
|
-
// A call that waited for a slot counts from its worker's start, not its own.
|
|
644
|
-
const workerStart = event.callId ? workerStartedAt.get(event.callId) : undefined;
|
|
645
|
-
const since = workerStart ?? callStart;
|
|
646
|
-
const doneMs = paired ? doneDurationMs(paired, since, workerStart, callStart) : undefined;
|
|
647
|
-
const resuming = !paired && event.resuming === true;
|
|
648
|
-
const key = `t-${sid}|${showEditDiffs}|${okCoerced}|${paired ? rowIdFor(paired) : -1}|${paired?.text.length ?? -1}|${paired?.clipped ?? false}|${waitingFor ? 'w' : ''}|${since ?? ''}|${doneMs ?? ''}|${resuming ? 'r' : ''}`;
|
|
649
|
-
|
|
650
|
-
rows.push(
|
|
651
|
-
cachedRow(event, key, () => {
|
|
652
|
-
const toolName = event.tool ?? '?';
|
|
653
|
-
const rawInput = event.input;
|
|
654
|
-
const formatted = rawInput ? formatToolCall(toolName, rawInput) : null;
|
|
655
|
-
|
|
656
|
-
let result: string | null = paired ? paired.text : null;
|
|
657
|
-
const ok: boolean | null = okCoerced;
|
|
658
|
-
|
|
659
|
-
if (showEditDiffs && event.edit && ok === true) {
|
|
660
|
-
result = null;
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
const displayEdit = ok === false && event.edit ? reconcileEditOnError(event.edit) : event.edit;
|
|
664
|
-
|
|
665
|
-
return {
|
|
666
|
-
...own(event),
|
|
667
|
-
kind: 'tool',
|
|
668
|
-
id: `t-${sid}`,
|
|
669
|
-
name: toolName,
|
|
670
|
-
displayName: displayNameFor(toolName, rawInput),
|
|
671
|
-
formatted,
|
|
672
|
-
rawInput,
|
|
673
|
-
edit: displayEdit,
|
|
674
|
-
result,
|
|
675
|
-
ok,
|
|
676
|
-
...(event.callId ? { callId: event.callId } : {}),
|
|
677
|
-
...(paired?.clipped ? { resultClipped: true } : {}),
|
|
678
|
-
...(waitingFor ? { waitingFor } : {}),
|
|
679
|
-
...(resuming ? { resuming: true as const } : {}),
|
|
680
|
-
...(event.approval ? { approval: event.approval } : {}),
|
|
681
|
-
...(event.parentToolCallId ? { parentId: event.parentToolCallId } : {}),
|
|
682
|
-
...(doneMs !== undefined
|
|
683
|
-
? { durationMs: doneMs }
|
|
684
|
-
: !paired && since !== undefined
|
|
685
|
-
? { startedAt: since }
|
|
686
|
-
: {}),
|
|
687
|
-
};
|
|
688
|
-
}),
|
|
689
|
-
);
|
|
690
|
-
break;
|
|
691
|
-
}
|
|
692
|
-
case 'tool-result':
|
|
693
|
-
rows.push(
|
|
694
|
-
cachedRow(event, `tr-${sid}`, () => ({ ...own(event), kind: 'info', id: `tr-${sid}`, text: event.text })),
|
|
695
|
-
);
|
|
696
|
-
break;
|
|
697
|
-
case 'error':
|
|
698
|
-
rows.push(
|
|
699
|
-
cachedRow(event, `e-${sid}`, () => ({
|
|
700
|
-
...own(event),
|
|
701
|
-
kind: 'error',
|
|
702
|
-
id: `e-${sid}`,
|
|
703
|
-
text: event.text,
|
|
704
|
-
...(event.detail ? { detail: event.detail } : {}),
|
|
705
|
-
// What tells a run's own end from a tool's or a `/` command's error (`markRunFailures`).
|
|
706
|
-
...(event.notice ? { notice: event.notice } : {}),
|
|
707
|
-
...(event.tool ? { tool: event.tool } : {}),
|
|
708
|
-
...(event.callId ? { callId: event.callId } : {}),
|
|
709
|
-
})),
|
|
710
|
-
);
|
|
711
|
-
break;
|
|
712
|
-
case 'session-event':
|
|
713
|
-
rows.push(
|
|
714
|
-
cachedRow(event, `sv-${sid}`, () => ({
|
|
715
|
-
...own(event),
|
|
716
|
-
kind: 'session-event',
|
|
717
|
-
id: `sv-${sid}`,
|
|
718
|
-
text: event.text,
|
|
719
|
-
...(event.sessionEvent ? { sessionEvent: event.sessionEvent } : {}),
|
|
720
|
-
})),
|
|
721
|
-
);
|
|
722
|
-
break;
|
|
723
|
-
case 'run-summary':
|
|
724
|
-
rows.push(
|
|
725
|
-
cachedRow(event, `rs-${sid}`, () => ({
|
|
726
|
-
...own(event),
|
|
727
|
-
kind: 'run-summary',
|
|
728
|
-
id: `rs-${sid}`,
|
|
729
|
-
text: event.text,
|
|
730
|
-
...(event.runSummary ? { runSummary: event.runSummary } : {}),
|
|
731
|
-
})),
|
|
732
|
-
);
|
|
733
|
-
break;
|
|
734
|
-
case 'command-detail':
|
|
735
|
-
rows.push(
|
|
736
|
-
cachedRow(event, `cd-${sid}`, () => ({
|
|
737
|
-
...own(event),
|
|
738
|
-
kind: 'command-detail',
|
|
739
|
-
id: `cd-${sid}`,
|
|
740
|
-
text: event.text,
|
|
741
|
-
...(event.label ? { label: event.label } : {}),
|
|
742
|
-
...(event.syntax === 'diff' ? { syntax: 'diff' as const } : {}),
|
|
743
|
-
})),
|
|
744
|
-
);
|
|
745
|
-
break;
|
|
746
|
-
case 'command-note':
|
|
747
|
-
rows.push(
|
|
748
|
-
cachedRow(event, `cn-${sid}`, () => ({
|
|
749
|
-
...own(event),
|
|
750
|
-
kind: 'command-note',
|
|
751
|
-
id: `cn-${sid}`,
|
|
752
|
-
text: event.text,
|
|
753
|
-
})),
|
|
754
|
-
);
|
|
755
|
-
break;
|
|
756
|
-
case 'custom':
|
|
757
|
-
/*
|
|
758
|
-
* Custom command blocks carry MANDATORY fallback markdown in
|
|
759
|
-
* `text`: a markdown row that keeps the renderer id and its data,
|
|
760
|
-
* so an extension renderer for the block draws it where one is
|
|
761
|
-
* registered, and the fallback draws everywhere else.
|
|
762
|
-
*/
|
|
763
|
-
rows.push(
|
|
764
|
-
cachedRow(event, `cu-${sid}`, () => ({
|
|
765
|
-
...own(event),
|
|
766
|
-
kind: 'markdown',
|
|
767
|
-
id: `cu-${sid}`,
|
|
768
|
-
text: event.text,
|
|
769
|
-
streaming: false,
|
|
770
|
-
...(event.custom
|
|
771
|
-
? {
|
|
772
|
-
custom: {
|
|
773
|
-
renderer: event.custom.renderer,
|
|
774
|
-
...(event.custom.data !== undefined ? { data: event.custom.data } : {}),
|
|
775
|
-
},
|
|
776
|
-
}
|
|
777
|
-
: {}),
|
|
778
|
-
})),
|
|
779
|
-
);
|
|
780
|
-
break;
|
|
781
|
-
}
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
if (events.length > 0) {
|
|
785
|
-
lastPasses.set(events[0], { events, rows, showEditDiffs, isStreaming, rowOf, headOf });
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
return rows;
|
|
789
|
-
}
|