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
|
@@ -1,621 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The sidebar's query layer: what extensions contribute to it (spaces with a
|
|
3
|
-
* base query, filters, sorts, groupings, row decorations and items) and the
|
|
4
|
-
* user's view on top, evaluated by zidane's one session-query evaluator
|
|
5
|
-
* (`zidane/chat/pure`), so every app lists the same rows for the same view.
|
|
6
|
-
*
|
|
7
|
-
* - Spaces: the user's (Settings › Spaces, saved views among them) merged
|
|
8
|
-
* with the extensions' (`<extension>/<id>`, read-only base query), then the
|
|
9
|
-
* switcher's own order and hidden spaces on top.
|
|
10
|
-
* - Membership: a session tagged with a space is in it; a space with a query
|
|
11
|
-
* also lists every session its query matches.
|
|
12
|
-
* - Saving a view as a space builds its query with `viewQuery` (`zidane/chat/pure`),
|
|
13
|
-
* the builder the terminal app uses too.
|
|
14
|
-
* - The view layer: the agent filter and the contributed filters narrow the
|
|
15
|
-
* space's rows; a contributed (or the space's) sort and grouping replace
|
|
16
|
-
* the built-in ones while chosen.
|
|
17
|
-
*
|
|
18
|
-
* React-free.
|
|
19
|
-
*/
|
|
20
|
-
import {
|
|
21
|
-
compileQuery,
|
|
22
|
-
DEFAULT_SPACE_ID,
|
|
23
|
-
isExtensionSpaceId,
|
|
24
|
-
readField,
|
|
25
|
-
renderTemplate,
|
|
26
|
-
resolveSessionSpace,
|
|
27
|
-
validateGroupBy,
|
|
28
|
-
validateQuery,
|
|
29
|
-
validateSort,
|
|
30
|
-
type SessionGroupBy,
|
|
31
|
-
type SessionQuery,
|
|
32
|
-
type SessionQueryRow,
|
|
33
|
-
type SessionSort,
|
|
34
|
-
type Space,
|
|
35
|
-
} from 'zidane/chat/pure';
|
|
36
|
-
|
|
37
|
-
import type { ExtensionItemStores } from '../../../extensions/headless/host';
|
|
38
|
-
import type { ComponentWire, ExtensionItem } from '../../../extensions/headless/wire';
|
|
39
|
-
import type { Readable } from '../store';
|
|
40
|
-
import type { SpaceSwitcherPrefs } from './view';
|
|
41
|
-
import { VIEW_CHOICE, type SidebarGroupBy, type SidebarListSession, type SidebarView } from './types';
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* A space as the sidebar lists it: a user space, or an extension's (`extensionId`, read-only), with
|
|
45
|
-
* the base query, grouping and sort a query space carries.
|
|
46
|
-
*/
|
|
47
|
-
export interface SidebarSpace extends Space {
|
|
48
|
-
/** The sessions it lists besides those tagged with it. Absent: only those. */
|
|
49
|
-
query?: SessionQuery;
|
|
50
|
-
/** Its own grouping, the default of its view. */
|
|
51
|
-
groupBy?: SessionGroupBy;
|
|
52
|
-
/** Its own sort, the default of its view. */
|
|
53
|
-
sortBy?: SessionSort[];
|
|
54
|
-
/** The extension that adds it. Absent: the user's. */
|
|
55
|
-
extensionId?: string;
|
|
56
|
-
/** Its base (name, query, defaults) can't be edited here: an extension's. */
|
|
57
|
-
readonly?: boolean;
|
|
58
|
-
/** Left out of the switcher (its sessions stay in it). */
|
|
59
|
-
hidden?: boolean;
|
|
60
|
-
/** An icon class (an extension's `icon.gui`), drawn in place of `icon`. */
|
|
61
|
-
glyph?: string;
|
|
62
|
-
/** Extension items may list in it. */
|
|
63
|
-
items?: boolean;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/** What the extensions contribute to the sidebar, per token. */
|
|
67
|
-
export interface SidebarContributions {
|
|
68
|
-
/** Spaces for the switcher. */
|
|
69
|
-
spaces: readonly ExtensionItem<'space'>[];
|
|
70
|
-
/** Filters for the filter menu. */
|
|
71
|
-
filters: readonly ExtensionItem<'sidebar-filter'>[];
|
|
72
|
-
/** Sorts for the filter menu. */
|
|
73
|
-
sorts: readonly ExtensionItem<'sidebar-sort'>[];
|
|
74
|
-
/** Groupings for the filter menu. */
|
|
75
|
-
groups: readonly ExtensionItem<'sidebar-group'>[];
|
|
76
|
-
/** Extra data on session rows. */
|
|
77
|
-
decorations: readonly ExtensionItem<'sidebar-decoration'>[];
|
|
78
|
-
/** Rows among the sessions. */
|
|
79
|
-
items: readonly ExtensionItem<'sidebar-row'>[];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/** Nothing contributed. */
|
|
83
|
-
export const NO_SIDEBAR_CONTRIBUTIONS: SidebarContributions = {
|
|
84
|
-
spaces: [],
|
|
85
|
-
filters: [],
|
|
86
|
-
sorts: [],
|
|
87
|
-
groups: [],
|
|
88
|
-
decorations: [],
|
|
89
|
-
items: [],
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const TOKENS = {
|
|
93
|
-
spaces: 'space',
|
|
94
|
-
filters: 'sidebar-filter',
|
|
95
|
-
sorts: 'sidebar-sort',
|
|
96
|
-
groups: 'sidebar-group',
|
|
97
|
-
decorations: 'sidebar-decoration',
|
|
98
|
-
items: 'sidebar-row',
|
|
99
|
-
} as const satisfies Record<keyof SidebarContributions, keyof ExtensionItemStores>;
|
|
100
|
-
|
|
101
|
-
/** The token stores {@link sidebarContributionsOf} reads. */
|
|
102
|
-
export type SidebarContributionStores = Pick<ExtensionItemStores, (typeof TOKENS)[keyof typeof TOKENS]>;
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* The six sidebar token stores of an extensions host as one store: a new snapshot whenever one of them changes.
|
|
106
|
-
*
|
|
107
|
-
* @param items - The host's item stores (`ExtensionsHost.items`).
|
|
108
|
-
*/
|
|
109
|
-
export function sidebarContributionsOf(items: SidebarContributionStores): Readable<SidebarContributions> {
|
|
110
|
-
const read = (): SidebarContributions => ({
|
|
111
|
-
spaces: items.space.get(),
|
|
112
|
-
filters: items['sidebar-filter'].get(),
|
|
113
|
-
sorts: items['sidebar-sort'].get(),
|
|
114
|
-
groups: items['sidebar-group'].get(),
|
|
115
|
-
decorations: items['sidebar-decoration'].get(),
|
|
116
|
-
items: items['sidebar-row'].get(),
|
|
117
|
-
});
|
|
118
|
-
let current = read();
|
|
119
|
-
const fresh = (): SidebarContributions => {
|
|
120
|
-
const next = read();
|
|
121
|
-
const same = (Object.keys(TOKENS) as (keyof SidebarContributions)[]).every((k) => next[k] === current[k]);
|
|
122
|
-
if (!same) current = next;
|
|
123
|
-
return current;
|
|
124
|
-
};
|
|
125
|
-
return {
|
|
126
|
-
get: fresh,
|
|
127
|
-
subscribe(onChange) {
|
|
128
|
-
const offs = Object.values(TOKENS).map((token) => items[token].subscribe(onChange));
|
|
129
|
-
return () => {
|
|
130
|
-
for (const off of offs) off();
|
|
131
|
-
};
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* An extension's space as the sidebar lists it: read-only, its `newSession` defaults as the space's.
|
|
138
|
-
*
|
|
139
|
-
* @param entry - The space item.
|
|
140
|
-
*/
|
|
141
|
-
export function extensionSpaceOf(entry: ExtensionItem<'space'>): SidebarSpace {
|
|
142
|
-
const wire = entry.item;
|
|
143
|
-
const defaults = wire.newSession ?? {};
|
|
144
|
-
const emoji = !wire.icon?.gui && wire.icon?.tui ? wire.icon.tui : undefined;
|
|
145
|
-
return {
|
|
146
|
-
id: wire.id,
|
|
147
|
-
name: wire.name,
|
|
148
|
-
query: wire.query,
|
|
149
|
-
extensionId: entry.extension,
|
|
150
|
-
readonly: true,
|
|
151
|
-
items: wire.items,
|
|
152
|
-
...(wire.icon?.gui ? { glyph: wire.icon.gui } : {}),
|
|
153
|
-
...(emoji ? { icon: { kind: 'emoji' as const, value: emoji } } : {}),
|
|
154
|
-
...(wire.groupBy ? { groupBy: wire.groupBy } : {}),
|
|
155
|
-
...(wire.sortBy ? { sortBy: [...wire.sortBy] } : {}),
|
|
156
|
-
...(defaults.providerKey && defaults.modelId
|
|
157
|
-
? { providerKey: defaults.providerKey, modelId: defaults.modelId }
|
|
158
|
-
: {}),
|
|
159
|
-
...(defaults.effort ? { effort: defaults.effort } : {}),
|
|
160
|
-
...(defaults.agentId ? { agentId: defaults.agentId } : {}),
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const isRecord = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
165
|
-
|
|
166
|
-
/** A saved view's query, grouping and sort as stored in the settings' space list, each checked. */
|
|
167
|
-
function storedQueryFields(raw: unknown): Pick<SidebarSpace, 'query' | 'groupBy' | 'sortBy' | 'hidden'> {
|
|
168
|
-
if (!isRecord(raw)) return {};
|
|
169
|
-
const out: Pick<SidebarSpace, 'query' | 'groupBy' | 'sortBy' | 'hidden'> = {};
|
|
170
|
-
if (raw.query !== undefined && validateQuery(raw.query).length === 0) out.query = raw.query as SessionQuery;
|
|
171
|
-
if (raw.groupBy !== undefined && validateGroupBy(raw.groupBy).length === 0)
|
|
172
|
-
out.groupBy = raw.groupBy as SessionGroupBy;
|
|
173
|
-
if (Array.isArray(raw.sortBy) && raw.sortBy.length > 0 && validateSort(raw.sortBy).length === 0)
|
|
174
|
-
out.sortBy = raw.sortBy as SessionSort[];
|
|
175
|
-
if (raw.hidden === true) out.hidden = true;
|
|
176
|
-
return out;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* The spaces the sidebar knows: the user's in their order (a saved view's query kept), then the
|
|
181
|
-
* extensions' by `order`. A space the host already lists under an extension's id takes the
|
|
182
|
-
* extension's base and keeps its place; one with an extension space's id (`<extension>/<id>`) whose
|
|
183
|
-
* extension contributes it no more is dropped, as core and the terminal app drop it.
|
|
184
|
-
*
|
|
185
|
-
* @param user - The user's spaces, normalized (`normalizeSpaces`).
|
|
186
|
-
* @param stored - The settings' space list as stored, for what normalizing dropped (a saved view's query).
|
|
187
|
-
* @param extension - The extensions' space items.
|
|
188
|
-
*/
|
|
189
|
-
export function mergeSidebarSpaces(
|
|
190
|
-
user: readonly Space[],
|
|
191
|
-
stored: unknown,
|
|
192
|
-
extension: readonly ExtensionItem<'space'>[],
|
|
193
|
-
): SidebarSpace[] {
|
|
194
|
-
const raw = new Map<string, unknown>();
|
|
195
|
-
for (const entry of Array.isArray(stored) ? stored : []) {
|
|
196
|
-
if (isRecord(entry) && typeof entry.id === 'string' && !raw.has(entry.id.trim())) raw.set(entry.id.trim(), entry);
|
|
197
|
-
}
|
|
198
|
-
const fromExtensions = new Map(
|
|
199
|
-
[...extension]
|
|
200
|
-
.map((entry, index) => ({ entry, index }))
|
|
201
|
-
.sort((a, b) => a.entry.item.order - b.entry.item.order || a.index - b.index)
|
|
202
|
-
.map(({ entry }) => [entry.item.id, extensionSpaceOf(entry)] as const),
|
|
203
|
-
);
|
|
204
|
-
const out: SidebarSpace[] = [];
|
|
205
|
-
const placed = new Set<string>();
|
|
206
|
-
for (const space of user) {
|
|
207
|
-
const stub = raw.get(space.id);
|
|
208
|
-
const own = fromExtensions.get(space.id);
|
|
209
|
-
const fields = storedQueryFields(stub);
|
|
210
|
-
if (own) {
|
|
211
|
-
out.push(fields.hidden ? { ...own, hidden: true } : own);
|
|
212
|
-
placed.add(space.id);
|
|
213
|
-
} else if (isExtensionSpaceId(space.id) || (isRecord(stub) && typeof stub.extensionId === 'string')) {
|
|
214
|
-
continue;
|
|
215
|
-
} else {
|
|
216
|
-
out.push({ ...space, ...fields });
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
for (const [id, space] of fromExtensions) if (!placed.has(id)) out.push(space);
|
|
220
|
-
return out;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* The switcher's spaces: the user's order first (ids it names), the rest in their own order, the
|
|
225
|
-
* hidden ones left out. The default space never hides, so the switcher always has one.
|
|
226
|
-
*
|
|
227
|
-
* @param spaces - Every space.
|
|
228
|
-
* @param prefs - The switcher's order and hidden spaces.
|
|
229
|
-
*/
|
|
230
|
-
export function switcherSpaces<T extends SidebarSpace>(spaces: readonly T[], prefs: SpaceSwitcherPrefs): T[] {
|
|
231
|
-
const byId = new Map(spaces.map((s) => [s.id, s]));
|
|
232
|
-
const named = prefs.order.flatMap((id) => (byId.has(id) ? [byId.get(id)!] : []));
|
|
233
|
-
const seen = new Set(named.map((s) => s.id));
|
|
234
|
-
const ordered = [...named, ...spaces.filter((s) => !seen.has(s.id))];
|
|
235
|
-
const hidden = new Set(prefs.hidden);
|
|
236
|
-
return ordered.filter((s) => s.id === DEFAULT_SPACE_ID || !(s.hidden || hidden.has(s.id)));
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/** A query that throws (an invalid one past validation) matches nothing rather than taking the list down. */
|
|
240
|
-
function safeCompile<R extends SessionQueryRow>(query: SessionQuery, now?: number): (row: R) => boolean {
|
|
241
|
-
try {
|
|
242
|
-
return compileQuery<R>(query, now === undefined ? {} : { now });
|
|
243
|
-
} catch {
|
|
244
|
-
return () => false;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Which sessions a space lists, or `null` while spaces are off (every session). A session tagged
|
|
250
|
-
* with the space is in it (an unknown tag reads as the default space); a space with a query also
|
|
251
|
-
* lists the sessions it matches. The orchestration Main is in every space.
|
|
252
|
-
*
|
|
253
|
-
* @param space - The space shown.
|
|
254
|
-
* @param spaces - Every space.
|
|
255
|
-
* @param spacesOn - Spaces are on.
|
|
256
|
-
* @param now - Clock for relative times in the query.
|
|
257
|
-
*/
|
|
258
|
-
export function spaceMembership<S extends SidebarListSession>(
|
|
259
|
-
space: SidebarSpace,
|
|
260
|
-
spaces: readonly Space[],
|
|
261
|
-
spacesOn: boolean,
|
|
262
|
-
now?: number,
|
|
263
|
-
): ((row: S) => boolean) | null {
|
|
264
|
-
if (!spacesOn) return null;
|
|
265
|
-
const target = resolveSessionSpace(space.id, spaces);
|
|
266
|
-
const tagged = (row: S) => row.isMain === true || resolveSessionSpace(row.spaceId, spaces) === target;
|
|
267
|
-
if (!space.query) return tagged;
|
|
268
|
-
const matches = safeCompile<S & SessionQueryRow>(space.query, now);
|
|
269
|
-
return (row) => tagged(row) || matches(row as S & SessionQueryRow);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* The contributed filters a space offers: those for every space and those naming it.
|
|
274
|
-
*
|
|
275
|
-
* @param filters - Every filter item.
|
|
276
|
-
* @param spaceId - The space shown.
|
|
277
|
-
*/
|
|
278
|
-
export function filtersForSpace(
|
|
279
|
-
filters: readonly ExtensionItem<'sidebar-filter'>[],
|
|
280
|
-
spaceId: string,
|
|
281
|
-
): readonly ExtensionItem<'sidebar-filter'>[] {
|
|
282
|
-
return filters.filter((f) => f.item.spaces === 'all' || f.item.spaces.includes(spaceId));
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* The query one contributed filter applies at the value the user picked, or `null` (off, or an
|
|
287
|
-
* option no longer offered). A multi filter keeps a session one of its picked options matches.
|
|
288
|
-
*
|
|
289
|
-
* @param filter - The filter's wire form.
|
|
290
|
-
* @param value - What the user picked.
|
|
291
|
-
*/
|
|
292
|
-
export function filterQueryOf(
|
|
293
|
-
filter: ExtensionItem<'sidebar-filter'>['item'],
|
|
294
|
-
value: boolean | string | readonly string[] | undefined,
|
|
295
|
-
): SessionQuery | null {
|
|
296
|
-
if (value === undefined || value === false) return null;
|
|
297
|
-
if (filter.kind === 'toggle') return value === true && filter.query ? filter.query : null;
|
|
298
|
-
const options = filter.options ?? [];
|
|
299
|
-
if (filter.kind === 'select') {
|
|
300
|
-
const option = typeof value === 'string' ? options.find((o) => o.id === value) : undefined;
|
|
301
|
-
return option ? option.query : null;
|
|
302
|
-
}
|
|
303
|
-
const picked = Array.isArray(value) ? options.filter((o) => value.includes(o.id)) : [];
|
|
304
|
-
return picked.length > 0 ? { any: picked.map((o) => o.query) } : null;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* The view layer's own narrowing: the agent and the contributed filters the space offers. `null`
|
|
309
|
-
* when none applies.
|
|
310
|
-
*
|
|
311
|
-
* @param view - The space's view.
|
|
312
|
-
* @param filters - The filters the space offers ({@link filtersForSpace}).
|
|
313
|
-
* @param now - Clock for relative times.
|
|
314
|
-
*/
|
|
315
|
-
export function viewFilterOf<S extends SidebarListSession>(
|
|
316
|
-
view: SidebarView,
|
|
317
|
-
filters: readonly ExtensionItem<'sidebar-filter'>[],
|
|
318
|
-
now?: number,
|
|
319
|
-
): ((row: S) => boolean) | null {
|
|
320
|
-
const tests: ((row: S) => boolean)[] = [];
|
|
321
|
-
const agent = view.agent ?? null;
|
|
322
|
-
if (agent !== null) tests.push((row) => row.agentId === agent);
|
|
323
|
-
const values = view.extension?.filters ?? {};
|
|
324
|
-
for (const { item } of filters) {
|
|
325
|
-
const query = filterQueryOf(item, values[item.id]);
|
|
326
|
-
if (query) {
|
|
327
|
-
const test = safeCompile<S & SessionQueryRow>(query, now);
|
|
328
|
-
tests.push((row) => test(row as S & SessionQueryRow));
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
if (tests.length === 0) return null;
|
|
332
|
-
return (row) => tests.every((t) => t(row));
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/** How the rows group: one of the built-in groupings, or a query grouping (a space's, an extension's, the agents'). */
|
|
336
|
-
export type SidebarGrouping =
|
|
337
|
-
| { kind: 'builtin'; groupBy: Exclude<SidebarGroupBy, 'agent'> }
|
|
338
|
-
| { kind: 'query'; groupBy: SessionGroupBy; source: 'space' | 'extension' | 'agent'; id?: string };
|
|
339
|
-
|
|
340
|
-
/** The agent grouping as a query grouping. */
|
|
341
|
-
export const AGENT_GROUPING: SessionGroupBy = { field: 'agentId' };
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* The grouping that applies: a contributed one the user picked, else the space's own (unless the
|
|
345
|
-
* user picked a built-in one, {@link VIEW_CHOICE}), else the view's `groupBy` ('agent' as a query grouping).
|
|
346
|
-
*
|
|
347
|
-
* @param view - The space's view.
|
|
348
|
-
* @param space - The space shown.
|
|
349
|
-
* @param groups - Every contributed grouping.
|
|
350
|
-
*/
|
|
351
|
-
export function resolveGrouping(
|
|
352
|
-
view: SidebarView,
|
|
353
|
-
space: SidebarSpace,
|
|
354
|
-
groups: readonly ExtensionItem<'sidebar-group'>[],
|
|
355
|
-
): SidebarGrouping {
|
|
356
|
-
const picked = view.extension?.group;
|
|
357
|
-
const contributed = picked ? groups.find((g) => g.item.id === picked) : undefined;
|
|
358
|
-
if (contributed) {
|
|
359
|
-
return { kind: 'query', groupBy: contributed.item.groupBy, source: 'extension', id: contributed.item.id };
|
|
360
|
-
}
|
|
361
|
-
if (space.groupBy && picked !== VIEW_CHOICE) return { kind: 'query', groupBy: space.groupBy, source: 'space' };
|
|
362
|
-
if (view.groupBy === 'agent') return { kind: 'query', groupBy: AGENT_GROUPING, source: 'agent' };
|
|
363
|
-
return { kind: 'builtin', groupBy: view.groupBy };
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* The sort that applies: a contributed one the user picked, else the space's own (unless the user
|
|
368
|
-
* picked a built-in one, {@link VIEW_CHOICE}). `null`: the view's `sortBy`.
|
|
369
|
-
*
|
|
370
|
-
* @param view - The space's view.
|
|
371
|
-
* @param space - The space shown.
|
|
372
|
-
* @param sorts - Every contributed sort.
|
|
373
|
-
*/
|
|
374
|
-
export function resolveSort(
|
|
375
|
-
view: SidebarView,
|
|
376
|
-
space: SidebarSpace,
|
|
377
|
-
sorts: readonly ExtensionItem<'sidebar-sort'>[],
|
|
378
|
-
): readonly SessionSort[] | null {
|
|
379
|
-
const picked = view.extension?.sort;
|
|
380
|
-
const contributed = picked ? sorts.find((s) => s.item.id === picked) : undefined;
|
|
381
|
-
if (contributed) return contributed.item.sortBy;
|
|
382
|
-
if (space.sortBy && picked !== VIEW_CHOICE) return space.sortBy;
|
|
383
|
-
return null;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* The query layer of the space shown, as the sidebar's parts read it: the space, the view, the
|
|
388
|
-
* grouping and sort that apply, and what the extensions contribute to this space.
|
|
389
|
-
*/
|
|
390
|
-
export interface SidebarQueryLayer {
|
|
391
|
-
/** The space shown. */
|
|
392
|
-
space: SidebarSpace;
|
|
393
|
-
/** Its view. */
|
|
394
|
-
view: SidebarView;
|
|
395
|
-
/** The grouping that applies ({@link resolveGrouping}). */
|
|
396
|
-
grouping: SidebarGrouping;
|
|
397
|
-
/** The sort that applies ({@link resolveSort}); `null`: the view's `sortBy`. */
|
|
398
|
-
sort: readonly SessionSort[] | null;
|
|
399
|
-
/** The contributed filters this space offers. */
|
|
400
|
-
filters: readonly ExtensionItem<'sidebar-filter'>[];
|
|
401
|
-
/** The contributed sorts. */
|
|
402
|
-
sorts: readonly ExtensionItem<'sidebar-sort'>[];
|
|
403
|
-
/** The contributed groupings. */
|
|
404
|
-
groups: readonly ExtensionItem<'sidebar-group'>[];
|
|
405
|
-
/** The row decorations. */
|
|
406
|
-
decorations: readonly ExtensionItem<'sidebar-decoration'>[];
|
|
407
|
-
/** The items listed in this space. */
|
|
408
|
-
items: readonly ExtensionItem<'sidebar-row'>[];
|
|
409
|
-
/** The agents the space's sessions run, sorted (before the agent filter). */
|
|
410
|
-
agents: readonly string[];
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
/** A chip a decoration puts on a row, its template rendered. */
|
|
414
|
-
export interface SidebarRowChip {
|
|
415
|
-
/** What it says. */
|
|
416
|
-
text: string;
|
|
417
|
-
/** Its tint. */
|
|
418
|
-
tone?: ExtensionItem<'sidebar-decoration'>['item']['tone'];
|
|
419
|
-
/** Its icon class. */
|
|
420
|
-
icon?: string;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/** What the decorations matching one session put on its row. */
|
|
424
|
-
export interface SidebarRowDecoration {
|
|
425
|
-
/** An icon class beside the title (the first decoration's that has one). */
|
|
426
|
-
icon?: string;
|
|
427
|
-
/** The tint of that icon and of chips without their own. */
|
|
428
|
-
tone?: ExtensionItem<'sidebar-decoration'>['item']['tone'];
|
|
429
|
-
/** A line under the title. */
|
|
430
|
-
subtitle?: string;
|
|
431
|
-
/** Chips, at most {@link MAX_ROW_CHIPS}. */
|
|
432
|
-
chips: readonly SidebarRowChip[];
|
|
433
|
-
/**
|
|
434
|
-
* A component drawn where the app can, in place of the icon and chips of the decoration that
|
|
435
|
-
* names it (`icon`, `chips`: its fallback). The other decorations' chips draw beside it.
|
|
436
|
-
*/
|
|
437
|
-
component?: { extension: string; component: ComponentWire; icon?: string; chips: readonly SidebarRowChip[] };
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
/** The most chips a row shows, whatever the decorations add. */
|
|
441
|
-
export const MAX_ROW_CHIPS = 8;
|
|
442
|
-
|
|
443
|
-
/** One chip per value: a list facet gives one per element; nothing for a missing value. */
|
|
444
|
-
function chipTexts(value: unknown): string[] {
|
|
445
|
-
const list = Array.isArray(value) ? value : [value];
|
|
446
|
-
return list.flatMap((v) =>
|
|
447
|
-
v === null || v === undefined || v === '' ? [] : [typeof v === 'object' ? JSON.stringify(v) : String(v)],
|
|
448
|
-
);
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/**
|
|
452
|
-
* The decorator for a set of decorations: each session's merged decoration, or `null` when none
|
|
453
|
-
* matches. The first matching decoration gives the icon, tone, subtitle and component; every one
|
|
454
|
-
* adds its chips. Templates render with `renderTemplate`.
|
|
455
|
-
*
|
|
456
|
-
* The output is cached per session object: the same row object gets the same decoration object
|
|
457
|
-
* back, so a row whose session didn't change keeps its memo. A row patched with new facets is a
|
|
458
|
-
* new object and is decorated again. Relative times in `where` are read when a row is first
|
|
459
|
-
* decorated: a new decorator (new decorations) reads them again.
|
|
460
|
-
*
|
|
461
|
-
* @param decorations - Every decoration item, in the host's order.
|
|
462
|
-
* @param now - Clock for relative times in `where`.
|
|
463
|
-
*/
|
|
464
|
-
export function createDecorator<S extends SidebarListSession>(
|
|
465
|
-
decorations: readonly ExtensionItem<'sidebar-decoration'>[],
|
|
466
|
-
now?: number,
|
|
467
|
-
): (row: S) => SidebarRowDecoration | null {
|
|
468
|
-
if (decorations.length === 0) return () => null;
|
|
469
|
-
const compiled = decorations.map((entry) => ({
|
|
470
|
-
entry,
|
|
471
|
-
match: entry.item.where ? safeCompile<SessionQueryRow>(entry.item.where, now) : () => true,
|
|
472
|
-
}));
|
|
473
|
-
const cache = new WeakMap<S, SidebarRowDecoration | null>();
|
|
474
|
-
return (session) => {
|
|
475
|
-
if (cache.has(session)) return cache.get(session)!;
|
|
476
|
-
const decoration = decorate(session);
|
|
477
|
-
cache.set(session, decoration);
|
|
478
|
-
return decoration;
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
function decorate(session: S): SidebarRowDecoration | null {
|
|
482
|
-
const row = session as unknown as SessionQueryRow;
|
|
483
|
-
let out: { -readonly [K in keyof SidebarRowDecoration]: SidebarRowDecoration[K] } | null = null;
|
|
484
|
-
const chips: SidebarRowChip[] = [];
|
|
485
|
-
for (const { entry, match } of compiled) {
|
|
486
|
-
if (!match(row)) continue;
|
|
487
|
-
const { item } = entry;
|
|
488
|
-
out ??= { chips };
|
|
489
|
-
const ownIcon = item.icon?.gui && out.icon === undefined ? item.icon.gui : undefined;
|
|
490
|
-
if (ownIcon) {
|
|
491
|
-
out.icon = ownIcon;
|
|
492
|
-
if (item.tone) out.tone = item.tone;
|
|
493
|
-
}
|
|
494
|
-
if (item.tone && out.tone === undefined) out.tone = item.tone;
|
|
495
|
-
if (item.subtitle && out.subtitle === undefined) {
|
|
496
|
-
const text = typeof item.subtitle === 'string' ? item.subtitle : renderTemplate(item.subtitle.template, row);
|
|
497
|
-
if (text) out.subtitle = text;
|
|
498
|
-
}
|
|
499
|
-
const start = chips.length;
|
|
500
|
-
for (const chip of item.chips ?? []) {
|
|
501
|
-
const texts =
|
|
502
|
-
'text' in chip
|
|
503
|
-
? [chip.text]
|
|
504
|
-
: 'template' in chip
|
|
505
|
-
? [renderTemplate(chip.template, row)].filter(Boolean)
|
|
506
|
-
: chipTexts(readField(row, chip.facet));
|
|
507
|
-
const tone = chip.tone ?? item.tone;
|
|
508
|
-
for (const text of texts) {
|
|
509
|
-
if (chips.length >= MAX_ROW_CHIPS) break;
|
|
510
|
-
chips.push({ text, ...(tone ? { tone } : {}), ...(chip.icon?.gui ? { icon: chip.icon.gui } : {}) });
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
if (item.component && !out.component) {
|
|
514
|
-
out.component = {
|
|
515
|
-
extension: entry.extension,
|
|
516
|
-
component: item.component,
|
|
517
|
-
...(ownIcon ? { icon: ownIcon } : {}),
|
|
518
|
-
chips: chips.slice(start),
|
|
519
|
-
};
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
if (!out) return null;
|
|
523
|
-
return out.icon || out.subtitle || out.component || chips.length > 0 ? out : null;
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
/**
|
|
528
|
-
* The items listed in a space: those naming it, where the space allows items (the default space
|
|
529
|
-
* and user spaces always; an extension's when it says so).
|
|
530
|
-
*
|
|
531
|
-
* @param items - Every item.
|
|
532
|
-
* @param space - The space shown.
|
|
533
|
-
*/
|
|
534
|
-
export function itemsForSpace(
|
|
535
|
-
items: readonly ExtensionItem<'sidebar-row'>[],
|
|
536
|
-
space: SidebarSpace,
|
|
537
|
-
): readonly ExtensionItem<'sidebar-row'>[] {
|
|
538
|
-
if (space.extensionId && space.items !== true) return [];
|
|
539
|
-
return items.filter((e) => e.item.space === space.id);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
/** Extension items grouped with their child sessions, as the rows place them. */
|
|
543
|
-
export interface SidebarItemEntry<S extends SidebarListSession> {
|
|
544
|
-
/** The item. */
|
|
545
|
-
entry: ExtensionItem<'sidebar-row'>;
|
|
546
|
-
/** The listed sessions its `children` query matches, in list order. */
|
|
547
|
-
children: readonly S[];
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
/**
|
|
551
|
-
* Each item with its child sessions (a session goes to the first item that claims it), and the
|
|
552
|
-
* sessions no item claims.
|
|
553
|
-
*
|
|
554
|
-
* @param items - The space's items.
|
|
555
|
-
* @param sessions - The sessions the space lists.
|
|
556
|
-
* @param now - Clock for relative times.
|
|
557
|
-
*/
|
|
558
|
-
export function claimChildSessions<S extends SidebarListSession>(
|
|
559
|
-
items: readonly ExtensionItem<'sidebar-row'>[],
|
|
560
|
-
sessions: readonly S[],
|
|
561
|
-
now?: number,
|
|
562
|
-
): { items: SidebarItemEntry<S>[]; rest: S[] } {
|
|
563
|
-
const claimed = new Set<string>();
|
|
564
|
-
const out = items.map((entry) => {
|
|
565
|
-
const query = entry.item.children;
|
|
566
|
-
if (!query) return { entry, children: [] as S[] };
|
|
567
|
-
const match = safeCompile<SessionQueryRow>(query, now);
|
|
568
|
-
const children = sessions.filter((s) => !claimed.has(s.id) && match(s as unknown as SessionQueryRow));
|
|
569
|
-
for (const s of children) claimed.add(s.id);
|
|
570
|
-
return { entry, children };
|
|
571
|
-
});
|
|
572
|
-
return { items: out, rest: claimed.size === 0 ? [...sessions] : sessions.filter((s) => !claimed.has(s.id)) };
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
/** A contributed filter's value that applies something (not off, not an empty pick). */
|
|
576
|
-
const filterValueOn = (value: boolean | string | readonly string[] | undefined): boolean =>
|
|
577
|
-
value !== undefined && value !== false && value !== '' && !(Array.isArray(value) && value.length === 0);
|
|
578
|
-
|
|
579
|
-
/**
|
|
580
|
-
* Whether the view narrows the space's sessions: an archive axis other than `active`, a project,
|
|
581
|
-
* an activity window, an agent, or a contributed filter the space offers turned on. Grouping and
|
|
582
|
-
* sort don't count.
|
|
583
|
-
*
|
|
584
|
-
* @param view - The space's view.
|
|
585
|
-
* @param filters - The filters the space offers ({@link filtersForSpace}); a value kept for another one doesn't count.
|
|
586
|
-
*/
|
|
587
|
-
export function viewFiltersOn(view: SidebarView, filters: readonly ExtensionItem<'sidebar-filter'>[]): boolean {
|
|
588
|
-
if (view.archive !== 'active' || view.project !== null || view.activity !== 'all') return true;
|
|
589
|
-
if (view.agent) return true;
|
|
590
|
-
const values = view.extension?.filters ?? {};
|
|
591
|
-
return filters.some(({ item }) => filterValueOn(values[item.id]));
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
/**
|
|
595
|
-
* The patch that turns every filter of a view off ({@link viewFiltersOn}), keeping its grouping,
|
|
596
|
-
* sort and the contributed grouping and sort picked.
|
|
597
|
-
*
|
|
598
|
-
* @param view - The space's view.
|
|
599
|
-
*/
|
|
600
|
-
export function clearedViewFilters(view: SidebarView): Partial<SidebarView> {
|
|
601
|
-
return {
|
|
602
|
-
archive: 'active',
|
|
603
|
-
project: null,
|
|
604
|
-
activity: 'all',
|
|
605
|
-
agent: null,
|
|
606
|
-
extension: { ...view.extension, filters: {} },
|
|
607
|
-
};
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
/**
|
|
611
|
-
* The first saved-view name no space has yet: `nameOf(1)`, `nameOf(2)`…
|
|
612
|
-
*
|
|
613
|
-
* @param spaces - Every space.
|
|
614
|
-
* @param nameOf - The name of the n-th saved view (`labels.savedViewName`).
|
|
615
|
-
*/
|
|
616
|
-
export function nextSavedViewName(spaces: readonly Pick<Space, 'name'>[], nameOf: (n: number) => string): string {
|
|
617
|
-
const taken = new Set(spaces.map((s) => s.name));
|
|
618
|
-
let n = 1;
|
|
619
|
-
while (taken.has(nameOf(n))) n += 1;
|
|
620
|
-
return nameOf(n);
|
|
621
|
-
}
|