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,666 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a sidebar row says about its session beyond the title, from the
|
|
3
|
-
* app's live signals:
|
|
4
|
-
*
|
|
5
|
-
* - the status dot: this window's run and pending asks, the run that ended
|
|
6
|
-
* while the session was not open, and the daemon's presence;
|
|
7
|
-
* - line 1, trailing: while a run goes, what it is doing (thinking,
|
|
8
|
-
* writing, the tool call in the transcript's words) under a shimmer and
|
|
9
|
-
* for how long; "Needs you" while it waits on an approval or a question;
|
|
10
|
-
* at rest, how long ago it was active;
|
|
11
|
-
* - line 2, when the session has some: the remote host, the project (a
|
|
12
|
-
* favorite), the environment, then one badge per artifact kind that
|
|
13
|
-
* gives one (commits, pull requests, extension kinds), each with a card
|
|
14
|
-
* listing the artifacts behind it.
|
|
15
|
-
*
|
|
16
|
-
* Numbers roll when they change, a badge whose kind grew pops and sweeps
|
|
17
|
-
* the row once, and line 2 grows in the first time.
|
|
18
|
-
*
|
|
19
|
-
* Where those signals come from is the app's: hand its hooks and stores to
|
|
20
|
-
* {@link createSidebarLive} once, at module scope, as for `createPaletteRows`.
|
|
21
|
-
*/
|
|
22
|
-
import {
|
|
23
|
-
memo,
|
|
24
|
-
useCallback,
|
|
25
|
-
useEffect,
|
|
26
|
-
useMemo,
|
|
27
|
-
useReducer,
|
|
28
|
-
useState,
|
|
29
|
-
type MouseEvent,
|
|
30
|
-
type NamedExoticComponent,
|
|
31
|
-
type ReactNode,
|
|
32
|
-
} from 'react';
|
|
33
|
-
import {
|
|
34
|
-
sessionBadgeTarget,
|
|
35
|
-
type ExtensionSessionBadge,
|
|
36
|
-
type ExtensionSessionBadgeCardRow,
|
|
37
|
-
type RunEstimateView,
|
|
38
|
-
type SessionBadgeEntry,
|
|
39
|
-
} from 'zidane/chat/pure';
|
|
40
|
-
import type { SessionEnvironmentSummary } from 'zidane/chat';
|
|
41
|
-
|
|
42
|
-
import { HoverCard, type HoverCardTriggerProps } from '../../components/floating/HoverCard';
|
|
43
|
-
import { useLinkRouter } from '../../extensions/links';
|
|
44
|
-
import { useMinuteTick } from '../../hooks/useMinuteTick';
|
|
45
|
-
import { RollingText } from '../../motion/roll';
|
|
46
|
-
import { syncShimmer } from '../../motion/shimmer';
|
|
47
|
-
import { HeldWidth } from '../../motion/size';
|
|
48
|
-
import { Crossfade, useCadencedValue } from '../../motion/swap';
|
|
49
|
-
import type { SessionPresence } from '../../machines/headless/presence';
|
|
50
|
-
import { badgeColorStyle, badgeToneClass } from '../../session/ArtifactRowChips';
|
|
51
|
-
import { HostBadge } from '../HostBadge';
|
|
52
|
-
import { StatusDot, type SessionDotState } from '../StatusDot';
|
|
53
|
-
import type { HostView } from '../headless/hosts';
|
|
54
|
-
import { formatElapsedShort, relativeTime } from '../headless/session-list';
|
|
55
|
-
import { activityLabel, type SessionActivityStore } from '../headless/sidebar/activity';
|
|
56
|
-
import type { RunEstimatesStore } from '../headless/sidebar/estimates';
|
|
57
|
-
import type { SessionBadgesEntry, SessionBadgesStore } from '../headless/sidebar/badges';
|
|
58
|
-
import { deriveDotState } from '../headless/sidebar/dot-state';
|
|
59
|
-
import { RunEstimateChip, useRunEstimate } from '../RunEstimateChip';
|
|
60
|
-
import { useBadgeMenu } from '../transcript/BadgeMenu';
|
|
61
|
-
import { useChatLabels } from '../useChatLabels';
|
|
62
|
-
import { EnvironmentChip, ProjectChip, type RowProject } from './RowChips';
|
|
63
|
-
import { useSessionActivity } from './useSessionActivity';
|
|
64
|
-
import { useSessionBadges } from './useSessionBadges';
|
|
65
|
-
import { useSidebarLabels } from './useSidebarLabels';
|
|
66
|
-
|
|
67
|
-
/** A state shows at least this long, so a quick tool call does not flicker by. */
|
|
68
|
-
const STATE_HOLD_MS = 500;
|
|
69
|
-
/** How long a new commit or pull request reads as new (the badge pop, the row sweep). */
|
|
70
|
-
export const ARRIVAL_MS = 1600;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* True while `at` (an arrival stamp, `Date.now()`; 0 for none) is under `ARRIVAL_MS` old. Read from the
|
|
74
|
-
* clock at render, so it is already true on the render that brings the arrival; a timer re-renders once it
|
|
75
|
-
* is over.
|
|
76
|
-
*
|
|
77
|
-
* @param at - The arrival stamp.
|
|
78
|
-
*/
|
|
79
|
-
export function useArrival(at: number): boolean {
|
|
80
|
-
const [, expire] = useReducer((n: number) => n + 1, 0);
|
|
81
|
-
useEffect(() => {
|
|
82
|
-
const left = ARRIVAL_MS - (Date.now() - at);
|
|
83
|
-
if (left <= 0) return undefined;
|
|
84
|
-
const t = window.setTimeout(expire, left);
|
|
85
|
-
return () => window.clearTimeout(t);
|
|
86
|
-
}, [at]);
|
|
87
|
-
// eslint-disable-next-line react-hooks/purity -- read at render so the arrival shows on the render that brings it
|
|
88
|
-
return Date.now() - at < ARRIVAL_MS;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/** Where a badge's panel opens: the badge's kind and, for one row of its card, that artifact. */
|
|
92
|
-
export interface SidebarBadgeFocus {
|
|
93
|
-
/** The badge's artifact kind. */
|
|
94
|
-
kind: string;
|
|
95
|
-
/** One artifact of it. */
|
|
96
|
-
uri?: string;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** The app's live signals the rows read. Each `use…` member is a hook, called once per row that needs it. */
|
|
100
|
-
export interface SidebarLiveOptions {
|
|
101
|
-
/** Whether this window sees the session's run going. */
|
|
102
|
-
useRunning: (sessionId: string) => boolean;
|
|
103
|
-
/** The run's elapsed seconds, ticking every `intervalMs` while `live`. */
|
|
104
|
-
useRunElapsedSec: (sessionId: string, live: boolean, intervalMs: number) => number;
|
|
105
|
-
/** An approval, plan or question of this window waits on the user. Absent: never. */
|
|
106
|
-
usePending?: (sessionId: string) => boolean;
|
|
107
|
-
/** How the run that ended while the session was not open ended. Absent: never. */
|
|
108
|
-
useNotification?: (sessionId: string) => 'completed' | 'error' | null;
|
|
109
|
-
/** The daemon's presence for the session. Absent: none. */
|
|
110
|
-
usePresence?: (sessionId: string) => Pick<SessionPresence, 'attention' | 'running' | 'windows'> | null;
|
|
111
|
-
/** A remote host by id, for its chip. Absent: no host chip. */
|
|
112
|
-
useHost?: (hostId: string | undefined) => HostView | undefined;
|
|
113
|
-
/** What each session's run is doing (`createSessionActivity`). */
|
|
114
|
-
activity: SessionActivityStore;
|
|
115
|
-
/** How long each session's run has left (`createRunEstimates`): shown instead of the elapsed time while known. Absent: the elapsed time. */
|
|
116
|
-
estimates?: RunEstimatesStore;
|
|
117
|
-
/** Each session's artifact badges (`createSessionBadges`). */
|
|
118
|
-
badges: SessionBadgesStore;
|
|
119
|
-
/** Opens a badge's panel (`badge.panel`, else the app's default) focused on it. Absent: a badge click only selects the row. */
|
|
120
|
-
openBadge?: (sessionId: string, panel: string | undefined, focus: SidebarBadgeFocus) => void;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/** Props of the trailing slot ({@link SidebarLive.RowMeta}). */
|
|
124
|
-
export interface SidebarRowMetaProps {
|
|
125
|
-
/** The session. */
|
|
126
|
-
sessionId: string;
|
|
127
|
-
/** Its last activity (ms). */
|
|
128
|
-
updatedAt: number;
|
|
129
|
-
/** Run details on: what the run does; off: "Working". */
|
|
130
|
-
details: boolean;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** Props of the badge line ({@link SidebarLive.RowArtifacts}). */
|
|
134
|
-
export interface SidebarRowArtifactsProps {
|
|
135
|
-
/** The session. */
|
|
136
|
-
sessionId: string;
|
|
137
|
-
/** Read and show its artifact badges (run details and artifacts on). */
|
|
138
|
-
enabled: boolean;
|
|
139
|
-
/** Hears whether a badge just arrived (the row sweeps). */
|
|
140
|
-
onArrival: (fresh: boolean) => void;
|
|
141
|
-
/** Selects the row (a badge click opens the chat too). */
|
|
142
|
-
onSelect?: (sessionId: string) => void;
|
|
143
|
-
/** The chat's folder: which extensions' badge actions apply. */
|
|
144
|
-
cwd?: string;
|
|
145
|
-
/** A remote host's session: its name leads the line, whatever `enabled` says. */
|
|
146
|
-
hostId?: string;
|
|
147
|
-
/** Shown first, whatever `enabled` says (it is not an artifact). */
|
|
148
|
-
project?: RowProject;
|
|
149
|
-
/** Where the session runs when not here, after the project (not an artifact either). */
|
|
150
|
-
environment?: SessionEnvironmentSummary;
|
|
151
|
-
/**
|
|
152
|
-
* Where a badge's card opens: beside the row, top-aligned with it (`'beside'`, the sidebar: never over the
|
|
153
|
-
* rows below), or under the badge itself (`'below'`, a wide list where the row's edge is far away).
|
|
154
|
-
* @default 'beside'
|
|
155
|
-
*/
|
|
156
|
-
cards?: BadgeCardPlacement;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/** Where a row badge's card opens ({@link SidebarRowArtifactsProps.cards}). */
|
|
160
|
-
export type BadgeCardPlacement = 'beside' | 'below';
|
|
161
|
-
|
|
162
|
-
/** The live row parts {@link createSidebarLive} returns. */
|
|
163
|
-
export interface SidebarLive {
|
|
164
|
-
/** A session's dot state (a hook). */
|
|
165
|
-
useSessionDotState: (sessionId: string) => SessionDotState;
|
|
166
|
-
/** A session's live dot; `override` forces a state (previews). */
|
|
167
|
-
SessionStatusDot: NamedExoticComponent<{ sessionId: string; override?: SessionDotState }>;
|
|
168
|
-
/** Line 1's trailing slot. */
|
|
169
|
-
RowMeta: NamedExoticComponent<SidebarRowMetaProps>;
|
|
170
|
-
/** Line 2: the badges, when the session has some. */
|
|
171
|
-
RowArtifacts: NamedExoticComponent<SidebarRowArtifactsProps>;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const never = (): false => false;
|
|
175
|
-
const none = (): null => null;
|
|
176
|
-
const noHost = (): undefined => undefined;
|
|
177
|
-
|
|
178
|
-
/** Open what a badge (or one row of its card) stands for: its panel, or with ⌘ / ctrl its link. */
|
|
179
|
-
type OpenBadge = (event: MouseEvent, target: { uri?: string; href?: string }) => void;
|
|
180
|
-
/** Right-click: the badge menu for the badge, or for one row of its card. */
|
|
181
|
-
type MenuBadge = (event: MouseEvent, row?: ExtensionSessionBadgeCardRow) => void;
|
|
182
|
-
|
|
183
|
-
/** How long ago `at` was, kept current by the shared minute tick (its own component: the tick re-renders this text only). */
|
|
184
|
-
function Ago({ at, className }: { at: number; className: string }) {
|
|
185
|
-
useMinuteTick();
|
|
186
|
-
// eslint-disable-next-line react-hooks/purity -- the minute tick re-renders it
|
|
187
|
-
return <span className={className}>{relativeTime(at, Date.now())}</span>;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/** A number in the badge text that rolls when it changes: the text around the first occurrence of `count`. */
|
|
191
|
-
function BadgeText({ badge }: { badge: ExtensionSessionBadge }) {
|
|
192
|
-
const at = badge.count !== undefined ? badge.text.indexOf(String(badge.count)) : -1;
|
|
193
|
-
if (badge.count === undefined || at === -1) return <span>{badge.text}</span>;
|
|
194
|
-
const n = String(badge.count);
|
|
195
|
-
return (
|
|
196
|
-
<span className="inline-flex items-baseline whitespace-pre">
|
|
197
|
-
{badge.text.slice(0, at)}
|
|
198
|
-
<RollingText text={n} value={badge.count} />
|
|
199
|
-
{badge.text.slice(at + n.length)}
|
|
200
|
-
</span>
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
function BadgeChip({
|
|
205
|
-
badge,
|
|
206
|
-
fresh,
|
|
207
|
-
testId,
|
|
208
|
-
triggerProps,
|
|
209
|
-
onOpen,
|
|
210
|
-
onMenu,
|
|
211
|
-
}: {
|
|
212
|
-
badge: ExtensionSessionBadge;
|
|
213
|
-
fresh: boolean;
|
|
214
|
-
testId: string;
|
|
215
|
-
triggerProps?: HoverCardTriggerProps;
|
|
216
|
-
onOpen: OpenBadge;
|
|
217
|
-
onMenu?: MenuBadge;
|
|
218
|
-
}) {
|
|
219
|
-
return (
|
|
220
|
-
// Inside the row's select button: the badge selects the chat itself, then opens its panel.
|
|
221
|
-
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
|
|
222
|
-
<span
|
|
223
|
-
{...triggerProps}
|
|
224
|
-
data-testid={testId}
|
|
225
|
-
data-fresh={fresh ? '' : undefined}
|
|
226
|
-
title={badge.card ? undefined : badge.title}
|
|
227
|
-
onClick={(e) => onOpen(e, badge.href ? { href: badge.href } : {})}
|
|
228
|
-
onContextMenu={onMenu ? (e) => onMenu(e) : undefined}
|
|
229
|
-
className="zg-row-badge zg-meta inline-flex items-center gap-1 h-[18px] px-1.5 rounded-zg-sm whitespace-nowrap cursor-pointer"
|
|
230
|
-
>
|
|
231
|
-
{badge.icon?.gui && (
|
|
232
|
-
<span
|
|
233
|
-
aria-hidden
|
|
234
|
-
className={`${badge.icon.gui} text-zg-meta ${badgeToneClass(badge.tone)}`}
|
|
235
|
-
style={badgeColorStyle(badge.color)}
|
|
236
|
-
/>
|
|
237
|
-
)}
|
|
238
|
-
<BadgeText badge={badge} />
|
|
239
|
-
{badge.detail && (
|
|
240
|
-
<span data-testid={`${testId}-detail`} className="min-w-0 max-w-[16ch] truncate text-[var(--zg-text-subtle)]">
|
|
241
|
-
{badge.detail}
|
|
242
|
-
</span>
|
|
243
|
-
)}
|
|
244
|
-
{badge.more !== undefined && badge.more > 0 && (
|
|
245
|
-
<span className="inline-flex items-baseline text-[var(--zg-text-subtle)]">
|
|
246
|
-
+<RollingText text={String(badge.more)} value={badge.more} />
|
|
247
|
-
</span>
|
|
248
|
-
)}
|
|
249
|
-
</span>
|
|
250
|
-
);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
function CardList({ title, count, children }: { title: string; count: number; children: ReactNode }) {
|
|
254
|
-
return (
|
|
255
|
-
<div className="flex flex-col py-1 max-h-[320px]">
|
|
256
|
-
<div className="flex items-baseline justify-between px-3 pt-1.5 pb-1">
|
|
257
|
-
<span className="zg-section-label">{title}</span>
|
|
258
|
-
<span className="zg-meta">{count}</span>
|
|
259
|
-
</div>
|
|
260
|
-
<ul className="m-0 p-1 list-none overflow-y-auto">{children}</ul>
|
|
261
|
-
</div>
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/** One line of a card: opens the badge's panel on it; a link (⌘ / ctrl-click) when the artifact has one. */
|
|
266
|
-
function CardRow({
|
|
267
|
-
row,
|
|
268
|
-
onOpen,
|
|
269
|
-
onMenu,
|
|
270
|
-
}: {
|
|
271
|
-
row: ExtensionSessionBadgeCardRow;
|
|
272
|
-
onOpen: OpenBadge;
|
|
273
|
-
onMenu?: MenuBadge;
|
|
274
|
-
}) {
|
|
275
|
-
const onContextMenu = onMenu ? (e: MouseEvent) => onMenu(e, row) : undefined;
|
|
276
|
-
const className =
|
|
277
|
-
'flex items-baseline gap-2 min-w-0 px-2 py-1.5 rounded-zg-md text-zg-label leading-4 text-[var(--zg-text)] no-underline';
|
|
278
|
-
const body = (
|
|
279
|
-
<>
|
|
280
|
-
{row.icon?.gui && (
|
|
281
|
-
<span
|
|
282
|
-
aria-hidden
|
|
283
|
-
className={`${row.icon.gui} shrink-0 text-zg-label translate-y-[2px] ${badgeToneClass(row.tone)}`}
|
|
284
|
-
style={badgeColorStyle(row.color)}
|
|
285
|
-
/>
|
|
286
|
-
)}
|
|
287
|
-
{row.lead && (
|
|
288
|
-
<span className={`zg-meta shrink-0 ${row.icon?.gui ? '' : badgeToneClass(row.tone)}`}>{row.lead}</span>
|
|
289
|
-
)}
|
|
290
|
-
<span className="min-w-0 flex-1 truncate">{row.title}</span>
|
|
291
|
-
{row.trailing && <span className="zg-meta shrink-0 max-w-[7rem] truncate">{row.trailing}</span>}
|
|
292
|
-
</>
|
|
293
|
-
);
|
|
294
|
-
return (
|
|
295
|
-
<li>
|
|
296
|
-
{row.href ? (
|
|
297
|
-
<a
|
|
298
|
-
href={row.href}
|
|
299
|
-
target="_blank"
|
|
300
|
-
rel="noreferrer"
|
|
301
|
-
className={`${className} hover:bg-[var(--zg-row-hover)]`}
|
|
302
|
-
onClick={(e) => onOpen(e, { ...(row.uri ? { uri: row.uri } : {}), href: row.href! })}
|
|
303
|
-
onContextMenu={onContextMenu}
|
|
304
|
-
>
|
|
305
|
-
{body}
|
|
306
|
-
</a>
|
|
307
|
-
) : (
|
|
308
|
-
<button
|
|
309
|
-
type="button"
|
|
310
|
-
className={`${className} w-full text-left bg-transparent border-0 cursor-pointer hover:bg-[var(--zg-row-hover)]`}
|
|
311
|
-
onClick={(e) => onOpen(e, row.uri ? { uri: row.uri } : {})}
|
|
312
|
-
onContextMenu={onContextMenu}
|
|
313
|
-
>
|
|
314
|
-
{body}
|
|
315
|
-
</button>
|
|
316
|
-
)}
|
|
317
|
-
</li>
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/** A badge's sidebar row, which its card is positioned against. */
|
|
322
|
-
function rowOf(trigger: HTMLElement): HTMLElement | null {
|
|
323
|
-
return trigger.closest<HTMLElement>('[data-session-id]');
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
function SessionBadge({
|
|
327
|
-
entry,
|
|
328
|
-
grewAt,
|
|
329
|
-
cards,
|
|
330
|
-
onOpen: open,
|
|
331
|
-
onMenu: menu,
|
|
332
|
-
}: {
|
|
333
|
-
entry: SessionBadgeEntry;
|
|
334
|
-
grewAt: number;
|
|
335
|
-
cards: BadgeCardPlacement;
|
|
336
|
-
onOpen: (entry: SessionBadgeEntry, uri?: string) => void;
|
|
337
|
-
onMenu?: (event: MouseEvent, entry: SessionBadgeEntry, row?: ExtensionSessionBadgeCardRow) => void;
|
|
338
|
-
}) {
|
|
339
|
-
const onMenu: MenuBadge | undefined = menu ? (event, row) => menu(event, entry, row) : undefined;
|
|
340
|
-
const fresh = useArrival(grewAt);
|
|
341
|
-
const links = useLinkRouter();
|
|
342
|
-
const { badge } = entry;
|
|
343
|
-
const testId = `row-badge-${entry.kind}`;
|
|
344
|
-
const onOpen: OpenBadge = (event, target) => {
|
|
345
|
-
event.stopPropagation();
|
|
346
|
-
if ((event.metaKey || event.ctrlKey) && target.href) {
|
|
347
|
-
event.preventDefault();
|
|
348
|
-
void links.open(target.href, { source: 'badge', event });
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
event.preventDefault();
|
|
352
|
-
open(entry, target.uri);
|
|
353
|
-
};
|
|
354
|
-
if (!badge.card || badge.card.rows.length === 0)
|
|
355
|
-
return <BadgeChip badge={badge} fresh={fresh} testId={testId} onOpen={onOpen} {...(onMenu ? { onMenu } : {})} />;
|
|
356
|
-
const card = badge.card;
|
|
357
|
-
return (
|
|
358
|
-
<HoverCard
|
|
359
|
-
ariaLabel={card.title}
|
|
360
|
-
testId={`${testId}-card`}
|
|
361
|
-
width={340}
|
|
362
|
-
// Beside the sidebar, top-aligned with the row: never over the rows below. In a wide list: under the badge.
|
|
363
|
-
side={cards === 'below' ? 'bottom' : 'right'}
|
|
364
|
-
align="start"
|
|
365
|
-
{...(cards === 'below' ? {} : { anchorTo: rowOf })}
|
|
366
|
-
trigger={(props) => (
|
|
367
|
-
<BadgeChip
|
|
368
|
-
badge={badge}
|
|
369
|
-
fresh={fresh}
|
|
370
|
-
testId={testId}
|
|
371
|
-
triggerProps={props}
|
|
372
|
-
onOpen={onOpen}
|
|
373
|
-
{...(onMenu ? { onMenu } : {})}
|
|
374
|
-
/>
|
|
375
|
-
)}
|
|
376
|
-
>
|
|
377
|
-
<CardList title={card.title} count={card.rows.length}>
|
|
378
|
-
{card.rows.map((row, i) => (
|
|
379
|
-
<CardRow
|
|
380
|
-
key={`${i}:${row.lead ?? ''}:${row.title}`}
|
|
381
|
-
row={row}
|
|
382
|
-
onOpen={onOpen}
|
|
383
|
-
{...(onMenu ? { onMenu } : {})}
|
|
384
|
-
/>
|
|
385
|
-
))}
|
|
386
|
-
</CardList>
|
|
387
|
-
</HoverCard>
|
|
388
|
-
);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* The badges' line, mounted when the session has some. It grows open when it mounts for an arrival (the
|
|
393
|
-
* first badge coming in while the row is on screen); a session that already had some shows them at once.
|
|
394
|
-
*/
|
|
395
|
-
function BadgeLine({
|
|
396
|
-
entry,
|
|
397
|
-
host,
|
|
398
|
-
project,
|
|
399
|
-
environment,
|
|
400
|
-
fresh,
|
|
401
|
-
cards,
|
|
402
|
-
onOpen,
|
|
403
|
-
onMenu,
|
|
404
|
-
}: {
|
|
405
|
-
cards: BadgeCardPlacement;
|
|
406
|
-
entry: SessionBadgesEntry | null;
|
|
407
|
-
host: HostView | undefined;
|
|
408
|
-
project: RowProject | undefined;
|
|
409
|
-
environment: SessionEnvironmentSummary | undefined;
|
|
410
|
-
fresh: boolean;
|
|
411
|
-
onOpen: (entry: SessionBadgeEntry, uri?: string) => void;
|
|
412
|
-
onMenu?: (event: MouseEvent, entry: SessionBadgeEntry, row?: ExtensionSessionBadgeCardRow) => void;
|
|
413
|
-
}) {
|
|
414
|
-
const [growIn] = useState(fresh);
|
|
415
|
-
return (
|
|
416
|
-
<div className="zg-row-extra" data-grow={growIn ? '' : undefined}>
|
|
417
|
-
{/*
|
|
418
|
-
* One line of badges that scrolls sideways when they outgrow the row (a
|
|
419
|
-
* trackpad swipe, or shift + wheel; the list keeps the plain wheel). No
|
|
420
|
-
* scrollbar: an edge fades while there is more past it.
|
|
421
|
-
*/}
|
|
422
|
-
<div className="zg-badge-strip zg-no-scrollbar zg-scroll-fade-x pt-1" data-testid="row-artifacts">
|
|
423
|
-
{host && <HostBadge host={host} icon />}
|
|
424
|
-
{project && <ProjectChip project={project} />}
|
|
425
|
-
<EnvironmentChip environment={environment} />
|
|
426
|
-
{entry?.badges.map((b) => (
|
|
427
|
-
<SessionBadge
|
|
428
|
-
key={b.kind}
|
|
429
|
-
entry={b}
|
|
430
|
-
grewAt={entry.grewAt[b.kind] ?? 0}
|
|
431
|
-
cards={cards}
|
|
432
|
-
onOpen={onOpen}
|
|
433
|
-
{...(onMenu ? { onMenu } : {})}
|
|
434
|
-
/>
|
|
435
|
-
))}
|
|
436
|
-
</div>
|
|
437
|
-
</div>
|
|
438
|
-
);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* Builds the sidebar rows' live parts over the app's signals. Call it once, at module scope: the returned
|
|
443
|
-
* components keep their identity, so the rows' memo holds.
|
|
444
|
-
*
|
|
445
|
-
* @param options - The app's hooks and stores.
|
|
446
|
-
*/
|
|
447
|
-
export function createSidebarLive(options: SidebarLiveOptions): SidebarLive {
|
|
448
|
-
const {
|
|
449
|
-
useRunning,
|
|
450
|
-
useRunElapsedSec,
|
|
451
|
-
activity: activityStore,
|
|
452
|
-
badges: badgesStore,
|
|
453
|
-
openBadge,
|
|
454
|
-
estimates: estimatesStore,
|
|
455
|
-
} = options;
|
|
456
|
-
const usePending = options.usePending ?? never;
|
|
457
|
-
const useNotification = options.useNotification ?? none;
|
|
458
|
-
const usePresence = options.usePresence ?? none;
|
|
459
|
-
const useHost = options.useHost ?? noHost;
|
|
460
|
-
|
|
461
|
-
/** Each session's last elapsed second while its run clock ran (`Elapsed`). */
|
|
462
|
-
const lastElapsed = new Map<string, number>();
|
|
463
|
-
|
|
464
|
-
function useSessionDotState(sessionId: string): SessionDotState {
|
|
465
|
-
const running = useRunning(sessionId);
|
|
466
|
-
const pending = usePending(sessionId);
|
|
467
|
-
const notification = useNotification(sessionId);
|
|
468
|
-
const presence = usePresence(sessionId);
|
|
469
|
-
return deriveDotState({ pending, running, notification, presence });
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
function SessionStatusDotInner({ sessionId, override }: { sessionId: string; override?: SessionDotState }) {
|
|
473
|
-
const live = useSessionDotState(sessionId);
|
|
474
|
-
return <StatusDot state={override ?? live} />;
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
/**
|
|
478
|
-
* The elapsed time on its own, so its ticks re-render only this text (once a second: the row never shows
|
|
479
|
-
* less). Holds its last value once the run's clock stops: the line fading out at run end reads `12s`.
|
|
480
|
-
*/
|
|
481
|
-
function Elapsed({ sessionId }: { sessionId: string }) {
|
|
482
|
-
// The session's own state, not "rendered, so running": the copy fading out
|
|
483
|
-
// at run end mounts after the run ended, and must not start its clock again.
|
|
484
|
-
const live = useRunning(sessionId);
|
|
485
|
-
const elapsed = useRunElapsedSec(sessionId, live, 1000);
|
|
486
|
-
// Per session, not per instance: the fading copy is a fresh mount.
|
|
487
|
-
if (live) lastElapsed.set(sessionId, elapsed);
|
|
488
|
-
const shown = live ? elapsed : (lastElapsed.get(sessionId) ?? elapsed);
|
|
489
|
-
return (
|
|
490
|
-
<RollingText
|
|
491
|
-
text={formatElapsedShort(shown)}
|
|
492
|
-
value={shown}
|
|
493
|
-
className="zg-meta shrink-0 text-[var(--zg-text-subtle)]"
|
|
494
|
-
/>
|
|
495
|
-
);
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
/** The session's own run's estimate, while the host estimated it (`undefined` without an estimates store). */
|
|
499
|
-
function useSessionEstimate(sessionId: string): RunEstimateView | undefined {
|
|
500
|
-
return useRunEstimate(estimatesStore ? sessionId : undefined, undefined, estimatesStore);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
/** The run's time: what it has left while the host estimated it, else how long it has gone. */
|
|
504
|
-
function RunTime({ sessionId }: { sessionId: string }) {
|
|
505
|
-
const estimate = useSessionEstimate(sessionId);
|
|
506
|
-
return estimate ? <EstimateChip estimate={estimate} /> : <Elapsed sessionId={sessionId} />;
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
/**
|
|
510
|
-
* The estimate chip. Its tooltip says how long the run has gone, read from the run's start when the
|
|
511
|
-
* tooltip shows: the row renders when the chip's text changes, not every second.
|
|
512
|
-
*/
|
|
513
|
-
function EstimateChip({ estimate }: { estimate: RunEstimateView }) {
|
|
514
|
-
const labels = useChatLabels();
|
|
515
|
-
const { startedAt } = estimate;
|
|
516
|
-
const detail = useCallback(
|
|
517
|
-
() => labels.runningFor(formatElapsedShort(Math.max(0, Math.floor((Date.now() - startedAt) / 1000)))),
|
|
518
|
-
[labels, startedAt],
|
|
519
|
-
);
|
|
520
|
-
return <RunEstimateChip estimate={estimate} detail={detail} />;
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
/**
|
|
524
|
-
* The trailing slot as it was before run details: an accent dot and "Working" (and the time left, while
|
|
525
|
-
* the host estimated the run), else the relative time.
|
|
526
|
-
*/
|
|
527
|
-
function PlainMeta({ sessionId, running, updatedAt }: { sessionId: string; running: boolean; updatedAt: number }) {
|
|
528
|
-
const labels = useSidebarLabels();
|
|
529
|
-
const estimate = useSessionEstimate(sessionId);
|
|
530
|
-
return running ? (
|
|
531
|
-
// `items-baseline` with a `self-center` dot: the label supplies the baseline the row aligns on.
|
|
532
|
-
<span className="zg-row-meta shrink-0 inline-flex items-baseline gap-1 text-zg-meta leading-4 font-medium text-[var(--zg-accent)]">
|
|
533
|
-
<span aria-hidden className="self-center w-1.5 h-1.5 rounded-full bg-[var(--zg-accent)]" />
|
|
534
|
-
{labels.rowWorking}
|
|
535
|
-
{estimate && <EstimateChip estimate={estimate} />}
|
|
536
|
-
</span>
|
|
537
|
-
) : (
|
|
538
|
-
<Ago at={updatedAt} className="zg-row-meta zg-meta shrink-0 leading-4" />
|
|
539
|
-
);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
function LiveMeta({ sessionId, running, updatedAt }: { sessionId: string; running: boolean; updatedAt: number }) {
|
|
543
|
-
const labels = useSidebarLabels();
|
|
544
|
-
const dot = useSessionDotState(sessionId);
|
|
545
|
-
const activity = useSessionActivity(activityStore, sessionId);
|
|
546
|
-
const needsYou = dot === 'pending' || dot === 'attention';
|
|
547
|
-
// Shown only while the session runs: an entry whose run end this window missed says nothing.
|
|
548
|
-
// A compaction on its own (`/compact`) is the one state outside a run.
|
|
549
|
-
const compacting = !running && activity?.phase === 'compacting' && !activity.run;
|
|
550
|
-
const live = running || compacting;
|
|
551
|
-
// One object per activity, held together: the tooltip always names what the label says.
|
|
552
|
-
const label = useMemo(
|
|
553
|
-
() => (activity ? activityLabel(activity, labels) : { text: labels.rowRunning }),
|
|
554
|
-
[activity, labels],
|
|
555
|
-
);
|
|
556
|
-
const shown = useCadencedValue<{ text: string; title?: string }>(label, STATE_HOLD_MS);
|
|
557
|
-
const mode = needsYou ? 'needs' : live ? 'live' : 'idle';
|
|
558
|
-
|
|
559
|
-
return (
|
|
560
|
-
/*
|
|
561
|
-
* The slot holds its width while a mode lasts (`HeldWidth`): a label
|
|
562
|
-
* changing every half second never moves the title beside it, and a
|
|
563
|
-
* longer one makes room by easing, not snapping. Both crossfades hold
|
|
564
|
-
* to the right edge, so the line on show stays put as the outgoing one
|
|
565
|
-
* leaves. The label truncates at its cap; the elapsed time stays whole.
|
|
566
|
-
*/
|
|
567
|
-
<span className="zg-row-meta min-w-0 inline-flex justify-end">
|
|
568
|
-
<HeldWidth holdKey={mode}>
|
|
569
|
-
<Crossfade activeKey={mode} variant="text" align="end" className="min-w-0">
|
|
570
|
-
{mode === 'needs' ? (
|
|
571
|
-
<span className="text-zg-meta leading-4 font-medium text-zg-warn" data-testid="row-state">
|
|
572
|
-
{labels.rowNeedsYou}
|
|
573
|
-
</span>
|
|
574
|
-
) : mode === 'live' ? (
|
|
575
|
-
<span className="inline-flex items-baseline gap-1.5 min-w-0 text-zg-meta leading-4" title={shown.title}>
|
|
576
|
-
<Crossfade activeKey={shown.text} variant="text" align="end" settle className="min-w-0 max-w-[8.5rem]">
|
|
577
|
-
<span ref={syncShimmer} className="zg-shimmer block truncate font-medium" data-testid="row-state">
|
|
578
|
-
{shown.text}
|
|
579
|
-
</span>
|
|
580
|
-
</Crossfade>
|
|
581
|
-
{running && <RunTime sessionId={sessionId} />}
|
|
582
|
-
</span>
|
|
583
|
-
) : (
|
|
584
|
-
<Ago at={updatedAt} className="zg-meta leading-4" />
|
|
585
|
-
)}
|
|
586
|
-
</Crossfade>
|
|
587
|
-
</HeldWidth>
|
|
588
|
-
</span>
|
|
589
|
-
);
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
/**
|
|
593
|
-
* Line 1's trailing slot. With run details (the default), what the run is doing and for how long, or
|
|
594
|
-
* "Needs you"; without, "Working". Fades out on hover / focus-within (`.zg-row-meta`) so it never fights
|
|
595
|
-
* the 3-dots trigger.
|
|
596
|
-
*/
|
|
597
|
-
function RowMetaInner({ sessionId, updatedAt, details }: SidebarRowMetaProps) {
|
|
598
|
-
const running = useRunning(sessionId);
|
|
599
|
-
return details ? (
|
|
600
|
-
<LiveMeta sessionId={sessionId} running={running} updatedAt={updatedAt} />
|
|
601
|
-
) : (
|
|
602
|
-
<PlainMeta sessionId={sessionId} running={running} updatedAt={updatedAt} />
|
|
603
|
-
);
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
/**
|
|
607
|
-
* Line 2: the session's badges (commits, pull requests, extension kinds), when it has some. A badge click
|
|
608
|
-
* selects the chat (`onSelect`) and opens the badge's panel focused on it.
|
|
609
|
-
*/
|
|
610
|
-
function RowArtifactsInner({
|
|
611
|
-
sessionId,
|
|
612
|
-
enabled,
|
|
613
|
-
onArrival,
|
|
614
|
-
onSelect,
|
|
615
|
-
cwd,
|
|
616
|
-
hostId,
|
|
617
|
-
project,
|
|
618
|
-
environment,
|
|
619
|
-
cards = 'beside',
|
|
620
|
-
}: SidebarRowArtifactsProps) {
|
|
621
|
-
const openMenu = useBadgeMenu();
|
|
622
|
-
const host = useHost(hostId);
|
|
623
|
-
const server = hostId && host?.kind === 'server' ? host : undefined;
|
|
624
|
-
const onMenu = useMemo(
|
|
625
|
-
() =>
|
|
626
|
-
openMenu
|
|
627
|
-
? (event: MouseEvent, badge: SessionBadgeEntry, row?: ExtensionSessionBadgeCardRow) =>
|
|
628
|
-
openMenu(event, sessionBadgeTarget(sessionId, badge, row), cwd ?? '')
|
|
629
|
-
: undefined,
|
|
630
|
-
[openMenu, sessionId, cwd],
|
|
631
|
-
);
|
|
632
|
-
const entry = useSessionBadges(badgesStore, sessionId, enabled);
|
|
633
|
-
const onOpen = useCallback(
|
|
634
|
-
(badge: SessionBadgeEntry, uri?: string) => {
|
|
635
|
-
openBadge?.(sessionId, badge.badge.panel, { kind: badge.kind, ...(uri ? { uri } : {}) });
|
|
636
|
-
onSelect?.(sessionId);
|
|
637
|
-
},
|
|
638
|
-
[sessionId, onSelect],
|
|
639
|
-
);
|
|
640
|
-
const fresh = useArrival(Math.max(0, ...Object.values(entry?.grewAt ?? {})));
|
|
641
|
-
useEffect(() => {
|
|
642
|
-
onArrival(fresh);
|
|
643
|
-
}, [fresh, onArrival]);
|
|
644
|
-
if (!server && !project && !environment && (!entry || entry.badges.length === 0)) return null;
|
|
645
|
-
return (
|
|
646
|
-
<BadgeLine
|
|
647
|
-
entry={entry}
|
|
648
|
-
host={server}
|
|
649
|
-
project={project}
|
|
650
|
-
environment={environment}
|
|
651
|
-
fresh={fresh}
|
|
652
|
-
cards={cards}
|
|
653
|
-
onOpen={onOpen}
|
|
654
|
-
{...(onMenu ? { onMenu } : {})}
|
|
655
|
-
/>
|
|
656
|
-
);
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
const SessionStatusDot = memo(SessionStatusDotInner);
|
|
660
|
-
SessionStatusDot.displayName = 'SessionStatusDot';
|
|
661
|
-
const RowMeta = memo(RowMetaInner);
|
|
662
|
-
RowMeta.displayName = 'RowMeta';
|
|
663
|
-
const RowArtifacts = memo(RowArtifactsInner);
|
|
664
|
-
RowArtifacts.displayName = 'RowArtifacts';
|
|
665
|
-
return { useSessionDotState, SessionStatusDot, RowMeta, RowArtifacts };
|
|
666
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The orchestration Main session (`ChatHost.sessions.main`): turning the
|
|
3
|
-
* `orchestration` setting on creates it at once (pinned in the sidebar the
|
|
4
|
-
* moment the toggle flips, not activated: the host's `onChanged` refreshes
|
|
5
|
-
* the list), and the returned opener jumps to it (⌃⇧M), creating it when
|
|
6
|
-
* missing. Off, or a host without it: the opener does nothing.
|
|
7
|
-
*/
|
|
8
|
-
import { useCallback, useEffect } from 'react';
|
|
9
|
-
|
|
10
|
-
import { useChatHost } from '../ChatProvider';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Creates the Main when orchestration turns on and returns its opener.
|
|
14
|
-
*
|
|
15
|
-
* @param enabled - The `orchestration` setting.
|
|
16
|
-
* @param open - Opens a session by id.
|
|
17
|
-
* @returns Opens the Main (a no-op while `enabled` is false).
|
|
18
|
-
*/
|
|
19
|
-
export function useMainSession(enabled: boolean, open: (sessionId: string) => void): () => void {
|
|
20
|
-
const main = useChatHost().sessions?.main;
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (enabled && main) void main().catch(() => undefined);
|
|
23
|
-
}, [enabled, main]);
|
|
24
|
-
return useCallback(() => {
|
|
25
|
-
if (!enabled || !main) return;
|
|
26
|
-
void main()
|
|
27
|
-
.then((sessionId) => {
|
|
28
|
-
if (sessionId) open(sessionId);
|
|
29
|
-
})
|
|
30
|
-
.catch(() => undefined);
|
|
31
|
-
}, [enabled, main, open]);
|
|
32
|
-
}
|