zidane-ui 9.1.1 → 9.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/ModalProvider.d.ts +3 -1
- package/dist/app/ModalProvider.js +15 -9
- package/dist/approvals/headless/index.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/index.js +1 -1
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/headless/block-runs.d.ts +57 -0
- package/dist/chat/headless/block-runs.js +123 -0
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/fixture-transcript.d.ts +6 -1
- package/dist/chat/headless/fixture-transcript.js +49 -0
- package/dist/chat/headless/host.d.ts +3 -0
- package/dist/chat/headless/index.d.ts +2 -1
- package/dist/chat/headless/index.js +11 -10
- package/dist/chat/headless/labels.d.ts +42 -0
- package/dist/chat/headless/labels.js +42 -0
- package/dist/chat/headless/session-list.d.ts +27 -0
- package/dist/chat/headless/sidebar/labels.d.ts +27 -0
- package/dist/chat/headless/streams/index.js +1 -1
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +2 -2
- package/dist/chat/headless/streams/store.js +2 -2
- package/dist/chat/headless/transcript/batch.d.ts +21 -1
- package/dist/chat/headless/transcript/batch.js +55 -10
- package/dist/chat/headless/transcript/collapse.js +18 -3
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/index.js +1 -1
- package/dist/chat/headless/transcript/rows.d.ts +7 -1
- package/dist/chat/index.d.ts +6 -1
- package/dist/chat/index.js +7 -2
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/TranscriptRow.js +19 -2
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/index.d.ts +6 -1
- package/dist/chat/transcript/index.js +6 -1
- package/dist/chat/transcript/markdown.js +9 -0
- package/dist/chat/transcript/renderers.d.ts +7 -0
- package/dist/chat/transcript/script-input.d.ts +17 -0
- package/dist/chat/transcript/script-input.js +16 -0
- package/dist/chat/transcript/shell-block-scope.d.ts +29 -0
- package/dist/chat/transcript/shell-block-scope.js +18 -0
- package/dist/chat/transcript/shell-block.d.ts +27 -0
- package/dist/chat/transcript/shell-block.js +306 -0
- package/dist/chat/transcript/tool-parts.d.ts +18 -6
- package/dist/chat/transcript/tool-parts.js +15 -5
- package/dist/chat/transcript/tool-payload.js +6 -3
- package/dist/chat/transcript/tool-row.js +155 -96
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/code/HighlightedCode.js +3 -69
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/core.css +6 -2
- package/dist/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +101 -3
- package/dist/extensions/ExtensionSettingsSidebar.js +19 -3
- package/dist/extensions/kit.d.ts +1 -1
- package/dist/git/BranchMenu.d.ts +1 -7
- package/dist/git/BranchMenu.js +17 -40
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/onboarding/demos/index.js +1 -1
- package/dist/onboarding/index.js +5 -5
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ConnectorsStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +2 -2
- package/dist/onboarding/steps/SkillsStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +1 -1
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +15 -8
- package/dist/settings/headless/catalog.js +5 -0
- package/dist/settings/headless/layout.js +2 -1
- package/dist/settings/headless/registry.d.ts +2 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +2 -2
- package/dist/settings/sections/models/ModelRows.js +2 -2
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/settings/sections/skills/SkillsSection.js +1 -1
- package/dist/styles.css +291 -2
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +10 -0
- package/dist/terminal/headless/store.js +16 -0
- package/dist/terminal/index.d.ts +2 -2
- package/dist/terminal/index.js +2 -2
- package/dist/theme/runtime-icons.d.ts +50 -0
- package/dist/theme/runtime-icons.js +95 -0
- package/package.json +3 -6
- package/src/styles/primitives.css +5 -2
- package/src/styles/transcript.css +281 -0
- package/src/adapters/browser-appearance-host.ts +0 -51
- package/src/adapters/browser-keybindings-host.ts +0 -48
- package/src/adapters/browser-workspace-host.ts +0 -92
- package/src/adapters/closable-client.ts +0 -34
- package/src/adapters/extension-modules.ts +0 -360
- package/src/adapters/index.ts +0 -35
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -270
- package/src/adapters/run-host.ts +0 -238
- package/src/adapters/server-approvals-host.ts +0 -102
- package/src/adapters/server-client.ts +0 -15
- package/src/adapters/server-composer-host.ts +0 -459
- package/src/adapters/server-extensions-host.ts +0 -979
- package/src/adapters/server-files-host.ts +0 -287
- package/src/adapters/server-git-host.ts +0 -289
- package/src/adapters/server-host.ts +0 -489
- package/src/adapters/server-machines-host.ts +0 -283
- package/src/adapters/server-oauth-flow.ts +0 -133
- package/src/adapters/server-onboarding-host.ts +0 -363
- package/src/adapters/server-palette-host.ts +0 -134
- package/src/adapters/server-session-host.ts +0 -241
- package/src/adapters/server-settings-accounts.ts +0 -212
- package/src/adapters/server-settings-host.ts +0 -120
- package/src/adapters/server-settings-models.ts +0 -46
- package/src/adapters/server-settings-performance.ts +0 -58
- package/src/adapters/server-settings-sections.ts +0 -222
- package/src/adapters/server-sidebar-host.ts +0 -59
- package/src/adapters/server-terminal-host.ts +0 -124
- package/src/adapters/server-transcript-members.ts +0 -131
- package/src/adapters/sse-host.ts +0 -264
- package/src/adapters/sse-parser.ts +0 -82
- package/src/adapters/sse-protocol.ts +0 -118
- package/src/adapters/stream-pacer.ts +0 -122
- package/src/adapters/worker-host.ts +0 -192
- package/src/adapters/worker-protocol.ts +0 -97
- package/src/app/AppHostProvider.tsx +0 -135
- package/src/app/ModalProvider.tsx +0 -731
- package/src/app/headless/app-host.ts +0 -61
- package/src/app/headless/index.ts +0 -6
- package/src/app/headless/resource.ts +0 -444
- package/src/app/index.ts +0 -9
- package/src/app/testing/index.ts +0 -90
- package/src/app/useConfirm.tsx +0 -65
- package/src/app/useResource.ts +0 -30
- package/src/appearance/AppearanceProvider.tsx +0 -383
- package/src/appearance/apply.ts +0 -69
- package/src/appearance/headless/fixture-host.ts +0 -111
- package/src/appearance/headless/fonts.ts +0 -224
- package/src/appearance/headless/host.ts +0 -65
- package/src/appearance/headless/index.ts +0 -12
- package/src/appearance/headless/prefs.ts +0 -252
- package/src/appearance/headless/storage.ts +0 -127
- package/src/appearance/headless/zoom-commands.ts +0 -21
- package/src/appearance/index.ts +0 -11
- package/src/appearance/testing/contract.ts +0 -210
- package/src/appearance/testing/index.ts +0 -6
- package/src/approvals/ApprovalBar.tsx +0 -234
- package/src/approvals/ApprovalConcern.tsx +0 -33
- package/src/approvals/ApprovalShell.tsx +0 -69
- package/src/approvals/ApprovalsProvider.tsx +0 -110
- package/src/approvals/FileEditApproval.tsx +0 -310
- package/src/approvals/HunkPreviews.tsx +0 -225
- package/src/approvals/SafelistPanel.tsx +0 -149
- package/src/approvals/headless/fixture-host.ts +0 -73
- package/src/approvals/headless/fixtures.ts +0 -86
- package/src/approvals/headless/heads.ts +0 -81
- package/src/approvals/headless/host.ts +0 -80
- package/src/approvals/headless/index.ts +0 -12
- package/src/approvals/headless/labels.ts +0 -67
- package/src/approvals/headless/pending.ts +0 -91
- package/src/approvals/headless/preview.ts +0 -94
- package/src/approvals/headless/safelist.ts +0 -63
- package/src/approvals/index.ts +0 -13
- package/src/approvals/key-scope.ts +0 -33
- package/src/approvals/testing/contract.ts +0 -230
- package/src/approvals/testing/index.ts +0 -7
- package/src/brands/marks.ts +0 -298
- package/src/chat/ChatProvider.tsx +0 -60
- package/src/chat/DaemonOrb.tsx +0 -107
- package/src/chat/HostBadge.tsx +0 -71
- package/src/chat/HostStatusDot.tsx +0 -53
- package/src/chat/HostTranscript.tsx +0 -101
- package/src/chat/PdfPreview.tsx +0 -65
- package/src/chat/RunEstimateChip.tsx +0 -168
- package/src/chat/SessionFilterMenu.tsx +0 -397
- package/src/chat/SessionGroupHeader.tsx +0 -177
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -296
- package/src/chat/SessionStreamsProvider.tsx +0 -253
- package/src/chat/StatusDot.tsx +0 -128
- package/src/chat/TextPreview.tsx +0 -121
- package/src/chat/Throbber.tsx +0 -270
- package/src/chat/Transcript.tsx +0 -523
- package/src/chat/composer/AgentPicker.tsx +0 -155
- package/src/chat/composer/AgentPickerDialog.tsx +0 -99
- package/src/chat/composer/ApprovalDock.tsx +0 -64
- package/src/chat/composer/ArchivedBanner.tsx +0 -44
- package/src/chat/composer/AttachmentTiles.tsx +0 -211
- package/src/chat/composer/Composer.tsx +0 -500
- package/src/chat/composer/ComposerBadges.tsx +0 -339
- package/src/chat/composer/ComposerControls.tsx +0 -243
- package/src/chat/composer/ComposerEditor.tsx +0 -101
- package/src/chat/composer/ComposerHostProvider.tsx +0 -46
- package/src/chat/composer/ComposerShell.tsx +0 -129
- package/src/chat/composer/ContextBreakdown.tsx +0 -382
- package/src/chat/composer/ContextOrb.tsx +0 -176
- package/src/chat/composer/ConversationBadges.tsx +0 -168
- package/src/chat/composer/DockCard.tsx +0 -126
- package/src/chat/composer/EffortPickerDialog.tsx +0 -184
- package/src/chat/composer/HostComposer.tsx +0 -135
- package/src/chat/composer/HostContextOrb.tsx +0 -94
- package/src/chat/composer/HostModelChainList.tsx +0 -102
- package/src/chat/composer/HostPicker.tsx +0 -97
- package/src/chat/composer/HostPickers.tsx +0 -320
- package/src/chat/composer/ImageModelList.tsx +0 -151
- package/src/chat/composer/ModelChainList.tsx +0 -442
- package/src/chat/composer/ModelChainParts.tsx +0 -247
- package/src/chat/composer/ModelChainRow.tsx +0 -191
- package/src/chat/composer/ModelChainRows.tsx +0 -223
- package/src/chat/composer/ModelChainTooltip.tsx +0 -121
- package/src/chat/composer/ModelFacts.tsx +0 -204
- package/src/chat/composer/ModelOptionsPicker.tsx +0 -257
- package/src/chat/composer/ModelPicker.tsx +0 -513
- package/src/chat/composer/ModelPickerDialog.tsx +0 -99
- package/src/chat/composer/ModelProviderPills.tsx +0 -141
- package/src/chat/composer/PickerPill.tsx +0 -41
- package/src/chat/composer/ProjectMenu.tsx +0 -187
- package/src/chat/composer/PromptHistoryProvider.tsx +0 -214
- package/src/chat/composer/RetryPill.tsx +0 -47
- package/src/chat/composer/RunStatusChip.tsx +0 -150
- package/src/chat/composer/ScopeToggle.tsx +0 -94
- package/src/chat/composer/SelectTurnHint.tsx +0 -40
- package/src/chat/composer/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -188
- package/src/chat/composer/attachment-ingest.ts +0 -413
- package/src/chat/composer/attachments.tsx +0 -176
- package/src/chat/composer/badge-order.ts +0 -65
- package/src/chat/composer/composer-bus.ts +0 -317
- package/src/chat/composer/index.ts +0 -63
- package/src/chat/composer/load-composer-editor.ts +0 -25
- package/src/chat/composer/model-catalog.ts +0 -424
- package/src/chat/composer/model-list-layout.ts +0 -118
- package/src/chat/composer/prompt-history-nav.ts +0 -60
- package/src/chat/composer/scope-side.ts +0 -7
- package/src/chat/composer/suggestion-extension.ts +0 -113
- package/src/chat/composer/suggestions.tsx +0 -115
- package/src/chat/composer/use-agent-profiles.ts +0 -97
- package/src/chat/composer/use-cache-hints.ts +0 -93
- package/src/chat/composer/use-composer-stores.ts +0 -140
- package/src/chat/composer/use-draft-target.ts +0 -317
- package/src/chat/composer/use-new-session-defaults.ts +0 -201
- package/src/chat/composer/use-provider-ready-poll.ts +0 -35
- package/src/chat/composer/use-run-meter.ts +0 -140
- package/src/chat/composer/use-send-prompt.ts +0 -188
- package/src/chat/composer/use-session-meters.ts +0 -109
- package/src/chat/composer/use-sustained-work.ts +0 -74
- package/src/chat/composer/useAttachmentIngest.ts +0 -116
- package/src/chat/composer/useModelListSpy.ts +0 -19
- package/src/chat/headless/badge-refs.ts +0 -76
- package/src/chat/headless/chip-labels.ts +0 -40
- package/src/chat/headless/chip-settle.ts +0 -53
- package/src/chat/headless/chip-views.ts +0 -215
- package/src/chat/headless/composer/attachment-dedupe.ts +0 -50
- package/src/chat/headless/composer/commands.ts +0 -16
- package/src/chat/headless/composer/composer-sources.ts +0 -150
- package/src/chat/headless/composer/conversation-badges.ts +0 -227
- package/src/chat/headless/composer/draft-sync.ts +0 -199
- package/src/chat/headless/composer/editor-markdown.ts +0 -137
- package/src/chat/headless/composer/ghost-autocomplete.ts +0 -381
- package/src/chat/headless/composer/host-chrome.ts +0 -197
- package/src/chat/headless/composer/host.ts +0 -250
- package/src/chat/headless/composer/index.ts +0 -17
- package/src/chat/headless/composer/labels-chrome.ts +0 -83
- package/src/chat/headless/composer/labels-editor.ts +0 -44
- package/src/chat/headless/composer/labels.ts +0 -18
- package/src/chat/headless/composer/live-cost.ts +0 -67
- package/src/chat/headless/composer/model-knobs.ts +0 -179
- package/src/chat/headless/composer/model-names.ts +0 -145
- package/src/chat/headless/composer/model-picker-prefs.ts +0 -90
- package/src/chat/headless/composer/models.ts +0 -86
- package/src/chat/headless/composer/new-session-defaults.ts +0 -68
- package/src/chat/headless/composer/prompt-suggestions.ts +0 -72
- package/src/chat/headless/composer/remember-model-pick.ts +0 -132
- package/src/chat/headless/composer/run-meter.ts +0 -228
- package/src/chat/headless/composer-modes.ts +0 -170
- package/src/chat/headless/draft-scope.ts +0 -136
- package/src/chat/headless/draft-target.ts +0 -87
- package/src/chat/headless/extension-sources.ts +0 -64
- package/src/chat/headless/file-chip.ts +0 -175
- package/src/chat/headless/fixture-host.ts +0 -294
- package/src/chat/headless/fixture-transcript.ts +0 -125
- package/src/chat/headless/fixtures/demo-transcript-all-kinds.ts +0 -233
- package/src/chat/headless/fixtures/demo-transcript.ts +0 -244
- package/src/chat/headless/host.ts +0 -264
- package/src/chat/headless/hosts.ts +0 -55
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -373
- package/src/chat/headless/markdown-chunks.ts +0 -134
- package/src/chat/headless/path-resolver.ts +0 -178
- package/src/chat/headless/prompt-origin.ts +0 -90
- package/src/chat/headless/reference-store.ts +0 -285
- package/src/chat/headless/send-flow.ts +0 -347
- package/src/chat/headless/session-list.ts +0 -400
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -190
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -1046
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/estimates.ts +0 -146
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -18
- package/src/chat/headless/sidebar/labels.ts +0 -161
- package/src/chat/headless/sidebar/notifications.ts +0 -61
- package/src/chat/headless/sidebar/pinned-projects.ts +0 -51
- package/src/chat/headless/sidebar/pinned-sessions.ts +0 -27
- package/src/chat/headless/sidebar/project-icons.ts +0 -116
- package/src/chat/headless/sidebar/query.ts +0 -621
- package/src/chat/headless/sidebar/rows.ts +0 -427
- package/src/chat/headless/sidebar/types.ts +0 -96
- package/src/chat/headless/sidebar/view.ts +0 -367
- package/src/chat/headless/site-icons.ts +0 -51
- package/src/chat/headless/smooth-stream.ts +0 -76
- package/src/chat/headless/store.ts +0 -62
- package/src/chat/headless/streams/actions.ts +0 -85
- package/src/chat/headless/streams/index.ts +0 -25
- package/src/chat/headless/streams/live-events.ts +0 -124
- package/src/chat/headless/streams/merge.ts +0 -60
- package/src/chat/headless/streams/pacer.ts +0 -189
- package/src/chat/headless/streams/prompt-previews.ts +0 -64
- package/src/chat/headless/streams/scheduler.ts +0 -36
- package/src/chat/headless/streams/selectors.ts +0 -76
- package/src/chat/headless/streams/session-streams.ts +0 -407
- package/src/chat/headless/streams/store.ts +0 -1107
- package/src/chat/headless/streams/transcript.ts +0 -41
- package/src/chat/headless/streams/types.ts +0 -84
- package/src/chat/headless/transcript/batch.ts +0 -429
- package/src/chat/headless/transcript/collapse.ts +0 -789
- package/src/chat/headless/transcript/fold-actions.ts +0 -269
- package/src/chat/headless/transcript/fold-attachments.ts +0 -78
- package/src/chat/headless/transcript/fold.ts +0 -382
- package/src/chat/headless/transcript/index.ts +0 -41
- package/src/chat/headless/transcript/nesting.ts +0 -73
- package/src/chat/headless/transcript/pairing.ts +0 -124
- package/src/chat/headless/transcript/rows.ts +0 -377
- package/src/chat/headless/transcript/run-failures.ts +0 -72
- package/src/chat/headless/transcript/select-stops.ts +0 -151
- package/src/chat/headless/transcript/tool-media.ts +0 -42
- package/src/chat/headless/transcript-host.ts +0 -180
- package/src/chat/headless/transcript-labels.ts +0 -12
- package/src/chat/headless/turn-labels.ts +0 -28
- package/src/chat/headless/turn-prompt.ts +0 -32
- package/src/chat/index.ts +0 -31
- package/src/chat/interactions/HostInteractions.tsx +0 -76
- package/src/chat/interactions/InboxPanel.tsx +0 -226
- package/src/chat/interactions/InteractionCard.tsx +0 -111
- package/src/chat/interactions/PlanCard.tsx +0 -186
- package/src/chat/interactions/QuestionField.tsx +0 -336
- package/src/chat/interactions/QuestionForm.tsx +0 -283
- package/src/chat/interactions/card-ui.tsx +0 -86
- package/src/chat/interactions/hooks.ts +0 -49
- package/src/chat/interactions/index.ts +0 -8
- package/src/chat/provider-color.ts +0 -71
- package/src/chat/rich-composer/MentionList.tsx +0 -238
- package/src/chat/rich-composer/RichComposer.tsx +0 -1071
- package/src/chat/rich-composer/badge-decorations.ts +0 -157
- package/src/chat/rich-composer/composer-controls.tsx +0 -102
- package/src/chat/rich-composer/composer-extensions.ts +0 -388
- package/src/chat/rich-composer/composer-keys.ts +0 -416
- package/src/chat/rich-composer/ghost-plugin.ts +0 -89
- package/src/chat/rich-composer/index.ts +0 -3
- package/src/chat/rich-composer/mention-popover.ts +0 -336
- package/src/chat/rich-composer/slash-completion.ts +0 -143
- package/src/chat/rich-composer/use-composer-bus.ts +0 -57
- package/src/chat/rich-composer/use-composer-editor.ts +0 -216
- package/src/chat/rich-composer/use-composer-sources.ts +0 -90
- package/src/chat/rich-composer/use-draft-mirror.ts +0 -398
- package/src/chat/rich-composer/use-editor-handover.ts +0 -45
- package/src/chat/rich-composer/use-extension-composer.ts +0 -80
- package/src/chat/rich-composer/use-ghost-lifecycle.ts +0 -265
- package/src/chat/rich-composer/use-prompt-ghost.ts +0 -90
- package/src/chat/rich-composer/use-staged-attachments.ts +0 -65
- package/src/chat/sidebar/MainSessionRow.tsx +0 -102
- package/src/chat/sidebar/ProjectIcon.tsx +0 -399
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -1039
- package/src/chat/sidebar/SidebarDecoration.tsx +0 -93
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -270
- package/src/chat/sidebar/SidebarFooter.tsx +0 -244
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -263
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarRowView.tsx +0 -151
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -317
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -341
- package/src/chat/sidebar/SpacesSection.tsx +0 -259
- package/src/chat/sidebar/collapsed.ts +0 -61
- package/src/chat/sidebar/index.ts +0 -109
- package/src/chat/sidebar/session-menu.ts +0 -441
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -666
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useAgentNames.ts +0 -12
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSaveViewAsSpace.ts +0 -42
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -128
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -167
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -508
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -159
- package/src/chat/testing/fixture-composer-host.ts +0 -147
- package/src/chat/testing/fixture-sidebar-host.ts +0 -99
- package/src/chat/testing/index.ts +0 -12
- package/src/chat/testing/sidebar.contract.ts +0 -196
- package/src/chat/transcript/BadgeMenu.tsx +0 -241
- package/src/chat/transcript/CardMarkdown.tsx +0 -102
- package/src/chat/transcript/ChipCard.tsx +0 -187
- package/src/chat/transcript/ChipCards.tsx +0 -100
- package/src/chat/transcript/DiffLines.tsx +0 -122
- package/src/chat/transcript/EarlierHistory.tsx +0 -136
- package/src/chat/transcript/EditDiffBlock.tsx +0 -176
- package/src/chat/transcript/FileChip.tsx +0 -361
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -211
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/MermaidDiagram.tsx +0 -484
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -168
- package/src/chat/transcript/ReferenceText.tsx +0 -198
- package/src/chat/transcript/SelectCursor.tsx +0 -118
- package/src/chat/transcript/SelectTurnHint.tsx +0 -81
- package/src/chat/transcript/SelectTurnProvider.tsx +0 -150
- package/src/chat/transcript/SubagentBlock.tsx +0 -224
- package/src/chat/transcript/TranscriptRow.tsx +0 -362
- package/src/chat/transcript/TranscriptSearch.tsx +0 -171
- package/src/chat/transcript/TurnMenu.tsx +0 -217
- package/src/chat/transcript/actions.tsx +0 -77
- package/src/chat/transcript/badges.tsx +0 -155
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- package/src/chat/transcript/extension-renderers.tsx +0 -148
- package/src/chat/transcript/fold-attachments.tsx +0 -221
- package/src/chat/transcript/fold-status.tsx +0 -112
- package/src/chat/transcript/fold-worker.tsx +0 -160
- package/src/chat/transcript/fold.tsx +0 -522
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -66
- package/src/chat/transcript/markdown-cache.ts +0 -84
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -351
- package/src/chat/transcript/messages.tsx +0 -169
- package/src/chat/transcript/notices.tsx +0 -508
- package/src/chat/transcript/prompt-lines.tsx +0 -55
- package/src/chat/transcript/prompt.tsx +0 -258
- package/src/chat/transcript/prose.tsx +0 -171
- package/src/chat/transcript/recent-map.ts +0 -32
- package/src/chat/transcript/references.ts +0 -108
- package/src/chat/transcript/remark-references.ts +0 -157
- package/src/chat/transcript/remark-refs.ts +0 -176
- package/src/chat/transcript/renderer-slots.tsx +0 -35
- package/src/chat/transcript/renderers.tsx +0 -251
- package/src/chat/transcript/row-estimate.ts +0 -158
- package/src/chat/transcript/run-rows.tsx +0 -291
- package/src/chat/transcript/site-icons.ts +0 -27
- package/src/chat/transcript/thumbnails.ts +0 -146
- package/src/chat/transcript/tool-batch.tsx +0 -102
- package/src/chat/transcript/tool-details.tsx +0 -31
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-payload.tsx +0 -76
- package/src/chat/transcript/tool-row.tsx +0 -496
- package/src/chat/transcript/turn-commands.ts +0 -101
- package/src/chat/transcript/use-transcript-rows.ts +0 -195
- package/src/chat/transcript/useComposerSearch.ts +0 -106
- package/src/chat/transcript/useSelectTurnKeys.ts +0 -204
- package/src/chat/transcript/useSettledReveal.ts +0 -57
- package/src/chat/transcript/useStickToBottom.ts +0 -600
- package/src/chat/transcript/useTranscriptFind.ts +0 -70
- package/src/chat/transcript/useTranscriptFindKey.ts +0 -52
- package/src/chat/transcript/useTranscriptScroll.ts +0 -163
- package/src/chat/transcript/useTranscriptSearch.tsx +0 -382
- package/src/chat/transcript/useTranscriptSelectionCopy.ts +0 -63
- package/src/chat/transcript/useWheelHoverPause.ts +0 -79
- package/src/chat/transcript/user-bash.tsx +0 -134
- package/src/chat/transcript-options.ts +0 -51
- package/src/chat/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -156
- package/src/code/code-themes.ts +0 -187
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -429
- package/src/code/editor/DiagnosticAnnotation.tsx +0 -73
- package/src/code/editor/DiagnosticsChip.tsx +0 -85
- package/src/code/editor/DiffView.tsx +0 -197
- package/src/code/editor/EditorColumn.tsx +0 -256
- package/src/code/editor/FileIcon.tsx +0 -89
- package/src/code/editor/FileTabPill.tsx +0 -101
- package/src/code/editor/FileTree.tsx +0 -414
- package/src/code/editor/FileView.tsx +0 -462
- package/src/code/editor/HighlightWorkers.tsx +0 -84
- package/src/code/editor/LanguageEditor.tsx +0 -210
- package/src/code/editor/_vendor/tree-icon-colors.ts +0 -72
- package/src/code/editor/diagnostics.ts +0 -140
- package/src/code/editor/edit-session.ts +0 -32
- package/src/code/editor/environment.tsx +0 -88
- package/src/code/editor/find/FindBar.tsx +0 -126
- package/src/code/editor/find/find-highlight.ts +0 -138
- package/src/code/editor/find/find-model.ts +0 -123
- package/src/code/editor/find/settle-scroll.ts +0 -77
- package/src/code/editor/find/useFind.ts +0 -203
- package/src/code/editor/fs-adapter.ts +0 -37
- package/src/code/editor/index.ts +0 -36
- package/src/code/editor/language.ts +0 -31
- package/src/code/editor/patch-parse.ts +0 -176
- package/src/code/editor/patch-parse.worker.ts +0 -12
- package/src/code/editor/pierre-theme.ts +0 -155
- package/src/code/editor/prime-diff.ts +0 -37
- package/src/code/editor/reveal.ts +0 -58
- package/src/code/editor/scroll-reach.ts +0 -28
- package/src/code/editor/useCodeDocument.ts +0 -226
- package/src/code/editor/useDefinition.ts +0 -159
- package/src/code/editor/useDetachCleanup.ts +0 -36
- package/src/code/editor/useFileDocument.ts +0 -87
- package/src/code/editor/useRevealLine.ts +0 -92
- package/src/code/editor/word-at.ts +0 -145
- package/src/code/highlight.worker.ts +0 -16
- package/src/code/highlighter.ts +0 -181
- package/src/code/highlights.ts +0 -51
- package/src/code/mermaid-lexer.ts +0 -331
- package/src/code/shiki-theme.ts +0 -46
- package/src/components/BrandMark.tsx +0 -118
- package/src/components/Breadcrumb.tsx +0 -105
- package/src/components/BrowserChrome.tsx +0 -189
- package/src/components/BrowserSignIn.tsx +0 -210
- package/src/components/ChoiceCards.tsx +0 -170
- package/src/components/CodeFrame.tsx +0 -225
- package/src/components/ConfirmDialog.tsx +0 -119
- package/src/components/CopyButton.tsx +0 -85
- package/src/components/EditableTitle.tsx +0 -199
- package/src/components/ErrorBoundary.tsx +0 -208
- package/src/components/Form.tsx +0 -593
- package/src/components/Highlighted.tsx +0 -68
- package/src/components/HowItWorks.tsx +0 -123
- package/src/components/IconButton.tsx +0 -101
- package/src/components/IconToggle.tsx +0 -71
- package/src/components/Keycap.tsx +0 -334
- package/src/components/Lightbox.tsx +0 -257
- package/src/components/LoadError.tsx +0 -45
- package/src/components/MediaNav.tsx +0 -85
- package/src/components/Menu.tsx +0 -435
- package/src/components/Overlay.tsx +0 -327
- package/src/components/PanelEmpty.tsx +0 -80
- package/src/components/PanelRows.tsx +0 -107
- package/src/components/PreviewWindow.tsx +0 -53
- package/src/components/ReorderTabs.tsx +0 -103
- package/src/components/RowActionsMenu.tsx +0 -383
- package/src/components/SegmentSpinner.tsx +0 -88
- package/src/components/Segmented.tsx +0 -126
- package/src/components/StepFrame.tsx +0 -151
- package/src/components/Stepper.tsx +0 -157
- package/src/components/Surface.tsx +0 -191
- package/src/components/SwatchPicker.tsx +0 -147
- package/src/components/SwitchGlyph.tsx +0 -56
- package/src/components/TabPill.tsx +0 -188
- package/src/components/ThemeThumb.tsx +0 -52
- package/src/components/ToggleCard.tsx +0 -120
- package/src/components/Tooltip.tsx +0 -288
- package/src/components/ZoomableImage.tsx +0 -322
- package/src/components/button.ts +0 -120
- package/src/components/floating/FloatingSurface.tsx +0 -158
- package/src/components/floating/HoverCard.tsx +0 -143
- package/src/components/floating/Popover.tsx +0 -166
- package/src/components/floating/useAnchoredPosition.ts +0 -186
- package/src/components/floating/usePopover.ts +0 -158
- package/src/components/image-clipboard.ts +0 -70
- package/src/components/keyboard-layout.ts +0 -115
- package/src/components/palette/PaletteList.tsx +0 -432
- package/src/components/palette/PalettePanel.tsx +0 -338
- package/src/components/palette/palette-layout.ts +0 -86
- package/src/components/report-error.ts +0 -142
- package/src/components/zoom.ts +0 -133
- package/src/extensions/ExtensionComponent.tsx +0 -167
- package/src/extensions/ExtensionDialogHost.tsx +0 -445
- package/src/extensions/ExtensionRenderer.tsx +0 -100
- package/src/extensions/ExtensionScreen.tsx +0 -122
- package/src/extensions/ExtensionSettingsPage.tsx +0 -112
- package/src/extensions/ExtensionSettingsPages.tsx +0 -44
- package/src/extensions/ExtensionSettingsSidebar.tsx +0 -373
- package/src/extensions/ExtensionSlot.tsx +0 -213
- package/src/extensions/ExtensionWebview.tsx +0 -104
- package/src/extensions/ExtensionsProvider.tsx +0 -124
- package/src/extensions/SettingsWireForm.tsx +0 -182
- package/src/extensions/headless/dialog-queue.ts +0 -92
- package/src/extensions/headless/effect-channel.ts +0 -50
- package/src/extensions/headless/effect-router.ts +0 -107
- package/src/extensions/headless/fixture-host.ts +0 -381
- package/src/extensions/headless/host.ts +0 -398
- package/src/extensions/headless/index.ts +0 -17
- package/src/extensions/headless/labels.ts +0 -64
- package/src/extensions/headless/links.ts +0 -56
- package/src/extensions/headless/select.ts +0 -249
- package/src/extensions/headless/webview-bridge.ts +0 -127
- package/src/extensions/headless/wire.ts +0 -175
- package/src/extensions/hooks.ts +0 -209
- package/src/extensions/index.ts +0 -25
- package/src/extensions/kit.ts +0 -79
- package/src/extensions/links.tsx +0 -165
- package/src/extensions/testing/contract.ts +0 -382
- package/src/extensions/testing/index.ts +0 -6
- package/src/extensions/useExtensionsLabels.ts +0 -14
- package/src/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -581
- package/src/files/EditorColumn.tsx +0 -453
- package/src/files/EditorEnvironmentRoot.tsx +0 -63
- package/src/files/FilesDiagnosticsChip.tsx +0 -32
- package/src/files/FilesProvider.tsx +0 -58
- package/src/files/FilesTab.tsx +0 -441
- package/src/files/MediaDiff.tsx +0 -61
- package/src/files/MediaView.tsx +0 -170
- package/src/files/ReviewDraft.tsx +0 -88
- package/src/files/ReviewableDiff.tsx +0 -72
- package/src/files/SearchPanel.tsx +0 -325
- package/src/files/TreeColumn.tsx +0 -229
- package/src/files/code-excerpt.ts +0 -265
- package/src/files/code-menu.ts +0 -53
- package/src/files/drafts-store.ts +0 -192
- package/src/files/file-actions.ts +0 -152
- package/src/files/headless/editor-prefs.ts +0 -230
- package/src/files/headless/entries.ts +0 -172
- package/src/files/headless/fixture-host.ts +0 -260
- package/src/files/headless/host.ts +0 -387
- package/src/files/headless/index.ts +0 -14
- package/src/files/headless/labels.ts +0 -123
- package/src/files/headless/lsp-edits.ts +0 -58
- package/src/files/headless/media.ts +0 -57
- package/src/files/headless/name-match.ts +0 -38
- package/src/files/headless/search.ts +0 -23
- package/src/files/headless/view.ts +0 -114
- package/src/files/headless/workspace-diff.ts +0 -82
- package/src/files/index.ts +0 -25
- package/src/files/lazy-tabs.tsx +0 -41
- package/src/files/session-patch.ts +0 -45
- package/src/files/tab-hooks.ts +0 -37
- package/src/files/testing/contract.ts +0 -279
- package/src/files/testing/demo.ts +0 -36
- package/src/files/testing/index.ts +0 -7
- package/src/files/useCodeReview.tsx +0 -177
- package/src/files/useDiagnostics.ts +0 -59
- package/src/files/useDiagnosticsRun.ts +0 -86
- package/src/files/useEntryActions.ts +0 -280
- package/src/files/useFilesDiagnostics.ts +0 -51
- package/src/files/useFilesLabels.ts +0 -14
- package/src/files/useFolderChanges.ts +0 -38
- package/src/files/useLsp.ts +0 -181
- package/src/files/useOpenFiles.ts +0 -402
- package/src/files/useWorkspace.ts +0 -148
- package/src/files/working-tree-diff.ts +0 -142
- package/src/git/BranchMenu.tsx +0 -988
- package/src/git/GitBar.tsx +0 -297
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -390
- package/src/git/MoveSessionDialog.tsx +0 -396
- package/src/git/RemoteFolderPicker.tsx +0 -475
- package/src/git/SyncChip.tsx +0 -275
- package/src/git/WherePicker.tsx +0 -358
- package/src/git/headless/environment.ts +0 -132
- package/src/git/headless/host.ts +0 -353
- package/src/git/headless/index.ts +0 -14
- package/src/git/headless/labels.ts +0 -230
- package/src/git/headless/move.ts +0 -101
- package/src/git/headless/remote-clone.ts +0 -44
- package/src/git/headless/status-reads.ts +0 -77
- package/src/git/headless/switcher.ts +0 -215
- package/src/git/headless/sync.ts +0 -71
- package/src/git/index.ts +0 -17
- package/src/git/testing/contract.ts +0 -551
- package/src/git/testing/index.ts +0 -537
- package/src/git/useEnvironmentChoices.ts +0 -50
- package/src/git/useGitBar.ts +0 -180
- package/src/hooks/keyed-store.ts +0 -65
- package/src/hooks/useDisplayPath.tsx +0 -93
- package/src/hooks/useHydrated.ts +0 -16
- package/src/hooks/useMinuteTick.ts +0 -49
- package/src/hooks/useNearViewport.ts +0 -111
- package/src/hooks/usePersistedState.ts +0 -98
- package/src/hooks/useResizeDrag.ts +0 -240
- package/src/hooks/useTabDrag.ts +0 -88
- package/src/index.ts +0 -119
- package/src/keybindings/KeyCommands.tsx +0 -123
- package/src/keybindings/KeyHint.tsx +0 -78
- package/src/keybindings/KeybindingsProvider.tsx +0 -231
- package/src/keybindings/headless/catalog.ts +0 -360
- package/src/keybindings/headless/commands.ts +0 -77
- package/src/keybindings/headless/fixture-host.ts +0 -51
- package/src/keybindings/headless/host.ts +0 -29
- package/src/keybindings/headless/index.ts +0 -13
- package/src/keybindings/headless/key-scope.ts +0 -91
- package/src/keybindings/headless/labels.ts +0 -14
- package/src/keybindings/headless/overrides.ts +0 -64
- package/src/keybindings/index.ts +0 -15
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- package/src/keybindings/press.ts +0 -80
- package/src/keybindings/testing/contract.ts +0 -139
- package/src/keybindings/testing/index.ts +0 -6
- package/src/keybindings/useHelpKey.ts +0 -35
- package/src/keybindings/useKeybindingsLabels.ts +0 -14
- package/src/labels.tsx +0 -175
- package/src/machines/AddServerForm.tsx +0 -151
- package/src/machines/Banners.tsx +0 -172
- package/src/machines/DaemonMenu.tsx +0 -413
- package/src/machines/HostCapabilities.tsx +0 -245
- package/src/machines/HostSignIn.tsx +0 -63
- package/src/machines/HostSyncPanel.tsx +0 -275
- package/src/machines/HostsSection.tsx +0 -312
- package/src/machines/MachinesProvider.tsx +0 -164
- package/src/machines/ServerCard.tsx +0 -347
- package/src/machines/ServerMachinesPanel.tsx +0 -547
- package/src/machines/ServerUpdatePanel.tsx +0 -160
- package/src/machines/SyncAccounts.tsx +0 -148
- package/src/machines/SyncMarker.tsx +0 -87
- package/src/machines/SyncOutcomeBadge.tsx +0 -84
- package/src/machines/TokensPanel.tsx +0 -249
- package/src/machines/headless/fixture-host.ts +0 -519
- package/src/machines/headless/fixtures.ts +0 -164
- package/src/machines/headless/host.ts +0 -381
- package/src/machines/headless/index.ts +0 -13
- package/src/machines/headless/labels.ts +0 -364
- package/src/machines/headless/messages.ts +0 -209
- package/src/machines/headless/presence.ts +0 -110
- package/src/machines/headless/settings-focus.ts +0 -25
- package/src/machines/headless/stores.ts +0 -137
- package/src/machines/headless/sync.ts +0 -207
- package/src/machines/index.ts +0 -29
- package/src/machines/settings-section.tsx +0 -37
- package/src/machines/testing/contract.ts +0 -617
- package/src/machines/testing/index.ts +0 -7
- package/src/machines/testing/sync.contract.ts +0 -260
- package/src/motion/SwapIcon.tsx +0 -29
- package/src/motion/collapse.ts +0 -21
- package/src/motion/grow.tsx +0 -86
- package/src/motion/layout-animating.ts +0 -50
- package/src/motion/presence.ts +0 -191
- package/src/motion/provider.tsx +0 -63
- package/src/motion/reduced.ts +0 -36
- package/src/motion/roll.tsx +0 -131
- package/src/motion/shimmer.ts +0 -15
- package/src/motion/size.tsx +0 -192
- package/src/motion/springs.ts +0 -413
- package/src/motion/swap.tsx +0 -216
- package/src/motion/title-text.tsx +0 -74
- package/src/onboarding/ConnectProviderCard.tsx +0 -49
- package/src/onboarding/OnboardingFlow.tsx +0 -176
- package/src/onboarding/OnboardingProvider.tsx +0 -209
- package/src/onboarding/OnboardingStepFrame.tsx +0 -80
- package/src/onboarding/conversation.tsx +0 -196
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -488
- package/src/onboarding/demos/how-it-works.tsx +0 -698
- package/src/onboarding/demos/index.ts +0 -11
- package/src/onboarding/demos/parts.tsx +0 -133
- package/src/onboarding/demos/tour.tsx +0 -217
- package/src/onboarding/headless/controller.ts +0 -110
- package/src/onboarding/headless/fixture-host.ts +0 -269
- package/src/onboarding/headless/fixtures.ts +0 -486
- package/src/onboarding/headless/host.ts +0 -176
- package/src/onboarding/headless/index.ts +0 -8
- package/src/onboarding/headless/labels.ts +0 -282
- package/src/onboarding/index.ts +0 -21
- package/src/onboarding/marks.tsx +0 -107
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -128
- package/src/onboarding/skills/parts.tsx +0 -464
- package/src/onboarding/sources/SourceBrowser.tsx +0 -400
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -222
- package/src/onboarding/steps/ConversationStep.tsx +0 -132
- package/src/onboarding/steps/ExtensionsStep.tsx +0 -113
- package/src/onboarding/steps/FeatureExample.tsx +0 -46
- package/src/onboarding/steps/FeaturesStep.tsx +0 -88
- package/src/onboarding/steps/ImportStep.tsx +0 -156
- package/src/onboarding/steps/LookStep.tsx +0 -276
- package/src/onboarding/steps/ReadyStep.tsx +0 -278
- package/src/onboarding/steps/SkillsStep.tsx +0 -45
- package/src/onboarding/steps/StepSection.tsx +0 -63
- package/src/onboarding/steps/Tradeoff.tsx +0 -45
- package/src/onboarding/steps/WelcomeStep.tsx +0 -147
- package/src/onboarding/steps/connect/KeyForm.tsx +0 -112
- package/src/onboarding/steps/connect/ProviderPanel.tsx +0 -149
- package/src/onboarding/steps/connect/ProviderReady.tsx +0 -171
- package/src/onboarding/steps/connect/ready-text.ts +0 -17
- package/src/onboarding/steps/index.ts +0 -12
- package/src/onboarding/steps/tasks.tsx +0 -84
- package/src/onboarding/testing/contract.ts +0 -472
- package/src/onboarding/testing/index.ts +0 -7
- package/src/onboarding/tutorials.tsx +0 -45
- package/src/onboarding/useSignIn.ts +0 -58
- package/src/palette/CommandPalette.tsx +0 -59
- package/src/palette/PaletteDialog.tsx +0 -186
- package/src/palette/PaletteProvider.tsx +0 -149
- package/src/palette/PaletteRows.tsx +0 -208
- package/src/palette/app-sources.ts +0 -62
- package/src/palette/headless/app-sources.ts +0 -515
- package/src/palette/headless/gather.ts +0 -50
- package/src/palette/headless/host.ts +0 -129
- package/src/palette/headless/index.ts +0 -15
- package/src/palette/headless/labels.ts +0 -124
- package/src/palette/headless/rank-protocol.ts +0 -23
- package/src/palette/headless/recents.ts +0 -35
- package/src/palette/headless/session-sources.ts +0 -218
- package/src/palette/headless/sources.ts +0 -313
- package/src/palette/headless/store.ts +0 -105
- package/src/palette/index.ts +0 -17
- package/src/palette/rank.worker.ts +0 -30
- package/src/palette/setup.ts +0 -19
- package/src/palette/testing/contract.ts +0 -250
- package/src/palette/testing/index.ts +0 -152
- package/src/palette/useConversationSearch.ts +0 -115
- package/src/palette/usePaletteController.ts +0 -229
- package/src/palette/useRankedItems.ts +0 -122
- package/src/path.ts +0 -199
- package/src/server/demo-tools.ts +0 -34
- package/src/server/environment.ts +0 -118
- package/src/server/index.ts +0 -7
- package/src/server/scripted-provider.ts +0 -174
- package/src/server/sse-handler.ts +0 -457
- package/src/server/testing/index.ts +0 -7
- package/src/session/ArtifactRowChips.tsx +0 -260
- package/src/session/ArtifactsPanel.tsx +0 -426
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProjectHome.tsx +0 -733
- package/src/session/ProviderUsageProvider.tsx +0 -113
- package/src/session/QueueTab.tsx +0 -669
- package/src/session/RunningWorkDialog.tsx +0 -178
- package/src/session/SessionCacheFacts.tsx +0 -190
- package/src/session/SessionDetailsDialog.tsx +0 -627
- package/src/session/SessionHeader.tsx +0 -242
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -320
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -279
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -358
- package/src/session/WelcomeScreen.tsx +0 -88
- package/src/session/headless/artifacts.ts +0 -101
- package/src/session/headless/diff-tree.ts +0 -167
- package/src/session/headless/fixture-host.ts +0 -362
- package/src/session/headless/home-layout.ts +0 -276
- package/src/session/headless/host.ts +0 -263
- package/src/session/headless/index.ts +0 -23
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -337
- package/src/session/headless/queue-attachments.ts +0 -73
- package/src/session/headless/queue.ts +0 -122
- package/src/session/headless/running-work.ts +0 -85
- package/src/session/headless/session-actions.ts +0 -198
- package/src/session/headless/session-diffs.ts +0 -136
- package/src/session/headless/side.ts +0 -63
- package/src/session/headless/todos.ts +0 -62
- package/src/session/headless/usage-format.ts +0 -19
- package/src/session/headless/usage.ts +0 -407
- package/src/session/index.ts +0 -31
- package/src/session/modal-shell.tsx +0 -24
- package/src/session/testing/contract.ts +0 -588
- package/src/session/testing/demo.ts +0 -224
- package/src/session/testing/index.ts +0 -7
- package/src/session/useSessionLabels.ts +0 -14
- package/src/session/useUsageSummary.ts +0 -82
- package/src/settings/SettingsHeadingText.tsx +0 -54
- package/src/settings/SettingsHostSwitcher.tsx +0 -93
- package/src/settings/SettingsNav.tsx +0 -198
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -218
- package/src/settings/SettingsShell.tsx +0 -337
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -570
- package/src/settings/headless/claude-import.ts +0 -61
- package/src/settings/headless/enabled.ts +0 -44
- package/src/settings/headless/fixture-accounts.ts +0 -260
- package/src/settings/headless/fixture-host.ts +0 -162
- package/src/settings/headless/fixture-models.ts +0 -51
- package/src/settings/headless/fixture-performance.ts +0 -350
- package/src/settings/headless/fixture-sections.ts +0 -391
- package/src/settings/headless/host.ts +0 -127
- package/src/settings/headless/index.ts +0 -22
- package/src/settings/headless/labels.ts +0 -63
- package/src/settings/headless/layout-sections.ts +0 -41
- package/src/settings/headless/layout.ts +0 -732
- package/src/settings/headless/mcp.ts +0 -319
- package/src/settings/headless/models.ts +0 -51
- package/src/settings/headless/page-counts.ts +0 -40
- package/src/settings/headless/performance.ts +0 -524
- package/src/settings/headless/providers.ts +0 -117
- package/src/settings/headless/registry.ts +0 -62
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -340
- package/src/settings/index.ts +0 -32
- package/src/settings/rows.tsx +0 -152
- package/src/settings/section.tsx +0 -165
- package/src/settings/sections/appearance/AppearanceSection.tsx +0 -667
- package/src/settings/sections/appearance/labels.ts +0 -77
- package/src/settings/sections/claude-import/ClaudeImportDialog.tsx +0 -258
- package/src/settings/sections/claude-import/labels.ts +0 -42
- package/src/settings/sections/claude-import/use-claude-import-available.ts +0 -35
- package/src/settings/sections/descriptors.tsx +0 -261
- package/src/settings/sections/editor/EditorSection.tsx +0 -521
- package/src/settings/sections/editor/labels.ts +0 -84
- package/src/settings/sections/enabled-list/EnabledListSection.tsx +0 -112
- package/src/settings/sections/enabled-list/labels.ts +0 -37
- package/src/settings/sections/environments/EnvironmentsSection.tsx +0 -549
- package/src/settings/sections/environments/labels.ts +0 -31
- package/src/settings/sections/extensions/ChangeOriginDialog.tsx +0 -218
- package/src/settings/sections/extensions/CreateExtensionDialog.tsx +0 -210
- package/src/settings/sections/extensions/ExtensionConfigRows.tsx +0 -508
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -356
- package/src/settings/sections/extensions/ExtensionPicksBar.tsx +0 -112
- package/src/settings/sections/extensions/ExtensionSourceBrowser.tsx +0 -244
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -665
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -64
- package/src/settings/sections/extensions/options-labels.ts +0 -34
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -457
- package/src/settings/sections/host-catalog/labels.ts +0 -44
- package/src/settings/sections/index.ts +0 -60
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -385
- package/src/settings/sections/instructions/labels.ts +0 -33
- package/src/settings/sections/keybindings/KeybindingsSection.tsx +0 -124
- package/src/settings/sections/keybindings/labels.ts +0 -72
- package/src/settings/sections/keybindings/rows.ts +0 -103
- package/src/settings/sections/logs/LogsSection.tsx +0 -153
- package/src/settings/sections/logs/labels.ts +0 -20
- package/src/settings/sections/mcp/McpAddForm.tsx +0 -245
- package/src/settings/sections/mcp/McpSection.tsx +0 -358
- package/src/settings/sections/mcp/McpServerRow.tsx +0 -404
- package/src/settings/sections/mcp/labels.ts +0 -193
- package/src/settings/sections/models/AgentDefaults.tsx +0 -365
- package/src/settings/sections/models/ModelListPicker.tsx +0 -265
- package/src/settings/sections/models/ModelPickField.tsx +0 -220
- package/src/settings/sections/models/ModelRows.tsx +0 -381
- package/src/settings/sections/models/SpacesDefaultsSection.tsx +0 -102
- package/src/settings/sections/models/labels.ts +0 -119
- package/src/settings/sections/models/model-test.tsx +0 -125
- package/src/settings/sections/performance/PerfSparkline.tsx +0 -64
- package/src/settings/sections/performance/PerformanceHud.tsx +0 -110
- package/src/settings/sections/performance/PerformanceSection.tsx +0 -770
- package/src/settings/sections/performance/labels.ts +0 -114
- package/src/settings/sections/performance/use-perf-monitor.ts +0 -26
- package/src/settings/sections/plugins/PluginsSection.tsx +0 -151
- package/src/settings/sections/plugins/labels.ts +0 -23
- package/src/settings/sections/providers/CredentialSources.tsx +0 -237
- package/src/settings/sections/providers/ProvidersSection.tsx +0 -389
- package/src/settings/sections/providers/ServerProvidersSection.tsx +0 -244
- package/src/settings/sections/providers/ServerSignIn.tsx +0 -137
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -265
- package/src/settings/sections/shared/labels.ts +0 -31
- package/src/settings/sections/skills/SkillList.tsx +0 -494
- package/src/settings/sections/skills/SkillsSection.tsx +0 -249
- package/src/settings/sections/skills/labels.ts +0 -54
- package/src/settings/sections/use-section-labels.ts +0 -10
- package/src/settings/testing/accounts-demo.ts +0 -110
- package/src/settings/testing/accounts.contract.ts +0 -319
- package/src/settings/testing/claude-import.contract.ts +0 -93
- package/src/settings/testing/contract.ts +0 -192
- package/src/settings/testing/extension-options.contract.ts +0 -163
- package/src/settings/testing/index.ts +0 -11
- package/src/settings/testing/models.contract.ts +0 -135
- package/src/settings/testing/performance.contract.ts +0 -219
- package/src/settings/testing/sections.contract.ts +0 -306
- package/src/terminal/HostTerminalSurface.tsx +0 -917
- package/src/terminal/TerminalDrawer.tsx +0 -228
- package/src/terminal/TerminalPanel.tsx +0 -740
- package/src/terminal/TerminalProvider.tsx +0 -201
- package/src/terminal/TerminalSurface.tsx +0 -262
- package/src/terminal/box-glyphs.ts +0 -333
- package/src/terminal/ghostty.ts +0 -116
- package/src/terminal/grid-size.ts +0 -46
- package/src/terminal/headless/fixture-host.ts +0 -250
- package/src/terminal/headless/host.ts +0 -99
- package/src/terminal/headless/index.ts +0 -11
- package/src/terminal/headless/labels.ts +0 -69
- package/src/terminal/headless/layout.ts +0 -57
- package/src/terminal/headless/links.ts +0 -227
- package/src/terminal/headless/order.ts +0 -28
- package/src/terminal/headless/output-cursor.ts +0 -66
- package/src/terminal/headless/recent.ts +0 -20
- package/src/terminal/headless/replay.ts +0 -45
- package/src/terminal/headless/scope.ts +0 -60
- package/src/terminal/headless/store.ts +0 -637
- package/src/terminal/index.ts +0 -40
- package/src/terminal/keys.ts +0 -34
- package/src/terminal/testing/contract.ts +0 -274
- package/src/terminal/testing/demo.ts +0 -40
- package/src/terminal/testing/index.ts +0 -7
- package/src/terminal/theme.ts +0 -110
- package/src/terminal/useTerminalLabels.ts +0 -14
- package/src/theme/accents.ts +0 -46
- package/src/theme/color.ts +0 -450
- package/src/theme/css-vars.ts +0 -187
- package/src/theme/derive.ts +0 -700
- package/src/theme/from-theme.ts +0 -52
- package/src/theme/stylesheet.ts +0 -55
- package/src/theme/themes.ts +0 -767
- package/src/theme/without-transitions.ts +0 -18
- package/src/uno.ts +0 -167
- package/src/workspace/LayoutBudget.tsx +0 -143
- package/src/workspace/PanelContentView.tsx +0 -523
- package/src/workspace/PanelCorner.tsx +0 -111
- package/src/workspace/PanelGroups.tsx +0 -264
- package/src/workspace/PanelHome.tsx +0 -71
- package/src/workspace/PanelItems.tsx +0 -368
- package/src/workspace/PanelStrip.tsx +0 -316
- package/src/workspace/SidePanel.tsx +0 -240
- package/src/workspace/TabParking.tsx +0 -120
- package/src/workspace/WorkspaceProvider.tsx +0 -558
- package/src/workspace/dnd/engine.ts +0 -371
- package/src/workspace/dnd/hooks.ts +0 -72
- package/src/workspace/dnd/index.ts +0 -57
- package/src/workspace/dnd/parking.tsx +0 -181
- package/src/workspace/extension-tabs.tsx +0 -174
- package/src/workspace/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -129
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -44
- package/src/workspace/headless/layout-memory.ts +0 -649
- package/src/workspace/headless/layouts.ts +0 -224
- package/src/workspace/headless/open-target.ts +0 -125
- package/src/workspace/headless/ops.ts +0 -163
- package/src/workspace/headless/panel-focus.ts +0 -58
- package/src/workspace/headless/panel-tree.ts +0 -259
- package/src/workspace/headless/resolve.ts +0 -146
- package/src/workspace/headless/reveal-at.ts +0 -27
- package/src/workspace/headless/strip-drop.ts +0 -81
- package/src/workspace/headless/tree.ts +0 -480
- package/src/workspace/headless/view.ts +0 -164
- package/src/workspace/index.ts +0 -23
- package/src/workspace/panel-group-keys.ts +0 -36
- package/src/workspace/panel-visibility.ts +0 -28
- package/src/workspace/tab-scopes.ts +0 -245
- package/src/workspace/testing/contract.ts +0 -282
- package/src/workspace/testing/index.ts +0 -140
- package/src/workspace/use-split-drag.ts +0 -73
- package/src/workspace/useScopeLayout.ts +0 -26
- package/src/workspace/useViewport.ts +0 -22
- package/src/workspace/useWorkspaceLabels.ts +0 -14
- package/src/workspace/workspace-key-commands.ts +0 -108
- /package/dist/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +0 -0
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Where the new-chat draft will run: a folder on this computer (or none,
|
|
3
|
-
* "just chat"), a saved server and its folder, or a machine's environment and
|
|
4
|
-
* its folder. Every pick is the current draft's only: it resets when the
|
|
5
|
-
* conversation moves to a session (the first send included), so the next new
|
|
6
|
-
* chat asks again. The folder rules are `draft-target.ts`
|
|
7
|
-
* (`zidane-ui/chat/headless`); the environment kinds come from the git host
|
|
8
|
-
* (`useEnvironmentChoices`). The app holds the folder new chats open in and
|
|
9
|
-
* the saved servers, and hears the draft's local folder (its draft scope).
|
|
10
|
-
*
|
|
11
|
-
* On a server, the draft offers the server's recent folders
|
|
12
|
-
* (`serverFolders`), its first root (`remoteRoot`) and a repository import
|
|
13
|
-
* there (`importRepoOnServer`). With no folder picked, a draft started from a
|
|
14
|
-
* project on this computer clones that project's repository there on send
|
|
15
|
-
* (`remoteClone`, `git/headless/remote-clone.ts`): the git host reads the
|
|
16
|
-
* local `origin` and lists the server's first root.
|
|
17
|
-
*/
|
|
18
|
-
import type { EnvironmentDescriptor } from 'zidane/chat';
|
|
19
|
-
import { LOCAL_HOST_KEY } from 'zidane/chat/pure';
|
|
20
|
-
import { useEffect, useMemo, useState } from 'react';
|
|
21
|
-
|
|
22
|
-
import { useGitHost } from '../../git/GitProvider';
|
|
23
|
-
import { resolveDraftDescriptor, type DraftEnvironment, type EnvironmentMachine } from '../../git/headless/environment';
|
|
24
|
-
import type { GitFolderListing } from '../../git/headless/host';
|
|
25
|
-
import { resolveRemoteClone, type DraftRemoteClone } from '../../git/headless/remote-clone';
|
|
26
|
-
import { useImportRepo } from '../../git/ImportRepoDialog';
|
|
27
|
-
import { useEnvironmentChoices } from '../../git/useEnvironmentChoices';
|
|
28
|
-
import {
|
|
29
|
-
draftFolderPath,
|
|
30
|
-
draftLocalFolder,
|
|
31
|
-
recentHostFolders,
|
|
32
|
-
recentLocalFolders,
|
|
33
|
-
type DraftFolderSource,
|
|
34
|
-
} from '../headless/draft-target';
|
|
35
|
-
|
|
36
|
-
/** A saved server a draft can run on. */
|
|
37
|
-
export interface DraftServer {
|
|
38
|
-
/** Its host id. */
|
|
39
|
-
id: string;
|
|
40
|
-
/** Its name. */
|
|
41
|
-
name: string;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** What {@link useDraftTarget} reads from the app. */
|
|
45
|
-
export interface DraftTargetOptions {
|
|
46
|
-
/** The open session (its folder, `''` for none); `null` for the new-chat draft. */
|
|
47
|
-
session: { id: string; cwd: string } | null;
|
|
48
|
-
/** The folder new chats open in (`null`: none picked yet). */
|
|
49
|
-
defaultFolder: string | null;
|
|
50
|
-
/** Makes `folder` the one new chats open in. */
|
|
51
|
-
setDefaultFolder(folder: string): void;
|
|
52
|
-
/** The session rows, most recently updated first: the folder menu's recent folders. */
|
|
53
|
-
sessions: readonly DraftFolderSource[];
|
|
54
|
-
/** The saved servers a draft can run on. */
|
|
55
|
-
servers: readonly DraftServer[];
|
|
56
|
-
/** Hears the draft's folder on this computer while the draft shows, `null` once it leaves. Absent: not told. */
|
|
57
|
-
onLocalFolder?(folder: string | null): void;
|
|
58
|
-
/**
|
|
59
|
-
* A pick made elsewhere (a server project's header in the sidebar, the
|
|
60
|
-
* Chats header): the draft moves to that host and folder, or to no folder,
|
|
61
|
-
* once per `seq`. A folder on this computer goes through `defaultFolder`
|
|
62
|
-
* instead.
|
|
63
|
-
*/
|
|
64
|
-
request?: DraftTargetRequest | null;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** A draft target picked outside the composer. */
|
|
68
|
-
export interface DraftTargetRequest {
|
|
69
|
-
/** Grows with each request: a new one applies even to the same target. */
|
|
70
|
-
seq: number;
|
|
71
|
-
/** The saved server. */
|
|
72
|
-
hostId: string;
|
|
73
|
-
/** Its folder (`null`: its first root). */
|
|
74
|
-
folder: string | null;
|
|
75
|
-
/** A chat with no folder, on the request's host ("Start without a folder"); `folder` is ignored. */
|
|
76
|
-
folderless?: boolean;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** The draft's target and its picks, as the composer's where menu and folder pickers read them. */
|
|
80
|
-
export interface DraftTarget {
|
|
81
|
-
/** `null`: no folder picked yet (the folder gate shows); `''`: none. */
|
|
82
|
-
folderPath: string | null;
|
|
83
|
-
/** This computer's recent folders. */
|
|
84
|
-
recentFolders: readonly string[];
|
|
85
|
-
/** "Start without a folder" for this draft. */
|
|
86
|
-
justChat(): void;
|
|
87
|
-
/** Picks a folder on this computer (the git host's dialog). */
|
|
88
|
-
pickFolder(): Promise<void>;
|
|
89
|
-
/** Picks one of {@link DraftTarget.recentFolders}. */
|
|
90
|
-
pickRecent(folder: string): void;
|
|
91
|
-
/** Imports a repository and opens the draft in it. */
|
|
92
|
-
importRepoIntoDraft(): Promise<void>;
|
|
93
|
-
/** The saved server the draft runs on (absent: this computer). */
|
|
94
|
-
server?: DraftServer;
|
|
95
|
-
/** Runs the draft on a saved server (`LOCAL_HOST_KEY`: this computer). */
|
|
96
|
-
setHostId(hostId: string): void;
|
|
97
|
-
/** The server's folder (`null`: its first root). */
|
|
98
|
-
remoteFolder: string | null;
|
|
99
|
-
/** Picks the server's folder. */
|
|
100
|
-
setRemoteFolder(folder: string | null): void;
|
|
101
|
-
/** The server's recent folders (its sessions' folders), most recent first. */
|
|
102
|
-
serverFolders: readonly string[];
|
|
103
|
-
/** The server's first workspace root (the default folder), once read. */
|
|
104
|
-
remoteRoot: string | null;
|
|
105
|
-
/** Clones a repository on the server and opens the draft in it. Absent: the server takes no clones. */
|
|
106
|
-
importRepoOnServer?: () => Promise<void>;
|
|
107
|
-
/** On a server with no folder picked: the local project's repository, cloned there on send. `null`: nothing to clone. */
|
|
108
|
-
remoteClone: DraftRemoteClone | null;
|
|
109
|
-
/** The send is cloning {@link DraftTarget.remoteClone}. */
|
|
110
|
-
cloning: boolean;
|
|
111
|
-
/** Marks the clone of a send as running or done. */
|
|
112
|
-
setCloning(cloning: boolean): void;
|
|
113
|
-
/** The draft's environment pick (`null`: the default). */
|
|
114
|
-
environment: DraftEnvironment | null;
|
|
115
|
-
/** Picks the draft's environment. */
|
|
116
|
-
setEnvironment(environment: DraftEnvironment | null): void;
|
|
117
|
-
/** The environment kinds the draft's host offers. */
|
|
118
|
-
environmentChoices: readonly EnvironmentDescriptor[];
|
|
119
|
-
/** The machine the picked environment runs on. */
|
|
120
|
-
machine?: EnvironmentMachine;
|
|
121
|
-
/** The machine's folder (`null`: its first one). */
|
|
122
|
-
machineFolder: string | null;
|
|
123
|
-
/** Picks the machine's folder. */
|
|
124
|
-
setMachineFolder(folder: string | null): void;
|
|
125
|
-
/** The host the machine's folders are browsed through. */
|
|
126
|
-
machineHost: string;
|
|
127
|
-
/** Why the last new chat could not be created (the prompt is back in the box). */
|
|
128
|
-
error: string | null;
|
|
129
|
-
/** Shows or clears {@link DraftTarget.error}. */
|
|
130
|
-
setError(error: string | null): void;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* The new-chat draft's target, reset with the draft.
|
|
135
|
-
*
|
|
136
|
-
* @param options - The open session and the app's folder, sessions and servers.
|
|
137
|
-
*/
|
|
138
|
-
export function useDraftTarget(options: DraftTargetOptions): DraftTarget {
|
|
139
|
-
const { session, defaultFolder, setDefaultFolder, sessions, servers, onLocalFolder, request } = options;
|
|
140
|
-
const isNewSession = session == null;
|
|
141
|
-
|
|
142
|
-
const recentFolders = useMemo(() => recentLocalFolders(sessions), [sessions]);
|
|
143
|
-
|
|
144
|
-
// "Start without a folder", for this draft only.
|
|
145
|
-
const [folderlessDraft, setFolderlessDraft] = useState(false);
|
|
146
|
-
const [environment, setEnvironment] = useState<DraftEnvironment | null>(null);
|
|
147
|
-
|
|
148
|
-
// This computer unless a saved server is picked; then the environment and folder steps ask that server.
|
|
149
|
-
const [hostId, setHostId] = useState<string>(LOCAL_HOST_KEY);
|
|
150
|
-
const [remoteFolder, setRemoteFolder] = useState<string | null>(null);
|
|
151
|
-
const server = isNewSession && hostId !== LOCAL_HOST_KEY ? servers.find((host) => host.id === hostId) : undefined;
|
|
152
|
-
|
|
153
|
-
const [error, setError] = useState<string | null>(null);
|
|
154
|
-
|
|
155
|
-
// The picks reset while rendering (no effect, no frame with the stale pick).
|
|
156
|
-
const sessionId = session?.id;
|
|
157
|
-
const [resetKeys, setResetKeys] = useState({ sessionId, hostId, defaultFolder });
|
|
158
|
-
if (resetKeys.sessionId !== sessionId || resetKeys.hostId !== hostId || resetKeys.defaultFolder !== defaultFolder) {
|
|
159
|
-
const newSession = resetKeys.sessionId !== sessionId;
|
|
160
|
-
const newHost = resetKeys.hostId !== hostId;
|
|
161
|
-
setResetKeys({ sessionId, hostId, defaultFolder });
|
|
162
|
-
// Picking a folder elsewhere (a project's "+" in the sidebar) takes the draft out of "no folder" mode.
|
|
163
|
-
if (newSession || resetKeys.defaultFolder !== defaultFolder) setFolderlessDraft(false);
|
|
164
|
-
// The picked server's folders and environments are its own: a new host starts over.
|
|
165
|
-
if (newHost) setRemoteFolder(null);
|
|
166
|
-
if (newSession || newHost) {
|
|
167
|
-
setEnvironment(null);
|
|
168
|
-
setError(null);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// A pick made elsewhere lands once: host and folder together, so the host change keeps the folder.
|
|
173
|
-
// Seqs start at 1: a request made before this draft mounted still lands (the app clears it once used).
|
|
174
|
-
const [appliedRequest, setAppliedRequest] = useState(0);
|
|
175
|
-
if (isNewSession && request && request.seq !== appliedRequest) {
|
|
176
|
-
setAppliedRequest(request.seq);
|
|
177
|
-
setHostId(request.hostId);
|
|
178
|
-
// The host's reset is done here, with the requested folder instead of none.
|
|
179
|
-
setResetKeys((keys) => ({ ...keys, hostId: request.hostId }));
|
|
180
|
-
setRemoteFolder(request.folderless ? null : request.folder);
|
|
181
|
-
setFolderlessDraft(request.folderless === true);
|
|
182
|
-
setEnvironment(null);
|
|
183
|
-
setError(null);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// The picked server was removed: the draft is back on this computer, visibly.
|
|
187
|
-
if (hostId !== LOCAL_HOST_KEY && !servers.some((host) => host.id === hostId)) setHostId(LOCAL_HOST_KEY);
|
|
188
|
-
|
|
189
|
-
const folderState = {
|
|
190
|
-
...(session ? { sessionCwd: session.cwd } : {}),
|
|
191
|
-
onServer: Boolean(server),
|
|
192
|
-
folderless: folderlessDraft,
|
|
193
|
-
defaultFolder,
|
|
194
|
-
};
|
|
195
|
-
const folderPath = draftFolderPath(folderState);
|
|
196
|
-
const environmentChoices = useEnvironmentChoices(
|
|
197
|
-
isNewSession ? (server ? (remoteFolder ?? '') : (folderPath ?? '')) : null,
|
|
198
|
-
server?.id,
|
|
199
|
-
);
|
|
200
|
-
// A machine's environment: its folder is on that machine, browsed through the draft's host.
|
|
201
|
-
const machine = isNewSession ? resolveDraftDescriptor(environmentChoices, environment)?.machine : undefined;
|
|
202
|
-
const [machineFolder, setMachineFolder] = useState<string | null>(null);
|
|
203
|
-
const machineHost = server?.id ?? LOCAL_HOST_KEY;
|
|
204
|
-
const machineKey = `${machine?.id ?? ''}\u0000${machineHost}`;
|
|
205
|
-
const [folderMachine, setFolderMachine] = useState(machineKey);
|
|
206
|
-
if (folderMachine !== machineKey) {
|
|
207
|
-
setFolderMachine(machineKey);
|
|
208
|
-
setMachineFolder(null);
|
|
209
|
-
}
|
|
210
|
-
// Only a folder on this computer makes the draft's scope.
|
|
211
|
-
const localFolder = draftLocalFolder({ ...folderState, onMachine: Boolean(machine) });
|
|
212
|
-
// Only while it shows the draft: a session telling its (null) folder would clear the draft's scope.
|
|
213
|
-
useEffect(() => {
|
|
214
|
-
if (isNewSession) onLocalFolder?.(localFolder);
|
|
215
|
-
}, [isNewSession, localFolder, onLocalFolder]);
|
|
216
|
-
useEffect(() => {
|
|
217
|
-
if (!isNewSession) return undefined;
|
|
218
|
-
return () => onLocalFolder?.(null);
|
|
219
|
-
}, [isNewSession, onLocalFolder]);
|
|
220
|
-
|
|
221
|
-
// The server's first root (where clones land, what "Default folder" means, what it lets clients do) and the
|
|
222
|
-
// local project's `origin` (clone on send). Each answer is kept with what it was read for, so a stale one never
|
|
223
|
-
// shows for another pick.
|
|
224
|
-
const git = useGitHost();
|
|
225
|
-
const originUrl = git?.originUrl;
|
|
226
|
-
const listFolders = git?.listFolders;
|
|
227
|
-
const canClone = Boolean(git?.cloneOnServer);
|
|
228
|
-
const rootKey = server && listFolders ? server.id : null;
|
|
229
|
-
const [rootRead, setRootRead] = useState<{ key: string; root: GitFolderListing | null } | null>(null);
|
|
230
|
-
useEffect(() => {
|
|
231
|
-
if (!rootKey || !listFolders) return undefined;
|
|
232
|
-
let cancelled = false;
|
|
233
|
-
listFolders({ hostId: rootKey })
|
|
234
|
-
.then((listed) => {
|
|
235
|
-
if (!cancelled) setRootRead({ key: rootKey, root: listed.ok ? listed.listing : null });
|
|
236
|
-
})
|
|
237
|
-
.catch(() => {
|
|
238
|
-
if (!cancelled) setRootRead({ key: rootKey, root: null });
|
|
239
|
-
});
|
|
240
|
-
return () => {
|
|
241
|
-
cancelled = true;
|
|
242
|
-
};
|
|
243
|
-
}, [rootKey, listFolders]);
|
|
244
|
-
const remoteRootListing = rootKey && rootRead?.key === rootKey ? rootRead.root : null;
|
|
245
|
-
|
|
246
|
-
const cloneSource = server && canClone && !folderlessDraft ? defaultFolder : null;
|
|
247
|
-
const [originRead, setOriginRead] = useState<{ key: string; origin: string | null } | null>(null);
|
|
248
|
-
useEffect(() => {
|
|
249
|
-
if (!cloneSource || !originUrl) return undefined;
|
|
250
|
-
let cancelled = false;
|
|
251
|
-
originUrl(cloneSource)
|
|
252
|
-
.then((origin) => {
|
|
253
|
-
if (!cancelled) setOriginRead({ key: cloneSource, origin });
|
|
254
|
-
})
|
|
255
|
-
.catch(() => {
|
|
256
|
-
if (!cancelled) setOriginRead({ key: cloneSource, origin: null });
|
|
257
|
-
});
|
|
258
|
-
return () => {
|
|
259
|
-
cancelled = true;
|
|
260
|
-
};
|
|
261
|
-
}, [cloneSource, originUrl]);
|
|
262
|
-
const origin = cloneSource && originRead?.key === cloneSource ? originRead.origin : null;
|
|
263
|
-
const remoteClone =
|
|
264
|
-
remoteFolder === null && remoteRootListing && origin ? resolveRemoteClone(origin, remoteRootListing) : null;
|
|
265
|
-
const [cloning, setCloning] = useState(false);
|
|
266
|
-
const serverFolders = useMemo(() => (server ? recentHostFolders(sessions, server.id) : []), [server, sessions]);
|
|
267
|
-
|
|
268
|
-
const pickLocal = (folder: string) => {
|
|
269
|
-
// A real folder supersedes a "start without a folder" draft.
|
|
270
|
-
setFolderlessDraft(false);
|
|
271
|
-
setDefaultFolder(folder);
|
|
272
|
-
};
|
|
273
|
-
const importRepo = useImportRepo();
|
|
274
|
-
const importOnServer = useImportRepo(server ? { hostId: server.id } : undefined);
|
|
275
|
-
const serverImports = Boolean(server && canClone && remoteRootListing?.allows?.clone);
|
|
276
|
-
|
|
277
|
-
return {
|
|
278
|
-
folderPath,
|
|
279
|
-
recentFolders,
|
|
280
|
-
justChat: () => setFolderlessDraft(true),
|
|
281
|
-
pickFolder: async () => {
|
|
282
|
-
const picked = (await git?.pickFolder?.()) ?? null;
|
|
283
|
-
if (picked) pickLocal(picked);
|
|
284
|
-
},
|
|
285
|
-
pickRecent: pickLocal,
|
|
286
|
-
importRepoIntoDraft: async () => {
|
|
287
|
-
const cloned = await importRepo();
|
|
288
|
-
if (cloned) pickLocal(cloned);
|
|
289
|
-
},
|
|
290
|
-
...(server ? { server } : {}),
|
|
291
|
-
setHostId,
|
|
292
|
-
remoteFolder,
|
|
293
|
-
setRemoteFolder,
|
|
294
|
-
serverFolders,
|
|
295
|
-
remoteRoot: remoteRootListing?.path ?? null,
|
|
296
|
-
...(serverImports
|
|
297
|
-
? {
|
|
298
|
-
importRepoOnServer: async () => {
|
|
299
|
-
const cloned = await importOnServer();
|
|
300
|
-
if (cloned) setRemoteFolder(cloned);
|
|
301
|
-
},
|
|
302
|
-
}
|
|
303
|
-
: {}),
|
|
304
|
-
remoteClone,
|
|
305
|
-
cloning,
|
|
306
|
-
setCloning,
|
|
307
|
-
environment,
|
|
308
|
-
setEnvironment,
|
|
309
|
-
environmentChoices,
|
|
310
|
-
...(machine ? { machine } : {}),
|
|
311
|
-
machineFolder,
|
|
312
|
-
setMachineFolder,
|
|
313
|
-
machineHost,
|
|
314
|
-
error,
|
|
315
|
-
setError,
|
|
316
|
-
};
|
|
317
|
-
}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a new session starts with: the folder (the one last used,
|
|
3
|
-
* `ComposerHost.folders`), the agent, the model pick and its knobs. The
|
|
4
|
-
* space's settings preset wins; else the model the host remembers
|
|
5
|
-
* (`ComposerHost.prefs`), else the built-in default.
|
|
6
|
-
*/
|
|
7
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
8
|
-
import type { Settings } from 'zidane/chat';
|
|
9
|
-
import {
|
|
10
|
-
DEFAULT_MODEL_PICK,
|
|
11
|
-
defaultSessionAgent,
|
|
12
|
-
defaultSessionKnobs,
|
|
13
|
-
defaultSessionModel,
|
|
14
|
-
formatModelSetting,
|
|
15
|
-
parseModelSetting,
|
|
16
|
-
type SessionKnobs,
|
|
17
|
-
} from 'zidane/chat/pure';
|
|
18
|
-
|
|
19
|
-
import { defaultModelPatch, rememberedDefaultModel } from '../headless/composer/new-session-defaults';
|
|
20
|
-
import { settledResource } from '../headless/composer/remember-model-pick';
|
|
21
|
-
import type { ModelPickRef } from '../headless/composer/models';
|
|
22
|
-
import { useComposerHost } from './ComposerHostProvider';
|
|
23
|
-
|
|
24
|
-
/** Where the default model comes from. */
|
|
25
|
-
export type NewSessionModelSource = 'preset' | 'remembered' | 'builtin';
|
|
26
|
-
|
|
27
|
-
/** What a new session starts with, and the writers of each pick. */
|
|
28
|
-
export interface NewSessionDefaults {
|
|
29
|
-
/** The project root of `defaultFolder`, `null` without a folder or a project. */
|
|
30
|
-
projectRoot: string | null;
|
|
31
|
-
/** The folder a new session opens in, `null` until known or when there is none. */
|
|
32
|
-
defaultFolder: string | null;
|
|
33
|
-
/** The agent: this chat's pick, else the space's, else `build`. */
|
|
34
|
-
defaultAgentId: string;
|
|
35
|
-
/** The effort and options the space's preset sets. */
|
|
36
|
-
newSessionKnobs: SessionKnobs;
|
|
37
|
-
/** The model's provider, `null` until resolved. */
|
|
38
|
-
defaultProviderKey: string | null;
|
|
39
|
-
/** The model, `null` until resolved. */
|
|
40
|
-
defaultModelId: string | null;
|
|
41
|
-
/** The stored account the model runs on, `null` for the active one. */
|
|
42
|
-
defaultAccount: string | null;
|
|
43
|
-
/** Where the model comes from, `null` until resolved. */
|
|
44
|
-
modelSource: NewSessionModelSource | null;
|
|
45
|
-
/** Sets the folder and remembers it (`null`: none, nothing remembered). */
|
|
46
|
-
setDefaultFolder: (path: string | null) => void;
|
|
47
|
-
/** Picks the agent for this chat (`null`: back to the space's). */
|
|
48
|
-
setDefaultAgentId: (id: string | null) => void;
|
|
49
|
-
/** Picks the model and remembers it, unless `persist` is `false`. */
|
|
50
|
-
setDefaultModel: (pick: ModelPickRef, opts?: { persist?: boolean }) => void;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
interface ModelState {
|
|
54
|
-
providerKey: string | null;
|
|
55
|
-
modelId: string | null;
|
|
56
|
-
account: string | null;
|
|
57
|
-
source: NewSessionModelSource | null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const UNRESOLVED: ModelState = { providerKey: null, modelId: null, account: null, source: null };
|
|
61
|
-
const BUILTIN: ModelState = { ...DEFAULT_MODEL_PICK, account: null, source: 'builtin' };
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* The new session's defaults in a space, over the provided `ComposerHost`.
|
|
65
|
-
*
|
|
66
|
-
* @param settings - The settings (the space presets).
|
|
67
|
-
* @param spaceId - The space new sessions go to.
|
|
68
|
-
*/
|
|
69
|
-
export function useNewSessionDefaults(settings: Settings, spaceId: string): NewSessionDefaults {
|
|
70
|
-
const { prefs, models, folders, completions } = useComposerHost();
|
|
71
|
-
const locationOf = completions?.locationOf;
|
|
72
|
-
const [defaultFolder, setDefaultFolderState] = useState<string | null>(null);
|
|
73
|
-
const [agentPick, setAgentPick] = useState<string | null>(null);
|
|
74
|
-
// What the host remembers (read when no preset applies), and a pick made under the preset in force then.
|
|
75
|
-
const [remembered, setRemembered] = useState<ModelState>(UNRESOLVED);
|
|
76
|
-
const [picked, setPicked] = useState<{ model: ModelState; presetKey: string | null } | null>(null);
|
|
77
|
-
const [located, setLocated] = useState<string | null>(null);
|
|
78
|
-
|
|
79
|
-
const preset = useMemo(() => defaultSessionModel(settings, spaceId), [settings, spaceId]);
|
|
80
|
-
const newSessionKnobs = useMemo(() => defaultSessionKnobs(settings, spaceId), [settings, spaceId]);
|
|
81
|
-
const presetKey = preset ? formatModelSetting(preset) : null;
|
|
82
|
-
const defaultAgentId = agentPick ?? defaultSessionAgent(settings, spaceId) ?? 'build';
|
|
83
|
-
const presetModel = useMemo<ModelState | null>(() => {
|
|
84
|
-
const parsed = parseModelSetting(presetKey ?? undefined);
|
|
85
|
-
return parsed
|
|
86
|
-
? { providerKey: parsed.providerKey, modelId: parsed.modelId, account: parsed.account ?? null, source: 'preset' }
|
|
87
|
-
: null;
|
|
88
|
-
}, [presetKey]);
|
|
89
|
-
// A preset change resets a pick made under the previous one.
|
|
90
|
-
const model =
|
|
91
|
-
picked && picked.presetKey === presetKey ? picked.model : (presetModel ?? (prefs ? remembered : BUILTIN));
|
|
92
|
-
|
|
93
|
-
useEffect(() => {
|
|
94
|
-
if (presetModel || !prefs) return undefined;
|
|
95
|
-
let cancelled = false;
|
|
96
|
-
void prefs
|
|
97
|
-
.get()
|
|
98
|
-
.then((state) => {
|
|
99
|
-
if (cancelled) return;
|
|
100
|
-
const pick = rememberedDefaultModel(state);
|
|
101
|
-
if (!pick) {
|
|
102
|
-
setRemembered(BUILTIN);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const { providerKey, modelId, account } = pick;
|
|
106
|
-
setRemembered({ providerKey, modelId, account: null, source: 'remembered' });
|
|
107
|
-
// The remembered account only when it still serves that provider.
|
|
108
|
-
if (account && models) {
|
|
109
|
-
void settledResource(models.catalog(undefined, null))
|
|
110
|
-
.then((catalog) => {
|
|
111
|
-
if (!cancelled && catalog.some((e) => e.providerKey === providerKey && e.account?.id === account)) {
|
|
112
|
-
setRemembered((now) =>
|
|
113
|
-
now.providerKey === providerKey && now.modelId === modelId ? { ...now, account } : now,
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
})
|
|
117
|
-
.catch(() => undefined);
|
|
118
|
-
}
|
|
119
|
-
})
|
|
120
|
-
.catch(() => {
|
|
121
|
-
if (!cancelled) setRemembered(BUILTIN);
|
|
122
|
-
});
|
|
123
|
-
return () => {
|
|
124
|
-
cancelled = true;
|
|
125
|
-
};
|
|
126
|
-
}, [presetModel, prefs, models]);
|
|
127
|
-
|
|
128
|
-
const setDefaultAgentId = useCallback((id: string | null) => setAgentPick(id), []);
|
|
129
|
-
|
|
130
|
-
const setDefaultModel = useCallback(
|
|
131
|
-
(pick: ModelPickRef, opts?: { persist?: boolean }) => {
|
|
132
|
-
setPicked({
|
|
133
|
-
model: {
|
|
134
|
-
providerKey: pick.providerKey,
|
|
135
|
-
modelId: pick.modelId,
|
|
136
|
-
account: pick.account ?? null,
|
|
137
|
-
source: 'remembered',
|
|
138
|
-
},
|
|
139
|
-
presetKey,
|
|
140
|
-
});
|
|
141
|
-
if (opts?.persist === false || !prefs) return;
|
|
142
|
-
void prefs
|
|
143
|
-
.get()
|
|
144
|
-
.then((current) => prefs.set(defaultModelPatch(current, pick)))
|
|
145
|
-
.catch(() => undefined);
|
|
146
|
-
},
|
|
147
|
-
[prefs, presetKey],
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
useEffect(() => {
|
|
151
|
-
if (!folders) return undefined;
|
|
152
|
-
let cancelled = false;
|
|
153
|
-
void folders
|
|
154
|
-
.lastUsed()
|
|
155
|
-
.then((last) => {
|
|
156
|
-
if (!cancelled) setDefaultFolderState(last);
|
|
157
|
-
})
|
|
158
|
-
.catch(() => undefined);
|
|
159
|
-
return () => {
|
|
160
|
-
cancelled = true;
|
|
161
|
-
};
|
|
162
|
-
}, [folders]);
|
|
163
|
-
|
|
164
|
-
useEffect(() => {
|
|
165
|
-
if (!defaultFolder || !locationOf) return undefined;
|
|
166
|
-
let cancelled = false;
|
|
167
|
-
void locationOf(defaultFolder)
|
|
168
|
-
.then((location) => {
|
|
169
|
-
if (!cancelled) setLocated(location?.projectRoot ?? null);
|
|
170
|
-
})
|
|
171
|
-
.catch(() => {
|
|
172
|
-
if (!cancelled) setLocated(null);
|
|
173
|
-
});
|
|
174
|
-
return () => {
|
|
175
|
-
cancelled = true;
|
|
176
|
-
};
|
|
177
|
-
}, [defaultFolder, locationOf]);
|
|
178
|
-
const projectRoot = defaultFolder && locationOf ? located : null;
|
|
179
|
-
|
|
180
|
-
const setDefaultFolder = useCallback(
|
|
181
|
-
(path: string | null) => {
|
|
182
|
-
setDefaultFolderState(path);
|
|
183
|
-
if (path && folders) void folders.setLastUsed(path).catch(() => undefined);
|
|
184
|
-
},
|
|
185
|
-
[folders],
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
return {
|
|
189
|
-
projectRoot,
|
|
190
|
-
defaultFolder,
|
|
191
|
-
defaultAgentId,
|
|
192
|
-
newSessionKnobs,
|
|
193
|
-
defaultProviderKey: model.providerKey,
|
|
194
|
-
defaultModelId: model.modelId,
|
|
195
|
-
defaultAccount: model.account,
|
|
196
|
-
modelSource: model.source,
|
|
197
|
-
setDefaultFolder,
|
|
198
|
-
setDefaultAgentId,
|
|
199
|
-
setDefaultModel,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whether a provider is ready (`ChatHost.providerReady`), read into a store
|
|
3
|
-
* the app shares (the sign-in pill, the Connect a provider card, the send's
|
|
4
|
-
* check): at mount and each time `paused` turns off. The app pauses it while
|
|
5
|
-
* a modal is open: Settings › Accounts and the setup wizard own the
|
|
6
|
-
* credential writes, so a read after they close is enough.
|
|
7
|
-
*/
|
|
8
|
-
import { useEffect } from 'react';
|
|
9
|
-
|
|
10
|
-
import type { Writable } from '../headless/store';
|
|
11
|
-
import { useChatHost } from '../ChatProvider';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Keeps `store` on the chat host's provider check.
|
|
15
|
-
*
|
|
16
|
-
* @param store - Where the answer goes: `true` / `false`, `null` when the check failed (unknown, not "none": it must not block sends).
|
|
17
|
-
* @param paused - Skip reading while true; turning false reads again.
|
|
18
|
-
*/
|
|
19
|
-
export function useProviderReadyPoll(store: Writable<boolean | null>, paused = false): void {
|
|
20
|
-
const providerReady = useChatHost().providerReady;
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (paused || !providerReady) return undefined;
|
|
23
|
-
let cancelled = false;
|
|
24
|
-
void providerReady()
|
|
25
|
-
.then((ready) => {
|
|
26
|
-
if (!cancelled) store.set(ready);
|
|
27
|
-
})
|
|
28
|
-
.catch(() => {
|
|
29
|
-
if (!cancelled) store.set(null);
|
|
30
|
-
});
|
|
31
|
-
return () => {
|
|
32
|
-
cancelled = true;
|
|
33
|
-
};
|
|
34
|
-
}, [paused, providerReady, store]);
|
|
35
|
-
}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The current run's counters in a component, from the host's `runs`
|
|
3
|
-
* (`createRunMeter` keeps them per session, outside React). The live
|
|
4
|
-
* counters tick about 4 times a second, so each hook reads one field: a
|
|
5
|
-
* reader re-renders only when its field changes, and keeps one subscription.
|
|
6
|
-
*/
|
|
7
|
-
import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
|
8
|
-
|
|
9
|
-
import type { ComposerRuns } from '../headless/composer/host-chrome';
|
|
10
|
-
import { EMPTY_RUN_METER, type RunMeterState } from '../headless/composer/run-meter';
|
|
11
|
-
import type { Readable } from '../headless/store';
|
|
12
|
-
import { useComposerHost } from './ComposerHostProvider';
|
|
13
|
-
|
|
14
|
-
const noSubscribe = () => () => undefined;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* One field of a session's run counters (`store`: `RunMeter.session(id)`, `null` for none).
|
|
18
|
-
*
|
|
19
|
-
* @param store - The session's counters.
|
|
20
|
-
* @param key - The field to read.
|
|
21
|
-
*/
|
|
22
|
-
export function useRunMeterValue<K extends keyof RunMeterState>(
|
|
23
|
-
store: Readable<RunMeterState> | null,
|
|
24
|
-
key: K,
|
|
25
|
-
): RunMeterState[K] {
|
|
26
|
-
const read = () => (store ? store.get() : EMPTY_RUN_METER)[key];
|
|
27
|
-
// Stable per store: a fresh function each render would unsubscribe and resubscribe on every progress tick.
|
|
28
|
-
const follow = useCallback((l: () => void) => (store ? store.subscribe(l) : noSubscribe()), [store]);
|
|
29
|
-
return useSyncExternalStore(follow, read, read);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function useSessionMeter(runs: ComposerRuns | undefined, sessionId: string | null): Readable<RunMeterState> | null {
|
|
33
|
-
return useMemo(() => (runs && sessionId ? runs.meter(sessionId) : null), [runs, sessionId]);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function useField<K extends keyof RunMeterState>(sessionId: string | null, key: K): RunMeterState[K] {
|
|
37
|
-
return useRunMeterValue(useSessionMeter(useComposerHost().runs, sessionId), key);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* The streaming parent turn's live counters, `null` between turns.
|
|
42
|
-
*
|
|
43
|
-
* @param sessionId - The session, `null` for none.
|
|
44
|
-
*/
|
|
45
|
-
export const useRunProgress = (sessionId: string | null) => useField(sessionId, 'progress');
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Output tokens of the run's settled parent turns.
|
|
49
|
-
*
|
|
50
|
-
* @param sessionId - The session, `null` for none.
|
|
51
|
-
*/
|
|
52
|
-
export const useRunOutputTokens = (sessionId: string | null) => useField(sessionId, 'outputTokens');
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Cost of turns settled since the last settling cost read.
|
|
56
|
-
*
|
|
57
|
-
* @param sessionId - The session, `null` for none.
|
|
58
|
-
*/
|
|
59
|
-
export const useRunAccruedCost = (sessionId: string | null) => useField(sessionId, 'accruedCost');
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* When the run started (epoch ms), `null` while this window knows of none.
|
|
63
|
-
*
|
|
64
|
-
* @param sessionId - The session, `null` for none.
|
|
65
|
-
*/
|
|
66
|
-
export const useRunStartedAt = (sessionId: string | null) => useField(sessionId, 'startedAt');
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* A running session this window did not see start (opened, reloaded or
|
|
70
|
-
* reconnected mid-run): reads its run from the host once (`runs.progress`),
|
|
71
|
-
* so the chip neither restarts its time nor counts its output from zero. A
|
|
72
|
-
* run whose `run:start` it saw counts from the start already.
|
|
73
|
-
*
|
|
74
|
-
* @param sessionId - The session, `null` for none.
|
|
75
|
-
* @param running - Whether it runs now.
|
|
76
|
-
*/
|
|
77
|
-
export function useJoinedRunProgress(sessionId: string | null, running: boolean): void {
|
|
78
|
-
const runs = useComposerHost().runs;
|
|
79
|
-
const store = useSessionMeter(runs, sessionId);
|
|
80
|
-
const generation = useRunMeterValue(store, 'generation');
|
|
81
|
-
const joined = useRunMeterValue(store, 'startedFrom') !== 'host';
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
if (!sessionId || !running || !joined || !runs?.progress) return undefined;
|
|
84
|
-
let cancelled = false;
|
|
85
|
-
// Best effort: unread, the chip counts from when this window saw the run.
|
|
86
|
-
runs.progress(sessionId).then(
|
|
87
|
-
(progress) => {
|
|
88
|
-
if (!cancelled && progress) runs.noteProgress?.(sessionId, generation, progress);
|
|
89
|
-
},
|
|
90
|
-
() => undefined,
|
|
91
|
-
);
|
|
92
|
-
return () => {
|
|
93
|
-
cancelled = true;
|
|
94
|
-
};
|
|
95
|
-
}, [runs, sessionId, running, joined, generation]);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Whole-second elapsed counter for the session's current run, from its start
|
|
100
|
-
* (the host's, so neither switching conversations nor opening a window
|
|
101
|
-
* restarts it). Ticks every `tickMs`: 250 ms by default so `0s → 1s` is not
|
|
102
|
-
* laggy, but renders once per second.
|
|
103
|
-
*
|
|
104
|
-
* @param sessionId - The session.
|
|
105
|
-
* @param running - Whether it runs now.
|
|
106
|
-
* @param tickMs - How often the clock is read.
|
|
107
|
-
* @param runsOverride - The run counters to read. Default: the host's `runs`.
|
|
108
|
-
*/
|
|
109
|
-
export function useRunElapsedSec(
|
|
110
|
-
sessionId: string,
|
|
111
|
-
running: boolean,
|
|
112
|
-
tickMs = 250,
|
|
113
|
-
runsOverride?: ComposerRuns,
|
|
114
|
-
): number {
|
|
115
|
-
const hostRuns = useComposerHost().runs;
|
|
116
|
-
const runs = runsOverride ?? hostRuns;
|
|
117
|
-
const startedAt = useRunMeterValue(useSessionMeter(runs, sessionId), 'startedAt');
|
|
118
|
-
const startedAtRef = useRef(startedAt);
|
|
119
|
-
// eslint-disable-next-line react-hooks/refs -- the interval reads the latest start without restarting
|
|
120
|
-
startedAtRef.current = startedAt;
|
|
121
|
-
const [now, setNow] = useState(() => Date.now());
|
|
122
|
-
useEffect(() => {
|
|
123
|
-
if (running) runs?.noteSeen?.(sessionId);
|
|
124
|
-
}, [runs, sessionId, running]);
|
|
125
|
-
useEffect(() => {
|
|
126
|
-
if (!running) return undefined;
|
|
127
|
-
// A tick that lands in the same whole second keeps the old state: the fine
|
|
128
|
-
// tick is for promptness at the boundary, not a render 4 times a second.
|
|
129
|
-
const sec = (t: number) => (startedAtRef.current === null ? 0 : Math.floor((t - startedAtRef.current) / 1000));
|
|
130
|
-
const tick = () => {
|
|
131
|
-
const t = Date.now();
|
|
132
|
-
setNow((prev) => (sec(prev) === sec(t) ? prev : t));
|
|
133
|
-
};
|
|
134
|
-
// eslint-disable-next-line react-hooks/set-state-in-effect -- the clock starts with the run
|
|
135
|
-
setNow(Date.now());
|
|
136
|
-
const id = window.setInterval(tick, tickMs);
|
|
137
|
-
return () => window.clearInterval(id);
|
|
138
|
-
}, [running, tickMs]);
|
|
139
|
-
return running && startedAt !== null ? Math.max(0, Math.floor((now - startedAt) / 1000)) : 0;
|
|
140
|
-
}
|