zidane-ui 9.1.1 → 9.1.4
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 +11 -10
- 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/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/demos/index.js +1 -1
- package/dist/onboarding/index.js +5 -5
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ConnectorsStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +2 -2
- package/dist/onboarding/steps/SkillsStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +1 -1
- 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 +2 -2
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/settings/sections/skills/SkillsSection.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
package/src/chat/Transcript.tsx
DELETED
|
@@ -1,523 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The chat transcript: zidane events in, the rows of a session out. Runs the
|
|
3
|
-
* headless pipeline (`use-transcript-rows.ts`) with the display options,
|
|
4
|
-
* walks the rows into subagent blocks and lazy root rows, and paints the
|
|
5
|
-
* select-turn cursor when the app drives that mode.
|
|
6
|
-
*
|
|
7
|
-
* <Transcript events={events} streaming={running} sessionId={id} options={{ transcriptDensity: 'compact' }} />
|
|
8
|
-
*
|
|
9
|
-
* What a row draws through the app's services comes from the renderer
|
|
10
|
-
* slots (`TranscriptRenderersProvider`) and what it asks of the app from
|
|
11
|
-
* the actions (`TranscriptActionsProvider`), both provided around it.
|
|
12
|
-
* `HostTranscript` is this component over a `ChatHost`.
|
|
13
|
-
*
|
|
14
|
-
* Scroll performance (keep it at frame rate on 3,000+ turn sessions): rows
|
|
15
|
-
* keep their identity across stream ticks, each renders through the
|
|
16
|
-
* memoized `TranscriptRow` with one shared `RowContext`, a root row whose
|
|
17
|
-
* inputs did not change reuses its element (React skips it without a props
|
|
18
|
-
* compare), and root rows mount on approach (`LazyRow`) except the last
|
|
19
|
-
* `EAGER_TAIL`.
|
|
20
|
-
*
|
|
21
|
-
* The extensions' `transcript.turn-end` items draw after the turn they name
|
|
22
|
-
* (`turnId`: after the last root row holding it; none holds it, not drawn),
|
|
23
|
-
* the rest once at the end when the run has ended.
|
|
24
|
-
*/
|
|
25
|
-
import { memo, useCallback, useMemo, useRef, type CSSProperties, type ReactElement, type ReactNode } from 'react';
|
|
26
|
-
import type { Settings } from 'zidane/chat';
|
|
27
|
-
import { DEFAULT_SETTINGS, type LiveRunStatus, type RunRetry, runTailActivity } from 'zidane/chat/pure';
|
|
28
|
-
|
|
29
|
-
import { ExtensionSlot } from '../extensions/ExtensionSlot';
|
|
30
|
-
import { useExtensionItems } from '../extensions/ExtensionsProvider';
|
|
31
|
-
import { LinkSessionScope } from '../extensions/links';
|
|
32
|
-
import type { ChatEvent } from './headless/host';
|
|
33
|
-
import { type Cluster, firstRowId, type GroupCluster, type Row, rowTurnIds, stopForRow } from './headless/transcript';
|
|
34
|
-
import { useTranscriptActions } from './transcript/actions';
|
|
35
|
-
import { RowIconsContext } from './transcript/frame';
|
|
36
|
-
import { CvRow, TranscriptSettling } from './transcript/LazyRow';
|
|
37
|
-
import { MarkdownDiagrams } from './transcript/markdown';
|
|
38
|
-
import { rowCvStyle, rowEstimatePx } from './transcript/row-estimate';
|
|
39
|
-
import { SelectCursor } from './transcript/SelectCursor';
|
|
40
|
-
import { SubagentBlock } from './transcript/SubagentBlock';
|
|
41
|
-
import {
|
|
42
|
-
isHiddenRow,
|
|
43
|
-
type RowContext,
|
|
44
|
-
type SlotEntry,
|
|
45
|
-
TranscriptRow,
|
|
46
|
-
TranscriptRowSlot,
|
|
47
|
-
type TranscriptTurnMenu,
|
|
48
|
-
} from './transcript/TranscriptRow';
|
|
49
|
-
import { useSelectStops, useTranscriptRows } from './transcript/use-transcript-rows';
|
|
50
|
-
import { useTranscriptSelectionCopy } from './transcript/useTranscriptSelectionCopy';
|
|
51
|
-
import type { SelectStops } from './headless/transcript';
|
|
52
|
-
|
|
53
|
-
export type { TranscriptTurnMenu, TurnMenuTarget } from './transcript/TranscriptRow';
|
|
54
|
-
|
|
55
|
-
/** The display settings a transcript reads: zidane's `Settings` fields of the same names. */
|
|
56
|
-
export type TranscriptOptions = Pick<
|
|
57
|
-
Settings,
|
|
58
|
-
| 'showRowIcons'
|
|
59
|
-
| 'showThinking'
|
|
60
|
-
| 'showToolResults'
|
|
61
|
-
| 'showEditDiffs'
|
|
62
|
-
| 'showFullShellOutput'
|
|
63
|
-
| 'groupToolCalls'
|
|
64
|
-
| 'toolCallDisplay'
|
|
65
|
-
| 'transcriptDensity'
|
|
66
|
-
| 'hideSubagentOutput'
|
|
67
|
-
| 'showRunReceipt'
|
|
68
|
-
| 'thinkingAutoExpand'
|
|
69
|
-
| 'showCacheNotices'
|
|
70
|
-
| 'codemodeShowCalls'
|
|
71
|
-
| 'showToolAttachments'
|
|
72
|
-
| 'renderDiagrams'
|
|
73
|
-
>;
|
|
74
|
-
|
|
75
|
-
/** zidane's defaults for those settings. */
|
|
76
|
-
export const DEFAULT_TRANSCRIPT_OPTIONS: TranscriptOptions = {
|
|
77
|
-
showRowIcons: DEFAULT_SETTINGS.showRowIcons,
|
|
78
|
-
showThinking: DEFAULT_SETTINGS.showThinking,
|
|
79
|
-
showToolResults: DEFAULT_SETTINGS.showToolResults,
|
|
80
|
-
showEditDiffs: DEFAULT_SETTINGS.showEditDiffs,
|
|
81
|
-
showFullShellOutput: DEFAULT_SETTINGS.showFullShellOutput,
|
|
82
|
-
groupToolCalls: DEFAULT_SETTINGS.groupToolCalls,
|
|
83
|
-
toolCallDisplay: DEFAULT_SETTINGS.toolCallDisplay,
|
|
84
|
-
transcriptDensity: DEFAULT_SETTINGS.transcriptDensity,
|
|
85
|
-
hideSubagentOutput: DEFAULT_SETTINGS.hideSubagentOutput,
|
|
86
|
-
showRunReceipt: DEFAULT_SETTINGS.showRunReceipt,
|
|
87
|
-
thinkingAutoExpand: DEFAULT_SETTINGS.thinkingAutoExpand,
|
|
88
|
-
showCacheNotices: DEFAULT_SETTINGS.showCacheNotices,
|
|
89
|
-
codemodeShowCalls: DEFAULT_SETTINGS.codemodeShowCalls,
|
|
90
|
-
showToolAttachments: DEFAULT_SETTINGS.showToolAttachments,
|
|
91
|
-
renderDiagrams: DEFAULT_SETTINGS.renderDiagrams,
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/** Select-turn mode, driven by the app (its keys move `selected`). */
|
|
95
|
-
export interface TranscriptSelection {
|
|
96
|
-
/** The selected turn while the mode is on in this transcript; null when off. */
|
|
97
|
-
selected: string | null;
|
|
98
|
-
/**
|
|
99
|
-
* Receives a function answering the turns the cursor can walk, from the
|
|
100
|
-
* rows painted right now (ask it on entering the mode and on every move).
|
|
101
|
-
* Returns the unregister.
|
|
102
|
-
*/
|
|
103
|
-
registerStops?(source: () => SelectStops): () => void;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** Props for {@link Transcript}. */
|
|
107
|
-
export interface TranscriptProps {
|
|
108
|
-
/** The session's events, oldest first. The transcript turns them into rows. */
|
|
109
|
-
events: readonly ChatEvent[];
|
|
110
|
-
/** A run is in flight: the last reply may still be streaming. */
|
|
111
|
-
streaming: boolean;
|
|
112
|
-
/** The session shown; switching it replays the first-paint settle (no enter animations). */
|
|
113
|
-
sessionId: string | null;
|
|
114
|
-
/** Memoize it: a new object re-renders the transcript. Missing fields take `DEFAULT_TRANSCRIPT_OPTIONS`. */
|
|
115
|
-
options?: Partial<TranscriptOptions>;
|
|
116
|
-
/** Absent: no select-turn mode. Memoize it. */
|
|
117
|
-
selection?: TranscriptSelection;
|
|
118
|
-
/** Absent: turns have no menu. Memoize it. */
|
|
119
|
-
turnMenu?: TranscriptTurnMenu;
|
|
120
|
-
/**
|
|
121
|
-
* Opts the live work row (compact density's fold) in to naming the run's
|
|
122
|
-
* status: "Retrying 2/3" while `retry` is set, "Waiting for the model"
|
|
123
|
-
* once nothing has moved on screen for a moment, each with how long it has
|
|
124
|
-
* lasted in a chip. Absent: the row says "Working". Memoize it.
|
|
125
|
-
*/
|
|
126
|
-
runStatus?: { retry: RunRetry | null };
|
|
127
|
-
/** Extra class names for the transcript's root element. */
|
|
128
|
-
className?: string;
|
|
129
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
130
|
-
style?: CSSProperties;
|
|
131
|
-
/** Rendered after the rows, inside the transcript (a menu the app owns). */
|
|
132
|
-
children?: ReactNode;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Top-level rows at the end of the transcript that mount at once (the rest
|
|
137
|
-
* mount on approach, `LazyRow`): enough to fill the window when the session
|
|
138
|
-
* opens pinned to the bottom, so the first frame shows real rows. Sized by
|
|
139
|
-
* the rows' estimated heights (`EAGER_SCREENS` windows' worth), never fewer
|
|
140
|
-
* than `EAGER_MIN` rows nor more than `EAGER_MAX`: mounting forty rows when
|
|
141
|
-
* eight fill the window made every conversation switch pay for the other
|
|
142
|
-
* thirty-two in its frame. Rows above mount next, from the viewport
|
|
143
|
-
* observers, and the ones within a viewport of the view mount at once.
|
|
144
|
-
*/
|
|
145
|
-
const EAGER_SCREENS = 1.5;
|
|
146
|
-
const EAGER_MIN = 6;
|
|
147
|
-
const EAGER_MAX = 40;
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Index of the first root cluster that mounts at once (`EAGER_SCREENS`).
|
|
151
|
-
*
|
|
152
|
-
* @param list - The root clusters.
|
|
153
|
-
* @param hidden - Rows that render nothing (they take no room).
|
|
154
|
-
*/
|
|
155
|
-
function eagerTailStart(list: readonly Cluster[], hidden: (row: Row) => boolean): number {
|
|
156
|
-
// `innerHeight` reads no layout. The transcript's own viewport is shorter (header, composer).
|
|
157
|
-
const budget = (typeof window === 'undefined' ? 1000 : window.innerHeight) * EAGER_SCREENS;
|
|
158
|
-
let px = 0;
|
|
159
|
-
let rows = 0;
|
|
160
|
-
for (let i = list.length - 1; i >= 0; i--) {
|
|
161
|
-
const cluster = list[i]!;
|
|
162
|
-
if (cluster.kind === 'single') {
|
|
163
|
-
if (hidden(cluster.row)) continue;
|
|
164
|
-
px += rowEstimatePx(cluster.row);
|
|
165
|
-
}
|
|
166
|
-
// A subagent block always renders whole; counting it as no height keeps the tail generous.
|
|
167
|
-
rows++;
|
|
168
|
-
if (rows >= EAGER_MAX || (rows >= EAGER_MIN && px >= budget)) return i;
|
|
169
|
-
}
|
|
170
|
-
return 0;
|
|
171
|
-
}
|
|
172
|
-
/** How long after a conversation first paints its rows count as already there. */
|
|
173
|
-
const SETTLE_MS = 400;
|
|
174
|
-
|
|
175
|
-
/** A subagent block's id among the rows: its first row's, not its position (a prepended page shifts every position). */
|
|
176
|
-
const groupRowId = (cluster: GroupCluster, index: number) => `group-${firstRowId(cluster) ?? index}-${cluster.childId}`;
|
|
177
|
-
|
|
178
|
-
/** Renders a session's events as transcript rows: messages, tool calls grouped by the display options, subagent blocks, notices, and the select-turn cursor. Rows mount lazily as they near the viewport. */
|
|
179
|
-
export const Transcript = memo(function Transcript({
|
|
180
|
-
events,
|
|
181
|
-
streaming,
|
|
182
|
-
sessionId,
|
|
183
|
-
options,
|
|
184
|
-
selection,
|
|
185
|
-
turnMenu,
|
|
186
|
-
runStatus,
|
|
187
|
-
className,
|
|
188
|
-
style,
|
|
189
|
-
children,
|
|
190
|
-
}: TranscriptProps) {
|
|
191
|
-
const o = options ? { ...DEFAULT_TRANSCRIPT_OPTIONS, ...options } : DEFAULT_TRANSCRIPT_OPTIONS;
|
|
192
|
-
const { showThinking, showToolResults, showEditDiffs, toolCallDisplay, thinkingAutoExpand, showToolAttachments } = o;
|
|
193
|
-
const showFullShellOutput = Boolean(o.showFullShellOutput);
|
|
194
|
-
const collapseSubagents = o.hideSubagentOutput;
|
|
195
|
-
const { openSession, resume } = useTranscriptActions();
|
|
196
|
-
|
|
197
|
-
// A conversation's first paint (switching to it, its history landing) is
|
|
198
|
-
// not new content: rows mounted in that window skip their enter animation.
|
|
199
|
-
const settle = useRef({ sessionId: null as string | null, shown: false, until: 0 });
|
|
200
|
-
if (settle.current.sessionId !== sessionId) settle.current = { sessionId, shown: false, until: 0 };
|
|
201
|
-
if (!settle.current.shown && events.length > 0) {
|
|
202
|
-
settle.current.shown = true;
|
|
203
|
-
settle.current.until = performance.now() + SETTLE_MS;
|
|
204
|
-
}
|
|
205
|
-
const settling = useCallback(() => performance.now() < settle.current.until, []);
|
|
206
|
-
|
|
207
|
-
const { visibleRows, receiptByRowId, resumableId, clusters, lastStreamingRow } = useTranscriptRows(
|
|
208
|
-
events,
|
|
209
|
-
streaming,
|
|
210
|
-
{
|
|
211
|
-
showCacheNotices: o.showCacheNotices,
|
|
212
|
-
codemodeShowCalls: o.codemodeShowCalls,
|
|
213
|
-
showEditDiffs,
|
|
214
|
-
groupToolCalls: o.groupToolCalls,
|
|
215
|
-
showRunReceipt: o.showRunReceipt,
|
|
216
|
-
compact: o.transcriptDensity === 'compact',
|
|
217
|
-
},
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
// The turns this session's `transcript.turn-end` items follow, keyed by the last root row holding each.
|
|
221
|
-
const slotEntries = useExtensionItems('slot');
|
|
222
|
-
const turnEnds = useMemo(() => {
|
|
223
|
-
const wanted = new Set<string>();
|
|
224
|
-
for (const { item } of slotEntries)
|
|
225
|
-
if (
|
|
226
|
-
item.at === 'transcript.turn-end' &&
|
|
227
|
-
item.turnId &&
|
|
228
|
-
(item.sessionId === undefined || item.sessionId === sessionId)
|
|
229
|
-
)
|
|
230
|
-
wanted.add(item.turnId);
|
|
231
|
-
if (wanted.size === 0) return null;
|
|
232
|
-
const lastRow = new Map<string, string>();
|
|
233
|
-
for (const cluster of clusters) {
|
|
234
|
-
if (cluster.kind !== 'single') continue;
|
|
235
|
-
for (const id of rowTurnIds(cluster.row)) if (wanted.has(id)) lastRow.set(id, cluster.row.id);
|
|
236
|
-
}
|
|
237
|
-
const byRow = new Map<string, string[]>();
|
|
238
|
-
for (const [turnId, rowId] of lastRow) byRow.set(rowId, [...(byRow.get(rowId) ?? []), turnId]);
|
|
239
|
-
return byRow;
|
|
240
|
-
}, [slotEntries, sessionId, clusters]);
|
|
241
|
-
|
|
242
|
-
const selectedTurnId = selection?.selected ?? null;
|
|
243
|
-
const stops = useSelectStops(visibleRows, events, showThinking, selectedTurnId !== null, selection?.registerStops);
|
|
244
|
-
|
|
245
|
-
const containerRef = useRef<HTMLDivElement>(null);
|
|
246
|
-
const rowCtx = useMemo<RowContext>(
|
|
247
|
-
() => ({
|
|
248
|
-
sessionId,
|
|
249
|
-
settings: {
|
|
250
|
-
showThinking,
|
|
251
|
-
showToolResults,
|
|
252
|
-
showEditDiffs,
|
|
253
|
-
showFullShellOutput,
|
|
254
|
-
toolCallDisplay,
|
|
255
|
-
thinkingAutoExpand,
|
|
256
|
-
showToolAttachments,
|
|
257
|
-
},
|
|
258
|
-
turnMenu,
|
|
259
|
-
openSession,
|
|
260
|
-
resume,
|
|
261
|
-
}),
|
|
262
|
-
[
|
|
263
|
-
sessionId,
|
|
264
|
-
showThinking,
|
|
265
|
-
showToolResults,
|
|
266
|
-
showEditDiffs,
|
|
267
|
-
showFullShellOutput,
|
|
268
|
-
toolCallDisplay,
|
|
269
|
-
thinkingAutoExpand,
|
|
270
|
-
showToolAttachments,
|
|
271
|
-
turnMenu,
|
|
272
|
-
openSession,
|
|
273
|
-
resume,
|
|
274
|
-
],
|
|
275
|
-
);
|
|
276
|
-
|
|
277
|
-
/*
|
|
278
|
-
* A fold's body is this walk again. It runs through a ref, so the function
|
|
279
|
-
* handed to folds keeps its identity across stream ticks and a settled fold
|
|
280
|
-
* doesn't re-render per token; it changes identity (re-rendering every
|
|
281
|
-
* fold) only when something a fold body shows changes. A live fold still
|
|
282
|
-
* re-renders each tick: its own row object changes.
|
|
283
|
-
*/
|
|
284
|
-
const slotCache = useRef(new Map<string, SlotEntry>());
|
|
285
|
-
const groupCache = useRef(new WeakMap<GroupCluster, SlotEntry>());
|
|
286
|
-
const renderClustersRef = useRef<(list: readonly Cluster[], lazy?: boolean) => ReactNode[]>(() => []);
|
|
287
|
-
// The receipt switch too: a fold body docks receipts under its replies, and the switch changes no fold's row.
|
|
288
|
-
const showRunReceipt = o.showRunReceipt;
|
|
289
|
-
const foldEpoch = useMemo(
|
|
290
|
-
() => ({}),
|
|
291
|
-
[rowCtx, selectedTurnId, stops, resumableId, showThinking, collapseSubagents, streaming, showRunReceipt],
|
|
292
|
-
);
|
|
293
|
-
const renderFoldRows = useMemo(
|
|
294
|
-
() => (list: readonly Cluster[], lazy?: boolean) => renderClustersRef.current(list, lazy),
|
|
295
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps -- the epoch is the dependency
|
|
296
|
-
[foldEpoch],
|
|
297
|
-
);
|
|
298
|
-
|
|
299
|
-
/*
|
|
300
|
-
* The live run's status, for the root live fold's header. It changes only
|
|
301
|
-
* when the retry or the wait does, so a stream tick re-renders no fold.
|
|
302
|
-
*/
|
|
303
|
-
const waiting = runStatus !== undefined && streaming && runTailActivity(events) === 'waiting';
|
|
304
|
-
const liveStatus = useMemo<LiveRunStatus | undefined>(
|
|
305
|
-
() => (runStatus && streaming ? { retry: runStatus.retry, waiting } : undefined),
|
|
306
|
-
[runStatus, streaming, waiting],
|
|
307
|
-
);
|
|
308
|
-
|
|
309
|
-
// `root`: a row of the transcript's own walk, not of a fold or a worker's body.
|
|
310
|
-
const rowProps = (row: Row, root = false) => ({
|
|
311
|
-
row,
|
|
312
|
-
showCaret: row === lastStreamingRow,
|
|
313
|
-
receipt: receiptByRowId.get(row.id),
|
|
314
|
-
resumable: row.id === resumableId,
|
|
315
|
-
ctx: rowCtx,
|
|
316
|
-
renderRows: row.kind === 'exchange-fold' || row.kind === 'message-group' ? renderFoldRows : undefined,
|
|
317
|
-
status: root && row.kind === 'exchange-fold' && row.live ? liveStatus : undefined,
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
/*
|
|
321
|
-
* Walk clusters into row nodes. Shared by the transcript root and the body
|
|
322
|
-
* of an open exchange fold. In select-turn mode each selectable row carries
|
|
323
|
-
* `data-stop` (hover / click target) and the selected ones `data-sel`; the
|
|
324
|
-
* highlight itself is ONE element (`SelectCursor`) that measures them. Rows
|
|
325
|
-
* are never wrapped or moved, so moving the cursor re-renders attributes,
|
|
326
|
-
* not rows.
|
|
327
|
-
*
|
|
328
|
-
* A subagent block: its own rows, with the blocks of the workers it
|
|
329
|
-
* started nested where they ran (`clusterByOwner`). A nested block indents
|
|
330
|
-
* relative to its spawner's block, not to the transcript.
|
|
331
|
-
*
|
|
332
|
-
* Like a root row, a block whose inputs didn't change reuses its element
|
|
333
|
-
* (`clusterByOwner` keeps the cluster's identity while its rows hold), so
|
|
334
|
-
* a tick elsewhere doesn't re-render it. Its inputs: everything below
|
|
335
|
-
* reads, per member row too (the caret and receipt move between rows).
|
|
336
|
-
*/
|
|
337
|
-
const groupDeps = (cluster: GroupCluster, deps: unknown[]) => {
|
|
338
|
-
for (const item of cluster.body) {
|
|
339
|
-
if (item.kind === 'group') {
|
|
340
|
-
groupDeps(item, deps);
|
|
341
|
-
continue;
|
|
342
|
-
}
|
|
343
|
-
const row = item.row;
|
|
344
|
-
deps.push(
|
|
345
|
-
row === lastStreamingRow,
|
|
346
|
-
receiptByRowId.get(row.id),
|
|
347
|
-
row.kind === 'exchange-fold' || row.kind === 'message-group' ? renderFoldRows : undefined,
|
|
348
|
-
);
|
|
349
|
-
}
|
|
350
|
-
return deps;
|
|
351
|
-
};
|
|
352
|
-
|
|
353
|
-
const renderGroup = (cluster: GroupCluster, ci: number, parentDepth?: number): ReactNode => {
|
|
354
|
-
const key = groupRowId(cluster, ci);
|
|
355
|
-
const deps = groupDeps(cluster, [
|
|
356
|
-
key,
|
|
357
|
-
sessionId,
|
|
358
|
-
parentDepth,
|
|
359
|
-
collapseSubagents,
|
|
360
|
-
streaming,
|
|
361
|
-
showThinking,
|
|
362
|
-
rowCtx,
|
|
363
|
-
resumableId,
|
|
364
|
-
]);
|
|
365
|
-
const hit = groupCache.current.get(cluster);
|
|
366
|
-
if (hit && hit.deps.length === deps.length && hit.deps.every((d, i) => Object.is(d, deps[i]))) {
|
|
367
|
-
return hit.element;
|
|
368
|
-
}
|
|
369
|
-
const element = buildGroup(cluster, key, parentDepth);
|
|
370
|
-
groupCache.current.set(cluster, { deps, element });
|
|
371
|
-
return element;
|
|
372
|
-
};
|
|
373
|
-
|
|
374
|
-
const buildGroup = (cluster: GroupCluster, key: string, parentDepth?: number): ReactElement => (
|
|
375
|
-
<SubagentBlock
|
|
376
|
-
// Keyed by its first row, not its position: a prepended page shifts
|
|
377
|
-
// every position and would remount every group below it.
|
|
378
|
-
key={key}
|
|
379
|
-
data-row={key}
|
|
380
|
-
childId={cluster.childId}
|
|
381
|
-
{...(sessionId ? { sessionId } : {})}
|
|
382
|
-
depth={cluster.depth}
|
|
383
|
-
{...(parentDepth !== undefined ? { parentDepth } : {})}
|
|
384
|
-
rows={cluster.rows}
|
|
385
|
-
defaultCollapsed={collapseSubagents}
|
|
386
|
-
streaming={streaming}
|
|
387
|
-
>
|
|
388
|
-
{cluster.body.map((item, i) => {
|
|
389
|
-
if (item.kind === 'group') return renderGroup(item, i, cluster.depth);
|
|
390
|
-
const row = item.row;
|
|
391
|
-
if (isHiddenRow(row, showThinking)) return null;
|
|
392
|
-
return (
|
|
393
|
-
<CvRow key={row.id} style={rowCvStyle(row)} data-row={row.id}>
|
|
394
|
-
<TranscriptRow {...rowProps(row)} />
|
|
395
|
-
</CvRow>
|
|
396
|
-
);
|
|
397
|
-
})}
|
|
398
|
-
</SubagentBlock>
|
|
399
|
-
);
|
|
400
|
-
|
|
401
|
-
const renderClusters = (list: readonly Cluster[], lazy = false): ReactNode[] => {
|
|
402
|
-
const out: ReactNode[] = [];
|
|
403
|
-
// Only the root walk is lazy; it rebuilds the cache with the rows it used (no growth).
|
|
404
|
-
const nextSlotCache = lazy ? new Map<string, SlotEntry>() : slotCache.current;
|
|
405
|
-
const eagerFrom = lazy ? eagerTailStart(list, (row) => isHiddenRow(row, showThinking)) : 0;
|
|
406
|
-
|
|
407
|
-
const renderSingle = (cluster: Extract<Cluster, { kind: 'single' }>, ci: number): void => {
|
|
408
|
-
// Rows that render null (hidden thinking) must not get a cv
|
|
409
|
-
// wrapper: an EMPTY skipped element still reserves its
|
|
410
|
-
// contain-intrinsic-size placeholder offscreen but collapses to
|
|
411
|
-
// 0 on screen — systematic scrollbar drift.
|
|
412
|
-
if (isHiddenRow(cluster.row, showThinking)) return;
|
|
413
|
-
|
|
414
|
-
const stop = stops ? stopForRow(cluster.row, stops) : null;
|
|
415
|
-
// Keyed by ROW id, not cluster position, so upstream regrouping
|
|
416
|
-
// never remounts later rows.
|
|
417
|
-
const sel = stop !== null && stop === selectedTurnId ? '' : undefined;
|
|
418
|
-
if (lazy) {
|
|
419
|
-
/*
|
|
420
|
-
* The same element for a row whose inputs didn't change: React skips it
|
|
421
|
-
* without even comparing props, so a stream tick costs the rows that
|
|
422
|
-
* changed, not one element and one memo check per row of the transcript.
|
|
423
|
-
*/
|
|
424
|
-
const props = rowProps(cluster.row, true);
|
|
425
|
-
const eager = ci >= eagerFrom;
|
|
426
|
-
const deps = [
|
|
427
|
-
props.row,
|
|
428
|
-
props.showCaret,
|
|
429
|
-
props.receipt,
|
|
430
|
-
props.resumable,
|
|
431
|
-
props.ctx,
|
|
432
|
-
props.renderRows,
|
|
433
|
-
props.status,
|
|
434
|
-
eager,
|
|
435
|
-
stop,
|
|
436
|
-
sel,
|
|
437
|
-
];
|
|
438
|
-
const hit = slotCache.current.get(cluster.row.id);
|
|
439
|
-
const element =
|
|
440
|
-
hit && hit.deps.every((d, i) => Object.is(d, deps[i])) ? (
|
|
441
|
-
hit.element
|
|
442
|
-
) : (
|
|
443
|
-
<TranscriptRowSlot
|
|
444
|
-
key={cluster.row.id}
|
|
445
|
-
eager={eager}
|
|
446
|
-
estimatePx={rowEstimatePx(cluster.row)}
|
|
447
|
-
style={rowCvStyle(cluster.row)}
|
|
448
|
-
stop={stop ?? undefined}
|
|
449
|
-
sel={sel}
|
|
450
|
-
{...props}
|
|
451
|
-
/>
|
|
452
|
-
);
|
|
453
|
-
nextSlotCache.set(cluster.row.id, { deps, element });
|
|
454
|
-
out.push(element);
|
|
455
|
-
return;
|
|
456
|
-
}
|
|
457
|
-
out.push(
|
|
458
|
-
<CvRow
|
|
459
|
-
key={cluster.row.id}
|
|
460
|
-
style={rowCvStyle(cluster.row)}
|
|
461
|
-
data-stop={stop ?? undefined}
|
|
462
|
-
data-sel={sel}
|
|
463
|
-
data-row={cluster.row.id}
|
|
464
|
-
>
|
|
465
|
-
<TranscriptRow {...rowProps(cluster.row)} />
|
|
466
|
-
</CvRow>,
|
|
467
|
-
);
|
|
468
|
-
};
|
|
469
|
-
|
|
470
|
-
list.forEach((cluster, ci) => {
|
|
471
|
-
if (cluster.kind === 'single') {
|
|
472
|
-
renderSingle(cluster, ci);
|
|
473
|
-
// The root walk: the extensions' items for the turns this row ends.
|
|
474
|
-
const ends = lazy && sessionId ? turnEnds?.get(cluster.row.id) : undefined;
|
|
475
|
-
for (const turnId of ends ?? [])
|
|
476
|
-
out.push(
|
|
477
|
-
<ExtensionSlot
|
|
478
|
-
key={`turn-end:${turnId}`}
|
|
479
|
-
at="transcript.turn-end"
|
|
480
|
-
sessionId={sessionId!}
|
|
481
|
-
turnId={turnId}
|
|
482
|
-
className="py-1"
|
|
483
|
-
/>,
|
|
484
|
-
);
|
|
485
|
-
return;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
out.push(renderGroup(cluster, ci));
|
|
489
|
-
});
|
|
490
|
-
if (lazy) slotCache.current = nextSlotCache;
|
|
491
|
-
return out;
|
|
492
|
-
};
|
|
493
|
-
|
|
494
|
-
renderClustersRef.current = renderClusters;
|
|
495
|
-
const rootRows = renderClusters(clusters, true);
|
|
496
|
-
|
|
497
|
-
useTranscriptSelectionCopy(containerRef);
|
|
498
|
-
|
|
499
|
-
return (
|
|
500
|
-
<TranscriptSettling.Provider value={settling}>
|
|
501
|
-
{/* Every row's icon reads it: off, the icon column goes and lines carry what it said. */}
|
|
502
|
-
<RowIconsContext.Provider value={o.showRowIcons}>
|
|
503
|
-
{/* Every reply's ```mermaid fences read it: on, they draw as diagrams. */}
|
|
504
|
-
<MarkdownDiagrams enabled={o.renderDiagrams}>
|
|
505
|
-
{/* The links below were clicked in this session (the extensions' link handlers read it). */}
|
|
506
|
-
<LinkSessionScope sessionId={sessionId}>
|
|
507
|
-
<div ref={containerRef} className={className} style={style}>
|
|
508
|
-
<div className="zg-timeline relative pl-2 pr-1 py-1">
|
|
509
|
-
<SelectCursor selected={selectedTurnId} layout={stops} />
|
|
510
|
-
{rootRows}
|
|
511
|
-
</div>
|
|
512
|
-
{/* The extensions' items naming no turn, once the run has ended (`transcript.turn-end`). */}
|
|
513
|
-
{sessionId && !streaming && events.length > 0 && (
|
|
514
|
-
<ExtensionSlot at="transcript.turn-end" sessionId={sessionId} className="pl-2 pr-1 py-1" />
|
|
515
|
-
)}
|
|
516
|
-
{children}
|
|
517
|
-
</div>
|
|
518
|
-
</LinkSessionScope>
|
|
519
|
-
</MarkdownDiagrams>
|
|
520
|
-
</RowIconsContext.Provider>
|
|
521
|
-
</TranscriptSettling.Provider>
|
|
522
|
-
);
|
|
523
|
-
});
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The agent profile pill of the composer's controls and its menu: every
|
|
3
|
-
* profile offered, the current one checked. The desktop app feeds it its
|
|
4
|
-
* profile catalog and decides what a pick does.
|
|
5
|
-
*
|
|
6
|
-
* - `onChange` returning a promise (a live session being switched) keeps
|
|
7
|
-
* the menu open, rows disabled and "switching…" on the picked one, until
|
|
8
|
-
* it settles, so a slow write doesn't look instant.
|
|
9
|
-
* - `draft` (no session yet): the pick is a default for the next chat; the
|
|
10
|
-
* menu says so.
|
|
11
|
-
*/
|
|
12
|
-
import { useState, type CSSProperties, type ReactNode } from 'react';
|
|
13
|
-
|
|
14
|
-
import { Popover, type PopoverTriggerProps } from '../../components/floating/Popover';
|
|
15
|
-
import type { Align, Side } from '../../components/floating/useAnchoredPosition';
|
|
16
|
-
import { Menu, MenuNote, MenuRow } from '../../components/Menu';
|
|
17
|
-
import { useChatLabels } from '../useChatLabels';
|
|
18
|
-
import { PickerPill } from './PickerPill';
|
|
19
|
-
|
|
20
|
-
/** An agent profile the picker offers. */
|
|
21
|
-
export interface AgentProfile {
|
|
22
|
-
/** Stable profile id. Passed to `onChange` and compared with `value`. */
|
|
23
|
-
id: string;
|
|
24
|
-
/** Name shown in the pill and the menu. */
|
|
25
|
-
label: string;
|
|
26
|
-
/** Short text shown under the label in the menu. */
|
|
27
|
-
description?: string;
|
|
28
|
-
/** A dim note at the end of the profile's menu row (what picking it would cost). */
|
|
29
|
-
hint?: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** Props for {@link AgentPicker}. */
|
|
33
|
-
export interface AgentPickerProps {
|
|
34
|
-
/** The profiles to offer. With none, the picker renders nothing. */
|
|
35
|
-
profiles: readonly AgentProfile[];
|
|
36
|
-
/** The current profile id. */
|
|
37
|
-
value: string;
|
|
38
|
-
/** The profile the pill names when `value` is not offered (a session saved on a removed profile). */
|
|
39
|
-
fallback?: string;
|
|
40
|
-
/** Called with the picked profile id. Return a promise to keep the menu open and show "switching" on the picked row until it settles. */
|
|
41
|
-
onChange(id: string): void | Promise<void>;
|
|
42
|
-
/** No session yet: the pick applies to the next chat. */
|
|
43
|
-
draft?: boolean;
|
|
44
|
-
/** Draws the trigger in place of the pill (a settings row): spread the props onto it. */
|
|
45
|
-
trigger?: (props: PopoverTriggerProps, open: boolean) => ReactNode;
|
|
46
|
-
/**
|
|
47
|
-
* Preferred side of the trigger for the menu. It flips when it does not fit.
|
|
48
|
-
* @default 'top'
|
|
49
|
-
*/
|
|
50
|
-
side?: Side;
|
|
51
|
-
/**
|
|
52
|
-
* How the menu lines up along the trigger's edge.
|
|
53
|
-
* @default 'start'
|
|
54
|
-
*/
|
|
55
|
-
align?: Align;
|
|
56
|
-
/** Called when the menu opens or closes. */
|
|
57
|
-
onOpenChange?: (open: boolean) => void;
|
|
58
|
-
/** Extra classes on the root element (the default trigger pill; ignored with `trigger`). */
|
|
59
|
-
className?: string;
|
|
60
|
-
/** Inline styles on the root element (the default trigger pill; ignored with `trigger`). */
|
|
61
|
-
style?: CSSProperties;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Renders the agent profile pill of the composer controls and its menu, with the current profile checked.
|
|
66
|
-
*
|
|
67
|
-
* @param props - The {@link AgentPickerProps}.
|
|
68
|
-
*/
|
|
69
|
-
export function AgentPicker({
|
|
70
|
-
profiles,
|
|
71
|
-
value,
|
|
72
|
-
fallback,
|
|
73
|
-
onChange,
|
|
74
|
-
draft = false,
|
|
75
|
-
trigger,
|
|
76
|
-
side,
|
|
77
|
-
align,
|
|
78
|
-
onOpenChange,
|
|
79
|
-
className,
|
|
80
|
-
style,
|
|
81
|
-
}: AgentPickerProps) {
|
|
82
|
-
const labels = useChatLabels();
|
|
83
|
-
const [busy, setBusy] = useState<string | null>(null);
|
|
84
|
-
const profile = profiles.find((p) => p.id === value) ?? profiles.find((p) => p.id === fallback);
|
|
85
|
-
|
|
86
|
-
const select = async (id: string, close: () => void) => {
|
|
87
|
-
if (busy) return;
|
|
88
|
-
const pending = onChange(id);
|
|
89
|
-
if (!pending) {
|
|
90
|
-
close();
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
setBusy(id);
|
|
95
|
-
await pending;
|
|
96
|
-
close();
|
|
97
|
-
} finally {
|
|
98
|
-
setBusy(null);
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
if (profiles.length === 0) return null;
|
|
103
|
-
|
|
104
|
-
return (
|
|
105
|
-
<Popover
|
|
106
|
-
ariaLabel={draft ? labels.defaultAgent : labels.switchAgent}
|
|
107
|
-
width={288}
|
|
108
|
-
{...(side ? { side } : {})}
|
|
109
|
-
{...(align ? { align } : {})}
|
|
110
|
-
{...(onOpenChange ? { onOpenChange } : {})}
|
|
111
|
-
trigger={
|
|
112
|
-
trigger ??
|
|
113
|
-
((props) => (
|
|
114
|
-
<PickerPill
|
|
115
|
-
{...props}
|
|
116
|
-
title={draft ? labels.defaultAgent : labels.switchAgent}
|
|
117
|
-
className={className}
|
|
118
|
-
style={style}
|
|
119
|
-
>
|
|
120
|
-
<span className="text-xs font-medium min-w-0 truncate">{profile?.label ?? value}</span>
|
|
121
|
-
</PickerPill>
|
|
122
|
-
))
|
|
123
|
-
}
|
|
124
|
-
>
|
|
125
|
-
{(close) => (
|
|
126
|
-
<Menu aria-label={labels.agentProfiles}>
|
|
127
|
-
{profiles.map((p) => {
|
|
128
|
-
const current = p.id === value;
|
|
129
|
-
return (
|
|
130
|
-
<MenuRow
|
|
131
|
-
key={p.id}
|
|
132
|
-
size="lg"
|
|
133
|
-
role="menuitemradio"
|
|
134
|
-
aria-checked={current}
|
|
135
|
-
checked={current}
|
|
136
|
-
title={p.label}
|
|
137
|
-
description={p.description}
|
|
138
|
-
trailing={
|
|
139
|
-
busy === p.id ? (
|
|
140
|
-
<span className="zg-meta">{labels.switchingAgent}</span>
|
|
141
|
-
) : p.hint ? (
|
|
142
|
-
<span className="zg-meta">{p.hint}</span>
|
|
143
|
-
) : undefined
|
|
144
|
-
}
|
|
145
|
-
disabled={busy !== null}
|
|
146
|
-
onClick={() => void select(p.id, close)}
|
|
147
|
-
/>
|
|
148
|
-
);
|
|
149
|
-
})}
|
|
150
|
-
{draft && <MenuNote icon="i-ph-info">{labels.agentDraftNote}</MenuNote>}
|
|
151
|
-
</Menu>
|
|
152
|
-
)}
|
|
153
|
-
</Popover>
|
|
154
|
-
);
|
|
155
|
-
}
|