zidane-ui 9.0.4 → 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 +3 -1
- package/dist/adapters/extension-modules.d.ts +147 -0
- package/dist/adapters/extension-modules.js +244 -0
- package/dist/adapters/index.d.ts +3 -1
- package/dist/adapters/index.js +3 -1
- package/dist/adapters/live.d.ts +6 -0
- package/dist/adapters/live.js +33 -3
- package/dist/adapters/server-composer-host.js +20 -37
- package/dist/adapters/server-extensions-host.d.ts +113 -0
- package/dist/adapters/server-extensions-host.js +829 -0
- package/dist/adapters/server-host.js +28 -6
- package/dist/adapters/server-machines-host.js +1 -1
- package/dist/adapters/server-settings-host.js +1 -1
- package/dist/adapters/server-settings-sections.js +36 -13
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/AppHostProvider.d.ts +4 -1
- package/dist/app/AppHostProvider.js +11 -4
- package/dist/app/ModalProvider.d.ts +9 -3
- package/dist/app/ModalProvider.js +45 -25
- package/dist/app/headless/app-host.d.ts +3 -0
- package/dist/appearance/AppearanceProvider.d.ts +11 -4
- package/dist/appearance/AppearanceProvider.js +18 -6
- package/dist/appearance/headless/index.js +1 -1
- package/dist/appearance/headless/prefs.d.ts +2 -2
- package/dist/appearance/index.d.ts +1 -1
- package/dist/approvals/ApprovalBar.js +7 -1
- package/dist/approvals/FileEditApproval.js +7 -3
- package/dist/approvals/headless/index.js +2 -2
- package/dist/approvals/headless/labels.js +3 -3
- package/dist/chat/HostBadge.js +1 -1
- package/dist/chat/HostStatusDot.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/RunEstimateChip.d.ts +53 -0
- package/dist/chat/RunEstimateChip.js +116 -0
- package/dist/chat/SessionFilterMenu.d.ts +77 -5
- package/dist/chat/SessionFilterMenu.js +86 -4
- package/dist/chat/SessionGroupHeader.d.ts +6 -2
- package/dist/chat/SessionGroupHeader.js +35 -3
- package/dist/chat/SessionHostHeader.js +1 -1
- package/dist/chat/SessionList.js +1 -1
- package/dist/chat/SessionListRow.d.ts +8 -1
- package/dist/chat/SessionListRow.js +5 -4
- package/dist/chat/Throbber.js +0 -3
- package/dist/chat/Transcript.d.ts +1 -1
- package/dist/chat/Transcript.js +112 -57
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/ConversationBadges.js +18 -11
- package/dist/chat/composer/HostPicker.js +1 -1
- package/dist/chat/composer/ProjectMenu.d.ts +8 -1
- package/dist/chat/composer/ProjectMenu.js +11 -8
- package/dist/chat/composer/RetryPill.js +1 -1
- package/dist/chat/composer/SelectTurnHint.d.ts +19 -0
- package/dist/chat/composer/SelectTurnHint.js +28 -0
- package/dist/chat/composer/ServerScopeToggle.js +4 -1
- package/dist/chat/composer/composer-bus.d.ts +8 -1
- package/dist/chat/composer/composer-bus.js +10 -1
- package/dist/chat/composer/index.d.ts +4 -4
- package/dist/chat/composer/index.js +3 -3
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/composer/use-draft-target.d.ts +19 -1
- package/dist/chat/composer/use-draft-target.js +14 -1
- package/dist/chat/composer/use-run-meter.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/chip-labels.d.ts +1 -0
- package/dist/chat/headless/chip-labels.js +1 -0
- package/dist/chat/headless/composer/conversation-badges.d.ts +8 -6
- package/dist/chat/headless/composer/conversation-badges.js +26 -24
- package/dist/chat/headless/composer/host-chrome.d.ts +2 -27
- package/dist/chat/headless/composer/host.d.ts +1 -3
- package/dist/chat/headless/composer/index.d.ts +3 -4
- package/dist/chat/headless/composer/index.js +5 -6
- package/dist/chat/headless/composer/labels-chrome.d.ts +1 -1
- package/dist/chat/headless/composer/labels-chrome.js +1 -1
- package/dist/chat/headless/extension-sources.d.ts +17 -0
- package/dist/chat/headless/extension-sources.js +52 -0
- 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 +8 -0
- package/dist/chat/headless/hosts.d.ts +2 -0
- package/dist/chat/headless/index.d.ts +10 -8
- package/dist/chat/headless/index.js +21 -18
- package/dist/chat/headless/labels.d.ts +79 -1
- package/dist/chat/headless/labels.js +80 -3
- package/dist/chat/headless/session-list.d.ts +65 -2
- package/dist/chat/headless/session-list.js +10 -2
- package/dist/chat/headless/sidebar/badges.d.ts +2 -0
- package/dist/chat/headless/sidebar/badges.js +20 -1
- package/dist/chat/headless/sidebar/directory.d.ts +46 -6
- package/dist/chat/headless/sidebar/directory.js +198 -22
- package/dist/chat/headless/sidebar/estimates.d.ts +55 -0
- package/dist/chat/headless/sidebar/estimates.js +91 -0
- package/dist/chat/headless/sidebar/index.d.ts +6 -4
- package/dist/chat/headless/sidebar/index.js +6 -3
- package/dist/chat/headless/sidebar/labels.d.ts +71 -1
- package/dist/chat/headless/sidebar/labels.js +17 -0
- package/dist/chat/headless/sidebar/query.d.ts +276 -0
- package/dist/chat/headless/sidebar/query.js +450 -0
- package/dist/chat/headless/sidebar/rows.d.ts +104 -13
- package/dist/chat/headless/sidebar/rows.js +189 -5
- package/dist/chat/headless/sidebar/types.d.ts +37 -4
- package/dist/chat/headless/sidebar/types.js +8 -0
- package/dist/chat/headless/sidebar/view.d.ts +25 -1
- package/dist/chat/headless/sidebar/view.js +56 -3
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +6 -0
- 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 +22 -3
- package/dist/chat/headless/transcript/fold-attachments.js +1 -1
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/rows.d.ts +15 -1
- package/dist/chat/headless/transcript-labels.d.ts +1 -0
- package/dist/chat/index.d.ts +14 -6
- package/dist/chat/index.js +40 -32
- package/dist/chat/rich-composer/RichComposer.js +32 -1
- package/dist/chat/rich-composer/badge-decorations.js +1 -1
- package/dist/chat/rich-composer/use-extension-composer.d.ts +32 -0
- package/dist/chat/rich-composer/use-extension-composer.js +46 -0
- package/dist/chat/sidebar/MainSessionRow.js +1 -1
- package/dist/chat/sidebar/ProjectIcon.d.ts +25 -6
- package/dist/chat/sidebar/ProjectIcon.js +79 -34
- package/dist/chat/sidebar/SessionSidebar.d.ts +34 -1
- package/dist/chat/sidebar/SessionSidebar.js +161 -25
- package/dist/chat/sidebar/SidebarDecoration.d.ts +38 -0
- package/dist/chat/sidebar/SidebarDecoration.js +61 -0
- package/dist/chat/sidebar/SidebarFilterMenu.d.ts +15 -2
- package/dist/chat/sidebar/SidebarFilterMenu.js +226 -8
- package/dist/chat/sidebar/SidebarFooter.d.ts +3 -1
- package/dist/chat/sidebar/SidebarFooter.js +17 -4
- package/dist/chat/sidebar/SidebarGroupHeader.d.ts +17 -4
- package/dist/chat/sidebar/SidebarGroupHeader.js +23 -4
- package/dist/chat/sidebar/SidebarRowView.d.ts +30 -0
- package/dist/chat/sidebar/SidebarRowView.js +117 -0
- package/dist/chat/sidebar/SidebarSessionRow.d.ts +4 -1
- package/dist/chat/sidebar/SidebarSessionRow.js +22 -4
- package/dist/chat/sidebar/SpaceSwitcher.d.ts +12 -5
- package/dist/chat/sidebar/SpaceSwitcher.js +142 -49
- package/dist/chat/sidebar/SpacesSection.js +4 -2
- package/dist/chat/sidebar/collapsed.d.ts +24 -0
- package/dist/chat/sidebar/collapsed.js +44 -0
- package/dist/chat/sidebar/index.d.ts +8 -4
- package/dist/chat/sidebar/index.js +6 -2
- package/dist/chat/sidebar/session-menu.d.ts +2 -0
- package/dist/chat/sidebar/session-menu.js +8 -2
- package/dist/chat/sidebar/sidebar-live.d.ts +12 -1
- package/dist/chat/sidebar/sidebar-live.js +57 -17
- package/dist/chat/sidebar/useAgentNames.d.ts +8 -0
- package/dist/chat/sidebar/useAgentNames.js +13 -0
- package/dist/chat/sidebar/useSaveViewAsSpace.d.ts +13 -0
- package/dist/chat/sidebar/useSaveViewAsSpace.js +44 -0
- package/dist/chat/sidebar/useSessionDirectoryView.d.ts +4 -1
- package/dist/chat/sidebar/useSessionDirectoryView.js +46 -12
- package/dist/chat/sidebar/useSidebarKeyboardNav.js +3 -1
- package/dist/chat/testing/composer.contract.d.ts +2 -6
- package/dist/chat/testing/composer.contract.js +2 -31
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/testing/fixture-composer-chrome.d.ts +2 -6
- package/dist/chat/testing/fixture-composer-chrome.js +1 -17
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/BadgeMenu.d.ts +2 -0
- package/dist/chat/transcript/BadgeMenu.js +22 -6
- package/dist/chat/transcript/CardMarkdown.js +17 -5
- package/dist/chat/transcript/ChipCard.js +6 -0
- package/dist/chat/transcript/ChipCards.js +2 -2
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/EditDiffBlock.js +4 -1
- package/dist/chat/transcript/FileChip.js +20 -7
- package/dist/chat/transcript/InlineChipText.js +1 -1
- package/dist/chat/transcript/InteractionToolBody.js +32 -13
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/MermaidDiagram.d.ts +22 -0
- package/dist/chat/transcript/MermaidDiagram.js +410 -0
- package/dist/chat/transcript/PromptEcho.js +5 -5
- package/dist/chat/transcript/ProseMarkdown.js +9 -6
- package/dist/chat/transcript/ReferenceText.js +7 -2
- package/dist/chat/transcript/SelectTurnHint.js +1 -1
- package/dist/chat/transcript/SubagentBlock.d.ts +4 -2
- package/dist/chat/transcript/SubagentBlock.js +5 -2
- package/dist/chat/transcript/TranscriptRow.js +28 -6
- package/dist/chat/transcript/TranscriptSearch.js +1 -1
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/badges.js +5 -2
- package/dist/chat/transcript/extension-renderers.d.ts +36 -0
- package/dist/chat/transcript/extension-renderers.js +133 -0
- package/dist/chat/transcript/fold-worker.js +2 -2
- package/dist/chat/transcript/fold.js +6 -4
- package/dist/chat/transcript/index.d.ts +8 -2
- package/dist/chat/transcript/index.js +35 -29
- package/dist/chat/transcript/markdown-cache.js +16 -7
- package/dist/chat/transcript/markdown.d.ts +15 -1
- package/dist/chat/transcript/markdown.js +71 -6
- package/dist/chat/transcript/messages.js +3 -2
- package/dist/chat/transcript/notices.js +1 -1
- package/dist/chat/transcript/prompt.js +1 -1
- package/dist/chat/transcript/prose.js +1 -1
- package/dist/chat/transcript/recent-map.d.ts +20 -0
- package/dist/chat/transcript/recent-map.js +22 -0
- package/dist/chat/transcript/references.js +7 -3
- package/dist/chat/transcript/renderers.d.ts +11 -1
- package/dist/chat/transcript/renderers.js +14 -4
- 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-batch.js +4 -9
- package/dist/chat/transcript/tool-details.js +7 -67
- 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.d.ts +21 -0
- package/dist/chat/transcript/tool-payload.js +80 -0
- package/dist/chat/transcript/tool-row.js +158 -96
- package/dist/chat/transcript/useTranscriptScroll.js +3 -2
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/chat/transcript-options.d.ts +15 -0
- package/dist/chat/transcript-options.js +40 -0
- package/dist/code/CodeHighlightProvider.d.ts +3 -3
- package/dist/code/CodeHighlightProvider.js +4 -4
- package/dist/code/HighlightedCode.d.ts +7 -2
- package/dist/code/HighlightedCode.js +7 -71
- package/dist/code/code-themes.d.ts +13 -6
- package/dist/code/code-themes.js +385 -13
- package/dist/code/editor/CodeHover.d.ts +5 -4
- package/dist/code/editor/CodeHover.js +20 -16
- package/dist/code/editor/HighlightWorkers.js +2 -2
- package/dist/code/editor/edit-session.js +1 -0
- package/dist/code/editor/environment.d.ts +1 -1
- package/dist/code/editor/environment.js +1 -1
- package/dist/code/editor/index.d.ts +2 -2
- package/dist/code/editor/index.js +2 -2
- package/dist/code/editor/pierre-theme.d.ts +5 -5
- package/dist/code/editor/pierre-theme.js +6 -5
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/highlight.worker.js +2 -14
- package/dist/code/highlighter.d.ts +24 -9
- package/dist/code/highlighter.js +1 -4
- package/dist/code/highlights.d.ts +12 -0
- package/dist/code/highlights.js +47 -0
- package/dist/code/mermaid-lexer.d.ts +26 -0
- package/dist/code/mermaid-lexer.js +303 -0
- package/dist/code/shiki-theme.d.ts +6 -6
- package/dist/code/shiki-theme.js +3 -3
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/components/BrandMark.d.ts +6 -4
- package/dist/components/BrandMark.js +5 -2
- package/dist/components/CodeFrame.d.ts +5 -0
- package/dist/components/CodeFrame.js +27 -23
- package/dist/components/Form.js +1 -1
- package/dist/core.css +82 -11
- package/dist/dist/{index-Cx7GDZlz.d.ts → index-WlE93Q6d.d.ts} +255 -51
- package/dist/extensions/ExtensionComponent.d.ts +62 -0
- package/dist/extensions/ExtensionComponent.js +120 -0
- package/dist/extensions/ExtensionDialogHost.d.ts +31 -0
- package/dist/extensions/ExtensionDialogHost.js +439 -0
- package/dist/extensions/ExtensionRenderer.d.ts +30 -0
- package/dist/extensions/ExtensionRenderer.js +78 -0
- package/dist/extensions/ExtensionScreen.d.ts +24 -0
- package/dist/extensions/ExtensionScreen.js +120 -0
- package/dist/extensions/ExtensionSettingsPage.d.ts +19 -0
- package/dist/extensions/ExtensionSettingsPage.js +116 -0
- package/dist/extensions/ExtensionSettingsPages.d.ts +17 -0
- package/dist/extensions/ExtensionSettingsPages.js +33 -0
- package/dist/extensions/ExtensionSettingsSidebar.d.ts +63 -0
- package/dist/extensions/ExtensionSettingsSidebar.js +360 -0
- package/dist/extensions/ExtensionSlot.d.ts +44 -0
- package/dist/extensions/ExtensionSlot.js +161 -0
- package/dist/extensions/ExtensionWebview.d.ts +32 -0
- package/dist/extensions/ExtensionWebview.js +80 -0
- package/dist/extensions/ExtensionsProvider.d.ts +42 -0
- package/dist/extensions/ExtensionsProvider.js +104 -0
- package/dist/extensions/SettingsWireForm.d.ts +44 -0
- package/dist/extensions/SettingsWireForm.js +104 -0
- package/dist/extensions/headless/dialog-queue.d.ts +27 -0
- package/dist/extensions/headless/dialog-queue.js +68 -0
- package/dist/extensions/headless/effect-channel.d.ts +15 -0
- package/dist/extensions/headless/effect-channel.js +33 -0
- package/dist/extensions/headless/effect-router.d.ts +34 -0
- package/dist/extensions/headless/effect-router.js +50 -0
- package/dist/extensions/headless/fixture-host.d.ts +110 -0
- package/dist/extensions/headless/fixture-host.js +258 -0
- package/dist/extensions/headless/host.d.ts +433 -0
- package/dist/extensions/headless/host.js +27 -0
- package/dist/extensions/headless/index.d.ts +10 -0
- package/dist/extensions/headless/index.js +10 -0
- package/dist/extensions/headless/labels.d.ts +45 -0
- package/dist/extensions/headless/labels.js +49 -0
- package/dist/extensions/headless/links.d.ts +30 -0
- package/dist/extensions/headless/links.js +34 -0
- package/dist/extensions/headless/select.d.ts +120 -0
- package/dist/extensions/headless/select.js +191 -0
- package/dist/extensions/headless/webview-bridge.d.ts +71 -0
- package/dist/extensions/headless/webview-bridge.js +78 -0
- package/dist/extensions/headless/wire.d.ts +113 -0
- package/dist/extensions/headless/wire.js +38 -0
- package/dist/extensions/hooks.d.ts +88 -0
- package/dist/extensions/hooks.js +151 -0
- package/dist/extensions/index.d.ts +15 -0
- package/dist/extensions/index.js +15 -0
- package/dist/extensions/kit.d.ts +19 -0
- package/dist/extensions/kit.js +19 -0
- package/dist/extensions/links.d.ts +79 -0
- package/dist/extensions/links.js +94 -0
- package/dist/extensions/testing/contract.d.ts +80 -0
- package/dist/extensions/testing/contract.js +407 -0
- package/dist/extensions/testing/index.d.ts +2 -0
- package/dist/extensions/testing/index.js +1 -0
- package/dist/extensions/useExtensionsLabels.d.ts +6 -0
- package/dist/extensions/useExtensionsLabels.js +18 -0
- package/dist/files/DiffsTab.js +7 -19
- package/dist/files/EditorColumn.js +1 -1
- package/dist/files/EditorEnvironmentRoot.d.ts +15 -0
- package/dist/files/EditorEnvironmentRoot.js +55 -0
- package/dist/files/MediaDiff.js +1 -1
- package/dist/files/drafts-store.d.ts +10 -0
- package/dist/files/drafts-store.js +30 -1
- package/dist/files/headless/lsp-edits.d.ts +4 -1
- package/dist/files/headless/lsp-edits.js +14 -2
- package/dist/files/index.d.ts +2 -1
- package/dist/files/index.js +2 -1
- package/dist/files/session-patch.d.ts +11 -0
- package/dist/files/session-patch.js +44 -0
- package/dist/files/useEntryActions.js +1 -1
- package/dist/files/useLsp.js +5 -2
- package/dist/files/useOpenFiles.js +1 -1
- package/dist/git/BranchMenu.d.ts +1 -5
- package/dist/git/BranchMenu.js +23 -39
- package/dist/git/GitBar.d.ts +1 -1
- package/dist/git/GitBar.js +7 -1
- package/dist/git/ImportRepoDialog.d.ts +3 -1
- package/dist/git/ImportRepoDialog.js +8 -6
- package/dist/git/MoveSessionDialog.js +3 -1
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/hooks/useDisplayPath.d.ts +40 -0
- package/dist/hooks/useDisplayPath.js +75 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +4 -2
- package/dist/keybindings/KeyCommands.js +1 -1
- package/dist/keybindings/KeybindingsProvider.js +1 -1
- package/dist/keybindings/headless/index.js +2 -2
- package/dist/keybindings/headless/overrides.js +1 -1
- package/dist/keybindings/index.d.ts +2 -1
- package/dist/keybindings/index.js +2 -1
- package/dist/keybindings/press.d.ts +27 -0
- package/dist/keybindings/press.js +67 -0
- package/dist/machines/Banners.js +1 -1
- package/dist/machines/HostSyncPanel.js +1 -1
- package/dist/machines/HostsSection.js +1 -1
- package/dist/machines/SyncOutcomeBadge.js +1 -1
- package/dist/machines/headless/index.js +1 -1
- package/dist/machines/headless/labels.d.ts +1 -0
- package/dist/machines/headless/labels.js +1 -0
- package/dist/machines/headless/messages.d.ts +2 -1
- package/dist/machines/headless/messages.js +4 -3
- package/dist/machines/settings-section.d.ts +1 -1
- package/dist/onboarding/conversation.js +21 -3
- package/dist/onboarding/demos/features.d.ts +5 -1
- package/dist/onboarding/demos/features.js +80 -1
- package/dist/onboarding/headless/fixture-host.d.ts +2 -2
- package/dist/onboarding/headless/host.d.ts +2 -2
- package/dist/onboarding/headless/labels.d.ts +2 -0
- package/dist/onboarding/headless/labels.js +2 -0
- package/dist/onboarding/index.d.ts +4 -2
- package/dist/onboarding/index.js +3 -2
- package/dist/onboarding/marks.d.ts +29 -7
- package/dist/onboarding/marks.js +38 -12
- package/dist/onboarding/skills/SkillSourceBrowser.js +56 -247
- package/dist/onboarding/skills/parts.d.ts +31 -4
- package/dist/onboarding/skills/parts.js +8 -11
- package/dist/onboarding/sources/SourceBrowser.d.ts +87 -0
- package/dist/onboarding/sources/SourceBrowser.js +292 -0
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ConnectorsStep.js +3 -3
- package/dist/onboarding/steps/ConversationStep.js +2 -1
- package/dist/onboarding/steps/ExtensionsStep.js +2 -2
- package/dist/onboarding/steps/ReadyStep.js +2 -2
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/palette/app-sources.js +1 -1
- package/dist/path.d.ts +24 -2
- package/dist/path.js +34 -2
- package/dist/session/ArtifactRowChips.js +11 -2
- package/dist/session/ArtifactsPanel.d.ts +2 -0
- package/dist/session/ArtifactsPanel.js +67 -27
- package/dist/session/ProjectHome.d.ts +82 -0
- package/dist/session/ProjectHome.js +518 -0
- package/dist/session/ProviderUsageProvider.d.ts +3 -1
- package/dist/session/ProviderUsageProvider.js +5 -2
- package/dist/session/QueueTab.js +1 -1
- package/dist/session/SessionCacheFacts.js +1 -1
- package/dist/session/SessionDetailsDialog.d.ts +1 -1
- package/dist/session/SessionDetailsDialog.js +5 -2
- package/dist/session/SessionHeader.d.ts +3 -1
- package/dist/session/SessionHeader.js +7 -1
- package/dist/session/SideChat.js +2 -2
- package/dist/session/TodosPanel.js +4 -1
- package/dist/session/UsagePanel.js +139 -17
- package/dist/session/WelcomeScreen.d.ts +1 -1
- package/dist/session/WelcomeScreen.js +46 -502
- package/dist/session/headless/fixture-host.js +43 -1
- package/dist/session/headless/home-layout.d.ts +137 -0
- package/dist/session/headless/home-layout.js +235 -0
- package/dist/session/headless/host.d.ts +3 -1
- package/dist/session/headless/index.d.ts +4 -3
- package/dist/session/headless/index.js +4 -3
- package/dist/session/headless/labels.d.ts +33 -36
- package/dist/session/headless/labels.js +48 -47
- package/dist/session/headless/usage-format.d.ts +2 -92
- package/dist/session/headless/usage-format.js +2 -181
- package/dist/session/headless/usage.d.ts +15 -2
- package/dist/session/headless/usage.js +15 -1
- package/dist/session/index.d.ts +3 -1
- package/dist/session/index.js +4 -2
- package/dist/session/modal-shell.d.ts +8 -0
- package/dist/session/modal-shell.js +18 -0
- package/dist/session/testing/contract.d.ts +1 -1
- package/dist/session/testing/contract.js +16 -0
- package/dist/session/testing/demo.js +28 -4
- package/dist/settings/SettingsNav.d.ts +3 -2
- package/dist/settings/SettingsNav.js +86 -13
- package/dist/settings/SettingsRowsPage.d.ts +2 -2
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +16 -9
- package/dist/settings/headless/catalog.js +20 -0
- package/dist/settings/headless/fixture-sections.d.ts +10 -1
- package/dist/settings/headless/fixture-sections.js +88 -3
- package/dist/settings/headless/host.d.ts +2 -0
- package/dist/settings/headless/index.d.ts +4 -4
- package/dist/settings/headless/index.js +1 -1
- package/dist/settings/headless/layout.d.ts +8 -4
- package/dist/settings/headless/layout.js +22 -16
- package/dist/settings/headless/registry.d.ts +14 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/headless/sections-host.d.ts +36 -3
- package/dist/settings/index.d.ts +5 -3
- package/dist/settings/index.js +8 -6
- package/dist/settings/sections/appearance/AppearanceSection.js +4 -4
- package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
- package/dist/settings/sections/editor/EditorSection.js +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ChangeOriginDialog.d.ts +48 -0
- package/dist/settings/sections/extensions/ChangeOriginDialog.js +181 -0
- package/dist/settings/sections/extensions/CreateExtensionDialog.js +5 -2
- package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +76 -0
- package/dist/settings/sections/extensions/ExtensionConfigRows.js +349 -0
- package/dist/settings/sections/extensions/ExtensionOptionsSection.d.ts +1 -4
- package/dist/settings/sections/extensions/ExtensionOptionsSection.js +23 -286
- package/dist/settings/sections/extensions/ExtensionPicksBar.d.ts +46 -0
- package/dist/settings/sections/extensions/ExtensionPicksBar.js +102 -0
- package/dist/settings/sections/extensions/ExtensionSourceBrowser.d.ts +50 -0
- package/dist/settings/sections/extensions/ExtensionSourceBrowser.js +164 -0
- package/dist/settings/sections/extensions/ExtensionsSection.d.ts +6 -2
- package/dist/settings/sections/extensions/ExtensionsSection.js +233 -42
- package/dist/settings/sections/extensions/labels.d.ts +26 -5
- package/dist/settings/sections/extensions/labels.js +28 -3
- package/dist/settings/sections/extensions/options-labels.d.ts +2 -0
- package/dist/settings/sections/extensions/options-labels.js +2 -0
- package/dist/settings/sections/host-catalog/HostCatalogSection.js +104 -30
- package/dist/settings/sections/host-catalog/labels.js +4 -2
- package/dist/settings/sections/index.d.ts +5 -3
- package/dist/settings/sections/index.js +8 -6
- package/dist/settings/sections/instructions/InstructionsSection.js +7 -4
- package/dist/settings/sections/mcp/McpSection.js +1 -1
- package/dist/settings/sections/mcp/McpServerRow.js +3 -2
- package/dist/settings/sections/models/AgentDefaults.js +1 -1
- package/dist/settings/sections/models/ModelPickField.js +1 -1
- package/dist/settings/sections/models/ModelRows.js +3 -3
- package/dist/settings/sections/plugins/PluginsSection.js +3 -1
- package/dist/settings/sections/providers/ProvidersSection.js +3 -3
- package/dist/settings/sections/providers/ServerProvidersSection.js +2 -2
- package/dist/settings/sections/providers/ServerSignIn.js +3 -3
- package/dist/settings/sections/shared/catalog.d.ts +6 -1
- package/dist/settings/sections/shared/catalog.js +28 -22
- package/dist/settings/sections/skills/SkillList.js +2 -2
- package/dist/settings/sections/skills/SkillsSection.js +1 -1
- package/dist/styles.css +526 -21
- package/dist/terminal/HostTerminalSurface.js +18 -8
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +17 -0
- package/dist/terminal/headless/store.js +31 -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/dist/workspace/PanelContentView.d.ts +33 -4
- package/dist/workspace/PanelContentView.js +192 -58
- package/dist/workspace/PanelCorner.d.ts +35 -0
- package/dist/workspace/PanelCorner.js +68 -0
- package/dist/workspace/PanelGroups.d.ts +7 -2
- package/dist/workspace/PanelGroups.js +7 -3
- package/dist/workspace/PanelHome.d.ts +19 -0
- package/dist/workspace/PanelHome.js +74 -0
- package/dist/workspace/PanelItems.d.ts +28 -0
- package/dist/workspace/PanelItems.js +330 -0
- package/dist/workspace/PanelStrip.d.ts +5 -1
- package/dist/workspace/PanelStrip.js +6 -4
- package/dist/workspace/SidePanel.d.ts +9 -3
- package/dist/workspace/SidePanel.js +47 -10
- package/dist/workspace/TabParking.d.ts +2 -0
- package/dist/workspace/TabParking.js +8 -2
- package/dist/workspace/WorkspaceProvider.d.ts +1 -1
- package/dist/workspace/WorkspaceProvider.js +10 -6
- package/dist/workspace/extension-tabs.d.ts +36 -0
- package/dist/workspace/extension-tabs.js +175 -0
- package/dist/workspace/headless/host.d.ts +6 -2
- package/dist/workspace/headless/index.js +1 -1
- package/dist/workspace/headless/labels.d.ts +7 -0
- package/dist/workspace/headless/labels.js +14 -0
- package/dist/workspace/headless/view.d.ts +5 -0
- package/dist/workspace/index.d.ts +3 -2
- package/dist/workspace/index.js +3 -2
- package/package.json +37 -9
- package/src/styles/components.css +24 -8
- package/src/styles/motion.css +35 -0
- package/src/styles/primitives.css +5 -2
- package/src/styles/rich-composer.css +7 -2
- package/src/styles/sidebar.css +24 -0
- package/src/styles/transcript.css +329 -0
- package/src/styles/workspace.css +58 -0
- package/dist/chat/composer/use-hud.d.ts +0 -16
- package/dist/chat/composer/use-hud.js +0 -36
- package/dist/chat/headless/composer/hud.d.ts +0 -25
- package/dist/chat/headless/composer/hud.js +0 -66
- 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/index.ts +0 -32
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -230
- 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 -474
- 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 -459
- 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 -184
- 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 -122
- package/src/app/ModalProvider.tsx +0 -711
- package/src/app/headless/app-host.ts +0 -58
- 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 -359
- 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 -227
- 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 -305
- 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/SessionFilterMenu.tsx +0 -237
- package/src/chat/SessionGroupHeader.tsx +0 -136
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -279
- 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 -277
- package/src/chat/Transcript.tsx +0 -461
- 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 -159
- 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 -170
- 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/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -179
- 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 -307
- 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 -284
- package/src/chat/composer/use-hud.ts +0 -38
- 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 -39
- 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 -222
- 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 -227
- package/src/chat/headless/composer/host.ts +0 -253
- package/src/chat/headless/composer/hud.ts +0 -101
- package/src/chat/headless/composer/index.ts +0 -18
- 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/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 -259
- package/src/chat/headless/hosts.ts +0 -53
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -331
- 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 -390
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -163
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -819
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -16
- package/src/chat/headless/sidebar/labels.ts +0 -140
- 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/rows.ts +0 -229
- package/src/chat/headless/sidebar/types.ts +0 -61
- package/src/chat/headless/sidebar/view.ts +0 -296
- 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 -394
- 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 -780
- 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 -367
- 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 -29
- 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 -1036
- 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-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 -336
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -805
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -41
- package/src/chat/sidebar/SidebarFooter.tsx +0 -234
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -231
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -293
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -232
- package/src/chat/sidebar/SpacesSection.tsx +0 -256
- package/src/chat/sidebar/index.ts +0 -92
- package/src/chat/sidebar/session-menu.ts +0 -437
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -605
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -86
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -165
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -532
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -178
- 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 -223
- package/src/chat/transcript/CardMarkdown.tsx +0 -92
- package/src/chat/transcript/ChipCard.tsx +0 -176
- 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 -171
- package/src/chat/transcript/FileChip.tsx +0 -350
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -193
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -165
- package/src/chat/transcript/ReferenceText.tsx +0 -193
- 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 -218
- package/src/chat/transcript/TranscriptRow.tsx +0 -356
- 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 -152
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- 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 -520
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -65
- package/src/chat/transcript/markdown-cache.ts +0 -70
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -282
- package/src/chat/transcript/messages.tsx +0 -168
- 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/references.ts +0 -104
- 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 -241
- 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 -111
- package/src/chat/transcript/tool-details.tsx +0 -77
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-row.tsx +0 -489
- 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 -162
- 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/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -150
- package/src/code/code-themes.ts +0 -34
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -428
- 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 -28
- 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 -154
- 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 -19
- package/src/code/highlighter.ts +0 -185
- package/src/code/shiki-theme.ts +0 -47
- package/src/components/BrandMark.tsx +0 -107
- 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 -209
- 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 -589
- 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/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -590
- package/src/files/EditorColumn.tsx +0 -453
- 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 -159
- 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 -40
- 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 -24
- package/src/files/lazy-tabs.tsx +0 -41
- 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 -178
- 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 -981
- package/src/git/GitBar.tsx +0 -286
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -381
- package/src/git/MoveSessionDialog.tsx +0 -394
- 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/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 -118
- 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 -14
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- 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 -356
- package/src/machines/headless/messages.ts +0 -197
- 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 -179
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -447
- 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 -280
- package/src/onboarding/index.ts +0 -20
- package/src/onboarding/marks.tsx +0 -69
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -336
- package/src/onboarding/skills/parts.tsx +0 -440
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -226
- package/src/onboarding/steps/ConversationStep.tsx +0 -131
- 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 -165
- 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 -251
- package/src/session/ArtifactsPanel.tsx +0 -381
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProviderUsageProvider.tsx +0 -106
- 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 -621
- package/src/session/SessionHeader.tsx +0 -237
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -316
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -278
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -222
- package/src/session/WelcomeScreen.tsx +0 -578
- 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 -331
- package/src/session/headless/host.ts +0 -255
- package/src/session/headless/index.ts +0 -22
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -321
- 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 -280
- package/src/session/headless/usage.ts +0 -380
- package/src/session/index.ts +0 -29
- package/src/session/testing/contract.ts +0 -579
- package/src/session/testing/demo.ts +0 -209
- 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 -116
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -217
- package/src/settings/SettingsShell.tsx +0 -336
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -553
- 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 -323
- package/src/settings/headless/host.ts +0 -125
- 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 -723
- 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 -52
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -307
- 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/CreateExtensionDialog.tsx +0 -206
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -743
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -480
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -38
- package/src/settings/sections/extensions/options-labels.ts +0 -31
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -374
- package/src/settings/sections/host-catalog/labels.ts +0 -40
- package/src/settings/sections/index.ts +0 -58
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -381
- 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 -403
- 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 -148
- 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 -136
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -246
- 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 -911
- 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 -621
- 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 -335
- package/src/workspace/PanelGroups.tsx +0 -249
- package/src/workspace/PanelStrip.tsx +0 -307
- package/src/workspace/SidePanel.tsx +0 -192
- package/src/workspace/TabParking.tsx +0 -111
- package/src/workspace/WorkspaceProvider.tsx +0 -554
- 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/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -118
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -34
- 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 -159
- package/src/workspace/index.ts +0 -22
- 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,649 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Layout memory: everything about "how did I leave this window" that is not
|
|
3
|
-
* user data or agent configuration.
|
|
4
|
-
*
|
|
5
|
-
* Three tiers, one API. The sidebar is not here: it lists every project's
|
|
6
|
-
* sessions, so its width and collapsed state are global to the window
|
|
7
|
-
* (the appearance store). The panel / terminal / Files-tree layout is per
|
|
8
|
-
* SESSION: a scope copies its PROJECT's (cwd) last-used layout, the
|
|
9
|
-
* template, once (when it is created, or first shown: `adoptScopeLayout`)
|
|
10
|
-
* and owns it from then on, so another session's change never moves it.
|
|
11
|
-
* Every change is written to the scope's own record and, as the template
|
|
12
|
-
* for scopes still to come, to the project. The new-chat draft owns none:
|
|
13
|
-
* it shows the template live, and its session copies it when created. The Files tab's filters are per
|
|
14
|
-
* project. What is open in the Files tab and the terminal tab order are
|
|
15
|
-
* content, so they are the session's alone.
|
|
16
|
-
*
|
|
17
|
-
* template panelOpen panelTree panelWidth panelShare terminalOpen
|
|
18
|
-
* terminalHeight filesTreeOpen filesTreeWidth
|
|
19
|
-
* project filesShowIgnored filesChangedOnly terminalHideAgent badgeOrder
|
|
20
|
-
* session filesOpen filesActive terminalOrder
|
|
21
|
-
*
|
|
22
|
-
* Layouts are addressed by SCOPE ({@link LayoutScope}): a session, the
|
|
23
|
-
* new-chat draft, or a project with no session. The project key is the
|
|
24
|
-
* scope's root, qualified by the server for a server session; the per-view
|
|
25
|
-
* fields are keyed by the scope key (a session's key, `draft:…`,
|
|
26
|
-
* `project:…`). Session-keyed callers go through the session → scope
|
|
27
|
-
* mapping the app feeds (`setSessionScopes`); a session without
|
|
28
|
-
* a known scope falls back to a per-session project.
|
|
29
|
-
*
|
|
30
|
-
* Storage: one key of the injected `Storage` holding `{ projects, sessions }` (`sessions`
|
|
31
|
-
* holds every scope's own fields; the name predates scopes). A project key
|
|
32
|
-
* stored as the raw cwd is read as a fallback. Reads are validated field by field so a
|
|
33
|
-
* stale blob never leaks an impossible state into React; older shapes
|
|
34
|
-
* migrate on read (`parseLayout`). A scope's record lives until its session
|
|
35
|
-
* is deleted (`forgetScopeLayout`, or the launch sweep for sessions gone
|
|
36
|
-
* while this window was not looking: `sweepScopeLayouts`); a draft's moves
|
|
37
|
-
* to the session it becomes, or goes when the draft is replaced. Writes are
|
|
38
|
-
* read-modify-write: a window applies its op to what is stored now, so it
|
|
39
|
-
* never writes back a stale copy it already saw replaced. The v1
|
|
40
|
-
* per-session blob is read as a fallback so existing layouts carry over.
|
|
41
|
-
*
|
|
42
|
-
* `createLayoutMemory({ storage })` makes one memory (an app makes one per
|
|
43
|
-
* window); `useScopeLayout` (`zidane-ui/workspace`) reads a scope's layout in a
|
|
44
|
-
* component. Other windows' writes arrive as `storage` events.
|
|
45
|
-
*/
|
|
46
|
-
import { LOCAL_HOST_KEY, parseSessionKey, TERMINAL_PANEL_ID } from 'zidane/chat/pure';
|
|
47
|
-
|
|
48
|
-
import { parsePanelTree, panelTreeOf, type PanelTree } from './panel-tree';
|
|
49
|
-
import { parseTree, treeTabs } from './tree';
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* What a layout is attached to: a folder, optionally bound to a session (or
|
|
53
|
-
* to the new-chat draft that will become one). The desktop app's `Scope` has
|
|
54
|
-
* this shape, so it passes its own.
|
|
55
|
-
*/
|
|
56
|
-
export interface LayoutScope {
|
|
57
|
-
/** The project root (worktrees fold into their main checkout). */
|
|
58
|
-
root: string;
|
|
59
|
-
/** Where things open. */
|
|
60
|
-
cwd: string;
|
|
61
|
-
/** Bound to this session (its key). */
|
|
62
|
-
session?: string;
|
|
63
|
-
/** The new-chat draft's id (never together with `session`). */
|
|
64
|
-
draft?: string;
|
|
65
|
-
/** Where a bound session's files live when not on this machine. */
|
|
66
|
-
workspace?: string;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const DRAFT_PREFIX = 'draft:';
|
|
70
|
-
const PROJECT_PREFIX = 'project:';
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* A scope's identity: the session key when bound, else `draft:<id>` or `project:<root>`.
|
|
74
|
-
*
|
|
75
|
-
* @param scope - The scope.
|
|
76
|
-
*/
|
|
77
|
-
export function layoutScopeKey(scope: LayoutScope): string {
|
|
78
|
-
if (scope.session) return scope.session;
|
|
79
|
-
if (scope.draft) return `${DRAFT_PREFIX}${scope.draft}`;
|
|
80
|
-
return `${PROJECT_PREFIX}${scope.root}`;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const hasSession = (scope: LayoutScope): boolean => typeof scope.session === 'string';
|
|
84
|
-
const sessionOfScopeKey = (key: string): string | null =>
|
|
85
|
-
key.startsWith(DRAFT_PREFIX) || key.startsWith(PROJECT_PREFIX) ? null : key;
|
|
86
|
-
const draftOfScopeKey = (key: string): string | null =>
|
|
87
|
-
key.startsWith(DRAFT_PREFIX) ? key.slice(DRAFT_PREFIX.length) : null;
|
|
88
|
-
|
|
89
|
-
/** The server a session key names; `null` for This computer. */
|
|
90
|
-
function serverIdOf(session: string): string | null {
|
|
91
|
-
const { hostKey } = parseSessionKey(session);
|
|
92
|
-
return hostKey === LOCAL_HOST_KEY ? null : hostKey;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* The project a scope's shared layout lives under: the root, qualified by the server for a server
|
|
97
|
-
* session (the same path on two hosts is two projects).
|
|
98
|
-
*
|
|
99
|
-
* @param scope - The scope.
|
|
100
|
-
*/
|
|
101
|
-
export function layoutProjectKey(scope: LayoutScope): string {
|
|
102
|
-
// A folderless session has no project: its layout is its own.
|
|
103
|
-
if (!scope.root) return scope.session ? `session:${scope.session}` : `scope:${layoutScopeKey(scope)}`;
|
|
104
|
-
const server = scope.session ? serverIdOf(scope.session) : null;
|
|
105
|
-
return server ? `${server}\u001f${scope.root}` : scope.root;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const LEGACY_STORAGE_KEY = 'zg:layout:v1';
|
|
109
|
-
|
|
110
|
-
/** The storage key the layouts live under. */
|
|
111
|
-
export const LAYOUT_STORAGE_KEY = 'zg:layout:v2';
|
|
112
|
-
|
|
113
|
-
/** How a scope's window was left: the side panel, the Files tab, the terminal drawer, the composer badges. */
|
|
114
|
-
export interface SessionLayout {
|
|
115
|
-
/** The side panel is shown. */
|
|
116
|
-
panelOpen: boolean;
|
|
117
|
-
/** The side panel's tab groups, the focused one, and its active tab (`PanelTree`, `zidane-ui/workspace/headless`). */
|
|
118
|
-
panelTree: PanelTree;
|
|
119
|
-
/** The side panel's width (px); null = default. */
|
|
120
|
-
panelWidth: number | null;
|
|
121
|
-
/** Dragged past the chat's usual floor: the panel's share of the room beside the sidebar (`resolveLayout`, `zidane-ui/workspace/headless`). */
|
|
122
|
-
panelShare: number | null;
|
|
123
|
-
/** The files open in the Files tab. */
|
|
124
|
-
filesOpen: readonly string[];
|
|
125
|
-
/** The Files tab's active file. */
|
|
126
|
-
filesActive: string | null;
|
|
127
|
-
/** The Files tree shows ignored files. */
|
|
128
|
-
filesShowIgnored: boolean;
|
|
129
|
-
/** Files tab tree column width (px); null = default. */
|
|
130
|
-
filesTreeWidth: number | null;
|
|
131
|
-
/** The Files tab's tree column is shown. */
|
|
132
|
-
filesTreeOpen: boolean;
|
|
133
|
-
/** The Files tree shows changed files only. */
|
|
134
|
-
filesChangedOnly: boolean;
|
|
135
|
-
/** Terminal drawer under the chat column: shown. */
|
|
136
|
-
terminalOpen: boolean;
|
|
137
|
-
/** The terminal drawer's height (px; null = default). */
|
|
138
|
-
terminalHeight: number | null;
|
|
139
|
-
/** Terminal tabs in the user's dragged order (`zidane-ui/terminal/headless` order); per session, like its terminals. */
|
|
140
|
-
terminalOrder: readonly string[];
|
|
141
|
-
/** The terminal strip leaves the agent's terminals out (its robot toggle); per project, like the Files filters. */
|
|
142
|
-
terminalHideAgent: boolean;
|
|
143
|
-
/**
|
|
144
|
-
* The composer badges in the user's dragged order (`orderComposerBadges`);
|
|
145
|
-
* per project, so every conversation of the folder shows them alike.
|
|
146
|
-
*/
|
|
147
|
-
badgeOrder: readonly string[];
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/** A layout with every default (the side panel on Artifacts, closed). */
|
|
151
|
-
export const EMPTY_LAYOUT: SessionLayout = {
|
|
152
|
-
panelOpen: false,
|
|
153
|
-
panelTree: panelTreeOf(['artifacts']),
|
|
154
|
-
panelWidth: null,
|
|
155
|
-
panelShare: null,
|
|
156
|
-
filesOpen: [],
|
|
157
|
-
filesActive: null,
|
|
158
|
-
filesShowIgnored: false,
|
|
159
|
-
filesTreeWidth: null,
|
|
160
|
-
filesTreeOpen: true,
|
|
161
|
-
filesChangedOnly: false,
|
|
162
|
-
terminalOpen: false,
|
|
163
|
-
terminalHeight: null,
|
|
164
|
-
terminalOrder: [],
|
|
165
|
-
terminalHideAgent: false,
|
|
166
|
-
badgeOrder: [],
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
const SESSION_FIELDS = ['filesOpen', 'filesActive', 'terminalOrder'] as const;
|
|
170
|
-
type SessionField = (typeof SESSION_FIELDS)[number];
|
|
171
|
-
const TEMPLATE_FIELDS = [
|
|
172
|
-
'panelOpen',
|
|
173
|
-
'panelTree',
|
|
174
|
-
'panelWidth',
|
|
175
|
-
'panelShare',
|
|
176
|
-
'terminalOpen',
|
|
177
|
-
'terminalHeight',
|
|
178
|
-
'filesTreeOpen',
|
|
179
|
-
'filesTreeWidth',
|
|
180
|
-
] as const;
|
|
181
|
-
type TemplateField = (typeof TEMPLATE_FIELDS)[number];
|
|
182
|
-
type ProjectField = Exclude<keyof SessionLayout, SessionField | TemplateField>;
|
|
183
|
-
const PROJECT_FIELDS = (Object.keys(EMPTY_LAYOUT) as (keyof SessionLayout)[]).filter(
|
|
184
|
-
(k): k is ProjectField =>
|
|
185
|
-
!(SESSION_FIELDS as readonly string[]).includes(k) && !(TEMPLATE_FIELDS as readonly string[]).includes(k),
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
const pick = <K extends keyof SessionLayout>(from: SessionLayout, keys: readonly K[]): Pick<SessionLayout, K> =>
|
|
189
|
-
Object.fromEntries(keys.map((k) => [k, from[k]])) as Pick<SessionLayout, K>;
|
|
190
|
-
|
|
191
|
-
const strList = (v: unknown): string[] => (Array.isArray(v) ? v.filter((x): x is string => typeof x === 'string') : []);
|
|
192
|
-
const strOrNull = (v: unknown): string | null => (typeof v === 'string' ? v : null);
|
|
193
|
-
const numOrNull = (v: unknown): number | null => (typeof v === 'number' && Number.isFinite(v) ? v : null);
|
|
194
|
-
const shareOrNull = (v: unknown): number | null => {
|
|
195
|
-
const n = numOrNull(v);
|
|
196
|
-
return n !== null && n > 0 && n < 1 ? n : null;
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* A stored layout, validated field by field; older shapes migrate (the flat tab strip, the bottom group).
|
|
201
|
-
*
|
|
202
|
-
* @param raw - What was stored (parsed JSON).
|
|
203
|
-
*/
|
|
204
|
-
export function parseLayout(raw: unknown): SessionLayout {
|
|
205
|
-
if (!raw || typeof raw !== 'object') return EMPTY_LAYOUT;
|
|
206
|
-
const o = raw as Record<string, unknown>;
|
|
207
|
-
// Before the tree: the flat strip and its active tab.
|
|
208
|
-
const tabs = strList(o.panelTabs);
|
|
209
|
-
return {
|
|
210
|
-
panelOpen: o.panelOpen === true,
|
|
211
|
-
panelTree: parsePanelTree(o.panelTree, {
|
|
212
|
-
tabs: tabs.length > 0 ? tabs : treeTabs(EMPTY_LAYOUT.panelTree.root),
|
|
213
|
-
active: strOrNull(o.panelActiveId),
|
|
214
|
-
}),
|
|
215
|
-
panelWidth: numOrNull(o.panelWidth),
|
|
216
|
-
panelShare: shareOrNull(o.panelShare),
|
|
217
|
-
filesOpen: strList(o.filesOpen),
|
|
218
|
-
filesActive: strOrNull(o.filesActive),
|
|
219
|
-
filesShowIgnored: o.filesShowIgnored === true,
|
|
220
|
-
filesTreeWidth: numOrNull(o.filesTreeWidth),
|
|
221
|
-
filesTreeOpen: o.filesTreeOpen !== false,
|
|
222
|
-
filesChangedOnly: o.filesChangedOnly === true,
|
|
223
|
-
// A group under the chat column (`bottomTree`) briefly held the drawer: open while it held the Terminal.
|
|
224
|
-
terminalOpen:
|
|
225
|
-
o.terminalOpen === true || treeTabs(parseTree(o.bottomTree) ?? EMPTY_GROUP).includes(TERMINAL_PANEL_ID),
|
|
226
|
-
terminalHeight: numOrNull(o.terminalHeight ?? o.bottomHeight),
|
|
227
|
-
terminalOrder: strList(o.terminalOrder),
|
|
228
|
-
terminalHideAgent: o.terminalHideAgent === true,
|
|
229
|
-
badgeOrder: strList(o.badgeOrder),
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
const EMPTY_GROUP = panelTreeOf([]).root;
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* A stored record. Both scopes store full records; only their own fields are
|
|
237
|
-
* read. `ownsLayout` marks a scope record holding its own template fields;
|
|
238
|
-
* records written before per-session layouts lack it and read the
|
|
239
|
-
* project's until the scope is adopted (`adoptScopeLayout`).
|
|
240
|
-
*/
|
|
241
|
-
interface StoredLayout extends SessionLayout {
|
|
242
|
-
ownsLayout?: true;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
interface Store {
|
|
246
|
-
projects: Record<string, StoredLayout>;
|
|
247
|
-
sessions: Record<string, StoredLayout>;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/** A changed layout, or a function of the layout stored right now. */
|
|
251
|
-
export type LayoutPatch = Partial<SessionLayout>;
|
|
252
|
-
|
|
253
|
-
/** Options of {@link createLayoutMemory}. */
|
|
254
|
-
export interface LayoutMemoryOptions {
|
|
255
|
-
/** Where the layouts are kept, read on each access (`() => localStorage`). Reads and writes that throw are survived. */
|
|
256
|
-
storage: () => Pick<Storage, 'getItem' | 'setItem'>;
|
|
257
|
-
/** A write that failed (quota, disabled storage): the layout is kept for this window only. Default: a console warning. */
|
|
258
|
-
onSaveError?: (error: unknown) => void;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/** One window's layout memory; see the top of this file. */
|
|
262
|
-
export interface LayoutMemory {
|
|
263
|
-
/** The session → scope mapping (every listed session's scope); layouts re-resolve when it changes. */
|
|
264
|
-
setSessionScopes(scopes: Iterable<LayoutScope>): void;
|
|
265
|
-
/** Session → project (cwd) pairs: the pre-scope form of `setSessionScopes` (root = cwd). */
|
|
266
|
-
setSessionProjects(pairs: Iterable<readonly [sessionId: string, cwd: string | null | undefined]>): void;
|
|
267
|
-
/** A session just created, before the list catches up: it resolves to its project and takes its own copy. */
|
|
268
|
-
registerSessionScope(scope: LayoutScope): void;
|
|
269
|
-
/** A session's layout (`EMPTY_LAYOUT` without one), through the mapping. */
|
|
270
|
-
getSessionLayout(sessionId: string | null): SessionLayout;
|
|
271
|
-
/** A scope's layout (`EMPTY_LAYOUT` without one); the same object until it changes. */
|
|
272
|
-
getScopeLayout(scope: LayoutScope | null): SessionLayout;
|
|
273
|
-
/** Give `scope` its own copy of the layout it shows now; no-op once it owns one. */
|
|
274
|
-
adoptScopeLayout(scope: LayoutScope): void;
|
|
275
|
-
/** Change a session's layout, through the mapping. */
|
|
276
|
-
updateSessionLayout(sessionId: string, change: LayoutPatch | ((current: SessionLayout) => LayoutPatch)): void;
|
|
277
|
-
/** Change a scope's layout; a function `change` reads the layout stored right now (read-modify-write). */
|
|
278
|
-
updateScopeLayout(scope: LayoutScope, change: LayoutPatch | ((current: SessionLayout) => LayoutPatch)): void;
|
|
279
|
-
/** Drop a session's (or scope's) own layout, e.g. when the session is deleted. */
|
|
280
|
-
forgetScopeLayout(target: string | LayoutScope): void;
|
|
281
|
-
/** A draft became a session: the draft's own fields move onto the session's record. */
|
|
282
|
-
moveScopeLayout(from: LayoutScope, to: LayoutScope): void;
|
|
283
|
-
/** Once per launch: drop the draft records and the records of local sessions `localSessions` no longer lists. */
|
|
284
|
-
sweepScopeLayouts(localSessions: () => Promise<readonly string[]>): Promise<void>;
|
|
285
|
-
/** Calls `listener` after any layout changed, in this window or another. Returns the unsubscribe. */
|
|
286
|
-
subscribeLayouts(listener: () => void): () => void;
|
|
287
|
-
/** The identity a scope's composed layout is cached under (what a reader keys its memo on). */
|
|
288
|
-
scopeLayoutId(scope: LayoutScope): string;
|
|
289
|
-
/** Forget the cache, the mapping and the snapshots (tests). */
|
|
290
|
-
reset(): void;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
* A new layout memory over `options.storage`.
|
|
295
|
-
*
|
|
296
|
-
* @param options - The storage, and what to do when a write fails.
|
|
297
|
-
*/
|
|
298
|
-
export function createLayoutMemory(options: LayoutMemoryOptions): LayoutMemory {
|
|
299
|
-
const onSaveError =
|
|
300
|
-
options.onSaveError ?? ((err: unknown) => console.warn('[zidane-ui] layout not saved (kept for this window)', err));
|
|
301
|
-
const readRaw = (key: string): string | null => {
|
|
302
|
-
try {
|
|
303
|
-
return options.storage().getItem(key);
|
|
304
|
-
} catch {
|
|
305
|
-
return null;
|
|
306
|
-
}
|
|
307
|
-
};
|
|
308
|
-
|
|
309
|
-
let cache: Store | undefined;
|
|
310
|
-
/** The stored text `cache` was read from (or written as): another window's write changes it. */
|
|
311
|
-
let cacheRaw: string | null = null;
|
|
312
|
-
let legacy: Record<string, SessionLayout> | undefined;
|
|
313
|
-
const listeners = new Set<() => void>();
|
|
314
|
-
/** Session key → its scope (fed by `SessionsProvider`, plus sessions registered at creation). */
|
|
315
|
-
let sessionScopes = new Map<string, LayoutScope>();
|
|
316
|
-
const registered = new Map<string, LayoutScope>();
|
|
317
|
-
|
|
318
|
-
function parseMap(raw: unknown): Record<string, StoredLayout> {
|
|
319
|
-
const out: Record<string, StoredLayout> = {};
|
|
320
|
-
if (raw && typeof raw === 'object') {
|
|
321
|
-
for (const [id, layout] of Object.entries(raw as Record<string, unknown>)) {
|
|
322
|
-
const owns = !!layout && typeof layout === 'object' && (layout as StoredLayout).ownsLayout === true;
|
|
323
|
-
out[id] = owns ? { ...parseLayout(layout), ownsLayout: true } : parseLayout(layout);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
return out;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
function parseJson(raw: string): unknown {
|
|
330
|
-
try {
|
|
331
|
-
return JSON.parse(raw) as unknown;
|
|
332
|
-
} catch {
|
|
333
|
-
return undefined;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
function storedRaw(): string | null {
|
|
338
|
-
return readRaw(LAYOUT_STORAGE_KEY);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
function load(): Store {
|
|
342
|
-
if (!cache) {
|
|
343
|
-
cacheRaw = storedRaw();
|
|
344
|
-
const v = (cacheRaw === null ? undefined : parseJson(cacheRaw)) as
|
|
345
|
-
Partial<Record<keyof Store, unknown>> | undefined;
|
|
346
|
-
cache = { projects: parseMap(v?.projects), sessions: parseMap(v?.sessions) };
|
|
347
|
-
}
|
|
348
|
-
return cache;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
/** Before a write: what another window stored since our last read wins over our copy. */
|
|
352
|
-
function loadFresh(): Store {
|
|
353
|
-
if (cache && storedRaw() !== cacheRaw) {
|
|
354
|
-
cache = undefined;
|
|
355
|
-
notify();
|
|
356
|
-
}
|
|
357
|
-
return load();
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
function loadLegacy(): Record<string, SessionLayout> {
|
|
361
|
-
if (!legacy) {
|
|
362
|
-
const raw = readRaw(LEGACY_STORAGE_KEY);
|
|
363
|
-
legacy = parseMap(raw === null ? undefined : parseJson(raw));
|
|
364
|
-
}
|
|
365
|
-
return legacy;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
function save(next: Store): void {
|
|
369
|
-
cache = next;
|
|
370
|
-
const raw = JSON.stringify(next);
|
|
371
|
-
try {
|
|
372
|
-
options.storage().setItem(LAYOUT_STORAGE_KEY, raw);
|
|
373
|
-
// Only once stored: `loadFresh` would otherwise take the unchanged storage for another window's write.
|
|
374
|
-
cacheRaw = raw;
|
|
375
|
-
} catch (err) {
|
|
376
|
-
onSaveError(err);
|
|
377
|
-
}
|
|
378
|
-
notify();
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
// Composed snapshots per scope; `useSyncExternalStore` needs a stable
|
|
382
|
-
// reference between writes. Dropped whenever the store or mapping changes,
|
|
383
|
-
// but a scope whose composed layout came out the same keeps its old object
|
|
384
|
-
// (`previous`): one scope's write, or the sessions list re-feeding the
|
|
385
|
-
// mapping, must not re-render every other scope's readers (PanelsProvider,
|
|
386
|
-
// SidePanel, the terminal drawer).
|
|
387
|
-
const snapshots = new Map<string, SessionLayout>();
|
|
388
|
-
const previous = new Map<string, SessionLayout>();
|
|
389
|
-
const PREVIOUS_KEPT = 64;
|
|
390
|
-
|
|
391
|
-
/** A scope's first-time defaults: without a session the strip starts on Files (artifacts are session-only). */
|
|
392
|
-
const UNBOUND_DEFAULT: SessionLayout = { ...EMPTY_LAYOUT, panelTree: panelTreeOf(['files']) };
|
|
393
|
-
|
|
394
|
-
function notify(): void {
|
|
395
|
-
for (const [key, layout] of snapshots) {
|
|
396
|
-
previous.delete(key);
|
|
397
|
-
previous.set(key, layout);
|
|
398
|
-
}
|
|
399
|
-
for (const key of previous.keys()) {
|
|
400
|
-
if (previous.size <= PREVIOUS_KEPT) break;
|
|
401
|
-
previous.delete(key);
|
|
402
|
-
}
|
|
403
|
-
snapshots.clear();
|
|
404
|
-
for (const l of listeners) l();
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
function sameScope(a: LayoutScope | undefined, b: LayoutScope): boolean {
|
|
408
|
-
return !!a && a.root === b.root && a.cwd === b.cwd && a.session === b.session && a.workspace === b.workspace;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Session → scope mapping. `SessionsProvider` keeps it current; layouts
|
|
413
|
-
* re-resolve on change so a session that just learned its folder adopts
|
|
414
|
-
* the project's layout.
|
|
415
|
-
*/
|
|
416
|
-
function setSessionScopes(scopes: Iterable<LayoutScope>): void {
|
|
417
|
-
const next = new Map<string, LayoutScope>();
|
|
418
|
-
for (const scope of scopes) if (scope.session) next.set(scope.session, scope);
|
|
419
|
-
let same = next.size === sessionScopes.size;
|
|
420
|
-
if (same) for (const [id, scope] of next) if (!sameScope(sessionScopes.get(id), scope)) same = false;
|
|
421
|
-
if (same) return;
|
|
422
|
-
sessionScopes = next;
|
|
423
|
-
// Registered at creation and now listed: the list is authoritative.
|
|
424
|
-
for (const id of next.keys()) registered.delete(id);
|
|
425
|
-
notify();
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
/** Session → project (cwd) pairs: the pre-scope form of {@link setSessionScopes} (root = cwd). */
|
|
429
|
-
function setSessionProjects(pairs: Iterable<readonly [sessionId: string, cwd: string | null | undefined]>): void {
|
|
430
|
-
setSessionScopes([...pairs].flatMap(([session, cwd]) => (cwd ? [{ root: cwd, cwd, session }] : [])));
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
/**
|
|
434
|
-
* A session that just got created, before the sessions list catches up:
|
|
435
|
-
* its layout resolves to its project from the first render (no empty
|
|
436
|
-
* layout flash, no write to a per-session fallback key), and it takes its
|
|
437
|
-
* own copy of the project's template.
|
|
438
|
-
*/
|
|
439
|
-
function registerSessionScope(scope: LayoutScope): void {
|
|
440
|
-
if (!scope.session || sameScope(sessionScopes.get(scope.session) ?? registered.get(scope.session), scope)) return;
|
|
441
|
-
registered.set(scope.session, scope);
|
|
442
|
-
notify();
|
|
443
|
-
adoptScopeLayout(scope);
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
function scopeOfKey(sessionId: string): LayoutScope {
|
|
447
|
-
return sessionScopes.get(sessionId) ?? registered.get(sessionId) ?? { root: '', cwd: '', session: sessionId };
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
function snapshotKey(scope: LayoutScope): string {
|
|
451
|
-
return `${layoutScopeKey(scope)}\u0000${layoutProjectKey(scope)}\u0000${scope.cwd}`;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
function getSessionLayout(sessionId: string | null): SessionLayout {
|
|
455
|
-
if (!sessionId) return EMPTY_LAYOUT;
|
|
456
|
-
return getScopeLayout(scopeOfKey(sessionId));
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
/** The layout of a scope (EMPTY_LAYOUT without one). */
|
|
460
|
-
function getScopeLayout(scope: LayoutScope | null): SessionLayout {
|
|
461
|
-
if (!scope) return EMPTY_LAYOUT;
|
|
462
|
-
const key = snapshotKey(scope);
|
|
463
|
-
const hit = snapshots.get(key);
|
|
464
|
-
if (hit) return hit;
|
|
465
|
-
const composed = composeLayout(scope);
|
|
466
|
-
const old = previous.get(key);
|
|
467
|
-
const layout = old && JSON.stringify(old) === JSON.stringify(composed) ? old : composed;
|
|
468
|
-
snapshots.set(key, layout);
|
|
469
|
-
return layout;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/** The project record a scope reads, with the pre-scope keys (raw cwd, per-session) as fallbacks. */
|
|
473
|
-
function projectRecord(store: Store, scope: LayoutScope): SessionLayout | undefined {
|
|
474
|
-
const old = scope.session ? loadLegacy()[scope.session] : undefined;
|
|
475
|
-
// Raw-cwd keys are local paths now: a server session must not read this computer's project.
|
|
476
|
-
const local = !scope.session || !serverIdOf(scope.session);
|
|
477
|
-
return (
|
|
478
|
-
store.projects[layoutProjectKey(scope)] ??
|
|
479
|
-
(scope.cwd && local ? store.projects[scope.cwd] : undefined) ??
|
|
480
|
-
(scope.session ? store.projects[`session:${scope.session}`] : undefined) ??
|
|
481
|
-
old
|
|
482
|
-
);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
/**
|
|
486
|
-
* Session fields from the scope's own record; template fields from it when
|
|
487
|
-
* it owns them, else from the project (its last-used layout), else defaults;
|
|
488
|
-
* project fields from the project.
|
|
489
|
-
*/
|
|
490
|
-
function composeLayout(scope: LayoutScope): SessionLayout {
|
|
491
|
-
const store = load();
|
|
492
|
-
const fallback = hasSession(scope) ? EMPTY_LAYOUT : UNBOUND_DEFAULT;
|
|
493
|
-
const project = projectRecord(store, scope) ?? fallback;
|
|
494
|
-
const own: StoredLayout =
|
|
495
|
-
store.sessions[layoutScopeKey(scope)] ?? (scope.session ? loadLegacy()[scope.session] : undefined) ?? fallback;
|
|
496
|
-
if (project === fallback && own === fallback) return fallback;
|
|
497
|
-
return {
|
|
498
|
-
...pick(project, PROJECT_FIELDS),
|
|
499
|
-
...pick(own.ownsLayout ? own : project, TEMPLATE_FIELDS),
|
|
500
|
-
...pick(own, SESSION_FIELDS),
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
/** A scope whose session is not known yet (no folder): nothing to copy from. */
|
|
505
|
-
const unresolved = (scope: LayoutScope): boolean => !scope.root && !scope.cwd;
|
|
506
|
-
|
|
507
|
-
/**
|
|
508
|
-
* Give `scope` its own copy of the layout it shows now (the project's
|
|
509
|
-
* template, for a scope that never had one), so later changes elsewhere in
|
|
510
|
-
* the project leave it alone. No-op once it owns one.
|
|
511
|
-
*/
|
|
512
|
-
function adoptScopeLayout(scope: LayoutScope): void {
|
|
513
|
-
if (unresolved(scope) || scope.draft) return;
|
|
514
|
-
const store = loadFresh();
|
|
515
|
-
const key = layoutScopeKey(scope);
|
|
516
|
-
if (store.sessions[key]?.ownsLayout) return;
|
|
517
|
-
const sessions = { ...store.sessions, [key]: { ...composeLayout(scope), ownsLayout: true as const } };
|
|
518
|
-
save({ projects: store.projects, sessions });
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
function updateSessionLayout(
|
|
522
|
-
sessionId: string,
|
|
523
|
-
change: LayoutPatch | ((current: SessionLayout) => LayoutPatch),
|
|
524
|
-
): void {
|
|
525
|
-
updateScopeLayout(scopeOfKey(sessionId), change);
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
/**
|
|
529
|
-
* Change a scope's layout. `change` may be a function of the layout stored
|
|
530
|
-
* right now (read-modify-write): what the panel's operations use, so a
|
|
531
|
-
* window acting on a stale copy never overwrites another's change.
|
|
532
|
-
*/
|
|
533
|
-
function updateScopeLayout(
|
|
534
|
-
scope: LayoutScope,
|
|
535
|
-
change: LayoutPatch | ((current: SessionLayout) => LayoutPatch),
|
|
536
|
-
): void {
|
|
537
|
-
const store = loadFresh();
|
|
538
|
-
const current = getScopeLayout(scope);
|
|
539
|
-
const merged = { ...current, ...(typeof change === 'function' ? change(current) : change) };
|
|
540
|
-
const changed = (keys: readonly (keyof SessionLayout)[]) =>
|
|
541
|
-
keys.some((k) => JSON.stringify(current[k]) !== JSON.stringify(merged[k]));
|
|
542
|
-
const projectChanged = changed(PROJECT_FIELDS);
|
|
543
|
-
const templateChanged = changed(TEMPLATE_FIELDS);
|
|
544
|
-
if (!projectChanged && !templateChanged && !changed(SESSION_FIELDS)) return;
|
|
545
|
-
const next: Store = { projects: { ...store.projects }, sessions: { ...store.sessions } };
|
|
546
|
-
const pk = layoutProjectKey(scope);
|
|
547
|
-
// Template fields land in both: the scope's own, and the project's last-used
|
|
548
|
-
// template for scopes still to come.
|
|
549
|
-
if (projectChanged || templateChanged || !next.projects[pk]) next.projects[pk] = merged;
|
|
550
|
-
// The draft keeps only its own fields: it reads the template live.
|
|
551
|
-
if (!scope.draft) next.sessions[layoutScopeKey(scope)] = { ...merged, ownsLayout: true };
|
|
552
|
-
else if (changed(SESSION_FIELDS)) next.sessions[layoutScopeKey(scope)] = merged;
|
|
553
|
-
save(next);
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
/** Drop a session's (or scope's) own layout, e.g. when the session is deleted. */
|
|
557
|
-
function forgetScopeLayout(target: string | LayoutScope): void {
|
|
558
|
-
const store = loadFresh();
|
|
559
|
-
const key = typeof target === 'string' ? target : layoutScopeKey(target);
|
|
560
|
-
if (!store.sessions[key]) return;
|
|
561
|
-
const sessions = { ...store.sessions };
|
|
562
|
-
delete sessions[key];
|
|
563
|
-
save({ projects: store.projects, sessions });
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
/**
|
|
567
|
-
* A draft became a session: the draft's own fields (open files, terminal
|
|
568
|
-
* order) move onto the session's record. Either order with
|
|
569
|
-
* `registerSessionScope` works: adopting keeps a record's own fields.
|
|
570
|
-
*/
|
|
571
|
-
function moveScopeLayout(from: LayoutScope, to: LayoutScope): void {
|
|
572
|
-
const store = loadFresh();
|
|
573
|
-
const fromKey = layoutScopeKey(from);
|
|
574
|
-
const toKey = layoutScopeKey(to);
|
|
575
|
-
const record = store.sessions[fromKey];
|
|
576
|
-
if (!record || fromKey === toKey) return;
|
|
577
|
-
const base = store.sessions[toKey] ?? composeLayout(to);
|
|
578
|
-
const sessions = { ...store.sessions, [toKey]: { ...base, ...pick(record, SESSION_FIELDS) } };
|
|
579
|
-
delete sessions[fromKey];
|
|
580
|
-
save({ projects: store.projects, sessions });
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
/**
|
|
584
|
-
* Once per launch, in the main window: drop the records nothing can show
|
|
585
|
-
* again. Draft ids live for one window load, so every draft record found
|
|
586
|
-
* is abandoned; a session's goes once This computer no longer lists it
|
|
587
|
-
* (deleted from the TUI, or while the app was closed). `localSessions` is
|
|
588
|
-
* every session This computer has, archived and side ones included.
|
|
589
|
-
* Server sessions are left alone (their list is the server's), and so is
|
|
590
|
-
* whatever is written while the list loads.
|
|
591
|
-
*/
|
|
592
|
-
async function sweepScopeLayouts(localSessions: () => Promise<readonly string[]>): Promise<void> {
|
|
593
|
-
const candidates = Object.keys(loadFresh().sessions).filter((key) => {
|
|
594
|
-
const session = sessionOfScopeKey(key);
|
|
595
|
-
return session ? !serverIdOf(session) : draftOfScopeKey(key) !== null;
|
|
596
|
-
});
|
|
597
|
-
if (candidates.length === 0) return;
|
|
598
|
-
const listed = new Set<string>(await localSessions());
|
|
599
|
-
const stale = candidates.filter((key) => !listed.has(key));
|
|
600
|
-
const store = loadFresh();
|
|
601
|
-
if (!stale.some((key) => store.sessions[key])) return;
|
|
602
|
-
const sessions = { ...store.sessions };
|
|
603
|
-
for (const key of stale) delete sessions[key];
|
|
604
|
-
save({ projects: store.projects, sessions });
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
/** Calls `listener` after any layout changed, in this window or another. Returns the unsubscribe. */
|
|
608
|
-
function subscribeLayouts(listener: () => void): () => void {
|
|
609
|
-
listeners.add(listener);
|
|
610
|
-
return () => {
|
|
611
|
-
listeners.delete(listener);
|
|
612
|
-
};
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
// Other windows (standalone session windows) write the same store: their
|
|
616
|
-
// writes arrive as `storage` events; dropping the cache shows them to every reader.
|
|
617
|
-
if (typeof window !== 'undefined') {
|
|
618
|
-
window.addEventListener('storage', (e) => {
|
|
619
|
-
if (e.key !== LAYOUT_STORAGE_KEY || e.newValue === cacheRaw) return;
|
|
620
|
-
cache = undefined;
|
|
621
|
-
notify();
|
|
622
|
-
});
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
return {
|
|
626
|
-
setSessionScopes,
|
|
627
|
-
setSessionProjects,
|
|
628
|
-
registerSessionScope,
|
|
629
|
-
getSessionLayout,
|
|
630
|
-
getScopeLayout,
|
|
631
|
-
adoptScopeLayout,
|
|
632
|
-
updateSessionLayout,
|
|
633
|
-
updateScopeLayout,
|
|
634
|
-
forgetScopeLayout,
|
|
635
|
-
moveScopeLayout,
|
|
636
|
-
sweepScopeLayouts,
|
|
637
|
-
subscribeLayouts,
|
|
638
|
-
scopeLayoutId: snapshotKey,
|
|
639
|
-
reset() {
|
|
640
|
-
cache = undefined;
|
|
641
|
-
cacheRaw = null;
|
|
642
|
-
legacy = undefined;
|
|
643
|
-
sessionScopes = new Map();
|
|
644
|
-
registered.clear();
|
|
645
|
-
snapshots.clear();
|
|
646
|
-
previous.clear();
|
|
647
|
-
},
|
|
648
|
-
};
|
|
649
|
-
}
|